From octave-maintainers-request at bevo dot che dot wisc dot edu Fri Aug 4 15:20:45 2000 Subject: Re: load problems From: Joao Cardoso To: octave-maintainers Date: Fri, 04 Aug 2000 21:26:26 +0100 This is a multi-part message in MIME format. --------------4BAE097CC8F3CF68744B5C0D Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit > On 3-Aug-2000, Joao Cardoso wrote: > > | "John W. Eaton" wrote: > | > > | > On 2-Aug-2000, Ben Sapp wrote: > | > > | > | ... > | > | > Of course, Octave should probably also allow > | > > | > x = load ("some-odd-file-name.dat") > | > > | > so all of this would be unnecessary. Anyone care to implement it and > | > submit a patch? > | > > | > jwe Another try. Please check the docs wording. Joao PS-sorry, the enclosed patch also contains my structures/lists save/load patch - Command: load options file v1 v2 ... or `load("option_1",..., "file", "v1", "v2" ,...)' or [..., num] = load ...' ... If using the third syntax of `load', the specified return variables will be used to hold the loaded values. Variables will be loaded in order until the return list is exausted. NUM hold the number of sucessefully loaded variables. [a, b, c, num] = load("foo.dat", "x1", "y", "x3") gives, if "foo.dat" has variables X1, X2, X3 with values `1,2,3' a = 1 b = [](0x0) c = 3 num = 2 Wildcarding the argument variables overwrites the corresponding output variable, e.g. `[a, b, c, num] = load("foo.dat", "x*")' will return only variable A with the last X* variable found, but NUM will report that 3 variables has been loaded. --------------4BAE097CC8F3CF68744B5C0D Content-Type: application/octet-stream; name="load-save.cc.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="load-save.cc.patch" SW5kZXg6IGxvYWQtc2F2ZS5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL29jdGF2 ZS9zcmMvbG9hZC1zYXZlLmNjLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyNwpkaWZmIC1j IC1iIC1DNiAtdyAtcjEuMTI3IGxvYWQtc2F2ZS5jYwoqKiogbG9hZC1zYXZlLmNjCTIwMDAv MDgvMDIgMDI6MjM6MjgJMS4xMjcKLS0tIGxvYWQtc2F2ZS5jYwkyMDAwLzA4LzA0IDIwOjE1 OjQzCioqKioqKioqKioqKioqKgoqKiogNjg5LDcwMCAqKioqCi0tLSA2ODksNzAyIC0tLS0K ICAJCSAgICBlcnJvciAoImxvYWQ6IGZhaWxlZCB0byBleHRyYWN0IHN0cmluZyBsZW5ndGgg Zm9yIGVsZW1lbnQgJWQiLCBpKzEpOwogIAkJfQogIAogIAkgICAgICBpZiAoISBlcnJvcl9z dGF0ZSkKICAJCXRjID0gb2N0YXZlX3ZhbHVlIChjaG0sIHRydWUpOwogIAkgICAgfQorIAkg IGVsc2UgaWYgKCBlbGVtZW50cyA9PSAwICkKKyAgCSAgICB0YyA9IG9jdGF2ZV92YWx1ZSAo IiIsdHJ1ZSk7CiAgCSAgZWxzZQogIAkgICAgZXJyb3IgKCJsb2FkOiBmYWlsZWQgdG8gZXh0 cmFjdCBudW1iZXIgb2Ygc3RyaW5nIGVsZW1lbnRzIik7CiAgCX0KICAgICAgICBlbHNlIGlm IChzdHJuY21wIChwdHIsICJzdHJpbmciLCA2KSA9PSAwKQogIAl7CiAgCSAgaW50IGxlbjsK KioqKioqKioqKioqKioqCioqKiA3MjcsNzM5ICoqKioKLS0tIDcyOSw3ODcgLS0tLQogIAkg IGlzID4+IHRtcDsKICAJICBpZiAoaXMpCiAgCSAgICB0YyA9IHRtcDsKICAJICBlbHNlCiAg CSAgICBlcnJvciAoImxvYWQ6IGZhaWxlZCB0byBsb2FkIHJhbmdlIGNvbnN0YW50Iik7CiAg CX0KKyAgCWVsc2UgaWYgKHN0cm5jbXAgKHB0ciwgImxpc3QiLCA0KSA9PSAwKQorICAgIAl7 CisgICAgCSAgaW50IG5lID0gMDsKKyAgICAKKyAgICAJICBpZiAoZXh0cmFjdF9rZXl3b3Jk IChpcywgImVsZW1lbnRzIiwgbmUpICYmIG5lLS0gPiAwKQorICAgIAkgICAgeworICAgICAJ ICAgICAgb2N0YXZlX3ZhbHVlX2xpc3QgdG1wOworICAgICAgICAgICAgICAgLy9hdm9pZCB0 aG9zZSB1c2VsZXNzIGNvcGllcyB3aGVuIHJlc2l6aW5nIHRoZSBsaXN0CisgICAgCSAgICAg IC8vYW5vdGhlciB3YXkgdG8gZG8gdGhpcyBpcyB0byByZXZlcnNlIHRoZSBzYXZlIG9yZGVy IG9mIHRoZQorICAgICAgICAgICAgICAgLy9saXN0IGVsZW1lbnRzLi4uIGVhc3kuLi4gYnV0 IGxvb2tzIGJldHRlciBpbiB0aGUgZmlsZSB0aGlzIHdheQorICAgICAgICAgICAgICAgdG1w KG5lKT1vY3RhdmVfdmFsdWUodHJ1ZSk7IAorICAgICAgICAgICAgICAgZm9yKCBpbnQgZWxl bT0wO2VsZW08PW5lO2VsZW0rKyApCisgICAgICAgICAgICAgICAgIGlmKCFyZWFkX2FzY2lp X2RhdGEoaXMsZmlsZW5hbWUsZ2xvYmFsLHRtcChlbGVtKSwgY291bnQpKQorICAgICAgICAg ICAgICAgICAgIHsKKyAgICAJICAgICAgICAgICAgZXJyb3IgKCJsb2FkOiBsaXN0IGVsZW1l bnQgYCVzJyBtaXNzaW5nIiwgdGFnKTsKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgdGM9dG1wOworICAgICAg ICAgICAgIH0KICAgICAgCSAgZWxzZQorICAgIAkgICAgcGFuaWNfaW1wb3NzaWJsZSAoKTsK KyAgICAJfQorICAgICAgICAgZWxzZSBpZiAoc3RybmNtcCAocHRyLCAic3RydWN0IiwgNikg PT0gMCkKKyAgICAJeworICAgIAkgIGludCBuZSA9IDA7CisgICAgCisgICAgCSAgaWYgKGV4 dHJhY3Rfa2V5d29yZCAoaXMsICJlbGVtZW50cyIsIG5lKSAmJiBuZSA+IDApCisgICAgCSAg ICB7CisgICAgICAgICAgICAgICBPY3RhdmVfbWFwIG9tOworICAgICAgICAgICAgICAgY2hh ciogczsKKyAgICAKKyAgICAgICAgICAgICAgIGZvciggaW50IGVsZW09MDtlbGVtPG5lO2Vs ZW0rKyApCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICBvY3RhdmVf dmFsdWUgb3Y7CisgICAgICAgICAgICAgICAgICAgaWYoIShzID0gcmVhZF9hc2NpaV9kYXRh KGlzLGZpbGVuYW1lLGdsb2JhbCxvdiwgY291bnQpKSkKKyAgICAgICAgICAgICAgICAgICAg IHsKKyAgICAJICAgICAgICAgICAgICBlcnJvciAoImxvYWQ6IHN0cnVjdCBlbGVtZW50IGAl cycgbWlzc2luZyIsIHRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgIG9tW3N0cmluZyhzKV0g PSBvdjsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB0YyA9IG9jdGF2 ZV92YWx1ZShvbSk7CisgICAgICAgICAgICAgfQorICAgIAkgIGVsc2UKKyAgICAJICAgIHBh bmljX2ltcG9zc2libGUgKCk7CisgICAgCX0KKyAgICAgICBlbHNlCiAgCWVycm9yICgibG9h ZDogdW5rbm93biBjb25zdGFudCB0eXBlIGAlcyciLCB0YWcpOwogICAgICB9CiAgICBlbHNl CiAgICAgIGVycm9yICgibG9hZDogZmFpbGVkIHRvIGV4dHJhY3Qga2V5d29yZCBzcGVjaWZ5 aW5nIHZhbHVlIHR5cGUiKTsKICAKICAgIGRlbGV0ZSBbXSB0YWc7CioqKioqKioqKioqKioq KgoqKiogMTAwOSwxMDIwICoqKioKLS0tIDEwNTcsMTExMiAtLS0tCiAgCSAgICBjaG0uaW5z ZXJ0ICh0bXAsIGksIDApOwogIAkgICAgZGVsZXRlIFtdIHRtcDsKICAJICB9CiAgCXRjID0g b2N0YXZlX3ZhbHVlIChjaG0sIHRydWUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKKyAg ICAgY2FzZSA4OgorICAgICAgIHsKKyAgCUZPVVJfQllURV9JTlQgbmU7CisgIAlpZiAoISBp cy5yZWFkICgmbmUsIDQpKQorICAJICBnb3RvIGRhdGFfcmVhZF9lcnJvcjsKKyAgCWlmIChz d2FwKQorICAJICBzd2FwXzRfYnl0ZXMgKFhfQ0FTVCAoY2hhciAqLCAmbmUpKTsKKyAgICAg ICBvY3RhdmVfdmFsdWVfbGlzdCB0bXA7CisgICAgICAgLy90aGlzIG9uZSBoYXMgaGFkIGlu ZGVlZCBpdCdzIG9yZGVyIHJldmVyc2VkCisgICAgICAgLy9ubyBuZWVkIHRvIHJlbWFpbiB0 aGUgb3JkZXIgaW4gdGhlIGZpbGUsIG5vIAorICAgICAgIC8vb25lIHdpbGwgbG9vayBhdCB0 aGVtLCBubyBvbmUgc2FuZSBpbiBtaW5kCisgICAgICAgY2hhciAqbGRvYz0iIjsKKyAgICAg ICBmb3IoIGludCBlbGVtPW5lO2VsZW0+PTA7ZWxlbS0tICkKKyAgICAgICAgIGlmKCFyZWFk X2JpbmFyeV9kYXRhKGlzLHN3YXAsZm10LGZpbGVuYW1lLGdsb2JhbCx0bXAoZWxlbSksbGRv YykpCisgICAgICAgICAgIHsKKyAgCSAgICAgIGVycm9yICgibG9hZDogbGlzdCBlbGVtZW50 IGAlcycgbWlzc2luZyIsIG5hbWUpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICB9CisgICAgICAgICB0Yz10bXA7CisgICAgICAgfQorICAgICAgIGJyZWFrOworICAgICBj YXNlIDk6CisgICAgICAgeworICAJRk9VUl9CWVRFX0lOVCBuZTsKKyAgCWlmICghIGlzLnJl YWQgKCZuZSwgNCkpCisgIAkgIGdvdG8gZGF0YV9yZWFkX2Vycm9yOworICAJaWYgKHN3YXAp CisgIAkgIHN3YXBfNF9ieXRlcyAoWF9DQVNUIChjaGFyICosICZuZSkpOworICAgICAgIE9j dGF2ZV9tYXAgb207CisgICAgICAgY2hhciAqczsKKyAgICAgICBjaGFyICpsZG9jPSIiOwor ICAgICAgIGZvciggaW50IGVsZW09MDtlbGVtPG5lO2VsZW0rKyApCisgICAgICAgICB7Cisg CSAgICBvY3RhdmVfdmFsdWUgb3Y7CisgICAgICAgICAgIGlmKCEocyA9IHJlYWRfYmluYXJ5 X2RhdGEoaXMsc3dhcCxmbXQsZmlsZW5hbWUsZ2xvYmFsLG92LGxkb2MpKSkKKyAgICAgICAg ICAgICB7CisgIAkgICAgICAgIGVycm9yICgibG9hZDogc3RydWN0IGVsZW1lbnQgYCVzJyBt aXNzaW5nIiwgbmFtZSk7CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9 CisgICAgICAgICAgIG9tW3N0cmluZyhzKV0gPSBvdjsKKyAgICAgICAgIH0KKyAgICAgICAg IHRjID0gb2N0YXZlX3ZhbHVlKG9tKTsKKyAgICAgICB9CisgICAgICAgYnJlYWs7CiAgCiAg ICAgIGRlZmF1bHQ6CiAgICAgIGRhdGFfcmVhZF9lcnJvcjoKICAgICAgICBlcnJvciAoImxv YWQ6IHRyb3VibGUgcmVhZGluZyBiaW5hcnkgZmlsZSBgJXMnIiwgZmlsZW5hbWUuY19zdHIg KCkpOwogICAgICAgIGRlbGV0ZSBbXSBuYW1lOwogICAgICAgIG5hbWUgPSAwOwoqKioqKioq KioqKioqKioKKioqIDI5NjksMjk5NCAqKioqCiAgCSAgYnJlYWs7CiAgCX0KICAgICAgICBl bHNlIGlmICghIGVycm9yX3N0YXRlICYmIG5hbWUpCiAgCXsKICAJICBpZiAodGMuaXNfZGVm aW5lZCAoKSkKICAJICAgIHsKISAJICAgICAgaWYgKGZvcm1hdCA9PSBMU19NQVRfQVNDSUkg JiYgYXJndl9pZHggPCBhcmdjKQohIAkJd2FybmluZyAoImxvYWQ6IGxvYWRlZCBBU0NJSSBm aWxlIGAlcycgLS0gaWdub3JpbmcgZXh0cmEgYXJncyIsCiEgCQkJIG9yaWdfZm5hbWUuY19z dHIgKCkpOwogIAogIAkgICAgICBpZiAoZm9ybWF0ID09IExTX01BVF9BU0NJSQogIAkJICB8 fCBhcmd2X2lkeCA9PSBhcmdjCiAgCQkgIHx8IG1hdGNoZXNfcGF0dGVybnMgKGFyZ3YsIGFy Z3ZfaWR4LCBhcmdjLCBuYW1lKSkKICAJCXsKLSAJCSAgY291bnQrKzsKICAJCSAgaWYgKGxp c3Rfb25seSkKICAJCSAgICB7CiAgCQkgICAgICBpZiAodmVyYm9zZSkKICAJCQl7CiEgCQkJ ICBpZiAoY291bnQgPT0gMSkKICAJCQkgICAgb3V0cHV0X2J1ZgogIAkJCSAgICAgIDw8ICJ0 eXBlICAgICAgICAgICAgICAgcm93cyAgIGNvbHMgICBuYW1lXG4iCiAgCQkJICAgICAgPDwg Ij09PT0gICAgICAgICAgICAgICA9PT09ICAgPT09PSAgID09PT1cbiI7CiAgCiAgCQkJICBv dXRwdXRfYnVmCiAgCQkJICAgIDw8IHN0ZDo6c2V0aW9zZmxhZ3MgKHN0ZDo6aW9zOjpsZWZ0 KQotLS0gMzA2MSwzMDg3IC0tLS0KICAJICBicmVhazsKICAJfQogICAgICAgIGVsc2UgaWYg KCEgZXJyb3Jfc3RhdGUgJiYgbmFtZSkKICAJewogIAkgIGlmICh0Yy5pc19kZWZpbmVkICgp KQogIAkgICAgewohIAkgICAgICBpZiAoZm9ybWF0ID09IExTX01BVF9BU0NJSSAmJiBhcmd2 X2lkeCA8IGFyZ2MpIHsKISAJCS8vIHdhcm5pbmcgKCJsb2FkOiBsb2FkZWQgQVNDSUkgZmls ZSBgJXMnIC0tIGlnbm9yaW5nIGV4dHJhIGFyZ3MiLCAKISAJCS8vIG9yaWdfZm5hbWUuY19z dHIgKCkpOwohIAkJbmFtZSA9IChjaGFyICopIGFyZ3ZbYXJndl9pZHhdLmNfc3RyKCk7CiEg CSAgICAgIH0KICAKICAJICAgICAgaWYgKGZvcm1hdCA9PSBMU19NQVRfQVNDSUkKICAJCSAg fHwgYXJndl9pZHggPT0gYXJnYwogIAkJICB8fCBtYXRjaGVzX3BhdHRlcm5zIChhcmd2LCBh cmd2X2lkeCwgYXJnYywgbmFtZSkpCiAgCQl7CiAgCQkgIGlmIChsaXN0X29ubHkpCiAgCQkg ICAgewogIAkJICAgICAgaWYgKHZlcmJvc2UpCiAgCQkJewohIAkJCSAgaWYgKGNvdW50ID09 IDApCiAgCQkJICAgIG91dHB1dF9idWYKICAJCQkgICAgICA8PCAidHlwZSAgICAgICAgICAg ICAgIHJvd3MgICBjb2xzICAgbmFtZVxuIgogIAkJCSAgICAgIDw8ICI9PT09ICAgICAgICAg ICAgICAgPT09PSAgID09PT0gICA9PT09XG4iOwogIAogIAkJCSAgb3V0cHV0X2J1ZgogIAkJ CSAgICA8PCBzdGQ6OnNldGlvc2ZsYWdzIChzdGQ6Omlvczo6bGVmdCkKKioqKioqKioqKioq KioqCioqKiAyOTk5LDMwMTIgKioqKgotLS0gMzA5MiwzMTI2IC0tLS0KICAJCQkgICAgPDwg IiAgICI7CiAgCQkJfQogIAkJICAgICAgb3V0cHV0X2J1ZiA8PCBuYW1lIDw8ICJcbiI7CiAg CQkgICAgfQogIAkJICBlbHNlCiAgCQkgICAgeworIAkJICAgICAgaWYgKG5hcmdvdXQgPiAw KQorIAkJCWlmIChjb3VudCA8IG5hcmdvdXQtMSkKKyAJCQkgIHsKKyAJCQkgICAgLy8gRklY TUUgdGhpcyBhc3N1bWVzIHRoYXQgdmFyaWFibGVzIGZvbGxvdyBvcHRpb25zCisgCQkJICAg IGlmIChhcmd2X2lkeCAhPSBhcmdjKQorIAkJCSAgICAgIGZvciAoaW50IGkgPSBhcmd2X2lk eDsgaSA8IGFyZ2M7IGkrKykKKyAJCQkJeworIAkJCQkgIGlmIChtYXRjaGVzX3BhdHRlcm5z IChhcmd2LCBpLCBpKzEsIG5hbWUpKQorIAkJCQkgICAgeworIAkJCQkgICAgICBpZiAoaS1h cmd2X2lkeCA8IG5hcmdvdXQtMSkKKyAJCQkJCXJldHZhbChpLWFyZ3ZfaWR4KSA9IHRjOwor IAkJCQkgICAgICBicmVhazsKKyAJCQkJICAgIH0KKyAJCQkJfQorIAkJCSAgICBlbHNlCisg CQkJICAgICAgcmV0dmFsKGNvdW50KSA9IHRjOworIAkJCSAgfQorIAkJCWVsc2UKKyAJCQkg IGJyZWFrOworIAkJICAgICAgZWxzZQogIAkJCWluc3RhbGxfbG9hZGVkX3ZhcmlhYmxlIChm b3JjZSwgbmFtZSAsIHRjLCBnbG9iYWwsIGRvYyk7CiAgCQkgICAgfQorIAkJICBjb3VudCsr OwogIAkJfQogIAogIAkgICAgICBkZWxldGUgW10gbmFtZTsKICAJICAgICAgZGVsZXRlIFtd IGRvYzsKICAKICAJICAgICAgLy8gT25seSBhdHRlbXB0IHRvIHJlYWQgb25lIGl0ZW0gZnJv bSBhIGhlYWRsZXNzIHRleHQgZmlsZS4KKioqKioqKioqKioqKioqCioqKiAzMDQxLDMwNTIg KioqKgotLS0gMzE1NSwzMTcxIC0tLS0KICAgICAgICBlbHNlCiAgCW9jdGF2ZV9zdGRvdXQg PDwgbXNnOwogIAogICAgICAgIGRlbGV0ZSBbXSBtc2c7CiAgICAgIH0KICAKKyAgIGlmIChu YXJnb3V0ID4gMCAmJiBjb3VudCAmJiAhbGlzdF9vbmx5KQorICAgICB7CisgICAgICAgcmV0 dmFsKG5hcmdvdXQtMSkgPSAoZG91YmxlKSBjb3VudDsKKyAgICAgfQorIAogICAgcmV0dXJu IHJldHZhbDsKICB9CiAgCiAgLy8gSERGNSBsb2FkL3NhdmUgZG9jdW1lbnRhdGlvbiBpcyBp bmNsdWRlZCBpbiB0aGUgT2N0YXZlIG1hbnVhbAogIC8vIHJlZ2FyZGxlc3MsIGJ1dCBpZiBI REY1IGlzIG5vdCBsaW5rZWQgaW4gd2UgYWxzbyBpbmNsdWRlIGEKICAvLyBzZW50ZW5jZSBu b3RpbmcgdGhpcywgc28gdGhlIHVzZXIgdW5kZXJzdGFuZHMgdGhhdCB0aGUgZmVhdHVyZXMK KioqKioqKioqKioqKioqCioqKiAzMDYwLDMwODMgKioqKgotLS0gMzE3OSwzMjI4IC0tLS0K ICBub3QgbGlua2VkIHdpdGggdGhlIEhERjUgbGlicmFyeS4iCiAgI2VuZGlmIC8qICEgSEFW RSBIREY1ICovCiAgCiAgREVGVU5fVEVYVCAobG9hZCwgYXJncywgbmFyZ291dCwKICAgICIt Ki0gdGV4aW5mbyAtKi1cblwKICBAZGVmZm4ge0NvbW1hbmR9IGxvYWQgb3B0aW9ucyBmaWxl IHYxIHYyIEBkb3Rze31cblwKKyBcblwKKyBAY29kZXtsb2FkKFwib3B0aW9uXzFcIiwuLi4s IFwiZmlsZVwiLCBcInYxXCIsIFwidjJcIiAsLi4uKX1cblwKKyBcblwKKyBAY29kZXtbLi4u LCBudW1dID0gbG9hZCAuLi59XG5cCisgXG5cCiAgTG9hZCB0aGUgbmFtZWQgdmFyaWFibGVz IGZyb20gdGhlIGZpbGUgQHZhcntmaWxlfS4gIEFzIHdpdGggQGNvZGV7c2F2ZX0sXG5cCiAg eW91IG1heSBzcGVjaWZ5IGEgbGlzdCBvZiB2YXJpYWJsZXMgYW5kIEBjb2Rle2xvYWR9IHdp bGwgb25seSBleHRyYWN0XG5cCiAgdGhvc2UgdmFyaWFibGVzIHdpdGggbmFtZXMgdGhhdCBt YXRjaC4gIEZvciBleGFtcGxlLCB0byByZXN0b3JlIHRoZVxuXAogIHZhcmlhYmxlcyBzYXZl ZCBpbiB0aGUgZmlsZSBAZmlsZXtkYXRhfSwgdXNlIHRoZSBjb21tYW5kXG5cCiAgXG5cCiAg QGV4YW1wbGVcblwKICBsb2FkIGRhdGFcblwKICBAZW5kIGV4YW1wbGVcblwKICBcblwKICBP Y3RhdmUgd2lsbCByZWZ1c2UgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIHZhcmlhYmxlcyB1bmxl c3MgeW91IHVzZSB0aGVcblwKICBvcHRpb24gQHNhbXB7LWZvcmNlfS5cblwKICBcblwKKyBJ ZiB1c2luZyB0aGUgdGhpcmQgc3ludGF4IG9mIEBjb2Rle2xvYWR9LCB0aGUgc3BlY2lmaWVk IHJldHVybiB2YXJpYWJsZXNcblwKKyB3aWxsIGJlIHVzZWQgdG8gaG9sZCB0aGUgbG9hZGVk IHZhbHVlcy4gVmFyaWFibGVzIHdpbGwgYmUgbG9hZGVkXG5cCisgaW4gb3JkZXIgdW50aWwg dGhlIHJldHVybiBsaXN0IGlzIGV4YXVzdGVkLiBAdmFye251bX0gaG9sZCB0aGUgbnVtYmVy XG5cCisgb2Ygc3VjZXNzZWZ1bGx5IGxvYWRlZCB2YXJpYWJsZXMuXG5cCisgXG5cCisgQGV4 YW1wbGVcblwKKyBbYSwgYiwgYywgbnVtXSA9IGxvYWQoXCJmb28uZGF0XCIsIFwieDFcIiwg XCJ5XCIsIFwieDNcIilcblwKKyBcblwKKyBnaXZlcywgaWYgXCJmb28uZGF0XCIgaGFzIHZh cmlhYmxlcyBAdmFye3gxLCB4MiwgeDN9IHdpdGggdmFsdWVzIEBjb2RlezEsMiwzfVxuXAor IFxuXAorIGEgPSAxXG5cCisgYiA9IFtdKDB4MClcblwKKyBjID0gM1xuXAorIG51bSA9IDJc blwKKyBAZW5kIGV4YW1wbGVcblwKKyBcblwKKyBXaWxkY2FyZGluZyB0aGUgYXJndW1lbnQg dmFyaWFibGVzIG92ZXJ3cml0ZXMgdGhlIGNvcnJlc3BvbmRpbmdcblwKKyBvdXRwdXQgdmFy aWFibGUsIGUuZy4gQGNvZGV7W2EsIGIsIGMsIG51bV0gPSBsb2FkKFwiZm9vLmRhdFwiLCBc IngqXCIpfVxuXAorIHdpbGwgcmV0dXJuIG9ubHkgdmFyaWFibGUgQHZhcnthfSB3aXRoIHRo ZSBsYXN0IEB2YXJ7eCp9IHZhcmlhYmxlIGZvdW5kLFxuXAorIGJ1dCBAdmFye251bX0gd2ls bCByZXBvcnQgdGhhdCAzIHZhcmlhYmxlcyBoYXMgYmVlbiBsb2FkZWQuXG5cCisgXG5cCiAg SWYgYSB2YXJpYWJsZSB0aGF0IGlzIG5vdCBtYXJrZWQgYXMgZ2xvYmFsIGlzIGxvYWRlZCBm cm9tIGEgZmlsZSB3aGVuIGFcblwKICBnbG9iYWwgc3ltYm9sIHdpdGggdGhlIHNhbWUgbmFt ZSBhbHJlYWR5IGV4aXN0cywgaXQgaXMgbG9hZGVkIGluIHRoZVxuXAogIGdsb2JhbCBzeW1i b2wgdGFibGUuICBBbHNvLCBpZiBhIHZhcmlhYmxlIGlzIG1hcmtlZCBhcyBnbG9iYWwgaW4g YSBmaWxlXG5cCiAgYW5kIGEgbG9jYWwgc3ltYm9sIGV4aXN0cywgdGhlIGxvY2FsIHN5bWJv bCBpcyBtb3ZlZCB0byB0aGUgZ2xvYmFsXG5cCiAgc3ltYm9sIHRhYmxlIGFuZCBnaXZlbiB0 aGUgdmFsdWUgZnJvbSB0aGUgZmlsZS4gIFNpbmNlIGl0IHNlZW1zIHRoYXRcblwKICBib3Ro IG9mIHRoZXNlIGNhc2VzIGFyZSBsaWtlbHkgdG8gYmUgdGhlIHJlc3VsdCBvZiBzb21lIHNv cnQgb2YgZXJyb3IsXG5cCioqKioqKioqKioqKioqKgoqKiogMzA4NiwzMDk3ICoqKioKLS0t IDMyMzEsMzI0NiAtLS0tCiAgVGhlIEBjb2Rle2xvYWR9IGNvbW1hbmQgY2FuIHJlYWQgZGF0 YSBzdG9yZWQgaW4gT2N0YXZlJ3MgdGV4dCBhbmRcblwKICBiaW5hcnkgZm9ybWF0cywgYW5k IEBzY3tNYXRsYWJ9J3MgYmluYXJ5IGZvcm1hdC4gIEl0IHdpbGwgYXV0b21hdGljYWxseVxu XAogIGRldGVjdCB0aGUgdHlwZSBvZiBmaWxlIGFuZCBkbyBjb252ZXJzaW9uIGZyb20gZGlm ZmVyZW50IGZsb2F0aW5nIHBvaW50XG5cCiAgZm9ybWF0cyAoY3VycmVudGx5IG9ubHkgSUVF RSBiaWcgYW5kIGxpdHRsZSBlbmRpYW4sIHRob3VnaCBvdGhlciBmb3JtYXRzXG5cCiAgbWF5 IGFkZGVkIGluIHRoZSBmdXR1cmUpLlxuXAogIFxuXAorIElmIGxvYWRpbmcgZnJvbSBhIGdl bmVyaWMgbWF0cml4IG9yaWVudGVkIHRleHQgZmlsZSwgdjEgd2lsbCBzcGVjaWZ5IHRoZVxu XAorIHZhcmlhYmxlIG5hbWUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGxvYWRlZCBkYXRhLCBv dGhlcndpc2UgdGhlIGJhc2VuYW1lIG9mXG5cCisgdGhlIGZpbGUgd2lsbCBiZSB1c2VkLlxu XAorIFxuXAogIFZhbGlkIG9wdGlvbnMgZm9yIEBjb2Rle2xvYWR9IGFyZSBsaXN0ZWQgaW4g dGhlIGZvbGxvd2luZyB0YWJsZS5cblwKICBcblwKICBAdGFibGUgQGNvZGVcblwKICBAaXRl bSAtZm9yY2VcblwKICBGb3JjZSB2YXJpYWJsZXMgY3VycmVudGx5IGluIG1lbW9yeSB0byBi ZSBvdmVyd3JpdHRlbiBieSB2YXJpYWJsZXMgd2l0aFxuXAogIHRoZSBzYW1lIG5hbWUgZm91 bmQgaW4gdGhlIGZpbGUuXG5cCioqKioqKioqKioqKioqKgoqKiogMzUwMiwzNTEzICoqKioK LS0tIDM2NTEsMzY5MSAtLS0tCiAgCSAgaWYgKG0uYWxsX2ludGVnZXJzIChtYXhfdmFsLCBt aW5fdmFsKSkKICAJICAgIHN0ID0gZ2V0X3NhdmVfdHlwZSAobWF4X3ZhbCwgbWluX3ZhbCk7 CiAgCX0KICAgICAgICBjb25zdCBDb21wbGV4ICptdG1wID0gbS5kYXRhICgpOwogICAgICAg IHdyaXRlX2RvdWJsZXMgKG9zLCBYX0NBU1QgKGNvbnN0IGRvdWJsZSAqLCBtdG1wKSwgc3Qs IDIqbGVuKTsKICAgICAgfQorICAgZWxzZSBpZiAodGMuaXNfbGlzdCAoKSkKKyAgICAgewor ICAgICAgIHRtcCA9IDg7CisgICAgICAgb3Mud3JpdGUgKCZ0bXAsIDEpOworICAgICAgIG9j dGF2ZV92YWx1ZV9saXN0IG92bCAgICAgPSB0Yy5saXN0X3ZhbHVlKCk7CisgICAgICAgRk9V Ul9CWVRFX0lOVCBlbGVtZW50cyAgICA9IG92bC5sZW5ndGgoKSAtMTsKKyAgICAgICBvcy53 cml0ZSAoJmVsZW1lbnRzLCA0KTsKKyAgICAgICBmb3IoIGludCBlbGVtPWVsZW1lbnRzO2Vs ZW0+PTA7ZWxlbS0tICkKKyAgICAgICAgIHsKKyAgICAgICAgICAgb2N0YXZlX3ZhbHVlIG92 ID0gb3ZsKGVsZW0pOworICAgICAgICAgICBzYXZlX2JpbmFyeV9kYXRhICggb3MsIG92LCBz dHJpbmcoIl8iKSwgc3RyaW5nKCIiKSwKKyAgICAgICAgICAgbWFya19hc19nbG9iYWwsIHNh dmVfYXNfZmxvYXRzKTsKKyAgICAgICAgIH0KKyAgICAgfQorICAgZWxzZSBpZiAodGMuaXNf bWFwICgpKQorICAgICB7CisgICAgICAgdG1wID0gOTsKKyAgICAgICBvcy53cml0ZSAoJnRt cCwgMSk7CisgICAgICAgT2N0YXZlX21hcCBvbSAgICAgPSB0Yy5tYXBfdmFsdWUoKTsKKyAg ICAgICBGT1VSX0JZVEVfSU5UIGVsZW1lbnRzICAgID0gb20ubGVuZ3RoKCk7CisgICAgICAg b3Mud3JpdGUgKCZlbGVtZW50cywgNCk7CisgICAgICAgZm9yKCBQaXggZWxlbT1vbS5maXJz dCgpO2VsZW0hPTA7b20ubmV4dChlbGVtKSApCisgICAgICAgICB7CisgICAgICAgICAgIG9j dGF2ZV92YWx1ZSBvdiA9IG9tLmNvbnRlbnRzKGVsZW0pOworICAgICAgICAgICBzdHJpbmcg cyA9IG9tLmtleShlbGVtKTsKKyAgICAgICAgICAgc2F2ZV9iaW5hcnlfZGF0YSAoIG9zLCBv diwgcywgc3RyaW5nKCIiKSwKKyAgICAgICAgICAgbWFya19hc19nbG9iYWwsIHNhdmVfYXNf ZmxvYXRzKTsKKyAgICAgICAgIH0KKyAgICAgfQogICAgZWxzZQogICAgICBncmlwZV93cm9u Z190eXBlX2FyZyAoInNhdmUiLCB0YywgZmFsc2UpOwogIAogICAgcmV0dXJuIG9zOwogIH0K ICAKKioqKioqKioqKioqKioqCioqKiA0NDY2LDQ0NzcgKioqKgotLS0gNDY0NCw0Njg1IC0t LS0KICAgICAgICBhc2NpaV9zYXZlX3R5cGUgKG9zLCAicmFuZ2UiLCBtYXJrX2FzX2dsb2Jh bCk7CiAgICAgICAgUmFuZ2UgdG1wID0gdGMucmFuZ2VfdmFsdWUgKCk7CiAgICAgICAgb3Mg PDwgIiMgYmFzZSwgbGltaXQsIGluY3JlbWVudFxuIgogIAkgPDwgdG1wLmJhc2UgKCkgPDwg IiAiCiAgCSA8PCB0bXAubGltaXQgKCkgPDwgIiAiCiAgCSA8PCB0bXAuaW5jICgpIDw8ICJc biI7CisgICAgIH0KKyAgIGVsc2UgaWYgKHRjLmlzX2xpc3QgKCkpCisgICAgIHsKKyAgICAg ICBvY3RhdmVfdmFsdWVfbGlzdCBvdmwgCT0gdGMubGlzdF92YWx1ZSgpOworICAgICAgIGlu dCBlbGVtZW50cyAJCT0gb3ZsLmxlbmd0aCgpOworICAgICAgIGFzY2lpX3NhdmVfdHlwZSAo b3MsICJsaXN0IiwgbWFya19hc19nbG9iYWwpOworICAgICAgIG9zIDw8ICIjIGVsZW1lbnRz OiAiIDw8IGVsZW1lbnRzIDw8ICJcbiI7CisgICAgICAgZm9yKCBpbnQgZWxlbT0wO2VsZW08 ZWxlbWVudHM7ZWxlbSsrICkKKyAgICAgICAgIHsKKyAgICAgICAgICAgb2N0YXZlX3ZhbHVl IG92ID0gb3ZsKGVsZW0pOworICAgICAgICAgICBjaGFyIHNbMTBdOworICAgICAgICAgICAv L3ZhbGlkX2lkZW50aWZpZXIgZG9lc250IGxldCBtZSB1c2UgdGhpcyBvbmUsIGNhbiBpIGNo YW5nZSBpdD8KKyAgICAgICAgICAgLy9zcHJpbnRmKHMsIiVzWyVkXSIsIG5hbWUuY19zdHIo KSwgZWxlbSsxKTsKKyAgICAgICAgICAgc3ByaW50ZihzLCIlc18lZCIsIG5hbWUuY19zdHIo KSwgZWxlbSsxKTsKKyAgICAgICAgICAgc2F2ZV9hc2NpaV9kYXRhICggb3MsIG92LCBzdHJp bmcocyksIHN0cmlwX25hbl9hbmRfaW5mLAorICAgICAgICAgICBtYXJrX2FzX2dsb2JhbCwg cHJlY2lzaW9uKTsKKyAgICAgICAgIH0KKyAgICAgfQorICAgZWxzZSBpZiAodGMuaXNfbWFw ICgpKSAvL3N0cnVjdCB0eXBlCisgICAgIHsKKyAgICAgICBPY3RhdmVfbWFwIG9tIAk9IHRj Lm1hcF92YWx1ZSgpOworICAgICAgIGFzY2lpX3NhdmVfdHlwZSAob3MsICJzdHJ1Y3QiLCBt YXJrX2FzX2dsb2JhbCk7CisgICAgICAgb3MgPDwgIiMgZWxlbWVudHM6ICIgPDwgb20ubGVu Z3RoKCkgPDwgIlxuIjsKKyAgICAgICBmb3IoIFBpeCBlbGVtPW9tLmZpcnN0KCk7ZWxlbSE9 MDtvbS5uZXh0KGVsZW0pICkKKyAgICAgICAgIHsKKyAgICAgICAgICAgb2N0YXZlX3ZhbHVl IG92ID0gb20uY29udGVudHMoZWxlbSk7CisgICAgICAgICAgIHN0cmluZyBzID0gb20ua2V5 KGVsZW0pOworICAgICAgICAgICBzYXZlX2FzY2lpX2RhdGEgKCBvcywgb3YsIHMsIHN0cmlw X25hbl9hbmRfaW5mLAorICAgICAgICAgICBtYXJrX2FzX2dsb2JhbCwgcHJlY2lzaW9uKTsK KyAgICAgICAgIH0KICAgICAgfQogICAgZWxzZSBpZiAodGMuaXNfcmVhbF9zY2FsYXIgKCkp CiAgICAgIHsKICAgICAgICBhc2NpaV9zYXZlX3R5cGUgKG9zLCAic2NhbGFyIiwgbWFya19h c19nbG9iYWwpOwogIAogICAgICAgIGRvdWJsZSBkID0gdGMuZG91YmxlX3ZhbHVlICgpOwo= --------------4BAE097CC8F3CF68744B5C0D--