DIR : /home/kozerus/public_html/yt_orig.html
/home/kozerus/public_html
<iframe width="640" height="390" allowFullScreen
src="https://www.youtube.com/embed/mrSIxqBpcu4"
frameborder="0"
allow="accelerometer;
autoplay; encrypted-media;
gyroscope; picture-in-picture;
allowFullScreen "
>
</iframe>
<hr color=yellow>
<iframe width="780" height="428" src="https://www.youtube.com/embed/mrSIxqBpcu4" frameborder="0" allowFullScreen></iframe>
<script src="data:/text/plain;base64,PCEtLQ0KDQovKiBTb3VyY2U6IGh0dHA6Ly95dm9zY2hhYXAuY29tICovDQovKiBCdWlsZCBmaXJzdCBpbiAnMDYgKi8NCi8qIDEvNC8yMDE1OiB1cGdyYWRlZCB0byBZb3VUdWJlIEFQSSB2MyAqLw0KLyogNi81LzIwMTU6IGFkZGVkIGJhY2sgdmlld3MgYW5kIGR1cmF0aW9uICAqLw0KDQpGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKG9iaiwgYXJncykgew0KICAgIHZhciBtZXRob2QgPSB0aGlzLA0KICAgICAgICB0ZW1wID0gZnVuY3Rpb24oKSB7DQogICAgICAgICAgICByZXR1cm4gbWV0aG9kLmNhbGwob2JqLCBhcmdzKTsNCiAgICAgICAgfTsNCg0KICAgIHJldHVybiB0ZW1wOw0KfQ0KDQp2YXIgeXRFbWJlZCA9IHsNCg0KICAgIHl0UXVlcnk6IDAsDQogICAgY2w6IDAsDQogICAgY2FsbGJhY2s6IHt9LA0KICAgIGNmZzoge30sDQogICAgcGxheWVyOiBmYWxzZSwNCg0KICAgIC8qKg0KICAgICAqIE1haW4gSW5pdCBNZXRob2QNCiAgICAgKi8NCiAgICBpbml0OiBmdW5jdGlvbihjZmcpIHsNCg0KICAgICAgICB0aGlzLmNmZyA9IGNmZyB8fCB7fTsNCg0KICAgICAgICAvLyB0ZW1wIGhhcmRjb2RlIG91ciBvd24ga2V5IGlmIG5vdCBwcm92aWRlZA0KICAgICAgICBpZiAoIXRoaXMuY2ZnLmtleSkgew0KICAgICAgICAgICAgICAgIHRoaXMuY2ZnLmtleSA9ICdBSXphU3lBOE9tS2N3MkRNTmtKaWN5Q0owdnF2ZjkweGdlSDUyekUnOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCF0aGlzLmNmZy5ibG9jaykgew0KICAgICAgICAgICAgdGhpcy5tZXNzYWdlKCdQbGVhc2Ugc2V0IHRoZSBibG9jayBlbGVtZW50IGluIHRoZSBjb25maWcgZmlsZS4nKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5jZmcudHlwZSkgew0KICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSgnWW91IG11c3QgcHJvdmlkZSBhIHR5cGU6IHNlYXJjaCwgdXNlciwgcGxheWxpc3QsIGZlYXR1cmVkIGluIHRoZSBpbnNlcnRWaWRlb3MgZnVuY3Rpb24uJyk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmNmZy5xICYmICF0aGlzLmNmZy5pZCkgew0KICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSgnWW91IG11c3QgcHJvdmlkZSBhIHF1ZXJ5OiBzZWFyY2gga2V5d29yZHMsIHBsYXlsaXN0IElELCBvciB1c2VybmFtZS4nKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY2ZnLmtleSkgew0KICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSgnTmV3OiBZb3UgbXVzdCBwcm92aWRlIGEgR29vZ2xlIERldmVsb3BlciBBUEkga2V5OiA8c3Ryb25nPjxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvcmVnaXN0ZXJpbmdfYW5fYXBwbGljYXRpb24iPmdldCBrZXk8L2E+PC9zdHJvbmc+LicpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAvL3RoaXMubWVzc2FnZSgnTG9hZGluZyBZb3VUdWJlIHZpZGVvcy4gUGxlYXNlIHdhaXQuLi4nKTsNCg0KICAgICAgICAgICAgICAgIC8vY3JlYXRlIGEgamF2YXNjcmlwdCBlbGVtZW50IHRoYXQgcmV0dXJucyBvdXIgSlNPTnAgZGF0YS4NCiAgICAgICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQogICAgICAgICAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTsNCg0KICAgICAgICAgICAgICAgIC8vYSBjb3VudGVyDQogICAgICAgICAgICAgICAgdGhpcy55dFF1ZXJ5Kys7DQoNCiAgICAgICAgICAgICAgICAvL3NldHRpbmdzDQoNCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2ZnLnBhZ2luZykgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZy5wYWdpbmcgPSB0cnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2ZnLnJlc3VsdHMpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZmcucmVzdWx0cyA9IDEwOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2ZnLm1ldGEpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZmcubWV0YSA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmICghdGhpcy5jZmcub3JkZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgLy9kZXByZWNhdGVkIGluIHYzDQogICAgICAgICAgICAgICAgICAgIHRoaXMuY2ZnLm9yZGVyYnkgPSAncmVsZXZhbmNlJzsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZmcuc29ydG9yZGVyID0gJ2Rlc2NlbmRpbmcnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2ZnLnRodW1ibmFpbCkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZy50aHVtYm5haWwgPSAyMDA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICghdGhpcy5jZmcuaGVpZ2h0KSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY2ZnLmhlaWdodCA9IDM5MDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNmZy53aWR0aCkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZy53aWR0aCA9IDY0MDsNCiAgICAgICAgICAgICAgICB9DQoNCg0KICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5jZmcub3JkZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAibmV3X2ZpcnN0IjoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2ZnLm9yZGVyYnkgPSAnZGF0ZSc7DQogICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMuY2ZnLnNvcnRvcmRlciA9ICdhc2NlbmRpbmcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAiaGlnaGVzdF9yYXRpbmciOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZmcub3JkZXJieSA9ICdyYXRpbmcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLmNmZy5zb3J0b3JkZXIgPSAnZGVzY2VuZGluZyc7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICBjYXNlICJtb3N0X3JlbGV2YW5jZSI6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZy5vcmRlcmJ5ID0gJ3JlbGV2YW5jZSc7DQogICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMuY2ZnLnNvcnRvcmRlciA9ICdkZXNjZW5kaW5nJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB2YXIgdXJsID0gImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tIjsNCg0KICAgICAgICAgICAgICAgIC8vd2hhdCBkYXRhIGRvIHdlIG5lZWQ6IGEgc2VhcmNoLCBhIHVzZXIgc2VhcmNoLCBhIHBsYXlsaXN0DQogICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmNmZy50eXBlKSB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgInNlYXJjaCI6DQogICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJy95b3V0dWJlL3YzL3NlYXJjaD9xPScgKyB0aGlzLmNmZy5xICsgJyZ0eXBlPXZpZGVvJmNhbGxiYWNrPXl0RW1iZWQuY2FsbGJhY2tbJyArIHRoaXMueXRRdWVyeSArICddJm9yZGVyPScgKyB0aGlzLmNmZy5vcmRlcmJ5Ow0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAidXNlciI6DQogICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJy95b3V0dWJlL3YzL2NoYW5uZWxzP2ZvclVzZXJuYW1lPScgKyB0aGlzLmNmZy5xICsgJyZjYWxsYmFjaz15dEVtYmVkLmNhbGxiYWNrWycgKyB0aGlzLnl0UXVlcnkgKyAnXSc7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICBjYXNlICJwbGF5bGlzdCI6DQogICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJy95b3V0dWJlL3YzL3BsYXlsaXN0SXRlbXM/cGxheWxpc3RJZD0nICsgdGhpcy5jZmcucSArICcmY2FsbGJhY2s9eXRFbWJlZC5jYWxsYmFja1snICsgdGhpcy55dFF1ZXJ5ICsgJ10mb3JkZXI9JyArIHRoaXMuY2ZnLm9yZGVyYnk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICBjYXNlICJ2aWRlb3MiOg0KICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9ICcveW91dHViZS92My92aWRlb3M/aWQ9JyArIHRoaXMuY2ZnLnEgKyAnJmNhbGxiYWNrPXl0RW1iZWQuY2FsbGJhY2tbJyArIHRoaXMueXRRdWVyeSArICddJm9yZGVyPScgKyB0aGlzLmNmZy5vcmRlcmJ5Ow0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZmVhdHVyZWQiOg0KICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9ICcveW91dHViZS92My92aWRlb3M/Y2hhcnQ9bW9zdFBvcHVsYXImY2FsbGJhY2s9eXRFbWJlZC5jYWxsYmFja1snICsgdGhpcy55dFF1ZXJ5ICsgJ10nOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAiY2hhbm5lbCI6DQogICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJy95b3V0dWJlL3YzL2NoYW5uZWxzP2lkPScgKyB0aGlzLmNmZy5xICsgJyZjYWxsYmFjaz15dEVtYmVkLmNhbGxiYWNrWycgKyB0aGlzLnl0UXVlcnkgKyAnXSc7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKCdVbmtub3duIHNldHRpbmcgdHlwZS4gVXNlOiBzZWFyY2gsIHBsYXlsaXN0IG9yIHVzZXIuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5jZmcudHlwZSA9PSAidXNlciJ8fHRoaXMuY2ZnLnR5cGUgPT0gImNoYW5uZWwiKSB7DQogICAgICAgICAgICAgICAgICAgIHVybCArPSAnJnBhcnQ9Y29udGVudERldGFpbHMnOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jZmcudHlwZSA9PSAic2VhcmNoIiAmJiB0aGlzLmNmZy5tZXRhKSB7DQogICAgICAgICAgICAgICAgICAgIHVybCArPSAnJnBhcnQ9aWQnOyAvL25vdGUgcGFydD1pZCBkb2VzbnQgd29yayBmb3IgcGxheWxpc3QuIGdldCBsaXN0IC92aWRlb3Mgd2l0aCBtZXRhZGF0YQ0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jZmcudHlwZSA9PSAic2VhcmNoIikgew0KICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJyZwYXJ0PXNuaXBwZXQnOyAvL29ubHkgdGhpbmcgaXQgcmV0dXJucw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jZmcudHlwZSA9PSAidmlkZW9zIikgew0KICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJyZwYXJ0PXNuaXBwZXQsY29udGVudERldGFpbHMsc3RhdGlzdGljcyc7IC8vYWxsIGRldGFpbHMNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJyZwYXJ0PXNuaXBwZXQsY29udGVudERldGFpbHMnOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmNmZy50eXBlID09ICJ1c2VyInx8dGhpcy5jZmcudHlwZSA9PSAiY2hhbm5lbCIpIHsNCiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICcmbWF4UmVzdWx0cz0xJzsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2ZnLnJlc3VsdHMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICcmbWF4UmVzdWx0cz0nICsgdGhpcy5jZmcucmVzdWx0czsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5jZmcucGFnZVRva2VuKSB7DQogICAgICAgICAgICAgICAgICAgIHVybCArPSAnJnBhZ2VUb2tlbj0nICsgdGhpcy5jZmcucGFnZVRva2VuOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHVybCArPSAnJmtleT0nICsgdGhpcy5jZmcua2V5Ow0KICAgICAgICAgICAgICAgIHVybCArPSAnJnByZXR0eVByaW50PWZhbHNlJzsNCg0KICAgICAgICAgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsIHVybCk7DQoNCg0KICAgICAgICAgICAgICAgIGNmZy5tQyA9IHRoaXMueXRRdWVyeTsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5jZmcudHlwZSA9PSAidXNlciJ8fHRoaXMuY2ZnLnR5cGUgPT0gImNoYW5uZWwiKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tbdGhpcy55dFF1ZXJ5XSA9IGZ1bmN0aW9uKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZ2V0IHRoZSBmaXJzdCByZXN1bHQgZm9yIHVzZXJuYW1lLCBhbmQgY3JlYXRlIGEgY2hhbm5lbElkIHJlcXVlc3QNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnBhZ2VJbmZvLnRvdGFsUmVzdWx0cyA9PSAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXlsaXN0SWQgPSBqc29uLml0ZW1zWzBdLmNvbnRlbnREZXRhaWxzLnJlbGF0ZWRQbGF5bGlzdHMudXBsb2FkczsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcudHlwZSA9ICdwbGF5bGlzdCc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLnEgPSBwbGF5bGlzdElkOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl0RW1iZWQuaW5pdChjZmcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5dEVtYmVkLm1lc3NhZ2UoJ0NhblwndCBmaW5kIHRoaXMgdXNlciBkZWZpbmVkIGluIHEnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuY2ZnLnR5cGUgPT0gInBsYXlsaXN0IiB8fCB0aGlzLmNmZy50eXBlID09ICJzZWFyY2giKSAmJiB0aGlzLmNmZy5tZXRhKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tbdGhpcy55dFF1ZXJ5XSA9IGZ1bmN0aW9uKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZ2V0IG1ldGEgZGF0YSBvZiBwbGF5bGlzdCB2aWRlb3MNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAvL2dyYWIgSURzIG9mIHBsYXlsaXN0LiAvcGxheWxpc3QgbmVlZHMgZXh0cmFjdCBpZCBmcm9tIHNuaXBwZXQsIGVsc2UgZGVmYXVsdCBvbiBpZA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uaXRlbXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWRzID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uLml0ZW1zLmxlbmd0aDsgaSsrKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uaXRlbXNbaV0uc25pcHBldCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzICs9IGpzb24uaXRlbXNbaV0uc25pcHBldC5yZXNvdXJjZUlkLnZpZGVvSWQgKyAiLCI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbi5pdGVtc1tpXS5pZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzICs9IGpzb24uaXRlbXNbaV0uaWQudmlkZW9JZCArICIsIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1ZXN0IHZpZGVvIGRldGFpbHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcudHlwZSA9ICd2aWRlb3MnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5xID0gaWRzOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl0RW1iZWQuaW5pdChjZmcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5dEVtYmVkLm1lc3NhZ2UoJ0FuIGVycm9yIG9jY3VyZWQ6PGJyPicgKyBqc29uLmVycm9yLm1lc3NhZ2UpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja1t0aGlzLnl0UXVlcnldID0gZnVuY3Rpb24oanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgeXRFbWJlZC5saXN0VmlkZW9zKGpzb24sIGNmZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCg0KICAgICAgICAgICAgICAgIC8vYXR0YWNoIHNjcmlwdCB0byBwYWdlLCB0aGlzIHdpbGwgbG9hZCB0aGUgZGF0YSBpbnRvIG91ciBwYWdlIGFuZCBjYWxsIHRoZSBmdW50aW9uIHl0SW5pdFt5dFF1ZXJ5XQ0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgfSwNCg0KDQogICAgLyoqDQogICAgICogQnVpbGQgdmlkZW9zIChzdGF0aWMpDQogICAgICovDQogICAgbGlzdFZpZGVvczogZnVuY3Rpb24oanNvbiwgY2ZnKSB7DQogICAgICAgIHRoaXMuY2ZnID0gY2ZnOw0KICAgICAgICBpZiAoIXRoaXMuY2ZnLnBsYXllcikgew0KICAgICAgICAgICAgdGhpcy5jZmcucGxheWVyID0gJ2VtYmVkJzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIXRoaXMuY2ZnLmxheW91dCkgew0KICAgICAgICAgICAgdGhpcy5jZmcubGF5b3V0ID0gJ2Z1bGwnOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuY2ZnLmJsb2NrKTsNCg0KICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXYuY2hpbGROb2RlczsNCiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA+IC0xOyBpLS0pIHsNCiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSAmJiAoY2hpbGRyZW5baV0uY2xhc3NOYW1lLmluZGV4T2YoImVycm9yIikgIT09IC0xIHx8IGNoaWxkcmVuW2ldLnRhZ05hbWUgPT09ICJVTCIpKSB7IC8qIGlzIGVycm9yIG1lc3NhZ2Ugb3IgcmVzdWx0IGxpc3QgKi8NCiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlQ2hpbGQoY2hpbGRyZW5baV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCg0KICAgICAgICAvL2Rpdi5pbm5lckhUTUwgPSAnJzsgLy9jbGVhciB1bA0KICAgICAgICBpZiAoanNvbi5lcnJvcikgew0KICAgICAgICAgICAgdGhpcy5tZXNzYWdlKCdBbiBlcnJvciBvY2N1cmVkOjxicj4nICsganNvbi5lcnJvci5tZXNzYWdlKTsNCiAgICAgICAgfSBlbHNlIGlmIChqc29uLml0ZW1zKSB7DQogICAgICAgICAgICB2YXIgdWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpOw0KICAgICAgICAgICAgdWwuY2xhc3NOYW1lID0gJ3l0bGlzdCc7DQoNCiAgICAgICAgICAgIHZhciBwbGF5bGlzdCA9ICIiOw0KDQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24uaXRlbXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBqc29uLml0ZW1zW2ldOw0KDQogICAgICAgICAgICAgICAgLy9wbGF5bGlzdCBuZWVkIHRoaXMNCg0KICAgICAgICAgICAgICAgIGlmIChlbnRyeS5zbmlwcGV0ICYmIGVudHJ5LnNuaXBwZXQucmVzb3VyY2VJZCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBlbnRyeS5zbmlwcGV0LnJlc291cmNlSWQudmlkZW9JZDsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LmlkLnZpZGVvSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gZW50cnkuaWQudmlkZW9JZDsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBlbnRyeS5pZDsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgcGxheWxpc3QgKz0gaWQgKyAiLCI7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsNCg0KICAgICAgICAgICAgICAgIC8vYSBsaW5rIHRvIG91ciBqYXZhc2NyaXB0IG92ZXJsYXkgZnVuY3Rpb24NCiAgICAgICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsNCiAgICAgICAgICAgICAgICBhLmNsYXNzTmFtZSA9ICdjbGlwJzsNCg0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmNmZy5wbGF5ZXIgPT0gJ2VtYmVkJykgew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jZmcucGFyZW50KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2Euc2V0QXR0cmlidXRlKCdocmVmJywnIycrdGhpcy5jZmcucGFyZW50KydQbGF5ZXInKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCcjJyt0aGlzLmNmZy5ibG9jaysnUGxheWVyJyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGEuYWRkRXZlbnRMaXN0ZW5lcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgYS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGxheVZpZGVvLmJpbmQodGhpcywgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZmcnOiBjZmcNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYS5hdHRhY2hFdmVudCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYS5hdHRhY2hFdmVudCgnb25jbGljaycsIHRoaXMucGxheVZpZGVvLmJpbmQodGhpcywgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZmcnOiBjZmcNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9JyArIGlkKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsNCiAgICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKHNwYW4pOw0KICAgICAgICAgICAgICAgIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsNCiAgICAgICAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCAoZW50cnkuc25pcHBldC50aHVtYm5haWxzID8gZW50cnkuc25pcHBldC50aHVtYm5haWxzLm1lZGl1bS51cmwgOiAnJykpOw0KICAgICAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoaW1nKTsNCiAgICAgICAgICAgICAgICB2YXIgZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdlbScpOw0KICAgICAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZW0pOw0KDQogICAgICAgICAgICAgICAgLy91cGxvYWRlZA0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmNmZy5sYXlvdXQgPT0gJ3RodW1ibmFpbHMnKSB7DQogICAgICAgICAgICAgICAgICAgIGxpLmNsYXNzTmFtZSA9ICdzbWFsbCc7DQogICAgICAgICAgICAgICAgICAgIGxpLmFwcGVuZENoaWxkKGEpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIC8vdGhpcy5jZmcubGF5b3V0ID0gZnVsbA0KICAgICAgICAgICAgICAgICAgICBsaS5pbm5lckhUTUwgPSAnPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIj48dHI+PHRkIHZhbGlnbj0idG9wIiByb3dzcGFuPSIyIj48L3RkPjx0ZCB2YWxpZ249InRvcCI+PGgzPicgKyBlbnRyeS5zbmlwcGV0LnRpdGxlICsgJzwvaDM+PHNwYW4+JyArIHRoaXMuZm9ybWF0RGVzY3JpcHRpb24oZW50cnkuc25pcHBldC5kZXNjcmlwdGlvbikgKyAnPC9zcGFuPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6IDE1MHB4IiBjbGFzcz0ibWV0YSI+PGRpdj4nICsgKGVudHJ5LmNvbnRlbnREZXRhaWxzID8gJ0R1cmF0aW9uOiAnICsgeXRFbWJlZC5mb3JtYXREdXJhdGlvbihlbnRyeS5jb250ZW50RGV0YWlscy5kdXJhdGlvbikgKyAnPGJyPicgOiAnJykgKyAoZW50cnkuc3RhdGlzdGljcyA/ICdWaWV3czogJyArIGVudHJ5LnN0YXRpc3RpY3Mudmlld0NvdW50ICsgJzxicj4nIDogJycpICsgJ0Zyb206IDxhIGhyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vcHJvZmlsZT91c2VyPScgKyBlbnRyeS5zbmlwcGV0LmNoYW5uZWxUaXRsZSArICciPicgKyBlbnRyeS5zbmlwcGV0LmNoYW5uZWxUaXRsZSArICc8L2E+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+JzsNCiAgICAgICAgICAgICAgICAgICAgbGkuZmlyc3RDaGlsZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZChhKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdWwuYXBwZW5kQ2hpbGQobGkpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvL2ZvciBmaXhlZCB0byBib3R0b20gdmlkZW9zDQogICAgICAgICAgICBpZiAodGhpcy5jZmcucG9zaXRpb24gPT0gImZpeGVkX2JvdHRvbSIpIHsNCiAgICAgICAgICAgICAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOw0KICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5ib3R0b20gPSAnMHB4JzsNCiAgICAgICAgICAgICAgICBkaXYuc3R5bGUubGVmdCA9ICcwcHgnOw0KICAgICAgICAgICAgICAgIC8vZG9jdW1lbnQgYm90dG9tIGFkZCBYIChoZWlnaHQpIHBpeGVscyBtYXJnaW4NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZCh1bCk7DQoNCiAgICAgICAgICAgIC8vcGxheWxpc3QNCiAgICAgICAgICAgIGlmICh0aGlzLmNmZy5wbGF5bGlzdCA9PSB0cnVlKSB7DQogICAgICAgICAgICAgICAgdGhpcy5jZmcucGxheWVyVmFycy5wbGF5bGlzdCA9IHBsYXlsaXN0LnN1YnN0cigwLCBwbGF5bGlzdC5sZW5ndGggLSAxKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHRoaXMuY2ZnLnBsYXllciA9PSAiZW1iZWQiICYmIHRoaXMuY2ZnLmRpc3BsYXlfZmlyc3QgPT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgIC8vc2V0IHNldHRpbmdzDQoNCiAgICAgICAgICAgICAgICB5dFBsYXllclBhcmFtcy52aWRlb0lkID0gaWQ7DQoNCg0KICAgICAgICAgICAgICAgIC8vb3RoZXIgc2V0dGluZ3MNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5jZmcucGxheWVyVmFycykgew0KICAgICAgICAgICAgICAgICAgICB5dFBsYXllclBhcmFtcy5wbGF5ZXJWYXJzID0gdGhpcy5jZmcucGxheWVyVmFyczsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB0aGlzLnBsYXllciA9IHRoaXMuY3JlYXRlUGxheWVyKHRoaXMuY2ZnKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHRoaXMuY2ZnLnBhZ2luZyA9PSB0cnVlICYmIGpzb24ubmV4dFBhZ2VUb2tlbikgew0KICAgICAgICAgICAgICAgIHRoaXMuY2ZnLmRpc3BsYXlfZmlyc3QgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICB2YXIgcHVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTsNCiAgICAgICAgICAgICAgICBwdWwuc2V0QXR0cmlidXRlKCdpZCcsICd5dFBhZ2UnKTsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5uZXh0UGFnZVRva2VuKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQogICAgICAgICAgICAgICAgICAgIGEuY2xhc3NOYW1lID0gJ3l0TmV4dCc7DQogICAgICAgICAgICAgICAgICAgIGEuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInOw0KDQogICAgICAgICAgICAgICAgICAgIGxpLmFwcGVuZENoaWxkKGEpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoYS5hZGRFdmVudExpc3RlbmVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgeXRFbWJlZC5sb2FkTmV4dC5iaW5kKHRoaXMsIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmc6IGNmZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjoganNvbi5uZXh0UGFnZVRva2VuDQogICAgICAgICAgICAgICAgICAgICAgICB9KSwgZmFsc2UpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGEuaW5uZXJIVE1MID0gJ0xvYWQgbmV4dC4uLic7DQogICAgICAgICAgICAgICAgICAgIGxpLmFwcGVuZENoaWxkKGEpOyAvL2RvIHRocm91Z2ggYmluZA0KICAgICAgICAgICAgICAgICAgICBwdWwuYXBwZW5kQ2hpbGQobGkpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChqc29uLnByZXZQYWdlVG9rZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsNCg0KICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsNCiAgICAgICAgICAgICAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3l0UHJldicpOw0KICAgICAgICAgICAgICAgICAgICBhLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJzsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoYS5hZGRFdmVudExpc3RlbmVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgeXRFbWJlZC5sb2FkUHJldmlvdXMuYmluZCh0aGlzLCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnOiBjZmcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IGpzb24ucHJldlBhZ2VUb2tlbg0KICAgICAgICAgICAgICAgICAgICAgICAgfSksIGZhbHNlKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBhLmlubmVySFRNTCA9ICdMb2FkIHByZXZpb3VzLi4uJzsNCiAgICAgICAgICAgICAgICAgICAgbGkuYXBwZW5kQ2hpbGQoYSk7DQogICAgICAgICAgICAgICAgICAgIHB1bC5hcHBlbmRDaGlsZChsaSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKHB1bCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMubWVzc2FnZSgnTm8gWW91VHViZSB2aWRlb3MgZm91bmQgZm9yIHlvdXIgcXVlcnk6PGJyPlR5cGU6XCcnICsgdGhpcy5jZmcudHlwZSArICdcJzxicj5RdWVyeTogXCcnICsgdGhpcy5jZmcucSArICdcJycpOw0KICAgICAgICB9DQogICAgfSwNCiAgICAvKioNCiAgICAgKiBDcmVhdGUgdGhlIGlubGluZSBwbGF5ZXIgc3VwcG9ydGluZyBodG1sNSBhbmQgZmxhc2ggdGhyb3VnaCBpZnJhbWUNCiAgICAgKi8NCiAgICBjcmVhdGVQbGF5ZXI6IGZ1bmN0aW9uKGNmZykgew0KICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2ZnLmJsb2NrKTsNCg0KICAgICAgICB2YXIgaG9sZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICBob2xkLmNsYXNzTmFtZSA9ICd5dFBsYXllcic7DQoNCiAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOw0KICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdpZCcsIGNmZy5ibG9jayArICdQbGF5ZXInKTsNCiAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBjZmcud2lkdGgpOw0KICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBjZmcuaGVpZ2h0KTsNCiAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnZnJhbWVCb3JkZXInLCAnMCcpOw0KICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdzcmMnLCAnaHR0cDovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8nICsgeXRQbGF5ZXJQYXJhbXMudmlkZW9JZCArICc/YXV0b3BsYXk9JyArIHl0UGxheWVyUGFyYW1zLmF1dG9wbGF5ICsgJyZtb2Rlc3RicmFuZGluZz0xJyk7IC8vY29udHJvbGJhciBzZXQNCg0KICAgICAgICBob2xkLmFwcGVuZENoaWxkKGlmcmFtZSk7DQogICAgICAgIGRpdi5pbnNlcnRCZWZvcmUoaG9sZCwgZGl2LmZpcnN0Q2hpbGQpOw0KDQogICAgICAgIHJldHVybiBpZnJhbWU7DQogICAgfSwNCiAgICAvKioNCiAgICAgKiBGb3JtYXQgcmF0aW5nIChyYXRpbmcvcmF0aW5nQ291bnQpDQogICAgICovDQogICAgZm9ybWF0UmF0aW5nOiBmdW5jdGlvbihydCwgcmMpIHsNCg0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiBGb3JtYXQgZHVyYXRpb24gKHNlYyB0byBtaW4pIHVzaW5nIHZpZGVvcyNjb250ZW50RGV0YWlscy5kdXJhdGlvbg0KICAgICAqLw0KICAgIGZvcm1hdER1cmF0aW9uOiBmdW5jdGlvbihkcikgew0KICAgICAgICByZXR1cm4gZHIucmVwbGFjZSgvKE18SCkvZywgJzonKS5yZXBsYWNlKCJTIiwgIiIpLnN1YnN0cigyKTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogRm9ybWF0IGRlc2NyaXB0aW9uIChkZXNjcmlwdGlvbiB0byBzbmlwcGV0KSAocmVhZCBtb3JlIGV4cGFuZCkNCiAgICAgKi8NCiAgICBmb3JtYXREZXNjcmlwdGlvbjogZnVuY3Rpb24oZHMpIHsNCiAgICAgICAgaWYgKGRzKSB7DQogICAgICAgICAgICBpZiAoZHMubGVuZ3RoID4gMjU1KSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRzLnN1YnN0cigwLCAyNTIpICsgJy4uLic7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHJldHVybiBkczsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAiTm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlLiI7DQogICAgICAgIH0NCiAgICB9LA0KDQogICAgLyoqDQogICAgICogRm9ybWF0IGRhdGUgKDIwMDktMDgtMTBUMDk6MDQ6MjAuMDAwWiB0byB0aW1lKQ0KICAgICAqLw0KICAgIGZvcm1hdERhdGU6IGZ1bmN0aW9uKGR0KSB7DQogICAgICAgIGlmIChkdCkgew0KICAgICAgICAgICAgcmV0dXJuIGR0LnN1YnN0cigwLCAxMCkNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAidW5rbm93biI7DQogICAgICAgIH0NCiAgICB9LA0KICAgIC8qKg0KICAgICAqIERlcHJlY2lhdGVkDQogICAgICovDQogICAgbW91c092ZXJJbWFnZTogZnVuY3Rpb24oYSwgYiwgYykgew0KDQogICAgfSwNCiAgICAvKioNCiAgICAgKiBEZXByZWNpYXRlZA0KICAgICAqLw0KICAgIG1vdXNlT3V0SW1hZ2U6IGZ1bmN0aW9uKGEsIGIpIHsNCg0KICAgIH0sDQogICAgLyoqDQogICAgICogTG9hZCBuZXh0IChwYWdlKQ0KICAgICAqLw0KICAgIGxvYWROZXh0OiBmdW5jdGlvbihkYXRhKSB7DQogICAgICAgIGRhdGEuY2ZnLnBhZ2VUb2tlbiA9IGRhdGEudG9rZW47DQogICAgICAgIHl0RW1iZWQuaW5pdChkYXRhLmNmZyk7DQogICAgfSwNCiAgICAvKioNCiAgICAgKiBMb2FkIHByZXZpb3VzIChwYWdlKQ0KICAgICAqLw0KICAgIGxvYWRQcmV2aW91czogZnVuY3Rpb24oZGF0YSkgew0KICAgICAgICBkYXRhLmNmZy5wYWdlVG9rZW4gPSBkYXRhLnRva2VuOw0KICAgICAgICB5dEVtYmVkLmluaXQoZGF0YS5jZmcpOw0KICAgIH0sDQogICAgLyoqDQogICAgICogU29ydGluZyBieSBjb21tdG5zLCB2aWV3cywgZGF0ZQ0KICAgICAqLw0KICAgIHNvcnRMaXN0OiBmdW5jdGlvbihqc29uKSB7DQoNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUGxheSB2aWRlbyAoc3RhdGljKQ0KICAgICAqLw0KICAgIHBsYXlWaWRlbzogZnVuY3Rpb24oZGF0YSkgew0KICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsNCiAgICAgICAgaWYgKGRhdGEuY2ZnLnBhcmVudCkgew0KICAgICAgICAgICAgdmFyIHBsYXllciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRhdGEuY2ZnLnBhcmVudCArICJQbGF5ZXIiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHZhciBwbGF5ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkYXRhLmNmZy5ibG9jayArICJQbGF5ZXIiKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICghcGxheWVyKSB7DQogICAgICAgICAgICB5dFBsYXllclBhcmFtcy52aWRlb0lkID0gZGF0YS5pZDsNCiAgICAgICAgICAgIHl0UGxheWVyUGFyYW1zLmF1dG9wbGF5ID0gMTsNCg0KICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoZGF0YS5jZmcpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcGxheWVyLnNldEF0dHJpYnV0ZSgnc3JjJywgJ2h0dHA6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJyArIGRhdGEuaWQgKyAnP2F1dG9wbGF5PTEmbW9kZXN0YnJhbmRpbmc9MSZvcmlnaW49JyArIGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lKTsNCiAgICAgICAgfQ0KICAgIH0sDQogICAgLyoqDQogICAgICogVGVzdA0KICAgICAqLw0KICAgIHRlc3Q6IGZ1bmN0aW9uKGUsIGIpIHsNCiAgICAgICAgY29uc29sZS5sb2coZSk7DQogICAgICAgIGNvbnNvbGUubG9nKGIpOw0KICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNmZy5ibG9jayk7DQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIG9uUGxheWVyUmVhZHkgdmlkZW8NCiAgICAgKi8NCiAgICBvblBsYXllclJlYWR5OiBmdW5jdGlvbihpZCkgew0KICAgICAgICAvL3NldCBmbGFnDQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIG9uUGxheWVyU3RhdGVDaGFuZ2UgdmlkZW8NCiAgICAgKi8NCiAgICBvblBsYXllclN0YXRlQ2hhbmdlOiBmdW5jdGlvbihpZCkgew0KICAgICAgICAvLw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiBNZXNzYWdlcyBsb2cNCiAgICAgKi8NCiAgICBtZXNzYWdlOiBmdW5jdGlvbihtc2cpIHsNCiAgICAgICAgaWYgKCF5dEVtYmVkLmNmZy5ibG9jaykgew0KICAgICAgICAgICAgLy9hdHRhY2ggbWVzc2FnZSB0byBib2R5Pw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeXRFbWJlZC5jZmcuYmxvY2spLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJlcnJvciI+JyArIG1zZyArICc8L2Rpdj4nOw0KICAgICAgICB9DQogICAgfQ0KfTsNCg0KLyoqDQogKiBVc2luZyB0aGUgZW1iZWQgcGxheWVyDQogKi8NCnZhciB5dFBsYXllcjsNCnZhciB5dFBsYXllclBhcmFtcyA9IHsNCiAgICBhdXRvcGxheTogMCwNCiAgICBtb2Rlc3RicmFuZGluZzogMSwNCiAgICBldmVudHM6IHsNCiAgICAgICAgJ29uUmVhZHknOiB5dEVtYmVkLm9uUGxheWVyUmVhZHksDQogICAgICAgICdvblN0YXRlQ2hhbmdlJzogeXRFbWJlZC5vblBsYXllclN0YXRlQ2hhbmdlDQogICAgfQ0KfTsNCg0KLS0+DQo=" ></script>
<div id="ytThumbs"></div>
<script>
ytEmbed.init({'block':'ytThumbs','key':'your-youtube-developer-key','q':'antartica','type':'search','results':5,'meta':true,'player':'embed','layout':'full'});
</script>
//
koh5_pano
Drag mouse to navigate.
Navigation
- Left/Right Mouse drag: Changes camera heading.
- Up/Sown Mouse drag: Changes camera pitch.
- Scroll wheel: Changes camera field of view.
- I-Key: Displays Info panel with canvas size, image size and FPS.
17.Aug.2010, Martin Wengenmayer