MOO-cows Mailing List Archive

[Prev][Next][Index][Thread]

Panic recovery of a database - eg, BatMOO




Hi.

It appears as if BatMOO was saved by another method, but here is 
something I've knocked up that should work to the extent of re-creating 
your entire DB, to perfection, with the sole exclusion of forked and 
suspended tasks.

I have tested it on my system, connected via 'Local Loopback', ie, both 
the MOO and I are running on the same machine, and not actually over the net.

I have no idea what the result of trying this over the net will be.  Lag 
might cause serious problems with the high frequency of notify() calls, 
resulting in buffer overruns, etc.  If that is the case, sprinkle a few 
liberal suspends(10) or so in the code.  I just don't have the time or 
inclination right now to do a full net test.

I'd appreciate an independant test and some feedback.

	Ian.
DQoNClByb2NlZHVyZSB0byBwYW5pYy1yZWNvdmVyIGEgZGF0YWJhc2UgZnJv
bSB0aGUgUGFuaWMuZGINCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KVGhpcyBzaG91bGQgYWxs
b3cgeW91IHRvIHJlY292ZXIgeW91ciBNT08ncyBkYiBmcm9tIGNhdGFzdHJv
cGhpYyBlcmFkaWNhdGlvbg0Kb2YgdGhlIGRiIGZpbGUgaXRzZWxmLg0KDQpJ
dCB3aWxsIHdvcmsgd2l0aCBib3RoIDEuNy44cDQgYXMgd2VsbCBhcyB0aGUg
bmV3IDEuNy45IHNlcmllcy4gIEl0IGlzIGFsc28NCmVudGlyZWx5IGluZGVw
ZW5kYW50IG9mIHRoZSBjb3JlIHlvdSBhcmUgdXNpbmcuICBIZXJlJ3Mgd2hh
dCB0byBkby4NCg0KQm9vdCB1cCBhIG1vbyB1c2luZyB0aGUgc3VwcGxpZWQg
UGFuaWMuZGIsIE9SIGNyZWF0ZSB5b3VyIG93biBmcm9tDQpNaW5pbWFsLmRi
IGJ5IHVwbG9hZGluZyB0aGUgZmlsZSBwYW5pYy5tDQoNCklmIHlvdSBhcmUg
dXNpbmcgVGlueUZ1Z3VlLCBoZXJlJ3MgdGhlIHByb2NlZHVyZSB0byB1cGxv
YWQgYSBmaWxlLg0KDQovc2V0IHB0aW1lPTANCi9xdW90ZSAncGFuaWMubQ0K
DQpUaGVyZSBpcyBubyBjbG9zaW5nIHF1b3RlIG9uIHRoYXQgbGluZSwgJ2Nh
dXNlIHRoYXQncyB0aGUgc3ludGF4Lg0KDQpTZWNvbmRseSwgdXBsb2FkIHRo
ZSBmaWxlIE1lZ2FQYW5pY0R1bXAubSB0byB5b3VyIGN1cnJlbnQsDQp3YXMt
YWJvdXQtdG8tZGlzYXBwZWFyLWZvcmV2ZXIgZGF0YWJhc2UuICBZb3UgZG9u
J3QgbmVlZCB0byAvc2V0IHB0aW1lPTAgYQ0Kc2Vjb25kIHRpbWUgaWYgeW91
J3JlIHVzaW5nIFRGLg0KDQpUaGVuLCBsYXN0bHksIHR5cGUgTWVnYVBhbmlj
RHVtcCAoaW4geW91ciBjdXJyZW50IE1PTywgbm90IHRoZSBuZXcgZW1wdHkN
Cm9uZSksIGFuZCB5b3Ugd2lsbCBiZSBwcm9tcHRlZCB3aGVuIHRvIHR1cm4g
eW91ciBjYXB0dXJlIG9yIGxvZyBmaWxlIG9uLiAgT24NClRGLCB0aGF0IHdv
dWxkIGJlIHNvbWV0aGluZyBsaWtlOg0KDQovbG9nIE15TU9PLk1lZ2FEdW1w
DQoNCldoZW4gdGhhdCBoYXMgYXQgbGFzdCBmaW5pc2hlZCwgdHlwZSAvbG9n
IG9mZiwgc3dpdGNoIHRvIHlvdXIgbmV3IGVtcHR5DQpQYW5pYy5kYiBNT08s
IGFuZCB0eXBlOg0KDQovcXVvdGUgJ015TU9PLk1lZ2FEdW1wDQoNCkFuZCB0
aGVuIGdvIGRvIHNvbWV0aGluZyBlbHNlIGZvciBhIHdoaWxlIDpeKQ0KDQpB
ZnRlciB0aGlzLCB5b3Ugc2hvdWxkIGhhdmUgYSByZWNvdmVyZWQgZGF0YWJh
c2UuICBJZiBvYmplY3QgIzMgd2FzIG5vdCBhDQpwbGF5ZXIsIHlvdSBtaWdo
dCBoYXZlIHRvIGRpc2Nvbm5lY3QgYnkgdHlwaW5nIC9kYyBvciB3aGF0ZXZl
cidzIGFwcHJvcHJpYXRlDQp0byB5b3VyIGNsaWVudC4gIFRoZW4gcmVjb25u
ZWN0IHRvIHRoZSBleCBQYW5pYy5kYiBNT08gYW5kIHNlZSBpZiBpdCB3b3Jr
ZWQuDQoNCkFueXdheSwgaGVyZSdzIHNvbWUgYnJpZWYgZG9jcyBvbiBob3cg
aXQgd29ya3MsIGFuZCB3aGF0IGl0IGRvZXMuDQoNCi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0NCg0KDQpWZXJiIE1lZ2FQYW5pY0R1bXAgaXMgdGhlIGZyb250
IGVuZCwgYW5kIHRoZSBraWNrb2ZmIGZvciB0aGUgc3lzdGVtLiAgSXQNCndh
cm5zIHlvdSBhYm91dCBzcGFtLCBhbmQgZ2l2ZXMgeW91IGFuIG9wcG9ydHVu
aXR5IHRvIHR1cm4geW91ciBsb2cgZmlsZSBvbi4NCg0KDQpfX2NyZWF0ZV9v
YmpzKCkNCg0KQ3JlYXRlIGFsbCBvYmplY3RzIGZyb20gIzQgdG8gbWF4X29i
amVjdCgpLCBjaHBhcmVudCB0aGUgbG90IHRvICMtMSBhbmQgYWxzbw0KbW92
ZSB0aGVtIHRvICMtMS4NCg0KDQpfX3NldF9wbGF5ZXJzKCkNCg0KU2V0IHBy
b2dyYW1tZXIsIHdpemFyZCBhbmQgcGxheWVyIGZsYWdzIGFzIHJlcXVpcmVk
LiAgRXhjbHVkZSAjMyBmcm9tIHRoaXMNCnByb2Nlc3MuDQoNCg0KX19zZXRf
bGluZWFnZSgpDQoNClNldCBwYXJlbnQvY2hpbGRyZW4gYXR0cmlidXRlcy4N
Cg0KDQpfX3NldF9pbmJ1aWx0KCkNCg0KU2V0IGFsbCBpbmJ1aWx0IHByb3Bl
cnRpZXMsIGV4Y2x1ZGluZyAucHJvZ3JhbW1lciBhbmQgLndpemFyZCwgd2hp
Y2ggaGF2ZQ0KYWxyZWFkeSBiZWVuIGRvbmUuICBUaGlzIGluY2x1ZGVzIC5s
b2NhdGlvbiBhbmQgLmNvbnRlbnRzLCB3aGljaCBhcmUgZG9uZQ0KdmlhIG1v
dmUoKS4NCg0KDQpfX2NyZWF0ZV92ZXJicygpDQoNCkNyZWF0ZSBhbGwgdmVy
YnMgb24gYWxsIG9iamVjdHMuICBOT1RFOiAgUmVhZCB0aGUgd2FybmluZyBp
bg0KUHJvZ3JhbW1lcnNNYW51YWwudHh0IGluIHRoZSBzZWN0aW9uIGVudGl0
bGVkICdPcGVyYXRpb25zIG9uIFZlcmJzJyB3aXRoDQpyZWdhcmQgdG8gdmVy
YnMgd2l0aCBudW1iZXJzIGFzIHRoZWlyIG5hbWVzLiAgU3VjaCB2ZXJicyB3
aWxsIGNhdXNlIG1heWhlbQ0Kb24gdGhlIG9iamVjdCBvbiB3aGljaCB0aGV5
IGV4aXN0LCBhbmQgbWlub3IgJ2V4ZWN1dGlvbicgcHJvYmxlbXMgb24NCmNo
aWxkcmVuLiAgSXQgaXMgVkVSWSBzZWxkb20gdGhhdCBzdWNoIGEgdmVyYiBl
eGlzdHMsIGJ1dCBpdCBpcyBwb3NzaWJsZS4gDQpUaGVuIGNvZGUgYWxsIHRo
ZSB2ZXJicyBvbiBhbGwgb2JqZWN0cy4gIEhlcmUgaXMgd2hlcmUgdGhlIHdh
cm5pbmcgYmVjb21lcw0KZXNwZWNpYWxseSBib3RoZXJzb21lLiAgSWYgc3Vj
aCBhIHZlcmIgZXhpc3RzLCB0aGUgcHJvZ3JhbSBpcyBnb2luZyB0byBlbmQN
CnVwIGluIHRoZSB3cm9uZyBwbGFjZS4NCg0KDQpfX2NyZWF0ZV9wcm9wcygp
DQoNCkNyZWF0ZSBhbGwgcHJvcGVydGllcyBvbiBhbGwgb2JqZWN0cyB0aGF0
IERFRklORSB0aGUgcHJvcGVydGllcy4gIEluaGVyaXRlZA0KcHJvcGVydGll
cyBhcmUgbm90IGhhbmRsZWQgaGVyZS4NCg0KDQpfX3BhcmVudF9wcm9wcygp
DQoNClNldCB0aGUgdmFsdWVzIG9mIGFsbCBub24tY2xlYXIgaW5oZXJpdGVk
IHByb3BlcnRpZXMuDQoNCg0KX19yZWN5Y2xlX29ianMoKQ0KDQpGaW5hbGx5
LCByZWN5Y2xlIHRoZSBtaXNzaW5nIG9iamVjdHMuDQoNCk5PVEU6DQoNCkJl
Y2F1c2UgIzMgd2FzIHVzZWQgYXMgdGhlICd3aXphcmQnIHRvIGRvIHRoZSBy
ZS1jcmVhdGlvbiBvZiB0aGUgZW50aXJlDQpkYXRhYmFzZSwgbm8gYXR0ZW1w
IHdhcyBtYWRlIHRvIGZpZGRsZSB0aGUgLnByb2dyYW1tZXIsIC53aXphcmQg
YW5kIHBsYXllcg0KZmxhZ3Mgb2YgIzMuICBUaGVyZWZvciwgeW91IHNob3Vs
ZCBlZGl0ICMzIHRvIHJlZmxlY3QgaXQncyB0cnVlIHN0YXR1cy4gIFRoZQ0K
cHJvZ3JhbSB0ZWxscyB5b3UgaWYgdGhpcyBpcyBuZWNlc3NhcnkuDQo=
NA0KMg0KMA0KMQ0KMw0KIzANClN5c3RlbSBPYmplY3QNCg0KMTYNCjMNCi0x
DQotMQ0KLTENCjENCi0xDQoyDQoxDQpkb19sb2dpbl9jb21tYW5kDQozDQox
NzMNCi0xDQowDQowDQojMQ0KUm9vdCBDbGFzcw0KDQoxNg0KMw0KLTENCi0x
DQotMQ0KLTENCjANCi0xDQowDQowDQowDQojMg0KVGhlIEZpcnN0IFJvb20N
Cg0KMA0KMw0KLTENCjMNCi0xDQoxDQotMQ0KMw0KMA0KMA0KMA0KIzMNCldp
emFyZA0KDQo3DQozDQoyDQotMQ0KLTENCjENCi0xDQotMQ0KMQ0KZXZhbA0K
Mw0KOTMNCi0yDQowDQowDQojMDowDQpyZXR1cm4gIzM7DQouDQojMzowDQpp
ZiAocGxheWVyICE9IHRoaXMpDQpwbGF5ZXI6dGVsbCgiSSBjb3VsZG4ndCB1
bmRlcnN0YW5kIHRoYXQuIik7DQpyZXR1cm47DQplbmRpZg0Kc2V0X3Rhc2tf
cGVybXMocGxheWVyKTsNCmFuc3dlciA9IGV2YWwoKCJyZXR1cm4gIiArIGFy
Z3N0cikgKyAiOyIpOw0KaWYgKGFuc3dlclsxXSkNCm5vdGlmeShwbGF5ZXIs
IHRvc3RyKCI9PiAiLCBhbnN3ZXJbMl0pKTsNCmVsc2UNCmZvciBsaW5lIGlu
IChhbnN3ZXJbMl0pDQpub3RpZnkocGxheWVyLCBsaW5lKTsNCmVuZGZvcg0K
ZW5kaWYNCi4NCjAgY2xvY2tzDQowIHF1ZXVlZCB0YXNrcw0KMCBzdXNwZW5k
ZWQgdGFza3MNCg==
LnByb2dyYW0gIzI6ZXZhbA0Kc2V0X3Rhc2tfcGVybXMocGxheWVyKTsNCmFu
c3dlciA9IGV2YWwoInJldHVybiAiICsgYXJnc3RyICsgIjsiKTsNCmlmIChh
bnN3ZXJbMV0pDQogIG5vdGlmeShwbGF5ZXIsIHRvc3RyKCI9PiAiLCBhbnN3
ZXJbMl0pKTsNCmVsc2UNCiAgZm9yIGxpbmUgaW4gKGFuc3dlclsyXSkNCiAg
ICBub3RpZnkocGxheWVyLCBsaW5lKTsNCiAgZW5kZm9yDQplbmRpZg0KLg0K
DQo7YWRkX3ZlcmIoIzMsIHsjMywgInJ4ZCIsICJldmFsIn0sIHsiYW55Iiwg
ImFueSIsICJhbnkifSkNCi5wcm9ncmFtICMzOmV2YWwNCmlmIChwbGF5ZXIg
IT0gdGhpcykNCiAgcGxheWVyOnRlbGwoIkkgY291bGRuJ3QgdW5kZXJzdGFu
ZCB0aGF0LiIpOw0KICByZXR1cm47DQplbmRpZg0Kc2V0X3Rhc2tfcGVybXMo
cGxheWVyKTsNCmFuc3dlciA9IGV2YWwoInJldHVybiAiICsgYXJnc3RyICsg
IjsiKTsNCmlmIChhbnN3ZXJbMV0pDQogIG5vdGlmeShwbGF5ZXIsIHRvc3Ry
KCI9PiAiLCBhbnN3ZXJbMl0pKTsNCmVsc2UNCiAgZm9yIGxpbmUgaW4gKGFu
c3dlclsyXSkNCiAgICBub3RpZnkocGxheWVyLCBsaW5lKTsNCiAgZW5kZm9y
DQplbmRpZg0KLg0KDQo7ZGVsZXRlX3ZlcmIoIzIsICJldmFsIikNCg==
DQo7YWRkX3ZlcmIocGxheWVyLCB7cGxheWVyLCAicmQiLCAiTWVnYVBhbmlj
RHVtcCJ9LCB7Im5vbmUiLCAibm9uZSIsICJub25lIn0pDQoNCi5wcm9ncmFt
IG1lOk1lZ2FQYW5pY0R1bXANCm5vdGlmeShwbGF5ZXIsICJXQVJOSU5HIik7
DQpub3RpZnkocGxheWVyLCAiPT09PT09PSIpOw0Kbm90aWZ5KHBsYXllciwg
IiIpOw0Kbm90aWZ5KHBsYXllciwgIllvdSBoYXZlIGp1c3QgcmVxdWVzdGVk
IGFuIGVudGlyZSBkdW1wIG9mIHRoaXMgZGF0YWJhc2UgdG8iKTsNCm5vdGlm
eShwbGF5ZXIsICJiZSBzZW50IHRvIHlvdSB2aWEgdGhpcyBjb25uZWN0aW9u
LiAgSWYgdGhhdCBpcyBub3Qgd2hhdCIpOw0Kbm90aWZ5KHBsYXllciwgInlv
dSB3YW50ZWQsIHRoZSB3b3JkIFNQQU0gaXMgYWJvdXQgdG8gZ2FpbiBuZXcg
bWVhbmluZyBpbiIpOw0Kbm90aWZ5KHBsYXllciwgImluIHlvdXIgbGlmZSA6
XikiKTsNCm5vdGlmeShwbGF5ZXIsICIiKTsNCm5vdGlmeShwbGF5ZXIsICJJ
ZiB5b3UgRE8gd2FudCB0byBoYXZlIHRoZSBlbnRpcmUgZGF0YWJhc2Ugc2Vu
dCB0byB5b3VyIik7DQpub3RpZnkocGxheWVyLCAidGVybWluYWwvc2NyZWVu
L3N0ZG91dC9jb25uZWN0aW9uIG9yIHdoYXRldmVyIHlvdSB3YW50IHRvIik7
DQpub3RpZnkocGxheWVyLCAiY2FsbCBpdCwgdGhlbiB0eXBlICdJX2FtX1ZF
Ullfc3VyZSEnIHJpZ2h0IG5vdy4iKTsNCm5vdGlmeShwbGF5ZXIsICIiKTsN
Cm5vdGlmeShwbGF5ZXIsICJZb3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1
bml0eSB0byB0dXJuIHlvdXIgbG9nIGZpbGUgb24gaW4iKTsNCm5vdGlmeShw
bGF5ZXIsICJhIG1vbWVudC4gIFJpZ2h0IG5vdywgbWFrZSBzdXJlIHlvdSBr
bm93IHdoYXQgeW91J3JlIGluIGZvci4iKTsNCmFuc3dlciA9IHJlYWQoKTsN
CmlmIChhbnN3ZXIgIT0gImlfYW1fdmVyeV9zdXJlISIpDQogIG5vdGlmeShw
bGF5ZXIsICJEYXRhYmFzZSBEdW1wIEFib3J0ZWQuICBUaGF0IHdhcyBhIFZF
Ulkgd2lzZSBkZWNpc2lvbiA6XikiKTsNCiAgcmV0dXJuOw0KZW5kaWYNCm5v
dGlmeShwbGF5ZXIsICJEYXRhYmFzZSBkdW1wIGlzIGFib3V0IHRvIGJlZ2lu
LiAgIFJpZ2h0IG5vdywgeW91IHNob3VsZCIpOw0Kbm90aWZ5KHBsYXllciwg
InN0YXJ0IHlvdXIgY2FwdHVyZSBmaWxlLCBhbmQgdGhlbiBwcmVzcyA8RU5U
RVI+IG9yIDxSRVRVUk4+Iik7DQpub3RpZnkocGxheWVyLCAidG8gYmVnaW4u
ICBHb29kIGx1Y2suIik7DQpyZWFkKCk7DQpzdXNwZW5kKDApOw0KdGhpczpf
X2NyZWF0ZV9vYmpzKCk7DQp0aGlzOl9fc2V0X3BsYXllcnMoKTsNCnRoaXM6
X19zZXRfbGluZWFnZSgpOw0KdGhpczpfX3NldF9pbmJ1aWx0KCk7DQp0aGlz
Ol9fY3JlYXRlX3ZlcmJzKCk7DQp0aGlzOl9fY3JlYXRlX3Byb3BzKCk7DQp0
aGlzOl9fcGFyZW50X3Byb3BzKCk7DQp0aGlzOl9fcmVjeWNsZV9vYmpzKCk7
DQp0aGlzOl9fZml4X29ial8zKCk7DQppZiAocXVldWVkX3Rhc2tzKCkpDQog
IG5vdGlmeShwbGF5ZXIsICI7XCJObyBzdXNwZW5kZWQgb3IgZm9ya2VkIHRh
c2tzIGhhdmUgYmVlbiByZWNvdmVyZWQuXCIiKTsNCiAgbm90aWZ5KHBsYXll
ciwgIjtcInVzZSA7cXVldWVkX3Rhc2tzKCkgdG8gc2VlIGlmIHRoYXQncyBp
bXBvcnRhbnQuXCIiKTsNCmVuZGlmDQpub3RpZnkocGxheWVyLCAiO1wiRmlu
aXNoZWQhICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcIiIp
Ow0KaWYgKCEoImV2YWwiIGluIHZlcmJzKCMzKSkpDQogIG5vdGlmeShwbGF5
ZXIsICI7ZGVsZXRlX3ZlcmIoIzMsIFwiZXZhbFwiKSIpOw0KZW5kaWYNCi4N
Cg0KDQo7YWRkX3ZlcmIocGxheWVyLCB7cGxheWVyLCAicnhkIiwgIkVyclN0
ciJ9LCB7InRoaXMiLCAibm9uZSIsICJ0aGlzIn0pDQoNCi5wcm9ncmFtIG1l
OkVyclN0cg0KcmV0dXJuIHsiRV9OT05FIiwiRV9UWVBFIiwiRV9ESVYiLCJF
X1BFUk0iLCJFX1BST1BORiIsIkVfVkVSQk5GIiwNCiAgICAgICAgICAiRV9W
QVJORiIsIkVfSU5WSU5EIiwiRV9SRUNNT1ZFIiwiRV9NQVhSRUMiLCJFX1JB
TkdFIiwNCiAgICAgICAgICAiRV9BUkdTIiwiRV9OQUNDIiwiRV9JTlZBUkci
LCJFX1FVT1RBIn1bdG9udW0oYXJnc1sxXSkrMV07DQouDQoNCg0KO2FkZF92
ZXJiKHBsYXllciwge3BsYXllciwgInJ4ZCIsICJUb0xpdGVyYWwifSwgeyJ0
aGlzIiwgIm5vbmUiLCAidGhpcyJ9KQ0KDQoucHJvZ3JhbSBtZTpUb0xpdGVy
YWwNCiJTVFIgcGxheWVyOlRvTGl0ZXJhbChBTlkpIjsNCiJDb252ZXJ0IGFu
eSB2YXJpYWJsZSB0byBhIGxpdGVyYWwgc3RyaW5nLiI7DQppZiAodHlwZW9m
KGFyZ3NbMV0pICE9IExJU1QpDQogIGlmICh0eXBlb2YoYXJnc1sxXSkgPT0g
U1RSKQ0KICAgIHIgPSBzdHJzdWIoYXJnc1sxXSwgIlxcIiwgIlxcXFwiKTsN
CiAgICByZXR1cm4gIlwiIiArIHN0cnN1YihyLCAiXCIiLCAiXFxcIiIpICsg
IlwiIjsNCiAgZWxzZWlmICh0eXBlb2YoYXJnc1sxXSkgPT0gRVJSKQ0KICAg
IHJldHVybiB0aGlzOkVyclN0cihhcmdzWzFdKTsNCiAgZWxzZQ0KICAgIHJl
dHVybiB0b3N0cihhcmdzWzFdKTsNCiAgZW5kaWYNCmVuZGlmDQppZiAoIWFy
Z3NbMV0pDQogIHJldHVybiAie30iOw0KZW5kaWYNCnJlc3VsdCA9ICJ7IjsN
CmZvciBpdGVtIGluIChhcmdzWzFdKQ0KICB0aWNrc19sZWZ0KCkgPCA1MDAg
fHwgc2Vjb25kc19sZWZ0KCkgPT0gMSA/IHN1c3BlbmQoMCkgfCAiIjsNCiAg
aWYgKHR5cGVvZihpdGVtKSA9PSBMSVNUKQ0KICAgIHJlc3VsdCA9IHJlc3Vs
dCArIHRoaXM6VG9MaXRlcmFsKGl0ZW0pICsgIiwiOw0KICBlbHNlaWYgKHR5
cGVvZihpdGVtKSA9PSBTVFIpDQogICAgciA9IHN0cnN1YihpdGVtLCAiXFwi
LCAiXFxcXCIpOw0KICAgIHJlc3VsdCA9IHJlc3VsdCArICJcIiIgKyBzdHJz
dWIociwgIlwiIiwgIlxcXCIiKSArICJcIiwiOw0KICBlbHNlaWYgKHR5cGVv
ZihpdGVtKSA9PSBFUlIpDQogICAgcmVzdWx0ID0gcmVzdWx0ICsgdGhpczpF
cnJTdHIoaXRlbSkgKyAiLCI7DQogIGVsc2UNCiAgICByZXN1bHQgPSByZXN1
bHQgKyB0b3N0cihpdGVtKSArICIsIjsNCiAgZW5kaWYNCmVuZGZvcg0KcmVz
dWx0ID0gcmVzdWx0WzEuLmxlbmd0aChyZXN1bHQpIC0gMV0gKyAifSI7DQpy
ZXR1cm4gcmVzdWx0Ow0KLg0KDQoNCg0KO2FkZF92ZXJiKHBsYXllciwge3Bs
YXllciwgInJ4ZCIsICJfX2NyZWF0ZV9vYmpzIn0sIHsidGhpcyIsICJub25l
IiwgInRoaXMifSkNCg0KLnByb2dyYW0gbWU6X19jcmVhdGVfb2Jqcw0KIkNo
cGFyZW50ICMwIC0gIzMgdG8gIy0xLCBhbmQgbW92ZSB0aGVtIGFsbCB0byAj
LTEiOw0KZm9yIGkgaW4gWzAuLjNdDQogIG8gPSB0b29iaihpKTsNCiAgbm90
aWZ5KHBsYXllciwgdG9zdHIoIjtjaHBhcmVudCgiLCBvLCAiLCAjLTEpIikp
Ow0KICBub3RpZnkocGxheWVyLCB0b3N0cigiO21vdmUoIiwgbywgIiwgIy0x
KSIpKTsNCmVuZGZvcg0KIkNyZWF0ZSBhbGwgb2JqZWN0cywgY2hwYXJlbnQg
dGhlIGxvdCB0byAjLTEiOw0KZm9yIGkgaW4gWzQuLnRvbnVtKG1heF9vYmpl
Y3QoKSldDQogIHRpY2tzX2xlZnQoKSA8IDEwMDAgfHwgc2Vjb25kc19sZWZ0
KCkgPT0gMSA/IHN1c3BlbmQoMCkgfCAiIjsNCiAgbyA9IHRvb2JqKGkpOw0K
ICBub3RpZnkocGxheWVyLCAiO2NyZWF0ZSgjMSkiKTsNCiAgbm90aWZ5KHBs
YXllciwgdG9zdHIoIjtjaHBhcmVudCgiLCBvLCAiLCAjLTEpIikpOw0KZW5k
Zm9yDQpzdXNwZW5kKDApOw0KLg0KDQoNCg0KO2FkZF92ZXJiKHBsYXllciwg
e3BsYXllciwgInJ4ZCIsICJfX3NldF9wbGF5ZXJzIn0sIHsidGhpcyIsICJu
b25lIiwgInRoaXMifSkNCg0KLnByb2dyYW0gbWU6X19zZXRfcGxheWVycw0K
InNldCBwcm9ncmFtbWVyIGFuZCB3aXphcmQgYml0cyBpZiByZXF1aXJlZCwg
c2V0IHBsYXllciBmbGFnIGZvciBwbGF5ZXJzIjsNCiJzcGVjaWZpY2FsbHkg
ZXhjbHVkZSAjMyI7DQpmb3IgaSBpbiBbMC4udG9udW0obWF4X29iamVjdCgp
KV0NCiAgdGlja3NfbGVmdCgpIDwgMTAwMCB8fCBzZWNvbmRzX2xlZnQoKSA9
PSAxID8gc3VzcGVuZCgwKSB8ICIiOw0KICBvID0gdG9vYmooaSk7DQogIGlm
ICh2YWxpZChvKSAmJiBvICE9ICMzKQ0KICAgIGlmIChvLnByb2dyYW1tZXIg
fHwgby53aXphcmQgfHwgaXNfcGxheWVyKG8pKQ0KICAgICAgbm90aWZ5KHBs
YXllciwgdG9zdHIoIjtzZXRfcGxheWVyX2ZsYWcoIiwgbywgIiwxKSIpKTsN
CiAgICAgIGlmIChvLnByb2dyYW1tZXIpDQogICAgICAgIG5vdGlmeShwbGF5
ZXIsIHRvc3RyKCI7IiwgbywgIi5wcm9ncmFtbWVyID0gMSIpKTsNCiAgICAg
IGVuZGlmDQogICAgICBpZiAoby53aXphcmQpDQogICAgICAgIG5vdGlmeShw
bGF5ZXIsIHRvc3RyKCI7IiwgbywgIi53aXphcmQgPSAxIikpOw0KICAgICAg
ZW5kaWYNCiAgICAgIGlmICghaXNfcGxheWVyKG8pKQ0KICAgICAgICBub3Rp
ZnkocGxheWVyLCB0b3N0cigiO3NldF9wbGF5ZXJfZmxhZygiLCBvLCAiLDAp
IikpOw0KICAgICAgZW5kaWYNCiAgICBlbmRpZg0KICBlbmRpZg0KZW5kZm9y
DQpzdXNwZW5kKDApOw0KLg0KDQoNCjthZGRfdmVyYihwbGF5ZXIsIHtwbGF5
ZXIsICJyeGQiLCAiX19zZXRfbGluZWFnZSJ9LCB7InRoaXMiLCAibm9uZSIs
ICJ0aGlzIn0pDQoNCi5wcm9ncmFtIG1lOl9fc2V0X2xpbmVhZ2UNCiJzZXQg
cGFyZW50IGF0dHJpYnV0ZXMgb2YgYWxsIG9iamVjdHMiOw0KZm9yIGkgaW4g
WzAuLnRvbnVtKG1heF9vYmplY3QoKSldDQogIHRpY2tzX2xlZnQoKSA8IDEw
MDAgfHwgc2Vjb25kc19sZWZ0KCkgPT0gMSA/IHN1c3BlbmQoMCkgfCAiIjsN
CiAgbyA9IHRvb2JqKGkpOw0KICBpZiAodmFsaWQobykgJiYgdmFsaWQocGFy
ZW50KG8pKSkNCiAgICBub3RpZnkocGxheWVyLCB0b3N0cigiO2NocGFyZW50
KCIsIG8sICIsICIsIHBhcmVudChvKSwgIikiKSk7DQogIGVuZGlmDQplbmRm
b3INCnN1c3BlbmQoMCk7DQouDQoNCg0KDQo7YWRkX3ZlcmIocGxheWVyLCB7
cGxheWVyLCAicnhkIiwgIl9fc2V0X2luYnVpbHQifSwgeyJ0aGlzIiwgIm5v
bmUiLCAidGhpcyJ9KQ0KDQoucHJvZ3JhbSBtZTpfX3NldF9pbmJ1aWx0DQoi
c2V0IGluYnVpbHQgcHJvcGVydGllcyBvZiBhbGwgb2JqZWN0cyI7DQpmb3Ig
aSBpbiBbMC4udG9udW0obWF4X29iamVjdCgpKV0NCiAgdGlja3NfbGVmdCgp
IDwgMTAwMCB8fCBzZWNvbmRzX2xlZnQoKSA9PSAxID8gc3VzcGVuZCgwKSB8
ICIiOw0KICBvID0gdG9vYmooaSk7DQogIGlmICh2YWxpZChvKSkNCiAgICBu
b3RpZnkocGxheWVyLCB0b3N0cigiOyIsIG8sICIubmFtZSA9ICIsIHRoaXM6
dG9saXRlcmFsKG8ubmFtZSkpKTsNCiAgICBub3RpZnkocGxheWVyLCB0b3N0
cigiOyIsIG8sICIub3duZXIgPSAiLCBvLm93bmVyKSk7DQogICAgaWYgKG8u
bG9jYXRpb24gIT0gIy0xKQ0KICAgICAgbm90aWZ5KHBsYXllciwgdG9zdHIo
Ijttb3ZlKCIsIG8sICIsIiwgby5sb2NhdGlvbiwgIikiKSk7DQogICAgZW5k
aWYNCiAgICBpZiAoby5yKQ0KICAgICAgbm90aWZ5KHBsYXllciwgdG9zdHIo
IjsiLCBvLCAiLnIgPSAiLCBvLnIpKTsNCiAgICBlbmRpZg0KICAgIGlmIChv
LncpDQogICAgICBub3RpZnkocGxheWVyLCB0b3N0cigiOyIsIG8sICIudyA9
ICIsIG8udykpOw0KICAgIGVuZGlmDQogICAgaWYgKG8uZikNCiAgICAgIG5v
dGlmeShwbGF5ZXIsIHRvc3RyKCI7IiwgbywgIi5mID0gIiwgby5mKSk7DQog
ICAgZW5kaWYNCiAgZW5kaWYNCmVuZGZvcg0Kc3VzcGVuZCgwKTsNCi4NCg0K
DQoNCjthZGRfdmVyYihwbGF5ZXIsIHtwbGF5ZXIsICJyeGQiLCAiX19jcmVh
dGVfdmVyYnMifSwgeyJ0aGlzIiwgIm5vbmUiLCAidGhpcyJ9KQ0KDQoucHJv
Z3JhbSBtZTpfX2NyZWF0ZV92ZXJicw0KImNyZWF0ZSBhbGwgdmVyYnMgb24g
YWxsIG9iamVjdHMiOw0KZm9yIGkgaW4gWzAuLnRvbnVtKG1heF9vYmplY3Qo
KSldDQogIG8gPSB0b29iaihpKTsNCiAgaWYgKHZhbGlkKG8pKQ0KICAgIHZl
cmJzID0gdmVyYnMobyk7DQogICAgZm9yIHYgaW4gWzAuLmxlbmd0aCh2ZXJi
cyktMV0NCiAgICAgIHRpY2tzX2xlZnQoKSA8IDEwMDAgfHwgc2Vjb25kc19s
ZWZ0KCkgPT0gMSA/IHN1c3BlbmQoMCkgfCAiIjsNCiAgICAgIHZpID0gdGhp
czp0b2xpdGVyYWwodmVyYl9pbmZvKG8sIHRvc3RyKHYpKSk7DQogICAgICB2
YSA9IHRoaXM6dG9saXRlcmFsKHZlcmJfYXJncyhvLCB0b3N0cih2KSkpOw0K
ICAgICAgbm90aWZ5KHBsYXllciwgdG9zdHIoIjthZGRfdmVyYigiLCBvLCAi
LCAiLCB2aSwgIiwgIiwgdmEsICIpIikpOw0KICAgICAgdmMgPSB2ZXJiX2Nv
ZGUobywgdG9zdHIodiksIDAsIDEpOw0KICAgICAgY3YgPSB2ZXJic1t2KzFd
Ow0KICAgICAgaWYgKG9mZnNldCA9IGluZGV4KGN2LCAiICIpKQ0KICAgICAg
ICBjdiA9IGN2WzEuLm9mZnNldC0xXTsNCiAgICAgIGVuZGlmDQogICAgICBj
diA9IHN0cnN1YihjdiwgIioiLCAiIik7DQogICAgICBub3RpZnkocGxheWVy
LCB0b3N0cigiLnByb2dyYW0gIiwgbywgIjoiLCBjdikpOw0KICAgICAgZm9y
IGwgaW4gKHZjKQ0KICAgICAgICB0aWNrc19sZWZ0KCkgPCAxMDAwIHx8IHNl
Y29uZHNfbGVmdCgpID09IDEgPyBzdXNwZW5kKDApIHwgIiI7DQogICAgICAg
IG5vdGlmeShwbGF5ZXIsIGwpOw0KICAgICAgZW5kZm9yDQogICAgICBub3Rp
ZnkocGxheWVyLCAiLiIpOw0KICAgIGVuZGZvcg0KICBlbmRpZg0KZW5kZm9y
DQpzdXNwZW5kKDApOw0KLg0KDQoNCg0KO2FkZF92ZXJiKHBsYXllciwge3Bs
YXllciwgInJ4ZCIsICJfX2NyZWF0ZV9wcm9wcyJ9LCB7InRoaXMiLCAibm9u
ZSIsICJ0aGlzIn0pDQoNCi5wcm9ncmFtIG1lOl9fY3JlYXRlX3Byb3BzDQoi
Q3JlYXRlIGFsbCBwcm9wZXJ0aWVzIG9uIGRlZmluZWQgb24gcGFyZW50IG9i
amVjdHMuIjsNCmZvciBpIGluIFswLi50b251bShtYXhfb2JqZWN0KCkpXQ0K
ICBvID0gdG9vYmooaSk7DQogIGlmICh2YWxpZChvKSkNCiAgICBmb3IgcCBp
biAocHJvcGVydGllcyhvKSkNCiAgICAgIHRpY2tzX2xlZnQoKSA8IDEwMDAg
fHwgc2Vjb25kc19sZWZ0KCkgPT0gMSA/IHN1c3BlbmQoMCkgfCAiIjsNCiAg
ICAgIHBpID0gdGhpczp0b2xpdGVyYWwocHJvcGVydHlfaW5mbyhvLCBwKSk7
DQogICAgICBwdiA9IHRoaXM6dG9saXRlcmFsKG8uKHApKTsNCiAgICAgIG5v
dGlmeShwbGF5ZXIsIHRvc3RyKCI7YWRkX3Byb3BlcnR5KCIsIG8sICIsICIs
IHRoaXM6dG9saXRlcmFsKHApLCANCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIsICIsIHB2LCAiLCAiLCBwaSwgIikiKSk7DQogICAgZW5kZm9yDQog
IGVuZGlmDQplbmRmb3INCnN1c3BlbmQoMCk7DQouDQoNCg0KDQo7YWRkX3Zl
cmIocGxheWVyLCB7cGxheWVyLCAicnhkIiwgIl9fcGFyZW50X3Byb3BzIn0s
IHsidGhpcyIsICJub25lIiwgInRoaXMifSkNCg0KLnByb2dyYW0gbWU6X19w
YXJlbnRfcHJvcHMNCiJVcGRhdGUgYWxsIHByb3BlcnRpZXMgaW5oZXJpdGVk
IGZyb20gcGFyZW50cy4gIGllLCBwcm9wZXJ0eV9pbmZvIGFzIHdlbGwgYXMi
Ow0KInRoZSBwcm9wZXJ0eSBkYXRhIGl0c2VsZi4iOw0KZm9yIGkgaW4gWzAu
LnRvbnVtKG1heF9vYmplY3QoKSldDQogIGN1cm9iaiA9IG8gPSB0b29iaihp
KTsNCiAgaWYgKHZhbGlkKG8pKQ0KICAgIHdoaWxlICh2YWxpZChjdXJvYmog
PSBwYXJlbnQoY3Vyb2JqKSkpDQogICAgICBmb3IgcCBpbiAocHJvcGVydGll
cyhjdXJvYmopKQ0KICAgICAgICB0aWNrc19sZWZ0KCkgPCAxMDAwIHx8IHNl
Y29uZHNfbGVmdCgpID09IDEgPyBzdXNwZW5kKDApIHwgIiI7DQogICAgICAg
IHBuID0gdGhpczp0b2xpdGVyYWwocCk7DQogICAgICAgIHBpID0gdGhpczp0
b2xpdGVyYWwocHJvcGVydHlfaW5mbyhvLCBwKSk7DQogICAgICAgIG5vdGlm
eShwbGF5ZXIsIHRvc3RyKCI7c2V0X3Byb3BlcnR5X2luZm8oIiwgbywgIiwi
LCBwbiwgIiwiLCBwaSwgIikiKSk7DQogICAgICAgIGlmICghaXNfY2xlYXJf
cHJvcGVydHkobywgcCkpDQogICAgICAgICAgcHYgPSB0aGlzOnRvbGl0ZXJh
bChvLihwKSk7DQogICAgICAgICAgbm90aWZ5KHBsYXllciwgdG9zdHIoIjsi
LCBvLCAiLiIsIHAsICIgPSAiLCBwdikpOw0KICAgICAgICBlbmRpZg0KICAg
ICAgZW5kZm9yDQogICAgZW5kd2hpbGUNCiAgZW5kaWYNCmVuZGZvcg0Kc3Vz
cGVuZCgwKTsNCi4NCg0KDQoNCjthZGRfdmVyYihwbGF5ZXIsIHtwbGF5ZXIs
ICJyeGQiLCAiX19yZWN5Y2xlX29ianMifSwgeyJ0aGlzIiwgIm5vbmUiLCAi
dGhpcyJ9KQ0KDQoucHJvZ3JhbSBtZTpfX3JlY3ljbGVfb2Jqcw0KIlJlY3lj
bGUgYW55IG1pc3Npbmcgb2JqZWN0cywgZXhjbHVkaW5nICMzIjsNCmZvciBp
IGluIFswLi50b251bShtYXhfb2JqZWN0KCkpXQ0KICB0aWNrc19sZWZ0KCkg
PCAxMDAwIHx8IHNlY29uZHNfbGVmdCgpID09IDEgPyBzdXNwZW5kKDApIHwg
IiI7DQogIG8gPSB0b29iaihpKTsNCiAgaWYgKCF2YWxpZChvKSAmJiBvICE9
ICMzKQ0KICAgIG5vdGlmeShwbGF5ZXIsIHRvc3RyKCI7cmVjeWNsZSgiLCBv
LCAiKSIpKTsNCiAgZW5kaWYNCmVuZGZvcg0Kc3VzcGVuZCgwKTsNCi4NCg0K
DQoNCjthZGRfdmVyYihwbGF5ZXIsIHtwbGF5ZXIsICJyeGQiLCAiX19maXhf
b2JqXzMifSwgeyJ0aGlzIiwgIm5vbmUiLCAidGhpcyJ9KQ0KDQoucHJvZ3Jh
bSBtZTpfX2ZpeF9vYmpfMw0KaWYgKCEjMy53aXphcmQpDQogIG5vdGlmeShw
bGF5ZXIsICI7XCJZb3Ugc2hvdWxkIGNsZWFyIHRoZSAud2l6YXJkIGZsYWcg
b2YgIzMuXCIiKTsNCmVuZGlmDQppZiAoISMzLnByb2dyYW1tZXIpDQogIG5v
dGlmeShwbGF5ZXIsICI7XCJZb3Ugc2hvdWxkIGNsZWFyIHRoZSAucHJvZ3Jh
bW1lciBmbGFnIG9mICMzLlwiIik7DQplbmRpZg0KaWYgKCFpc19wbGF5ZXIo
IzMpKQ0KICBub3RpZnkocGxheWVyLCAiO1wiWW91IHNob3VsZCB0eXBlIDtz
ZXRfcGxheWVyX2ZsYWcoIzMsIDApIGFzIHdlbGwuXCIiKTsNCmVuZGlmDQou
DQo=

Follow-Ups:

Home | Subject Index | Thread Index