Re: Move a window

Steven J Abner <[email protected]> Sat, 31 May 2025 12:04:12 -0400
Newsgroups gmane.comp.freedesktop.xcb
Message-ID <[email protected]>
--=-m7D0Nb36mN//j1JLt8mf
Content-Type: text/plain; charset=us-ascii; format=flowed

For any attempting to help, God bless and here's version 2. It adds 
define switches to allow override-redirect (killing of them messing 
with configure), a per_icccm, and a compiz switch (ability to use 
EWMH). Other property attempts not included for fear of getting too 
messy. Using override is close to what wanted, but negates features 
window managers provide, like graphics, virtual desktop switching 
(which is great for non-compliant anyways). Objective is after-all to 
create headerbars, but receive full wm support, like real configure 
notices.
The compiz switch can be tried on other non-gnome type managers, it may 
work? It's from the EWMH protocols.
Steve


--=-m7D0Nb36mN//j1JLt8mf
Content-Type: text/x-csrc
Content-Disposition: attachment; filename=xmove.c
Content-Transfer-Encoding: base64

LyoKICogTW92ZSB3aW5kb3cgZGVtbwogKiBTdGV2ZW4gSiBBYm5lciAyMDI1CiAqLwojaW5jbHVk
ZSA8eGNiL3hjYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5j
bHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5o
PgojaW5jbHVkZSA8bGltaXRzLmg+CiNpbmNsdWRlIDxwb2xsLmg+CgojZGVmaW5lIE9WRVJSSURF
IDEKI2RlZmluZSBQRVJfSUNDQ00gMAojaWYgUEVSX0lDQ0NNCiAjdW5kZWYgT1ZFUlJJREUKICNk
ZWZpbmUgT1ZFUlJJREUgMAojZW5kaWYKCiNkZWZpbmUgVVNJTkdfQ09NUElaIDAKI2lmIFVTSU5H
X0NPTVBJWgogI3VuZGVmIE9WRVJSSURFCiAjZGVmaW5lIE9WRVJSSURFIDAKICN1bmRlZiBQRVJf
SUNDQ00KICNkZWZpbmUgUEVSX0lDQ0NNIDAKI2VuZGlmCgovKiBnY2MgLWFuc2kgLXBlZGFudGlj
IC1XYWxsIC1nIC1vIHhtb3ZlIHhtb3ZlLmMgLWx4Y2IgKi8KCnR5cGVkZWYgc3RydWN0IF9QaHhJ
bnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeEludGVyZmFjZTsKdHlwZWRl
ZiBzdHJ1Y3QgX1BoeFJlY3RhbmdsZSB7IGludDE2X3QgeCwgeSwgdywgaDsgfSAgICAgUGh4UmVj
dGFuZ2xlOwoKeGNiX2Nvbm5lY3Rpb25fdCAgICAgKmNvbm5lY3Rpb24gPSBOVUxMOwp4Y2JfYXRv
bV90IFdNX1BST1RPQ09MUzsKeGNiX2F0b21fdCBXTV9ERUxFVEVfV0lORE9XOwppbnQxNl90IHhy
b290LCB5cm9vdDsKCnN0cnVjdCBfUGh4SW50ZXJmYWNlIHsKIFBoeFJlY3RhbmdsZSAgbWV0ZV9i
b3g7CiB4Y2Jfd2luZG93X3QgIHdpbmRvdzsKfSBpZmFjZTAgPSB7IHswfSwgMCB9OwoKI2lmIChf
X1NURENfVkVSU0lPTl9fIDw9IDE5OTkwMUwpCiAjZGVmaW5lIFJFQ1RBTkdMRShhLGIsYyxkLGUp
IFwKICBhLnggPSBiLCBhLnkgPSBjLCBhLncgPSBkLCBhLmggPSBlCiNlbHNlCiAjZGVmaW5lIFJF
Q1RBTkdMRShhLGIsYyxkLGUpIFwKICBhID0gKFBoeFJlY3RhbmdsZSl7IGIsIGMsIGQsIGUgfQoj
ZW5kaWYKCnN0YXRpYyBib29sCmV2ZW50X2tleWJvYXJkKHhjYl9nZW5lcmljX2V2ZW50X3QgKm52
dCkgewoKICB4Y2Jfa2V5X3ByZXNzX2V2ZW50X3QgKmtwID0gKHhjYl9rZXlfcHJlc3NfZXZlbnRf
dCopbnZ0OwogIHhjYl9jbGllbnRfbWVzc2FnZV9ldmVudF90ICptZXNzYWdlOwogIG1lc3NhZ2Ug
PSBjYWxsb2MoMzIsIDEpOwogIG1lc3NhZ2UtPnJlc3BvbnNlX3R5cGUgID0gWENCX0NMSUVOVF9N
RVNTQUdFOwogIG1lc3NhZ2UtPmZvcm1hdCAgICAgICAgID0gMzI7CiAgbWVzc2FnZS0+d2luZG93
ICAgICAgICAgPSBrcC0+ZXZlbnQ7CiAgbWVzc2FnZS0+dHlwZSAgICAgICAgICAgPSBXTV9QUk9U
T0NPTFM7CiAgbWVzc2FnZS0+ZGF0YS5kYXRhMzJbMF0gPSBXTV9ERUxFVEVfV0lORE9XOwogIG1l
c3NhZ2UtPmRhdGEuZGF0YTMyWzFdID0ga3AtPnRpbWU7CiAgeGNiX3NlbmRfZXZlbnQoY29ubmVj
dGlvbiwgZmFsc2UsIG1lc3NhZ2UtPndpbmRvdywKICAgICAgICAgICAgICAgICAgICAgWENCX0VW
RU5UX01BU0tfTk9fRVZFTlQsIChjaGFyKiltZXNzYWdlKTsKICB4Y2JfZmx1c2goY29ubmVjdGlv
bik7CiAgcmV0dXJuIHRydWU7Cn0KCiNpZiAoIVVTSU5HX0NPTVBJWikKc3RhdGljIGJvb2wKZXZl
bnRfbW91c2UoeGNiX2dlbmVyaWNfZXZlbnRfdCAqbnZ0KSB7CgogIGJvb2wgbG9jdXMgPSAoKG52
dC0+cmVzcG9uc2VfdHlwZSAmICh1aW50OF90KX4weDgwKSA9PSBYQ0JfQlVUVE9OX1BSRVNTKTsK
ICB4Y2JfYnV0dG9uX3ByZXNzX2V2ZW50X3QgKm1vdXNlCiAgICA9ICh4Y2JfYnV0dG9uX3ByZXNz
X2V2ZW50X3QqKW52dDsKCiAgaWYgKGxvY3VzKSB7CiAgICB4Y2JfZ3JhYl9wb2ludGVyX2Nvb2tp
ZV90IGMwOwogICAgeGNiX2dyYWJfcG9pbnRlcl9yZXBseV90ICpyMDsKCiAgICB4cm9vdCA9IG1v
dXNlLT5yb290X3g7CiAgICB5cm9vdCA9IG1vdXNlLT5yb290X3k7CiAgICBjMCA9IHhjYl9ncmFi
X3BvaW50ZXIoY29ubmVjdGlvbiwgMSwgbW91c2UtPmV2ZW50LAogICAgICAgIFhDQl9FVkVOVF9N
QVNLX0JVVFRPTl9QUkVTUyB8IFhDQl9FVkVOVF9NQVNLX0JVVFRPTl9SRUxFQVNFCiAgICAgICAg
ICAgfCBYQ0JfRVZFTlRfTUFTS19QT0lOVEVSX01PVElPTiwKICAgICAgICBYQ0JfR1JBQl9NT0RF
X0FTWU5DLCBYQ0JfR1JBQl9NT0RFX0FTWU5DLAogICAgICAgIFhDQl9OT05FLCBYQ0JfTk9ORSwg
bW91c2UtPnRpbWUpOwogICAgcjAgPSB4Y2JfZ3JhYl9wb2ludGVyX3JlcGx5KGNvbm5lY3Rpb24s
IGMwLCBOVUxMKTsKICAgIGlmICgocjAgPT0gTlVMTCkgfHwgKHIwLT5zdGF0dXMgIT0gWENCX0dS
QUJfU1RBVFVTX1NVQ0NFU1MpKSB7CiAgICAgIHB1dHMoImdyYWIgZmFpbGVkIik7CiAgICAgIHJl
dHVybiBmYWxzZTsKICAgIH0KICB9IGVsc2UgewogICAgeGNiX3VuZ3JhYl9wb2ludGVyKGNvbm5l
Y3Rpb24sIG1vdXNlLT50aW1lKTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KI2VuZGlmCgpzdGF0aWMg
Ym9vbApldmVudF9tb3Rpb24oeGNiX2dlbmVyaWNfZXZlbnRfdCAqbnZ0KSB7CgogIHhjYl9tb3Rp
b25fbm90aWZ5X2V2ZW50X3QgKm1vdGlvbgogICAgPSAoeGNiX21vdGlvbl9ub3RpZnlfZXZlbnRf
dCopbnZ0OwoKICBpZiAoISEobW90aW9uLT5zdGF0ZSAmIFhDQl9CVVRUT05fTUFTS18xKSkgewoj
aWYgVVNJTkdfQ09NUElaCiAgICB4Y2Jfc2NyZWVuX3QgKnNjcmVlbgogICAgICA9IHhjYl9zZXR1
cF9yb290c19pdGVyYXRvcih4Y2JfZ2V0X3NldHVwKGNvbm5lY3Rpb24pKS5kYXRhOwogICAgeGNi
X2ludGVybl9hdG9tX2Nvb2tpZV90IGMwOwogICAgeGNiX2ludGVybl9hdG9tX3JlcGx5X3QgKnIw
OwogICAgeGNiX2NsaWVudF9tZXNzYWdlX2V2ZW50X3QgKm1lc3NhZ2U7CiAgCiAgICBjMCA9IHhj
Yl9pbnRlcm5fYXRvbShjb25uZWN0aW9uLCAxLCAxOCwgIl9ORVRfV01fTU9WRVJFU0laRSIpOwog
ICAgcjAgPSB4Y2JfaW50ZXJuX2F0b21fcmVwbHkoY29ubmVjdGlvbiwgYzAsIE5VTEwpOwogIAog
ICAgeGNiX3VuZ3JhYl9wb2ludGVyKGNvbm5lY3Rpb24sIG1vdGlvbi0+dGltZSk7CiAgICB4Y2Jf
Zmx1c2goY29ubmVjdGlvbik7CiAgCiAgICBtZXNzYWdlID0gY2FsbG9jKDMyLCAxKTsKICAgIG1l
c3NhZ2UtPnJlc3BvbnNlX3R5cGUgID0gWENCX0NMSUVOVF9NRVNTQUdFOwogICAgbWVzc2FnZS0+
Zm9ybWF0ICAgICAgICAgPSAzMjsKICAgIG1lc3NhZ2UtPndpbmRvdyAgICAgICAgID0gbW90aW9u
LT5ldmVudDsKICAgIG1lc3NhZ2UtPnR5cGUgICAgICAgICAgID0gcjAtPmF0b207CiAgICBtZXNz
YWdlLT5kYXRhLmRhdGEzMlswXSA9IG1vdGlvbi0+cm9vdF94OwogICAgbWVzc2FnZS0+ZGF0YS5k
YXRhMzJbMV0gPSBtb3Rpb24tPnJvb3RfeTsKICAgIG1lc3NhZ2UtPmRhdGEuZGF0YTMyWzJdID0g
ODsgLyogbW92ZW1lbnQgb25seSAqLwogICAgbWVzc2FnZS0+ZGF0YS5kYXRhMzJbM10gPSBYQ0Jf
QlVUVE9OX01BU0tfMTsKICAgIG1lc3NhZ2UtPmRhdGEuZGF0YTMyWzRdID0gMTsgLyogc291cmNl
IGluZGljYXRpb24gbm9ybWFsIGFwcGxpY2F0aW9uICovCiAgICB4Y2Jfc2VuZF9ldmVudChjb25u
ZWN0aW9uLCBmYWxzZSwgc2NyZWVuLT5yb290LAogICAgICAgICAgICAgICAgICAgICAgIFhDQl9F
VkVOVF9NQVNLX1NVQlNUUlVDVFVSRV9SRURJUkVDVCB8CiAgICAgICAgICAgICAgICAgICAgICAg
WENCX0VWRU5UX01BU0tfU1VCU1RSVUNUVVJFX05PVElGWSwgKGNoYXIqKW1lc3NhZ2UpOwogICAg
eGNiX2ZsdXNoKGNvbm5lY3Rpb24pOwogICAgZnJlZShyMCk7CiAgICBwdXRzKCIgc3RhcnRlZCBk
cmFnIFhDQl9NT1RJT05fTk9USUZZIik7CiNlbHNlCiAgICBpbnQzMl90IHZhbHVlc1syXTsKICAg
IHhjYl9xdWVyeV9wb2ludGVyX2Nvb2tpZV90IGMwCiAgICAgID0geGNiX3F1ZXJ5X3BvaW50ZXIo
Y29ubmVjdGlvbiwgaWZhY2UwLndpbmRvdyk7CiAgICB4Y2JfcXVlcnlfcG9pbnRlcl9yZXBseV90
ICpyMAogICAgICA9IHhjYl9xdWVyeV9wb2ludGVyX3JlcGx5KGNvbm5lY3Rpb24sIGMwLCBOVUxM
KTsKICAgIHhjYl9mbHVzaChjb25uZWN0aW9uKTsKICAgIHZhbHVlc1swXSA9IChpZmFjZTAubWV0
ZV9ib3gueCArPSAocjAtPnJvb3RfeCAtIHhyb290KSk7CiAgICB2YWx1ZXNbMV0gPSAoaWZhY2Uw
Lm1ldGVfYm94LnkgKz0gKHIwLT5yb290X3kgLSB5cm9vdCkpOwogICAgeHJvb3QgPSByMC0+cm9v
dF94OwogICAgeXJvb3QgPSByMC0+cm9vdF95OwogICAgZnJlZShyMCk7CiAgI2lmIFBFUl9JQ0ND
TQogIHsKICAgIHVpbnQzMl90IHZhbHVlc1sxXSA9IHsgdHJ1ZSB9OwogICAgeGNiX2NoYW5nZV93
aW5kb3dfYXR0cmlidXRlcyhjb25uZWN0aW9uLCBtb3Rpb24tPmV2ZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYQ0JfQ1dfT1ZFUlJJREVfUkVESVJFQ1QsIHZhbHVlcyk7CiAg
fQogICNlbmRpZgogICAgeGNiX2NvbmZpZ3VyZV93aW5kb3coY29ubmVjdGlvbiwgbW90aW9uLT5l
dmVudCwKICAgICAgICAgICAgICAgICBYQ0JfQ09ORklHX1dJTkRPV19YIHwgWENCX0NPTkZJR19X
SU5ET1dfWSwgdmFsdWVzKTsKICAgIHhjYl9mbHVzaChjb25uZWN0aW9uKTsKICAjaWYgUEVSX0lD
Q0NNCiAgewogICAgdWludDMyX3QgdmFsdWVzWzFdID0geyBmYWxzZSB9OwogICAgeGNiX2NoYW5n
ZV93aW5kb3dfYXR0cmlidXRlcyhjb25uZWN0aW9uLCBtb3Rpb24tPmV2ZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYQ0JfQ1dfT1ZFUlJJREVfUkVESVJFQ1QsIHZhbHVlcyk7
CiAgfQogICNlbmRpZgojZW5kaWYKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnN0YXRpYyBpbnQzMl90
CnByb2Nlc3NfdGltZXJzKHZvaWQpIHsKICByZXR1cm4gSU5UX01BWDsKfQoKc3RhdGljIGJvb2wK
cHJvY2Vzc19ldmVudCh4Y2JfZ2VuZXJpY19ldmVudF90ICpudnQpIHsKCiAgc3dpdGNoIChudnQt
PnJlc3BvbnNlX3R5cGUgJiAodWludDhfdCl+MHg4MCkgewoKICAgIGNhc2UgWENCX0tFWV9QUkVT
UzogeyAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMiAqLwogICAgICBldmVudF9rZXlib2FyZChu
dnQpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX0tFWV9SRUxFQVNFOiB7ICAgICAg
IC8qIHJlc3BvbnNlX3R5cGUgMyAqLwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9C
VVRUT05fUFJFU1M6ICAgICAgICAvKiByZXNwb25zZV90eXBlIDQgKi8KICAgIGNhc2UgWENCX0JV
VFRPTl9SRUxFQVNFOiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUgNSAqLwojaWYgKCFVU0lOR19DT01Q
SVopCiAgICAgIGV2ZW50X21vdXNlKG52dCk7CiNlbmRpZgogICAgICBicmVhazsKICAgIH0KCiAg
ICBjYXNlIFhDQl9NT1RJT05fTk9USUZZOiB7ICAgICAvKiByZXNwb25zZV90eXBlIDYgKi8KICAg
ICAgZXZlbnRfbW90aW9uKG52dCk7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0VO
VEVSX05PVElGWTogeyAgICAgIC8qIHJlc3BvbnNlX3R5cGUgNyAqLwojaWYgVVNJTkdfQ09NUEla
CiAgICAgIHhjYl9lbnRlcl9ub3RpZnlfZXZlbnRfdCAqeGluZwogICAgICAgID0gKHhjYl9lbnRl
cl9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBpZiAoeGluZy0+bW9kZSA9PSBYQ0JfTk9USUZZ
X01PREVfVU5HUkFCKQogICAgICAgIHB1dHMoIiBmaW5pc2hlZCBkcmFnIFhDQl9FTlRFUl9OT1RJ
RlkiKTsKI2VuZGlmCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0xFQVZFX05PVElG
WTogeyAgICAgIC8qIHJlc3BvbnNlX3R5cGUgOCAqLwogICAgICBicmVhazsKICAgIH0KCiAgICBj
YXNlIFhDQl9GT0NVU19JTjogeyAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDkgKi8KI2lmICgh
T1ZFUlJJREUgfHwgUEVSX0lDQ0NNKQogICAgICB4Y2Jfc2V0X2lucHV0X2ZvY3VzKGNvbm5lY3Rp
b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgWENCX0lOUFVUX0ZPQ1VTX1BBUkVOVCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZmFjZTAud2luZG93LCBYQ0JfQ1VSUkVOVF9USU1FKTsK
I2VuZGlmCiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfRk9DVVNfT1VUOiB7ICAgICAg
ICAgLyogcmVzcG9uc2VfdHlwZSAxMCAqLwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhD
Ql9FWFBPU0U6IHsgICAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDEyICovCiAgICAgIGJyZWFr
OwogICAgfQoKICAgIGNhc2UgWENCX1ZJU0lCSUxJVFlfTk9USUZZOiB7IC8qIHJlc3BvbnNlX3R5
cGUgMTUgKi8KI2lmIChPVkVSUklERSAmJiAoIVBFUl9JQ0NDTSkpCiAgICAgIHhjYl9zZXRfaW5w
dXRfZm9jdXMoY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBYQ0JfSU5QVVRf
Rk9DVVNfUEFSRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlMC53aW5kb3csIFhD
Ql9DVVJSRU5UX1RJTUUpOwojZW5kaWYKICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBYQ0Jf
REVTVFJPWV9OT1RJRlk6IHsgICAgLyogcmVzcG9uc2VfdHlwZSAxNyAqLwogICAgICAgIC8qIGFz
c3VtZSBhIGtpbGwsIGRlbGV0ZSBhbGwgd2luZG93cyAoZG8gdGhlaXIgdGhpbmcpCiAgICAgICAg
ICAgc2VuZCBmYWxzZSB0byBleGl0IGxvb3AgKi8KICAgICAgZnJlZShudnQpOwogICAgICByZXR1
cm4gZmFsc2U7CiAgICB9CiAgICAgIC8qIHRoZXNlIDQgYmVjYXVzZSBvZiBYQ0JfRVZFTlRfTUFT
S19TVFJVQ1RVUkVfTk9USUZZICovCiAgICBjYXNlIFhDQl9VTk1BUF9OT1RJRlk6IHsgICAgICAv
KiByZXNwb25zZV90eXBlIDE4ICovCiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfTUFQ
X05PVElGWTogeyAgICAgICAgLyogcmVzcG9uc2VfdHlwZSAxOSAqLwogICAgICBicmVhazsKICAg
IH0KICAgIGNhc2UgWENCX1JFUEFSRU5UX05PVElGWTogeyAgIC8qIHJlc3BvbnNlX3R5cGUgMjEg
Ki8KICAgICAgICAvKiBwb3NpdGlvbiBhZnRlciBtYXAsIHRvIGRlc2lnbiB1c2VyIHJlcXVlc3Rl
ZCBvZiB3aW5kb3cKICAgICAgICAgKiBzZXQgb25jZSBhbmQgd2hlbiB3aW5kb3cgbWFuYWdlciBh
c2tzIHRvIHJlcGFyZW50CiAgICAgICAgICogZG9udCBuZWVkIGR1cmluZyBpY29uL2RlaWNvbmlm
eQogICAgICAgICAqIGRvZXNudCBzdG9wIFdNIGNvbmZpZ3VyZXMsIGJ1dCB3aWxsIGJlIHNlbnQg
YWZ0ZXIgbWFwIG5vdGlmeSAqLwogICAgICB1aW50MzJfdCB2YWx1ZXNbMl07CiAgICAgIHZhbHVl
c1swXSA9IGlmYWNlMC5tZXRlX2JveC54OwogICAgICB2YWx1ZXNbMV0gPSBpZmFjZTAubWV0ZV9i
b3gueTsKICAgICAgeGNiX2NvbmZpZ3VyZV93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UwLndpbmRv
dywKICAgICAgICAgICAgICAgICAgIFhDQl9DT05GSUdfV0lORE9XX1ggfCBYQ0JfQ09ORklHX1dJ
TkRPV19ZLCB2YWx1ZXMpOwogICAgICBicmVhazsKICAgIH0KIAogICBjYXNlIFhDQl9DT05GSUdV
UkVfTk9USUZZOiB7ICAvKiByZXNwb25zZV90eXBlIDIyICovCiAgICAgICBicmVhazsKICAgIH0K
CiAgICBjYXNlIFhDQl9QUk9QRVJUWV9OT1RJRlk6IHsgICAvKiByZXNwb25zZV90eXBlIDI4ICov
CiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fQ0xFQVI6ICAgICAvKiByZXNwb25zZV90eXBlIDI5ICov
CiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fUkVRVUVTVDogICAvKiByZXNwb25zZV90eXBlIDMwICov
CiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fTk9USUZZOiAgICAvKiByZXNwb25zZV90eXBlIDMxICov
CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0NMSUVOVF9NRVNTQUdFOiB7ICAgIC8q
IHJlc3BvbnNlX3R5cGUgMzMgKi8KICAgICAgeGNiX2NsaWVudF9tZXNzYWdlX2V2ZW50X3QgKmNt
CiAgICAgICAgPSAoeGNiX2NsaWVudF9tZXNzYWdlX2V2ZW50X3QqKW52dDsKICAgICAgaWYgKGNt
LT50eXBlICE9IFdNX1BST1RPQ09MUykgIGdvdG8gcmVwb3J0OwogICAgICB4Y2JfdW5tYXBfd2lu
ZG93KGNvbm5lY3Rpb24sIGlmYWNlMC53aW5kb3cpOwogICAgICB4Y2JfZGVzdHJveV93aW5kb3co
Y29ubmVjdGlvbiwgaWZhY2UwLndpbmRvdyk7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGRlZmF1
bHQ6CiAgICAgIGlmIChudnQtPnJlc3BvbnNlX3R5cGUgPT0gMCkgewogICAgICAgIHhjYl9nZW5l
cmljX2Vycm9yX3QgKmVyciA9ICh4Y2JfZ2VuZXJpY19lcnJvcl90KiludnQ7CiAgICAgICAgcHJp
bnRmKCJlcnJvcjogJSJQUkl1OCJcbiIsIGVyci0+ZXJyb3JfY29kZSk7CiAgICAgICAgYnJlYWs7
CiAgICAgIH0KcmVwb3J0OgogICAgICAgIC8qIFVua25vd24gZXZlbnQgdHlwZSwgdXNlIHRvIHRy
YWNrIGNvZGluZyBwcm9ibGVtcyAqLwogICAgICBwcmludGYoIlVua25vd24gZXZlbnQ6ICUiUFJJ
dTgiXG4iLCBudnQtPnJlc3BvbnNlX3R5cGUpOwogICAgICBicmVhazsKCiAgfSAvKiBlbmQgc3dp
dGNoKHJlc3BvbnNlX3R5cGUpICovCiAgICAvKiBudnQgbm8gbG9uZ2VyIG5lZWRlZCAqLwogIGZy
ZWUobnZ0KTsKICAgIC8qIGNyaXRpY2FsISBvdGhlcndpc2Ugd29udCBwcm9jZXNzIGFueXRoaW5n
IGRvbmUgKi8KICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CiAgcmV0dXJuIHRydWU7Cn0KCnN0YXRp
YyB2b2lkCnhjYl9tYWluKHZvaWQpIHsKCiAgICAvKiBzZXQgYWxsIGJlZm9yZSB0aHJvdWdoIHRv
IFhzZXJ2ZXIgKi8KICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CgogIGRvIHsKICAgIGludCB0aW1l
b3V0OwogICAgeGNiX2dlbmVyaWNfZXZlbnRfdCAqZXZlbnQ7CiAgICB3aGlsZSAoKGV2ZW50ID0g
eGNiX3BvbGxfZm9yX2V2ZW50KGNvbm5lY3Rpb24pKSAhPSBOVUxMKQogICAgICAgIC8qIF9wcm9j
ZXNzX2V2ZW50KCkgcmV0dXJucyAncnVubmluZycgZm9yIG1haW4gbG9vcC4gKi8KICAgICAgaWYg
KHByb2Nlc3NfZXZlbnQoZXZlbnQpID09IGZhbHNlKSAgZ290byBjbGVhbnVwOwogICAgZG8gewog
ICAgICAgIC8qIF9wcm9jZXNzX3RpbWVycygpIHJ1bnMgYW55IHRpbWVycyB0aGF0IGFyZSBpbW1l
ZGlhdGVseSBwZW5kaW5nLAogICAgICAgICAgIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWls
bGlzZWNvbmRzIHVudGlsIHRoZSBuZXh0IHRpbWVyCiAgICAgICAgICAgaW4gdGhlIHF1ZXVlIGlz
IHJlYWR5LgogICAgICAgICAgIF9wcm9jZXNzX3RpbWVycygpIHJldHVybnMgSU5UX01BWCBpZiB0
aGVyZSBhcmUgbm8gdGltZXJzLiAqLwogICAgICAgIC8qIF9wcm9jZXNzX3RpbWVycygpIGFsc28g
cmVtb3ZlcyBmcm9tIHRpbWVvdXQgaXRzIHJ1biB0aW1lLiAqLwogICAgICB0aW1lb3V0ID0gcHJv
Y2Vzc190aW1lcnMoKTsKICAgICAgaWYgKChldmVudCA9IHhjYl9wb2xsX2Zvcl9xdWV1ZWRfZXZl
bnQoY29ubmVjdGlvbikpID09IE5VTEwpICBicmVhazsKICAgICAgICBpZiAocHJvY2Vzc19ldmVu
dChldmVudCkgPT0gZmFsc2UpICBnb3RvIGNsZWFudXA7CiAgICB9IHdoaWxlICgxKTsKICAgIGlm
ICh0aW1lb3V0ID4gNikgewogICAgICBzdHJ1Y3QgcG9sbGZkIHBmZFsxXTsKICAgICAgcGZkLT5m
ZCA9IHhjYl9nZXRfZmlsZV9kZXNjcmlwdG9yKGNvbm5lY3Rpb24pOwogICAgICBwZmQtPmV2ZW50
cyA9IFBPTExJTjsKICAgICAgcGZkLT5yZXZlbnRzID0gUE9MTE9VVDsKICAgICAgcG9sbChwZmQs
IDEsIHRpbWVvdXQpOwogICAgfQogIH0gd2hpbGUgKDEpOwogICAgLyogcmVjZWl2ZWQgWENCX0RF
U1RST1lfTk9USUZZICovCmNsZWFudXA6CiAgcmV0dXJuOwp9Cgp2b2lkCnVpX3dpbmRvd19uYW1l
KHhjYl93aW5kb3dfdCB3aW5kb3cpIHsKCiAgeGNiX2ludGVybl9hdG9tX2Nvb2tpZV90IGNvb2tp
ZQogICAgPSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMSwgNywgIldNX05BTUUiKTsKICB4
Y2JfaW50ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkKICAgID0geGNiX2ludGVybl9hdG9tX3JlcGx5
KGNvbm5lY3Rpb24sIGNvb2tpZSwgTlVMTCk7CiAgeGNiX2ludGVybl9hdG9tX2Nvb2tpZV90IGNv
b2tpZTIKICAgID0geGNiX2ludGVybl9hdG9tKGNvbm5lY3Rpb24sIDAsIDYsICJTVFJJTkciKTsK
ICB4Y2JfaW50ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkyCiAgICA9IHhjYl9pbnRlcm5fYXRvbV9y
ZXBseShjb25uZWN0aW9uLCBjb29raWUyLCBOVUxMKTsKCiAgY2hhciB0aXRsZVsxNl07CiAgc3By
aW50Zih0aXRsZSwgIiVkIiwgd2luZG93KTsKICB4Y2JfY2hhbmdlX3Byb3BlcnR5KGNvbm5lY3Rp
b24sIFhDQl9QUk9QX01PREVfUkVQTEFDRSwgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAg
IHJlcGx5LT5hdG9tLCByZXBseTItPmF0b20sIDgsCiAgICAgICAgICAgICAgICAgICAgICAgc3Ry
bGVuKHRpdGxlKSwgdGl0bGUpOwogIGZyZWUocmVwbHkpOwogIGZyZWUocmVwbHkyKTsKfQoKc3Rh
dGljIHZvaWQKX3dpbmRvd19ldmVudF9kZWxldGUoeGNiX2Nvbm5lY3Rpb25fdCAqY29ubmVjdGlv
biwgeGNiX3dpbmRvd190IHdpbmRvdykgewoKICAgIC8qIGFsbG93IGRlbGV0ZSB3aW5kb3cgc28g
Y2FuIHF1aXQgYXBwbGljYXRpb24uIEF2b2lkIF5DLiAqLwogIHhjYl9jaGFuZ2VfcHJvcGVydHko
Y29ubmVjdGlvbiwgWENCX1BST1BfTU9ERV9SRVBMQUNFLCB3aW5kb3csCiAgICAgICAgICAgICAg
ICAgICAgICBXTV9QUk9UT0NPTFMsIFhDQl9BVE9NX0FUT00sIDMyLCAxLAogICAgICAgICAgICAg
ICAgICAgICAgJldNX0RFTEVURV9XSU5ET1cpOwp9CgpzdGF0aWMgeGNiX3dpbmRvd190Cl93aW5k
b3dfY3JlYXRlKFBoeFJlY3RhbmdsZSBjb25maWd1cmUpIHsKCiAgeGNiX3NjcmVlbl90ICpzY3Jl
ZW47CiAgeGNiX3dpbmRvd190IHdpbmRvdzsKICB1aW50MzJfdCBtYXNrOwogIHVpbnQzMl90IHZh
bHVlc1syXTsKCiAgaWYgKGNvbm5lY3Rpb24gPT0gTlVMTCkgewogICAgeGNiX2ludGVybl9hdG9t
X2Nvb2tpZV90IGMwLCBjMTsKICAgIHhjYl9pbnRlcm5fYXRvbV9yZXBseV90ICpyMCwgKnIxOwog
ICAgY29ubmVjdGlvbiA9IHhjYl9jb25uZWN0KE5VTEwsIE5VTEwpOwogICAgYzAgPSB4Y2JfaW50
ZXJuX2F0b20oY29ubmVjdGlvbiwgMCwgMTIsICJXTV9QUk9UT0NPTFMiKTsKICAgIGMxID0geGNi
X2ludGVybl9hdG9tKGNvbm5lY3Rpb24sIDAsIDE2LCAiV01fREVMRVRFX1dJTkRPVyIpOwogICAg
cjAgPSB4Y2JfaW50ZXJuX2F0b21fcmVwbHkoY29ubmVjdGlvbiwgYzAsIE5VTEwpOwogICAgcjEg
PSB4Y2JfaW50ZXJuX2F0b21fcmVwbHkoY29ubmVjdGlvbiwgYzEsIE5VTEwpOwogICAgV01fUFJP
VE9DT0xTICAgICA9IHIwLT5hdG9tOyAgZnJlZSgodm9pZCopcjApOwogICAgV01fREVMRVRFX1dJ
TkRPVyA9IHIxLT5hdG9tOyAgZnJlZSgodm9pZCopcjEpOwogIH0KCiAgc2NyZWVuID0geGNiX3Nl
dHVwX3Jvb3RzX2l0ZXJhdG9yKHhjYl9nZXRfc2V0dXAoY29ubmVjdGlvbikpLmRhdGE7CiAgICAv
KiBDcmVhdGUgdGhlIHdpbmRvdyAqLwogIHdpbmRvdyA9IHhjYl9nZW5lcmF0ZV9pZChjb25uZWN0
aW9uKTsKCiAgbWFzayAgICAgID0gWENCX0NXX0JBQ0tfUElYRUwgfCBYQ0JfQ1dfRVZFTlRfTUFT
SzsKICB2YWx1ZXNbMF0gPSBzY3JlZW4tPndoaXRlX3BpeGVsOwogIHZhbHVlc1sxXSA9IFhDQl9F
VkVOVF9NQVNLX0VYUE9TVVJFICAgICAgIHwgWENCX0VWRU5UX01BU0tfQlVUVE9OX1BSRVNTICAg
fAogICAgICAgICAgICAgIFhDQl9FVkVOVF9NQVNLX0JVVFRPTl9SRUxFQVNFIHwgWENCX0VWRU5U
X01BU0tfUE9JTlRFUl9NT1RJT04gfAogICAgICAgICAgICAgIFhDQl9FVkVOVF9NQVNLX0VOVEVS
X1dJTkRPVyAgIHwgWENCX0VWRU5UX01BU0tfTEVBVkVfV0lORE9XICAgfAogICAgICAgICAgICAg
IFhDQl9FVkVOVF9NQVNLX0tFWV9QUkVTUyAgICAgIHwgWENCX0VWRU5UX01BU0tfS0VZX1JFTEVB
U0UgICAgfAogICAgICAgICAgICAgIFhDQl9FVkVOVF9NQVNLX0ZPQ1VTX0NIQU5HRSAgIHwgWENC
X0VWRU5UX01BU0tfU1RSVUNUVVJFX05PVElGWSB8CiNpZiBQRVJfSUNDQ00KICAgICAgICAgICAg
ICBYQ0JfRVZFTlRfTUFTS19TVUJTVFJVQ1RVUkVfUkVESVJFQ1QgfAogICAgICAgICAgICAgIFhD
Ql9FVkVOVF9NQVNLX1JFU0laRV9SRURJUkVDVCB8CiNlbmRpZgogICAgICAgICAgICAgIFhDQl9F
VkVOVF9NQVNLX1ZJU0lCSUxJVFlfQ0hBTkdFOwoKICAgIC8qIGlnbm9yZXMgeCwgeSwgYm9yZGVy
X3dpZHRoICh2aXJ1cykgKi8KICB4Y2JfY3JlYXRlX3dpbmRvdyhjb25uZWN0aW9uLAogICAgICAg
ICAgICAgICAgICAgIHNjcmVlbi0+cm9vdF9kZXB0aCwgICAgICAgICAgICAvKiBkZXB0aCAgICAg
ICAgICAqLwogICAgICAgICAgICAgICAgICAgIHdpbmRvdywgICAgICAgICAgICAgICAgICAgICAg
ICAvKiBnZW5lcmF0ZWQgaWQgICAqLwogICAgICAgICAgICAgICAgICAgIHNjcmVlbi0+cm9vdCwg
ICAgICAgICAgICAgICAgICAvKiBwYXJlbnQgd2luZG93ICAqLwogICAgICAgICAgICAgICAgICAg
IGNvbmZpZ3VyZS54LCAgICAgICAgICAgICAgICAgICAvKiB4LCB5ICAgICAgICAgICAqLwogICAg
ICAgICAgICAgICAgICAgIGNvbmZpZ3VyZS55LAogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3Vy
ZS53LCAgICAgICAgICAgICAgICAgICAvKiB3aWR0aCwgaGVpZ2h0ICAqLwogICAgICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyZS5oLAogICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiBib3JkZXJfd2lkdGggICAqLwogICAgICAgICAgICAgICAgICAgIFhD
Ql9XSU5ET1dfQ0xBU1NfSU5QVVRfT1VUUFVULCAvKiBjbGFzcyAgICAgICAgICAqLwogICAgICAg
ICAgICAgICAgICAgIHNjcmVlbi0+cm9vdF92aXN1YWwsICAgICAgICAgICAvKiB2aXN1YWwgICAg
ICAgICAqLwogICAgICAgICAgICAgICAgICAgIG1hc2ssIHZhbHVlcyk7ICAgICAgICAgICAgICAg
ICAvKiBtYXNrcyAqLwoKewogIHVpbnQzMl90IHZhbHVlX2xpc3Q7CiAgeGNiX2ZvbnRfdCBmb250
OwogIHhjYl9jdXJzb3JfdCBjdXJzb3I7CiAgZm9udCA9IHhjYl9nZW5lcmF0ZV9pZChjb25uZWN0
aW9uKTsKICB4Y2Jfb3Blbl9mb250KGNvbm5lY3Rpb24sIGZvbnQsIHN0cmxlbiAoImN1cnNvciIp
LCAiY3Vyc29yIik7CiAgY3Vyc29yID0geGNiX2dlbmVyYXRlX2lkKGNvbm5lY3Rpb24pOwogIHhj
Yl9jcmVhdGVfZ2x5cGhfY3Vyc29yKGNvbm5lY3Rpb24sIGN1cnNvciwgZm9udCwgZm9udCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMTMyLCAxMzIgKyAxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKTsKICB2
YWx1ZV9saXN0ID0gY3Vyc29yOwogIHhjYl9jaGFuZ2Vfd2luZG93X2F0dHJpYnV0ZXMoY29ubmVj
dGlvbiwgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENCX0NXX0NVUlNP
UiwgJnZhbHVlX2xpc3QpOwp9CgojaWYgKE9WRVJSSURFICYmICghUEVSX0lDQ0NNKSkKewogIHZh
bHVlc1swXSA9IHRydWU7CiAgeGNiX2NoYW5nZV93aW5kb3dfYXR0cmlidXRlcyhjb25uZWN0aW9u
LCB3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ0JfQ1dfT1ZFUlJJREVf
UkVESVJFQ1QsIHZhbHVlcyk7Cn0KI2VuZGlmCgogIF93aW5kb3dfZXZlbnRfZGVsZXRlKGNvbm5l
Y3Rpb24sIHdpbmRvdyk7CiAgcmV0dXJuIHdpbmRvdzsKfQoKeGNiX3dpbmRvd190CnVpX3dpbmRv
d19jcmVhdGUoUGh4UmVjdGFuZ2xlIGNvbmZpZ3VyZSkgewoKICB4Y2Jfd2luZG93X3Qgd2luZG93
ID0gX3dpbmRvd19jcmVhdGUoY29uZmlndXJlKTsKICBpZiAod2luZG93ID09IDApICByZXR1cm4g
MDsKCiAgaWZhY2UwLm1ldGVfYm94ID0gY29uZmlndXJlOwogIGlmYWNlMC53aW5kb3cgPSB3aW5k
b3c7CiAgcmV0dXJuIHdpbmRvdzsKfQoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkg
ewoKICB4Y2Jfd2luZG93X3Qgd2luZG93OwoKICAgIC8qIHdpbmRvdyBzaXplIGFuZCBwb3NpdGlv
biAqLwogIFBoeFJlY3RhbmdsZSBjb25maWd1cmUgPSB7IDgwMCwgMjAwLCAzMDAsIDIwMCB9Owog
ICAgLyogQSAndG9wbW9zdCcgZGVjb3JhdGVkIHdpbmRvdyAqLwogIHdpbmRvdyA9IHVpX3dpbmRv
d19jcmVhdGUoY29uZmlndXJlKTsKICBpZiAod2luZG93ID09IDApICBleGl0KEVYSVRfRkFJTFVS
RSk7CgogIHVpX3dpbmRvd19uYW1lKHdpbmRvdyk7CgogICAgLyogTWFwIHRoZSB3aW5kb3cgb24g
dGhlIHNjcmVlbiAqLwogIHhjYl9tYXBfd2luZG93KGNvbm5lY3Rpb24sIHdpbmRvdyk7CgogICAg
LyogUnVuIGV2ZW50IGxvb3AgKi8KICB4Y2JfbWFpbigpOwoKICByZXR1cm4gRVhJVF9TVUNDRVNT
Owp9Ci==

--=-m7D0Nb36mN//j1JLt8mf--