Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_不要获取我的IP@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWVzcGFjZSAgICBodHRwOi8vbGlua21lLmJpby9qaG9ucGVyZ29uLz91c2Vyc2NyaXB0PWFwaV9ibG9jawovLyBAdmVyc2lvbiAgICAgIDEuNAovLyBAYXV0aG9yICAgICAgIEpob24gUMOpcmdvbgoKLy8gQG5hbWUgICAgICAgICBOw6NvIFBlZ3VlIE1ldSBJUAovLyBAbmFtZTpwdCAgICAgICBOw6NvIFBlZ3VlIE1ldSBJUAovLyBAbmFtZTplcyAgICAgICBObyBPYnRlbmdhcyBNaSBJUAovLyBAbmFtZTplbiAgICAgICBEb24ndCBHZXQgTXkgSVAKLy8gQG5hbWU6ZnIgICAgICAgTmUgUHJlbmRzIFBhcyBNb24gSVAKLy8gQG5hbWU6cnUgICAgICAg0J3QtSDQsdC10YDQuCDQvNC+0LkgSVAKLy8gQG5hbWU6amEgICAgICAgSVDjgpLlj5blvpfjgZfjgarjgYTjgafjgY/jgaDjgZXjgYQKLy8gQG5hbWU6a28gICAgICAg64K0IElQ66W8IOqwgOyguOqwgOyngCDrp4jshLjsmpQKLy8gQG5hbWU6emgtVFcgICAgIOS4jeimgeiOt+WPluaIkeeahElQCi8vIEBuYW1lOnpoLUNOICAgICDkuI3opoHojrflj5bmiJHnmoRJUAovLyBAbmFtZTppZCAgICAgICAgSmFuZ2FuIEFtYmlsIElQIFNheWEKLy8gQG5hbWU6dWcgICAgICAgINmF25DZhtmJ2q0g2Kbbhtiy2KbZidm+2YnZhdmG2Ykg2YLbh9mE24fZviDZgtmI2YrZhdinCi8vIEBuYW1lOmFyICAgICAgICDZhNinINiq2KPYrtiwINi52YbZiNin2YYgSVAg2KfZhNiu2KfYtSDYqNmKCi8vIEBuYW1lOmhlICAgICAgICDXkNecINeq16fXkdecINeQ16og15vXqteV15HXqiDXlC1JUCDXqdec15kKLy8gQG5hbWU6aGkgICAgICAgIOCkruClh+CksOCkviBJUCDgpK7gpKQg4KSy4KWLCi8vIEBuYW1lOnRoICAgICAgICDguK3guKLguYjguLLguYDguIHguYfguJogSVAg4LiC4Lit4LiH4LiJ4Lix4LiZCi8vIEBuYW1lOmJnICAgICAgICDQndC1INCy0LfQuNC80LDQudGC0LUg0LzQvtC10YLQviBJUAovLyBAbmFtZTpybyAgICAgICAgTnUgTHVhyJtpIElQLXVsIE1ldQovLyBAbmFtZTpmaSAgICAgICAgw4Rsw6QgSGFlIE1pbnVuIElQLW9zb2l0ZXR0YW5pCi8vIEBuYW1lOml0ICAgICAgICBOb24gUHJlbmRlcmUgSWwgTWlvIElQCi8vIEBuYW1lOmVsICAgICAgICDOnM63zr0gzqDOrM+BzrXOuc+CIM6kzrfOvSBJUCDOnM6/z4UKLy8gQG5hbWU6ZW8gICAgICAgIE5lIFByZW51IE1pYW4gSVAKLy8gQG5hbWU6aHUgICAgICAgIE5lIFZlZ3nDqWwgRWwgQXogSVAtY8OtbWVtZXQKLy8gQG5hbWU6bmIgICAgICAgIElra2UgSGVudCBNaW4gSVAKLy8gQG5hbWU6c2sgICAgICAgIE5lYmVyYWogTW9qdSBJUAovLyBAbmFtZTpzdiAgICAgICAgVGEgSW50ZSBNaXR0IElQCi8vIEBuYW1lOnNyICAgICAgICBOZSBVemltYWogTW9qIElQCi8vIEBuYW1lOnBsICAgICAgICBOaWUgQmllcnogTW9qZWdvIElQCi8vIEBuYW1lOm5sICAgICAgICBQYWsgTWlqbiBJUCBOaWV0Ci8vIEBuYW1lOmRlICAgICAgICBNZWluIElQIE5pY2h0IEFicnVmZW4KLy8gQG5hbWU6ZGEgICAgICAgIFRhZyBJa2tlIE1pbiBJUAovLyBAbmFtZTpjcyAgICAgICAgTmV6w61yZWogTW9qaSBJUAovLyBAbmFtZTp1ayAgICAgICAg0J3QtSDQkdC10YDQuCDQnNC+0Y4gSVAKLy8gQG5hbWU6dHIgICAgICAgIElQJ2ltaSBBbG1hCi8vIEBuYW1lOnZpICAgICAgICDEkOG7q25nIEzhuqV5IElQIEPhu6dhIFTDtGkKLy8gQG5hbWU6ZnItQ0EgICAgIE5lIFByZW5kcyBQYXMgTW9uIElQIChDYW5hZGEpCgovLyBAZGVzY3JpcHRpb24gICAgICAgICBJbXBlZGUgYSBjYXB0dXJhIGRvIGVuZGVyZcOnbyBJUCBmZWl0YSBwb3Igc29saWNpdGHDp8OjbyBkZSBBUEkgZXh0ZXJuYS4KLy8gQGRlc2NyaXB0aW9uOnB0ICAgICAgSW1wZWRlIGEgY2FwdHVyYSBkbyBlbmRlcmXDp28gSVAgZmVpdGEgcG9yIHNvbGljaXRhw6fDo28gZGUgQVBJIGV4dGVybmEuCi8vIEBkZXNjcmlwdGlvbjplcyAgICAgIEJsb3F1ZWEgbGEgY2FwdHVyYSBkZSBJUCByZWFsaXphZGEgcG9yIHVuYSBzb2xpY2l0dWQgZGUgQVBJIGV4dGVybmEuCi8vIEBkZXNjcmlwdGlvbjplbiAgICAgIEJsb2NrcyB0aGUgY2FwdHVyZSBvZiB0aGUgSVAgYWRkcmVzcyBkb25lIGJ5IGFuIGV4dGVybmFsIEFQSSByZXF1ZXN0LgovLyBAZGVzY3JpcHRpb246ZnIgICAgICBCbG9xdWUgbGEgY2FwdHVyZSBkZSBsJ2FkcmVzc2UgSVAgZWZmZWN0dcOpZSBwYXIgdW5lIGRlbWFuZGUgZCdBUEkgZXh0ZXJuZS4KLy8gQGRlc2NyaXB0aW9uOnJ1ICAgICAg0JHQu9C+0LrQuNGA0YPQtdGCINC30LDRhdCy0LDRgiBJUC3QsNC00YDQtdGB0LAsINGB0LTQtdC70LDQvdC90YvQuSDQstC90LXRiNC90LjQvCDQt9Cw0L/RgNC+0YHQvtC8IEFQSS4KLy8gQGRlc2NyaXB0aW9uOmphICAgICAg5aSW6YOoQVBJ44Oq44Kv44Ko44K544OI44Gr44KI44KLSVDjgqLjg4njg6zjgrnjga7jgq3jg6Pjg5fjg4Hjg6PjgpLjg5bjg63jg4Pjgq/jgZfjgb7jgZnjgIIKLy8gQGRlc2NyaXB0aW9uOmtvICAgICAg7Jm467aAIEFQSSDsmpTssq3snLzroZwg7IiY7ZaJIOuQnCBJUCDso7zshowg7Lqh7LKY66W8IOywqOuLqO2VqeuLiOuLpC4KLy8gQGRlc2NyaXB0aW9uOnpoLVRXICAg6Zi75q2i5aSW6YOoQVBJ6K+35rGC5o2V6I63SVDlnLDlnYDjgIIKLy8gQGRlc2NyaXB0aW9uOnpoLUNOICAg6Zi75q2i5aSW6YOoQVBJ6K+35rGC5o2V6I63SVDlnLDlnYDjgIIKLy8gQGRlc2NyaXB0aW9uOmlkICAgICAgIE1lbmNlZ2FoIHBlbmFuZ2thcGFuIGFsYW1hdCBJUCB5YW5nIGRpbGFrdWthbiBvbGVoIHBlcm1pbnRhYW4gQVBJIGVrc3Rlcm5hbC4KLy8gQGRlc2NyaXB0aW9uOnVnICAgICAgINiz2YnYsdmJ2YLZiSBBUEkg2LPZiNix2YnYs9mJINiq25XYsdmJ2b7Zidiv2YnZhiDYptmJ2LTZhNmJ2KrZidmE2LrYp9mGIElQINib2YnZhdmJ2LLZhtmJINmC2YjZhNuH2b4g2YLZiNmK2YnYr9uHLgovLyBAZGVzY3JpcHRpb246YXIgICAgICAg2YrYrdi42LEg2KfZhNiq2YLYp9i3INi52YbZiNin2YYgSVAg2KfZhNiw2Yog2YrYqtmFINio2YjYp9iz2LfYqSDYt9mE2KggQVBJINiu2KfYsdis2YouCi8vIEBkZXNjcmlwdGlvbjpoZSAgICAgICDXnteV16DXoiDXkNeqINec15vXmdeT16og15vXqteV15HXqiDXlC1JUCDXqdeg16LXqdeZ16og16LXnCDXmdeT15kg15HXp9ep16ogQVBJINeX15nXpteV16DXmdeqLgovLyBAZGVzY3JpcHRpb246aGkgICAgICAg4KSP4KSV4KWN4KS44KSf4KSw4KWN4KSo4KSyIEFQSSDgpIXgpKjgpYHgpLDgpYvgpKcg4KSm4KWN4KS14KS+4KSw4KS+IOCkleCkv+CkjyDgpJfgpI8gSVAg4KSq4KSk4KS+IOCkleCliyDgpKzgpY3gpLLgpYngpJUg4KSV4KSw4KSk4KS+IOCkueCliOClpAovLyBAZGVzY3JpcHRpb246dGggICAgICAg4Lia4Lil4LmH4Lit4LiB4LiB4Liy4Lij4LiI4Lix4LiaIElQIGFkZHJlc3Mg4LiX4Li14LmI4LiX4Liz4LmC4LiU4Lii4LiE4Liz4LiC4LitIEFQSSDguIjguLLguIHguKDguLLguKLguJnguK3guIEKLy8gQGRlc2NyaXB0aW9uOmJnICAgICAgINCR0LvQvtC60LjRgNCwINC30LDRgdC90LXQvNCw0L3QtdGC0L4g0L3QsCBJUCDQsNC00YDQtdGBLCDQuNC30LLRitGA0YjQtdC90L4g0YfRgNC10Lcg0LLRitC90YjQvdCwINC30LDRj9Cy0LrQsCDQutGK0LwgQVBJLgovLyBAZGVzY3JpcHRpb246cm8gICAgICAgQmxvY2hlYXrEgyBjYXB0dXJhcmVhIGFkcmVzZWkgSVAgZWZlY3R1YXTEgyBwcmluIGNlcmVyZWEgdW5laSBBUEkgZXh0ZXJuZS4KLy8gQGRlc2NyaXB0aW9uOmZpICAgICAgIEVzdMOkw6QgSVAtb3NvaXR0ZWVuIGthYXBwYXVrc2VuLCBqb2thIG9uIHRlaHR5IHVsa29pc2VuIEFQSS1weXlubsO2biBrYXV0dGEuCi8vIEBkZXNjcmlwdGlvbjppdCAgICAgICBCbG9jY2EgbGEgY2F0dHVyYSBkZWxsJ2luZGlyaXp6byBJUCBlZmZldHR1YXRhIGRhIHVuYSByaWNoaWVzdGEgZGkgQVBJIGVzdGVybmEuCi8vIEBkZXNjcmlwdGlvbjplbCAgICAgICDOps+BzqzOts61zrkgz4TOt869IM66zrHPhM6xzrPPgc6xz4bOriDPhM63z4IgzrTOuc61z43OuM+Fzr3Pg863z4IgSVAgz4DOv8+FIM+Az4HOsc6zzrzOsc+Ezr/PgM6/zrnOtc6vz4TOsc65IM6xz4DPjCDOtc6+z4nPhM61z4HOuc66z4wgzrHOr8+EzrfOvM6xIEFQSS4KLy8gQGRlc2NyaXB0aW9uOmVvICAgICAgIEJsb2thcyBsYSBrYXB0YWRvbiBkZSBsYSBJUC1hZHJlc28gZmFyaXRhIHBlciBla3N0ZXJhIEFQSSBwZXRvLgovLyBAZGVzY3JpcHRpb246aHUgICAgICAgQmxva2tvbGphIGF6IElQLWPDrW0gZWxrYXDDoXPDoXQsIGFtaXQga8O8bHPFkSBBUEkta8OpcsOpcyB2w6lnemV0dC4KLy8gQGRlc2NyaXB0aW9uOm5iICAgICAgIEJsb2trZXJlciBmYW5nc3RlbiBhdiBJUC1hZHJlc3NlbiB1dGbDuHJ0IGF2IGVuIGVrc3Rlcm4gQVBJLWZvcmVzcMO4cnNlbC4KLy8gQGRlc2NyaXB0aW9uOnNrICAgICAgIEJsb2t1amUgemFjaHl0w6F2YW5pZSBJUCBhZHJlc3kgdnlrb25hbsOpIGV4dGVybm91IHBvxb5pYWRhdmtvdSBBUEkuCi8vIEBkZXNjcmlwdGlvbjpzdiAgICAgICBCbG9ja2VyYXIgZsOlbmdzdGVuIGF2IElQLWFkcmVzc2VuIHNvbSB1dGbDtnJzIGF2IGVuIGV4dGVybiBBUEktYmVnw6RyYW4uCi8vIEBkZXNjcmlwdGlvbjpzciAgICAgICBCbG9raXJhIGh2YXRhbmplIElQIGFkcmVzZSBpenZyxaFlbm8gcHJla28gc3BvbGpub2cgQVBJIHphaHRldmEuCi8vIEBkZXNjcmlwdGlvbjpwbCAgICAgICBCbG9rdWplIHByemVjaHd5dHl3YW5pZSBhZHJlc3UgSVAgZG9rb255d2FuZSBwcnpleiB6ZXduxJl0cnpuZSDFvMSFZGFuaWUgQVBJLgovLyBAZGVzY3JpcHRpb246bmwgICAgICAgQmxva2tlZXJ0IGhldCB2YXN0bGVnZ2VuIHZhbiBoZXQgSVAtYWRyZXMgZGF0IHdvcmR0IGdlZGFhbiBkb29yIGVlbiBleHRlcm5lIEFQSS1hYW52cmFhZy4KLy8gQGRlc2NyaXB0aW9uOmRlICAgICAgIEJsb2NraWVydCBkYXMgRXJmYXNzZW4gZGVyIElQLUFkcmVzc2UgZHVyY2ggZWluZSBleHRlcm5lIEFQSS1BbmZyYWdlLgovLyBAZGVzY3JpcHRpb246ZGEgICAgICAgQmxva2VyZXIgb3BmYW5nZSBJUC1hZHJlc3NlbiB1ZGbDuHJ0IGFmIGVuIGVrc3Rlcm4gQVBJLWZvcmVzcMO4cmdzZWwuCi8vIEBkZXNjcmlwdGlvbjpjcyAgICAgICBCbG9rdWplIHphY2h5Y2Vuw60gSVAgYWRyZXN5IHByb3ZlZGVuw6kgZXh0ZXJuw60gxb7DoWRvc3TDrSBvIEFQSS4KLy8gQGRlc2NyaXB0aW9uOnVrICAgICAgINCR0LvQvtC60YPRlCDQt9Cw0YXQvtC/0LvQtdC90L3RjyBJUC3QsNC00YDQtdGB0LgsINC30LTRltC50YHQvdC10L3QtSDQt9C+0LLQvdGW0YjQvdGM0L7RjiDQt9Cw0L/QuNGC0L7QvCDQtNC+IEFQSS4KLy8gQGRlc2NyaXB0aW9uOnRyICAgICAgIEhhcmljaSBiaXIgQVBJIGlzdGXEn2kgdGFyYWbEsW5kYW4geWFwxLFsYW4gSVAgYWRyZXNpIHlha2FsYW1hecSxIGVuZ2VsbGVyLgovLyBAZGVzY3JpcHRpb246dmkgICAgICAgQ2jhurduIHZp4buHYyB0aHUgdGjhuq1wIMSR4buLYSBjaOG7iSBJUCB0aOG7sWMgaGnhu4duIGLhu59pIHnDqnUgY+G6p3UgQVBJIGLDqm4gbmdvw6BpLgovLyBAZGVzY3JpcHRpb246ZnItQ0EgICBCbG9xdWUgbGEgY2FwdHVyZSBkZSBsJ2FkcmVzc2UgSVAgZWZmZWN0dcOpZSBwYXIgdW5lIGRlbWFuZGUgZCdBUEkgZXh0ZXJuZS4KCi8vIEBtYXRjaCAgICAgICAgKjovLyovKgovLyBAZXhjbHVkZSAgICAgICo6Ly93d3cuZ29vZ2xlLioKLy8gQGV4Y2x1ZGUgICAgICAqOi8vZ3JlYXN5Zm9yay5vcmcvKgovLyBAZXhjbHVkZSAgICAgICo6Ly90cmFuc2xhdGUuZ29vZ2xlLioKLy8gQGV4Y2x1ZGUgICAgICAqOi8vd3d3Lmdvb2dsZS5pdC8qCi8vIEBleGNsdWRlICAgICAgaHR0cHM6Ly93d3cueW91dHViZS5jb20vKgovLyBAZXhjbHVkZSAgICAgIGh0dHBzOi8vbS55b3V0dWJlLmNvbS8qCi8vIEBleGNsdWRlICAgICAgaHR0cHM6Ly9tdXNpYy55b3V0dWJlLmNvbS8qCi8vIEBleGNsdWRlICAgICAgaHR0cHM6Ly95b3V0dS5iZS8qCi8vIEBleGNsdWRlICAgICAgaHR0cHM6Ly9hY2NvdW50cy55b3V0dWJlLmNvbS8qCi8vIEBleGNsdWRlICAgICAgaHR0cHM6Ly93d3cueW91dHViZS1ub2Nvb2tpZS5jb20vKgovLyBAZXhjbHVkZSAgICAgIGh0dHBzOi8vZ21haWwuY29tLyoKLy8gQGV4Y2x1ZGUgICAgICBodHRwczovL21haWwuZ29vZ2xlLmNvbS8qCi8vIEBleGNsdWRlICAgICAgaHR0cHM6Ly9naXRodWIuY29tLyoKLy8gQGV4Y2x1ZGUgICAgICAgIGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS8qCi8vIEBleGNsdWRlICAgICAgICBodHRwczovL2ZhY2Vib29rLmNvbS8qCi8vIEBleGNsdWRlICAgICAgICBodHRwczovL20uZmFjZWJvb2suY29tLyoKLy8gQGV4Y2x1ZGUgICAgICAgIGh0dHBzOi8vd2lraXBlZGlhLm9yZy8qCi8vIEBleGNsdWRlICAgICAgICBodHRwczovL3dlYi53aGF0c2FwcC5jb20vKgovLyBAZXhjbHVkZSAgICAgICAgaHR0cHM6Ly9pbnN0YWdyYW0uY29tLyoKLy8gQGV4Y2x1ZGUgICAgICAgIGh0dHBzOi8veC5jb20vKgovLyBAZXhjbHVkZSAgICAgICAgaHR0cHM6Ly90d2l0dGVyLmNvbS8qCi8vIEBleGNsdWRlICAgICAgICo6Ly93d3cuYmlsaWJpbGkuY29tLyoKLy8gQGV4Y2x1ZGUgICAgICAgKjovLyouYmlsaWJpbGkuY29tLyoKLy8gQGV4Y2x1ZGUgICAgICAgKjovL3MxLmhkc2xiLmNvbS8qCgoKLy8gQGdyYW50ICAgICAgICBub25lCi8vIEBpY29uICAgICAgICAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEUUFBQUEwQ0FZQUFBREZlQnZyQUFBQUlHTklVazBBQUhvbUFBQ0FoQUFBK2dBQUFJRG9BQUIxTUFBQTZtQUFBRHFZQUFBWGNKeTZVVHdBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFmbkNod0lGd0NjZXFReUFBQVExRWxFUVZSbzNzMmFlWHhWMWJYSHYrdWNPMlJPeU0wTllaSWt0b0FpZzZDK1o2dFdJS0hWRHRwU2ZWcmJLaTJEclZWTHJTMWFwQSt4UExDMVVMQU9MU3BWM2hNUjlaV2lWa0FRUVR2S29HaURBbUVLa0pHRUpDUjNPSHYxajNOdTdzMEVxYmJ2ODlibmM3TnZ6dDFubjczV2IwMTdyU05sWlpjTElJRCtQeGhQUjMxYXcvZXYzS1J0MnhvTUJzak16TkI0M0NFYWpXbGJXeHZHbU1UbXU0Ny8wT1o3R24zL3JNMkxpSTRmUDVhRkN4ZWJ4Q1pmZU9HL1plYk03OXJSYU5ReVJzbklTRGRyMXo0ZHYraWlpUjA3WDdCZ3JtemV2QlZWL2NqTUFDcGxaWmRiSDNZQlZkVnd1SUJWcTU1VGdHQXdrQldMeFllcTZqbkFNT0FzVmMwSE1yeDcyb0Y2RVRrTTdCR1JDci9mZnlBU2liUUEzSERETlhMOGVBMGk4bitMa0tyS3NHRWYwNGNmZmt4emMzUDhsbVdkcDZwWFJpTFJTY0M1UUFqdzlXWU1IaHFPcXRaSElwSDNSR1NqaUx5OGJ0MHJ1NXVhVGtabnpwekszcjM3UlVUKzlRaUppR3pZc05tRXd5Ri9YVjNESjFYMW04Q25nVEFmaldwRlpEM3dXQ2lVLzBaZFhYMjB2SHlDcFM3M2ZWZjl2bm81VmRXU2txRXNYLzZrMnJZOXdoam5lNnBjQStSMTJWZ2NPQTRjRU9HUUt0VWkwdXI5bHFXcVlXQW9VQXdVOVlCa0U3RGF0cTJmTzQ2cG1ENzlSdG0vLzBDZjFiQlBDRG1PMFUyYnRtZ29sTzg3Y2FMeFdsWDlzV2NqcVZRSmJQRFVaMmNnNEQ4K1lFRFJxY3JLZzA3cXBMUFBMcmFycW81bFJLT3hJbFVkbzZybFFCbFEybVc5OTBYazNyeTgzTlVORFNkaUV5ZGVKclp0ZjNTRUhNZlJ6WnUzYWlBUXlJN0ZZajlRMVZsQVpzcURLMFJraFlpc0dUWHEzTXBkdTNZYnoxQ1NNeUpBd0ZzVm9BYm83LzR6YnR3WWErZk9kMHBVZFlxcVRnVkdwS3pkS2lKTC9IN2ZvbWcwMWp4aHdxVm5aT3EwQ0RtTzBjMmJYMWUvMzVjWGk4VVhBdE1CeTN2WVNlQngyN1lmZEJ4blh5b1RaZVVUWk11dEwrUTVnZlQrS2xZQlNCYWdncmFpcHM0WFBWWHpiNytlZW1McjcvN1h2VUZjNW16YkxuVWM1MWJnRzBDTzl4d2pJc3R0MjU0ZGo4ZFBuSW1wWGhGU1ZkMjQ4VFVOQm9QWjBXajBwOERNTHVwdzE4Q0JSV3VycW83RnZSdndyV3N1ZEFJWmw2cElPVEFlWkpDM3NZU2R4RUJiUUk0SXVoM1Y5YjVJNjdiWTUzT3FWUVFCaGd3WjVEdHk1T2hWcXJvZ1ZhMUY1RmQrdisvN2tVaTBlZEtrVDRsbFdUMHlaZlVHWFVuSlVFS2hmcjVZTFBZREQ1a0UvVWxFcmxmVjUyZVB6WFZReGI5Wnc3SlJ2eE1QWnI2c1lqME5NaFBrQW9RQldKS0pKVUh2azRWbEZTRnlnVnJXRExYc3AyTVpPUy9KUm03enY5UVdScFZsNDROeFZYMU9STDRDL0NueFVGV2RGb3ZGZjlpdlg1NnZ1UGdzZWtQSUxpMHRoaDVjODVvMXY5WDI5c2gxbnFTQ0NXWXN5NXFxcXUrc0JWN3NQMGplR3pTdHpOUlcvUkxWbXdtbUR3VHNEaldLdEVIOVVXaHA3UHhwYlVxTU5pMU5BM0JpbnpHQmpJdmxtSDA0dHJlaThvM3RmMlVSSExNc2E1dXFYb0xyRFFVWUg0bEVLM2ZzZVB2dHM4OHU2ZEZVdXRtUXFzcXJyMjR4dG0yUGNCem50eW13dis4aHMxMkIvTWQyQkJxTHg4N1FUYy9NWmRYQ01Objk0SmFsVUhLZXU5ckplbmowRHRqMW1tdGJJdlJNQWhuWjhQRnhjUEVYNm1UMFpmTUtpZ3NlWFRkZVloZGIxaFhHbU1YQThKUWI5dGkyZmJYak9CV1RKbjNLNmhwOHUyVUt3NGQvWEhmdDJ1MnZyNi8vWGdvekowWGtMbFhkdmhiSVg3NDkwRGhrOUowYWpjMWh5ek5wN052cHp2cmpPaWc5ejExdDMwN1l2QXBpRWZwRWxlOUE5Y0VDSFg3aFQyc3I2d3IrM2JJamFwdzdjTE9PVkJydU9NNnN3c0x3cldQSGpvcnQyclc3ZHh0U1ZYM29vZVZhWDk5d2lSYzBFL1Q0d0lGRmE1ZDk3bHg1YWxpZU5BNFpNME9ST2FoSkk5S2VuQlZOK1I2TEpGMjNDUGo4NEF0MC85ZytkNXh3UGR6eEdNUmphVHo0blRtcTVyNFVabHFCM1VBaThiMjJ0cmJ1RXc4ODhLQjJ6U1E2SVJRT0Y1Q2JtK052YWpyNURaSVpRSVZ0Mnc5V1ZSMkwzM3JrS0xJK1hxYkNYQ0N0YjZJSGNzTXcvWDdvVjlnNVBnRTRjZmZhMkFsUThXZjQ5UTlnN3c0N1pjWmhFWmxuV2RZZkhjZFpneHVuOG9CcDJkbFpiNFJDK2ZHR2hoTTluNGRXclhyT1dKWTFDamMzODRRckt4ekgyYWVBZjExTE9CN011QWNrbWJmMVpocXBGRXlIY1pPZ2FIQlN4Z215Z0ZQdHNQYVhzR29oTk5WNTF5MG9IZE1vYVpuZjBvRlh2dWlzdnhzUldhR3FDd0ZVZFhKcjY2bFJxMWUvc0QzVkQzUjg4WXdMVmIyQ1pLSlpLU0pyY1BVUko1QitIY2lsblRaMHBuTm1ZbzRUQndkd0REanFmZ0FPNzRmRjAySDU3Q1F6QU9FaE1IdGxOZzl1TFdiMVhRbmhyc0ZOc1FEQ3hwZ3J2T3ZkYmVqQ0M4Y1JEQWF5VkhWU3lsWTJqQjQ5c2hJdmFLcklUZDB3NlF0Q2lUbnEvU080ZHZXWDlURC9XdGk0MG1XNDB6MEM2Vm0yeHBucTM5TFlIMVhHamgxVkNXeEltVlVXQ1BpelJvNGNrVmc5aWRDQ0JROW9MQll2QmtaNmsrTWlzbUhuem5jTWdCUEl1QXhrVkkvU1B5TkNDZWNBV0Y1OFd2TnpXUGhWK09DdEpBUDVSV0RaeVh0VVFSa2RUOHUrQkdENzlsMUdSRGJnWnZRQTV6aU9LVjZ5NU9FZXZSemVTVFBoV1k2THlDNkF5ei83T1ZHUk1zRGZxL1JQUjc0QVdEN1hYbzRmaEY5OEM1Yi9FQnByM2QvOVFmajh0K0RyODF5djF5RW9CY0VQVEo1dzVXZkZVNjlkdU1jVGdKQXhKcEhNZGtiSXUvaHhFcEVlRGdRQy91T284c2JNbFhuQStKNmxmeHBVVEJ5S2l1SEcvM1NsLzlabW1IOE5iSGd5cVdLaEFYRHp6K0hiUzZEL1daM1JSRUJCeFJyMzV2VGY5T01wSlJnTUhnY09KRVJGTXVnbUViSnRXNTkvZnFVQVozVUlYamcwYU5EQVU2NjZwZmNIR2R6anhudER5TExoZ3MvQTNPZmdraW53dTRkZ3dmV3c1eS9KT2VkZURIZXZnaTk4RzRKK3FLc0NKK2FobHViR0xnSFFRYkdNM0RCZmhZS0MvRllST1pTVW13NVp1blNSMkxhZFJDZ1lESER6emJOc3I2Q1JFSEQxdm4yVkRvQjdCQ0M3endnWllOaDRtUDJVRzN1VzNRS1BmaDlPVkx1L0I5TGdzelBnbm1maC9NdGNuV2lvZzlkV0p4RWFkRFprNTROUlFMSlJEVk1EaHc5WEdWV3RUZ3BlUXZQbUxiTDlmbjh5RG1WbVptZzBHclZ3cXpPSmlhMnE2aDdPM1BOTXowV1BUZ2lsbE5ueXdtNGU5K3ZaVVBHbjVKUmdPbnpoRnJoaUdoZ0hxaXFoK3FBYmgzWnM5TkMxNEJOWFF6RE5ZMGo5YXRtWkZIYlptNHRRbXFyYW9WQS9wNnJxbUpzcHhPTU9YdTJ2dTd3RHZlTFFIYUdNSEpmQmFEdTh0QnllWGdBTnh6dlBOdzVzV1EydnIzRnZWZ1BOamREV25KeHp3YWZoMGk4bEhRT0NxQ042eEU0d2taU25JTkZvVkp1YlcraEFLQnFOYVVaR3VqbDU4bVJLTWtaV0FnRkJXeFZpZEJ3alVySm5OYTZYdXVvV21Id1RWRmZCa3orR0RVOUJQTnBkQUxFbzFCeWlWeG83QVdZK0FEa2hNTVpUQVkycFNET0RPeERLU2lMRXFkemMzRVQrNGRwUVcxc2JhOWMrSFFmcU93U3ZHaTR0TGZaRVl1cmNrMlpTWWgzU0czZzJmUGNSbUxZSURsZTRYdXpseHpvemM3cmsxQitBOUd3b1BnKys5bU9ZdlJLR25wUEtEQ0F0bGhPcnB4MkdEZnVZcmFxRnlhV2w0Y2lScW5oTFMydlNob3d4ZXRGRkV4R1J3eWx3RGoxNjlGZ0cxVFQ3SXFlcW94bDVSNENpVHVjcHl3YzN6WWRnQnJ5OEhGYk9kdzkwWFNrM0ROTVhRYi8rM1pOVEVjakloWUdsN3U4aVhaa0I5TEE0VHJXbUN3Ry9QNE1VYjZ5cWgwU0VzckxMTzJYYkNkcURtM0haUUhFMEdpdWlTSm8vK2VueXh0ZnUrUDEyUlM3b0ZMYjhQb2kyd2VOM3d5c3JrbWNmZnhDR2pJQ0Q3N3J4SnBnTzUwK0NBVU82SjZjZHRvV1hHWFJqQm1EN1pROU9hUkxBTm1ZQWJrMFAzR3ptQXcrRVRwbENBcjRLSUpFaEZxbnFHSUROdjErdnFLNEhqWFhrWXBiQTI5dmd2dXRnM2FOSlpuTERNT04rdUdGT01vMEJWK3B4dk1UVWRCOVZ1ekRSTWNiRW1JMmJWcnhpM0dYTWFGZFR3RE9SOXhKZ2taSXBjTjk5YzhUdjl4OEEvdVpOOEtucTVQUFBIMjBCK0NLdFcwSGV4aExYc0gvM0tQemtPdGk5TGJucG9TUGhycFV3NVRaSXkweXFWektONlczVHB4dmZ0cHpvNnpwQUdEbHloQVdVa3d3aDc2V2xwUjE4OGNWbnV5TzBaY3NiUkNLUkZoSFptS0lJWmJ0MjdTNUJoTmpuYzJyRUowOVFkOVRoNFZudzBPMXVaRStsUzc0SUYwMU9jYmNKNkwwL1NjM282NmpBYjV3ck0yb0VxS2o0b05TcnRDWTA2dFcydHJhV0pVc2U2a2poT213bzRReEU1R1ZWdlIzM1RGU2lxbE9BK3ltN0cycTJWZExXMHN6ZUhYazkyb0ZsOXh5eFVoSDZ4MnJ2V3dOdFRhdWkzdUhaR0RNRktQRldyUUZlOHZiZUtkdnVvSzk4NVJySnljbCt4K3NDNEUyZWFsbldTTm0wY0txK3MvV1JUc3lVam9ZQlhVdlNQZENIUTZqV012SDUwU3Z5YWhIQnNxeFNWYjBwWmRYMStmbjkzcDArL2NaT2hkSlVocVM2dW9iR3hxWVlzQnhvOUs0UE04YXNVdFZsd0JBUFJzUGwxem44YUpYcnpUcERrWkJFOHYvRTJhYnZOdFF1YXVaUHV5cnc2cXlyTHBSd3VNQlcxVnRKMXIwYkxjdDZ2TDYrSWJwLy80RnVWWjhPc1ltSXpKaHhrNFJDK1c4QXF4T0tCSnhIc2tEZklHTDlpRzh2bnMvZ1lXMEVVbW9sd1l6azkwQjZVbDYrQVBqOWZVV29YZFRjbDFXOTk1R2lDQ3grK2E5YVYxZC90ZGVIOHVRcHorYmtaRys3NFlacnVqYkZzRXRMaXlXVnFZYUdFL0x1dTM5emJOdmU2eGxnUVFvRTcxdVd6SGpKbUJVYmJ2N0ptNmNzL3dtVUN6bTZONU9oNThJWGI0TzhRbmZwekJ5b1B3WnRMWERGTjJGOHVadDBucDZaT2xFeko2dDY3eStXZlgxRWZCYW9aVmtYcU9yRHdBQnZEM3NzeTdxdHJhMjlwckF3TEYzNlJ2UllyRTkwNlVUa0JsVjlOQVdkblpabFhXK01xVkRnK3ZFbDhzeUM5eWRxL2JHNXBHZGZTbGF1SkIyQUJaRlRidGszcDhCTmZYb01tZ2xQSWRzc0U1OS80MzhFTmc1cGdudEJiZHMrMTNHY0o0Q0x2T2UzaXNnTVZmMmY4dklKb3FyZEluQkM1YnAxSHFaUHYxSHk4bktmRVpFbEpPUDdXR1BNQ2hFWkw4Q2R4VkhWeWI1WDdVRkR2aXladWJlanZOVVJmTlc0S3BnL0FIeSszcGlKZ2I0RjNCNW9hL3F5bWVqZmtQZUo4ZHpySWRPRkdRTXNMaXdzZUhiT25EdDdZcVozaEJKTUpkb3BzVmpzWjZvNkkwWDFQaENSdXdZUEh2amJ3NGVyT3RvcC9yV05oVjVCWTdLS05RNTBNRWcycUQrUk5ZTzBnQjRCM2hKak5scE85SFhueW93YXp6Z29MQ3l3YTJ2cnIxYlYvOEl0Q1NUb1YybHBhZDl2YjI5djdxbW1uVURvREEwdnQzdm44L242T1k2elVGV25wYURhak52d1d0YXQ0VlUyVWJiZXNqb3ZscEZiaUdwWUxUdFQxSWlLTkZ0T3JFRWM1L2lsRDEvWHRIbjVPcU1EcFNQMzhsenpyWjREU0p5UURiQThFQWpNamthakp5Wk92TXl5TEt0SFprNkxVRmVtQWdGL2Rpd1cvNkdxZnBmT0xjazlJdktFaUt3Wk0rYThBenQydk8zMlZKOVUrQnBRRGZRSER1TTYvWGJROUNRVEkwZWVZMVZVdkY5cWpQbFNUeTFKWUhGYVd0cjk3ZTN0eldkaTVvd0lwVEsxYWRQcm1wL2Z6OWZZMkhTdHFzNmxjNHNEM0lybVJoSFpJQ0k3ZzhIZzhWQ29YK3VSSTBjNzVkZkRoMy9NM3IvL1lMb3hab0F4Wmd4UTdublRraTdyN1JHUmU4UGhnbWRyYW1wamZXR0d2alNORTZNeFJvY09QWXNubmxpcFh1OW9GbkF0cDIzcnl5RlZyUkdSRmxWRlJESlZ0VC91ZWFhWW50djZqU0x5cklnOFlJelpjODg5ZDhxYmIvNjV0NWN3dXRHSGZ2R2lzRERzcjYydCt5VHdUVldkREJUeTBhZ1dlTVd5ck1kemNySzNOVFkyeFhweHpiMHlRMjh0eVRPTkpTVkRyZkx5Q2VZUGYvanpnZXpzN0hYeGVIeURxaDdDZFJnWnVLMFdpOU9UNHpIeFZ4RjVURVRtaGtMNXkwK2RPclZ2eXBTcnRMQ3c0SFNhMHl0OTVKZVhRcUY4VnE5K1FRRUNBWCtXNDVoaVk4eHdZSVNxRGhHUmtLcW1pN2dGRFJGcDhJN05IK0NlWnc2MXRia2xueGt6YnBKOSt5clA5STdQYWZucHN3MmRhUlFSUGVlYzRTeGQra2pIUTVjdVhTVHo1aTJ5VmRXT1JxT2FtNXRyamh5cGlrdEt2L1dWVjU3blp6OWIxdGQzZXM1SUh3bWhNNDIyYmF2Zjc1ZFFxRitpYmtaTFM2dDRMd0Qrbyt2MWlaOS8yZ3VBUFkyTzQ0ampPRnBWZGV6RGJMN3IyTEhwMDkzN2Q4MVlGZlJZNDRrOEFBQUFKWFJGV0hSa1lYUmxPbU55WldGMFpRQXlNREl6TFRFd0xUSTRWREE0T2pJeU9qUXhLekF3T2pBdzB3dEFvd0FBQUNWMFJWaDBaR0YwWlRwdGIyUnBabmtBTWpBeU15MHhNQzB5T0ZRd09Eb3lNam8wTVNzd01Eb3dNS0pXK0I4QUFBQW9kRVZZZEdSaGRHVTZkR2x0WlhOMFlXMXdBREl3TWpNdE1UQXRNamhVTURnNk1qTTZNREFyTURBNk1EQTR2TGV3QUFBQUFFbEZUa1N1UW1DQwoKLy8gQGxpY2Vuc2UgICAgICBNSVQKLy8gQHJ1bi1hdCAgICAgICBkb2N1bWVudC1zdGFydAoKLy8gQGNvbXBhdGlibGUgICAgICBjaHJvbWUKLy8gQGNvbXBhdGlibGUgICAgICBmaXJlZm94Ci8vIEBjb21wYXRpYmxlICAgICAgb3BlcmEKLy8gQGNvbXBhdGlibGUgICAgICBlZGdlCi8vIEBjb21wYXRpYmxlICAgICAgc2FmYXJpCi8vIEBjb21wYXRpYmxlICAgICAgYmVycnlicm93c2VyCgovLyBAZG93bmxvYWRVUkwgaHR0cHM6Ly91cGRhdGUuZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy80NzIzNzUvTiVDMyVBM28lMjBQZWd1ZSUyME1ldSUyMElQLnVzZXIuanMKLy8gQHVwZGF0ZVVSTCBodHRwczovL3VwZGF0ZS5ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzQ3MjM3NS9OJUMzJUEzbyUyMFBlZ3VlJTIwTWV1JTIwSVAubWV0YS5qcwovLyA9PS9Vc2VyU2NyaXB0PT0KCihmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICBsZXQgc3RvcEdvID0gZmFsc2U7CgogICAgZnVuY3Rpb24gc3RvcEFsbCgpewogICAgLy8gU29icmVzY3JldmUgYSBmdW7Dp8OjbyBhZGRFdmVudExpc3RlbmVyIHBhcmEgcHJldmVuaXIgYSBhZGnDp8OjbyBkZSBldmVudG9zCiAgICBjb25zdCBvcmlnaW5hbEFkZEV2ZW50TGlzdGVuZXIgPSBFdmVudFRhcmdldC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcjsKICAgIEV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zb2xlLmxvZyhgVGVudGF0aXZhIGRlIGFkacOnw6NvIGRlIGV2ZW50byBibG9xdWVhZGE6ICR7dHlwZX1gKTsKICAgICAgICAvLyBOw6NvIGZheiBuYWRhLCBpbXBlZGluZG8gYSBhZGnDp8OjbyBkZSBldmVudG9zCiAgICB9OwoKICAgIC8vIFJlbW92ZSBvIGxpc3RlbmVyIHBhZHLDo28gZG8gY29udGV4dG8gZGUgdXN1w6FyaW8gcGFyYSBldmVudG9zIGFkaWNpb25hZG9zIGRpbmFtaWNhbWVudGUKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHsKICAgICAgICAvLyBOw6NvIGZheiBuYWRhCiAgICB9OwoKICAgIC8vIFJlbW92ZSB0b2RvcyBvcyBsaXN0ZW5lcnMgZXhpc3RlbnRlcwogICAgY29uc3QgcmVtb3ZlQWxsTGlzdGVuZXJzID0gKCkgPT4gewogICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnKicpOwogICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7CiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGdldEV2ZW50TGlzdGVuZXJzKGVsZW1lbnQpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBpbiBldmVudHMpIHsKICAgICAgICAgICAgICAgIGV2ZW50c1tldmVudFR5cGVdLmZvckVhY2goZXZlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudC50eXBlLCBldmVudC5saXN0ZW5lcik7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICAvLyBSZW1vdmUgdG9kb3Mgb3MgbGlzdGVuZXJzIGV4aXN0ZW50ZXMgYW50ZXMgZGUgYSBww6FnaW5hIHNlciB0b3RhbG1lbnRlIGNhcnJlZ2FkYQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHJlbW92ZUFsbExpc3RlbmVycyk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCByZW1vdmVBbGxMaXN0ZW5lcnMpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCByZW1vdmVBbGxMaXN0ZW5lcnMpOwoKCgogICAgIC8vIERlc2F0aXZhIG8gSmF2YVNjcmlwdCBuYSBww6FnaW5hCiAgICAgICAgZnVuY3Rpb24gbGV0c0dvKCl7CgogICAgICAgICAgICAgIGNvbnN0IGdFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3N2ZycpOwogICAgICAgICAgICAgIGlmIChnRWxlbWVudHMpIHsKICAgICAgICAgICAgICAgICBnRWxlbWVudHMuZm9yRWFjaCgoc3ZnRWxlbWVudCkgPT4gewogICAgICAgICAgICAgICAgICAgIHN2Z0VsZW1lbnQuc3R5bGUud2lkdGggPSAnMTBweCc7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY29uc3QgaW1nZ0VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW1nJyk7CiAgICAgICAgICAgICAgaWYgKGltZ2dFbGVtZW50cykgewogICAgICAgICAgICAgICAgIGltZ2dFbGVtZW50cy5mb3JFYWNoKChzdmdFbGVtZW50KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc3ZnRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICB3aW5kb3cuZXZhbCA9IGZ1bmN0aW9uKCkgeyB9OwoKICAgICAgICAgICAgICAvLyBEZXNhdGl2YSBhIGNyaWHDp8OjbyBkZSBub3ZvcyBlbGVtZW50b3MgZGUgc2NyaXB0CiAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKHRhZ05hbWUpIHsKICAgICAgICAgICAgICAgICAgaWYgKHRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NjcmlwdCcpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIC8vIFJlbW92ZSB0b2RvcyBvcyBzY3JpcHRzIGV4aXN0ZW50ZXMgbmEgcMOhZ2luYQogICAgICAgICAgICAgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHQnKTsKICAgICAgICAgICAgICAgIHNjcmlwdHMuZm9yRWFjaChmdW5jdGlvbihzY3JpcHQpIHsKICAgICAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgIHZhciBhbGxFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTsKICAgICAgICAgICAgICAgIGFsbEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgICAgICAgICAgZWxlbWVudC5ET01Db250ZW50TG9hZGVkID0gIiI7CiAgICAgICAgICAgICAgICBlbGVtZW50LmxvYWQgPSAiIjsKICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xpY2sgPSAiIjsKICAgICAgICAgICAgICAgIGVsZW1lbnQua2V5ZG93biA9ICIiOwogICAgICAgICAgICAgICAgZWxlbWVudC5tb3VzZWRvd24gPSAiIjsKICAgICAgICAgICAgICAgIGVsZW1lbnQuZG93biA9ICIiOwogICAgICAgICAgICAgICAgZWxlbWVudC5hdHRhY2hlZCA9ICIiOwogICAgICAgICAgICAgICAgZWxlbWVudC5vbmNsaWNrID0gIiI7CiAgICAgICAgICAgICAgICBlbGVtZW50LmF1eGNsaWNrID0gIiI7CiAgICAgICAgICAgICAgICBlbGVtZW50LmRibGNsaWNrID0gIiI7CiAgICAgICAgICAgICAgICBlbGVtZW50LmNvcHkgPSAiIjsKICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hhbmdlID0gIiI7CiAgICAgICAgICAgICAgICBlbGVtZW50LmtleXByZXNzID0gIiI7CiAgICAgICAgICAgICAgICBlbGVtZW50Lm1vdXNlb3ZlciA9ICIiOwogICAgICAgICAgICAgICAgZWxlbWVudC5iZWZvcmV1bmxvYWQgPSAiIjsKICAgICAgICAgICAgICAgIGVsZW1lbnQuZXJyb3IgPSAiIjsKICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQuaHJlZil7CiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gIkRvbid0IEdldCBNeSBJUCAoWW91ciBVc2VyU2NyaXB0KSI7CiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaHJlZiA9ICdodHRwczovL2dyZWFzeWZvcmsub3JnL3B0LUJSL3NjcmlwdHMvNDcyMzc1LW4lQzMlQTNvLXBlZ3VlLW1ldS1pcCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihlbGVtZW50LnNyYyl7CiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihlbGVtZW50LnRhZ05hbWUgPT0gJ0JVVFRPTicpewogICAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhlbGVtZW50LnRhZ05hbWUpCiAgICAgICAgICAgICAgICBpZihlbGVtZW50LnRhZ05hbWUgPT0gJ1AnICYmIGVsZW1lbnQuaWQgIT09ICdoYWhhaGF4JyB8fCBlbGVtZW50LnRhZ05hbWUgPT0gJ1NQQU4nIHx8IGVsZW1lbnQudGFnTmFtZSA9PSAnU1RST05HJyB8fCBlbGVtZW50LnRhZ05hbWUgPT0gJ1NNQUxMJyB8fCBlbGVtZW50LnRhZ05hbWUgPT0gJ1REJyB8fCBlbGVtZW50LnRhZ05hbWUgPT0gJ1RIJyB8fCBlbGVtZW50LnRhZ05hbWUgPT0gJ0InIHx8IGVsZW1lbnQudGFnTmFtZSA9PSAnSDEnIHx8IGVsZW1lbnQudGFnTmFtZSA9PSAnSDInIHx8IGVsZW1lbnQudGFnTmFtZSA9PSAnSDMnIHx8IGVsZW1lbnQudGFnTmFtZSA9PSAnSDQnKXsKICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSAiIFN1c3BpY2lvdXMgYWN0aXZpdHkgdmVyaWZpZWQuIFRoZSBzaXRlJ3MgamF2YXNjcmlwdCBoYXMgYmVlbiBkaXNhYmxlZCB0byBwcmV2ZW50IGZ1dHVyZSBhY3Rpb25zLiI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGFsbEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ0RPTUNvbnRlbnRMb2FkZWQnKTsKICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdsb2FkJyk7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnb25tb3VzZWRvd24nKTsKICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdvbm1vdXNldXAnKTsKICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdvbmNsaWNrJyk7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnY2xpY2snKTsKICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhdHRhY2hlZCcpOwogICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2tleXByZXNzJyk7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnbW91c2VvdmVyJyk7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnbW91c2Vkb3duJyk7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgna2V5ZG93bicpOwogICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2JlZm9yZXVubG9hZCcpOwogICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3BvcHN0YXRlJyk7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZXJyb3InKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgd2luZG93LnNldFRpbWVvdXQobGV0c0dvLCAxMDApOwoKCiAgICAgICAgICAvLyBDcmlhIGEgYmFycmEgZGUgcGVzcXVpc2EKICAgICAgICAgIGNvbnN0IGFkZGFsZXJ0QmxvY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgIGFkZGFsZXJ0QmxvY2suaW5uZXJIVE1MID0gYDxwIGlkPSdoYWhhaGF4JyBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyO2NvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Jz5Vc2Vyc2NyaXB0IElQQkxPQ0s6IFNJVEUgQkxPQ0tFRC48L3A+YDsKICAgICAgICAgIGFkZGFsZXJ0QmxvY2suc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOwogICAgICAgICAgYWRkYWxlcnRCbG9jay5zdHlsZS53aWR0aCA9ICcxMDAlJzsKICAgICAgICAgIGFkZGFsZXJ0QmxvY2suc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nOwogICAgICAgICAgYWRkYWxlcnRCbG9jay50aXRsZSA9ICdPcGVuIHVzZXJzY3JpcHQgcGFnZSc7CiAgICAgICAgICBhZGRhbGVydEJsb2NrLnN0eWxlLmJvcmRlckJvdHRvbSA9ICdzb2xpZCAxcHggcmdiKDEyOSwgMTMzLCAxNDIpJzsKICAgICAgICAgIGFkZGFsZXJ0QmxvY2suc3R5bGUucGFkZGluZ1RvcCA9ICcxMHB4JzsKICAgICAgICAgIGFkZGFsZXJ0QmxvY2suc3R5bGUudG9wID0gJzAnOwogICAgICAgICAgYWRkYWxlcnRCbG9jay5zdHlsZS5sZWZ0ID0gJzUwJSc7CiAgICAgICAgICBhZGRhbGVydEJsb2NrLnN0eWxlLnJpZ2h0ID0gJzUwJSc7CiAgICAgICAgICBhZGRhbGVydEJsb2NrLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoLTUwJSwgMHB4KSc7CiAgICAgICAgICBhZGRhbGVydEJsb2NrLnN0eWxlLnpJbmRleCA9ICc5OTk5OSc7CiAgICAgICAgICBhZGRhbGVydEJsb2NrLnN0eWxlLmRpc3BsYXkgPSAnbGlzdC1pdGVtJzsKICAgICAgICAgIGFkZGFsZXJ0QmxvY2suc3R5bGUuYWxpZ25JdGVtcyA9ICdjZW50ZXInOwogICAgICAgICAgYWRkYWxlcnRCbG9jay5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJzsKICAgICAgICAgIGFkZGFsZXJ0QmxvY2suc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYig4NSwgMCwgMCknOwogICAgICAgICAgYWRkYWxlcnRCbG9jay5zdHlsZS5jb2xvciA9ICcjZmZmJzsKICAgICAgICAgIGFkZGFsZXJ0QmxvY2suc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvcHQtQlIvc2NyaXB0cy80NzIzNzUtbiVDMyVBM28tcGVndWUtbWV1LWlwJywgJ19ibGFuaycpOwogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZ2IoNCwgMiwgMiknOwogICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY29sb3IgPSAnI2ZmZic7CiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW5Ub3AgPSAnNDBweCc7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhZGRhbGVydEJsb2NrKTsKCiAgICB9CgoKICAgICAgdmFyIHBhbGF2cmFzU2FsdmFzID0gYAogICAgICAgICBnZW9pcCwKICAgICAgICAgaXAgYWRkcmVzczosCiAgICAgICAgIGFkZHJlc3MgaXA6LAogICAgICAgICB5b3VyIGlwOiwKICAgICAgICAgaXAyTG9jYXRpb24sCiAgICAgICAgIGlwYWRkcmVzcywKICAgICAgICAgbXlpcCwKICAgICAgICAgd2hhdGlzbXlpcCwKICAgICAgICAgd2hhdCBpcyBteSBpcD8sCiAgICAgICAgIGVuZGVyZcOnbyBpcDosCiAgICAgICAgIG1ldSBpcDosCiAgICAgICAgIG1ldWlwLmNvbWA7CgogICAgICBmdW5jdGlvbiBzdHJpbmdQYXJhQXJyYXkoeHBhbGF2cmFzQ2hhdmUpIHsKICAgICAgICBjb25zdCBhcnJheURlUGFsYXZyYXMgPSB4cGFsYXZyYXNDaGF2ZS5zcGxpdCgnLCcpOwogICAgICAgIGNvbnN0IHBhbGF2cmFzTGltcGFyRXNwYWNvcyA9IGFycmF5RGVQYWxhdnJhcwogICAgICAgICAgLm1hcChwYWxhdnJhID0+IHBhbGF2cmEudHJpbSgpKQogICAgICAgICAgLmZpbHRlcihwYWxhdnJhID0+IHBhbGF2cmEgIT09ICcnKTsKICAgICAgICByZXR1cm4gcGFsYXZyYXNMaW1wYXJFc3BhY29zOwogICAgICB9CgogICAgICBjb25zdCBwYWxhdnJhc0NoYXZlU3RyaW5nID0gcGFsYXZyYXNTYWx2YXM7CiAgICAgIGNvbnN0IHBhbGF2cmFzQ2hhdmUgPSBzdHJpbmdQYXJhQXJyYXkocGFsYXZyYXNDaGF2ZVN0cmluZyk7CgogICAgICAvLyBGdW7Dp8OjbyBwYXJhIHZlcmlmaWNhciBzZSB1bWEgcGFsYXZyYS1jaGF2ZSBlc3TDoSBwcmVzZW50ZSBlbSB1bSBlbGVtZW50bwogICAgICBmdW5jdGlvbiB2ZXJpZmljYVBhbGF2cmFzQ2hhdmUoZWxlbWVudG8pIHsKICAgICAgICB2YXIgdGV4dG8gPSBlbGVtZW50by50ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFsYXZyYXNDaGF2ZS5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIHBhbGF2cmEgPSBwYWxhdnJhc0NoYXZlW2ldLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBpZiAodGV4dG8uaW5jbHVkZXMocGFsYXZyYSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKCiAgICAgIC8vIEZ1bsOnw6NvIHBhcmEgcmVtb3ZlciB0YWdzIGNvbSBiYXNlIG5hcyBwYWxhdnJhcy1jaGF2ZQogICAgICBmdW5jdGlvbiByZW1vdmVUYWdzQ29tUGFsYXZyYXNDaGF2ZSgpIHsKICAgICAgICB2YXIgY2hlY2FyU3VidGFncyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnKicpKTsKICAgICAgICBjaGVjYXJTdWJ0YWdzLmZvckVhY2goZnVuY3Rpb24gKGNoZWNhclN1YnRhZykgewogICAgICAgICAgICAgIGlmICh2ZXJpZmljYVBhbGF2cmFzQ2hhdmUoY2hlY2FyU3VidGFnKSkgewogICAgICAgICAgICAgICAgc3RvcEdvID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KCgogICAgY29uc3QgYXRpdmVDaGVrYWxsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgIGx1YXp1bCgpOwogICAgfSwgMTAwKTsKCiAgICBmdW5jdGlvbiBsdWF6dWwoKXsKICAgICAgaWYoZG9jdW1lbnQuYm9keSl7CiAgICAgICAgICAgcmVtb3ZlVGFnc0NvbVBhbGF2cmFzQ2hhdmUoKTsKICAgICAgICAgICAvL3NldEludGVydmFsKHJlbW92ZVRhZ3NDb21QYWxhdnJhc0NoYXZlLCAxMjAwKTsKICAgICAgICAgICBjbGVhckludGVydmFsKGF0aXZlQ2hla2FsbCk7CiAgICAgICAgfQogICAgfQoKICAgIGNvbnNvbGUubG9nKCdJUEJMT0NLID09PT0+PiBMaXN0ZW5pbmcgZm9yIHJlcXVlc3RzLi4uJyk7CiAgICAvLyBMaXN0YSBkZSBVUkxzIGRlIEFQSSBjb25oZWNpZGFzIHBhcmEgY2FwdHVyYXIgbyBJUAogICAgY29uc3QgYmxvY2tlZEFwaVVybHMgPSBbCiAgICAgICAgJ2h0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2NoYXJ0cy9nZW9jaGFydCcsCiAgICAgICAgJ2h0dHBzOi8vYXBpLmlwaWZ5Lm9yZycsCiAgICAgICAgJ2h0dHBzOi8vYXBpLmlwaWZ5Lm9yZz9mb3JtYXQ9anNvbicsCiAgICAgICAgJ2h0dHBzOi8vaXBpbmZvLmlvJywKICAgICAgICAnaHR0cHM6Ly9hcGkuaXBhcGkuY29tJywKICAgICAgICAnaHR0cHM6Ly93d3cuaXBsb2NhdGlvbi5uZXQnLAogICAgICAgICdodHRwczovL2FwaS5pcGxvY2F0aW9uLm5ldCcsCiAgICAgICAgJ2h0dHBzOi8vd2Vic2l0ZS1jZG4uaXBpbmZvLmlvJywKICAgICAgICAnaHR0cHM6Ly9wLnR5cGVraXQubmV0JywKICAgICAgICAnaHR0cHM6Ly91c2UudHlwZWtpdC5uZXQnLAogICAgICAgICdodHRwczovL3BhZ2VhZDIuZ29vZ2xlc3luZGljYXRpb24uY29tJywKICAgICAgICAnaHR0cHM6Ly9kYXRhLWpzZXh0LmNvbScsCiAgICAgICAgJ2h0dHBzOm1haW4uZXhvY2xpY2suY29tJywKICAgICAgICAnaHR0cHM6bWFpbi5leGR5bnNydi5jb20nLAogICAgICAgICdodHRwczptYWluLmV4b3Nydi5jb20nLAogICAgICAgICdodHRwczovL2dlb2xvY2F0aW9uLm9uZXRydXN0LmNvbScsCiAgICAgICAgJ2h0dHBzOi8vY2RuLmNvb2tpZWxhdy5vcmcnLAogICAgICAgICdodHRwOi8vYXhlb2N5LmNvbScsCiAgICAgICAgJ2h0dHBzOi8vY2hpa3p6ei5jb20nLAogICAgICAgICdodHRwczovL3RoZW1lZXRwYXJ0bmVycy5saWZlJywKICAgICAgICAnaHR0cHM6Ly9hcGkuaXAtYXBpLmNvbScsCiAgICAgICAgJ2h0dHBzOi8vaXBhcGkuY28nLAogICAgICAgICdodHRwczovL2dlby5pcGlmeS5vcmcnLAogICAgICAgICdodHRwczovL2V4dHJlbWUtaXAtbG9va3VwLmNvbScsCiAgICAgICAgJ2h0dHBzOi8vZnJlZWlwYXBpLmNvbScsCiAgICAgICAgJ2h0dHBzOi8vYXBwbGljYXRpb24vdm5kLm1heG1pbmQuY29tJywKICAgICAgICAnaHR0cHM6Ly9mcmVlZ2VvaXAuaW8nLAogICAgICAgICdpcGJhc2UuY29tJywKICAgICAgICAnaHR0cHM6Ly9hcGkuaXAybG9jYXRpb24uY29tJywKICAgICAgICAnaHR0cHM6Ly9pcHN0YWNrLmNvbScsCiAgICAgICAgJ2h0dHBzOi8vaXBzdGFjazEucC5yYXBpZGFwaS5jb20nLAogICAgICAgICdodHRwczovL2FwcC5mdXNlYm94LmZtJywKICAgICAgICAnaHR0cHM6Ly9hcGkudXNlcmNlbnRyaWNzLmV1JywKICAgICAgICAnaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tJywKICAgICAgICAnaHR0cHM6Ly93d3cuZXhwcmVzc3Zwbi5jb20nLAogICAgICAgICdodHRwczovL2dyYXBocWwudXNlcmNlbnRyaWNzLmV1JywKICAgICAgICAnaHR0cHM6Ly9pcGFkZHJlc3MnLAogICAgICAgICdodHRwczovL3Rscy5icm93c2VybGVha3MuY29tJywKICAgICAgICAnaHR0cHM6Ly9yZi5yZXZvbHZlcm1hcHMuY29tJywKICAgICAgICAnL3dlYnNpdGUvX25leHQvc3RhdGljJywKICAgICAgICAnbm9yZHZwbi5jb20vJywKICAgICAgICAnZXhwcmVzc3Zwbi5jb20vJywKICAgICAgICAnd2hvaXN4bWxhcGkuY29tJywKICAgICAgICAnbWF4bWluZC5jb20nLAogICAgICAgICd3aGF0aXNteWlwLmNvbScsCiAgICAgICAgJ2lwLWFwaScsCiAgICAgICAgJ215aXAuJywKICAgICAgICAnL2Nvb2tpZScsCiAgICAgICAgJy9sb2NhdGlvbicsCiAgICAgICAgJy9pcCcsCiAgICAgICAgJy9pcHMnLAogICAgICAgICcvYXBpL2hvc3RuYW1lJywKICAgICAgICAnL2FwaS93aG9pcycsCiAgICAgICAgJ2h0dHBzOi8vWycsCiAgICAgICAgJ2dlb2lwJywKICAgICAgICAnZ2VvaXAyJywKICAgICAgICAnaXBhZGRyZXNzJwogICAgICAgIC8vIEFkaWNpb25lIG1haXMgVVJMcyBkZSBBUEkgcXVlIGRlc2VqYSBibG9xdWVhciwgc2UgbmVjZXNzw6FyaW8KICAgIF07CgogICAgbGV0IGxpc3RCbG9jazEgPSAibGlzdCBvZiBibG9ja2VkID09PiAiOwogICAgbGV0IGxpc3RCbG9jazIgPSAibGlzdCBvZiBibG9ja2VkIC0tPiAiOwoKICAgIHZhciB2ZXJpZnljMSA9IGZhbHNlOwoKICAgIGxldCBjb250YWdlbUJsY2sgPSAxOwoKICAgIC8vIEludGVyY2VwdGEgYXMgc29saWNpdGHDp8O1ZXMgQUpBWCBmZWl0YXMgcGVsbyB3ZWJzaXRlCiAgICBjb25zdCBvcGVuID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW47CiAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG1ldGhvZCwgdXJsKSB7CiAgICAgICAgLy8gVmVyaWZpY2Egc2UgYSBVUkwgZGEgc29saWNpdGHDp8OjbyBjb3JyZXNwb25kZSBhIHVtYSBVUkwgZGUgQVBJIGJsb3F1ZWFkYQogICAgICAgIGNvbnNvbGUubG9nKCc9PT09Pj4nLCB1cmwpOwogICAgICAgIGlmIChibG9ja2VkQXBpVXJscy5zb21lKGFwaVVybCA9PiB1cmwuc3RhcnRzV2l0aChhcGlVcmwpKSkgewogICAgICAgICAgICB2ZXJpZnljMSA9IHRydWU7CiAgICAgICAgICAgIGxpc3RCbG9jazEgKz0gJ1xuXG4nK2NvbnRhZ2VtQmxjaysnOiAnK3VybDsKICAgICAgICAgICAgY29udGFnZW1CbGNrKys7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTb2xpY2l0YcOnw6NvIGRlIEFQSSBibG9xdWVhZGE6ICR7dXJsfWApOwogICAgICAgICAgICByZXR1cm47IC8vIEludGVycm9tcGUgYSBleGVjdcOnw6NvIGRhIHNvbGljaXRhw6fDo28KICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja2VkQXBpVXJscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIHBhbGF2cmEgPSBibG9ja2VkQXBpVXJsc1tpXTsKICAgICAgICAgIGlmICh1cmwuaW5jbHVkZXMocGFsYXZyYSkpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coYH4gQmxvY2s6ICR7cGFsYXZyYX1gKTsKICAgICAgICAgICAgbGlzdEJsb2NrMSArPSBwYWxhdnJhKyIgfiAiOwogICAgICAgICAgICB2ZXJpZnljMSA9IHRydWU7CgogICAgICAgICAgICAgICAgICAvLyBJbnRlcmNlcHRhIGFzIHJlcXVpc2nDp8O1ZXMgQUpBWAogICAgICAgICAgICAgICAgICB2YXIgc2VuZCA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zZW5kOwogICAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1RlbnRhdGl2YSBkZSBlbnZpYXIgcmVxdWlzacOnw6NvIEFKQVggYmxvcXVlYWRhLicpOwogICAgICAgICAgICAgICAgICAgICAgLy8gYmxvcXVlaWEgYSByZXF1aXNpw6fDo28gZSBwYXJhIGRlIGNhcnJlZ2FyIGEgcMOhZ2luYQogICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgLy8gSW50ZXJjZXB0YSBvIGVudmlvIGRlIGZvcm11bMOhcmlvcwogICAgICAgICAgICAgICAgICB2YXIgc3VibWl0ID0gSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5zdWJtaXQ7CiAgICAgICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuc3VibWl0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVGVudGF0aXZhIGRlIGVudmlhciBmb3JtdWzDoXJpbyBibG9xdWVhZGEuJyk7CiAgICAgICAgICAgICAgICAgICAgICAvLyBibG9xdWVpYSBvIGVudmlvIGRlIGZvcm11w6FyaW8gZSBwYXJhIGRlIGNhcnJlZ2FyIGEgcMOhZ2luYQogICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgLy8gSW50ZXJjZXB0YSBvIGNsaXF1ZSBlbSBsaW5rcwogICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdhJykgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUZW50YXRpdmEgZGUgbmF2ZWdhciBwYXJhIG91dHJhIHDDoWdpbmEgYmxvcXVlYWRhLicpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIEJsb3F1ZWlhIG8gY29tcG9ydGFtZW50byBwYWRyw6NvIGRvIGxpbmsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gQ29udGludWEgY29tIGEgZXhlY3XDp8OjbyBub3JtYWwgZGEgc29saWNpdGHDp8OjbwogICAgICAgIG9wZW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIH07CgoKCiAgbGV0IGJsb3F1ZWFyRmV0Y2ggPSB0cnVlOwogIGxldCB2ZXJpZnljMiA9IGZhbHNlOwoKICBmdW5jdGlvbiBpbnRlcmNlcHRhckZldGNoKHVybCwgb3B0aW9ucykgewogICAgY29uc29sZS5sb2coJy0tLS0+PicsIHVybCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrZWRBcGlVcmxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHBhbGF2cmEgPSBibG9ja2VkQXBpVXJsc1tpXTsKICAgICAgICBpZiAodXJsLmluY2x1ZGVzKHBhbGF2cmEpKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgfiBCbG9jazogJHtwYWxhdnJhfWApOwogICAgICAgICAgbGlzdEJsb2NrMiArPSBwYWxhdnJhKyIgfiAiOwogICAgICAgICAgdmVyaWZ5YzIgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN0YXR1czogMjAwLCBib2R5OiAnQSBzb2xpY2l0YcOnw6NvIGZvaSBibG9xdWVhZGEuJyB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIGlmIChibG9xdWVhckZldGNoICYmIGNvcnJlc3BvbmRlQVVybEJsb3F1ZWFkYSh1cmwpKSB7CiAgICAgIGNvbnNvbGUubG9nKCdTb2xpY2l0YcOnw6NvIGZldGNoIGJsb3F1ZWFkYTonLCB1cmwpOwogICAgICB2ZXJpZnljMiA9IHRydWU7CiAgICAgIGxpc3RCbG9jazIgKz0gJ1xuXG4nK2NvbnRhZ2VtQmxjaysnOiAnK3VybCsiIH4gIjsKICAgICAgY29udGFnZW1CbGNrKys7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdGF0dXM6IDIwMCwgYm9keTogJ0Egc29saWNpdGHDp8OjbyBmb2kgYmxvcXVlYWRhLicgfSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93Lm9yaWdpbmFsRmV0Y2guY2FsbCh0aGlzLCB1cmwsIG9wdGlvbnMpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gY29ycmVzcG9uZGVBVXJsQmxvcXVlYWRhKHVybCkgewogICAgZm9yIChjb25zdCB1cmxCbG9xdWVhZGEgb2YgYmxvY2tlZEFwaVVybHMpIHsKICAgICAgaWYgKHVybC5zdGFydHNXaXRoKHVybEJsb3F1ZWFkYSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrZWRBcGlVcmxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHBhbGF2cmEgPSBibG9ja2VkQXBpVXJsc1tpXTsKICAgICAgICBpZiAodXJsLmluY2x1ZGVzKHBhbGF2cmEpKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgfiBCbG9jazogJHtwYWxhdnJhfWApOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBTdWJzdGl0dWlyIGEgZnVuw6fDo28gZmV0Y2ggZ2xvYmFsbWVudGUKICB3aW5kb3cub3JpZ2luYWxGZXRjaCA9IHdpbmRvdy5mZXRjaDsKICB3aW5kb3cuZmV0Y2ggPSBpbnRlcmNlcHRhckZldGNoOwoKICAvLyBBZ3VhcmRlIG8gZXZlbnRvIGRlIGNhcnJlZ2FtZW50byB0b3RhbCBkYSBww6FnaW5hCiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKICAgIC8vIEFww7NzIG8gY2FycmVnYW1lbnRvIHRvdGFsIGRhIHDDoWdpbmEsIHBlcm1pdGlyIHRvZGFzIGFzIHNvbGljaXRhw6fDtWVzIGZldGNoCiAgICBibG9xdWVhckZldGNoID0gZmFsc2U7CiAgfSk7CgoKCiAgZnVuY3Rpb24gbm90aWZpY2FBbGVydCgpIHsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgaWYodmVyaWZ5YzEgPT0gdHJ1ZSl7CiAgICAgICAgd2luZG93LnN0b3AoKTsKICAgICAgICBjb25zb2xlLmxvZygifn4gSVBCTE9DSyBBSkFYIH5+XG5cbiIrbGlzdEJsb2NrMSk7CiAgICAgICAgbGlzdEJsb2NrMSA9ICJsaXN0IG9mIGJsb2NrZWQgPT0+ICI7CiAgICAgICAgdmVyaWZ5YzEgPSBmYWxzZTsKICAgICAgICBzdG9wQWxsKCk7CiAgICAgIH0KICAgICAgZWxzZSBpZih2ZXJpZnljMiA9PSB0cnVlKXsKICAgICAgICB3aW5kb3cuc3RvcCgpOwogICAgICAgIGNvbnNvbGUubG9nKCJ+fiBJUEJMT0NLIEZldGNoIH5+XG5cbiIrbGlzdEJsb2NrMik7CiAgICAgICAgbGlzdEJsb2NrMiA9ICJsaXN0IG9mIGJsb2NrZWQgLS0+ICI7CiAgICAgICAgdmVyaWZ5YzIgPSBmYWxzZTsKICAgICAgICBzdG9wQWxsKCk7CiAgICAgIH1lbHNlIGlmKHN0b3BHbyA9PSB0cnVlKXsKICAgICAgICAgIHdpbmRvdy5zdG9wKCk7CiAgICAgICAgICBjb25zb2xlLmxvZygifn4gSVBCTE9DSzogU3RvcCBBbGwuIik7CiAgICAgICAgICBzdG9wQWxsKCk7CiAgICAgIH1lbHNlewogICAgICAgIGNvbnNvbGUubG9nKCdJUEJMT0NLID09PT0+PiBObyBBUEkgcmVxdWVzdHMgZm9yIElQIGlkZW50aWZpZWQuJyk7CiAgICAgIH0KICAgIH0sMTAwMCk7CiAgfQoKICAgIHZhciB4dXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICAvLyBWZXJpZmljYSBvIFVSTCBwYXJhIGRldGVybWluYXIgbyBxdWUgZmF6ZXIgbm8gc2l0ZQogICAgaWYgKHh1cmwuaW5jbHVkZXMoYGh0dHBzOi8vW2ApIHx8IHh1cmwuaW5jbHVkZXMoYHZlcmNlbGApKSB7CiAgICAgIHN0b3BHbyA9IHRydWU7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgJ2lubmVyVGV4dCcsIHsKICAgICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHt9LAogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCAnaW5uZXJIVE1MJywgewogICAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge30sCiAgICAgIH0pOwogICAgfTsKCiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBub3RpZmljYUFsZXJ0KTsKCn0pKCk7
Add Comment
Please, Sign In to add comment