<?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>14331</bug_id>
          
          <creation_ts>2007-06-23 03:23:02 -0700</creation_ts>
          <short_desc>WebKit/Windows doesn&apos;t support IMEs</short_desc>
          <delta_ts>2007-07-14 09:55:43 -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>WebKit Misc.</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P1</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>808caaa4.8ce9.9cd6c799e9f6</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>hyatt</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>6621</commentid>
    <comment_count>0</comment_count>
    <who name="">808caaa4.8ce9.9cd6c799e9f6</who>
    <bug_when>2007-06-23 03:23:02 -0700</bug_when>
    <thetext>In Japanese(FE) environment, WebKit/safari cannot accept IME composition result.
So many users shoud use notepad or something to enter Japanese....
(Type Japanese with notepad, copy to clipboard, and paste to Safari/WebKit)

Windows+IME doesn&apos;t obey WM_KEYDOWN - WM_CHAR - WM_KEYUP sequence.

At IME composition startup, WM_KEYDOWN with wParam==VK_PROCESSKEY sent without proceeding WM_CHAR/WM_KEYUP.
During IME compotision, WM_KEYDOWN without WM_CHAR is sent.
At candidate selection, result is sent by WM_IME_CHAR without WM_KEYDOWN/WM_KEYUP, and not WM_CHAR.
At IME composition ended, WM_KEYUP without WM_KEYDOWN sent.

Out-of-sequence-WM_KEY-message may takes L&quot;\x0&quot; to text input class,
so sending form content breaks off at that L&quot;\x0&quot; point, as it treated as cstr-terminating.

I think Apple team now implementing &apos;Full IME support&apos; with Aqua theme, may be.
Many FE evaluator feels Safari for Windows good and try it widely ASAP.

I wish more nice WM_KEY/WM_CHAR handling model in WebViewWndProc implementation
for FE envilonment.

Below is sample implementation. Works almost well with floating composition window.
...works very well, nice experience.

volatile LONG cIMEComposition=0;
volatile LONG cWMKeyMessagesPassThruTicketCount=0;
volatile LONG cWMKeyDownMessagesCountForCheckingPair=0;

LRESULT CALLBACK MyWebVwWndProcW(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg){
	case WM_IME_STARTCOMPOSITION:
		cIMEComposition++;
		break;
	case WM_IME_ENDCOMPOSITION:
		cIMEComposition--;
		if(cIMEComposition&lt;0) cIMEComposition=0;
		cWMKeyDownMessagesCountForCheckingPair=0;
		break;

	case WM_IME_CHAR:
		cWMKeyMessagesPassThruTicketCount+=2; // 2 times... WM_KEYDOWN and WM_KEYUP
		PostMessageW(hwnd, WM_KEYDOWN, wParam, lParam);
		PostMessageW(hwnd, WM_CHAR, wParam, lParam);
		PostMessageW(hwnd, WM_KEYUP, wParam, lParam | 0xc0000000);
		return 0;

	case WM_KEYUP:
		if(!cWMKeyDownMessagesCountForCheckingPair) break; // bypass NOT paired with WM_KEYDOWN
		cWMKeyDownMessagesCountForCheckingPair--;
		if(cWMKeyDownMessagesCountForCheckingPair&lt;0) cWMKeyDownMessagesCountForCheckingPair=0;
		goto L1;
	case WM_KEYDOWN:
		if(wParam==VK_PROCESSKEY) break;
		cWMKeyDownMessagesCountForCheckingPair++;
		// -----
L1:
		if(cIMEComposition) {
			// NOT bypass WM_KEY* from WM_IME_CHAR above
			// with this demo code, suppose WM_KEY* reach very soon after PostMessageW above
			if(cWMKeyMessagesPassThruTicketCount){
				cWMKeyMessagesPassThruTicketCount--;
				if(cWMKeyMessagesPassThruTicketCount&lt;0) cWMKeyMessagesPassThruTicketCount=0;
				// thru
			} else {
				break;
			}
		}
		// NOT IME composition mode, pass to WebVwWndProcW
	default:
		return WebVwWndProcW(hwnd,uMsg,wParam,lParam);
	}
	return DefWindowProcW(hwnd, uMsg, wParam, lParam);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6614</commentid>
    <comment_count>1</comment_count>
    <who name="">808caaa4.8ce9.9cd6c799e9f6</who>
    <bug_when>2007-06-23 03:28:56 -0700</bug_when>
    <thetext>&gt; ...works very well, nice experience.

means:

Safari/Webkit ...works very well with Japanese, nice experience.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6531</commentid>
    <comment_count>2</comment_count>
      <attachid>15203</attachid>
    <who name="">808caaa4.8ce9.9cd6c799e9f6</who>
    <bug_when>2007-06-23 18:39:04 -0700</bug_when>
    <thetext>Created attachment 15203
spyxx log with Safari/IME. example WM sequence.

Example spyxx log.

With Safari, search box. Filtered by &apos;IME messages&apos;+&apos;Keyboard messages&apos;.
I typed simply &apos;aaa&apos;, and enter IME composition, type &apos;ringo&apos; and do composition(with Space/Enter Key), and leaved IME.
And typed simply &apos;yyy&apos; again, and escaped Safari-window with Alt+Tab.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6094</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-06-27 02:46:11 -0700</bug_when>
    <thetext>&lt;rdar://problem/5231528&gt; </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6041</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-06-27 20:08:21 -0700</bug_when>
    <thetext>This is clearly a p1, assigning to self.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4906</commentid>
    <comment_count>5</comment_count>
    <who name="">808caaa4.8ce9.9cd6c799e9f6</who>
    <bug_when>2007-07-13 03:39:59 -0700</bug_when>
    <thetext>errata. example below is buggy.
anonymous reporter (2ch,net/software, poster ID:6tWs8t100) said comma cannot be inputed via IME.

need to be fixed like this:

		PostMessageW(hwnd, WM_CHAR, wParam, lParam);
		WebVwWndProcW(hwnd, WM_KEYDOWN, 0xFFFF, lParam);
		PostMessageW(hwnd, WM_KEYUP, 0xFFFF, lParam | 0xc0000000);
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4838</commentid>
    <comment_count>6</comment_count>
      <attachid>15511</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-07-13 21:27:11 -0700</bug_when>
    <thetext>Created attachment 15511
Basic IME support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4803</commentid>
    <comment_count>7</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-07-14 01:24:51 -0700</bug_when>
    <thetext>Reviewed by darin + alexey

Landed r24285</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>15203</attachid>
            <date>2007-06-23 18:39:04 -0700</date>
            <delta_ts>2007-06-23 18:39:04 -0700</delta_ts>
            <desc>spyxx log with Safari/IME. example WM sequence.</desc>
            <filename>spyxx-ime.log</filename>
            <type>text/plain</type>
            <size>11203</size>
            <attacher>808caaa4.8ce9.9cd6c799e9f6</attacher>
            
              <data encoding="base64">RXhhbXBsZSBzcHl4eCBsb2cuDQoNCldpdGggU2FmYXJpLCBzZWFyY2ggYm94LiBGaWx0ZXJlZCBi
eSAnSU1FIG1lc3NhZ2VzJysnS2V5Ym9hcmQgbWVzc2FnZXMnLg0KSSB0eXBlZCBzaW1wbHkgJ2Fh
YScsIGFuZCBlbnRlciBJTUUgY29tcG9zaXRpb24sIHR5cGUgJ3JpbmdvJyBhbmQgZG8gY29tcG9z
aXRpb24od2l0aCBTcGFjZS9FbnRlciBLZXkpLCBhbmQgbGVhdmVkIElNRS4NCihCVFcgJ3Jpbmdv
JyBtZWFucyAnYW4gYXBwbGUnIGluIEphcGFuZXNlLiBUaGlzICdyaW5nbycoa2FuamkgZm9ybSkg
aXMgNCBieXRlcyBpbiBNQkNTLCAyIHdjaGFycyBpbiBVVEYxNi4pDQpJbiB0aGlzIGV4YW1wbGUg
MXN0IGNvbXBvc2l0aW9uIGNhbmRpZGF0ZSBpcyBhY2N1cmF0ZSBhbmQgbm8gbmVlZCBtb3JlIGtl
eWluKQ0KQW5kIHR5cGVkIHNpbXBseSAneXl5JyBhZ2FpbiwgYW5kIGVzY2FwZWQgU2FmYXJpLXdp
bmRvdyB3aXRoIEFsdCtUYWIuDQoNCldpdGggUFNESywgTm8uNTQtNTcgV01fQ0hBUiBpcyBzZW50
IChmb3IgY29tcGF0aWJpbGl0eSkgaWYgV01fSU1FX0NIQVIgaXMgbm90IGFjY2NlcHRlZC4NCklu
IHRoaXMgZXhhbXBsZSwgc3B5eHggd29ya3MgaW4gQU5TSSBtb2RlLCBXTV9DSEFSIHNlbnQgNCB0
aW1lcy4NCmNoQ2hhckNvZGU6JyonIGlzIG5vbi1hc2NpaSBjaGFyIGFuZCBtYXNrZWQgZm9yIHRo
aXMgc3VibWlzc2lvbi4gT2YgY291cnNlIG5vdCAweDJBLg0KV2l0aCBVTklDT0RFIG1vZGUsIFdN
X0NIQVIgbWF5IHNlbnQgd2l0aCAyIHRpbWVzLg0KDQoNCjwwMDAwMT4gMDAwMjAyQTYgUyAuLldN
X0lNRV9TRVRDT05URVhUIGZTZXQ6MSAoTE9ORylpU2hvdzpDMDAwMDAwRiBbd1BhcmFtOjAwMDAw
MDAxIGxQYXJhbTpDMDAwMDAwRl0NCjwwMDAwMj4gMDAwMjAyQTYgUyAuLi4uV01fSU1FX05PVElG
WSBkd0NvbW1hbmQ6MDAwMDAwMDIgZHdEYXRhOjAwMDAwMDAwIFt3UGFyYW06MDAwMDAwMDIgbFBh
cmFtOjAwMDAwMDAwXQ0KPDAwMDAzPiAwMDAyMDJBNiBSIC4uLi5XTV9JTUVfTk9USUZZIGxSZXN1
bHQ6MDAwMDAwMDANCjwwMDAwND4gMDAwMjAyQTYgUiAuLldNX0lNRV9TRVRDT05URVhUIGxSZXN1
bHQ6MDAwMDAwMDANCjwwMDAwNT4gMDAwMjAyQTYgUyAuLldNX0lNRV9TRVRDT05URVhUIGZTZXQ6
MCAoTE9ORylpU2hvdzpDMDAwMDAwRiBbd1BhcmFtOjAwMDAwMDAwIGxQYXJhbTpDMDAwMDAwRl0N
CjwwMDAwNj4gMDAwMjAyQTYgUiAuLldNX0lNRV9TRVRDT05URVhUIGxSZXN1bHQ6MDAwMDAwMDAN
CjwwMDAwNz4gMDAwMjAyQTYgUyAuLi5XTV9JTUVfU0VUQ09OVEVYVCBmU2V0OjEgKExPTkcpaVNo
b3c6QzAwMDAwMEYgW3dQYXJhbTowMDAwMDAwMSBsUGFyYW06QzAwMDAwMEZdDQo8MDAwMDg+IDAw
MDIwMkE2IFIgLi4uV01fSU1FX1NFVENPTlRFWFQgbFJlc3VsdDowMDAwMDAwMA0KPDAwMDA5PiAw
MDAyMDJBNiBTIC5XTV9JTUVfU0VUQ09OVEVYVCBmU2V0OjAgKExPTkcpaVNob3c6QzAwMDAwMEYg
W3dQYXJhbTowMDAwMDAwMCBsUGFyYW06QzAwMDAwMEZdDQo8MDAwMTA+IDAwMDIwMkE2IFIgLldN
X0lNRV9TRVRDT05URVhUIGxSZXN1bHQ6MDAwMDAwMDANCjwwMDAxMT4gMDAwMjAyQTYgUyAuLi5X
TV9JTUVfU0VUQ09OVEVYVCBmU2V0OjEgKExPTkcpaVNob3c6QzAwMDAwMEYgW3dQYXJhbTowMDAw
MDAwMSBsUGFyYW06QzAwMDAwMEZdDQo8MDAwMTI+IDAwMDIwMkE2IFIgLi4uV01fSU1FX1NFVENP
TlRFWFQgbFJlc3VsdDowMDAwMDAwMA0KPDAwMDEzPiAwMDAyMDJBNiBQIFdNX0tFWURPV04gblZp
cnRLZXk6J0EnIGNSZXBlYXQ6MSBTY2FuQ29kZToxRSBmRXh0ZW5kZWQ6MCBmQWx0RG93bjowIGZS
ZXBlYXQ6MCBmVXA6MCBbd1BhcmFtOjAwMDAwMDQxIGxQYXJhbTowMDFFMDAwMSB0aW1lOjA6MjE6
NDEuOTkyXQ0KPDAwMDE0PiAwMDAyMDJBNiBQIFdNX0NIQVIgY2hDaGFyQ29kZTonYScgKDk3KSBj
UmVwZWF0OjEgU2NhbkNvZGU6MUUgZkV4dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0OjAgZlVw
OjAgW3dQYXJhbTowMDAwMDA2MSBsUGFyYW06MDAxRTAwMDEgdGltZTowOjIxOjQxLjk5Ml0NCjww
MDAxNT4gMDAwMjAyQTYgUCBXTV9LRVlVUCBuVmlydEtleTonQScgY1JlcGVhdDoxIFNjYW5Db2Rl
OjFFIGZFeHRlbmRlZDowIGZBbHREb3duOjAgZlJlcGVhdDoxIGZVcDoxIFt3UGFyYW06MDAwMDAw
NDEgbFBhcmFtOkMwMUUwMDAxIHRpbWU6MDoyMTo0Mi4xNTJdDQo8MDAwMTY+IDAwMDIwMkE2IFAg
V01fS0VZRE9XTiBuVmlydEtleTonQScgY1JlcGVhdDoxIFNjYW5Db2RlOjFFIGZFeHRlbmRlZDow
IGZBbHREb3duOjAgZlJlcGVhdDowIGZVcDowIFt3UGFyYW06MDAwMDAwNDEgbFBhcmFtOjAwMUUw
MDAxIHRpbWU6MDoyMTo0Mi4zMTJdDQo8MDAwMTc+IDAwMDIwMkE2IFAgV01fQ0hBUiBjaENoYXJD
b2RlOidhJyAoOTcpIGNSZXBlYXQ6MSBTY2FuQ29kZToxRSBmRXh0ZW5kZWQ6MCBmQWx0RG93bjow
IGZSZXBlYXQ6MCBmVXA6MCBbd1BhcmFtOjAwMDAwMDYxIGxQYXJhbTowMDFFMDAwMSB0aW1lOjA6
MjE6NDIuMzEyXQ0KPDAwMDE4PiAwMDAyMDJBNiBQIFdNX0tFWVVQIG5WaXJ0S2V5OidBJyBjUmVw
ZWF0OjEgU2NhbkNvZGU6MUUgZkV4dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0OjEgZlVwOjEg
W3dQYXJhbTowMDAwMDA0MSBsUGFyYW06QzAxRTAwMDEgdGltZTowOjIxOjQyLjQzMl0NCjwwMDAx
OT4gMDAwMjAyQTYgUCBXTV9LRVlET1dOIG5WaXJ0S2V5OidBJyBjUmVwZWF0OjEgU2NhbkNvZGU6
MUUgZkV4dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0OjAgZlVwOjAgW3dQYXJhbTowMDAwMDA0
MSBsUGFyYW06MDAxRTAwMDEgdGltZTowOjIxOjQyLjU3M10NCjwwMDAyMD4gMDAwMjAyQTYgUCBX
TV9DSEFSIGNoQ2hhckNvZGU6J2EnICg5NykgY1JlcGVhdDoxIFNjYW5Db2RlOjFFIGZFeHRlbmRl
ZDowIGZBbHREb3duOjAgZlJlcGVhdDowIGZVcDowIFt3UGFyYW06MDAwMDAwNjEgbFBhcmFtOjAw
MUUwMDAxIHRpbWU6MDoyMTo0Mi41NzNdDQo8MDAwMjE+IDAwMDIwMkE2IFAgV01fS0VZVVAgblZp
cnRLZXk6J0EnIGNSZXBlYXQ6MSBTY2FuQ29kZToxRSBmRXh0ZW5kZWQ6MCBmQWx0RG93bjowIGZS
ZXBlYXQ6MSBmVXA6MSBbd1BhcmFtOjAwMDAwMDQxIGxQYXJhbTpDMDFFMDAwMSB0aW1lOjA6MjE6
NDIuNzEzXQ0KPDAwMDIyPiAwMDAyMDJBNiBQIFdNX1NZU0tFWURPV04gblZpcnRLZXk6VktfTUVO
VSBjUmVwZWF0OjEgU2NhbkNvZGU6MzggZkV4dGVuZGVkOjAgZkFsdERvd246MSBmUmVwZWF0OjAg
ZlVwOjAgW3dQYXJhbTowMDAwMDAxMiBsUGFyYW06MjAzODAwMDEgdGltZTowOjIxOjQ0LjM3NV0N
CjwwMDAyMz4gMDAwMjAyQTYgUyBXTV9JTUVfTk9USUZZIGR3Q29tbWFuZDowMDAwMDAwOCBkd0Rh
dGE6MDAwMDAwMDAgW3dQYXJhbTowMDAwMDAwOCBsUGFyYW06MDAwMDAwMDBdDQo8MDAwMjQ+IDAw
MDIwMkE2IFIgV01fSU1FX05PVElGWSBsUmVzdWx0OjAwMDAwMDAwDQo8MDAwMjU+IDAwMDIwMkE2
IFAgV01fU1lTS0VZRE9XTiBuVmlydEtleTowMDE5IGNSZXBlYXQ6MSBTY2FuQ29kZToyOSBmRXh0
ZW5kZWQ6MCBmQWx0RG93bjoxIGZSZXBlYXQ6MCBmVXA6MCBbd1BhcmFtOjAwMDAwMDE5IGxQYXJh
bToyMDI5MDAwMSB0aW1lOjA6MjE6NDQuNTI1XQ0KPDAwMDI2PiAwMDAyMDJBNiBQIFdNX1NZU0tF
WVVQIG5WaXJ0S2V5OjAwMTkgY1JlcGVhdDoxIFNjYW5Db2RlOjI5IGZFeHRlbmRlZDowIGZBbHRE
b3duOjEgZlJlcGVhdDoxIGZVcDoxIFt3UGFyYW06MDAwMDAwMTkgbFBhcmFtOkUwMjkwMDAxIHRp
bWU6MDoyMTo0NC43MzZdDQo8MDAwMjc+IDAwMDIwMkE2IFAgV01fS0VZVVAgblZpcnRLZXk6Vktf
TUVOVSBjUmVwZWF0OjEgU2NhbkNvZGU6MzggZkV4dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0
OjEgZlVwOjEgW3dQYXJhbTowMDAwMDAxMiBsUGFyYW06QzAzODAwMDEgdGltZTowOjIxOjQ0Ljgz
Nl0NCjwwMDAyOD4gMDAwMjAyQTYgUCBXTV9LRVlET1dOIG5WaXJ0S2V5OlZLX1BST0NFU1NLRVkg
Y1JlcGVhdDoxIFNjYW5Db2RlOjEzIGZFeHRlbmRlZDowIGZBbHREb3duOjAgZlJlcGVhdDowIGZV
cDowIFt3UGFyYW06MDAwMDAwRTUgbFBhcmFtOjAwMTMwMDAxIHRpbWU6MDoyMTo0NS40MzddDQo8
MDAwMjk+IDAwMDIwMkE2IFAgV01fSU1FX1NUQVJUQ09NUE9TSVRJT04gd1BhcmFtOjAwMDAwMDAw
IGxQYXJhbTowMDAwMDAwMCB0aW1lOjA6MjE6NDUuNDM3DQo8MDAwMzA+IDAwMDIwMkE2IFAgV01f
SU1FX0NPTVBPU0lUSU9OIGNoREJDUzowMDAwIGZGbGFnczowMTk5IFt3UGFyYW06MDAwMDAwMDAg
bFBhcmFtOjAwMDAwMTk5IHRpbWU6MDoyMTo0NS40MzddDQo8MDAwMzE+IDAwMDIwMkE2IFAgV01f
S0VZVVAgblZpcnRLZXk6J1InIGNSZXBlYXQ6MSBTY2FuQ29kZToxMyBmRXh0ZW5kZWQ6MCBmQWx0
RG93bjowIGZSZXBlYXQ6MSBmVXA6MSBbd1BhcmFtOjAwMDAwMDUyIGxQYXJhbTpDMDEzMDAwMSB0
aW1lOjA6MjE6NDUuNTU3XQ0KPDAwMDMyPiAwMDAyMDJBNiBQIFdNX0tFWURPV04gblZpcnRLZXk6
VktfUFJPQ0VTU0tFWSBjUmVwZWF0OjEgU2NhbkNvZGU6MTcgZkV4dGVuZGVkOjAgZkFsdERvd246
MCBmUmVwZWF0OjAgZlVwOjAgW3dQYXJhbTowMDAwMDBFNSBsUGFyYW06MDAxNzAwMDEgdGltZTow
OjIxOjQ1LjU1N10NCjwwMDAzMz4gMDAwMjAyQTYgUCBXTV9JTUVfQ09NUE9TSVRJT04gY2hEQkNT
OjAwMDAgZkZsYWdzOjAxOTkgW3dQYXJhbTowMDAwMDAwMCBsUGFyYW06MDAwMDAxOTkgdGltZTow
OjIxOjQ1LjU1N10NCjwwMDAzND4gMDAwMjAyQTYgUCBXTV9LRVlVUCBuVmlydEtleTonSScgY1Jl
cGVhdDoxIFNjYW5Db2RlOjE3IGZFeHRlbmRlZDowIGZBbHREb3duOjAgZlJlcGVhdDoxIGZVcDox
IFt3UGFyYW06MDAwMDAwNDkgbFBhcmFtOkMwMTcwMDAxIHRpbWU6MDoyMTo0NS42NDddDQo8MDAw
MzU+IDAwMDIwMkE2IFAgV01fS0VZRE9XTiBuVmlydEtleTpWS19QUk9DRVNTS0VZIGNSZXBlYXQ6
MSBTY2FuQ29kZTozMSBmRXh0ZW5kZWQ6MCBmQWx0RG93bjowIGZSZXBlYXQ6MCBmVXA6MCBbd1Bh
cmFtOjAwMDAwMEU1IGxQYXJhbTowMDMxMDAwMSB0aW1lOjA6MjE6NDUuNzk3XQ0KPDAwMDM2PiAw
MDAyMDJBNiBQIFdNX0lNRV9DT01QT1NJVElPTiBjaERCQ1M6MDAwMCBmRmxhZ3M6MDE5OSBbd1Bh
cmFtOjAwMDAwMDAwIGxQYXJhbTowMDAwMDE5OSB0aW1lOjA6MjE6NDUuNzk3XQ0KPDAwMDM3PiAw
MDAyMDJBNiBQIFdNX0tFWVVQIG5WaXJ0S2V5OidOJyBjUmVwZWF0OjEgU2NhbkNvZGU6MzEgZkV4
dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0OjEgZlVwOjEgW3dQYXJhbTowMDAwMDA0RSBsUGFy
YW06QzAzMTAwMDEgdGltZTowOjIxOjQ1Ljg4N10NCjwwMDAzOD4gMDAwMjAyQTYgUCBXTV9LRVlE
T1dOIG5WaXJ0S2V5OlZLX1BST0NFU1NLRVkgY1JlcGVhdDoxIFNjYW5Db2RlOjIyIGZFeHRlbmRl
ZDowIGZBbHREb3duOjAgZlJlcGVhdDowIGZVcDowIFt3UGFyYW06MDAwMDAwRTUgbFBhcmFtOjAw
MjIwMDAxIHRpbWU6MDoyMTo0NS45NjddDQo8MDAwMzk+IDAwMDIwMkE2IFAgV01fSU1FX0NPTVBP
U0lUSU9OIGNoREJDUzowMDAwIGZGbGFnczowMTk5IFt3UGFyYW06MDAwMDAwMDAgbFBhcmFtOjAw
MDAwMTk5IHRpbWU6MDoyMTo0NS45NjddDQo8MDAwNDA+IDAwMDIwMkE2IFAgV01fS0VZRE9XTiBu
VmlydEtleTpWS19QUk9DRVNTS0VZIGNSZXBlYXQ6MSBTY2FuQ29kZToxOCBmRXh0ZW5kZWQ6MCBm
QWx0RG93bjowIGZSZXBlYXQ6MCBmVXA6MCBbd1BhcmFtOjAwMDAwMEU1IGxQYXJhbTowMDE4MDAw
MSB0aW1lOjA6MjE6NDYuMDg4XQ0KPDAwMDQxPiAwMDAyMDJBNiBQIFdNX0lNRV9DT01QT1NJVElP
TiBjaERCQ1M6MDAwMCBmRmxhZ3M6MDE5OSBbd1BhcmFtOjAwMDAwMDAwIGxQYXJhbTowMDAwMDE5
OSB0aW1lOjA6MjE6NDYuMDg4XQ0KPDAwMDQyPiAwMDAyMDJBNiBQIFdNX0tFWVVQIG5WaXJ0S2V5
OidHJyBjUmVwZWF0OjEgU2NhbkNvZGU6MjIgZkV4dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0
OjEgZlVwOjEgW3dQYXJhbTowMDAwMDA0NyBsUGFyYW06QzAyMjAwMDEgdGltZTowOjIxOjQ2LjA5
OF0NCjwwMDA0Mz4gMDAwMjAyQTYgUCBXTV9LRVlET1dOIG5WaXJ0S2V5OlZLX1BST0NFU1NLRVkg
Y1JlcGVhdDoxIFNjYW5Db2RlOjM5IGZFeHRlbmRlZDowIGZBbHREb3duOjAgZlJlcGVhdDowIGZV
cDowIFt3UGFyYW06MDAwMDAwRTUgbFBhcmFtOjAwMzkwMDAxIHRpbWU6MDoyMTo0Ni4xOThdDQo8
MDAwNDQ+IDAwMDIwMkE2IFAgV01fSU1FX0NPTVBPU0lUSU9OIGNoREJDUzowMDAwIGZGbGFnczow
MUJGIFt3UGFyYW06MDAwMDAwMDAgbFBhcmFtOjAwMDAwMUJGIHRpbWU6MDoyMTo0Ni4yMDhdDQo8
MDAwNDU+IDAwMDIwMkE2IFAgV01fS0VZVVAgblZpcnRLZXk6J08nIGNSZXBlYXQ6MSBTY2FuQ29k
ZToxOCBmRXh0ZW5kZWQ6MCBmQWx0RG93bjowIGZSZXBlYXQ6MSBmVXA6MSBbd1BhcmFtOjAwMDAw
MDRGIGxQYXJhbTpDMDE4MDAwMSB0aW1lOjA6MjE6NDYuMjc4XQ0KPDAwMDQ2PiAwMDAyMDJBNiBQ
IFdNX0tFWVVQIG5WaXJ0S2V5OlZLX1NQQUNFIGNSZXBlYXQ6MSBTY2FuQ29kZTozOSBmRXh0ZW5k
ZWQ6MCBmQWx0RG93bjowIGZSZXBlYXQ6MSBmVXA6MSBbd1BhcmFtOjAwMDAwMDIwIGxQYXJhbTpD
MDM5MDAwMSB0aW1lOjA6MjE6NDYuMzI4XQ0KPDAwMDQ3PiAwMDAyMDJBNiBQIFdNX0tFWURPV04g
blZpcnRLZXk6VktfUFJPQ0VTU0tFWSBjUmVwZWF0OjEgU2NhbkNvZGU6MUMgZkV4dGVuZGVkOjAg
ZkFsdERvd246MCBmUmVwZWF0OjAgZlVwOjAgW3dQYXJhbTowMDAwMDBFNSBsUGFyYW06MDAxQzAw
MDEgdGltZTowOjIxOjQ2LjcwOF0NCjwwMDA0OD4gMDAwMjAyQTYgUCBXTV9JTUVfQ09NUE9TSVRJ
T04gY2hEQkNTOjAwMDAgZkZsYWdzOjFFMDAgW3dQYXJhbTowMDAwMDAwMCBsUGFyYW06MDAwMDFF
MDAgdGltZTowOjIxOjQ2LjcwOF0NCjwwMDA0OT4gMDAwMjAyQTYgUyBXTV9JTUVfQ0hBUiBjaENo
YXJDb2RlOicqJyAoMjA5KSBjUmVwZWF0OjEgU2NhbkNvZGU6MDAgW3dQYXJhbTowMDAwOTdEMSBs
UGFyYW06MDAwMDAwMDFdDQo8MDAwNTA+IDAwMDIwMkE2IFIgV01fSU1FX0NIQVIgbFJlc3VsdDow
MDAwMDAwMA0KPDAwMDUxPiAwMDAyMDJBNiBTIFdNX0lNRV9DSEFSIGNoQ2hhckNvZGU6JyonICgy
MzEpIGNSZXBlYXQ6MSBTY2FuQ29kZTowMCBbd1BhcmFtOjAwMDA4Q0U3IGxQYXJhbTowMDAwMDAw
MV0NCjwwMDA1Mj4gMDAwMjAyQTYgUiBXTV9JTUVfQ0hBUiBsUmVzdWx0OjAwMDAwMDAwDQo8MDAw
NTM+IDAwMDIwMkE2IFAgV01fSU1FX0VORENPTVBPU0lUSU9OIHdQYXJhbTowMDAwMDAwMCBsUGFy
YW06MDAwMDAwMDAgdGltZTowOjIxOjQ2LjcwOA0KOyBzZWUgbm90IGFib3ZlIGFib3V0IFdNX0NI
QVIgYmVsb3cNCjwwMDA1ND4gMDAwMjAyQTYgUCBXTV9DSEFSIGNoQ2hhckNvZGU6JyonICgyMDkp
IGNSZXBlYXQ6MSBTY2FuQ29kZTowMCBmRXh0ZW5kZWQ6MCBmQWx0RG93bjowIGZSZXBlYXQ6MCBm
VXA6MCBbd1BhcmFtOjAwMDAwMEQxIGxQYXJhbTowMDAwMDAwMSB0aW1lOjA6MjE6NDYuNzA4XQ0K
PDAwMDU1PiAwMDAyMDJBNiBQIFdNX0NIQVIgY2hDaGFyQ29kZTonKicgKDE1MSkgKGxlYWQpIGNS
ZXBlYXQ6MSBTY2FuQ29kZTowMCBmRXh0ZW5kZWQ6MCBmQWx0RG93bjowIGZSZXBlYXQ6MCBmVXA6
MCBbd1BhcmFtOjAwMDAwMDk3IGxQYXJhbTowMDAwMDAwMSB0aW1lOjA6MjE6NDYuNzA4XQ0KPDAw
MDU2PiAwMDAyMDJBNiBQIFdNX0NIQVIgY2hDaGFyQ29kZTonKicgKDIzMSkgKHRyYWlsKSBjUmVw
ZWF0OjEgU2NhbkNvZGU6MDAgZkV4dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0OjAgZlVwOjAg
W3dQYXJhbTowMDAwMDBFNyBsUGFyYW06MDAwMDAwMDEgdGltZTowOjIxOjQ2LjcwOF0NCjwwMDA1
Nz4gMDAwMjAyQTYgUCBXTV9DSEFSIGNoQ2hhckNvZGU6JyonICgxNDApIChsZWFkKSBjUmVwZWF0
OjEgU2NhbkNvZGU6MDAgZkV4dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0OjAgZlVwOjAgW3dQ
YXJhbTowMDAwMDA4QyBsUGFyYW06MDAwMDAwMDEgdGltZTowOjIxOjQ2LjcwOF0NCjwwMDA1OD4g
MDAwMjAyQTYgUCBXTV9LRVlVUCBuVmlydEtleTpWS19SRVRVUk4gY1JlcGVhdDoxIFNjYW5Db2Rl
OjFDIGZFeHRlbmRlZDowIGZBbHREb3duOjAgZlJlcGVhdDoxIGZVcDoxIFt3UGFyYW06MDAwMDAw
MEQgbFBhcmFtOkMwMUMwMDAxIHRpbWU6MDoyMTo0Ni44MjldDQo8MDAwNTk+IDAwMDIwMkE2IFAg
V01fU1lTS0VZRE9XTiBuVmlydEtleTpWS19NRU5VIGNSZXBlYXQ6MSBTY2FuQ29kZTozOCBmRXh0
ZW5kZWQ6MCBmQWx0RG93bjoxIGZSZXBlYXQ6MCBmVXA6MCBbd1BhcmFtOjAwMDAwMDEyIGxQYXJh
bToyMDM4MDAwMSB0aW1lOjA6MjE6NDcuMjc5XQ0KPDAwMDYwPiAwMDAyMDJBNiBTIFdNX0lNRV9O
T1RJRlkgZHdDb21tYW5kOjAwMDAwMDA4IGR3RGF0YTowMDAwMDAwMCBbd1BhcmFtOjAwMDAwMDA4
IGxQYXJhbTowMDAwMDAwMF0NCjwwMDA2MT4gMDAwMjAyQTYgUiBXTV9JTUVfTk9USUZZIGxSZXN1
bHQ6MDAwMDAwMDANCjwwMDA2Mj4gMDAwMjAyQTYgUCBXTV9TWVNLRVlET1dOIG5WaXJ0S2V5OjAw
MTkgY1JlcGVhdDoxIFNjYW5Db2RlOjI5IGZFeHRlbmRlZDowIGZBbHREb3duOjEgZlJlcGVhdDow
IGZVcDowIFt3UGFyYW06MDAwMDAwMTkgbFBhcmFtOjIwMjkwMDAxIHRpbWU6MDoyMTo0Ny4zNjld
DQo8MDAwNjM+IDAwMDIwMkE2IFAgV01fU1lTS0VZVVAgblZpcnRLZXk6MDAxOSBjUmVwZWF0OjEg
U2NhbkNvZGU6MjkgZkV4dGVuZGVkOjAgZkFsdERvd246MSBmUmVwZWF0OjEgZlVwOjEgW3dQYXJh
bTowMDAwMDAxOSBsUGFyYW06RTAyOTAwMDEgdGltZTowOjIxOjQ3LjU5MF0NCjwwMDA2ND4gMDAw
MjAyQTYgUCBXTV9LRVlVUCBuVmlydEtleTpWS19NRU5VIGNSZXBlYXQ6MSBTY2FuQ29kZTozOCBm
RXh0ZW5kZWQ6MCBmQWx0RG93bjowIGZSZXBlYXQ6MSBmVXA6MSBbd1BhcmFtOjAwMDAwMDEyIGxQ
YXJhbTpDMDM4MDAwMSB0aW1lOjA6MjE6NDcuNzgwXQ0KPDAwMDY1PiAwMDAyMDJBNiBQIFdNX0tF
WURPV04gblZpcnRLZXk6J1knIGNSZXBlYXQ6MSBTY2FuQ29kZToxNSBmRXh0ZW5kZWQ6MCBmQWx0
RG93bjowIGZSZXBlYXQ6MCBmVXA6MCBbd1BhcmFtOjAwMDAwMDU5IGxQYXJhbTowMDE1MDAwMSB0
aW1lOjA6MjE6NDguMjcxXQ0KPDAwMDY2PiAwMDAyMDJBNiBQIFdNX0NIQVIgY2hDaGFyQ29kZTon
eScgKDEyMSkgKHRyYWlsKSBjUmVwZWF0OjEgU2NhbkNvZGU6MTUgZkV4dGVuZGVkOjAgZkFsdERv
d246MCBmUmVwZWF0OjAgZlVwOjAgW3dQYXJhbTowMDAwMDA3OSBsUGFyYW06MDAxNTAwMDEgdGlt
ZTowOjIxOjQ4LjI4MV0NCjwwMDA2Nz4gMDAwMjAyQTYgUCBXTV9LRVlVUCBuVmlydEtleTonWScg
Y1JlcGVhdDoxIFNjYW5Db2RlOjE1IGZFeHRlbmRlZDowIGZBbHREb3duOjAgZlJlcGVhdDoxIGZV
cDoxIFt3UGFyYW06MDAwMDAwNTkgbFBhcmFtOkMwMTUwMDAxIHRpbWU6MDoyMTo0OC4zNjFdDQo8
MDAwNjg+IDAwMDIwMkE2IFAgV01fS0VZRE9XTiBuVmlydEtleTonWScgY1JlcGVhdDoxIFNjYW5D
b2RlOjE1IGZFeHRlbmRlZDowIGZBbHREb3duOjAgZlJlcGVhdDowIGZVcDowIFt3UGFyYW06MDAw
MDAwNTkgbFBhcmFtOjAwMTUwMDAxIHRpbWU6MDoyMTo0OC40ODFdDQo8MDAwNjk+IDAwMDIwMkE2
IFAgV01fQ0hBUiBjaENoYXJDb2RlOid5JyAoMTIxKSBjUmVwZWF0OjEgU2NhbkNvZGU6MTUgZkV4
dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0OjAgZlVwOjAgW3dQYXJhbTowMDAwMDA3OSBsUGFy
YW06MDAxNTAwMDEgdGltZTowOjIxOjQ4LjQ4MV0NCjwwMDA3MD4gMDAwMjAyQTYgUCBXTV9LRVlV
UCBuVmlydEtleTonWScgY1JlcGVhdDoxIFNjYW5Db2RlOjE1IGZFeHRlbmRlZDowIGZBbHREb3du
OjAgZlJlcGVhdDoxIGZVcDoxIFt3UGFyYW06MDAwMDAwNTkgbFBhcmFtOkMwMTUwMDAxIHRpbWU6
MDoyMTo0OC41NTFdDQo8MDAwNzE+IDAwMDIwMkE2IFAgV01fS0VZRE9XTiBuVmlydEtleTonWScg
Y1JlcGVhdDoxIFNjYW5Db2RlOjE1IGZFeHRlbmRlZDowIGZBbHREb3duOjAgZlJlcGVhdDowIGZV
cDowIFt3UGFyYW06MDAwMDAwNTkgbFBhcmFtOjAwMTUwMDAxIHRpbWU6MDoyMTo0OC42NzFdDQo8
MDAwNzI+IDAwMDIwMkE2IFAgV01fQ0hBUiBjaENoYXJDb2RlOid5JyAoMTIxKSBjUmVwZWF0OjEg
U2NhbkNvZGU6MTUgZkV4dGVuZGVkOjAgZkFsdERvd246MCBmUmVwZWF0OjAgZlVwOjAgW3dQYXJh
bTowMDAwMDA3OSBsUGFyYW06MDAxNTAwMDEgdGltZTowOjIxOjQ4LjY3MV0NCjwwMDA3Mz4gMDAw
MjAyQTYgUCBXTV9LRVlVUCBuVmlydEtleTonWScgY1JlcGVhdDoxIFNjYW5Db2RlOjE1IGZFeHRl
bmRlZDowIGZBbHREb3duOjAgZlJlcGVhdDoxIGZVcDoxIFt3UGFyYW06MDAwMDAwNTkgbFBhcmFt
OkMwMTUwMDAxIHRpbWU6MDoyMTo0OC43NzFdDQo8MDAwNzQ+IDAwMDIwMkE2IFAgV01fU1lTS0VZ
RE9XTiBuVmlydEtleTpWS19NRU5VIGNSZXBlYXQ6MSBTY2FuQ29kZTozOCBmRXh0ZW5kZWQ6MCBm
QWx0RG93bjoxIGZSZXBlYXQ6MCBmVXA6MCBbd1BhcmFtOjAwMDAwMDEyIGxQYXJhbToyMDM4MDAw
MSB0aW1lOjA6MjE6NDkuNDkyXQ0KPDAwMDc1PiAwMDAyMDJBNiBQIFdNX1NZU0tFWVVQIG5WaXJ0
S2V5OlZLX1RBQiBjUmVwZWF0OjEgU2NhbkNvZGU6MEYgZkV4dGVuZGVkOjAgZkFsdERvd246MSBm
UmVwZWF0OjAgZlVwOjEgW3dQYXJhbTowMDAwMDAwOSBsUGFyYW06QTAwRjAwMDEgdGltZTowOjIx
OjQ5LjcyM10NCjwwMDA3Nj4gMDAwMjAyQTYgUCBXTV9LRVlVUCBuVmlydEtleTpWS19NRU5VIGNS
ZXBlYXQ6MSBTY2FuQ29kZTozOCBmRXh0ZW5kZWQ6MCBmQWx0RG93bjowIGZSZXBlYXQ6MSBmVXA6
MSBbd1BhcmFtOjAwMDAwMDEyIGxQYXJhbTpDMDM4MDAwMSB0aW1lOjA6MjE6NDkuNzgzXQ0KPDAw
MDc3PiAwMDAyMDJBNiBTIC5XTV9JTUVfU0VUQ09OVEVYVCBmU2V0OjAgKExPTkcpaVNob3c6QzAw
MDAwMEYgW3dQYXJhbTowMDAwMDAwMCBsUGFyYW06QzAwMDAwMEZdDQo8MDAwNzg+IDAwMDIwMkE2
IFMgLi4uV01fSU1FX05PVElGWSBkd0NvbW1hbmQ6MDAwMDAwMDEgZHdEYXRhOjAwMDAwMDAwIFt3
UGFyYW06MDAwMDAwMDEgbFBhcmFtOjAwMDAwMDAwXQ0KPDAwMDc5PiAwMDAyMDJBNiBSIC4uLldN
X0lNRV9OT1RJRlkgbFJlc3VsdDowMDAwMDAwMA0KPDAwMDgwPiAwMDAyMDJBNiBSIC5XTV9JTUVf
U0VUQ09OVEVYVCBsUmVzdWx0OjAwMDAwMDAwDQoNCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15511</attachid>
            <date>2007-07-13 21:27:11 -0700</date>
            <delta_ts>2007-07-14 09:55:43 -0700</delta_ts>
            <desc>Basic IME support</desc>
            <filename>imefix.patch</filename>
            <type>text/plain</type>
            <size>19241</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDI3OSkKKysrIFdlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE3LDcgKzEz
MTcsNiBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8g
PSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0
OUMyODMyMDg5MDJCMEYwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WFByb2plY3QgIldlYktpdCIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAy
LjQiOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAo
CiAJCQkJRW5nbGlzaCwKQEAgLTEzMzEsNyArMTMzMCw2IEBACiAJCQltYWluR3JvdXAgPSAwODY3
RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICovOwogCQkJcHJvZHVjdFJlZkdyb3VwID0g
MDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICovOwogCQkJcHJvamVjdERpclBh
dGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7CiAJCQl0YXJnZXRzID0gKAogCQkJCTkzOTgx
MDBBMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXQgKi8sCiAJCQkpOwpJbmRleDogd2luL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSB3aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDI3OSkKKysrIHdp
bi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MSBAQAorMjAwNy0wNy0xMyAg
T2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUyMzE1Mjg+
IElubGluZSBpbnB1dCBvZiBJbnRlcm5hdGlvbmFsIHRleHQgKElNRSkKKyAgICAgICAgICAgICAg
ICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMzMQorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWRkcyBJTUUgc3VwcG9ydCB0byBXZWJLaXQvd2luLCBpdCBjdXJyZW50bHkg
ZG9lcyBub3Qgc3VwcG9ydAorICAgICAgICByZWNvbnZlcnNpb24gKDxyZGFyOi8vcHJvYmxlbS81
MzM0ODE4PikgYW5kIGhhcyBpc3N1ZXMgd2l0aCB0aGUgY2hpbmVzZQorICAgICAgICBJTUVzICg8
cmRhcjovL3Byb2JsZW0vNTMzNDgyNj4pCisKKyAgICAgICAgKiBXZWJFZGl0b3JDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlwcmVzcyk6Cisg
ICAgICAgICAgUHJldmVudCB0aGUgaW5pdGlhbCBrZXlkb3duIGZvciBhbiBJTUUgZnJvbSB0cmln
Z2VyaW5nIGEga2V5cHJlc3NlZCBldmVudAorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAg
ICAoV2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJWaWV3OjprZXlVcCk6CisgICAgICAg
IChXZWJWaWV3OjprZXlEb3duKToKKyAgICAgICAgKFdlYlZpZXdXbmRQcm9jKToKKyAgICAgICAg
KElNTURpY3Q6OmRpY3QpOgorICAgICAgICAoSU1NRGljdDo6SU1NRGljdCk6CisgICAgICAgICAg
IER5bmFtaWMgbG9hZGVyIGZvciBJTUUgbGlicmFyaWVzCisKKyAgICAgICAgKFdlYlZpZXc6Omdl
dElNTUNvbnRleHQpOgorICAgICAgICAoV2ViVmlldzo6cmVsZWFzZUlNTUNvbnRleHQpOgorICAg
ICAgICAoV2ViVmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyk6CisgICAgICAgIChzZWxlY3Rp
b25JbnNpZGVNYXJrZWRUZXh0KToKKyAgICAgICAgKHNldFNlbGVjdGlvblRvRW5kT2ZSYW5nZSk6
CisgICAgICAgIChXZWJWaWV3OjpyZXNldElNRSk6CisgICAgICAgIChXZWJWaWV3Ojp1cGRhdGVT
ZWxlY3Rpb25Gb3JJTUUpOgorICAgICAgICAoV2ViVmlldzo6c2VsZWN0aW9uQ2hhbmdlZCk6Cisg
ICAgICAgIChnZXRDb21wb3NpdGlvblN0cmluZyk6CisgICAgICAgIChjb21wb3NpdGlvblRvVW5k
ZXJsaW5lcyk6CisgICAgICAgICAgIEhlbHBlciBmdW5jdGlvbnMKKworICAgICAgICAoV2ViVmll
dzo6b25JTUVTdGFydENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYlZpZXc6Om9uSU1FQ29tcG9z
aXRpb24pOgorICAgICAgICAoV2ViVmlldzo6b25JTUVFbmRDb21wb3NpdGlvbik6CisgICAgICAg
IChXZWJWaWV3OjpvbklNRUNoYXIpOgorICAgICAgICAoV2ViVmlldzo6b25JTUVOb3RpZnkpOgor
ICAgICAgICAoV2ViVmlldzo6b25JTUVSZXF1ZXN0KToKKyAgICAgICAgKFdlYlZpZXc6Om9uSU1F
U2VsZWN0KToKKyAgICAgICAgKFdlYlZpZXc6Om9uSU1FU2V0Q29udGV4dCk6CisgICAgICAgICAg
IElNRSBldmVudCBoYW5kbGluZywgc28gZmFyIG1vc3Qgb2YgdGhlc2UgYXJlIG5vdCBpbXBsZW1l
bnRlZCwgYnV0IHRoZSBidWxrIG9mIGZ1bmN0aW9uYWxpdHkgCisgICAgICAgICAgIGlzIHBlcmZv
cm1lZCB0aGUgdGhlIGNvbXBvc2l0aW9uIGV2ZW50IGhhbmRsZXJzCisgICAgICAgICogV2ViVmll
dy5oOgorCiAyMDA3LTA3LTEyICBBbGljZSBMaXUgIDxhbGljZS5saXVAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBhbmQgU3RldmUuCkluZGV4OiB3aW4vV2ViRWRpdG9y
Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3aW4vV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNp
b24gMjQyNzkpCisrKyB3aW4vV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEwLDcgKzIxMCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkQ28K
IAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV93ZWJWaWV3LT5zZWxlY3Rpb25DaGFuZ2VkKCk7
CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKQEAgLTU5Nyw4ICs1
OTcsMTIgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUtleXByZXNzKEtleQogICAgICAg
ICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpo
YW5kbGVJbnB1dE1ldGhvZEtleXByZXNzKEtleWJvYXJkRXZlbnQqKQordm9pZCBXZWJFZGl0b3JD
bGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5cHJlc3MoS2V5Ym9hcmRFdmVudCogZXZ0KQogewor
ICAgIC8vIFRoZSBrZXkgcHJlc3MgdGhhdCB0cmlnZ2VycyBhbiBJTUUgdHJpZ2dlcnMgYSBXTV9L
RVlET1dOIHdpdGggVktfUFJPQ0VTU0tFWQorICAgIC8vIHNvIHdlIGludGVyY2VwdCBhbmQgcHJl
dmVudCB0aGUga2V5cHJlc3MgZnJvbSBvY2N1cnJpbmcKKyAgICBpZiAoZXZ0LT5rZXlFdmVudCgp
ICYmIGV2dC0+a2V5RXZlbnQoKS0+V2luZG93c0tleUNvZGUoKSA9PSBWS19QUk9DRVNTS0VZKQor
ICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzZWxlY3RXb3JkQmVmb3JlTWVudUV2ZW50KCkKSW5kZXg6IHdpbi9XZWJWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSB3aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDI0Mjc5KQorKysgd2luL1dl
YlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw3IEBACiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvdmFsdWUuaD4KICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxQcm90b2NvbFBy
aXYuaD4KICNpbmNsdWRlIDx0Y2hhci5oPgorI2luY2x1ZGUgPGRpbW0uaD4KICNpbmNsdWRlIDx3
aW5kb3dzeC5oPgogI2luY2x1ZGUgPFNobE9iai5oPgogCkBAIC0xMzUsNiArMTM2LDcgQEAgV2Vi
Vmlldzo6V2ViVmlldygpCiAsIG1faGFzU3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoZmFsc2UpCiAs
IG1fc21hcnRJbnNlcnREZWxldGVFbmFibGVkKGZhbHNlKQogLCBtX2RpZENsb3NlKGZhbHNlKQor
LCBtX2luSU1FQ29tcG9zaXRpb24oMCkKICwgbV90b29sVGlwSHduZCgwKQogewogICAgIEtKUzo6
Q29sbGVjdG9yOjpyZWdpc3RlckFzTWFpblRocmVhZCgpOwpAQCAtODU2LDYgKzg1OCwxMCBAQCBi
b29sIFdlYlZpZXc6OmtleVVwKFdQQVJBTSB2aXJ0dWFsS2V5Q29kCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKKyAgICAvLyBEb24ndCBwcm9jZXNzIGtleURvd24gZXZlbnRzIGR1cmlu
ZyBJTUUgY29tcG9zaXRpb24KKyAgICBpZiAobV9pbklNRUNvbXBvc2l0aW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5RXZlbnQobV92aWV3
V2luZG93LCB2aXJ0dWFsS2V5Q29kZSwga2V5RGF0YSwgbV9jdXJyZW50Q2hhcmFjdGVyQ29kZSk7
CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9y
TWFpbkZyYW1lKCk7CiAgICAgbV9jdXJyZW50Q2hhcmFjdGVyQ29kZSA9IDA7CkBAIC05ODYsNiAr
OTkyLDEwIEBAIGJvb2wgV2ViVmlldzo6a2V5RG93bihXUEFSQU0gdmlydHVhbEtleUMKICAgICBp
ZiAodmlydHVhbEtleUNvZGUgPT0gVktfU0hJRlQgfHwgdmlydHVhbEtleUNvZGUgPT0gVktfQ09O
VFJPTCB8fCB2aXJ0dWFsS2V5Q29kZSA9PSBWS19DQVBJVEFMKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICAvLyBEb24ndCBwcm9jZXNzIGtleURvd24gZXZlbnRzIGR1cmluZyBJTUUgY29t
cG9zaXRpb24KKyAgICBpZiAobV9pbklNRUNvbXBvc2l0aW9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5RXZlbnQobV92aWV3V2luZG93LCB2
aXJ0dWFsS2V5Q29kZSwga2V5RGF0YSwgbV9jdXJyZW50Q2hhcmFjdGVyQ29kZSk7CiAgICAgRnJh
bWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1l
KCk7CiAKQEAgLTEyMzQsNiArMTI0NCw3IEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYlZp
ZXdXbmRQcm9jKEgKICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBsb3NpbmcgZm9jdXMgdG8gYW5v
dGhlciBwYXJ0IG9mIG91ciB3aW5kb3csIHRoZW4gd2UgYXJlIG5vIGxvbmdlciBmb2N1c2VkIGZv
ciByZWFsCiAgICAgICAgICAgICAvLyBhbmQgd2UgbmVlZCB0byBjbGVhciBvdXQgdGhlIGZvY3Vz
ZWQgdGFyZ2V0LgogICAgICAgICAgICAgRm9jdXNDb250cm9sbGVyKiBmb2N1c0NvbnRyb2xsZXIg
PSB3ZWJWaWV3LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpOworICAgICAgICAgICAgd2ViVmll
dy0+cmVzZXRJTUUoZm9jdXNDb250cm9sbGVyLT5mb2N1c2VkT3JNYWluRnJhbWUoKSk7CiAgICAg
ICAgICAgICBpZiAoR2V0QW5jZXN0b3IoaFduZCwgR0FfUk9PVCkgIT0gR2V0Rm9jdXMoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBmb2N1c0NvbnRyb2xsZXItPmZvY3Vz
ZWRGcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5zZXRJc0FjdGl2ZShmYWxz
ZSk7CkBAIC0xMzA1LDYgKzEzMTYsMzEgQEAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViVmll
d1duZFByb2MoSAogICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIFdNX0lNRV9TVEFSVENPTVBPU0lUSU9OOgor
ICAgICAgICAgICAgaGFuZGxlZCA9IHdlYlZpZXctPm9uSU1FU3RhcnRDb21wb3NpdGlvbigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV01fSU1FX1JFUVVFU1Q6CisgICAgICAg
ICAgICB3ZWJWaWV3LT5vbklNRVJlcXVlc3Qod1BhcmFtLCBsUGFyYW0sICZsUmVzdWx0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdNX0lNRV9DT01QT1NJVElPTjoKKyAgICAg
ICAgICAgIGhhbmRsZWQgPSB3ZWJWaWV3LT5vbklNRUNvbXBvc2l0aW9uKGxQYXJhbSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTV9JTUVfRU5EQ09NUE9TSVRJT046CisgICAg
ICAgICAgICBoYW5kbGVkID0gd2ViVmlldy0+b25JTUVFbmRDb21wb3NpdGlvbigpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV01fSU1FX0NIQVI6CisgICAgICAgICAgICBoYW5k
bGVkID0gd2ViVmlldy0+b25JTUVDaGFyKHdQYXJhbSwgbFBhcmFtKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdNX0lNRV9OT1RJRlk6CisgICAgICAgICAgICBoYW5kbGVkID0g
d2ViVmlldy0+b25JTUVOb3RpZnkod1BhcmFtLCBsUGFyYW0sICZsUmVzdWx0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdNX0lNRV9TRUxFQ1Q6CisgICAgICAgICAgICBoYW5k
bGVkID0gd2ViVmlldy0+b25JTUVTZWxlY3Qod1BhcmFtLCBsUGFyYW0pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV01fSU1FX1NFVENPTlRFWFQ6CisgICAgICAgICAgICBoYW5k
bGVkID0gd2ViVmlldy0+b25JTUVTZXRDb250ZXh0KHdQYXJhbSwgbFBhcmFtKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdNX1NFVENVUlNPUjoKICAgICAgICAgICAgIGlmIChs
YXN0U2V0Q3Vyc29yKSB7CiAgICAgICAgICAgICAgICAgU2V0Q3Vyc29yKGxhc3RTZXRDdXJzb3Ip
OwpAQCAtMzU5OCw2ICszNjM0LDI5NyBAQCB2b2lkIFdlYlZpZXc6OnNldFByb2hpYml0c01haW5G
cmFtZVNjcm9sCiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+c2V0UHJvaGliaXRzU2Nyb2xsaW5n
KGIpOwogfQogCitjbGFzcyBJTU1EaWN0IHsKKyAgICB0eXBlZGVmIEhJTUMgKENBTExCQUNLICpn
ZXRDb250ZXh0UHRyKShIV05EKTsKKyAgICB0eXBlZGVmIEJPT0wgKENBTExCQUNLICpyZWxlYXNl
Q29udGV4dFB0cikoSFdORCwgSElNQyk7CisgICAgdHlwZWRlZiBMT05HIChDQUxMQkFDSyAqZ2V0
Q29tcG9zaXRpb25TdHJpbmdQdHIpKEhJTUMsIERXT1JELCBMUFZPSUQsIERXT1JEKTsKKyAgICB0
eXBlZGVmIEJPT0wgKENBTExCQUNLICpzZXRDYW5kaWRhdGVXaW5kb3dQdHIpKEhJTUMsIExQQ0FO
RElEQVRFRk9STSk7CisgICAgdHlwZWRlZiBCT09MIChDQUxMQkFDSyAqc2V0T3BlblN0YXR1c1B0
cikoSElNQywgQk9PTCk7CisgICAgdHlwZWRlZiBCT09MIChDQUxMQkFDSyAqbm90aWZ5SU1FUHRy
KShISU1DLCBEV09SRCwgRFdPUkQsIERXT1JEKTsKKworcHVibGljOgorICAgIGdldENvbnRleHRQ
dHIgZ2V0Q29udGV4dDsKKyAgICByZWxlYXNlQ29udGV4dFB0ciByZWxlYXNlQ29udGV4dDsKKyAg
ICBnZXRDb21wb3NpdGlvblN0cmluZ1B0ciBnZXRDb21wb3NpdGlvblN0cmluZzsKKyAgICBzZXRD
YW5kaWRhdGVXaW5kb3dQdHIgc2V0Q2FuZGlkYXRlV2luZG93OworICAgIHNldE9wZW5TdGF0dXNQ
dHIgc2V0T3BlblN0YXR1czsKKyAgICBub3RpZnlJTUVQdHIgbm90aWZ5SU1FOworICAgIHN0YXRp
YyBjb25zdCBJTU1EaWN0JiBkaWN0KCk7Citwcml2YXRlOgorICAgIElNTURpY3QoKTsKKyAgICBI
TU9EVUxFIG1faW5zdGFuY2U7Cit9OworCitjb25zdCBJTU1EaWN0JiBJTU1EaWN0OjpkaWN0KCkK
K3sKKyAgICBzdGF0aWMgSU1NRGljdCBpbnN0YW5jZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9
CisKK0lNTURpY3Q6OklNTURpY3QoKQoreworICAgIG1faW5zdGFuY2UgPSA6OkxvYWRMaWJyYXJ5
KFRFWFQoIklNTTMyLkRMTCIpKTsKKyAgICBnZXRDb250ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxn
ZXRDb250ZXh0UHRyPig6OkdldFByb2NBZGRyZXNzKG1faW5zdGFuY2UsICJJbW1HZXRDb250ZXh0
IikpOworICAgIEFTU0VSVChnZXRDb250ZXh0KTsKKyAgICByZWxlYXNlQ29udGV4dCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8cmVsZWFzZUNvbnRleHRQdHI+KDo6R2V0UHJvY0FkZHJlc3MobV9pbnN0YW5j
ZSwgIkltbVJlbGVhc2VDb250ZXh0IikpOworICAgIEFTU0VSVChyZWxlYXNlQ29udGV4dCk7Cisg
ICAgZ2V0Q29tcG9zaXRpb25TdHJpbmcgPSByZWludGVycHJldF9jYXN0PGdldENvbXBvc2l0aW9u
U3RyaW5nUHRyPig6OkdldFByb2NBZGRyZXNzKG1faW5zdGFuY2UsICJJbW1HZXRDb21wb3NpdGlv
blN0cmluZ1ciKSk7CisgICAgQVNTRVJUKGdldENvbXBvc2l0aW9uU3RyaW5nKTsKKyAgICBzZXRD
YW5kaWRhdGVXaW5kb3cgPSByZWludGVycHJldF9jYXN0PHNldENhbmRpZGF0ZVdpbmRvd1B0cj4o
OjpHZXRQcm9jQWRkcmVzcyhtX2luc3RhbmNlLCAiSW1tU2V0Q2FuZGlkYXRlV2luZG93IikpOwor
ICAgIEFTU0VSVChzZXRDYW5kaWRhdGVXaW5kb3cpOworICAgIHNldE9wZW5TdGF0dXMgPSByZWlu
dGVycHJldF9jYXN0PHNldE9wZW5TdGF0dXNQdHI+KDo6R2V0UHJvY0FkZHJlc3MobV9pbnN0YW5j
ZSwgIkltbVNldE9wZW5TdGF0dXMiKSk7CisgICAgQVNTRVJUKHNldE9wZW5TdGF0dXMpOworICAg
IG5vdGlmeUlNRSA9IHJlaW50ZXJwcmV0X2Nhc3Q8bm90aWZ5SU1FUHRyPig6OkdldFByb2NBZGRy
ZXNzKG1faW5zdGFuY2UsICJJbW1Ob3RpZnlJTUUiKSk7CisgICAgQVNTRVJUKG5vdGlmeUlNRSk7
Cit9CisKK0hJTUMgV2ViVmlldzo6Z2V0SU1NQ29udGV4dCgpIAoreworICAgIEhJTUMgY29udGV4
dCA9IElNTURpY3Q6OmRpY3QoKS5nZXRDb250ZXh0KG1fdmlld1dpbmRvdyk7CisgICAgQVNTRVJU
KGNvbnRleHQpOworICAgIHJldHVybiBjb250ZXh0OworfQorCit2b2lkIFdlYlZpZXc6OnJlbGVh
c2VJTU1Db250ZXh0KEhJTUMgaElNQykKK3sKKyAgICBpZiAoIWhJTUMpCisgICAgICAgIHJldHVy
bjsKKyAgICBJTU1EaWN0OjpkaWN0KCkucmVsZWFzZUNvbnRleHQobV92aWV3V2luZG93LCBoSU1D
KTsKK30KKwordm9pZCBXZWJWaWV3OjpwcmVwYXJlQ2FuZGlkYXRlV2luZG93KEZyYW1lKiB0YXJn
ZXRGcmFtZSwgSElNQyBoSW5wdXRDb250ZXh0KSAKK3sKKyAgICBJbnRSZWN0IGNhcmV0OworICAg
IGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xs
ZXIoKS0+c2VsZWN0aW9uKCkudG9SYW5nZSgpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHRlbXBSYW5nZSA9IHJhbmdlLT5jbG9uZVJhbmdl
KGVjKTsKKyAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+Zmlyc3RSZWN0Rm9yUmFuZ2UodGVt
cFJhbmdlLmdldCgpKTsKKyAgICB9CisgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+dmlldygpLT5j
b250ZW50c1RvV2luZG93KGNhcmV0KTsKKyAgICBDQU5ESURBVEVGT1JNIGZvcm07CisgICAgZm9y
bS5kd0luZGV4ID0gMDsKKyAgICBmb3JtLmR3U3R5bGUgPSBDRlNfQ0FORElEQVRFUE9TOworICAg
IGZvcm0ucHRDdXJyZW50UG9zLnggPSBjYXJldC54KCk7CisgICAgZm9ybS5wdEN1cnJlbnRQb3Mu
eSA9IGNhcmV0LnkoKSArIGNhcmV0LmhlaWdodCgpOworICAgIGZvcm0ucmNBcmVhLnRvcCA9IDA7
CisgICAgZm9ybS5yY0FyZWEuYm90dG9tID0gMDsKKyAgICBmb3JtLnJjQXJlYS5sZWZ0ID0gMDsK
KyAgICBmb3JtLnJjQXJlYS5yaWdodCA9IDA7CisgICAgSU1NRGljdDo6ZGljdCgpLnNldENhbmRp
ZGF0ZVdpbmRvdyhoSW5wdXRDb250ZXh0LCAmZm9ybSk7Cit9CisKK3N0YXRpYyBib29sIG1hcmtl
ZFRleHRDb250YWluc1NlbGVjdGlvbihSYW5nZSogbWFya2VkVGV4dFJhbmdlLCBSYW5nZSogc2Vs
ZWN0aW9uKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgQVNTRVJUKG1hcmtl
ZFRleHRSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpID09IG1hcmtlZFRleHRSYW5nZS0+ZW5kQ29u
dGFpbmVyKGVjKSk7CisKKyAgICBpZiAoc2VsZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYykgIT0g
bWFya2VkVGV4dFJhbmdlLT5zdGFydENvbnRhaW5lcihlYykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChzZWxlY3Rpb24tPmVuZENvbnRhaW5lcihlYykgIT0gbWFya2VkVGV4dFJh
bmdlLT5lbmRDb250YWluZXIoZWMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
c2VsZWN0aW9uLT5zdGFydE9mZnNldChlYykgPCBtYXJrZWRUZXh0UmFuZ2UtPnN0YXJ0T2Zmc2V0
KGVjKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNlbGVjdGlvbi0+ZW5kT2Zm
c2V0KGVjKSA+IG1hcmtlZFRleHRSYW5nZS0+ZW5kT2Zmc2V0KGVjKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFNlbGVjdGlv
blRvRW5kT2ZSYW5nZShGcmFtZSogdGFyZ2V0RnJhbWUsIFJhbmdlKiBzb3VyY2VSYW5nZSkKK3sK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBOb2RlKiBjYXJldENvbnRhaW5lciA9IHNv
dXJjZVJhbmdlLT5lbmRDb250YWluZXIoZWMpOworICAgIHVuc2lnbmVkIGNhcmV0T2Zmc2V0ID0g
c291cmNlUmFuZ2UtPmVuZE9mZnNldChlYyk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRh
cmdldEZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOworICAgIHJhbmdlLT5zZXRTdGFy
dChjYXJldENvbnRhaW5lciwgY2FyZXRPZmZzZXQsIGVjKTsKKyAgICByYW5nZS0+c2V0RW5kKGNh
cmV0Q29udGFpbmVyLCBjYXJldE9mZnNldCwgZWMpOworICAgIHRhcmdldEZyYW1lLT5lZGl0b3Io
KS0+dW5tYXJrVGV4dCgpOworICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCkt
PnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFdlYkNvcmU6OkRPV05TVFJFQU0sIHRydWUs
IGVjKTsKK30KKwordm9pZCBXZWJWaWV3OjpyZXNldElNRShGcmFtZSogdGFyZ2V0RnJhbWUpCit7
CisgICAgaWYgKHRhcmdldEZyYW1lKQorICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPnVu
bWFya1RleHQoKTsKKworICAgIGlmIChISU1DIGhJbnB1dENvbnRleHQgPSBnZXRJTU1Db250ZXh0
KCkpIHsKKyAgICAgICAgSU1NRGljdDo6ZGljdCgpLm5vdGlmeUlNRShoSW5wdXRDb250ZXh0LCBO
SV9DT01QT1NJVElPTlNUUiwgQ1BTX0NBTkNFTCwgMCk7CisgICAgICAgIHJlbGVhc2VJTU1Db250
ZXh0KGhJbnB1dENvbnRleHQpOworICAgIH0KK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVTZWxl
Y3Rpb25Gb3JJTUUoKQoreworICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICghdGFyZ2V0RnJhbWUg
fHwgIXRhcmdldEZyYW1lLT5tYXJrZWRUZXh0UmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmICh0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmlnbm9yZU1hcmtlZFRleHRTZWxlY3Rp
b25DaGFuZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rp
b25SYW5nZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNlbGVjdGlvbigp
LnRvUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGlvblJhbmdlIHx8ICFtYXJrZWRUZXh0Q29udGFp
bnNTZWxlY3Rpb24odGFyZ2V0RnJhbWUtPm1hcmtlZFRleHRSYW5nZSgpLCBzZWxlY3Rpb25SYW5n
ZS5nZXQoKSkpCisgICAgICAgIHJlc2V0SU1FKHRhcmdldEZyYW1lKTsKK30KKwordm9pZCBXZWJW
aWV3OjpzZWxlY3Rpb25DaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVTZWxlY3Rpb25Gb3JJTUUoKTsK
K30KKworYm9vbCBXZWJWaWV3OjpvbklNRVN0YXJ0Q29tcG9zaXRpb24oKQoreworICAgIG1faW5J
TUVDb21wb3NpdGlvbisrOworICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICghdGFyZ2V0RnJhbWUp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy9UaWR5IHVwIGluIGNhc2UgdGhlIGxhc3Qg
SU1FIGNvbXBvc2l0aW9uIHdhcyBub3QgY29ycmVjdGx5IHRlcm1pbmF0ZWQKKyAgICB0YXJnZXRG
cmFtZS0+ZWRpdG9yKCktPnVubWFya1RleHQoKTsKKworICAgIEhJTUMgaElucHV0Q29udGV4dCA9
IGdldElNTUNvbnRleHQoKTsKKyAgICBwcmVwYXJlQ2FuZGlkYXRlV2luZG93KHRhcmdldEZyYW1l
LCBoSW5wdXRDb250ZXh0KTsKKyAgICByZWxlYXNlSU1NQ29udGV4dChoSW5wdXRDb250ZXh0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZ2V0Q29tcG9zaXRpb25TdHJpbmco
SElNQyBoSW5wdXRDb250ZXh0LCBEV09SRCB0eXBlLCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBp
bnQgY29tcG9zaXRpb25MZW5ndGggPSBJTU1EaWN0OjpkaWN0KCkuZ2V0Q29tcG9zaXRpb25TdHJp
bmcoaElucHV0Q29udGV4dCwgdHlwZSwgMCwgMCk7CisgICAgaWYgKGNvbXBvc2l0aW9uTGVuZ3Ro
IDw9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBWZWN0b3I8VUNoYXI+IGNvbXBvc2l0
aW9uQnVmZmVyKGNvbXBvc2l0aW9uTGVuZ3RoIC8gMik7CisgICAgY29tcG9zaXRpb25MZW5ndGgg
PSBJTU1EaWN0OjpkaWN0KCkuZ2V0Q29tcG9zaXRpb25TdHJpbmcoaElucHV0Q29udGV4dCwgdHlw
ZSwgKExQVk9JRCljb21wb3NpdGlvbkJ1ZmZlci5kYXRhKCksIGNvbXBvc2l0aW9uTGVuZ3RoKTsK
KyAgICByZXN1bHQgPSBTdHJpbmcoY29tcG9zaXRpb25CdWZmZXIsIGNvbXBvc2l0aW9uTGVuZ3Ro
IC8gMik7CisgICAgQVNTRVJUKCFjb21wb3NpdGlvbkxlbmd0aCB8fCBjb21wb3NpdGlvbkJ1ZmZl
clswXSk7CisgICAgQVNTRVJUKCFjb21wb3NpdGlvbkxlbmd0aCB8fCBjb21wb3NpdGlvbkJ1ZmZl
cltjb21wb3NpdGlvbkxlbmd0aCAvIDIgLSAxXSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyB2b2lkIGNvbXBvc2l0aW9uVG9VbmRlcmxpbmVzKGNvbnN0IFZlY3RvcjxEV09SRD4mIGNs
YXVzZXMsIGNvbnN0IFZlY3RvcjxCWVRFPiYgYXR0cmlidXRlcywgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yPE1hcmtlZFRl
eHRVbmRlcmxpbmU+JiB1bmRlcmxpbmVzKQoreworICAgIGlmICghY2xhdXNlcy5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKyAgCisgICAgY29uc3Qgc2l6ZV90IG51bUJvdW5kYXJpZXMgPSBjbGF1
c2VzLnNpemUoKSAtIDE7CisgICAgdW5kZXJsaW5lcy5yZXNpemUobnVtQm91bmRhcmllcyk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUJvdW5kYXJpZXM7IGkrKykgeworICAgICAg
ICB1bmRlcmxpbmVzW2ldLnN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBjbGF1c2VzW2ldOwor
ICAgICAgICB1bmRlcmxpbmVzW2ldLmVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgY2xhdXNlc1tp
ICsgMV07CisgICAgICAgIEJZVEUgYXR0cmlidXRlID0gYXR0cmlidXRlc1tjbGF1c2VzW2ldXTsK
KyAgICAgICAgdW5kZXJsaW5lc1tpXS50aGljayA9IGF0dHJpYnV0ZSA9PSBBVFRSX1RBUkdFVF9D
T05WRVJURUQgfHwgYXR0cmlidXRlID09IEFUVFJfVEFSR0VUX05PVENPTlZFUlRFRDsKKyAgICAg
ICAgdW5kZXJsaW5lc1tpXS5jb2xvciA9IENvbG9yKDAsMCwwKTsKKyAgICB9Cit9CisKK2Jvb2wg
V2ViVmlldzo6b25JTUVDb21wb3NpdGlvbihMUEFSQU0gbHBhcmFtKQoreworICAgIEhJTUMgaElu
cHV0Q29udGV4dCA9IGdldElNTUNvbnRleHQoKTsKKyAgICBpZiAoIWhJbnB1dENvbnRleHQpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCF0YXJnZXRG
cmFtZSB8fCAhdGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgcHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyh0YXJnZXRGcmFtZSwgaElucHV0
Q29udGV4dCk7CisgICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5zZXRJZ25vcmVNYXJrZWRUZXh0
U2VsZWN0aW9uQ2hhbmdlKHRydWUpOworCisgICAgLy8gaWYgd2UgaGFkIG1hcmtlZCB0ZXh0IGFs
cmVhZHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHJlcGxhY2UKKyAgICAvLyB0aGF0LCBpbnN0
ZWFkIG9mIHRoZSBzZWxlY3Rpb24vY2FyZXQKKyAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPnNl
bGVjdE1hcmtlZFRleHQoKTsKKworICAgIGlmIChscGFyYW0gJiBHQ1NfUkVTVUxUU1RSIHx8ICFs
cGFyYW0pIHsKKyAgICAgICAgU3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nOworICAgICAgICBpZiAo
IWdldENvbXBvc2l0aW9uU3RyaW5nKGhJbnB1dENvbnRleHQsIEdDU19SRVNVTFRTVFIsIGNvbXBv
c2l0aW9uU3RyaW5nKSAmJiBscGFyYW0pCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAg
ICAgIAorICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPnJlcGxhY2VNYXJrZWRUZXh0KGNv
bXBvc2l0aW9uU3RyaW5nKTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBzb3VyY2VSYW5nZSA9IHRh
cmdldEZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNlbGVjdGlvbigpLnRvUmFuZ2UoKTsK
KyAgICAgICAgc2V0U2VsZWN0aW9uVG9FbmRPZlJhbmdlKHRhcmdldEZyYW1lLCBzb3VyY2VSYW5n
ZS5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChscGFyYW0pIHsKKyAgICAgICAgU3RyaW5nIGNvbXBv
c2l0aW9uU3RyaW5nOworICAgICAgICBpZiAoIWdldENvbXBvc2l0aW9uU3RyaW5nKGhJbnB1dENv
bnRleHQsIEdDU19DT01QU1RSLCBjb21wb3NpdGlvblN0cmluZykpCisgICAgICAgICAgICBnb3Rv
IGNsZWFudXA7CisgICAgICAgIAorICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPnJlcGxh
Y2VNYXJrZWRUZXh0KGNvbXBvc2l0aW9uU3RyaW5nKTsKKworICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBzb3VyY2VSYW5nZSA9IHRhcmdldEZyYW1l
LT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNlbGVjdGlvbigpLnRvUmFuZ2UoKTsKKyAgICAgICAg
aWYgKCFzb3VyY2VSYW5nZSkKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgICAgICBO
b2RlKiBzdGFydENvbnRhaW5lciA9IHNvdXJjZVJhbmdlLT5zdGFydENvbnRhaW5lcihlYyk7Cisg
ICAgICAgIGNvbnN0IFN0cmluZyYgc3RyID0gc3RhcnRDb250YWluZXItPnRleHRDb250ZW50KCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykKKyAg
ICAgICAgICAgIEFTU0VSVChzdHJbaV0pOworCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
ID0gc291cmNlUmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IHRhcmdldEZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOworICAgICAgICBy
YW5nZS0+c2V0U3RhcnQoc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBlYyk7CisgICAgICAg
IHJhbmdlLT5zZXRFbmQoc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0ICsgY29tcG9zaXRpb25T
dHJpbmcubGVuZ3RoKCksIGVjKTsKKworICAgICAgICAvLyBDb21wb3NpdGlvbiBzdHJpbmcgYXR0
cmlidXRlcworICAgICAgICBpbnQgbnVtQXR0cmlidXRlcyA9IElNTURpY3Q6OmRpY3QoKS5nZXRD
b21wb3NpdGlvblN0cmluZyhoSW5wdXRDb250ZXh0LCBHQ1NfQ09NUEFUVFIsIDAsIDApOworICAg
ICAgICBWZWN0b3I8QllURT4gYXR0cmlidXRlcyhudW1BdHRyaWJ1dGVzKTsKKyAgICAgICAgSU1N
RGljdDo6ZGljdCgpLmdldENvbXBvc2l0aW9uU3RyaW5nKGhJbnB1dENvbnRleHQsIEdDU19DT01Q
QVRUUiwgYXR0cmlidXRlcy5kYXRhKCksIG51bUF0dHJpYnV0ZXMpOworCisgICAgICAgIC8vIEdl
dCBjbGF1c2VzCisgICAgICAgIGludCBudW1DbGF1c2VzID0gSU1NRGljdDo6ZGljdCgpLmdldENv
bXBvc2l0aW9uU3RyaW5nKGhJbnB1dENvbnRleHQsIEdDU19DT01QQ0xBVVNFLCAwLCAwKTsKKyAg
ICAgICAgVmVjdG9yPERXT1JEPiBjbGF1c2VzKG51bUNsYXVzZXMgLyBzaXplb2YoRFdPUkQpKTsK
KyAgICAgICAgSU1NRGljdDo6ZGljdCgpLmdldENvbXBvc2l0aW9uU3RyaW5nKGhJbnB1dENvbnRl
eHQsIEdDU19DT01QQ0xBVVNFLCBjbGF1c2VzLmRhdGEoKSwgbnVtQ2xhdXNlcyk7CisgICAgICAg
IFZlY3RvcjxNYXJrZWRUZXh0VW5kZXJsaW5lPiB1bmRlcmxpbmVzOworICAgICAgICBjb21wb3Np
dGlvblRvVW5kZXJsaW5lcyhjbGF1c2VzLCBhdHRyaWJ1dGVzLCBzdGFydE9mZnNldCwgdW5kZXJs
aW5lcyk7CisgICAgICAgIHRhcmdldEZyYW1lLT5zZXRNYXJrZWRUZXh0UmFuZ2UocmFuZ2UuZ2V0
KCksIHVuZGVybGluZXMpOworICAgICAgICBpZiAodGFyZ2V0RnJhbWUtPm1hcmtlZFRleHRSYW5n
ZSgpKQorICAgICAgICAgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdFJhbmdlSW5NYXJrZWRUZXh0KExP
V09SRChJTU1EaWN0OjpkaWN0KCkuZ2V0Q29tcG9zaXRpb25TdHJpbmcoaElucHV0Q29udGV4dCwg
R0NTX0NVUlNPUlBPUywgMCwgMCkpLCAwKTsKKyAgICB9CitjbGVhbnVwOgorICAgIHRhcmdldEZy
YW1lLT5lZGl0b3IoKS0+c2V0SWdub3JlTWFya2VkVGV4dFNlbGVjdGlvbkNoYW5nZShmYWxzZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlldzo6b25JTUVFbmRDb21wb3NpdGlv
bigpCit7CisgICAgaWYgKG1faW5JTUVDb21wb3NpdGlvbikgCisgICAgICAgIG1faW5JTUVDb21w
b3NpdGlvbi0tOworICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICghdGFyZ2V0RnJhbWUpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHRhcmdldEZyYW1lLT5lZGl0b3IoKS0+dW5tYXJrVGV4dCgp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXc6Om9uSU1FQ2hhcihXUEFSQU0s
IExQQVJBTSkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3OjpvbklNRU5v
dGlmeShXUEFSQU0sIExQQVJBTSwgTFJFU1VMVCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFdlYlZpZXc6Om9uSU1FUmVxdWVzdChXUEFSQU0sIExQQVJBTSwgTFJFU1VMVCopCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYlZpZXc6Om9uSU1FU2VsZWN0KFdQQVJB
TSwgTFBBUkFNKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJWaWV3OjpvbklN
RVNldENvbnRleHQoV1BBUkFNLCBMUEFSQU0pCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBj
bGFzcyBFbnVtVGV4dE1hdGNoZXMgOiBwdWJsaWMgSUVudW1UZXh0TWF0Y2hlcwogewogICAgIGxv
bmcgbV9yZWY7CkluZGV4OiB3aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdpbi9XZWJWaWV3
LmgJKHJldmlzaW9uIDI0Mjc5KQorKysgd2luL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
NjM1LDYgKzYzNSwxNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaWRDbG9zZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlkQ2xvc2U7IH0KICAgICB2b2lkIHNldFByb2hpYml0c01haW5GcmFtZVNjcm9sbGlu
Zyhib29sID0gdHJ1ZSk7CiAKKyAgICBib29sIG9uSU1FU3RhcnRDb21wb3NpdGlvbigpOworICAg
IGJvb2wgb25JTUVDb21wb3NpdGlvbihMUEFSQU0pOworICAgIGJvb2wgb25JTUVFbmRDb21wb3Np
dGlvbigpOworICAgIGJvb2wgb25JTUVDaGFyKFdQQVJBTSwgTFBBUkFNKTsKKyAgICBib29sIG9u
SU1FTm90aWZ5KFdQQVJBTSwgTFBBUkFNLCBMUkVTVUxUKik7CisgICAgYm9vbCBvbklNRVJlcXVl
c3QoV1BBUkFNLCBMUEFSQU0sIExSRVNVTFQqKTsKKyAgICBib29sIG9uSU1FU2VsZWN0KFdQQVJB
TSwgTFBBUkFNKTsKKyAgICBib29sIG9uSU1FU2V0Q29udGV4dChXUEFSQU0sIExQQVJBTSk7Cisg
ICAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCk7CisgICAgdm9pZCByZXNldElNRShXZWJDb3JlOjpG
cmFtZSopOworCiAgICAgSFJFU1VMVCByZWdpc3RlckRyYWdEcm9wKCk7CiAgICAgSFJFU1VMVCBy
ZXZva2VEcmFnRHJvcCgpOwogCkBAIC02NTUsMTIgKzY2NiwxNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRUb29sVGlwKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAg
c3RhdGljIGJvb2wgYWxsb3dTaXRlU3BlY2lmaWNIYWNrcygpIHsgcmV0dXJuIHNfYWxsb3dTaXRl
U3BlY2lmaWNIYWNrczsgfQorICAgIEhJTUMgZ2V0SU1NQ29udGV4dCgpOworICAgIHZvaWQgcmVs
ZWFzZUlNTUNvbnRleHQoSElNQyk7CisgICAgc3RhdGljIGJvb2wgYWxsb3dTaXRlU3BlY2lmaWNI
YWNrcygpIHsgcmV0dXJuIHNfYWxsb3dTaXRlU3BlY2lmaWNIYWNrczsgfSAKICAgICB2b2lkIHBy
ZWZsaWdodFNwZWxsQ2hlY2tlcigpOwogICAgIGJvb2wgY29udGludW91c0NoZWNraW5nQWxsb3dl
ZCgpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUNhY2hlU2l6ZXNJZk5lY2Vzc2FyeSgpOwogICAgIHZv
aWQgaW5pdGlhbGl6ZVRvb2xUaXBXaW5kb3coKTsKLQorICAgIHZvaWQgcHJlcGFyZUNhbmRpZGF0
ZVdpbmRvdyhXZWJDb3JlOjpGcmFtZSosIEhJTUMpOworICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9u
Rm9ySU1FKCk7CiAgICAgVUxPTkcgbV9yZWZDb3VudDsKICAgICBXZWJDb3JlOjpTdHJpbmcgbV9n
cm91cE5hbWU7CiAgICAgSFdORCBtX2hvc3RXaW5kb3c7CkBAIC03MDAsNyArNzE0LDcgQEAgcHJv
dGVjdGVkOgogICAgIGJvb2wgbV9oYXNTcGVsbENoZWNrZXJEb2N1bWVudFRhZzsKICAgICBib29s
IG1fc21hcnRJbnNlcnREZWxldGVFbmFibGVkOwogICAgIGJvb2wgbV9kaWRDbG9zZTsKLQorICAg
IHVuc2lnbmVkIG1faW5JTUVDb21wb3NpdGlvbjsKICAgICBIV05EIG1fdG9vbFRpcEh3bmQ7CiAg
ICAgV2ViQ29yZTo6U3RyaW5nIG1fdG9vbFRpcDsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>