[ruby-core:76002] [Ruby trunk Feature#12361] Proposal: add Geo::Coord class to standard library
From:
zverok.offline@...
Date:
2016-06-13 15:20:23 UTC
List:
ruby-core #76002
SXNzdWUgIzEyMzYxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgVmljdG9yIFNoZXBlbGV2LgoKCj4gQWx0 aG91Z2ggSSBmZWVsIGl0J3MgZ29vZCB0byBoYXZlIGNvbW1vbiBjb29yZGluYXRpb24gY2xhc3Ms IEkgZG9uJ3QgdGhpbmsgaXQncyB3aXNlIHRvIHBpY2sgb25lIGltcGxlbWVudGF0aW9uIG92ZXIg bWFueSBhbmQgYWRkIGl0IHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiBJdCBzaG91bGQgYmUgZG9u ZSB0aHJvdWdoIHNvdW5kIGNvbXBldGl0aW9uLgoKVG8gYmUgaG9uZXN0LCBhdCBmaXJzdCAoaXQg d2FzIH5GZWJydWFyeSksIEkndmUganVzdCB3YW50ZWQgdG8gcG9zdCBoZXJlIGEgbWVyZSBwcm9w b3NhbCBsaWtlICJsZXQncyBjcmVhdGUgYSBjb21tb24gY2xhc3MgaW4gc3RkbGliIiBhbmQgY2Fs bCBpdCBhIGRheS4gCgpUaGVuLCBJJ3ZlIHRob3VnaHQgdGhhdCBzb21lIGtpbmQgb2YgInJlZmVy ZW5jZSBpbXBsZW1lbnRhdGlvbiIgKHdoaWNoIGNhbiBiZSBjaGVja2VkIGFuZCBkaXNjdXNzZWQg cHJhY3RpY2FsbHkpIHdpbGwgaGVscCB0byBtb3ZlIGludG8gcHJhZ21hdGljIG1hdHRlcnMgYXMg c29vbiBhcyBwb3NzaWJsZS4KClRoZW4sIEkndmUgc3BlbnQgc29tZSB0aW1lIHRvIGNyZWF0ZSBh biBpbXBsZW1lbnRhdGlvbiB0byBnbyB3aXRoIHRoZSBwcm9wb3NhbC4KCkFuZCB0aGVuLCBwcm9w b3NhbCB3YXMgZmFpbGVkIGFuZCByZWplY3RlZCBiZWNhdXNlIGl0IGlzIGltcGxlbWVudGVkIDop IFRoYXQncyBraW5kIG9mIGZ1bm55LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpGZWF0dXJlICMxMjM2MTogUHJvcG9zYWw6IGFkZCBHZW86OkNvb3JkIGNsYXNzIHRv IHN0YW5kYXJkIGxpYnJhcnkKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzEyMzYx I2NoYW5nZS01OTIwMAoKKiBBdXRob3I6IFZpY3RvciBTaGVwZWxldgoqIFN0YXR1czogUmVqZWN0 ZWQKKiBQcmlvcml0eTogTm9ybWFsCiogQXNzaWduZWU6IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiMjIFByb3Bvc2FsCgpBZGQgYEdlbzo6Q29vcmRgIGNsYXNzIHRv IFJ1Ynkgc3RhbmRhcmQgbGlicmFyeSwgcmVwcmVzZW50aW5nIGBbbGF0aXR1ZGUsIGxvbmdpdHVk ZV1gIHBhaXIgKyBjb252ZW5pZW5jZSBtZXRob2RzLiBBZGQgYEdlb2Agc3RhbmRhcmQgbGlicmFy eSB3aXRoIGFkZGl0aW9uYWwgY2FsY3VsYXRpb25zIGFuZCBjb252ZW5pZW5jZSBtZXRob2RzLgoK IyMgUmF0aW9uYWxlCgpJbiBtb2Rlcm4gYXBwbGljYXRpb25zLCB3b3JraW5nIHdpdGggZ2VvZ3Jh cGhpY2FsIGNvb3JkaW5hdGVzIGlzIGZyZXF1ZW50LiBXZSBwcm9wb3NlIHRvIHRoaW5rIG9mIHN1 Y2ggY29vcmRpbmF0ZXMgKG5hbWVseSwgYGxhdGl0dWRlLCBsb25naXR1ZGVgIHBhaXIpIGFzIG9m ICJiYXNpYyIgdHlwZSB0aGF0IHNob3VsZCBiZSBzdXBwb3J0ZWQgYnkgc3RhbmRhcmQgbGlicmFy eSAtIHRoZSBzYW1lIHdheSBhcyB3ZSBzdXBwb3J0IGBUaW1lYC9gRGF0ZWAvYERhdGVUaW1lYCBp bnN0ZWFkIG9mIGhhdmluZyBpdCBkZWZpbmVkCmJ5IHVzZXIvZ2Vtcy4KClRoaXMgdHlwZSBpcyB0 b28gInNtYWxsIiB0byBiZSBkZWZpbmVkIGJ5IHNlcGFyYXRlIGdlbSwgc28sIGFsbCBvZiBleGlz dGluZyBnZW8gZ2VtcyAoR2VvS2l0LCBSR2VvLCBHZW9SdWJ5LCBHcmF0aWN1bGUgZXRjLikgZGVm aW5lIHRoZWlyIG93biBgTGF0TG5nYCwgb3IgYExvY2F0aW9uYCwgb3IgYFBvaW50YCwgd2hhdGV2 ZXIuCgpPbiBvdGhlciBoYW5kLCBBUEkgZGVzaWduIGZvciB0aGlzICJzbWFsbCIgdHlwZSBpcyB2 YWd1ZSBlbm91Z2ggZm9yIGFsbCB0aG9zZSBzaW1pbGFyIHR5cGVzIHRvIGJlIGluY29tcGF0aWJs ZSBhbmQgYnJlYWsgc21hbGwgaGFiaXRzIGFuZCBjb252ZW50aW9ucyB3aGVuIHlvdSBjaGFuZ2Ug ZnJvbSBvbmUgZ2VvIGxpYnJhcnkgdG8gYW5vdGhlciwgb3IgdHJ5IHRvIHVzZSBzZXZlcmFsCnNp bXVsdGFuZW91c2x5LgoKQWRkaXRpb25hbHksIG1hbnkgZ2VtcyBzb21laG93IHdvcmtpbmcgd2l0 aCBnZW8gY29vcmRpbmF0ZXMgKGZvciB3ZWF0aGVyLCBvciB0aW1lem9uZSwgb3IgYW5vdGhlciB0 YXNrcykgZ2VuZXJhbGx5IHByZWZlciBub3QgdG8gaW50cm9kdWNlIHR5cGUsIGFuZCBqdXN0IHdv cmsgd2l0aCBgW2xhdCwgbG5nXWAgYXJyYXksIHdoaWNoIGlzIG5vdCB2ZXJ5IGNvbnZlbmllbnQs IGZhaXRoZnVsbHkuCgpTbywgaGF2aW5nICJnZW8gY29vcmRpbmF0ZXMiIGZ1bmN0aW9uYWxpdHkg aW4gc3RhbmRhcmQgbGlicmFyeSBzZWVtcyByZWFzb25hYmxlIGFuZCB2YWx1YWJsZS4KCiMjIEV4 aXN0aW5nL3JlZmVyZW5jZSBzb2x1dGlvbnMKClJ1Ynk6CgoqIFtHZW9LaXQ6OkxhdExuZ10oaHR0 cDovL3d3dy5ydWJ5ZG9jLmluZm8vZ2l0aHViL2dlb2tpdC9nZW9raXQvbWFzdGVyL0dlb2tpdC9M YXRMbmcpOwoqIFtSR2VvOjpGZWF0dXJlOjpQb2ludF0oaHR0cDovL3d3dy5ydWJ5ZG9jLmluZm8v Z2Vtcy9yZ2VvL1JHZW8vRmVhdHVyZS9Qb2ludCkgKHdpdGggc2V2ZXJhbCAicHJpdmF0ZSIgaW1w bGVtZW50YXRpb24gY2xhc3Nlcyk7IFJHZW8gaW1wbGVtZW50cyBmdWxsIFtPR0MgU2ltcGxlIEZl YXR1cmVzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaW1wbGVfRmVhdHVyZXMpIHNw ZWNpZmljYXRpb24sIHNvLCBpdHMgcG9pbnRzIGhhdmUgYHpgIGFuZCBgbWAgY29vcmRpbmF0ZXMs IHByb2plY3Rpb24gYW5kIG11Y2ggbW9yZTsKKiBbR3JhdGljdWxlOjpMb2NhdGlvbl0oaHR0cDov L3d3dy5ydWJ5ZG9jLmluZm8vZ2l0aHViL2NvbGxlY3RpdmVpZGVhL2dyYXRpY3VsZS9HcmF0aWN1 bGUvTG9jYXRpb24pIChub3Qgc3RyaWN0bHkgYSBgW2xhdCxsbmddYCB3cmFwcGVyKTsKKiBbUm9z YW1hcnk6Ok5vZGVdKGh0dHA6Ly93d3cucnVieWRvYy5pbmZvL2dlbXMvcm9zZW1hcnkvMC40LjQv Um9zZW1hcnkvTm9kZSkgKGZvbGxvd3MgbmFtaW5nIGNvbnZlbnRpb24gb2YgdW5kZXJseWluZyBP cGVuU3RyZWV0TWFwIEFQSSk7CgpPdGhlciBzb3VyY2VzOgoKKiBQeXRob246IFtnZW9weS5Qb2lu dF0oaHR0cDovL2dlb3B5LnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvI2dlb3B5LnBvaW50LlBv aW50KTsKKiBbRWxhc3RpY1NlYXJjaF0oaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ibG9nL2dlby1s b2NhdGlvbi1hbmQtc2VhcmNoKSB1c2VzIGhhc2ggd2l0aCAibGF0IiBhbmQgImxvbiIga2V5czsK KiBHb29nbGUgTWFwcyBbR2VvY29kaW5nIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j b20vbWFwcy9kb2N1bWVudGF0aW9uL2dlb2NvZGluZy9pbnRybyNHZW9jb2RpbmdSZXNwb25zZXMp IHVzZXMgaGFzaCB3aXRoICJsYXQiIGFuZCAibG5nIiBrZXlzOwoqIFBvc3RHSVM6IFtwcmV0dHkg Y29tcGxpY2F0ZWRdKGh0dHA6Ly9wb3N0Z2lzLm5ldC9kb2NzL21hbnVhbC0yLjIvdXNpbmdfcG9z dGdpc19kYm1hbmFnZW1lbnQuaHRtbCNSZWZPYmplY3QpICBoYXMgX2dlb21ldHJpY2FsXyAocHJv amVjdGVkKSBhbmQgX2dlb2dyYXBoaWNhbF8gKGxhdCwgbG5nKSBwb2ludHMgYW5kIHN0dWZmLgoK IyMgRGVzaWduIGRlY2lzaW9ucwoKV2hpbGUgZGVzaWduaW5nIGBHZW9gIGxpYnJhcnksIG91ciBy ZWZlcmVuY2UgcG9pbnQgd2FzIHN0YW5kYXJkIGBUaW1lYCBjbGFzcyAoYW5kLCB0byBsZXNzZXIg ZXh0ZW50LCBgRGF0ZWAvYERhdGVUaW1lYCkuIEl0IGhhcyB0aGlzIHJlc3BvbnNpYmlsaXRpZXM6 CgoqIHN0b3JlcyBkYXRhIGluIHNpbXBsZSBpbnRlcm5hbCBmb3JtOwoqIGhlbHBzIHRvIHBhcnNl IGFuZCBmb3JtYXQgZGF0YSB0byBhbmQgZnJvbSBzdHJpbmdzOwoqIHByb3ZpZGVzIGVhc3kgYWNj ZXNzIHRvIGxvZ2ljYWwgY29tcG9uZW50cyBvZiBkYXRhOwoqIGFsbG93cyBtb3N0IHNpbXBsZSBh bmQgdW5hbWJpZ3VvdXMgY2FsY3VsYXRpb25zLgoKKipNYWluIHR5cGUgbmFtZSoqOiBhcyBmYXIg YXMgd2UgY2FuIHNlZSwgdGhlcmUncyBubyBnb29kIHNpbmd1bGFyIG5hbWUgZm9yIGAobGF0LCBs bmcpYCBwYWlyIGNvbmNlcHQuIEFzIG1lbnRpb25lZCBhYm92ZSwgdGhlcmUgY2FuIGJlIHNlZW4g bmFtZXMgbGlrZSBgTGF0TG5nYCwgb3IgYExvY2F0aW9uYCwgb3IgYFBvaW50YDsgYW5kIGluIG5h dHVyYWwgbGFuZ3VhZ2UKanVzdCAiY29vcmRpbmF0ZXMiIHVzZWQgZnJlcXVlbnRseS4gV2UgcHJv cG9zZSB0aGUgbmFtZSBgQ29vcmRgLCB3aGljaCBpcyBwcmV0dHkgc2hvcnQsIGVhc3kgdG8gcmVt ZW1iZXIsIGRlbW9uc3RyYXRlcyBpbnRlbnRpb25zIChhbmQgbG9va3MgbGlrZSBzaW5ndWxhciwg c28geW91IGNhbiBoYXZlICJvbmUgY29vcmQgb2JqZWN0IiBhbmQgImFycmF5IG9mIGNvb3JkcyIs CndoaWNoIGlzIG5vdCAxMDAlIGxpbmd1aXN0aWNhbGx5IGNvcnJlY3QsIHlldCBjb252ZW5pZW50 KS4gQWx0ZXJuYXRpdmUgYFBvaW50YCBuYW1lIHNlZW1zIHRvIGJlIHRvbyBhbWJpZ291cywgYmVp bmcgdXNlZCBpbiBtYW55IGNvbnRleHRzLgoKYEdlbzo6Q29vcmRgIG9iamVjdCBpcyAqKmltbXV0 YWJsZSoqLCB0aGVyZSdzIG5vIHNlbWFudGljYWwgc2Vuc2UgaW4gYGxvY2F0aW9uLmxhdGl0dWRl ID0gLi4uYCBvciBzb21ldGhpbmcgbGlrZSB0aGlzLgoKKipVbml0cyoqOiBgR2VvYCBjYWxjdWxh dGlvbnMgKGp1c3QgbGlrZSBgVGltZWAgY2FsY3VsYXRpb25zKSBwcm92aWRlIG5vIHVuaXRzIG9w dGlvbnMsIGp1c3QgcmV0dXJuaW5nIG51bWJlcnMgbWVhc3VyZWQgaW4gImRlZmF1bHQiIHVuaXRz OiBtZXRyZXMgZm9yIGRpc3RhbmNlcyAoYXMgdGhleSBhcmUgU0kgdW5pdCkgYW5kIGRlZ3JlZXMg Zm9yIGF6aW11dGguIExhdGl0dWRlIGFuZCBsb25naXR1ZGUgYXJlIHN0b3JlZCBpbiBkZWdyZWVz LCBidXQgcmFkaWFucyB2YWx1ZXMgYWNjZXNzb3JzIGFyZSBwcm92aWRlZCAoYmVpbmcgd2lkZWx5 IHVzZWQgaW4gZ2VvZGVzeSBtYXRoKS4KCkFsbCBjb29yZGluYXRlcyBhbmQgY2FsY3VsYXRpb25z IGFyZSB0aG91Z2h0IHRvIGJlIGluIFdHUyA4NCBjb29yZGluYXRlcyByZWZlcmVuY2Ugc3lzdGVt LCBiZWluZyBjdXJyZW50IHN0YW5kYXJkIGZvciBtYXBzIGFuZCBHUFMuCgpUaGVyZSdzIGludHJv ZHVjZWQgKipjb25jZXB0IG9mIGdsb2JlKiogdXNlZCBpbnRlcm5hbGx5IGZvciBjYWxjdWxhdGlv bnMuIE9ubHkgZ2VuZXJpYyAoc3BoZXJlKSBhbmQgRWFydGggZ2xvYmVzIGFyZSBpbXBsZW1lbnRl ZCwgYnV0IGZvciAyMDE2IHdlIGZlZWwgbGlrZSBjdXJyZW50IGRlc2lnbiBvZiBiYXNpYyB0eXBl cyBzaG91bGQgdGFrZSBpbiBjb25zaWRlcmF0aW9uCnBvc3NpYmlsaXR5IG9mIHdyaXRpbmcgUnVi eSBzY3JpcHRzIGZvciBNYXJzIG1hcHMgYW5hbHlzaXMuIE9ubHkgb25lIGdlb2Rlc3kgZm9ybXVs YSBpcyBpbXBsZW1lbnRlZCAoVmluY2VudHksIGdlbmVyYWxseSBjb25zaWRlcmVkIG9uZSBvZiB0 aGUgbW9zdCBwcmVjaXNlKSwgYXMgZm9yIHN0YW5kYXJkIGxpYnJhcnkgY2xhc3MgaXQgY29uc2lk ZXJlZCB1bm5lY2Vzc2FyeSB0byBwcm92aWRlIHVzZXIgd2l0aCBnZW9kZXN5IGZvcm11bGFlIG9w dGlvbnMuCgpObyAqKm1hcCBwcm9qZWN0aW9uKiogbWF0aCB3YXMgYWRkZWQgaW50byBjdXJyZW50 IHByb3Bvc2FsLCBidXQgaXQgbWF5IGJlIGEgZ29vZCBkaXJlY3Rpb24gZm9yIGZ1cnRoZXIgd29y ay4gTm8gKiplbGV2YXRpb24qKiBkYXRhIGNvbnNpZGVyZWQgZWl0aGVyLgoKIyMgUHJvcG9zYWwg ZGV0YWlscwoKIyMjIGBHZW86OkNvb3JkYCBjbGFzcwoKUmVwcmVzZW50cyBgW2xhdGl0dWRlLCBs b25naXR1ZGVdYCBwYWlyLiBMYXRpdHVkZSBpcyAtOTAgdG8gKzkwIChkZWdyZWVzKS4gTG9uZ2l0 dWRlIGlzIC0xODAgdG8gKzE4MC4KCkNsYXNzIG1ldGhvZHM6CgoqIGBuZXcobGF0LCBsbmcpYCBj cmVhdGVzIGluc3RhbmNlIGZyb20gdHdvIE51bWVyaWNzIChpbiBkZWdyZWVzKTsKKiBgbmV3KGxh dDosIGxuZzopYCBrZXl3b3JkIGFyZ3VtZW50cyBmb3JtIG9mIGFib3ZlOwoqIGBuZXcobGF0ZDos IGxhdG06LCBsYXRzOiwgbGF0aDosIGxuZ2Q6IGxuZ206LCBsbmdzOiBsbmdoOilgIGNyZWF0ZXMg aW5zdGFuY2UgZnJvbSBjb29yZGluYXRlcyBpbiAoZGVnLCBtaW4sIHNlYywgaGVtaXNwaGVyZSkg Zm9ybTsgaGVtaXNwaGVyZXMgYXJlICJOIi8iUyIgZm9yIGxhdGl0dWRlIGFuZCAiVyIvRSIgZm9y IGxvbmdpdHVkZTsgYW55IGNvbXBvbmVudCBleGNlcHQgZm9yIGRlZ3JlZXMgY2FuIGJlIG9taXR0 ZWQ7IGlmIGhlbWlzcGhlcmUgaXMgb21pdHRlZCwgaXQgaXMgZGVjaWRlZCBieSBkZWdyZWVzIHNp Z24gKGxhdDogcG9zaXRpdmUgaXMgIk4iLCBsbmc6IHBvc2l0aXZlIGlzICJFIik7CiogYGZyb21f aChoYXNoKWAgY3JlYXRlcyBpbnN0YW5jZSBmcm9tIGhhc2ggd2l0aCBgImxhdCJgIG9yIGAibGF0 aXR1ZGUiYCBrZXkgYW5kIGAibG9uImAgb3IgYCJsbmciYCBvciBgImxvbmdpdHVkZSJgIGtleSAo Y2FzZS1pbmRlcGVuZGVudCk7CiogYGZyb21fcmFkaWFucyhwaGksIGxhKWAgY3JlYXRlcyBpbnN0 YW5jZSBmcm9tIHJhZGlhbiB2YWx1ZXM7CiogYHN0cnBjb29yZGAgcGFyc2VzIHN0cmluZyBpbnRv IGNvb3JkaW5hdGVzIGJ5IHByb3ZpZGVkIHBhdHRlcm4gKHNlZSBiZWxvdyBmb3IgcGF0dGVybiBk ZXNjcmlwdGlvbik7CiogYHBhcnNlX2xsYCBwYXJzZXMgY29vcmRpbmF0ZXMgc3RyaW5nIGluIGAi ZmxvYXQsIGZsb2F0ImAgZm9ybTsKKiBgcGFyc2VfZG1zYCBwYXJzZXMgY29vcmRpbmF0ZXMgc3Ry aW5nIGluIGBkIG0gcyBoLCBkIG0gcyBoYCBmb3JtYXQgKGNvbnNpZGVyaW5nIHNldmVyYWwgd2lk ZWx5IHVzZWQgc3ltYm9scyBmb3IgZGVncmVlcywgbWludXRlcyBhbmQgc2Vjb25kcyk7CiogYHBh cnNlYCB0cmllcyB0byBwYXJzZSBzdHJpbmcgaW50byBjb29yZGluYXRlcyBmcm9tIHZhcmlvdXMg Zm9ybWF0cy4KCkluc3RhbmNlIG1ldGhvZHM6CgoqIGBsYXRgIGFuZCBgbG5nYCwgcmV0dXJuaW5n IGBGbG9hdGBzLCBzaWduZWQ7CiogYGxhdGl0dWRlYCBhbmQgYGxvbmdpdHVkZWAgYXMgYW4gYWxp YXNlczsgYGxvbmAgYXMgYW4gYWRkaXRpb25hbCBhbGlhc2VzIGZvciBsb25naXR1ZGU7CiogYGxh dGRgLCBgbGF0bWAsIGBsYXRzYCwgYGxhdGhgOiBkZWdyZWUsIG1pbnV0ZSwgc2Vjb25kLCBoZW1p c3BoZXJlOyBgbGF0ZGAgYW5kIGBsYXRtYCBhcmUgYEZpeG51bWAsIGBsYXRzYCBpcyBgRmxvYXRg LCBgbGF0aGAgaXMgIk4iLyJTIjsgYWxsIG51bWJlcnMgYXJlIHVuc2lnbmVkOwoqIGBsbmdkYCwg YGxuZ21gLCBgbG5nc2AsIGBsbmdoYDogdGhlIHNhbWUgZm9yIGxvbmdpdHVkZSAoaGVtaXNwaGVy ZSBpcyAiVyIvIkUiKTsKKiBgbGF0ZG1zKG5vaGVtaXNwaGVyZSA9IGZhbHNlKWAgcmV0dXJucyBg W2xhdGQsIGxhdG0sIGxhdHMsIGxhdGhdYCB3aXRoIGBub2hlbWlzcGhlcmVgIHBhcmFtIGVxdWFs IHRvIGBmYWxzZWAsIGFuZCBgW8KxbGF0ZCwgbGF0bSwgbGF0c11gIHdpdGggYHRydWVgOyBzYW1l IHdpdGggYGxuZ2Rtc2AgZm9yIGxvbmdpdHVkZTsKKiBgcGhpYCBhbmQgYM+GYCBpcyBsYXRpdHVk ZSBpbiByYWRpYW5zIChoZWxwZnVsIGZvciBtYXRoKSwgYGxhYCBvciBgzrtgIGlzIGxvbmdpdHVk ZSBpbiByYWRpYW5zIChub3QgYGxhbWJkYWAgdG8gbm90IGNvbmZ1c2Ugd2l0aCBLZXJuZWwgbWV0 aG9kKTsKKiBgdG9fc2AgcmV0dXJuaW5nIHN0cmluZyBsaWtlICI1MC4wMDQ0NDQsMzYuMjMxMzg5 IiAoZ29vZCBmb3IgbWFwIFVSTHMgY29uc3RydWN0aW9uLCBmb3IgZXhhbXBsZSk7CiogYHRvX2go bGF0OiA6bGF0LCBsbmc6IDpsbmcpYCBjb252ZXJ0cyBjb29yZCB0byBoYXNoICh3aXRoIGRlc2ly ZWQga2V5IG5hbWVzKTsKKiBgdG9fYWAgY29udmVydHMgY29vcmQgdG8gc2ltcGxlIGBbbGF0LCBs bmddYCBwYWlyOwoqIGBzdHJmY29vcmQoZm9ybWF0c3RyKWAgZm9yIGNvbXBsZXggY29vcmRpbmF0 ZSBmb3JtYXR0aW5nIChzZWUgYmVsb3cgZm9yIGZvcm1hdCBzdHJpbmcgZGVzY3JpcHRpb24pOwoq IGBkaXN0YW5jZShvdGhlcilgIGNhbGN1bGF0ZXMgZGlzdGFuY2UgdG8gYW5vdGhlciBwb2ludCAo aW4gbWV0cmVzKTsKKiBgYXppbXV0aChvdGhlcilgIGNhbGN1bGF0ZXMgZGlyZWN0aW9uIHRvIHRh cmdldCAoaW4gZGVncmVlcyk7CiogYGVuZHBvaW50KGRpcmVjdGlvbiwgYXppbXV0aClgIGNhbGN1 bGF0ZXMgZmluYWwgcG9pbnQgb2YgdGhlIGxpbmUgb2YgYGRpc3RhbmNlYCBtZXRyZXMgZ29pbmcg aW4gYGF6aW11dGhgIGRpcmVjdGlvbiBmcm9tIGN1cnJlbnQgcG9pbnQuCgojIyMjIGBzdHJwY29v cmRgL2BzdHJmY29vcmRgCgpFeGFtcGxlOgoKfn5+cnVieQpraGFya2l2LnN0cmZjb29yZCgnJWxh dGR1wrAlbGF0beKAsiVsYXRz4oCzICVsYXRoLCAlbG5nZHXCsCVsbmdt4oCyJWxuZ3PigLMgJWxu Z2gnKQojID0+ICI1MMKwMOKAsjE24oCzIE4sIDM2wrAxM+KAsjUz4oCzIEUiCn5+fgoKRGlyZWN0 aXZlczoKCiogYCVsYXRgIC0gZnVsbCBsYXRpdHVkZSwgZmxvYXQ7IGNhbiBiZSBmb3JtYXR0ZWQg d2l0aCBtb3JlIGNvbnRyb2wgbGlrZSBgJS40bGF0YCAoZm91ciBkaWdpdHMgYWZ0ZXIgcG9pbnQp IG9yIGAlK2xhdGAgKGV4cGxpY2l0IHBsdXMgc2lnbiBmb3IgcG9zaXRpdmUgbGF0aXR1ZGVzKTsK KiBgJWxhdGRgIC0gbGF0aXR1ZGUgZGVncmVlcywgdW5zaWduZWQsIGludGVnZXIKKiBgJWxhdGRz YCAtIGxhdGl0dWRlIGRlZ3JlZXMsIHNpZ25lZAoqIGAlbGF0bWAgLSBsYXRpdHVkZSBtaW51dGVz LCB1bnNpZ25lZCwgaW50ZWdlcgoqIGAlbGF0c2AgLSBsYXRpdHVkZSBzZWNvbmRzLCB1bnNpZ25l ZCwgaW50ZWdlciwgYnV0IGNhbiBiZSBmb3JtYXR0ZWQgYXMgZmxvYXQ6IGAlLjJsYXRzYAoqIGAl bGF0aGAgLSBsYXRpdHVkZSBoZW1pc3BoZXJlLCBvbmUgbGV0dGVyICgiTiIvIlMiKQoqIGAlbG5n YCwgYCVsbmdkYCwgYCVsbmdkc2AsIGAlbG5nc2AsIGAlbG5naGAsIGAlbG5nSGAgLSBzYW1lIGZv ciBsb25naXR1ZGUKKiBgJSVgIGxpdGVyYWwgYCVgIHNpZ24KCiMjIyBDdXJyZW50IGltcGxlbWVu dGF0aW9uCgpQcm9wb3NlZCBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYXQgaHR0cHM6Ly9n aXRodWIuY29tL3p2ZXJvay9nZW9fY29vcmQuCgpJdCB3YXMgY3JlYXRlZCB3aXRoIHRob3VnaHRz IG9mIHN0YW5kYXJkIGxpYnJhcnksIHNvLCBhbGwgZG9jcyBhcmUgaW4gUkRvYyBmb3JtYXQsIGFu ZCB0ZXN0cy9zcGVjcyBhcmUgaW4gbXNwZWMtY29tcGF0aWJsZSByc3BlYyBmbGF2b3VyLgoKCgoK LS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVi eS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDov L2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=