REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 72.84 KB
Close
/proc/self/root/opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/polynomial/__pycache__/chebyshev.cpython-311.pyc
Text
Base64
pw0NCgAAAAC8fG9pTPUAAOMAAAAAAAAAAAAAAAAFAAAAAAAAAPPiAQAAlwBkAFoAZAFkAmwBWgJkAWQCbANtBFoFAQBkAWQDbAZtB1oHAQBkBGQFbAhtCVoKAQBkBGQGbAttDFoMAQBnAGQHogFaDWUKag4AAAAAAAAAAFoPZAiEAFoQZAmEAFoRZAqEAFoSZAuEAFoTZAyEAFoUZA2EAFoVZA6EAFoWZA+EAFoXAgBlAmoYAAAAAAAAAABkEGQEZwKmAQAAqwEAAAAAAAAAAFoZAgBlAmoYAAAAAAAAAABkAWcBpgEAAKsBAAAAAAAAAABaGgIAZQJqGAAAAAAAAAAAZARnAaYBAACrAQAAAAAAAAAAWhsCAGUCahgAAAAAAAAAAGQBZARnAqYBAACrAQAAAAAAAAAAWhxkEYQAWh1kEoQAWh5kE4QAWh9kFIQAWiBkFYQAWiFkFoQAWiJkF4QAWiNkMWQZhAFaJGQyZBqEAVolZARnAGQBZARkAWYFZBuEAVomZDNkHYQBWidkHoQAWihkH4QAWilkIIQAWipkIYQAWitkIoQAWixkI4QAWi1kJIQAWi5kNGQmhAFaL2QnhABaMGQohABaMWQ1ZCqEAVoyZCuEAFozZCyEAFo0ZC2EAFo1ZC6EAFo2AgBHAGQvhABkMGUMpgMAAKsDAAAAAAAAAABaN2QCUwApNmHnBwAACj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hlYnlzaGV2IFNlcmllcyAoOm1vZDpgbnVtcHkucG9seW5vbWlhbC5jaGVieXNoZXZgKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIG1vZHVsZSBwcm92aWRlcyBhIG51bWJlciBvZiBvYmplY3RzIChtb3N0bHkgZnVuY3Rpb25zKSB1c2VmdWwgZm9yCmRlYWxpbmcgd2l0aCBDaGVieXNoZXYgc2VyaWVzLCBpbmNsdWRpbmcgYSBgQ2hlYnlzaGV2YCBjbGFzcyB0aGF0CmVuY2Fwc3VsYXRlcyB0aGUgdXN1YWwgYXJpdGhtZXRpYyBvcGVyYXRpb25zLiAgKEdlbmVyYWwgaW5mb3JtYXRpb24Kb24gaG93IHRoaXMgbW9kdWxlIHJlcHJlc2VudHMgYW5kIHdvcmtzIHdpdGggc3VjaCBwb2x5bm9taWFscyBpcyBpbiB0aGUKZG9jc3RyaW5nIGZvciBpdHMgInBhcmVudCIgc3ViLXBhY2thZ2UsIGBudW1weS5wb2x5bm9taWFsYCkuCgpDbGFzc2VzCi0tLS0tLS0KCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIENoZWJ5c2hldgoKCkNvbnN0YW50cwotLS0tLS0tLS0KCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGNoZWJkb21haW4KICAgY2hlYnplcm8KICAgY2hlYm9uZQogICBjaGVieAoKQXJpdGhtZXRpYwotLS0tLS0tLS0tCgouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBjaGViYWRkCiAgIGNoZWJzdWIKICAgY2hlYm11bHgKICAgY2hlYm11bAogICBjaGViZGl2CiAgIGNoZWJwb3cKICAgY2hlYnZhbAogICBjaGVidmFsMmQKICAgY2hlYnZhbDNkCiAgIGNoZWJncmlkMmQKICAgY2hlYmdyaWQzZAoKQ2FsY3VsdXMKLS0tLS0tLS0KCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGNoZWJkZXIKICAgY2hlYmludAoKTWlzYyBGdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0KCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGNoZWJmcm9tcm9vdHMKICAgY2hlYnJvb3RzCiAgIGNoZWJ2YW5kZXIKICAgY2hlYnZhbmRlcjJkCiAgIGNoZWJ2YW5kZXIzZAogICBjaGViZ2F1c3MKICAgY2hlYndlaWdodAogICBjaGViY29tcGFuaW9uCiAgIGNoZWJmaXQKICAgY2hlYnB0czEKICAgY2hlYnB0czIKICAgY2hlYnRyaW0KICAgY2hlYmxpbmUKICAgY2hlYjJwb2x5CiAgIHBvbHkyY2hlYgogICBjaGViaW50ZXJwb2xhdGUKClNlZSBhbHNvCi0tLS0tLS0tCmBudW1weS5wb2x5bm9taWFsYAoKTm90ZXMKLS0tLS0KVGhlIGltcGxlbWVudGF0aW9ucyBvZiBtdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24sIGludGVncmF0aW9uLCBhbmQKZGlmZmVyZW50aWF0aW9uIHVzZSB0aGUgYWxnZWJyYWljIGlkZW50aXRpZXMgWzFdXzoKCi4uIG1hdGg6OgogICAgVF9uKHgpID0gXGZyYWN7el5uICsgel57LW59fXsyfSBcXAogICAgelxmcmFje2R4fXtken0gPSBcZnJhY3t6IC0gel57LTF9fXsyfS4KCndoZXJlCgouLiBtYXRoOjogeCA9IFxmcmFje3ogKyB6XnstMX19ezJ9LgoKVGhlc2UgaWRlbnRpdGllcyBhbGxvdyBhIENoZWJ5c2hldiBzZXJpZXMgdG8gYmUgZXhwcmVzc2VkIGFzIGEgZmluaXRlLApzeW1tZXRyaWMgTGF1cmVudCBzZXJpZXMuICBJbiB0aGlzIG1vZHVsZSwgdGhpcyBzb3J0IG9mIExhdXJlbnQgc2VyaWVzCmlzIHJlZmVycmVkIHRvIGFzIGEgInotc2VyaWVzLiIKClJlZmVyZW5jZXMKLS0tLS0tLS0tLQouLiBbMV0gQS4gVC4gQmVuamFtaW4sIGV0IGFsLiwgIkNvbWJpbmF0b3JpYWwgVHJpZ29ub21ldHJ5IHdpdGggQ2hlYnlzaGV2CiAgUG9seW5vbWlhbHMsIiAqSm91cm5hbCBvZiBTdGF0aXN0aWNhbCBQbGFubmluZyBhbmQgSW5mZXJlbmNlIDE0KiwgMjAwOAogIChodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAwODAyMjEyMDIxNTMvaHR0cHM6Ly93d3cubWF0aC5obWMuZWR1L35iZW5qYW1pbi9wYXBlcnMvQ29tYlRyaWcucGRmLCBwZy4gNCkKCukAAAAATikB2hRub3JtYWxpemVfYXhpc19pbmRleOkBAAAAKQHaCXBvbHl1dGlscykB2gtBQkNQb2x5QmFzZSki2ghjaGViemVyb9oHY2hlYm9uZdoFY2hlYnjaCmNoZWJkb21haW7aCGNoZWJsaW5l2gdjaGViYWRk2gdjaGVic3Vi2ghjaGVibXVseNoHY2hlYm11bNoHY2hlYmRpdtoHY2hlYnBvd9oHY2hlYnZhbNoHY2hlYmRlctoHY2hlYmludNoJY2hlYjJwb2x52glwb2x5MmNoZWLaDWNoZWJmcm9tcm9vdHPaCmNoZWJ2YW5kZXLaB2NoZWJmaXTaCGNoZWJ0cmlt2gljaGVicm9vdHPaCGNoZWJwdHMx2ghjaGVicHRzMtoJQ2hlYnlzaGV22gljaGVidmFsMmTaCWNoZWJ2YWwzZNoKY2hlYmdyaWQyZNoKY2hlYmdyaWQzZNoMY2hlYnZhbmRlcjJk2gxjaGVidmFuZGVyM2TaDWNoZWJjb21wYW5pb27aCWNoZWJnYXVzc9oKY2hlYndlaWdodNoPY2hlYmludGVycG9sYXRlYwEAAAAAAAAAAAAAAAUAAAADAAAA84gAAACXAHwAagAAAAAAAAAAAH0BdAMAAAAAAAAAAAAAagIAAAAAAAAAAGQBfAF6BQAAZAJ6CgAAfABqAwAAAAAAAAAArAOmAgAAqwIAAAAAAAAAAH0CfABkAXoLAAB8AnwBZAJ6CgAAZASFAjwAAAB8AnwCZARkBGQFhQMZAAAAAAAAAAAAegAAAFMAKQZh9QEAAENvbnZlcnQgQ2hlYnlzaGV2IHNlcmllcyB0byB6LXNlcmllcy4KCiAgICBDb252ZXJ0IGEgQ2hlYnlzaGV2IHNlcmllcyB0byB0aGUgZXF1aXZhbGVudCB6LXNlcmllcy4gVGhlIHJlc3VsdCBpcwogICAgbmV2ZXIgYW4gZW1wdHkgYXJyYXkuIFRoZSBkdHlwZSBvZiB0aGUgcmV0dXJuIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YKICAgIHRoZSBpbnB1dC4gTm8gY2hlY2tzIGFyZSBydW4gb24gdGhlIGFyZ3VtZW50cyBhcyB0aGlzIHJvdXRpbmUgaXMgZm9yCiAgICBpbnRlcm5hbCB1c2UuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgYyA6IDEtRCBuZGFycmF5CiAgICAgICAgQ2hlYnlzaGV2IGNvZWZmaWNpZW50cywgb3JkZXJlZCBmcm9tIGxvdyB0byBoaWdoCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgenMgOiAxLUQgbmRhcnJheQogICAgICAgIE9kZCBs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IFRfMSh4KSArIC4uLiArICBjX24gKiBUX24oeCkKCiAgICBUaGUgY29lZmZpY2llbnQgb2YgdGhlIGxhc3QgdGVybSBpcyBub3QgZ2VuZXJhbGx5IDEgZm9yIG1vbmljCiAgICBwb2x5bm9taWFscyBpbiBDaGVieXNoZXYgZm9ybS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICByb290cyA6IGFycmF5X2xpa2UKICAgICAgICBTZXF1ZW5jZSBjb250YWluaW5nIHRoZSByb290cy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBuZGFycmF5CiAgICAgICAgMS1EIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIElmIGFsbCByb290cyBhcmUgcmVhbCB0aGVuIGBvdXRgIGlzIGEKICAgICAgICByZWFsIGFycmF5LCBpZiBzb21lIG9mIHRoZSByb290cyBhcmUgY29tcGxleCwgdGhlbiBgb3V0YCBpcyBjb21wbGV4CiAgICAgICAgZXZlbiBpZiBhbGwgdGhlIGNvZWZmaWNpZW50cyBpbiB0aGUgcmVzdWx0IGFyZSByZWFsIChzZWUgRXhhbXBsZXMKICAgICAgICBiZWxvdykuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBudW1weS5wb2x5bm9taWFsLnBvbHlub21pYWwucG9seWZyb21yb290cwogICAgbnVtcHkucG9seW5vbWlhbC5sZWdlbmRyZS5sZWdmcm9tcm9vdHMKICAgIG51bXB5LnBvbHlub21pYWwubGFndWVycmUubGFnZnJvbXJvb3RzCiAgICBudW1weS5wb2x5bm9taWFsLmhlcm1pdGUuaGVybWZyb21yb290cwogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlX2UuaGVybWVmcm9tcm9vdHMKCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBpbXBvcnQgbnVtcHkucG9seW5vbWlhbC5jaGVieXNoZXYgYXMgQwogICAgPj4+IEMuY2hlYmZyb21yb290cygoLTEsMCwxKSkgIyB4XjMgLSB4IHJlbGF0aXZlIHRvIHRoZSBzdGFuZGFyZCBi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XzJgYC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBjMSwgYzIgOiBhcnJheV9saWtlCiAgICAgICAgMS1EIGFycmF5cyBvZiBDaGVieXNoZXYgc2VyaWVzIGNvZWZmaWNpZW50cyBvcmRlcmVkIGZyb20gbG93IHRvCiAgICAgICAgaGlnaC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBuZGFycmF5CiAgICAgICAgT2YgQ2hlYnlzaGV2IHNlcmllcyBjb2VmZmljaWVudHMgcmVwcmVzZW50aW5nIHRoZWlyIHByb2R1Y3QuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBjaGViYWRkLCBjaGVic3ViLCBjaGVibXVseCwgY2hlYmRpdiwgY2hlYnBvdwoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgSW4gZ2VuZXJhbCwgdGhlIChwb2x5bm9taWFsKSBwcm9kdWN0IG9mIHR3byBDLXNlcmllcyByZXN1bHRzIGluIHRlcm1zCiAgICB0aGF0IGFyZSBub3QgaW4gdGhlIENoZWJ5c2hldiBwb2x5bm9taWFsIGJhc2lzIHNldC4gIFRodXMsIHRvIGV4cHJlc3MKICAgIHRoZSBwcm9kdWN0IGFzIGEgQy1zZXJpZXMsIGl0IGlzIHR5cGljYWxseSBuZWNlc3NhcnkgdG8gInJlcHJvamVjdCIKICAgIHRoZSBwcm9kdWN0IG9udG8gc2FpZCBiYXNpcyBzZXQsIHdoaWNoIHR5cGljYWxseSBwcm9kdWNlcwogICAgInVuaW50dWl0aXZlIGxpdmUiIChidXQgY29ycmVjdCkgcmVzdWx0czsgc2VlIEV4YW1wbGVzIHNlY3Rpb24gYmVsb3cuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gZnJvbSBudW1weS5wb2x5bm9taWFsIGltcG9ydCBjaGVieXNoZXYgYXMgQwogICAgPj4+IGMxID0gKDEsMiwzKQogICAgPj4+IGMyID0gKDMsMiwxKQogICAgPj4+IEMuY2hlYm11bChjMSxjMikgIyBtdWx0aXBsaWNhdGlvbiByZXF1aXJlcyAicmVwcm9qZWN0aW9uIgogICAgYXJyYXkoWyAgNi41LCAgMTIuICwgIDEyLiAsICAgNC4gLCAgIDEuNV0pCgogICAgKQZyWAAAAHJZAAAAcjUAAAByPgAAAHI5AAAA2gd0cmltc2VxKQZyZgAAAHJvAAAAcjwAAAByPQAAAHJzAAAA2gNyZXRzBgAAACAgICAgIHI0AAAAcg8AAAByDwAAAL0CAABzYAAAAIAA9VIBABASjHyYUqASmEjRDyXUDyWBSIBSiBLdCRyYUtEJINQJIIBC3QkcmFLRCSDUCSCAQt0KFpBymDLRCh7UCh6AQ90KHZhj0Qoi1AoigEPdCw2MOpBjiT+MP9AEGnI2AAAAYwIAAAAAAAAAAAAAAAUAAAADAAAA8/gBAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB8AHwBZwKmAQAAqwEAAAAAAAAAAFwCAAB9AH0BfAFkARkAAAAAAAAAAABkAmsCAAAAAHIOdAUAAAAAAAAAAAAApgAAAKsAAAAAAAAAAACCAXQHAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAAB9AnQHAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAAB9A3wCfANrAAAAAAByD3wAZANkBIUCGQAAAAAAAAAAAGQCegUAAHwAZgJTAHwDZARrAgAAAAByGHwAfAFkARkAAAAAAAAAAAB6CwAAfABkA2QEhQIZAAAAAAAAAAAAZAJ6BQAAZgJTAHQJAAAAAAAAAAAAAHwApgEAAKsBAAAAAAAAAAB9BHQJAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAAB9BXQLAAAAAAAAAAAAAHwEfAWmAgAAqwIAAAAAAAAAAFwCAAB9Bn0HdAEAAAAAAAAAAAAAagYAAAAAAAAAAHQPAAAAAAAAAAAAAHwGpgEAAKsBAAAAAAAAAACmAQAAqwEAAAAAAAAAAH0GdAEAAAAAAAAAAAAAagYAAAAAAAAAAHQPAAAAAAAAAAAAAHwHpgEAAKsBAAAAAAAAAACmAQAAqwEAAAAAAAAAAH0HfAZ8B2YCUwApBWFoBQAACiAgICBEaXZpZGUgb25lIENoZWJ5c2hldiBzZXJpZXMgYnkgYW5vdGhlci4KCiAgICBSZXR1cm5zIHRoZSBxdW90aWVudC13aXRoLXJlbWFpbmRlciBvZiB0d28gQ2hlYnlzaGV2IHNlcmllcwogICAgYGMxYCAvIGBjMmAuICBUaGUgYXJndW1lbnRzIGFyZSBzZXF1ZW5jZXMgb2YgY29lZmZpY2llbnRzIGZyb20gbG93ZXN0CiAgICBvcmRlciAidGVybSIgdG8gaGlnaGVzdCwgZS5nLiwgWzEsMiwzXSByZXByZXNlbnRzIHRoZSBzZXJpZXMKICAgIGBgVF8wICsgMipUXzEgKyAzKlRfMmBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMxLCBjMiA6IGFycmF5X2xpa2UKICAgICAgICAxLUQgYXJyYXlzIG9mIENoZWJ5c2hldiBzZXJpZXMgY29lZmZpY2llbnRzIG9yZGVyZWQgZnJvbSBsb3cgdG8KICAgICAgICBoaWdoLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIFtxdW8sIHJlbV0gOiBuZGFycmF5cwogICAgICAgIE9mIENoZWJ5c2hldiBzZXJpZXMgY29lZmZpY2llbnRzIHJlcHJlc2VudGluZyB0aGUgcXVvdGllbnQgYW5kCiAgICAgICAgcmVtYWluZGVyLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgY2hlYmFkZCwgY2hlYnN1YiwgY2hlYm11bHgsIGNoZWJtdWwsIGNoZWJwb3cKCiAgICBOb3RlcwogICAgLS0tLS0KICAgIEluIGdlbmVyYWwsIHRoZSAocG9seW5vbWlhbCkgZGl2aXNpb24gb2Ygb25lIEMtc2VyaWVzIGJ5IGFub3RoZXIKICAgIHJlc3VsdHMgaW4gcXVvdGllbnQgYW5kIHJlbWFpbmRlciB0ZXJtcyB0aGF0IGFyZSBub3QgaW4gdGhlIENoZWJ5c2hldgogICAgcG9seW5vbWlhbCBiYXNpcyBzZXQuICBUaHVzLCB0byBleHByZXNzIHRoZXNlIHJlc3VsdHMgYXMgQy1zZXJpZXMsIGl0CiAgICBpcyB0eXBpY2FsbHkgbmVjZXNzYXJ5IHRvICJyZXByb2plY3QiIHRoZSByZXN1bHRzIG9udG8gc2FpZCBiYXNpcwogICAgc2V0LCB3aGljaCB0eXBpY2FsbHkgcHJvZHVjZXMgInVuaW50dWl0aXZlIiAoYnV0IGNvcnJlY3QpIHJl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ICBhbG9uZyBgYXhpc2AuICBBdCBlYWNoIGl0ZXJhdGlvbiB0aGUgcmVzdWx0IGlzIG11bHRpcGxpZWQgYnkgYHNjbGAgKHRoZQogICAgc2NhbGluZyBmYWN0b3IgaXMgZm9yIHVzZSBpbiBhIGxpbmVhciBjaGFuZ2Ugb2YgdmFyaWFibGUpLiBUaGUgYXJndW1lbnQKICAgIGBjYCBpcyBhbiBhcnJheSBvZiBjb2VmZmljaWVudHMgZnJvbSBsb3cgdG8gaGlnaCBkZWdyZWUgYWxvbmcgZWFjaAogICAgYXhpcywgZS5nLiwgWzEsMiwzXSByZXByZXNlbnRzIHRoZSBzZXJpZXMgYGAxKlRfMCArIDIqVF8xICsgMypUXzJgYAogICAgd2hpbGUgW1sxLDJdLFsxLDJdXSByZXByZXNlbnRzIGBgMSpUXzAoeCkqVF8wKHkpICsgMSpUXzEoeCkqVF8wKHkpICsKICAgIDIqVF8wKHgpKlRfMSh5KSArIDIqVF8xKHgpKlRfMSh5KWBgIGlmIGF4aXM9MCBpcyBgYHhgYCBhbmQgYXhpcz0xIGlzCiAgICBgYHlgYC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBjIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIENoZWJ5c2hldiBzZXJpZXMgY29lZmZpY2llbnRzLiBJZiBjIGlzIG11bHRpZGltZW5zaW9uYWwKICAgICAgICB0aGUgZGlmZmVyZW50IGF4aXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnQgdmFyaWFibGVzIHdpdGggdGhlCiAgICAgICAgZGVncmVlIGluIGVhY2ggYXhpcyBnaXZlbiBieSB0aGUgY29ycmVzcG9uZGluZyBpbmRleC4KICAgIG0gOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgTnVtYmVyIG9mIGRlcml2YXRpdmVzIHRha2VuLCBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4gKERlZmF1bHQ6IDEpCiAgICBzY2wgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgRWFjaCBkaWZmZXJlbnRpYXRpb24gaXMgbXVsdGlwbGllZCBieSBgc2NsYC4gIFRoZSBlbmQgcmVzdWx0IGlzCiAgICAgICAgbXVsdGlwbGljYXRpb24gYnkgYGBzY2wqKm1gYC4gIFRoaXMgaXMgZm9yIHVzZSBpbiBhIGxpbmVhciBjaGFuZ2Ugb2YKICAgICAgICB2YXJpYWJsZS4gKERlZmF1bHQ6IDEpCiAgICBheGlzIDogaW50LCBvcHRpb25hbAogICAgICAgIEF4aXMgb3ZlciB3aGljaCB0aGUgZGVyaXZhdGl2ZSBpcyB0YWtlbi4gKERlZmF1bHQ6IDApLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGRlciA6IG5kYXJyYXkKICAgICAgICBDaGVieXNoZXYgc2VyaWVzIG9mIHRoZSBkZXJpdmF0aXZlLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgY2hlYmludAoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgSW4gZ2VuZXJhbCwgdGhlIHJlc3VsdCBvZiBkaWZmZXJlbnRpYXRpbmcgYSBDLXNlcmllcyBuZWVkcyB0byBiZQogICAgInJlcHJvamVjdGVkIiBvbnRvIHRoZSBDLXNlcmllcyBiYXNpcyBzZXQuIFRodXMsIHR5cGljYWxseSwgdGhlCiAgICByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyAidW5pbnR1aXRpdmUsIiBhbGJlaXQgY29ycmVjdDsgc2VlIEV4YW1wbGVzCiAgICBzZWN0aW9uIGJlbG93LgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkucG9seW5vbWlhbCBpbXBvcnQgY2hlYnlzaGV2IGFzIEMKICAgID4+PiBjID0gKDEsMiwzLDQpCiAgICA+Pj4gQy5jaGViZGVyKGMpCiAgICBhcnJheShbMTQuLCAxMi4sIDI0Ll0pCiAgICA+Pj4gQy5jaGViZGVyKGMsMykKICAgIGFycmF5KFs5Ni5dKQogICAgPj4+IEMuY2hlYmRlcihjLHNjbD0tMSkKICAgIGFycmF5KFstMTQuLCAtMTIuLCAtMjQuXSkKICAgID4+PiBDLmNoZWJkZXIoYywyLC0xKQogICAgYXJyYXkoWzEyLiwgIDk2Ll0p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IHRoZSBOb3RlcyBzZWN0aW9uIGJlbG93LikgIFRoZSBhcmd1bWVudCBgY2AgaXMgYW4gYXJyYXkgb2YKICAgIGNvZWZmaWNpZW50cyBmcm9tIGxvdyB0byBoaWdoIGRlZ3JlZSBhbG9uZyBlYWNoIGF4aXMsIGUuZy4sIFsxLDIsM10KICAgIHJlcHJlc2VudHMgdGhlIHNlcmllcyBgYFRfMCArIDIqVF8xICsgMypUXzJgYCB3aGlsZSBbWzEsMl0sWzEsMl1dCiAgICByZXByZXNlbnRzIGBgMSpUXzAoeCkqVF8wKHkpICsgMSpUXzEoeCkqVF8wKHkpICsgMipUXzAoeCkqVF8xKHkpICsKICAgIDIqVF8xKHgpKlRfMSh5KWBgIGlmIGF4aXM9MCBpcyBgYHhgYCBhbmQgYXhpcz0xIGlzIGBgeWBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgQ2hlYnlzaGV2IHNlcmllcyBjb2VmZmljaWVudHMuIElmIGMgaXMgbXVsdGlkaW1lbnNpb25hbAogICAgICAgIHRoZSBkaWZmZXJlbnQgYXhpcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCB2YXJpYWJsZXMgd2l0aCB0aGUKICAgICAgICBkZWdyZWUgaW4gZWFjaCBheGlzIGdpdmVuIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGluZGV4LgogICAgbSA6IGludCwgb3B0aW9uYWwKICAgICAgICBPcmRlciBvZiBpbnRlZ3JhdGlvbiwgbXVzdCBiZSBwb3NpdGl2ZS4gKERlZmF1bHQ6IDEpCiAgICBrIDoge1tdLCBsaXN0LCBzY2FsYXJ9LCBvcHRpb25hbAogICAgICAgIEludGVncmF0aW9uIGNvbnN0YW50KHMpLiAgVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnRlZ3JhbCBhdCB6ZXJvCiAgICAgICAgaXMgdGhlIGZpcnN0IHZhbHVlIGluIHRoZSBsaXN0LCB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBpbnRlZ3JhbAogICAgICAgIGF0IHplcm8gaXMgdGhlIHNlY29uZCB2YWx1ZSwgZXRjLiAgSWYgYGBrID09IFtdYGAgKHRoZSBkZWZhdWx0KSwKICAgICAgICBhbGwgY29uc3RhbnRzIGFyZSBzZXQgdG8gemVyby4gIElmIGBgbSA9PSAxYGAsIGEgc2luZ2xlIHNjYWxhciBjYW4KICAgICAgICBiZSBnaXZlbiBpbnN0ZWFkIG9mIGEgbGlzdC4KICAgIGxibmQgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBpbnRlZ3JhbC4gKERlZmF1bHQ6IDApCiAgICBzY2wgOiBzY2FsYXIsIG9wdGlvbmFsCiAgICAgICAgRm9sbG93aW5nIGVhY2ggaW50ZWdyYXRpb24gdGhlIHJlc3VsdCBpcyAqbXVsdGlwbGllZCogYnkgYHNjbGAKICAgICAgICBiZWZvcmUgdGhlIGludGVncmF0aW9uIGNvbnN0YW50IGlzIGFkZGVkLiAoRGVmYXVsdDogMSkKICAgIGF4aXMgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgQXhpcyBvdmVyIHdoaWNoIHRoZSBpbnRlZ3JhbCBpcyB0YWtlbi4gKERlZmF1bHQ6IDApLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIFMgOiBuZGFycmF5CiAgICAgICAgQy1zZXJpZXMgY29lZmZpY2llbnRzIG9mIHRoZSBpbnRlZ3JhbC4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgVmFsdWVFcnJvcgogICAgICAgIElmIGBgbSA8IDFgYCwgYGBsZW4oaykgPiBtYGAsIGBgbnAubmRpbShsYm5kKSAhPSAwYGAsIG9yCiAgICAgICAgYGBucC5uZGltKHNjbCkgIT0gMGBgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgY2hlYmRlcgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgTm90ZSB0aGF0IHRoZSByZXN1bHQgb2YgZWFjaCBpbnRlZ3JhdGlvbiBpcyAqbXVsdGlwbGllZCogYnkgYHNjbGAuCiAgICBXaHkgaXMgdGhpcyBpbXBvcnRhbnQgdG8gbm90ZT8gIFNheSBvbmUgaXMgbWFraW5nIGEgbGluZWFyIGNoYW5nZSBvZgogICAgdmFyaWFibGUgOm1hdGg6YHUgPSBheCArIGJgIGluIGFuIGludGVncmFsIHJlbGF0aXZlIHRvIGB4YC4gIFRoZW4KICAgIDptYXRoOmBkeCA9IGR1L2FgLCBzbyBvbmUgd2lsbCBuZWVkIHRvIHNldCBgc2NsYCBlcXVhbCB0bwogICAgOm1hdGg6YDEvYWAtIHBlcmhhcHMgbm90IHdoYXQgb25lIHdvdWxkIGhhdmUgZmlyc3QgdGhvdWdodC4KCiAgICBBbHNvIG5vdGUgdGhhdCwgaW4gZ2VuZXJhbCwgdGhlIHJlc3VsdCBvZiBpbnRlZ3JhdGluZyBhIEMtc2VyaWVzIG5lZWRzCiAgICB0byBiZSAicmVwcm9qZWN0ZWQiIG9udG8gdGhlIEMtc2VyaWVzIGJhc2lzIHNldC4gIFRodXMsIHR5cGljYWxseSwKICAgIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyAidW5pbnR1aXRpdmUsIiBhbGJlaXQgY29ycmVjdDsgc2VlCiAgICBFeGFtcGxlcyBzZWN0aW9uIGJlbG93LgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkucG9seW5vbWlhbCBpbXBvcnQgY2hlYnlzaGV2IGFzIEMKICAgID4+PiBjID0gKDEsMiwzKQogICAgPj4+IEMuY2hlYmludChjKQogICAgYXJyYXkoWyAwLjUsIC0wLjUsICAwLjUsICAwLjVdKQogICAgPj4+IEMuY2hlYmludChjLDMpCiAgICBhcnJheShbIDAuMDMxMjUgICAsIC0wLjE4NzUgICAgLCAgMC4wNDE2NjY2NywgLTAuMDUyMDgzMzMsICAwLjAxMDQxNjY3LCAjIG1heSB2YXJ5CiAgICAgICAgMC4wMDYyNSAgIF0pCiAgICA+Pj4gQy5jaGViaW50KGMsIGs9MykKICAgIGFycmF5KFsgMy41LCAtMC41LCAgMC41LCAgMC41XSkKICAgID4+PiBDLmNoZWJpbnQoYyxsYm5kPS0yKQogICAgYXJyYXkoWyA4LjUsIC0wLjUsICAwLjUsICAwLjVdKQogICAgPj4+IEMuY2hlYmludChjLHNjbD0tMikKICAgIGFycmF5KFstMS4sICAxLiwgLTEuLCAtMS5dKQoKICAgIHIEAAAAVHKBAAAAcoMAAAB6GHRoZSBvcmRlciBvZiBpbnRlZ3JhdGlvbnKEAAAAcgIAAAB6LVRoZSBvcmRlciBvZiBpbnRlZ3JhdGlvbiBtdXN0IGJlIG5vbi1uZWdhdGl2ZXoeVG9vIG1hbnkgaW50ZWdyYXRpb24gY29uc3RhbnRzehZsYm5kIG11c3QgYmUgYSBzY2FsYXIuehVzY2wgbXVzdCBiZSBhIHNjYWxhci5OcisAAAByhQAAAHIqAAAAKRRyLwAAAHJPAAAAciwAAAByhgAAAHKHAAAAcogAAADaCGl0ZXJhYmxlclgAAAByiQAAAHJ8AAAAckAAAAByigAAAHIDAAAAcosAAADaBGxpc3RyWgAAANoDYWxsckEAAAByjAAAAHISAAAAKQxyMQAAAHKNAAAA2gFr2gRsYm5kckUAAAByjgAAAHKPAAAAcpAAAAByRwAAAHIyAAAAckoAAABySAAAAHMMAAAAICAgICAgICAgICAgcjQAAAByFAAAAHIUAAAAxwMAAHO2AgAAgAD1agIACQuMCJARmCGgJNAIJ9EIJ9QIJ4BB2AcIhHeEfJB/0Acm0Acm2AwNj0iKSJVSlFnRDB/UDB+IAd0LDYw7kHGJPow+8AABBRDYDQ6IQ4gB3QoM1AoemHHQIjzRCj3UCj2AQ90MDtQMIKAUoHrRDDLUDDKARdgHCohRgneAd90OGNAZSNEOSdQOSdAISd0HCogxgXaEdpADgnyAfN0OGNAZOdEOOtQOOtAIOt0HCYR3iHSBfYR9mAHSBxnQBxndDhjQGTHRDjLUDjLQCDLdBwmEd4hzgXyEfJBx0gcY0AcY3Q4Y0Bkw0Q4x1A4x0Agx3QwgoBWoAawG0Qwv1AwvgEXgBwqIYYJ4gHjYDxCICOUICowLkEGQdZhh0Qgg1AgggEHdCAyIUYkHjAeQMZAjkHOdU6ARmVacVpF80RIk0QgkgEHdDRKQM4lajFrwAA8FFPEADwUUiAHdDA+QAYlGjEaIAdgICYhTiQiIAdgLDJABijaINpVilGaYUZhxnFSgUZpZ0RYn1BYniDbYDA2IYYhEiESMRJBBkGGURIlMiESIRIlEiETlEhSUKJhBoAGZRZg4oGGkZ6hhqGKoYqRr0RsxuBG8F9ASQdESQdQSQYhD2BUWkHGUVJghkVaIQ5ABiUbYFRaQcZRUiEOQAYlG2A8QkDGKdYh12BkamDGcFJhhmRaQA5BBkQbdFRqYMZhhkVuUW/AAAg0v8AACDS+QAdgdHphxnFSgMaBhqCGhZaE50R0tkAOQQZgBkUWRCtgQE5BBmAGRRZAKkAqUCphhoAGcZKBBoHGoMaF1oUnRHi7REC6QCpAKkQqQCtgMD5ABiEaIRoxGkGGYAZRknVegVKgz0R0v1B0v0RYv0QwviEaIRolG2BATiEGJQd0ICowLkEGQcZgl0Qgg1AgggEHYCwyASHI2AAAAVGMDAAAAAAAAAAAAAAAGAAAAAwAAAPOcAgAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAfAFkAWQCrAOmAwAAqwMAAAAAAAAAAH0BfAFqAgAAAAAAAAAAagMAAAAAAAAAAGQEdgByH3wBoAQAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAAAAAAAAAGoFAAAAAAAAAACmAQAAqwEAAAAAAAAAAH0BdA0AAAAAAAAAAAAAfAB0DgAAAAAAAAAAAAB0EAAAAAAAAAAAAABmAqYCAACrAgAAAAAAAAAAchR0AQAAAAAAAAAAAABqCQAAAAAAAAAAfACmAQAAqwEAAAAAAAAAAH0AdA0AAAAAAAAAAAAAfAB0AAAAAAAAAAAAAABqCgAAAAAAAAAApgIAAKsCAAAAAAAAAAByJ3wCciV8AaALAAAAAAAAAAAAAAAAAAAAAAAAAAB8AWoMAAAAAAAAAABkBXwAag0AAAAAAAAAAHoFAAB6AAAApgEAAKsBAAAAAAAAAAB9AXQdAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAABkAWsCAAAAAHILfAFkBhkAAAAAAAAAAAB9A2QGfQRucnQdAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAABkB2sCAAAAAHIRfAFkBhkAAAAAAAAAAAB9A3wBZAEZAAAAAAAAAAAAfQRuTmQHfAB6BQAAfQV8AWQIGQAAAAAAAAAAAH0DfAFkCRkAAAAAAAAAAAB9BHQfAAAAAAAAAAAAAGQKdB0AAAAAAAAAAAAAfAGmAQAAqwEAAAAAAAAAAGQBegAAAKYCAACrAgAAAAAAAAAARABdGH0GfAN9B3wBfAYLABkAAAAAAAAAAAB8BHoKAAB9A3wHfAR8BXoFAAB6AAAAfQSMGXwDfAR8AHoFAAB6AAAAUwApC2FMCQAACiAgICBFdmFsdWF0ZSBhIENoZWJ5c2hldiBzZXJpZXMgYXQgcG9pbnRzIHguCgogICAgSWYgYGNgIGlzIG9mIGxlbmd0aCBgbiArIDFgLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlOgoKICAgIC4uIG1hdGg6OiBwKHgpID0gY18wICogVF8wKHgpICsgY18xICogVF8xKHgpICsgLi4uICsgY19uICogVF9uKHgpCgogICAgVGhlIHBhcmFtZXRlciBgeGAgaXMgY29udmVydGVkIHRvIGFuIGFycmF5IG9ubHkgaWYgaXQgaXMgYSB0dXBsZSBvciBhCiAgICBsaXN0LCBvdGhlcndpc2UgaXQgaXMgdHJlYXRlZCBhcyBhIHNjYWxhci4gSW4gZWl0aGVyIGNhc2UsIGVpdGhlciBgeGAKICAgIG9yIGl0cyBlbGVtZW50cyBtdXN0IHN1cHBvcnQgbXVsdGlwbGljYXRpb24gYW5kIGFkZGl0aW9uIGJvdGggd2l0aAogICAgdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYGNgLgoKICAgIElmIGBjYCBpcyBhIDEtRCBhcnJheSwgdGhlbiBgcCh4KWAgd2lsbCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFzIGB4YC4gIElmCiAgICBgY2AgaXMgbXVsdGlkaW1lbnNpb25hbCwgdGhlbiB0aGUgc2hhcGUgb2YgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZQogICAgdmFsdWUgb2YgYHRlbnNvcmAuIElmIGB0ZW5zb3JgIGlzIHRydWUgdGhlIHNoYXBlIHdpbGwgYmUgYy5zaGFwZVsxOl0gKwogICAgeC5zaGFwZS4gSWYgYHRlbnNvcmAgaXMgZmFsc2UgdGhlIHNoYXBlIHdpbGwgYmUgYy5zaGFwZVsxOl0uIE5vdGUgdGhhdAogICAgc2NhbGFycyBoYXZlIHNoYXBlICgsKS4KCiAgICBUcmFpbGluZyB6ZXJvcyBpbiB0aGUgY29lZmZpY2llbnRzIHdpbGwgYmUgdXNlZCBpbiB0aGUgZXZhbHVhdGlvbiwgc28KICAgIHRoZXkgc2hvdWxkIGJlIGF2b2lkZWQgaWYgZWZmaWNpZW5jeSBpcyBhIGNvbmNlcm4uCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgSWYgYHhgIGlzIGEgbGlzdCBvciB0dXBsZSwgaXQgaXMgY29udmVydGVkIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZQogICAgICAgIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGFuZCB0cmVhdGVkIGFzIGEgc2NhbGFyLiBJbiBlaXRoZXIgY2FzZSwgYHhgCiAgICAgICAgb3IgaXRzIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBhZGRpdGlvbiBhbmQgbXVsdGlwbGljYXRpb24gd2l0aAogICAgICAgIHRoZW1zZWx2ZXMgYW5kIHdpdGggdGhlIGVsZW1lbnRzIG9mIGBjYC4KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgY29lZmZpY2llbnRzIG9yZGVyZWQgc28gdGhhdCB0aGUgY29lZmZpY2llbnRzIGZvciB0ZXJtcyBvZgogICAgICAgIGRlZ3JlZSBuIGFyZSBjb250YWluZWQgaW4gY1tuXS4gSWYgYGNgIGlzIG11bHRpZGltZW5zaW9uYWwgdGhlCiAgICAgICAgcmVtYWluaW5nIGluZGljZXMgZW51bWVyYXRlIG11bHRpcGxlIHBvbHlub21pYWxzLiBJbiB0aGUgdHdvCiAgICAgICAgZGltZW5zaW9uYWwgY2FzZSB0aGUgY29lZmZpY2llbnRzIG1heSBiZSB0aG91Z2h0IG9mIGFzIHN0b3JlZCBpbgogICAgICAgIHRoZSBjb2x1bW5zIG9mIGBjYC4KICAgIHRlbnNvciA6IGJvb2xlYW4sIG9wdGlvbmFsCiAgICAgICAgSWYgVHJ1ZSwgdGhlIHNoYXBlIG9mIHRoZSBjb2VmZmljaWVudCBhcnJheSBpcyBleHRlbmRlZCB3aXRoIG9uZXMKICAgICAgICBvbiB0aGUgcmlnaHQsIG9uZSBmb3IgZWFjaCBkaW1lbnNpb24gb2YgYHhgLiBTY2FsYXJz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YCBpcyBhIDEtRCBhcnJheSBhIG9uZSBpcyBpbXBsaWNpdGx5IGFwcGVuZGVkIHRvIGl0cyBzaGFwZSB0byBtYWtlCiAgICBpdCAyLUQuIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUgYy5zaGFwZVsyOl0gKyB4LnNoYXBlLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHgsIHkgOiBhcnJheV9saWtlLCBjb21wYXRpYmxlIG9iamVjdHMKICAgICAgICBUaGUgdHdvIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhlIHBvaW50cyBgKHgsIHkpYCwKICAgICAgICB3aGVyZSBgeGAgYW5kIGB5YCBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUuIElmIGB4YCBvciBgeWAgaXMgYSBsaXN0CiAgICAgICAgb3IgdHVwbGUsIGl0IGlzIGZpcnN0IGNvbnZlcnRlZCB0byBhbiBuZGFycmF5LCBvdGhlcndpc2UgaXQgaXMgbGVmdAogICAgICAgIHVuY2hhbmdlZCBhbmQgaWYgaXQgaXNuJ3QgYW4gbmRhcnJheSBpdCBpcyB0cmVhdGVkIGFzIGEgc2NhbGFyLgogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBjb2VmZmljaWVudHMgb3JkZXJlZCBzbyB0aGF0IHRoZSBjb2VmZmljaWVudCBvZiB0aGUgdGVybQogICAgICAgIG9mIG11bHRpLWRlZ3JlZSBpLGogaXMgY29udGFpbmVkIGluIGBgY1tpLGpdYGAuIElmIGBjYCBoYXMKICAgICAgICBkaW1lbnNpb24gZ3JlYXRlciB0aGFuIDIgdGhlIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZQogICAgICAgIHNldHMgb2YgY29lZmZpY2llbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHZhbHVlcyBvZiB0aGUgdHdvIGRpbWVuc2lvbmFsIENoZWJ5c2hldiBzZXJpZXMgYXQgcG9pbnRzIGZvcm1lZAogICAgICAgIGZyb20gcGFpcnMgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSBgeGAgYW5kIGB5YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGNoZWJ2YWwsIGNoZWJncmlkMmQsIGNoZWJ2YWwzZCwgY2hlYmdyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgqQNyWAAAANoGX3ZhbG5kchIAAACpA3KeAAAA2gF5cjEAAABzAwAAACAgIHI0AAAAch8AAAByHwAAAJoEAABzGwAAAIAA9VwBAAwOjDmVV5hhoBGgQdELJtQLJtAEJnI2AAAAYwMAAAAAAAAAAAAAAAYAAAADAAAA8zoAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB8AnwAfAGmBAAAqwQAAAAAAAAAAFMAKQFh6QYAAAogICAgRXZhbHVhdGUgYSAyLUQgQ2hlYnlzaGV2IHNlcmllcyBvbiB0aGUgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgeCBhbmQgeS4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcChhLGIpID0gXHN1bV97aSxqfSBjX3tpLGp9ICogVF9pKGEpICogVF9qKGIpLAoKICAgIHdoZXJlIHRoZSBwb2ludHMgYChhLCBiKWAgY29uc2lzdCBvZiBhbGwgcGFpcnMgZm9ybWVkIGJ5IHRha2luZwogICAgYGFgIGZyb20gYHhgIGFuZCBgYmAgZnJvbSBgeWAuIFRoZSByZXN1bHRpbmcgcG9pbnRzIGZvcm0gYSBncmlkIHdpdGgKICAgIGB4YCBpbiB0aGUgZmlyc3QgZGltZW5zaW9uIGFuZCBgeWAgaW4gdGhlIHNlY29uZC4KCiAgICBUaGUgcGFyYW1ldGVycyBgeGAgYW5kIGB5YCBhcmUgY29udmVydGVkIHRvIGFycmF5cyBvbmx5IGlmIHRoZXkgYXJlCiAgICB0dXBsZXMgb3IgYSBsaXN0cywgb3RoZXJ3aXNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYSBzY2FsYXJzLiBJbiBlaXRoZXIKICAgIGNhc2UsIGVpdGhlciBgeGAgYW5kIGB5YCBvciB0aGVpciBlbGVtZW50cyBtdXN0IHN1cHBvcnQgbXVsdGlwbGljYXRpb24KICAgIGFuZCBhZGRpdGlvbiBib3RoIHdpdGggdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYGNgLgoKICAgIElmIGBjYCBoYXMgZmV3ZXIgdGhhbiB0d28gZGltZW5zaW9ucywgb25lcyBhcmUgaW1wbGljaXRseSBhcHBlbmRlZCB0bwogICAgaXRzIHNoYXBlIHRvIG1ha2UgaXQgMi1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMjpdICsKICAgIHguc2hhcGUgKyB5LnNoYXBlLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHgsIHkgOiBhcnJheV9saWtlLCBjb21wYXRpYmxlIG9iamVjdHMKICAgICAgICBUaGUgdHdvIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhlIHBvaW50cyBpbiB0aGUKICAgICAgICBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiBgeGAgYW5kIGB5YC4gIElmIGB4YCBvciBgeWAgaXMgYSBsaXN0IG9yCiAgICAgICAgdHVwbGUsIGl0IGlzIGZpcnN0IGNvbnZlcnRlZCB0byBhbiBuZGFycmF5LCBvdGhlcndpc2UgaXQgaXMgbGVmdAogICAgICAgIHVuY2hhbmdlZCBhbmQsIGlmIGl0IGlzbid0IGFuIG5kYXJyYXksIGl0IGlzIHRyZWF0ZWQgYXMgYSBzY2FsYXIuCiAgICBjIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIGNvZWZmaWNpZW50cyBvcmRlcmVkIHNvIHRoYXQgdGhlIGNvZWZmaWNpZW50IG9mIHRoZSB0ZXJtIG9mCiAgICAgICAgbXVsdGktZGVncmVlIGksaiBpcyBjb250YWluZWQgaW4gYGNbaSxqXWAuIElmIGBjYCBoYXMgZGltZW5zaW9uCiAgICAgICAgZ3JlYXRlciB0aGFuIHR3byB0aGUgcmVtYWluaW5nIGluZGljZXMgZW51bWVyYXRlIG11bHRpcGxlIHNldHMgb2YKICAgICAgICBjb2VmZmljaWVudHMuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdmFsdWVzIDogbmRhcnJheSwgY29tcGF0aWJsZSBvYmplY3QKICAgICAgICBUaGUgdmFsdWVzIG9mIHRoZSB0d28gZGltZW5zaW9uYWwgQ2hlYnlzaGV2IHNlcmllcyBhdCBwb2ludHMgaW4gdGhlCiAgICAgICAgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgYHhgIGFuZCBgeWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBjaGVidmFsLCBjaGVidmFsMmQsIGNoZWJ2YWwzZCwgY2hlYmdyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgqQNyWAAAANoHX2dyaWRuZHISAAAAcqQAAABzAwAAACAgIHI0AAAAciEAAAByIQAAAMsEAABzGwAAAIAA9WQBAAwOjDqVZ5hxoCGgUdELJ9QLJ9AEJ3I2AAAAYwQAAAAAAAAAAAAAAAcAAAADAAAA8zwAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB8A3wAfAF8AqYFAACrBQAAAAAAAAAAUwApAWGjBgAACiAgICBFdmFsdWF0ZSBhIDMtRCBDaGVieXNoZXYgc2VyaWVzIGF0IHBvaW50cyAoeCwgeSwgeikuCgogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZXM6CgogICAgLi4gbWF0aDo6IHAoeCx5LHopID0gXHN1bV97aSxqLGt9IGNfe2ksaixrfSAqIFRfaSh4KSAqIFRfaih5KSAqIFRfayh6KQoKICAgIFRoZSBwYXJhbWV0ZXJzIGB4YCwgYHlgLCBhbmQgYHpgIGFyZSBjb252ZXJ0ZWQgdG8gYXJyYXlzIG9ubHkgaWYKICAgIHRoZXkgYXJlIHR1cGxlcyBvciBhIGxpc3RzLCBvdGhlcndpc2UgdGhleSBhcmUgdHJlYXRlZCBhcyBhIHNjYWxhcnMgYW5kCiAgICB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSBzaGFwZSBhZnRlciBjb252ZXJzaW9uLiBJbiBlaXRoZXIgY2FzZSwgZWl0aGVyCiAgICBgeGAsIGB5YCwgYW5kIGB6YCBvciB0aGVpciBlbGVtZW50cyBtdXN0IHN1cHBvcnQgbXVsdGlwbGljYXRpb24gYW5kCiAgICBhZGRpdGlvbiBib3RoIHdpdGggdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYGNgLgoKICAgIElmIGBjYCBoYXMgZmV3ZXIgdGhhbiAzIGRpbWVuc2lvbnMsIG9uZXMgYXJlIGltcGxpY2l0bHkgYXBwZW5kZWQgdG8gaXRzCiAgICBzaGFwZSB0byBtYWtlIGl0IDMtRC4gVGhlIHNoYXBlIG9mIHRoZSByZXN1bHQgd2lsbCBiZSBjLnNoYXBlWzM6XSArCiAgICB4LnNoYXBlLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHgsIHksIHogOiBhcnJheV9saWtlLCBjb21wYXRpYmxlIG9iamVjdAogICAgICAgIFRoZSB0aHJlZSBkaW1lbnNpb25hbCBzZXJpZXMgaXMgZXZhbHVhdGVkIGF0IHRoZSBwb2ludHMKICAgICAgICBgKHgsIHksIHopYCwgd2hlcmUgYHhgLCBgeWAsIGFuZCBgemAgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlLiAgSWYKICAgICAgICBhbnkgb2YgYHhgLCBgeWAsIG9yIGB6YCBpcyBhIGxpc3Qgb3IgdHVwbGUsIGl0IGlzIGZpcnN0IGNvbnZlcnRlZAogICAgICAgIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZSBpdCBpcyBsZWZ0IHVuY2hhbmdlZCBhbmQgaWYgaXQgaXNuJ3QgYW4KICAgICAgICBuZGFycmF5IGl0IGlzICB0cmVhdGVkIGFzIGEgc2NhbGFyLgogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBjb2VmZmljaWVudHMgb3JkZXJlZCBzbyB0aGF0IHRoZSBjb2VmZmljaWVudCBvZiB0aGUgdGVybSBvZgogICAgICAgIG11bHRpLWRlZ3JlZSBpLGosayBpcyBjb250YWluZWQgaW4gYGBjW2ksaixrXWBgLiBJZiBgY2AgaGFzIGRpbWVuc2lvbgogICAgICAgIGdyZWF0ZXIgdGhhbiAzIHRoZSByZW1haW5pbmcgaW5kaWNlcyBlbnVtZXJhdGUgbXVsdGlwbGUgc2V0cyBvZgogICAgICAgIGNvZWZmaWNpZW50cy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICB2YWx1ZXMgOiBuZGFycmF5LCBjb21wYXRpYmxlIG9iamVjdAogICAgICAgIFRoZSB2YWx1ZXMgb2YgdGhlIG11bHRpZGltZW5zaW9uYWwgcG9seW5vbWlhbCBvbiBwb2ludHMgZm9ybWVkIHdpdGgKICAgICAgICB0cmlwbGVzIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZyb20gYHhgLCBgeWAsIGFuZCBgemAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBjaGVidmFsLCBjaGVidmFsMmQsIGNoZWJncmlkMmQsIGNoZWJncmlkM2QKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIHKiAAAAqQRyngAAAHKlAAAA2gF6cjEAAABzBAAAACAgICByNAAAAHIgAAAAciAAAAAABQAAcx0AAACAAPVgAQAMDow5lVeYYaARoEGgcdELKdQLKdAEKXI2AAAAYwQAAAAAAAAAAAAAAAcAAAADAAAA8zwAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB8A3wAfAF8AqYFAACrBQAAAAAAAAAAUwApAWFQBwAACiAgICBFdmFsdWF0ZSBhIDMtRCBDaGVieXNoZXYgc2VyaWVzIG9uIHRoZSBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB4LCB5LCBhbmQgei4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcChhLGIsYykgPSBcc3VtX3tpLGosa30gY197aSxqLGt9ICogVF9pKGEpICogVF9qKGIpICogVF9rKGMpCgogICAgd2hlcmUgdGhlIHBvaW50cyBgKGEsIGIsIGMpYCBjb25zaXN0IG9mIGFsbCB0cmlwbGVzIGZvcm1lZCBieSB0YWtpbmcKICAgIGBhYCBmcm9tIGB4YCwgYGJgIGZyb20gYHlgLCBhbmQgYGNgIGZyb20gYHpgLiBUaGUgcmVzdWx0aW5nIHBvaW50cyBmb3JtCiAgICBhIGdyaWQgd2l0aCBgeGAgaW4gdGhlIGZpcnN0IGRpbWVuc2lvbiwgYHlgIGluIHRoZSBzZWNvbmQsIGFuZCBgemAgaW4KICAgIHRoZSB0aGlyZC4KCiAgICBUaGUgcGFyYW1ldGVycyBgeGAsIGB5YCwgYW5kIGB6YCBhcmUgY29udmVydGVkIHRvIGFycmF5cyBvbmx5IGlmIHRoZXkKICAgIGFyZSB0dXBsZXMgb3IgYSBsaXN0cywgb3RoZXJ3aXNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYSBzY2FsYXJzLiBJbgogICAgZWl0aGVyIGNhc2UsIGVpdGhlciBgeGAsIGB5YCwgYW5kIGB6YCBvciB0aGVpciBlbGVtZW50cyBtdXN0IHN1cHBvcnQKICAgIG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBib3RoIHdpdGggdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMKICAgIG9mIGBjYC4KCiAgICBJZiBgY2AgaGFzIGZld2VyIHRoYW4gdGhyZWUgZGltZW5zaW9ucywgb25lcyBhcmUgaW1wbGljaXRseSBhcHBlbmRlZCB0bwogICAgaXRzIHNoYXBlIHRvIG1ha2UgaXQgMy1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMzpdICsKICAgIHguc2hhcGUgKyB5LnNoYXBlICsgei5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5LCB6IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3RzCiAgICAgICAgVGhlIHRocmVlIGRpbWVuc2lvbmFsIHNlcmllcyBpcyBldmFsdWF0ZWQgYXQgdGhlIHBvaW50cyBpbiB0aGUKICAgICAgICBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiBgeGAsIGB5YCwgYW5kIGB6YC4gIElmIGB4YCxgeWAsIG9yIGB6YCBpcyBhCiAgICAgICAgbGlzdCBvciB0dXBsZSwgaXQgaXMgZmly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bnMgb2YgYFZgCiAgICBjb3JyZXNwb25kIHRvIHRoZSBlbGVtZW50cyBvZiBhIDItRCBjb2VmZmljaWVudCBhcnJheSBgY2Agb2Ygc2hhcGUKICAgICh4ZGVnICsgMSwgeWRlZyArIDEpIGluIHRoZSBvcmRlcgoKICAgIC4uIG1hdGg6OiBjX3swMH0sIGNfezAxfSwgY197MDJ9IC4uLiAsIGNfezEwfSwgY197MTF9LCBjX3sxMn0gLi4uCgogICAgYW5kIGBgbnAuZG90KFYsIGMuZmxhdClgYCBhbmQgYGBjaGVidmFsMmQoeCwgeSwgYylgYCB3aWxsIGJlIHRoZSBzYW1lCiAgICB1cCB0byByb3VuZG9mZi4gVGhpcyBlcXVpdmFsZW5jZSBpcyB1c2VmdWwgYm90aCBmb3IgbGVhc3Qgc3F1YXJlcwogICAgZml0dGluZyBhbmQgZm9yIHRoZSBldmFsdWF0aW9uIG9mIGEgbGFyZ2UgbnVtYmVyIG9mIDItRCBDaGVieXNoZXYKICAgIHNlcmllcyBvZiB0aGUgc2FtZSBkZWdyZWVzIGFuZCBzYW1wbGUgcG9pbnRzLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHgsIHkgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXlzIG9mIHBvaW50IGNvb3JkaW5hdGVzLCBhbGwgb2YgdGhlIHNhbWUgc2hhcGUuIFRoZSBkdHlwZXMKICAgICAgICB3aWxsIGJlIGNvbnZlcnRlZCB0byBlaXRoZXIgZmxvYXQ2NCBvciBjb21wbGV4MTI4IGRlcGVuZGluZyBvbgogICAgICAgIHdoZXRoZXIgYW55IG9mIHRoZSBlbGVtZW50cyBhcmUgY29tcGxleC4gU2NhbGFycyBhcmUgY29udmVydGVkIHRvCiAgICAgICAgMS1EIGFycmF5cy4KICAgIGRlZyA6IGxpc3Qgb2YgaW50cwogICAgICAgIExpc3Qgb2YgbWF4aW11bSBkZWdyZWVzIG9mIHRoZSBmb3JtIFt4X2RlZywgeV9kZWddLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbmRlcjJkIDogbmRhcnJheQogICAgICAgIFRoZSBzaGFwZSBvZiB0aGUgcmV0dXJuZWQgbWF0cml4IGlzIGBgeC5zaGFwZSArIChvcmRlciwpYGAsIHdoZXJlCiAgICAgICAgOm1hdGg6YG9yZGVyID0gKGRlZ1swXSsxKSooZGVnWzFdKzEpYC4gIFRoZSBkdHlwZSB3aWxsIGJlIHRoZSBzYW1lCiAgICAgICAgYXMgdGhlIGNvbnZlcnRlZCBgeGAgYW5kIGB5YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGNoZWJ2YW5kZXIsIGNoZWJ2YW5kZXIzZCwgY2hlYnZhbDJkLCBjaGVidmFsM2QKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIKkDclgAAADaD192YW5kZXJfbmRfZmxhdHIYAAAAKQNyngAAAHKlAAAAclwAAABzAwAAACAgIHI0AAAAciMAAAByIwAAAKAFAABzIwAAAIAA9WQBAAwO1AsdnXqtOtAeNrgRuEG4BsAD0QtE1AtE0AREcjYAAABjBAAAAAAAAAAAAAAABgAAAAMAAADzWAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHQEAAAAAAAAAAAAAHQEAAAAAAAAAAAAAHQEAAAAAAAAAAAAAGYDfAB8AXwCZgN8A6YDAACrAwAAAAAAAAAAUwApAWEdBwAAUHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeCBvZiBnaXZlbiBkZWdyZWVzLgoKICAgIFJldHVybnMgdGhlIHBzZXVkby1WYW5kZXJtb25kZSBtYXRyaXggb2YgZGVncmVlcyBgZGVnYCBhbmQgc2FtcGxlCiAgICBwb2ludHMgYCh4LCB5LCB6KWAuIElmIGBsLCBtLCBuYCBhcmUgdGhlIGdpdmVuIGRlZ3JlZXMgaW4gYHgsIHksIHpgLAogICAgdGhlbiBUaGUgcHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeCBpcyBkZWZpbmVkIGJ5CgogICAgLi4gbWF0aDo6IFZbLi4uLCAobSsxKShuKzEpaSArIChuKzEpaiArIGtdID0gVF9pKHgpKlRfaih5KSpUX2soeiksCgogICAgd2hlcmUgYDAgPD0gaSA8PSBsYCwgYDAgPD0gaiA8PSBtYCwgYW5kIGAwIDw9IGogPD0gbmAuICBUaGUgbGVhZGluZwogICAgaW5kaWNlcyBvZiBgVmAgaW5kZXggdGhlIHBvaW50cyBgKHgsIHksIHopYCBhbmQgdGhlIGxhc3QgaW5kZXggZW5jb2RlcwogICAgdGhlIGRlZ3JlZXMgb2YgdGhlIENoZWJ5c2hldiBwb2x5bm9taWFscy4KCiAgICBJZiBgYFYgPSBjaGVidmFuZGVyM2QoeCwgeSwgeiwgW3hkZWcsIHlkZWcsIHpkZWddKWBgLCB0aGVuIHRoZSBjb2x1bW5zCiAgICBvZiBgVmAgY29ycmVzcG9uZCB0byB0aGUgZWxlbWVudHMgb2YgYSAzLUQgY29lZmZpY2llbnQgYXJyYXkgYGNgIG9mCiAgICBzaGFwZSAoeGRlZyArIDEsIHlkZWcgKyAxLCB6ZGVnICsgMSkgaW4gdGhlIG9yZGVyCgogICAgLi4gbWF0aDo6IGNfezAwMH0sIGNfezAwMX0sIGNfezAwMn0sLi4uICwgY197MDEwfSwgY197MDExfSwgY197MDEyfSwuLi4KCiAgICBhbmQgYGBucC5kb3QoViwgYy5mbGF0KWBgIGFuZCBgYGNoZWJ2YWwzZCh4LCB5LCB6LCBjKWBgIHdpbGwgYmUgdGhlCiAgICBzYW1lIHVwIHRvIHJvdW5kb2ZmLiBUaGlzIGVxdWl2YWxlbmNlIGlzIHVzZWZ1bCBib3RoIGZvciBsZWFzdCBzcXVhcmVzCiAgICBmaXR0aW5nIGFuZCBmb3IgdGhlIGV2YWx1YXRpb24gb2YgYSBsYXJnZSBudW1iZXIgb2YgMy1EIENoZWJ5c2hldgogICAgc2VyaWVzIG9mIHRoZSBzYW1lIGRlZ3JlZXMgYW5kIHNhbXBsZSBwb2ludHMuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSwgeiA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheXMgb2YgcG9pbnQgY29vcmRpbmF0ZXMsIGFsbCBvZiB0aGUgc2FtZSBzaGFwZS4gVGhlIGR0eXBlcyB3aWxsCiAgICAgICAgYmUgY29udmVydGVkIHRvIGVpdGhlciBmbG9hdDY0IG9yIGNvbXBsZXgxMjggZGVwZW5kaW5nIG9uIHdoZXRoZXIKICAgICAgICBhbnkgb2YgdGhlIGVsZW1lbnRzIGFyZSBjb21wbGV4LiBTY2FsYXJzIGFyZSBjb252ZXJ0ZWQgdG8gMS1ECiAgICAgICAgYXJyYXlzLgogICAgZGVnIDogbGlzdCBvZiBpbnRzCiAgICAgICAgTGlzdCBvZiBtYXhpbXVtIGRlZ3JlZXMgb2YgdGhlIGZvcm0gW3hfZGVnLCB5X2RlZywgel9kZWddLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbmRlcjNkIDogbmRhcnJheQogICAgICAgIFRoZSBzaGFwZSBvZiB0aGUgcmV0dXJuZWQgbWF0cml4IGlzIGBgeC5zaGFwZSArIChvcmRlciwpYGAsIHdoZXJlCiAgICAgICAgOm1hdGg6YG9yZGVyID0gKGRlZ1swXSsxKSooZGVnWzFdKzEpKihkZWdbMl0rMSlgLiAgVGhlIGR0eXBlIHdpbGwKICAgICAgICBiZSB0aGUgc2FtZSBhcyB0aGUgY29udmVydGVkIGB4YCwgYHlgLCBhbmQgYHpgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgY2hlYnZhbmRlciwgY2hlYnZhbmRlcjNkLCBjaGVidmFsMmQsIGNoZWJ2YWwzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgcrMAAAApBHKeAAAAcqUAAAByqwAAAHJcAAAAcwQAAAAgICAgcjQAAAByJAAAAHIkAAAA1QUAAHMnAAAAgAD1ZgEADA7UCx2deq06tXrQHkLAUcgByDHASchz0QtT1AtT0ARTcjYAAABGYwYAAAAAAAAAAAAAAAkAAAADAAAA80AAAACXAHQBAAAAAAAAAAAAAGoBAAAAAAAAAAB0BAAAAAAAAAAAAAB8AHwBfAJ8A3wEfAWmBwAAqwcAAAAAAAAAAFMAKQFhKBQAAAogICAgTGVhc3Qgc3F1YXJlcyBmaXQgb2YgQ2hlYnlzaGV2IHNlcmllcyB0byBkYXRhLgoKICAgIFJldHVybiB0aGUgY29lZmZpY2llbnRzIG9mIGEgQ2hlYnlzaGV2IHNlcmllcyBvZiBkZWdyZWUgYGRlZ2AgdGhhdCBpcyB0aGUKICAgIGxlYXN0IHNxdWFyZXMgZml0IHRvIHRoZSBkYXRhIHZhbHVlcyBgeWAgZ2l2ZW4gYXQgcG9pbnRzIGB4YC4gSWYgYHlgIGlzCiAgICAxLUQgdGhlIHJldHVybmVkIGNvZWZmaWNpZW50cyB3aWxsIGFsc28gYmUgMS1ELiBJZiBgeWAgaXMgMi1EIG11bHRpcGxlCiAgICBmaXRzIGFyZSBkb25lLCBvbmUgZm9yIGVhY2ggY29sdW1uIG9mIGB5YCwgYW5kIHRoZSByZXN1bHRpbmcKICAgIGNvZWZmaWNpZW50cyBhcmUgc3RvcmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGNvbHVtbnMgb2YgYSAyLUQgcmV0dXJuLgogICAgVGhlIGZpdHRlZCBwb2x5bm9taWFsKHMpIGFyZSBpbiB0aGUgZm9ybQoKICAgIC4uIG1hdGg6OiAgcCh4KSA9IGNfMCArIGNfMSAqIFRfMSh4KSArIC4uLiArIGNfbiAqIFRfbih4KSwKCiAgICB3aGVyZSBgbmAgaXMgYGRlZ2AuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCA6IGFycmF5X2xpa2UsIHNoYXBlIChNLCkKICAgICAgICB4LWNvb3JkaW5hdGVzIG9mIHRoZSBNIHNhbXBsZSBwb2ludHMgYGAoeFtpXSwgeVtpXSlgYC4KICAgIHkgOiBhcnJheV9saWtlLCBzaGFwZSAoTSwpIG9yIChNLCBLKQogICAgICAgIHktY29vcmRpbmF0ZXMgb2YgdGhlIHNhbXBsZSBwb2ludHMuIFNldmVyYWwgZGF0YSBzZXRzIG9mIHNhbXBsZQogICAgICAgIHBvaW50cyBzaGFyaW5nIHRoZSBzYW1lIHgtY29vcmRpbmF0ZXMgY2FuIGJlIGZpdHRlZCBhdCBvbmNlIGJ5CiAgICAgICAgcGFzc2luZyBpbiBhIDJELWFycmF5IHRoYXQgY29udGFpbnMgb25lIGRhdGFzZXQgcGVyIGNvbHVtbi4KICAgIGRlZyA6IGludCBvciAxLUQgYXJyYXlfbGlrZQogICAgICAgIERlZ3JlZShzKSBvZiB0aGUgZml0dGluZyBwb2x5bm9taWFscy4gSWYgYGRlZ2AgaXMgYSBzaW5nbGUgaW50ZWdlciwKICAgICAgICBhbGwgdGVybXMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgYGRlZ2AndGggdGVybSBhcmUgaW5jbHVkZWQgaW4gdGhlCiAgICAgICAgZml0LiBGb3IgTnVtUHkgdmVyc2lvbnMgPj0gMS4xMS4wIGEgbGlzdCBvZiBpbnRlZ2VycyBzcGVjaWZ5aW5nIHRoZQogICAgICAgIGRlZ3JlZXMgb2YgdGhlIHRlcm1zIHRvIGluY2x1ZGUgbWF5IGJlIHVzZWQgaW5zdGVhZC4KICAgIHJjb25kIDogZmxvYXQsIG9wdGlvbmFsCiAgICAgICAgUmVsYXRpdmUgY29uZGl0aW9uIG51bWJlciBvZiB0aGUgZml0LiBTaW5ndWxhciB2YWx1ZXMgc21hbGxlciB0aGFuCiAgICAgICAgdGhpcyByZWxhdGl2ZSB0byB0aGUgbGFyZ2VzdCBzaW5ndWxhciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuIFRoZQogICAgICAgIGRlZmF1bHQgdmFsdWUgaXMgbGVuKHgpKmVwcywgd2hlcmUgZXBzIGlzIHRoZSByZWxhdGl2ZSBwcmVjaXNpb24gb2YKICAgICAgICB0aGUgZmxvYXQgdHlwZSwgYWJvdXQgMmUtMTYgaW4gbW9zdCBjYXNlcy4KICAgIGZ1bGwgOiBib29sLCBvcHRpb25hbAogICAgICAgIFN3aXRjaCBkZXRlcm1pbmluZyBuYXR1cmUgb2YgcmV0dXJuIHZhbHVlLiBXaGVuIGl0IGlzIEZhbHNlICh0aGUKICAgICAgICBkZWZhdWx0KSBqdXN0IHRoZSBjb2VmZmljaWVudHMgYXJlIHJldHVybmVkLCB3aGVuIFRydWUgZGlhZ25vc3RpYwogICAgICAgIGluZm9ybWF0aW9uIGZyb20gdGhlIHNpbmd1bGFyIHZhbHVlIGRlY29tcG9zaXRpb24gaXMgYWxzbyByZXR1cm5lZC4KICAgIHcgOiBhcnJheV9saWtlLCBzaGFwZSAoYE1gLCksIG9wdGlvbmFsCiAgICAgICAgV2VpZ2h0cy4gSWYgbm90IE5vbmUsIHRoZSB3ZWlnaHQgYGB3W2ldYGAgYXBwbGllcyB0byB0aGUgdW5zcXVhcmVkCiAgICAgICAgcmVzaWR1YWwgYGB5W2ldIC0geV9oYXRbaV1gYCBhdCBgYHhbaV1gYC4gSWRlYWxseSB0aGUgd2VpZ2h0cyBhcmUKICAgICAgICBjaG9zZW4gc28gdGhhdCB0aGUgZXJyb3JzIG9mIHRoZSBwcm9kdWN0cyBgYHdbaV0qeVtpXWBgIGFsbCBoYXZlIHRoZQogICAgICAgIHNhbWUgdmFyaWFuY2UuICBXaGVuIHVzaW5nIGludmVyc2UtdmFyaWFuY2Ugd2VpZ2h0aW5nLCB1c2UKICAgICAgICBgYHdbaV0gPSAxL3NpZ21hKHlbaV0pYGAuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjUuMAoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGNvZWYgOiBuZGFycmF5LCBzaGFwZSAoTSwpIG9yIChNLCBLKQogICAgICAgIENoZWJ5c2hldiBjb2VmZmljaWVudHMgb3JkZXJlZCBmcm9tIGxvdyB0byBoaWdoLiBJZiBgeWAgd2FzIDItRCwKICAgICAgICB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUgZGF0YSBpbiBjb2x1bW4gayAgb2YgYHlgIGFyZSBpbiBjb2x1bW4KICAgICAgICBga2AuCgogICAgW3Jlc2lkdWFscywgcmFuaywgc2luZ3VsYXJfdmFsdWVzLCByY29uZF0gOiBsaXN0CiAgICAgICAgVGhlc2UgdmFsdWVzIGFyZSBvbmx5IHJldHVybmVkIGlmIGBgZnVsbCA9PSBUcnVlYGAKCiAgICAgICAgLSByZXNpZHVhbHMgLS0gc3VtIG9mIHNxdWFyZWQgcmVzaWR1YWxzIG9mIHRoZSBsZWFzdCBzcXVhcmVzIGZpdAogICAgICAgIC0gcmFuayAtLSB0aGUgbnVtZXJpY2FsIHJhbmsgb2YgdGhlIHNjYWxlZCBWYW5kZXJtb25kZSBtYXRyaXgKICAgICAgICAtIHNpbmd1bGFyX3ZhbHVlcyAtLSBzaW5ndWxhciB2YWx1ZXMgb2YgdGhlIHNjYWxlZCBWYW5kZXJtb25kZSBtYXRyaXgKICAgICAgICAtIHJjb25kIC0tIHZhbHVlIG9mIGByY29uZGAuCgogICAgICAgIEZvciBtb3JlIGRldGFpbHMsIHNlZSBgbnVtcHkubGluYWxnLmxzdHNxYC4KCiAgICBXYXJucwogICAgLS0tLS0KICAgIFJhbmtXYXJuaW5nCiAgICAgICAgVGhlIHJhbmsgb2YgdGhlIGNvZWZmaWNpZW50IG1hdHJpeCBpbiB0aGUgbGVhc3Qtc3F1YXJlcyBmaXQgaXMKICAgICAgICBkZWZpY2llbnQuIFRoZSB3YXJuaW5nIGlzIG9ubHkgcmFpc2VkIGlmIGBgZnVsbCA9PSBGYWxzZWBgLiAgVGhlCiAgICAgICAgd2FybmluZ3MgY2FuIGJlIHR1cm5lZCBvZmYgYnkKCiAgICAgICAgPj4+IGltcG9ydCB3YXJuaW5ncwogICAgICAgID4+PiB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIG5wLlJhbmtXYXJuaW5nKQoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgbnVtcHkucG9seW5vbWlhbC5wb2x5bm9taWFsLnBvbHlmaXQKICAgIG51bXB5LnBvbHlub21pYWwubGVnZW5kcmUubGVnZml0CiAgICBudW1weS5wb2x5bm9taWFsLmxhZ3VlcnJlLmxhZ2ZpdAogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlLmhlcm1maXQKICAgIG51bXB5LnBvbHlub21pYWwuaGVybWl0ZV9lLmhlcm1lZml0CiAgICBjaGVidmFsIDogRXZhbHVhdGVzIGEgQ2hlYnlzaGV2IHNlcmllcy4KICAgIGNoZWJ2YW5kZXIgOiBWYW5kZXJtb25kZSBtYXRyaXggb2YgQ2hlYnlzaGV2IHNlcmllcy4KICAgIGNoZWJ3ZWlnaHQgOiBDaGVieXNoZXYgd2VpZ2h0IGZ1bmN0aW9uLgogICAgbnVtcHkubGluYWxnLmxzdHNxIDogQ29tcHV0ZXMgYSBsZWFzdC1zcXVhcmVzIGZpdCBmcm9tIHRoZSBtYXRyaXguCiAgICBzY2lweS5pbnRlcnBvbGF0ZS5Vbml2YXJpYXRlU3BsaW5lIDogQ29tcHV0ZXMgc3BsaW5lIGZpdHMuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBUaGUgc29sdXRpb24gaXMgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgQ2hlYnlzaGV2IHNlcmllcyBgcGAgdGhhdAogICAgbWluaW1pemVzIHRoZSBzdW0gb2YgdGhlIHdlaWdodGVkIHNxdWFyZWQgZXJyb3JzCgogICAgLi4gbWF0aDo6IEUgPSBcc3VtX2ogd19qXjIgKiB8eV9qIC0gcCh4X2opfF4yLAoKICAgIHdoZXJlIDptYXRoOmB3X2pgIGFyZSB0aGUgd2VpZ2h0cy4gVGhpcyBwcm9ibGVtIGlzIHNvbHZlZCBieSBzZXR0aW5nIHVwCiAgICBhcyB0aGUgKHR5cGljYWxseSkgb3ZlcmRldGVybWluZWQgbWF0cml4IGVxdWF0aW9uCgogICAgLi4gbWF0aDo6IFYoeCkgKiBjID0gdyAqIHksCgogICAgd2hlcmUgYFZgIGlzIHRoZSB3ZWlnaHRlZCBwc2V1ZG8gVmFuZGVybW9uZGUgbWF0cml4IG9mIGB4YCwgYGNgIGFyZSB0aGUKICAgIGNvZWZmaWNpZW50cyB0byBiZSBzb2x2ZWQgZm9yLCBgd2AgYXJlIHRoZSB3ZWlnaHRzLCBhbmQgYHlgIGFyZSB0aGUKICAgIG9ic2VydmVkIHZhbHVlcy4gIFRoaXMgZXF1YXRpb24gaXMgdGhlbiBzb2x2ZWQgdXNpbmcgdGhlIHNpbmd1bGFyIHZhbHVlCiAgICBkZWNvbXBvc2l0aW9uIG9mIGBWYC4KCiAgICBJZiBzb21lIG9mIHRoZSBzaW5ndWxhciB2YWx1ZXMgb2YgYFZgIGFyZSBzbyBzbWFsbCB0aGF0IHRoZXkgYXJlCiAgICBuZWdsZWN0ZWQsIHRoZW4gYSBgUmFua1dhcm5pbmdgIHdpbGwgYmUgaXNzdWVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlCiAgICBjb2VmZmljaWVudCB2YWx1ZXMgbWF5IGJlIHBvb3JseSBkZXRlcm1pbmVkLiBVc2luZyBhIGxvd2VyIG9yZGVyIGZpdAogICAgd2lsbCB1c3VhbGx5IGdldCByaWQgb2YgdGhlIHdhcm5pbmcuICBUaGUgYHJjb25kYCBwYXJhbWV0ZXIgY2FuIGFsc28gYmUKICAgIHNldCB0byBhIHZhbHVlIHNtYWxsZXIgdGhhbiBpdHMgZGVmYXVsdCwgYnV0IHRo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YWd1ZXJyZS5sYWdyb290cwogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlLmhlcm1yb290cwogICAgbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlX2UuaGVybWVyb290cwoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgVGhlIHJvb3QgZXN0aW1hdGVzIGFyZSBvYnRhaW5lZCBhcyB0aGUgZWlnZW52YWx1ZXMgb2YgdGhlIGNvbXBhbmlvbgogICAgbWF0cml4LCBSb290cyBmYXIgZnJvbSB0aGUgb3JpZ2luIG9mIHRoZSBjb21wbGV4IHBsYW5lIG1heSBoYXZlIGxhcmdlCiAgICBlcnJvcnMgZHVlIHRvIHRoZSBudW1lcmljYWwgaW5zdGFiaWxpdHkgb2YgdGhlIHNlcmllcyBmb3Igc3VjaAogICAgdmFsdWVzLiBSb290cyB3aXRoIG11bHRpcGxpY2l0eSBncmVhdGVyIHRoYW4gMSB3aWxsIGFsc28gc2hvdyBsYXJnZXIKICAgIGVycm9ycyBhcyB0aGUgdmFsdWUgb2YgdGhlIHNlcmllcyBuZWFyIHN1Y2ggcG9pbnRzIGlzIHJlbGF0aXZlbHkKICAgIGluc2Vuc2l0aXZlIHRvIGVycm9ycyBpbiB0aGUgcm9vdHMuIElzb2xhdGVkIHJvb3RzIG5lYXIgdGhlIG9yaWdpbiBjYW4KICAgIGJlIGltcHJvdmVkIGJ5IGEgZmV3IGl0ZXJhdGlvbnMgb2YgTmV3dG9uJ3MgbWV0aG9kLgoKICAgIFRoZSBDaGVieXNoZXYgc2VyaWVzIGJhc2lzIHBvbHlub21pYWxzIGFyZW4ndCBwb3dlcnMgb2YgYHhgIHNvIHRoZQogICAgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0aW9uIG1heSBzZWVtIHVuaW50dWl0aXZlLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGltcG9ydCBudW1weS5wb2x5bm9taWFsLmNoZWJ5c2hldiBhcyBjaGViCiAgICA+Pj4gY2hlYi5jaGVicm9vdHMoKC0xLCAxLC0xLCAxKSkgIyBUMyAtIFQyICsgVDEgLSBUMCBoYXMgcmVhbCByb290cwogICAgYXJyYXkoWyAtNS4wMDAwMDAwMGUtMDEsICAgMi42MDg2MDY4NGUtMTcsICAgMS4wMDAwMDAwMGUrMDBdKSAjIG1heSB2YXJ5CgogICAgcioAAAByKwAAAHICAAAAcgQAAABOci0AAAApCnJYAAAAclkAAAByQAAAAHIvAAAAck8AAAByLAAAAHIlAAAA2gJsYdoHZWlndmFsc9oEc29ydCkDcjEAAAByjQAAAHJJAAAAcwMAAAAgICByNAAAAHIbAAAAchsAAAC3BgAAc7AAAACAAPVgAQALDYwsmAGQc9EKG9QKG4FDgFHdBwqIMYF2hHaQAYJ6gHrdDxGMeJgCoCGkJ9APKtEPKtQPKtAIKt0HCogxgXaEdpARgnuAe90PEYx4mCGYQZwkmBWYcaARnHSZGpgM0Q8l1A8l0Agl9QYACRaQYdEIGNQIGJgUmBSYMpgUmGSYZKACmGSYGdQII4BB3QgKjAqQMYkNjA2AQdgEBYdGgkaBSIRIgEjYCwyASHI2AAAAqQBjAwAAAAAAAAAAAAAABQAAAAMAAADzlgEAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAAB9AXwBagIAAAAAAAAAAGQBawQAAAAAcxl8AWoDAAAAAAAAAABqBAAAAAAAAAAAZAJ2AXMLfAFqBQAAAAAAAAAAZAFrAgAAAAByD3QNAAAAAAAAAAAAAGQDpgEAAKsBAAAAAAAAAACCAXwBZAFrAAAAAAByD3QPAAAAAAAAAAAAAGQEpgEAAKsBAAAAAAAAAACCAXwBZAV6AAAAfQN0EQAAAAAAAAAAAAB8A6YBAACrAQAAAAAAAAAAfQQCAHwAfARnAXwCogFSAI4AfQV0EwAAAAAAAAAAAAB8BHwBpgIAAKsCAAAAAAAAAAB9BnQBAAAAAAAAAAAAAGoKAAAAAAAAAAB8BmoLAAAAAAAAAAB8BaYCAACrAgAAAAAAAAAAfQd8B2QBeAJ4AhkAAAAAAAAAAAB8A3oYAABjA2MCPAAAAHwHZAVkBoUCeAJ4AhkAAAAAAAAAAABkB3wDegUAAHoYAABjA2MCPAAAAHwHUwApCGEyBwAASW50ZXJwb2xhdGUgYSBmdW5jdGlvbiBhdCB0aGUgQ2hlYnlzaGV2IHBvaW50cyBvZiB0aGUgZmlyc3Qga2luZC4KCiAgICBSZXR1cm5zIHRoZSBDaGVieXNoZXYgc2VyaWVzIHRoYXQgaW50ZXJwb2xhdGVzIGBmdW5jYCBhdCB0aGUgQ2hlYnlzaGV2CiAgICBwb2ludHMgb2YgdGhlIGZpcnN0IGtpbmQgaW4gdGhlIGludGVydmFsIFstMSwgMV0uIFRoZSBpbnRlcnBvbGF0aW5nCiAgICBzZXJpZXMgdGVuZHMgdG8gYSBtaW5tYXggYXBwcm94aW1hdGlvbiB0byBgZnVuY2Agd2l0aCBpbmNyZWFzaW5nIGBkZWdgCiAgICBpZiB0aGUgZnVuY3Rpb24gaXMgY29udGludW91cyBpbiB0aGUgaW50ZXJ2YWwuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xNC4wCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgZnVuYyA6IGZ1bmN0aW9uCiAgICAgICAgVGhlIGZ1bmN0aW9uIHRvIGJlIGFwcHJveGltYXRlZC4gSXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9mIGEgc2luZ2xlCiAgICAgICAgdmFyaWFibGUgb2YgdGhlIGZvcm0gYGBmKHgsIGEsIGIsIGMuLi4pYGAsIHdoZXJlIGBgYSwgYiwgYy4uLmBgIGFyZQogICAgICAgIGV4dHJhIGFyZ3VtZW50cyBwYXNzZWQgaW4gdGhlIGBhcmdzYCBwYXJhbWV0ZXIuCiAgICBkZWcgOiBpbnQKICAgICAgICBEZWdyZWUgb2YgdGhlIGludGVycG9sYXRpbmcgcG9seW5vbWlhbAogICAgYXJncyA6IHR1cGxlLCBvcHRpb25hbAogICAgICAgIEV4dHJhIGFyZ3VtZW50cyB0byBiZSB1c2VkIGluIHRoZSBmdW5jdGlvbiBjYWxsLiBEZWZhdWx0IGlzIG5vIGV4dHJhCiAgICAgICAgYXJndW1lbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIGNvZWYgOiBuZGFycmF5LCBzaGFwZSAoZGVnICsgMSwpCiAgICAgICAgQ2hlYnlzaGV2IGNvZWZmaWNpZW50cyBvZiB0aGUgaW50ZXJwb2xhdGluZyBzZXJpZXMgb3JkZXJlZCBmcm9tIGxvdyB0bwogICAgICAgIGhpZ2guCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gaW1wb3J0IG51bXB5LnBvbHlub21pYWwuY2hlYnlzaGV2IGFzIEMKICAgID4+PiBDLmNoZWJmcm9tZnVuY3Rpb24obGFtYmRhIHg6IG5wLnRhbmgoeCkgKyAwLjUsIDgpCiAgICBhcnJheShbICA1LjAwMDAwMDAwZS0wMSwgICA4LjExNjc1Njg0ZS0wMSwgIC05Ljg2ODY0OTExZS0xNywKICAgICAgICAgICAgLTUuNDI0NTc5MDVlLTAyLCAgLTIuNzEzODc4NTBlLTE2LCAgIDQuNTE2NTg4MzllLTAzLAogICAgICAgICAgICAgMi40NjcxNjIyOGUtMTcsICAtMy43OTY5NDIyMWUtMDQsICAtMy4yNjg5OTAwMmUtMTZdKQoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIFRoZSBDaGVieXNoZXYgcG9seW5vbWlhbHMgdXNlZCBpbiB0aGUgaW50ZXJwb2xhdGlvbiBhcmUgb3J0aG9nb25hbCB3aGVuCiAgICBzYW1wbGVkIGF0IHRoZSBDaGVieXNoZXYgcG9pbnRzIG9mIHRoZSBmaXJzdCBraW5kLiBJZiBpdCBpcyBkZXNpcmVkIHRvCiAgICBjb25zdHJhaW4gc29tZSBvZiB0aGUgY29lZmZpY2llbnRzIHRoZXkgY2FuIHNpbXBseSBiZSBzZXQgdG8gdGhlIGRlc2lyZWQKICAgIHZhbHVlIGFmdGVyIHRoZSBpbnRlcnBvbGF0aW9uLCBubyBuZXcgaW50ZXJwb2xhdGlvbiBvciBmaXQgaXMgbmVlZGVkLiBUaGlzCiAgICBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpZiBpdCBpcyBrbm93biBhcHJpb3JpIHRoYXQgc29tZSBvZiBjb2VmZmljaWVudHMgYXJlCiAgICB6ZXJvLiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBmdW5jdGlvbiBpcyBldmVuIHRoZW4gdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUKICAgIHRlcm1zIG9mIG9kZCBkZWdyZWUgaW4gdGhlIHJlc3VsdCBjYW4gYmUgc2V0IHRvIHplcm8uCgogICAgcgIAAADaAml1ehJkZWcgbXVzdCBiZSBhbiBpbnR6EWV4cGVjdGVkIGRlZyA+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IENoZWJ5c2hldiBwb2ludHMgb2YKICAgICAgICB0aGUgZmlyc3Qga2luZCBzY2FsZWQgYW5kIHNoaWZ0ZWQgdG8gdGhlIGBkb21haW5gLiBUaGUgcmVzdWx0aW5nIHNlcmllcwogICAgICAgIHRlbmRzIHRvIGEgbWlubWF4IGFwcHJveGltYXRpb24gb2YgYGZ1bmNgIHdoZW4gdGhlIGZ1bmN0aW9uIGlzCiAgICAgICAgY29udGludW91cyBpbiB0aGUgZG9tYWluLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjE0LjAKCiAgICAgICAgUGFyYW1ldGVycwogICAgICAgIC0tLS0tLS0tLS0KICAgICAgICBmdW5jIDogZnVuY3Rpb24KICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHRvIGJlIGludGVycG9sYXRlZC4gSXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9mIGEgc2luZ2xlCiAgICAgICAgICAgIHZhcmlhYmxlIG9mIHRoZSBmb3JtIGBgZih4LCBhLCBiLCBjLi4uKWBgLCB3aGVyZSBgYGEsIGIsIGMuLi5gYCBhcmUKICAgICAgICAgICAgZXh0cmEgYXJndW1lbnRzIHBhc3NlZCBpbiB0aGUgYGFyZ3NgIHBhcmFtZXRlci4KICAgICAgICBkZWcgOiBpbnQKICAgICAgICAgICAgRGVncmVlIG9mIHRoZSBpbnRlcnBvbGF0aW5nIHBvbHlub21pYWwuCiAgICAgICAgZG9tYWluIDoge05vbmUsIFtiZWcsIGVuZF19LCBvcHRpb25hbAogICAgICAgICAgICBEb21haW4gb3ZlciB3aGljaCBgZnVuY2AgaXMgaW50ZXJwb2xhdGVkLiBUaGUgZGVmYXVsdCBpcyBOb25lLCBpbgogICAgICAgICAgICB3aGljaCBjYXNlIHRoZSBkb21haW4gaXMgWy0xLCAxXS4KICAgICAgICBhcmdzIDogdHVwbGUsIG9wdGlvbmFsCiAgICAgICAgICAgIEV4dHJhIGFyZ3VtZW50cyB0byBiZSB1c2VkIGluIHRoZSBmdW5jdGlvbiBjYWxsLiBEZWZhdWx0IGlzIG5vCiAgICAgICAgICAgIGV4dHJhIGFyZ3VtZW50cy4KCiAg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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 10
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
chebyshev.cpython-311.pyc
72.84 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite.cpython-311.pyc
60.65 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite_e.cpython-311.pyc
60.42 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
laguerre.cpython-311.pyc
58.41 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
legendre.cpython-311.pyc
59.03 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polynomial.cpython-311.pyc
55.05 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polyutils.cpython-311.pyc
32.05 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-311.pyc
873 B
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_polybase.cpython-311.pyc
48.85 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
7.02 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).