From octave-sources-request at bevo dot che dot wisc dot edu Wed May 14 15:30:45 2003 Subject: flimit - limit of a function From: "withaar" To: octave-sources at bevo dot che dot wisc dot edu Date: Wed, 14 May 2003 21:29:39 +0100 This is a multi-part message in MIME format. --_----------=_1052944179288850 Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="ISO-8859-1" I would like to submit this code to octave forge or octave proper, but am not quite sure where it should go. The attached file offers a function that estimates the limit of a function. Here are some examples: # goes to 1 fnstr = sprintf("function y=fn(x) y=sin(x)./x; endfunction"); eval(fnstr); a = flimit("fn",0) #takes right limit # goes to -inf*i fnstr = sprintf("function y=fn(x) y=exp(x)./sqrt(x); endfunction"); eval(fnstr); a = flimit("fn",0,"left") # goes to 1 fnstr = sprintf("function y=fn(x) y=x./(sqrt(x.^2+1)); endfunction"); eval(fnstr); a = flimit("fn",Inf) # find the roots for infinite gain fnstr = sprintf("\ function R=fn(K) \ for i=1:length(K(1,:)) \ R(:,i)=roots([1 -1+K(i) 4+2*K(i)]); \ endfor \ endfunction"); eval(fnstr); a = flimit("fn",Inf) cheers, Willem Atsma --_----------=_1052944179288850 Content-Disposition: attachment; filename="flimit.m" Content-Transfer-Encoding: base64 Content-Type: application/unknown; name="flimit.m" IyMgQ29weXJpZ2h0IChDKSAyMDAzIFdpbGxlbSBKLiBBdHNtYQojIyAKIyMg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyMgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyMgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyMgCiMjIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAojIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CiMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCiMjIAojIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIyBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQojIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1 aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQoKIyMgLSotIHRl eGluZm8gLSotCiMjIEBkZWZ0eXBlZm4ge0Z1bmN0aW9uIEZpbGV9IHtAdmFy e3l9ID19IGZsaW1pdCAoQHZhcntmbmFtZX0sIEB2YXJ7eDB9LCBAdmFye3hs aW19LC4uLikKIyMgUmV0dXJucyB0aGUgbnVtZXJpY2FsIGFwcHJveGltYXRp b24gZm9yIHRoZSBsaW1pdCBvZiBAY29kZXtmbmFtZSh4KX0gZm9yCiMjIHgg LT4gQHZhcnt4bGltfSwgYXBwcm9hY2hpbmcgZnJvbSB4PUB2YXJ7eDB9Lgoj IwojIyBUaGUgZnVuY3Rpb24gQHZhcntmbmFtZX0gbXVzdCBiZSBhIGZ1bmN0 aW9uIG9mIGEgc2NhbGFyIGJ1dCBtYXkgaGF2ZSBhIAojIyBjb2x1bW4gdmVj dG9yIGFzIHJlc3VsdC4gU28gZm9yIGZ1bmN0aW9uIEBjb2Rle3k9Zm5hbWUo eCl9IHggbXVzdCBiZSBhIAojIyBzY2FsYXIgYW5kIHkgbXVzdCBiZSBhIHNj YWxhciBvciBhIGNvbHVtbiB2ZWN0b3IuIFRoZSBmdW5jdGlvbgojIyBtYXkg YmUgY2FsbGVkIHRvIHJldHVybiBtdWx0aXBsZSB2YWx1ZXMsIGluIHdoaWNo IGNhc2UgeCBpcyBhIHJvdyB2ZWN0b3IKIyMgd2l0aCB0aGUgcG9pbnRzIHRv IGV2YWx1YXRlIGFuZCB5IGlzIGEgbWF0cml4IHdpdGggdGhlIGNvcnJlc3Bv bmRpbmcgcmVzdWx0cwojIyBpbiBpdHMgY29sdW1ucy4KIyMKIyMgRXh0cmEg b3B0aW9ucyBjYW4gYmUgc2V0IHRvIGNvbnRyb2wgb3BlcmF0aW9uOgojIwoj IyBAdGFibGUgQHNhbXAKIyMgQGl0ZW0gc2lkZQojIyBTaWRlIG9mIHRoZSBs aW1pdCwgc2V0IHRvIGVpdGhlciAibGVmdCIgb3IgInJpZ2h0Ii4gSWYgbm90 IHNwZWNpZmllZCB0aGUKIyMgZGVmYXVsdCBpcyAicmlnaHQiLCBleGNlcHQg Zm9yIFhsaW09SW5mLiBUaGlzIG9wdGlvbiBtYXkgYWxzbyBiZSBzcGVjaWZp ZWQKIyMgd2l0aG91dCB0aGUga2V5LW5hbWUgYXMgdGhlIDNyZCBvcHRpb24g KHNlZSBleGFtcGxlcykuCiMjIEBpdGVtIHRvbGVyYW5jZQojIyBEZXRlcm1p bmVzIHdoZW4gdG8gc3RvcCB3aXRoIGFwcHJveGltYXRpb247IGRpZmZlcmVu Y2VzIGxlc3MgdGhhbiAKIyMgQHNhbXB7dG9sZXJhbmNlfSBhcmUgY29uc2lk ZXJlZCBuZWdsaWdhYmxlLiBEZWZhdWx0OiAxZS02LgojIyBAaXRlbSBlcHNp bG9uCiMjIERldGVybWluaWVzIGF0IHdoYXQgZGlzdGFuY2UgZnJvbSB0aGUg bGltaXQgdG8gc3RhcnQgdGhlIGFwcHJveGltYXRpb24uCiMjIERlZmF1bHQ6 IDFlLTguCiMjIEBpdGVtIHJlcG9ydAojIyBJZiBzZXQgdG8gQGNvZGV7dHJ1 ZX0gc29tZSBwcm9ncmVzcyBzdGF0cyB3aWxsIGJlIHByaW50ZWQuIAojIyBE ZWZhdWx0OiBAY29kZXtmYWxzZX0uCiMjIEBlbmQgdGFibGUKIyMKIyMgU29t ZSBleGFtcGxlczoKIyMgQGV4YW1wbGUKIyMgZm5zdHIgPSBzcHJpbnRmKCJm dW5jdGlvbiB5PWZuKHgpIHk9eC4vKHNxcnQoeC5eMisxKSk7IGVuZGZ1bmN0 aW9uIik7CiMjIGV2YWwoZm5zdHIpOwojIyB5ID0gZmxpbWl0KCJmbiIsSW5m KTsKIyMKIyMgZm5zdHIgPSBzcHJpbnRmKCJmdW5jdGlvbiB5PWZuKHgpIHk9 ZXhwKHgpLi9zcXJ0KHgpOyBlbmRmdW5jdGlvbiIpOwojIyBldmFsKGZuc3Ry KTsKIyMgeSA9IGZsaW1pdCgiZm4iLDAsImxlZnQiLCJ0b2xlcmFuY2UiLDFl LTksInJlcG9ydCIsdHJ1ZSk7CiMjCiMjIGZuc3RyID0gc3ByaW50ZigiZnVu Y3Rpb24gUj1mbihLKSBcCiMjIGZvciBpPTE6bGVuZ3RoKEsoMSw6KSkgXAoj IyAgUig6LGkpPXJvb3RzKFsxIC0xK0soaSkgNCsyKksoaSldKTsgXAojIyBl bmRmb3IgZW5kZnVuY3Rpb24iKTsKIyMgZXZhbChmbnN0cik7CiMjIHkgPSBm bGltaXQoImZuIixJbmYpOwojIyBAZW5kIGV4YW1wbGUKIyMKIyMgQGVuZCBk ZWZ0eXBlZm4KCiMjIEF1dGhvcjogV2lsbGVtIEouIEF0c21hIDx3YXRzbWEo YXQpdXNlcnMuc2YubmV0PgojIyAKIyMgMjAwMy0wNS0wOCBXaWxsZW0gSi4g QXRzbWEgPHdhdHNtYShhdCl1c2Vycy5zZi5uZXQ+CiMjICogSW5pdGlhbCBy ZXZpc2lvbgoKZnVuY3Rpb24gW1lsaW0sWCxZXSA9IGZsaW1pdCAoZm5hbWUs WGxpbSx2YXJhcmdpbikKCglpZiAhaXNfc2NhbGFyKFhsaW0pCgkJZXJyb3Io IlBhcmFtZXRlciBYbGltIG11c3QgYmUgc2NhbGFyLiIpOwoJZW5kaWYKCQoJ UE8gPSAzOyAJIyBmaXR0aW5nIHBvbHlub21pYWwgb3JkZXIKCU5QID0gUE8r MTsJIyBudW1iZXIgb2YgcG9pbnRzIHRvIGRldGVybWluZSBwb2x5bm9taWFs CgkKCSMjIHNldCBkZWZhdWx0czoKCXNpZGUgPSAicmlnaHQiOwoJZXBzaWxv biA9IDFlLTY7Cgl0b2xlcmFuY2UgPSAxZS02OwoJcmVwb3J0ID0gZmFsc2U7 CgoJIyMgZGVjb2RlIGV4dHJhIG9wdGlvbnMKCW5leHRyYXJnaW4gPSBsZW5n dGgodmFyYXJnaW4pOwoJCglpZiBuZXh0cmFyZ2luPjAgJiYgKHN0cmNtcCh2 YXJhcmdpbnsxfSwibGVmdCIpIHx8IHN0cmNtcCh2YXJhcmdpbnsxfSwicmln aHQiKSkKCQlzaWRlID0gdmFyYXJnaW57MX07CgkJdmFyYXJnaW4gPSB2YXJh cmdpbigyOm5leHRyYXJnaW4pOwoJCW5leHRyYXJnaW4tLTsKCWVuZGlmCglp ZiBtb2QobmV4dHJhcmdpbiwyKQoJCWVycm9yKCJFeHRyYSBvcHRpb25zIHNo b3VsZCBiZSBwYXNzZWQgYXMgc3RyaW5nLXZhbHVlIHBhaXJzLiIpOwoJZW5k aWYKCWZvciBpPTE6MjpuZXh0cmFyZ2luCgkJaWYgIWlzc3RyKHZhcmFyZ2lu e2l9KQoJCQllcnJvcigiRXh0cmEgb3B0aW9uIG5hbWVzIHNob3VsZCBiZSBw YXNzZWQgYXMgc3RyaW5ncy4iKTsKCQllbmRpZgoJCXN3aXRjaCB0b2xvd2Vy KHZhcmFyZ2lue2l9KQoJCQljYXNlICJzaWRlIgoJCQkJc2lkZSA9IHZhcmFy Z2lue2krMX07CgkJCWNhc2UgImVwc2lsb24iCgkJCQllcHNpbG9uID0gdmFy YXJnaW57aSsxfTsKCQkJY2FzZSAidG9sZXJhbmNlIgoJCQkJdG9sZXJhbmNl ID0gdmFyYXJnaW57aSsxfTsKCQkJY2FzZSAicmVwb3J0IgoJCQkJcmVwb3J0 ID0gdmFyYXJnaW57aSsxfTsKCQkJb3RoZXJ3aXNlCgkJCQl3YXJuaW5nKHNw cmludGYoIklnbm9yaW5nIHVua25vd24gb3B0aW9uIFwiJXNcIi4iLHZhcmFy Z2lue2l9KSk7CgkJZW5kc3dpdGNoCgllbmRmb3IKCQoJZmFjdG9yID0gMjsK CWZhY3Rvcl9tYXggPSAxZTEwOwoKCWlmIGlzaW5mKFhsaW0pCgkJWCA9IDEu LyhlcHNpbG9uKnNpZ24oWGxpbSkpOwoJCXN0ZXBzaXplID0gWCpmYWN0b3I7 CgllbHNlCgkJaWYgc3RyY21wKHNpZGUsImxlZnQiKQoJCQlYID0gWGxpbSAt IGVwc2lsb247CQkjIHN0YXJ0IGF0IGVwc2lsb24gZGlzdGFuY2UKCQllbHNl CgkJCVggPSBYbGltICsgZXBzaWxvbjsKCQllbmRpZgoJCXN0ZXBzaXplID0g KFhsaW0tWCkqKGZhY3Rvci0xKS9mYWN0b3I7CgllbmRpZgoJCgkjIyBzZWUg aWYgZnVuY3Rpb24gaXMgd2VsbCBiZWhhdmVkOgoJdG1wID0gZmV2YWwoZm5h bWUsWCk7CglpZiBsZW5ndGgodG1wKDEsOikpIT0xCgkJZXJyb3Ioc3ByaW50 ZigiVGhlIGZ1bmN0aW9uICVzIG11c3QgcmV0dXJuIGEgY29sdW1uIHZlY3Rv ciBcCgkJCWZvciBhIHNpbmdsZSBjb2x1bW4gdmVjdG9yIGFyZ3VtZW50LiIs Zm5hbWUpKTsKCWVuZGlmCglNID0gbGVuZ3RoKHRtcCk7Cgl0bXAgPSBmZXZh bChmbmFtZSxbWCxYXSk7CglpZiBsZW5ndGgodG1wKDEsOikpIT0yCgkJZXJy b3Ioc3ByaW50ZigiVGhlIGZ1bmN0aW9uICVzIG11c3QgcmV0dXJuIE4gY29s dW1ucyBmb3IgTiBjb2x1bW5zIFwKCQkJaW4gdGhlIGFyZ3VtZW50LiIsZm5h bWUpKTsKCWVuZGlmCgoJdG1wID0gZmV2YWwoZm5hbWUsWCk7CgkjIyByZWFs IGFuZCBpbWFnaW5hcnkgcGFydHMgYXJlIGRlYWx0IHdpdGggYXMgc2VwZXJh dGUgcmVzdWx0czoKCVkgPSBbcmVhbCh0bXApO2ltYWcodG1wKV07CglZYSA9 IDEuL1k7CgoJaXRlciA9IDI7Cglub3RfY29udmVyZ2VkID0gdHJ1ZTsKCUVf ZXN0ID0gLW9uZXMoc2l6ZShZKSk7CglFYV9lc3QgPSAtb25lcyhzaXplKFkp KTsKCUNfZXN0ID0gLW9uZXMoc2l6ZShZKSk7CgkKCXdoaWxlIGFueShub3Rf Y29udmVyZ2VkKQoJCQoJCVgoMSxpdGVyKSA9IFgoaXRlci0xKStzdGVwc2l6 ZTsKCQl0bXAgPSBmZXZhbChmbmFtZSxYKGl0ZXIpKTsKCQlZKDosaXRlcikg PSBbcmVhbCh0bXApO2ltYWcodG1wKV07CgkJWWEoOixpdGVyKSA9IDEuL1ko OixpdGVyKTsKCQkKCQkjIyBCb3RoIFkgYW5kIDEvWSBhcmUgY2hlY2tlZCBm b3IgY29udmVyZ2VuY2UsIHNvIGlmIFktPkluZiwgCgkJIyMgWWE9MS9ZLT4w LiBDb252ZXJnZW5jZSBpcyB0ZXN0ZWQgZm9yIHdpdGggdHdvIGNyaXRlcmlh LiBUaGUgCgkJIyMgZmlyc3QgaXMgb24gdHdvIGNvbnNlY3V0aXZlIHZhbHVl cyBvZiBZOgoJCSMjICAgfFkoaixpKS1ZKGosaS0xKXwgPCB0b2xlcmFuY2UK CQkjIyBvcjoKCQkjIyAgIHxZYShqLGkpLVlhKGosaS0xKXwgPCB0b2xlcmFu Y2UKCQkjIyBUaGUgc2Vjb25kIGNyaXRlcml1bSBpcyBvbiB0aGUgcHJlZGlj dGFiaWxpdHkgb2YgdGhlIHNlcXVlbmNlCgkJIyMgb2YgWS9ZYSB2YWx1ZXMu IEEgcG9seW5vbWlhbCBvZiBvcmRlciBQTyBpcyBmaXR0ZWQgdG8gTlAgcG9p bnRzCgkJIyMgYW5kIHdoZW4gdGhlIHByZWRpY3Rpb24gZXJyb3Igb2YgdGhl IGxhc3QgWS9ZYSB2YWx1ZSBkcm9wcwoJCSMjIGJlbG93IHRvbGVyYW5jZSB0 aGUgY3JpdGVyaXVtIGlzIG1ldC4gVGhlIHNhbWUgcG9seW5vbWlhbAoJCSMj IGlzIHRoZW4gdXNlZCB0byBnZW5lcmF0ZSB0aGUgZmluYWwgZXN0aW1hdGUu CgkJIyMgVXNpbmcgdGhlIHBvbHlub21pYWwgZml0IGFjY29tcGxpc2hlcyB0 aGF0IGVycmF0aWMgc2VyaWVzCgkJIyMgc3VjaCBhcyB5PXNpbigxL3gpLCB4 LT5JbmYgd2lsbCBub3QgY29udmVyZ2UuIEl0IGFsc28gZ2l2ZXMKCQkjIyBh biBpbmRpY2F0b3Igb2YgImNvbnZlcmdlbmNlIHJhdGUiIHdoaWNoIGNhdXNl cyB0aGUgImZhY3RvciIKCQkjIyBwYXJhbWV0ZXIgZ292ZXJuaW5nIHN0ZXBz aXplIHRvIGluY3JlYXNlIGZvciBsaW1pdHMgc3VjaCBhcwoJCSMjIHk9ZXhw KHgpL3gsIHgtPjAuIEZpbmFsbHksIGZvciB3ZWxsLWJlaGF2ZWQgbGltaXRz IHRoZSBlc3RpbWF0ZQoJCSMjIG9mIHRoZSBsaW1pdCB2YWx1ZSBpcyBpbXBy b3ZlZCB0aHJvdWdoIGV4dHJhcG9sYXRpb24uCgoJCWZvciBpPTE6MipNCgkJ CW5vdF9jb252ZXJnZWQoaSkgPSB0cnVlOwoJCQlpbmNyZWFzZV9mYWN0b3Ig PSBmYWxzZTsKCQkJaWYgaXNuYW4oWShpLGl0ZXIpKSB8fCBpc25hbihZYShp LGl0ZXIpKQoJCQkJZXJyb3IoIlk9TmFOIC0gZ3Vlc3NpbmcgdGhlIGxpbWl0 IGRvZXMgbm90IGV4aXN0LiIpOwoJCQllbmRpZgoJCQlpZiBpc2luZihZKGks aXRlcikpIHx8IGlzaW5mKFlhKGksaXRlcikpCgkJCQkjIyBpZiB0aGlzIGlz IGluZmluaXR5LCB3aHkgZ28gYmVvbmQKCQkJCVlsaW1fZXN0KGksMSkgPSBZ KGksaXRlcik7CgkJCQlub3RfY29udmVyZ2VkKGkpID0gZmFsc2U7CgkJCWVs c2VpZiBZKGksaXRlcik9PVkoaSxpdGVyLTEpCgkJCQkjIyBUaGlzIGNhbiBo YXBwZW4gdG9vOgoJCQkJWWxpbV9lc3QoaSwxKSA9IFkoaSxpdGVyKTsKCQkJ CW5vdF9jb252ZXJnZWQoaSkgPSBmYWxzZTsKCQkJZWxzZQoJCQkJaWYgaXRl cj5OUAoJCQkJCXh4ID0gWCgoaXRlci1OUCk6aXRlcik7CgkJCQkJaWYgaXNp bmYoWGxpbSkKCQkJCQkJIyMgbGltaXQgdG8gaW5mIGlzIGludGVycG9sYXRl ZCBmb3IgMS94IHRvIDAKCQkJCQkJeHggPSBbMS4veHgsMF07CgkJCQkJZWxz ZQoJCQkJCQl4eCA9IFt4eCxYbGltXTsKCQkJCQllbmRpZgoKCQkJCQl5eSA9 IFkoaSwoaXRlci1OUCk6aXRlcik7CgkJCQkJeXlhID0gMS4veXk7CgoJCQkJ CVAgPSBwb2x5Zml0KCgxOk5QKSx5eSgxOk5QKSxQTyk7CgkJCQkJWV9lc3Qo aSxpdGVyKSA9IHBvbHl2YWwoUCwoTlArMSkpOwoJCQkJCUVfZXN0X29sZChp KSA9IEVfZXN0KGkpOwoJCQkJCUVfZXN0KGkpID0gYWJzKFlfZXN0KGksaXRl cikteXkoTlArMSkpOwoJCQkJCUNfZXN0X29sZChpKSA9IENfZXN0KGkpOwoJ CQkJCUNfZXN0KGkpID0gYWJzKFlfZXN0KGksaXRlcikveXkoTlArMSkpOwoK CQkJCQlQYSA9IHBvbHlmaXQoKDE6TlApLHl5YSgxOk5QKSxQTyk7CgkJCQkJ WWFfZXN0KGksaXRlcikgPSBwb2x5dmFsKFBhLChOUCsxKSk7CgkJCQkJRWFf ZXN0X29sZChpKSA9IEVhX2VzdChpKTsKCQkJCQlFYV9lc3QoaSkgPSBhYnMo WWFfZXN0KGksaXRlcikteXlhKE5QKzEpKTsKCgkJCQkJaWYgKEVfZXN0KGkp PHRvbGVyYW5jZSkgJiYgKGFicyhZX2VzdChpLGl0ZXIpLVlfZXN0KGksaXRl ci0xKSk8dG9sZXJhbmNlKQoJCQkJCQlub3RfY29udmVyZ2VkKGkpID0gZmFs c2U7CgkJCQkJCVlsaW1fZXN0KGksMSkgPSBZX2VzdChpLGl0ZXIpOwoJCQkJ CQlpZiBhYnMoWWxpbV9lc3QoaSwxKSk8dG9sZXJhbmNlCgkJCQkJCQlZbGlt X2VzdChpLDEpPTA7CgkJCQkJCWVuZGlmCgkJCQkJZWxzZWlmIChFYV9lc3Qo aSk8dG9sZXJhbmNlKSAmJiAoYWJzKFlhX2VzdChpLGl0ZXIpLVlhX2VzdChp LGl0ZXItMSkpPHRvbGVyYW5jZSkKCQkJCQkJbm90X2NvbnZlcmdlZChpKSA9 IGZhbHNlOwoJCQkJCQlpZiBhYnMoWWFfZXN0KGksaXRlcikpPHRvbGVyYW5j ZQoJCQkJCQkJWWxpbV9lc3QoaSwxKSA9IHNpZ24oWShpLGl0ZXIpKSpJbmY7 CgkJCQkJCWVsc2UKCQkJCQkJCVlsaW1fZXN0KGksMSkgPSAxL1lhX2VzdChp LGl0ZXIpOwoJCQkJCQllbmRpZgoJCQkJCWVsc2UKCQkJCQkJbm90X2NvbnZl cmdlZChpKSA9IHRydWU7CgkJCQkJCWlmIGFicyhDX2VzdChpKS1DX2VzdF9v bGQoaSkpPHRvbGVyYW5jZQoJCQkJCQkJIyMgY29uc3RhbnQgcmF0ZSAiY29u dmVyZ2VuY2UiLCBpbmNyZWFzZSBmYWN0b3IKCQkJCQkJCWluY3JlYXNlX2Zh Y3RvciA9IHRydWU7CgkJCQkJCWVuZGlmCgkJCQkJZW5kaWYKCQkJCWVuZGlm CgkJCWVuZGlmCgkJZW5kZm9yCgoJCSMjIG5ldyBzdGVwc2l6ZQoJCWlmIGlz aW5mKFhsaW0pCgkJCXN0ZXBzaXplID0gWChpdGVyKSpmYWN0b3I7CgkJZWxz ZQoJCQlzdGVwc2l6ZSA9IChYbGltLVgoaXRlcikpKihmYWN0b3ItMSkvZmFj dG9yOwoJCWVuZGlmCgkJCgkJaWYgaW5jcmVhc2VfZmFjdG9yCgkJCWZhY3Rv ciAqPSBmYWN0b3I7CgkJCWlmIGZhY3Rvcj5mYWN0b3JfbWF4CgkJCQlmYWN0 b3IgPSBmYWN0b3JfbWF4OwoJCQllbmRpZgoJCWVuZGlmCgoJCWlmIHJlcG9y dAoJCQkjIyBzb21lIHByaW50aW5nIGZvciBkZWJ1Z2dpbmcgLSB1bmNvbW1l bnQgaWYgbmVlZGVkCgkJCXByaW50ZigiJWQgLSBYWyAlLjNnIF0gLSBZWyIs aXRlcixYKGl0ZXIpKTsKCQkJcHJpbnRmKCIgJS4zZyIsWSg6LGl0ZXIpKTsK CQkJcHJpbnRmKCIgXSAtIFlhWyIpOwoJCQlwcmludGYoIiAlLjNnIixZYSg6 LGl0ZXIpKTsKCQkJcHJpbnRmKCJdIC0gRVsiKTsKCQkJcHJpbnRmKCIgJS4z ZyIsRV9lc3QpOwoJCQlwcmludGYoIl0gLSBFYVsiKTsKCQkJcHJpbnRmKCIg JS4zZyIsRWFfZXN0KTsKCQkJcHJpbnRmKCIgXSAtIGYgWyAlLjNnIF1cbiIs ZmFjdG9yKTsKCQllbmRpZgoJCQoJCWl0ZXIrKzsKCQkKCWVuZHdoaWxlCgoJ IyMgcmVjb25zdGl0dXRlIGNvbXBsZXggcmVzdWx0cwoJWWxpbSA9IFlsaW1f ZXN0KDE6TSk7Cgl0bXAgPSBmaW5kKGlzaW5mKFlsaW1fZXN0KChNKzEpOjIq TSkpKTsKCVlsaW0odG1wKSArPSAoc2lnbihZbGltX2VzdChNK3RtcCkpKjFp KnJlYWxtYXgpKjI7Cgl0bXAgPSBmaW5kKGlzZmluaXRlKFlsaW1fZXN0KChN KzEpOjIqTSkpKTsKCVlsaW0odG1wKSArPSAxaSpZbGltX2VzdChNK3RtcCk7 CgoJWWkgPSBZKE0rKDE6TSksOik7IFkgPSBZKDE6TSw6KTsKCWZvciBpPTE6 TQoJCXRtcCA9IGZpbmQoaXNpbmYoWWkoaSw6KSkpOwoJCVkoaSx0bXApICs9 IChzaWduKFkoaSx0bXApKSoxaSpyZWFsbWF4KSoyOwoJCXRtcCA9IGZpbmQo aXNmaW5pdGUoWWkoaSw6KSkpOwoJCVkoaSx0bXApICs9IDFpKllpKGksdG1w KTsKCWVuZGZvcgoJCmVuZGZ1bmN0aW9uCg== --_----------=_1052944179288850--