[Mono-winforms-list] Splitter

Jonathan S. Chambers Jonathan.Chambers@ansys.com
Tue, 19 Apr 2005 10:21:55 -0400


This is a multi-part message in MIME format.

------_=_NextPart_001_01C544EB.23743223
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

       I use the splitter in the property grid control, and made a few
changes to it. Most importantly, instead of resizing the controls as the
splitter is dragged, I display a bar on top of the controls (how MS SWF
does it) indicating the position and only resize the controls when the
mouse button is released. It works well running against .Net, but it has
a few idiosyncrasies with Mono.
      =20
1. In horizontal mode, the splitter works well except that the bar is
not drawing correctly (some sort of painting issue).
2. In vertical mode, the splitter works fine moving to the right, but
not to the left (when docked to the left). This appears to be a
MouseMove event issue though. When moving to the left past the original
position of the splitter, the mouse event args start out good (they
become negative), but after moving slightly to the left of the
splitter's original position, the mouse event args values become large
(63546 or some number like that, perhaps some sort of signed/unsigned
issue?).
3. There are some other smaller issues, but the control seems to behave
slightly better than before since it doesn't try to resize the controls
every time the mouse moves. (Drawing the bar indicating the position
took a while to figure out. On windows, MS probably gets the DC to the
desktop and draws on it. I know of no cross platform way to do that. I
tried handling the splitter's siblings paint event, and drawing the bar
on each control. That didn't work. Currently, I create a form with no
border and with a checkerboard pattern background. I move this with the
mouse moves)

It's not perfect, but it helped me in my work on the propertygrid. Give
it a try and let me know if you want me to check in the changes, etc.=20

- Jonathan


------_=_NextPart_001_01C544EB.23743223
Content-Type: application/octet-stream;
	name="Splitter.cs"
Content-Transfer-Encoding: base64
Content-Description: Splitter.cs
Content-Disposition: attachment;
	filename="Splitter.cs"

Ly8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw
ZXJzb24gb2J0YWluaW5nCi8vIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk
IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQovLyAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUg
U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi8vIHdpdGhvdXQgbGltaXRh
dGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLy8g
ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy
ZSwgYW5kIHRvCi8vIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5p
c2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwovLyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8v
IAovLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj
ZSBzaGFsbCBiZQovLyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp
b25zIG9mIHRoZSBTb2Z0d2FyZS4KLy8gCi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAovLyBFWFBSRVNTIE9SIElNUExJRUQs
IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLy8gTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLy8gTk9OSU5G
UklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M
REVSUyBCRQovLyBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi8vIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT
RSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgovLyBXSVRIIFRIRSBTT0ZU
V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLy8KLy8g
Q29weXJpZ2h0IChjKSAyMDA0LTIwMDUgTm92ZWxsLCBJbmMuCi8vCi8vIEF1dGhvcnM6Ci8vCUph
Y2tzb24gSGFycGVyIChqYWNrc29uQHhpbWlhbi5jb20pCi8vICBKb25hdGhhbiBDaGFtYmVycyAo
am9uYXRoYW4uY2hhbWJlcnNAYW5zeXMuY29tKQovLwoKCnVzaW5nIFN5c3RlbTsKdXNpbmcgU3lz
dGVtLkNvbXBvbmVudE1vZGVsOwp1c2luZyBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduOwp1
c2luZyBTeXN0ZW0uRHJhd2luZzsKdXNpbmcgU3lzdGVtLkRyYXdpbmcuRHJhd2luZzJEOwp1c2lu
ZyBTeXN0ZW0uV2luZG93cy5Gb3JtczsKCgpuYW1lc3BhY2UgU3lzdGVtLldpbmRvd3MuRm9ybXMg
ewoJW0RlZmF1bHRFdmVudCgiU3BsaXR0ZXJNb3ZlZCIpXQoJW0Rlc2lnbmVyKCJTeXN0ZW0uV2lu
ZG93cy5Gb3Jtcy5EZXNpZ24uU3BsaXR0ZXJEZXNpZ25lciwgIiArIENvbnN0cy5Bc3NlbWJseVN5
c3RlbV9EZXNpZ24pXQoJW0RlZmF1bHRQcm9wZXJ0eSgiRG9jayIpXQoJcHVibGljIGNsYXNzIFNw
bGl0dGVyIDogQ29udHJvbCwgSU1lc3NhZ2VGaWx0ZXIgewoJCSNyZWdpb24gIEZpZWxkcwoJCXBy
aXZhdGUgaW50IG1pbl9leHRyYTsKCQlwcml2YXRlIGludCBtaW5fc2l6ZTsKCQlwcml2YXRlIGlu
dCBjdXJzb3Jfb2Zmc2V0X3g7CgkJcHJpdmF0ZSBpbnQgY3Vyc29yX29mZnNldF95OwoKCQlwcml2
YXRlIGludCB0aGlja25lc3M7CgkJcHJpdmF0ZSBib29sIG1vdmluZzsKCQlwcml2YXRlIGJvb2wg
aG9yejsKCgkJcHJpdmF0ZSBTcGxpdHRlckV2ZW50SGFuZGxlciBvbl9zcGxpdHRlcl9tb3ZlZDsK
CQlwcml2YXRlIFNwbGl0dGVyRXZlbnRIYW5kbGVyIG9uX3NwbGl0dGVyX21vdmluZzsKCQlwcml2
YXRlIEZvcm0gZHJhZ19mb3JtOwoKCQlwcml2YXRlIENvbnRyb2wgYWRqYWNlbnQ7CgkJI2VuZHJl
Z2lvbgkvLyBGaWVsZHMKCgkJI3JlZ2lvbiBQdWJsaWMgQ29uc3RydWN0b3JzCgkJcHVibGljIFNw
bGl0dGVyICgpCgkJewoJCQlTZXRTdHlsZSAoQ29udHJvbFN0eWxlcy5TdGFuZGFyZENsaWNrLCB0
cnVlKTsKCQkJU2V0U3R5bGUgKENvbnRyb2xTdHlsZXMuU3RhbmRhcmREb3VibGVDbGljaywgdHJ1
ZSk7CgkJCVNldFN0eWxlIChDb250cm9sU3R5bGVzLlNlbGVjdGFibGUsIGZhbHNlKTsKCgkJCURv
Y2sgPSBEb2NrU3R5bGUuTGVmdDsKCQkJZHJhZ19mb3JtID0gbmV3IEZvcm0oKTsKCQkJZHJhZ19m
b3JtLkZvcm1Cb3JkZXJTdHlsZSA9IEZvcm1Cb3JkZXJTdHlsZS5Ob25lOwoJCQlkcmFnX2Zvcm0u
TWluaW11bVNpemUgPSBuZXcgU2l6ZSgxLDEpOwoJCQlkcmFnX2Zvcm0uU2hvd0luVGFza2JhciA9
IGZhbHNlOwoJCQlkcmFnX2Zvcm0uUGFpbnQrPW5ldyBQYWludEV2ZW50SGFuZGxlcihkcmFnX2Zv
cm1fUGFpbnQpOwoKCQkJbWluX2V4dHJhID0gMjU7CgkJCW1pbl9zaXplID0gMjU7CgkJfQoKCQkj
ZW5kcmVnaW9uCS8vIFB1YmxpYyBDb25zdHJ1Y3RvcnMKCgkJI3JlZ2lvbiBQdWJsaWMgSW5zdGFu
Y2UgUHJvcGVydGllcwoJCVtEZWZhdWx0VmFsdWUoRG9ja1N0eWxlLkxlZnQpXQoJCVtMb2NhbGl6
YWJsZSh0cnVlKV0KCQlwdWJsaWMgb3ZlcnJpZGUgRG9ja1N0eWxlIERvY2sgewoJCQlnZXQgeyBy
ZXR1cm4gYmFzZS5Eb2NrOyB9CgkJCXNldCB7CgkJCQlpZiAodmFsdWUgPT0gYmFzZS5Eb2NrKQoJ
CQkJCXJldHVybjsKCgkJCQlzd2l0Y2ggKHZhbHVlKSB7CgkJCQljYXNlIERvY2tTdHlsZS5Cb3R0
b206CgkJCQljYXNlIERvY2tTdHlsZS5Ub3A6CgkJCQkJaG9yeiA9IHRydWU7CgkJCQkJYnJlYWs7
CgkJCQljYXNlIERvY2tTdHlsZS5MZWZ0OgoJCQkJY2FzZSBEb2NrU3R5bGUuUmlnaHQ6CgkJCQkJ
aG9yeiA9IGZhbHNlOwoJCQkJCWJyZWFrOwoJCQkJZGVmYXVsdDoKCQkJCQl0aHJvdyBuZXcgQXJn
dW1lbnRFeGNlcHRpb24gKCJBIHNwbGl0dGVyIGNvbnRyb2wgbXVzdCBiZSBkb2NrZWQgbGVmdCwg
cmlnaHQsIHRvcCwgb3IgYm90dG9tLiIpOwoJCQkJfQoJCQkJYmFzZS5Eb2NrID0gdmFsdWU7CgkJ
CX0KCQl9CgoJCVtEZWZhdWx0VmFsdWUoMjUpXQoJCVtMb2NhbGl6YWJsZSh0cnVlKV0KCQlwdWJs
aWMgaW50IE1pbkV4dHJhIHsKCQkJZ2V0IHsgcmV0dXJuIG1pbl9leHRyYTsgfQoJCQlzZXQgewoJ
CQkJaWYgKHZhbHVlIDwgMCkKCQkJCQl2YWx1ZSA9IDA7CgkJCQltaW5fZXh0cmEgPSB2YWx1ZTsK
CQkJfQoJCX0KCgkJW0RlZmF1bHRWYWx1ZSgyNSldCgkJW0xvY2FsaXphYmxlKHRydWUpXQoJCXB1
YmxpYyBpbnQgTWluU2l6ZSB7CgkJCWdldCB7CgkJCQlyZXR1cm4gbWluX3NpemU7CgkJCX0KCQkJ
c2V0IHsKCQkJCWlmKHZhbHVlIDwgMCkKCQkJCQl2YWx1ZSA9IDA7CgkJCQltaW5fc2l6ZSA9IHZh
bHVlOwoJCQl9CgkJfQoKCQlbQnJvd3NhYmxlKGZhbHNlKV0KCQlbRGVzaWduZXJTZXJpYWxpemF0
aW9uVmlzaWJpbGl0eShEZXNpZ25lclNlcmlhbGl6YXRpb25WaXNpYmlsaXR5LkhpZGRlbildCgkJ
cHVibGljIGludCBTcGxpdFBvc2l0aW9uIHsKCQkJZ2V0IHsKCQkJCUNvbnRyb2wgYWRqYWNlbnQg
PSBGaW5kQWRqYWNlbnRDb250cm9sICgpOwoJCQkJaWYgKGFkamFjZW50ID09IG51bGwpCgkJCQkJ
cmV0dXJuIC0xOwoKCQkJCWlmIChob3J6KQoJCQkJCXJldHVybiBhZGphY2VudC5XaWR0aDsKCQkJ
CXJldHVybiBhZGphY2VudC5IZWlnaHQ7CgkJCX0KCQkJc2V0IHsKCQkJCWFkamFjZW50ID0gRmlu
ZEFkamFjZW50Q29udHJvbCAoKTsKCQkJCWlmIChhZGphY2VudCA9PSBudWxsKQoJCQkJCXJldHVy
bjsKCgkJCQlpZiAoaG9yeikgewoJCQkJCWlmIChhZGphY2VudC5IZWlnaHQgPT0gdmFsdWUpCgkJ
CQkJCXJldHVybjsKCQkJCQlPblNwbGl0dGVyTW92ZWQgKG5ldyBTcGxpdHRlckV2ZW50QXJncyAo
TGVmdCwgVG9wLCBMZWZ0LCB2YWx1ZSkpOwoJCQkJCXJldHVybjsKCQkJCX0KCQkJCWlmIChhZGph
Y2VudC5XaWR0aCA9PSB2YWx1ZSkKCQkJCQlyZXR1cm47CgkJCQlPblNwbGl0dGVyTW92ZWQgKG5l
dyBTcGxpdHRlckV2ZW50QXJncyAoYWRqYWNlbnQuV2lkdGggLyAyLCBhZGphY2VudC5IZWlnaHQg
LyAyLCB2YWx1ZSwgVG9wKSk7CSAgICAgIAoJCQkJYWRqYWNlbnQgPSBudWxsOwoJCQl9CgkJfQoK
CQkjZW5kcmVnaW9uCS8vIFB1YmxpYyBJbnN0YW5jZSBQcm9wZXJ0aWVzCgoJCSNyZWdpb24gUHJv
dGVjdGVkIEluc3RhbmNlIFByb3BlcnRpZXMKCQlwcm90ZWN0ZWQgb3ZlcnJpZGUgQ3JlYXRlUGFy
YW1zIENyZWF0ZVBhcmFtcyB7DQoJCQlnZXQgew0KCQkJCXJldHVybiBiYXNlLkNyZWF0ZVBhcmFt
czsNCgkJCX0NCgkJfQ0KDQoJCXByb3RlY3RlZCBvdmVycmlkZSBJbWVNb2RlIERlZmF1bHRJbWVN
b2RlIHsNCgkJCWdldCB7DQoJCQkJcmV0dXJuIGJhc2UuRGVmYXVsdEltZU1vZGU7DQoJCQl9DQoJ
CX0NCg0KCQlwcm90ZWN0ZWQgb3ZlcnJpZGUgU2l6ZSBEZWZhdWx0U2l6ZSB7CgkJCWdldCB7CgkJ
CQlyZXR1cm4gbmV3IFNpemUgKDMsIDMpOwoJCQl9CgkJfQoKCQkjZW5kcmVnaW9uCS8vIFByb3Rl
Y3RlZCBJbnN0YW5jZSBQcm9wZXJ0aWVzCgoJCSNyZWdpb24gUHVibGljIEluc3RhbmNlIE1ldGhv
ZHMKCQlbTW9ub1RPRE9dCgkJcHVibGljIGJvb2wgUHJlRmlsdGVyTWVzc2FnZShyZWYgTWVzc2Fn
ZSBtKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJI2VuZHJlZ2lvbgkvLyBQdWJsaWMgSW5zdGFu
Y2UgTWV0aG9kcwoKCQkjcmVnaW9uIFByb3RlY3RlZCBJbnN0YW5jZSBNZXRob2RzCgkJcHJvdGVj
dGVkIG92ZXJyaWRlIHZvaWQgT25Nb3VzZURvd24gKE1vdXNlRXZlbnRBcmdzIGUpCgkJewoJCQli
YXNlLk9uTW91c2VEb3duIChlKTsKCgkJCWlmICghbW92aW5nICYmIGUuQnV0dG9uID09IE1vdXNl
QnV0dG9ucy5MZWZ0KSB7CgkJCQlhZGphY2VudCA9IEZpbmRBZGphY2VudENvbnRyb2wgKCk7CgoJ
CQkJY3Vyc29yX29mZnNldF94ID0gZS5YOwoJCQkJY3Vyc29yX29mZnNldF95ID0gZS5ZOwoKCQkJ
CW1vdmluZyA9IHRydWU7CgkJCQlDYXB0dXJlID0gdHJ1ZTsKCQkJCWRyYWdfZm9ybS5IZWlnaHQg
PSB0aGlzLkhlaWdodDsKCQkJCWRyYWdfZm9ybS5XaWR0aCA9IHRoaXMuV2lkdGg7CgkJCQlkcmFn
X2Zvcm0uTG9jYXRpb24gPSBQb2ludFRvU2NyZWVuKHRoaXMuTG9jYXRpb24pOwoJCQkJZHJhZ19m
b3JtLlNob3coKTsKCQkJfQoJCX0KCgkJcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgT25Nb3VzZU1v
dmUgKE1vdXNlRXZlbnRBcmdzIGUpCgkJewoKCQkJYmFzZS5Pbk1vdXNlTW92ZSAoZSk7CgkJCWlm
IChtb3ZpbmcpIHsKCgkJCQlQb2ludCBzcGxpdHRlckxvY2F0aW9uOwoKCQkJCWlmIChob3J6KSAK
CQkJCQlzcGxpdHRlckxvY2F0aW9uID0gbmV3IFBvaW50KHRoaXMuTG9jYXRpb24uWCxlLlktY3Vy
c29yX29mZnNldF95KTsNCgkJCQllbHNlIAoJCQkJCXNwbGl0dGVyTG9jYXRpb24gPSBuZXcgUG9p
bnQoZS5YLWN1cnNvcl9vZmZzZXRfeCx0aGlzLkxvY2F0aW9uLlkpOwoJCQkJCgkJCQlkcmFnX2Zv
cm0uTG9jYXRpb24gPSBQb2ludFRvU2NyZWVuKHNwbGl0dGVyTG9jYXRpb24pOwoKCQkJCU9uU3Bs
aXR0ZXJNb3ZpbmcgKG5ldyBTcGxpdHRlckV2ZW50QXJncyAoZS5YLCBlLlksIHNwbGl0dGVyTG9j
YXRpb24uWCwgc3BsaXR0ZXJMb2NhdGlvbi5ZKSk7CgoJCQl9CgkJfQoKCQlwcm90ZWN0ZWQgb3Zl
cnJpZGUgdm9pZCBPbk1vdXNlVXAgKE1vdXNlRXZlbnRBcmdzIGUpCgkJewoJCQliYXNlLk9uTW91
c2VVcCAoZSk7CgkJCW1vdmluZyA9IGZhbHNlOwoJCQlDYXB0dXJlID0gZmFsc2U7CgkJCQoJCQlk
cmFnX2Zvcm0uSGlkZSgpOwoJCQkKCgkJCWlmIChob3J6KQ0KCQkJCU1vdmUgKGUuWCwgZS5ZLWN1
cnNvcl9vZmZzZXRfeSk7DQoJCQllbHNlIAoJCQkJTW92ZSAoZS5YLWN1cnNvcl9vZmZzZXRfeCwg
ZS5ZKTsKCgkJCU9uU3BsaXR0ZXJNb3ZlZChuZXcgU3BsaXR0ZXJFdmVudEFyZ3MgKGUuWCwgZS5Z
LCBMb2NhdGlvbi5YLCBMb2NhdGlvbi5ZKSk7CgkJCWFkamFjZW50ID0gbnVsbDsKCQl9CgoJCXBy
b3RlY3RlZCB2aXJ0dWFsIHZvaWQgT25TcGxpdHRlck1vdmVkIChTcGxpdHRlckV2ZW50QXJncyBl
KSB7CgkJCWlmIChvbl9zcGxpdHRlcl9tb3ZlZCAhPSBudWxsKQoJCQkJb25fc3BsaXR0ZXJfbW92
ZWQgKHRoaXMsIGUpOwoJCX0KCgkJcHJvdGVjdGVkIHZpcnR1YWwgdm9pZCBPblNwbGl0dGVyTW92
aW5nIChTcGxpdHRlckV2ZW50QXJncyBlKSB7CgkJCWlmIChvbl9zcGxpdHRlcl9tb3ZpbmcgIT0g
bnVsbCkKCQkJCW9uX3NwbGl0dGVyX21vdmluZyAodGhpcywgZSk7CgkJfQoKCQlwcm90ZWN0ZWQg
b3ZlcnJpZGUgdm9pZCBTZXRCb3VuZHNDb3JlIChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCwgQm91bmRzU3BlY2lmaWVkIHNwZWNpZmllZCkKCQl7CgkJCWlmIChob3J6KSB7CgkJ
CQlpZiAoaGVpZ2h0IDw9IDApCgkJCQkJdGhpY2tuZXNzID0gMzsKCQkJCWVsc2UKCQkJCQl0aGlj
a25lc3MgPSBoZWlnaHQ7CgkJCX0gZWxzZSB7CgkJCQlpZiAod2lkdGggPD0gMCkKCQkJCQl0aGlj
a25lc3MgPSAzOwoJCQkJZWxzZQoJCQkJCXRoaWNrbmVzcyA9IHdpZHRoOwoJCQl9CgoJCQliYXNl
LlNldEJvdW5kc0NvcmUgKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNwZWNpZmllZCk7CgkJfQoKCQkj
ZW5kcmVnaW9uCS8vIFByb3RlY3RlZCBJbnN0YW5jZSBNZXRob2RzCgoJCSNyZWdpb24gSW50ZXJu
YWwgJiBQcml2YXRlIE1ldGhvZHMKCgkJcHJpdmF0ZSB2b2lkIE1vdmUgKGludCB4LCBpbnQgeSkg
ewoJCQlpZiAoYWRqYWNlbnQgPT0gbnVsbCkKCQkJCXJldHVybjsKCgkJCVBvaW50IHBhcmVudFBv
aW50ID0gUGFyZW50LlBvaW50VG9DbGllbnQoUG9pbnRUb1NjcmVlbihuZXcgUG9pbnQoeCx5KSkp
OwoKCQkJaWYgKGhvcnopIHsKCQkJCWlmIChhZGphY2VudC5IZWlnaHQgPT0gcGFyZW50UG9pbnQu
WSkKCQkJCQlyZXR1cm47CgkJCQlhZGphY2VudC5IZWlnaHQgPSBwYXJlbnRQb2ludC5ZOwoJCQkJ
cmV0dXJuOwoJCQl9CgoJCQlpZiAoYWRqYWNlbnQuV2lkdGggPT0gcGFyZW50UG9pbnQuWCkKCQkJ
CXJldHVybjsKCQkJCgkJCWFkamFjZW50LldpZHRoID0gcGFyZW50UG9pbnQuWDsKCQl9CgoJCXBy
aXZhdGUgQ29udHJvbCBGaW5kQWRqYWNlbnRDb250cm9sICgpIHsKCQkJaWYgKFBhcmVudCA9PSBu
dWxsKQoJCQkJcmV0dXJuIG51bGw7CgoJCQlmb3JlYWNoIChDb250cm9sIHNpYmxpbmcgaW4gUGFy
ZW50LkNvbnRyb2xzKSB7CgoJCQkJaWYgKCFzaWJsaW5nLlZpc2libGUpCgkJCQkJY29udGludWU7
CgoJCQkJc3dpdGNoIChEb2NrKSB7CgoJCQkJCWNhc2UgRG9ja1N0eWxlLkxlZnQ6CgkJCQkJCWlm
IChzaWJsaW5nLlJpZ2h0ID09IExlZnQpCgkJCQkJCQlyZXR1cm4gc2libGluZzsKCQkJCQkJYnJl
YWs7CgoJCQkJCWNhc2UgRG9ja1N0eWxlLlJpZ2h0OgoJCQkJCQlpZiAoc2libGluZy5MZWZ0ID09
IFJpZ2h0KQoJCQkJCQkJcmV0dXJuIHNpYmxpbmc7CgkJCQkJCWJyZWFrOwoKCQkJCQljYXNlIERv
Y2tTdHlsZS5Ub3A6CgkJCQkJCWlmIChzaWJsaW5nLkJvdHRvbSA9PSBUb3ApCgkJCQkJCQlyZXR1
cm4gc2libGluZzsKCQkJCQkJYnJlYWs7CgoJCQkJCWNhc2UgRG9ja1N0eWxlLkJvdHRvbToKCQkJ
CQkJaWYgKHNpYmxpbmcuVG9wID09IEJvdHRvbSkKCQkJCQkJCXJldHVybiBzaWJsaW5nOwoJCQkJ
CQlicmVhazsKCQkJCX0KCQkJfQoKCQkJcmV0dXJuIG51bGw7CgkJfQoJCSNlbmRyZWdpb24JLy8g
SW50ZXJuYWwgJiBQcml2YXRlIE1ldGhvZHMKCgoJCSNyZWdpb24gRXZlbnRzCgkJW0Jyb3dzYWJs
ZShmYWxzZSldCgkJW0VkaXRvckJyb3dzYWJsZShFZGl0b3JCcm93c2FibGVTdGF0ZS5OZXZlcild
CiAgICAgICAgICAgICAgICBwdWJsaWMgbmV3IGV2ZW50IEV2ZW50SGFuZGxlciBCYWNrZ3JvdW5k
SW1hZ2VDaGFuZ2VkIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkIHsgYmFzZS5CYWNrZ3Jv
dW5kSW1hZ2VDaGFuZ2VkICs9IHZhbHVlOyB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92
ZSB7IGJhc2UuQmFja2dyb3VuZEltYWdlQ2hhbmdlZCAtPSB2YWx1ZTsgfQogICAgICAgICAgICAg
ICAgfQoKCQlbQnJvd3NhYmxlKGZhbHNlKV0KCQlbRWRpdG9yQnJvd3NhYmxlKEVkaXRvckJyb3dz
YWJsZVN0YXRlLk5ldmVyKV0KCQlwdWJsaWMgbmV3IGV2ZW50IEV2ZW50SGFuZGxlciBFbnRlciB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZCB7IGJhc2UuRW50ZXIgKz0gdmFsdWU7IH0KICAg
ICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlIHsgYmFzZS5FbnRlciAtPSB2YWx1ZTsgfQogICAg
ICAgICAgICAgICAgfQoKCQlbQnJvd3NhYmxlKGZhbHNlKV0KCQlbRWRpdG9yQnJvd3NhYmxlKEVk
aXRvckJyb3dzYWJsZVN0YXRlLk5ldmVyKV0KCQlwdWJsaWMgbmV3IGV2ZW50IEV2ZW50SGFuZGxl
ciBGb250Q2hhbmdlZCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZCB7IGJhc2UuRm9udENo
YW5nZWQgKz0gdmFsdWU7IH0KICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlIHsgYmFzZS5G
b250Q2hhbmdlZCAtPSB2YWx1ZTsgfQogICAgICAgICAgICAgICAgfQoKCQlbQnJvd3NhYmxlKGZh
bHNlKV0KCQlbRWRpdG9yQnJvd3NhYmxlKEVkaXRvckJyb3dzYWJsZVN0YXRlLk5ldmVyKV0KCQlw
dWJsaWMgbmV3IGV2ZW50IEV2ZW50SGFuZGxlciBGb3JlQ29sb3JDaGFuZ2VkIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkIHsgYmFzZS5Gb3JlQ29sb3JDaGFuZ2VkICs9IHZhbHVlOyB9CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSB7IGJhc2UuRm9yZUNvbG9yQ2hhbmdlZCAtPSB2
YWx1ZTsgfQogICAgICAgICAgICAgICAgfQoKCQlbQnJvd3NhYmxlKGZhbHNlKV0KCQlbRWRpdG9y
QnJvd3NhYmxlKEVkaXRvckJyb3dzYWJsZVN0YXRlLk5ldmVyKV0KCQlwdWJsaWMgbmV3IGV2ZW50
IEV2ZW50SGFuZGxlciBJbWVNb2RlQ2hhbmdlZCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZCB7IGJhc2UuSW1lTW9kZUNoYW5nZWQgKz0gdmFsdWU7IH0KICAgICAgICAgICAgICAgICAgICAg
ICAgcmVtb3ZlIHsgYmFzZS5JbWVNb2RlQ2hhbmdlZCAtPSB2YWx1ZTsgfQogICAgICAgICAgICAg
ICAgfQoKCQlbQnJvd3NhYmxlKGZhbHNlKV0KCQlbRWRpdG9yQnJvd3NhYmxlKEVkaXRvckJyb3dz
YWJsZVN0YXRlLk5ldmVyKV0KCQlwdWJsaWMgbmV3IGV2ZW50IEtleUV2ZW50SGFuZGxlciBLZXlE
b3duIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkIHsgYmFzZS5LZXlEb3duICs9IHZhbHVl
OyB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSB7IGJhc2UuS2V5RG93biAtPSB2YWx1
ZTsgfQogICAgICAgICAgICAgICAgfQoKCQlbQnJvd3NhYmxlKGZhbHNlKV0KCQlbRWRpdG9yQnJv
d3NhYmxlKEVkaXRvckJyb3dzYWJsZVN0YXRlLk5ldmVyKV0KCQlwdWJsaWMgbmV3IGV2ZW50IEtl
eVByZXNzRXZlbnRIYW5kbGVyIEtleVByZXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRk
IHsgYmFzZS5LZXlQcmVzcyArPSB2YWx1ZTsgfQogICAgICAgICAgICAgICAgICAgICAgICByZW1v
dmUgeyBiYXNlLktleVByZXNzIC09IHZhbHVlOyB9CiAgICAgICAgICAgICAgICB9CgoJCVtCcm93
c2FibGUoZmFsc2UpXQoJCVtFZGl0b3JCcm93c2FibGUoRWRpdG9yQnJvd3NhYmxlU3RhdGUuTmV2
ZXIpXQoJCXB1YmxpYyBuZXcgZXZlbnQgS2V5RXZlbnRIYW5kbGVyIEtleVVwIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkIHsgYmFzZS5LZXlVcCArPSB2YWx1ZTsgfQogICAgICAgICAgICAg
ICAgICAgICAgICByZW1vdmUgeyBiYXNlLktleVVwIC09IHZhbHVlOyB9CiAgICAgICAgICAgICAg
ICB9CgoJCVtCcm93c2FibGUoZmFsc2UpXQoJCVtFZGl0b3JCcm93c2FibGUoRWRpdG9yQnJvd3Nh
YmxlU3RhdGUuTmV2ZXIpXQoJCXB1YmxpYyBuZXcgZXZlbnQgRXZlbnRIYW5kbGVyIExlYXZlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkIHsgYmFzZS5MZWF2ZSArPSB2YWx1ZTsgfQogICAg
ICAgICAgICAgICAgICAgICAgICByZW1vdmUgeyBiYXNlLkxlYXZlIC09IHZhbHVlOyB9CiAgICAg
ICAgICAgICAgICB9CgoJCVtCcm93c2FibGUoZmFsc2UpXQoJCVtFZGl0b3JCcm93c2FibGUoRWRp
dG9yQnJvd3NhYmxlU3RhdGUuTmV2ZXIpXQoJCXB1YmxpYyBuZXcgZXZlbnQgRXZlbnRIYW5kbGVy
IFRhYlN0b3BDaGFuZ2VkIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkIHsgYmFzZS5UYWJT
dG9wQ2hhbmdlZCArPSB2YWx1ZTsgfQogICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgeyBi
YXNlLlRhYlN0b3BDaGFuZ2VkIC09IHZhbHVlOyB9CiAgICAgICAgICAgICAgICB9CgoJCVtCcm93
c2FibGUoZmFsc2UpXQoJCVtFZGl0b3JCcm93c2FibGUoRWRpdG9yQnJvd3NhYmxlU3RhdGUuTmV2
ZXIpXQoJCXB1YmxpYyBuZXcgZXZlbnQgRXZlbnRIYW5kbGVyIFRleHRDaGFuZ2VkIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkIHsgYmFzZS5UZXh0Q2hhbmdlZCArPSB2YWx1ZTsgfQogICAg
ICAgICAgICAgICAgICAgICAgICByZW1vdmUgeyBiYXNlLlRleHRDaGFuZ2VkIC09IHZhbHVlOyB9
CiAgICAgICAgICAgICAgICB9CgoJCXB1YmxpYyBldmVudCBTcGxpdHRlckV2ZW50SGFuZGxlciBT
cGxpdHRlck1vdmVkIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkIHsgb25fc3BsaXR0ZXJf
bW92ZWQgKz0gdmFsdWU7IH0KICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlIHsgb25fc3Bs
aXR0ZXJfbW92ZWQgLT0gdmFsdWU7IH0KICAgICAgICAgICAgICAgIH0KCgkJcHVibGljIGV2ZW50
IFNwbGl0dGVyRXZlbnRIYW5kbGVyIFNwbGl0dGVyTW92aW5nIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkIHsgb25fc3BsaXR0ZXJfbW92aW5nICs9IHZhbHVlOyB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbW92ZSB7IG9uX3NwbGl0dGVyX21vdmluZyAtPSB2YWx1ZTsgfQogICAgICAg
ICAgICAgICAgfQoJCSNlbmRyZWdpb24NCg0KCQlwcml2YXRlIHZvaWQgZHJhZ19mb3JtX1BhaW50
KG9iamVjdCBzZW5kZXIsIFBhaW50RXZlbnRBcmdzIGUpDQoJCXsNCgkJCWUuR3JhcGhpY3MuRmls
bFJlY3RhbmdsZShuZXcgSGF0Y2hCcnVzaChIYXRjaFN0eWxlLlNtYWxsQ2hlY2tlckJvYXJkLCBD
b2xvci5XaGl0ZSxDb2xvci5CbGFjayksZS5DbGlwUmVjdGFuZ2xlKTsNCgkJfQ0KCX0KfQoKCg==

------_=_NextPart_001_01C544EB.23743223
Content-Type: application/octet-stream;
	name="svn.diff"
Content-Transfer-Encoding: base64
Content-Description: svn.diff
Content-Disposition: attachment;
	filename="svn.diff"

SW5kZXg6IFNwbGl0dGVyLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU3BsaXR0ZXIuY3MJKHJldmlzaW9u
IDQzMjQ1KQ0KKysrIFNwbGl0dGVyLmNzCSh3b3JraW5nIGNvcHkpDQpAQCAtMjEsNiArMjEsNyBA
QA0KIC8vCiAvLyBBdXRob3JzOgogLy8JSmFja3NvbiBIYXJwZXIgKGphY2tzb25AeGltaWFuLmNv
bSkKKy8vICBKb25hdGhhbiBDaGFtYmVycyAoam9uYXRoYW4uY2hhbWJlcnNAYW5zeXMuY29tKQog
Ly8KIAogCkBAIC0yOCw2ICsyOSw4IEBADQogdXNpbmcgU3lzdGVtLkNvbXBvbmVudE1vZGVsOwog
dXNpbmcgU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbjsKIHVzaW5nIFN5c3RlbS5EcmF3aW5n
OwordXNpbmcgU3lzdGVtLkRyYXdpbmcuRHJhd2luZzJEOwordXNpbmcgU3lzdGVtLldpbmRvd3Mu
Rm9ybXM7CiAKIAogbmFtZXNwYWNlIFN5c3RlbS5XaW5kb3dzLkZvcm1zIHsKQEAgLTM4LDggKzQx
LDggQEANCiAJCSNyZWdpb24gIEZpZWxkcwogCQlwcml2YXRlIGludCBtaW5fZXh0cmE7CiAJCXBy
aXZhdGUgaW50IG1pbl9zaXplOwotCQlwcml2YXRlIGludCBtb3ZlX3N0YXJ0X3g7Ci0JCXByaXZh
dGUgaW50IG1vdmVfc3RhcnRfeTsKKwkJcHJpdmF0ZSBpbnQgY3Vyc29yX29mZnNldF94OworCQlw
cml2YXRlIGludCBjdXJzb3Jfb2Zmc2V0X3k7CiAKIAkJcHJpdmF0ZSBpbnQgdGhpY2tuZXNzOwog
CQlwcml2YXRlIGJvb2wgbW92aW5nOwpAQCAtNDcsNiArNTAsNyBAQA0KIAogCQlwcml2YXRlIFNw
bGl0dGVyRXZlbnRIYW5kbGVyIG9uX3NwbGl0dGVyX21vdmVkOwogCQlwcml2YXRlIFNwbGl0dGVy
RXZlbnRIYW5kbGVyIG9uX3NwbGl0dGVyX21vdmluZzsKKwkJcHJpdmF0ZSBGb3JtIGRyYWdfZm9y
bTsKIAogCQlwcml2YXRlIENvbnRyb2wgYWRqYWNlbnQ7CiAJCSNlbmRyZWdpb24JLy8gRmllbGRz
CkBAIC01NCwxMyArNTgsMTYgQEANCiAJCSNyZWdpb24gUHVibGljIENvbnN0cnVjdG9ycwogCQlw
dWJsaWMgU3BsaXR0ZXIgKCkKIAkJewotCQkJU2V0U3R5bGUgKENvbnRyb2xTdHlsZXMuVXNlclBh
aW50LCB0cnVlKTsKIAkJCVNldFN0eWxlIChDb250cm9sU3R5bGVzLlN0YW5kYXJkQ2xpY2ssIHRy
dWUpOwogCQkJU2V0U3R5bGUgKENvbnRyb2xTdHlsZXMuU3RhbmRhcmREb3VibGVDbGljaywgdHJ1
ZSk7Ci0JCQlTZXRTdHlsZSAoQ29udHJvbFN0eWxlcy5BbGxQYWludGluZ0luV21QYWludCwgdHJ1
ZSk7CiAJCQlTZXRTdHlsZSAoQ29udHJvbFN0eWxlcy5TZWxlY3RhYmxlLCBmYWxzZSk7CiAKIAkJ
CURvY2sgPSBEb2NrU3R5bGUuTGVmdDsKKwkJCWRyYWdfZm9ybSA9IG5ldyBGb3JtKCk7CisJCQlk
cmFnX2Zvcm0uRm9ybUJvcmRlclN0eWxlID0gRm9ybUJvcmRlclN0eWxlLk5vbmU7CisJCQlkcmFn
X2Zvcm0uTWluaW11bVNpemUgPSBuZXcgU2l6ZSgxLDEpOworCQkJZHJhZ19mb3JtLlNob3dJblRh
c2tiYXIgPSBmYWxzZTsKKwkJCWRyYWdfZm9ybS5QYWludCs9bmV3IFBhaW50RXZlbnRIYW5kbGVy
KGRyYWdfZm9ybV9QYWludCk7CiAKIAkJCW1pbl9leHRyYSA9IDI1OwogCQkJbWluX3NpemUgPSAy
NTsKQEAgLTE4NSwxMSArMTkyLDE1IEBADQogCQkJaWYgKCFtb3ZpbmcgJiYgZS5CdXR0b24gPT0g
TW91c2VCdXR0b25zLkxlZnQpIHsKIAkJCQlhZGphY2VudCA9IEZpbmRBZGphY2VudENvbnRyb2wg
KCk7CiAKLQkJCQltb3ZlX3N0YXJ0X3ggPSBlLlg7Ci0JCQkJbW92ZV9zdGFydF95ID0gZS5ZOwor
CQkJCWN1cnNvcl9vZmZzZXRfeCA9IGUuWDsKKwkJCQljdXJzb3Jfb2Zmc2V0X3kgPSBlLlk7CiAK
IAkJCQltb3ZpbmcgPSB0cnVlOwogCQkJCUNhcHR1cmUgPSB0cnVlOworCQkJCWRyYWdfZm9ybS5I
ZWlnaHQgPSB0aGlzLkhlaWdodDsKKwkJCQlkcmFnX2Zvcm0uV2lkdGggPSB0aGlzLldpZHRoOwor
CQkJCWRyYWdfZm9ybS5Mb2NhdGlvbiA9IFBvaW50VG9TY3JlZW4odGhpcy5Mb2NhdGlvbik7CisJ
CQkJZHJhZ19mb3JtLlNob3coKTsKIAkJCX0KIAkJfQogCkBAIC0xOTgsNDAgKzIwOSw0NyBAQA0K
IAogCQkJYmFzZS5Pbk1vdXNlTW92ZSAoZSk7CiAJCQlpZiAobW92aW5nKSB7Ci0JCQkJaW50IHhf
bW92ZSA9IGUuWCAtIG1vdmVfc3RhcnRfeDsKLQkJCQlpbnQgeV9tb3ZlID0gZS5ZIC0gbW92ZV9z
dGFydF95OwogCi0JCQkJbW92ZV9zdGFydF94ID0gZS5YOwotCQkJCW1vdmVfc3RhcnRfeSA9IGUu
WTsKKwkJCQlQb2ludCBzcGxpdHRlckxvY2F0aW9uOwogCi0JCQkJaWYgKGhvcnopIHsKLQkJCQkJ
VG9wID0gVG9wICsgeV9tb3ZlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCUxlZnQgPSBMZWZ0ICsgeF9t
b3ZlOwkgICAgIAotCQkJCX0KKwkJCQlpZiAoaG9yeikgCisJCQkJCXNwbGl0dGVyTG9jYXRpb24g
PSBuZXcgUG9pbnQodGhpcy5Mb2NhdGlvbi5YLGUuWS1jdXJzb3Jfb2Zmc2V0X3kpOw0KKwkJCQll
bHNlIAorCQkJCQlzcGxpdHRlckxvY2F0aW9uID0gbmV3IFBvaW50KGUuWC1jdXJzb3Jfb2Zmc2V0
X3gsdGhpcy5Mb2NhdGlvbi5ZKTsKKwkJCQkKKwkJCQlkcmFnX2Zvcm0uTG9jYXRpb24gPSBQb2lu
dFRvU2NyZWVuKHNwbGl0dGVyTG9jYXRpb24pOwogCi0JCQkJT25TcGxpdHRlck1vdmluZyAobmV3
IFNwbGl0dGVyRXZlbnRBcmdzIChlLlgsIGUuWSwgTGVmdCwgVG9wKSk7CisJCQkJT25TcGxpdHRl
ck1vdmluZyAobmV3IFNwbGl0dGVyRXZlbnRBcmdzIChlLlgsIGUuWSwgc3BsaXR0ZXJMb2NhdGlv
bi5YLCBzcGxpdHRlckxvY2F0aW9uLlkpKTsKKwogCQkJfQogCQl9CiAKIAkJcHJvdGVjdGVkIG92
ZXJyaWRlIHZvaWQgT25Nb3VzZVVwIChNb3VzZUV2ZW50QXJncyBlKQogCQl7Ci0JCQliYXNlLk9u
TW91c2VEb3duIChlKTsKKwkJCWJhc2UuT25Nb3VzZVVwIChlKTsKIAkJCW1vdmluZyA9IGZhbHNl
OwogCQkJQ2FwdHVyZSA9IGZhbHNlOworCQkJCisJCQlkcmFnX2Zvcm0uSGlkZSgpOworCQkJCisK
KwkJCWlmIChob3J6KQ0KKwkJCQlNb3ZlIChlLlgsIGUuWS1jdXJzb3Jfb2Zmc2V0X3kpOw0KKwkJ
CWVsc2UgCisJCQkJTW92ZSAoZS5YLWN1cnNvcl9vZmZzZXRfeCwgZS5ZKTsKKworCQkJT25TcGxp
dHRlck1vdmVkKG5ldyBTcGxpdHRlckV2ZW50QXJncyAoZS5YLCBlLlksIExvY2F0aW9uLlgsIExv
Y2F0aW9uLlkpKTsKIAkJCWFkamFjZW50ID0gbnVsbDsKIAkJfQogCiAJCXByb3RlY3RlZCB2aXJ0
dWFsIHZvaWQgT25TcGxpdHRlck1vdmVkIChTcGxpdHRlckV2ZW50QXJncyBlKSB7CiAJCQlpZiAo
b25fc3BsaXR0ZXJfbW92ZWQgIT0gbnVsbCkKIAkJCQlvbl9zcGxpdHRlcl9tb3ZlZCAodGhpcywg
ZSk7Ci0JCQlNb3ZlIChlLlNwbGl0WCwgZS5TcGxpdFkpOwogCQl9CiAKIAkJcHJvdGVjdGVkIHZp
cnR1YWwgdm9pZCBPblNwbGl0dGVyTW92aW5nIChTcGxpdHRlckV2ZW50QXJncyBlKSB7CiAJCQlp
ZiAob25fc3BsaXR0ZXJfbW92aW5nICE9IG51bGwpCiAJCQkJb25fc3BsaXR0ZXJfbW92aW5nICh0
aGlzLCBlKTsKLQkJCU1vdmUgKGUuU3BsaXRYLCBlLlNwbGl0WSk7CiAJCX0KIAogCQlwcm90ZWN0
ZWQgb3ZlcnJpZGUgdm9pZCBTZXRCb3VuZHNDb3JlIChpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCwgQm91bmRzU3BlY2lmaWVkIHNwZWNpZmllZCkKQEAgLTI1NCwyOSArMjcyLDI0
IEBADQogCQkjZW5kcmVnaW9uCS8vIFByb3RlY3RlZCBJbnN0YW5jZSBNZXRob2RzCiAKIAkJI3Jl
Z2lvbiBJbnRlcm5hbCAmIFByaXZhdGUgTWV0aG9kcwotCQlwcml2YXRlIHZvaWQgRHJhdyAoKSB7
Ci0JCQl1c2luZyAoR3JhcGhpY3MgcGRjID0gUGFyZW50LkNyZWF0ZUdyYXBoaWNzICgpKSB7Ci0J
CQkJcGRjLkZpbGxSZWN0YW5nbGUgKFRoZW1lRW5naW5lLkN1cnJlbnQuUmVzUG9vbC5HZXRTb2xp
ZEJydXNoIChDb2xvci5SZWQpLCBDbGllbnRSZWN0YW5nbGUpOwotCQkJfQotCQl9CiAKIAkJcHJp
dmF0ZSB2b2lkIE1vdmUgKGludCB4LCBpbnQgeSkgewogCQkJaWYgKGFkamFjZW50ID09IG51bGwp
CiAJCQkJcmV0dXJuOwogCisJCQlQb2ludCBwYXJlbnRQb2ludCA9IFBhcmVudC5Qb2ludFRvQ2xp
ZW50KFBvaW50VG9TY3JlZW4obmV3IFBvaW50KHgseSkpKTsKKwogCQkJaWYgKGhvcnopIHsKLQkJ
CQlpZiAoYWRqYWNlbnQuSGVpZ2h0ID09IHkpCisJCQkJaWYgKGFkamFjZW50LkhlaWdodCA9PSBw
YXJlbnRQb2ludC5ZKQogCQkJCQlyZXR1cm47Ci0JCQkJYWRqYWNlbnQuSGVpZ2h0ID0geTsKKwkJ
CQlhZGphY2VudC5IZWlnaHQgPSBwYXJlbnRQb2ludC5ZOwogCQkJCXJldHVybjsKIAkJCX0KIAot
CQkJaWYgKGFkamFjZW50LldpZHRoID09IHgpCisJCQlpZiAoYWRqYWNlbnQuV2lkdGggPT0gcGFy
ZW50UG9pbnQuWCkKIAkJCQlyZXR1cm47CiAJCQkKLQkJCWFkamFjZW50LldpZHRoID0geDsKLQot
CQkJRHJhdyAoKTsKKwkJCWFkamFjZW50LldpZHRoID0gcGFyZW50UG9pbnQuWDsKIAkJfQogCiAJ
CXByaXZhdGUgQ29udHJvbCBGaW5kQWRqYWNlbnRDb250cm9sICgpIHsKQEAgLTQwNCw3ICs0MTcs
MTIgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgeyBvbl9zcGxpdHRlcl9tb3Zpbmcg
Kz0gdmFsdWU7IH0KICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSB7IG9uX3NwbGl0dGVy
X21vdmluZyAtPSB2YWx1ZTsgfQogICAgICAgICAgICAgICAgIH0KLQkJI2VuZHJlZ2lvbgorCQkj
ZW5kcmVnaW9uDQorDQorCQlwcml2YXRlIHZvaWQgZHJhZ19mb3JtX1BhaW50KG9iamVjdCBzZW5k
ZXIsIFBhaW50RXZlbnRBcmdzIGUpDQorCQl7DQorCQkJZS5HcmFwaGljcy5GaWxsUmVjdGFuZ2xl
KG5ldyBIYXRjaEJydXNoKEhhdGNoU3R5bGUuU21hbGxDaGVja2VyQm9hcmQsIENvbG9yLldoaXRl
LENvbG9yLkJsYWNrKSxlLkNsaXBSZWN0YW5nbGUpOw0KKwkJfQ0KIAl9CiB9CiAK

------_=_NextPart_001_01C544EB.23743223--