<?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>7012</bug_id>
          
          <creation_ts>2006-02-01 14:23:19 -0800</creation_ts>
          <short_desc>convert JavaScript objects to appropriate AppleScript types, instead of only strings</short_desc>
          <delta_ts>2006-02-07 09:01:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>7107</dependson>
          <blocked>10693</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="tim bates">timothy.c.bates</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>sullivan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>30999</commentid>
    <comment_count>0</comment_count>
    <who name="tim bates">timothy.c.bates</who>
    <bug_when>2006-02-01 14:23:19 -0800</bug_when>
    <thetext>The &quot;do javaScript&quot; AppleScript command for Safari currently fails to return anything that is not a string.

As access to the  Safari DOM via AppleScript is entirely restricted to calls to &quot;do javaScript&apos;, it would be a helpful convenience to enhance  this call by automatically coercing any non-string results to string, so that the user does not have to do this manually.

i.e., allow do javaScript &quot; document.getSelection; &quot; to return the selection as a string, rather than requiring the current workaround of

do javaScript &quot; document.getSelection + &apos;&apos; ; &quot;

In the case of javaScript lists, these should be coerced to applescript lists, same for records would be nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31030</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-02-01 22:10:30 -0800</bug_when>
    <thetext>Looks like this cannot be done entirely in open-source WebKit - Safari calls -[WebView stringByEvaluatingJavaScriptFromString:] to execute &quot;do JavaScript&quot;, so returning lists doesn&apos;t appear possible at the moment.

My suggestion is to add a method returning NSAppleEventDescriptor to WebView, and to make Safari call it. Does this sound right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31183</commentid>
    <comment_count>2</comment_count>
      <attachid>6223</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-02-03 11:51:58 -0800</bug_when>
    <thetext>Created attachment 6223
proposed patch

This adds conversion for Boolean, String, Number and Date, and implicitly calls toString() for unknown object types.

I am not sure if Array can really be converted to an AppleScript list reliably... JavaScript arrays can be sparse, associated, or even contain circular references (if I&apos;m not mistaken) - so, I don&apos;t see any straightforward (as in &quot;no surprises for the user&quot;) way to convert them, other than toString().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31189</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-02-03 12:17:26 -0800</bug_when>
    <thetext>A script that I used for testing:

tell application &quot;Safari&quot;
	do JavaScript &quot;new Boolean();&quot; in document 1
	do JavaScript &quot;2*2;&quot; in document 1
	do JavaScript &quot;2/3;&quot; in document 1
	do JavaScript &quot;&apos;a string&apos;&quot; in document 1
	do JavaScript &quot;new String(&apos;a string&apos;)&quot; in document 1
	do JavaScript &quot;new Date&quot; in document 1
	do JavaScript &quot;window.getSelection()&quot; in document 1
	do JavaScript &quot;window.getSelection() + \&quot;\&quot;&quot; in document 1
	do JavaScript &quot;function Polygon() {this.edges = 8;} new Polygon;&quot; in document 1
	do JavaScript &quot;new Array(1, 2, &apos;three&apos;);&quot; in document 1
end tell
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31207</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2006-02-03 14:47:28 -0800</bug_when>
    <thetext>Great idea! Coercing to list descriptors is easy to do using [NSAppleEventDescriptor listDescriptor] and insertDescriptor:atIndex:. Unfortunatly you can only make AppleScript records from dicrionaries with string keys if you drop down to Carbon to contruct them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31208</commentid>
    <comment_count>5</comment_count>
      <attachid>6223</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2006-02-03 14:51:43 -0800</bug_when>
    <thetext>Comment on attachment 6223
proposed patch

The patch looks good, only a few minor details.

I would fall back to always returning a string in the &quot;default&quot; case instead of the &quot;Unknown JavaScript type: %d&quot;, jsValue-&gt;type()&quot; error, unless this is never reached.

The WebView.h header can&apos;t be changed until we get the API approved. You will need to use WebViewPrivate.h for this interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31261</commentid>
    <comment_count>6</comment_count>
      <attachid>6237</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-02-04 00:51:49 -0800</bug_when>
    <thetext>Created attachment 6237
proposed patch

(In reply to comment #5)
&gt; I would fall back to always returning a string in the &quot;default&quot; case instead of
&gt; the &quot;Unknown JavaScript type: %d&quot;, jsValue-&gt;type()&quot; error, unless this is never
&gt; reached.

  Yes, it should be never reached - the switch has cases for all primitive JavaScript types (I think).

&gt; The WebView.h header can&apos;t be changed until we get the API approved. You will
&gt; need to use WebViewPrivate.h for this interface.

  Done.

&gt; Coercing to list descriptors is easy to do using
&gt; [NSAppleEventDescriptor listDescriptor] and insertDescriptor:atIndex:.

  Yes, that&apos;s easy - I just don&apos;t see how the end result should look like for non-trivial JavaScript arrays. And adding a conversion that only works &quot;most of the time&quot; is IMHO not a good idea...

  Still, one option to consider: only convert arrays that are not sparse, for which element indices start with zero, and don&apos;t descend into them recursively (to avoid circular references). What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31297</commentid>
    <comment_count>7</comment_count>
      <attachid>6237</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-04 08:33:58 -0800</bug_when>
    <thetext>Comment on attachment 6237
proposed patch

I&apos;d like Tim Hatcher to review this, but I have a comment:

I don&apos;t like having so much code copied and pasted out of JavaScriptCore. We should add a suitable function to JavaScriptCore that gets us the appropriate JSValue. It&apos;s fine for aeDescFromJSValue to convert from JSValue to AEDesc, but it shouldn&apos;t convert from, say, an object instance to a boolean as it does in the ObjectType case. We should create something on the JavaScriptCore side that converts to a boolean, number, or string, and also returns an &quot;isDate&quot; flag. Then the AE conversion can concentrate on things like converting the date format, etc.

This would prevent us from having to expose bool_object.h as a Private header and give us slightly better encapsulation for JavaScriptCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31339</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-02-04 10:47:03 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; This would prevent us from having to expose bool_object.h as a Private header
&gt; and give us slightly better encapsulation for JavaScriptCore.

Ouch, I thought that bool_object.h not being exposed was unintentional (the other *_object.h are already exposed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31377</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-04 16:50:02 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Ouch, I thought that bool_object.h not being exposed was unintentional (the
&gt; other *_object.h are already exposed).

On the one hand, it&apos;s not mportant that bool_object.h not be exposed. On the other hand, those are details I&apos;d prefer not be depended on by WebCore. I&apos;d like to study why those other headers are needed in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31435</commentid>
    <comment_count>10</comment_count>
      <attachid>6267</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-02-05 03:26:54 -0800</bug_when>
    <thetext>Created attachment 6267
proposed patch

Looks like I was doing the object-&gt;value convertion in a needlessly complex way, and toPrimitive() already takes care of this stuff. However, I don&apos;t really see where an isDate flag could be added, and if it would be less of an implementation detail than DateInstance::info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31436</commentid>
    <comment_count>11</comment_count>
      <attachid>6267</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-05 03:55:51 -0800</bug_when>
    <thetext>Comment on attachment 6267
proposed patch

Please don&apos;t put a copy of tryGetAndCallProperty into WebCore. And if you feel you must put a copy of it there, use ALWAYS_INLINE, not another copy of that ifdef. Since you&apos;re using this specifically just to get a number, the function can be simplified to handle just that case and leave out the type() stuff. The code really needs to check exceptions, and not look at the return value if there&apos;s an exception, so it&apos;s a pasted copy of incorrect code!

I think it&apos;s reasonable for some file in JavaScriptCore to provide a function that gives you a date as a number or pair of numbers, and a boolean that tells you whether it&apos;s a date, in a way analogous to functions like getString(), rather than digging it out with multiple function calls to the date object.

On a separate note, one way to recognize the date class is by its class name, which would avoid the need to include DateInstance and link to DateInstance::info. You can just say if o-&gt;className() == &quot;Date&quot;.

How are you testing this function? I think we need to hook this up to DumpRenderTree so we can test that it&apos;s working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31446</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-02-05 06:00:41 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; How are you testing this function? I think we need to hook this up to
&gt; DumpRenderTree so we can test that it&apos;s working.

I just had some custom code for debugging. Using DumpRenderTree is indeed so much better; I&apos;ve added code for this and a test - will be available in the next revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31610</commentid>
    <comment_count>13</comment_count>
      <attachid>6296</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-02-06 11:53:11 -0800</bug_when>
    <thetext>Created attachment 6296
proposed patch

Besides the already discussed improvements, changed the way how milliseconds are converted to LongDateTime - the new code works for dates in the past, where POSIX and Mac date routines disagree about time zone handling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31646</commentid>
    <comment_count>14</comment_count>
      <attachid>6296</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2006-02-06 17:27:26 -0800</bug_when>
    <thetext>Comment on attachment 6296
proposed patch

Good idea about the LayoutTests. This looks good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31728</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-02-07 09:01:54 -0800</bug_when>
    <thetext>Tweaked the date test when landing - made it timezone-agnostic.

Filed an enchancement request for Safari to use this new API: &lt;rdar://4435959&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6223</attachid>
            <date>2006-02-03 11:51:58 -0800</date>
            <delta_ts>2006-02-04 00:51:49 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>7012r1_patch.txt</filename>
            <type>text/plain</type>
            <size>10066</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgJKHJldmlzaW9uIDEy
NTMwKQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjksNiArMzI5LDcgQEAgdHlwZWRlZiBlbnVtCiAKIC0gKE5TU3RyaW5nICop
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
OwogLSAoTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcgZm9yY2VVc2VyR2VzdHVyZTooQk9PTClmb3JjZVVzZXJHZXN0dXJl
OworLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKIAogLSAoRE9NRG9jdW1lbnQgKilET01E
b2N1bWVudDsKIC0gKERPTUhUTUxFbGVtZW50ICopZnJhbWVFbGVtZW50OwpJbmRleDogV2ViQ29y
ZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAxMjUzMCkKKysrIFdl
YkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAg
LTg2LDYgKzg2LDEwIEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9qbmlfanNvYmplY3QuaD4K
ICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL25wcnVudGltZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvb2JqZWN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9ib29sX29iamVjdC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvZGF0ZV9vYmplY3QuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL251bWJlcl9vYmplY3QuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL3N0cmluZ19v
YmplY3QuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL3Byb3BlcnR5X21hcC5oPgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvcnVudGltZV9yb290Lmg+CiAjaW1wb3J0IDxreG1sY29yZS9Bc3Nl
cnRpb25zLmg+CkBAIC0xMDMsNiArMTA3LDIyIEBAIHVzaW5nIEtKUzo6SlNWYWx1ZTsKIHVzaW5n
IEtKUzo6U2F2ZWRQcm9wZXJ0aWVzOwogdXNpbmcgS0pTOjpTYXZlZEJ1aWx0aW5zOwogdXNpbmcg
S0pTOjpXaW5kb3c7Cit1c2luZyBLSlM6OkJvb2xlYW5UeXBlOwordXNpbmcgS0pTOjpTdHJpbmdU
eXBlOwordXNpbmcgS0pTOjpOdW1iZXJUeXBlOwordXNpbmcgS0pTOjpPYmplY3RUeXBlOwordXNp
bmcgS0pTOjpVbnNwZWNpZmllZFR5cGU7Cit1c2luZyBLSlM6OlVuZGVmaW5lZFR5cGU7Cit1c2lu
ZyBLSlM6Ok51bGxUeXBlOwordXNpbmcgS0pTOjpHZXR0ZXJTZXR0ZXJUeXBlOwordXNpbmcgS0pT
OjpVU3RyaW5nOwordXNpbmcgS0pTOjpJZGVudGlmaWVyOwordXNpbmcgS0pTOjpMaXN0OwordXNp
bmcgS0pTOjpUeXBlOwordXNpbmcgS0pTOjpCb29sZWFuSW5zdGFuY2U7Cit1c2luZyBLSlM6OkRh
dGVJbnN0YW5jZTsKK3VzaW5nIEtKUzo6TnVtYmVySW5zdGFuY2U7Cit1c2luZyBLSlM6OlN0cmlu
Z0luc3RhbmNlOwogCiB1c2luZyBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0OwogCkBAIC0xODUs
NiArMjA1LDk1IEBAIHN0YXRpYyBCT09MIGlzQ2FzZVNlbnNpdGl2ZUVxdWFsKE5TU3RyaW4KICAg
ICByZXR1cm4gW2EgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpiXSA9PSBOU09yZGVyZWRTYW1lOwog
fQogCitzdGF0aWMgaW5saW5lCisjaWZkZWYgX19HTlVDX18KK19fYXR0cmlidXRlX18oKGFsd2F5
c19pbmxpbmUpKQorI2VuZGlmCitKU1ZhbHVlICp0cnlHZXRBbmRDYWxsUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBKU09iamVjdCAqb2JqZWN0LCBjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eU5hbWUpIAoreworICBKU1ZhbHVlICp2ID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlO
YW1lKTsKKyAgaWYgKHYtPmlzT2JqZWN0KCkpIHsKKyAgICBKU09iamVjdCAqbyA9IHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4odik7CisgICAgaWYgKG8tPmltcGxlbWVudHNDYWxsKCkpIHsgLy8gc3Bl
YyBzYXlzICJub3QgcHJpbWl0aXZlIHR5cGUiIGJ1dCAuLi4KKyAgICAgIEpTT2JqZWN0ICp0aGlz
T2JqID0gY29uc3RfY2FzdDxKU09iamVjdCo+KG9iamVjdCk7CisgICAgICBKU1ZhbHVlICpkZWYg
PSBvLT5jYWxsKGV4ZWMsIHRoaXNPYmosIExpc3Q6OmVtcHR5KCkpOworICAgICAgVHlwZSBkZWZU
eXBlID0gZGVmLT50eXBlKCk7CisgICAgICBpZiAoZGVmVHlwZSA9PSBVbnNwZWNpZmllZFR5cGUg
fHwgZGVmVHlwZSA9PSBVbmRlZmluZWRUeXBlIHx8CisgICAgICAgICAgZGVmVHlwZSA9PSBOdWxs
VHlwZSB8fCBkZWZUeXBlID09IEJvb2xlYW5UeXBlIHx8CisgICAgICAgICAgZGVmVHlwZSA9PSBT
dHJpbmdUeXBlIHx8IGRlZlR5cGUgPT0gTnVtYmVyVHlwZSkgeworICAgICAgICByZXR1cm4gZGVm
OworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIE5TQXBw
bGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSoganNWYWx1ZSkKK3sKKyAgICBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2MgPSAw
OworICAgIHN3aXRjaCAoanNWYWx1ZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgQm9vbGVhblR5
cGU6IHsKKyAgICAgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAgICAgICBqc1ZhbHVlLT5nZXRC
b29sZWFuKHZhbHVlKTsKKyAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlw
dG9yIGRlc2NyaXB0b3JXaXRoQm9vbGVhbjp2YWx1ZV07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFN0cmluZ1R5cGU6IHsKKyAgICAgICAgICAgIFVTdHJpbmcg
dmFsdWUgPSBqc1ZhbHVlLT5nZXRTdHJpbmcoKTsKKyAgICAgICAgICAgIE5TU3RyaW5nKiBzdHIg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bmljaGFyICo+KHZhbHVlLmRhdGEoKSkgbGVuZ3RoOnZhbHVlLnNpemUoKV07CisgICAgICAgICAg
ICBhZURlc2MgPSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlwdG9yV2l0aFN0cmluZzpz
dHJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOdW1iZXJU
eXBlOiB7CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBqc1ZhbHVlLT5nZXROdW1iZXIoKTsK
KyAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3JX
aXRoRGVzY3JpcHRvclR5cGU6dHlwZUlFRUU2NEJpdEZsb2F0aW5nUG9pbnQgYnl0ZXM6JnZhbHVl
IGxlbmd0aDpzaXplb2YodmFsdWUpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgT2JqZWN0VHlwZTogeworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGpzVmFsdWUtPmdldE9iamVjdCgpOworICAgICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMo
JkRhdGVJbnN0YW5jZTo6aW5mbykpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgc2Vjb25kcyA9
IDA7CisgICAgICAgICAgICAgICAgZG91YmxlIHR6T2Zmc2V0ID0gMDsKKworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgKnYgPSB0cnlHZXRBbmRDYWxsUHJvcGVydHkoZXhlYywgb2JqZWN0LCAiZ2V0
VGltZXpvbmVPZmZzZXQiKTsKKyAgICAgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAg
ICAgICAgICB0ek9mZnNldCA9IHYtPmdldE51bWJlcigpICogNjA7CisKKyAgICAgICAgICAgICAg
ICAgICAgdiA9IHRyeUdldEFuZENhbGxQcm9wZXJ0eShleGVjLCBvYmplY3QsICJ2YWx1ZU9mIik7
CisgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWNvbmRzID0gdi0+Z2V0TnVtYmVyKCkgLyAxMDAwOworICAgICAgICAgICAgICAgICAgICAgICAg
c2Vjb25kcyArPSBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTkwNCAtIGtDRkFic29sdXRl
VGltZUludGVydmFsU2luY2UxOTcwIC0gdHpPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBMb25nRGF0ZVRpbWUgbGR0ID0gc3RhdGljX2Nhc3Q8TG9u
Z0RhdGVUaW1lPihzZWNvbmRzKTsKKyAgICAgICAgICAgICAgICAgICAgYWVEZXNjID0gW05TQXBw
bGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhEZXNjcmlwdG9yVHlwZTp0eXBlTG9uZ0Rh
dGVUaW1lIGJ5dGVzOiZsZHQgbGVuZ3RoOnNpemVvZihsZHQpXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkJvb2xlYW5JbnN0YW5j
ZTo6aW5mbykgfHwgb2JqZWN0LT5pbmhlcml0cygmTnVtYmVySW5zdGFuY2U6OmluZm8pIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+aW5oZXJpdHMoJlN0cmluZ0luc3RhbmNlOjpp
bmZvKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShleGVjLCBv
YmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFhZURlc2MpIHsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHN0clZh
bHVlID0gb2JqZWN0LT50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBOU1N0cmluZyog
c3RyID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5pY2hhcio+KHN0clZhbHVlLmRhdGEoKSkgbGVuZ3RoOnN0clZhbHVlLnNpemUoKV07Cisg
ICAgICAgICAgICAgICAgYWVEZXNjID0gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRv
cldpdGhTdHJpbmc6c3RyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFUlJPUigiVW5rbm93biBKYXZh
U2NyaXB0IHR5cGU6ICVkIiwganNWYWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIC8vIG5vIGJy
ZWFrOworICAgICAgICBjYXNlIFVuc3BlY2lmaWVkVHlwZToKKyAgICAgICAgY2FzZSBVbmRlZmlu
ZWRUeXBlOgorICAgICAgICBjYXNlIE51bGxUeXBlOgorICAgICAgICBjYXNlIEdldHRlclNldHRl
clR5cGU6CisgICAgICAgICAgICBhZURlc2MgPSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBudWxs
RGVzY3JpcHRvcl07CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGFlRGVzYzsKK30KKwogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVGcmFtZUJyaWRnZQogCiBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZE9iamVjdENhY2hlU2l6ZSA9IGZhbHNlOwpAQCAtMTQ2Nyw2ICsx
NTc2LDE2IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBy
ZXR1cm4gcmVzdWx0LT5nZXRTdHJpbmcoKS5kb21TdHJpbmcoKTsKIH0KIAorLSAoTlNBcHBsZUV2
ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihO
U1N0cmluZyAqKXN0cmluZworeworICAgIG1fZnJhbWUtPmNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsK
KyAgICBKU1ZhbHVlKiByZXN1bHQgPSBtX2ZyYW1lLT5leGVjdXRlU2NyaXB0KDAsIFFTdHJpbmc6
OmZyb21OU1N0cmluZyhzdHJpbmcpLCB0cnVlKTsKKyAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6
IHBhc3MgZXJyb3JzCisgICAgICAgIHJldHVybiAwOworICAgIEpTTG9jayBsb2NrOworICAgIHJl
dHVybiBhZURlc2NGcm9tSlNWYWx1ZShtX2ZyYW1lLT5qU2NyaXB0KCktPmludGVycHJldGVyKCkt
Pmdsb2JhbEV4ZWMoKSwgcmVzdWx0KTsKK30KKwogLSAoV2ViU2NyaXB0T2JqZWN0ICopd2luZG93
U2NyaXB0T2JqZWN0CiB7CiAgICAgcmV0dXJuIG1fZnJhbWUtPndpbmRvd1NjcmlwdE9iamVjdCgp
OwpJbmRleDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3LmgJKHJldmlzaW9uIDEyNTMwKQorKysgV2Vi
S2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0
MDAsMTMgQEAgZXh0ZXJuIE5TU3RyaW5nICpXZWJWaWV3UHJvZ3Jlc3NGaW5pc2hlZAogLSAoTlNT
dHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNTdHJpbmcg
KilzY3JpcHQ7CiAKIC8qIQorICAgIEBtZXRob2QgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dEZyb21TdHJpbmc6CisgICAgQHBhcmFtIHNjcmlwdCBUaGUgdGV4dCBvZiB0aGUgSmF2YVNjcmlw
dC4KKyAgICBAcmVzdWx0IFRoZSByZXN1bHQgb2YgdGhlIHNjcmlwdCwgY29udmVydGVkIHRvIGFu
IE5TQXBwbGVFdmVudERlc2NyaXB0b3IsIG9yIG5pbCBmb3IgZmFpbHVyZS4KKyovCistIChOU0Fw
cGxlRXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmc6KE5TU3RyaW5nICopc2NyaXB0OworCisvKiEKICAgICBAbWV0aG9kIHdpbmRvd1NjcmlwdE9i
amVjdAogICAgIEBkaXNjdXNzaW9uIHdpbmRvd1NjcmlwdE9iamVjdCByZXR1cm4gYSBXZWJTY3Jp
cHRPYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZQogICAgIHdpbmRvdyBvYmplY3QgZnJvbSB0aGUg
c2NyaXB0IGVudmlyb25tZW50LgpJbmRleDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3
Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3Lm0JKHJldmlz
aW9uIDEyNTMwKQorKysgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3Lm0JKHdvcmtpbmcg
Y29weSkKQEAgLTIwMTMsNiArMjAxMywxMSBAQCBOU19FTkRIQU5ETEVSCiAgICAgcmV0dXJuIFtb
W3NlbGYgbWFpbkZyYW1lXSBfYnJpZGdlXSBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJv
bVN0cmluZzpzY3JpcHRdOwogfQogCistIChOU0FwcGxlRXZlbnREZXNjcmlwdG9yICopYWVEZXNj
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc2NyaXB0Cit7Cisg
ICAgcmV0dXJuIFtbW3NlbGYgbWFpbkZyYW1lXSBfYnJpZGdlXSBhZURlc2NCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0RnJvbVN0cmluZzpzY3JpcHRdOworfQorCiAtIChXZWJTY3JpcHRPYmplY3QgKil3
aW5kb3dTY3JpcHRPYmplY3QKIHsKICAgICByZXR1cm4gW1tbc2VsZiBtYWluRnJhbWVdIF9icmlk
Z2VdIHdpbmRvd1NjcmlwdE9iamVjdF07CkluZGV4OiBXZWJLaXQvUHVibGljSGVhZGVyQ2hhbmdl
c0Zyb21UaWdlci50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1B1YmxpY0hlYWRlckNoYW5nZXNG
cm9tVGlnZXIudHh0CShyZXZpc2lvbiAxMjUzMCkKKysrIFdlYktpdC9QdWJsaWNIZWFkZXJDaGFu
Z2VzRnJvbVRpZ2VyLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDExIEBAIFRoaXMgZmls
ZSBsaXN0cyBjaGFuZ2VzIHRvIFdlYktpdCBwdWJsaWMKIFdoZW4geW91IG1ha2UgY2hhbmdlcyB0
byBwdWJsaWMgaGVhZGVyIGZpbGVzLCBwbGVhc2UgdXBkYXRlIHRoaXMgZmlsZSwgaW4gdGhlIHNh
bWUgZ2VuZXJhbCBzdHlsZSBhcyB0aGUgQ2hhbmdlTG9nIGZpbGUgKG5ldyBlbnRyaWVzIGF0IHRv
cCkuCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisy
MDA2LTAyLVhYICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlwb3AuY29tPgorCitBZGRlZCAt
W1dlYlZpZXcgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6XSAtIHRvIGJl
IHVzZWQgaW4gU2FmYXJpJ3MgImRvIEphdmFTY3JpcHQiIAorQXBwbGVTY3JpcHQgY29tbWFuZC4K
KwogMjAwNS0wOC0wMSAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNvbT4KIAogUmVt
b3ZlZCAtW0RPTUhUTUxJbnB1dEVsZW1lbnQgaXNUZXh0RmllbGRdIGZyb20gRE9NRXh0ZW5zaW9u
cy5oLiBJIGNoYW5nZWQgaXQgdG8gX2lzVGV4dEZpZWxkIGFuZCBwdXQgaXQgaW4KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTI1MzApCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAKIAkJOTMyRjVCNkYwODIyQTFDNzAwNzM2OTc1IC8qIGpuaV91dGlsaXR5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg1NkQ5MDA1NjJF
RTk1MDA4QjlEODMgLyogam5pX3V0aWxpdHkuaCAqLzsgfTsKIAkJOTMyRjVCNzAwODIyQTFDNzAw
NzM2OTc1IC8qIHJ1bnRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMUIwODcwMDU2NDY4NzMwMDgwRTQ4NiAvKiBydW50aW1lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMyRjVCNzEwODIyQTFD
NzAwNzM2OTc1IC8qIGpuaV9ydW50aW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTFCMDg3NjA1NjQ2OEJCMDA4MEU0ODYgLyogam5pX3J1bnRpbWUu
aCAqLzsgfTsKLQkJOTMyRjVCNzIwODIyQTFDNzAwNzM2OTc1IC8qIGJvb2xfb2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDRGRDM1MzA1Njk3
RTZEMDAzREJFRDkgLyogYm9vbF9vYmplY3QuaCAqLzsgfTsKKwkJOTMyRjVCNzIwODIyQTFDNzAw
NzM2OTc1IC8qIGJvb2xfb2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MDRGRDM1MzA1Njk3RTZEMDAzREJFRDkgLyogYm9vbF9vYmplY3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzJGNUI3
MzA4MjJBMUM3MDA3MzY5NzUgLyogcnVudGltZV9vYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwQjE2QTI3MDU2OUExMDkwMERCNzU2RCAvKiBy
dW50aW1lX29iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzMkY1Qjc0MDgyMkExQzcwMDczNjk3NSAvKiBqbmlfY2xhc3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0Q1MkREMDU2QkYyRjYw
MDM4NTFCRCAvKiBqbmlfY2xhc3MuaCAqLzsgfTsKIAkJOTMyRjVCNzUwODIyQTFDNzAwNzM2OTc1
IC8qIGpuaV9pbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE3RDUzNDgwNTZCRkI1RDAwMzg1MUJEIC8qIGpuaV9pbnN0YW5jZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Cg==
</data>
<flag name="review"
          id="1499"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6237</attachid>
            <date>2006-02-04 00:51:49 -0800</date>
            <delta_ts>2006-02-05 03:26:54 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>7012r2_patch.txt</filename>
            <type>text/plain</type>
            <size>8991</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI1NTQpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEsNyArMTAxLDcgQEAKIAkJOTMyRjVCNkYwODIyQTFDNzAwNzM2OTc1IC8qIGpuaV91dGls
aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg1
NkQ5MDA1NjJFRTk1MDA4QjlEODMgLyogam5pX3V0aWxpdHkuaCAqLzsgfTsKIAkJOTMyRjVCNzAw
ODIyQTFDNzAwNzM2OTc1IC8qIHJ1bnRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUIwODcwMDU2NDY4NzMwMDgwRTQ4NiAvKiBydW50aW1lLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMyRjVC
NzEwODIyQTFDNzAwNzM2OTc1IC8qIGpuaV9ydW50aW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFCMDg3NjA1NjQ2OEJCMDA4MEU0ODYgLyogam5p
X3J1bnRpbWUuaCAqLzsgfTsKLQkJOTMyRjVCNzIwODIyQTFDNzAwNzM2OTc1IC8qIGJvb2xfb2Jq
ZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDRG
RDM1MzA1Njk3RTZEMDAzREJFRDkgLyogYm9vbF9vYmplY3QuaCAqLzsgfTsKKwkJOTMyRjVCNzIw
ODIyQTFDNzAwNzM2OTc1IC8qIGJvb2xfb2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDRGRDM1MzA1Njk3RTZEMDAzREJFRDkgLyogYm9vbF9v
YmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5MzJGNUI3MzA4MjJBMUM3MDA3MzY5NzUgLyogcnVudGltZV9vYmplY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwQjE2QTI3MDU2OUExMDkwMERC
NzU2RCAvKiBydW50aW1lX29iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzMkY1Qjc0MDgyMkExQzcwMDczNjk3NSAvKiBqbmlfY2xhc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0Q1MkRE
MDU2QkYyRjYwMDM4NTFCRCAvKiBqbmlfY2xhc3MuaCAqLzsgfTsKIAkJOTMyRjVCNzUwODIyQTFD
NzAwNzM2OTc1IC8qIGpuaV9pbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE3RDUzNDgwNTZCRkI1RDAwMzg1MUJEIC8qIGpuaV9pbnN0YW5j
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkluZGV4OiBXZWJLaXQv
V2ViVmlldy5zdWJwcm9qL1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dl
YlZpZXcuc3VicHJvai9XZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAxMjU1NCkKKysrIFdlYktp
dC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDYgKzExNywxMyBAQCB0eXBlZGVmIGVudW0gewogCiAtIChCT09MKXNob3VsZENsb3NlOwogCisv
KiEKKyAgICBAbWV0aG9kIGFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOgor
ICAgIEBwYXJhbSBzY3JpcHQgVGhlIHRleHQgb2YgdGhlIEphdmFTY3JpcHQuCisgICAgQHJlc3Vs
dCBUaGUgcmVzdWx0IG9mIHRoZSBzY3JpcHQsIGNvbnZlcnRlZCB0byBhbiBOU0FwcGxlRXZlbnRE
ZXNjcmlwdG9yLCBvciBuaWwgZm9yIGZhaWx1cmUuCisqLworLSAoTlNBcHBsZUV2ZW50RGVzY3Jp
cHRvciAqKWFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAq
KXNjcmlwdDsKKwogQGVuZAogCiBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlByaXZhdGUpCkluZGV4
OiBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXcubQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
V2ViVmlldy5zdWJwcm9qL1dlYlZpZXcubQkocmV2aXNpb24gMTI1NTQpCisrKyBXZWJLaXQvV2Vi
Vmlldy5zdWJwcm9qL1dlYlZpZXcubQkod29ya2luZyBjb3B5KQpAQCAtMjY3Miw2ICsyNjcyLDEx
IEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUKICAgICByZXR1cm4g
W2JyaWRnZSBzaG91bGRDbG9zZV07CiB9CiAKKy0gKE5TQXBwbGVFdmVudERlc2NyaXB0b3IgKilh
ZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzY3JpcHQK
K3sKKyAgICByZXR1cm4gW1tbc2VsZiBtYWluRnJhbWVdIF9icmlkZ2VdIGFlRGVzY0J5RXZhbHVh
dGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOnNjcmlwdF07Cit9CisKIEBlbmQKIAogQGltcGxlbWVu
dGF0aW9uIFdlYlZpZXcgKFdlYlZpZXdQcmludGluZ1ByaXZhdGUpCkluZGV4OiBXZWJDb3JlL2Jy
aWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlk
Z2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCShyZXZpc2lvbiAxMjU1NCkKKysrIFdlYkNvcmUv
YnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDYg
KzMyOSw3IEBAIHR5cGVkZWYgZW51bQogCiAtIChOU1N0cmluZyAqKXN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKIC0gKE5TU3RyaW5nICop
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
IGZvcmNlVXNlckdlc3R1cmU6KEJPT0wpZm9yY2VVc2VyR2VzdHVyZTsKKy0gKE5TQXBwbGVFdmVu
dERlc2NyaXB0b3IgKilhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmc7CiAKIC0gKERPTURvY3VtZW50ICopRE9NRG9jdW1lbnQ7CiAtIChET01I
VE1MRWxlbWVudCAqKWZyYW1lRWxlbWVudDsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJD
b3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNv
cmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMTI1NTQpCisrKyBXZWJDb3JlL2JyaWRnZS9tYWMv
V2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4NiwxMCBAQAog
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvam5pX2pzb2JqZWN0Lmg+CiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9ucHJ1bnRpbWUuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL29iamVjdC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvYm9vbF9vYmplY3QuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL2RhdGVfb2JqZWN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9udW1iZXJfb2Jq
ZWN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9zdHJpbmdfb2JqZWN0Lmg+CiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9wcm9wZXJ0eV9tYXAuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWVfcm9vdC5oPgogI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgpAQCAtMTAz
LDYgKzEwNywyMiBAQCB1c2luZyBLSlM6OkpTVmFsdWU7CiB1c2luZyBLSlM6OlNhdmVkUHJvcGVy
dGllczsKIHVzaW5nIEtKUzo6U2F2ZWRCdWlsdGluczsKIHVzaW5nIEtKUzo6V2luZG93OwordXNp
bmcgS0pTOjpCb29sZWFuVHlwZTsKK3VzaW5nIEtKUzo6U3RyaW5nVHlwZTsKK3VzaW5nIEtKUzo6
TnVtYmVyVHlwZTsKK3VzaW5nIEtKUzo6T2JqZWN0VHlwZTsKK3VzaW5nIEtKUzo6VW5zcGVjaWZp
ZWRUeXBlOwordXNpbmcgS0pTOjpVbmRlZmluZWRUeXBlOwordXNpbmcgS0pTOjpOdWxsVHlwZTsK
K3VzaW5nIEtKUzo6R2V0dGVyU2V0dGVyVHlwZTsKK3VzaW5nIEtKUzo6VVN0cmluZzsKK3VzaW5n
IEtKUzo6SWRlbnRpZmllcjsKK3VzaW5nIEtKUzo6TGlzdDsKK3VzaW5nIEtKUzo6VHlwZTsKK3Vz
aW5nIEtKUzo6Qm9vbGVhbkluc3RhbmNlOwordXNpbmcgS0pTOjpEYXRlSW5zdGFuY2U7Cit1c2lu
ZyBLSlM6Ok51bWJlckluc3RhbmNlOwordXNpbmcgS0pTOjpTdHJpbmdJbnN0YW5jZTsKIAogdXNp
bmcgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdDsKIApAQCAtMTg1LDYgKzIwNSw5NSBAQCBzdGF0
aWMgQk9PTCBpc0Nhc2VTZW5zaXRpdmVFcXVhbChOU1N0cmluCiAgICAgcmV0dXJuIFthIGNhc2VJ
bnNlbnNpdGl2ZUNvbXBhcmU6Yl0gPT0gTlNPcmRlcmVkU2FtZTsKIH0KIAorc3RhdGljIGlubGlu
ZQorI2lmZGVmIF9fR05VQ19fCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNlbmRp
ZgorSlNWYWx1ZSAqdHJ5R2V0QW5kQ2FsbFByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SlNPYmplY3QgKm9iamVjdCwgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSAKK3sKKyAg
SlNWYWx1ZSAqdiA9IG9iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgIGlmICh2LT5p
c09iamVjdCgpKSB7CisgICAgSlNPYmplY3QgKm8gPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYp
OworICAgIGlmIChvLT5pbXBsZW1lbnRzQ2FsbCgpKSB7IC8vIHNwZWMgc2F5cyAibm90IHByaW1p
dGl2ZSB0eXBlIiBidXQgLi4uCisgICAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8
SlNPYmplY3QqPihvYmplY3QpOworICAgICAgSlNWYWx1ZSAqZGVmID0gby0+Y2FsbChleGVjLCB0
aGlzT2JqLCBMaXN0OjplbXB0eSgpKTsKKyAgICAgIFR5cGUgZGVmVHlwZSA9IGRlZi0+dHlwZSgp
OworICAgICAgaWYgKGRlZlR5cGUgPT0gVW5zcGVjaWZpZWRUeXBlIHx8IGRlZlR5cGUgPT0gVW5k
ZWZpbmVkVHlwZSB8fAorICAgICAgICAgIGRlZlR5cGUgPT0gTnVsbFR5cGUgfHwgZGVmVHlwZSA9
PSBCb29sZWFuVHlwZSB8fAorICAgICAgICAgIGRlZlR5cGUgPT0gU3RyaW5nVHlwZSB8fCBkZWZU
eXBlID09IE51bWJlclR5cGUpIHsKKyAgICAgICAgcmV0dXJuIGRlZjsKKyAgICAgIH0KKyAgICB9
CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9y
KiBhZURlc2NGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGpzVmFsdWUpCit7
CisgICAgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjID0gMDsKKyAgICBzd2l0Y2ggKGpz
VmFsdWUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEJvb2xlYW5UeXBlOiB7CisgICAgICAgICAg
ICBib29sIHZhbHVlOworICAgICAgICAgICAganNWYWx1ZS0+Z2V0Qm9vbGVhbih2YWx1ZSk7Cisg
ICAgICAgICAgICBhZURlc2MgPSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlwdG9yV2l0
aEJvb2xlYW46dmFsdWVdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBTdHJpbmdUeXBlOiB7CisgICAgICAgICAgICBVU3RyaW5nIHZhbHVlID0ganNWYWx1ZS0+
Z2V0U3RyaW5nKCk7CisgICAgICAgICAgICBOU1N0cmluZyogc3RyID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhDaGFyYWN0ZXJzOnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5pY2hhciAqPih2YWx1ZS5k
YXRhKCkpIGxlbmd0aDp2YWx1ZS5zaXplKCldOworICAgICAgICAgICAgYWVEZXNjID0gW05TQXBw
bGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhTdHJpbmc6c3RyXTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTnVtYmVyVHlwZTogeworICAgICAgICAg
ICAgZG91YmxlIHZhbHVlID0ganNWYWx1ZS0+Z2V0TnVtYmVyKCk7CisgICAgICAgICAgICBhZURl
c2MgPSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlwdG9yV2l0aERlc2NyaXB0b3JUeXBl
OnR5cGVJRUVFNjRCaXRGbG9hdGluZ1BvaW50IGJ5dGVzOiZ2YWx1ZSBsZW5ndGg6c2l6ZW9mKHZh
bHVlKV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE9iamVj
dFR5cGU6IHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc1ZhbHVlLT5nZXRPYmpl
Y3QoKTsKKyAgICAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIHNlY29uZHMgPSAwOworICAgICAgICAgICAg
ICAgIGRvdWJsZSB0ek9mZnNldCA9IDA7CisKKyAgICAgICAgICAgICAgICBKU1ZhbHVlICp2ID0g
dHJ5R2V0QW5kQ2FsbFByb3BlcnR5KGV4ZWMsIG9iamVjdCwgImdldFRpbWV6b25lT2Zmc2V0Iik7
CisgICAgICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICAgICAgdHpPZmZzZXQg
PSB2LT5nZXROdW1iZXIoKSAqIDYwOworCisgICAgICAgICAgICAgICAgICAgIHYgPSB0cnlHZXRB
bmRDYWxsUHJvcGVydHkoZXhlYywgb2JqZWN0LCAidmFsdWVPZiIpOworICAgICAgICAgICAgICAg
ICAgICBpZiAodikgeworICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHYtPmdldE51
bWJlcigpIC8gMTAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHMgKz0ga0NGQWJz
b2x1dGVUaW1lSW50ZXJ2YWxTaW5jZTE5MDQgLSBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNl
MTk3MCAtIHR6T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgTG9uZ0RhdGVUaW1lIGxkdCA9IHN0YXRpY19jYXN0PExvbmdEYXRlVGltZT4oc2Vjb25k
cyk7CisgICAgICAgICAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlwdG9y
IGRlc2NyaXB0b3JXaXRoRGVzY3JpcHRvclR5cGU6dHlwZUxvbmdEYXRlVGltZSBieXRlczombGR0
IGxlbmd0aDpzaXplb2YobGR0KV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZCb29sZWFuSW5zdGFuY2U6OmluZm8pIHx8IG9iamVj
dC0+aW5oZXJpdHMoJk51bWJlckluc3RhbmNlOjppbmZvKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3QtPmluaGVyaXRzKCZTdHJpbmdJbnN0YW5jZTo6aW5mbykpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYWVEZXNjRnJvbUpTVmFsdWUoZXhlYywgb2JqZWN0LT50b1ByaW1pdGl2
ZShleGVjKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
YWVEZXNjKSB7CisgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJWYWx1ZSA9IG9iamVjdC0+dG9T
dHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcqIHN0ciA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoQ2hhcmFjdGVyczpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuaWNoYXIqPihzdHJW
YWx1ZS5kYXRhKCkpIGxlbmd0aDpzdHJWYWx1ZS5zaXplKCldOworICAgICAgICAgICAgICAgIGFl
RGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoU3RyaW5nOnN0cl07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgRVJST1IoIlVua25vd24gSmF2YVNjcmlwdCB0eXBlOiAlZCIs
IGpzVmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAvLyBubyBicmVhazsKKyAgICAgICAgY2Fz
ZSBVbnNwZWNpZmllZFR5cGU6CisgICAgICAgIGNhc2UgVW5kZWZpbmVkVHlwZToKKyAgICAgICAg
Y2FzZSBOdWxsVHlwZToKKyAgICAgICAgY2FzZSBHZXR0ZXJTZXR0ZXJUeXBlOgorICAgICAgICAg
ICAgYWVEZXNjID0gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgbnVsbERlc2NyaXB0b3JdOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBhZURlc2M7Cit9CisKIEBp
bXBsZW1lbnRhdGlvbiBXZWJDb3JlRnJhbWVCcmlkZ2UKIAogc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZWRPYmplY3RDYWNoZVNpemUgPSBmYWxzZTsKQEAgLTE0NjcsNiArMTU3NiwxNiBAQCBzdGF0aWMg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgcmV0dXJuIHJlc3VsdC0+Z2V0
U3RyaW5nKCkuZG9tU3RyaW5nKCk7CiB9CiAKKy0gKE5TQXBwbGVFdmVudERlc2NyaXB0b3IgKilh
ZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcK
K3sKKyAgICBtX2ZyYW1lLT5jcmVhdGVFbXB0eURvY3VtZW50KCk7CisgICAgSlNWYWx1ZSogcmVz
dWx0ID0gbV9mcmFtZS0+ZXhlY3V0ZVNjcmlwdCgwLCBRU3RyaW5nOjpmcm9tTlNTdHJpbmcoc3Ry
aW5nKSwgdHJ1ZSk7CisgICAgaWYgKCFyZXN1bHQpIC8vIEZJWE1FOiBwYXNzIGVycm9ycworICAg
ICAgICByZXR1cm4gMDsKKyAgICBKU0xvY2sgbG9jazsKKyAgICByZXR1cm4gYWVEZXNjRnJvbUpT
VmFsdWUobV9mcmFtZS0+alNjcmlwdCgpLT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCksIHJl
c3VsdCk7Cit9CisKIC0gKFdlYlNjcmlwdE9iamVjdCAqKXdpbmRvd1NjcmlwdE9iamVjdAogewog
ICAgIHJldHVybiBtX2ZyYW1lLT53aW5kb3dTY3JpcHRPYmplY3QoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6267</attachid>
            <date>2006-02-05 03:26:54 -0800</date>
            <delta_ts>2006-02-06 11:53:11 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>7012r3_patch.txt</filename>
            <type>text/plain</type>
            <size>6730</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDEy
NTU0KQorKysgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTcsNiArMTE3LDEzIEBAIHR5cGVkZWYgZW51bSB7CiAKIC0gKEJPT0wpc2hv
dWxkQ2xvc2U7CiAKKy8qIQorICAgIEBtZXRob2QgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dEZyb21TdHJpbmc6CisgICAgQHBhcmFtIHNjcmlwdCBUaGUgdGV4dCBvZiB0aGUgSmF2YVNjcmlw
dC4KKyAgICBAcmVzdWx0IFRoZSByZXN1bHQgb2YgdGhlIHNjcmlwdCwgY29udmVydGVkIHRvIGFu
IE5TQXBwbGVFdmVudERlc2NyaXB0b3IsIG9yIG5pbCBmb3IgZmFpbHVyZS4KKyovCistIChOU0Fw
cGxlRXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmc6KE5TU3RyaW5nICopc2NyaXB0OworCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2Vi
UHJpdmF0ZSkKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tCShyZXZpc2lvbiAxMjU1NCkK
KysrIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjcyLDYgKzI2NzIsMTEgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFt
ZQogICAgIHJldHVybiBbYnJpZGdlIHNob3VsZENsb3NlXTsKIH0KIAorLSAoTlNBcHBsZUV2ZW50
RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0
cmluZyAqKXNjcmlwdAoreworICAgIHJldHVybiBbW1tzZWxmIG1haW5GcmFtZV0gX2JyaWRnZV0g
YWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6c2NyaXB0XTsKK30KKwogQGVu
ZAogCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2ViVmlld1ByaW50aW5nUHJpdmF0ZSkKSW5k
ZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgJKHJldmlzaW9uIDEyNTU0
KQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjksNiArMzI5LDcgQEAgdHlwZWRlZiBlbnVtCiAKIC0gKE5TU3RyaW5nICopc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwog
LSAoTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmcgZm9yY2VVc2VyR2VzdHVyZTooQk9PTClmb3JjZVVzZXJHZXN0dXJlOwor
LSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRG
cm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKIAogLSAoRE9NRG9jdW1lbnQgKilET01Eb2N1
bWVudDsKIC0gKERPTUhUTUxFbGVtZW50ICopZnJhbWVFbGVtZW50OwpJbmRleDogV2ViQ29yZS9i
cmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jy
aWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAxMjU3MCkKKysrIFdlYkNv
cmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTg2
LDYgKzg2LDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL2puaV9qc29iamVjdC5oPgogI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvbnBydW50aW1lLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9vYmplY3QuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL2RhdGVfb2JqZWN0Lmg+CiAjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9wcm9wZXJ0eV9tYXAuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL3J1bnRpbWVfcm9vdC5oPgogI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgpAQCAt
MTAzLDYgKzEwNCwxOSBAQCB1c2luZyBLSlM6OkpTVmFsdWU7CiB1c2luZyBLSlM6OlNhdmVkUHJv
cGVydGllczsKIHVzaW5nIEtKUzo6U2F2ZWRCdWlsdGluczsKIHVzaW5nIEtKUzo6V2luZG93Owor
dXNpbmcgS0pTOjpCb29sZWFuVHlwZTsKK3VzaW5nIEtKUzo6U3RyaW5nVHlwZTsKK3VzaW5nIEtK
Uzo6TnVtYmVyVHlwZTsKK3VzaW5nIEtKUzo6T2JqZWN0VHlwZTsKK3VzaW5nIEtKUzo6VW5zcGVj
aWZpZWRUeXBlOwordXNpbmcgS0pTOjpVbmRlZmluZWRUeXBlOwordXNpbmcgS0pTOjpOdWxsVHlw
ZTsKK3VzaW5nIEtKUzo6R2V0dGVyU2V0dGVyVHlwZTsKK3VzaW5nIEtKUzo6VVN0cmluZzsKK3Vz
aW5nIEtKUzo6SWRlbnRpZmllcjsKK3VzaW5nIEtKUzo6TGlzdDsKK3VzaW5nIEtKUzo6VHlwZTsK
K3VzaW5nIEtKUzo6RGF0ZUluc3RhbmNlOwogCiB1c2luZyBLSlM6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0OwogCkBAIC0xODUsNiArMTk5LDkwIEBAIHN0YXRpYyBCT09MIGlzQ2FzZVNlbnNpdGl2ZUVx
dWFsKE5TU3RyaW4KICAgICByZXR1cm4gW2EgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpiXSA9PSBO
U09yZGVyZWRTYW1lOwogfQogCitzdGF0aWMgaW5saW5lCisjaWZkZWYgX19HTlVDX18KK19fYXR0
cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorI2VuZGlmCitKU1ZhbHVlICp0cnlHZXRBbmRDYWxs
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBKU09iamVjdCAqb2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIAoreworICBKU1ZhbHVlICp2ID0gb2JqZWN0LT5nZXQo
ZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgaWYgKHYtPmlzT2JqZWN0KCkpIHsKKyAgICBKU09iamVj
dCAqbyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odik7CisgICAgaWYgKG8tPmltcGxlbWVudHND
YWxsKCkpIHsgLy8gc3BlYyBzYXlzICJub3QgcHJpbWl0aXZlIHR5cGUiIGJ1dCAuLi4KKyAgICAg
IEpTT2JqZWN0ICp0aGlzT2JqID0gY29uc3RfY2FzdDxKU09iamVjdCo+KG9iamVjdCk7CisgICAg
ICBKU1ZhbHVlICpkZWYgPSBvLT5jYWxsKGV4ZWMsIHRoaXNPYmosIExpc3Q6OmVtcHR5KCkpOwor
ICAgICAgVHlwZSBkZWZUeXBlID0gZGVmLT50eXBlKCk7CisgICAgICBpZiAoZGVmVHlwZSA9PSBV
bnNwZWNpZmllZFR5cGUgfHwgZGVmVHlwZSA9PSBVbmRlZmluZWRUeXBlIHx8CisgICAgICAgICAg
ZGVmVHlwZSA9PSBOdWxsVHlwZSB8fCBkZWZUeXBlID09IEJvb2xlYW5UeXBlIHx8CisgICAgICAg
ICAgZGVmVHlwZSA9PSBTdHJpbmdUeXBlIHx8IGRlZlR5cGUgPT0gTnVtYmVyVHlwZSkgeworICAg
ICAgICByZXR1cm4gZGVmOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gTlVMTDsKK30K
Kworc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSoganNWYWx1ZSkKK3sKKyAgICBOU0FwcGxlRXZlbnREZXNjcmlw
dG9yKiBhZURlc2MgPSAwOworICAgIHN3aXRjaCAoanNWYWx1ZS0+dHlwZSgpKSB7CisgICAgICAg
IGNhc2UgQm9vbGVhblR5cGU6IHsKKyAgICAgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAgICAg
ICBqc1ZhbHVlLT5nZXRCb29sZWFuKHZhbHVlKTsKKyAgICAgICAgICAgIGFlRGVzYyA9IFtOU0Fw
cGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoQm9vbGVhbjp2YWx1ZV07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFN0cmluZ1R5cGU6IHsKKyAgICAg
ICAgICAgIFVTdHJpbmcgdmFsdWUgPSBqc1ZhbHVlLT5nZXRTdHJpbmcoKTsKKyAgICAgICAgICAg
IE5TU3RyaW5nKiBzdHIgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6cmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bmljaGFyICo+KHZhbHVlLmRhdGEoKSkgbGVuZ3RoOnZhbHVlLnNpemUo
KV07CisgICAgICAgICAgICBhZURlc2MgPSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlw
dG9yV2l0aFN0cmluZzpzdHJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBOdW1iZXJUeXBlOiB7CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBqc1ZhbHVl
LT5nZXROdW1iZXIoKTsKKyAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlw
dG9yIGRlc2NyaXB0b3JXaXRoRGVzY3JpcHRvclR5cGU6dHlwZUlFRUU2NEJpdEZsb2F0aW5nUG9p
bnQgYnl0ZXM6JnZhbHVlIGxlbmd0aDpzaXplb2YodmFsdWUpXTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogeworICAgICAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGpzVmFsdWUtPmdldE9iamVjdCgpOworICAgICAgICAgICAgaWYgKG9i
amVjdC0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpIHsKKyAgICAgICAgICAgICAgICBk
b3VibGUgc2Vjb25kcyA9IDA7CisgICAgICAgICAgICAgICAgZG91YmxlIHR6T2Zmc2V0ID0gMDsK
KworICAgICAgICAgICAgICAgIEpTVmFsdWUgKnYgPSB0cnlHZXRBbmRDYWxsUHJvcGVydHkoZXhl
Yywgb2JqZWN0LCAiZ2V0VGltZXpvbmVPZmZzZXQiKTsKKyAgICAgICAgICAgICAgICBpZiAodikg
eworICAgICAgICAgICAgICAgICAgICB0ek9mZnNldCA9IHYtPmdldE51bWJlcigpICogNjA7CisK
KyAgICAgICAgICAgICAgICAgICAgdiA9IHRyeUdldEFuZENhbGxQcm9wZXJ0eShleGVjLCBvYmpl
Y3QsICJ2YWx1ZU9mIik7CisgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzZWNvbmRzID0gdi0+Z2V0TnVtYmVyKCkgLyAxMDAwOworICAgICAgICAg
ICAgICAgICAgICAgICAgc2Vjb25kcyArPSBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTkw
NCAtIGtDRkFic29sdXRlVGltZUludGVydmFsU2luY2UxOTcwIC0gdHpPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBMb25nRGF0ZVRpbWUgbGR0ID0g
c3RhdGljX2Nhc3Q8TG9uZ0RhdGVUaW1lPihzZWNvbmRzKTsKKyAgICAgICAgICAgICAgICAgICAg
YWVEZXNjID0gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhEZXNjcmlwdG9y
VHlwZTp0eXBlTG9uZ0RhdGVUaW1lIGJ5dGVzOiZsZHQgbGVuZ3RoOnNpemVvZihsZHQpXTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghYWVEZXNjKQorICAgICAgICAgICAgICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShl
eGVjLCBvYmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMpKTsKKworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEVSUk9SKCJVbmtub3duIEph
dmFTY3JpcHQgdHlwZTogJWQiLCBqc1ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgLy8gbm8g
YnJlYWs7CisgICAgICAgIGNhc2UgVW5zcGVjaWZpZWRUeXBlOgorICAgICAgICBjYXNlIFVuZGVm
aW5lZFR5cGU6CisgICAgICAgIGNhc2UgTnVsbFR5cGU6CisgICAgICAgIGNhc2UgR2V0dGVyU2V0
dGVyVHlwZToKKyAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIG51
bGxEZXNjcmlwdG9yXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gYWVEZXNjOworfQorCiBAaW1wbGVtZW50YXRpb24gV2ViQ29yZUZyYW1lQnJpZGdlCiAKIHN0
YXRpYyBib29sIGluaXRpYWxpemVkT2JqZWN0Q2FjaGVTaXplID0gZmFsc2U7CkBAIC0xNDY3LDYg
KzE1NjUsMTYgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAg
IHJldHVybiByZXN1bHQtPmdldFN0cmluZygpLmRvbVN0cmluZygpOwogfQogCistIChOU0FwcGxl
RXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgbV9mcmFtZS0+Y3JlYXRlRW1wdHlEb2N1bWVudCgp
OworICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1fZnJhbWUtPmV4ZWN1dGVTY3JpcHQoMCwgUVN0cmlu
Zzo6ZnJvbU5TU3RyaW5nKHN0cmluZyksIHRydWUpOworICAgIGlmICghcmVzdWx0KSAvLyBGSVhN
RTogcGFzcyBlcnJvcnMKKyAgICAgICAgcmV0dXJuIDA7CisgICAgSlNMb2NrIGxvY2s7CisgICAg
cmV0dXJuIGFlRGVzY0Zyb21KU1ZhbHVlKG1fZnJhbWUtPmpTY3JpcHQoKS0+aW50ZXJwcmV0ZXIo
KS0+Z2xvYmFsRXhlYygpLCByZXN1bHQpOworfQorCiAtIChXZWJTY3JpcHRPYmplY3QgKil3aW5k
b3dTY3JpcHRPYmplY3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+d2luZG93U2NyaXB0T2JqZWN0
KCk7Cg==
</data>
<flag name="review"
          id="1517"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6296</attachid>
            <date>2006-02-06 11:53:11 -0800</date>
            <delta_ts>2006-02-06 17:27:26 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>7012r4_patch.txt</filename>
            <type>text/plain</type>
            <size>23844</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvQXBwbGVTY3JpcHQvZGF0ZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvQXBwbGVTY3JpcHQvZGF0ZS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9BcHBsZVNjcmlwdC9kYXRlLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTkgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+ZG8gSmF2YVNjcmlwdCAtIGNv
bnZlcnRpbmcgdG8gQXBwbGVTY3JpcHQgZGF0ZSB0eXBlPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCisgICAgdmFyIGNvbnNvbGVfbWVz
c2FnZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOworICAgIAorICAgIGZ1bmN0aW9u
IGxvZyhtZXNzYWdlKQorICAgIHsKKyAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJsaSIpOworICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgY29uc29sZV9tZXNzYWdlcy5hcHBlbmRDaGlsZChp
dGVtKTsKKyAgICB9CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIC8vIDB4YzAwZDZiZTUgPT0gTW9u
IEZlYiAwNiAyMDA2IDIxOjExOjAxIEdNVCswMzAwCisgICAgICAgICAgICBsb2coYXBwbGVTY3Jp
cHRDb250cm9sbGVyLmRvSmF2YVNjcmlwdCgibmV3IERhdGUoMTEzOTI0OTQ2MTE4NykiKSk7CisK
KyAgICAgICAgICAgIC8vIDB4N2M0ZThmMDAgPT0gU3VuIEZlYiAwMSAxOTcwIDAwOjAwOjAwIEdN
VCswMzAwCisgICAgICAgICAgICBsb2coYXBwbGVTY3JpcHRDb250cm9sbGVyLmRvSmF2YVNjcmlw
dCgibmV3IERhdGUoMjY2NzYwMDAwMCkiKSk7CisgICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyAweDdjMjVkYWIwID09IFRodSBKYW4gMDEgMTk3MCAwMzowMDowMCBHTVQrMDMwMAorICAgICAg
ICAgICAgbG9nKGFwcGxlU2NyaXB0Q29udHJvbGxlci5kb0phdmFTY3JpcHQoIm5ldyBEYXRlKDAp
IikpOworCisgICAgICAgICAgICAvLyAweDEzODNlYzQwMCA9PSBXZWQgSmFuIDAxIDIwNzAgMDA6
MDA6MDAgR01UKzAzMDAKKyAgICAgICAgICAgIGxvZyhhcHBsZVNjcmlwdENvbnRyb2xsZXIuZG9K
YXZhU2NyaXB0KCJuZXcgRGF0ZSgzMTU1NzQ5MjAwMDAwKSIpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gMHg1Njg3MTMwMCA9PSBTdW4gSmFuIDAxIDE5NTAgMDA6MDA6MDAgR01UKzAz
MDAKKyAgICAgICAgICAgIGxvZyhhcHBsZVNjcmlwdENvbnRyb2xsZXIuZG9KYXZhU2NyaXB0KCJu
ZXcgRGF0ZSgtNjMxMTYyODAwMDAwKSIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
MHgwMDAwMDAwMCA9PSBGcmkgSmFuIDAxIDE5MDQgMDA6MDA6MDAgR01UKzAzMDAKKyAgICAgICAg
ICAgIGxvZyhhcHBsZVNjcmlwdENvbnRyb2xsZXIuZG9KYXZhU2NyaXB0KCJuZXcgRGF0ZSgtMjA4
Mjg1NTYwMDAwMCkiKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIDB4ZmZmZmZmZmYz
YzYzNzAwMCA9PSBXZWQgSmFuIDAxIDE4MDAgMDA6MDA6MDAgR01UKzAzMDAKKyAgICAgICAgICAg
IGxvZyhhcHBsZVNjcmlwdENvbnRyb2xsZXIuZG9KYXZhU2NyaXB0KCJuZXcgRGF0ZSgtNTM2NDY3
MzIwMDAwMCkiKSk7CisKKyAgICAgICAgICAgIC8vIGludmFsaWQgZGF0ZSAKKyAgICAgICAgICAg
IGxvZyhhcHBsZVNjcmlwdENvbnRyb2xsZXIuZG9KYXZhU2NyaXB0KCJuZXcgRGF0ZSgxZTQwKSIp
KTsKKworICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgICAgbG9nKCJFeGNlcHRpb246
ICIgKyBleC5kZXNjcmlwdGlvbik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgY29uc29sZSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICAgICAgY29uc29sZS5hcHBlbmRDaGls
ZChjb25zb2xlX21lc3NhZ2VzKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChj
b25zb2xlKTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgZG9jdW1lbnQud3JpdGUo
IihjYW5ub3QgcnVuIGludGVyYWN0aXZlbHkpIik7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L0FwcGxlU2NyaXB0L2FycmF5Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9BcHBsZVNjcmlwdC9hcnJheS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9BcHBsZVNjcmlwdC9hcnJheS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPmRvIEph
dmFTY3JpcHQgLSBjb252ZXJ0aW5nIEphdmFTY3JpcHQgYXJyYXlzIHRvIEFwcGxlU2NyaXB0PC90
aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorQXQgdGhlIG1vbWVudCwgdG9TdHJpbmcoKSBpcyBqdXN0
IHVzZWQuIFBlcmhhcHMsIHNvbWUgYXJyYXlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gQXBwbGVT
Y3JpcHQgbGlzdHMuCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKKyAgICB2YXIg
Y29uc29sZV9tZXNzYWdlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7CisgICAgCisg
ICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgeworICAgICAgICB2YXIgaXRlbSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgICAgICBjb25zb2xlX21lc3NhZ2VzLmFw
cGVuZENoaWxkKGl0ZW0pOworICAgIH0KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbG9nKGFwcGxlU2NyaXB0Q29udHJvbGxlci5kb0phdmFTY3JpcHQoIm5ldyBBcnJheSgxLCAy
LCAndGhyZWUnKTsiKSk7CisgICAgICAgICAgICBsb2coYXBwbGVTY3JpcHRDb250cm9sbGVyLmRv
SmF2YVNjcmlwdCgiYXJyID0gbmV3IEFycmF5OyBhcnJbJ2EnXSA9ICdhJzsgYXJyWzJdID0gMjsg
YXJyOyIpKTsKKyAgICAgICAgICAgIAorICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAg
ICAgbG9nKCJFeGNlcHRpb246ICIgKyBleC5kZXNjcmlwdGlvbik7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICAgICAg
Y29uc29sZS5hcHBlbmRDaGlsZChjb25zb2xlX21lc3NhZ2VzKTsKKyAgICAgICAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChjb25zb2xlKTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZG9jdW1lbnQud3JpdGUoIihjYW5ub3QgcnVuIGludGVyYWN0aXZlbHkpIik7CisgICAgfQor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L0FwcGxl
U2NyaXB0LzAwMS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvQXBwbGVTY3Jp
cHQvMDAxLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L0FwcGxlU2NyaXB0
LzAwMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACis8aHRtbD4KKzxoZWFkPgor
PHRpdGxlPmRvIEphdmFTY3JpcHQgLSBjb252ZXJ0aW5nIHRvIEFwcGxlU2NyaXB0IHR5cGVzPC90
aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorQW4gYXV0b21hdGVkIHRlc3QgZm9yIGJhc2ljIEFwcGxl
U2NyaXB0ICJkbyBKYXZhU2NyaXB0IiBzdXBwb3J0LgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorCisgICAgdmFyIGNvbnNvbGVfbWVzc2FnZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJvbCIpOworICAgIAorICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgIHsKKyAgICAg
ICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAgICAgICBpdGVt
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAg
Y29uc29sZV9tZXNzYWdlcy5hcHBlbmRDaGlsZChpdGVtKTsKKyAgICB9CisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiU2VsZWN0QWxsIik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGxvZyhhcHBsZVNjcmlwdENvbnRyb2xsZXIuZG9KYXZhU2NyaXB0KCIyKjI7
IikpOworICAgICAgICAgICAgbG9nKGFwcGxlU2NyaXB0Q29udHJvbGxlci5kb0phdmFTY3JpcHQo
Im5ldyBOdW1iZXIoMioyKTsiKSk7CisgICAgICAgICAgICBsb2coYXBwbGVTY3JpcHRDb250cm9s
bGVyLmRvSmF2YVNjcmlwdCgiMi8zOyIpKTsKKyAgICAgICAgICAgIGxvZyhhcHBsZVNjcmlwdENv
bnRyb2xsZXIuZG9KYXZhU2NyaXB0KCJuZXcgTnVtYmVyKDIvMyk7IikpOworICAgICAgICAgICAg
bG9nKGFwcGxlU2NyaXB0Q29udHJvbGxlci5kb0phdmFTY3JpcHQoIjIvMDsiKSk7CisgICAgICAg
ICAgICBsb2coYXBwbGVTY3JpcHRDb250cm9sbGVyLmRvSmF2YVNjcmlwdCgibmV3IE51bWJlcigt
Mi8wKTsiKSk7CisgICAgICAgICAgICBsb2coYXBwbGVTY3JpcHRDb250cm9sbGVyLmRvSmF2YVNj
cmlwdCgiMSE9MSIpKTsKKyAgICAgICAgICAgIGxvZyhhcHBsZVNjcmlwdENvbnRyb2xsZXIuZG9K
YXZhU2NyaXB0KCJuZXcgQm9vbGVhbiIpKTsKKyAgICAgICAgICAgIGxvZyhhcHBsZVNjcmlwdENv
bnRyb2xsZXIuZG9KYXZhU2NyaXB0KCInYSBzdHJpbmcnIikpOworICAgICAgICAgICAgbG9nKGFw
cGxlU2NyaXB0Q29udHJvbGxlci5kb0phdmFTY3JpcHQoIm5ldyBTdHJpbmcoJ2Egc3RyaW5nJyki
KSk7CisgICAgICAgICAgICBsb2coYXBwbGVTY3JpcHRDb250cm9sbGVyLmRvSmF2YVNjcmlwdCgi
d2luZG93LmdldFNlbGVjdGlvbigpIikpOworICAgICAgICAgICAgbG9nKGFwcGxlU2NyaXB0Q29u
dHJvbGxlci5kb0phdmFTY3JpcHQoIndpbmRvdy5nZXRTZWxlY3Rpb24oKSArIFwiXCIiKSk7Cisg
ICAgICAgICAgICBsb2coYXBwbGVTY3JpcHRDb250cm9sbGVyLmRvSmF2YVNjcmlwdCgiZG9jdW1l
bnQiKSk7CisgICAgICAgICAgICBsb2coYXBwbGVTY3JpcHRDb250cm9sbGVyLmRvSmF2YVNjcmlw
dCgiZG9jdW1lbnQudGl0bGUiKSk7CisgICAgICAgICAgICBsb2coYXBwbGVTY3JpcHRDb250cm9s
bGVyLmRvSmF2YVNjcmlwdCgiZG9jdW1lbnQubGFsYWxhIikpOworICAgICAgICAgICAgbG9nKGFw
cGxlU2NyaXB0Q29udHJvbGxlci5kb0phdmFTY3JpcHQoImRvY3VtZW50LmxhbGFsYSgpIikpOyAv
LyBpZGVhbGx5LCBzaG91bGQgcGFzcyB0aGUgZXJyb3IgdG8gQXBwbGVTY3JpcHQKKyAgICAgICAg
ICAgIGxvZyhhcHBsZVNjcmlwdENvbnRyb2xsZXIuZG9KYXZhU2NyaXB0KCJmdW5jdGlvbiBQb2x5
Z29uKCkge3RoaXMuZWRnZXMgPSA4O30gbmV3IFBvbHlnb247IikpOworICAgICAgICAgICAgCisg
ICAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICBsb2coIkV4Y2VwdGlvbjogIiArIGV4
LmRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBjb25zb2xlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgicCIpOworICAgICAgICBjb25zb2xlLmFwcGVuZENoaWxkKGNvbnNv
bGVfbWVzc2FnZXMpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnNvbGUp
OworICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBkb2N1bWVudC53cml0ZSgiKGNhbm5v
dCBydW4gaW50ZXJhY3RpdmVseSkiKTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvQXBwbGVTY3JpcHQvZGF0ZS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9BcHBsZVNjcmlwdC9kYXRlLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvQXBwbGVTY3JpcHQvZGF0ZS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzwwMDAwMDAwMCBjMDBk
NmJlNSA+ICgnbGR0ICcpCis8MDAwMDAwMDAgN2M0ZThmMDAgPiAoJ2xkdCAnKQorPDAwMDAwMDAw
IDdjMjVkYWIwID4gKCdsZHQgJykKKzwwMDAwMDAwMSAzODNlYzQwMCA+ICgnbGR0ICcpCis8MDAw
MDAwMDAgNTY4NzEzMDAgPiAoJ2xkdCAnKQorPDAwMDAwMDAwIDAwMDAwMDAwID4gKCdsZHQgJykK
KzxmZmZmZmZmZiAzYzYzNzAwMCA+ICgnbGR0ICcpCitJbnZhbGlkIERhdGUgKCd1dHh0JykKKwor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L0FwcGxlU2NyaXB0L2FycmF5LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L0FwcGxlU2NyaXB0L2FycmF5LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvQXBwbGVTY3JpcHQvYXJyYXkt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK0F0IHRoZSBtb21lbnQs
IHRvU3RyaW5nKCkgaXMganVzdCB1c2VkLiBQZXJoYXBzLCBzb21lIGFycmF5cyBzaG91bGQgYmUg
Y29udmVydGVkIHRvIEFwcGxlU2NyaXB0IGxpc3RzLgorMSwyLHRocmVlICgndXR4dCcpCissLDIg
KCd1dHh0JykKKworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L0FwcGxlU2NyaXB0LzAwMS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9BcHBsZVNjcmlwdC8wMDEt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9BcHBsZVNjcmlw
dC8wMDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACitFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdl
OnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDY1IG9m
ICN0ZXh0ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvbgorQW4gYXV0b21hdGVkIHRlc3QgZm9yIGJhc2ljIEFwcGxlU2NyaXB0ICJkbyBKYXZhU2Ny
aXB0IiBzdXBwb3J0LgorNCAoJ2RvdWInKQorNCAoJ2RvdWInKQorMC42NjY2NjY2NjY2NjY2NjY2
ICgnZG91YicpCiswLjY2NjY2NjY2NjY2NjY2NjYgKCdkb3ViJykKK0lORiAoJ2RvdWInKQorLUlO
RiAoJ2RvdWInKQorZmFsc2UgKCdib29sJykKK2ZhbHNlICgnYm9vbCcpCithIHN0cmluZyAoJ3V0
eHQnKQorYSBzdHJpbmcgKCd1dHh0JykKK0FuIGF1dG9tYXRlZCB0ZXN0IGZvciBiYXNpYyBBcHBs
ZVNjcmlwdCAiZG8gSmF2YVNjcmlwdCIgc3VwcG9ydC4gKCd1dHh0JykKK0FuIGF1dG9tYXRlZCB0
ZXN0IGZvciBiYXNpYyBBcHBsZVNjcmlwdCAiZG8gSmF2YVNjcmlwdCIgc3VwcG9ydC4gKCd1dHh0
JykKK1tvYmplY3QgSFRNTERvY3VtZW50XSAoJ3V0eHQnKQorZG8gSmF2YVNjcmlwdCAtIGNvbnZl
cnRpbmcgdG8gQXBwbGVTY3JpcHQgdHlwZXMgKCd1dHh0JykKKzw+ICgnbnVsbCcpCisobnVsbCkK
K1tvYmplY3QgT2JqZWN0XSAoJ3V0eHQnKQorCisKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnBy
b2ovV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvV2ViVmlldy5zdWJwcm9q
L1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDEyNTg4KQorKysgV2ViS2l0L1dlYlZpZXcuc3Vi
cHJvai9XZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDEzIEBA
IHR5cGVkZWYgZW51bSB7CiAKIC0gKEJPT0wpc2hvdWxkQ2xvc2U7CiAKKy8qIQorICAgIEBtZXRo
b2QgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6CisgICAgQHBhcmFtIHNj
cmlwdCBUaGUgdGV4dCBvZiB0aGUgSmF2YVNjcmlwdC4KKyAgICBAcmVzdWx0IFRoZSByZXN1bHQg
b2YgdGhlIHNjcmlwdCwgY29udmVydGVkIHRvIGFuIE5TQXBwbGVFdmVudERlc2NyaXB0b3IsIG9y
IG5pbCBmb3IgZmFpbHVyZS4KKyovCistIChOU0FwcGxlRXZlbnREZXNjcmlwdG9yICopYWVEZXNj
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc2NyaXB0OworCiBA
ZW5kCiAKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViUHJpdmF0ZSkKSW5kZXg6IFdlYktpdC9XZWJW
aWV3LnN1YnByb2ovV2ViVmlldy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJWaWV3LnN1YnBy
b2ovV2ViVmlldy5tCShyZXZpc2lvbiAxMjU4OCkKKysrIFdlYktpdC9XZWJWaWV3LnN1YnByb2ov
V2ViVmlldy5tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcyLDYgKzI2NzIsMTEgQEAgc3RhdGljIFdl
YkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogICAgIHJldHVybiBbYnJpZGdlIHNob3Vs
ZENsb3NlXTsKIH0KIAorLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbHVh
dGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXNjcmlwdAoreworICAgIHJldHVy
biBbW1tzZWxmIG1haW5GcmFtZV0gX2JyaWRnZV0gYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dEZyb21TdHJpbmc6c2NyaXB0XTsKK30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViVmll
dyAoV2ViVmlld1ByaW50aW5nUHJpdmF0ZSkKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJD
b3JlRnJhbWVCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29y
ZUZyYW1lQnJpZGdlLmgJKHJldmlzaW9uIDEyNTg4KQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNiArMzI5LDcgQEAgdHlw
ZWRlZiBlbnVtCiAKIC0gKE5TU3RyaW5nICopc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZy
b21TdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwogLSAoTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgZm9yY2VVc2VyR2Vz
dHVyZTooQk9PTClmb3JjZVVzZXJHZXN0dXJlOworLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAq
KWFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZzsKIAogLSAoRE9NRG9jdW1lbnQgKilET01Eb2N1bWVudDsKIC0gKERPTUhUTUxFbGVtZW50ICop
ZnJhbWVFbGVtZW50OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRn
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdl
Lm1tCShyZXZpc2lvbiAxMjU4OCkKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVC
cmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDcgQEAKICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL2puaV9qc29iamVjdC5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvbnBydW50
aW1lLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9vYmplY3QuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL2RhdGVfb2JqZWN0Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9wcm9wZXJ0
eV9tYXAuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL3J1bnRpbWVfcm9vdC5oPgogI2ltcG9y
dCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgpAQCAtMTAzLDYgKzEwNCwxOSBAQCB1c2luZyBLSlM6
OkpTVmFsdWU7CiB1c2luZyBLSlM6OlNhdmVkUHJvcGVydGllczsKIHVzaW5nIEtKUzo6U2F2ZWRC
dWlsdGluczsKIHVzaW5nIEtKUzo6V2luZG93OwordXNpbmcgS0pTOjpCb29sZWFuVHlwZTsKK3Vz
aW5nIEtKUzo6U3RyaW5nVHlwZTsKK3VzaW5nIEtKUzo6TnVtYmVyVHlwZTsKK3VzaW5nIEtKUzo6
T2JqZWN0VHlwZTsKK3VzaW5nIEtKUzo6VW5zcGVjaWZpZWRUeXBlOwordXNpbmcgS0pTOjpVbmRl
ZmluZWRUeXBlOwordXNpbmcgS0pTOjpOdWxsVHlwZTsKK3VzaW5nIEtKUzo6R2V0dGVyU2V0dGVy
VHlwZTsKK3VzaW5nIEtKUzo6VVN0cmluZzsKK3VzaW5nIEtKUzo6SWRlbnRpZmllcjsKK3VzaW5n
IEtKUzo6TGlzdDsKK3VzaW5nIEtKUzo6VHlwZTsKK3VzaW5nIEtKUzo6RGF0ZUluc3RhbmNlOwog
CiB1c2luZyBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0OwogCkBAIC0xODUsNiArMTk5LDY4IEBA
IHN0YXRpYyBCT09MIGlzQ2FzZVNlbnNpdGl2ZUVxdWFsKE5TU3RyaW4KICAgICByZXR1cm4gW2Eg
Y2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpiXSA9PSBOU09yZGVyZWRTYW1lOwogfQogCitzdGF0aWMg
TlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiBqc1ZhbHVlKQoreworICAgIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVz
YyA9IDA7CisgICAgc3dpdGNoIChqc1ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBCb29s
ZWFuVHlwZTogeworICAgICAgICAgICAgYm9vbCB2YWx1ZTsKKyAgICAgICAgICAgIGpzVmFsdWUt
PmdldEJvb2xlYW4odmFsdWUpOworICAgICAgICAgICAgYWVEZXNjID0gW05TQXBwbGVFdmVudERl
c2NyaXB0b3IgZGVzY3JpcHRvcldpdGhCb29sZWFuOnZhbHVlXTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgU3RyaW5nVHlwZTogeworICAgICAgICAgICAgVVN0
cmluZyB2YWx1ZSA9IGpzVmFsdWUtPmdldFN0cmluZygpOworICAgICAgICAgICAgTlNTdHJpbmcq
IHN0ciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczpyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuaWNoYXIgKj4odmFsdWUuZGF0YSgpKSBsZW5ndGg6dmFsdWUuc2l6ZSgpXTsKKyAgICAg
ICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoU3Ry
aW5nOnN0cl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE51
bWJlclR5cGU6IHsKKyAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGpzVmFsdWUtPmdldE51bWJl
cigpOworICAgICAgICAgICAgYWVEZXNjID0gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3Jp
cHRvcldpdGhEZXNjcmlwdG9yVHlwZTp0eXBlSUVFRTY0Qml0RmxvYXRpbmdQb2ludCBieXRlczom
dmFsdWUgbGVuZ3RoOnNpemVvZih2YWx1ZSldOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBPYmplY3RUeXBlOiB7CisgICAgICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0ganNWYWx1ZS0+Z2V0T2JqZWN0KCk7CisgICAgICAgICAgICBpZiAob2JqZWN0LT5pbmhl
cml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkgeworICAgICAgICAgICAgICAgIERhdGVJbnN0YW5j
ZSogZGF0ZSA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KG9iamVjdCk7CisgICAgICAgICAg
ICAgICAgZG91YmxlIG1zID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgdHpPZmZzZXQgPSAwOwor
CisgICAgICAgICAgICAgICAgaWYgKGRhdGUtPmdldFRpbWUobXMsIHR6T2Zmc2V0KSkgeworICAg
ICAgICAgICAgICAgICAgICBDRkFic29sdXRlVGltZSB1dGNTZWNvbmRzID0gbXMvMTAwMCAtIGtD
RkFic29sdXRlVGltZUludGVydmFsU2luY2UxOTcwOworCisgICAgICAgICAgICAgICAgICAgIExv
bmdEYXRlVGltZSBsZHQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChub0VyciA9PSBVQ0NvbnZl
cnRDRkFic29sdXRlVGltZVRvTG9uZ0RhdGVUaW1lKHV0Y1NlY29uZHMsICZsZHQpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYWVEZXNjID0gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3Jp
cHRvcldpdGhEZXNjcmlwdG9yVHlwZTp0eXBlTG9uZ0RhdGVUaW1lIGJ5dGVzOiZsZHQgbGVuZ3Ro
OnNpemVvZihsZHQpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghYWVEZXNjKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSogcHJpbWl0aXZlID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZl
bnREZXNjcmlwdG9yIG51bGxEZXNjcmlwdG9yXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFlRGVzY0Zyb21KU1ZhbHVlKGV4ZWMsIHByaW1pdGl2ZSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBFUlJPUigiVW5rbm93biBKYXZhU2NyaXB0IHR5cGU6ICVkIiwganNW
YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIC8vIG5vIGJyZWFrOworICAgICAgICBjYXNlIFVu
c3BlY2lmaWVkVHlwZToKKyAgICAgICAgY2FzZSBVbmRlZmluZWRUeXBlOgorICAgICAgICBjYXNl
IE51bGxUeXBlOgorICAgICAgICBjYXNlIEdldHRlclNldHRlclR5cGU6CisgICAgICAgICAgICBh
ZURlc2MgPSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBudWxsRGVzY3JpcHRvcl07CisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGFlRGVzYzsKK30KKwogQGltcGxl
bWVudGF0aW9uIFdlYkNvcmVGcmFtZUJyaWRnZQogCiBzdGF0aWMgYm9vbCBpbml0aWFsaXplZE9i
amVjdENhY2hlU2l6ZSA9IGZhbHNlOwpAQCAtMTQ2Nyw2ICsxNTQzLDE2IEBAIHN0YXRpYyBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICByZXR1cm4gcmVzdWx0LT5nZXRTdHJp
bmcoKS5kb21TdHJpbmcoKTsKIH0KIAorLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVz
Y0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworewor
ICAgIG1fZnJhbWUtPmNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQg
PSBtX2ZyYW1lLT5leGVjdXRlU2NyaXB0KDAsIFFTdHJpbmc6OmZyb21OU1N0cmluZyhzdHJpbmcp
LCB0cnVlKTsKKyAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6IHBhc3MgZXJyb3JzCisgICAgICAg
IHJldHVybiAwOworICAgIEpTTG9jayBsb2NrOworICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1
ZShtX2ZyYW1lLT5qU2NyaXB0KCktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0
KTsKK30KKwogLSAoV2ViU2NyaXB0T2JqZWN0ICopd2luZG93U2NyaXB0T2JqZWN0CiB7CiAgICAg
cmV0dXJuIG1fZnJhbWUtPndpbmRvd1NjcmlwdE9iamVjdCgpOwpJbmRleDogV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUubQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5tCShyZXZpc2lvbiAxMjU4OCkKKysrIFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLm0JKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDYgKzQ2LDcgQEAKIAogI2ltcG9ydCAiVGV4dElucHV0Q29udHJvbGxlci5oIgogI2lt
cG9ydCAiTmF2aWdhdGlvbkNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIkFwcGxlU2NyaXB0Q29udHJv
bGxlci5oIgogCiBAaW50ZXJmYWNlIER1bXBSZW5kZXJUcmVlUGFzdGVib2FyZCA6IE5TUGFzdGVi
b2FyZAogQGVuZApAQCAtMzU2LDYgKzM1Nyw5IEBAIHN0YXRpYyB2b2lkIGR1bXAodm9pZCkKICAg
ICBUZXh0SW5wdXRDb250cm9sbGVyICp0aWMgPSBbW1RleHRJbnB1dENvbnRyb2xsZXIgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzpzZW5kZXJdOwogICAgIFtvYmogc2V0VmFsdWU6dGljIGZvcktleTpA
InRleHRJbnB1dENvbnRyb2xsZXIiXTsKICAgICBbdGljIHJlbGVhc2VdOworICAgIEFwcGxlU2Ny
aXB0Q29udHJvbGxlciAqYXNjID0gW1tBcHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzpzZW5kZXJdOworICAgIFtvYmogc2V0VmFsdWU6YXNjIGZvcktleTpAImFwcGxl
U2NyaXB0Q29udHJvbGxlciJdOworICAgIFthc2MgcmVsZWFzZV07CiAgICAgW29iaiBzZXRWYWx1
ZTpuYXZpZ2F0aW9uQ29udHJvbGxlciBmb3JLZXk6QCJuYXZpZ2F0aW9uQ29udHJvbGxlciJdOwog
fQogCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BcHBsZVNjcmlwdENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BcHBsZVNjcmlw
dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0FwcGxlU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFw
QG55cG9wLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNsYXNz
IFdlYlZpZXc7CisKK0BpbnRlcmZhY2UgQXBwbGVTY3JpcHRDb250cm9sbGVyIDogTlNPYmplY3QK
K3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3OworfQorLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXZWJW
aWV3ICopdmlldzsKK0BlbmQKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTI1ODgpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw2ICs2MCw4IEBACiAJCUFFODI1OUY0MDhEMjI0NjMwMDA1MDdBQiAvKiBDYXJib24uZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUU4
MjU3RUYwOEQyMjM4OTAwMDUwN0FCIC8qIENhcmJvbi5mcmFtZXdvcmsgKi87IH07CiAJCUI1QTc1
MkEwMDhBRjVDRDQwMDEzOEU0NSAvKiBJbWFnZURpZmYubSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QTc1MjU4MDhBRjRBMzYwMDEzOEU0NSAvKiBJbWFn
ZURpZmYubSAqLzsgfTsKIAkJQjVBNzUyQTIwOEFGNUQxRjAwMTM4RTQ1IC8qIFF1YXJ0ekNvcmUu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjVBNzUyQTEwOEFGNUQxRjAwMTM4RTQ1IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovOyB9
OworCQlFMTMzMDgwMDA5OTYyNERBMDBBQzBBOTEgLyogQXBwbGVTY3JpcHRDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTMzMDdGRTA5
OTYyNERBMDBBQzBBOTEgLyogQXBwbGVTY3JpcHRDb250cm9sbGVyLmggKi87IH07CisJCUUxMzMw
ODAxMDk5NjI0REEwMEFDMEE5MSAvKiBBcHBsZVNjcmlwdENvbnRyb2xsZXIubSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMzMwN0ZGMDk5NjI0REEwMEFD
MEE5MSAvKiBBcHBsZVNjcmlwdENvbnRyb2xsZXIubSAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhCdWlsZFN0eWxlIHNlY3Rpb24gKi8KQEAgLTEy
NCw2ICsxMjYsOCBAQAogCQlCNUE3NTI1ODA4QUY0QTM2MDAxMzhFNDUgLyogSW1hZ2VEaWZmLm0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBJbWFnZURpZmYubTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjVBNzUyNjcwOEFGNEE0QTAwMTM4RTQ1IC8qIEltYWdl
RGlmZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSW1h
Z2VEaWZmOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlCNUE3NTJBMTA4
QUY1RDFGMDAxMzhFNDUgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9
IFF1YXJ0ekNvcmUuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
UXVhcnR6Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCUUx
MzMwN0ZFMDk5NjI0REEwMEFDMEE5MSAvKiBBcHBsZVNjcmlwdENvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGVTY3JpcHRDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMzMwN0ZGMDk5NjI0REEwMEFDMEE5MSAvKiBBcHBs
ZVNjcmlwdENvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0g
QXBwbGVTY3JpcHRDb250cm9sbGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBF
bmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTE3Miw2ICsxNzYsOCBAQAogCQkJCTMyQTcwQUFCMDM3
MDVFMUYwMEM5MTc4MyAvKiBEdW1wUmVuZGVyVHJlZVByZWZpeC5oICovLAogCQkJCTkzNDQyQ0Y0
MDhGOEJBNDkwMEJGRThDQSAvKiBUZXh0SW5wdXRDb250cm9sbGVyLmggKi8sCiAJCQkJOTM0NDJD
RjUwOEY4QkE0OTAwQkZFOENBIC8qIFRleHRJbnB1dENvbnRyb2xsZXIubSAqLywKKwkJCQlFMTMz
MDdGRTA5OTYyNERBMDBBQzBBOTEgLyogQXBwbGVTY3JpcHRDb250cm9sbGVyLmggKi8sCisJCQkJ
RTEzMzA3RkYwOTk2MjREQTAwQUMwQTkxIC8qIEFwcGxlU2NyaXB0Q29udHJvbGxlci5tICovLAog
CQkJCUI1QTc1MjU4MDhBRjRBMzYwMDEzOEU0NSAvKiBJbWFnZURpZmYubSAqLywKIAkJCQk5MzM1
NDM1RjAzRDc1NTAyMDA4NjM1Q0UgLyogV2ViS2l0LmZyYW1ld29yayAqLywKIAkJCQlBODE3MDkw
MzA4QjE2NEQzMDBDQ0I5RkIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovLApAQCAtMjI1
LDYgKzIzMSw3IEBACiAJCQkJOTM0MDk5NEMwODU0MENBRTAwN0YzQkM4IC8qIER1bXBSZW5kZXJU
cmVlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQ0MkNGNjA4RjhCQTQ5MDBCRkU4Q0Eg
LyogVGV4dElucHV0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRBNkZCOEEwOTcx
Q0FFNTAwOEIwMTRGIC8qIE5hdmlnYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlFMTMzMDgwMDA5OTYyNERBMDBBQzBBOTEgLyogQXBwbGVTY3JpcHRDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTQxNCw2ICs0MjEsNyBAQAogCQkJCTkzNDA5OTRFMDg1NDBDQUUwMDdG
M0JDOCAvKiBEdW1wUmVuZGVyVHJlZS5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0NDJDRjcwOEY4
QkE0OTAwQkZFOENBIC8qIFRleHRJbnB1dENvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAogCQkJ
CTE0QTZGQjhCMDk3MUNBRTUwMDhCMDE0RiAvKiBOYXZpZ2F0aW9uQ29udHJvbGxlci5tIGluIFNv
dXJjZXMgKi8sCisJCQkJRTEzMzA4MDEwOTk2MjREQTAwQUMwQTkxIC8qIEFwcGxlU2NyaXB0Q29u
dHJvbGxlci5tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9BcHBsZVNjcmlwdENvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9BcHBsZVNjcmlwdENvbnRyb2xsZXIubQkocmV2aXNpb24gMCkKKysrIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FwcGxlU2NyaXB0Q29udHJvbGxlci5tCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJBcHBsZVNjcmlwdENv
bnRyb2xsZXIuaCIKKworI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXcuaD4KKyNpbXBvcnQgPFdlYktp
dC9XZWJWaWV3UHJpdmF0ZS5oPiAgIC8vIGZvciBhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
RnJvbVN0cmluZywgd2hpY2ggaXMgcGVuZGluZyBBUEkgcmV2aWV3CisKK0BpbXBsZW1lbnRhdGlv
biBBcHBsZVNjcmlwdENvbnRyb2xsZXIKKworKyAoQk9PTClpc1NlbGVjdG9yRXhjbHVkZWRGcm9t
V2ViU2NyaXB0OihTRUwpYVNlbGVjdG9yCit7CisgICAgaWYgKGFTZWxlY3RvciA9PSBAc2VsZWN0
b3IoZG9KYXZhU2NyaXB0OikpCisgICAgICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gWUVTOwor
fQorCisrIChOU1N0cmluZyAqKXdlYlNjcmlwdE5hbWVGb3JTZWxlY3RvcjooU0VMKWFTZWxlY3Rv
cgoreworICAgIGlmIChhU2VsZWN0b3IgPT0gQHNlbGVjdG9yKGRvSmF2YVNjcmlwdDopKQorICAg
ICAgICByZXR1cm4gQCJkb0phdmFTY3JpcHQiOworCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAo
aWQpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd3YKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIHdlYlZpZXcgPSB3djsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNTdHJp
bmcgKilkb0phdmFTY3JpcHQ6KE5TU3RyaW5nICopYVN0cmluZworeworICAgIE5TQXBwbGVFdmVu
dERlc2NyaXB0b3IgKmFlRGVzYyA9IFt3ZWJWaWV3IGFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHRGcm9tU3RyaW5nOmFTdHJpbmddOworICAgIGlmICghYWVEZXNjKQorICAgICAgICByZXR1cm4g
QCIobnVsbCkiOworICAgIAorICAgIERlc2NUeXBlIGRlc2NUeXBlID0gQ0ZTd2FwSW50MzJIb3N0
VG9CaWcoW2FlRGVzYyBkZXNjcmlwdG9yVHlwZV0pOworICAgIGlkIHByaW50YWJsZVZhbHVlID0g
W2FlRGVzYyBzdHJpbmdWYWx1ZV07CisgICAgaWYgKCFwcmludGFibGVWYWx1ZSkKKyAgICAgICAg
cHJpbnRhYmxlVmFsdWUgPSBbYWVEZXNjIGRhdGFdOworICAgIAorICAgIHJldHVybiBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAICgnJS40cycpIiwgcHJpbnRhYmxlVmFsdWUsICZkZXNj
VHlwZV07Cit9CisKK0BlbmQK
</data>
<flag name="review"
          id="1531"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>