[Kbabel] [Patch] Tag navigation (wishlist #51641)

Stanislav Visnovsky visnovsky@nenya.ms.mff.cuni.cz
Sat, 1 Feb 2003 15:51:59 +0100 (CET)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--1908640017-1715331230-1044111119=:5243
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi!

Here is a prototype implementation for tag navigation in msgid.
The tag, which will be inserted by "Insert next tag" is
bold. You can use Ctrl + and Ctrl - to skip forward/back between
the tags. 

The only thing I'm not sure about is the bold style.

Some comments while I used this feature yesterday:

1. It's quite fancy that you can see how the tag is highlighted - I 
assumed it is a bug, but I really like it, since you can easily spot
the next tag.

2. Because of tag selection, msgid will scroll to ensure visibility of the
next tag. This works like a nice scrolling while you translate a long
message. Maybe the keys could work to scroll the text always, not only for
tags.

Stanislav


--1908640017-1715331230-1044111119=:5243
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="selecttag.diff"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.44.0302011551590.5243@nenya.ms.mff.cuni.cz>
Content-Description: 
Content-Disposition: attachment; filename="selecttag.diff"

PyBzZWxlY3R0YWcuZGlmZg0KSW5kZXg6IGNvbW1vbi9yZWdleHBleHRyYWN0
b3IuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hv
bWUva2RlL2tkZXNkay9rYmFiZWwvY29tbW9uL3JlZ2V4cGV4dHJhY3Rvci5j
cHAsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjMNCmRpZmYgLXUgLTMgLXAg
LXIxLjMgcmVnZXhwZXh0cmFjdG9yLmNwcA0KLS0tIGNvbW1vbi9yZWdleHBl
eHRyYWN0b3IuY3BwCTQgSmFuIDIwMDMgMTg6NDI6NTIgLTAwMDAJMS4zDQor
KysgY29tbW9uL3JlZ2V4cGV4dHJhY3Rvci5jcHAJMSBGZWIgMjAwMyAxNDo0
MjoyMSAtMDAwMA0KQEAgLTc3LDYgKzc3LDE1IEBAIFFTdHJpbmcgUmVnRXhw
RXh0cmFjdG9yOjptYXRjaCh1aW50IHRhZ24NCiAgICAgcmV0dXJuIFFTdHJp
bmc6Om51bGw7DQogfQ0KIA0KK2ludCBSZWdFeHBFeHRyYWN0b3I6Om1hdGNo
SW5kZXgodWludCB0YWdudW1iZXIpDQorew0KKyAgICBNYXRjaGVkRW50cnlJ
bmZvICp0aT1fbWF0Y2hlcy5hdCh0YWdudW1iZXIpOw0KKyAgICBpZih0aSkN
CisgICAgICAgIHJldHVybiB0aS0+aW5kZXg7DQorDQorICAgIHJldHVybiAt
MTsNCit9DQorDQogUVN0cmluZyBSZWdFeHBFeHRyYWN0b3I6OnByZXZNYXRj
aCgpDQogew0KICAgICBNYXRjaGVkRW50cnlJbmZvICp0aT1fbWF0Y2hlcy5w
cmV2KCk7DQpJbmRleDogY29tbW9uL3JlZ2V4cGV4dHJhY3Rvci5oDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZXNk
ay9rYmFiZWwvY29tbW9uL3JlZ2V4cGV4dHJhY3Rvci5oLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC0zIC1wIC1yMS4yIHJlZ2V4cGV4
dHJhY3Rvci5oDQotLS0gY29tbW9uL3JlZ2V4cGV4dHJhY3Rvci5oCTQgSmFu
IDIwMDMgMTg6NDI6NTIgLTAwMDAJMS4yDQorKysgY29tbW9uL3JlZ2V4cGV4
dHJhY3Rvci5oCTEgRmViIDIwMDMgMTQ6NDI6MjEgLTAwMDANCkBAIC04MCw2
ICs4MCwxMiBAQCBwdWJsaWM6DQogICBRU3RyaW5nIG1hdGNoKHVpbnQgbWF0
Y2hudW1iZXIpOw0KIA0KICAgLyoqDQorICAgKiBAcmV0dXJuIHRoZSBuLXRo
IG1hdGNoLiBJdCBhbHNvIG1vdmVzIHRoZSBjdXJzb3IuIC0xIGlzIHRoZXJl
DQorICAgKiBpcyBubyBzdWNoIG1hdGNoLg0KKyAgICovDQorICBpbnQgbWF0
Y2hJbmRleCh1aW50IG1hdGNobnVtYmVyKTsNCisNCisgIC8qKg0KICAgICog
QHJldHVybiB0aGUgbmV4dCBtYXRjaCBhbmQgbW92ZSBjdXJzb3IgZm9yd2Fy
ZA0KICAgICovDQogICBRU3RyaW5nIHByZXZNYXRjaCgpOw0KSW5kZXg6IGti
YWJlbC9oaWRpbmdtc2dlZGl0LmgNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
ClJDUyBmaWxlOiAvaG9tZS9rZGUva2Rlc2RrL2tiYWJlbC9rYmFiZWwvaGlk
aW5nbXNnZWRpdC5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS44DQpkaWZm
IC11IC0zIC1wIC1yMS44IGhpZGluZ21zZ2VkaXQuaA0KLS0tIGtiYWJlbC9o
aWRpbmdtc2dlZGl0LmgJMTkgSmFuIDIwMDMgMTE6MTM6NTcgLTAwMDAJMS44
DQorKysga2JhYmVsL2hpZGluZ21zZ2VkaXQuaAkxIEZlYiAyMDAzIDE0OjQy
OjIxIC0wMDAwDQpAQCAtNzYsNiArNzYsOCBAQCBwdWJsaWM6IA0KICAgdm9p
ZCBzZXREaWZmTW9kZShib29sIG9uKTsNCiAgIHZvaWQgc2V0RGlmZkRpc3Bs
YXlNb2RlKGJvb2wgdW5kZXJsaW5lQWRkZWQsIGJvb2wgc3RyaWtlT3V0RGVs
ZXRlZCk7DQogICB2b2lkIHNldERpZmZDb2xvcnMoY29uc3QgUUNvbG9yJiBh
ZGRDb2xvciwgY29uc3QgUUNvbG9yJiBkZWxDb2xvcik7ICAgICANCisgIA0K
KyAgdm9pZCBzZWxlY3RUYWcoaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKSB7IF9j
dXJyZW50RWRpdC0+c2VsZWN0VGFnKHN0YXJ0LGxlbmd0aCk7IH0NCiANCiAg
IC8vIHJlaXBsZW1lbnRlZCB0byByZXR1cm4gY29ycmVjdCB2YWx1ZQ0KICAg
Ym9vbCBoYXNGb2N1cyAoKTsNCkluZGV4OiBrYmFiZWwva2JhYmVsLmNwcA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL2tkZS9r
ZGVzZGsva2JhYmVsL2tiYWJlbC9rYmFiZWwuY3BwLHYNCnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNDYNCmRpZmYgLXUgLTMgLXAgLXIxLjE0NiBrYmFiZWwu
Y3BwDQotLS0ga2JhYmVsL2tiYWJlbC5jcHAJMjcgSmFuIDIwMDMgMTM6MDY6
NDQgLTAwMDAJMS4xNDYNCisrKyBrYmFiZWwva2JhYmVsLmNwcAkxIEZlYiAy
MDAzIDE0OjQyOjIxIC0wMDAwDQpAQCAtMyw3ICszLDcgQEANCiANCiAgIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwIGJ5IE1hdHRoaWFzIEtpZWZlcg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0dGhpYXMua2llZmVyQGdt
eC5kZT4NCi0JCTIwMDIJICBieSBTdGFuaXNsYXYgVmlzbm92c2t5DQorCQky
MDAyLTIwMDMgYnkgU3RhbmlzbGF2IFZpc25vdnNreQ0KIAkJCSAgICA8dmlz
bm92c2t5QGtkZS5vcmc+DQogDQogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQ0KQEAgLTQ0MCw2ICs0NDAsMTQgQEAgdm9pZCBLQmFiZWxNVzo6c2V0dXBB
Y3Rpb25zKCkNCiANCiAgICBjb25uZWN0KG1fdmlldyxTSUdOQUwoc2lnbmFs
VGFnc0F2YWlsYWJsZShib29sKSksYWN0aW9uDQogICAgICAgICAgICAsU0xP
VChzZXRFbmFibGVkKGJvb2wpKSk7DQorDQorICAgYWN0aW9uID0gbmV3IEtB
Y3Rpb24oaTE4bigiTW92ZSB0byBOZXh0IFRhZyIpLCAwLCBDVFJMK0tleV9Q
bHVzDQorICAgICAgICAgICAsIG1fdmlldywgU0xPVChza2lwVG9OZXh0VGFn
KCkpDQorICAgICAgICAgICAsIGFjdGlvbkNvbGxlY3Rpb24oKSwibW92ZV90
b19uZXh0X3RhZyIpOw0KKw0KKyAgIGFjdGlvbiA9IG5ldyBLQWN0aW9uKGkx
OG4oIk1vdmUgdG8gUHJldmlvdXMgVGFnIiksIDAsIENUUkwrS2V5X01pbnVz
DQorICAgICAgICAgICAsIG1fdmlldywgU0xPVChza2lwVG9QcmV2aW91c1Rh
ZygpKQ0KKyAgICAgICAgICAgLCBhY3Rpb25Db2xsZWN0aW9uKCksIm1vdmVf
dG9fcHJldl90YWciKTsNCiANCiAgICBhY3Rpb24gPSBuZXcgS0FjdGlvbihp
MThuKCJJbnNlcnQgTmV4dCBBcmd1bWVudCIpLCAiaW5zZXJ0X2FyZyIsIENU
UkwrQUxUK0tleV9BDQogICAgICAgICAgICAsIG1fdmlldywgU0xPVChpbnNl
cnROZXh0QXJnKCkpDQpJbmRleDoga2JhYmVsL2tiYWJlbHVpLnJjDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZXNk
ay9rYmFiZWwva2JhYmVsL2tiYWJlbHVpLnJjLHYNCnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zOQ0KZGlmZiAtdSAtMyAtcCAtcjEuMzkga2JhYmVsdWkucmMN
Ci0tLSBrYmFiZWwva2JhYmVsdWkucmMJMjMgSmFuIDIwMDMgMDk6NTY6MzIg
LTAwMDAJMS4zOQ0KKysrIGtiYWJlbC9rYmFiZWx1aS5yYwkxIEZlYiAyMDAz
IDE0OjQyOjIxIC0wMDAwDQpAQCAtMTcsNiArMTcsOSBAQA0KICAgICAgIDxT
ZXBhcmF0b3IvPg0KICAgICAgIDxBY3Rpb24gbmFtZT0iaW5zZXJ0X25leHRf
dGFnIi8+DQogICAgICAgPEFjdGlvbiBuYW1lPSJpbnNlcnRfdGFnIi8+DQor
ICAgICAgPEFjdGlvbiBuYW1lPSJtb3ZlX3RvX25leHRfdGFnIi8+DQorICAg
ICAgPEFjdGlvbiBuYW1lPSJtb3ZlX3RvX3ByZXZfdGFnIi8+DQorICAgICAg
PFNlcGFyYXRvci8+DQogICAgICAgPEFjdGlvbiBuYW1lPSJpbnNlcnRfbmV4
dF9hcmciLz4NCiAgICAgICA8QWN0aW9uIG5hbWU9Imluc2VydF9hcmciLz4N
CiAgICAgICA8U2VwYXJhdG9yLz4NCkBAIC0xODcsNiArMTkwLDggQEANCiAg
ICAgPEFjdGlvbiBuYW1lPSJlZGl0X2ZpbmRfbmV4dCIvPg0KICAgICA8QWN0
aW9uIG5hbWU9ImVkaXRfZmluZF9sYXN0Ii8+DQogICAgIDxBY3Rpb24gbmFt
ZT0iZWRpdF9zZWxlY3RfYWxsIi8+DQorICAgIDxBY3Rpb24gbmFtZT0ibW92
ZV90b19uZXh0X3RhZyIvPg0KKyAgICA8QWN0aW9uIG5hbWU9Im1vdmVfdG9f
cHJldl90YWciLz4NCiAgICAgPEFjdGlvbiBuYW1lPSJnb19nb3RvIi8+DQog
ICAgPEFjdGlvbiBuYW1lPSJnb19wcmV2X2VudHJ5Ii8+DQogICAgPEFjdGlv
biBuYW1lPSJnb19uZXh0X2VudHJ5Ii8+DQpJbmRleDoga2JhYmVsL2tiYWJl
bHZpZXcuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog
L2hvbWUva2RlL2tkZXNkay9rYmFiZWwva2JhYmVsL2tiYWJlbHZpZXcuY3Bw
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMTYNCmRpZmYgLXUgLTMgLXAg
LXIxLjIxNiBrYmFiZWx2aWV3LmNwcA0KLS0tIGtiYWJlbC9rYmFiZWx2aWV3
LmNwcAkyOCBKYW4gMjAwMyAxNTo0OTo1OCAtMDAwMAkxLjIxNg0KKysrIGti
YWJlbC9rYmFiZWx2aWV3LmNwcAkxIEZlYiAyMDAzIDE0OjQyOjIxIC0wMDAw
DQpAQCAtMzk3LDYgKzM5Nyw4IEBAIEhpbnRzIGZyb20gb3RoZXIgdHJhbnNs
YXRvcnMgYXJlIGFsc28gc28NCiANCiAgICAgY29ubmVjdCh0YWdsaXN0Vmll
dyxTSUdOQUwoZG91YmxlQ2xpY2tlZChRTGlzdEJveEl0ZW0qKSkNCiAgICAg
ICAgICAgICAsIHRoaXMsIFNMT1QoaW5zZXJ0VGFnRnJvbVRvb2woUUxpc3RC
b3hJdGVtKikpKTsNCisgICAgY29ubmVjdCh0YWdsaXN0VmlldyxTSUdOQUwo
c2VsZWN0aW9uQ2hhbmdlZCgpKQ0KKyAgICAgICAgICAgICwgdGhpcywgU0xP
VChza2lwVG9UYWdGcm9tVG9vbCgpKSk7DQogDQogICAgIGNvbm5lY3QoX2Nh
dGFsb2csU0lHTkFMKHNpZ25hbFNldHRpbmdzQ2hhbmdlZChLQmFiZWw6Oklk
ZW50aXR5U2V0dGluZ3MpKSwNCiAgICAgICAgICAgICB0aGlzLCBTTE9UKHNl
dE5ld0xhbmd1YWdlKCkpKTsNCkluZGV4OiBrYmFiZWwva2JhYmVsdmlldy5o
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUva2Rl
L2tkZXNkay9rYmFiZWwva2JhYmVsL2tiYWJlbHZpZXcuaCx2DQpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuODcNCmRpZmYgLXUgLTMgLXAgLXIxLjg3IGtiYWJl
bHZpZXcuaA0KLS0tIGtiYWJlbC9rYmFiZWx2aWV3LmgJMjcgSmFuIDIwMDMg
MTM6MDQ6MjkgLTAwMDAJMS44Nw0KKysrIGtiYWJlbC9rYmFiZWx2aWV3LmgJ
MSBGZWIgMjAwMyAxNDo0MjoyMSAtMDAwMA0KQEAgLTMsNyArMyw3IEBADQog
DQogICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBieSBNYXR0aGlhcyBLaWVm
ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdHRoaWFzLmtp
ZWZlckBnbXguZGU+DQotCQkyMDAyCSAgYnkgU3RhbmlzbGF2IFZpc25vdnNr
eQ0KKwkJMjAwMi0yMDMgIGJ5IFN0YW5pc2xhdiBWaXNub3Zza3kNCiAJCQkg
ICAgPHZpc25vdnNreUBrZGUub3JnPg0KIA0KICAgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkNCkBAIC0yNDYsNyArMjQ2LDkgQEAgcHVibGljIHNsb3RzOg0K
ICAgICB2b2lkIGluc2VydFRhZ0Zyb21Ub29sKCBRTGlzdEJveEl0ZW0gKml0
ZW0gKTsNCiAgICAgdm9pZCBzaG93VGFnc01lbnUoKTsNCiAgICAgdm9pZCBz
aG93QXJnc01lbnUoKTsNCi0NCisgICAgdm9pZCBza2lwVG9OZXh0VGFnKCk7
DQorICAgIHZvaWQgc2tpcFRvUHJldmlvdXNUYWcoKTsNCisgICAgdm9pZCBz
a2lwVG9UYWdGcm9tVG9vbCgpOw0KICAgIA0KICAgICAvKiogaGlkZXMgb3Ig
c2hvd3MgdGhlIGVkaXRvciBmb3IgdGhlIGNvbW1lbnRzICovDQogICAgIHZv
aWQgc2hvd0NvbW1lbnRzKGJvb2wpOw0KQEAgLTUwMSw2ICs1MDMsOSBAQCBw
cml2YXRlIHNsb3RzOg0KIA0KICAgIC8qKiBpbnNlcnRzIHRoZSBudGggdGFn
IGZyb20gdGhlIGF2YWlsYWJsZSB0YWdzIGludG8gbXNnc3RyKi8NCiAgICB2
b2lkIGluc2VydFRhZyhpbnQgbik7DQorICAgDQorICAgLyoqIHZpc3VhbGx5
IGRpc3BsYXkgdGhlIHRhZyB0byBiZSBpbnNlcnRlZCBuZXh0ICovDQorICAg
dm9pZCBzZWxlY3RUYWcoKTsNCiANCiAgICB2b2lkIHVwZGF0ZVRhZ3MoKTsN
CiAgICANCkBAIC02NzgsNiArNjgzLDggQEAgcHJpdmF0ZToNCiAgICANCiAg
ICBRVGltZXIgKiBhdXRvU2F2ZVRpbWVyOw0KICAgIGludCBfYXV0b1NhdmVE
ZWxheTsNCisgICANCisgICBpbnQgX2N1cnJlbnRUYWc7DQogfTsNCiANCiAj
ZW5kaWYgLy8gS0JBQkVMVklFV19IDQpJbmRleDoga2JhYmVsL2tiYWJlbHZp
ZXcyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9o
b21lL2tkZS9rZGVzZGsva2JhYmVsL2tiYWJlbC9rYmFiZWx2aWV3Mi5jcHAs
dg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUxDQpkaWZmIC11IC0zIC1wIC1y
MS41MSBrYmFiZWx2aWV3Mi5jcHANCi0tLSBrYmFiZWwva2JhYmVsdmlldzIu
Y3BwCTIzIEphbiAyMDAzIDA5OjU2OjMyIC0wMDAwCTEuNTENCisrKyBrYmFi
ZWwva2JhYmVsdmlldzIuY3BwCTEgRmViIDIwMDMgMTQ6NDI6MjEgLTAwMDAN
CkBAIC0zLDcgKzMsNyBAQA0KIA0KICAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgYnkgTWF0dGhpYXMgS2llZmVyDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxtYXR0aGlhcy5raWVmZXJAZ214LmRlPg0KLQkJMjAwMiAgICAg
IGJ5IFN0YW5pc2xhdiBWaXNub3Zza3kNCisJCTIwMDItMjAwMyBieSBTdGFu
aXNsYXYgVmlzbm92c2t5DQogCQkJICAgIDx2aXNub3Zza3lAa2RlLm9yZz4N
CiANCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQpAQCAtMTkxLDYgKzE5
MSwzMyBAQCB2b2lkIEtCYWJlbFZpZXc6OnVwZGF0ZVRhZ3MoKQ0KICAgICAg
ICAgZW1pdCBzaWduYWxOZXh0VGFnQXZhaWxhYmxlKGhhdmVUYWdzKTsNCiAg
ICAgICAgIGVtaXQgc2lnbmFsVGFnc0F2YWlsYWJsZShoYXZlVGFncyk7DQog
ICAgIH0NCisgICAgDQorICAgIGlmKGhhdmVUYWdzKQ0KKyAgICB7DQorCV90
YWdFeHRyYWN0b3ItPnNldFN0cmluZyhfY2F0YWxvZy0+bXNnaWQoX2N1cnJl
bnRJbmRleCkuZmlyc3QoKSk7DQorCV9jdXJyZW50VGFnID0gMDsNCisJc2Vs
ZWN0VGFnKCk7DQorICAgIH0NCit9DQorDQordm9pZCBLQmFiZWxWaWV3Ojpz
a2lwVG9OZXh0VGFnKCkNCit7DQorICAgIGlmKCAodWludClfY3VycmVudFRh
ZyA9PSBfdGFncy5jb3VudCgpLTEgKSByZXR1cm47DQorICAgICsrX2N1cnJl
bnRUYWc7DQorICAgIHNlbGVjdFRhZygpOw0KK30NCisNCit2b2lkIEtCYWJl
bFZpZXc6OnNraXBUb1ByZXZpb3VzVGFnKCkNCit7DQorICAgIGlmKCBfY3Vy
cmVudFRhZyA9PSAwICkgcmV0dXJuOw0KKyAgICAtLV9jdXJyZW50VGFnOw0K
KyAgICBzZWxlY3RUYWcoKTsNCit9DQorDQordm9pZCBLQmFiZWxWaWV3Ojpz
ZWxlY3RUYWcoKQ0KK3sNCisgICAgbXNnaWRMYWJlbC0+c2VsZWN0VGFnKF90
YWdFeHRyYWN0b3ItPm1hdGNoSW5kZXgoX2N1cnJlbnRUYWcpLF90YWdFeHRy
YWN0b3ItPm1hdGNoKF9jdXJyZW50VGFnKS5sZW5ndGgoKSk7DQorICAgIHRh
Z2xpc3RWaWV3LT5zZXRDdXJyZW50SXRlbShfY3VycmVudFRhZyk7DQogfQ0K
IA0KIHZvaWQgS0JhYmVsVmlldzo6c2V0VGFnc01lbnUoUVBvcHVwTWVudSAq
bWVudSkNCkBAIC0yMzIsNTEgKzI1OSwxNiBAQCB2b2lkIEtCYWJlbFZpZXc6
Omluc2VydE5leHRUYWcoKQ0KIA0KICAgICBRU3RyaW5nIHMgPSAoKl9jYXRh
bG9nLT5tc2dzdHIoX2N1cnJlbnRJbmRleCkuYXQobXNnc3RyRWRpdC0+Y3Vy
cmVudEZvcm0oKSkpLmxlZnQob2Zmc2V0KTsNCiAgICAgDQotICAgIFFTdHJp
bmcgdDsNCi0gICAgDQotICAgIGlmKCB0YWdsaXN0Vmlldy0+aXNWaXNpYmxl
KCkgKQ0KLSAgICB7DQotCWlmKHRhZ2xpc3RWaWV3LT5jdXJyZW50SXRlbSgp
ID09IC0xKQ0KLQl7DQotICAgIAkgICAgS05vdGlmeUNsaWVudDo6YmVlcCgp
Ow0KLSAgICAJICAgIHJldHVybjsNCi0JfQ0KLSAgICAgDQotCXQ9dGFnbGlz
dFZpZXctPmN1cnJlbnRUZXh0KCk7DQotICAgIH0gDQotICAgIGVsc2UNCi0g
ICAgew0KLQlpZiggX2NhdGFsb2ctPnBsdXJhbEZvcm0oIF9jdXJyZW50SW5k
ZXggKSA9PSBLREVTcGVjaWZpYyApDQotCXsNCi0JICAgIGludCBwb3MgPSBt
c2dzdHJFZGl0LT5jdXJyZW50SW5kZXgoKTsNCi0gICAgCSAgICBpbnQgY3Vy
cmVudEZvcm1CZWdpbj1zLmZpbmRSZXYoIlxcbiIscG9zKTsNCi0JICAgIGlm
KCBjdXJyZW50Rm9ybUJlZ2luID09IC0xICkgY3VycmVudEZvcm1CZWdpbj0w
Ow0KLQkgICAgZWxzZSBjdXJyZW50Rm9ybUJlZ2luKz0zOyAvLyBza2lwIHRo
ZSBuZXdsaW5lDQotCSAgICBpbnQgY3VycmVudEZvcm1FbmQ9cy5maW5kKCJc
XG4iLHBvcyk7DQotCSAgICBpZiggY3VycmVudEZvcm1FbmQgPT0gLTEgKSBj
dXJyZW50Rm9ybUVuZD1zLmxlbmd0aCgpOw0KLQkNCi0JICAgIHM9cy5taWQo
Y3VycmVudEZvcm1CZWdpbixjdXJyZW50Rm9ybUVuZC1jdXJyZW50Rm9ybUJl
Z2luKTsNCi0JfQ0KKyAgICB1aW50IG51bSA9IF9jdXJyZW50VGFnKys7DQor
ICAgIHNlbGVjdFRhZygpOw0KIAkJDQotCV90YWdFeHRyYWN0b3ItPnNldFN0
cmluZyhzKTsNCi0JdWludCBudW09X3RhZ0V4dHJhY3Rvci0+Y291bnRNYXRj
aGVzKCk7DQotCWlmKG51bSA+PSBfdGFncy5jb3VudCgpKQ0KLQl7DQotCSAg
ICBLTm90aWZ5Q2xpZW50OjpiZWVwKCk7DQotCSAgICByZXR1cm47DQotCX0N
Ci0JDQotCXQ9X3RhZ3NbbnVtXTsNCi0gICAgfQ0KLQ0KLSAgICBpZiggdGFn
bGlzdFZpZXctPmN1cnJlbnRJdGVtKCkgIT0gLTEgKQ0KKyAgICBpZihudW0g
Pj0gX3RhZ3MuY291bnQoKSkNCiAgICAgew0KLSAgICAgICAgUUxpc3RCb3hJ
dGVtKiBpdGVtPSB0YWdsaXN0Vmlldy0+aXRlbSh0YWdsaXN0Vmlldy0+Y3Vy
cmVudEl0ZW0oKSktPm5leHQoKTsNCi0JaWYoIGl0ZW0gKSB0YWdsaXN0Vmll
dy0+c2V0Q3VycmVudEl0ZW0oaXRlbSk7DQotCWVsc2UgdGFnbGlzdFZpZXct
PmNsZWFyU2VsZWN0aW9uKCk7DQorCUtOb3RpZnlDbGllbnQ6OmJlZXAoKTsN
CisJcmV0dXJuOw0KICAgICB9DQotDQotICAgIG1vZGlmeU1zZ3N0clRleHQo
IG9mZnNldCwgdCApOw0KKwkNCisgICAgbW9kaWZ5TXNnc3RyVGV4dCggb2Zm
c2V0LCBfdGFnc1tudW1dICk7DQogfQ0KIA0KIHZvaWQgS0JhYmVsVmlldzo6
c2hvd1RhZ3NNZW51KCkNCkBAIC03MjAsMTAgKzcxMiwxNiBAQCB2b2lkIEtC
YWJlbFZpZXc6OnNldEZpbGVQYWNrYWdlKCkNCiB2b2lkIEtCYWJlbFZpZXc6
Omluc2VydFRhZ0Zyb21Ub29sKCBRTGlzdEJveEl0ZW0qIGl0ZW0gKQ0KIHsN
CiAgICAgbW9kaWZ5TXNnc3RyVGV4dChtc2dzdHJFZGl0LT5jdXJyZW50SW5k
ZXgoKSxpdGVtLT50ZXh0KCkpOw0KLQ0KKyAgICANCiAgICAgbXNnc3RyRWRp
dC0+c2V0Rm9jdXMoKTsNCiB9DQogDQordm9pZCBLQmFiZWxWaWV3Ojpza2lw
VG9UYWdGcm9tVG9vbCggKQ0KK3sNCisgICAgX2N1cnJlbnRUYWcgPSB0YWds
aXN0Vmlldy0+Y3VycmVudEl0ZW0oKTsNCisgICAgc2VsZWN0VGFnKCk7DQor
fQ0KKw0KIHZvaWQgS0JhYmVsVmlldzo6cGx1cmFsMm1zZ3N0cigpDQogew0K
ICAgICBpbnQgY3VycmVudEZvcm1CZWdpbiwgY3VycmVudEZvcm1FbmQsIHBv
czsNCkBAIC04NTIsNiArODUwLDUgQEAgdm9pZCBLQmFiZWxWaWV3OjppbnNl
cnRDaGFyKCBRQ2hhciBjaCApDQogDQogdm9pZCBLQmFiZWxWaWV3OjppbnNl
cnRTZWxlY3RlZENoYXIoKQ0KIHsNCi0gICAgDQogICAgIGNoYXJTZWxlY3Rv
ci0+ZW1pdENoYXIoKTsNCiB9DQpJbmRleDoga2JhYmVsL215bXVsdGlsaW5l
ZWRpdC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv
aG9tZS9rZGUva2Rlc2RrL2tiYWJlbC9rYmFiZWwvbXltdWx0aWxpbmVlZGl0
LmNwcCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTYNCmRpZmYgLXUgLTMg
LXAgLXIxLjk2IG15bXVsdGlsaW5lZWRpdC5jcHANCi0tLSBrYmFiZWwvbXlt
dWx0aWxpbmVlZGl0LmNwcAk0IEphbiAyMDAzIDE4OjQyOjU0IC0wMDAwCTEu
OTYNCisrKyBrYmFiZWwvbXltdWx0aWxpbmVlZGl0LmNwcAkxIEZlYiAyMDAz
IDE0OjQyOjIxIC0wMDAwDQpAQCAtNTU3LDcgKzU1Nyw4IEBAIE1zZ011bHRp
TGluZUVkaXQ6Ok1zZ011bHRpTGluZUVkaXQoaW50IEkNCiAgICAgICAgICAg
ICAgICAgX2RpZmZTdHJpa2VPdXREZWwodHJ1ZSksDQogICAgICAgICAgICAg
ICAgIF9kaWZmQWRkQ29sb3IoUXQ6OmRhcmtHcmVlbiksDQogICAgICAgICAg
ICAgICAgIF9kaWZmRGVsQ29sb3IoUXQ6OmRhcmtSZWQpLA0KLQkJX2N1cnJl
bnRVbmljb2RlTnVtYmVyKDApDQorCQlfY3VycmVudFVuaWNvZGVOdW1iZXIo
MCksDQorCQlfdGFnU3RhcnRQYXJhKDApLCBfdGFnU3RhcnRJbmRleCgwKSwg
X3RhZ0VuZFBhcmEoMCksIF90YWdFbmRJbmRleCgwKQ0KIHsNCiAgICBkaWZm
UG9zLnNldEF1dG9EZWxldGUodHJ1ZSk7DQogICAgZGlmZlBvcy5jbGVhcigp
Ow0KQEAgLTE0NzYsNiArMTQ3NywyMCBAQCB2b2lkIE1zZ011bHRpTGluZUVk
aXQ6OmVtaXR0ZWRUZXh0Q2hhbmdlDQogew0KICAgICBoaWdobGlnaHQoKTsN
CiAgICAgcGFpbnRTcGFjZVBvaW50cygpOyAgICANCit9DQorDQordm9pZCBN
c2dNdWx0aUxpbmVFZGl0OjpzZWxlY3RUYWcoaW50IHN0YXJ0LCBpbnQgbGVu
Z3RoKQ0KK3sNCisgICAgc2V0VXBkYXRlc0VuYWJsZWQoZmFsc2UpOw0KKyAg
ICBzZXRTZWxlY3Rpb24oIF90YWdTdGFydFBhcmEsIF90YWdTdGFydEluZGV4
LCBfdGFnRW5kUGFyYSwgX3RhZ0VuZEluZGV4KTsNCisgICAgc2V0Qm9sZCgg
ZmFsc2UgKTsNCisNCisgICAgb2Zmc2V0MlBvcyhzdGFydCwgX3RhZ1N0YXJ0
UGFyYSwgX3RhZ1N0YXJ0SW5kZXgpOw0KKyAgICBvZmZzZXQyUG9zKHN0YXJ0
K2xlbmd0aCwgX3RhZ0VuZFBhcmEsIF90YWdFbmRJbmRleCk7DQorICAgIA0K
KyAgICBzZXRTZWxlY3Rpb24oIF90YWdTdGFydFBhcmEsIF90YWdTdGFydElu
ZGV4LCBfdGFnRW5kUGFyYSwgX3RhZ0VuZEluZGV4KTsNCisgICAgc2V0Qm9s
ZCggdHJ1ZSApOw0KKyAgICBzZXRVcGRhdGVzRW5hYmxlZCh0cnVlKTsNCiB9
DQogDQogI2luY2x1ZGUgIm15bXVsdGlsaW5lZWRpdC5tb2MiDQpJbmRleDog
a2JhYmVsL215bXVsdGlsaW5lZWRpdC5oDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZXNkay9rYmFiZWwva2JhYmVs
L215bXVsdGlsaW5lZWRpdC5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS40
Nw0KZGlmZiAtdSAtMyAtcCAtcjEuNDcgbXltdWx0aWxpbmVlZGl0LmgNCi0t
LSBrYmFiZWwvbXltdWx0aWxpbmVlZGl0LmgJNCBKYW4gMjAwMyAxODo0Mjo1
NCAtMDAwMAkxLjQ3DQorKysga2JhYmVsL215bXVsdGlsaW5lZWRpdC5oCTEg
RmViIDIwMDMgMTQ6NDI6MjEgLTAwMDANCkBAIC0xNzcsNiArMTc3LDggQEAg
cHVibGljOg0KICAgIA0KICAgIHZvaWQgc2V0Q3VycmVudENvbG9yKGNvbnN0
IFRleHRDb2xvciBjb2xvcik7DQogICAgDQorICAgdm9pZCBzZWxlY3RUYWco
aW50IHN0YXJ0LCBpbnQgbGVuZ3RoKTsNCisgICANCiBwdWJsaWMgc2xvdHM6
DQogICAgdmlydHVhbCB2b2lkIHNldFRleHQoY29uc3QgUVN0cmluZyYgcyk7
DQogICAgdmlydHVhbCB2b2lkIHBhaW50U3BhY2VQb2ludHMoKTsNCkBAIC0y
NjAsNiArMjYyLDkgQEAgcHJpdmF0ZToNCiAgICBpbnQgX2N1cnJlbnRVbmlj
b2RlTnVtYmVyOw0KICAgIA0KICAgIEtCYWJlbEhpZ2hsaWdodGVyICogaGln
aGxpZ2h0ZXI7DQorICAgDQorICAgLy8gbmV4dCB0YWcgaGlnaGxpZ2h0aW5n
DQorICAgaW50IF90YWdTdGFydFBhcmEsIF90YWdTdGFydEluZGV4LCBfdGFn
RW5kUGFyYSwgX3RhZ0VuZEluZGV4Ow0KIH07DQogDQogI2VuZGlmIC8vIE1Z
TVVMVElMSU5FRURJVF9IDQo=
--1908640017-1715331230-1044111119=:5243--