DIR : /home/kozerus/public_html/ko/main_iperms.html

/home/kozerus/public_html/ko

<html>
<head>
	<title>iperms.com/index.html 20200316_0322 link ko2.us/fb/iperms</title>

<!--
	<title>iperms.com/index.html 20200312_1700 kogrids link lists</title>
	<title>index.html 20200312_1540 links marytylermoore_jail </title>
	<title>index.html 20200312_1530 links nofiona </title>
	<title>index.html 20200312_1430 links av callmeall </title>
	<title>index.html 20200312_1330 link index2big4most.html </title>
	<title>index.html 20200312_1330 script</title>
	<title>index.html 20200312_1230 yokkmoke</title>
	<title>index.html 20200312_1230 yokkmoke</title>
	<title>index.html 20200312_1100 new mobile</title>
	<title>mob.html 20200312_0900</title>
	-->

<!-- Load an icon library to show a hamburger menu (bars) on small screens -->
<!--	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> -->
<!--	<link rel="stylesheet" src: url("data:/text/plain;base64,LyoKICAjIEFWQUlMQUJMRSBXRUlHSFRTL1NUWUxFUwoKICAgIDMwMCAoZm9yIGhlYWRsaW5lcyBvbmx5KQogICAgNDAwIChib2R5IHRleHQpCiAgICA0MDAgaXRhbGljCiAgICA2MDAKICAgIDgwMAoKICAtLS0KCiAgIyBDT0xPUlMKCiAgICBkZWZhdWx0OiAgIDNjM2MzYwogICAgICAgICAgICAgICAoZGFyayBncmV5KQoKICAgIGFsdGVybmF0ZTogNWZhNGEwCiAgICAgICAgICAgICAgICh0ZWFsKQoKICAgIGhpZ2hsaWdodDogZjA0NTMwCiAgICAgICAgICAgICAgIChvcmFuZ2UpCiovCgpib2R5IDo6LXdlYmtpdC1zY3JvbGxiYXIgewogIGhlaWdodDogMTZweDsKICBvdmVyZmxvdzogdmlzaWJsZTsKICB3aWR0aDogMTZweDsKfQoKYm9keSAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMik7CiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OwogIG1pbi1oZWlnaHQ6IDI4cHg7CiAgcGFkZGluZzogMTAwcHggMCAwOwogIGJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggMCByZ2JhKDAsMCwwLC4xKSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4wNyk7CiAgYm9yZGVyLXdpZHRoOiAxcHggMXB4IDFweCA2cHg7Cn0KCmJvZHkgIDo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHsKICBoZWlnaHQ6IDA7CiAgd2lkdGg6IDA7Cn0KCmJvZHkgIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDsKICBib3JkZXItd2lkdGg6IDAgMCAwIDRweDsKICB9Cgpib2R5ICA6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi8qIE5PUk1BTElaRSAqLwoKYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbmF2LCBzZWN0aW9uIHsgZGlzcGxheTogYmxvY2s7IH0KYXVkaW8sIGNhbnZhcywgdmlkZW8geyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICpkaXNwbGF5OiBpbmxpbmU7ICp6b29tOiAxOyB9CmF1ZGlvOm5vdChbY29udHJvbHNdKSB7IGRpc3BsYXk6IG5vbmU7IH0KW2hpZGRlbl0geyBkaXNwbGF5OiBub25lOyB9CgpodG1sIHsgZm9udC1zaXplOiAxMDAlOyBvdmVyZmxvdy15OiBzY3JvbGw7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IH0KYm9keSB7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMS4yMzE7IG92ZXJmbG93OiBoaWRkZW47IH0KYm9keSwgYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBjb2xvcjogIzIyMjsgfQoKOjotbW96LXNlbGVjdGlvbiB7IGJhY2tncm91bmQ6ICNmMDQ1MzA7IGNvbG9yOiAjZmZmOyB0ZXh0LXNoYWRvdzogbm9uZTsgfQo6OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6ICNmMDQ1MzA7IGNvbG9yOiAjZmZmOyB0ZXh0LXNoYWRvdzogbm9uZTsgfQoKYSB7IGNvbG9yOiAjNTA4Qjg4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7fQphOnZpc2l0ZWQgeyBjb2xvcjogIzUwOEI4ODsgfQphOmhvdmVyLCBhOmZvY3VzIHsgY29sb3I6ICNmMDQ1MzA7IH0KYTpmb2N1cyB7IG91dGxpbmU6IHRoaW4gZG90dGVkOyB9CmE6aG92ZXIsIGE6YWN0aXZlIHsgb3V0bGluZTogMDsgfQoKYWJiclt0aXRsZV0geyBib3JkZXItYm90dG9tOiAxcHggZG90dGVkOyB9CmIsIHN0cm9uZyB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CmJsb2NrcXVvdGUgeyBtYXJnaW46IDFlbSA0MHB4OyB9CmRmbiB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQpociB7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDFweDsgYm9yZGVyOiAwOyBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsgbWFyZ2luOiAxZW0gMDsgcGFkZGluZzogMDsgfQppbnMgeyBiYWNrZ3JvdW5kOiAjZmY5OyBjb2xvcjogIzAwMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Cm1hcmsgeyBiYWNrZ3JvdW5kOiAjZmYwOyBjb2xvcjogIzAwMDsgZm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogYm9sZDsgfQpwcmUsIGNvZGUsIGtiZCwgc2FtcCB7IGZvbnQtZmFtaWx5OiAiU291cmNlIENvZGUgUHJvIiwgbW9ub3NwYWNlOyBfZm9udC1mYW1pbHk6ICdjb3VyaWVyIG5ldycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAxZW07IH0KcHJlIHsgd2hpdGUtc3BhY2U6IHByZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH0KcSB7IHF1b3Rlczogbm9uZTsgfQpxOmJlZm9yZSwgcTphZnRlciB7IGNvbnRlbnQ6ICIiOyBjb250ZW50OiBub25lOyB9CnNtYWxsIHsgZm9udC1zaXplOiA4NSU7IH0Kc3ViLCBzdXAgeyBmb250LXNpemU6IDc1JTsgbGluZS1oZWlnaHQ6IDA7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9CnN1cCB7IHRvcDogLTAuNWVtOyB9CnN1YiB7IGJvdHRvbTogLTAuMjVlbTsgfQp1bCwgb2wgeyBtYXJnaW46IDFlbSAwOyBwYWRkaW5nOiAwIDAgMCA0MHB4OyB9CmRkIHsgbWFyZ2luOiAwIDAgMCA0MHB4OyB9Cm5hdiB1bCwgbmF2IG9sIHsgbGlzdC1zdHlsZTogbm9uZTsgbGlzdC1zdHlsZS1pbWFnZTogbm9uZTsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9CmltZyB7IGJvcmRlcjogMDsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfQpzdmc6bm90KDpyb290KSB7IG92ZXJmbG93OiBoaWRkZW47IH0KZmlndXJlIHsgbWFyZ2luOiAwOyB9Cgpmb3JtIHsgbWFyZ2luOiAwOyB9CmZpZWxkc2V0IHsgYm9yZGVyOiAwOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IH0KbGFiZWwgeyBjdXJzb3I6IHBvaW50ZXI7IH0KbGVnZW5kIHsgYm9yZGVyOiAwOyAqbWFyZ2luLWxlZnQ6IC03cHg7IHBhZGRpbmc6IDA7IH0KYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7IGZvbnQtc2l6ZTogMTAwJTsgbWFyZ2luOiAwOyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7ICp2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9CmJ1dHRvbiwgaW5wdXQgeyBsaW5lLWhlaWdodDogbm9ybWFsOyAqb3ZlcmZsb3c6IHZpc2libGU7IH0KdGFibGUgYnV0dG9uLCB0YWJsZSBpbnB1dCB7ICpvdmVyZmxvdzogYXV0bzsgfQpidXR0b24sIGlucHV0W3R5cGU9ImJ1dHRvbiJdLCBpbnB1dFt0eXBlPSJyZXNldCJdLCBpbnB1dFt0eXBlPSJzdWJtaXQiXSB7IGN1cnNvcjogcG9pbnRlcjsgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IH0KaW5wdXRbdHlwZT0iY2hlY2tib3giXSwgaW5wdXRbdHlwZT0icmFkaW8iXSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KaW5wdXRbdHlwZT0ic2VhcmNoIl0geyAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsgYm94LXNpemluZzogY29udGVudC1ib3g7IH0KaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24geyAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH0KYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLCBpbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7IGJvcmRlcjogMDsgcGFkZGluZzogMDsgfQp0ZXh0YXJlYSB7IG92ZXJmbG93OiBhdXRvOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyByZXNpemU6IHZlcnRpY2FsOyB9CmlucHV0OnZhbGlkLCB0ZXh0YXJlYTp2YWxpZCB7ICB9CmlucHV0OmludmFsaWQsIHRleHRhcmVhOmludmFsaWQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBkZGRkOyB9Cgp0YWJsZSB7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGJvcmRlci1zcGFjaW5nOiAwOyB9CnRkIHsgdmVydGljYWwtYWxpZ246IHRvcDsgfQoKCmJ1dHRvbiB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSA0MCUsIDAlIDcwJSwgZnJvbSgjRjlGOUY5KSwgdG8oI0UzRTNFMykpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoI0Y5RjlGOSA0MCUsICNFM0UzRTMgNzAlKTsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgcGFkZGluZzogNXB4IDhweDsKICBvdXRsaW5lOiBub25lOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIHVzZXItc2VsZWN0OiBub25lOwogIGN1cnNvcjogcG9pbnRlcjsKICB0ZXh0LXNoYWRvdzogMXB4IDFweCAjZmZmOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1zaXplOiAxMHB0Owp9CmJ1dHRvbltkaXNhYmxlZF0gewogIG9wYWNpdHk6IDAuNjU7CiAgY3Vyc29yOiBkZWZhdWx0Owp9CmJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6aG92ZXIsCmJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6Zm9jdXMgewogIGJvcmRlci1jb2xvcjogYmxhY2s7Cn0KYnV0dG9uOm5vdChbZGlzYWJsZWRdKTphY3RpdmUgewogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSA0MCUsIDAlIDcwJSwgZnJvbSgjRTNFM0UzKSwgdG8oI0Y5RjlGOSkpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoI0UzRTNFMyA0MCUsICNGOUY5RjkgNzAlKTsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7Cn0KCi8qIEJBQ0tHUk9VTkQgU0NBTEUgKi8KCi5wYXR0ZXJuLWJnIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlICFpbXBvcnRhbnQ7Cn0KCi5wYXR0ZXJuLWJnLWxpZ2h0ZXIsCmFydGljbGUuc2VjdGlvbmVkID4gc2VjdGlvbjpub3QoI2NsYXNzZXMpIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogIGJveC1zaGFkb3c6IDFweCAxcHggMTBweCAjY2NjOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddLApib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10sCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvYmFja2dyb3VuZC1ob21lLmpwZyk7Cn0KCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9zdGF0aWMvaW1hZ2VzL2JhY2tncm91bmQtZ2FtaW5nLmpwZyk7Cn0KCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvYmFja2dyb3VuZC1idXNpbmVzcy5qcGcpOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddIC5wYXR0ZXJuLWJnLWxpZ2h0ZXIsCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSAucGF0dGVybi1iZy1saWdodGVyLApib2R5W2RhdGEtaHJlZj0nYnVzaW5lc3MnXSAucGF0dGVybi1iZy1saWdodGVyLApib2R5W2RhdGEtaHJlZj0naG9tZSddIGFydGljbGUuc2VjdGlvbmVkID4gc2VjdGlvbjpub3QoI2NsYXNzZXMpLApib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10gYXJ0aWNsZS5zZWN0aW9uZWQgPiBzZWN0aW9uOm5vdCgjY2xhc3NlcyksCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIGFydGljbGUuc2VjdGlvbmVkID4gc2VjdGlvbjpub3QoI2NsYXNzZXMpIHsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgLW1vei1ib3gtc2hhZG93OiBub25lOwogIC1tcy1ib3gtc2hhZG93OiBub25lOwogIC1vLWJveC1zaGFkb3c6IG5vbmU7CiAgYm94LXNoYWRvdzogbm9uZTsKfQoKI3VwZGF0ZXNfbGlzdCBsaSB7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiBTSEFSRUQgICovCgpoMSwKaDIsCmgzLApoNCwKaDUKewogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgbGluZS1oZWlnaHQ6IDEuMTI1Owp9CgpoZ3JvdXAgaDEsCmhncm91cCBoMiwKaGdyb3VwIGgzCnsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgpoMSBzcGFuLApoMiBzcGFuCnsKICBjb2xvcjogIzVmYTRhMDsKICBmb250LXdlaWdodDogODAwOwp9CgpoMQp7CiAgZm9udC1zaXplOiAzNXB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbWFyZ2luOiAwIDAgLjI1ZW07Cn0KCmgyCnsKICBmb250LXNpemU6IDI2cHg7CiAgbWFyZ2luOiAxZW0gMCAuNWVtOwp9CgpoMwp7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbWFyZ2luOiAxZW0gMCAuNWVtOwp9CgpoMjpmaXJzdC1jaGlsZCwKaDM6Zmlyc3QtY2hpbGQsCi5wcm9maWxlIGgyCnsKICBtYXJnaW46IDAgMCAuNWVtOwp9CgpwCnsKICBmb250LXNpemU6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKYQp7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAuMnM7CiAgLW1zLXRyYW5zaXRpb246IGNvbG9yIC4yczsKICAtbW96LXRyYW5zaXRpb246IGNvbG9yIC4yczsKICAtby10cmFuc2l0aW9uOiBjb2xvciAuMnM7CiAgdHJhbnNpdGlvbjogY29sb3IgLjJzOwp9CgpzdHJvbmcKewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCmhlYWRlci5tYWluIG5hdiwKLnN1YmhlYWRlciBkaXYsCi5uYXYKewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbjogMCBhdXRvOwogIHdpZHRoOiAxMDAwcHg7Cn0KCi5wYWdlCnsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luOiA0LjVlbSBhdXRvOwogIHdpZHRoOiAxMDAwcHg7Cn0KCi5wYWdlLmN1cnJlbnQKewogIHRvcDogMDsKfQoKYXJ0aWNsZSBhcnRpY2xlLAphcnRpY2xlLnNlY3Rpb25lZCwKYXJ0aWNsZSBzZWN0aW9uLApoZWFkZXIgc2VjdGlvbgp7CiAgYmFja2dyb3VuZDogbm9uZTsKICBtYXJnaW4tdG9wOiAwOwogIHBhZGRpbmc6IDA7Cn0KCmFydGljbGUgYXJ0aWNsZSwKYXJ0aWNsZSBzZWN0aW9uCnsKICBtYXJnaW46IDA7Cn0KCmFydGljbGUsCnNlY3Rpb24sCmFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24sCnNlY3Rpb24ubGlua190YXJnZXQsCiN1cGRhdGVzLAoucGFnZSBoZWFkZXIKewogIG1hcmdpbjogMCBhdXRvIDIlIGF1dG87CiAgcGFkZGluZzogMS43NSUgMiU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKYXJ0aWNsZSBzZWN0aW9uLmxpbmtfdGFyZ2V0CnsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgaGVpZ2h0OiAxNThweDsKICBtYXJnaW4tbGVmdDogMmVtOwogIHBhZGRpbmc6IDA7Cn0KaHRtbFtsYW5nPXB0XSBhcnRpY2xlIHNlY3Rpb24ubGlua190YXJnZXQKewogIGhlaWdodDogMTg4cHg7Cn0KCmh0bWxbbGFuZz1kZV0gYXJ0aWNsZSBzZWN0aW9uLmxpbmtfdGFyZ2V0CnsKICBoZWlnaHQ6IDIwMHB4Owp9CgphcnRpY2xlLnByb2ZpbGUgc2VjdGlvbiwKc2VjdGlvbi5saW5rX3RhcmdldCBhCnsKICBwYWRkaW5nOiA1JSA2JTsKfQoKc2VjdGlvbi5saW5rX3RhcmdldCBhCnsKICBjb2xvcjogaW5oZXJpdDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogMDsKICB0b3A6IDA7CiAgaGVpZ2h0OiAxMjVweDsKfQoKc2VjdGlvbi5saW5rX3RhcmdldCBoMgp7CiAgZm9udC1zaXplOiAzNXB4OwogIG1hcmdpbi1ib3R0b206IC4yNWVtOwp9CgpzZWN0aW9uLmxpbmtfdGFyZ2V0IHAKewogIGZvbnQtc2l6ZTogMTNweDsKICBtYXJnaW46IDA7Cn0KCi5wYWdlIGhlYWRlcgp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwp9Cgpib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10gLnBhZ2UgaGVhZGVyLApib2R5W2RhdGEtaHJlZj0nYnVzaW5lc3MnXSAucGFnZSBoZWFkZXIKewogIHBhZGRpbmctYm90dG9tOiAxJTsKfQoKYm9keVtkYXRhLWhyZWY9J2dhbWluZyddIC5wYWdlIGhlYWRlci50d29fY29sdW1ucyBwOmZpcnN0LWNoaWxkLApib2R5W2RhdGEtaHJlZj0nYnVzaW5lc3MnXSAucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgcDpmaXJzdC1jaGlsZAp7CiAgbWFyZ2luLXRvcDogMDsKfQoKLnBhZ2UgaGVhZGVyIGhncm91cAp7CiAgZmxvYXQ6IGxlZnQ7CiAgcGFkZGluZy1yaWdodDogMiU7CiAgd2lkdGg6IDM0JTsKfQoKLnBhZ2UgaGVhZGVyIHNlY3Rpb24KewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiA2NCU7Cn0KCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSAucGFnZSBoZWFkZXIsCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIC5wYWdlIGhlYWRlcgp7CiAgcGFkZGluZy1ib3R0b206IDElOwp9CgoucGFnZSBoZWFkZXIgaGdyb3VwIGgxCnsKICBmb250LXdlaWdodDogMzAwOwogIG1hcmdpbjogMCAwIC41ZW07Cn0KCi5wYWdlIGhlYWRlciBoZ3JvdXAgaDEgc3BhbiwKLnBhZ2UgaGVhZGVyIGhncm91cCBoMgp7CiAgY29sb3I6ICM1ZmE0YTA7CiAgZm9udC1zaXplOiAzNHB4OwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgbWFyZ2luOiAwOwp9CgoucGFnZSBoZWFkZXIgaGdyb3VwIGgxICsgaDIKewogIG1hcmdpbi10b3A6IC0uNWVtOwp9CgoucGFnZSBoZWFkZXIgaDMKewogIGZvbnQtc2l6ZTogMjJweDsKICBmb250LXdlaWdodDogMzAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLAoucGFnZSBoZWFkZXIgYXNpZGUKewogIGZvbnQtc2l6ZTogMTVweDsKICBtYXJnaW46IC4yNWVtIDAgMDsKfQoKLnBhZ2UgaGVhZGVyIHNlY3Rpb24gcAp7CiAgbWFyZ2luOiAwIDAgMWVtOwp9CgoucGFnZSBoZWFkZXIgcDpsYXN0LWNoaWxkCnsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoudHdvX2NvbHVtbnMKewogIC1tb3otY29sdW1uLWNvdW50OiAyOwogIC1vLWNvbHVtbi1jb3VudDogMjsKICAtbXMtY29sdW1uLWNvdW50OiAyOwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAyOwogIGNvbHVtbi1jb3VudDogMjsKICAtbW96LWNvbHVtbi1nYXA6IDEuNWVtOwogIC1vLWNvbHVtbi1nYXA6IDEuNWVtOwogIC1tcy1jb2x1bW4tZ2FwOiAxLjVlbTsKICAtd2Via2l0LWNvbHVtbi1nYXA6IDEuNWVtOwogIGNvbHVtbi1nYXA6IDEuNWVtOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbiBwLmludHJvCnsKICBmb250LXNpemU6IDE1cHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbiAuY29sdW1uICsgLmNvbHVtbiArIHAKewogIGNsZWFyOiBsZWZ0OwogIHBhZGRpbmctdG9wOiAzZW07Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uIHVsCnsKICBsaW5lLWhlaWdodDogMS4zOwogIGxpc3Qtc3R5bGU6IHNxdWFyZTsKICBtYXJnaW46IC0uNWVtIDAgMCAyZW07Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uIGxpIGEKewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi50aHJlZV9jb2x1bW5zCnsKICAtbW96LWNvbHVtbi1jb3VudDogMzsKICAtbXMtY29sdW1uLWNvdW50OiAzOwogIC1vLWNvbHVtbi1jb3VudDogMzsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogMzsKICBjb2x1bW4tY291bnQ6IDM7Cn0KCi5maXZlX2NvbHVtbnMKewogIGxpc3Qtc3R5bGU6IHNxdWFyZTsKICAtbW96LWNvbHVtbi1jb3VudDogNTsKICAtbXMtY29sdW1uLWNvdW50OiA1OwogIC1vLWNvbHVtbi1jb3VudDogNTsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogNTsKICBjb2x1bW4tY291bnQ6IDU7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uIHVsLnRocmVlX2NvbHVtbnMgbGkKewogIG1hcmdpbjogMCAwIC43NWVtOwp9CgoucGFnZSBoZWFkZXIgaGdyb3VwLAoucGFnZSBoZWFkZXIgc2VjdGlvbiwKLnBhZ2UgaGVhZGVyIC5zaGFyZSwKLnBhZ2Ugc2VjdGlvbgp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoucGFnZSBoZWFkZXIgLnNoYXJlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAxNXB4OwogIGxlZnQ6IDE1cHg7CiAgei1pbmRleDogMjsKICBkaXNwbGF5OiBibG9jazsKfQoKLnBhZ2UgaGVhZGVyIC5zaGFyZSBsaSB7CiAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50Owp9CgoucGFnZSBoZWFkZXIgLnNoYXJlIGEgewogIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKICBwYWRkaW5nLXJpZ2h0OiA1cHggIWltcG9ydGFudDsKfQoKLnBhZ2UgaGVhZGVyIC5zaGFyZSBhIGltZyB7CiAgd2lkdGg6IDMycHg7CiAgaGVpZ2h0OiAzMnB4Owp9Cgojc3RhcnQgLnNoYXJlLnByZXZpZXcgewogIHJpZ2h0OiAxMzBweDsKICBsZWZ0OiBhdXRvOyAvKiBuZWVkZWQgZm9yIEZGICovCn0KLnBhZ2UgaGVhZGVyIC5zaGFyZS5wcmV2aWV3IHsKICBkaXNwbGF5OiBibG9jazsKICBib3R0b206IDIwcHg7Cn0KCi5wYWdlIGhlYWRlciAuc2hhcmUgdWwKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi5wYWdlIGhlYWRlciAuc2hhcmUgbGkKewogIGRpc3BsYXk6IGlubGluZTsKfQoKLnBhZ2UgaGVhZGVyLnR3b19jb2x1bW5zIC8qIFRoZXJlIGlzIHRvbyBtdWNoIHVucHJlZGljdGFibGUgYmVoYXZpb3Igd2l0aCBDU1MzIGNvbHVtbnMgZm9yIHRoaXMgdG8gcmVsaWFibGUuIFVzaW5nIGZsb2F0cyBmb3Igbm93LiAqLwp7CiAgLW1vei1jb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKICAtby1jb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKICAtbXMtY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKICBjb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKfQoKLnBhZ2UgaGVhZGVyLnR3b19jb2x1bW5zIGhncm91cAp7CiAgcGFkZGluZzogMCAzJSAwIDA7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDQ4JTsKfQoKaHRtbFtsYW5nPXB0XSAucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwCnsKICB3aWR0aDogNTMlOwp9CgoucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgc2VjdGlvbgp7CiAgZmxvYXQ6IGxlZnQ7CiAgcGFkZGluZzogMDsKICB3aWR0aDogNDklOwp9CgoucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgcAp7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBtYXJnaW46IDA7Cn0KCi5wYWdlIGhlYWRlci50d29fY29sdW1ucyBwICsgcAp7CiAgbWFyZ2luLXRvcDogMWVtOwp9CgoucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwIGltZwp7CiAgbWFyZ2luLWJvdHRvbTogMWVtOwp9CgoucGFnZSBzZWN0aW9uIGhlYWRlcgp7CiAgYmFja2dyb3VuZDogbm9uZTsKICBtYXJnaW46IDAgMCAyZW07CiAgcGFkZGluZzogMDsKfQoKZGl2Lm9uZV9xdWFydGVyLApkaXYub25lX2hhbGYgICAgeyBmbG9hdDogbGVmdDsgfQpkaXYub25lX3F1YXJ0ZXIgeyB3aWR0aDogMjUlOyB9CmRpdi5vbmVfaGFsZiAgICB7IHdpZHRoOiA1MCU7IH0KCi5mZWVkIHVsCnsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogMWVtIDAgIWltcG9ydGFudDsKICBwYWRkaW5nOiAwOwp9CgouZmVlZCBsaQp7CiAgY2xlYXI6IGxlZnQ7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBsaXN0LXN0eWxlOiBub25lOwogIGxpbmUtaGVpZ2h0OiAxLjg7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IC4xZW07Cn0KCi5mZWVkIGxpIGEKewogIGNvbG9yOiAjMzMzOwp9CgouZmVlZCBsaSBzcGFuCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi5mZWVkIGxpIGltZwp7CiAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwp9CgouZmVlZCBsaSAuZGF0ZSB7CiAgd2lkdGg6IDQwcHg7Cn0KCi5mZWVkIGxpIC5hdXRob3IKewogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMjBweDsKICBtYXJnaW46IDAgNXB4IDAgMDsKfQoKLmZlZWQgbGkgLmF1dGhvciBpbWcKewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgouZmVlZCBsaSAuZGV0YWlscwp7CiAgZGlzcGxheTogaW5saW5lOwp9CgouZmVlZCBsaSAudGl0bGUKewogIGRpc3BsYXk6IGlubGluZTsKICB3aWR0aDogNzAlOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLmZlZWQgbGkgc3Bhbi50eXBlCnsKICBmbG9hdDogcmlnaHQ7CiAgcGFkZGluZy1yaWdodDogM3B4Owp9CgouZmVlZCBwIGEKewogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBwYWRkaW5nLWxlZnQ6IDQ1cHg7Cn0KCi5jbGFzcwp7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMTZweDsKICB2ZXJ0aWNhbC1hbGlnbjogLTNweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5jbGFzcy5vZmZsaW5lLAouY2xhc3Muc3RvcmFnZSwKLmNsYXNzLmNvbm5lY3Rpdml0eSwKLmNsYXNzLmZpbGVfYWNjZXNzLAouY2xhc3Muc2VtYW50aWNzLAouY2xhc3MubXVsdGltZWRpYSwKLmNsYXNzLmdyYXBoaWNzLAouY2xhc3MucHJlc2VudGF0aW9uLAouY2xhc3MucGVyZm9ybWFuY2UsCi5jbGFzcy5udXRzX2FuZF9ib2x0cwp7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7Cn0KCi5jbGFzcy5vZmZsaW5lICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZDTTBORU1rVkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkNNME5FTWtaRk9FRkNNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01VSXpRMFF5UTBVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHTVVJelEwUXlSRVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZ2tseSs4QUFBRHhTVVJCVkhqYVRGR3hFWUpBRUh6UTNDOUJNa09oQXFoQXJVQWRDcEJRSXlVeUZBdGdwQU9sQXJVRDdNRFFVRU16ZDUxOTVXYVdPKzUyNysvdlBTTkwwOVRDN1lBeFlKVitBbnVnS011U3NmRkVIc0tkUmNpQlJnS0tGOEFkU0NqcXFuQm9KODNmR2pRN3FSazVFdzhKZGprQ0ljZ2t4Q0lFd0ZyQ3F3U0JqODlRM2EzSUhLRVNjUWJjVktmRmJpU3JibFlOUXBGSkhBbTB2cStMR295VHdOWEFoYVBwcEZ6NWlRU1hUaFJGRHdSTCtCYzg0eG94aTIrUUN3YjQzOElOZ0pWYksvZWZBWE9RcXRhV1dNdjBQdCthMXlvNFVhUFJlbnFIdmtiYi9CNnVKZUtGcDdxNFcyY0ZzdHVTK1Fnd0FLTnhXQ2lENllwcEFBQUFBRWxGVGtTdVFtQ0MpOyB9Ci5jbGFzcy5zdG9yYWdlICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZDTTBORU16SkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkNNME5FTXpORk9FRkNNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01VSXpRMFF6TUVVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHTVVJelEwUXpNVVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9Qc0JaTDk0QUFBRGFTVVJCVkhqYWJGSEJEWUpBRUR6TUZVQUhZZ2ZZd1ZtQlVvRVFDa0E3a0FyRUFvaGFBWFNnZGtBSmxFQUp6cGpCN0lOTkpwdmJtZDJkdTR1Y29pekxHQ2tIOWlxTndMTnQyN2N6RVVsOFFMb0RFMFhpMWdEckE1Q2hrWnp6RUtmSUhWQ2plTEhUd05YaWlOMXZBNG84T0lnemlSS2t4UFFsMmw3UXB0ZmFyYkhXeWNaa21uaVBJNUI2VFI5RTBONEQ1OEl0QkFhKy9Hd0RvbEZUSzlsYWluU2w5YmsyTlVobjRHTkFQdWlaYjVIeHphZnJGMnp3d2dIY3h2N0RDZWxLLytZZmFLc0NZZzBiL2cxcUNoSUVpVVkxTi9Pbk1iNENEQUR0c1ZHZVBQSFYvZ0FBQUFCSlJVNUVya0pnZ2c9PSk7IH0KLmNsYXNzLmNvbm5lY3Rpdml0eSAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBS0NBWUFBQUNBTEwvNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk1URXdNVGxGUWtKRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TVRFd01UbEZRa05GT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBHTVVJelEwUXpORVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEb3hNVEF4T1VWQ1FVVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1B1U2Rab2tBQUFESVNVUkJWSGphYkZEYkRjSXdFRXVBQWZqbGp4RktGd0EyYURjZzZnQ0lDZUNUdjA1UXRXekFCckJCd2daMGc0NkFqUndVcXA3a1BDNW5uM08ycXFxTE1XWnIvdVBXTkUxbkptS2U1M25BdmdKNllRQ3V5UGZlK3pBbVdDN29rckVRcW0vZEQ5aGF3QUVrblhuRyt6QVRzUWFPaVZCcWtTSnI0TUhMSW5xbUlwUmZLaTZBdTRUWTRSUUozdzc2b0pNTjJua2lWNHBVcEgrSWxpS3BGSEdIYmkxeVBIZVRoTVF2TFd4b0U2U2xCc0hjL2plbEdDaW9aY2xwdk9NSWRwd1JLVFBURVQ0Q0RBQWhvMExCVWxrNTFnQUFBQUJKUlU1RXJrSmdnZz09KTsgfQouY2xhc3MuZmlsZV9hY2Nlc3MgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFMQ0FZQUFBQ3BySGNtQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRa1pGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlF6QkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3hNVEF4T1VWQ1JFVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZDUlVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGoxMVpMa0FBQUNTU1VSQlZIamFZbUFBZ3VUa1pBTWdkbUJBQStqaVRFaHk2NEVTODVFVUpnQ3A4MENzQUJOalJOSnBBTVQ5UUx3QWlBOEM4WHdvZXlGVS9nSkk4WDhHNG9BakM0aWNPM2N1SXo1VlFBUDNvN3VaSUtCTU1TZ1VnTGlmb0dKb2NJRkNJUUU1R0pHRERoUWFCNkI4VURBbWdvSUppRUdlZWdERUg2REJHZ2dLRFVja3pZWEFrTGtBdGNVUU9VSkFCZ0FFR0FEclB5dUkrVnNObXdBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Ci5jbGFzcy5zZW1hbnRpY3MgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQU1DQVlBQUFCV2RWem5BQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZNVEV3TVRsRlF6TkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk1URXdNVGxGUXpSRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRveE1UQXhPVVZETVVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG94TVRBeE9VVkRNa1U0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QaUcrelZRQUFBQ3RTVVJCVkhqYWpKQ0xEY0l3REVSeHhRQWRvV3pRRWJwS2xBR0FDU2lEUkMyVEFKdkFCaDJCTzhrQlkxeUpTS2VtOXZNbjEyeUNrM051b1M3S2lRZnhPVUI3aVBjWk9wZFNIbDhGRGx3SVFZUk8wR0FMQlhDUG4yc0ZFWnpkMU1FVXBxM0dqeFUwUUdjYTNEVCtlWVByUk9ocFY2d05SZDJZL0s0cmIwdU5qaWF3QTVpWUFEaENiTklpTmpJSFhhQmVWaXhkdE1uUFZJa3NEUXg0RjRvR3A4alN3SkI3WGVXdlEvWWx3QUNpNUZ3TnBHN1pUQUFBQUFCSlJVNUVya0pnZ2c9PSk7IH0KLmNsYXNzLm11bHRpbWVkaWEgICAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXNBQUFBSkNBWUFBQURrWk5ZdEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk5VTXpNa1kyUWpCRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TlVNek1rWTJRakZGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8xUXpNeVJqWkJSVVU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzFRek15UmpaQlJrVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BwbVB0d3dBQUFCd1NVUkJWSGphWWt4T1RqWmdZR0FJQU9JRlFDd0FaVFBNblR1M0FTZ0hZb1BrTHdENUc1aUFqUDFBTEEvRUg0QzRIb2p0Z2ZnQjFKQjhJTllINGdNZ0F4aUJnditCdENOUUoxZ0FHd0NxQVJsWXlNUkFISEFBT1pGWXhXQkFPOFVzVUhvLzBCTkVLWFlrMHVBTEFBRUdBR0pQR3RyUHpPR21BQUFBQUVsRlRrU3VRbUNDKTsgfQouY2xhc3MuZ3JhcGhpY3MgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFLQ0FZQUFBQmk4S1NEQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRalJGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOVU16TWtZMlFqVkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQ01rVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpDTTBVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHVjZm1iZ0FBQUN1U1VSQlZIamFZbVJBQThuSnlRbEFTaCtJTHdMeGhybHo1MzZBeVRFQ0pRV0F0QUVRWHdCSkFQa2dkandRQndDeEFoQWZBT0tOUUx5QUNVaThCK0wxSUJxb2NEK1FkZ0RpaVVDTmlrRGFFR1FJRVBlRERHU0MyaENJSk9FUHhQVkFqUXBBRFNEYkNtSE9ZSUV4UUJKUXhUZ0JFd01KZ0tCaWtIT1FuUUVLbXZWQXdRMVFYNE44THdBTmpYaG9TRDBBcVdPRTZnNkFlaXdBcXBBQjZ2NkZJTTFRLzJDMTFnSFphbVFBRUdBQXZZQTJ2UXRLQUVZQUFBQUFTVVZPUks1Q1lJST0pOyB9Ci5jbGFzcy5wcmVzZW50YXRpb24gICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFvQUFBQUpDQVlBQUFBTHByMFRBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOVU16TWtZMlFqaEZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5qWkVNVGhEUmpaRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMVF6TXlSalpDTmtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8xUXpNeVJqWkNOMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QczlXY1ZVQUFBQ0NTVVJCVkhqYVltUUFndVRrWkFNZzFjK0FHeHhrZ1RJZUFIRWpEa1ZnQTVpZ0hBVThwZ2tBOFFFV0pGME9lQlJmWU1BSGdHNTNBT0w3WUt1QkRBVWdic0NoRm1UTEFSQ0RCY3JKQnlybUI5SUw1ODZkZXdHa0djZ09BT0o0SUo0SVVzZ0lGQVE1TmdFcWFBQU5BWkRZQmlEZUNOUzRBWnViREVEdXd1WUdnQUFEQUJMMklCZ0NzUERCQUFBQUFFbEZUa1N1UW1DQyk7IH0KLmNsYXNzLnBlcmZvcm1hbmNlICAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBWUFBQUJXZFZ6bkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk5qWkVNVGhEUmpsRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TmpaRU1UaERSa0ZGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8yTmtReE9FTkdOMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzJOa1F4T0VOR09FVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BvVVpkNlVBQUFEcVNVUkJWSGphZEZIUkRZSXdGSVJPNEFZNkFtNVFKd0FtRU1NQXhBbGdBOElBUkpoQTJLQk1vQ093Z2JxQmQrU2E5RU9iWEY3aDNyMTM3eldPZnB5eUxGOElPK0RZOS8wejVHSWxrTHdCSy9CUmRFQUxMRUFLWENrMkVoYUtJN0FISnBDcmhNUU0xRXp3Z29FV1dBRzRxR3VDTzZ0T3NqZHVBaEpxL1ZaaUlYczE3bTFnLzR6dnpDaDVScVZjUktwcTdHU1JkQURYNlB0dU5GUkZ0UVN6Uk94RWkydmd3aG1wY3orVXR0UEpZcWQvRmJzaTkrU0h0a3Jjam9ZZi9GenFhc04zeURRb1JZbjg4c0VlV2l1MzVMaTFPSGpkSkNEOUl5N3NCTTRpdXVqZjRXcUI1aGYzRldBQXJjNW9ORXRQYnpNQUFBQUFTVVZPUks1Q1lJST0pOyB9Ci5jbGFzcy5udXRzX2FuZF9ib2x0cyB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOalpFTVRoRFJrUkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5qWkVNVGhEUmtWRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMk5rUXhPRU5HUWtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8yTmtReE9FTkdRMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QbkdhWlowQUFBRGVTVVJCVkhqYWZGR0JEWUl3RUtTRUFkaEEzQUFuc0d5Z0cyZzZnSFlDWlFKMUFBSk00QWl3Z1d5Z0c4Z0kzaVZuMHBoR2txUGYvdjFkLzJzU2ZjNjVBc3N1aVg5ajB6UWpnelE0dkFEckNIa0IzQ0dZYzVOSjNXTFpBRXNvdlg0cjVINENmQmFvMXlRcmVRQ28yT3NxTlRBZ2R6UDRIVVZZcWZqSk93TjBZcTVpRVhndDRpS1ZGZFZuckNVd0k5NENIdkVWc0JMaTN2SktrNXJ0U0tZSzFFbzVrTnlyZ1BGTWh6M0h5Y2FoT2tuMUFieEY3TUkrdjFNNEEwTTRGYm1FZWZhV0dCM2thdGJEcFl1TWxJN3NhelJCZ3EvYy9ubnBpc0ZIZ0FFQWxrVlg4MU9qQ3U0QUFBQUFTVVZPUks1Q1lJST0pOyB9CgouY2xhc3NfbmFtZSwKLmJyb3dzZXJfbmFtZQp7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgY29sb3I6ICMzMzM7CiAgZm9udC1zaXplOiAxMXB4OwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgbGluZS1oZWlnaHQ6IDE7CiAgcGFkZGluZzogM3B4IDVweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAtMTVweDsKICBsZWZ0OiAwOwogIG9wYWNpdHk6IDA7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGFsbCAuMXMgZWFzZS1pbi1vdXQ7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouY2xhc3M6aG92ZXIgLmNsYXNzX25hbWUsCi5icm93c2VyOmhvdmVyIC5icm93c2VyX25hbWUsCi5jbGFzczpmb2N1cyAuY2xhc3NfbmFtZSwKLmJyb3dzZXI6Zm9jdXMgLmJyb3dzZXJfbmFtZQp7CiAgb3BhY2l0eTogMTsKfQoKLmJyb3dzZXJzCnsKICBmbG9hdDogbGVmdDsKICBtYXJnaW46IDAgLjc1ZW0gMCAuMjVlbTsKfQoKLmJyb3dzZXIKewogIGZsb2F0OiBsZWZ0OwogIGhlaWdodDogMTdweDsKICB3aWR0aDogMTdweDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoJy9zdGF0aWMvaW1hZ2VzL2Jyb3dzZXJfbG9nb3MucG5nJykgbm8tcmVwZWF0IGxlZnQgdG9wOwogIG9wYWNpdHk6IDAuMjU7CiAgbWFyZ2luOiAtMXB4IC4yNWVtIDAgMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5icm93c2VyX25hbWUKewogIGxlZnQ6IC0zcHg7Cn0KCi5icm93c2VyLmllIC5icm93c2VyX25hbWUKewogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5icm93c2VyLmNocm9tZSAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOyB9Ci5icm93c2VyLmZmICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xN3B4IHRvcDsgfQouYnJvd3Nlci5zYWZhcmkgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzVweCB0b3A7IH0KLmJyb3dzZXIuaWUgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTUycHggdG9wOyB9Ci5icm93c2VyLm9wZXJhICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC02OXB4IHRvcDsgfQouYnJvd3Nlci5zdXBwb3J0ZWQgeyBvcGFjaXR5OiAxOyB9CgouYnJvd3NlciAuc3VwcG9ydAp7CiAgZGlzcGxheTogbm9uZTsKfQoKCi8qIEVYVEVSTkFMIExJTktTICAqLwoKLnBhZ2UgaGVhZGVyIGFbaHJlZl49J2h0dHAnXTpub3QoW2hyZWYqPSdodG1sNXJvY2tzLiddKSwKLnR1dG9yaWFscyBhW2hyZWZePSdodHRwJ106bm90KFtocmVmKj0naHRtbDVyb2Nrcy4nXSksCi5mZWVkLXNlY3Rpb24gYVtocmVmXj0naHR0cCddOm5vdChbaHJlZio9J2h0bWw1cm9ja3MnXSksCi5pbmZvLXNlY3Rpb24gYVtocmVmXj0naHR0cCddOm5vdChbaHJlZio9J2h0bWw1cm9ja3MuJ10pLAphcnRpY2xlIHNlY3Rpb24gYVtocmVmXj0naHR0cCddOm5vdChbaHJlZio9J2h0bWw1cm9ja3MnXSksCmFbcmVsPSdleHRlcm5hbCddCnsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBa0FBQUFKQ0FZQUFBRGdrUVlRQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UmpaQk5FTXlRekZGUWpNeU1URkZNRUZGTURRNVJUUXdNelkyUlRJMFFVTWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSalpCTkVNeVF6SkZRak15TVRGRk1FRkZNRFE1UlRRd016WTJSVEkwUVVNaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEdOa0UwUXpKQ1JrVkNNekl4TVVVd1FVVXdORGxGTkRBek5qWkZNalJCUXlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwR05rRTBRekpETUVWQ016SXhNVVV3UVVVd05EbEZOREF6TmpaRk1qUkJReUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGo5dzh1UUFBQUJPU1VSQlZIamFqSkRiQ1FBd0NBTzFkRmczMG0xVDhpSDBLUTBJUVNRNVZBQVNFWkJDVFQ3VTA1aVozZzdZOHBXa1pLckVwTDVEMzJvYmx5K2VCWnhwUE16VTR5WHVEbkp4WmovUEVHQUFQazQ2RUUvTVFtZ0FBQUFBU1VWT1JLNUNZSUk9KSBuby1yZXBlYXQgY2VudGVyIHJpZ2h0OwogIHBhZGRpbmctcmlnaHQ6IDE2cHg7Cn0KCmEubm9leHRlcm5hbCB7CiAgcGFkZGluZy1yaWdodDogaW5pdGlhbCAhaW1wb3J0YW50OwogIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKfQoKZmlndXJlID4gYSwKLmZpZ3VyZXMgbGkgPiBhIHsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7Cn0KCgovKiBIRUFERVIgKi8KCmJvZHksCmlucHV0CnsKICBmb250LWZhbWlseTogJ09wZW4gU2FucycsIHNhbnMtc2VyaWY7CiAgZm9udC13ZWlnaHQ6IDQwMDsKfQoKaGVhZGVyLm1haW4KewogIGJhY2tncm91bmQ6ICNlZDQ3MzI7CiAgd2lkdGg6IDEwMCU7CiAgcG9zaXRpb246IGZpeGVkOwogIGxlZnQ6IDA7CiAgdG9wOiAwOwogIHotaW5kZXg6IDEwOwogIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCmhlYWRlci5tYWluICNob21lX2hvcm5zCnsKICBkaXNwbGF5OiBub25lOwp9CgpoZWFkZXIubWFpbiBoMQp7CiAgZGlzcGxheTogbm9uZTsKICBjb2xvcjogI2ZmZjsKICBmb250LXNpemU6IDFlbTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMCAwIC4yZW0gLjVlbTsKfQoKaGVhZGVyLm1haW4gaDEgYQp7CiAgY29sb3I6ICNmZmY7CiAgZm9udC13ZWlnaHQ6IDgwMDsKfQoKaGVhZGVyLm1haW4gbmF2CnsKfQoKaGVhZGVyLm1haW4gbmF2IHVsCnsKICBtYXJnaW46IC4xZW07CiAgcGFkZGluZzogMC40ZW0gMC42ZW07Cn0KCmhlYWRlci5tYWluIG5hdiB1bCBsaQp7CiAgZm9udC1zaXplOiAxM3B4OwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKaGVhZGVyLm1haW4gbmF2IHVsIGxpIGEKewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbjogLjFlbTsKICBwYWRkaW5nOiAwLjRlbSAwLjRlbTsKICBtYXgtd2lkdGg6IDEyNXB4OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCmJvZHlbZGF0YS1ocmVmKj0nZmVhdHVyZXMnXSBoZWFkZXIubWFpbiBuYXYgbGkjZmVhdHVyZXNfc2hvdywKYm9keVtkYXRhLWhyZWYqPSdzZWFyY2gnXSBoZWFkZXIubWFpbiBuYXYgbGkjc2VhcmNoc19zaG93LApib2R5W2RhdGEtaHJlZj0nd2h5J10gaGVhZGVyLm1haW4gbmF2IGEud2h5LApib2R5W2RhdGEtaHJlZj0ndHV0b3JpYWxzJ10gaGVhZGVyLm1haW4gbmF2IGEudHV0b3JpYWxzLApib2R5W2RhdGEtaHJlZj0ndXBkYXRlcyddIGhlYWRlci5tYWluIG5hdiBhLnVwZGF0ZXMsCmJvZHlbZGF0YS1ocmVmPSdzbGlkZXMnXSBoZWFkZXIubWFpbiBuYXYgYS5zbGlkZXMsCmJvZHlbZGF0YS1ocmVmPSdyZXNvdXJjZXMnXSBoZWFkZXIubWFpbiBuYXYgYS5yZXNvdXJjZXMsCmJvZHlbZGF0YS1ocmVmPSdwcm9maWxlcyddIGhlYWRlci5tYWluIG5hdiBhLnByb2ZpbGVzLApoZWFkZXIubWFpbiBuYXYgLmN1cnJlbnQKewogIGJhY2tncm91bmQ6ICNmNDkwN2Y7Cn0KCmhlYWRlci5tYWluIG5hdiAuaG9tZQp7CiAgZGlzcGxheTogbm9uZTsKfQoKI3RpdGxlLApoZWFkZXIubWFpbiBuYXYgYQp7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKaGVhZGVyLm1haW4gbmF2IGEsCmhlYWRlci5tYWluIG5hdiBhOmhvdmVyLApoZWFkZXIubWFpbiBuYXYgYTpmb2N1cwp7CiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKfQoKaGVhZGVyLm1haW4gaDEKewogIGRpc3BsYXk6IG5vbmU7Cn0KCiNzZWFyY2hfaGlkZSwKI2ZlYXR1cmVzX2hpZGUKewogIGN1cnNvcjogcG9pbnRlciAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDE5cHggMCAyNnB4Owp9Cgojc2VhcmNoX3Nob3cKewogIGZsb2F0OiByaWdodDsKfQoKI3NlYXJjaF9zaG93IGltZwp7CiAgcGFkZGluZy1sZWZ0OiA0cHg7CiAgdmVydGljYWwtYWxpZ246IC0ycHg7Cn0KCi5nc2MtY29tcGxldGlvbi1jb250YWluZXIKewogIGJvcmRlcjogMXB4IHNvbGlkICM0ZjRmNGY7CiAgbWFyZ2luLXRvcDogMTRweCFpbXBvcnRhbnQ7IC8qIGRvbnQgbGV0IHdpZGdldCBvdmVycmlkZSB0aGlzICovCn0KCi5nc2MtY29tcGxldGlvbi1jb250YWluZXIgdGQKewogIGJhY2tncm91bmQ6ICM2NWE4YTU7CiAgY29sb3I6ICNmZmY7CiAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnOwogIHBhZGRpbmc6IC40ZW0gLjZlbTsKfQoKLmdzYy1jb21wbGV0aW9uLWNvbnRhaW5lciB0ZDpob3ZlciwKLmdzYy1jb21wbGV0aW9uLWNvbnRhaW5lciB0ZDpmb2N1cwp7CiAgYmFja2dyb3VuZDogIzRiN2M3YTsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKfQoKLnN1YmhlYWRlciAuZmVhdHVyZXMKewogIHBhZGRpbmctdG9wOiA4cHg7CiAgcGFkZGluZy1ib3R0b206IDhweDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyAjZmVhdHVyZXNfaGlkZQp7CiAgcGFkZGluZy10b3A6IDIxcHg7Cn0KCi5zdWJoZWFkZXIgLmZlYXR1cmVzICNmZWF0dXJlc19oaWRlLAouc3ViaGVhZGVyIC5mZWF0dXJlcyBoMgp7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5zdWJoZWFkZXIgLmZlYXR1cmVzIGgyCnsKICBjb2xvcjogI2ZmZjsKICBmb250LXNpemU6IDQ4cHg7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogNXB4IDAgMCAxNXB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsCnsKICBsaXN0LXN0eWxlOiBub25lOwogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAxMHB4IDAgMCAyMHB4OwogIHdpZHRoOiA3MTBweDsKfQpodG1sW2xhbmc9ZGVdIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsLApodG1sW2xhbmc9cnVdIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIHsKICB3aWR0aDogNjAwcHg7Cn0KaHRtbFtsYW5nPWVzXSAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCB7CiAgd2lkdGg6IDU0M3B4Owp9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaQp7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDJweCAwOwp9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhCnsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvc3ViaGVhZGVyX2NsYXNzZXMucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGNvbG9yOiAjZmZmOwogIGZsb2F0OiBsZWZ0OwogIHBhZGRpbmc6IDNweCAwIDRweCAzMHB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgd2lkdGg6IDExMnB4Owp9CgpodG1sW2xhbmc9ZXNdIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIHsKICB3aWR0aDogMTgwcHg7Cn0KaHRtbFtsYW5nPXJ1XSAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSB7CiAgd2lkdGg6IDIwMHB4Owp9Cmh0bWxbbGFuZz1lc10gLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYSwKaHRtbFtsYW5nPXJ1XSAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhIHsKICB3aWR0aDogYXV0bzsKfQoKLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5vZmZsaW5lICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgICAgMnB4OyB9Ci5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIGEuc3RvcmFnZSAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwICAtNDhweDsgfQouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhLmNvbm5lY3Rpdml0eSAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAgLTk4cHg7IH0KLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5maWxlX2FjY2VzcyAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0OXB4OyB9Ci5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIGEuc2VtYW50aWNzICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOThweDsgfQouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhLm11bHRpbWVkaWEgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjQ4cHg7IH0KLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5ncmFwaGljcyAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI5OHB4OyB9Ci5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIGEucHJlc2VudGF0aW9uICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zNDhweDsgfQouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhLnBlcmZvcm1hbmNlICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzk4cHg7IH0KLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5udXRzX2FuZF9ib2x0cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ0OHB4OyB9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhIGgzCnsKICBmb250LXNpemU6IDE0cHg7CiAgbWFyZ2luOiAwOwp9Cgoud2F0ZXJtYXJrCnsKICBwb3NpdGlvbjogZml4ZWQ7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtNjA1cHg7CiAgdG9wOiAzMHB4OwogIHotaW5kZXg6IDI7CiAgcGFkZGluZzogMjBweDsKICBvcGFjaXR5OiAwLjY1OwogIHdpZHRoOiA2OHB4OwogIGhlaWdodDogMTE2cHg7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzBBQUFCZUNBWUFBQUMzckozMUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk4wSXlNRFkxUXpkRk16STVNVEZGTURrMk9ERTVRMEV3TlRaQ09ERXdSVElpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TjBJeU1EWTFRemhGTXpJNU1URkZNRGsyT0RFNVEwRXdOVFpDT0RFd1JUSWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8zUWpJd05qVkROVVV6TWpreE1VVXdPVFk0TVRsRFFUQTFOa0k0TVRCRk1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzNRakl3TmpWRE5rVXpNamt4TVVVd09UWTRNVGxEUVRBMU5rSTRNVEJGTWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1Bxa29zNEVBQUFVZFNVUkJWSGphN0pzOWR0cEFFSUJYUEZvZEFBNmdDOGgxTFBmZ25xU0hMZ1c0QjNxVEloM3FZM3FiQThpcG93TkVCMEFINEFET2JqenJUT2F0Vml0cHRaSVQ1cjE5TWpKSTM0N21keGM4cHBFUFg3K00rV0hPeHpVZlBwdys4L0hNeCs3NzUrV1pkU0NlQmpqZ2h6MkNwU0tBRnh3ODZ3VTBhUGdiQWs3NVNPQjFDRU9DMzdyVytMRGcvQndCQ3pNNGtFbHQrR0VDNzVueEVidUVIaFNjbDVyTUtMQVFmazVBNStTOW5VT1A0SmhvUHB0MkJUMXM4TmxUVzFEYy9MRGZpQ2VhWUw4WnNoNEpoNDM0WVlXZXRKUTEvMS9Nd1dPZGVYUUJQT1dIZXdYd1czQ0FBTkFQYUFpeFMzUkthUFNHYS9hS0g3Y1FXb1ZNeE9UNm91bHJFbUpqYWNQOCtNUVBueEQ0ckMvUWtYUzZnaEFyblA0SUw0TUI2NWZvSXRLNUxFNzNXaTdRRitpVzBqak5aQk1VQldTakVJUG40NFlpUkFra1JWSEJMVFJrTWl3K1RFSWtneTJjV3lvYWlyQk93V1d6OXBEYVBSR1l0YUk2RkdOTWtvcHo2QnhhcnhPcEpTandGaktjZkk4UExWM1FxaU9LRy9FaHVwVXBPdjFUa2NVRUhNNXVSd3dNN3hGUDU2N1Y2QUYxN3FPaWZCUU8rQWpheFpJVS9FMVRkTllLTkFEaDdqd0gyOHhKM1RzdFM4TVYvMWZQcGhYMitWZXpDeUZ2RFJOYTh0ZEpteDM2b0Fid2xsWmkvSFdDT25JZnhldE9vQ01GOEZQQmU0K0t4cmdUNk1BUW1MbGNzREYxUkMwd3N1dGFqdFVZV3VIOUpzQUJNYU5uWjlBRlRtY0NqRU5oakROanE5Q1dnSTl5YmFKMWFJdkFHeWVPcUxESFhnTkxUYzhiQWpPWHdCSmFocXFrRG5EWFBXSldFZmpjQitneTJXRWJ4clV5RlBNcUdSZGsxNkxNZXphRmxxWGxWSE56dlBvam5RNC9tWldxV1NEK01sZGRuNS9EV3lXNnBPUmo2Q2RVNU95THdEbm9ncjJ1Wkc1UVpTY25MQnJZZXpBaG1kTDNwSEFTMTMyUTZWNTA1M3lzME1UT1RML3pJSjlHNXNFRkh2Qko2UGRLSDVXaFkyWUFWTloxaTN1bW1udjlrRTlhMnZRQ1BlNUFwM0dpL1F3K20ycksxUVU4cFlPbUtmNVlBb3lMc2RUVGRNYkdHa2RhRDBIcnYxc3hXb1BBUFNKa05vbko1aW5hQWhSeTZ5a3VXaHU4RFlHVnFVYzB5YnVCb3BDdlpTb3RDbzVBQjJXYzdoTTRMRmxJczBpbDNRODByVk9uNEhDdkRVbHUrb3pZSlRqeUxlbXdCK3l3ZzVLUTVod2NycjNHd1lCejdDclZIaHJ3b0VVTlJ6aDYxU3FZRUhoS3dHY1dnU01JYmFYaDFxdHhjUnpvWlViYlFTMVNOMExNRldtK01LMTdOVyswVjl3a2g0TG5VTmFOZ3htSWlVODFKV3NoZE5PTm9qTlpDcHVCVFpiSkJNclpnTlFwUnZzdlRhR0YzZDJ3MThYSHZFSWhuNk9qeUhLM1VQSWFyWmMwM3I0QVJ4SFFzYWdUVEJacXdQNnZYTFJiSmhOb2RXV3BGZWcrTnJhOUVhT1FCN0dVa1VZMkFFZmNXZVNab2h5d0k4MXpMczNQMUJIM21tWnozNUpDYVljZnc3alk5QVg2bjRPMnNhR2ZXdVFaTTRQdFBCdHBmR0d4cHA2VDd2dGRtTWZZaVUwckVrOFRHYm15YVR5QkthdTR4VnhuTjh3R3RFODBOYS80K1poa1dDY2h6MlpYN2pzM0Q5SzFISmgra2J6VE9EMG03ZGZiQkhScnprMGNldGlpeDRjUWQ3VzlZdGsyb0F2endOOW5Ndm1pWUZ6Vm5xMDdZc01lTVhDcGFhcWhzclFld2ZxSTZYSkQ2K2JCR0ZyaWdoOGk2Qnd1cTVyQ3JkVWVsbEw1cUV0TjQ4bmNRK21hc1QrL3NJc0tITmU1ZWZpa3ZnNlIvVWFhdXVOVXh4RnRsYWI0aGlJTEhrdTBtQ3FXSHZ6T3pBUDJSalpnSGdHSzEzSkR0SEZxdHdVOTFrd2dZOFZiekxVYzJaWjVoSFVqQ096SWhsMW9Xbjd0UXRxMHNObG5WWWFFWFlBUVJaSlJWK1pCTTU0WUt3NG92Mk9kZ0xQVyt1R0MwemdOV3B5d3Z6ZVcvcy9GbWd2MEJWb2ozc3ZMeTd1RC9pWEFBTDBsUGtZdGZyaEZBQUFBQUVsRlRrU3VRbUNDKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXMgZWFzZS1pbi1vdXQsIHRvcCAxNTBtcyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXMgZWFzZS1pbi1vdXQsIHRvcCAxNTBtcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAzMDBtcyBlYXNlLWluLW91dCwgdG9wIDE1MG1zIGVhc2UtaW4tb3V0OwogIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXMgZWFzZS1pbi1vdXQsIHRvcCAxNTBtcyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDMwMG1zIGVhc2UtaW4tb3V0LCB0b3AgMTUwbXMgZWFzZS1pbi1vdXQ7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLndhdGVybWFyawp7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRVFBQUFCMENBWUFBQUE4YVpRZkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlFqUkRRVE01TkVKR1JqZzFNVEZGTURrNVJFUTVRa001TnpJeU9VUTRSREVpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UWpSRFFUTTVORU5HUmpnMU1URkZNRGs1UkVRNVFrTTVOekl5T1VRNFJERWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBDTkVOQk16azBPVVpHT0RVeE1VVXdPVGxFUkRsQ1F6azNNakk1UkRoRU1TSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcENORU5CTXprMFFVWkdPRFV4TVVVd09UbEVSRGxDUXprM01qSTVSRGhFTVNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1Bsem02OFVBQUJZd1NVUkJWSGphN0YwSmNGUlZ1cjYzdTlPaDB5UUJBb1JBUWpJd01Dd3lFSXNTQ1VzSVFsaUVjUVFWbUFJSDMyTVJMZUhCVXdFVlpKRUJVWHpxVUVvSitDZ0dGU01XeHZFaG9CSjJFQWhMQUJHSVlRMmJRaGF5ZFphKzd6K1hjNXEvL3o3M0pwMTBJRkxjcWxQZG5UNzM5ajNmK1pmdi84OS9iaFRsL25IL01EdlVXamlmL2syVDlOSHFLaUMyR29LZ29xWklYalhKcTFhWHdWR3IyVitBWUVHdkZnS09Ra0J3ODZhaFY2MnVnV0x6RXd5VkFNQ2FsVGNMQVVZaFFMQld3WnViQUZSblFMRlZFd3dCZ28wMERJeENnQ2duclFMMXFUUHFZL05UVFN3RUNEdTBJUFFheEwvSEVzSUdYc1piS1grbHF1WCtQVW9JQmtPQUVNeGJQZjdaanFSRVFkSlJ5bHNKTkpjRUVFMWlpS3RyQzdXN0FZaWRnOEJhQ0RRSEFpV0lBRktHd01CZ1VZT3JWVElZMVVCcUZSTzNydmtMbEsyS3RrUFlCUnVTREFhQUUxcDlEa29JLzd0UUd3V3BDNU9LSWdrZzFMaktRRkVsZHN6STNTdmtPckpybWdKajhjT2dZblVKNWdBSVFNS1NrNU5iSHpod1lISkpTY2t5VGRNK1pvMjlaMzlyMjdadEZPc0RMWlNmNCtEWHdCS2xTbFNKVGdoVldTR3B3ZWdWWDlkR3ZLQnFRQTA4aDlVUFZRbENOeUFrZ2cwd2RPellzUjArK2VTVDEySmlZdjVnczltQ1BPSUg3NXMzYng0OVljS0VwSXNYTDU0NmZQaHdMdkU4TWxlc21YZzJHekxlZGpSNGJOU3h4MU9yb0Y1K0VUTVYzVVE5S2hYUUdnd1lNS0JWYW1ycS9PRGdZRGJyeXFsVHA4NmxwYVZsaG9lSDEzdnd3UWVqUVRwaTJkOWRMbGR4NTg2ZC8vdmt5Wk9YNFdNZXRIeG9ONkVWY25WeWNWdFRJWkZNQ3hxbzJjQUZxTUsxQysrR1hiM2J6R1pWQm9pWW1XQXU1Z0lNSmhuaERKRDA5UFRKTVBEdXJQTkhIMzMwL2NTSkV3OWpvN3A5Ky9ia1hyMTYvWmw5K1BiYmI3OFpQSGp3R25pYnl3RmhyWUNEVW93QTBZamR3bTdlVHRRQ3E0T2J1SGtYOG5BVUdLbk5zdmxoUTZSaTI3cDE2eit4VHBjdVhib0NZQnprMzN0c1UrL2V2VGZldUhHalpjT0dEUnUwYjkvK1R3WWlicFZRZnhYcFAxWVJCN0lYTXE4bTNMeUxTSkNSWjZ1V1VaV3hVMzB3b0JxTldLY2RPM2FjTm9wK2p4MDdkcDY5aVl1TGEwUEVuYkpiMWNCMlVaWDFTQ2h2RFZGcndMOExSUjVRVUFJajhLc2xJU29CeFNveHloaDl6MmVRbmp4aXlHMlNHSWg2QUN3ZHdRaVErbWlnanBkZWVxbFRVbEpTTzNZQ0dPN2Yzbjc3N2YxZ3gyNGdra2hkTVhiMVlueWFQenhFa1FSMEZoS3pLQ1F1b2NFZGxVcUxRVUJJUFF0MjgxNDI3TTAzMyt3RktqcFNTS2c0eG84ZlA1YmJxclZvc05pYmxSUFBwbFdYaDVnUkk4VmlzUmhaOXdwVlZUV0pDaHBGeWxiQ2lJVjBPSVNFTEYrK1BQbmxsMTkram9JaGprR0RCZzBCWS84OG9nZjFFR21raHRodkcySUdqR2VnZk5BVnhKckxBSkhaSXRwa1FPajJBd2hneXpGanhvd1VGMXU3ZHUwdTREL3Z3Mis4dFdqUm9nMUFCbG1Jb0REUHQyTEZpbjRTSTJ3TEJDQ3lPTUpMMUJBZ1BtSXBBVVFXSE9MbUJRSnFJVUFDdXduT3MyelpzaTJqUm8zNkVXd0hrMDdiekprelR5UW1KcTRTb0F3ZE9qVFp4S3RKV2FzL0VtTEtXL2lnM2JMNEJBNThua3dDWkFEVVI1NUNOR2UzYnQyNnNJdUFLOCtiTkduU1lhcHkrL2J0dTdsbHk1WU0xcWRwMDZiUlJQS012RnFOY3FyU2ZDZ0hSQmFZcVFRUVFmOHBWYmZ3Nzl6OHBoMUVPblJBM0c2M1BvbS8vdnBydm9SajZMK1puNTlmU3Nab000aHJsRUFEY2hzWjcwRjdCV1hrdTJBQ25BVzVkQmYvem9haTZSRDBHaUlBNGRlazNrdzJLVlpKTTh3QjF4UVExY1JOZTI0QUJvSDVpc01nQldubkRGUGozK0ZjaTJqMUFBZ0xtUUNxb200RHI2WWFzT0dBU1lncWtSQUxpWUYwTDFKUlVZRUJjVXBpRW1GUHlwREt5R2k2WFVnSWtZd0tGSi9JQUZFTXVFN0FWVVlsZ0ZoSjdrU2ZlUUFFLzA1OTVJbEt1UlNVOEZhS0Fqc01tc2NnRXZYVEpDa0VqWE1pV1hxeTFnREJOdUtXM042YU9ac2sxUmlFVmViWlo1OXRNM3IwNk5nZVBYcTBZSitMaW9wSzkrN2RtelY5K3ZUZEJ3NGN1TTR1OWRCRER6VUFKdHF6VTZkT01SRVJFU3pOb0J3L2Z2enlGMTk4Y2JvS2dDaEVRaWhGVUFPOWNrZDFFd01TUkNoM0VGV1pEei84TUFGZkpDUWt4TjYzYjk5MisvZnZiemQzN3R4dE1CZzN4Q2NKRG9jakdQZnIyTEZqRkd1U2dicEpqSEpYbGpKVkdzdHdZeGNrU1JFRUNVTW9qb0tDZ3ZJZmZ2amhWeUJVeFFrSkNRM2k0K04xQ3Y3NjY2OG40bjVIang2OUNyemlhblIwdExOWHIxNHhETHpLM0g5TmwwcHJxaktlbWVkU1lDZUE2SFlFQTNMNTh1V1NSeDU1Sk9QRWlSTXVQcU5uWDN6eHhhWnZ2ZlhXQS9nSFhudnR0YjBMRml6NFJialNaczJhQmUzWnN5YzVMaTZ1RVNHQ0FWM1BzZmhoT0ZXRGhKRlFHU3N5aExydGdFRTR3QmEwZSt5eHgySkZ2NTkvL3JtQUErU1JJZ2pacjYxWnMrYWM2QVBSNmxrQUl3dmJoeXRYcmhRTkd6WnNzeVM2MXFxd2hCRlFRTXl5WjFhSkRkRWw0Nm1ubm9yS3pNd2NDbEZwNThqSXlCRFJMeWtwcVRGSVI5Y3BVNlpFWXE3eTVaZGZYaGQ5dnY3NjYwdGtDVlNQbmc4ZE9wUnovdno1M3lTaGduYW5KTVRJWFdGUGdtMkk3aHBmZWVXVjFwOS8vbm1TMCtuVU0vQlhyMTR0T256NDhHOHd5OFdpLzd2dnZ0c0tRR2tpWTdQWHIxOHZSY25pTXR6QUs1VklET29kVVJuVklERkVhVERtSVNvREE4UzltL2c3cU1NaFVKMS9nK0hjR2hVVjlkMjRjZU1PTTZQS3ZudmpqVGRhTm03YzJHY3BCSGdFbG94UzNKZ1hrdGlRV2xjWjFXQ1JpRkp1S3pHRXJUQVlzMmJOMmcwdU5BTVJyNUtWSzFkZWVPKzk5N0owaGxhL3ZtM01tREVzLzFrT0E2eEFnV0lGQVVKa3o4c0l4N2dqS21OVTlrQzloOWV5SkhDSm1Qbno1M2NYbitmTW1iTWRKT0E0SDR4WTVOYmIrKysvN3pHZ3JWcTFZdGNyNTFJaEpLU2NTZ1lGUkNJaFNpQ0FzVlVpR1ZZSnI3REowdnZDSGJKajNyeDVhVUN5VHBEWmM0dUZyMnZYcmhVaGFYRHpnVkpBc08zd1hJZElpQlpvRzJLclpJSEtTdEo2ZGtuV3llc0FLZmtCQ05aeElzNDRrMTQrY2VMRXBxSi9mbjYraTZvTWx4YWFlZk9pM1FiNUY2VTJKTVFpV1JPeFU0N0IraXhldkxnVFBobnN4K2JaczJjZkl5dGo0cG82UVAzNzkyK3daTW1TcnVLY1R6LzlORnRpUTl3RzY3MUtUVmlvdjREUUpRZFpZWXduVWZ2T08rOTBuVHAxNmxCeDhzS0ZDemVDVWMxQVlOQUVrREp3NE1ER3dEY0dBQVVQNGt1Zko0NGRPOFl5WHhYWWh0U0dLdFJVUW1TVlFwNjhCQmpGaEJkZWVHRzRPQW5ZNlArQnV6MUN3TURCbnpwNDhPQ21FSzMrUmNRampJMkM2aHpqL1N1SWhHaUtiM1dqWnBLUWtpVzhBMnBVYVMySXAzM3d3UWU5SmsyYU5FS2NBREhJdjJmTW1IR0lpTGNYZDNuMDBVZWJBUmpESUlMVndkaTRjV01XQUxRZnI4ZmlRYUJrazVWUWRKcXFySFVKd1N0cnRCYkQvdlRUVDdjR01FWWowcFVLMVB5UTRsM3Y0WldoR2pKa1NMT1VsSlFuUlRpL2FkT21Yd1lOR3JRUHpib215YzlhMEwxWlpMWUU1VlQ5bFFhdHVoTGlFOGJQbkRuekw2SWpHTWF2Z0hRZGtTUm9QR0krZE9qUUtLRHdJM0J1QSt6SVBzVzN6c3hyNXVHOUZlVld2T3BhSlFraWYreE5wYVZWTnBPNHhXZHBzVjI3ZHAxWmh5TkhqdndNSWZzUnhhU1dDeUxjcU04KysreHZOTkdqeUNzR3ZkU0FSODVCNkI0RTRLckJJQ3ZMaUZIeXBsV1ZxUnFWYm52bElFK2ZQbjNGSUkydnY0Y3d2Zm5hdFd2SENEQ0tpNHRka3B1cnJOQk90blNnU3NKL3QySmNZS2VZQUtGVkJSQ3RLcUtJeEpZR2ZqcEFLMWFzK0ZzOU9GaUhyVnUzSGwrM2JsMkdPQmNDUFN1YWNVOWl1RTJiTms3UnAydlhybzBWZVEyOTFySmx5MGdPY3JIQlNxR1JkTWdLWlV3TFpqU1RDK2d0THkrUDFWMG8vZnIxNnh3VEUrTXdpSWhWQ045eldMOGRPM1prSkNVbGJZRFEvNnI0a2RXclY4Y3JxREtBTllpQ2JlREdPNHMrRXlaTWlJZS9CVlAxQWhYc0lZRGVzbVhMY1FQeXBvV0doZ2FiNUYxTnBkTmlncWhQamZxdVhidjJzQTZzUEdydjNyMmpPU2crVWdLenZSSmltMy8wN3QxN1BRdktnTVQ5QkNBeEFxWUFVMjN6NDQ4L0pvSnhaY3NScFpNblQyN0JVb05ObWpTcGp4UFBHUmtaajArWk1xVWx1dytRR09jMzMzeVRPSExreUo3c2U3YVlEUkh6VWNXM3prUGpBYU9laklhWTZhTGlXL1ZveW41VmlkNks4aVdIY3J2YWtJWG9yRndwL01xVkszTWpJeVAxSllUczdPeXIzYnQzLzllRkN4ZUt5STlTY21ZRkl4c05NenhHWW1ROUI4dUdGUllXdXRxM2I5L0N6RldBTkMxYnVuVHBLZVRtdllwd1FLWC93ZnFscDZmdkJUQS9WRzVWUFlyS1IxSDlLQ29meTNHMjNtSWdIUUw1TXBTUDBQTVpQWHYyWEFLZ3NCU2YwcUpGaTBpWTNURWdLU0dLNzRxNktPdG01eGFucHFabWpSNDllaVVZNUxPeVFXN2Z2djBvWEh0Tmh3NGRWbS9Zc0dHL3JBOVQyVkdqUnIwTllQekVyKzFUQlRScjFxd080djJCQXdkT0VYc2xreWpOVEVKd1VJZXJsVU9ScElTMWJ0MjY2YzZkTy84TERHUnpJaW1GaW5lTlNMbUV6cXNqUm95SUJ2YjZ4N0N3TU1lNWMrZHlnY1Ztd2ZWeThJMkJ5am1tVFp2V0hveG9RN1lTQjE3ckNBU0M1OGphQ3kzYnRPN2V2ZnRKdUpjSDJaZkp5Y2t6dnZ2dXU3TkVRa1J0TEMwRGxmcHNNY3V5eXI4dzFFSkJUNXZBSUthQThZc1NvQ1FrSkt3R3NTOGs2VDg2azI0ekRpSTU2R3dhbFlqYVFNSWl3SkMvekU0NmNlSkVCa2piLzNBUU1DQUZYRjFLYUs2bHFpb2oxS1dJSTZ0WEhtZGxaZDJBRy9qblpUaXcrc0NNT2hUZnNpdHhyUkkrTXdWOHB0Z041dkxHSk9RR2J6bTg1WkpCdU5BZ2FMcENYYng0Y1Q4eGtJOC8vdmg3a3BNdE01QmFwU3BleGswV3BGMThJQUlVdmZvWVFMbU9RV25ldkhrekFPWHZzYkd4RGdrLzBTUWdpMnZsazViSEFSUEdqNHEzU3RVRllxdy9DbFU1YytaTUpzUlp4MlVwU0tXUzhtNkxDWW5CbVc4TVNBR2E0UUlCaWpDMERCVFE0LzhBVUVKSVB0WUlHTmwxQzVHZWx4Q3B3TnRVOUdRVi9GYjlCUXNXUENFR01YdjI3QlIwZlJkT1VpdStwZDFWeXJwaktjR2VCa3VJcHpGUWV2VG9zWlNBTWc1dU5OUWs5WWpMc0VzUU1QaVZ1a1VMVFZxQmlvYkJiLzBuNDBhc1ExcGEyclkxYTlhY2tZQlJxbmh2QVBCTFpjeHNTVEVIUllpMFIzMFlLRmg5T0NoaHl1M3FRcnpCQ0VzTFhtN0FneWhIUVoyVjVtY0FqSEJ3NThQWWI3SGZaQlBTdDIvZmRaUXFJTnRUVmgxQUZBbDFsNmxPSVZZZGJtaHpBSlFQTUNqQWJzYzkvdmpqY1lwM05WQ3c0bHUwajR0K3kwbCtoWlo0TzREN05JUnJqKzNTcFl0bjh3RjR1V1ZFb3FtNlZDZ21PeUVxVzdtanNZeVJQU2xFcjhWZzBITGh4ajRTQkl4NUgrQVBZNWN2WDk1SHVWMTY2U0RTWWxIa082bm9Iais5MW16R2pCbGRUcDQ4K1VKMGRMU2V2Yjk0OGVJMU1Lai9DNzlkWUdBN1NoSGdibi9DZjM5QkVlcFRoSHk3Nit6WnN6ZmJ0bTI3YXR1MmJTeG5xckNBYk55NGNRTWducGtCVFBJaEJkV2RLcEk2TXBMWUZqV3N6dWVmZjc0VEFQSHN3b1VMbjhRaEFCalJOT0EvSllydmxsanFiaXRkK3F6SzZqOEZCYnZqRW1SWHNLN3FZdG1uVDUrTlFKQ3l4WVVhTldvVVBtL2V2TkU1T1RsenQyN2QrbmNJOFA2QWdQRXF2K1R2blIwN2RveE1TVW41SzJqaExLRHNFOFVPTFVuS1VVWVpqT2g2alF0bThPb2JGdWt5U2NPN3RqMnIrcXlXVEdUY0d6Um8wREF4TVRFcFBqNyt6K0hoNFpQUnZlQXFSTmJYT1hmdTNBSERodzhmZ1c5bTgrYk5tYXo4QWdCdGhUSnNGZ1A3NTllQ3VELzFJVVo3VHVoc1lFcnVxUnJNek16TUJaYWZzbXJWcW9NaUZRQWd1UlRmOHUxUS9Bb3F3b3kyWHNxOWZ2MzZERENpWHc0WU1PQUFWeEVzSVViYlRBS3lsT2tQT0RpeDVMTTJMQUJocitBVzFXZWVlWVpGcXVrUWxsc2dHczNtZ3hmVnkrVW9VYzBrSk9UVlYxLzlCZG9DSGtONXRyaml5a2FlbExaS2lLQVJVRnFnQVpGdEZaR1ZTOWhFb1MxL0ZWa3dEY0FvNGdNVXJ0WE9WVVpEQkF5WGQzdnRzOE4xYTNCdG0rSzc2d0V2ekl0ZzBCMG9HNkpVc2dac1UzdzNHT3VlQWttSWhRK0sxcHFMd1F0V0tpU05waUNjR0JSY0RBenZNV0dqSk5DRzdKTUZUWUFXS0VCVWsvVmZ2TjlGZDZkRVFoeUs3eVpFd1RIS0NDQSsvQU92TFdOQTROcDJEbHd4NGtqaVhvcjViNVloMW11b09yWWFnQ0hkQnZiY2M4OTFLaTR1RG5lNVhLSFF3cHhPWnpDdkZnb2FNbVFJSTFKdVZ2OEJyWXkzVXY1YXdWZjlkVUNZWkRGVmdNWXFvZTM4bFpWNHNtWUZVdVlwNUFORDI0UmR3MjYzUndEbHlRZFNtQVZ1WFFTSXdaSlFvTUpzZ1A1V0hBa1FIQ2h4eElwbDJOSkJNN2paZnlwMytmanFxNisraDNEaEU1Wm5obmFkNTFWdWtweEtoVkxOZmJ0bTlrT21NbmY5S0NzckV3Wlo5bEFFTlZBOHBMTDFYMkhVN3ZyQnE2cUREZElPcHZ5a3VudnVWQU1QVXljQVFXdkRSby9NcUJVSmtZRmlxME1TSWxPVlNpVWtFTVNNOGhIRFk5ZXVYUzYycEVCS0s2dGF5dURaek1oY2VNdVdMVzNnYVd3R2E4OFdwWXA3N0FJTmlFV3l0bXQ0OU96Wjgyb2x5VjZ0a3QveWVMbEZpeFkxbmo1OWVyakpZbnhsc1UxQWVFaFZwTVZVbWxFdzZEWUl5Mm5KZ214L2ppVTJOdGJ3NlRpb3VzanZJTTl5SjNVYm90UjZraFg0eWxJT3N1amFiUVpJTlRsV3dDU2tPbEV5VzdDT2lJdUxzOU9LUVVtbHN1ZVlPblhxSmFXV1N6YnZLQ0FOR3piMEVDTUFJM2phdEdtUi9welBBZEdQamgwNzFvcUx2Nk1xRXg4ZmI2OXU0b2FxUVZoWW1PVjNMeUhZeU9YazVIaFc4VmVzV0hGOS9mcjErVlN0UkxCWGswTGNPZzBJNHc3Q1k2U25wM3NLOFhKemM5MGJObXdvUm5sYm84SThIY3hCZ3dZNTd5VkFmRGdMOEJQbjRzV0xyUkpwMEQremR1Yk1tZEtsUzVkZTUybEo2ejBCQ0NaTW1abVpucHpFd3c4L0hNS2EyYmxMbGl5NUpwZ25OODYxY3R4Um85cXBVNmNnSWZhblQ1OHVyeTZZWGJwMHFYZFBTQWp5RExwTkFGdHdRVEY1eXZld1ljT2M0OGVQMTNkcTVlWGwwVWNDL3Y0Qm9jeHp6cHc1amJwMTYrYmtIdVVud2w3VmZ2MzZlYmpHd1lNSFJhV2p4bTNSNzE5bEVIMlhQZC9NNTVGZllrc3FsWnphQk9SdTVpKzhLUGptelp0amQrN2NtYzhrZ1JuTlBuMzZoQUY0RGNUM1lJUkxheEtqMUZsQXNJZll0V3RYSWFpTVhzSGN2My8vY05hTXpqdDE2bFNwU1BRODhNQUQ5bnRHWlRoOTF5VmszYnAxdVd6UC82VkxsMXhHL2RsanVHYlBucDJOMlc1dDBmYTdwVEllTDdGbno1NmlKNTU0Z3RXRHVSTVNFaHlnSXZXQnBJV2RQMy9lbFphV2RuUDE2dFc1aXZlZUhmV2VVeG5DVmoxR2MvZnUzUVhRV0R5VGphVFhRb0MwQUdqTzJyeS9PNjR5UFhyMFlKSVFxc2dmdUVhYjEzOFdhTk9talNNcEtTbkVENk45eHlWRXRyZkc5SWlKaWJGdTNMaVJsWU5IYmRxMDZTWjRsb0tVbEpSY01KckZoSWRZSWlJaTdBTUhEZ3hOVEV3TUF4SVhHaDBkSFZRbG5mUjl0b2hXMjRESWltZEVydFFmVGhMSzJ2ejU4Nk95czdQWjA2cHVwcWFtNW9MaERRR2JFaW84a045aWYrdXhYVWIvbU1QMHdRazFCWVFXNDVWVlY5UmF0R2hoSHo1OGVBUnJOYllEdDNhSjAvTE9nSmRVbVlFaEFDbFI2c0JodFZyWi9iaE1RTkVDQlFqTmhOTU5BblVDa0tDZ0lERTVwUWFnMUpxRTRIMHhvbWExTGdBaTdrZUFVbVhWcVM0Z3NucFZVZGw4MTQvZzRHQVh2NWRpeGJzZXBGSUpxVTdCREs0Nzl6dzRXcm05QlMxY3VWMk1LOHFhY0FtM1RQMk11SVBzTVovMG4vbVVLNzZibk1TZUc3cWxERXVNRkJ4YkRkV2xWUEV0TXloWGJ1K2Fvay9LRGlUdGxtMU13THMxUk1PMnBLSXlsYkVGUUdWY1pOYUVRUk9WaUxnMHNqWUFvWS80d25YNFdDb3dKd2tvRDZGU1FoOERMQXdhclJPdERVQmtvT0RkRUVZN0lRSmV1Q3RxUGNzbHMxV3FHUC9maDBCSHFwUXBVMkNveXcxNDRTNTlxSnFpZUpjMlZDakcvL2V1TnNKMm94Q2lLbVVYQWZFeTFQSWJGYzNJQ2xWcUN4QXNLYklIenNyMkMydUJCRVRtRHF2NkQ3VnFNejhyaTc1bHdWekFKY1RzZkRYQTE2K3VPbGZsOC8zai9uSC9xUG54L3dJTUFFRVAyb3dydHpZUEFBQUFBRWxGVGtTdVFtQ0MpOwogIG9wYWNpdHk6IDA7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLndhdGVybWFyay5mYWRlSW4KewogIG9wYWNpdHk6IC44NTsKfQoKYm9keVtkYXRhLWhyZWY9J2dhbWluZyddIC53YXRlcm1hcmssCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIC53YXRlcm1hcmsKewogIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUMwQUFBQmVDQVlBQUFDM3JKMzFBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZORUV6TUVWRE4wUkVPREJHTVRGRk1FSkRNRVpETWpBd01qTkROamMwTURjaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5FRXpNRVZETjBWRU9EQkdNVEZGTUVKRE1FWkRNakF3TWpORE5qYzBNRGNpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMFFUTXdSVU0zUWtRNE1FWXhNVVV3UWtNd1JrTXlNREF5TTBNMk56UXdOeUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8wUVRNd1JVTTNRMFE0TUVZeE1VVXdRa013UmtNeU1EQXlNME0yTnpRd055SXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QcGd2YTJRQUFBUzVTVVJCVkhqYTdGdUxjZUl3RUxVektjQ3BBTk9CTzRoVFFiZ0tEam9nRmNSVXdGMEYwRUdnQWtNRjVpcUFWQkJTZ1UrYVdaRmxUN0prVzVJMUZ6U2pNUmpiZWxxLy9VckVkVjFILzFWakUwcFpYN0grVVgrMUR6aVhoQWc0STJCcDQ3OWxRMkNMVlJKbWg0cDFJYzBkNjF2NC9zaDZEdWZQckkvak9ENkhJT1VWa3VoYzgzc1JDaldPQUtneXVLYjBqZTlPY1Q2RjQ3YmgzaDBjYzkrZzczdmMrKzd3VGVkSUdDZldOMXE5TWVFci8wMWNaQkhzQk5HT3RrSkhqeUgwYU1vT2I0aWF0TDF5QXhBTWFEQ3hTM1Jxd2ZvRG93UTN5VE13cmJ4TllYTEQwNE9iVlkySlRaR2pxMEtoeDdOUU9pYmNYLzk0d0RqbXlyaUdyMWt3bkVhV1F0VStnMU5FRzg3bEJ2b0cyaFpvOEdSdmtrUWhsU1FVMk9PVlNydnJLUGJBN1kxODUzSDNGSnpCRE00dFVYd2VvV0FySHdxMFNBZzJFRWpoUkdFbGlRNzNySTlZbjBnbTRnMDB0NjlQNEFSd0xFRUJ6OWcxYTNUTkN6dndlRHh6eW1tZTBJS3IvWWxPSHlSZWpJUEQzbTJOQWNNMS9PMzhjS3FJRU9jZWdaODRHdU92K1NoUnFxM2lNM1hSQnllZ0FWQ0pPSGdDZm1MWHUycXdCbWVOUHRnRkxlSG5DNU1RejhJNWo4Zndpc1hBUzljMWtic09nR2MwRW1QZk54QURDM00zR1JMMHN3VHdXbkh0V3BJWUR3STZNd1FjK1N6WW1DcGlJMkRoeXJzcVZtL1FFdTAzQVp3UkdtMjhnVllvblFsZ2JBb1gyRE02QlcwSk1QZDZoUmRPV3dRODg2S0lFajRHRFZoSStyVW40TWduWUFGYW1LcE5GOEJEcDF0L1dnSStod0RhSktWS2tNditqV05zeFQycHdydXFQSytaSUZDaWVXeUt6aUFKclVYbEVwTFpHcCtUSkF0SGt1d21rdXNLZE0yMFlmemxwWFpJYnFvMHdCUEZoR3ZJeGpNMG9VcFNZejRLZHcvWitWSTNLWW5RS25HaU1nVk9lYTVadGhQUEsydDl5elZqWGI5VmVKVjlnS3RBWFJaSmlWU3A5RE9EdXNxRlFqRjU5VGd6UGtDR2ZUWUZEMldEUktSaU5BYUJNU1pJUWJtWlBSZzhld1YxRk43R011WHBKSEZYRGJoLzBadW1Fa0V3d01sQ2E2NnJiUXdPbklQRWRUL1Rvc3hnd0NWMlBtdHpvM2Zna25HWGZSL2dGRGlNaDh2R2xhMlpWeTcyZWxnWEVEeXdKRzUzYmhId2hIaFhlMitVbUtDcmVLS0hoU2pidXZVdUE1VUtkN3pFU3hhYXR6WlhCRlhPUWN1Q3BhUEIvWE5GbkdMa1NQb3VGUEc0NFFHS2o2Y1dnZndKSFhreGN3eDU1cnRMTzFyS3ZKUUpOVFRQTFh4SW1oWWhuVmFXbklBT01iRU5wdDBiY28zeVN4ajl4TEpwR3VFTW5leC9PUW42eFlhZ1E5aEZ1eERGelJ1bmI2Qy9wZlhRdEoxRlBHbGthem12cVN4a09Ud29Hb1lxUXFYSHlBdW5MVHVYMUJlbjhRU21iVG5aWlRYTUJ1aUVTT3ExNWYwWWRPYUZIbEhMclR3dEJPQ0hIaVJyNFJuSk5sUTdQU0xwbDJpZmpLODdGd3A5NzFEakh3MytUbkxTTFFQNm9BZE90L0pJdjFGdzBaYlAxaFd4WjQ2WStaUTBsZENUNW5xK3hXamVvdHpnbkI0UjJPa2NKQjlyRk83UTFvVmJpejBzdWZKMFNFbmp5ZkNGblQxSVZQekRicUpRWE8vMHdMemVJNnN4aVJyMjZCSEZ6YnpTZ3d6SU4xMnROVkxrVHVlbGl3dDNRZzlZekp3QlBjU0M2Q05NWWcrN0pRZDM0MHJOaHdrY291c3R5YjBWMlJZOThxNFdCQ3F0K1JDUzVnT1hrREp1UUJrM01nOEo2eWc1c2lTdEUxblhaYkZUOVBXbjRpeTYvcTlBMjNZcGl6bTEweURGYWZTMWcrRDdGbXR1b0crZ0c5cGZBUVlBS3c1R2dUSmthSElBQUFBQVNVVk9SSzVDWUlJPSk7Cn0KCi53YXRlcm1hcms6aG92ZXIsCi53YXRlcm1hcms6Zm9jdXMKewogIG9wYWNpdHk6IDE7Cn0KCgoKLyogU0lURS1HUklEIE5BVklHQVRJT04gKi8KLm5hdiwKLm5hdjpob3ZlciwKLm5hdjpmb2N1cwp7CiAgdGV4dC1zaGFkb3c6IDAgMCA1cHggIzAwMDAwMDsKICBjb2xvcjogI2ZmZjsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgouYXJyb3dfdXAsCi5hcnJvd19yaWdodCwKLmFycm93X2Rvd24sCi5hcnJvd19sZWZ0LApuYXYucGFnaW5hdG9yIGEucHJldmlvdXMsCm5hdi5wYWdpbmF0b3IgYS5uZXh0CnsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvbmF2X2Fycm93cy5wbmcpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLmFycm93X3VwCnsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wOwogIGhlaWdodDogMTAwcHg7Cn0KCi5hcnJvd19yaWdodAp7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xMDBweDsKfQoKLmFycm93X2Rvd24KewogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMTcwcHg7CiAgbWFyZ2luLXRvcDogLTEuNWVtOwogIGhlaWdodDogOTBweDsKfQoKLmFycm93X2xlZnQKewogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMzAwcHg7Cn0KCm5hdi5wYWdpbmF0b3IKewogIGRpc3BsYXk6IG5vbmU7CiAgcG9zaXRpb246IGZpeGVkOwogIGxlZnQ6IDUwJTsKICB0b3A6IDY1cHg7CiAgbWFyZ2luLWxlZnQ6IDUwMHB4OwogIHdpZHRoOiAxMDBweDsKICBoZWlnaHQ6IDI1MHB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgei1pbmRleDogMjsKfQoKbmF2LnBhZ2luYXRvciB1bAp7CiAgZGlzcGxheTogbm9uZTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKfQoKbmF2LnBhZ2luYXRvciBhLnByZXZpb3VzLApuYXYucGFnaW5hdG9yIGEubmV4dAp7CiAgZGlzcGxheTogYmxvY2s7CiAgdGV4dC1zaGFkb3c6IDAgMCAzcHggI2JiYjsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwcHg7Cn0KCm5hdi5wYWdpbmF0b3IgYS5wcmV2aW91cwp7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC02ODNweDsKICBwYWRkaW5nOiAwIDAgNTVweCAwOwp9CgpuYXYucGFnaW5hdG9yIGEubmV4dAp7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC01MDBweDsKICBwYWRkaW5nOiA1NXB4IDAgMCAwOwogIHRvcDogMTM1cHg7Cn0KCm5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgYSAgICAgICB7IGNvbG9yOiAjNTU1OyB9Cm5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgYTpob3ZlciwKbmF2LnBhZ2luYXRvci5mZWF0dXJlcyBhOmZvY3VzIHsKICBjb2xvcjogIzAwMDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAgICAgICBuYXYucGFnaW5hdG9yLmhvbWUsCmJvZHlbZGF0YS1ocmVmPSdtb2JpbGUnXSAgIG5hdi5wYWdpbmF0b3IuaG9tZSwKYm9keVtkYXRhLWhyZWY9J2dhbWluZyddICAgICBuYXYucGFnaW5hdG9yLmhvbWUsCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddICAgbmF2LnBhZ2luYXRvci5ob21lLApib2R5W2RhdGEtaHJlZj0naG9tZSddICAgICAgIG5hdi5wYWdpbmF0b3IuaG9tZSB1bC5ob21lLApib2R5W2RhdGEtaHJlZj0nbW9iaWxlJ10gICBuYXYucGFnaW5hdG9yLmhvbWUgdWwubW9iaWxlCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSAgICAgbmF2LnBhZ2luYXRvci5ob21lIHVsLmdhbWluZywKYm9keVtkYXRhLWhyZWY9J2J1c2luZXNzJ10gICBuYXYucGFnaW5hdG9yLmhvbWUgdWwuYnVzaW5lc3MsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1vZmZsaW5lJ10gICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1zdG9yYWdlJ10gICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1jb25uZWN0aXZpdHknXSAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1maWxlX2FjY2VzcyddICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1zZW1hbnRpY3MnXSAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1tdWx0aW1lZGlhJ10gICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1ncmFwaGljcyddICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1wcmVzZW50YXRpb24nXSAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1wZXJmb3JtYW5jZSddICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1udXRzX2FuZF9ib2x0cyddIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1vZmZsaW5lJ10gICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwub2ZmbGluZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXN0b3JhZ2UnXSAgICAgICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5zdG9yYWdlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtY29ubmVjdGl2aXR5J10gICBuYXYucGFnaW5hdG9yLmZlYXR1cmVzIHVsLmNvbm5lY3Rpdml0eSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWZpbGVfYWNjZXNzJ10gICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5maWxlX2FjY2VzcywKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXNlbWFudGljcyddICAgICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5zZW1hbnRpY3MsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1tdWx0aW1lZGlhJ10gICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwubXVsdGltZWRpYSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWdyYXBoaWNzJ10gICAgICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5ncmFwaGljcywKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXByZXNlbnRhdGlvbiddICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5wcmVzZW50YXRpb24sCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1wZXJmb3JtYW5jZSddICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwucGVyZm9ybWFuY2UsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1udXRzX2FuZF9ib2x0cyddIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwubnV0c19hbmRfYm9sdHMKewogIGRpc3BsYXk6IGJsb2NrOwp9CgoKLyogSE9NRVBBR0UgKi8KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3N0YXJ0CnsKICBiYWNrZ3JvdW5kOiBub25lOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMTAwMHB4OwogIGhlaWdodDogMzg1cHg7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3N0YXJ0IGFydGljbGUKewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAuNWVtIDJlbTsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjaW50cm8gewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5wYWdlIC5jZHMtYmFubmVyLApib2R5W2RhdGEtaHJlZj0naG9tZSddICNiYW5uZXIgewogIGhlaWdodDogMTAwcHg7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1ob21lLXRoaW4ucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luLWJvdHRvbTogMyU7Cn0KLnBhZ2UgLmNkcy1iYW5uZXIgYSwKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjYmFubmVyIGEgewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICB0ZXh0LWluZGVudDogLTk5OTllbTsKICBmb250LXNpemU6IDA7Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ0MHB4KSB7CiAgLnBhZ2UgLmNkcy1iYW5uZXIsCiAgYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjYmFubmVyIHsKICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCBuby1yZXBlYXQsCiAgICAgICM2M2E3ZTA7IC8qIE9sZCBicm93c2VycyAqLwogICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1ob21lLW1pZC5wbmcpIHRvcCBsZWZ0IG5vLXJlcGVhdCwKICAgICAgLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNjNhN2UwIDAlLCAjNDM5M2Q1IDEwMCUpOyAvKiBGRjMuNisgKi8KICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCBuby1yZXBlYXQsCiAgICAgIC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsICM2M2E3ZTApLCBjb2xvci1zdG9wKDEwMCUsIzQzOTNkNSkpOyAvKiBDaHJvbWUsU2FmYXJpNCsgKi8KICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCBuby1yZXBlYXQsCiAgICAgIC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzYzYTdlMCAwJSwjNDM5M2Q1IDEwMCUpOyAvKiBDaHJvbWUxMCssU2FmYXJpNS4xKyAqLwogICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1ob21lLW1pZC5wbmcpIHRvcCBsZWZ0IC8gY29udGFpbiBuby1yZXBlYXQsCiAgICAgIC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICM2M2E3ZTAgMCUsIzQzOTNkNSAxMDAlKTsgLyogT3BlcmEgMTEuMTArICovCiAgICBiYWNrZ3JvdW5kOiB1cmwoL3N0YXRpYy9pbWFnZXMvY29uZmVyZW5jZXMvY2RzLWhvbWUtbWlkLnBuZykgdG9wIGxlZnQgLyBjb250YWluIG5vLXJlcGVhdCwKICAgICAgLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICM2M2E3ZTAgMCUsIzQzOTNkNSAxMDAlKTsgLyogSUUxMCsgKi8KICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCAvIGNvbnRhaW4gbm8tcmVwZWF0LAogICAgICBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNjNhN2UwIDAlLCM0MzkzZDUgMTAwJSk7IC8qIFczQyAqLwoKICAgIGhlaWdodDogMTIwcHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NzBweCkgewogIC5wYWdlIC5jZHMtYmFubmVyLAogIGJvZHlbZGF0YS1ocmVmPSdob21lJ10gI2Jhbm5lciB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoL3N0YXRpYy9pbWFnZXMvY29uZmVyZW5jZXMvY2RzLWhvbWUucG5nKTsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgaGVpZ2h0OiAxMjBweDsKICAgIG1hcmdpbjogLTIlIDAgMiUgMDsKICB9CgogIC5wYWdlIC5jZHMtYmFubmVyIHsKICAgIGhlaWdodDogODBweDsKICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtYXJ0aWNsZS5wbmcpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0OwogICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1hcnRpY2xlLnBuZykgY2VudGVyIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0OwogICAgbWFyZ2luOiAtMS41JSAwIDAuNSUgMDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDgxMHB4KSB7CiAgYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjYmFubmVyIHsKICAgIGhlaWdodDogMTMycHg7CiAgICBtYXJnaW46IDAgMCAzJSAwOwogIH0KfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjbG9nbywKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcwp7CiAgcG9zaXRpb246IGFic29sdXRlOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddICNsb2dvCnsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDAgYXV0byAyJSBhdXRvOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogMTAwJTsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcwp7CiAgbWFyZ2luLXRvcDogMDsKICBsZWZ0OiAwOwogIHdpZHRoOiA5NiU7CiAgaGVpZ2h0OiAzMzBweDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcyBoMgp7CiAgZm9udC1zaXplOiAxOHB4OwogIG1hcmdpbjogMDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcyBoMiBhCnsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3VwZGF0ZXMgdWwKewogIG1hcmdpbjogLjVlbSAwICFpbXBvcnRhbnQ7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3VwZGF0ZXNfbGlzdCB7CiAgd2lkdGg6IDYwJTsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlc19saXN0IGxpIHsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddICN1cGRhdGVzX2xpc3QgLnRpdGxlIHsKICBtYXgtd2lkdGg6IDc1JTsKICB3aWR0aDogYXV0bzsKfQoKI3VwZGF0ZXNfdGl0bGUKewogIGZsb2F0OiByaWdodDsKICBtYXJnaW4tbGVmdDogM2VtOwogIHdpZHRoOiAzOSU7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQKewogIG1hcmdpbi10b3A6IDA7Cn0KCiNjbGFzc2VzCnsKICBtYXJnaW46IDAgMCAyJTsKICBwYWRkaW5nLWJvdHRvbTogMDsKfQoKI2NsYXNzZXMgaGVhZGVyCnsKICBtYXJnaW4tYm90dG9tOiAwOwogIC1tb3otY29sdW1uLWNvdW50OiAwOwogIC1vLWNvbHVtbi1jb3VudDogMDsKICAtbXMtY29sdW1uLWNvdW50OiAwOwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAwOwogIGNvbHVtbi1jb3VudDogMDsKfQoKI2NsYXNzZXMgaGdyb3VwCnsKICBmbG9hdDogbGVmdDsKICBwYWRkaW5nLXJpZ2h0OiAwOwogIHdpZHRoOiAzMyU7Cn0KCiNjbGFzc2VzIGhncm91cCArIHAKewogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luOiAwIDAgMWVtICFpbXBvcnRhbnQ7CiAgd2lkdGg6IDY3JTsKfQoKaHRtbFtsYW5nPXB0XSAjY2xhc3NlcyBoZ3JvdXAKewogIHdpZHRoOiA1MyU7Cn0KaHRtbFtsYW5nPXB0XSAjY2xhc3NlcyBoZ3JvdXAgKyBwCnsKICB3aWR0aDogNDclCn0KCmh0bWxbbGFuZz1kZV0gI2NsYXNzZXMgaGdyb3VwCnsKICB3aWR0aDogNDAlOwp9Cmh0bWxbbGFuZz1kZV0gI2NsYXNzZXMgaGdyb3VwICsgcAp7CiAgd2lkdGg6IDYwJQp9CgojY2xhc3NlcyB1bAp7CiAgY2xlYXI6IGJvdGg7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgei1pbmRleDogMjsKfQoKI2NsYXNzZXMgbGkKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogLTMwcHggNHB4IDAgMDsKICB3aWR0aDogOTBweDsKICBjdXJzb3I6cG9pbnRlcjsKfQoKI2NsYXNzZXMgbGkgYQp7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9zdGF0aWMvaW1hZ2VzL2ZlYXR1cmVzL2hvbWVwYWdlX2ZlYXR1cmVfaWNvbnMucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGNvbG9yOiAjMzMzOwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogOTBweDsKICBwYWRkaW5nLWJvdHRvbTogNzZweDsKICBtYXJnaW4tdG9wOiA0MHB4Owp9CgojY2xhc3NlcyBsaSBhOmhvdmVyLAojY2xhc3NlcyBsaSBhOmZvY3VzCnsKICBjb2xvcjogIzVGQTRBMDsKfQoKI2NsYXNzZXMgbGkub2ZmbGluZSBhICAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgICAyNXB4OyB9CiNjbGFzc2VzIGxpLnN0b3JhZ2UgYSAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC0xMTdweDsgfQojY2xhc3NlcyBsaS5jb25uZWN0aXZpdHkgYSAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtMjU4cHg7IH0KI2NsYXNzZXMgbGkuZmlsZV9hY2Nlc3MgYSAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgLTM5OXB4OyB9CiNjbGFzc2VzIGxpLnNlbWFudGljcyBhICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC01NDBweDsgfQojY2xhc3NlcyBsaS5tdWx0aW1lZGlhIGEgICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtNjgxcHg7IH0KI2NsYXNzZXMgbGkuZ3JhcGhpY3MgYSAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgLTgyMnB4OyB9CiNjbGFzc2VzIGxpLnByZXNlbnRhdGlvbiBhICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC05NjNweDsgfQojY2xhc3NlcyBsaS5wZXJmb3JtYW5jZSBhICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtMTEwNHB4OyB9CiNjbGFzc2VzIGxpLm51dHNfYW5kX2JvbHRzIGEgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC0xMjQ1cHg7IH0KCiNjbGFzc2VzIGxpLm9mZmxpbmUgYTpob3ZlciwKI2NsYXNzZXMgbGkub2ZmbGluZSBhOmZvY3VzIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTIxcHggMjVweDsKfQojY2xhc3NlcyBsaS5zdG9yYWdlIGE6aG92ZXIsCiNjbGFzc2VzIGxpLnN0b3JhZ2UgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0xMTdweDsKfQojY2xhc3NlcyBsaS5jb25uZWN0aXZpdHkgYTpob3ZlciwKI2NsYXNzZXMgbGkuY29ubmVjdGl2aXR5IGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtMjU4cHg7Cn0KI2NsYXNzZXMgbGkuZmlsZV9hY2Nlc3MgYTpob3ZlciwKI2NsYXNzZXMgbGkuZmlsZV9hY2Nlc3MgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0zOTlweDsKfQojY2xhc3NlcyBsaS5zZW1hbnRpY3MgYTpob3ZlciwKI2NsYXNzZXMgbGkuc2VtYW50aWNzIGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtNTQwcHg7Cn0KI2NsYXNzZXMgbGkubXVsdGltZWRpYSBhOmhvdmVyLAojY2xhc3NlcyBsaS5tdWx0aW1lZGlhIGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtNjgxcHg7Cn0KI2NsYXNzZXMgbGkuZ3JhcGhpY3MgYTpob3ZlciwKI2NsYXNzZXMgbGkuZ3JhcGhpY3MgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC04MjJweDsKfQojY2xhc3NlcyBsaS5wcmVzZW50YXRpb24gYTpob3ZlciwKI2NsYXNzZXMgbGkucHJlc2VudGF0aW9uIGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtOTYzcHg7Cn0KI2NsYXNzZXMgbGkucGVyZm9ybWFuY2UgYTpob3ZlciwKI2NsYXNzZXMgbGkucGVyZm9ybWFuY2UgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0xMTA0cHg7Cn0KI2NsYXNzZXMgbGkubnV0c19hbmRfYm9sdHMgYTpob3ZlciwKI2NsYXNzZXMgbGkubnV0c19hbmRfYm9sdHMgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0xMjQ1cHg7Cn0KCiNjbGFzc2VzIGxpIGgzCnsKICBkaXNwbGF5OiBpbmxpbmU7CiAgZm9udC1zaXplOiAxMnB4Owp9CgpodG1sW2xhbmc9cHRdICNjbGFzc2VzIGxpIGgzCnsKICBmb250LXNpemU6IDEwcHg7Cn0KCmFydGljbGUucHJvZmlsZQp7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luOiAwIDAgMiUgMiU7CiAgd2lkdGg6IDMyJTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKCn0KCmFydGljbGUucHJvZmlsZS5hY3RpdmUgewogICAtd2Via2l0LWFuaW1hdGlvbjogaW5wdXRnbG93IDEuOXMgMzsgIC8qIGp1c3QgZG8gaXQgdGhyZWUgdGltZXMgKi8KICAgICAgLW1vei1hbmltYXRpb246IGlucHV0Z2xvdyAxLjlzIDM7CiAgICAgICAtbXMtYW5pbWF0aW9uOiBpbnB1dGdsb3cgMS45cyAzOwp9CgphcnRpY2xlLnByb2ZpbGUgc2VjdGlvbgp7CiAgbWFyZ2luOiAwOwogIGhlaWdodDogMjQ4cHg7Cn0KCmltZ1tpdGVtcHJvcD1waG90b10gewogIC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMC43NSkgc2VwaWEoMC41KTsKICAgICAtbW96LWZpbHRlcjogZ3JheXNjYWxlKDAuNzUpIHNlcGlhKDAuNSk7CiAgICAgIC1tcy1maWx0ZXI6IGdyYXlzY2FsZSgwLjc1KSBzZXBpYSgwLjUpOwogICAgICAgLW8tZmlsdGVyOiBncmF5c2NhbGUoMC43NSkgc2VwaWEoMC41KTsKICAgICAgICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuNzUpIHNlcGlhKDAuNSk7CgogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7CiAgICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsKICAgICAgLW1zLXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0OwogICAgICAgLW8tdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsKfQoKLnByb2ZpbGUgaW1nW2l0ZW1wcm9wPXBob3RvXSB7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luLXJpZ2h0OiAxOXB4OwogIHdpZHRoOiA3NXB4OwogIGhlaWdodDogNzVweDsKfQoKLnByb2ZpbGU6aG92ZXIgaW1nW2l0ZW1wcm9wPXBob3RvXSwKLnByb2ZpbGU6Zm9jdXMgaW1nW2l0ZW1wcm9wPXBob3RvXSwKaW1nW2l0ZW1wcm9wPXBob3RvXTpob3ZlciB7CiAgLXdlYmtpdC1maWx0ZXI6IGdyYXlzY2FsZSgwKSBzZXBpYSgwKTsKICAgICAtbW96LWZpbHRlcjogZ3JheXNjYWxlKDApIHNlcGlhKDApOwogICAgICAtbXMtZmlsdGVyOiBncmF5c2NhbGUoMCkgc2VwaWEoMCk7CiAgICAgICAtby1maWx0ZXI6IGdyYXlzY2FsZSgwKSBzZXBpYSgwKTsKICAgICAgICAgIGZpbHRlcjogZ3JheXNjYWxlKDApIHNlcGlhKDApOwp9CgoucHJvZmlsZSBoMiwKLnByb2ZpbGUgaDIgc3Bhbgp7CiAgY29sb3I6ICMwMDA7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5wcm9maWxlIGgzCnsKICBmb250LXNpemU6IDExcHg7CiAgbWFyZ2luOiAxZW0gMDsKfQoKLnByb2ZpbGUgaDMgZGl2W2l0ZW1wcm9wPW9yZ2FuaXphdGlvbi1uYW1lXQp7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLnByb2ZpbGUgaDNbaXRlbXByb3A9YWRyXQp7CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucHJvZmlsZSAudXJscwp7CiAgZmxvYXQ6IGxlZnQ7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW46IDNweCAwIDAgLTRweDsKICBwYWRkaW5nOiAwOwogIHdpZHRoOiA5NXB4Owp9CgoucHJvZmlsZSAudXJscyBsaQp7CiAgZGlzcGxheTogaW5saW5lOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwp9CgoucHJvZmlsZSAudXJscyBsaSBhCnsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBmbG9hdDogbGVmdDsKICBoZWlnaHQ6IDE2cHg7CiAgd2lkdGg6IDE2cHg7CiAgcGFkZGluZzogMnB4ICFpbXBvcnRhbnQ7CiAgb3BhY2l0eTogLjc7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDEwMG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAxMDBtcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAxMDBtcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDEwMG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IG9wYWNpdHkgMTAwbXMgZWFzZS1pbi1vdXQ7Cn0KCi5wcm9maWxlIC51cmxzIGxpIGE6aG92ZXIsCi5wcm9maWxlIC51cmxzIGxpIGE6Zm9jdXMKewogIG9wYWNpdHk6IDE7Cn0KCi5wcm9maWxlIC51cmxzIGxpIGFbZGF0YS10eXBlPSdob21lcGFnZSddIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVRQVJBT1pBQUsydHJiNit2cDZlbm14c2JITnpjODdPenBTVWxJT0RnM2QzZDRDQWdMbTV1ZERRMEt1cnE3UzB0TUhCd2VibTVxK3ZyL3I2K3RYVjFlTGk0dVhsNWIrL3Y3cTZ1dlB6ODdpNHVINStmdUhoNGRUVTFIMTlmZHpjM01qSXlMeTh2TDI5dmNEQXdNWEZ4Y1BEdy9mMzk5bloyYU9qbzJabVpyT3pzL3Y3Ky9IeDhjbkp5Wnljbk52YjI5M2QzZTN0N2VqbzZQejgvTmpZMkdWbFpmNysvckd4c2NmSHg5TFMwdGZYMTZHaG9jek16SEp5Y3YzOS9lL3Y3NnFxcXYvLy8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0gvQzFoTlVDQkVZWFJoV0UxUVBEOTRjR0ZqYTJWMElHSmxaMmx1UFNMdnU3OGlJR2xrUFNKWE5VMHdUWEJEWldocFNIcHlaVk42VGxSamVtdGpPV1FpUHo0Z1BIZzZlRzF3YldWMFlTQjRiV3h1Y3pwNFBTSmhaRzlpWlRwdWN6cHRaWFJoTHlJZ2VEcDRiWEIwYXowaVFXUnZZbVVnV0UxUUlFTnZjbVVnTlM0d0xXTXdOakFnTmpFdU1UTTBOemMzTENBeU1ERXdMekF5THpFeUxURTNPak15T2pBd0lDQWdJQ0FnSUNBaVBpQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQaUE4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWlCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlJSGh0Ykc1ek9uaHRjRTFOUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmJXMHZJaUI0Yld4dWN6cHpkRkpsWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wzTlVlWEJsTDFKbGMyOTFjbU5sVW1WbUl5SWdlRzF3T2tOeVpXRjBiM0pVYjI5c1BTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTTFJRTFoWTJsdWRHOXphQ0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG96T1VSQlJUaERNVVpETTBNeE1VVXdRVVUyUVRsR05URXdSa1U1TlRZME5DSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEb3pPVVJCUlRoRE1rWkRNME14TVVVd1FVVTJRVGxHTlRFd1JrVTVOVFkwTkNJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qTTVSRUZGT0VKR1JrTXpRekV4UlRCQlJUWkJPVVkxTVRCR1JUazFOalEwSWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2pNNVJFRkZPRU13UmtNelF6RXhSVEJCUlRaQk9VWTFNVEJHUlRrMU5qUTBJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrQWYvKy9mejcrdm40OS9iMTlQUHk4ZkR2N3UzczYrcnA2T2ZtNWVUajR1SGczOTdkM052YTJkalgxdFhVMDlMUjBNL096Y3pMeXNuSXg4YkZ4TVBDd2NDL3ZyMjh1N3E1dUxlMnRiU3pzckd3cjY2dHJLdXFxYWlucHFXa282S2hvSitlblp5Ym1wbVlsNWFWbEpPU2taQ1BqbzJNaTRxSmlJZUdoWVNEZ29HQWYzNTlmSHQ2ZVhoM2RuVjBjM0p4Y0c5dWJXeHJhbWxvWjJabFpHTmlZV0JmWGwxY1cxcFpXRmRXVlZSVFVsRlFUMDVOVEV0S1NVaEhSa1ZFUTBKQlFEOCtQVHc3T2prNE56WTFORE15TVRBdkxpMHNLeW9wS0NjbUpTUWpJaUVnSHg0ZEhCc2FHUmdYRmhVVUV4SVJFQThPRFF3TENna0lCd1lGQkFNQ0FRQUFJZmtFQVFBQVFBQXNBQUFBQUJFQUVRQUFCOGlBUUlKQVA0V0dob09KaFFVR095YzdCZ1dGaVlROUNRZ0JLdzRVQVFnSlBUK0RQejBETEF3aEV6QXhQendtQTZDRVB3Y0FDejRORkM2R0hqa0hoaElFUENJK05RQWdQSVVCR0FRYmhRSUtQd28rUGc0a2hUd2xOZzBDaFJrYVB4NE9IUStIS2cwNEhJVTdvQmNmRVljL3RSTTczTjZqT2hmSGhSRTNMZWcvem9aU1ZQQ0I0b1VoRE50Ky9NcjNZNkFQQmpKWUxUTTB5MUF0YVIxK0FPZ1ZhdFFBQ0RRS2pmRHhnUWVFVjZFRWpib1U0SUVGQmhZOHdWTDBnOUdPR1pBa3BhVDA3bENpUUFBNyk7IH0KLnByb2ZpbGUgLnVybHMgbGkgYVtkYXRhLXR5cGU9J2dvb2dsZSddICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9naWY7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQVJWQk1WRVgvLy8vZ1NqL2dTajhBQUFELy8vLy8vLy9nU2ovLy8vLzc2T2ZtYkdQd3BaL3hzS3Y5OVBQdW1aUGlWVXYxeHNQNTNkdnFnM3YzMHMvb2QyL3p1N2ZrWVZmc2pvZUN3NEw3QUFBQUJuUlNUbE1BQU84QU1CQWlTM0JvQUFBQWIwbEVRVlI0WG1YUDJRckRNQXdGMGNSdDUzcDN0dmIvUDdWMkhpeEs1MFZ3RUFndC96a3NYQWQrNmhEYTRTVjVRRGZrUXQyVTNoTlVZZGNCR2cwNGdRNjIwYURxTXZCS1o5dXFYYUZFK1lvQklCVU1pRTNTWlpCam9FaHB3ZzRRc2lZNFJoL041eDUzcitlNmpybDhBU29aQmhtb0hOVHJBQUFBQUVsRlRrU3VRbUNDKTsgfQoucHJvZmlsZSAudXJscyBsaSBhW2RhdGEtdHlwZT0ndHdpdHRlciddICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL2dpZjtiYXNlNjQsQUFBQkFBRUFFQkFBQUFFQUlBQm9CQUFBRmdBQUFDZ0FBQUFRQUFBQUlBQUFBQUVBSUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS92NytELzcrL2ovKy92NWcvdjcrWVA3Ky9tRCsvdjVJL3Y3K0tQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RCsvdjRIL3Y3K1VQYnY0cEhneDQ3QjFLOVkzdFd3V043VXIxamUzc0tDeCtyYnVLaisvdjVuL3Y3K0dQLy8vd0QvLy84QS8vLy9BUC8vL3dEKy92NFkrZmJ3ZU0yeWNNZTJpQjcvdkkwZi84U1RJZi9LbHlML3pKa2kvOHlaSXYvTG1DTC8wYWhLNS9IcDFKSCsvdjRZLy8vL0FQLy8vd0QvLy84QTdPVFRhcXVITitDdWprWFBzNVpUdjZONkcvKzJpQjcveHBVaC84eVpJdi9NbVNML3pKa2kvOHlaSXYvS215NzM4T2pVaS8vLy93RC8vLzhBLy8vL0FNS3RmWTd3NitFZi8vLy9BUC8vL3dELy8vOEEzc3FicDhpV0lmL01tU0wvekpraS84eVpJdi9NbVNML3k1Z2kvOG1lUE83Ky92NHcvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QrL3Y0SC92NytWOUN0V04zS21DTC96SmtpLzh5Wkl2L01tU0wvekpraS84eVpJdi9KbHlILzV0U3FwLzcrL21EKy92NC8vLy8vQVAvLy93RC8vLzhBK1BYdkp0R3laZFhOblMvM3k1Z2kvOHFZSXYvTG1DTC96SmtpLzh5Wkl2L01tU0wveTVnaS84MmlQTzdMcVZmZTBieU1tZi8vL3dELy8vOEEvdjcrRC9EbzFKSEtteTczeXBjaS84S1NJUCsvanlEL3hwUWgvOHVZSXYvTW1TTC96SmtpLzhxWUl2Ky9qeUQvcklFZC85bktxSDcvLy84QS8vLy9BUFB1NFR6QWxTejN3WkVnLzdtTEgvK3NnUjMvdVpkR3o3bUxILy9KbHlIL3pKa2kvOHlaSXYvR2xTSC90bzByOWVYYnhEL1Z4NmRnLy8vL0FQNysvaC9wMzhXaHRJc3E5YWwvSFAra2Z5anV5YmFLZ2YvLy93Q3pqempsd0pBZy84cVlJdi9KbHlIL3U0d2YvOENrWXJuLy8vOEEvLy8vQVAvLy93RGoyc1JNbkhVYS83bWVZYTdWeDZkZy8vLy9BUC8vL3dELy8vOEEyTW1uWUs2REhmKytqaUQvdm80Zy82MkNIZi9rMnNRLy8vLy9BUC8vL3dELy8vOEE4T3ZoSC9mMDd3Ly8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dDL3AzQ2ZwbndjLzY2R0t2UGcxTFo4Ly8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BTlhIcDJESnRvcUJ5TFdLZ2YvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLzhBQVAvL0FBRGdQd0FBd0E4QUFJQUhBQUI0QndBQStBTUFBUEFBQUFEZ0FRQUE0QU1BQU1FREFBRFBod0FBLzQ4QUFQL25BQUQvL3dBQS8vOEFBQT09KTsgfQoucHJvZmlsZSAudXJscyBsaSBhW2RhdGEtdHlwZT0nbGFueXJkJ10gICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQU9ZQUFEOTJ4eHRMbEgreS94bFl0SU9rMWlGTGpKQzgvbHlOMTNTaTVuS204VFplbXZ2Mzh5cGVySTZodk9ycjdTTlFsUlpGalRKcnZWSjl2U3Bud0ZPRXpHS1QydmJ6N21PWDVWZUl6di8vK3I3TzVHdWQ1bVdVMnpWc3dJQ3gra2Q3eUltNS9pQmd2ZmIwOGZMeDd5aGx2eGxHalBqMThmSHc4QzFwd0krNy9pSk5rQ1JQa1N0a3VpVlZueUJOa0NKUGxmUHk4UER3Ny96NjlveTYvaDlSbkNsV20vVHk4WCtoMHZqMDdpMW52RFp2eFBIdjdqRm10dEhaNHh4VXFPRGs2akp1eElHWnY5UGc5Snl6MUV4c240eTUvY2JOMXg5Tmt5VlJrbXVpOHBqQi9vdWd3Sm02NlhxcThGQnZvTzd2NzQrOC9vU3k5U0JManFhMXkvajI4NFcyL2o1cHFTQmN0ZS92OE16UjJwVy8vdmoyOUp1ejF1UHA4dGpmNlh1dy8zNm0zeUJXcHpCcndYZXQrekZzd1c2T3YzK2V5dlB5NzQyZnZGeUl5RnlMejdMTytQWDA4ZmYyODluaThMalE5Sit5MEhlcDhQLzk5VFZzdTJtVjF6VnN2dkx4OEsvSDdDUmd1Q1prdnBTbHZ5eGt0OExOM01iVDUzcXUrdS92N3lIL0MxaE5VQ0JFWVhSaFdFMVFQRDk0Y0dGamEyVjBJR0psWjJsdVBTTHZ1NzhpSUdsa1BTSlhOVTB3VFhCRFpXaHBTSHB5WlZONlRsUmplbXRqT1dRaVB6NGdQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlRV1J2WW1VZ1dFMVFJRU52Y21VZ05TNHdMV013TmpBZ05qRXVNVE0wTnpjM0xDQXlNREV3THpBeUx6RXlMVEUzT2pNeU9qQXdJQ0FnSUNBZ0lDQWlQaUE4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGlBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlpQjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpSUhodGJHNXpPbmh0Y0UxTlBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZiVzB2SWlCNGJXeHVjenB6ZEZKbFpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMM05VZVhCbEwxSmxjMjkxY21ObFVtVm1JeUlnZUcxd09rTnlaV0YwYjNKVWIyOXNQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdRMU0xSUUxaFkybHVkRzl6YUNJZ2VHMXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvek9VUkJSVGhDUkVaRE0wTXhNVVV3UVVVMlFUbEdOVEV3UmtVNU5UWTBOQ0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG96T1VSQlJUaENSVVpETTBNeE1VVXdRVVUyUVRsR05URXdSa1U1TlRZME5DSStJRHg0YlhCTlRUcEVaWEpwZG1Wa1JuSnZiU0J6ZEZKbFpqcHBibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPak01UkVGRk9FSkNSa016UXpFeFJUQkJSVFpCT1VZMU1UQkdSVGsxTmpRMElpQnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qTTVSRUZGT0VKRFJrTXpRekV4UlRCQlJUWkJPVVkxTVRCR1JUazFOalEwSWk4K0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBpQThMM0prWmpwU1JFWStJRHd2ZURwNGJYQnRaWFJoUGlBOFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K0FmLysvZno3K3ZuNDkvYjE5UFB5OGZEdjd1M3M2K3JwNk9mbTVlVGo0dUhnMzk3ZDNOdmEyZGpYMXRYVTA5TFIwTS9PemN6THlzbkl4OGJGeE1QQ3djQy92cjI4dTdxNXVMZTJ0YlN6c3JHd3I2NnRyS3VxcWFpbnBxV2tvNktob0orZW5aeWJtcG1ZbDVhVmxKT1NrWkNQam8yTWk0cUppSWVHaFlTRGdvR0FmMzU5Zkh0NmVYaDNkblYwYzNKeGNHOXViV3hyYW1sb1oyWmxaR05pWVdCZlhsMWNXMXBaV0ZkV1ZWUlRVbEZRVDA1TlRFdEtTVWhIUmtWRVEwSkJRRDgrUFR3N09qazROelkxTkRNeU1UQXZMaTBzS3lvcEtDY21KU1FqSWlFZ0h4NGRIQnNhR1JnWEZoVVVFeElSRUE4T0RRd0xDZ2tJQndZRkJBTUNBUUFBSWZrRUFBQUFBQUFzQUFBQUFCQUFFQUFBQi9DQVNpa3BJRE16Qm9pSmlGQmFJRjlGYTBKdlh3S1ZscFZWSGg1ZE9CWU9VV04rb3FOK0hrMEpibWQvRmt4SkNhK3dDWEVJRjNjbWZ5SWFGeHU4dlJzSUJ3ZGdXREV3UDNRVnlSekxGUWNkUUFCOUluOGpOeGhxYWhnVUh6cGtkUk1oQkF0L0MwTW9PanBpS0JNVEVSRVRlUjhPSjJ3OU9TUVRKQ0VoN1R3c0xIZzBtSWd4UXNLQUt4SFMzSml6aDRGREgyYkdMWUFqZ1lzWEczTEtoS25Sb2dVTkt3N3MvSGtDWTRHSU5obVdCRUR5NE1HTEkzeW8vTEd6UmNhSUxIb1VIRm5SOGdHRUlCbGs3RERTd0lrS0NEdFY5RHlpWUFvYUlsSWdCSGpSY2tVQkZWaFZTQ2tCb1lTTHJGZ0xCQUlBT3c9PSk7IH0KCi5wcm9maWxlIC5saXN0LWFydGljbGVzCnsKICBjb2xvcjogIzY2NjsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBmbG9hdDogbGVmdDsKICBmb250LXNpemU6IDE1cHg7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBwYWRkaW5nOiAzcHg7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogY29sb3IgMTUwbXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0OwogIC1vLXRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0Owp9CgoucHJvZmlsZTpob3ZlciAubGlzdC1hcnRpY2xlcyB7IGNvbG9yOiAjNWZhNGEwOyB9Ci5wcm9maWxlOmZvY3VzIC5saXN0LWFydGljbGVzIHsgY29sb3I6ICM1ZmE0YTA7IH0KCi5wcm9maWxlIC5saXN0LWFydGljbGVzIHNwYW4KewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDMwMG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IC1tcy10cmFuc2Zvcm0gMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDMwMG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzMDBtcyBlYXNlLWluLW91dDsKfQoKLnByb2ZpbGUgLmxpc3QtYXJ0aWNsZXMuYWN0aXZlIHNwYW4KewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgLW8tdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQoKLnByb2ZpbGUgLm1hcCwKLnByb2ZpbGUgLmFydGljbGVzCnsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDI3OHB4OwogIGhlaWdodDogMTI1cHg7CiAgb3ZlcmZsb3c6IGF1dG87CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW1vei10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGFsbCAzMDBtcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbjogYWxsIDMwMG1zIGVhc2UtaW4tb3V0Owp9CgoucHJvZmlsZSAubWFwICAgICAgICAgICAgIHsgbGVmdDogLTgwMHB4OyB0b3A6IDEzNXB4OyB9Ci5wcm9maWxlIC5hcnRpY2xlcyAgICAgICAgeyBsZWZ0OiA4MDBweDsgdG9wOiAxMzVweDsgfQoucHJvZmlsZSAubWFwLmFjdGl2ZSwKLnByb2ZpbGUgLmFydGljbGVzLmFjdGl2ZSB7IGxlZnQ6IDIwcHg7IHRvcDogMTM1cHg7IH0KCi5wcm9maWxlIC5tYXAKewogIGJhY2tncm91bmQ6ICNkZGQ7Cn0KCi5wcm9maWxlIC5hcnRpY2xlcwp7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi5wcm9maWxlIC5hcnRpY2xlcyBsaQp7CiAgbWFyZ2luOiAuM2VtIDA7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLnByb2ZpbGUgLmFydGljbGVzIGEKewogIGZvbnQtc2l6ZTogMTNweDsKICBkaXNwbGF5OiBsaXN0LWl0ZW07CiAgbGlzdC1zdHlsZTogc3F1YXJlOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAucHJvZmlsZQp7CiAgbWFyZ2luOiAwIDAgMiUgMiU7CiAgd2lkdGg6IDIzLjUlOwp9Cgpib2R5W2RhdGEtaHJlZj0ncHJvZmlsZXMnXSAucHJvZmlsZTpmaXJzdC1jaGlsZCwKYm9keVtkYXRhLWhyZWY9J3Byb2ZpbGVzJ10gLnByb2ZpbGU6bnRoLWNoaWxkKDNuICsgMSkKewogIG1hcmdpbi1sZWZ0OiAwOwp9Cgpib2R5W2RhdGEtaHJlZj0ncHJvZmlsZXMnXSAucHJvZmlsZSBoMwp7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAucHJvZmlsZSBzZWN0aW9uCnsKICBoZWlnaHQ6IDc1cHg7CiAgcGFkZGluZzogNiU7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLnByb2ZpbGU6Zmlyc3QtY2hpbGQsCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLnByb2ZpbGU6bnRoLWNoaWxkKDRuICsgMSkKewogIG1hcmdpbi1sZWZ0OiAwOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddIC5wcm9maWxlIGgzCnsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDEwcHg7Cn0KCnVsLmF1dGhvcnMKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCnVsLmF1dGhvcnMgbGkKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogMSUgMDsKICBwYWRkaW5nOiAwIDMlIDAgMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHdpZHRoOiAyNDBweDsKICBkaXNwbGF5OiBibG9jazsKfQoKdWwuYXV0aG9ycyBsaS5wcm9maWxlIGgyCnsKICBtYXJnaW4tdG9wOiAuMjVlbTsKfQoKLm9uZV90aGlyZCB1bC5hdXRob3JzIGxpCnsKICBjbGVhcjogbm9uZTsKICBmbG9hdDogbm9uZTsKICBtYXJnaW46IDMlIDAgNSU7CiAgd2lkdGg6IDEwMCU7Cn0KCi50d29fdGhpcmRzIHVsLmF1dGhvcnMgbGkKewogIHdpZHRoOiA0NyU7CiAgbWFyZ2luLWJvdHRvbTogMiU7Cn0KCgoKLyogRkVBVFVSRVM6IE9VVExJTkUgTkFWSUdBVElPTiAqLwoKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW9mZmxpbmUnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtc3RvcmFnZSddIC5vdXRsaW5lX25hdl90b2dnbGUsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1jb25uZWN0aXZpdHknXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtZmlsZV9hY2Nlc3MnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtc2VtYW50aWNzJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW11bHRpbWVkaWEnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtZ3JhcGhpY3MnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtcHJlc2VudGF0aW9uJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXBlcmZvcm1hbmNlJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW51dHNfYW5kX2JvbHRzJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlCnsKICBkaXNwbGF5OiBibG9jazsKfQoKLm91dGxpbmVfbmF2X3RvZ2dsZQp7CiAgZGlzcGxheTogbm9uZTsKICBwb3NpdGlvbjogZml4ZWQ7CiAgbGVmdDogNTAlOwogIHRvcDogMTQ1cHg7CiAgbWFyZ2luLWxlZnQ6IDUyNXB4OwogIHdpZHRoOiAzMHB4OwogIGhlaWdodDogMzBweDsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBwYWRkaW5nOiAxMHB4OwogIHotaW5kZXg6IDM7Cn0KCi5vdXRsaW5lX25hdl90b2dnbGUgaW1nIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAxMHB4OwogIGxlZnQ6IDEwcHg7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IGFsbCAuMjVzIGVhc2UtaW4tb3V0OwogIC1tcy10cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICB6LWluZGV4OiA0Owp9Cgoub3V0bGluZV9uYXZfdG9nZ2xlIGltZy5zaG93CnsKICB6LWluZGV4OiA1Owp9Cgoub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCBpbWcuc2hvdwp7CiAgb3BhY2l0eTogMDsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIC1vLXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCm5hdi5vdXRsaW5lIHsKICBkaXNwbGF5OiBub25lOwogIGJhY2tncm91bmQtY29sb3I6ICNiZWJlYmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiA1MCU7CiAgdG9wOiAyMHB4OwogIHBhZGRpbmc6IDIwcHg7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIGJveC1zaGFkb3c6IDAgMCAxMHB4IDAgI2JiYjsKICBvdmVyZmxvdzogYXV0bzsKICBtYXgtaGVpZ2h0OiA1MjVweDsKICB6LWluZGV4OiAzOwp9CgpuYXYub3V0bGluZSBoMwp7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbWFyZ2luOiAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCm5hdi5vdXRsaW5lLnRvYwp7CiAgd2lkdGg6IDMwMHB4Owp9CgpuYXYub3V0bGluZS50b2MgdWwKewogIG1hcmdpbi1sZWZ0OiAxLjVlbTsKICBtYXJnaW4tYm90dG9tOiAxZW07Cn0KCm5hdi5vdXRsaW5lLnRvYyBwIHsKICBmb250LXNpemU6IDEzcHg7Cn0KCm5hdi5vdXRsaW5lLnRvYyB1bDpsYXN0LWNoaWxkCnsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgpuYXYub3V0bGluZS50b2MgYQp7CiAgbWFyZ2luLWxlZnQ6IC0xLjVlbTsKICB0ZXh0LWluZGVudDogMS41ZW07Cn0KCm5hdi5vdXRsaW5lLnRvYyBwIGEKewogIG1hcmdpbi1sZWZ0OiAwOwp9CgpuYXYub3V0bGluZS50b2MgbGkKewogIG1hcmdpbjogLjVlbSAwOwp9CgpuYXYub3V0bGluZS5mZWF0dXJlcwp7CiAgd2lkdGg6IDEzMHB4Owp9CgpuYXYub3V0bGluZS5mZWF0dXJlcyB1bAp7CiAgbWFyZ2luOiAuNzVlbSAwIC0uNWVtIDA7Cn0KCm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpCnsKICBtYXJnaW46IDA7Cn0KCm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEKewogIGRpc3BsYXk6IGJsb2NrOwp9CgpuYXYub3V0bGluZS5mZWF0dXJlcyBsaSBhLnNlY3Rpb25fdGl0bGUKewogIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQ7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBmb250LXNpemU6IDEzcHg7CiAgcGFkZGluZzogLjI1ZW0gMCAuMjVlbSAxOHB4Owp9CgpuYXYub3V0bGluZS5mZWF0dXJlcyBsaS5jdXJyZW50IGEuc2VjdGlvbl90aXRsZQp7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKbmF2Lm91dGxpbmUuZmVhdHVyZXMgbGkgYS5vZmZsaW5lICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZDTTBORU1rVkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkNNME5FTWtaRk9FRkNNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01VSXpRMFF5UTBVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHTVVJelEwUXlSRVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZ2tseSs4QUFBRHhTVVJCVkhqYVRGR3hFWUpBRUh6UTNDOUJNa09oQXFoQXJVQWRDcEJRSXlVeUZBdGdwQU9sQXJVRDdNRFFVRU16ZDUxOTVXYVdPKzUyNysvdlBTTkwwOVRDN1lBeFlKVitBbnVnS011U3NmRkVIc0tkUmNpQlJnS0tGOEFkU0NqcXFuQm9KODNmR2pRN3FSazVFdzhKZGprQ0ljZ2t4Q0lFd0ZyQ3F3U0JqODlRM2EzSUhLRVNjUWJjVktmRmJpU3JibFlOUXBGSkhBbTB2cStMR295VHdOWEFoYVBwcEZ6NWlRU1hUaFJGRHdSTCtCYzg0eG94aTIrUUN3YjQzOElOZ0pWYksvZWZBWE9RcXRhV1dNdjBQdCthMXlvNFVhUFJlbnFIdmtiYi9CNnVKZUtGcDdxNFcyY0ZzdHVTK1Fnd0FLTnhXQ2lENllwcEFBQUFBRWxGVGtTdVFtQ0MpOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuc3RvcmFnZSAgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFMQ0FZQUFBQkxjR3hmQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UmpGQ00wTkVNekpGT0VGQ01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSakZDTTBORU16TkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEdNVUl6UTBRek1FVTRRVUl4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwR01VSXpRMFF6TVVVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHNCWkw5NEFBQURhU1VSQlZIamFiRkhCRFlKQUVEek1GVUFIWWdmWXdWbUJVb0VRQ2tBN2tBckVBb2hhQVhTZ2RrQUpsRUFKenBqQjdJTk5KcHZibWQyZHU0dWNvaXpMR0NrSDlpcU53TE50MjdjekVVbDhRTG9ERTBYaTFnRHJBNUNoa1p6ekVLZklIVkNqZUxIVHdOWGlpTjF2QTRvOE9JZ3ppUktreFBRbDJsN1FwdGZhcmJIV3ljWmttbmlQSTVCNlRSOUUwTjRENThJdEJBYSsvR3dEb2xGVEs5bGFpblNsOWJrMk5VaG40R05BUHVpWmI1SHh6YWZyRjJ6d3dnSGN4djdEQ2VsSy8rWWZhS3NDWWcwYi9nMXFDaElFaVVZMU4vT25NYjRDREFEdHNWR2VQUEhWL2dBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuY29ubmVjdGl2aXR5ICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFLQ0FZQUFBQ0FMTC82QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRa0pGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlFrTkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEdNVUl6UTBRek5FVTRRVUl4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZDUVVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHVTZFpva0FBQURJU1VSQlZIamFiRkRiRGNJd0VFdUFBZmpsanhGS0Z3QTJhRGNnNmdDSUNlQ1R2MDVRdFd6QUJyQkJ3Z1owZzQ2QWpSd1VxcDdrUEM1bm4zTzJxcXFMTVdaci91UFdORTFuSm1LZTUzbkF2Z0o2WVFDdXlQZmUrekFtV0M3b2tyRVFxbS9kRDloYXdBRWtuWG5HK3pBVHNRYU9pVkJxa1NKcjRNSExJbnFtSXBSZktpNkF1NFRZNFJRSjN3NzZvSk1OMm5raVY0cFVwSCtJbGlLcEZIR0hiaTF5UEhlVGhNUXZMV3hvRTZTbEJzSGMvamVsR0Npb1pjbHB2T01JZHB3UktUUFRFVDRDREFBaG8wTEJVbGs1MWdBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuZmlsZV9hY2Nlc3MgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFMQ0FZQUFBQ3BySGNtQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRa1pGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlF6QkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3hNVEF4T1VWQ1JFVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZDUlVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGoxMVpMa0FBQUNTU1VSQlZIamFZbUFBZ3VUa1pBTWdkbUJBQStqaVRFaHk2NEVTODVFVUpnQ3A4MENzQUJOalJOSnBBTVQ5UUx3QWlBOEM4WHdvZXlGVS9nSkk4WDhHNG9BakM0aWNPM2N1SXo1VlFBUDNvN3VaSUtCTU1TZ1VnTGlmb0dKb2NJRkNJUUU1R0pHRERoUWFCNkI4VURBbWdvSUppRUdlZWdERUg2REJHZ2dLRFVja3pZWEFrTGtBdGNVUU9VSkFCZ0FFR0FEclB5dUkrVnNObXdBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuc2VtYW50aWNzICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FZQUFBQldkVnpuQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRek5GT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlF6UkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3hNVEF4T1VWRE1VVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZETWtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGlHK3pWUUFBQUN0U1VSQlZIamFqSkNMRGNJd0RFUnh4UUFkb1d6UUVicEtsQUdBQ1NpRFJDMlRBSnZBQmgyQk84a0JZMXlKU0tlbTl2TW4xMnlDazNOdW9TN0tpUWZ4T1VCN2lQY1pPcGRTSGw4RkRsd0lRWVJPMEdBTEJYQ1BuMnNGRVp6ZDFNRVVwcTNHanhVMFFHY2EzRFQrZVlQclJPaHBWNndOUmQyWS9LNHJiMHVOamlhd0E1aVlBRGhDYk5JaU5qSUhYYUJlVml4ZHRNblBWSWtzRFF4NEY0b0dwOGpTd0pCN1hlV3ZRL1lsd0FDaTVGd05wRzdaVEFBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEubXVsdGltZWRpYSAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFKQ0FZQUFBRGtaTll0QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRakJGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOVU16TWtZMlFqRkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQlJVVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpCUmtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHBtUHR3d0FBQUJ3U1VSQlZIamFZa3hPVGpaZ1lHQUlBT0lGUUN3QVpUUE1uVHUzQVNnSFlvUGtMd0Q1RzVpQWpQMUFMQS9FSDRDNEhvanRnZmdCMUpCOElOWUg0Z01nQXhpQmd2K0J0Q05RSjFnQUd3Q3FBUmxZeU1SQUhIQUFPWkZZeFdCQU84VXNVSG8vMEJORUtYWWswdUFMQUFFR0FHSlBHdHJQek9HbUFBQUFBRWxGVGtTdVFtQ0MpOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuZ3JhcGhpY3MgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFLQ0FZQUFBQmk4S1NEQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRalJGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOVU16TWtZMlFqVkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQ01rVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpDTTBVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHVjZm1iZ0FBQUN1U1VSQlZIamFZbVJBQThuSnlRbEFTaCtJTHdMeGhybHo1MzZBeVRFQ0pRV0F0QUVRWHdCSkFQa2dkandRQndDeEFoQWZBT0tOUUx5QUNVaThCK0wxSUJxb2NEK1FkZ0RpaVVDTmlrRGFFR1FJRVBlRERHU0MyaENJSk9FUHhQVkFqUXBBRFNEYkNtSE9ZSUV4UUJKUXhUZ0JFd01KZ0tCaWtIT1FuUUVLbXZWQXdRMVFYNE44THdBTmpYaG9TRDBBcVdPRTZnNkFlaXdBcXBBQjZ2NkZJTTFRLzJDMTFnSFphbVFBRUdBQXZZQTJ2UXRLQUVZQUFBQUFTVVZPUks1Q1lJST0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEucHJlc2VudGF0aW9uICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBb0FBQUFKQ0FZQUFBQUxwcjBUQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRamhGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOalpFTVRoRFJqWkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQ05rVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpDTjBVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHM5V2NWVUFBQUNDU1VSQlZIamFZbVFBZ3VUa1pBTWcxYytBR3h4a2dUSWVBSEVqRGtWZ0E1aWdIQVU4cGdrQThRRVdKRjBPZUJSZllNQUhnRzUzQU9MN1lLdUJEQVVnYnNDaEZtVExBUkNEQmNySkJ5cm1COUlMNTg2ZGV3R2tHY2dPQU9KNElKNElVc2dJRkFRNU5nRXFhQUFOQVpEWUJpRGVDTlM0QVp1YkRFRHV3dVlHZ0FBREFCTDJJQmdDc1BEQkFBQUFBRWxGVGtTdVFtQ0MpOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEucGVyZm9ybWFuY2UgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FZQUFBQldkVnpuQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TmpaRU1UaERSamxGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOalpFTVRoRFJrRkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzJOa1F4T0VOR04wVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMk5rUXhPRU5HT0VVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUG9VWmQ2VUFBQURxU1VSQlZIamFkRkhSRFlJd0ZJUk80QVk2QW01UUp3QW1FTU1BeEFsZ0E4SUFSSmhBMktCTW9DT3dnYnFCZCtTYTlFT2JYRjdoM3IxMzd6V09mcHl5TEY4SU8rRFk5LzB6NUdJbGtMd0JLL0JSZEVBTExFQUtYQ2syRWhhS0k3QUhKcENyaE1RTTFFendnb0VXV0FHNHFHdUNPNnRPc2pkdUFoSnEvVlppSVhzMTdtMWcvNHp2ekNoNVJxVmNSS3BxN0dTUmRBRFg2UHR1TkZSRnRRU3pST3hFaTJ2Z3dobXBjeitVdHRQSllxZC9GYnNpOStTSHRrcmNqb1lmL0Z6cWFzTjN5RFFvUlluODhzRWVXaXUzNUxpMU9IamRKQ0Q5SXk3c0JNNGl1dWpmNFdxQjVoZjNGV0FBcmM1b05FdFBiek1BQUFBQVNVVk9SSzVDWUlJPSk7IH0KbmF2Lm91dGxpbmUuZmVhdHVyZXMgbGkgYS5udXRzX2FuZF9ib2x0cyB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOalpFTVRoRFJrUkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5qWkVNVGhEUmtWRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMk5rUXhPRU5HUWtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8yTmtReE9FTkdRMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QbkdhWlowQUFBRGVTVVJCVkhqYWZGR0JEWUl3RUtTRUFkaEEzQUFuc0d5Z0cyZzZnSFlDWlFKMUFBSk00QWl3Z1d5Z0c4Z0kzaVZuMHBoR2txUGYvdjFkLzJzU2ZjNjVBc3N1aVg5ajB6UWpnelE0dkFEckNIa0IzQ0dZYzVOSjNXTFpBRXNvdlg0cjVINENmQmFvMXlRcmVRQ28yT3NxTlRBZ2R6UDRIVVZZcWZqSk93TjBZcTVpRVhndDRpS1ZGZFZuckNVd0k5NENIdkVWc0JMaTN2SktrNXJ0U0tZSzFFbzVrTnlyZ1BGTWh6M0h5Y2FoT2tuMUFieEY3TUkrdjFNNEEwTTRGYm1FZWZhV0dCM2thdGJEcFl1TWxJN3NhelJCZ3EvYy9ubnBpc0ZIZ0FFQWxrVlg4MU9qQ3U0QUFBQUFTVVZPUks1Q1lJST0pOyB9CgpuYXYub3V0bGluZS5mZWF0dXJlcyB1bCB1bAp7CiAgZGlzcGxheTogbm9uZTsKICBtYXJnaW46IDAgMCAuNzVlbTsKfQoKbmF2Lm91dGxpbmUuZmVhdHVyZXMgdWwgdWwgYQp7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgcGFkZGluZzogLjNlbSAwIC4zZW0gMThweDsKfQoKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW9mZmxpbmUnXSAgICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLm9mZmxpbmUgICAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXN0b3JhZ2UnXSAgICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnN0b3JhZ2UgICAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWNvbm5lY3Rpdml0eSddICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLmNvbm5lY3Rpdml0eSAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWZpbGVfYWNjZXNzJ10gICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLmZpbGVfYWNjZXNzICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXNlbWFudGljcyddICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnNlbWFudGljcyAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW11bHRpbWVkaWEnXSAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLm11bHRpbWVkaWEgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWdyYXBoaWNzJ10gICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLmdyYXBoaWNzICAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXByZXNlbnRhdGlvbiddICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnByZXNlbnRhdGlvbiAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXBlcmZvcm1hbmNlJ10gICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnBlcmZvcm1hbmNlICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW51dHNfYW5kX2JvbHRzJ10gbmF2Lm91dGxpbmUuZmVhdHVyZXMgLm51dHNfYW5kX2JvbHRzIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KCgoKLyogRkVBVFVSRVM6IENPTlRFTlQgKi8KCmJvZHlbZGF0YS1ocmVmKj0nZmVhdHVyZXMnXSAucGFnZSBoZWFkZXIKewogIG1pbi1oZWlnaHQ6IDI1MHB4Owp9Cgpib2R5W2RhdGEtaHJlZio9J2ZlYXR1cmVzJ10gLnBhZ2UgaGVhZGVyIGhncm91cCwKYm9keVtkYXRhLWhyZWYqPSdmZWF0dXJlcyddIC5wYWdlIGhlYWRlciBzZWN0aW9uCnsKICB6LWluZGV4OiAyOwp9Cgpib2R5W2RhdGEtaHJlZio9J2ZlYXR1cmVzJ10gLnBhZ2UgaGVhZGVyIHNlY3Rpb24gcC5pbnRybwp7CiAgZm9udC1zaXplOiAxOHB4Owp9Cgpib2R5W2RhdGEtaHJlZio9J2ZlYXR1cmVzJ10gLnBhZ2UgaGVhZGVyIHNlY3Rpb24gcAp7CiAgbGluZS1oZWlnaHQ6IDEuNzsKfQoKLmZlYXR1cmVfaWNvbgp7CiAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2ZlYXR1cmVfaWNvbnMucG5nKSwgdXJsKC9zdGF0aWMvaW1hZ2VzL2ZlYXR1cmVfaWNvbl9iYWNrZ3JvdW5kLnBuZyk7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wLCBsZWZ0IHRvcDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogMTsKICB0b3A6IC0xNXB4OwogIGxlZnQ6IC01MHB4OwogIHdpZHRoOiA0NTNweDsKICBoZWlnaHQ6IDM3MnB4OwogIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuMjVzIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuMjVzIGVhc2UtaW4tb3V0OwogIC1tcy10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLXBvc2l0aW9uIC4yNXMgZWFzZS1pbi1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuMjVzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGJhY2tncm91bmQtcG9zaXRpb24gLjI1cyBlYXNlLWluLW91dDsKfQoKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW9mZmxpbmUnXSAgICAgICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciA3NnB4LCBsZWZ0IHRvcDsgfQpib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtc3RvcmFnZSddICAgICAgICAuZmVhdHVyZV9pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yOThweCwgbGVmdCB0b3A7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWNvbm5lY3Rpdml0eSddICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtNjcycHgsIGxlZnQgdG9wOyB9CmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1maWxlX2FjY2VzcyddICAgIC5mZWF0dXJlX2ljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTEwNDZweCwgbGVmdCB0b3A7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXNlbWFudGljcyddICAgICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMTQyOHB4LCBsZWZ0IHRvcDsgfQpib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtbXVsdGltZWRpYSddICAgICAuZmVhdHVyZV9pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xNzkwcHgsIGxlZnQgdG9wOyB9CmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1ncmFwaGljcyddICAgICAgIC5mZWF0dXJlX2ljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTIxNjRweCwgbGVmdCB0b3A7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXByZXNlbnRhdGlvbiddICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMjUzOHB4LCBsZWZ0IHRvcDsgfQpib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtcGVyZm9ybWFuY2UnXSAgICAuZmVhdHVyZV9pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yOTEycHgsIGxlZnQgdG9wOyB9CmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1udXRzX2FuZF9ib2x0cyddIC5mZWF0dXJlX2ljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTMyODZweCwgbGVmdCB0b3A7IH0KCmRpdi5kZXNjcmlwdGlvbiBwCnsKICBmb250LXNpemU6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBtYXJnaW46IDAgMCAxZW07Cn0KCmRpdi5kZXNjcmlwdGlvbiArIHNlY3Rpb24uc3VwcG9ydC5ub25lCnsKICBtYXJnaW4tdG9wOiAwOwp9CgpzZWN0aW9uLnN1cHBvcnQgaDMsCnNlY3Rpb24udXBkYXRlcyBoMwp7CiAgbWFyZ2luLXRvcDogMDsKfQoKc2VjdGlvbi51cGRhdGVzIHVsCnsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogMWVtIDAgMCAwOwogIHBhZGRpbmc6IDA7Cn0KCnNlY3Rpb24udXBkYXRlcyBsaQp7CiAgbWFyZ2luOiAwIDAgLjVlbTsKICAtbW96LWNvbHVtbi1icmVhay1hZnRlcjogYXZvaWQ7CiAgLXdlYmtpdC1jb2x1bW4tYnJlYWstYWZ0ZXI6IGF2b2lkOwogIC1vLWNvbHVtbi1icmVhay1hZnRlcjogYXZvaWQ7CiAgLW1zLWNvbHVtbi1icmVhay1hZnRlcjogYXZvaWQ7CiAgY29sdW1uLWJyZWFrLWFmdGVyOiBhdm9pZDsKICAtbW96LWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZTogYXZvaWQ7CiAgLW1zLWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC1vLWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIGNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwp9CgpzZWN0aW9uLnVwZGF0ZXMudHdvX2NvbHVtbnMKewogIC1tb3otY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgLW8tY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgLW1zLWNvbHVtbi1jb3VudDogMSAhaW1wb3J0YW50OwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgbWFyZ2luOiAwIDAgMiUgMCAhaW1wb3J0YW50OwogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsKfQoKc2VjdGlvbi51cGRhdGVzLnR3b19jb2x1bW5zIHVsCnsKICAtbW96LWNvbHVtbi1jb3VudDogMjsKICAtby1jb2x1bW4tY291bnQ6IDI7CiAgLW1zLWNvbHVtbi1jb3VudDogMjsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogMjsKICBjb2x1bW4tY291bnQ6IDI7CiAgLW1vei1jb2x1bW4tZ2FwOiAyMHB4OwogIC13ZWJraXQtY29sdW1uLWdhcDogMjBweDsKICAtby1jb2x1bW4tZ2FwOiAyMHB4OwogIC1tcy1jb2x1bW4tZ2FwOiAyMHB4OwogIGNvbHVtbi1nYXA6IDIwcHg7Cn0KCnNlY3Rpb24uc3VwcG9ydAp7CiAgbWFyZ2luLXJpZ2h0OiAyZW0gIWltcG9ydGFudDsKfQoKc2VjdGlvbi5zdXBwb3J0IGgzCnsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgpzZWN0aW9uLnN1cHBvcnQgaDQKewogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IC43NWVtIDAgMS41ZW07Cn0KCnNlY3Rpb24uc3VwcG9ydCBoNCBhCnsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDE4cHg7Cn0KCnNlY3Rpb24uc3VwcG9ydCB0YWJsZQp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgpzZWN0aW9uLnN1cHBvcnQgdGFibGUgKyB0YWJsZQp7CiAgbWFyZ2luLXRvcDogMmVtOwp9CgpzZWN0aW9uLnN1cHBvcnQgdGhlYWQgdGgKewogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IGFsbCAuMXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGFsbCAuMXMgZWFzZS1pbi1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW4tb3V0OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IC0yMHB4OwogIGNvbG9yOiAjMzMzOwogIGZvbnQtc2l6ZTogMTFweDsKICBmb250LXdlaWdodDogNDAwOwogIHBhZGRpbmc6IDNweCAwOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogIHdpZHRoOiA4N3B4OwogIG9wYWNpdHk6IDA7Cn0KCnNlY3Rpb24uc3VwcG9ydCB0YWJsZSArIHRhYmxlIHRoZWFkIHRoOm50aC1jaGlsZCgxKTpmaXJzdC1sZXR0ZXIgeyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgfSAvKiBEb24ndCBjYXBpdGFsaXplIHRoZSAnaScgaW4gaU9TLiAqLwoKc2VjdGlvbi5zdXBwb3J0IHRoZWFkIHRoLmN1cnJlbnQKewogIG9wYWNpdHk6IDE7Cn0KCnNlY3Rpb24uc3VwcG9ydCB0aGVhZCB0aDpudGgtY2hpbGQoMSkgeyBsZWZ0OiAwOyB9CnNlY3Rpb24uc3VwcG9ydCB0aGVhZCB0aDpudGgtY2hpbGQoMikgeyBsZWZ0OiA2NXB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0aGVhZCB0aDpudGgtY2hpbGQoMykgeyBsZWZ0OiAxMzVweDsgfQpzZWN0aW9uLnN1cHBvcnQgdGhlYWQgdGg6bnRoLWNoaWxkKDQpIHsgbGVmdDogMjA4cHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRoZWFkIHRoOm50aC1jaGlsZCg1KSB7IGxlZnQ6IDI3OHB4OyB9CgpzZWN0aW9uLnN1cHBvcnQgdGQgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvc3RhdGljL2ltYWdlcy9icm93c2Vycy5wbmcpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgZm9udC1zaXplOiAyNHB4OwogIHBhZGRpbmctdG9wOiA1MHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogODVweDsKfQoKc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLmNocm9tZSAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgMnB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0Ym9keSB0ZC5maXJlZm94IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xNTlweDsgfQpzZWN0aW9uLnN1cHBvcnQgdGJvZHkgdGQuc2FmYXJpICB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMzIwcHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLm9wZXJhICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTQ4MHB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0Ym9keSB0ZC5pZSAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC02NDRweDsgfQpzZWN0aW9uLnN1cHBvcnQgdGJvZHkgdGQuaW9zX3NhZiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtODA1cHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLmFuZHJvaWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTk2NnB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0Ym9keSB0ZC5vcF9taW5pIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xMTI1cHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLm9wX21vYiAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTEyODdweDsgfQoKc2VjdGlvbi5zdXBwb3J0IHAuY3JlZGl0CnsKICBjb2xvcjogIzg4ODsKICBmb250LXNpemU6IDEzcHg7CiAgbWFyZ2luLXRvcDogMi41ZW07CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpzZWN0aW9uLnN1cHBvcnQgcC5jcmVkaXQgYQp7CiAgY29sb3I6ICMzMzM7Cn0KCnNlY3Rpb24uc3VwcG9ydCBhc2lkZS5zdXBwb3J0X2RldGFpbHMgcAp7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxLjY7CiAgbWFyZ2luOiAxLjVlbSAwIDA7CiAgcGFkZGluZzogMS41ZW0gMCAwOwp9CgpzZWN0aW9uLnN1cHBvcnQubm9uZQp7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUsCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSArIHNlY3Rpb24sCnNlY3Rpb24uc3VwcG9ydC5ub25lICsgc2VjdGlvbgp7CiAgZmxvYXQ6IG5vbmU7CiAgaGVpZ2h0OiBpbmhlcml0OwogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsKfQoKI3VwZGF0ZXMKewogIG1hcmdpbi1ib3R0b206IDIlICFpbXBvcnRhbnQ7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZQp7CiAgaGVpZ2h0OiBpbmhlcml0Owp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUgZGl2CnsKICBjbGVhcjogbGVmdDsKICBwYWRkaW5nOiAuNzVlbSAwOwp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUgaDQKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogNDVweCAwIDA7CiAgcGFkZGluZzogMS4yZW0gMCAwOwogIHdpZHRoOiAzMDBweDsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIGRpdiArIGRpdiBoNAp7CiAgbWFyZ2luLXRvcDogMDsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIHRhYmxlCnsKICBmbG9hdDogbGVmdDsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIHRhYmxlICsgdGFibGUKewogIG1hcmdpbi10b3A6IDA7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSB0ZAp7CiAgcGFkZGluZy10b3A6IDYwcHg7CiAgd2lkdGg6IDcwcHg7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSBkaXYgKyBkaXYKewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUgZGl2ICsgZGl2IGg0CnsKICBwYWRkaW5nLXRvcDogLjRlbTsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIGRpdiArIGRpdiB0YWJsZQp7CiAgbWFyZ2luLXRvcDogLjI1ZW07Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSBkaXYgKyBkaXYgdGQKewogIGJhY2tncm91bmQ6IDA7CiAgcGFkZGluZy10b3A6IDA7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSBwCnsKICBjbGVhcjogbGVmdDsKICBtYXJnaW4tdG9wOiAxZW07CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoKc2VjdGlvbi5zdXBwb3J0ICsgc2VjdGlvbgp7CiAgY2xlYXI6IGJvdGg7Cn0KCnVsLmZpZ3VyZXMKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCmFydGljbGUuZmVhdHVyZSBmaWd1cmUsCnNlY3Rpb24uZmlndXJlcyBmaWd1cmUsCnVsLmZpZ3VyZXMgbGkKewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiA1MCU7CiAgbWFyZ2luOiAxZW0gMCAuNWVtOwogIHBhZGRpbmc6IDA7Cn0KCnVsLmZpZ3VyZXMgbGkKewogIG1pbi1oZWlnaHQ6IDg1cHg7Cn0KCmFydGljbGUuZmVhdHVyZSBmaWd1cmUsCnNlY3Rpb24uZmlndXJlcyBmaWd1cmUsCnVsLmZpZ3VyZXMuYm9va3MgbGkKewogIG1pbi1oZWlnaHQ6IDEwMHB4Owp9CgphcnRpY2xlLmZlYXR1cmUgZmlndXJlIHNlY3Rpb24ub25lX2hhbGYgZmlndXJlLAphcnRpY2xlLmZlYXR1cmUgZmlndXJlIHNlY3Rpb24ub25lX3RoaXJkIGZpZ3VyZSwKYXJ0aWNsZS5mZWF0dXJlIGZpZ3VyZSBzZWN0aW9uLnR3b190aGlyZHMgZmlndXJlLApzZWN0aW9uLmZpZ3VyZXMub25lX2hhbGYgZmlndXJlLApzZWN0aW9uLmZpZ3VyZXMub25lX3RoaXJkIGZpZ3VyZSwKc2VjdGlvbi5maWd1cmVzLnR3b190aGlyZHMgZmlndXJlCnsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogMTAwJTsKfQoKYXJ0aWNsZS5mZWF0dXJlIGZpZ3VyZSBhLAp1bC5maWd1cmVzIGxpIGEKewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogNjAwOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgphcnRpY2xlLmZlYXR1cmUgZmlndXJlIGEgcCwKc2VjdGlvbi5maWd1cmVzIGZpZ3VyZSBhIHAsCnVsLmZpZ3VyZXMgbGkgYSBwCnsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDEzcHg7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBtYXJnaW46IC4yNWVtIDA7Cn0KCnNlY3Rpb24uZmlndXJlcyBmaWdjYXB0aW9uID4gYSB7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LXNpemU6IDE0cHg7Cn0KCmFydGljbGUuZmVhdHVyZSBmaWd1cmUgaW1nLApzZWN0aW9uLmZpZ3VyZXMgZmlndXJlIGltZywKdWwuZmlndXJlcyBsaSBhIGltZwp7CiAgZmxvYXQ6IGxlZnQ7CiAgbWF4LXdpZHRoOiAxNTBweDsKICBoZWlnaHQ6IGF1dG87CiAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKfQoKYXJ0aWNsZS5mZWF0dXJlIGZpZ2NhcHRpb24sCnNlY3Rpb24uZmlndXJlcyBmaWdjYXB0aW9uLAp1bC5maWd1cmVzIGxpIGEgc3Ryb25nLAp1bC5maWd1cmVzIGxpIGEgcAp7CiAgbWFyZ2luOiAwIDAgMCAxNTBweDsKICBwYWRkaW5nOiAwIDEuNWVtOwp9Cgp1bC5maWd1cmVzIGxpIGEKewogIGZvbnQtd2VpZ2h0OiA0MDA7Cn0KCnVsLmZpZ3VyZXMgbGkgYSBzdHJvbmcKewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTRweDsKICBtYXJnaW4tdG9wOiAtLjFlbTsKfQoKdWwuZmlndXJlcy5ib29rcyBsaSBpbWcKewogIG1heC13aWR0aDogMTA1cHg7Cn0KCnVsLmZpZ3VyZXMuYm9va3MgbGkgYSBzdHJvbmcsCnVsLmZpZ3VyZXMuYm9va3MgbGkgYSBwCnsKICBtYXJnaW4tbGVmdDogMTAwcHg7Cn0KCmFydGljbGUudHdvX2NvbHVtbnMgc2VjdGlvbiBmaWd1cmUsCnNlY3Rpb24udHdvX3RoaXJkcyBmaWd1cmUKewogIHdpZHRoOiAxMDAlOwp9CgphcnRpY2xlLnR3b19jb2x1bW5zIHNlY3Rpb24gZmlnY2FwdGlvbiwKc2VjdGlvbi50d29fdGhpcmRzIGZpZ2NhcHRpb24KewogIHBhZGRpbmctcmlnaHQ6IDA7Cn0KCnVsLmRlZmluaXRpb25zCnsKICBsaW5lLWhlaWdodDogMS41OwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAtLjc1ZW0gMCAwIDA7CiAgcGFkZGluZzogMDsKICAtbW96LWNvbHVtbi1jb3VudDogMjsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogMjsKICAtbXMtY29sdW1uLWNvdW50OiAyOwogIC1vLWNvbHVtbi1jb3VudDogMjsKICBjb2x1bW4tY291bnQ6IDI7CiAgLW1vei1jb2x1bW4tZ2FwOiAyMHB4OwogIC13ZWJraXQtY29sdW1uLWdhcDogMjBweDsKICAtbXMtY29sdW1uLWdhcDogMjBweDsKICAtby1jb2x1bW4tZ2FwOiAyMHB4OwogIGNvbHVtbi1nYXA6IDIwcHg7Cn0KCnVsLmRlZmluaXRpb25zIGxpCnsKICBmb250LXNpemU6IDE0cHg7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IC43NWVtIDA7CiAgLW1vei1jb2x1bW4tYnJlYWstaW5zaWRlOiBhdm9pZDsKICAtd2Via2l0LWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC1vLWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC1tcy1jb2x1bW4tYnJlYWstaW5zaWRlOiBhdm9pZDsKICBjb2x1bW4tYnJlYWstaW5zaWRlOiBhdm9pZDsKfQoKdWwuZGVmaW5pdGlvbnMgbGkgc3Bhbgp7CiAgZGlzcGxheTogYmxvY2s7Cn0KCnVsLmRlZmluaXRpb25zIGxpIGEKewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5vbmVfaGFsZiB1bC5kZWZpbml0aW9ucywKLm9uZV90aGlyZCB1bC5kZWZpbml0aW9ucywKLnR3b190aGlyZHMgdWwuZGVmaW5pdGlvbnMKewogIC1tb3otY29sdW1uLWNvdW50OiAxOwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAxOwogIC1tcy1jb2x1bW4tY291bnQ6IDE7CiAgLW8tY29sdW1uLWNvdW50OiAxOwogIGNvbHVtbi1jb3VudDogMTsKfQoKc2VjdGlvbiB1bAp7CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxLjY7CiAgbGlzdC1zdHlsZTogc3F1YXJlOwogIG1hcmdpbi1sZWZ0OiAxLjc1ZW07CiAgcGFkZGluZy1sZWZ0OiAwOwp9CgpzZWN0aW9uIGxpCnsKICBtYXJnaW4tYm90dG9tOiAuNzVlbTsKfQoKc2VjdGlvbiB1bC50d29fY29sdW1ucwp7CiAgbWFyZ2luOiAwOwp9CgpzZWN0aW9uIHVsLnR3b19jb2x1bW5zIGxpCnsKICBtYXJnaW46IC4yNWVtIDAgLjc1ZW0gMS41ZW07Cn0KCgovKiBVUERBVEVTICYgVFVUT1JJQUxTICovCgphcnRpY2xlLnR1dG9yaWFsIHsKICBtYXJnaW4tbGVmdDogMzQwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwp9CgphcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUKewogIHBvc2l0aW9uOiBzdGF0aWM7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgd2lkdGg6IGluaGVyaXQ7CiAgaGVpZ2h0OiBpbmhlcml0OwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luOiAwOwp9CgphcnRpY2xlLnR1dG9yaWFsIG5hdi5vdXRsaW5lLnRvYwp7CiAgbWFyZ2luOiAwOwogIHdpZHRoOiAyODBweDsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IC0zNDBweDsKICBib3gtc2hhZG93OiBub25lOwogIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IC8qIHRvIGlnbm9yZSB0aGUgZmFkZVRvZ2dsZSBvbiB3aWRlLWRpc3BsYXkgdHJlYXRtZW50ICovCiAgb3BhY2l0eTogMSAhaW1wb3J0YW50OyAvKiB0byBpZ25vcmUgdGhlIGZhZGVUb2dnbGUgb24gd2lkZS1kaXNwbGF5IHRyZWF0bWVudCAqLwp9CgoKYXJ0aWNsZS50dXRvcmlhbCBuYXYub3V0bGluZSBoMwp7CiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgIG1hcmdpbi1ib3R0b206IDFlbTsKfQoKYXJ0aWNsZS50dXRvcmlhbCBoMTp0YXJnZXQsCmFydGljbGUudHV0b3JpYWwgaDI6dGFyZ2V0LAphcnRpY2xlLnR1dG9yaWFsIGgzOnRhcmdldCwKYXJ0aWNsZS50dXRvcmlhbCBoNDp0YXJnZXQsCmFydGljbGUudHV0b3JpYWwgaDU6dGFyZ2V0CnsKICBwYWRkaW5nLXRvcDogNTBweDsKfQoKCnNlY3Rpb24uY2MsCnNlY3Rpb24uZGlzcXVzCnsKICBtYXJnaW4tbGVmdDogMzQwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIKewogIG1hcmdpbi10b3A6IC41ZW07Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciBoMwp7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbWFyZ2luLWJvdHRvbTogLjM1ZW07Cn0KCiNmaWx0ZXIgewogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXdlaWdodDogNjAwOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIgdWwKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciBsaQp7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAuM2VtIDA7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciBsaSBpbnB1dAp7CiAgbWFyZ2luLXJpZ2h0OiA1cHg7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciAub25lX2hhbGYgdWwgbGkKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbi10b3A6IDA7CiAgd2lkdGg6IDUwJTsKfQoKLnBhZ2UgaGVhZGVyIHNlY3Rpb24uZmlsdGVyIGRpdi50YWdfZmlsdGVyCnsKICBjbGVhcjogYm90aDsKICBmbG9hdDogbGVmdDsKICBwYWRkaW5nLXRvcDogMWVtOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIgZGl2LnRhZ19maWx0ZXIgbGFiZWwKewogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKaW5wdXQuc2VhcmNoIHsKICBiYWNrZ3JvdW5kOiAjZWVlOwogIGJvcmRlcjogMDsKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIG1hcmdpbjogMCAwIDAgLjVlbTsKICBwYWRkaW5nOiAuMmVtIC4zZW07CiAgdmVydGljYWwtYWxpZ246IC0ycHg7CiAgd2lkdGg6IDU0MHB4Owp9CgoudHV0b3JpYWxfbGlzdGluZwp7CiAgbWFyZ2luOiAxLjVlbSAwIDIuNWVtOwogIHBhZGRpbmc6IDA7Cn0KCi50dXRvcmlhbF9saXN0aW5nIGgzCnsKICBmb250LXNpemU6IDE2cHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi50dXRvcmlhbF9saXN0aW5nIC5kYXRlLAoudHV0b3JpYWxfbGlzdGluZyAuYXV0aG9yLAoudHV0b3JpYWxfbGlzdGluZyAudGFncywKLnR1dG9yaWFsX2xpc3RpbmcgLnRhZywKLnR1dG9yaWFsX2xpc3RpbmcgLmNsYXNzZXMKewogIGZsb2F0OiBsZWZ0Owp9CgoudHV0b3JpYWxfbGlzdGluZyAuZGF0ZSwKLnR1dG9yaWFsX2xpc3RpbmcgLmF1dGhvciwKLnR1dG9yaWFsX2xpc3RpbmcgLmJyb3dzZXJzLAoudHV0b3JpYWxfbGlzdGluZyAudGFncywKLnR1dG9yaWFsX2xpc3RpbmcgLmNsYXNzZXMKewogIGhlaWdodDogMThweDsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLmF1dGhvciwKLnR1dG9yaWFsX2xpc3RpbmcgLnRhZ3MKewogIG1hcmdpbi1yaWdodDogMS41ZW07Cn0KCi50dXRvcmlhbF9saXN0aW5ncyAudGFncwp7Cgp9CgoudHV0b3JpYWxfbGlzdGluZyAuYXV0aG9yIHsKICBtYXJnaW4tbGVmdDogMS41ZW07Cn0KCi50dXRvcmlhbF9saXN0aW5nIC5hdXRob3IgaW1nLmF1dGhvcl9pbWFnZQp7CiAgd2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAxOHB4OwogIG1hcmdpbi1sZWZ0OiAwLjI1ZW07CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLnRhZwp7CiAgY29sb3I6ICM4ODg7CiAgZm9udC1zaXplOiAxMXB4OwogIG1hcmdpbjogMnB4IDAuNWVtIDAgMC41ZW07CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi50dXRvcmlhbF9saXN0aW5nIC50YWc6aG92ZXIsCi50dXRvcmlhbF9saXN0aW5nIC50YWc6Zm9jdXMKewogIGNvbG9yOiAjMzMzOwp9CgoudHV0b3JpYWxfbGlzdGluZyAuY2xhc3Nlcwp7CiAgbWFyZ2luLWxlZnQ6IDFlbTsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLmJyb3dzZXJzCnsKICBtYXJnaW46IDAgMS41ZW07Cn0KCi50dXRvcmlhbF9saXN0aW5nIC5zdW1tYXJ5CnsKICBjbGVhcjogbGVmdDsKICBwYWRkaW5nLXRvcDogLjVlbTsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLmJ1dHRvbmxpbmsKewogIGRpc3BsYXk6IG5vbmU7Cn0KCmhlYWRlci50dXRvcmlhbCB7CiAgcGFkZGluZzogMWVtIDAuOWVtOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCmhlYWRlci50dXRvcmlhbCBoZ3JvdXAgKyBzZWN0aW9uCnsKICBtYXJnaW4tdG9wOiAwOwp9CgpoZWFkZXIudHV0b3JpYWwgLmJ5bGluZQp7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKaGVhZGVyLnR1dG9yaWFsIGFzaWRlCnsKICBmbG9hdDogbGVmdDsKICB3aWR0aDogNTAlOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCmhlYWRlci50dXRvcmlhbCBhc2lkZQp7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCmhlYWRlci50dXRvcmlhbCBzZWN0aW9uIGgzLApoZWFkZXIudHV0b3JpYWwgc2VjdGlvbgp7CiAgY29sb3I6ICMzMzM7CiAgZm9udC1zaXplOiAxM3B4OwogIHRleHQtdHJhbnNmb3JtOiBub25lOwp9CmhlYWRlci50dXRvcmlhbCBzZWN0aW9uIGgyIHsKICBmb250LXNpemU6IDI2cHg7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IDAgMCAuMjVlbTsKfQoKaGVhZGVyLnR1dG9yaWFsIC5ieWxpbmUKewogIG1hcmdpbi10b3A6IC43NWVtOwp9CgpoZWFkZXIudHV0b3JpYWwgLmJ5bGluZSBoZ3JvdXAKewogIGZsb2F0OiBub25lOwogIHBhZGRpbmc6IDA7CiAgd2lkdGg6IDEwMCU7Cn0KCmhlYWRlci50dXRvcmlhbCAuYnlsaW5lIGltZwp7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDUwcHg7CiAgaGVpZ2h0OiA1MHB4OwogIG1hcmdpbjogLjJlbSAuNzVlbSAwIDA7Cn0KCmhlYWRlci50dXRvcmlhbCAuYnlsaW5lIGgyCnsKICBmb250LXdlaWdodDogMzAwOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWFyZ2luOiAwIDAgLjE1ZW07Cn0KCmhlYWRlci50dXRvcmlhbCAuYnlsaW5lIGgyIHN0cm9uZwp7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5ieWxpbmUgaDIgc3Bhbgp7CiAgY29sb3I6ICMzMzM7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC13ZWlnaHQ6IDMwMDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5icm93c2VyX3N1cHBvcnQKewogIGZvbnQtc2l6ZTogMTJweDsKICBwYWRkaW5nLXRvcDogMWVtOwogIHdpZHRoOiA2MzJweDsKfQoKaGVhZGVyLnR1dG9yaWFsIGFzaWRlIGEKewogIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5icm93c2VyX3N1cHBvcnQgaDMKewogIGZsb2F0OiBsZWZ0OwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LXdlaWdodDogNjAwOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWFyZ2luOiAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCmhlYWRlci50dXRvcmlhbCAuYnJvd3Nlcl9zdXBwb3J0IHAKewogIGZsb2F0OiBsZWZ0OwogIGZvbnQtc2l6ZTogMTJweDsKICBsaW5lLWhlaWdodDogMS41OwogIG1hcmdpbjogMDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5jb21wYXRpYmxlLWJsb2NrIHsKICBmb250LXNpemU6IHNtYWxsOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQpoZWFkZXIudHV0b3JpYWwgI25vdGNvbXBhdGlibGUgewogIGNvbG9yOiByZWQ7Cn0KCmhlYWRlci50dXRvcmlhbCAjY29tcGF0aWJsZSB7CiAgY29sb3I6IGdyZWVuOwp9CgoucmVkaXJlY3Rfbm90aWZpY2F0aW9uIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmhlYWRlci50dXRvcmlhbCAuZGF0ZSB0aW1lIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCmFydGljbGUudHV0b3JpYWwgZmlndXJlCnsKICBkaXNwbGF5OiBibG9jazsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmFydGljbGUudHV0b3JpYWwgc2VjdGlvbiB7CiAgb3ZlcmZsb3c6IHZpc2libGU7IC8qIE1ha2Ugc3VyZSBGQUNUIGFuZCBUSVAgdGV4dCBpc24ndCBjdXQgb2ZmICovCn0KCmFydGljbGUudHV0b3JpYWwgLm5vdGljZSB7CiAgYmFja2dyb3VuZDogaHNsYSg2MCwgNzAlLCA5MiUsIDEpOwogIHBhZGRpbmc6IDRweCAxMHB4OwogIGJvcmRlcjogMXB4IHNvbGlkIGhzbGEoNDcsIDEwMCUsIDcyJSwgMSk7CiAgYm9yZGVyLXJhZGl1czogMnB4Owp9CgphcnRpY2xlLnR1dG9yaWFsIC5ub3RpY2UuZmFjdCwKYXJ0aWNsZS50dXRvcmlhbCAubm90aWNlLnRpcCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHBhZGRpbmctbGVmdDogMjVweDsKfQphcnRpY2xlLnR1dG9yaWFsIC5ub3RpY2UuZmFjdDpiZWZvcmUsCmFydGljbGUudHV0b3JpYWwgLm5vdGljZS50aXA6YmVmb3JlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAtNXB4OwogIGxlZnQ6IC0xMHB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVooLTMwZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlWigtMzBkZWcpOwogIC1vLXRyYW5zZm9ybTogcm90YXRlWigtMzBkZWcpOwogIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVooLTMwZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZVooLTMwZGVnKTsKICBjb2xvcjogcmdiKDIzNywgNzEsIDUwKTsKICBmb250LXdlaWdodDogYm9sZDsKICBjb250ZW50OiAiRmFjdCI7Cn0KYXJ0aWNsZS50dXRvcmlhbCAubm90aWNlLnRpcDpiZWZvcmUgewogIGNvbnRlbnQ6ICJUaXAiOwogIHRvcDogLTVweDsKICBsZWZ0OiAtNXB4Owp9CgphcnRpY2xlLnR1dG9yaWFsIGZpZ3VyZSBpbWcKewogIG1heC13aWR0aDogMTAwJTsKICBoZWlnaHQ6IGF1dG87CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKYXJ0aWNsZS50dXRvcmlhbCBmaWdjYXB0aW9uCnsKICBtYXJnaW4tdG9wOiAxZW07CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CgphcnRpY2xlLnR1dG9yaWFsIGg0IHsKICBmb250LXNpemU6IDE2cHg7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IDAgMCAuMjVlbTsKfQphcnRpY2xlLnR1dG9yaWFsICBibG9ja3F1b3RlLmNvbW1lbnRhcnkgewogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXNpemU6IDE0cHg7CiAgcGFkZGluZzogMjBweCAxMHB4IDIwcHggNDBweDsKICBib3JkZXItcmFkaXVzOiA3cHg7CiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7CiAgYm9yZGVyOiAycHggZGFzaGVkICNhZmNlYTk7CiAgYmFja2dyb3VuZDogI2VhZjJlODsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCmFydGljbGUudHV0b3JpYWwgYmxvY2txdW90ZS5jb21tZW50YXJ5IGNvZGUgewogIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQoKYXJ0aWNsZS50dXRvcmlhbCAudGFsa2luZ2hlYWQ6YmVmb3JlIHsKICBjb250ZW50OiAnJzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogLTIwcHg7CiAgdG9wOiAxMHB4OwogIHdpZHRoOiA1MHB4OwogIGhlaWdodDogNTBweDsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMHB4IC0xMHB4OwogIGJvcmRlci1yYWRpdXM6IDUwJTsKfQoKLnRvb2x0aXAgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLnRvb2x0aXAgLnByb3BlcnR5IHsKICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNmZmY7Cn0KLnRvb2x0aXAgLnByb3BlcnR5IC5rd2QgewogIGNvbG9yOiAjNTA4Qjg4Owp9Ci50b29sdGlwOmhvdmVyOmFmdGVyIHsKICBjb250ZW50OiBhdHRyKGRhdGEtdG9vbHRpcCk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44NSk7CiAgcGFkZGluZzogNXB4IDlweDsKICBjb2xvcjogI2ZmZjsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgbGVmdDogMDsKICB0b3A6IDI1cHg7CiAgd2lkdGg6IDM5MHB4OwogIHotaW5kZXg6IDEwMDsKfQoKLnBhZ2UgaGVhZGVyIC5kaXNxdXNfY29tbWVudHMgewogIGNsZWFyOiBib3RoOwogIGZsb2F0OiBsZWZ0OwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXdlaWdodDogNjAwOwogIG1hcmdpbjogMWVtIDAgMDsKfQoKLmNjIHAKewogIGZvbnQtc2l6ZTogODUlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKcHJlLnByZXR0eXByaW50IHsKICBtYXJnaW46IDFlbSBhdXRvOwogIHBhZGRpbmc6IDFlbTsKfQoKcHJlLnByZXR0eXByaW50LnNtYWxsIHsKICBwYWRkaW5nOiAwLjVlbTsKfQoKLyogUHJldHR5IHByaW50aW5nIHN0eWxlcy4gVXNlZCB3aXRoIHByZXR0aWZ5LmpzLiAqLwovKiBWaW0gc3VuYnVyc3QgdGhlbWUgYnkgRGF2aWQgTGVpYm92aWMgKi8KCnByZSAuc3RyLCBjb2RlIC5zdHIgeyBjb2xvcjogIzY1QjA0MjsgfSAvKiBzdHJpbmcgIC0gZ3JlZW4gKi8KcHJlIC5rd2QsIGNvZGUgLmt3ZCB7IGNvbG9yOiAjRTI4OTY0OyB9IC8qIGtleXdvcmQgLSBkYXJrIHBpbmsgKi8KcHJlIC5jb20sIGNvZGUgLmNvbSB7IGNvbG9yOiAjQUVBRUFFOyBmb250LXN0eWxlOiBpdGFsaWM7IH0gLyogY29tbWVudCAtIGdyYXkgKi8KcHJlIC50eXAsIGNvZGUgLnR5cCB7IGNvbG9yOiAjODliZGZmOyB9IC8qIHR5cGUgLSBsaWdodCBibHVlICovCnByZSAubGl0LCBjb2RlIC5saXQgeyBjb2xvcjogIzMzODdDQzsgfSAvKiBsaXRlcmFsIC0gYmx1ZSAqLwpwcmUgLnB1biwgY29kZSAucHVuIHsgY29sb3I6ICNmZmY7IH0gLyogcHVuY3R1YXRpb24gLSB3aGl0ZSAqLwpwcmUgLnBsbiwgY29kZSAucGxuIHsgY29sb3I6ICNmZmY7IH0gLyogcGxhaW50ZXh0IC0gd2hpdGUgKi8KcHJlIC50YWcsIGNvZGUgLnRhZyB7IGNvbG9yOiAjODliZGZmOyB9IC8qIGh0bWwveG1sIHRhZyAgICAtIGxpZ2h0IGJsdWUgKi8KcHJlIC5hdG4sIGNvZGUgLmF0biB7IGNvbG9yOiAjYmRiNzZiOyB9IC8qIGh0bWwveG1sIGF0dHJpYnV0ZSBuYW1lICAtIGtoYWtpICovCnByZSAuYXR2LCBjb2RlIC5hdHYgeyBjb2xvcjogIzY1QjA0MjsgfSAvKiBodG1sL3htbCBhdHRyaWJ1dGUgdmFsdWUgLSBncmVlbiAqLwpwcmUgLmRlYywgY29kZSAuZGVjIHsgY29sb3I6ICMzMzg3Q0M7IH0gLyogZGVjaW1hbCAtIGJsdWUgKi8KCnByZS5wcmV0dHlwcmludCwgY29kZS5wcmV0dHlwcmludCB7CiAgY29sb3I6IHdoaXRlOwogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7CiAgYm9yZGVyLXJhZGl1czogOHB4Owp9CgovKiBESVNBQkxFIFNFTEVDVElPTiAgKi8KCmhlYWRlci5tYWluLAojbG9nbywKLndhdGVybWFyaywKbmF2LAoubmF2LAouc2hhcmUsCi5ieWxpbmUgaW1nLAojaHRtbDViYWRnZSwKLmRpc3F1c19jb21tZW50cywKc2VjdGlvbi5kaXNxdXMKewogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW8tdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCgovKiBIRUxQRVJTICAqLwoKLmlyIHsgZGlzcGxheTogYmxvY2s7IGJvcmRlcjogMDsgdGV4dC1pbmRlbnQ6IC05OTllbTsgb3ZlcmZsb3c6IGhpZGRlbjsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IHRleHQtYWxpZ246IGxlZnQ7IGRpcmVjdGlvbjogbHRyOyB9Ci5pciBiciB7IGRpc3BsYXk6IG5vbmU7IH0KLmhpZGRlbiB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgdmlzaWJpbGl0eTogaGlkZGVuOyB9Ci52aXN1YWxseWhpZGRlbiB7IGJvcmRlcjogMDsgY2xpcDogcmVjdCgwIDAgMCAwKTsgaGVpZ2h0OiAxcHg7IG1hcmdpbjogLTFweDsgb3ZlcmZsb3c6IGhpZGRlbjsgcGFkZGluZzogMDsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMXB4OyB9Ci52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6YWN0aXZlLCAudmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmZvY3VzIHsgY2xpcDogYXV0bzsgaGVpZ2h0OiBhdXRvOyBtYXJnaW46IDA7IG92ZXJmbG93OiB2aXNpYmxlOyBwb3NpdGlvbjogc3RhdGljOyB3aWR0aDogYXV0bzsgfQouaW52aXNpYmxlIHsgdmlzaWJpbGl0eTogaGlkZGVuOyB9Ci5jbGVhcmZpeDpiZWZvcmUsIC5jbGVhcmZpeDphZnRlciB7IGNvbnRlbnQ6ICIiOyBkaXNwbGF5OiB0YWJsZTsgfQouY2xlYXJmaXg6YWZ0ZXIgeyBjbGVhcjogYm90aDsgfQouY2xlYXJmaXggeyB6b29tOiAxOyB9CgoKLyogR29vZ2xlIFBsdXMgSWNvbiAqLwojZ29vZ2xlX3BsdXNfcGFnZV9saW5rIHsKICBmbG9hdDogcmlnaHQ7Cn0KCiNnb29nbGVfcGx1c19wYWdlX2xpbmsgYSB7CiAgYmFja2dyb3VuZDogbm9uZTsKICBjb2xvcjogIzMzMzsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQ6IDEzcHgvMTZweCBhcmlhbCxzYW5zLXNlcmlmOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBwYWRkaW5nOiAwOwp9CgojZ29vZ2xlX3BsdXNfcGFnZV9saW5rIGEgc3BhbiB7CiAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2ltYWdlcy9pY29ucy9ncGx1cy0xNi5wbmcpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDE2cHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB0ZXh0LWluZGVudDogMTZweDsKICB3aWR0aDogMTZweDsKfQoKCiNsaXZlYmFubmVyIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiAtNTBweDsKICByaWdodDogLTk1cHg7CiAgYmFja2dyb3VuZDogIzUwOEI4ODsKICBjb2xvcjogd2hpdGU7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVooNDBkZWcpOwogIC1tb3otdHJhbnNmb3JtOiByb3RhdGVaKDQwZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGVaKDQwZGVnKTsKICAtby10cmFuc2Zvcm06IHJvdGF0ZVooNDBkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlWig0MGRlZyk7CiAgZm9udC1zaXplOiAyNXB4OwogIHBhZGRpbmc6IDVweCA3MHB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgei1pbmRleDogMTAwMDsKICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogMCA1MCU7CiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIC1vLXRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIHRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgYm94LXNoYWRvdzogMHB4IDBweCAxMHB4ICMyMjI7CiAgdGV4dC1zaGFkb3c6IDBweCAwcHggNXB4ICMwMDA7Cn0KCiNsaXZlYmFubmVyIC5yZWNvcmQgewogIGJhY2tncm91bmQtY29sb3I6IHJlZDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAxNXB4OwogIGhlaWdodDogMTVweDsKICBtYXJnaW4tYm90dG9tOiAycHg7Cn0KCmtiZCwgLmtiZCB7CiAgcGFkZGluZzogMC4xZW0gMC42ZW07CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwNCwgMjA0LCAyMDQpOwogIGZvbnQtc2l6ZTogMTFweDsKICBmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0NywgMjQ3LCAyNDcpOwogIGNvbG9yOiByZ2IoNTEsIDUxLCA1MSk7CiAgYm94LXNoYWRvdzogMCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwIDAgMCAycHggcmdiKDI1NSwgMjU1LCAyNTUpIGluc2V0OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luOiAwIDAuMWVtOwogIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYigyNTUsIDI1NSwgMjU1KTsKICBsaW5lLWhlaWdodDogMS41OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi8qIFBSSU5UICovCgpAbWVkaWEgcHJpbnQgewogICogeyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgZmlsdGVyOm5vbmUgIWltcG9ydGFudDsgLW1zLWZpbHRlcjogbm9uZSAhaW1wb3J0YW50OyB9CiAgYSwgYTp2aXNpdGVkIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KICBhW2hyZWZdOmFmdGVyIHsgY29udGVudDogIiAoIiBhdHRyKGhyZWYpICIpIjsgfQogIGFiYnJbdGl0bGVdOmFmdGVyIHsgY29udGVudDogIiAoIiBhdHRyKHRpdGxlKSAiKSI7IH0KICAuaXIgYTphZnRlciwgYVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlciwgYVtocmVmXj0iIyJdOmFmdGVyIHsgY29udGVudDogIiI7IH0KICBwcmUsIGJsb2NrcXVvdGUgeyBib3JkZXI6IDFweCBzb2xpZCAjOTk5OyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KICB0aGVhZCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsgfQogIHRyLCBpbWcgeyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KICBpbWcgeyBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgfQogIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfQogIC5wYWdlIHsgbWF4LXdpZHRoOiAxMDAlIH0KICBwLCBoMiwgaDMgeyBvcnBoYW5zOiAzOyB3aWRvd3M6IDM7IH0KICBoMiwgaDMgeyBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsgfQoKICBwcmUgLnN0ciwgY29kZSAuc3RyIHsgY29sb3I6ICMwNjA7IH0KICBwcmUgLmt3ZCwgY29kZSAua3dkIHsgY29sb3I6ICMwMDY7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgcHJlIC5jb20sIGNvZGUgLmNvbSB7IGNvbG9yOiAjNjAwOyBmb250LXN0eWxlOiBpdGFsaWM7IH0KICBwcmUgLnR5cCwgY29kZSAudHlwIHsgY29sb3I6ICM0MDQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgcHJlIC5saXQsIGNvZGUgLmxpdCB7IGNvbG9yOiAjMDQ0OyB9CiAgcHJlIC5wdW4sIGNvZGUgLnB1biB7IGNvbG9yOiAjNDQwOyB9CiAgcHJlIC5wbG4sIGNvZGUgLnBsbiB7IGNvbG9yOiAjMDAwOyB9CiAgcHJlIC50YWcsIGNvZGUgLnRhZyB7IGNvbG9yOiAjMDA2OyBmb250LXdlaWdodDogYm9sZDsgfQogIHByZSAuYXRuLCBjb2RlIC5hdG4geyBjb2xvcjogIzQwNDsgfQogIHByZSAuYXR2LCBjb2RlIC5hdHYgeyBjb2xvcjogIzA2MDsgfQoKICAucGFnZSBoZWFkZXIgLnNoYXJlLCBuYXYsIGhlYWRlciBoZ3JvdXAsIGEuZGlzcXVzX2NvbW1lbnRzIHsgZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fQp9CgoKLyogUkVTUE9OU0lWRSAqLwoKLyogR2V0IHVzIHByb21vdGVkIHRvIGEgY29tcG9zaXRlZCBsYXllciBmb3IgdGhlc2UgZWxlbWVudHMuIExlYXZlIG1vYmlsZQogICBvZmYgYmVjYXVzZSBpdCBhbHJlYWR5IHByb21vdGVzIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzLiBSZW1vdmUgdGhpcyB3aGVuCiAgIGRlc2t0b3AgZm9sbG93cyBzdWl0ZS4gKi8KCkBtZWRpYSBvbmx5IGFsbCBhbmQgKG1heC13aWR0aDogMTAyNHB4KSBhbmQgKG1heC1oZWlnaHQ6IDc2OHB4KQp7CiAgYm9keVtkYXRhLWhyZWY9J2hvbWUnXSwKICBib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10sCiAgYm9keVtkYXRhLWhyZWY9J2J1c2luZXNzJ10KICB7CiAgICAtbW96LWJhY2tncm91bmQtc2l6ZTogMTAyNHB4IDc2OHB4OwogICAgYmFja2dyb3VuZC1zaXplOiAxMDI0cHggNzY4cHg7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODBweCkgewogIGFydGljbGUudHV0b3JpYWwgbmF2Lm91dGxpbmUudG9jLmZpeGVkCiAgewogICAgbWF4LWhlaWdodDogbm9uZTsKICB9CgogIC5wYXR0ZXJuLWJnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gLnBhdHRlcm4tYmcgewogICAgYm9yZGVyLXJhZGl1czogNXB4OwogIH0KCiAgLnBhdHRlcm4tYmctbGlnaHRlciwKICBhcnRpY2xlLnNlY3Rpb25lZCA+IHNlY3Rpb246bm90KCNjbGFzc2VzKSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMXB4IDFweCAxMHB4ICNjY2M7CiAgfQoKICAucGFnZSBoZWFkZXIgLnNoYXJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7CgogIC5zdWJoZWFkZXIKICB7CiAgICBiYWNrZ3JvdW5kOiAjNjVBOEE1OwogICAgaGVpZ2h0OiBhdXRvOwogIH0KCiAgLnN1YmhlYWRlcjo6YmVmb3JlCiAgewogICAgY29udGVudDogJyc7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHotaW5kZXg6IC0xOwogIH0KCiAgLnN1YmhlYWRlcjo6YWZ0ZXIKICB7CiAgICAtbW96LWJveC1zaGFkb3c6IDAgM3B4IDEycHggNXB4IGJsYWNrOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCAxMnB4IDVweCBibGFjazsKICAgIC1vLWJveC1zaGFkb3c6IDAgM3B4IDEycHggNXB4IGJsYWNrOwogICAgLW1zLWJveC1zaGFkb3c6IDAgM3B4IDEycHggNXB4IGJsYWNrOwogICAgYm94LXNoYWRvdzogMCAzcHggMTJweCA1cHggYmxhY2s7CiAgICBjb250ZW50OiAnJzsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgei1pbmRleDogLTE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7OwogICAgdG9wOiAtMTBweDsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaAogIHsKICAgIGZvbnQtc2l6ZTogNDhweDsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLnN1YmhlYWRlciAuc2VhcmNoIGxhYmVsCiAgewogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgfQoKICAuc3ViaGVhZGVyIC5zZWFyY2ggaW5wdXQKICB7CiAgICBiYWNrZ3JvdW5kOiBoc2xhKDAsIDAlLCA5OSUsIDAuMik7CiAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiBoc2woMTc2LCAyNyUsIDEzJSk7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICB0ZXh0LWluZGVudDogNXB4OwogICAgd2lkdGg6IDU4MHB4OwogICAgb3V0bGluZTogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWxlZnQ6IDdweDsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaCBpbnB1dFtwbGFjZWhvbGRlcl06Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgewogICAgY29sb3I6IGhzbGEoMTc2LCAyNyUsIDMzJSwgMC40KTsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaCBpbnB1dDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGhzbGEoMTc2LCAyNyUsIDMzJSwgMC40KTsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcgogIHsKICAgIGNvbG9yOiAjYjBkMmQwOwogICAgcGFkZGluZy1sZWZ0OiAxNXB4OwogIH0KCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uLAogIGlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24KICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgLnBhZ2UgaGVhZGVyIC5zaGFyZSB7CiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA4NjBweCkgewogIC5wYWdlIGhlYWRlciAuc2hhcmUgewogICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDAwcHgpIHsKCiAgaGVhZGVyLm1haW4sCiAgLndhdGVybWFyaywKICBhcnRpY2xlLnR1dG9yaWFsIG5hdi5vdXRsaW5lLnRvYy5maXhlZAogICB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICB9CgogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX2hhbGYgICB7CiAgICB3aWR0aDogNDUlOwogICAgbWF4LWhlaWdodDogMzUwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogIH0KICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV90aGlyZCAgeyB3aWR0aDogMjglOyB9CiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi50d29fdGhpcmRzIHsgd2lkdGg6IDU4JTsgfQoKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV9oYWxmLAogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX3RoaXJkLAogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX3F1YXJ0ZXIsCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi50d29fdGhpcmRzCiAgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW46IDAgMCAyJSAyJTsKICB9CgogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX2hhbGYgKyBzZWN0aW9uLm9uZV9oYWxmICsgc2VjdGlvbiwKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLnR3b190aGlyZHMgKyBzZWN0aW9uLm9uZV90aGlyZCArIHNlY3Rpb24sCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQgKyBzZWN0aW9uLnR3b190aGlyZHMgKyBzZWN0aW9uCiAgewogICAgY2xlYXI6IGJvdGg7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgfQoKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV9oYWxmICsgc2VjdGlvbi5vbmVfaGFsZiArIHNlY3Rpb24gKyBzZWN0aW9uLAogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24udHdvX3RoaXJkcyArIHNlY3Rpb24ub25lX3RoaXJkICsgc2VjdGlvbiArIHNlY3Rpb24sCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQgKyBzZWN0aW9uLnR3b190aGlyZHMgKyBzZWN0aW9uICsgc2VjdGlvbgogIHsKICAgIG1hcmdpbi10b3A6IDA7CiAgfQoKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV9oYWxmOm50aC1jaGlsZCgybiArIDEpLAogIC50aGlyZHMgc2VjdGlvbi5vbmVfdGhpcmQ6bnRoLWNoaWxkKDNuICsgMSksCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQ6Zmlyc3QtY2hpbGQKICB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogIGFydGljbGUuc2VjdGlvbmVkICNzdXBwb3J0LAogIGFydGljbGUuc2VjdGlvbmVkICN1cGRhdGVzCiAgewogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogNDUlOwogICAgbWFyZ2luOiAwIDAgMiUgMCAhaW1wb3J0YW50OwogIH0KCiAgYXJ0aWNsZS5zZWN0aW9uZWQgI3VwZGF0ZXMKICB7CiAgICBtYXJnaW46IDAgMiUgMiUgMCAhaW1wb3J0YW50OwogIH0KCiAgLyogSG9tZXBhZ2UgKi8KCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQgIHsgd2lkdGg6IDMyJTsgfQoKICBuYXYub3V0bGluZS50b2MKICB7CiAgICBib3gtc2hhZG93OiAxcHggMXB4IDEwcHggI2NjYyAhaW1wb3J0YW50OwogIH0KCiAgLnBhdHRlcm4tYmctbGlnaHRlciwKICBhcnRpY2xlLnNlY3Rpb25lZCA+IHNlY3Rpb246bm90KCNjbGFzc2VzKSB7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIG5hdi5vdXRsaW5lLnRvYy5maXhlZAogIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogNTBweDsKICAgIGxlZnQ6IDUwJTsKICAgIG1hcmdpbi1sZWZ0OiAtNTAwcHg7CiAgICBtYXgtaGVpZ2h0OiA1MjVweDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMDBweCkgewogICNob21lX21lbnUge30KICAjdHV0b3JpYWxzX21lbnUge30KICAjdXBkYXRlc19tZW51IHt9CiAgI2ZlYXR1cmVzX3Nob3cgeyB9CiAgI3NsaWRlc19tZW51IHsgfQogICNyZXNvdXJjZXNfbWVudSB7fQogICNwcm9maWxlc19tZW51IHsgIH0KICAjY29udHJpYl9tZW51IHsgIH0KICAjc2VhcmNoX3Nob3cgc3BhbiB7IGRpc3BsYXk6IG5vbmU7IH0KCiAgLnBhZ2UsCiAgLnBhZ2UgaGVhZGVyLAogIGhlYWRlciwKICAuc3ViaGVhZGVyIGRpdiwKICAubmF2LAogICN1cGRhdGVzX2xpc3QKICB7CiAgICB3aWR0aDogaW5oZXJpdCAhaW1wb3J0YW50OwogIH0KCiAgLnBhZ2UgewogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIH0KCiAgLnBhZ2UuY3VycmVudAogIHsKICAgIG1hcmdpbi10b3A6IDBlbTsKICB9CgogIGhlYWRlci5tYWluCiAgewogICAgcGFkZGluZzogMDsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgd2lkdGg6IDEwMCU7CiAgfQoKICBoZWFkZXIubWFpbiBuYXYKICB7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIGhlYWRlciBoZ3JvdXAgKyBzZWN0aW9uCiAgewogICAgZmxvYXQ6IG5vbmU7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsLAogIHNlY3Rpb24uY2MsCiAgc2VjdGlvbi5kaXNxdXMKICB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogIG5hdi5vdXRsaW5lLnRvYwogIHsKICAgIG1hcmdpbi1ib3R0b206IDJlbTsKICAgIHBhZGRpbmc6IDA7CiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLAogIHNlY3Rpb24sCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbiwKICBzZWN0aW9uLmxpbmtfdGFyZ2V0LAogIC5wYWdlIGhlYWRlcgogIHsKICAgIHBhZGRpbmc6IDFlbSAxLjI1ZW07CiAgfQoKICBzZWN0aW9uLm9uZV9oYWxmLAogIHNlY3Rpb24ub25lX3RoaXJkLAogIHNlY3Rpb24ub25lX3F1YXJ0ZXIsCiAgc2VjdGlvbi50d29fdGhpcmRzCiAgewogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDsKICB9CgogIC5wYWdlIGhlYWRlciAuc2hhcmUgbGkKICB7CiAgICBwb3NpdGlvbjogc3RhdGljOwogIH0KCiAgLnBhZ2UgaGVhZGVyIC5zaGFyZSB1bAogIHsKICAgIG1hcmdpbi10b3A6IDFlbTsKICB9CgogIC5wYWdlIGhlYWRlciAuc2hhcmUgbGkKICB7CiAgICBkaXNwbGF5OiBpbmxpbmU7CiAgfQoKICAvKiBIb21lcGFnZSAqLwoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGhlYWRlci50d29fY29sdW1ucwogIHsKICAgIHBhZGRpbmc6IDIlOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwLAogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gaGVhZGVyLnR3b19jb2x1bW5zIHAKICB7CiAgICBmbG9hdDogbm9uZTsKICAgIHdpZHRoOiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGhlYWRlci50d29fY29sdW1ucyBoZ3JvdXAgaDEsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwIGgyCiAgewogICAgZm9udC1zaXplOiAyMjUlOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBoZWFkZXIudHdvX2NvbHVtbnMgcAogIHsKICAgIG1hcmdpbjogLjVlbSAwIDA7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIC5vbmVfdGhpcmQKICB7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiBpbmhlcml0OwogICAgbWFyZ2luLWxlZnQ6IDIlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAyJTsKICAgIHdpZHRoOiAyOCUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gLm9uZV90aGlyZDpmaXJzdC1jaGlsZAogIHsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIC5vbmVfdGhpcmQgYQogIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGFydGljbGUucHJvZmlsZQogIHsKICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICBtYXJnaW46IDIlIDAgMCAyJSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDMyJSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpCiAgewogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICB9CgogIC8qIFR1dG9yaWFscyAmIFVwZGF0ZXMgKi8KCiAgLnBhZ2UgaGVhZGVyIHNlY3Rpb24uZmlsdGVyIGRpdi50YWdfZmlsdGVyCiAgewogICAgd2lkdGg6IDEwMCU7CiAgfQoKICAucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIgZGl2LnRhZ19maWx0ZXIgaW5wdXQKICB7CiAgICB3aWR0aDogOTAlOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IC41ZW0gMDsKICB9CgogIC8qIFByb2ZpbGVzICovCgogIGJvZHlbZGF0YS1ocmVmPSJwcm9maWxlcyJdIC5wcm9maWxlOmZpcnN0LWNoaWxkLAogIGJvZHlbZGF0YS1ocmVmPSJwcm9maWxlcyJdIC5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpCiAgewogICAgbWFyZ2luLWxlZnQ6IDIlOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9InByb2ZpbGVzIl0gLnByb2ZpbGU6Zmlyc3QtY2hpbGQsCiAgYm9keVtkYXRhLWhyZWY9InByb2ZpbGVzIl0gLnByb2ZpbGU6bnRoLWNoaWxkKDJuICsgMSkKICB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogIGFydGljbGUucHJvZmlsZQogIHsKICAgIG1hcmdpbi1sZWZ0OiAyJTsKICAgIHdpZHRoOiA0OSU7CgogIH0KCiAgYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24KICB7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICB9CgogIC5wcm9maWxlIC5tYXAsCiAgLnByb2ZpbGUgLmxpc3QtYXJ0aWNsZXMgc3BhbgogIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAucHJvZmlsZSAubGlzdC1hcnRpY2xlcwogIHsKICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50OwogICAgY29sb3I6ICM2NjYgIWltcG9ydGFudDsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcwogIHsKICAgIG1hcmdpbjogMi43NWVtIDAgMCA5NHB4OwogICAgcG9zaXRpb246IHN0YXRpYzsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcwogIHsKICAgIHdpZHRoOiA3MCU7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4NjBweCkgewoKICAjaG9tZV9tZW51IHt9CiAgI3R1dG9yaWFsc19tZW51IHt9CiAgI3VwZGF0ZXNfbWVudSB7fQogICNmZWF0dXJlc19zaG93IHsgfQogICNzbGlkZXNfbWVudSB7IH0KICAjcmVzb3VyY2VzX21lbnUge30KICAjd2h5X21lbnUge30KICAjY29udHJpYl9tZW51IHsgZGlzcGxheTogbm9uZTsgfQogICNzZWFyY2hfc2hvdyBzcGFuIHsgZGlzcGxheTogbm9uZTsgfQoKICBoZWFkZXIubWFpbiBuYXYgdWwgbGkgYSwgI2hvbWVfaG9ybnMKICBoZWFkZXIubWFpbiBuYXYgdWwgbGkjZmVhdHVyZXNfc2hvdywKICBoZWFkZXIubWFpbiBoMQogIHsKICB9CgogIGhlYWRlci5tYWluIG5hdiB1bCBsaSNmZWF0dXJlc19zaG93IHsKICB9CgogIGhlYWRlci5tYWluIG5hdiB1bCBsaSNzZWFyY2hfc2hvdwogIHsKICAgIGZsb2F0OiByaWdodDsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIuZmVhdHVyZXMKICB7CiAgICBiYWNrZ3JvdW5kOiAjNWZhNGEwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIuZmVhdHVyZXMgaDIKICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgaGVhZGVyLm1haW4gLnN1YmhlYWRlciAjZmVhdHVyZXNfaGlkZQogIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgcGFkZGluZzogMnB4IDAgMCAxMHB4OwogICAgd2lkdGg6IDI0cHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgfQoKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bAogIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMCAwIC41ZW07CiAgICB3aWR0aDogaW5oZXJpdDsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIgLmZlYXR1cmVzIGxpCiAgewogICAgZmxvYXQ6IGxlZnQ7CiAgfQoKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyLnNlYXJjaAogIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjVhOGE1OwogIG1hcmdpbjogMCAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDVweDsKICAgICAgICBmb250LXNpemU6IDEuNmVtOwogIGNsZWFyOiBib3RoOwogIH0KCiAgaGVhZGVyLm1haW4gLnN1YmhlYWRlci5zZWFyY2ggbGFiZWwgc3BhbiwKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyLnNlYXJjaCBpbWcKICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgaGVhZGVyLm1haW4gLnN1YmhlYWRlci5zZWFyY2ggaW5wdXQKICB7CiAgd2lkdGg6IDEwMCU7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIC5wYWdlIGhlYWRlci50d29fY29sdW1ucyBzZWN0aW9uLAogIC5wYWdlIGhlYWRlciBoZ3JvdXAsCiAgLnBhZ2UgaGVhZGVyIHNlY3Rpb24KICB7CiAgICBmbG9hdDogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogIH0KCiAgLnBhZ2UgaGVhZGVyID4gaGdyb3VwOmZpcnN0LWNoaWxkIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkgewogICNob21lX21lbnUge30KICAjdHV0b3JpYWxzX21lbnUge30KICAjdXBkYXRlc19tZW51IHt9CiAgI2ZlYXR1cmVzX3Nob3cgeyB9CiAgI3NsaWRlc19tZW51IHsgfQogICNyZXNvdXJjZXNfbWVudSB7fQogICNwcm9maWxlc19tZW51IHsgZGlzcGxheTogbm9uZTsgfQogICNjb250cmliX21lbnUgeyBkaXNwbGF5OiBub25lOyB9CiAgI3NlYXJjaF9zaG93IHNwYW4geyBkaXNwbGF5OiBub25lOyB9CgoKICBoZWFkZXIubWFpbiB7CiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50OwogIH0KCiAgaGVhZGVyLm1haW4gI2hvbWVfaG9ybnMKICB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW46IC4xZW07CiAgICBwYWRkaW5nOiAwLjRlbSAwLjZlbTsKICB9CgogIGhlYWRlci5tYWluICNob21lX2hvcm5zIGltZyB7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMjRweDsKICB9CgogIGhlYWRlci5tYWluIG5hdiBsaTpmaXJzdC1jaGlsZCwKICAubmF2CiAgewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZQogIHsKICAgIG1hcmdpbjogMDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gaGVhZGVyCiAgewogICAgbWFyZ2luLWJvdHRvbTogMDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI2NsYXNzZXMKICB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIC5vbmVfdGhpcmQsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAub25lX3RoaXJkOmZpcnN0LWNoaWxkCiAgewogICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CgogICAgd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gc2VjdGlvbi5saW5rX3RhcmdldCBhCiAgewogICAgaGVpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwOwogIH0KCiAgLnBhZ2UKICB7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICB9CgogIHNlY3Rpb24KICB7CiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgYXJ0aWNsZS5mZWF0dXJlIGZpZ3VyZSwKICBzZWN0aW9uLmZpZ3VyZXMgZmlndXJlLAogIHVsLmZpZ3VyZXMgbGkKICB7CiAgICBmbG9hdDogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogIH0KCiAgLyogSG9tZXBhZ2UgKi8KCiAgI3VwZGF0ZXNfdGl0bGUsCiAgI3VwZGF0ZXNfYmFkZ2UKICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjc3RhcnQKICB7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICB3aWR0aDogaW5oZXJpdDsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdICNsb2dvLAogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI3VwZGF0ZXMKICB7CiAgICBwb3NpdGlvbjogc3RhdGljOwogICAgaGVpZ2h0OiBpbmhlcml0OwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcwogIHsKICAgIG1hcmdpbjogMi41JSAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAyJSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDk2JSAhaW1wb3J0YW50OwogIH0KfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsKCiAgI2hvbWVfbWVudSB7fQogICN0dXRvcmlhbHNfbWVudSB7fQogICN1cGRhdGVzX21lbnUge30KICAjZmVhdHVyZXNfc2hvdyB7fQogICNzbGlkZXNfbWVudSB7IGRpc3BsYXk6IG5vbmU7IH0KICAjcmVzb3VyY2VzX21lbnUge30KICAjcHJvZmlsZXNfbWVudSB7IGRpc3BsYXk6IG5vbmU7IH0KICAjY29udHJpYl9tZW51IHsgZGlzcGxheTogbm9uZTsgfQogICNzZWFyY2hfc2hvdyBzcGFuIHsgZGlzcGxheTogbm9uZTsgfQoKICB1bC5kZWZpbml0aW9ucwogIHsKICAgIC1tb3otY29sdW1uLWNvdW50OiAwOwogICAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDA7CiAgICAtbXMtY29sdW1uLWNvdW50OiAwOwogICAgLW8tY29sdW1uLWNvdW50OiAwOwogICAgY29sdW1uLWNvdW50OiAwOwogIH0KCiAgLyogUHJvZmlsZXMgKi8KCiAgYXJ0aWNsZS5wcm9maWxlCiAgewogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIGFydGljbGUucHJvZmlsZSBzZWN0aW9uCiAgewogICAgaGVpZ2h0OiBpbmhlcml0OwogICAgbWFyZ2luOiAuNzVlbSAwICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYm90dG9tOiAwOwogICAgcmlnaHQ6IDA7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMmVtOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMDsKICAgIHRvcDogYXV0byAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3cteTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiA1cHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUM0OTM2OwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiB0b3AgMC4ycyBlYXNlLWluLW91dDsKICAgIHRyYW5zaXRpb246IHRvcCAwLjJzIGVhc2UtaW4tb3V0OwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlIGgzIHsKICAgIG1hcmdpbjogMHB4ICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUgdWwgewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgewogICAgdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBib3R0b206IDAgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJTsKICAgIHdpZHRoOiAxMDAlOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzRlNGU0ZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDEycHggIzI1MjUyNTsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IG5vbmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50OwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCAgdWwgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIGgzIHsKICAgIG1hcmdpbjogMWVtOwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCB1bCBhIHsKICAgIGNvbG9yOiAjZGRkOwogICAgbWFyZ2luOiAwOwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCB1bCBhOmFjdGl2ZSB7CiAgICBjb2xvcjogI2RkZDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgYTp2aXNpdGVkIHsKICAgIGNvbG9yOiAjZGRkOwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCB1bCB1bCBhIHsKICAgIGNvbG9yOiAjYmJiOwogICAgY29sb3I6ICNiYmIgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgIGE6YWN0aXZlIHsKICAgIGNvbG9yOiAjYmJiOwogICAgY29sb3I6ICNiYmIgIWltcG9ydGFudDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgdWwgYTp2aXNpdGVkIHsKICAgIGNvbG9yOiAjYmJiICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIHVsIHVsIHVsIGEgewogICAgY29sb3I6ICM5OTkgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgdWwgYTphY3RpdmUgewogICAgY29sb3I6ICM5OTkgIWltcG9ydGFudDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgdWwgYTp2aXNpdGVkIHsKICAgIGNvbG9yOiAjOTk5ICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIG5hdiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUM0OTM2ICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogd2hpdGU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLXRvcDogNHB4ICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIG5hdiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgY29sb3I6IHdoaXRlOwogICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgbmF2Lm91dGxpbmUudG9jIHVsIHsKICAgIG1hcmdpbi1sZWZ0OiAxZW07CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIGgzIHsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIG5hdiBsaSB7CiAgICBtYXJnaW4tYm90dG9tOiAxZW07CiAgICBmb250LXNpemU6MTZweDsKICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgfQoKICAucHJvZmlsZSAuYXJ0aWNsZXMKICB7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcyBsaQogIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmUgIWltcG9ydGFudDsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBtYXJnaW4tbGVmdDogMWVtOwogICAgdGV4dC1pbmRlbnQ6IC0xLjVlbTsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcyBhCiAgewogICAgbGlzdC1zdHlsZTogbm9uZSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgfQoKCiAgLnR3b19jb2x1bW5zCiAgewogICAgLW1vei1jb2x1bW4tY291bnQ6IDE7CiAgICAtby1jb2x1bW4tY291bnQ6IDE7CiAgICAtbXMtY29sdW1uLWNvdW50OiAxOwogICAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDE7CiAgICBjb2x1bW4tY291bnQ6IDE7CiAgfQoKICBkaXYub25lX3F1YXJ0ZXIsCiAgZGl2Lm9uZV9oYWxmICAgIHsgZmxvYXQ6IGxlZnQ7IH0KICBkaXYub25lX3F1YXJ0ZXIgewogICAgd2lkdGg6IDUwJTsKICAgIHBhZGRpbmctYm90dG9tOiAuNzVlbTsKICB9CiAgZGl2Lm9uZV9oYWxmICAgIHsgd2lkdGg6IDEwMCU7IH0KCiAgLyogSG9tZXBhZ2UgKi8KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcy5mZWVkIGxpCiAgewogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiYmI7CiAgICBwYWRkaW5nOiAuMjVlbSAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI3VwZGF0ZXMuZmVlZCBsaTpmaXJzdC1jaGlsZAogIHsKICAgIGJvcmRlci10b3A6IDA7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdICN1cGRhdGVzLmZlZWQgbGkgc3Bhbi5ieWxpbmUsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcy5mZWVkIGxpIHNwYW4uZGV0YWlscwogIHsKICAgIGRpc3BsYXk6IGlubGluZTsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI3VwZGF0ZXMuZmVlZCBsaSBzcGFuLmNsYXNzZXMsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcy5mZWVkIGxpIHNwYW4udHlwZQogIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGFydGljbGUucHJvZmlsZSB7IHdpZHRoOiA0OSUgIWltcG9ydGFudDsgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24geyBwYWRkaW5nOiAwIDQlICFpbXBvcnRhbnQ7IH0KICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGFydGljbGUucHJvZmlsZTpudGgtY2hpbGQoM24gKyAxKSB7IG1hcmdpbi1sZWZ0OiAyJSAhaW1wb3J0YW50OyB9CiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBhcnRpY2xlLnByb2ZpbGU6bnRoLWNoaWxkKDJuICsgMSkgeyBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OyB9CgogIG5hdi50b2MgewogICAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBoZWlnaHQ6IDVweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlZDQ3MzI7CiAgfQoKICAucGFnZSBoZWFkZXIgLnNoYXJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KSB7CiAgI2hvbWVfbWVudSB7fQogICN0dXRvcmlhbHNfbWVudSB7fQogICN1cGRhdGVzX21lbnUge30KICAjZmVhdHVyZXNfc2hvdyB7IGRpc3BsYXk6IG5vbmU7IH0KICAjc2xpZGVzX21lbnUgeyBkaXNwbGF5OiBub25lOyB9CiAgI3Jlc291cmNlc19tZW51IHt9CiAgI3Byb2ZpbGVzX21lbnUgeyBkaXNwbGF5OiBub25lOyB9CiAgI2NvbnRyaWJfbWVudSB7IGRpc3BsYXk6IG5vbmU7IH0KICAjc2VhcmNoX3Nob3cgc3BhbiB7IGRpc3BsYXk6IG5vbmU7IH0KCiAgbmF2Lm91dGxpbmUgewogICAgbWF4LWhlaWdodDogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgLnBhZ2UsCiAgLnBhZ2UuY3VycmVudCwKICAucGFnZSBoZWFkZXIKICB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgfQoKICAucGFnZSBoZWFkZXIudHV0b3JpYWwgaDEgewogICAgIGZvbnQtc2l6ZTogMjVweCAhaW1wb3J0YW50OwogIH0KCiAgaGVhZGVyLm1haW4gaDEKICB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxvYXQ6IGxlZnQ7CiAgfQoKCiAgaGVhZGVyLm1haW4gaDEKICB7CiAgICBtYXJnaW46IC4xZW07CiAgICBwYWRkaW5nOiAwLjRlbSAwLjZlbTsKICB9CgogIGhlYWRlci50dXRvcmlhbCAuYnJvd3Nlcl9zdXBwb3J0IHsKICAgIG1hcmdpbjogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgaGVhZGVyLm1haW4gbmF2IHVsIGxpI2ZlYXR1cmVzX3Nob3cgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIuc2VhcmNoCiAgewogICAgbWFyZ2luOiAuMTVlbSAwIDAgLjVlbTsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsCiAgewogICAgbWFyZ2luLWxlZnQ6IDEycHg7CiAgICB3aWR0aDogMzYwcHg7CiAgfQoKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaQogIHsKICAgIHdpZHRoOiAxNjBweDsKICB9CgogIC8qIEhvbWVwYWdlICovCgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlCiAgewogICAgbWFyZ2luOiAyJSAwIDAgMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24KICB7CiAgICBwYWRkaW5nOiAwIDIlICFpbXBvcnRhbnQ7CiAgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgybiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQoKICAjYXV0aG9ycyB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQoubWFpbiAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaQogIHsKICAgIHdpZHRoOiAxNjBweDsKICB9CgogIC8qIEhvbWVwYWdlICovCgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlCiAgewogICAgbWFyZ2luOiAyJSAwIDAgMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24KICB7CiAgICBwYWRkaW5nOiAwIDIlICFpbXBvcnRhbnQ7CiAgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgybiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQoKICAjYXV0aG9ycyB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQo=") >  -->
<!--	<link rel="stylesheet" src="data:/text/plain;base64,LyoKICAjIEFWQUlMQUJMRSBXRUlHSFRTL1NUWUxFUwoKICAgIDMwMCAoZm9yIGhlYWRsaW5lcyBvbmx5KQogICAgNDAwIChib2R5IHRleHQpCiAgICA0MDAgaXRhbGljCiAgICA2MDAKICAgIDgwMAoKICAtLS0KCiAgIyBDT0xPUlMKCiAgICBkZWZhdWx0OiAgIDNjM2MzYwogICAgICAgICAgICAgICAoZGFyayBncmV5KQoKICAgIGFsdGVybmF0ZTogNWZhNGEwCiAgICAgICAgICAgICAgICh0ZWFsKQoKICAgIGhpZ2hsaWdodDogZjA0NTMwCiAgICAgICAgICAgICAgIChvcmFuZ2UpCiovCgpib2R5IDo6LXdlYmtpdC1zY3JvbGxiYXIgewogIGhlaWdodDogMTZweDsKICBvdmVyZmxvdzogdmlzaWJsZTsKICB3aWR0aDogMTZweDsKfQoKYm9keSAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMik7CiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OwogIG1pbi1oZWlnaHQ6IDI4cHg7CiAgcGFkZGluZzogMTAwcHggMCAwOwogIGJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggMCByZ2JhKDAsMCwwLC4xKSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4wNyk7CiAgYm9yZGVyLXdpZHRoOiAxcHggMXB4IDFweCA2cHg7Cn0KCmJvZHkgIDo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHsKICBoZWlnaHQ6IDA7CiAgd2lkdGg6IDA7Cn0KCmJvZHkgIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDsKICBib3JkZXItd2lkdGg6IDAgMCAwIDRweDsKICB9Cgpib2R5ICA6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi8qIE5PUk1BTElaRSAqLwoKYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbmF2LCBzZWN0aW9uIHsgZGlzcGxheTogYmxvY2s7IH0KYXVkaW8sIGNhbnZhcywgdmlkZW8geyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICpkaXNwbGF5OiBpbmxpbmU7ICp6b29tOiAxOyB9CmF1ZGlvOm5vdChbY29udHJvbHNdKSB7IGRpc3BsYXk6IG5vbmU7IH0KW2hpZGRlbl0geyBkaXNwbGF5OiBub25lOyB9CgpodG1sIHsgZm9udC1zaXplOiAxMDAlOyBvdmVyZmxvdy15OiBzY3JvbGw7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IH0KYm9keSB7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMS4yMzE7IG92ZXJmbG93OiBoaWRkZW47IH0KYm9keSwgYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBjb2xvcjogIzIyMjsgfQoKOjotbW96LXNlbGVjdGlvbiB7IGJhY2tncm91bmQ6ICNmMDQ1MzA7IGNvbG9yOiAjZmZmOyB0ZXh0LXNoYWRvdzogbm9uZTsgfQo6OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6ICNmMDQ1MzA7IGNvbG9yOiAjZmZmOyB0ZXh0LXNoYWRvdzogbm9uZTsgfQoKYSB7IGNvbG9yOiAjNTA4Qjg4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7fQphOnZpc2l0ZWQgeyBjb2xvcjogIzUwOEI4ODsgfQphOmhvdmVyLCBhOmZvY3VzIHsgY29sb3I6ICNmMDQ1MzA7IH0KYTpmb2N1cyB7IG91dGxpbmU6IHRoaW4gZG90dGVkOyB9CmE6aG92ZXIsIGE6YWN0aXZlIHsgb3V0bGluZTogMDsgfQoKYWJiclt0aXRsZV0geyBib3JkZXItYm90dG9tOiAxcHggZG90dGVkOyB9CmIsIHN0cm9uZyB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CmJsb2NrcXVvdGUgeyBtYXJnaW46IDFlbSA0MHB4OyB9CmRmbiB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQpociB7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDFweDsgYm9yZGVyOiAwOyBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsgbWFyZ2luOiAxZW0gMDsgcGFkZGluZzogMDsgfQppbnMgeyBiYWNrZ3JvdW5kOiAjZmY5OyBjb2xvcjogIzAwMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Cm1hcmsgeyBiYWNrZ3JvdW5kOiAjZmYwOyBjb2xvcjogIzAwMDsgZm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogYm9sZDsgfQpwcmUsIGNvZGUsIGtiZCwgc2FtcCB7IGZvbnQtZmFtaWx5OiAiU291cmNlIENvZGUgUHJvIiwgbW9ub3NwYWNlOyBfZm9udC1mYW1pbHk6ICdjb3VyaWVyIG5ldycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAxZW07IH0KcHJlIHsgd2hpdGUtc3BhY2U6IHByZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH0KcSB7IHF1b3Rlczogbm9uZTsgfQpxOmJlZm9yZSwgcTphZnRlciB7IGNvbnRlbnQ6ICIiOyBjb250ZW50OiBub25lOyB9CnNtYWxsIHsgZm9udC1zaXplOiA4NSU7IH0Kc3ViLCBzdXAgeyBmb250LXNpemU6IDc1JTsgbGluZS1oZWlnaHQ6IDA7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9CnN1cCB7IHRvcDogLTAuNWVtOyB9CnN1YiB7IGJvdHRvbTogLTAuMjVlbTsgfQp1bCwgb2wgeyBtYXJnaW46IDFlbSAwOyBwYWRkaW5nOiAwIDAgMCA0MHB4OyB9CmRkIHsgbWFyZ2luOiAwIDAgMCA0MHB4OyB9Cm5hdiB1bCwgbmF2IG9sIHsgbGlzdC1zdHlsZTogbm9uZTsgbGlzdC1zdHlsZS1pbWFnZTogbm9uZTsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9CmltZyB7IGJvcmRlcjogMDsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfQpzdmc6bm90KDpyb290KSB7IG92ZXJmbG93OiBoaWRkZW47IH0KZmlndXJlIHsgbWFyZ2luOiAwOyB9Cgpmb3JtIHsgbWFyZ2luOiAwOyB9CmZpZWxkc2V0IHsgYm9yZGVyOiAwOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IH0KbGFiZWwgeyBjdXJzb3I6IHBvaW50ZXI7IH0KbGVnZW5kIHsgYm9yZGVyOiAwOyAqbWFyZ2luLWxlZnQ6IC03cHg7IHBhZGRpbmc6IDA7IH0KYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7IGZvbnQtc2l6ZTogMTAwJTsgbWFyZ2luOiAwOyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7ICp2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9CmJ1dHRvbiwgaW5wdXQgeyBsaW5lLWhlaWdodDogbm9ybWFsOyAqb3ZlcmZsb3c6IHZpc2libGU7IH0KdGFibGUgYnV0dG9uLCB0YWJsZSBpbnB1dCB7ICpvdmVyZmxvdzogYXV0bzsgfQpidXR0b24sIGlucHV0W3R5cGU9ImJ1dHRvbiJdLCBpbnB1dFt0eXBlPSJyZXNldCJdLCBpbnB1dFt0eXBlPSJzdWJtaXQiXSB7IGN1cnNvcjogcG9pbnRlcjsgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IH0KaW5wdXRbdHlwZT0iY2hlY2tib3giXSwgaW5wdXRbdHlwZT0icmFkaW8iXSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KaW5wdXRbdHlwZT0ic2VhcmNoIl0geyAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsgYm94LXNpemluZzogY29udGVudC1ib3g7IH0KaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24geyAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH0KYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLCBpbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7IGJvcmRlcjogMDsgcGFkZGluZzogMDsgfQp0ZXh0YXJlYSB7IG92ZXJmbG93OiBhdXRvOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyByZXNpemU6IHZlcnRpY2FsOyB9CmlucHV0OnZhbGlkLCB0ZXh0YXJlYTp2YWxpZCB7ICB9CmlucHV0OmludmFsaWQsIHRleHRhcmVhOmludmFsaWQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBkZGRkOyB9Cgp0YWJsZSB7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGJvcmRlci1zcGFjaW5nOiAwOyB9CnRkIHsgdmVydGljYWwtYWxpZ246IHRvcDsgfQoKCmJ1dHRvbiB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSA0MCUsIDAlIDcwJSwgZnJvbSgjRjlGOUY5KSwgdG8oI0UzRTNFMykpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoI0Y5RjlGOSA0MCUsICNFM0UzRTMgNzAlKTsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgcGFkZGluZzogNXB4IDhweDsKICBvdXRsaW5lOiBub25lOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIHVzZXItc2VsZWN0OiBub25lOwogIGN1cnNvcjogcG9pbnRlcjsKICB0ZXh0LXNoYWRvdzogMXB4IDFweCAjZmZmOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1zaXplOiAxMHB0Owp9CmJ1dHRvbltkaXNhYmxlZF0gewogIG9wYWNpdHk6IDAuNjU7CiAgY3Vyc29yOiBkZWZhdWx0Owp9CmJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6aG92ZXIsCmJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6Zm9jdXMgewogIGJvcmRlci1jb2xvcjogYmxhY2s7Cn0KYnV0dG9uOm5vdChbZGlzYWJsZWRdKTphY3RpdmUgewogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSA0MCUsIDAlIDcwJSwgZnJvbSgjRTNFM0UzKSwgdG8oI0Y5RjlGOSkpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoI0UzRTNFMyA0MCUsICNGOUY5RjkgNzAlKTsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7Cn0KCi8qIEJBQ0tHUk9VTkQgU0NBTEUgKi8KCi5wYXR0ZXJuLWJnIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlICFpbXBvcnRhbnQ7Cn0KCi5wYXR0ZXJuLWJnLWxpZ2h0ZXIsCmFydGljbGUuc2VjdGlvbmVkID4gc2VjdGlvbjpub3QoI2NsYXNzZXMpIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogIGJveC1zaGFkb3c6IDFweCAxcHggMTBweCAjY2NjOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddLApib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10sCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvYmFja2dyb3VuZC1ob21lLmpwZyk7Cn0KCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9zdGF0aWMvaW1hZ2VzL2JhY2tncm91bmQtZ2FtaW5nLmpwZyk7Cn0KCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvYmFja2dyb3VuZC1idXNpbmVzcy5qcGcpOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddIC5wYXR0ZXJuLWJnLWxpZ2h0ZXIsCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSAucGF0dGVybi1iZy1saWdodGVyLApib2R5W2RhdGEtaHJlZj0nYnVzaW5lc3MnXSAucGF0dGVybi1iZy1saWdodGVyLApib2R5W2RhdGEtaHJlZj0naG9tZSddIGFydGljbGUuc2VjdGlvbmVkID4gc2VjdGlvbjpub3QoI2NsYXNzZXMpLApib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10gYXJ0aWNsZS5zZWN0aW9uZWQgPiBzZWN0aW9uOm5vdCgjY2xhc3NlcyksCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIGFydGljbGUuc2VjdGlvbmVkID4gc2VjdGlvbjpub3QoI2NsYXNzZXMpIHsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgLW1vei1ib3gtc2hhZG93OiBub25lOwogIC1tcy1ib3gtc2hhZG93OiBub25lOwogIC1vLWJveC1zaGFkb3c6IG5vbmU7CiAgYm94LXNoYWRvdzogbm9uZTsKfQoKI3VwZGF0ZXNfbGlzdCBsaSB7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiBTSEFSRUQgICovCgpoMSwKaDIsCmgzLApoNCwKaDUKewogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgbGluZS1oZWlnaHQ6IDEuMTI1Owp9CgpoZ3JvdXAgaDEsCmhncm91cCBoMiwKaGdyb3VwIGgzCnsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgpoMSBzcGFuLApoMiBzcGFuCnsKICBjb2xvcjogIzVmYTRhMDsKICBmb250LXdlaWdodDogODAwOwp9CgpoMQp7CiAgZm9udC1zaXplOiAzNXB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbWFyZ2luOiAwIDAgLjI1ZW07Cn0KCmgyCnsKICBmb250LXNpemU6IDI2cHg7CiAgbWFyZ2luOiAxZW0gMCAuNWVtOwp9CgpoMwp7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbWFyZ2luOiAxZW0gMCAuNWVtOwp9CgpoMjpmaXJzdC1jaGlsZCwKaDM6Zmlyc3QtY2hpbGQsCi5wcm9maWxlIGgyCnsKICBtYXJnaW46IDAgMCAuNWVtOwp9CgpwCnsKICBmb250LXNpemU6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKYQp7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAuMnM7CiAgLW1zLXRyYW5zaXRpb246IGNvbG9yIC4yczsKICAtbW96LXRyYW5zaXRpb246IGNvbG9yIC4yczsKICAtby10cmFuc2l0aW9uOiBjb2xvciAuMnM7CiAgdHJhbnNpdGlvbjogY29sb3IgLjJzOwp9CgpzdHJvbmcKewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCmhlYWRlci5tYWluIG5hdiwKLnN1YmhlYWRlciBkaXYsCi5uYXYKewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbjogMCBhdXRvOwogIHdpZHRoOiAxMDAwcHg7Cn0KCi5wYWdlCnsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luOiA0LjVlbSBhdXRvOwogIHdpZHRoOiAxMDAwcHg7Cn0KCi5wYWdlLmN1cnJlbnQKewogIHRvcDogMDsKfQoKYXJ0aWNsZSBhcnRpY2xlLAphcnRpY2xlLnNlY3Rpb25lZCwKYXJ0aWNsZSBzZWN0aW9uLApoZWFkZXIgc2VjdGlvbgp7CiAgYmFja2dyb3VuZDogbm9uZTsKICBtYXJnaW4tdG9wOiAwOwogIHBhZGRpbmc6IDA7Cn0KCmFydGljbGUgYXJ0aWNsZSwKYXJ0aWNsZSBzZWN0aW9uCnsKICBtYXJnaW46IDA7Cn0KCmFydGljbGUsCnNlY3Rpb24sCmFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24sCnNlY3Rpb24ubGlua190YXJnZXQsCiN1cGRhdGVzLAoucGFnZSBoZWFkZXIKewogIG1hcmdpbjogMCBhdXRvIDIlIGF1dG87CiAgcGFkZGluZzogMS43NSUgMiU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKYXJ0aWNsZSBzZWN0aW9uLmxpbmtfdGFyZ2V0CnsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgaGVpZ2h0OiAxNThweDsKICBtYXJnaW4tbGVmdDogMmVtOwogIHBhZGRpbmc6IDA7Cn0KaHRtbFtsYW5nPXB0XSBhcnRpY2xlIHNlY3Rpb24ubGlua190YXJnZXQKewogIGhlaWdodDogMTg4cHg7Cn0KCmh0bWxbbGFuZz1kZV0gYXJ0aWNsZSBzZWN0aW9uLmxpbmtfdGFyZ2V0CnsKICBoZWlnaHQ6IDIwMHB4Owp9CgphcnRpY2xlLnByb2ZpbGUgc2VjdGlvbiwKc2VjdGlvbi5saW5rX3RhcmdldCBhCnsKICBwYWRkaW5nOiA1JSA2JTsKfQoKc2VjdGlvbi5saW5rX3RhcmdldCBhCnsKICBjb2xvcjogaW5oZXJpdDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogMDsKICB0b3A6IDA7CiAgaGVpZ2h0OiAxMjVweDsKfQoKc2VjdGlvbi5saW5rX3RhcmdldCBoMgp7CiAgZm9udC1zaXplOiAzNXB4OwogIG1hcmdpbi1ib3R0b206IC4yNWVtOwp9CgpzZWN0aW9uLmxpbmtfdGFyZ2V0IHAKewogIGZvbnQtc2l6ZTogMTNweDsKICBtYXJnaW46IDA7Cn0KCi5wYWdlIGhlYWRlcgp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwp9Cgpib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10gLnBhZ2UgaGVhZGVyLApib2R5W2RhdGEtaHJlZj0nYnVzaW5lc3MnXSAucGFnZSBoZWFkZXIKewogIHBhZGRpbmctYm90dG9tOiAxJTsKfQoKYm9keVtkYXRhLWhyZWY9J2dhbWluZyddIC5wYWdlIGhlYWRlci50d29fY29sdW1ucyBwOmZpcnN0LWNoaWxkLApib2R5W2RhdGEtaHJlZj0nYnVzaW5lc3MnXSAucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgcDpmaXJzdC1jaGlsZAp7CiAgbWFyZ2luLXRvcDogMDsKfQoKLnBhZ2UgaGVhZGVyIGhncm91cAp7CiAgZmxvYXQ6IGxlZnQ7CiAgcGFkZGluZy1yaWdodDogMiU7CiAgd2lkdGg6IDM0JTsKfQoKLnBhZ2UgaGVhZGVyIHNlY3Rpb24KewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiA2NCU7Cn0KCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSAucGFnZSBoZWFkZXIsCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIC5wYWdlIGhlYWRlcgp7CiAgcGFkZGluZy1ib3R0b206IDElOwp9CgoucGFnZSBoZWFkZXIgaGdyb3VwIGgxCnsKICBmb250LXdlaWdodDogMzAwOwogIG1hcmdpbjogMCAwIC41ZW07Cn0KCi5wYWdlIGhlYWRlciBoZ3JvdXAgaDEgc3BhbiwKLnBhZ2UgaGVhZGVyIGhncm91cCBoMgp7CiAgY29sb3I6ICM1ZmE0YTA7CiAgZm9udC1zaXplOiAzNHB4OwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgbWFyZ2luOiAwOwp9CgoucGFnZSBoZWFkZXIgaGdyb3VwIGgxICsgaDIKewogIG1hcmdpbi10b3A6IC0uNWVtOwp9CgoucGFnZSBoZWFkZXIgaDMKewogIGZvbnQtc2l6ZTogMjJweDsKICBmb250LXdlaWdodDogMzAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLAoucGFnZSBoZWFkZXIgYXNpZGUKewogIGZvbnQtc2l6ZTogMTVweDsKICBtYXJnaW46IC4yNWVtIDAgMDsKfQoKLnBhZ2UgaGVhZGVyIHNlY3Rpb24gcAp7CiAgbWFyZ2luOiAwIDAgMWVtOwp9CgoucGFnZSBoZWFkZXIgcDpsYXN0LWNoaWxkCnsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoudHdvX2NvbHVtbnMKewogIC1tb3otY29sdW1uLWNvdW50OiAyOwogIC1vLWNvbHVtbi1jb3VudDogMjsKICAtbXMtY29sdW1uLWNvdW50OiAyOwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAyOwogIGNvbHVtbi1jb3VudDogMjsKICAtbW96LWNvbHVtbi1nYXA6IDEuNWVtOwogIC1vLWNvbHVtbi1nYXA6IDEuNWVtOwogIC1tcy1jb2x1bW4tZ2FwOiAxLjVlbTsKICAtd2Via2l0LWNvbHVtbi1nYXA6IDEuNWVtOwogIGNvbHVtbi1nYXA6IDEuNWVtOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbiBwLmludHJvCnsKICBmb250LXNpemU6IDE1cHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbiAuY29sdW1uICsgLmNvbHVtbiArIHAKewogIGNsZWFyOiBsZWZ0OwogIHBhZGRpbmctdG9wOiAzZW07Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uIHVsCnsKICBsaW5lLWhlaWdodDogMS4zOwogIGxpc3Qtc3R5bGU6IHNxdWFyZTsKICBtYXJnaW46IC0uNWVtIDAgMCAyZW07Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uIGxpIGEKewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi50aHJlZV9jb2x1bW5zCnsKICAtbW96LWNvbHVtbi1jb3VudDogMzsKICAtbXMtY29sdW1uLWNvdW50OiAzOwogIC1vLWNvbHVtbi1jb3VudDogMzsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogMzsKICBjb2x1bW4tY291bnQ6IDM7Cn0KCi5maXZlX2NvbHVtbnMKewogIGxpc3Qtc3R5bGU6IHNxdWFyZTsKICAtbW96LWNvbHVtbi1jb3VudDogNTsKICAtbXMtY29sdW1uLWNvdW50OiA1OwogIC1vLWNvbHVtbi1jb3VudDogNTsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogNTsKICBjb2x1bW4tY291bnQ6IDU7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uIHVsLnRocmVlX2NvbHVtbnMgbGkKewogIG1hcmdpbjogMCAwIC43NWVtOwp9CgoucGFnZSBoZWFkZXIgaGdyb3VwLAoucGFnZSBoZWFkZXIgc2VjdGlvbiwKLnBhZ2UgaGVhZGVyIC5zaGFyZSwKLnBhZ2Ugc2VjdGlvbgp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoucGFnZSBoZWFkZXIgLnNoYXJlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAxNXB4OwogIGxlZnQ6IDE1cHg7CiAgei1pbmRleDogMjsKICBkaXNwbGF5OiBibG9jazsKfQoKLnBhZ2UgaGVhZGVyIC5zaGFyZSBsaSB7CiAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50Owp9CgoucGFnZSBoZWFkZXIgLnNoYXJlIGEgewogIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKICBwYWRkaW5nLXJpZ2h0OiA1cHggIWltcG9ydGFudDsKfQoKLnBhZ2UgaGVhZGVyIC5zaGFyZSBhIGltZyB7CiAgd2lkdGg6IDMycHg7CiAgaGVpZ2h0OiAzMnB4Owp9Cgojc3RhcnQgLnNoYXJlLnByZXZpZXcgewogIHJpZ2h0OiAxMzBweDsKICBsZWZ0OiBhdXRvOyAvKiBuZWVkZWQgZm9yIEZGICovCn0KLnBhZ2UgaGVhZGVyIC5zaGFyZS5wcmV2aWV3IHsKICBkaXNwbGF5OiBibG9jazsKICBib3R0b206IDIwcHg7Cn0KCi5wYWdlIGhlYWRlciAuc2hhcmUgdWwKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi5wYWdlIGhlYWRlciAuc2hhcmUgbGkKewogIGRpc3BsYXk6IGlubGluZTsKfQoKLnBhZ2UgaGVhZGVyLnR3b19jb2x1bW5zIC8qIFRoZXJlIGlzIHRvbyBtdWNoIHVucHJlZGljdGFibGUgYmVoYXZpb3Igd2l0aCBDU1MzIGNvbHVtbnMgZm9yIHRoaXMgdG8gcmVsaWFibGUuIFVzaW5nIGZsb2F0cyBmb3Igbm93LiAqLwp7CiAgLW1vei1jb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKICAtby1jb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKICAtbXMtY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKICBjb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKfQoKLnBhZ2UgaGVhZGVyLnR3b19jb2x1bW5zIGhncm91cAp7CiAgcGFkZGluZzogMCAzJSAwIDA7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDQ4JTsKfQoKaHRtbFtsYW5nPXB0XSAucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwCnsKICB3aWR0aDogNTMlOwp9CgoucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgc2VjdGlvbgp7CiAgZmxvYXQ6IGxlZnQ7CiAgcGFkZGluZzogMDsKICB3aWR0aDogNDklOwp9CgoucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgcAp7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBtYXJnaW46IDA7Cn0KCi5wYWdlIGhlYWRlci50d29fY29sdW1ucyBwICsgcAp7CiAgbWFyZ2luLXRvcDogMWVtOwp9CgoucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwIGltZwp7CiAgbWFyZ2luLWJvdHRvbTogMWVtOwp9CgoucGFnZSBzZWN0aW9uIGhlYWRlcgp7CiAgYmFja2dyb3VuZDogbm9uZTsKICBtYXJnaW46IDAgMCAyZW07CiAgcGFkZGluZzogMDsKfQoKZGl2Lm9uZV9xdWFydGVyLApkaXYub25lX2hhbGYgICAgeyBmbG9hdDogbGVmdDsgfQpkaXYub25lX3F1YXJ0ZXIgeyB3aWR0aDogMjUlOyB9CmRpdi5vbmVfaGFsZiAgICB7IHdpZHRoOiA1MCU7IH0KCi5mZWVkIHVsCnsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogMWVtIDAgIWltcG9ydGFudDsKICBwYWRkaW5nOiAwOwp9CgouZmVlZCBsaQp7CiAgY2xlYXI6IGxlZnQ7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBsaXN0LXN0eWxlOiBub25lOwogIGxpbmUtaGVpZ2h0OiAxLjg7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IC4xZW07Cn0KCi5mZWVkIGxpIGEKewogIGNvbG9yOiAjMzMzOwp9CgouZmVlZCBsaSBzcGFuCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi5mZWVkIGxpIGltZwp7CiAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwp9CgouZmVlZCBsaSAuZGF0ZSB7CiAgd2lkdGg6IDQwcHg7Cn0KCi5mZWVkIGxpIC5hdXRob3IKewogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMjBweDsKICBtYXJnaW46IDAgNXB4IDAgMDsKfQoKLmZlZWQgbGkgLmF1dGhvciBpbWcKewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgouZmVlZCBsaSAuZGV0YWlscwp7CiAgZGlzcGxheTogaW5saW5lOwp9CgouZmVlZCBsaSAudGl0bGUKewogIGRpc3BsYXk6IGlubGluZTsKICB3aWR0aDogNzAlOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLmZlZWQgbGkgc3Bhbi50eXBlCnsKICBmbG9hdDogcmlnaHQ7CiAgcGFkZGluZy1yaWdodDogM3B4Owp9CgouZmVlZCBwIGEKewogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBwYWRkaW5nLWxlZnQ6IDQ1cHg7Cn0KCi5jbGFzcwp7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMTZweDsKICB2ZXJ0aWNhbC1hbGlnbjogLTNweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5jbGFzcy5vZmZsaW5lLAouY2xhc3Muc3RvcmFnZSwKLmNsYXNzLmNvbm5lY3Rpdml0eSwKLmNsYXNzLmZpbGVfYWNjZXNzLAouY2xhc3Muc2VtYW50aWNzLAouY2xhc3MubXVsdGltZWRpYSwKLmNsYXNzLmdyYXBoaWNzLAouY2xhc3MucHJlc2VudGF0aW9uLAouY2xhc3MucGVyZm9ybWFuY2UsCi5jbGFzcy5udXRzX2FuZF9ib2x0cwp7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7Cn0KCi5jbGFzcy5vZmZsaW5lICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZDTTBORU1rVkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkNNME5FTWtaRk9FRkNNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01VSXpRMFF5UTBVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHTVVJelEwUXlSRVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZ2tseSs4QUFBRHhTVVJCVkhqYVRGR3hFWUpBRUh6UTNDOUJNa09oQXFoQXJVQWRDcEJRSXlVeUZBdGdwQU9sQXJVRDdNRFFVRU16ZDUxOTVXYVdPKzUyNysvdlBTTkwwOVRDN1lBeFlKVitBbnVnS011U3NmRkVIc0tkUmNpQlJnS0tGOEFkU0NqcXFuQm9KODNmR2pRN3FSazVFdzhKZGprQ0ljZ2t4Q0lFd0ZyQ3F3U0JqODlRM2EzSUhLRVNjUWJjVktmRmJpU3JibFlOUXBGSkhBbTB2cStMR295VHdOWEFoYVBwcEZ6NWlRU1hUaFJGRHdSTCtCYzg0eG94aTIrUUN3YjQzOElOZ0pWYksvZWZBWE9RcXRhV1dNdjBQdCthMXlvNFVhUFJlbnFIdmtiYi9CNnVKZUtGcDdxNFcyY0ZzdHVTK1Fnd0FLTnhXQ2lENllwcEFBQUFBRWxGVGtTdVFtQ0MpOyB9Ci5jbGFzcy5zdG9yYWdlICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZDTTBORU16SkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkNNME5FTXpORk9FRkNNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01VSXpRMFF6TUVVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHTVVJelEwUXpNVVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9Qc0JaTDk0QUFBRGFTVVJCVkhqYWJGSEJEWUpBRUR6TUZVQUhZZ2ZZd1ZtQlVvRVFDa0E3a0FyRUFvaGFBWFNnZGtBSmxFQUp6cGpCN0lOTkpwdmJtZDJkdTR1Y29pekxHQ2tIOWlxTndMTnQyN2N6RVVsOFFMb0RFMFhpMWdEckE1Q2hrWnp6RUtmSUhWQ2plTEhUd05YaWlOMXZBNG84T0lnemlSS2t4UFFsMmw3UXB0ZmFyYkhXeWNaa21uaVBJNUI2VFI5RTBONEQ1OEl0QkFhKy9Hd0RvbEZUSzlsYWluU2w5YmsyTlVobjRHTkFQdWlaYjVIeHphZnJGMnp3d2dIY3h2N0RDZWxLLytZZmFLc0NZZzBiL2cxcUNoSUVpVVkxTi9Pbk1iNENEQUR0c1ZHZVBQSFYvZ0FBQUFCSlJVNUVya0pnZ2c9PSk7IH0KLmNsYXNzLmNvbm5lY3Rpdml0eSAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBS0NBWUFBQUNBTEwvNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk1URXdNVGxGUWtKRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TVRFd01UbEZRa05GT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBHTVVJelEwUXpORVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEb3hNVEF4T1VWQ1FVVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1B1U2Rab2tBQUFESVNVUkJWSGphYkZEYkRjSXdFRXVBQWZqbGp4RktGd0EyYURjZzZnQ0lDZUNUdjA1UXRXekFCckJCd2daMGc0NkFqUndVcXA3a1BDNW5uM08ycXFxTE1XWnIvdVBXTkUxbkptS2U1M25BdmdKNllRQ3V5UGZlK3pBbVdDN29rckVRcW0vZEQ5aGF3QUVrblhuRyt6QVRzUWFPaVZCcWtTSnI0TUhMSW5xbUlwUmZLaTZBdTRUWTRSUUozdzc2b0pNTjJua2lWNHBVcEgrSWxpS3BGSEdIYmkxeVBIZVRoTVF2TFd4b0U2U2xCc0hjL2plbEdDaW9aY2xwdk9NSWRwd1JLVFBURVQ0Q0RBQWhvMExCVWxrNTFnQUFBQUJKUlU1RXJrSmdnZz09KTsgfQouY2xhc3MuZmlsZV9hY2Nlc3MgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFMQ0FZQUFBQ3BySGNtQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRa1pGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlF6QkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3hNVEF4T1VWQ1JFVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZDUlVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGoxMVpMa0FBQUNTU1VSQlZIamFZbUFBZ3VUa1pBTWdkbUJBQStqaVRFaHk2NEVTODVFVUpnQ3A4MENzQUJOalJOSnBBTVQ5UUx3QWlBOEM4WHdvZXlGVS9nSkk4WDhHNG9BakM0aWNPM2N1SXo1VlFBUDNvN3VaSUtCTU1TZ1VnTGlmb0dKb2NJRkNJUUU1R0pHRERoUWFCNkI4VURBbWdvSUppRUdlZWdERUg2REJHZ2dLRFVja3pZWEFrTGtBdGNVUU9VSkFCZ0FFR0FEclB5dUkrVnNObXdBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Ci5jbGFzcy5zZW1hbnRpY3MgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQU1DQVlBQUFCV2RWem5BQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZNVEV3TVRsRlF6TkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk1URXdNVGxGUXpSRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRveE1UQXhPVVZETVVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG94TVRBeE9VVkRNa1U0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QaUcrelZRQUFBQ3RTVVJCVkhqYWpKQ0xEY0l3REVSeHhRQWRvV3pRRWJwS2xBR0FDU2lEUkMyVEFKdkFCaDJCTzhrQlkxeUpTS2VtOXZNbjEyeUNrM051b1M3S2lRZnhPVUI3aVBjWk9wZFNIbDhGRGx3SVFZUk8wR0FMQlhDUG4yc0ZFWnpkMU1FVXBxM0dqeFUwUUdjYTNEVCtlWVByUk9ocFY2d05SZDJZL0s0cmIwdU5qaWF3QTVpWUFEaENiTklpTmpJSFhhQmVWaXhkdE1uUFZJa3NEUXg0RjRvR3A4alN3SkI3WGVXdlEvWWx3QUNpNUZ3TnBHN1pUQUFBQUFCSlJVNUVya0pnZ2c9PSk7IH0KLmNsYXNzLm11bHRpbWVkaWEgICAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXNBQUFBSkNBWUFBQURrWk5ZdEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk5VTXpNa1kyUWpCRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TlVNek1rWTJRakZGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8xUXpNeVJqWkJSVVU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzFRek15UmpaQlJrVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BwbVB0d3dBQUFCd1NVUkJWSGphWWt4T1RqWmdZR0FJQU9JRlFDd0FaVFBNblR1M0FTZ0hZb1BrTHdENUc1aUFqUDFBTEEvRUg0QzRIb2p0Z2ZnQjFKQjhJTllINGdNZ0F4aUJnditCdENOUUoxZ0FHd0NxQVJsWXlNUkFISEFBT1pGWXhXQkFPOFVzVUhvLzBCTkVLWFlrMHVBTEFBRUdBR0pQR3RyUHpPR21BQUFBQUVsRlRrU3VRbUNDKTsgfQouY2xhc3MuZ3JhcGhpY3MgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFLQ0FZQUFBQmk4S1NEQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRalJGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOVU16TWtZMlFqVkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQ01rVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpDTTBVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHVjZm1iZ0FBQUN1U1VSQlZIamFZbVJBQThuSnlRbEFTaCtJTHdMeGhybHo1MzZBeVRFQ0pRV0F0QUVRWHdCSkFQa2dkandRQndDeEFoQWZBT0tOUUx5QUNVaThCK0wxSUJxb2NEK1FkZ0RpaVVDTmlrRGFFR1FJRVBlRERHU0MyaENJSk9FUHhQVkFqUXBBRFNEYkNtSE9ZSUV4UUJKUXhUZ0JFd01KZ0tCaWtIT1FuUUVLbXZWQXdRMVFYNE44THdBTmpYaG9TRDBBcVdPRTZnNkFlaXdBcXBBQjZ2NkZJTTFRLzJDMTFnSFphbVFBRUdBQXZZQTJ2UXRLQUVZQUFBQUFTVVZPUks1Q1lJST0pOyB9Ci5jbGFzcy5wcmVzZW50YXRpb24gICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFvQUFBQUpDQVlBQUFBTHByMFRBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOVU16TWtZMlFqaEZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5qWkVNVGhEUmpaRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMVF6TXlSalpDTmtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8xUXpNeVJqWkNOMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QczlXY1ZVQUFBQ0NTVVJCVkhqYVltUUFndVRrWkFNZzFjK0FHeHhrZ1RJZUFIRWpEa1ZnQTVpZ0hBVThwZ2tBOFFFV0pGME9lQlJmWU1BSGdHNTNBT0w3WUt1QkRBVWdic0NoRm1UTEFSQ0RCY3JKQnlybUI5SUw1ODZkZXdHa0djZ09BT0o0SUo0SVVzZ0lGQVE1TmdFcWFBQU5BWkRZQmlEZUNOUzRBWnViREVEdXd1WUdnQUFEQUJMMklCZ0NzUERCQUFBQUFFbEZUa1N1UW1DQyk7IH0KLmNsYXNzLnBlcmZvcm1hbmNlICAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBWUFBQUJXZFZ6bkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk5qWkVNVGhEUmpsRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TmpaRU1UaERSa0ZGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8yTmtReE9FTkdOMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzJOa1F4T0VOR09FVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BvVVpkNlVBQUFEcVNVUkJWSGphZEZIUkRZSXdGSVJPNEFZNkFtNVFKd0FtRU1NQXhBbGdBOElBUkpoQTJLQk1vQ093Z2JxQmQrU2E5RU9iWEY3aDNyMTM3eldPZnB5eUxGOElPK0RZOS8wejVHSWxrTHdCSy9CUmRFQUxMRUFLWENrMkVoYUtJN0FISnBDcmhNUU0xRXp3Z29FV1dBRzRxR3VDTzZ0T3NqZHVBaEpxL1ZaaUlYczE3bTFnLzR6dnpDaDVScVZjUktwcTdHU1JkQURYNlB0dU5GUkZ0UVN6Uk94RWkydmd3aG1wY3orVXR0UEpZcWQvRmJzaTkrU0h0a3Jjam9ZZi9GenFhc04zeURRb1JZbjg4c0VlV2l1MzVMaTFPSGpkSkNEOUl5N3NCTTRpdXVqZjRXcUI1aGYzRldBQXJjNW9ORXRQYnpNQUFBQUFTVVZPUks1Q1lJST0pOyB9Ci5jbGFzcy5udXRzX2FuZF9ib2x0cyB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOalpFTVRoRFJrUkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5qWkVNVGhEUmtWRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMk5rUXhPRU5HUWtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8yTmtReE9FTkdRMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QbkdhWlowQUFBRGVTVVJCVkhqYWZGR0JEWUl3RUtTRUFkaEEzQUFuc0d5Z0cyZzZnSFlDWlFKMUFBSk00QWl3Z1d5Z0c4Z0kzaVZuMHBoR2txUGYvdjFkLzJzU2ZjNjVBc3N1aVg5ajB6UWpnelE0dkFEckNIa0IzQ0dZYzVOSjNXTFpBRXNvdlg0cjVINENmQmFvMXlRcmVRQ28yT3NxTlRBZ2R6UDRIVVZZcWZqSk93TjBZcTVpRVhndDRpS1ZGZFZuckNVd0k5NENIdkVWc0JMaTN2SktrNXJ0U0tZSzFFbzVrTnlyZ1BGTWh6M0h5Y2FoT2tuMUFieEY3TUkrdjFNNEEwTTRGYm1FZWZhV0dCM2thdGJEcFl1TWxJN3NhelJCZ3EvYy9ubnBpc0ZIZ0FFQWxrVlg4MU9qQ3U0QUFBQUFTVVZPUks1Q1lJST0pOyB9CgouY2xhc3NfbmFtZSwKLmJyb3dzZXJfbmFtZQp7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgY29sb3I6ICMzMzM7CiAgZm9udC1zaXplOiAxMXB4OwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgbGluZS1oZWlnaHQ6IDE7CiAgcGFkZGluZzogM3B4IDVweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAtMTVweDsKICBsZWZ0OiAwOwogIG9wYWNpdHk6IDA7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGFsbCAuMXMgZWFzZS1pbi1vdXQ7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouY2xhc3M6aG92ZXIgLmNsYXNzX25hbWUsCi5icm93c2VyOmhvdmVyIC5icm93c2VyX25hbWUsCi5jbGFzczpmb2N1cyAuY2xhc3NfbmFtZSwKLmJyb3dzZXI6Zm9jdXMgLmJyb3dzZXJfbmFtZQp7CiAgb3BhY2l0eTogMTsKfQoKLmJyb3dzZXJzCnsKICBmbG9hdDogbGVmdDsKICBtYXJnaW46IDAgLjc1ZW0gMCAuMjVlbTsKfQoKLmJyb3dzZXIKewogIGZsb2F0OiBsZWZ0OwogIGhlaWdodDogMTdweDsKICB3aWR0aDogMTdweDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoJy9zdGF0aWMvaW1hZ2VzL2Jyb3dzZXJfbG9nb3MucG5nJykgbm8tcmVwZWF0IGxlZnQgdG9wOwogIG9wYWNpdHk6IDAuMjU7CiAgbWFyZ2luOiAtMXB4IC4yNWVtIDAgMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5icm93c2VyX25hbWUKewogIGxlZnQ6IC0zcHg7Cn0KCi5icm93c2VyLmllIC5icm93c2VyX25hbWUKewogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5icm93c2VyLmNocm9tZSAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOyB9Ci5icm93c2VyLmZmICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xN3B4IHRvcDsgfQouYnJvd3Nlci5zYWZhcmkgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzVweCB0b3A7IH0KLmJyb3dzZXIuaWUgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTUycHggdG9wOyB9Ci5icm93c2VyLm9wZXJhICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC02OXB4IHRvcDsgfQouYnJvd3Nlci5zdXBwb3J0ZWQgeyBvcGFjaXR5OiAxOyB9CgouYnJvd3NlciAuc3VwcG9ydAp7CiAgZGlzcGxheTogbm9uZTsKfQoKCi8qIEVYVEVSTkFMIExJTktTICAqLwoKLnBhZ2UgaGVhZGVyIGFbaHJlZl49J2h0dHAnXTpub3QoW2hyZWYqPSdodG1sNXJvY2tzLiddKSwKLnR1dG9yaWFscyBhW2hyZWZePSdodHRwJ106bm90KFtocmVmKj0naHRtbDVyb2Nrcy4nXSksCi5mZWVkLXNlY3Rpb24gYVtocmVmXj0naHR0cCddOm5vdChbaHJlZio9J2h0bWw1cm9ja3MnXSksCi5pbmZvLXNlY3Rpb24gYVtocmVmXj0naHR0cCddOm5vdChbaHJlZio9J2h0bWw1cm9ja3MuJ10pLAphcnRpY2xlIHNlY3Rpb24gYVtocmVmXj0naHR0cCddOm5vdChbaHJlZio9J2h0bWw1cm9ja3MnXSksCmFbcmVsPSdleHRlcm5hbCddCnsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBa0FBQUFKQ0FZQUFBRGdrUVlRQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UmpaQk5FTXlRekZGUWpNeU1URkZNRUZGTURRNVJUUXdNelkyUlRJMFFVTWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSalpCTkVNeVF6SkZRak15TVRGRk1FRkZNRFE1UlRRd016WTJSVEkwUVVNaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEdOa0UwUXpKQ1JrVkNNekl4TVVVd1FVVXdORGxGTkRBek5qWkZNalJCUXlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwR05rRTBRekpETUVWQ016SXhNVVV3UVVVd05EbEZOREF6TmpaRk1qUkJReUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGo5dzh1UUFBQUJPU1VSQlZIamFqSkRiQ1FBd0NBTzFkRmczMG0xVDhpSDBLUTBJUVNRNVZBQVNFWkJDVFQ3VTA1aVozZzdZOHBXa1pLckVwTDVEMzJvYmx5K2VCWnhwUE16VTR5WHVEbkp4WmovUEVHQUFQazQ2RUUvTVFtZ0FBQUFBU1VWT1JLNUNZSUk9KSBuby1yZXBlYXQgY2VudGVyIHJpZ2h0OwogIHBhZGRpbmctcmlnaHQ6IDE2cHg7Cn0KCmEubm9leHRlcm5hbCB7CiAgcGFkZGluZy1yaWdodDogaW5pdGlhbCAhaW1wb3J0YW50OwogIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKfQoKZmlndXJlID4gYSwKLmZpZ3VyZXMgbGkgPiBhIHsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7Cn0KCgovKiBIRUFERVIgKi8KCmJvZHksCmlucHV0CnsKICBmb250LWZhbWlseTogJ09wZW4gU2FucycsIHNhbnMtc2VyaWY7CiAgZm9udC13ZWlnaHQ6IDQwMDsKfQoKaGVhZGVyLm1haW4KewogIGJhY2tncm91bmQ6ICNlZDQ3MzI7CiAgd2lkdGg6IDEwMCU7CiAgcG9zaXRpb246IGZpeGVkOwogIGxlZnQ6IDA7CiAgdG9wOiAwOwogIHotaW5kZXg6IDEwOwogIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCmhlYWRlci5tYWluICNob21lX2hvcm5zCnsKICBkaXNwbGF5OiBub25lOwp9CgpoZWFkZXIubWFpbiBoMQp7CiAgZGlzcGxheTogbm9uZTsKICBjb2xvcjogI2ZmZjsKICBmb250LXNpemU6IDFlbTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMCAwIC4yZW0gLjVlbTsKfQoKaGVhZGVyLm1haW4gaDEgYQp7CiAgY29sb3I6ICNmZmY7CiAgZm9udC13ZWlnaHQ6IDgwMDsKfQoKaGVhZGVyLm1haW4gbmF2CnsKfQoKaGVhZGVyLm1haW4gbmF2IHVsCnsKICBtYXJnaW46IC4xZW07CiAgcGFkZGluZzogMC40ZW0gMC42ZW07Cn0KCmhlYWRlci5tYWluIG5hdiB1bCBsaQp7CiAgZm9udC1zaXplOiAxM3B4OwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKaGVhZGVyLm1haW4gbmF2IHVsIGxpIGEKewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbjogLjFlbTsKICBwYWRkaW5nOiAwLjRlbSAwLjRlbTsKICBtYXgtd2lkdGg6IDEyNXB4OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCmJvZHlbZGF0YS1ocmVmKj0nZmVhdHVyZXMnXSBoZWFkZXIubWFpbiBuYXYgbGkjZmVhdHVyZXNfc2hvdywKYm9keVtkYXRhLWhyZWYqPSdzZWFyY2gnXSBoZWFkZXIubWFpbiBuYXYgbGkjc2VhcmNoc19zaG93LApib2R5W2RhdGEtaHJlZj0nd2h5J10gaGVhZGVyLm1haW4gbmF2IGEud2h5LApib2R5W2RhdGEtaHJlZj0ndHV0b3JpYWxzJ10gaGVhZGVyLm1haW4gbmF2IGEudHV0b3JpYWxzLApib2R5W2RhdGEtaHJlZj0ndXBkYXRlcyddIGhlYWRlci5tYWluIG5hdiBhLnVwZGF0ZXMsCmJvZHlbZGF0YS1ocmVmPSdzbGlkZXMnXSBoZWFkZXIubWFpbiBuYXYgYS5zbGlkZXMsCmJvZHlbZGF0YS1ocmVmPSdyZXNvdXJjZXMnXSBoZWFkZXIubWFpbiBuYXYgYS5yZXNvdXJjZXMsCmJvZHlbZGF0YS1ocmVmPSdwcm9maWxlcyddIGhlYWRlci5tYWluIG5hdiBhLnByb2ZpbGVzLApoZWFkZXIubWFpbiBuYXYgLmN1cnJlbnQKewogIGJhY2tncm91bmQ6ICNmNDkwN2Y7Cn0KCmhlYWRlci5tYWluIG5hdiAuaG9tZQp7CiAgZGlzcGxheTogbm9uZTsKfQoKI3RpdGxlLApoZWFkZXIubWFpbiBuYXYgYQp7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKaGVhZGVyLm1haW4gbmF2IGEsCmhlYWRlci5tYWluIG5hdiBhOmhvdmVyLApoZWFkZXIubWFpbiBuYXYgYTpmb2N1cwp7CiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKfQoKaGVhZGVyLm1haW4gaDEKewogIGRpc3BsYXk6IG5vbmU7Cn0KCiNzZWFyY2hfaGlkZSwKI2ZlYXR1cmVzX2hpZGUKewogIGN1cnNvcjogcG9pbnRlciAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDE5cHggMCAyNnB4Owp9Cgojc2VhcmNoX3Nob3cKewogIGZsb2F0OiByaWdodDsKfQoKI3NlYXJjaF9zaG93IGltZwp7CiAgcGFkZGluZy1sZWZ0OiA0cHg7CiAgdmVydGljYWwtYWxpZ246IC0ycHg7Cn0KCi5nc2MtY29tcGxldGlvbi1jb250YWluZXIKewogIGJvcmRlcjogMXB4IHNvbGlkICM0ZjRmNGY7CiAgbWFyZ2luLXRvcDogMTRweCFpbXBvcnRhbnQ7IC8qIGRvbnQgbGV0IHdpZGdldCBvdmVycmlkZSB0aGlzICovCn0KCi5nc2MtY29tcGxldGlvbi1jb250YWluZXIgdGQKewogIGJhY2tncm91bmQ6ICM2NWE4YTU7CiAgY29sb3I6ICNmZmY7CiAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnOwogIHBhZGRpbmc6IC40ZW0gLjZlbTsKfQoKLmdzYy1jb21wbGV0aW9uLWNvbnRhaW5lciB0ZDpob3ZlciwKLmdzYy1jb21wbGV0aW9uLWNvbnRhaW5lciB0ZDpmb2N1cwp7CiAgYmFja2dyb3VuZDogIzRiN2M3YTsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKfQoKLnN1YmhlYWRlciAuZmVhdHVyZXMKewogIHBhZGRpbmctdG9wOiA4cHg7CiAgcGFkZGluZy1ib3R0b206IDhweDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyAjZmVhdHVyZXNfaGlkZQp7CiAgcGFkZGluZy10b3A6IDIxcHg7Cn0KCi5zdWJoZWFkZXIgLmZlYXR1cmVzICNmZWF0dXJlc19oaWRlLAouc3ViaGVhZGVyIC5mZWF0dXJlcyBoMgp7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5zdWJoZWFkZXIgLmZlYXR1cmVzIGgyCnsKICBjb2xvcjogI2ZmZjsKICBmb250LXNpemU6IDQ4cHg7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogNXB4IDAgMCAxNXB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsCnsKICBsaXN0LXN0eWxlOiBub25lOwogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAxMHB4IDAgMCAyMHB4OwogIHdpZHRoOiA3MTBweDsKfQpodG1sW2xhbmc9ZGVdIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsLApodG1sW2xhbmc9cnVdIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIHsKICB3aWR0aDogNjAwcHg7Cn0KaHRtbFtsYW5nPWVzXSAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCB7CiAgd2lkdGg6IDU0M3B4Owp9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaQp7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDJweCAwOwp9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhCnsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvc3ViaGVhZGVyX2NsYXNzZXMucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGNvbG9yOiAjZmZmOwogIGZsb2F0OiBsZWZ0OwogIHBhZGRpbmc6IDNweCAwIDRweCAzMHB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgd2lkdGg6IDExMnB4Owp9CgpodG1sW2xhbmc9ZXNdIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIHsKICB3aWR0aDogMTgwcHg7Cn0KaHRtbFtsYW5nPXJ1XSAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSB7CiAgd2lkdGg6IDIwMHB4Owp9Cmh0bWxbbGFuZz1lc10gLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYSwKaHRtbFtsYW5nPXJ1XSAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhIHsKICB3aWR0aDogYXV0bzsKfQoKLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5vZmZsaW5lICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgICAgMnB4OyB9Ci5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIGEuc3RvcmFnZSAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwICAtNDhweDsgfQouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhLmNvbm5lY3Rpdml0eSAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAgLTk4cHg7IH0KLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5maWxlX2FjY2VzcyAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0OXB4OyB9Ci5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIGEuc2VtYW50aWNzICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOThweDsgfQouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhLm11bHRpbWVkaWEgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjQ4cHg7IH0KLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5ncmFwaGljcyAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI5OHB4OyB9Ci5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIGEucHJlc2VudGF0aW9uICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zNDhweDsgfQouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhLnBlcmZvcm1hbmNlICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzk4cHg7IH0KLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5udXRzX2FuZF9ib2x0cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ0OHB4OyB9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhIGgzCnsKICBmb250LXNpemU6IDE0cHg7CiAgbWFyZ2luOiAwOwp9Cgoud2F0ZXJtYXJrCnsKICBwb3NpdGlvbjogZml4ZWQ7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtNjA1cHg7CiAgdG9wOiAzMHB4OwogIHotaW5kZXg6IDI7CiAgcGFkZGluZzogMjBweDsKICBvcGFjaXR5OiAwLjY1OwogIHdpZHRoOiA2OHB4OwogIGhlaWdodDogMTE2cHg7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzBBQUFCZUNBWUFBQUMzckozMUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk4wSXlNRFkxUXpkRk16STVNVEZGTURrMk9ERTVRMEV3TlRaQ09ERXdSVElpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TjBJeU1EWTFRemhGTXpJNU1URkZNRGsyT0RFNVEwRXdOVFpDT0RFd1JUSWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8zUWpJd05qVkROVVV6TWpreE1VVXdPVFk0TVRsRFFUQTFOa0k0TVRCRk1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzNRakl3TmpWRE5rVXpNamt4TVVVd09UWTRNVGxEUVRBMU5rSTRNVEJGTWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1Bxa29zNEVBQUFVZFNVUkJWSGphN0pzOWR0cEFFSUJYUEZvZEFBNmdDOGgxTFBmZ25xU0hMZ1c0QjNxVEloM3FZM3FiQThpcG93TkVCMEFINEFET2JqenJUT2F0Vml0cHRaSVQ1cjE5TWpKSTM0N21keGM4cHBFUFg3K00rV0hPeHpVZlBwdys4L0hNeCs3NzUrV1pkU0NlQmpqZ2h6MkNwU0tBRnh3ODZ3VTBhUGdiQWs3NVNPQjFDRU9DMzdyVytMRGcvQndCQ3pNNGtFbHQrR0VDNzVueEVidUVIaFNjbDVyTUtMQVFmazVBNStTOW5VT1A0SmhvUHB0MkJUMXM4TmxUVzFEYy9MRGZpQ2VhWUw4WnNoNEpoNDM0WVlXZXRKUTEvMS9Nd1dPZGVYUUJQT1dIZXdYd1czQ0FBTkFQYUFpeFMzUkthUFNHYS9hS0g3Y1FXb1ZNeE9UNm91bHJFbUpqYWNQOCtNUVBueEQ0ckMvUWtYUzZnaEFyblA0SUw0TUI2NWZvSXRLNUxFNzNXaTdRRitpVzBqak5aQk1VQldTakVJUG40NFlpUkFra1JWSEJMVFJrTWl3K1RFSWtneTJjV3lvYWlyQk93V1d6OXBEYVBSR1l0YUk2RkdOTWtvcHo2QnhhcnhPcEpTandGaktjZkk4UExWM1FxaU9LRy9FaHVwVXBPdjFUa2NVRUhNNXVSd3dNN3hGUDU2N1Y2QUYxN3FPaWZCUU8rQWpheFpJVS9FMVRkTllLTkFEaDdqd0gyOHhKM1RzdFM4TVYvMWZQcGhYMitWZXpDeUZ2RFJOYTh0ZEpteDM2b0Fid2xsWmkvSFdDT25JZnhldE9vQ01GOEZQQmU0K0t4cmdUNk1BUW1MbGNzREYxUkMwd3N1dGFqdFVZV3VIOUpzQUJNYU5uWjlBRlRtY0NqRU5oakROanE5Q1dnSTl5YmFKMWFJdkFHeWVPcUxESFhnTkxUYzhiQWpPWHdCSmFocXFrRG5EWFBXSldFZmpjQitneTJXRWJ4clV5RlBNcUdSZGsxNkxNZXphRmxxWGxWSE56dlBvam5RNC9tWldxV1NEK01sZGRuNS9EV3lXNnBPUmo2Q2RVNU95THdEbm9ncjJ1Wkc1UVpTY25MQnJZZXpBaG1kTDNwSEFTMTMyUTZWNTA1M3lzME1UT1RML3pJSjlHNXNFRkh2Qko2UGRLSDVXaFkyWUFWTloxaTN1bW1udjlrRTlhMnZRQ1BlNUFwM0dpL1F3K20ycksxUVU4cFlPbUtmNVlBb3lMc2RUVGRNYkdHa2RhRDBIcnYxc3hXb1BBUFNKa05vbko1aW5hQWhSeTZ5a3VXaHU4RFlHVnFVYzB5YnVCb3BDdlpTb3RDbzVBQjJXYzdoTTRMRmxJczBpbDNRODByVk9uNEhDdkRVbHUrb3pZSlRqeUxlbXdCK3l3ZzVLUTVod2NycjNHd1lCejdDclZIaHJ3b0VVTlJ6aDYxU3FZRUhoS3dHY1dnU01JYmFYaDFxdHhjUnpvWlViYlFTMVNOMExNRldtK01LMTdOVyswVjl3a2g0TG5VTmFOZ3htSWlVODFKV3NoZE5PTm9qTlpDcHVCVFpiSkJNclpnTlFwUnZzdlRhR0YzZDJ3MThYSHZFSWhuNk9qeUhLM1VQSWFyWmMwM3I0QVJ4SFFzYWdUVEJacXdQNnZYTFJiSmhOb2RXV3BGZWcrTnJhOUVhT1FCN0dVa1VZMkFFZmNXZVNab2h5d0k4MXpMczNQMUJIM21tWnozNUpDYVljZnc3alk5QVg2bjRPMnNhR2ZXdVFaTTRQdFBCdHBmR0d4cHA2VDd2dGRtTWZZaVUwckVrOFRHYm15YVR5QkthdTR4VnhuTjh3R3RFODBOYS80K1poa1dDY2h6MlpYN2pzM0Q5SzFISmgra2J6VE9EMG03ZGZiQkhScnprMGNldGlpeDRjUWQ3VzlZdGsyb0F2endOOW5Ndm1pWUZ6Vm5xMDdZc01lTVhDcGFhcWhzclFld2ZxSTZYSkQ2K2JCR0ZyaWdoOGk2Qnd1cTVyQ3JkVWVsbEw1cUV0TjQ4bmNRK21hc1QrL3NJc0tITmU1ZWZpa3ZnNlIvVWFhdXVOVXh4RnRsYWI0aGlJTEhrdTBtQ3FXSHZ6T3pBUDJSalpnSGdHSzEzSkR0SEZxdHdVOTFrd2dZOFZiekxVYzJaWjVoSFVqQ096SWhsMW9Xbjd0UXRxMHNObG5WWWFFWFlBUVJaSlJWK1pCTTU0WUt3NG92Mk9kZ0xQVyt1R0MwemdOV3B5d3Z6ZVcvcy9GbWd2MEJWb2ozc3ZMeTd1RC9pWEFBTDBsUGtZdGZyaEZBQUFBQUVsRlRrU3VRbUNDKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXMgZWFzZS1pbi1vdXQsIHRvcCAxNTBtcyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXMgZWFzZS1pbi1vdXQsIHRvcCAxNTBtcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAzMDBtcyBlYXNlLWluLW91dCwgdG9wIDE1MG1zIGVhc2UtaW4tb3V0OwogIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXMgZWFzZS1pbi1vdXQsIHRvcCAxNTBtcyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDMwMG1zIGVhc2UtaW4tb3V0LCB0b3AgMTUwbXMgZWFzZS1pbi1vdXQ7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLndhdGVybWFyawp7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRVFBQUFCMENBWUFBQUE4YVpRZkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlFqUkRRVE01TkVKR1JqZzFNVEZGTURrNVJFUTVRa001TnpJeU9VUTRSREVpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UWpSRFFUTTVORU5HUmpnMU1URkZNRGs1UkVRNVFrTTVOekl5T1VRNFJERWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBDTkVOQk16azBPVVpHT0RVeE1VVXdPVGxFUkRsQ1F6azNNakk1UkRoRU1TSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcENORU5CTXprMFFVWkdPRFV4TVVVd09UbEVSRGxDUXprM01qSTVSRGhFTVNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1Bsem02OFVBQUJZd1NVUkJWSGphN0YwSmNGUlZ1cjYzdTlPaDB5UUJBb1JBUWpJd01Dd3lFSXNTQ1VzSVFsaUVjUVFWbUFJSDMyTVJMZUhCVXdFVlpKRUJVWHpxVUVvSitDZ0dGU01XeHZFaG9CSjJFQWhMQUJHSVlRMmJRaGF5ZFphKzd6K1hjNXEvL3o3M0pwMTBJRkxjcWxQZG5UNzM5ajNmK1pmdi84OS9iaFRsL25IL01EdlVXamlmL2syVDlOSHFLaUMyR29LZ29xWklYalhKcTFhWHdWR3IyVitBWUVHdkZnS09Ra0J3ODZhaFY2MnVnV0x6RXd5VkFNQ2FsVGNMQVVZaFFMQld3WnViQUZSblFMRlZFd3dCZ28wMERJeENnQ2duclFMMXFUUHFZL05UVFN3RUNEdTBJUFFheEwvSEVzSUdYc1piS1grbHF1WCtQVW9JQmtPQUVNeGJQZjdaanFSRVFkSlJ5bHNKTkpjRUVFMWlpS3RyQzdXN0FZaWRnOEJhQ0RRSEFpV0lBRktHd01CZ1VZT3JWVElZMVVCcUZSTzNydmtMbEsyS3RrUFlCUnVTREFhQUUxcDlEa29JLzd0UUd3V3BDNU9LSWdrZzFMaktRRkVsZHN6STNTdmtPckpybWdKajhjT2dZblVKNWdBSVFNS1NrNU5iSHpod1lISkpTY2t5VGRNK1pvMjlaMzlyMjdadEZPc0RMWlNmNCtEWHdCS2xTbFNKVGdoVldTR3B3ZWdWWDlkR3ZLQnFRQTA4aDlVUFZRbENOeUFrZ2cwd2RPellzUjArK2VTVDEySmlZdjVnczltQ1BPSUg3NXMzYng0OVljS0VwSXNYTDU0NmZQaHdMdkU4TWxlc21YZzJHekxlZGpSNGJOU3h4MU9yb0Y1K0VUTVYzVVE5S2hYUUdnd1lNS0JWYW1ycS9PRGdZRGJyeXFsVHA4NmxwYVZsaG9lSDEzdnd3UWVqUVRwaTJkOWRMbGR4NTg2ZC8vdmt5Wk9YNFdNZXRIeG9ONkVWY25WeWNWdFRJWkZNQ3hxbzJjQUZxTUsxQysrR1hiM2J6R1pWQm9pWW1XQXU1Z0lNSmhuaERKRDA5UFRKTVBEdXJQTkhIMzMwL2NTSkV3OWpvN3A5Ky9ia1hyMTYvWmw5K1BiYmI3OFpQSGp3R25pYnl3RmhyWUNEVW93QTBZamR3bTdlVHRRQ3E0T2J1SGtYOG5BVUdLbk5zdmxoUTZSaTI3cDE2eit4VHBjdVhib0NZQnprMzN0c1UrL2V2VGZldUhHalpjT0dEUnUwYjkvK1R3WWlicFZRZnhYcFAxWVJCN0lYTXE4bTNMeUxTSkNSWjZ1V1VaV3hVMzB3b0JxTldLY2RPM2FjTm9wK2p4MDdkcDY5aVl1TGEwUEVuYkpiMWNCMlVaWDFTQ2h2RFZGcndMOExSUjVRVUFJajhLc2xJU29CeFNveHloaDl6MmVRbmp4aXlHMlNHSWg2QUN3ZHdRaVErbWlnanBkZWVxbFRVbEpTTzNZQ0dPN2Yzbjc3N2YxZ3gyNGdra2hkTVhiMVlueWFQenhFa1FSMEZoS3pLQ1F1b2NFZGxVcUxRVUJJUFF0MjgxNDI3TTAzMyt3RktqcFNTS2c0eG84ZlA1YmJxclZvc05pYmxSUFBwbFdYaDVnUkk4VmlzUmhaOXdwVlZUV0pDaHBGeWxiQ2lJVjBPSVNFTEYrK1BQbmxsMTkram9JaGprR0RCZzBCWS84OG9nZjFFR21raHRodkcySUdqR2VnZk5BVnhKckxBSkhaSXRwa1FPajJBd2hneXpGanhvd1VGMXU3ZHUwdTREL3Z3Mis4dFdqUm9nMUFCbG1Jb0REUHQyTEZpbjRTSTJ3TEJDQ3lPTUpMMUJBZ1BtSXBBVVFXSE9MbUJRSnFJVUFDdXduT3MyelpzaTJqUm8zNkVXd0hrMDdiekprelR5UW1KcTRTb0F3ZE9qVFp4S3RKV2FzL0VtTEtXL2lnM2JMNEJBNThua3dDWkFEVVI1NUNOR2UzYnQyNnNJdUFLOCtiTkduU1lhcHkrL2J0dTdsbHk1WU0xcWRwMDZiUlJQS012RnFOY3FyU2ZDZ0hSQmFZcVFRUVFmOHBWYmZ3Nzl6OHBoMUVPblJBM0c2M1BvbS8vdnBydm9SajZMK1puNTlmU3Nab000aHJsRUFEY2hzWjcwRjdCV1hrdTJBQ25BVzVkQmYvem9haTZSRDBHaUlBNGRlazNrdzJLVlpKTTh3QjF4UVExY1JOZTI0QUJvSDVpc01nQldubkRGUGozK0ZjaTJqMUFBZ0xtUUNxb200RHI2WWFzT0dBU1lncWtSQUxpWUYwTDFKUlVZRUJjVXBpRW1GUHlwREt5R2k2WFVnSWtZd0tGSi9JQUZFTXVFN0FWVVlsZ0ZoSjdrU2ZlUUFFLzA1OTVJbEt1UlNVOEZhS0Fqc01tc2NnRXZYVEpDa0VqWE1pV1hxeTFnREJOdUtXM042YU9ac2sxUmlFVmViWlo1OXRNM3IwNk5nZVBYcTBZSitMaW9wSzkrN2RtelY5K3ZUZEJ3NGN1TTR1OWRCRER6VUFKdHF6VTZkT01SRVJFU3pOb0J3L2Z2enlGMTk4Y2JvS2dDaEVRaWhGVUFPOWNrZDFFd01TUkNoM0VGV1pEei84TUFGZkpDUWt4TjYzYjk5MisvZnZiemQzN3R4dE1CZzN4Q2NKRG9jakdQZnIyTEZqRkd1U2dicEpqSEpYbGpKVkdzdHdZeGNrU1JFRUNVTW9qb0tDZ3ZJZmZ2amhWeUJVeFFrSkNRM2k0K04xQ3Y3NjY2OG40bjVIang2OUNyemlhblIwdExOWHIxNHhETHpLM0g5TmwwcHJxaktlbWVkU1lDZUE2SFlFQTNMNTh1V1NSeDU1Sk9QRWlSTXVQcU5uWDN6eHhhWnZ2ZlhXQS9nSFhudnR0YjBMRml6NFJialNaczJhQmUzWnN5YzVMaTZ1RVNHQ0FWM1BzZmhoT0ZXRGhKRlFHU3N5aExydGdFRTR3QmEwZSt5eHgySkZ2NTkvL3JtQUErU1JJZ2pacjYxWnMrYWM2QVBSNmxrQUl3dmJoeXRYcmhRTkd6WnNzeVM2MXFxd2hCRlFRTXl5WjFhSkRkRWw0Nm1ubm9yS3pNd2NDbEZwNThqSXlCRFJMeWtwcVRGSVI5Y3BVNlpFWXE3eTVaZGZYaGQ5dnY3NjYwdGtDVlNQbmc4ZE9wUnovdno1M3lTaGduYW5KTVRJWFdGUGdtMkk3aHBmZWVXVjFwOS8vbm1TMCtuVU0vQlhyMTR0T256NDhHOHd5OFdpLzd2dnZ0c0tRR2tpWTdQWHIxOHZSY25pTXR6QUs1VklET29kVVJuVklERkVhVERtSVNvREE4UzltL2c3cU1NaFVKMS9nK0hjR2hVVjlkMjRjZU1PTTZQS3ZudmpqVGRhTm03YzJHY3BCSGdFbG94UzNKZ1hrdGlRV2xjWjFXQ1JpRkp1S3pHRXJUQVlzMmJOMmcwdU5BTVJyNUtWSzFkZWVPKzk5N0owaGxhL3ZtM01tREVzLzFrT0E2eEFnV0lGQVVKa3o4c0l4N2dqS21OVTlrQzloOWV5SkhDSm1Qbno1M2NYbitmTW1iTWRKT0E0SDR4WTVOYmIrKysvN3pHZ3JWcTFZdGNyNTFJaEpLU2NTZ1lGUkNJaFNpQ0FzVlVpR1ZZSnI3REowdnZDSGJKajNyeDVhVUN5VHBEWmM0dUZyMnZYcmhVaGFYRHpnVkpBc08zd1hJZElpQlpvRzJLclpJSEtTdEo2ZGtuV3llc0FLZmtCQ05aeElzNDRrMTQrY2VMRXBxSi9mbjYraTZvTWx4YWFlZk9pM1FiNUY2VTJKTVFpV1JPeFU0N0IraXhldkxnVFBobnN4K2JaczJjZkl5dGo0cG82UVAzNzkyK3daTW1TcnVLY1R6LzlORnRpUTl3RzY3MUtUVmlvdjREUUpRZFpZWXduVWZ2T08rOTBuVHAxNmxCeDhzS0ZDemVDVWMxQVlOQUVrREp3NE1ER3dEY0dBQVVQNGt1Zko0NGRPOFl5WHhYWWh0U0dLdFJVUW1TVlFwNjhCQmpGaEJkZWVHRzRPQW5ZNlArQnV6MUN3TURCbnpwNDhPQ21FSzMrUmNRampJMkM2aHpqL1N1SWhHaUtiM1dqWnBLUWtpVzhBMnBVYVMySXAzM3d3UWU5SmsyYU5FS2NBREhJdjJmTW1IR0lpTGNYZDNuMDBVZWJBUmpESUlMVndkaTRjV01XQUxRZnI4ZmlRYUJrazVWUWRKcXFySFVKd1N0cnRCYkQvdlRUVDdjR01FWWowcFVLMVB5UTRsM3Y0WldoR2pKa1NMT1VsSlFuUlRpL2FkT21Yd1lOR3JRUHpib215YzlhMEwxWlpMWUU1VlQ5bFFhdHVoTGlFOGJQbkRuekw2SWpHTWF2Z0hRZGtTUm9QR0krZE9qUUtLRHdJM0J1QSt6SVBzVzN6c3hyNXVHOUZlVld2T3BhSlFraWYreE5wYVZWTnBPNHhXZHBzVjI3ZHAxWmh5TkhqdndNSWZzUnhhU1dDeUxjcU04KysreHZOTkdqeUNzR3ZkU0FSODVCNkI0RTRLckJJQ3ZMaUZIeXBsV1ZxUnFWYm52bElFK2ZQbjNGSUkydnY0Y3d2Zm5hdFd2SENEQ0tpNHRka3B1cnJOQk90blNnU3NKL3QySmNZS2VZQUtGVkJSQ3RLcUtJeEpZR2ZqcEFLMWFzK0ZzOU9GaUhyVnUzSGwrM2JsMkdPQmNDUFN1YWNVOWl1RTJiTms3UnAydlhybzBWZVEyOTFySmx5MGdPY3JIQlNxR1JkTWdLWlV3TFpqU1RDK2d0THkrUDFWMG8vZnIxNnh3VEUrTXdpSWhWQ045eldMOGRPM1prSkNVbGJZRFEvNnI0a2RXclY4Y3JxREtBTllpQ2JlREdPNHMrRXlaTWlJZS9CVlAxQWhYc0lZRGVzbVhMY1FQeXBvV0doZ2FiNUYxTnBkTmlncWhQamZxdVhidjJzQTZzUEdydjNyMmpPU2crVWdLenZSSmltMy8wN3QxN1BRdktnTVQ5QkNBeEFxWUFVMjN6NDQ4L0pvSnhaY3NScFpNblQyN0JVb05ObWpTcGp4UFBHUmtaajArWk1xVWx1dytRR09jMzMzeVRPSExreUo3c2U3YVlEUkh6VWNXM3prUGpBYU9laklhWTZhTGlXL1ZveW41VmlkNks4aVdIY3J2YWtJWG9yRndwL01xVkszTWpJeVAxSllUczdPeXIzYnQzLzllRkN4ZUt5STlTY21ZRkl4c05NenhHWW1ROUI4dUdGUllXdXRxM2I5L0N6RldBTkMxYnVuVHBLZVRtdllwd1FLWC93ZnFscDZmdkJUQS9WRzVWUFlyS1IxSDlLQ29meTNHMjNtSWdIUUw1TXBTUDBQTVpQWHYyWEFLZ3NCU2YwcUpGaTBpWTNURWdLU0dLNzRxNktPdG01eGFucHFabWpSNDllaVVZNUxPeVFXN2Z2djBvWEh0Tmh3NGRWbS9Zc0dHL3JBOVQyVkdqUnIwTllQekVyKzFUQlRScjFxd080djJCQXdkT0VYc2xreWpOVEVKd1VJZXJsVU9ScElTMWJ0MjY2YzZkTy84TERHUnpJaW1GaW5lTlNMbUV6cXNqUm95SUJ2YjZ4N0N3TU1lNWMrZHlnY1Ztd2ZWeThJMkJ5am1tVFp2V0hveG9RN1lTQjE3ckNBU0M1OGphQ3kzYnRPN2V2ZnRKdUpjSDJaZkp5Y2t6dnZ2dXU3TkVRa1J0TEMwRGxmcHNNY3V5eXI4dzFFSkJUNXZBSUthQThZc1NvQ1FrSkt3R3NTOGs2VDg2azI0ekRpSTU2R3dhbFlqYVFNSWl3SkMvekU0NmNlSkVCa2piLzNBUU1DQUZYRjFLYUs2bHFpb2oxS1dJSTZ0WEhtZGxaZDJBRy9qblpUaXcrc0NNT2hUZnNpdHhyUkkrTXdWOHB0Z041dkxHSk9RR2J6bTg1WkpCdU5BZ2FMcENYYng0Y1Q4eGtJOC8vdmg3a3BNdE01QmFwU3BleGswV3BGMThJQUlVdmZvWVFMbU9RV25ldkhrekFPWHZzYkd4RGdrLzBTUWdpMnZsazViSEFSUEdqNHEzU3RVRllxdy9DbFU1YytaTUpzUlp4MlVwU0tXUzhtNkxDWW5CbVc4TVNBR2E0UUlCaWpDMERCVFE0LzhBVUVKSVB0WUlHTmwxQzVHZWx4Q3B3TnRVOUdRVi9GYjlCUXNXUENFR01YdjI3QlIwZlJkT1VpdStwZDFWeXJwaktjR2VCa3VJcHpGUWV2VG9zWlNBTWc1dU5OUWs5WWpMc0VzUU1QaVZ1a1VMVFZxQmlvYkJiLzBuNDBhc1ExcGEyclkxYTlhY2tZQlJxbmh2QVBCTFpjeHNTVEVIUllpMFIzMFlLRmg5T0NoaHl1M3FRcnpCQ0VzTFhtN0FneWhIUVoyVjVtY0FqSEJ3NThQWWI3SGZaQlBTdDIvZmRaUXFJTnRUVmgxQUZBbDFsNmxPSVZZZGJtaHpBSlFQTUNqQWJzYzkvdmpqY1lwM05WQ3c0bHUwajR0K3kwbCtoWlo0TzREN05JUnJqKzNTcFl0bjh3RjR1V1ZFb3FtNlZDZ21PeUVxVzdtanNZeVJQU2xFcjhWZzBITGh4ajRTQkl4NUgrQVBZNWN2WDk1SHVWMTY2U0RTWWxIa082bm9Iais5MW16R2pCbGRUcDQ4K1VKMGRMU2V2Yjk0OGVJMU1Lai9DNzlkWUdBN1NoSGdibi9DZjM5QkVlcFRoSHk3Nit6WnN6ZmJ0bTI3YXR1MmJTeG5xckNBYk55NGNRTWducGtCVFBJaEJkV2RLcEk2TXBMWUZqV3N6dWVmZjc0VEFQSHN3b1VMbjhRaEFCalJOT0EvSllydmxsanFiaXRkK3F6SzZqOEZCYnZqRW1SWHNLN3FZdG1uVDUrTlFKQ3l4WVVhTldvVVBtL2V2TkU1T1RsenQyN2QrbmNJOFA2QWdQRXF2K1R2blIwN2RveE1TVW41SzJqaExLRHNFOFVPTFVuS1VVWVpqT2g2alF0bThPb2JGdWt5U2NPN3RqMnIrcXlXVEdUY0d6Um8wREF4TVRFcFBqNyt6K0hoNFpQUnZlQXFSTmJYT1hmdTNBSERodzhmZ1c5bTgrYk5tYXo4QWdCdGhUSnNGZ1A3NTllQ3VELzFJVVo3VHVoc1lFcnVxUnJNek16TUJaYWZzbXJWcW9NaUZRQWd1UlRmOHUxUS9Bb3F3b3kyWHNxOWZ2MzZERENpWHc0WU1PQUFWeEVzSVViYlRBS3lsT2tQT0RpeDVMTTJMQUJocitBVzFXZWVlWVpGcXVrUWxsc2dHczNtZ3hmVnkrVW9VYzBrSk9UVlYxLzlCZG9DSGtONXRyaml5a2FlbExaS2lLQVJVRnFnQVpGdEZaR1ZTOWhFb1MxL0ZWa3dEY0FvNGdNVXJ0WE9WVVpEQkF5WGQzdnRzOE4xYTNCdG0rSzc2d0V2ekl0ZzBCMG9HNkpVc2dac1UzdzNHT3VlQWttSWhRK0sxcHFMd1F0V0tpU05waUNjR0JSY0RBenZNV0dqSk5DRzdKTUZUWUFXS0VCVWsvVmZ2TjlGZDZkRVFoeUs3eVpFd1RIS0NDQSsvQU92TFdOQTROcDJEbHd4NGtqaVhvcjViNVloMW11b09yWWFnQ0hkQnZiY2M4OTFLaTR1RG5lNVhLSFF3cHhPWnpDdkZnb2FNbVFJSTFKdVZ2OEJyWXkzVXY1YXdWZjlkVUNZWkRGVmdNWXFvZTM4bFpWNHNtWUZVdVlwNUFORDI0UmR3MjYzUndEbHlRZFNtQVZ1WFFTSXdaSlFvTUpzZ1A1V0hBa1FIQ2h4eElwbDJOSkJNN2paZnlwMytmanFxNisraDNEaEU1Wm5obmFkNTFWdWtweEtoVkxOZmJ0bTlrT21NbmY5S0NzckV3Wlo5bEFFTlZBOHBMTDFYMkhVN3ZyQnE2cUREZElPcHZ5a3VudnVWQU1QVXljQVFXdkRSby9NcUJVSmtZRmlxME1TSWxPVlNpVWtFTVNNOGhIRFk5ZXVYUzYycEVCS0s2dGF5dURaek1oY2VNdVdMVzNnYVd3R2E4OFdwWXA3N0FJTmlFV3l0bXQ0OU96Wjgyb2x5VjZ0a3QveWVMbEZpeFkxbmo1OWVyakpZbnhsc1UxQWVFaFZwTVZVbWxFdzZEWUl5Mm5KZ214L2ppVTJOdGJ3NlRpb3VzanZJTTl5SjNVYm90UjZraFg0eWxJT3N1amFiUVpJTlRsV3dDU2tPbEV5VzdDT2lJdUxzOU9LUVVtbHN1ZVlPblhxSmFXV1N6YnZLQ0FOR3piMEVDTUFJM2phdEdtUi9welBBZEdQamgwNzFvcUx2Nk1xRXg4ZmI2OXU0b2FxUVZoWW1PVjNMeUhZeU9YazVIaFc4VmVzV0hGOS9mcjErVlN0UkxCWGswTGNPZzBJNHc3Q1k2U25wM3NLOFhKemM5MGJObXdvUm5sYm84SThIY3hCZ3dZNTd5VkFmRGdMOEJQbjRzV0xyUkpwMEQremR1Yk1tZEtsUzVkZTUybEo2ejBCQ0NaTW1abVpucHpFd3c4L0hNS2EyYmxMbGl5NUpwZ25OODYxY3R4Um85cXBVNmNnSWZhblQ1OHVyeTZZWGJwMHFYZFBTQWp5RExwTkFGdHdRVEY1eXZld1ljT2M0OGVQMTNkcTVlWGwwVWNDL3Y0Qm9jeHp6cHc1amJwMTYrYmtIdVVud2w3VmZ2MzZlYmpHd1lNSFJhV2p4bTNSNzE5bEVIMlhQZC9NNTVGZllrc3FsWnphQk9SdTVpKzhLUGptelp0amQrN2NtYzhrZ1JuTlBuMzZoQUY0RGNUM1lJUkxheEtqMUZsQXNJZll0V3RYSWFpTVhzSGN2My8vY05hTXpqdDE2bFNwU1BRODhNQUQ5bnRHWlRoOTF5VmszYnAxdVd6UC82VkxsMXhHL2RsanVHYlBucDJOMlc1dDBmYTdwVEllTDdGbno1NmlKNTU0Z3RXRHVSTVNFaHlnSXZXQnBJV2RQMy9lbFphV2RuUDE2dFc1aXZlZUhmV2VVeG5DVmoxR2MvZnUzUVhRV0R5VGphVFhRb0MwQUdqTzJyeS9PNjR5UFhyMFlKSVFxc2dmdUVhYjEzOFdhTk9talNNcEtTbkVENk45eHlWRXRyZkc5SWlKaWJGdTNMaVJsWU5IYmRxMDZTWjRsb0tVbEpSY01KckZoSWRZSWlJaTdBTUhEZ3hOVEV3TUF4SVhHaDBkSFZRbG5mUjl0b2hXMjRESWltZEVydFFmVGhMSzJ2ejU4Nk95czdQWjA2cHVwcWFtNW9MaERRR2JFaW84a045aWYrdXhYVWIvbU1QMHdRazFCWVFXNDVWVlY5UmF0R2hoSHo1OGVBUnJOYllEdDNhSjAvTE9nSmRVbVlFaEFDbFI2c0JodFZyWi9iaE1RTkVDQlFqTmhOTU5BblVDa0tDZ0lERTVwUWFnMUpxRTRIMHhvbWExTGdBaTdrZUFVbVhWcVM0Z3NucFZVZGw4MTQvZzRHQVh2NWRpeGJzZXBGSUpxVTdCREs0Nzl6dzRXcm05QlMxY3VWMk1LOHFhY0FtM1RQMk11SVBzTVovMG4vbVVLNzZibk1TZUc3cWxERXVNRkJ4YkRkV2xWUEV0TXloWGJ1K2Fvay9LRGlUdGxtMU13THMxUk1PMnBLSXlsYkVGUUdWY1pOYUVRUk9WaUxnMHNqWUFvWS80d25YNFdDb3dKd2tvRDZGU1FoOERMQXdhclJPdERVQmtvT0RkRUVZN0lRSmV1Q3RxUGNzbHMxV3FHUC9maDBCSHFwUXBVMkNveXcxNDRTNTlxSnFpZUpjMlZDakcvL2V1TnNKMm94Q2lLbVVYQWZFeTFQSWJGYzNJQ2xWcUN4QXNLYklIenNyMkMydUJCRVRtRHF2NkQ3VnFNejhyaTc1bHdWekFKY1RzZkRYQTE2K3VPbGZsOC8zai9uSC9xUG54L3dJTUFFRVAyb3dydHpZUEFBQUFBRWxGVGtTdVFtQ0MpOwogIG9wYWNpdHk6IDA7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLndhdGVybWFyay5mYWRlSW4KewogIG9wYWNpdHk6IC44NTsKfQoKYm9keVtkYXRhLWhyZWY9J2dhbWluZyddIC53YXRlcm1hcmssCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIC53YXRlcm1hcmsKewogIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUMwQUFBQmVDQVlBQUFDM3JKMzFBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZORUV6TUVWRE4wUkVPREJHTVRGRk1FSkRNRVpETWpBd01qTkROamMwTURjaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5FRXpNRVZETjBWRU9EQkdNVEZGTUVKRE1FWkRNakF3TWpORE5qYzBNRGNpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMFFUTXdSVU0zUWtRNE1FWXhNVVV3UWtNd1JrTXlNREF5TTBNMk56UXdOeUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8wUVRNd1JVTTNRMFE0TUVZeE1VVXdRa013UmtNeU1EQXlNME0yTnpRd055SXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QcGd2YTJRQUFBUzVTVVJCVkhqYTdGdUxjZUl3RUxVektjQ3BBTk9CTzRoVFFiZ0tEam9nRmNSVXdGMEYwRUdnQWtNRjVpcUFWQkJTZ1UrYVdaRmxUN0prVzVJMUZ6U2pNUmpiZWxxLy9VckVkVjFILzFWakUwcFpYN0grVVgrMUR6aVhoQWc0STJCcDQ3OWxRMkNMVlJKbWg0cDFJYzBkNjF2NC9zaDZEdWZQckkvak9ENkhJT1VWa3VoYzgzc1JDaldPQUtneXVLYjBqZTlPY1Q2RjQ3YmgzaDBjYzkrZzczdmMrKzd3VGVkSUdDZldOMXE5TWVFci8wMWNaQkhzQk5HT3RrSkhqeUgwYU1vT2I0aWF0TDF5QXhBTWFEQ3hTM1Jxd2ZvRG93UTN5VE13cmJ4TllYTEQwNE9iVlkySlRaR2pxMEtoeDdOUU9pYmNYLzk0d0RqbXlyaUdyMWt3bkVhV1F0VStnMU5FRzg3bEJ2b0cyaFpvOEdSdmtrUWhsU1FVMk9PVlNydnJLUGJBN1kxODUzSDNGSnpCRE00dFVYd2VvV0FySHdxMFNBZzJFRWpoUkdFbGlRNzNySTlZbjBnbTRnMDB0NjlQNEFSd0xFRUJ6OWcxYTNUTkN6dndlRHh6eW1tZTBJS3IvWWxPSHlSZWpJUEQzbTJOQWNNMS9PMzhjS3FJRU9jZWdaODRHdU92K1NoUnFxM2lNM1hSQnllZ0FWQ0pPSGdDZm1MWHUycXdCbWVOUHRnRkxlSG5DNU1RejhJNWo4Zndpc1hBUzljMWtic09nR2MwRW1QZk54QURDM00zR1JMMHN3VHdXbkh0V3BJWUR3STZNd1FjK1N6WW1DcGlJMkRoeXJzcVZtL1FFdTAzQVp3UkdtMjhnVllvblFsZ2JBb1gyRE02QlcwSk1QZDZoUmRPV3dRODg2S0lFajRHRFZoSStyVW40TWduWUFGYW1LcE5GOEJEcDF0L1dnSStod0RhSktWS2tNditqV05zeFQycHdydXFQSytaSUZDaWVXeUt6aUFKclVYbEVwTFpHcCtUSkF0SGt1d21rdXNLZE0yMFlmemxwWFpJYnFvMHdCUEZoR3ZJeGpNMG9VcFNZejRLZHcvWitWSTNLWW5RS25HaU1nVk9lYTVadGhQUEsydDl5elZqWGI5VmVKVjlnS3RBWFJaSmlWU3A5RE9EdXNxRlFqRjU5VGd6UGtDR2ZUWUZEMldEUktSaU5BYUJNU1pJUWJtWlBSZzhld1YxRk43R011WHBKSEZYRGJoLzBadW1Fa0V3d01sQ2E2NnJiUXdPbklQRWRUL1Rvc3hnd0NWMlBtdHpvM2Zna25HWGZSL2dGRGlNaDh2R2xhMlpWeTcyZWxnWEVEeXdKRzUzYmhId2hIaFhlMitVbUtDcmVLS0hoU2pidXZVdUE1VUtkN3pFU3hhYXR6WlhCRlhPUWN1Q3BhUEIvWE5GbkdMa1NQb3VGUEc0NFFHS2o2Y1dnZndKSFhreGN3eDU1cnRMTzFyS3ZKUUpOVFRQTFh4SW1oWWhuVmFXbklBT01iRU5wdDBiY28zeVN4ajl4TEpwR3VFTW5leC9PUW42eFlhZ1E5aEZ1eERGelJ1bmI2Qy9wZlhRdEoxRlBHbGthem12cVN4a09Ud29Hb1lxUXFYSHlBdW5MVHVYMUJlbjhRU21iVG5aWlRYTUJ1aUVTT3ExNWYwWWRPYUZIbEhMclR3dEJPQ0hIaVJyNFJuSk5sUTdQU0xwbDJpZmpLODdGd3A5NzFEakh3MytUbkxTTFFQNm9BZE90L0pJdjFGdzBaYlAxaFd4WjQ2WStaUTBsZENUNW5xK3hXamVvdHpnbkI0UjJPa2NKQjlyRk83UTFvVmJpejBzdWZKMFNFbmp5ZkNGblQxSVZQekRicUpRWE8vMHdMemVJNnN4aVJyMjZCSEZ6YnpTZ3d6SU4xMnROVkxrVHVlbGl3dDNRZzlZekp3QlBjU0M2Q05NWWcrN0pRZDM0MHJOaHdrY291c3R5YjBWMlJZOThxNFdCQ3F0K1JDUzVnT1hrREp1UUJrM01nOEo2eWc1c2lTdEUxblhaYkZUOVBXbjRpeTYvcTlBMjNZcGl6bTEweURGYWZTMWcrRDdGbXR1b0crZ0c5cGZBUVlBS3c1R2dUSmthSElBQUFBQVNVVk9SSzVDWUlJPSk7Cn0KCi53YXRlcm1hcms6aG92ZXIsCi53YXRlcm1hcms6Zm9jdXMKewogIG9wYWNpdHk6IDE7Cn0KCgoKLyogU0lURS1HUklEIE5BVklHQVRJT04gKi8KLm5hdiwKLm5hdjpob3ZlciwKLm5hdjpmb2N1cwp7CiAgdGV4dC1zaGFkb3c6IDAgMCA1cHggIzAwMDAwMDsKICBjb2xvcjogI2ZmZjsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgouYXJyb3dfdXAsCi5hcnJvd19yaWdodCwKLmFycm93X2Rvd24sCi5hcnJvd19sZWZ0LApuYXYucGFnaW5hdG9yIGEucHJldmlvdXMsCm5hdi5wYWdpbmF0b3IgYS5uZXh0CnsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvbmF2X2Fycm93cy5wbmcpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLmFycm93X3VwCnsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wOwogIGhlaWdodDogMTAwcHg7Cn0KCi5hcnJvd19yaWdodAp7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xMDBweDsKfQoKLmFycm93X2Rvd24KewogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMTcwcHg7CiAgbWFyZ2luLXRvcDogLTEuNWVtOwogIGhlaWdodDogOTBweDsKfQoKLmFycm93X2xlZnQKewogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMzAwcHg7Cn0KCm5hdi5wYWdpbmF0b3IKewogIGRpc3BsYXk6IG5vbmU7CiAgcG9zaXRpb246IGZpeGVkOwogIGxlZnQ6IDUwJTsKICB0b3A6IDY1cHg7CiAgbWFyZ2luLWxlZnQ6IDUwMHB4OwogIHdpZHRoOiAxMDBweDsKICBoZWlnaHQ6IDI1MHB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgei1pbmRleDogMjsKfQoKbmF2LnBhZ2luYXRvciB1bAp7CiAgZGlzcGxheTogbm9uZTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKfQoKbmF2LnBhZ2luYXRvciBhLnByZXZpb3VzLApuYXYucGFnaW5hdG9yIGEubmV4dAp7CiAgZGlzcGxheTogYmxvY2s7CiAgdGV4dC1zaGFkb3c6IDAgMCAzcHggI2JiYjsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwcHg7Cn0KCm5hdi5wYWdpbmF0b3IgYS5wcmV2aW91cwp7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC02ODNweDsKICBwYWRkaW5nOiAwIDAgNTVweCAwOwp9CgpuYXYucGFnaW5hdG9yIGEubmV4dAp7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC01MDBweDsKICBwYWRkaW5nOiA1NXB4IDAgMCAwOwogIHRvcDogMTM1cHg7Cn0KCm5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgYSAgICAgICB7IGNvbG9yOiAjNTU1OyB9Cm5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgYTpob3ZlciwKbmF2LnBhZ2luYXRvci5mZWF0dXJlcyBhOmZvY3VzIHsKICBjb2xvcjogIzAwMDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAgICAgICBuYXYucGFnaW5hdG9yLmhvbWUsCmJvZHlbZGF0YS1ocmVmPSdtb2JpbGUnXSAgIG5hdi5wYWdpbmF0b3IuaG9tZSwKYm9keVtkYXRhLWhyZWY9J2dhbWluZyddICAgICBuYXYucGFnaW5hdG9yLmhvbWUsCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddICAgbmF2LnBhZ2luYXRvci5ob21lLApib2R5W2RhdGEtaHJlZj0naG9tZSddICAgICAgIG5hdi5wYWdpbmF0b3IuaG9tZSB1bC5ob21lLApib2R5W2RhdGEtaHJlZj0nbW9iaWxlJ10gICBuYXYucGFnaW5hdG9yLmhvbWUgdWwubW9iaWxlCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSAgICAgbmF2LnBhZ2luYXRvci5ob21lIHVsLmdhbWluZywKYm9keVtkYXRhLWhyZWY9J2J1c2luZXNzJ10gICBuYXYucGFnaW5hdG9yLmhvbWUgdWwuYnVzaW5lc3MsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1vZmZsaW5lJ10gICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1zdG9yYWdlJ10gICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1jb25uZWN0aXZpdHknXSAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1maWxlX2FjY2VzcyddICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1zZW1hbnRpY3MnXSAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1tdWx0aW1lZGlhJ10gICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1ncmFwaGljcyddICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1wcmVzZW50YXRpb24nXSAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1wZXJmb3JtYW5jZSddICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1udXRzX2FuZF9ib2x0cyddIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1vZmZsaW5lJ10gICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwub2ZmbGluZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXN0b3JhZ2UnXSAgICAgICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5zdG9yYWdlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtY29ubmVjdGl2aXR5J10gICBuYXYucGFnaW5hdG9yLmZlYXR1cmVzIHVsLmNvbm5lY3Rpdml0eSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWZpbGVfYWNjZXNzJ10gICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5maWxlX2FjY2VzcywKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXNlbWFudGljcyddICAgICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5zZW1hbnRpY3MsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1tdWx0aW1lZGlhJ10gICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwubXVsdGltZWRpYSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWdyYXBoaWNzJ10gICAgICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5ncmFwaGljcywKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXByZXNlbnRhdGlvbiddICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5wcmVzZW50YXRpb24sCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1wZXJmb3JtYW5jZSddICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwucGVyZm9ybWFuY2UsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1udXRzX2FuZF9ib2x0cyddIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwubnV0c19hbmRfYm9sdHMKewogIGRpc3BsYXk6IGJsb2NrOwp9CgoKLyogSE9NRVBBR0UgKi8KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3N0YXJ0CnsKICBiYWNrZ3JvdW5kOiBub25lOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMTAwMHB4OwogIGhlaWdodDogMzg1cHg7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3N0YXJ0IGFydGljbGUKewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAuNWVtIDJlbTsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjaW50cm8gewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5wYWdlIC5jZHMtYmFubmVyLApib2R5W2RhdGEtaHJlZj0naG9tZSddICNiYW5uZXIgewogIGhlaWdodDogMTAwcHg7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1ob21lLXRoaW4ucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luLWJvdHRvbTogMyU7Cn0KLnBhZ2UgLmNkcy1iYW5uZXIgYSwKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjYmFubmVyIGEgewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICB0ZXh0LWluZGVudDogLTk5OTllbTsKICBmb250LXNpemU6IDA7Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ0MHB4KSB7CiAgLnBhZ2UgLmNkcy1iYW5uZXIsCiAgYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjYmFubmVyIHsKICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCBuby1yZXBlYXQsCiAgICAgICM2M2E3ZTA7IC8qIE9sZCBicm93c2VycyAqLwogICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1ob21lLW1pZC5wbmcpIHRvcCBsZWZ0IG5vLXJlcGVhdCwKICAgICAgLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNjNhN2UwIDAlLCAjNDM5M2Q1IDEwMCUpOyAvKiBGRjMuNisgKi8KICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCBuby1yZXBlYXQsCiAgICAgIC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsICM2M2E3ZTApLCBjb2xvci1zdG9wKDEwMCUsIzQzOTNkNSkpOyAvKiBDaHJvbWUsU2FmYXJpNCsgKi8KICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCBuby1yZXBlYXQsCiAgICAgIC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzYzYTdlMCAwJSwjNDM5M2Q1IDEwMCUpOyAvKiBDaHJvbWUxMCssU2FmYXJpNS4xKyAqLwogICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1ob21lLW1pZC5wbmcpIHRvcCBsZWZ0IC8gY29udGFpbiBuby1yZXBlYXQsCiAgICAgIC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICM2M2E3ZTAgMCUsIzQzOTNkNSAxMDAlKTsgLyogT3BlcmEgMTEuMTArICovCiAgICBiYWNrZ3JvdW5kOiB1cmwoL3N0YXRpYy9pbWFnZXMvY29uZmVyZW5jZXMvY2RzLWhvbWUtbWlkLnBuZykgdG9wIGxlZnQgLyBjb250YWluIG5vLXJlcGVhdCwKICAgICAgLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICM2M2E3ZTAgMCUsIzQzOTNkNSAxMDAlKTsgLyogSUUxMCsgKi8KICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCAvIGNvbnRhaW4gbm8tcmVwZWF0LAogICAgICBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNjNhN2UwIDAlLCM0MzkzZDUgMTAwJSk7IC8qIFczQyAqLwoKICAgIGhlaWdodDogMTIwcHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NzBweCkgewogIC5wYWdlIC5jZHMtYmFubmVyLAogIGJvZHlbZGF0YS1ocmVmPSdob21lJ10gI2Jhbm5lciB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoL3N0YXRpYy9pbWFnZXMvY29uZmVyZW5jZXMvY2RzLWhvbWUucG5nKTsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgaGVpZ2h0OiAxMjBweDsKICAgIG1hcmdpbjogLTIlIDAgMiUgMDsKICB9CgogIC5wYWdlIC5jZHMtYmFubmVyIHsKICAgIGhlaWdodDogODBweDsKICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtYXJ0aWNsZS5wbmcpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0OwogICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1hcnRpY2xlLnBuZykgY2VudGVyIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0OwogICAgbWFyZ2luOiAtMS41JSAwIDAuNSUgMDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDgxMHB4KSB7CiAgYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjYmFubmVyIHsKICAgIGhlaWdodDogMTMycHg7CiAgICBtYXJnaW46IDAgMCAzJSAwOwogIH0KfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjbG9nbywKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcwp7CiAgcG9zaXRpb246IGFic29sdXRlOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddICNsb2dvCnsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDAgYXV0byAyJSBhdXRvOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogMTAwJTsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcwp7CiAgbWFyZ2luLXRvcDogMDsKICBsZWZ0OiAwOwogIHdpZHRoOiA5NiU7CiAgaGVpZ2h0OiAzMzBweDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcyBoMgp7CiAgZm9udC1zaXplOiAxOHB4OwogIG1hcmdpbjogMDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcyBoMiBhCnsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3VwZGF0ZXMgdWwKewogIG1hcmdpbjogLjVlbSAwICFpbXBvcnRhbnQ7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3VwZGF0ZXNfbGlzdCB7CiAgd2lkdGg6IDYwJTsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlc19saXN0IGxpIHsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddICN1cGRhdGVzX2xpc3QgLnRpdGxlIHsKICBtYXgtd2lkdGg6IDc1JTsKICB3aWR0aDogYXV0bzsKfQoKI3VwZGF0ZXNfdGl0bGUKewogIGZsb2F0OiByaWdodDsKICBtYXJnaW4tbGVmdDogM2VtOwogIHdpZHRoOiAzOSU7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQKewogIG1hcmdpbi10b3A6IDA7Cn0KCiNjbGFzc2VzCnsKICBtYXJnaW46IDAgMCAyJTsKICBwYWRkaW5nLWJvdHRvbTogMDsKfQoKI2NsYXNzZXMgaGVhZGVyCnsKICBtYXJnaW4tYm90dG9tOiAwOwogIC1tb3otY29sdW1uLWNvdW50OiAwOwogIC1vLWNvbHVtbi1jb3VudDogMDsKICAtbXMtY29sdW1uLWNvdW50OiAwOwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAwOwogIGNvbHVtbi1jb3VudDogMDsKfQoKI2NsYXNzZXMgaGdyb3VwCnsKICBmbG9hdDogbGVmdDsKICBwYWRkaW5nLXJpZ2h0OiAwOwogIHdpZHRoOiAzMyU7Cn0KCiNjbGFzc2VzIGhncm91cCArIHAKewogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luOiAwIDAgMWVtICFpbXBvcnRhbnQ7CiAgd2lkdGg6IDY3JTsKfQoKaHRtbFtsYW5nPXB0XSAjY2xhc3NlcyBoZ3JvdXAKewogIHdpZHRoOiA1MyU7Cn0KaHRtbFtsYW5nPXB0XSAjY2xhc3NlcyBoZ3JvdXAgKyBwCnsKICB3aWR0aDogNDclCn0KCmh0bWxbbGFuZz1kZV0gI2NsYXNzZXMgaGdyb3VwCnsKICB3aWR0aDogNDAlOwp9Cmh0bWxbbGFuZz1kZV0gI2NsYXNzZXMgaGdyb3VwICsgcAp7CiAgd2lkdGg6IDYwJQp9CgojY2xhc3NlcyB1bAp7CiAgY2xlYXI6IGJvdGg7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgei1pbmRleDogMjsKfQoKI2NsYXNzZXMgbGkKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogLTMwcHggNHB4IDAgMDsKICB3aWR0aDogOTBweDsKICBjdXJzb3I6cG9pbnRlcjsKfQoKI2NsYXNzZXMgbGkgYQp7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9zdGF0aWMvaW1hZ2VzL2ZlYXR1cmVzL2hvbWVwYWdlX2ZlYXR1cmVfaWNvbnMucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGNvbG9yOiAjMzMzOwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogOTBweDsKICBwYWRkaW5nLWJvdHRvbTogNzZweDsKICBtYXJnaW4tdG9wOiA0MHB4Owp9CgojY2xhc3NlcyBsaSBhOmhvdmVyLAojY2xhc3NlcyBsaSBhOmZvY3VzCnsKICBjb2xvcjogIzVGQTRBMDsKfQoKI2NsYXNzZXMgbGkub2ZmbGluZSBhICAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgICAyNXB4OyB9CiNjbGFzc2VzIGxpLnN0b3JhZ2UgYSAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC0xMTdweDsgfQojY2xhc3NlcyBsaS5jb25uZWN0aXZpdHkgYSAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtMjU4cHg7IH0KI2NsYXNzZXMgbGkuZmlsZV9hY2Nlc3MgYSAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgLTM5OXB4OyB9CiNjbGFzc2VzIGxpLnNlbWFudGljcyBhICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC01NDBweDsgfQojY2xhc3NlcyBsaS5tdWx0aW1lZGlhIGEgICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtNjgxcHg7IH0KI2NsYXNzZXMgbGkuZ3JhcGhpY3MgYSAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgLTgyMnB4OyB9CiNjbGFzc2VzIGxpLnByZXNlbnRhdGlvbiBhICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC05NjNweDsgfQojY2xhc3NlcyBsaS5wZXJmb3JtYW5jZSBhICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtMTEwNHB4OyB9CiNjbGFzc2VzIGxpLm51dHNfYW5kX2JvbHRzIGEgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC0xMjQ1cHg7IH0KCiNjbGFzc2VzIGxpLm9mZmxpbmUgYTpob3ZlciwKI2NsYXNzZXMgbGkub2ZmbGluZSBhOmZvY3VzIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTIxcHggMjVweDsKfQojY2xhc3NlcyBsaS5zdG9yYWdlIGE6aG92ZXIsCiNjbGFzc2VzIGxpLnN0b3JhZ2UgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0xMTdweDsKfQojY2xhc3NlcyBsaS5jb25uZWN0aXZpdHkgYTpob3ZlciwKI2NsYXNzZXMgbGkuY29ubmVjdGl2aXR5IGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtMjU4cHg7Cn0KI2NsYXNzZXMgbGkuZmlsZV9hY2Nlc3MgYTpob3ZlciwKI2NsYXNzZXMgbGkuZmlsZV9hY2Nlc3MgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0zOTlweDsKfQojY2xhc3NlcyBsaS5zZW1hbnRpY3MgYTpob3ZlciwKI2NsYXNzZXMgbGkuc2VtYW50aWNzIGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtNTQwcHg7Cn0KI2NsYXNzZXMgbGkubXVsdGltZWRpYSBhOmhvdmVyLAojY2xhc3NlcyBsaS5tdWx0aW1lZGlhIGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtNjgxcHg7Cn0KI2NsYXNzZXMgbGkuZ3JhcGhpY3MgYTpob3ZlciwKI2NsYXNzZXMgbGkuZ3JhcGhpY3MgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC04MjJweDsKfQojY2xhc3NlcyBsaS5wcmVzZW50YXRpb24gYTpob3ZlciwKI2NsYXNzZXMgbGkucHJlc2VudGF0aW9uIGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtOTYzcHg7Cn0KI2NsYXNzZXMgbGkucGVyZm9ybWFuY2UgYTpob3ZlciwKI2NsYXNzZXMgbGkucGVyZm9ybWFuY2UgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0xMTA0cHg7Cn0KI2NsYXNzZXMgbGkubnV0c19hbmRfYm9sdHMgYTpob3ZlciwKI2NsYXNzZXMgbGkubnV0c19hbmRfYm9sdHMgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0xMjQ1cHg7Cn0KCiNjbGFzc2VzIGxpIGgzCnsKICBkaXNwbGF5OiBpbmxpbmU7CiAgZm9udC1zaXplOiAxMnB4Owp9CgpodG1sW2xhbmc9cHRdICNjbGFzc2VzIGxpIGgzCnsKICBmb250LXNpemU6IDEwcHg7Cn0KCmFydGljbGUucHJvZmlsZQp7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luOiAwIDAgMiUgMiU7CiAgd2lkdGg6IDMyJTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKCn0KCmFydGljbGUucHJvZmlsZS5hY3RpdmUgewogICAtd2Via2l0LWFuaW1hdGlvbjogaW5wdXRnbG93IDEuOXMgMzsgIC8qIGp1c3QgZG8gaXQgdGhyZWUgdGltZXMgKi8KICAgICAgLW1vei1hbmltYXRpb246IGlucHV0Z2xvdyAxLjlzIDM7CiAgICAgICAtbXMtYW5pbWF0aW9uOiBpbnB1dGdsb3cgMS45cyAzOwp9CgphcnRpY2xlLnByb2ZpbGUgc2VjdGlvbgp7CiAgbWFyZ2luOiAwOwogIGhlaWdodDogMjQ4cHg7Cn0KCmltZ1tpdGVtcHJvcD1waG90b10gewogIC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMC43NSkgc2VwaWEoMC41KTsKICAgICAtbW96LWZpbHRlcjogZ3JheXNjYWxlKDAuNzUpIHNlcGlhKDAuNSk7CiAgICAgIC1tcy1maWx0ZXI6IGdyYXlzY2FsZSgwLjc1KSBzZXBpYSgwLjUpOwogICAgICAgLW8tZmlsdGVyOiBncmF5c2NhbGUoMC43NSkgc2VwaWEoMC41KTsKICAgICAgICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuNzUpIHNlcGlhKDAuNSk7CgogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7CiAgICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsKICAgICAgLW1zLXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0OwogICAgICAgLW8tdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsKfQoKLnByb2ZpbGUgaW1nW2l0ZW1wcm9wPXBob3RvXSB7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luLXJpZ2h0OiAxOXB4OwogIHdpZHRoOiA3NXB4OwogIGhlaWdodDogNzVweDsKfQoKLnByb2ZpbGU6aG92ZXIgaW1nW2l0ZW1wcm9wPXBob3RvXSwKLnByb2ZpbGU6Zm9jdXMgaW1nW2l0ZW1wcm9wPXBob3RvXSwKaW1nW2l0ZW1wcm9wPXBob3RvXTpob3ZlciB7CiAgLXdlYmtpdC1maWx0ZXI6IGdyYXlzY2FsZSgwKSBzZXBpYSgwKTsKICAgICAtbW96LWZpbHRlcjogZ3JheXNjYWxlKDApIHNlcGlhKDApOwogICAgICAtbXMtZmlsdGVyOiBncmF5c2NhbGUoMCkgc2VwaWEoMCk7CiAgICAgICAtby1maWx0ZXI6IGdyYXlzY2FsZSgwKSBzZXBpYSgwKTsKICAgICAgICAgIGZpbHRlcjogZ3JheXNjYWxlKDApIHNlcGlhKDApOwp9CgoucHJvZmlsZSBoMiwKLnByb2ZpbGUgaDIgc3Bhbgp7CiAgY29sb3I6ICMwMDA7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5wcm9maWxlIGgzCnsKICBmb250LXNpemU6IDExcHg7CiAgbWFyZ2luOiAxZW0gMDsKfQoKLnByb2ZpbGUgaDMgZGl2W2l0ZW1wcm9wPW9yZ2FuaXphdGlvbi1uYW1lXQp7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLnByb2ZpbGUgaDNbaXRlbXByb3A9YWRyXQp7CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucHJvZmlsZSAudXJscwp7CiAgZmxvYXQ6IGxlZnQ7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW46IDNweCAwIDAgLTRweDsKICBwYWRkaW5nOiAwOwogIHdpZHRoOiA5NXB4Owp9CgoucHJvZmlsZSAudXJscyBsaQp7CiAgZGlzcGxheTogaW5saW5lOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwp9CgoucHJvZmlsZSAudXJscyBsaSBhCnsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBmbG9hdDogbGVmdDsKICBoZWlnaHQ6IDE2cHg7CiAgd2lkdGg6IDE2cHg7CiAgcGFkZGluZzogMnB4ICFpbXBvcnRhbnQ7CiAgb3BhY2l0eTogLjc7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDEwMG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAxMDBtcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAxMDBtcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDEwMG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IG9wYWNpdHkgMTAwbXMgZWFzZS1pbi1vdXQ7Cn0KCi5wcm9maWxlIC51cmxzIGxpIGE6aG92ZXIsCi5wcm9maWxlIC51cmxzIGxpIGE6Zm9jdXMKewogIG9wYWNpdHk6IDE7Cn0KCi5wcm9maWxlIC51cmxzIGxpIGFbZGF0YS10eXBlPSdob21lcGFnZSddIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVRQVJBT1pBQUsydHJiNit2cDZlbm14c2JITnpjODdPenBTVWxJT0RnM2QzZDRDQWdMbTV1ZERRMEt1cnE3UzB0TUhCd2VibTVxK3ZyL3I2K3RYVjFlTGk0dVhsNWIrL3Y3cTZ1dlB6ODdpNHVINStmdUhoNGRUVTFIMTlmZHpjM01qSXlMeTh2TDI5dmNEQXdNWEZ4Y1BEdy9mMzk5bloyYU9qbzJabVpyT3pzL3Y3Ky9IeDhjbkp5Wnljbk52YjI5M2QzZTN0N2VqbzZQejgvTmpZMkdWbFpmNysvckd4c2NmSHg5TFMwdGZYMTZHaG9jek16SEp5Y3YzOS9lL3Y3NnFxcXYvLy8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0gvQzFoTlVDQkVZWFJoV0UxUVBEOTRjR0ZqYTJWMElHSmxaMmx1UFNMdnU3OGlJR2xrUFNKWE5VMHdUWEJEWldocFNIcHlaVk42VGxSamVtdGpPV1FpUHo0Z1BIZzZlRzF3YldWMFlTQjRiV3h1Y3pwNFBTSmhaRzlpWlRwdWN6cHRaWFJoTHlJZ2VEcDRiWEIwYXowaVFXUnZZbVVnV0UxUUlFTnZjbVVnTlM0d0xXTXdOakFnTmpFdU1UTTBOemMzTENBeU1ERXdMekF5THpFeUxURTNPak15T2pBd0lDQWdJQ0FnSUNBaVBpQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQaUE4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWlCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlJSGh0Ykc1ek9uaHRjRTFOUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmJXMHZJaUI0Yld4dWN6cHpkRkpsWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wzTlVlWEJsTDFKbGMyOTFjbU5sVW1WbUl5SWdlRzF3T2tOeVpXRjBiM0pVYjI5c1BTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTTFJRTFoWTJsdWRHOXphQ0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG96T1VSQlJUaERNVVpETTBNeE1VVXdRVVUyUVRsR05URXdSa1U1TlRZME5DSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEb3pPVVJCUlRoRE1rWkRNME14TVVVd1FVVTJRVGxHTlRFd1JrVTVOVFkwTkNJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qTTVSRUZGT0VKR1JrTXpRekV4UlRCQlJUWkJPVVkxTVRCR1JUazFOalEwSWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2pNNVJFRkZPRU13UmtNelF6RXhSVEJCUlRaQk9VWTFNVEJHUlRrMU5qUTBJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrQWYvKy9mejcrdm40OS9iMTlQUHk4ZkR2N3UzczYrcnA2T2ZtNWVUajR1SGczOTdkM052YTJkalgxdFhVMDlMUjBNL096Y3pMeXNuSXg4YkZ4TVBDd2NDL3ZyMjh1N3E1dUxlMnRiU3pzckd3cjY2dHJLdXFxYWlucHFXa282S2hvSitlblp5Ym1wbVlsNWFWbEpPU2taQ1BqbzJNaTRxSmlJZUdoWVNEZ29HQWYzNTlmSHQ2ZVhoM2RuVjBjM0p4Y0c5dWJXeHJhbWxvWjJabFpHTmlZV0JmWGwxY1cxcFpXRmRXVlZSVFVsRlFUMDVOVEV0S1NVaEhSa1ZFUTBKQlFEOCtQVHc3T2prNE56WTFORE15TVRBdkxpMHNLeW9wS0NjbUpTUWpJaUVnSHg0ZEhCc2FHUmdYRmhVVUV4SVJFQThPRFF3TENna0lCd1lGQkFNQ0FRQUFJZmtFQVFBQVFBQXNBQUFBQUJFQUVRQUFCOGlBUUlKQVA0V0dob09KaFFVR095YzdCZ1dGaVlROUNRZ0JLdzRVQVFnSlBUK0RQejBETEF3aEV6QXhQendtQTZDRVB3Y0FDejRORkM2R0hqa0hoaElFUENJK05RQWdQSVVCR0FRYmhRSUtQd28rUGc0a2hUd2xOZzBDaFJrYVB4NE9IUStIS2cwNEhJVTdvQmNmRVljL3RSTTczTjZqT2hmSGhSRTNMZWcvem9aU1ZQQ0I0b1VoRE50Ky9NcjNZNkFQQmpKWUxUTTB5MUF0YVIxK0FPZ1ZhdFFBQ0RRS2pmRHhnUWVFVjZFRWpib1U0SUVGQmhZOHdWTDBnOUdPR1pBa3BhVDA3bENpUUFBNyk7IH0KLnByb2ZpbGUgLnVybHMgbGkgYVtkYXRhLXR5cGU9J2dvb2dsZSddICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9naWY7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQVJWQk1WRVgvLy8vZ1NqL2dTajhBQUFELy8vLy8vLy9nU2ovLy8vLzc2T2ZtYkdQd3BaL3hzS3Y5OVBQdW1aUGlWVXYxeHNQNTNkdnFnM3YzMHMvb2QyL3p1N2ZrWVZmc2pvZUN3NEw3QUFBQUJuUlNUbE1BQU84QU1CQWlTM0JvQUFBQWIwbEVRVlI0WG1YUDJRckRNQXdGMGNSdDUzcDN0dmIvUDdWMkhpeEs1MFZ3RUFndC96a3NYQWQrNmhEYTRTVjVRRGZrUXQyVTNoTlVZZGNCR2cwNGdRNjIwYURxTXZCS1o5dXFYYUZFK1lvQklCVU1pRTNTWlpCam9FaHB3ZzRRc2lZNFJoL041eDUzcitlNmpybDhBU29aQmhtb0hOVHJBQUFBQUVsRlRrU3VRbUNDKTsgfQoucHJvZmlsZSAudXJscyBsaSBhW2RhdGEtdHlwZT0ndHdpdHRlciddICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL2dpZjtiYXNlNjQsQUFBQkFBRUFFQkFBQUFFQUlBQm9CQUFBRmdBQUFDZ0FBQUFRQUFBQUlBQUFBQUVBSUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS92NytELzcrL2ovKy92NWcvdjcrWVA3Ky9tRCsvdjVJL3Y3K0tQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RCsvdjRIL3Y3K1VQYnY0cEhneDQ3QjFLOVkzdFd3V043VXIxamUzc0tDeCtyYnVLaisvdjVuL3Y3K0dQLy8vd0QvLy84QS8vLy9BUC8vL3dEKy92NFkrZmJ3ZU0yeWNNZTJpQjcvdkkwZi84U1RJZi9LbHlML3pKa2kvOHlaSXYvTG1DTC8wYWhLNS9IcDFKSCsvdjRZLy8vL0FQLy8vd0QvLy84QTdPVFRhcXVITitDdWprWFBzNVpUdjZONkcvKzJpQjcveHBVaC84eVpJdi9NbVNML3pKa2kvOHlaSXYvS215NzM4T2pVaS8vLy93RC8vLzhBLy8vL0FNS3RmWTd3NitFZi8vLy9BUC8vL3dELy8vOEEzc3FicDhpV0lmL01tU0wvekpraS84eVpJdi9NbVNML3k1Z2kvOG1lUE83Ky92NHcvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QrL3Y0SC92NytWOUN0V04zS21DTC96SmtpLzh5Wkl2L01tU0wvekpraS84eVpJdi9KbHlILzV0U3FwLzcrL21EKy92NC8vLy8vQVAvLy93RC8vLzhBK1BYdkp0R3laZFhOblMvM3k1Z2kvOHFZSXYvTG1DTC96SmtpLzh5Wkl2L01tU0wveTVnaS84MmlQTzdMcVZmZTBieU1tZi8vL3dELy8vOEEvdjcrRC9EbzFKSEtteTczeXBjaS84S1NJUCsvanlEL3hwUWgvOHVZSXYvTW1TTC96SmtpLzhxWUl2Ky9qeUQvcklFZC85bktxSDcvLy84QS8vLy9BUFB1NFR6QWxTejN3WkVnLzdtTEgvK3NnUjMvdVpkR3o3bUxILy9KbHlIL3pKa2kvOHlaSXYvR2xTSC90bzByOWVYYnhEL1Z4NmRnLy8vL0FQNysvaC9wMzhXaHRJc3E5YWwvSFAra2Z5anV5YmFLZ2YvLy93Q3pqempsd0pBZy84cVlJdi9KbHlIL3U0d2YvOENrWXJuLy8vOEEvLy8vQVAvLy93RGoyc1JNbkhVYS83bWVZYTdWeDZkZy8vLy9BUC8vL3dELy8vOEEyTW1uWUs2REhmKytqaUQvdm80Zy82MkNIZi9rMnNRLy8vLy9BUC8vL3dELy8vOEE4T3ZoSC9mMDd3Ly8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dDL3AzQ2ZwbndjLzY2R0t2UGcxTFo4Ly8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BTlhIcDJESnRvcUJ5TFdLZ2YvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLzhBQVAvL0FBRGdQd0FBd0E4QUFJQUhBQUI0QndBQStBTUFBUEFBQUFEZ0FRQUE0QU1BQU1FREFBRFBod0FBLzQ4QUFQL25BQUQvL3dBQS8vOEFBQT09KTsgfQoucHJvZmlsZSAudXJscyBsaSBhW2RhdGEtdHlwZT0nbGFueXJkJ10gICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQU9ZQUFEOTJ4eHRMbEgreS94bFl0SU9rMWlGTGpKQzgvbHlOMTNTaTVuS204VFplbXZ2Mzh5cGVySTZodk9ycjdTTlFsUlpGalRKcnZWSjl2U3Bud0ZPRXpHS1QydmJ6N21PWDVWZUl6di8vK3I3TzVHdWQ1bVdVMnpWc3dJQ3gra2Q3eUltNS9pQmd2ZmIwOGZMeDd5aGx2eGxHalBqMThmSHc4QzFwd0krNy9pSk5rQ1JQa1N0a3VpVlZueUJOa0NKUGxmUHk4UER3Ny96NjlveTYvaDlSbkNsV20vVHk4WCtoMHZqMDdpMW52RFp2eFBIdjdqRm10dEhaNHh4VXFPRGs2akp1eElHWnY5UGc5Snl6MUV4c240eTUvY2JOMXg5Tmt5VlJrbXVpOHBqQi9vdWd3Sm02NlhxcThGQnZvTzd2NzQrOC9vU3k5U0JManFhMXkvajI4NFcyL2o1cHFTQmN0ZS92OE16UjJwVy8vdmoyOUp1ejF1UHA4dGpmNlh1dy8zNm0zeUJXcHpCcndYZXQrekZzd1c2T3YzK2V5dlB5NzQyZnZGeUl5RnlMejdMTytQWDA4ZmYyODluaThMalE5Sit5MEhlcDhQLzk5VFZzdTJtVjF6VnN2dkx4OEsvSDdDUmd1Q1prdnBTbHZ5eGt0OExOM01iVDUzcXUrdS92N3lIL0MxaE5VQ0JFWVhSaFdFMVFQRDk0Y0dGamEyVjBJR0psWjJsdVBTTHZ1NzhpSUdsa1BTSlhOVTB3VFhCRFpXaHBTSHB5WlZONlRsUmplbXRqT1dRaVB6NGdQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlRV1J2WW1VZ1dFMVFJRU52Y21VZ05TNHdMV013TmpBZ05qRXVNVE0wTnpjM0xDQXlNREV3THpBeUx6RXlMVEUzT2pNeU9qQXdJQ0FnSUNBZ0lDQWlQaUE4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGlBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlpQjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpSUhodGJHNXpPbmh0Y0UxTlBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZiVzB2SWlCNGJXeHVjenB6ZEZKbFpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMM05VZVhCbEwxSmxjMjkxY21ObFVtVm1JeUlnZUcxd09rTnlaV0YwYjNKVWIyOXNQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdRMU0xSUUxaFkybHVkRzl6YUNJZ2VHMXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvek9VUkJSVGhDUkVaRE0wTXhNVVV3UVVVMlFUbEdOVEV3UmtVNU5UWTBOQ0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG96T1VSQlJUaENSVVpETTBNeE1VVXdRVVUyUVRsR05URXdSa1U1TlRZME5DSStJRHg0YlhCTlRUcEVaWEpwZG1Wa1JuSnZiU0J6ZEZKbFpqcHBibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPak01UkVGRk9FSkNSa016UXpFeFJUQkJSVFpCT1VZMU1UQkdSVGsxTmpRMElpQnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qTTVSRUZGT0VKRFJrTXpRekV4UlRCQlJUWkJPVVkxTVRCR1JUazFOalEwSWk4K0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBpQThMM0prWmpwU1JFWStJRHd2ZURwNGJYQnRaWFJoUGlBOFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K0FmLysvZno3K3ZuNDkvYjE5UFB5OGZEdjd1M3M2K3JwNk9mbTVlVGo0dUhnMzk3ZDNOdmEyZGpYMXRYVTA5TFIwTS9PemN6THlzbkl4OGJGeE1QQ3djQy92cjI4dTdxNXVMZTJ0YlN6c3JHd3I2NnRyS3VxcWFpbnBxV2tvNktob0orZW5aeWJtcG1ZbDVhVmxKT1NrWkNQam8yTWk0cUppSWVHaFlTRGdvR0FmMzU5Zkh0NmVYaDNkblYwYzNKeGNHOXViV3hyYW1sb1oyWmxaR05pWVdCZlhsMWNXMXBaV0ZkV1ZWUlRVbEZRVDA1TlRFdEtTVWhIUmtWRVEwSkJRRDgrUFR3N09qazROelkxTkRNeU1UQXZMaTBzS3lvcEtDY21KU1FqSWlFZ0h4NGRIQnNhR1JnWEZoVVVFeElSRUE4T0RRd0xDZ2tJQndZRkJBTUNBUUFBSWZrRUFBQUFBQUFzQUFBQUFCQUFFQUFBQi9DQVNpa3BJRE16Qm9pSmlGQmFJRjlGYTBKdlh3S1ZscFZWSGg1ZE9CWU9VV04rb3FOK0hrMEpibWQvRmt4SkNhK3dDWEVJRjNjbWZ5SWFGeHU4dlJzSUJ3ZGdXREV3UDNRVnlSekxGUWNkUUFCOUluOGpOeGhxYWhnVUh6cGtkUk1oQkF0L0MwTW9PanBpS0JNVEVSRVRlUjhPSjJ3OU9TUVRKQ0VoN1R3c0xIZzBtSWd4UXNLQUt4SFMzSml6aDRGREgyYkdMWUFqZ1lzWEczTEtoS25Sb2dVTkt3N3MvSGtDWTRHSU5obVdCRUR5NE1HTEkzeW8vTEd6UmNhSUxIb1VIRm5SOGdHRUlCbGs3RERTd0lrS0NEdFY5RHlpWUFvYUlsSWdCSGpSY2tVQkZWaFZTQ2tCb1lTTHJGZ0xCQUlBT3c9PSk7IH0KCi5wcm9maWxlIC5saXN0LWFydGljbGVzCnsKICBjb2xvcjogIzY2NjsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBmbG9hdDogbGVmdDsKICBmb250LXNpemU6IDE1cHg7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBwYWRkaW5nOiAzcHg7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogY29sb3IgMTUwbXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0OwogIC1vLXRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0Owp9CgoucHJvZmlsZTpob3ZlciAubGlzdC1hcnRpY2xlcyB7IGNvbG9yOiAjNWZhNGEwOyB9Ci5wcm9maWxlOmZvY3VzIC5saXN0LWFydGljbGVzIHsgY29sb3I6ICM1ZmE0YTA7IH0KCi5wcm9maWxlIC5saXN0LWFydGljbGVzIHNwYW4KewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDMwMG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IC1tcy10cmFuc2Zvcm0gMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDMwMG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzMDBtcyBlYXNlLWluLW91dDsKfQoKLnByb2ZpbGUgLmxpc3QtYXJ0aWNsZXMuYWN0aXZlIHNwYW4KewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgLW8tdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQoKLnByb2ZpbGUgLm1hcCwKLnByb2ZpbGUgLmFydGljbGVzCnsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDI3OHB4OwogIGhlaWdodDogMTI1cHg7CiAgb3ZlcmZsb3c6IGF1dG87CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW1vei10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGFsbCAzMDBtcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbjogYWxsIDMwMG1zIGVhc2UtaW4tb3V0Owp9CgoucHJvZmlsZSAubWFwICAgICAgICAgICAgIHsgbGVmdDogLTgwMHB4OyB0b3A6IDEzNXB4OyB9Ci5wcm9maWxlIC5hcnRpY2xlcyAgICAgICAgeyBsZWZ0OiA4MDBweDsgdG9wOiAxMzVweDsgfQoucHJvZmlsZSAubWFwLmFjdGl2ZSwKLnByb2ZpbGUgLmFydGljbGVzLmFjdGl2ZSB7IGxlZnQ6IDIwcHg7IHRvcDogMTM1cHg7IH0KCi5wcm9maWxlIC5tYXAKewogIGJhY2tncm91bmQ6ICNkZGQ7Cn0KCi5wcm9maWxlIC5hcnRpY2xlcwp7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi5wcm9maWxlIC5hcnRpY2xlcyBsaQp7CiAgbWFyZ2luOiAuM2VtIDA7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLnByb2ZpbGUgLmFydGljbGVzIGEKewogIGZvbnQtc2l6ZTogMTNweDsKICBkaXNwbGF5OiBsaXN0LWl0ZW07CiAgbGlzdC1zdHlsZTogc3F1YXJlOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAucHJvZmlsZQp7CiAgbWFyZ2luOiAwIDAgMiUgMiU7CiAgd2lkdGg6IDIzLjUlOwp9Cgpib2R5W2RhdGEtaHJlZj0ncHJvZmlsZXMnXSAucHJvZmlsZTpmaXJzdC1jaGlsZCwKYm9keVtkYXRhLWhyZWY9J3Byb2ZpbGVzJ10gLnByb2ZpbGU6bnRoLWNoaWxkKDNuICsgMSkKewogIG1hcmdpbi1sZWZ0OiAwOwp9Cgpib2R5W2RhdGEtaHJlZj0ncHJvZmlsZXMnXSAucHJvZmlsZSBoMwp7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAucHJvZmlsZSBzZWN0aW9uCnsKICBoZWlnaHQ6IDc1cHg7CiAgcGFkZGluZzogNiU7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLnByb2ZpbGU6Zmlyc3QtY2hpbGQsCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLnByb2ZpbGU6bnRoLWNoaWxkKDRuICsgMSkKewogIG1hcmdpbi1sZWZ0OiAwOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddIC5wcm9maWxlIGgzCnsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDEwcHg7Cn0KCnVsLmF1dGhvcnMKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCnVsLmF1dGhvcnMgbGkKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogMSUgMDsKICBwYWRkaW5nOiAwIDMlIDAgMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHdpZHRoOiAyNDBweDsKICBkaXNwbGF5OiBibG9jazsKfQoKdWwuYXV0aG9ycyBsaS5wcm9maWxlIGgyCnsKICBtYXJnaW4tdG9wOiAuMjVlbTsKfQoKLm9uZV90aGlyZCB1bC5hdXRob3JzIGxpCnsKICBjbGVhcjogbm9uZTsKICBmbG9hdDogbm9uZTsKICBtYXJnaW46IDMlIDAgNSU7CiAgd2lkdGg6IDEwMCU7Cn0KCi50d29fdGhpcmRzIHVsLmF1dGhvcnMgbGkKewogIHdpZHRoOiA0NyU7CiAgbWFyZ2luLWJvdHRvbTogMiU7Cn0KCgoKLyogRkVBVFVSRVM6IE9VVExJTkUgTkFWSUdBVElPTiAqLwoKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW9mZmxpbmUnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtc3RvcmFnZSddIC5vdXRsaW5lX25hdl90b2dnbGUsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1jb25uZWN0aXZpdHknXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtZmlsZV9hY2Nlc3MnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtc2VtYW50aWNzJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW11bHRpbWVkaWEnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtZ3JhcGhpY3MnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtcHJlc2VudGF0aW9uJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXBlcmZvcm1hbmNlJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW51dHNfYW5kX2JvbHRzJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlCnsKICBkaXNwbGF5OiBibG9jazsKfQoKLm91dGxpbmVfbmF2X3RvZ2dsZQp7CiAgZGlzcGxheTogbm9uZTsKICBwb3NpdGlvbjogZml4ZWQ7CiAgbGVmdDogNTAlOwogIHRvcDogMTQ1cHg7CiAgbWFyZ2luLWxlZnQ6IDUyNXB4OwogIHdpZHRoOiAzMHB4OwogIGhlaWdodDogMzBweDsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBwYWRkaW5nOiAxMHB4OwogIHotaW5kZXg6IDM7Cn0KCi5vdXRsaW5lX25hdl90b2dnbGUgaW1nIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAxMHB4OwogIGxlZnQ6IDEwcHg7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IGFsbCAuMjVzIGVhc2UtaW4tb3V0OwogIC1tcy10cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICB6LWluZGV4OiA0Owp9Cgoub3V0bGluZV9uYXZfdG9nZ2xlIGltZy5zaG93CnsKICB6LWluZGV4OiA1Owp9Cgoub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCBpbWcuc2hvdwp7CiAgb3BhY2l0eTogMDsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIC1vLXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCm5hdi5vdXRsaW5lIHsKICBkaXNwbGF5OiBub25lOwogIGJhY2tncm91bmQtY29sb3I6ICNiZWJlYmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiA1MCU7CiAgdG9wOiAyMHB4OwogIHBhZGRpbmc6IDIwcHg7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIGJveC1zaGFkb3c6IDAgMCAxMHB4IDAgI2JiYjsKICBvdmVyZmxvdzogYXV0bzsKICBtYXgtaGVpZ2h0OiA1MjVweDsKICB6LWluZGV4OiAzOwp9CgpuYXYub3V0bGluZSBoMwp7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbWFyZ2luOiAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCm5hdi5vdXRsaW5lLnRvYwp7CiAgd2lkdGg6IDMwMHB4Owp9CgpuYXYub3V0bGluZS50b2MgdWwKewogIG1hcmdpbi1sZWZ0OiAxLjVlbTsKICBtYXJnaW4tYm90dG9tOiAxZW07Cn0KCm5hdi5vdXRsaW5lLnRvYyBwIHsKICBmb250LXNpemU6IDEzcHg7Cn0KCm5hdi5vdXRsaW5lLnRvYyB1bDpsYXN0LWNoaWxkCnsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgpuYXYub3V0bGluZS50b2MgYQp7CiAgbWFyZ2luLWxlZnQ6IC0xLjVlbTsKICB0ZXh0LWluZGVudDogMS41ZW07Cn0KCm5hdi5vdXRsaW5lLnRvYyBwIGEKewogIG1hcmdpbi1sZWZ0OiAwOwp9CgpuYXYub3V0bGluZS50b2MgbGkKewogIG1hcmdpbjogLjVlbSAwOwp9CgpuYXYub3V0bGluZS5mZWF0dXJlcwp7CiAgd2lkdGg6IDEzMHB4Owp9CgpuYXYub3V0bGluZS5mZWF0dXJlcyB1bAp7CiAgbWFyZ2luOiAuNzVlbSAwIC0uNWVtIDA7Cn0KCm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpCnsKICBtYXJnaW46IDA7Cn0KCm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEKewogIGRpc3BsYXk6IGJsb2NrOwp9CgpuYXYub3V0bGluZS5mZWF0dXJlcyBsaSBhLnNlY3Rpb25fdGl0bGUKewogIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQ7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBmb250LXNpemU6IDEzcHg7CiAgcGFkZGluZzogLjI1ZW0gMCAuMjVlbSAxOHB4Owp9CgpuYXYub3V0bGluZS5mZWF0dXJlcyBsaS5jdXJyZW50IGEuc2VjdGlvbl90aXRsZQp7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKbmF2Lm91dGxpbmUuZmVhdHVyZXMgbGkgYS5vZmZsaW5lICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZDTTBORU1rVkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkNNME5FTWtaRk9FRkNNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01VSXpRMFF5UTBVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHTVVJelEwUXlSRVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZ2tseSs4QUFBRHhTVVJCVkhqYVRGR3hFWUpBRUh6UTNDOUJNa09oQXFoQXJVQWRDcEJRSXlVeUZBdGdwQU9sQXJVRDdNRFFVRU16ZDUxOTVXYVdPKzUyNysvdlBTTkwwOVRDN1lBeFlKVitBbnVnS011U3NmRkVIc0tkUmNpQlJnS0tGOEFkU0NqcXFuQm9KODNmR2pRN3FSazVFdzhKZGprQ0ljZ2t4Q0lFd0ZyQ3F3U0JqODlRM2EzSUhLRVNjUWJjVktmRmJpU3JibFlOUXBGSkhBbTB2cStMR295VHdOWEFoYVBwcEZ6NWlRU1hUaFJGRHdSTCtCYzg0eG94aTIrUUN3YjQzOElOZ0pWYksvZWZBWE9RcXRhV1dNdjBQdCthMXlvNFVhUFJlbnFIdmtiYi9CNnVKZUtGcDdxNFcyY0ZzdHVTK1Fnd0FLTnhXQ2lENllwcEFBQUFBRWxGVGtTdVFtQ0MpOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuc3RvcmFnZSAgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFMQ0FZQUFBQkxjR3hmQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UmpGQ00wTkVNekpGT0VGQ01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSakZDTTBORU16TkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEdNVUl6UTBRek1FVTRRVUl4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwR01VSXpRMFF6TVVVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHNCWkw5NEFBQURhU1VSQlZIamFiRkhCRFlKQUVEek1GVUFIWWdmWXdWbUJVb0VRQ2tBN2tBckVBb2hhQVhTZ2RrQUpsRUFKenBqQjdJTk5KcHZibWQyZHU0dWNvaXpMR0NrSDlpcU53TE50MjdjekVVbDhRTG9ERTBYaTFnRHJBNUNoa1p6ekVLZklIVkNqZUxIVHdOWGlpTjF2QTRvOE9JZ3ppUktreFBRbDJsN1FwdGZhcmJIV3ljWmttbmlQSTVCNlRSOUUwTjRENThJdEJBYSsvR3dEb2xGVEs5bGFpblNsOWJrMk5VaG40R05BUHVpWmI1SHh6YWZyRjJ6d3dnSGN4djdEQ2VsSy8rWWZhS3NDWWcwYi9nMXFDaElFaVVZMU4vT25NYjRDREFEdHNWR2VQUEhWL2dBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuY29ubmVjdGl2aXR5ICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFLQ0FZQUFBQ0FMTC82QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRa0pGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlFrTkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEdNVUl6UTBRek5FVTRRVUl4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZDUVVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHVTZFpva0FBQURJU1VSQlZIamFiRkRiRGNJd0VFdUFBZmpsanhGS0Z3QTJhRGNnNmdDSUNlQ1R2MDVRdFd6QUJyQkJ3Z1owZzQ2QWpSd1VxcDdrUEM1bm4zTzJxcXFMTVdaci91UFdORTFuSm1LZTUzbkF2Z0o2WVFDdXlQZmUrekFtV0M3b2tyRVFxbS9kRDloYXdBRWtuWG5HK3pBVHNRYU9pVkJxa1NKcjRNSExJbnFtSXBSZktpNkF1NFRZNFJRSjN3NzZvSk1OMm5raVY0cFVwSCtJbGlLcEZIR0hiaTF5UEhlVGhNUXZMV3hvRTZTbEJzSGMvamVsR0Npb1pjbHB2T01JZHB3UktUUFRFVDRDREFBaG8wTEJVbGs1MWdBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuZmlsZV9hY2Nlc3MgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFMQ0FZQUFBQ3BySGNtQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRa1pGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlF6QkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3hNVEF4T1VWQ1JFVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZDUlVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGoxMVpMa0FBQUNTU1VSQlZIamFZbUFBZ3VUa1pBTWdkbUJBQStqaVRFaHk2NEVTODVFVUpnQ3A4MENzQUJOalJOSnBBTVQ5UUx3QWlBOEM4WHdvZXlGVS9nSkk4WDhHNG9BakM0aWNPM2N1SXo1VlFBUDNvN3VaSUtCTU1TZ1VnTGlmb0dKb2NJRkNJUUU1R0pHRERoUWFCNkI4VURBbWdvSUppRUdlZWdERUg2REJHZ2dLRFVja3pZWEFrTGtBdGNVUU9VSkFCZ0FFR0FEclB5dUkrVnNObXdBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuc2VtYW50aWNzICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FZQUFBQldkVnpuQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRek5GT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlF6UkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3hNVEF4T1VWRE1VVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZETWtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGlHK3pWUUFBQUN0U1VSQlZIamFqSkNMRGNJd0RFUnh4UUFkb1d6UUVicEtsQUdBQ1NpRFJDMlRBSnZBQmgyQk84a0JZMXlKU0tlbTl2TW4xMnlDazNOdW9TN0tpUWZ4T1VCN2lQY1pPcGRTSGw4RkRsd0lRWVJPMEdBTEJYQ1BuMnNGRVp6ZDFNRVVwcTNHanhVMFFHY2EzRFQrZVlQclJPaHBWNndOUmQyWS9LNHJiMHVOamlhd0E1aVlBRGhDYk5JaU5qSUhYYUJlVml4ZHRNblBWSWtzRFF4NEY0b0dwOGpTd0pCN1hlV3ZRL1lsd0FDaTVGd05wRzdaVEFBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEubXVsdGltZWRpYSAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFKQ0FZQUFBRGtaTll0QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRakJGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOVU16TWtZMlFqRkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQlJVVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpCUmtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHBtUHR3d0FBQUJ3U1VSQlZIamFZa3hPVGpaZ1lHQUlBT0lGUUN3QVpUUE1uVHUzQVNnSFlvUGtMd0Q1RzVpQWpQMUFMQS9FSDRDNEhvanRnZmdCMUpCOElOWUg0Z01nQXhpQmd2K0J0Q05RSjFnQUd3Q3FBUmxZeU1SQUhIQUFPWkZZeFdCQU84VXNVSG8vMEJORUtYWWswdUFMQUFFR0FHSlBHdHJQek9HbUFBQUFBRWxGVGtTdVFtQ0MpOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuZ3JhcGhpY3MgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFLQ0FZQUFBQmk4S1NEQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRalJGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOVU16TWtZMlFqVkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQ01rVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpDTTBVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHVjZm1iZ0FBQUN1U1VSQlZIamFZbVJBQThuSnlRbEFTaCtJTHdMeGhybHo1MzZBeVRFQ0pRV0F0QUVRWHdCSkFQa2dkandRQndDeEFoQWZBT0tOUUx5QUNVaThCK0wxSUJxb2NEK1FkZ0RpaVVDTmlrRGFFR1FJRVBlRERHU0MyaENJSk9FUHhQVkFqUXBBRFNEYkNtSE9ZSUV4UUJKUXhUZ0JFd01KZ0tCaWtIT1FuUUVLbXZWQXdRMVFYNE44THdBTmpYaG9TRDBBcVdPRTZnNkFlaXdBcXBBQjZ2NkZJTTFRLzJDMTFnSFphbVFBRUdBQXZZQTJ2UXRLQUVZQUFBQUFTVVZPUks1Q1lJST0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEucHJlc2VudGF0aW9uICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBb0FBQUFKQ0FZQUFBQUxwcjBUQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRamhGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOalpFTVRoRFJqWkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQ05rVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpDTjBVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHM5V2NWVUFBQUNDU1VSQlZIamFZbVFBZ3VUa1pBTWcxYytBR3h4a2dUSWVBSEVqRGtWZ0E1aWdIQVU4cGdrQThRRVdKRjBPZUJSZllNQUhnRzUzQU9MN1lLdUJEQVVnYnNDaEZtVExBUkNEQmNySkJ5cm1COUlMNTg2ZGV3R2tHY2dPQU9KNElKNElVc2dJRkFRNU5nRXFhQUFOQVpEWUJpRGVDTlM0QVp1YkRFRHV3dVlHZ0FBREFCTDJJQmdDc1BEQkFBQUFBRWxGVGtTdVFtQ0MpOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEucGVyZm9ybWFuY2UgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FZQUFBQldkVnpuQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TmpaRU1UaERSamxGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOalpFTVRoRFJrRkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzJOa1F4T0VOR04wVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMk5rUXhPRU5HT0VVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUG9VWmQ2VUFBQURxU1VSQlZIamFkRkhSRFlJd0ZJUk80QVk2QW01UUp3QW1FTU1BeEFsZ0E4SUFSSmhBMktCTW9DT3dnYnFCZCtTYTlFT2JYRjdoM3IxMzd6V09mcHl5TEY4SU8rRFk5LzB6NUdJbGtMd0JLL0JSZEVBTExFQUtYQ2syRWhhS0k3QUhKcENyaE1RTTFFendnb0VXV0FHNHFHdUNPNnRPc2pkdUFoSnEvVlppSVhzMTdtMWcvNHp2ekNoNVJxVmNSS3BxN0dTUmRBRFg2UHR1TkZSRnRRU3pST3hFaTJ2Z3dobXBjeitVdHRQSllxZC9GYnNpOStTSHRrcmNqb1lmL0Z6cWFzTjN5RFFvUlluODhzRWVXaXUzNUxpMU9IamRKQ0Q5SXk3c0JNNGl1dWpmNFdxQjVoZjNGV0FBcmM1b05FdFBiek1BQUFBQVNVVk9SSzVDWUlJPSk7IH0KbmF2Lm91dGxpbmUuZmVhdHVyZXMgbGkgYS5udXRzX2FuZF9ib2x0cyB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOalpFTVRoRFJrUkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5qWkVNVGhEUmtWRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMk5rUXhPRU5HUWtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8yTmtReE9FTkdRMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QbkdhWlowQUFBRGVTVVJCVkhqYWZGR0JEWUl3RUtTRUFkaEEzQUFuc0d5Z0cyZzZnSFlDWlFKMUFBSk00QWl3Z1d5Z0c4Z0kzaVZuMHBoR2txUGYvdjFkLzJzU2ZjNjVBc3N1aVg5ajB6UWpnelE0dkFEckNIa0IzQ0dZYzVOSjNXTFpBRXNvdlg0cjVINENmQmFvMXlRcmVRQ28yT3NxTlRBZ2R6UDRIVVZZcWZqSk93TjBZcTVpRVhndDRpS1ZGZFZuckNVd0k5NENIdkVWc0JMaTN2SktrNXJ0U0tZSzFFbzVrTnlyZ1BGTWh6M0h5Y2FoT2tuMUFieEY3TUkrdjFNNEEwTTRGYm1FZWZhV0dCM2thdGJEcFl1TWxJN3NhelJCZ3EvYy9ubnBpc0ZIZ0FFQWxrVlg4MU9qQ3U0QUFBQUFTVVZPUks1Q1lJST0pOyB9CgpuYXYub3V0bGluZS5mZWF0dXJlcyB1bCB1bAp7CiAgZGlzcGxheTogbm9uZTsKICBtYXJnaW46IDAgMCAuNzVlbTsKfQoKbmF2Lm91dGxpbmUuZmVhdHVyZXMgdWwgdWwgYQp7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgcGFkZGluZzogLjNlbSAwIC4zZW0gMThweDsKfQoKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW9mZmxpbmUnXSAgICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLm9mZmxpbmUgICAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXN0b3JhZ2UnXSAgICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnN0b3JhZ2UgICAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWNvbm5lY3Rpdml0eSddICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLmNvbm5lY3Rpdml0eSAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWZpbGVfYWNjZXNzJ10gICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLmZpbGVfYWNjZXNzICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXNlbWFudGljcyddICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnNlbWFudGljcyAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW11bHRpbWVkaWEnXSAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLm11bHRpbWVkaWEgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWdyYXBoaWNzJ10gICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLmdyYXBoaWNzICAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXByZXNlbnRhdGlvbiddICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnByZXNlbnRhdGlvbiAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXBlcmZvcm1hbmNlJ10gICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnBlcmZvcm1hbmNlICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW51dHNfYW5kX2JvbHRzJ10gbmF2Lm91dGxpbmUuZmVhdHVyZXMgLm51dHNfYW5kX2JvbHRzIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KCgoKLyogRkVBVFVSRVM6IENPTlRFTlQgKi8KCmJvZHlbZGF0YS1ocmVmKj0nZmVhdHVyZXMnXSAucGFnZSBoZWFkZXIKewogIG1pbi1oZWlnaHQ6IDI1MHB4Owp9Cgpib2R5W2RhdGEtaHJlZio9J2ZlYXR1cmVzJ10gLnBhZ2UgaGVhZGVyIGhncm91cCwKYm9keVtkYXRhLWhyZWYqPSdmZWF0dXJlcyddIC5wYWdlIGhlYWRlciBzZWN0aW9uCnsKICB6LWluZGV4OiAyOwp9Cgpib2R5W2RhdGEtaHJlZio9J2ZlYXR1cmVzJ10gLnBhZ2UgaGVhZGVyIHNlY3Rpb24gcC5pbnRybwp7CiAgZm9udC1zaXplOiAxOHB4Owp9Cgpib2R5W2RhdGEtaHJlZio9J2ZlYXR1cmVzJ10gLnBhZ2UgaGVhZGVyIHNlY3Rpb24gcAp7CiAgbGluZS1oZWlnaHQ6IDEuNzsKfQoKLmZlYXR1cmVfaWNvbgp7CiAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2ZlYXR1cmVfaWNvbnMucG5nKSwgdXJsKC9zdGF0aWMvaW1hZ2VzL2ZlYXR1cmVfaWNvbl9iYWNrZ3JvdW5kLnBuZyk7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wLCBsZWZ0IHRvcDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogMTsKICB0b3A6IC0xNXB4OwogIGxlZnQ6IC01MHB4OwogIHdpZHRoOiA0NTNweDsKICBoZWlnaHQ6IDM3MnB4OwogIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuMjVzIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuMjVzIGVhc2UtaW4tb3V0OwogIC1tcy10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLXBvc2l0aW9uIC4yNXMgZWFzZS1pbi1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuMjVzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGJhY2tncm91bmQtcG9zaXRpb24gLjI1cyBlYXNlLWluLW91dDsKfQoKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW9mZmxpbmUnXSAgICAgICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciA3NnB4LCBsZWZ0IHRvcDsgfQpib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtc3RvcmFnZSddICAgICAgICAuZmVhdHVyZV9pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yOThweCwgbGVmdCB0b3A7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWNvbm5lY3Rpdml0eSddICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtNjcycHgsIGxlZnQgdG9wOyB9CmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1maWxlX2FjY2VzcyddICAgIC5mZWF0dXJlX2ljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTEwNDZweCwgbGVmdCB0b3A7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXNlbWFudGljcyddICAgICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMTQyOHB4LCBsZWZ0IHRvcDsgfQpib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtbXVsdGltZWRpYSddICAgICAuZmVhdHVyZV9pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xNzkwcHgsIGxlZnQgdG9wOyB9CmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1ncmFwaGljcyddICAgICAgIC5mZWF0dXJlX2ljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTIxNjRweCwgbGVmdCB0b3A7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXByZXNlbnRhdGlvbiddICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMjUzOHB4LCBsZWZ0IHRvcDsgfQpib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtcGVyZm9ybWFuY2UnXSAgICAuZmVhdHVyZV9pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yOTEycHgsIGxlZnQgdG9wOyB9CmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1udXRzX2FuZF9ib2x0cyddIC5mZWF0dXJlX2ljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTMyODZweCwgbGVmdCB0b3A7IH0KCmRpdi5kZXNjcmlwdGlvbiBwCnsKICBmb250LXNpemU6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBtYXJnaW46IDAgMCAxZW07Cn0KCmRpdi5kZXNjcmlwdGlvbiArIHNlY3Rpb24uc3VwcG9ydC5ub25lCnsKICBtYXJnaW4tdG9wOiAwOwp9CgpzZWN0aW9uLnN1cHBvcnQgaDMsCnNlY3Rpb24udXBkYXRlcyBoMwp7CiAgbWFyZ2luLXRvcDogMDsKfQoKc2VjdGlvbi51cGRhdGVzIHVsCnsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogMWVtIDAgMCAwOwogIHBhZGRpbmc6IDA7Cn0KCnNlY3Rpb24udXBkYXRlcyBsaQp7CiAgbWFyZ2luOiAwIDAgLjVlbTsKICAtbW96LWNvbHVtbi1icmVhay1hZnRlcjogYXZvaWQ7CiAgLXdlYmtpdC1jb2x1bW4tYnJlYWstYWZ0ZXI6IGF2b2lkOwogIC1vLWNvbHVtbi1icmVhay1hZnRlcjogYXZvaWQ7CiAgLW1zLWNvbHVtbi1icmVhay1hZnRlcjogYXZvaWQ7CiAgY29sdW1uLWJyZWFrLWFmdGVyOiBhdm9pZDsKICAtbW96LWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZTogYXZvaWQ7CiAgLW1zLWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC1vLWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIGNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwp9CgpzZWN0aW9uLnVwZGF0ZXMudHdvX2NvbHVtbnMKewogIC1tb3otY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgLW8tY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgLW1zLWNvbHVtbi1jb3VudDogMSAhaW1wb3J0YW50OwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgbWFyZ2luOiAwIDAgMiUgMCAhaW1wb3J0YW50OwogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsKfQoKc2VjdGlvbi51cGRhdGVzLnR3b19jb2x1bW5zIHVsCnsKICAtbW96LWNvbHVtbi1jb3VudDogMjsKICAtby1jb2x1bW4tY291bnQ6IDI7CiAgLW1zLWNvbHVtbi1jb3VudDogMjsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogMjsKICBjb2x1bW4tY291bnQ6IDI7CiAgLW1vei1jb2x1bW4tZ2FwOiAyMHB4OwogIC13ZWJraXQtY29sdW1uLWdhcDogMjBweDsKICAtby1jb2x1bW4tZ2FwOiAyMHB4OwogIC1tcy1jb2x1bW4tZ2FwOiAyMHB4OwogIGNvbHVtbi1nYXA6IDIwcHg7Cn0KCnNlY3Rpb24uc3VwcG9ydAp7CiAgbWFyZ2luLXJpZ2h0OiAyZW0gIWltcG9ydGFudDsKfQoKc2VjdGlvbi5zdXBwb3J0IGgzCnsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgpzZWN0aW9uLnN1cHBvcnQgaDQKewogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IC43NWVtIDAgMS41ZW07Cn0KCnNlY3Rpb24uc3VwcG9ydCBoNCBhCnsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDE4cHg7Cn0KCnNlY3Rpb24uc3VwcG9ydCB0YWJsZQp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgpzZWN0aW9uLnN1cHBvcnQgdGFibGUgKyB0YWJsZQp7CiAgbWFyZ2luLXRvcDogMmVtOwp9CgpzZWN0aW9uLnN1cHBvcnQgdGhlYWQgdGgKewogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IGFsbCAuMXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGFsbCAuMXMgZWFzZS1pbi1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW4tb3V0OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IC0yMHB4OwogIGNvbG9yOiAjMzMzOwogIGZvbnQtc2l6ZTogMTFweDsKICBmb250LXdlaWdodDogNDAwOwogIHBhZGRpbmc6IDNweCAwOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogIHdpZHRoOiA4N3B4OwogIG9wYWNpdHk6IDA7Cn0KCnNlY3Rpb24uc3VwcG9ydCB0YWJsZSArIHRhYmxlIHRoZWFkIHRoOm50aC1jaGlsZCgxKTpmaXJzdC1sZXR0ZXIgeyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgfSAvKiBEb24ndCBjYXBpdGFsaXplIHRoZSAnaScgaW4gaU9TLiAqLwoKc2VjdGlvbi5zdXBwb3J0IHRoZWFkIHRoLmN1cnJlbnQKewogIG9wYWNpdHk6IDE7Cn0KCnNlY3Rpb24uc3VwcG9ydCB0aGVhZCB0aDpudGgtY2hpbGQoMSkgeyBsZWZ0OiAwOyB9CnNlY3Rpb24uc3VwcG9ydCB0aGVhZCB0aDpudGgtY2hpbGQoMikgeyBsZWZ0OiA2NXB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0aGVhZCB0aDpudGgtY2hpbGQoMykgeyBsZWZ0OiAxMzVweDsgfQpzZWN0aW9uLnN1cHBvcnQgdGhlYWQgdGg6bnRoLWNoaWxkKDQpIHsgbGVmdDogMjA4cHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRoZWFkIHRoOm50aC1jaGlsZCg1KSB7IGxlZnQ6IDI3OHB4OyB9CgpzZWN0aW9uLnN1cHBvcnQgdGQgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvc3RhdGljL2ltYWdlcy9icm93c2Vycy5wbmcpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgZm9udC1zaXplOiAyNHB4OwogIHBhZGRpbmctdG9wOiA1MHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogODVweDsKfQoKc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLmNocm9tZSAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgMnB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0Ym9keSB0ZC5maXJlZm94IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xNTlweDsgfQpzZWN0aW9uLnN1cHBvcnQgdGJvZHkgdGQuc2FmYXJpICB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMzIwcHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLm9wZXJhICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTQ4MHB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0Ym9keSB0ZC5pZSAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC02NDRweDsgfQpzZWN0aW9uLnN1cHBvcnQgdGJvZHkgdGQuaW9zX3NhZiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtODA1cHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLmFuZHJvaWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTk2NnB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0Ym9keSB0ZC5vcF9taW5pIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xMTI1cHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLm9wX21vYiAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTEyODdweDsgfQoKc2VjdGlvbi5zdXBwb3J0IHAuY3JlZGl0CnsKICBjb2xvcjogIzg4ODsKICBmb250LXNpemU6IDEzcHg7CiAgbWFyZ2luLXRvcDogMi41ZW07CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpzZWN0aW9uLnN1cHBvcnQgcC5jcmVkaXQgYQp7CiAgY29sb3I6ICMzMzM7Cn0KCnNlY3Rpb24uc3VwcG9ydCBhc2lkZS5zdXBwb3J0X2RldGFpbHMgcAp7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxLjY7CiAgbWFyZ2luOiAxLjVlbSAwIDA7CiAgcGFkZGluZzogMS41ZW0gMCAwOwp9CgpzZWN0aW9uLnN1cHBvcnQubm9uZQp7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUsCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSArIHNlY3Rpb24sCnNlY3Rpb24uc3VwcG9ydC5ub25lICsgc2VjdGlvbgp7CiAgZmxvYXQ6IG5vbmU7CiAgaGVpZ2h0OiBpbmhlcml0OwogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsKfQoKI3VwZGF0ZXMKewogIG1hcmdpbi1ib3R0b206IDIlICFpbXBvcnRhbnQ7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZQp7CiAgaGVpZ2h0OiBpbmhlcml0Owp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUgZGl2CnsKICBjbGVhcjogbGVmdDsKICBwYWRkaW5nOiAuNzVlbSAwOwp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUgaDQKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogNDVweCAwIDA7CiAgcGFkZGluZzogMS4yZW0gMCAwOwogIHdpZHRoOiAzMDBweDsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIGRpdiArIGRpdiBoNAp7CiAgbWFyZ2luLXRvcDogMDsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIHRhYmxlCnsKICBmbG9hdDogbGVmdDsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIHRhYmxlICsgdGFibGUKewogIG1hcmdpbi10b3A6IDA7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSB0ZAp7CiAgcGFkZGluZy10b3A6IDYwcHg7CiAgd2lkdGg6IDcwcHg7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSBkaXYgKyBkaXYKewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUgZGl2ICsgZGl2IGg0CnsKICBwYWRkaW5nLXRvcDogLjRlbTsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIGRpdiArIGRpdiB0YWJsZQp7CiAgbWFyZ2luLXRvcDogLjI1ZW07Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSBkaXYgKyBkaXYgdGQKewogIGJhY2tncm91bmQ6IDA7CiAgcGFkZGluZy10b3A6IDA7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSBwCnsKICBjbGVhcjogbGVmdDsKICBtYXJnaW4tdG9wOiAxZW07CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoKc2VjdGlvbi5zdXBwb3J0ICsgc2VjdGlvbgp7CiAgY2xlYXI6IGJvdGg7Cn0KCnVsLmZpZ3VyZXMKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCmFydGljbGUuZmVhdHVyZSBmaWd1cmUsCnNlY3Rpb24uZmlndXJlcyBmaWd1cmUsCnVsLmZpZ3VyZXMgbGkKewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiA1MCU7CiAgbWFyZ2luOiAxZW0gMCAuNWVtOwogIHBhZGRpbmc6IDA7Cn0KCnVsLmZpZ3VyZXMgbGkKewogIG1pbi1oZWlnaHQ6IDg1cHg7Cn0KCmFydGljbGUuZmVhdHVyZSBmaWd1cmUsCnNlY3Rpb24uZmlndXJlcyBmaWd1cmUsCnVsLmZpZ3VyZXMuYm9va3MgbGkKewogIG1pbi1oZWlnaHQ6IDEwMHB4Owp9CgphcnRpY2xlLmZlYXR1cmUgZmlndXJlIHNlY3Rpb24ub25lX2hhbGYgZmlndXJlLAphcnRpY2xlLmZlYXR1cmUgZmlndXJlIHNlY3Rpb24ub25lX3RoaXJkIGZpZ3VyZSwKYXJ0aWNsZS5mZWF0dXJlIGZpZ3VyZSBzZWN0aW9uLnR3b190aGlyZHMgZmlndXJlLApzZWN0aW9uLmZpZ3VyZXMub25lX2hhbGYgZmlndXJlLApzZWN0aW9uLmZpZ3VyZXMub25lX3RoaXJkIGZpZ3VyZSwKc2VjdGlvbi5maWd1cmVzLnR3b190aGlyZHMgZmlndXJlCnsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogMTAwJTsKfQoKYXJ0aWNsZS5mZWF0dXJlIGZpZ3VyZSBhLAp1bC5maWd1cmVzIGxpIGEKewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogNjAwOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgphcnRpY2xlLmZlYXR1cmUgZmlndXJlIGEgcCwKc2VjdGlvbi5maWd1cmVzIGZpZ3VyZSBhIHAsCnVsLmZpZ3VyZXMgbGkgYSBwCnsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDEzcHg7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBtYXJnaW46IC4yNWVtIDA7Cn0KCnNlY3Rpb24uZmlndXJlcyBmaWdjYXB0aW9uID4gYSB7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LXNpemU6IDE0cHg7Cn0KCmFydGljbGUuZmVhdHVyZSBmaWd1cmUgaW1nLApzZWN0aW9uLmZpZ3VyZXMgZmlndXJlIGltZywKdWwuZmlndXJlcyBsaSBhIGltZwp7CiAgZmxvYXQ6IGxlZnQ7CiAgbWF4LXdpZHRoOiAxNTBweDsKICBoZWlnaHQ6IGF1dG87CiAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKfQoKYXJ0aWNsZS5mZWF0dXJlIGZpZ2NhcHRpb24sCnNlY3Rpb24uZmlndXJlcyBmaWdjYXB0aW9uLAp1bC5maWd1cmVzIGxpIGEgc3Ryb25nLAp1bC5maWd1cmVzIGxpIGEgcAp7CiAgbWFyZ2luOiAwIDAgMCAxNTBweDsKICBwYWRkaW5nOiAwIDEuNWVtOwp9Cgp1bC5maWd1cmVzIGxpIGEKewogIGZvbnQtd2VpZ2h0OiA0MDA7Cn0KCnVsLmZpZ3VyZXMgbGkgYSBzdHJvbmcKewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTRweDsKICBtYXJnaW4tdG9wOiAtLjFlbTsKfQoKdWwuZmlndXJlcy5ib29rcyBsaSBpbWcKewogIG1heC13aWR0aDogMTA1cHg7Cn0KCnVsLmZpZ3VyZXMuYm9va3MgbGkgYSBzdHJvbmcsCnVsLmZpZ3VyZXMuYm9va3MgbGkgYSBwCnsKICBtYXJnaW4tbGVmdDogMTAwcHg7Cn0KCmFydGljbGUudHdvX2NvbHVtbnMgc2VjdGlvbiBmaWd1cmUsCnNlY3Rpb24udHdvX3RoaXJkcyBmaWd1cmUKewogIHdpZHRoOiAxMDAlOwp9CgphcnRpY2xlLnR3b19jb2x1bW5zIHNlY3Rpb24gZmlnY2FwdGlvbiwKc2VjdGlvbi50d29fdGhpcmRzIGZpZ2NhcHRpb24KewogIHBhZGRpbmctcmlnaHQ6IDA7Cn0KCnVsLmRlZmluaXRpb25zCnsKICBsaW5lLWhlaWdodDogMS41OwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAtLjc1ZW0gMCAwIDA7CiAgcGFkZGluZzogMDsKICAtbW96LWNvbHVtbi1jb3VudDogMjsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogMjsKICAtbXMtY29sdW1uLWNvdW50OiAyOwogIC1vLWNvbHVtbi1jb3VudDogMjsKICBjb2x1bW4tY291bnQ6IDI7CiAgLW1vei1jb2x1bW4tZ2FwOiAyMHB4OwogIC13ZWJraXQtY29sdW1uLWdhcDogMjBweDsKICAtbXMtY29sdW1uLWdhcDogMjBweDsKICAtby1jb2x1bW4tZ2FwOiAyMHB4OwogIGNvbHVtbi1nYXA6IDIwcHg7Cn0KCnVsLmRlZmluaXRpb25zIGxpCnsKICBmb250LXNpemU6IDE0cHg7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IC43NWVtIDA7CiAgLW1vei1jb2x1bW4tYnJlYWstaW5zaWRlOiBhdm9pZDsKICAtd2Via2l0LWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC1vLWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC1tcy1jb2x1bW4tYnJlYWstaW5zaWRlOiBhdm9pZDsKICBjb2x1bW4tYnJlYWstaW5zaWRlOiBhdm9pZDsKfQoKdWwuZGVmaW5pdGlvbnMgbGkgc3Bhbgp7CiAgZGlzcGxheTogYmxvY2s7Cn0KCnVsLmRlZmluaXRpb25zIGxpIGEKewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5vbmVfaGFsZiB1bC5kZWZpbml0aW9ucywKLm9uZV90aGlyZCB1bC5kZWZpbml0aW9ucywKLnR3b190aGlyZHMgdWwuZGVmaW5pdGlvbnMKewogIC1tb3otY29sdW1uLWNvdW50OiAxOwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAxOwogIC1tcy1jb2x1bW4tY291bnQ6IDE7CiAgLW8tY29sdW1uLWNvdW50OiAxOwogIGNvbHVtbi1jb3VudDogMTsKfQoKc2VjdGlvbiB1bAp7CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxLjY7CiAgbGlzdC1zdHlsZTogc3F1YXJlOwogIG1hcmdpbi1sZWZ0OiAxLjc1ZW07CiAgcGFkZGluZy1sZWZ0OiAwOwp9CgpzZWN0aW9uIGxpCnsKICBtYXJnaW4tYm90dG9tOiAuNzVlbTsKfQoKc2VjdGlvbiB1bC50d29fY29sdW1ucwp7CiAgbWFyZ2luOiAwOwp9CgpzZWN0aW9uIHVsLnR3b19jb2x1bW5zIGxpCnsKICBtYXJnaW46IC4yNWVtIDAgLjc1ZW0gMS41ZW07Cn0KCgovKiBVUERBVEVTICYgVFVUT1JJQUxTICovCgphcnRpY2xlLnR1dG9yaWFsIHsKICBtYXJnaW4tbGVmdDogMzQwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwp9CgphcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUKewogIHBvc2l0aW9uOiBzdGF0aWM7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgd2lkdGg6IGluaGVyaXQ7CiAgaGVpZ2h0OiBpbmhlcml0OwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luOiAwOwp9CgphcnRpY2xlLnR1dG9yaWFsIG5hdi5vdXRsaW5lLnRvYwp7CiAgbWFyZ2luOiAwOwogIHdpZHRoOiAyODBweDsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IC0zNDBweDsKICBib3gtc2hhZG93OiBub25lOwogIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IC8qIHRvIGlnbm9yZSB0aGUgZmFkZVRvZ2dsZSBvbiB3aWRlLWRpc3BsYXkgdHJlYXRtZW50ICovCiAgb3BhY2l0eTogMSAhaW1wb3J0YW50OyAvKiB0byBpZ25vcmUgdGhlIGZhZGVUb2dnbGUgb24gd2lkZS1kaXNwbGF5IHRyZWF0bWVudCAqLwp9CgoKYXJ0aWNsZS50dXRvcmlhbCBuYXYub3V0bGluZSBoMwp7CiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgIG1hcmdpbi1ib3R0b206IDFlbTsKfQoKYXJ0aWNsZS50dXRvcmlhbCBoMTp0YXJnZXQsCmFydGljbGUudHV0b3JpYWwgaDI6dGFyZ2V0LAphcnRpY2xlLnR1dG9yaWFsIGgzOnRhcmdldCwKYXJ0aWNsZS50dXRvcmlhbCBoNDp0YXJnZXQsCmFydGljbGUudHV0b3JpYWwgaDU6dGFyZ2V0CnsKICBwYWRkaW5nLXRvcDogNTBweDsKfQoKCnNlY3Rpb24uY2MsCnNlY3Rpb24uZGlzcXVzCnsKICBtYXJnaW4tbGVmdDogMzQwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIKewogIG1hcmdpbi10b3A6IC41ZW07Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciBoMwp7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbWFyZ2luLWJvdHRvbTogLjM1ZW07Cn0KCiNmaWx0ZXIgewogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXdlaWdodDogNjAwOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIgdWwKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciBsaQp7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAuM2VtIDA7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciBsaSBpbnB1dAp7CiAgbWFyZ2luLXJpZ2h0OiA1cHg7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciAub25lX2hhbGYgdWwgbGkKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbi10b3A6IDA7CiAgd2lkdGg6IDUwJTsKfQoKLnBhZ2UgaGVhZGVyIHNlY3Rpb24uZmlsdGVyIGRpdi50YWdfZmlsdGVyCnsKICBjbGVhcjogYm90aDsKICBmbG9hdDogbGVmdDsKICBwYWRkaW5nLXRvcDogMWVtOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIgZGl2LnRhZ19maWx0ZXIgbGFiZWwKewogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKaW5wdXQuc2VhcmNoIHsKICBiYWNrZ3JvdW5kOiAjZWVlOwogIGJvcmRlcjogMDsKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIG1hcmdpbjogMCAwIDAgLjVlbTsKICBwYWRkaW5nOiAuMmVtIC4zZW07CiAgdmVydGljYWwtYWxpZ246IC0ycHg7CiAgd2lkdGg6IDU0MHB4Owp9CgoudHV0b3JpYWxfbGlzdGluZwp7CiAgbWFyZ2luOiAxLjVlbSAwIDIuNWVtOwogIHBhZGRpbmc6IDA7Cn0KCi50dXRvcmlhbF9saXN0aW5nIGgzCnsKICBmb250LXNpemU6IDE2cHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi50dXRvcmlhbF9saXN0aW5nIC5kYXRlLAoudHV0b3JpYWxfbGlzdGluZyAuYXV0aG9yLAoudHV0b3JpYWxfbGlzdGluZyAudGFncywKLnR1dG9yaWFsX2xpc3RpbmcgLnRhZywKLnR1dG9yaWFsX2xpc3RpbmcgLmNsYXNzZXMKewogIGZsb2F0OiBsZWZ0Owp9CgoudHV0b3JpYWxfbGlzdGluZyAuZGF0ZSwKLnR1dG9yaWFsX2xpc3RpbmcgLmF1dGhvciwKLnR1dG9yaWFsX2xpc3RpbmcgLmJyb3dzZXJzLAoudHV0b3JpYWxfbGlzdGluZyAudGFncywKLnR1dG9yaWFsX2xpc3RpbmcgLmNsYXNzZXMKewogIGhlaWdodDogMThweDsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLmF1dGhvciwKLnR1dG9yaWFsX2xpc3RpbmcgLnRhZ3MKewogIG1hcmdpbi1yaWdodDogMS41ZW07Cn0KCi50dXRvcmlhbF9saXN0aW5ncyAudGFncwp7Cgp9CgoudHV0b3JpYWxfbGlzdGluZyAuYXV0aG9yIHsKICBtYXJnaW4tbGVmdDogMS41ZW07Cn0KCi50dXRvcmlhbF9saXN0aW5nIC5hdXRob3IgaW1nLmF1dGhvcl9pbWFnZQp7CiAgd2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAxOHB4OwogIG1hcmdpbi1sZWZ0OiAwLjI1ZW07CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLnRhZwp7CiAgY29sb3I6ICM4ODg7CiAgZm9udC1zaXplOiAxMXB4OwogIG1hcmdpbjogMnB4IDAuNWVtIDAgMC41ZW07CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi50dXRvcmlhbF9saXN0aW5nIC50YWc6aG92ZXIsCi50dXRvcmlhbF9saXN0aW5nIC50YWc6Zm9jdXMKewogIGNvbG9yOiAjMzMzOwp9CgoudHV0b3JpYWxfbGlzdGluZyAuY2xhc3Nlcwp7CiAgbWFyZ2luLWxlZnQ6IDFlbTsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLmJyb3dzZXJzCnsKICBtYXJnaW46IDAgMS41ZW07Cn0KCi50dXRvcmlhbF9saXN0aW5nIC5zdW1tYXJ5CnsKICBjbGVhcjogbGVmdDsKICBwYWRkaW5nLXRvcDogLjVlbTsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLmJ1dHRvbmxpbmsKewogIGRpc3BsYXk6IG5vbmU7Cn0KCmhlYWRlci50dXRvcmlhbCB7CiAgcGFkZGluZzogMWVtIDAuOWVtOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCmhlYWRlci50dXRvcmlhbCBoZ3JvdXAgKyBzZWN0aW9uCnsKICBtYXJnaW4tdG9wOiAwOwp9CgpoZWFkZXIudHV0b3JpYWwgLmJ5bGluZQp7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKaGVhZGVyLnR1dG9yaWFsIGFzaWRlCnsKICBmbG9hdDogbGVmdDsKICB3aWR0aDogNTAlOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCmhlYWRlci50dXRvcmlhbCBhc2lkZQp7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCmhlYWRlci50dXRvcmlhbCBzZWN0aW9uIGgzLApoZWFkZXIudHV0b3JpYWwgc2VjdGlvbgp7CiAgY29sb3I6ICMzMzM7CiAgZm9udC1zaXplOiAxM3B4OwogIHRleHQtdHJhbnNmb3JtOiBub25lOwp9CmhlYWRlci50dXRvcmlhbCBzZWN0aW9uIGgyIHsKICBmb250LXNpemU6IDI2cHg7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IDAgMCAuMjVlbTsKfQoKaGVhZGVyLnR1dG9yaWFsIC5ieWxpbmUKewogIG1hcmdpbi10b3A6IC43NWVtOwp9CgpoZWFkZXIudHV0b3JpYWwgLmJ5bGluZSBoZ3JvdXAKewogIGZsb2F0OiBub25lOwogIHBhZGRpbmc6IDA7CiAgd2lkdGg6IDEwMCU7Cn0KCmhlYWRlci50dXRvcmlhbCAuYnlsaW5lIGltZwp7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDUwcHg7CiAgaGVpZ2h0OiA1MHB4OwogIG1hcmdpbjogLjJlbSAuNzVlbSAwIDA7Cn0KCmhlYWRlci50dXRvcmlhbCAuYnlsaW5lIGgyCnsKICBmb250LXdlaWdodDogMzAwOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWFyZ2luOiAwIDAgLjE1ZW07Cn0KCmhlYWRlci50dXRvcmlhbCAuYnlsaW5lIGgyIHN0cm9uZwp7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5ieWxpbmUgaDIgc3Bhbgp7CiAgY29sb3I6ICMzMzM7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC13ZWlnaHQ6IDMwMDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5icm93c2VyX3N1cHBvcnQKewogIGZvbnQtc2l6ZTogMTJweDsKICBwYWRkaW5nLXRvcDogMWVtOwogIHdpZHRoOiA2MzJweDsKfQoKaGVhZGVyLnR1dG9yaWFsIGFzaWRlIGEKewogIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5icm93c2VyX3N1cHBvcnQgaDMKewogIGZsb2F0OiBsZWZ0OwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LXdlaWdodDogNjAwOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWFyZ2luOiAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCmhlYWRlci50dXRvcmlhbCAuYnJvd3Nlcl9zdXBwb3J0IHAKewogIGZsb2F0OiBsZWZ0OwogIGZvbnQtc2l6ZTogMTJweDsKICBsaW5lLWhlaWdodDogMS41OwogIG1hcmdpbjogMDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5jb21wYXRpYmxlLWJsb2NrIHsKICBmb250LXNpemU6IHNtYWxsOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQpoZWFkZXIudHV0b3JpYWwgI25vdGNvbXBhdGlibGUgewogIGNvbG9yOiByZWQ7Cn0KCmhlYWRlci50dXRvcmlhbCAjY29tcGF0aWJsZSB7CiAgY29sb3I6IGdyZWVuOwp9CgoucmVkaXJlY3Rfbm90aWZpY2F0aW9uIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmhlYWRlci50dXRvcmlhbCAuZGF0ZSB0aW1lIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCmFydGljbGUudHV0b3JpYWwgZmlndXJlCnsKICBkaXNwbGF5OiBibG9jazsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmFydGljbGUudHV0b3JpYWwgc2VjdGlvbiB7CiAgb3ZlcmZsb3c6IHZpc2libGU7IC8qIE1ha2Ugc3VyZSBGQUNUIGFuZCBUSVAgdGV4dCBpc24ndCBjdXQgb2ZmICovCn0KCmFydGljbGUudHV0b3JpYWwgLm5vdGljZSB7CiAgYmFja2dyb3VuZDogaHNsYSg2MCwgNzAlLCA5MiUsIDEpOwogIHBhZGRpbmc6IDRweCAxMHB4OwogIGJvcmRlcjogMXB4IHNvbGlkIGhzbGEoNDcsIDEwMCUsIDcyJSwgMSk7CiAgYm9yZGVyLXJhZGl1czogMnB4Owp9CgphcnRpY2xlLnR1dG9yaWFsIC5ub3RpY2UuZmFjdCwKYXJ0aWNsZS50dXRvcmlhbCAubm90aWNlLnRpcCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHBhZGRpbmctbGVmdDogMjVweDsKfQphcnRpY2xlLnR1dG9yaWFsIC5ub3RpY2UuZmFjdDpiZWZvcmUsCmFydGljbGUudHV0b3JpYWwgLm5vdGljZS50aXA6YmVmb3JlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAtNXB4OwogIGxlZnQ6IC0xMHB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVooLTMwZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlWigtMzBkZWcpOwogIC1vLXRyYW5zZm9ybTogcm90YXRlWigtMzBkZWcpOwogIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVooLTMwZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZVooLTMwZGVnKTsKICBjb2xvcjogcmdiKDIzNywgNzEsIDUwKTsKICBmb250LXdlaWdodDogYm9sZDsKICBjb250ZW50OiAiRmFjdCI7Cn0KYXJ0aWNsZS50dXRvcmlhbCAubm90aWNlLnRpcDpiZWZvcmUgewogIGNvbnRlbnQ6ICJUaXAiOwogIHRvcDogLTVweDsKICBsZWZ0OiAtNXB4Owp9CgphcnRpY2xlLnR1dG9yaWFsIGZpZ3VyZSBpbWcKewogIG1heC13aWR0aDogMTAwJTsKICBoZWlnaHQ6IGF1dG87CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKYXJ0aWNsZS50dXRvcmlhbCBmaWdjYXB0aW9uCnsKICBtYXJnaW4tdG9wOiAxZW07CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CgphcnRpY2xlLnR1dG9yaWFsIGg0IHsKICBmb250LXNpemU6IDE2cHg7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IDAgMCAuMjVlbTsKfQphcnRpY2xlLnR1dG9yaWFsICBibG9ja3F1b3RlLmNvbW1lbnRhcnkgewogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXNpemU6IDE0cHg7CiAgcGFkZGluZzogMjBweCAxMHB4IDIwcHggNDBweDsKICBib3JkZXItcmFkaXVzOiA3cHg7CiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7CiAgYm9yZGVyOiAycHggZGFzaGVkICNhZmNlYTk7CiAgYmFja2dyb3VuZDogI2VhZjJlODsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCmFydGljbGUudHV0b3JpYWwgYmxvY2txdW90ZS5jb21tZW50YXJ5IGNvZGUgewogIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQoKYXJ0aWNsZS50dXRvcmlhbCAudGFsa2luZ2hlYWQ6YmVmb3JlIHsKICBjb250ZW50OiAnJzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogLTIwcHg7CiAgdG9wOiAxMHB4OwogIHdpZHRoOiA1MHB4OwogIGhlaWdodDogNTBweDsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMHB4IC0xMHB4OwogIGJvcmRlci1yYWRpdXM6IDUwJTsKfQoKLnRvb2x0aXAgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLnRvb2x0aXAgLnByb3BlcnR5IHsKICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNmZmY7Cn0KLnRvb2x0aXAgLnByb3BlcnR5IC5rd2QgewogIGNvbG9yOiAjNTA4Qjg4Owp9Ci50b29sdGlwOmhvdmVyOmFmdGVyIHsKICBjb250ZW50OiBhdHRyKGRhdGEtdG9vbHRpcCk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44NSk7CiAgcGFkZGluZzogNXB4IDlweDsKICBjb2xvcjogI2ZmZjsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgbGVmdDogMDsKICB0b3A6IDI1cHg7CiAgd2lkdGg6IDM5MHB4OwogIHotaW5kZXg6IDEwMDsKfQoKLnBhZ2UgaGVhZGVyIC5kaXNxdXNfY29tbWVudHMgewogIGNsZWFyOiBib3RoOwogIGZsb2F0OiBsZWZ0OwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXdlaWdodDogNjAwOwogIG1hcmdpbjogMWVtIDAgMDsKfQoKLmNjIHAKewogIGZvbnQtc2l6ZTogODUlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKcHJlLnByZXR0eXByaW50IHsKICBtYXJnaW46IDFlbSBhdXRvOwogIHBhZGRpbmc6IDFlbTsKfQoKcHJlLnByZXR0eXByaW50LnNtYWxsIHsKICBwYWRkaW5nOiAwLjVlbTsKfQoKLyogUHJldHR5IHByaW50aW5nIHN0eWxlcy4gVXNlZCB3aXRoIHByZXR0aWZ5LmpzLiAqLwovKiBWaW0gc3VuYnVyc3QgdGhlbWUgYnkgRGF2aWQgTGVpYm92aWMgKi8KCnByZSAuc3RyLCBjb2RlIC5zdHIgeyBjb2xvcjogIzY1QjA0MjsgfSAvKiBzdHJpbmcgIC0gZ3JlZW4gKi8KcHJlIC5rd2QsIGNvZGUgLmt3ZCB7IGNvbG9yOiAjRTI4OTY0OyB9IC8qIGtleXdvcmQgLSBkYXJrIHBpbmsgKi8KcHJlIC5jb20sIGNvZGUgLmNvbSB7IGNvbG9yOiAjQUVBRUFFOyBmb250LXN0eWxlOiBpdGFsaWM7IH0gLyogY29tbWVudCAtIGdyYXkgKi8KcHJlIC50eXAsIGNvZGUgLnR5cCB7IGNvbG9yOiAjODliZGZmOyB9IC8qIHR5cGUgLSBsaWdodCBibHVlICovCnByZSAubGl0LCBjb2RlIC5saXQgeyBjb2xvcjogIzMzODdDQzsgfSAvKiBsaXRlcmFsIC0gYmx1ZSAqLwpwcmUgLnB1biwgY29kZSAucHVuIHsgY29sb3I6ICNmZmY7IH0gLyogcHVuY3R1YXRpb24gLSB3aGl0ZSAqLwpwcmUgLnBsbiwgY29kZSAucGxuIHsgY29sb3I6ICNmZmY7IH0gLyogcGxhaW50ZXh0IC0gd2hpdGUgKi8KcHJlIC50YWcsIGNvZGUgLnRhZyB7IGNvbG9yOiAjODliZGZmOyB9IC8qIGh0bWwveG1sIHRhZyAgICAtIGxpZ2h0IGJsdWUgKi8KcHJlIC5hdG4sIGNvZGUgLmF0biB7IGNvbG9yOiAjYmRiNzZiOyB9IC8qIGh0bWwveG1sIGF0dHJpYnV0ZSBuYW1lICAtIGtoYWtpICovCnByZSAuYXR2LCBjb2RlIC5hdHYgeyBjb2xvcjogIzY1QjA0MjsgfSAvKiBodG1sL3htbCBhdHRyaWJ1dGUgdmFsdWUgLSBncmVlbiAqLwpwcmUgLmRlYywgY29kZSAuZGVjIHsgY29sb3I6ICMzMzg3Q0M7IH0gLyogZGVjaW1hbCAtIGJsdWUgKi8KCnByZS5wcmV0dHlwcmludCwgY29kZS5wcmV0dHlwcmludCB7CiAgY29sb3I6IHdoaXRlOwogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7CiAgYm9yZGVyLXJhZGl1czogOHB4Owp9CgovKiBESVNBQkxFIFNFTEVDVElPTiAgKi8KCmhlYWRlci5tYWluLAojbG9nbywKLndhdGVybWFyaywKbmF2LAoubmF2LAouc2hhcmUsCi5ieWxpbmUgaW1nLAojaHRtbDViYWRnZSwKLmRpc3F1c19jb21tZW50cywKc2VjdGlvbi5kaXNxdXMKewogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW8tdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCgovKiBIRUxQRVJTICAqLwoKLmlyIHsgZGlzcGxheTogYmxvY2s7IGJvcmRlcjogMDsgdGV4dC1pbmRlbnQ6IC05OTllbTsgb3ZlcmZsb3c6IGhpZGRlbjsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IHRleHQtYWxpZ246IGxlZnQ7IGRpcmVjdGlvbjogbHRyOyB9Ci5pciBiciB7IGRpc3BsYXk6IG5vbmU7IH0KLmhpZGRlbiB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgdmlzaWJpbGl0eTogaGlkZGVuOyB9Ci52aXN1YWxseWhpZGRlbiB7IGJvcmRlcjogMDsgY2xpcDogcmVjdCgwIDAgMCAwKTsgaGVpZ2h0OiAxcHg7IG1hcmdpbjogLTFweDsgb3ZlcmZsb3c6IGhpZGRlbjsgcGFkZGluZzogMDsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMXB4OyB9Ci52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6YWN0aXZlLCAudmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmZvY3VzIHsgY2xpcDogYXV0bzsgaGVpZ2h0OiBhdXRvOyBtYXJnaW46IDA7IG92ZXJmbG93OiB2aXNpYmxlOyBwb3NpdGlvbjogc3RhdGljOyB3aWR0aDogYXV0bzsgfQouaW52aXNpYmxlIHsgdmlzaWJpbGl0eTogaGlkZGVuOyB9Ci5jbGVhcmZpeDpiZWZvcmUsIC5jbGVhcmZpeDphZnRlciB7IGNvbnRlbnQ6ICIiOyBkaXNwbGF5OiB0YWJsZTsgfQouY2xlYXJmaXg6YWZ0ZXIgeyBjbGVhcjogYm90aDsgfQouY2xlYXJmaXggeyB6b29tOiAxOyB9CgoKLyogR29vZ2xlIFBsdXMgSWNvbiAqLwojZ29vZ2xlX3BsdXNfcGFnZV9saW5rIHsKICBmbG9hdDogcmlnaHQ7Cn0KCiNnb29nbGVfcGx1c19wYWdlX2xpbmsgYSB7CiAgYmFja2dyb3VuZDogbm9uZTsKICBjb2xvcjogIzMzMzsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQ6IDEzcHgvMTZweCBhcmlhbCxzYW5zLXNlcmlmOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBwYWRkaW5nOiAwOwp9CgojZ29vZ2xlX3BsdXNfcGFnZV9saW5rIGEgc3BhbiB7CiAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2ltYWdlcy9pY29ucy9ncGx1cy0xNi5wbmcpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDE2cHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB0ZXh0LWluZGVudDogMTZweDsKICB3aWR0aDogMTZweDsKfQoKCiNsaXZlYmFubmVyIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiAtNTBweDsKICByaWdodDogLTk1cHg7CiAgYmFja2dyb3VuZDogIzUwOEI4ODsKICBjb2xvcjogd2hpdGU7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVooNDBkZWcpOwogIC1tb3otdHJhbnNmb3JtOiByb3RhdGVaKDQwZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGVaKDQwZGVnKTsKICAtby10cmFuc2Zvcm06IHJvdGF0ZVooNDBkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlWig0MGRlZyk7CiAgZm9udC1zaXplOiAyNXB4OwogIHBhZGRpbmc6IDVweCA3MHB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgei1pbmRleDogMTAwMDsKICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogMCA1MCU7CiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIC1vLXRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIHRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgYm94LXNoYWRvdzogMHB4IDBweCAxMHB4ICMyMjI7CiAgdGV4dC1zaGFkb3c6IDBweCAwcHggNXB4ICMwMDA7Cn0KCiNsaXZlYmFubmVyIC5yZWNvcmQgewogIGJhY2tncm91bmQtY29sb3I6IHJlZDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAxNXB4OwogIGhlaWdodDogMTVweDsKICBtYXJnaW4tYm90dG9tOiAycHg7Cn0KCmtiZCwgLmtiZCB7CiAgcGFkZGluZzogMC4xZW0gMC42ZW07CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwNCwgMjA0LCAyMDQpOwogIGZvbnQtc2l6ZTogMTFweDsKICBmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0NywgMjQ3LCAyNDcpOwogIGNvbG9yOiByZ2IoNTEsIDUxLCA1MSk7CiAgYm94LXNoYWRvdzogMCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwIDAgMCAycHggcmdiKDI1NSwgMjU1LCAyNTUpIGluc2V0OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luOiAwIDAuMWVtOwogIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYigyNTUsIDI1NSwgMjU1KTsKICBsaW5lLWhlaWdodDogMS41OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi8qIFBSSU5UICovCgpAbWVkaWEgcHJpbnQgewogICogeyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgZmlsdGVyOm5vbmUgIWltcG9ydGFudDsgLW1zLWZpbHRlcjogbm9uZSAhaW1wb3J0YW50OyB9CiAgYSwgYTp2aXNpdGVkIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KICBhW2hyZWZdOmFmdGVyIHsgY29udGVudDogIiAoIiBhdHRyKGhyZWYpICIpIjsgfQogIGFiYnJbdGl0bGVdOmFmdGVyIHsgY29udGVudDogIiAoIiBhdHRyKHRpdGxlKSAiKSI7IH0KICAuaXIgYTphZnRlciwgYVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlciwgYVtocmVmXj0iIyJdOmFmdGVyIHsgY29udGVudDogIiI7IH0KICBwcmUsIGJsb2NrcXVvdGUgeyBib3JkZXI6IDFweCBzb2xpZCAjOTk5OyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KICB0aGVhZCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsgfQogIHRyLCBpbWcgeyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KICBpbWcgeyBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgfQogIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfQogIC5wYWdlIHsgbWF4LXdpZHRoOiAxMDAlIH0KICBwLCBoMiwgaDMgeyBvcnBoYW5zOiAzOyB3aWRvd3M6IDM7IH0KICBoMiwgaDMgeyBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsgfQoKICBwcmUgLnN0ciwgY29kZSAuc3RyIHsgY29sb3I6ICMwNjA7IH0KICBwcmUgLmt3ZCwgY29kZSAua3dkIHsgY29sb3I6ICMwMDY7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgcHJlIC5jb20sIGNvZGUgLmNvbSB7IGNvbG9yOiAjNjAwOyBmb250LXN0eWxlOiBpdGFsaWM7IH0KICBwcmUgLnR5cCwgY29kZSAudHlwIHsgY29sb3I6ICM0MDQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgcHJlIC5saXQsIGNvZGUgLmxpdCB7IGNvbG9yOiAjMDQ0OyB9CiAgcHJlIC5wdW4sIGNvZGUgLnB1biB7IGNvbG9yOiAjNDQwOyB9CiAgcHJlIC5wbG4sIGNvZGUgLnBsbiB7IGNvbG9yOiAjMDAwOyB9CiAgcHJlIC50YWcsIGNvZGUgLnRhZyB7IGNvbG9yOiAjMDA2OyBmb250LXdlaWdodDogYm9sZDsgfQogIHByZSAuYXRuLCBjb2RlIC5hdG4geyBjb2xvcjogIzQwNDsgfQogIHByZSAuYXR2LCBjb2RlIC5hdHYgeyBjb2xvcjogIzA2MDsgfQoKICAucGFnZSBoZWFkZXIgLnNoYXJlLCBuYXYsIGhlYWRlciBoZ3JvdXAsIGEuZGlzcXVzX2NvbW1lbnRzIHsgZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fQp9CgoKLyogUkVTUE9OU0lWRSAqLwoKLyogR2V0IHVzIHByb21vdGVkIHRvIGEgY29tcG9zaXRlZCBsYXllciBmb3IgdGhlc2UgZWxlbWVudHMuIExlYXZlIG1vYmlsZQogICBvZmYgYmVjYXVzZSBpdCBhbHJlYWR5IHByb21vdGVzIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzLiBSZW1vdmUgdGhpcyB3aGVuCiAgIGRlc2t0b3AgZm9sbG93cyBzdWl0ZS4gKi8KCkBtZWRpYSBvbmx5IGFsbCBhbmQgKG1heC13aWR0aDogMTAyNHB4KSBhbmQgKG1heC1oZWlnaHQ6IDc2OHB4KQp7CiAgYm9keVtkYXRhLWhyZWY9J2hvbWUnXSwKICBib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10sCiAgYm9keVtkYXRhLWhyZWY9J2J1c2luZXNzJ10KICB7CiAgICAtbW96LWJhY2tncm91bmQtc2l6ZTogMTAyNHB4IDc2OHB4OwogICAgYmFja2dyb3VuZC1zaXplOiAxMDI0cHggNzY4cHg7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODBweCkgewogIGFydGljbGUudHV0b3JpYWwgbmF2Lm91dGxpbmUudG9jLmZpeGVkCiAgewogICAgbWF4LWhlaWdodDogbm9uZTsKICB9CgogIC5wYXR0ZXJuLWJnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gLnBhdHRlcm4tYmcgewogICAgYm9yZGVyLXJhZGl1czogNXB4OwogIH0KCiAgLnBhdHRlcm4tYmctbGlnaHRlciwKICBhcnRpY2xlLnNlY3Rpb25lZCA+IHNlY3Rpb246bm90KCNjbGFzc2VzKSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMXB4IDFweCAxMHB4ICNjY2M7CiAgfQoKICAucGFnZSBoZWFkZXIgLnNoYXJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7CgogIC5zdWJoZWFkZXIKICB7CiAgICBiYWNrZ3JvdW5kOiAjNjVBOEE1OwogICAgaGVpZ2h0OiBhdXRvOwogIH0KCiAgLnN1YmhlYWRlcjo6YmVmb3JlCiAgewogICAgY29udGVudDogJyc7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHotaW5kZXg6IC0xOwogIH0KCiAgLnN1YmhlYWRlcjo6YWZ0ZXIKICB7CiAgICAtbW96LWJveC1zaGFkb3c6IDAgM3B4IDEycHggNXB4IGJsYWNrOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCAxMnB4IDVweCBibGFjazsKICAgIC1vLWJveC1zaGFkb3c6IDAgM3B4IDEycHggNXB4IGJsYWNrOwogICAgLW1zLWJveC1zaGFkb3c6IDAgM3B4IDEycHggNXB4IGJsYWNrOwogICAgYm94LXNoYWRvdzogMCAzcHggMTJweCA1cHggYmxhY2s7CiAgICBjb250ZW50OiAnJzsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgei1pbmRleDogLTE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7OwogICAgdG9wOiAtMTBweDsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaAogIHsKICAgIGZvbnQtc2l6ZTogNDhweDsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLnN1YmhlYWRlciAuc2VhcmNoIGxhYmVsCiAgewogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgfQoKICAuc3ViaGVhZGVyIC5zZWFyY2ggaW5wdXQKICB7CiAgICBiYWNrZ3JvdW5kOiBoc2xhKDAsIDAlLCA5OSUsIDAuMik7CiAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiBoc2woMTc2LCAyNyUsIDEzJSk7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICB0ZXh0LWluZGVudDogNXB4OwogICAgd2lkdGg6IDU4MHB4OwogICAgb3V0bGluZTogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWxlZnQ6IDdweDsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaCBpbnB1dFtwbGFjZWhvbGRlcl06Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgewogICAgY29sb3I6IGhzbGEoMTc2LCAyNyUsIDMzJSwgMC40KTsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaCBpbnB1dDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGhzbGEoMTc2LCAyNyUsIDMzJSwgMC40KTsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcgogIHsKICAgIGNvbG9yOiAjYjBkMmQwOwogICAgcGFkZGluZy1sZWZ0OiAxNXB4OwogIH0KCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uLAogIGlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24KICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgLnBhZ2UgaGVhZGVyIC5zaGFyZSB7CiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA4NjBweCkgewogIC5wYWdlIGhlYWRlciAuc2hhcmUgewogICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDAwcHgpIHsKCiAgaGVhZGVyLm1haW4sCiAgLndhdGVybWFyaywKICBhcnRpY2xlLnR1dG9yaWFsIG5hdi5vdXRsaW5lLnRvYy5maXhlZAogICB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICB9CgogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX2hhbGYgICB7CiAgICB3aWR0aDogNDUlOwogICAgbWF4LWhlaWdodDogMzUwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogIH0KICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV90aGlyZCAgeyB3aWR0aDogMjglOyB9CiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi50d29fdGhpcmRzIHsgd2lkdGg6IDU4JTsgfQoKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV9oYWxmLAogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX3RoaXJkLAogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX3F1YXJ0ZXIsCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi50d29fdGhpcmRzCiAgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW46IDAgMCAyJSAyJTsKICB9CgogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX2hhbGYgKyBzZWN0aW9uLm9uZV9oYWxmICsgc2VjdGlvbiwKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLnR3b190aGlyZHMgKyBzZWN0aW9uLm9uZV90aGlyZCArIHNlY3Rpb24sCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQgKyBzZWN0aW9uLnR3b190aGlyZHMgKyBzZWN0aW9uCiAgewogICAgY2xlYXI6IGJvdGg7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgfQoKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV9oYWxmICsgc2VjdGlvbi5vbmVfaGFsZiArIHNlY3Rpb24gKyBzZWN0aW9uLAogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24udHdvX3RoaXJkcyArIHNlY3Rpb24ub25lX3RoaXJkICsgc2VjdGlvbiArIHNlY3Rpb24sCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQgKyBzZWN0aW9uLnR3b190aGlyZHMgKyBzZWN0aW9uICsgc2VjdGlvbgogIHsKICAgIG1hcmdpbi10b3A6IDA7CiAgfQoKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV9oYWxmOm50aC1jaGlsZCgybiArIDEpLAogIC50aGlyZHMgc2VjdGlvbi5vbmVfdGhpcmQ6bnRoLWNoaWxkKDNuICsgMSksCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQ6Zmlyc3QtY2hpbGQKICB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogIGFydGljbGUuc2VjdGlvbmVkICNzdXBwb3J0LAogIGFydGljbGUuc2VjdGlvbmVkICN1cGRhdGVzCiAgewogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogNDUlOwogICAgbWFyZ2luOiAwIDAgMiUgMCAhaW1wb3J0YW50OwogIH0KCiAgYXJ0aWNsZS5zZWN0aW9uZWQgI3VwZGF0ZXMKICB7CiAgICBtYXJnaW46IDAgMiUgMiUgMCAhaW1wb3J0YW50OwogIH0KCiAgLyogSG9tZXBhZ2UgKi8KCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQgIHsgd2lkdGg6IDMyJTsgfQoKICBuYXYub3V0bGluZS50b2MKICB7CiAgICBib3gtc2hhZG93OiAxcHggMXB4IDEwcHggI2NjYyAhaW1wb3J0YW50OwogIH0KCiAgLnBhdHRlcm4tYmctbGlnaHRlciwKICBhcnRpY2xlLnNlY3Rpb25lZCA+IHNlY3Rpb246bm90KCNjbGFzc2VzKSB7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIG5hdi5vdXRsaW5lLnRvYy5maXhlZAogIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogNTBweDsKICAgIGxlZnQ6IDUwJTsKICAgIG1hcmdpbi1sZWZ0OiAtNTAwcHg7CiAgICBtYXgtaGVpZ2h0OiA1MjVweDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMDBweCkgewogICNob21lX21lbnUge30KICAjdHV0b3JpYWxzX21lbnUge30KICAjdXBkYXRlc19tZW51IHt9CiAgI2ZlYXR1cmVzX3Nob3cgeyB9CiAgI3NsaWRlc19tZW51IHsgfQogICNyZXNvdXJjZXNfbWVudSB7fQogICNwcm9maWxlc19tZW51IHsgIH0KICAjY29udHJpYl9tZW51IHsgIH0KICAjc2VhcmNoX3Nob3cgc3BhbiB7IGRpc3BsYXk6IG5vbmU7IH0KCiAgLnBhZ2UsCiAgLnBhZ2UgaGVhZGVyLAogIGhlYWRlciwKICAuc3ViaGVhZGVyIGRpdiwKICAubmF2LAogICN1cGRhdGVzX2xpc3QKICB7CiAgICB3aWR0aDogaW5oZXJpdCAhaW1wb3J0YW50OwogIH0KCiAgLnBhZ2UgewogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIH0KCiAgLnBhZ2UuY3VycmVudAogIHsKICAgIG1hcmdpbi10b3A6IDBlbTsKICB9CgogIGhlYWRlci5tYWluCiAgewogICAgcGFkZGluZzogMDsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgd2lkdGg6IDEwMCU7CiAgfQoKICBoZWFkZXIubWFpbiBuYXYKICB7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIGhlYWRlciBoZ3JvdXAgKyBzZWN0aW9uCiAgewogICAgZmxvYXQ6IG5vbmU7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsLAogIHNlY3Rpb24uY2MsCiAgc2VjdGlvbi5kaXNxdXMKICB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogIG5hdi5vdXRsaW5lLnRvYwogIHsKICAgIG1hcmdpbi1ib3R0b206IDJlbTsKICAgIHBhZGRpbmc6IDA7CiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLAogIHNlY3Rpb24sCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbiwKICBzZWN0aW9uLmxpbmtfdGFyZ2V0LAogIC5wYWdlIGhlYWRlcgogIHsKICAgIHBhZGRpbmc6IDFlbSAxLjI1ZW07CiAgfQoKICBzZWN0aW9uLm9uZV9oYWxmLAogIHNlY3Rpb24ub25lX3RoaXJkLAogIHNlY3Rpb24ub25lX3F1YXJ0ZXIsCiAgc2VjdGlvbi50d29fdGhpcmRzCiAgewogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDsKICB9CgogIC5wYWdlIGhlYWRlciAuc2hhcmUgbGkKICB7CiAgICBwb3NpdGlvbjogc3RhdGljOwogIH0KCiAgLnBhZ2UgaGVhZGVyIC5zaGFyZSB1bAogIHsKICAgIG1hcmdpbi10b3A6IDFlbTsKICB9CgogIC5wYWdlIGhlYWRlciAuc2hhcmUgbGkKICB7CiAgICBkaXNwbGF5OiBpbmxpbmU7CiAgfQoKICAvKiBIb21lcGFnZSAqLwoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGhlYWRlci50d29fY29sdW1ucwogIHsKICAgIHBhZGRpbmc6IDIlOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwLAogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gaGVhZGVyLnR3b19jb2x1bW5zIHAKICB7CiAgICBmbG9hdDogbm9uZTsKICAgIHdpZHRoOiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGhlYWRlci50d29fY29sdW1ucyBoZ3JvdXAgaDEsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwIGgyCiAgewogICAgZm9udC1zaXplOiAyMjUlOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBoZWFkZXIudHdvX2NvbHVtbnMgcAogIHsKICAgIG1hcmdpbjogLjVlbSAwIDA7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIC5vbmVfdGhpcmQKICB7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiBpbmhlcml0OwogICAgbWFyZ2luLWxlZnQ6IDIlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAyJTsKICAgIHdpZHRoOiAyOCUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gLm9uZV90aGlyZDpmaXJzdC1jaGlsZAogIHsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIC5vbmVfdGhpcmQgYQogIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGFydGljbGUucHJvZmlsZQogIHsKICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICBtYXJnaW46IDIlIDAgMCAyJSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDMyJSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpCiAgewogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICB9CgogIC8qIFR1dG9yaWFscyAmIFVwZGF0ZXMgKi8KCiAgLnBhZ2UgaGVhZGVyIHNlY3Rpb24uZmlsdGVyIGRpdi50YWdfZmlsdGVyCiAgewogICAgd2lkdGg6IDEwMCU7CiAgfQoKICAucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIgZGl2LnRhZ19maWx0ZXIgaW5wdXQKICB7CiAgICB3aWR0aDogOTAlOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IC41ZW0gMDsKICB9CgogIC8qIFByb2ZpbGVzICovCgogIGJvZHlbZGF0YS1ocmVmPSJwcm9maWxlcyJdIC5wcm9maWxlOmZpcnN0LWNoaWxkLAogIGJvZHlbZGF0YS1ocmVmPSJwcm9maWxlcyJdIC5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpCiAgewogICAgbWFyZ2luLWxlZnQ6IDIlOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9InByb2ZpbGVzIl0gLnByb2ZpbGU6Zmlyc3QtY2hpbGQsCiAgYm9keVtkYXRhLWhyZWY9InByb2ZpbGVzIl0gLnByb2ZpbGU6bnRoLWNoaWxkKDJuICsgMSkKICB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogIGFydGljbGUucHJvZmlsZQogIHsKICAgIG1hcmdpbi1sZWZ0OiAyJTsKICAgIHdpZHRoOiA0OSU7CgogIH0KCiAgYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24KICB7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICB9CgogIC5wcm9maWxlIC5tYXAsCiAgLnByb2ZpbGUgLmxpc3QtYXJ0aWNsZXMgc3BhbgogIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAucHJvZmlsZSAubGlzdC1hcnRpY2xlcwogIHsKICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50OwogICAgY29sb3I6ICM2NjYgIWltcG9ydGFudDsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcwogIHsKICAgIG1hcmdpbjogMi43NWVtIDAgMCA5NHB4OwogICAgcG9zaXRpb246IHN0YXRpYzsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcwogIHsKICAgIHdpZHRoOiA3MCU7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4NjBweCkgewoKICAjaG9tZV9tZW51IHt9CiAgI3R1dG9yaWFsc19tZW51IHt9CiAgI3VwZGF0ZXNfbWVudSB7fQogICNmZWF0dXJlc19zaG93IHsgfQogICNzbGlkZXNfbWVudSB7IH0KICAjcmVzb3VyY2VzX21lbnUge30KICAjd2h5X21lbnUge30KICAjY29udHJpYl9tZW51IHsgZGlzcGxheTogbm9uZTsgfQogICNzZWFyY2hfc2hvdyBzcGFuIHsgZGlzcGxheTogbm9uZTsgfQoKICBoZWFkZXIubWFpbiBuYXYgdWwgbGkgYSwgI2hvbWVfaG9ybnMKICBoZWFkZXIubWFpbiBuYXYgdWwgbGkjZmVhdHVyZXNfc2hvdywKICBoZWFkZXIubWFpbiBoMQogIHsKICB9CgogIGhlYWRlci5tYWluIG5hdiB1bCBsaSNmZWF0dXJlc19zaG93IHsKICB9CgogIGhlYWRlci5tYWluIG5hdiB1bCBsaSNzZWFyY2hfc2hvdwogIHsKICAgIGZsb2F0OiByaWdodDsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIuZmVhdHVyZXMKICB7CiAgICBiYWNrZ3JvdW5kOiAjNWZhNGEwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIuZmVhdHVyZXMgaDIKICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgaGVhZGVyLm1haW4gLnN1YmhlYWRlciAjZmVhdHVyZXNfaGlkZQogIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgcGFkZGluZzogMnB4IDAgMCAxMHB4OwogICAgd2lkdGg6IDI0cHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgfQoKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bAogIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMCAwIC41ZW07CiAgICB3aWR0aDogaW5oZXJpdDsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIgLmZlYXR1cmVzIGxpCiAgewogICAgZmxvYXQ6IGxlZnQ7CiAgfQoKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyLnNlYXJjaAogIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjVhOGE1OwogIG1hcmdpbjogMCAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDVweDsKICAgICAgICBmb250LXNpemU6IDEuNmVtOwogIGNsZWFyOiBib3RoOwogIH0KCiAgaGVhZGVyLm1haW4gLnN1YmhlYWRlci5zZWFyY2ggbGFiZWwgc3BhbiwKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyLnNlYXJjaCBpbWcKICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgaGVhZGVyLm1haW4gLnN1YmhlYWRlci5zZWFyY2ggaW5wdXQKICB7CiAgd2lkdGg6IDEwMCU7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIC5wYWdlIGhlYWRlci50d29fY29sdW1ucyBzZWN0aW9uLAogIC5wYWdlIGhlYWRlciBoZ3JvdXAsCiAgLnBhZ2UgaGVhZGVyIHNlY3Rpb24KICB7CiAgICBmbG9hdDogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogIH0KCiAgLnBhZ2UgaGVhZGVyID4gaGdyb3VwOmZpcnN0LWNoaWxkIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkgewogICNob21lX21lbnUge30KICAjdHV0b3JpYWxzX21lbnUge30KICAjdXBkYXRlc19tZW51IHt9CiAgI2ZlYXR1cmVzX3Nob3cgeyB9CiAgI3NsaWRlc19tZW51IHsgfQogICNyZXNvdXJjZXNfbWVudSB7fQogICNwcm9maWxlc19tZW51IHsgZGlzcGxheTogbm9uZTsgfQogICNjb250cmliX21lbnUgeyBkaXNwbGF5OiBub25lOyB9CiAgI3NlYXJjaF9zaG93IHNwYW4geyBkaXNwbGF5OiBub25lOyB9CgoKICBoZWFkZXIubWFpbiB7CiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50OwogIH0KCiAgaGVhZGVyLm1haW4gI2hvbWVfaG9ybnMKICB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW46IC4xZW07CiAgICBwYWRkaW5nOiAwLjRlbSAwLjZlbTsKICB9CgogIGhlYWRlci5tYWluICNob21lX2hvcm5zIGltZyB7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMjRweDsKICB9CgogIGhlYWRlci5tYWluIG5hdiBsaTpmaXJzdC1jaGlsZCwKICAubmF2CiAgewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZQogIHsKICAgIG1hcmdpbjogMDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gaGVhZGVyCiAgewogICAgbWFyZ2luLWJvdHRvbTogMDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI2NsYXNzZXMKICB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIC5vbmVfdGhpcmQsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAub25lX3RoaXJkOmZpcnN0LWNoaWxkCiAgewogICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CgogICAgd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gc2VjdGlvbi5saW5rX3RhcmdldCBhCiAgewogICAgaGVpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwOwogIH0KCiAgLnBhZ2UKICB7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICB9CgogIHNlY3Rpb24KICB7CiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgYXJ0aWNsZS5mZWF0dXJlIGZpZ3VyZSwKICBzZWN0aW9uLmZpZ3VyZXMgZmlndXJlLAogIHVsLmZpZ3VyZXMgbGkKICB7CiAgICBmbG9hdDogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogIH0KCiAgLyogSG9tZXBhZ2UgKi8KCiAgI3VwZGF0ZXNfdGl0bGUsCiAgI3VwZGF0ZXNfYmFkZ2UKICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjc3RhcnQKICB7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICB3aWR0aDogaW5oZXJpdDsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdICNsb2dvLAogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI3VwZGF0ZXMKICB7CiAgICBwb3NpdGlvbjogc3RhdGljOwogICAgaGVpZ2h0OiBpbmhlcml0OwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcwogIHsKICAgIG1hcmdpbjogMi41JSAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAyJSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDk2JSAhaW1wb3J0YW50OwogIH0KfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsKCiAgI2hvbWVfbWVudSB7fQogICN0dXRvcmlhbHNfbWVudSB7fQogICN1cGRhdGVzX21lbnUge30KICAjZmVhdHVyZXNfc2hvdyB7fQogICNzbGlkZXNfbWVudSB7IGRpc3BsYXk6IG5vbmU7IH0KICAjcmVzb3VyY2VzX21lbnUge30KICAjcHJvZmlsZXNfbWVudSB7IGRpc3BsYXk6IG5vbmU7IH0KICAjY29udHJpYl9tZW51IHsgZGlzcGxheTogbm9uZTsgfQogICNzZWFyY2hfc2hvdyBzcGFuIHsgZGlzcGxheTogbm9uZTsgfQoKICB1bC5kZWZpbml0aW9ucwogIHsKICAgIC1tb3otY29sdW1uLWNvdW50OiAwOwogICAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDA7CiAgICAtbXMtY29sdW1uLWNvdW50OiAwOwogICAgLW8tY29sdW1uLWNvdW50OiAwOwogICAgY29sdW1uLWNvdW50OiAwOwogIH0KCiAgLyogUHJvZmlsZXMgKi8KCiAgYXJ0aWNsZS5wcm9maWxlCiAgewogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIGFydGljbGUucHJvZmlsZSBzZWN0aW9uCiAgewogICAgaGVpZ2h0OiBpbmhlcml0OwogICAgbWFyZ2luOiAuNzVlbSAwICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYm90dG9tOiAwOwogICAgcmlnaHQ6IDA7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMmVtOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMDsKICAgIHRvcDogYXV0byAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3cteTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiA1cHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUM0OTM2OwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiB0b3AgMC4ycyBlYXNlLWluLW91dDsKICAgIHRyYW5zaXRpb246IHRvcCAwLjJzIGVhc2UtaW4tb3V0OwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlIGgzIHsKICAgIG1hcmdpbjogMHB4ICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUgdWwgewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgewogICAgdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBib3R0b206IDAgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJTsKICAgIHdpZHRoOiAxMDAlOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzRlNGU0ZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDEycHggIzI1MjUyNTsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IG5vbmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50OwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCAgdWwgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIGgzIHsKICAgIG1hcmdpbjogMWVtOwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCB1bCBhIHsKICAgIGNvbG9yOiAjZGRkOwogICAgbWFyZ2luOiAwOwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCB1bCBhOmFjdGl2ZSB7CiAgICBjb2xvcjogI2RkZDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgYTp2aXNpdGVkIHsKICAgIGNvbG9yOiAjZGRkOwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCB1bCB1bCBhIHsKICAgIGNvbG9yOiAjYmJiOwogICAgY29sb3I6ICNiYmIgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgIGE6YWN0aXZlIHsKICAgIGNvbG9yOiAjYmJiOwogICAgY29sb3I6ICNiYmIgIWltcG9ydGFudDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgdWwgYTp2aXNpdGVkIHsKICAgIGNvbG9yOiAjYmJiICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIHVsIHVsIHVsIGEgewogICAgY29sb3I6ICM5OTkgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgdWwgYTphY3RpdmUgewogICAgY29sb3I6ICM5OTkgIWltcG9ydGFudDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgdWwgYTp2aXNpdGVkIHsKICAgIGNvbG9yOiAjOTk5ICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIG5hdiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUM0OTM2ICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogd2hpdGU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLXRvcDogNHB4ICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIG5hdiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgY29sb3I6IHdoaXRlOwogICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgbmF2Lm91dGxpbmUudG9jIHVsIHsKICAgIG1hcmdpbi1sZWZ0OiAxZW07CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIGgzIHsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIG5hdiBsaSB7CiAgICBtYXJnaW4tYm90dG9tOiAxZW07CiAgICBmb250LXNpemU6MTZweDsKICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgfQoKICAucHJvZmlsZSAuYXJ0aWNsZXMKICB7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcyBsaQogIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmUgIWltcG9ydGFudDsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBtYXJnaW4tbGVmdDogMWVtOwogICAgdGV4dC1pbmRlbnQ6IC0xLjVlbTsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcyBhCiAgewogICAgbGlzdC1zdHlsZTogbm9uZSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgfQoKCiAgLnR3b19jb2x1bW5zCiAgewogICAgLW1vei1jb2x1bW4tY291bnQ6IDE7CiAgICAtby1jb2x1bW4tY291bnQ6IDE7CiAgICAtbXMtY29sdW1uLWNvdW50OiAxOwogICAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDE7CiAgICBjb2x1bW4tY291bnQ6IDE7CiAgfQoKICBkaXYub25lX3F1YXJ0ZXIsCiAgZGl2Lm9uZV9oYWxmICAgIHsgZmxvYXQ6IGxlZnQ7IH0KICBkaXYub25lX3F1YXJ0ZXIgewogICAgd2lkdGg6IDUwJTsKICAgIHBhZGRpbmctYm90dG9tOiAuNzVlbTsKICB9CiAgZGl2Lm9uZV9oYWxmICAgIHsgd2lkdGg6IDEwMCU7IH0KCiAgLyogSG9tZXBhZ2UgKi8KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcy5mZWVkIGxpCiAgewogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiYmI7CiAgICBwYWRkaW5nOiAuMjVlbSAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI3VwZGF0ZXMuZmVlZCBsaTpmaXJzdC1jaGlsZAogIHsKICAgIGJvcmRlci10b3A6IDA7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdICN1cGRhdGVzLmZlZWQgbGkgc3Bhbi5ieWxpbmUsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcy5mZWVkIGxpIHNwYW4uZGV0YWlscwogIHsKICAgIGRpc3BsYXk6IGlubGluZTsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI3VwZGF0ZXMuZmVlZCBsaSBzcGFuLmNsYXNzZXMsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcy5mZWVkIGxpIHNwYW4udHlwZQogIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGFydGljbGUucHJvZmlsZSB7IHdpZHRoOiA0OSUgIWltcG9ydGFudDsgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24geyBwYWRkaW5nOiAwIDQlICFpbXBvcnRhbnQ7IH0KICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGFydGljbGUucHJvZmlsZTpudGgtY2hpbGQoM24gKyAxKSB7IG1hcmdpbi1sZWZ0OiAyJSAhaW1wb3J0YW50OyB9CiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBhcnRpY2xlLnByb2ZpbGU6bnRoLWNoaWxkKDJuICsgMSkgeyBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OyB9CgogIG5hdi50b2MgewogICAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBoZWlnaHQ6IDVweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlZDQ3MzI7CiAgfQoKICAucGFnZSBoZWFkZXIgLnNoYXJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KSB7CiAgI2hvbWVfbWVudSB7fQogICN0dXRvcmlhbHNfbWVudSB7fQogICN1cGRhdGVzX21lbnUge30KICAjZmVhdHVyZXNfc2hvdyB7IGRpc3BsYXk6IG5vbmU7IH0KICAjc2xpZGVzX21lbnUgeyBkaXNwbGF5OiBub25lOyB9CiAgI3Jlc291cmNlc19tZW51IHt9CiAgI3Byb2ZpbGVzX21lbnUgeyBkaXNwbGF5OiBub25lOyB9CiAgI2NvbnRyaWJfbWVudSB7IGRpc3BsYXk6IG5vbmU7IH0KICAjc2VhcmNoX3Nob3cgc3BhbiB7IGRpc3BsYXk6IG5vbmU7IH0KCiAgbmF2Lm91dGxpbmUgewogICAgbWF4LWhlaWdodDogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgLnBhZ2UsCiAgLnBhZ2UuY3VycmVudCwKICAucGFnZSBoZWFkZXIKICB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgfQoKICAucGFnZSBoZWFkZXIudHV0b3JpYWwgaDEgewogICAgIGZvbnQtc2l6ZTogMjVweCAhaW1wb3J0YW50OwogIH0KCiAgaGVhZGVyLm1haW4gaDEKICB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxvYXQ6IGxlZnQ7CiAgfQoKCiAgaGVhZGVyLm1haW4gaDEKICB7CiAgICBtYXJnaW46IC4xZW07CiAgICBwYWRkaW5nOiAwLjRlbSAwLjZlbTsKICB9CgogIGhlYWRlci50dXRvcmlhbCAuYnJvd3Nlcl9zdXBwb3J0IHsKICAgIG1hcmdpbjogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgaGVhZGVyLm1haW4gbmF2IHVsIGxpI2ZlYXR1cmVzX3Nob3cgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIuc2VhcmNoCiAgewogICAgbWFyZ2luOiAuMTVlbSAwIDAgLjVlbTsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsCiAgewogICAgbWFyZ2luLWxlZnQ6IDEycHg7CiAgICB3aWR0aDogMzYwcHg7CiAgfQoKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaQogIHsKICAgIHdpZHRoOiAxNjBweDsKICB9CgogIC8qIEhvbWVwYWdlICovCgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlCiAgewogICAgbWFyZ2luOiAyJSAwIDAgMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24KICB7CiAgICBwYWRkaW5nOiAwIDIlICFpbXBvcnRhbnQ7CiAgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgybiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQoKICAjYXV0aG9ycyB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQoubWFpbiAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaQogIHsKICAgIHdpZHRoOiAxNjBweDsKICB9CgogIC8qIEhvbWVwYWdlICovCgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlCiAgewogICAgbWFyZ2luOiAyJSAwIDAgMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24KICB7CiAgICBwYWRkaW5nOiAwIDIlICFpbXBvcnRhbnQ7CiAgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgybiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQoKICAjYXV0aG9ycyB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQo=" > -->
<!--	<link rel="stylesheet" href="data:/text/plain;base64,LyoKICAjIEFWQUlMQUJMRSBXRUlHSFRTL1NUWUxFUwoKICAgIDMwMCAoZm9yIGhlYWRsaW5lcyBvbmx5KQogICAgNDAwIChib2R5IHRleHQpCiAgICA0MDAgaXRhbGljCiAgICA2MDAKICAgIDgwMAoKICAtLS0KCiAgIyBDT0xPUlMKCiAgICBkZWZhdWx0OiAgIDNjM2MzYwogICAgICAgICAgICAgICAoZGFyayBncmV5KQoKICAgIGFsdGVybmF0ZTogNWZhNGEwCiAgICAgICAgICAgICAgICh0ZWFsKQoKICAgIGhpZ2hsaWdodDogZjA0NTMwCiAgICAgICAgICAgICAgIChvcmFuZ2UpCiovCgpib2R5IDo6LXdlYmtpdC1zY3JvbGxiYXIgewogIGhlaWdodDogMTZweDsKICBvdmVyZmxvdzogdmlzaWJsZTsKICB3aWR0aDogMTZweDsKfQoKYm9keSAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMik7CiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OwogIG1pbi1oZWlnaHQ6IDI4cHg7CiAgcGFkZGluZzogMTAwcHggMCAwOwogIGJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggMCByZ2JhKDAsMCwwLC4xKSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4wNyk7CiAgYm9yZGVyLXdpZHRoOiAxcHggMXB4IDFweCA2cHg7Cn0KCmJvZHkgIDo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHsKICBoZWlnaHQ6IDA7CiAgd2lkdGg6IDA7Cn0KCmJvZHkgIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDsKICBib3JkZXItd2lkdGg6IDAgMCAwIDRweDsKICB9Cgpib2R5ICA6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi8qIE5PUk1BTElaRSAqLwoKYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbmF2LCBzZWN0aW9uIHsgZGlzcGxheTogYmxvY2s7IH0KYXVkaW8sIGNhbnZhcywgdmlkZW8geyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICpkaXNwbGF5OiBpbmxpbmU7ICp6b29tOiAxOyB9CmF1ZGlvOm5vdChbY29udHJvbHNdKSB7IGRpc3BsYXk6IG5vbmU7IH0KW2hpZGRlbl0geyBkaXNwbGF5OiBub25lOyB9CgpodG1sIHsgZm9udC1zaXplOiAxMDAlOyBvdmVyZmxvdy15OiBzY3JvbGw7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IH0KYm9keSB7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMS4yMzE7IG92ZXJmbG93OiBoaWRkZW47IH0KYm9keSwgYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBjb2xvcjogIzIyMjsgfQoKOjotbW96LXNlbGVjdGlvbiB7IGJhY2tncm91bmQ6ICNmMDQ1MzA7IGNvbG9yOiAjZmZmOyB0ZXh0LXNoYWRvdzogbm9uZTsgfQo6OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6ICNmMDQ1MzA7IGNvbG9yOiAjZmZmOyB0ZXh0LXNoYWRvdzogbm9uZTsgfQoKYSB7IGNvbG9yOiAjNTA4Qjg4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7fQphOnZpc2l0ZWQgeyBjb2xvcjogIzUwOEI4ODsgfQphOmhvdmVyLCBhOmZvY3VzIHsgY29sb3I6ICNmMDQ1MzA7IH0KYTpmb2N1cyB7IG91dGxpbmU6IHRoaW4gZG90dGVkOyB9CmE6aG92ZXIsIGE6YWN0aXZlIHsgb3V0bGluZTogMDsgfQoKYWJiclt0aXRsZV0geyBib3JkZXItYm90dG9tOiAxcHggZG90dGVkOyB9CmIsIHN0cm9uZyB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CmJsb2NrcXVvdGUgeyBtYXJnaW46IDFlbSA0MHB4OyB9CmRmbiB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQpociB7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDFweDsgYm9yZGVyOiAwOyBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsgbWFyZ2luOiAxZW0gMDsgcGFkZGluZzogMDsgfQppbnMgeyBiYWNrZ3JvdW5kOiAjZmY5OyBjb2xvcjogIzAwMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Cm1hcmsgeyBiYWNrZ3JvdW5kOiAjZmYwOyBjb2xvcjogIzAwMDsgZm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogYm9sZDsgfQpwcmUsIGNvZGUsIGtiZCwgc2FtcCB7IGZvbnQtZmFtaWx5OiAiU291cmNlIENvZGUgUHJvIiwgbW9ub3NwYWNlOyBfZm9udC1mYW1pbHk6ICdjb3VyaWVyIG5ldycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAxZW07IH0KcHJlIHsgd2hpdGUtc3BhY2U6IHByZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH0KcSB7IHF1b3Rlczogbm9uZTsgfQpxOmJlZm9yZSwgcTphZnRlciB7IGNvbnRlbnQ6ICIiOyBjb250ZW50OiBub25lOyB9CnNtYWxsIHsgZm9udC1zaXplOiA4NSU7IH0Kc3ViLCBzdXAgeyBmb250LXNpemU6IDc1JTsgbGluZS1oZWlnaHQ6IDA7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9CnN1cCB7IHRvcDogLTAuNWVtOyB9CnN1YiB7IGJvdHRvbTogLTAuMjVlbTsgfQp1bCwgb2wgeyBtYXJnaW46IDFlbSAwOyBwYWRkaW5nOiAwIDAgMCA0MHB4OyB9CmRkIHsgbWFyZ2luOiAwIDAgMCA0MHB4OyB9Cm5hdiB1bCwgbmF2IG9sIHsgbGlzdC1zdHlsZTogbm9uZTsgbGlzdC1zdHlsZS1pbWFnZTogbm9uZTsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9CmltZyB7IGJvcmRlcjogMDsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfQpzdmc6bm90KDpyb290KSB7IG92ZXJmbG93OiBoaWRkZW47IH0KZmlndXJlIHsgbWFyZ2luOiAwOyB9Cgpmb3JtIHsgbWFyZ2luOiAwOyB9CmZpZWxkc2V0IHsgYm9yZGVyOiAwOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IH0KbGFiZWwgeyBjdXJzb3I6IHBvaW50ZXI7IH0KbGVnZW5kIHsgYm9yZGVyOiAwOyAqbWFyZ2luLWxlZnQ6IC03cHg7IHBhZGRpbmc6IDA7IH0KYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7IGZvbnQtc2l6ZTogMTAwJTsgbWFyZ2luOiAwOyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7ICp2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9CmJ1dHRvbiwgaW5wdXQgeyBsaW5lLWhlaWdodDogbm9ybWFsOyAqb3ZlcmZsb3c6IHZpc2libGU7IH0KdGFibGUgYnV0dG9uLCB0YWJsZSBpbnB1dCB7ICpvdmVyZmxvdzogYXV0bzsgfQpidXR0b24sIGlucHV0W3R5cGU9ImJ1dHRvbiJdLCBpbnB1dFt0eXBlPSJyZXNldCJdLCBpbnB1dFt0eXBlPSJzdWJtaXQiXSB7IGN1cnNvcjogcG9pbnRlcjsgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IH0KaW5wdXRbdHlwZT0iY2hlY2tib3giXSwgaW5wdXRbdHlwZT0icmFkaW8iXSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KaW5wdXRbdHlwZT0ic2VhcmNoIl0geyAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsgYm94LXNpemluZzogY29udGVudC1ib3g7IH0KaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24geyAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH0KYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLCBpbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7IGJvcmRlcjogMDsgcGFkZGluZzogMDsgfQp0ZXh0YXJlYSB7IG92ZXJmbG93OiBhdXRvOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyByZXNpemU6IHZlcnRpY2FsOyB9CmlucHV0OnZhbGlkLCB0ZXh0YXJlYTp2YWxpZCB7ICB9CmlucHV0OmludmFsaWQsIHRleHRhcmVhOmludmFsaWQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBkZGRkOyB9Cgp0YWJsZSB7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGJvcmRlci1zcGFjaW5nOiAwOyB9CnRkIHsgdmVydGljYWwtYWxpZ246IHRvcDsgfQoKCmJ1dHRvbiB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSA0MCUsIDAlIDcwJSwgZnJvbSgjRjlGOUY5KSwgdG8oI0UzRTNFMykpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoI0Y5RjlGOSA0MCUsICNFM0UzRTMgNzAlKTsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSk7CiAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgcGFkZGluZzogNXB4IDhweDsKICBvdXRsaW5lOiBub25lOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIHVzZXItc2VsZWN0OiBub25lOwogIGN1cnNvcjogcG9pbnRlcjsKICB0ZXh0LXNoYWRvdzogMXB4IDFweCAjZmZmOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgZm9udC1zaXplOiAxMHB0Owp9CmJ1dHRvbltkaXNhYmxlZF0gewogIG9wYWNpdHk6IDAuNjU7CiAgY3Vyc29yOiBkZWZhdWx0Owp9CmJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6aG92ZXIsCmJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6Zm9jdXMgewogIGJvcmRlci1jb2xvcjogYmxhY2s7Cn0KYnV0dG9uOm5vdChbZGlzYWJsZWRdKTphY3RpdmUgewogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSA0MCUsIDAlIDcwJSwgZnJvbSgjRTNFM0UzKSwgdG8oI0Y5RjlGOSkpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoI0UzRTNFMyA0MCUsICNGOUY5RjkgNzAlKTsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNFM0UzRTMgNDAlLCAjRjlGOUY5IDcwJSk7Cn0KCi8qIEJBQ0tHUk9VTkQgU0NBTEUgKi8KCi5wYXR0ZXJuLWJnIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlICFpbXBvcnRhbnQ7Cn0KCi5wYXR0ZXJuLWJnLWxpZ2h0ZXIsCmFydGljbGUuc2VjdGlvbmVkID4gc2VjdGlvbjpub3QoI2NsYXNzZXMpIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogIGJveC1zaGFkb3c6IDFweCAxcHggMTBweCAjY2NjOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddLApib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10sCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvYmFja2dyb3VuZC1ob21lLmpwZyk7Cn0KCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9zdGF0aWMvaW1hZ2VzL2JhY2tncm91bmQtZ2FtaW5nLmpwZyk7Cn0KCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvYmFja2dyb3VuZC1idXNpbmVzcy5qcGcpOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddIC5wYXR0ZXJuLWJnLWxpZ2h0ZXIsCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSAucGF0dGVybi1iZy1saWdodGVyLApib2R5W2RhdGEtaHJlZj0nYnVzaW5lc3MnXSAucGF0dGVybi1iZy1saWdodGVyLApib2R5W2RhdGEtaHJlZj0naG9tZSddIGFydGljbGUuc2VjdGlvbmVkID4gc2VjdGlvbjpub3QoI2NsYXNzZXMpLApib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10gYXJ0aWNsZS5zZWN0aW9uZWQgPiBzZWN0aW9uOm5vdCgjY2xhc3NlcyksCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIGFydGljbGUuc2VjdGlvbmVkID4gc2VjdGlvbjpub3QoI2NsYXNzZXMpIHsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgLW1vei1ib3gtc2hhZG93OiBub25lOwogIC1tcy1ib3gtc2hhZG93OiBub25lOwogIC1vLWJveC1zaGFkb3c6IG5vbmU7CiAgYm94LXNoYWRvdzogbm9uZTsKfQoKI3VwZGF0ZXNfbGlzdCBsaSB7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiBTSEFSRUQgICovCgpoMSwKaDIsCmgzLApoNCwKaDUKewogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgbGluZS1oZWlnaHQ6IDEuMTI1Owp9CgpoZ3JvdXAgaDEsCmhncm91cCBoMiwKaGdyb3VwIGgzCnsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgpoMSBzcGFuLApoMiBzcGFuCnsKICBjb2xvcjogIzVmYTRhMDsKICBmb250LXdlaWdodDogODAwOwp9CgpoMQp7CiAgZm9udC1zaXplOiAzNXB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbWFyZ2luOiAwIDAgLjI1ZW07Cn0KCmgyCnsKICBmb250LXNpemU6IDI2cHg7CiAgbWFyZ2luOiAxZW0gMCAuNWVtOwp9CgpoMwp7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbWFyZ2luOiAxZW0gMCAuNWVtOwp9CgpoMjpmaXJzdC1jaGlsZCwKaDM6Zmlyc3QtY2hpbGQsCi5wcm9maWxlIGgyCnsKICBtYXJnaW46IDAgMCAuNWVtOwp9CgpwCnsKICBmb250LXNpemU6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKYQp7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAuMnM7CiAgLW1zLXRyYW5zaXRpb246IGNvbG9yIC4yczsKICAtbW96LXRyYW5zaXRpb246IGNvbG9yIC4yczsKICAtby10cmFuc2l0aW9uOiBjb2xvciAuMnM7CiAgdHJhbnNpdGlvbjogY29sb3IgLjJzOwp9CgpzdHJvbmcKewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCmhlYWRlci5tYWluIG5hdiwKLnN1YmhlYWRlciBkaXYsCi5uYXYKewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbjogMCBhdXRvOwogIHdpZHRoOiAxMDAwcHg7Cn0KCi5wYWdlCnsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luOiA0LjVlbSBhdXRvOwogIHdpZHRoOiAxMDAwcHg7Cn0KCi5wYWdlLmN1cnJlbnQKewogIHRvcDogMDsKfQoKYXJ0aWNsZSBhcnRpY2xlLAphcnRpY2xlLnNlY3Rpb25lZCwKYXJ0aWNsZSBzZWN0aW9uLApoZWFkZXIgc2VjdGlvbgp7CiAgYmFja2dyb3VuZDogbm9uZTsKICBtYXJnaW4tdG9wOiAwOwogIHBhZGRpbmc6IDA7Cn0KCmFydGljbGUgYXJ0aWNsZSwKYXJ0aWNsZSBzZWN0aW9uCnsKICBtYXJnaW46IDA7Cn0KCmFydGljbGUsCnNlY3Rpb24sCmFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24sCnNlY3Rpb24ubGlua190YXJnZXQsCiN1cGRhdGVzLAoucGFnZSBoZWFkZXIKewogIG1hcmdpbjogMCBhdXRvIDIlIGF1dG87CiAgcGFkZGluZzogMS43NSUgMiU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKYXJ0aWNsZSBzZWN0aW9uLmxpbmtfdGFyZ2V0CnsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgaGVpZ2h0OiAxNThweDsKICBtYXJnaW4tbGVmdDogMmVtOwogIHBhZGRpbmc6IDA7Cn0KaHRtbFtsYW5nPXB0XSBhcnRpY2xlIHNlY3Rpb24ubGlua190YXJnZXQKewogIGhlaWdodDogMTg4cHg7Cn0KCmh0bWxbbGFuZz1kZV0gYXJ0aWNsZSBzZWN0aW9uLmxpbmtfdGFyZ2V0CnsKICBoZWlnaHQ6IDIwMHB4Owp9CgphcnRpY2xlLnByb2ZpbGUgc2VjdGlvbiwKc2VjdGlvbi5saW5rX3RhcmdldCBhCnsKICBwYWRkaW5nOiA1JSA2JTsKfQoKc2VjdGlvbi5saW5rX3RhcmdldCBhCnsKICBjb2xvcjogaW5oZXJpdDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogMDsKICB0b3A6IDA7CiAgaGVpZ2h0OiAxMjVweDsKfQoKc2VjdGlvbi5saW5rX3RhcmdldCBoMgp7CiAgZm9udC1zaXplOiAzNXB4OwogIG1hcmdpbi1ib3R0b206IC4yNWVtOwp9CgpzZWN0aW9uLmxpbmtfdGFyZ2V0IHAKewogIGZvbnQtc2l6ZTogMTNweDsKICBtYXJnaW46IDA7Cn0KCi5wYWdlIGhlYWRlcgp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwp9Cgpib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10gLnBhZ2UgaGVhZGVyLApib2R5W2RhdGEtaHJlZj0nYnVzaW5lc3MnXSAucGFnZSBoZWFkZXIKewogIHBhZGRpbmctYm90dG9tOiAxJTsKfQoKYm9keVtkYXRhLWhyZWY9J2dhbWluZyddIC5wYWdlIGhlYWRlci50d29fY29sdW1ucyBwOmZpcnN0LWNoaWxkLApib2R5W2RhdGEtaHJlZj0nYnVzaW5lc3MnXSAucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgcDpmaXJzdC1jaGlsZAp7CiAgbWFyZ2luLXRvcDogMDsKfQoKLnBhZ2UgaGVhZGVyIGhncm91cAp7CiAgZmxvYXQ6IGxlZnQ7CiAgcGFkZGluZy1yaWdodDogMiU7CiAgd2lkdGg6IDM0JTsKfQoKLnBhZ2UgaGVhZGVyIHNlY3Rpb24KewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiA2NCU7Cn0KCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSAucGFnZSBoZWFkZXIsCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIC5wYWdlIGhlYWRlcgp7CiAgcGFkZGluZy1ib3R0b206IDElOwp9CgoucGFnZSBoZWFkZXIgaGdyb3VwIGgxCnsKICBmb250LXdlaWdodDogMzAwOwogIG1hcmdpbjogMCAwIC41ZW07Cn0KCi5wYWdlIGhlYWRlciBoZ3JvdXAgaDEgc3BhbiwKLnBhZ2UgaGVhZGVyIGhncm91cCBoMgp7CiAgY29sb3I6ICM1ZmE0YTA7CiAgZm9udC1zaXplOiAzNHB4OwogIGZvbnQtd2VpZ2h0OiA4MDA7CiAgbWFyZ2luOiAwOwp9CgoucGFnZSBoZWFkZXIgaGdyb3VwIGgxICsgaDIKewogIG1hcmdpbi10b3A6IC0uNWVtOwp9CgoucGFnZSBoZWFkZXIgaDMKewogIGZvbnQtc2l6ZTogMjJweDsKICBmb250LXdlaWdodDogMzAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLAoucGFnZSBoZWFkZXIgYXNpZGUKewogIGZvbnQtc2l6ZTogMTVweDsKICBtYXJnaW46IC4yNWVtIDAgMDsKfQoKLnBhZ2UgaGVhZGVyIHNlY3Rpb24gcAp7CiAgbWFyZ2luOiAwIDAgMWVtOwp9CgoucGFnZSBoZWFkZXIgcDpsYXN0LWNoaWxkCnsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoudHdvX2NvbHVtbnMKewogIC1tb3otY29sdW1uLWNvdW50OiAyOwogIC1vLWNvbHVtbi1jb3VudDogMjsKICAtbXMtY29sdW1uLWNvdW50OiAyOwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAyOwogIGNvbHVtbi1jb3VudDogMjsKICAtbW96LWNvbHVtbi1nYXA6IDEuNWVtOwogIC1vLWNvbHVtbi1nYXA6IDEuNWVtOwogIC1tcy1jb2x1bW4tZ2FwOiAxLjVlbTsKICAtd2Via2l0LWNvbHVtbi1nYXA6IDEuNWVtOwogIGNvbHVtbi1nYXA6IDEuNWVtOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbiBwLmludHJvCnsKICBmb250LXNpemU6IDE1cHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbiAuY29sdW1uICsgLmNvbHVtbiArIHAKewogIGNsZWFyOiBsZWZ0OwogIHBhZGRpbmctdG9wOiAzZW07Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uIHVsCnsKICBsaW5lLWhlaWdodDogMS4zOwogIGxpc3Qtc3R5bGU6IHNxdWFyZTsKICBtYXJnaW46IC0uNWVtIDAgMCAyZW07Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uIGxpIGEKewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi50aHJlZV9jb2x1bW5zCnsKICAtbW96LWNvbHVtbi1jb3VudDogMzsKICAtbXMtY29sdW1uLWNvdW50OiAzOwogIC1vLWNvbHVtbi1jb3VudDogMzsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogMzsKICBjb2x1bW4tY291bnQ6IDM7Cn0KCi5maXZlX2NvbHVtbnMKewogIGxpc3Qtc3R5bGU6IHNxdWFyZTsKICAtbW96LWNvbHVtbi1jb3VudDogNTsKICAtbXMtY29sdW1uLWNvdW50OiA1OwogIC1vLWNvbHVtbi1jb3VudDogNTsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogNTsKICBjb2x1bW4tY291bnQ6IDU7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uIHVsLnRocmVlX2NvbHVtbnMgbGkKewogIG1hcmdpbjogMCAwIC43NWVtOwp9CgoucGFnZSBoZWFkZXIgaGdyb3VwLAoucGFnZSBoZWFkZXIgc2VjdGlvbiwKLnBhZ2UgaGVhZGVyIC5zaGFyZSwKLnBhZ2Ugc2VjdGlvbgp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoucGFnZSBoZWFkZXIgLnNoYXJlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAxNXB4OwogIGxlZnQ6IDE1cHg7CiAgei1pbmRleDogMjsKICBkaXNwbGF5OiBibG9jazsKfQoKLnBhZ2UgaGVhZGVyIC5zaGFyZSBsaSB7CiAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50Owp9CgoucGFnZSBoZWFkZXIgLnNoYXJlIGEgewogIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKICBwYWRkaW5nLXJpZ2h0OiA1cHggIWltcG9ydGFudDsKfQoKLnBhZ2UgaGVhZGVyIC5zaGFyZSBhIGltZyB7CiAgd2lkdGg6IDMycHg7CiAgaGVpZ2h0OiAzMnB4Owp9Cgojc3RhcnQgLnNoYXJlLnByZXZpZXcgewogIHJpZ2h0OiAxMzBweDsKICBsZWZ0OiBhdXRvOyAvKiBuZWVkZWQgZm9yIEZGICovCn0KLnBhZ2UgaGVhZGVyIC5zaGFyZS5wcmV2aWV3IHsKICBkaXNwbGF5OiBibG9jazsKICBib3R0b206IDIwcHg7Cn0KCi5wYWdlIGhlYWRlciAuc2hhcmUgdWwKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi5wYWdlIGhlYWRlciAuc2hhcmUgbGkKewogIGRpc3BsYXk6IGlubGluZTsKfQoKLnBhZ2UgaGVhZGVyLnR3b19jb2x1bW5zIC8qIFRoZXJlIGlzIHRvbyBtdWNoIHVucHJlZGljdGFibGUgYmVoYXZpb3Igd2l0aCBDU1MzIGNvbHVtbnMgZm9yIHRoaXMgdG8gcmVsaWFibGUuIFVzaW5nIGZsb2F0cyBmb3Igbm93LiAqLwp7CiAgLW1vei1jb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKICAtby1jb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKICAtbXMtY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKICBjb2x1bW4tY291bnQ6IDEgIWltcG9ydGFudDsKfQoKLnBhZ2UgaGVhZGVyLnR3b19jb2x1bW5zIGhncm91cAp7CiAgcGFkZGluZzogMCAzJSAwIDA7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDQ4JTsKfQoKaHRtbFtsYW5nPXB0XSAucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwCnsKICB3aWR0aDogNTMlOwp9CgoucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgc2VjdGlvbgp7CiAgZmxvYXQ6IGxlZnQ7CiAgcGFkZGluZzogMDsKICB3aWR0aDogNDklOwp9CgoucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgcAp7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBtYXJnaW46IDA7Cn0KCi5wYWdlIGhlYWRlci50d29fY29sdW1ucyBwICsgcAp7CiAgbWFyZ2luLXRvcDogMWVtOwp9CgoucGFnZSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwIGltZwp7CiAgbWFyZ2luLWJvdHRvbTogMWVtOwp9CgoucGFnZSBzZWN0aW9uIGhlYWRlcgp7CiAgYmFja2dyb3VuZDogbm9uZTsKICBtYXJnaW46IDAgMCAyZW07CiAgcGFkZGluZzogMDsKfQoKZGl2Lm9uZV9xdWFydGVyLApkaXYub25lX2hhbGYgICAgeyBmbG9hdDogbGVmdDsgfQpkaXYub25lX3F1YXJ0ZXIgeyB3aWR0aDogMjUlOyB9CmRpdi5vbmVfaGFsZiAgICB7IHdpZHRoOiA1MCU7IH0KCi5mZWVkIHVsCnsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogMWVtIDAgIWltcG9ydGFudDsKICBwYWRkaW5nOiAwOwp9CgouZmVlZCBsaQp7CiAgY2xlYXI6IGxlZnQ7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBsaXN0LXN0eWxlOiBub25lOwogIGxpbmUtaGVpZ2h0OiAxLjg7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IC4xZW07Cn0KCi5mZWVkIGxpIGEKewogIGNvbG9yOiAjMzMzOwp9CgouZmVlZCBsaSBzcGFuCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi5mZWVkIGxpIGltZwp7CiAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwp9CgouZmVlZCBsaSAuZGF0ZSB7CiAgd2lkdGg6IDQwcHg7Cn0KCi5mZWVkIGxpIC5hdXRob3IKewogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMjBweDsKICBtYXJnaW46IDAgNXB4IDAgMDsKfQoKLmZlZWQgbGkgLmF1dGhvciBpbWcKewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgouZmVlZCBsaSAuZGV0YWlscwp7CiAgZGlzcGxheTogaW5saW5lOwp9CgouZmVlZCBsaSAudGl0bGUKewogIGRpc3BsYXk6IGlubGluZTsKICB3aWR0aDogNzAlOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLmZlZWQgbGkgc3Bhbi50eXBlCnsKICBmbG9hdDogcmlnaHQ7CiAgcGFkZGluZy1yaWdodDogM3B4Owp9CgouZmVlZCBwIGEKewogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBwYWRkaW5nLWxlZnQ6IDQ1cHg7Cn0KCi5jbGFzcwp7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMTZweDsKICB2ZXJ0aWNhbC1hbGlnbjogLTNweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5jbGFzcy5vZmZsaW5lLAouY2xhc3Muc3RvcmFnZSwKLmNsYXNzLmNvbm5lY3Rpdml0eSwKLmNsYXNzLmZpbGVfYWNjZXNzLAouY2xhc3Muc2VtYW50aWNzLAouY2xhc3MubXVsdGltZWRpYSwKLmNsYXNzLmdyYXBoaWNzLAouY2xhc3MucHJlc2VudGF0aW9uLAouY2xhc3MucGVyZm9ybWFuY2UsCi5jbGFzcy5udXRzX2FuZF9ib2x0cwp7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7Cn0KCi5jbGFzcy5vZmZsaW5lICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZDTTBORU1rVkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkNNME5FTWtaRk9FRkNNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01VSXpRMFF5UTBVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHTVVJelEwUXlSRVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZ2tseSs4QUFBRHhTVVJCVkhqYVRGR3hFWUpBRUh6UTNDOUJNa09oQXFoQXJVQWRDcEJRSXlVeUZBdGdwQU9sQXJVRDdNRFFVRU16ZDUxOTVXYVdPKzUyNysvdlBTTkwwOVRDN1lBeFlKVitBbnVnS011U3NmRkVIc0tkUmNpQlJnS0tGOEFkU0NqcXFuQm9KODNmR2pRN3FSazVFdzhKZGprQ0ljZ2t4Q0lFd0ZyQ3F3U0JqODlRM2EzSUhLRVNjUWJjVktmRmJpU3JibFlOUXBGSkhBbTB2cStMR295VHdOWEFoYVBwcEZ6NWlRU1hUaFJGRHdSTCtCYzg0eG94aTIrUUN3YjQzOElOZ0pWYksvZWZBWE9RcXRhV1dNdjBQdCthMXlvNFVhUFJlbnFIdmtiYi9CNnVKZUtGcDdxNFcyY0ZzdHVTK1Fnd0FLTnhXQ2lENllwcEFBQUFBRWxGVGtTdVFtQ0MpOyB9Ci5jbGFzcy5zdG9yYWdlICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZDTTBORU16SkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkNNME5FTXpORk9FRkNNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01VSXpRMFF6TUVVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHTVVJelEwUXpNVVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9Qc0JaTDk0QUFBRGFTVVJCVkhqYWJGSEJEWUpBRUR6TUZVQUhZZ2ZZd1ZtQlVvRVFDa0E3a0FyRUFvaGFBWFNnZGtBSmxFQUp6cGpCN0lOTkpwdmJtZDJkdTR1Y29pekxHQ2tIOWlxTndMTnQyN2N6RVVsOFFMb0RFMFhpMWdEckE1Q2hrWnp6RUtmSUhWQ2plTEhUd05YaWlOMXZBNG84T0lnemlSS2t4UFFsMmw3UXB0ZmFyYkhXeWNaa21uaVBJNUI2VFI5RTBONEQ1OEl0QkFhKy9Hd0RvbEZUSzlsYWluU2w5YmsyTlVobjRHTkFQdWlaYjVIeHphZnJGMnp3d2dIY3h2N0RDZWxLLytZZmFLc0NZZzBiL2cxcUNoSUVpVVkxTi9Pbk1iNENEQUR0c1ZHZVBQSFYvZ0FBQUFCSlJVNUVya0pnZ2c9PSk7IH0KLmNsYXNzLmNvbm5lY3Rpdml0eSAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBS0NBWUFBQUNBTEwvNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk1URXdNVGxGUWtKRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TVRFd01UbEZRa05GT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBHTVVJelEwUXpORVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEb3hNVEF4T1VWQ1FVVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1B1U2Rab2tBQUFESVNVUkJWSGphYkZEYkRjSXdFRXVBQWZqbGp4RktGd0EyYURjZzZnQ0lDZUNUdjA1UXRXekFCckJCd2daMGc0NkFqUndVcXA3a1BDNW5uM08ycXFxTE1XWnIvdVBXTkUxbkptS2U1M25BdmdKNllRQ3V5UGZlK3pBbVdDN29rckVRcW0vZEQ5aGF3QUVrblhuRyt6QVRzUWFPaVZCcWtTSnI0TUhMSW5xbUlwUmZLaTZBdTRUWTRSUUozdzc2b0pNTjJua2lWNHBVcEgrSWxpS3BGSEdIYmkxeVBIZVRoTVF2TFd4b0U2U2xCc0hjL2plbEdDaW9aY2xwdk9NSWRwd1JLVFBURVQ0Q0RBQWhvMExCVWxrNTFnQUFBQUJKUlU1RXJrSmdnZz09KTsgfQouY2xhc3MuZmlsZV9hY2Nlc3MgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFMQ0FZQUFBQ3BySGNtQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRa1pGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlF6QkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3hNVEF4T1VWQ1JFVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZDUlVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGoxMVpMa0FBQUNTU1VSQlZIamFZbUFBZ3VUa1pBTWdkbUJBQStqaVRFaHk2NEVTODVFVUpnQ3A4MENzQUJOalJOSnBBTVQ5UUx3QWlBOEM4WHdvZXlGVS9nSkk4WDhHNG9BakM0aWNPM2N1SXo1VlFBUDNvN3VaSUtCTU1TZ1VnTGlmb0dKb2NJRkNJUUU1R0pHRERoUWFCNkI4VURBbWdvSUppRUdlZWdERUg2REJHZ2dLRFVja3pZWEFrTGtBdGNVUU9VSkFCZ0FFR0FEclB5dUkrVnNObXdBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Ci5jbGFzcy5zZW1hbnRpY3MgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQU1DQVlBQUFCV2RWem5BQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZNVEV3TVRsRlF6TkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk1URXdNVGxGUXpSRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRveE1UQXhPVVZETVVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG94TVRBeE9VVkRNa1U0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QaUcrelZRQUFBQ3RTVVJCVkhqYWpKQ0xEY0l3REVSeHhRQWRvV3pRRWJwS2xBR0FDU2lEUkMyVEFKdkFCaDJCTzhrQlkxeUpTS2VtOXZNbjEyeUNrM051b1M3S2lRZnhPVUI3aVBjWk9wZFNIbDhGRGx3SVFZUk8wR0FMQlhDUG4yc0ZFWnpkMU1FVXBxM0dqeFUwUUdjYTNEVCtlWVByUk9ocFY2d05SZDJZL0s0cmIwdU5qaWF3QTVpWUFEaENiTklpTmpJSFhhQmVWaXhkdE1uUFZJa3NEUXg0RjRvR3A4alN3SkI3WGVXdlEvWWx3QUNpNUZ3TnBHN1pUQUFBQUFCSlJVNUVya0pnZ2c9PSk7IH0KLmNsYXNzLm11bHRpbWVkaWEgICAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXNBQUFBSkNBWUFBQURrWk5ZdEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk5VTXpNa1kyUWpCRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TlVNek1rWTJRakZGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8xUXpNeVJqWkJSVVU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzFRek15UmpaQlJrVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BwbVB0d3dBQUFCd1NVUkJWSGphWWt4T1RqWmdZR0FJQU9JRlFDd0FaVFBNblR1M0FTZ0hZb1BrTHdENUc1aUFqUDFBTEEvRUg0QzRIb2p0Z2ZnQjFKQjhJTllINGdNZ0F4aUJnditCdENOUUoxZ0FHd0NxQVJsWXlNUkFISEFBT1pGWXhXQkFPOFVzVUhvLzBCTkVLWFlrMHVBTEFBRUdBR0pQR3RyUHpPR21BQUFBQUVsRlRrU3VRbUNDKTsgfQouY2xhc3MuZ3JhcGhpY3MgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFLQ0FZQUFBQmk4S1NEQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRalJGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOVU16TWtZMlFqVkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQ01rVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpDTTBVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHVjZm1iZ0FBQUN1U1VSQlZIamFZbVJBQThuSnlRbEFTaCtJTHdMeGhybHo1MzZBeVRFQ0pRV0F0QUVRWHdCSkFQa2dkandRQndDeEFoQWZBT0tOUUx5QUNVaThCK0wxSUJxb2NEK1FkZ0RpaVVDTmlrRGFFR1FJRVBlRERHU0MyaENJSk9FUHhQVkFqUXBBRFNEYkNtSE9ZSUV4UUJKUXhUZ0JFd01KZ0tCaWtIT1FuUUVLbXZWQXdRMVFYNE44THdBTmpYaG9TRDBBcVdPRTZnNkFlaXdBcXBBQjZ2NkZJTTFRLzJDMTFnSFphbVFBRUdBQXZZQTJ2UXRLQUVZQUFBQUFTVVZPUks1Q1lJST0pOyB9Ci5jbGFzcy5wcmVzZW50YXRpb24gICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFvQUFBQUpDQVlBQUFBTHByMFRBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOVU16TWtZMlFqaEZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5qWkVNVGhEUmpaRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMVF6TXlSalpDTmtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8xUXpNeVJqWkNOMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QczlXY1ZVQUFBQ0NTVVJCVkhqYVltUUFndVRrWkFNZzFjK0FHeHhrZ1RJZUFIRWpEa1ZnQTVpZ0hBVThwZ2tBOFFFV0pGME9lQlJmWU1BSGdHNTNBT0w3WUt1QkRBVWdic0NoRm1UTEFSQ0RCY3JKQnlybUI5SUw1ODZkZXdHa0djZ09BT0o0SUo0SVVzZ0lGQVE1TmdFcWFBQU5BWkRZQmlEZUNOUzRBWnViREVEdXd1WUdnQUFEQUJMMklCZ0NzUERCQUFBQUFFbEZUa1N1UW1DQyk7IH0KLmNsYXNzLnBlcmZvcm1hbmNlICAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBWUFBQUJXZFZ6bkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk5qWkVNVGhEUmpsRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TmpaRU1UaERSa0ZGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8yTmtReE9FTkdOMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzJOa1F4T0VOR09FVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BvVVpkNlVBQUFEcVNVUkJWSGphZEZIUkRZSXdGSVJPNEFZNkFtNVFKd0FtRU1NQXhBbGdBOElBUkpoQTJLQk1vQ093Z2JxQmQrU2E5RU9iWEY3aDNyMTM3eldPZnB5eUxGOElPK0RZOS8wejVHSWxrTHdCSy9CUmRFQUxMRUFLWENrMkVoYUtJN0FISnBDcmhNUU0xRXp3Z29FV1dBRzRxR3VDTzZ0T3NqZHVBaEpxL1ZaaUlYczE3bTFnLzR6dnpDaDVScVZjUktwcTdHU1JkQURYNlB0dU5GUkZ0UVN6Uk94RWkydmd3aG1wY3orVXR0UEpZcWQvRmJzaTkrU0h0a3Jjam9ZZi9GenFhc04zeURRb1JZbjg4c0VlV2l1MzVMaTFPSGpkSkNEOUl5N3NCTTRpdXVqZjRXcUI1aGYzRldBQXJjNW9ORXRQYnpNQUFBQUFTVVZPUks1Q1lJST0pOyB9Ci5jbGFzcy5udXRzX2FuZF9ib2x0cyB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOalpFTVRoRFJrUkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5qWkVNVGhEUmtWRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMk5rUXhPRU5HUWtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8yTmtReE9FTkdRMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QbkdhWlowQUFBRGVTVVJCVkhqYWZGR0JEWUl3RUtTRUFkaEEzQUFuc0d5Z0cyZzZnSFlDWlFKMUFBSk00QWl3Z1d5Z0c4Z0kzaVZuMHBoR2txUGYvdjFkLzJzU2ZjNjVBc3N1aVg5ajB6UWpnelE0dkFEckNIa0IzQ0dZYzVOSjNXTFpBRXNvdlg0cjVINENmQmFvMXlRcmVRQ28yT3NxTlRBZ2R6UDRIVVZZcWZqSk93TjBZcTVpRVhndDRpS1ZGZFZuckNVd0k5NENIdkVWc0JMaTN2SktrNXJ0U0tZSzFFbzVrTnlyZ1BGTWh6M0h5Y2FoT2tuMUFieEY3TUkrdjFNNEEwTTRGYm1FZWZhV0dCM2thdGJEcFl1TWxJN3NhelJCZ3EvYy9ubnBpc0ZIZ0FFQWxrVlg4MU9qQ3U0QUFBQUFTVVZPUks1Q1lJST0pOyB9CgouY2xhc3NfbmFtZSwKLmJyb3dzZXJfbmFtZQp7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgY29sb3I6ICMzMzM7CiAgZm9udC1zaXplOiAxMXB4OwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgbGluZS1oZWlnaHQ6IDE7CiAgcGFkZGluZzogM3B4IDVweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAtMTVweDsKICBsZWZ0OiAwOwogIG9wYWNpdHk6IDA7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGFsbCAuMXMgZWFzZS1pbi1vdXQ7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouY2xhc3M6aG92ZXIgLmNsYXNzX25hbWUsCi5icm93c2VyOmhvdmVyIC5icm93c2VyX25hbWUsCi5jbGFzczpmb2N1cyAuY2xhc3NfbmFtZSwKLmJyb3dzZXI6Zm9jdXMgLmJyb3dzZXJfbmFtZQp7CiAgb3BhY2l0eTogMTsKfQoKLmJyb3dzZXJzCnsKICBmbG9hdDogbGVmdDsKICBtYXJnaW46IDAgLjc1ZW0gMCAuMjVlbTsKfQoKLmJyb3dzZXIKewogIGZsb2F0OiBsZWZ0OwogIGhlaWdodDogMTdweDsKICB3aWR0aDogMTdweDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoJy9zdGF0aWMvaW1hZ2VzL2Jyb3dzZXJfbG9nb3MucG5nJykgbm8tcmVwZWF0IGxlZnQgdG9wOwogIG9wYWNpdHk6IDAuMjU7CiAgbWFyZ2luOiAtMXB4IC4yNWVtIDAgMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5icm93c2VyX25hbWUKewogIGxlZnQ6IC0zcHg7Cn0KCi5icm93c2VyLmllIC5icm93c2VyX25hbWUKewogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5icm93c2VyLmNocm9tZSAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOyB9Ci5icm93c2VyLmZmICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xN3B4IHRvcDsgfQouYnJvd3Nlci5zYWZhcmkgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzVweCB0b3A7IH0KLmJyb3dzZXIuaWUgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTUycHggdG9wOyB9Ci5icm93c2VyLm9wZXJhICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC02OXB4IHRvcDsgfQouYnJvd3Nlci5zdXBwb3J0ZWQgeyBvcGFjaXR5OiAxOyB9CgouYnJvd3NlciAuc3VwcG9ydAp7CiAgZGlzcGxheTogbm9uZTsKfQoKCi8qIEVYVEVSTkFMIExJTktTICAqLwoKLnBhZ2UgaGVhZGVyIGFbaHJlZl49J2h0dHAnXTpub3QoW2hyZWYqPSdodG1sNXJvY2tzLiddKSwKLnR1dG9yaWFscyBhW2hyZWZePSdodHRwJ106bm90KFtocmVmKj0naHRtbDVyb2Nrcy4nXSksCi5mZWVkLXNlY3Rpb24gYVtocmVmXj0naHR0cCddOm5vdChbaHJlZio9J2h0bWw1cm9ja3MnXSksCi5pbmZvLXNlY3Rpb24gYVtocmVmXj0naHR0cCddOm5vdChbaHJlZio9J2h0bWw1cm9ja3MuJ10pLAphcnRpY2xlIHNlY3Rpb24gYVtocmVmXj0naHR0cCddOm5vdChbaHJlZio9J2h0bWw1cm9ja3MnXSksCmFbcmVsPSdleHRlcm5hbCddCnsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBa0FBQUFKQ0FZQUFBRGdrUVlRQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UmpaQk5FTXlRekZGUWpNeU1URkZNRUZGTURRNVJUUXdNelkyUlRJMFFVTWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSalpCTkVNeVF6SkZRak15TVRGRk1FRkZNRFE1UlRRd016WTJSVEkwUVVNaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEdOa0UwUXpKQ1JrVkNNekl4TVVVd1FVVXdORGxGTkRBek5qWkZNalJCUXlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwR05rRTBRekpETUVWQ016SXhNVVV3UVVVd05EbEZOREF6TmpaRk1qUkJReUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGo5dzh1UUFBQUJPU1VSQlZIamFqSkRiQ1FBd0NBTzFkRmczMG0xVDhpSDBLUTBJUVNRNVZBQVNFWkJDVFQ3VTA1aVozZzdZOHBXa1pLckVwTDVEMzJvYmx5K2VCWnhwUE16VTR5WHVEbkp4WmovUEVHQUFQazQ2RUUvTVFtZ0FBQUFBU1VWT1JLNUNZSUk9KSBuby1yZXBlYXQgY2VudGVyIHJpZ2h0OwogIHBhZGRpbmctcmlnaHQ6IDE2cHg7Cn0KCmEubm9leHRlcm5hbCB7CiAgcGFkZGluZy1yaWdodDogaW5pdGlhbCAhaW1wb3J0YW50OwogIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKfQoKZmlndXJlID4gYSwKLmZpZ3VyZXMgbGkgPiBhIHsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7Cn0KCgovKiBIRUFERVIgKi8KCmJvZHksCmlucHV0CnsKICBmb250LWZhbWlseTogJ09wZW4gU2FucycsIHNhbnMtc2VyaWY7CiAgZm9udC13ZWlnaHQ6IDQwMDsKfQoKaGVhZGVyLm1haW4KewogIGJhY2tncm91bmQ6ICNlZDQ3MzI7CiAgd2lkdGg6IDEwMCU7CiAgcG9zaXRpb246IGZpeGVkOwogIGxlZnQ6IDA7CiAgdG9wOiAwOwogIHotaW5kZXg6IDEwOwogIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCmhlYWRlci5tYWluICNob21lX2hvcm5zCnsKICBkaXNwbGF5OiBub25lOwp9CgpoZWFkZXIubWFpbiBoMQp7CiAgZGlzcGxheTogbm9uZTsKICBjb2xvcjogI2ZmZjsKICBmb250LXNpemU6IDFlbTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMCAwIC4yZW0gLjVlbTsKfQoKaGVhZGVyLm1haW4gaDEgYQp7CiAgY29sb3I6ICNmZmY7CiAgZm9udC13ZWlnaHQ6IDgwMDsKfQoKaGVhZGVyLm1haW4gbmF2CnsKfQoKaGVhZGVyLm1haW4gbmF2IHVsCnsKICBtYXJnaW46IC4xZW07CiAgcGFkZGluZzogMC40ZW0gMC42ZW07Cn0KCmhlYWRlci5tYWluIG5hdiB1bCBsaQp7CiAgZm9udC1zaXplOiAxM3B4OwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKaGVhZGVyLm1haW4gbmF2IHVsIGxpIGEKewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbjogLjFlbTsKICBwYWRkaW5nOiAwLjRlbSAwLjRlbTsKICBtYXgtd2lkdGg6IDEyNXB4OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCmJvZHlbZGF0YS1ocmVmKj0nZmVhdHVyZXMnXSBoZWFkZXIubWFpbiBuYXYgbGkjZmVhdHVyZXNfc2hvdywKYm9keVtkYXRhLWhyZWYqPSdzZWFyY2gnXSBoZWFkZXIubWFpbiBuYXYgbGkjc2VhcmNoc19zaG93LApib2R5W2RhdGEtaHJlZj0nd2h5J10gaGVhZGVyLm1haW4gbmF2IGEud2h5LApib2R5W2RhdGEtaHJlZj0ndHV0b3JpYWxzJ10gaGVhZGVyLm1haW4gbmF2IGEudHV0b3JpYWxzLApib2R5W2RhdGEtaHJlZj0ndXBkYXRlcyddIGhlYWRlci5tYWluIG5hdiBhLnVwZGF0ZXMsCmJvZHlbZGF0YS1ocmVmPSdzbGlkZXMnXSBoZWFkZXIubWFpbiBuYXYgYS5zbGlkZXMsCmJvZHlbZGF0YS1ocmVmPSdyZXNvdXJjZXMnXSBoZWFkZXIubWFpbiBuYXYgYS5yZXNvdXJjZXMsCmJvZHlbZGF0YS1ocmVmPSdwcm9maWxlcyddIGhlYWRlci5tYWluIG5hdiBhLnByb2ZpbGVzLApoZWFkZXIubWFpbiBuYXYgLmN1cnJlbnQKewogIGJhY2tncm91bmQ6ICNmNDkwN2Y7Cn0KCmhlYWRlci5tYWluIG5hdiAuaG9tZQp7CiAgZGlzcGxheTogbm9uZTsKfQoKI3RpdGxlLApoZWFkZXIubWFpbiBuYXYgYQp7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKaGVhZGVyLm1haW4gbmF2IGEsCmhlYWRlci5tYWluIG5hdiBhOmhvdmVyLApoZWFkZXIubWFpbiBuYXYgYTpmb2N1cwp7CiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKfQoKaGVhZGVyLm1haW4gaDEKewogIGRpc3BsYXk6IG5vbmU7Cn0KCiNzZWFyY2hfaGlkZSwKI2ZlYXR1cmVzX2hpZGUKewogIGN1cnNvcjogcG9pbnRlciAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDE5cHggMCAyNnB4Owp9Cgojc2VhcmNoX3Nob3cKewogIGZsb2F0OiByaWdodDsKfQoKI3NlYXJjaF9zaG93IGltZwp7CiAgcGFkZGluZy1sZWZ0OiA0cHg7CiAgdmVydGljYWwtYWxpZ246IC0ycHg7Cn0KCi5nc2MtY29tcGxldGlvbi1jb250YWluZXIKewogIGJvcmRlcjogMXB4IHNvbGlkICM0ZjRmNGY7CiAgbWFyZ2luLXRvcDogMTRweCFpbXBvcnRhbnQ7IC8qIGRvbnQgbGV0IHdpZGdldCBvdmVycmlkZSB0aGlzICovCn0KCi5nc2MtY29tcGxldGlvbi1jb250YWluZXIgdGQKewogIGJhY2tncm91bmQ6ICM2NWE4YTU7CiAgY29sb3I6ICNmZmY7CiAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnOwogIHBhZGRpbmc6IC40ZW0gLjZlbTsKfQoKLmdzYy1jb21wbGV0aW9uLWNvbnRhaW5lciB0ZDpob3ZlciwKLmdzYy1jb21wbGV0aW9uLWNvbnRhaW5lciB0ZDpmb2N1cwp7CiAgYmFja2dyb3VuZDogIzRiN2M3YTsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKfQoKLnN1YmhlYWRlciAuZmVhdHVyZXMKewogIHBhZGRpbmctdG9wOiA4cHg7CiAgcGFkZGluZy1ib3R0b206IDhweDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyAjZmVhdHVyZXNfaGlkZQp7CiAgcGFkZGluZy10b3A6IDIxcHg7Cn0KCi5zdWJoZWFkZXIgLmZlYXR1cmVzICNmZWF0dXJlc19oaWRlLAouc3ViaGVhZGVyIC5mZWF0dXJlcyBoMgp7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5zdWJoZWFkZXIgLmZlYXR1cmVzIGgyCnsKICBjb2xvcjogI2ZmZjsKICBmb250LXNpemU6IDQ4cHg7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogNXB4IDAgMCAxNXB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsCnsKICBsaXN0LXN0eWxlOiBub25lOwogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAxMHB4IDAgMCAyMHB4OwogIHdpZHRoOiA3MTBweDsKfQpodG1sW2xhbmc9ZGVdIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsLApodG1sW2xhbmc9cnVdIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIHsKICB3aWR0aDogNjAwcHg7Cn0KaHRtbFtsYW5nPWVzXSAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCB7CiAgd2lkdGg6IDU0M3B4Owp9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaQp7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDJweCAwOwp9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhCnsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvc3ViaGVhZGVyX2NsYXNzZXMucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGNvbG9yOiAjZmZmOwogIGZsb2F0OiBsZWZ0OwogIHBhZGRpbmc6IDNweCAwIDRweCAzMHB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgd2lkdGg6IDExMnB4Owp9CgpodG1sW2xhbmc9ZXNdIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIHsKICB3aWR0aDogMTgwcHg7Cn0KaHRtbFtsYW5nPXJ1XSAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSB7CiAgd2lkdGg6IDIwMHB4Owp9Cmh0bWxbbGFuZz1lc10gLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYSwKaHRtbFtsYW5nPXJ1XSAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhIHsKICB3aWR0aDogYXV0bzsKfQoKLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5vZmZsaW5lICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgICAgMnB4OyB9Ci5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIGEuc3RvcmFnZSAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwICAtNDhweDsgfQouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhLmNvbm5lY3Rpdml0eSAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAgLTk4cHg7IH0KLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5maWxlX2FjY2VzcyAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0OXB4OyB9Ci5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIGEuc2VtYW50aWNzICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOThweDsgfQouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhLm11bHRpbWVkaWEgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjQ4cHg7IH0KLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5ncmFwaGljcyAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI5OHB4OyB9Ci5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsIGxpIGEucHJlc2VudGF0aW9uICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zNDhweDsgfQouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhLnBlcmZvcm1hbmNlICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzk4cHg7IH0KLnN1YmhlYWRlciAuZmVhdHVyZXMgdWwgbGkgYS5udXRzX2FuZF9ib2x0cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ0OHB4OyB9Cgouc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaSBhIGgzCnsKICBmb250LXNpemU6IDE0cHg7CiAgbWFyZ2luOiAwOwp9Cgoud2F0ZXJtYXJrCnsKICBwb3NpdGlvbjogZml4ZWQ7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtNjA1cHg7CiAgdG9wOiAzMHB4OwogIHotaW5kZXg6IDI7CiAgcGFkZGluZzogMjBweDsKICBvcGFjaXR5OiAwLjY1OwogIHdpZHRoOiA2OHB4OwogIGhlaWdodDogMTE2cHg7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzBBQUFCZUNBWUFBQUMzckozMUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk4wSXlNRFkxUXpkRk16STVNVEZGTURrMk9ERTVRMEV3TlRaQ09ERXdSVElpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TjBJeU1EWTFRemhGTXpJNU1URkZNRGsyT0RFNVEwRXdOVFpDT0RFd1JUSWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8zUWpJd05qVkROVVV6TWpreE1VVXdPVFk0TVRsRFFUQTFOa0k0TVRCRk1pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzNRakl3TmpWRE5rVXpNamt4TVVVd09UWTRNVGxEUVRBMU5rSTRNVEJGTWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1Bxa29zNEVBQUFVZFNVUkJWSGphN0pzOWR0cEFFSUJYUEZvZEFBNmdDOGgxTFBmZ25xU0hMZ1c0QjNxVEloM3FZM3FiQThpcG93TkVCMEFINEFET2JqenJUT2F0Vml0cHRaSVQ1cjE5TWpKSTM0N21keGM4cHBFUFg3K00rV0hPeHpVZlBwdys4L0hNeCs3NzUrV1pkU0NlQmpqZ2h6MkNwU0tBRnh3ODZ3VTBhUGdiQWs3NVNPQjFDRU9DMzdyVytMRGcvQndCQ3pNNGtFbHQrR0VDNzVueEVidUVIaFNjbDVyTUtMQVFmazVBNStTOW5VT1A0SmhvUHB0MkJUMXM4TmxUVzFEYy9MRGZpQ2VhWUw4WnNoNEpoNDM0WVlXZXRKUTEvMS9Nd1dPZGVYUUJQT1dIZXdYd1czQ0FBTkFQYUFpeFMzUkthUFNHYS9hS0g3Y1FXb1ZNeE9UNm91bHJFbUpqYWNQOCtNUVBueEQ0ckMvUWtYUzZnaEFyblA0SUw0TUI2NWZvSXRLNUxFNzNXaTdRRitpVzBqak5aQk1VQldTakVJUG40NFlpUkFra1JWSEJMVFJrTWl3K1RFSWtneTJjV3lvYWlyQk93V1d6OXBEYVBSR1l0YUk2RkdOTWtvcHo2QnhhcnhPcEpTandGaktjZkk4UExWM1FxaU9LRy9FaHVwVXBPdjFUa2NVRUhNNXVSd3dNN3hGUDU2N1Y2QUYxN3FPaWZCUU8rQWpheFpJVS9FMVRkTllLTkFEaDdqd0gyOHhKM1RzdFM4TVYvMWZQcGhYMitWZXpDeUZ2RFJOYTh0ZEpteDM2b0Fid2xsWmkvSFdDT25JZnhldE9vQ01GOEZQQmU0K0t4cmdUNk1BUW1MbGNzREYxUkMwd3N1dGFqdFVZV3VIOUpzQUJNYU5uWjlBRlRtY0NqRU5oakROanE5Q1dnSTl5YmFKMWFJdkFHeWVPcUxESFhnTkxUYzhiQWpPWHdCSmFocXFrRG5EWFBXSldFZmpjQitneTJXRWJ4clV5RlBNcUdSZGsxNkxNZXphRmxxWGxWSE56dlBvam5RNC9tWldxV1NEK01sZGRuNS9EV3lXNnBPUmo2Q2RVNU95THdEbm9ncjJ1Wkc1UVpTY25MQnJZZXpBaG1kTDNwSEFTMTMyUTZWNTA1M3lzME1UT1RML3pJSjlHNXNFRkh2Qko2UGRLSDVXaFkyWUFWTloxaTN1bW1udjlrRTlhMnZRQ1BlNUFwM0dpL1F3K20ycksxUVU4cFlPbUtmNVlBb3lMc2RUVGRNYkdHa2RhRDBIcnYxc3hXb1BBUFNKa05vbko1aW5hQWhSeTZ5a3VXaHU4RFlHVnFVYzB5YnVCb3BDdlpTb3RDbzVBQjJXYzdoTTRMRmxJczBpbDNRODByVk9uNEhDdkRVbHUrb3pZSlRqeUxlbXdCK3l3ZzVLUTVod2NycjNHd1lCejdDclZIaHJ3b0VVTlJ6aDYxU3FZRUhoS3dHY1dnU01JYmFYaDFxdHhjUnpvWlViYlFTMVNOMExNRldtK01LMTdOVyswVjl3a2g0TG5VTmFOZ3htSWlVODFKV3NoZE5PTm9qTlpDcHVCVFpiSkJNclpnTlFwUnZzdlRhR0YzZDJ3MThYSHZFSWhuNk9qeUhLM1VQSWFyWmMwM3I0QVJ4SFFzYWdUVEJacXdQNnZYTFJiSmhOb2RXV3BGZWcrTnJhOUVhT1FCN0dVa1VZMkFFZmNXZVNab2h5d0k4MXpMczNQMUJIM21tWnozNUpDYVljZnc3alk5QVg2bjRPMnNhR2ZXdVFaTTRQdFBCdHBmR0d4cHA2VDd2dGRtTWZZaVUwckVrOFRHYm15YVR5QkthdTR4VnhuTjh3R3RFODBOYS80K1poa1dDY2h6MlpYN2pzM0Q5SzFISmgra2J6VE9EMG03ZGZiQkhScnprMGNldGlpeDRjUWQ3VzlZdGsyb0F2endOOW5Ndm1pWUZ6Vm5xMDdZc01lTVhDcGFhcWhzclFld2ZxSTZYSkQ2K2JCR0ZyaWdoOGk2Qnd1cTVyQ3JkVWVsbEw1cUV0TjQ4bmNRK21hc1QrL3NJc0tITmU1ZWZpa3ZnNlIvVWFhdXVOVXh4RnRsYWI0aGlJTEhrdTBtQ3FXSHZ6T3pBUDJSalpnSGdHSzEzSkR0SEZxdHdVOTFrd2dZOFZiekxVYzJaWjVoSFVqQ096SWhsMW9Xbjd0UXRxMHNObG5WWWFFWFlBUVJaSlJWK1pCTTU0WUt3NG92Mk9kZ0xQVyt1R0MwemdOV3B5d3Z6ZVcvcy9GbWd2MEJWb2ozc3ZMeTd1RC9pWEFBTDBsUGtZdGZyaEZBQUFBQUVsRlRrU3VRbUNDKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXMgZWFzZS1pbi1vdXQsIHRvcCAxNTBtcyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXMgZWFzZS1pbi1vdXQsIHRvcCAxNTBtcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAzMDBtcyBlYXNlLWluLW91dCwgdG9wIDE1MG1zIGVhc2UtaW4tb3V0OwogIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXMgZWFzZS1pbi1vdXQsIHRvcCAxNTBtcyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDMwMG1zIGVhc2UtaW4tb3V0LCB0b3AgMTUwbXMgZWFzZS1pbi1vdXQ7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLndhdGVybWFyawp7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRVFBQUFCMENBWUFBQUE4YVpRZkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNCTllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlFqUkRRVE01TkVKR1JqZzFNVEZGTURrNVJFUTVRa001TnpJeU9VUTRSREVpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UWpSRFFUTTVORU5HUmpnMU1URkZNRGs1UkVRNVFrTTVOekl5T1VRNFJERWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBDTkVOQk16azBPVVpHT0RVeE1VVXdPVGxFUkRsQ1F6azNNakk1UkRoRU1TSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcENORU5CTXprMFFVWkdPRFV4TVVVd09UbEVSRGxDUXprM01qSTVSRGhFTVNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1Bsem02OFVBQUJZd1NVUkJWSGphN0YwSmNGUlZ1cjYzdTlPaDB5UUJBb1JBUWpJd01Dd3lFSXNTQ1VzSVFsaUVjUVFWbUFJSDMyTVJMZUhCVXdFVlpKRUJVWHpxVUVvSitDZ0dGU01XeHZFaG9CSjJFQWhMQUJHSVlRMmJRaGF5ZFphKzd6K1hjNXEvL3o3M0pwMTBJRkxjcWxQZG5UNzM5ajNmK1pmdi84OS9iaFRsL25IL01EdlVXamlmL2syVDlOSHFLaUMyR29LZ29xWklYalhKcTFhWHdWR3IyVitBWUVHdkZnS09Ra0J3ODZhaFY2MnVnV0x6RXd5VkFNQ2FsVGNMQVVZaFFMQld3WnViQUZSblFMRlZFd3dCZ28wMERJeENnQ2duclFMMXFUUHFZL05UVFN3RUNEdTBJUFFheEwvSEVzSUdYc1piS1grbHF1WCtQVW9JQmtPQUVNeGJQZjdaanFSRVFkSlJ5bHNKTkpjRUVFMWlpS3RyQzdXN0FZaWRnOEJhQ0RRSEFpV0lBRktHd01CZ1VZT3JWVElZMVVCcUZSTzNydmtMbEsyS3RrUFlCUnVTREFhQUUxcDlEa29JLzd0UUd3V3BDNU9LSWdrZzFMaktRRkVsZHN6STNTdmtPckpybWdKajhjT2dZblVKNWdBSVFNS1NrNU5iSHpod1lISkpTY2t5VGRNK1pvMjlaMzlyMjdadEZPc0RMWlNmNCtEWHdCS2xTbFNKVGdoVldTR3B3ZWdWWDlkR3ZLQnFRQTA4aDlVUFZRbENOeUFrZ2cwd2RPellzUjArK2VTVDEySmlZdjVnczltQ1BPSUg3NXMzYng0OVljS0VwSXNYTDU0NmZQaHdMdkU4TWxlc21YZzJHekxlZGpSNGJOU3h4MU9yb0Y1K0VUTVYzVVE5S2hYUUdnd1lNS0JWYW1ycS9PRGdZRGJyeXFsVHA4NmxwYVZsaG9lSDEzdnd3UWVqUVRwaTJkOWRMbGR4NTg2ZC8vdmt5Wk9YNFdNZXRIeG9ONkVWY25WeWNWdFRJWkZNQ3hxbzJjQUZxTUsxQysrR1hiM2J6R1pWQm9pWW1XQXU1Z0lNSmhuaERKRDA5UFRKTVBEdXJQTkhIMzMwL2NTSkV3OWpvN3A5Ky9ia1hyMTYvWmw5K1BiYmI3OFpQSGp3R25pYnl3RmhyWUNEVW93QTBZamR3bTdlVHRRQ3E0T2J1SGtYOG5BVUdLbk5zdmxoUTZSaTI3cDE2eit4VHBjdVhib0NZQnprMzN0c1UrL2V2VGZldUhHalpjT0dEUnUwYjkvK1R3WWlicFZRZnhYcFAxWVJCN0lYTXE4bTNMeUxTSkNSWjZ1V1VaV3hVMzB3b0JxTldLY2RPM2FjTm9wK2p4MDdkcDY5aVl1TGEwUEVuYkpiMWNCMlVaWDFTQ2h2RFZGcndMOExSUjVRVUFJajhLc2xJU29CeFNveHloaDl6MmVRbmp4aXlHMlNHSWg2QUN3ZHdRaVErbWlnanBkZWVxbFRVbEpTTzNZQ0dPN2Yzbjc3N2YxZ3gyNGdra2hkTVhiMVlueWFQenhFa1FSMEZoS3pLQ1F1b2NFZGxVcUxRVUJJUFF0MjgxNDI3TTAzMyt3RktqcFNTS2c0eG84ZlA1YmJxclZvc05pYmxSUFBwbFdYaDVnUkk4VmlzUmhaOXdwVlZUV0pDaHBGeWxiQ2lJVjBPSVNFTEYrK1BQbmxsMTkram9JaGprR0RCZzBCWS84OG9nZjFFR21raHRodkcySUdqR2VnZk5BVnhKckxBSkhaSXRwa1FPajJBd2hneXpGanhvd1VGMXU3ZHUwdTREL3Z3Mis4dFdqUm9nMUFCbG1Jb0REUHQyTEZpbjRTSTJ3TEJDQ3lPTUpMMUJBZ1BtSXBBVVFXSE9MbUJRSnFJVUFDdXduT3MyelpzaTJqUm8zNkVXd0hrMDdiekprelR5UW1KcTRTb0F3ZE9qVFp4S3RKV2FzL0VtTEtXL2lnM2JMNEJBNThua3dDWkFEVVI1NUNOR2UzYnQyNnNJdUFLOCtiTkduU1lhcHkrL2J0dTdsbHk1WU0xcWRwMDZiUlJQS012RnFOY3FyU2ZDZ0hSQmFZcVFRUVFmOHBWYmZ3Nzl6OHBoMUVPblJBM0c2M1BvbS8vdnBydm9SajZMK1puNTlmU3Nab000aHJsRUFEY2hzWjcwRjdCV1hrdTJBQ25BVzVkQmYvem9haTZSRDBHaUlBNGRlazNrdzJLVlpKTTh3QjF4UVExY1JOZTI0QUJvSDVpc01nQldubkRGUGozK0ZjaTJqMUFBZ0xtUUNxb200RHI2WWFzT0dBU1lncWtSQUxpWUYwTDFKUlVZRUJjVXBpRW1GUHlwREt5R2k2WFVnSWtZd0tGSi9JQUZFTXVFN0FWVVlsZ0ZoSjdrU2ZlUUFFLzA1OTVJbEt1UlNVOEZhS0Fqc01tc2NnRXZYVEpDa0VqWE1pV1hxeTFnREJOdUtXM042YU9ac2sxUmlFVmViWlo1OXRNM3IwNk5nZVBYcTBZSitMaW9wSzkrN2RtelY5K3ZUZEJ3NGN1TTR1OWRCRER6VUFKdHF6VTZkT01SRVJFU3pOb0J3L2Z2enlGMTk4Y2JvS2dDaEVRaWhGVUFPOWNrZDFFd01TUkNoM0VGV1pEei84TUFGZkpDUWt4TjYzYjk5MisvZnZiemQzN3R4dE1CZzN4Q2NKRG9jakdQZnIyTEZqRkd1U2dicEpqSEpYbGpKVkdzdHdZeGNrU1JFRUNVTW9qb0tDZ3ZJZmZ2amhWeUJVeFFrSkNRM2k0K04xQ3Y3NjY2OG40bjVIang2OUNyemlhblIwdExOWHIxNHhETHpLM0g5TmwwcHJxaktlbWVkU1lDZUE2SFlFQTNMNTh1V1NSeDU1Sk9QRWlSTXVQcU5uWDN6eHhhWnZ2ZlhXQS9nSFhudnR0YjBMRml6NFJialNaczJhQmUzWnN5YzVMaTZ1RVNHQ0FWM1BzZmhoT0ZXRGhKRlFHU3N5aExydGdFRTR3QmEwZSt5eHgySkZ2NTkvL3JtQUErU1JJZ2pacjYxWnMrYWM2QVBSNmxrQUl3dmJoeXRYcmhRTkd6WnNzeVM2MXFxd2hCRlFRTXl5WjFhSkRkRWw0Nm1ubm9yS3pNd2NDbEZwNThqSXlCRFJMeWtwcVRGSVI5Y3BVNlpFWXE3eTVaZGZYaGQ5dnY3NjYwdGtDVlNQbmc4ZE9wUnovdno1M3lTaGduYW5KTVRJWFdGUGdtMkk3aHBmZWVXVjFwOS8vbm1TMCtuVU0vQlhyMTR0T256NDhHOHd5OFdpLzd2dnZ0c0tRR2tpWTdQWHIxOHZSY25pTXR6QUs1VklET29kVVJuVklERkVhVERtSVNvREE4UzltL2c3cU1NaFVKMS9nK0hjR2hVVjlkMjRjZU1PTTZQS3ZudmpqVGRhTm03YzJHY3BCSGdFbG94UzNKZ1hrdGlRV2xjWjFXQ1JpRkp1S3pHRXJUQVlzMmJOMmcwdU5BTVJyNUtWSzFkZWVPKzk5N0owaGxhL3ZtM01tREVzLzFrT0E2eEFnV0lGQVVKa3o4c0l4N2dqS21OVTlrQzloOWV5SkhDSm1Qbno1M2NYbitmTW1iTWRKT0E0SDR4WTVOYmIrKysvN3pHZ3JWcTFZdGNyNTFJaEpLU2NTZ1lGUkNJaFNpQ0FzVlVpR1ZZSnI3REowdnZDSGJKajNyeDVhVUN5VHBEWmM0dUZyMnZYcmhVaGFYRHpnVkpBc08zd1hJZElpQlpvRzJLclpJSEtTdEo2ZGtuV3llc0FLZmtCQ05aeElzNDRrMTQrY2VMRXBxSi9mbjYraTZvTWx4YWFlZk9pM1FiNUY2VTJKTVFpV1JPeFU0N0IraXhldkxnVFBobnN4K2JaczJjZkl5dGo0cG82UVAzNzkyK3daTW1TcnVLY1R6LzlORnRpUTl3RzY3MUtUVmlvdjREUUpRZFpZWXduVWZ2T08rOTBuVHAxNmxCeDhzS0ZDemVDVWMxQVlOQUVrREp3NE1ER3dEY0dBQVVQNGt1Zko0NGRPOFl5WHhYWWh0U0dLdFJVUW1TVlFwNjhCQmpGaEJkZWVHRzRPQW5ZNlArQnV6MUN3TURCbnpwNDhPQ21FSzMrUmNRampJMkM2aHpqL1N1SWhHaUtiM1dqWnBLUWtpVzhBMnBVYVMySXAzM3d3UWU5SmsyYU5FS2NBREhJdjJmTW1IR0lpTGNYZDNuMDBVZWJBUmpESUlMVndkaTRjV01XQUxRZnI4ZmlRYUJrazVWUWRKcXFySFVKd1N0cnRCYkQvdlRUVDdjR01FWWowcFVLMVB5UTRsM3Y0WldoR2pKa1NMT1VsSlFuUlRpL2FkT21Yd1lOR3JRUHpib215YzlhMEwxWlpMWUU1VlQ5bFFhdHVoTGlFOGJQbkRuekw2SWpHTWF2Z0hRZGtTUm9QR0krZE9qUUtLRHdJM0J1QSt6SVBzVzN6c3hyNXVHOUZlVld2T3BhSlFraWYreE5wYVZWTnBPNHhXZHBzVjI3ZHAxWmh5TkhqdndNSWZzUnhhU1dDeUxjcU04KysreHZOTkdqeUNzR3ZkU0FSODVCNkI0RTRLckJJQ3ZMaUZIeXBsV1ZxUnFWYm52bElFK2ZQbjNGSUkydnY0Y3d2Zm5hdFd2SENEQ0tpNHRka3B1cnJOQk90blNnU3NKL3QySmNZS2VZQUtGVkJSQ3RLcUtJeEpZR2ZqcEFLMWFzK0ZzOU9GaUhyVnUzSGwrM2JsMkdPQmNDUFN1YWNVOWl1RTJiTms3UnAydlhybzBWZVEyOTFySmx5MGdPY3JIQlNxR1JkTWdLWlV3TFpqU1RDK2d0THkrUDFWMG8vZnIxNnh3VEUrTXdpSWhWQ045eldMOGRPM1prSkNVbGJZRFEvNnI0a2RXclY4Y3JxREtBTllpQ2JlREdPNHMrRXlaTWlJZS9CVlAxQWhYc0lZRGVzbVhMY1FQeXBvV0doZ2FiNUYxTnBkTmlncWhQamZxdVhidjJzQTZzUEdydjNyMmpPU2crVWdLenZSSmltMy8wN3QxN1BRdktnTVQ5QkNBeEFxWUFVMjN6NDQ4L0pvSnhaY3NScFpNblQyN0JVb05ObWpTcGp4UFBHUmtaajArWk1xVWx1dytRR09jMzMzeVRPSExreUo3c2U3YVlEUkh6VWNXM3prUGpBYU9laklhWTZhTGlXL1ZveW41VmlkNks4aVdIY3J2YWtJWG9yRndwL01xVkszTWpJeVAxSllUczdPeXIzYnQzLzllRkN4ZUt5STlTY21ZRkl4c05NenhHWW1ROUI4dUdGUllXdXRxM2I5L0N6RldBTkMxYnVuVHBLZVRtdllwd1FLWC93ZnFscDZmdkJUQS9WRzVWUFlyS1IxSDlLQ29meTNHMjNtSWdIUUw1TXBTUDBQTVpQWHYyWEFLZ3NCU2YwcUpGaTBpWTNURWdLU0dLNzRxNktPdG01eGFucHFabWpSNDllaVVZNUxPeVFXN2Z2djBvWEh0Tmh3NGRWbS9Zc0dHL3JBOVQyVkdqUnIwTllQekVyKzFUQlRScjFxd080djJCQXdkT0VYc2xreWpOVEVKd1VJZXJsVU9ScElTMWJ0MjY2YzZkTy84TERHUnpJaW1GaW5lTlNMbUV6cXNqUm95SUJ2YjZ4N0N3TU1lNWMrZHlnY1Ztd2ZWeThJMkJ5am1tVFp2V0hveG9RN1lTQjE3ckNBU0M1OGphQ3kzYnRPN2V2ZnRKdUpjSDJaZkp5Y2t6dnZ2dXU3TkVRa1J0TEMwRGxmcHNNY3V5eXI4dzFFSkJUNXZBSUthQThZc1NvQ1FrSkt3R3NTOGs2VDg2azI0ekRpSTU2R3dhbFlqYVFNSWl3SkMvekU0NmNlSkVCa2piLzNBUU1DQUZYRjFLYUs2bHFpb2oxS1dJSTZ0WEhtZGxaZDJBRy9qblpUaXcrc0NNT2hUZnNpdHhyUkkrTXdWOHB0Z041dkxHSk9RR2J6bTg1WkpCdU5BZ2FMcENYYng0Y1Q4eGtJOC8vdmg3a3BNdE01QmFwU3BleGswV3BGMThJQUlVdmZvWVFMbU9RV25ldkhrekFPWHZzYkd4RGdrLzBTUWdpMnZsazViSEFSUEdqNHEzU3RVRllxdy9DbFU1YytaTUpzUlp4MlVwU0tXUzhtNkxDWW5CbVc4TVNBR2E0UUlCaWpDMERCVFE0LzhBVUVKSVB0WUlHTmwxQzVHZWx4Q3B3TnRVOUdRVi9GYjlCUXNXUENFR01YdjI3QlIwZlJkT1VpdStwZDFWeXJwaktjR2VCa3VJcHpGUWV2VG9zWlNBTWc1dU5OUWs5WWpMc0VzUU1QaVZ1a1VMVFZxQmlvYkJiLzBuNDBhc1ExcGEyclkxYTlhY2tZQlJxbmh2QVBCTFpjeHNTVEVIUllpMFIzMFlLRmg5T0NoaHl1M3FRcnpCQ0VzTFhtN0FneWhIUVoyVjVtY0FqSEJ3NThQWWI3SGZaQlBTdDIvZmRaUXFJTnRUVmgxQUZBbDFsNmxPSVZZZGJtaHpBSlFQTUNqQWJzYzkvdmpqY1lwM05WQ3c0bHUwajR0K3kwbCtoWlo0TzREN05JUnJqKzNTcFl0bjh3RjR1V1ZFb3FtNlZDZ21PeUVxVzdtanNZeVJQU2xFcjhWZzBITGh4ajRTQkl4NUgrQVBZNWN2WDk1SHVWMTY2U0RTWWxIa082bm9Iais5MW16R2pCbGRUcDQ4K1VKMGRMU2V2Yjk0OGVJMU1Lai9DNzlkWUdBN1NoSGdibi9DZjM5QkVlcFRoSHk3Nit6WnN6ZmJ0bTI3YXR1MmJTeG5xckNBYk55NGNRTWducGtCVFBJaEJkV2RLcEk2TXBMWUZqV3N6dWVmZjc0VEFQSHN3b1VMbjhRaEFCalJOT0EvSllydmxsanFiaXRkK3F6SzZqOEZCYnZqRW1SWHNLN3FZdG1uVDUrTlFKQ3l4WVVhTldvVVBtL2V2TkU1T1RsenQyN2QrbmNJOFA2QWdQRXF2K1R2blIwN2RveE1TVW41SzJqaExLRHNFOFVPTFVuS1VVWVpqT2g2alF0bThPb2JGdWt5U2NPN3RqMnIrcXlXVEdUY0d6Um8wREF4TVRFcFBqNyt6K0hoNFpQUnZlQXFSTmJYT1hmdTNBSERodzhmZ1c5bTgrYk5tYXo4QWdCdGhUSnNGZ1A3NTllQ3VELzFJVVo3VHVoc1lFcnVxUnJNek16TUJaYWZzbXJWcW9NaUZRQWd1UlRmOHUxUS9Bb3F3b3kyWHNxOWZ2MzZERENpWHc0WU1PQUFWeEVzSVViYlRBS3lsT2tQT0RpeDVMTTJMQUJocitBVzFXZWVlWVpGcXVrUWxsc2dHczNtZ3hmVnkrVW9VYzBrSk9UVlYxLzlCZG9DSGtONXRyaml5a2FlbExaS2lLQVJVRnFnQVpGdEZaR1ZTOWhFb1MxL0ZWa3dEY0FvNGdNVXJ0WE9WVVpEQkF5WGQzdnRzOE4xYTNCdG0rSzc2d0V2ekl0ZzBCMG9HNkpVc2dac1UzdzNHT3VlQWttSWhRK0sxcHFMd1F0V0tpU05waUNjR0JSY0RBenZNV0dqSk5DRzdKTUZUWUFXS0VCVWsvVmZ2TjlGZDZkRVFoeUs3eVpFd1RIS0NDQSsvQU92TFdOQTROcDJEbHd4NGtqaVhvcjViNVloMW11b09yWWFnQ0hkQnZiY2M4OTFLaTR1RG5lNVhLSFF3cHhPWnpDdkZnb2FNbVFJSTFKdVZ2OEJyWXkzVXY1YXdWZjlkVUNZWkRGVmdNWXFvZTM4bFpWNHNtWUZVdVlwNUFORDI0UmR3MjYzUndEbHlRZFNtQVZ1WFFTSXdaSlFvTUpzZ1A1V0hBa1FIQ2h4eElwbDJOSkJNN2paZnlwMytmanFxNisraDNEaEU1Wm5obmFkNTFWdWtweEtoVkxOZmJ0bTlrT21NbmY5S0NzckV3Wlo5bEFFTlZBOHBMTDFYMkhVN3ZyQnE2cUREZElPcHZ5a3VudnVWQU1QVXljQVFXdkRSby9NcUJVSmtZRmlxME1TSWxPVlNpVWtFTVNNOGhIRFk5ZXVYUzYycEVCS0s2dGF5dURaek1oY2VNdVdMVzNnYVd3R2E4OFdwWXA3N0FJTmlFV3l0bXQ0OU96Wjgyb2x5VjZ0a3QveWVMbEZpeFkxbmo1OWVyakpZbnhsc1UxQWVFaFZwTVZVbWxFdzZEWUl5Mm5KZ214L2ppVTJOdGJ3NlRpb3VzanZJTTl5SjNVYm90UjZraFg0eWxJT3N1amFiUVpJTlRsV3dDU2tPbEV5VzdDT2lJdUxzOU9LUVVtbHN1ZVlPblhxSmFXV1N6YnZLQ0FOR3piMEVDTUFJM2phdEdtUi9welBBZEdQamgwNzFvcUx2Nk1xRXg4ZmI2OXU0b2FxUVZoWW1PVjNMeUhZeU9YazVIaFc4VmVzV0hGOS9mcjErVlN0UkxCWGswTGNPZzBJNHc3Q1k2U25wM3NLOFhKemM5MGJObXdvUm5sYm84SThIY3hCZ3dZNTd5VkFmRGdMOEJQbjRzV0xyUkpwMEQremR1Yk1tZEtsUzVkZTUybEo2ejBCQ0NaTW1abVpucHpFd3c4L0hNS2EyYmxMbGl5NUpwZ25OODYxY3R4Um85cXBVNmNnSWZhblQ1OHVyeTZZWGJwMHFYZFBTQWp5RExwTkFGdHdRVEY1eXZld1ljT2M0OGVQMTNkcTVlWGwwVWNDL3Y0Qm9jeHp6cHc1amJwMTYrYmtIdVVud2w3VmZ2MzZlYmpHd1lNSFJhV2p4bTNSNzE5bEVIMlhQZC9NNTVGZllrc3FsWnphQk9SdTVpKzhLUGptelp0amQrN2NtYzhrZ1JuTlBuMzZoQUY0RGNUM1lJUkxheEtqMUZsQXNJZll0V3RYSWFpTVhzSGN2My8vY05hTXpqdDE2bFNwU1BRODhNQUQ5bnRHWlRoOTF5VmszYnAxdVd6UC82VkxsMXhHL2RsanVHYlBucDJOMlc1dDBmYTdwVEllTDdGbno1NmlKNTU0Z3RXRHVSTVNFaHlnSXZXQnBJV2RQMy9lbFphV2RuUDE2dFc1aXZlZUhmV2VVeG5DVmoxR2MvZnUzUVhRV0R5VGphVFhRb0MwQUdqTzJyeS9PNjR5UFhyMFlKSVFxc2dmdUVhYjEzOFdhTk9talNNcEtTbkVENk45eHlWRXRyZkc5SWlKaWJGdTNMaVJsWU5IYmRxMDZTWjRsb0tVbEpSY01KckZoSWRZSWlJaTdBTUhEZ3hOVEV3TUF4SVhHaDBkSFZRbG5mUjl0b2hXMjRESWltZEVydFFmVGhMSzJ2ejU4Nk95czdQWjA2cHVwcWFtNW9MaERRR2JFaW84a045aWYrdXhYVWIvbU1QMHdRazFCWVFXNDVWVlY5UmF0R2hoSHo1OGVBUnJOYllEdDNhSjAvTE9nSmRVbVlFaEFDbFI2c0JodFZyWi9iaE1RTkVDQlFqTmhOTU5BblVDa0tDZ0lERTVwUWFnMUpxRTRIMHhvbWExTGdBaTdrZUFVbVhWcVM0Z3NucFZVZGw4MTQvZzRHQVh2NWRpeGJzZXBGSUpxVTdCREs0Nzl6dzRXcm05QlMxY3VWMk1LOHFhY0FtM1RQMk11SVBzTVovMG4vbVVLNzZibk1TZUc3cWxERXVNRkJ4YkRkV2xWUEV0TXloWGJ1K2Fvay9LRGlUdGxtMU13THMxUk1PMnBLSXlsYkVGUUdWY1pOYUVRUk9WaUxnMHNqWUFvWS80d25YNFdDb3dKd2tvRDZGU1FoOERMQXdhclJPdERVQmtvT0RkRUVZN0lRSmV1Q3RxUGNzbHMxV3FHUC9maDBCSHFwUXBVMkNveXcxNDRTNTlxSnFpZUpjMlZDakcvL2V1TnNKMm94Q2lLbVVYQWZFeTFQSWJGYzNJQ2xWcUN4QXNLYklIenNyMkMydUJCRVRtRHF2NkQ3VnFNejhyaTc1bHdWekFKY1RzZkRYQTE2K3VPbGZsOC8zai9uSC9xUG54L3dJTUFFRVAyb3dydHpZUEFBQUFBRWxGVGtTdVFtQ0MpOwogIG9wYWNpdHk6IDA7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLndhdGVybWFyay5mYWRlSW4KewogIG9wYWNpdHk6IC44NTsKfQoKYm9keVtkYXRhLWhyZWY9J2dhbWluZyddIC53YXRlcm1hcmssCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddIC53YXRlcm1hcmsKewogIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUMwQUFBQmVDQVlBQUFDM3JKMzFBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZORUV6TUVWRE4wUkVPREJHTVRGRk1FSkRNRVpETWpBd01qTkROamMwTURjaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5FRXpNRVZETjBWRU9EQkdNVEZGTUVKRE1FWkRNakF3TWpORE5qYzBNRGNpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMFFUTXdSVU0zUWtRNE1FWXhNVVV3UWtNd1JrTXlNREF5TTBNMk56UXdOeUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8wUVRNd1JVTTNRMFE0TUVZeE1VVXdRa013UmtNeU1EQXlNME0yTnpRd055SXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QcGd2YTJRQUFBUzVTVVJCVkhqYTdGdUxjZUl3RUxVektjQ3BBTk9CTzRoVFFiZ0tEam9nRmNSVXdGMEYwRUdnQWtNRjVpcUFWQkJTZ1UrYVdaRmxUN0prVzVJMUZ6U2pNUmpiZWxxLy9VckVkVjFILzFWakUwcFpYN0grVVgrMUR6aVhoQWc0STJCcDQ3OWxRMkNMVlJKbWg0cDFJYzBkNjF2NC9zaDZEdWZQckkvak9ENkhJT1VWa3VoYzgzc1JDaldPQUtneXVLYjBqZTlPY1Q2RjQ3YmgzaDBjYzkrZzczdmMrKzd3VGVkSUdDZldOMXE5TWVFci8wMWNaQkhzQk5HT3RrSkhqeUgwYU1vT2I0aWF0TDF5QXhBTWFEQ3hTM1Jxd2ZvRG93UTN5VE13cmJ4TllYTEQwNE9iVlkySlRaR2pxMEtoeDdOUU9pYmNYLzk0d0RqbXlyaUdyMWt3bkVhV1F0VStnMU5FRzg3bEJ2b0cyaFpvOEdSdmtrUWhsU1FVMk9PVlNydnJLUGJBN1kxODUzSDNGSnpCRE00dFVYd2VvV0FySHdxMFNBZzJFRWpoUkdFbGlRNzNySTlZbjBnbTRnMDB0NjlQNEFSd0xFRUJ6OWcxYTNUTkN6dndlRHh6eW1tZTBJS3IvWWxPSHlSZWpJUEQzbTJOQWNNMS9PMzhjS3FJRU9jZWdaODRHdU92K1NoUnFxM2lNM1hSQnllZ0FWQ0pPSGdDZm1MWHUycXdCbWVOUHRnRkxlSG5DNU1RejhJNWo4Zndpc1hBUzljMWtic09nR2MwRW1QZk54QURDM00zR1JMMHN3VHdXbkh0V3BJWUR3STZNd1FjK1N6WW1DcGlJMkRoeXJzcVZtL1FFdTAzQVp3UkdtMjhnVllvblFsZ2JBb1gyRE02QlcwSk1QZDZoUmRPV3dRODg2S0lFajRHRFZoSStyVW40TWduWUFGYW1LcE5GOEJEcDF0L1dnSStod0RhSktWS2tNditqV05zeFQycHdydXFQSytaSUZDaWVXeUt6aUFKclVYbEVwTFpHcCtUSkF0SGt1d21rdXNLZE0yMFlmemxwWFpJYnFvMHdCUEZoR3ZJeGpNMG9VcFNZejRLZHcvWitWSTNLWW5RS25HaU1nVk9lYTVadGhQUEsydDl5elZqWGI5VmVKVjlnS3RBWFJaSmlWU3A5RE9EdXNxRlFqRjU5VGd6UGtDR2ZUWUZEMldEUktSaU5BYUJNU1pJUWJtWlBSZzhld1YxRk43R011WHBKSEZYRGJoLzBadW1Fa0V3d01sQ2E2NnJiUXdPbklQRWRUL1Rvc3hnd0NWMlBtdHpvM2Zna25HWGZSL2dGRGlNaDh2R2xhMlpWeTcyZWxnWEVEeXdKRzUzYmhId2hIaFhlMitVbUtDcmVLS0hoU2pidXZVdUE1VUtkN3pFU3hhYXR6WlhCRlhPUWN1Q3BhUEIvWE5GbkdMa1NQb3VGUEc0NFFHS2o2Y1dnZndKSFhreGN3eDU1cnRMTzFyS3ZKUUpOVFRQTFh4SW1oWWhuVmFXbklBT01iRU5wdDBiY28zeVN4ajl4TEpwR3VFTW5leC9PUW42eFlhZ1E5aEZ1eERGelJ1bmI2Qy9wZlhRdEoxRlBHbGthem12cVN4a09Ud29Hb1lxUXFYSHlBdW5MVHVYMUJlbjhRU21iVG5aWlRYTUJ1aUVTT3ExNWYwWWRPYUZIbEhMclR3dEJPQ0hIaVJyNFJuSk5sUTdQU0xwbDJpZmpLODdGd3A5NzFEakh3MytUbkxTTFFQNm9BZE90L0pJdjFGdzBaYlAxaFd4WjQ2WStaUTBsZENUNW5xK3hXamVvdHpnbkI0UjJPa2NKQjlyRk83UTFvVmJpejBzdWZKMFNFbmp5ZkNGblQxSVZQekRicUpRWE8vMHdMemVJNnN4aVJyMjZCSEZ6YnpTZ3d6SU4xMnROVkxrVHVlbGl3dDNRZzlZekp3QlBjU0M2Q05NWWcrN0pRZDM0MHJOaHdrY291c3R5YjBWMlJZOThxNFdCQ3F0K1JDUzVnT1hrREp1UUJrM01nOEo2eWc1c2lTdEUxblhaYkZUOVBXbjRpeTYvcTlBMjNZcGl6bTEweURGYWZTMWcrRDdGbXR1b0crZ0c5cGZBUVlBS3c1R2dUSmthSElBQUFBQVNVVk9SSzVDWUlJPSk7Cn0KCi53YXRlcm1hcms6aG92ZXIsCi53YXRlcm1hcms6Zm9jdXMKewogIG9wYWNpdHk6IDE7Cn0KCgoKLyogU0lURS1HUklEIE5BVklHQVRJT04gKi8KLm5hdiwKLm5hdjpob3ZlciwKLm5hdjpmb2N1cwp7CiAgdGV4dC1zaGFkb3c6IDAgMCA1cHggIzAwMDAwMDsKICBjb2xvcjogI2ZmZjsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgouYXJyb3dfdXAsCi5hcnJvd19yaWdodCwKLmFycm93X2Rvd24sCi5hcnJvd19sZWZ0LApuYXYucGFnaW5hdG9yIGEucHJldmlvdXMsCm5hdi5wYWdpbmF0b3IgYS5uZXh0CnsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL3N0YXRpYy9pbWFnZXMvbmF2X2Fycm93cy5wbmcpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLmFycm93X3VwCnsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wOwogIGhlaWdodDogMTAwcHg7Cn0KCi5hcnJvd19yaWdodAp7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xMDBweDsKfQoKLmFycm93X2Rvd24KewogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMTcwcHg7CiAgbWFyZ2luLXRvcDogLTEuNWVtOwogIGhlaWdodDogOTBweDsKfQoKLmFycm93X2xlZnQKewogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMzAwcHg7Cn0KCm5hdi5wYWdpbmF0b3IKewogIGRpc3BsYXk6IG5vbmU7CiAgcG9zaXRpb246IGZpeGVkOwogIGxlZnQ6IDUwJTsKICB0b3A6IDY1cHg7CiAgbWFyZ2luLWxlZnQ6IDUwMHB4OwogIHdpZHRoOiAxMDBweDsKICBoZWlnaHQ6IDI1MHB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgei1pbmRleDogMjsKfQoKbmF2LnBhZ2luYXRvciB1bAp7CiAgZGlzcGxheTogbm9uZTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKfQoKbmF2LnBhZ2luYXRvciBhLnByZXZpb3VzLApuYXYucGFnaW5hdG9yIGEubmV4dAp7CiAgZGlzcGxheTogYmxvY2s7CiAgdGV4dC1zaGFkb3c6IDAgMCAzcHggI2JiYjsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwcHg7Cn0KCm5hdi5wYWdpbmF0b3IgYS5wcmV2aW91cwp7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC02ODNweDsKICBwYWRkaW5nOiAwIDAgNTVweCAwOwp9CgpuYXYucGFnaW5hdG9yIGEubmV4dAp7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC01MDBweDsKICBwYWRkaW5nOiA1NXB4IDAgMCAwOwogIHRvcDogMTM1cHg7Cn0KCm5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgYSAgICAgICB7IGNvbG9yOiAjNTU1OyB9Cm5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgYTpob3ZlciwKbmF2LnBhZ2luYXRvci5mZWF0dXJlcyBhOmZvY3VzIHsKICBjb2xvcjogIzAwMDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAgICAgICBuYXYucGFnaW5hdG9yLmhvbWUsCmJvZHlbZGF0YS1ocmVmPSdtb2JpbGUnXSAgIG5hdi5wYWdpbmF0b3IuaG9tZSwKYm9keVtkYXRhLWhyZWY9J2dhbWluZyddICAgICBuYXYucGFnaW5hdG9yLmhvbWUsCmJvZHlbZGF0YS1ocmVmPSdidXNpbmVzcyddICAgbmF2LnBhZ2luYXRvci5ob21lLApib2R5W2RhdGEtaHJlZj0naG9tZSddICAgICAgIG5hdi5wYWdpbmF0b3IuaG9tZSB1bC5ob21lLApib2R5W2RhdGEtaHJlZj0nbW9iaWxlJ10gICBuYXYucGFnaW5hdG9yLmhvbWUgdWwubW9iaWxlCmJvZHlbZGF0YS1ocmVmPSdnYW1pbmcnXSAgICAgbmF2LnBhZ2luYXRvci5ob21lIHVsLmdhbWluZywKYm9keVtkYXRhLWhyZWY9J2J1c2luZXNzJ10gICBuYXYucGFnaW5hdG9yLmhvbWUgdWwuYnVzaW5lc3MsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1vZmZsaW5lJ10gICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1zdG9yYWdlJ10gICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1jb25uZWN0aXZpdHknXSAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1maWxlX2FjY2VzcyddICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1zZW1hbnRpY3MnXSAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1tdWx0aW1lZGlhJ10gICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1ncmFwaGljcyddICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1wcmVzZW50YXRpb24nXSAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1wZXJmb3JtYW5jZSddICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1udXRzX2FuZF9ib2x0cyddIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1vZmZsaW5lJ10gICAgICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwub2ZmbGluZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXN0b3JhZ2UnXSAgICAgICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5zdG9yYWdlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtY29ubmVjdGl2aXR5J10gICBuYXYucGFnaW5hdG9yLmZlYXR1cmVzIHVsLmNvbm5lY3Rpdml0eSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWZpbGVfYWNjZXNzJ10gICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5maWxlX2FjY2VzcywKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXNlbWFudGljcyddICAgICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5zZW1hbnRpY3MsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1tdWx0aW1lZGlhJ10gICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwubXVsdGltZWRpYSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWdyYXBoaWNzJ10gICAgICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5ncmFwaGljcywKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXByZXNlbnRhdGlvbiddICAgbmF2LnBhZ2luYXRvci5mZWF0dXJlcyB1bC5wcmVzZW50YXRpb24sCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1wZXJmb3JtYW5jZSddICAgIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwucGVyZm9ybWFuY2UsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1udXRzX2FuZF9ib2x0cyddIG5hdi5wYWdpbmF0b3IuZmVhdHVyZXMgdWwubnV0c19hbmRfYm9sdHMKewogIGRpc3BsYXk6IGJsb2NrOwp9CgoKLyogSE9NRVBBR0UgKi8KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3N0YXJ0CnsKICBiYWNrZ3JvdW5kOiBub25lOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMTAwMHB4OwogIGhlaWdodDogMzg1cHg7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3N0YXJ0IGFydGljbGUKewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAuNWVtIDJlbTsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjaW50cm8gewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5wYWdlIC5jZHMtYmFubmVyLApib2R5W2RhdGEtaHJlZj0naG9tZSddICNiYW5uZXIgewogIGhlaWdodDogMTAwcHg7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1ob21lLXRoaW4ucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luLWJvdHRvbTogMyU7Cn0KLnBhZ2UgLmNkcy1iYW5uZXIgYSwKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjYmFubmVyIGEgewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICB0ZXh0LWluZGVudDogLTk5OTllbTsKICBmb250LXNpemU6IDA7Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ0MHB4KSB7CiAgLnBhZ2UgLmNkcy1iYW5uZXIsCiAgYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjYmFubmVyIHsKICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCBuby1yZXBlYXQsCiAgICAgICM2M2E3ZTA7IC8qIE9sZCBicm93c2VycyAqLwogICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1ob21lLW1pZC5wbmcpIHRvcCBsZWZ0IG5vLXJlcGVhdCwKICAgICAgLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNjNhN2UwIDAlLCAjNDM5M2Q1IDEwMCUpOyAvKiBGRjMuNisgKi8KICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCBuby1yZXBlYXQsCiAgICAgIC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsICM2M2E3ZTApLCBjb2xvci1zdG9wKDEwMCUsIzQzOTNkNSkpOyAvKiBDaHJvbWUsU2FmYXJpNCsgKi8KICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCBuby1yZXBlYXQsCiAgICAgIC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzYzYTdlMCAwJSwjNDM5M2Q1IDEwMCUpOyAvKiBDaHJvbWUxMCssU2FmYXJpNS4xKyAqLwogICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1ob21lLW1pZC5wbmcpIHRvcCBsZWZ0IC8gY29udGFpbiBuby1yZXBlYXQsCiAgICAgIC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICM2M2E3ZTAgMCUsIzQzOTNkNSAxMDAlKTsgLyogT3BlcmEgMTEuMTArICovCiAgICBiYWNrZ3JvdW5kOiB1cmwoL3N0YXRpYy9pbWFnZXMvY29uZmVyZW5jZXMvY2RzLWhvbWUtbWlkLnBuZykgdG9wIGxlZnQgLyBjb250YWluIG5vLXJlcGVhdCwKICAgICAgLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICM2M2E3ZTAgMCUsIzQzOTNkNSAxMDAlKTsgLyogSUUxMCsgKi8KICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtaG9tZS1taWQucG5nKSB0b3AgbGVmdCAvIGNvbnRhaW4gbm8tcmVwZWF0LAogICAgICBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNjNhN2UwIDAlLCM0MzkzZDUgMTAwJSk7IC8qIFczQyAqLwoKICAgIGhlaWdodDogMTIwcHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NzBweCkgewogIC5wYWdlIC5jZHMtYmFubmVyLAogIGJvZHlbZGF0YS1ocmVmPSdob21lJ10gI2Jhbm5lciB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoL3N0YXRpYy9pbWFnZXMvY29uZmVyZW5jZXMvY2RzLWhvbWUucG5nKTsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgaGVpZ2h0OiAxMjBweDsKICAgIG1hcmdpbjogLTIlIDAgMiUgMDsKICB9CgogIC5wYWdlIC5jZHMtYmFubmVyIHsKICAgIGhlaWdodDogODBweDsKICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltYWdlcy9jb25mZXJlbmNlcy9jZHMtYXJ0aWNsZS5wbmcpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0OwogICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2NvbmZlcmVuY2VzL2Nkcy1hcnRpY2xlLnBuZykgY2VudGVyIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0OwogICAgbWFyZ2luOiAtMS41JSAwIDAuNSUgMDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDgxMHB4KSB7CiAgYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjYmFubmVyIHsKICAgIGhlaWdodDogMTMycHg7CiAgICBtYXJnaW46IDAgMCAzJSAwOwogIH0KfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjbG9nbywKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcwp7CiAgcG9zaXRpb246IGFic29sdXRlOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddICNsb2dvCnsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDAgYXV0byAyJSBhdXRvOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogMTAwJTsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcwp7CiAgbWFyZ2luLXRvcDogMDsKICBsZWZ0OiAwOwogIHdpZHRoOiA5NiU7CiAgaGVpZ2h0OiAzMzBweDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcyBoMgp7CiAgZm9udC1zaXplOiAxOHB4OwogIG1hcmdpbjogMDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlcyBoMiBhCnsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3VwZGF0ZXMgdWwKewogIG1hcmdpbjogLjVlbSAwICFpbXBvcnRhbnQ7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gI3VwZGF0ZXNfbGlzdCB7CiAgd2lkdGg6IDYwJTsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAjdXBkYXRlc19saXN0IGxpIHsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddICN1cGRhdGVzX2xpc3QgLnRpdGxlIHsKICBtYXgtd2lkdGg6IDc1JTsKICB3aWR0aDogYXV0bzsKfQoKI3VwZGF0ZXNfdGl0bGUKewogIGZsb2F0OiByaWdodDsKICBtYXJnaW4tbGVmdDogM2VtOwogIHdpZHRoOiAzOSU7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQKewogIG1hcmdpbi10b3A6IDA7Cn0KCiNjbGFzc2VzCnsKICBtYXJnaW46IDAgMCAyJTsKICBwYWRkaW5nLWJvdHRvbTogMDsKfQoKI2NsYXNzZXMgaGVhZGVyCnsKICBtYXJnaW4tYm90dG9tOiAwOwogIC1tb3otY29sdW1uLWNvdW50OiAwOwogIC1vLWNvbHVtbi1jb3VudDogMDsKICAtbXMtY29sdW1uLWNvdW50OiAwOwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAwOwogIGNvbHVtbi1jb3VudDogMDsKfQoKI2NsYXNzZXMgaGdyb3VwCnsKICBmbG9hdDogbGVmdDsKICBwYWRkaW5nLXJpZ2h0OiAwOwogIHdpZHRoOiAzMyU7Cn0KCiNjbGFzc2VzIGhncm91cCArIHAKewogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luOiAwIDAgMWVtICFpbXBvcnRhbnQ7CiAgd2lkdGg6IDY3JTsKfQoKaHRtbFtsYW5nPXB0XSAjY2xhc3NlcyBoZ3JvdXAKewogIHdpZHRoOiA1MyU7Cn0KaHRtbFtsYW5nPXB0XSAjY2xhc3NlcyBoZ3JvdXAgKyBwCnsKICB3aWR0aDogNDclCn0KCmh0bWxbbGFuZz1kZV0gI2NsYXNzZXMgaGdyb3VwCnsKICB3aWR0aDogNDAlOwp9Cmh0bWxbbGFuZz1kZV0gI2NsYXNzZXMgaGdyb3VwICsgcAp7CiAgd2lkdGg6IDYwJQp9CgojY2xhc3NlcyB1bAp7CiAgY2xlYXI6IGJvdGg7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgei1pbmRleDogMjsKfQoKI2NsYXNzZXMgbGkKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogLTMwcHggNHB4IDAgMDsKICB3aWR0aDogOTBweDsKICBjdXJzb3I6cG9pbnRlcjsKfQoKI2NsYXNzZXMgbGkgYQp7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9zdGF0aWMvaW1hZ2VzL2ZlYXR1cmVzL2hvbWVwYWdlX2ZlYXR1cmVfaWNvbnMucG5nKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGNvbG9yOiAjMzMzOwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogOTBweDsKICBwYWRkaW5nLWJvdHRvbTogNzZweDsKICBtYXJnaW4tdG9wOiA0MHB4Owp9CgojY2xhc3NlcyBsaSBhOmhvdmVyLAojY2xhc3NlcyBsaSBhOmZvY3VzCnsKICBjb2xvcjogIzVGQTRBMDsKfQoKI2NsYXNzZXMgbGkub2ZmbGluZSBhICAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgICAyNXB4OyB9CiNjbGFzc2VzIGxpLnN0b3JhZ2UgYSAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC0xMTdweDsgfQojY2xhc3NlcyBsaS5jb25uZWN0aXZpdHkgYSAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtMjU4cHg7IH0KI2NsYXNzZXMgbGkuZmlsZV9hY2Nlc3MgYSAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgLTM5OXB4OyB9CiNjbGFzc2VzIGxpLnNlbWFudGljcyBhICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC01NDBweDsgfQojY2xhc3NlcyBsaS5tdWx0aW1lZGlhIGEgICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtNjgxcHg7IH0KI2NsYXNzZXMgbGkuZ3JhcGhpY3MgYSAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgLTgyMnB4OyB9CiNjbGFzc2VzIGxpLnByZXNlbnRhdGlvbiBhICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC05NjNweDsgfQojY2xhc3NlcyBsaS5wZXJmb3JtYW5jZSBhICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtMTEwNHB4OyB9CiNjbGFzc2VzIGxpLm51dHNfYW5kX2JvbHRzIGEgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC0xMjQ1cHg7IH0KCiNjbGFzc2VzIGxpLm9mZmxpbmUgYTpob3ZlciwKI2NsYXNzZXMgbGkub2ZmbGluZSBhOmZvY3VzIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTIxcHggMjVweDsKfQojY2xhc3NlcyBsaS5zdG9yYWdlIGE6aG92ZXIsCiNjbGFzc2VzIGxpLnN0b3JhZ2UgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0xMTdweDsKfQojY2xhc3NlcyBsaS5jb25uZWN0aXZpdHkgYTpob3ZlciwKI2NsYXNzZXMgbGkuY29ubmVjdGl2aXR5IGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtMjU4cHg7Cn0KI2NsYXNzZXMgbGkuZmlsZV9hY2Nlc3MgYTpob3ZlciwKI2NsYXNzZXMgbGkuZmlsZV9hY2Nlc3MgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0zOTlweDsKfQojY2xhc3NlcyBsaS5zZW1hbnRpY3MgYTpob3ZlciwKI2NsYXNzZXMgbGkuc2VtYW50aWNzIGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtNTQwcHg7Cn0KI2NsYXNzZXMgbGkubXVsdGltZWRpYSBhOmhvdmVyLAojY2xhc3NlcyBsaS5tdWx0aW1lZGlhIGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtNjgxcHg7Cn0KI2NsYXNzZXMgbGkuZ3JhcGhpY3MgYTpob3ZlciwKI2NsYXNzZXMgbGkuZ3JhcGhpY3MgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC04MjJweDsKfQojY2xhc3NlcyBsaS5wcmVzZW50YXRpb24gYTpob3ZlciwKI2NsYXNzZXMgbGkucHJlc2VudGF0aW9uIGE6Zm9jdXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjFweCAtOTYzcHg7Cn0KI2NsYXNzZXMgbGkucGVyZm9ybWFuY2UgYTpob3ZlciwKI2NsYXNzZXMgbGkucGVyZm9ybWFuY2UgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0xMTA0cHg7Cn0KI2NsYXNzZXMgbGkubnV0c19hbmRfYm9sdHMgYTpob3ZlciwKI2NsYXNzZXMgbGkubnV0c19hbmRfYm9sdHMgYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMXB4IC0xMjQ1cHg7Cn0KCiNjbGFzc2VzIGxpIGgzCnsKICBkaXNwbGF5OiBpbmxpbmU7CiAgZm9udC1zaXplOiAxMnB4Owp9CgpodG1sW2xhbmc9cHRdICNjbGFzc2VzIGxpIGgzCnsKICBmb250LXNpemU6IDEwcHg7Cn0KCmFydGljbGUucHJvZmlsZQp7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luOiAwIDAgMiUgMiU7CiAgd2lkdGg6IDMyJTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKCn0KCmFydGljbGUucHJvZmlsZS5hY3RpdmUgewogICAtd2Via2l0LWFuaW1hdGlvbjogaW5wdXRnbG93IDEuOXMgMzsgIC8qIGp1c3QgZG8gaXQgdGhyZWUgdGltZXMgKi8KICAgICAgLW1vei1hbmltYXRpb246IGlucHV0Z2xvdyAxLjlzIDM7CiAgICAgICAtbXMtYW5pbWF0aW9uOiBpbnB1dGdsb3cgMS45cyAzOwp9CgphcnRpY2xlLnByb2ZpbGUgc2VjdGlvbgp7CiAgbWFyZ2luOiAwOwogIGhlaWdodDogMjQ4cHg7Cn0KCmltZ1tpdGVtcHJvcD1waG90b10gewogIC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMC43NSkgc2VwaWEoMC41KTsKICAgICAtbW96LWZpbHRlcjogZ3JheXNjYWxlKDAuNzUpIHNlcGlhKDAuNSk7CiAgICAgIC1tcy1maWx0ZXI6IGdyYXlzY2FsZSgwLjc1KSBzZXBpYSgwLjUpOwogICAgICAgLW8tZmlsdGVyOiBncmF5c2NhbGUoMC43NSkgc2VwaWEoMC41KTsKICAgICAgICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuNzUpIHNlcGlhKDAuNSk7CgogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7CiAgICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsKICAgICAgLW1zLXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0OwogICAgICAgLW8tdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsKfQoKLnByb2ZpbGUgaW1nW2l0ZW1wcm9wPXBob3RvXSB7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luLXJpZ2h0OiAxOXB4OwogIHdpZHRoOiA3NXB4OwogIGhlaWdodDogNzVweDsKfQoKLnByb2ZpbGU6aG92ZXIgaW1nW2l0ZW1wcm9wPXBob3RvXSwKLnByb2ZpbGU6Zm9jdXMgaW1nW2l0ZW1wcm9wPXBob3RvXSwKaW1nW2l0ZW1wcm9wPXBob3RvXTpob3ZlciB7CiAgLXdlYmtpdC1maWx0ZXI6IGdyYXlzY2FsZSgwKSBzZXBpYSgwKTsKICAgICAtbW96LWZpbHRlcjogZ3JheXNjYWxlKDApIHNlcGlhKDApOwogICAgICAtbXMtZmlsdGVyOiBncmF5c2NhbGUoMCkgc2VwaWEoMCk7CiAgICAgICAtby1maWx0ZXI6IGdyYXlzY2FsZSgwKSBzZXBpYSgwKTsKICAgICAgICAgIGZpbHRlcjogZ3JheXNjYWxlKDApIHNlcGlhKDApOwp9CgoucHJvZmlsZSBoMiwKLnByb2ZpbGUgaDIgc3Bhbgp7CiAgY29sb3I6ICMwMDA7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5wcm9maWxlIGgzCnsKICBmb250LXNpemU6IDExcHg7CiAgbWFyZ2luOiAxZW0gMDsKfQoKLnByb2ZpbGUgaDMgZGl2W2l0ZW1wcm9wPW9yZ2FuaXphdGlvbi1uYW1lXQp7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLnByb2ZpbGUgaDNbaXRlbXByb3A9YWRyXQp7CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucHJvZmlsZSAudXJscwp7CiAgZmxvYXQ6IGxlZnQ7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW46IDNweCAwIDAgLTRweDsKICBwYWRkaW5nOiAwOwogIHdpZHRoOiA5NXB4Owp9CgoucHJvZmlsZSAudXJscyBsaQp7CiAgZGlzcGxheTogaW5saW5lOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwp9CgoucHJvZmlsZSAudXJscyBsaSBhCnsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBmbG9hdDogbGVmdDsKICBoZWlnaHQ6IDE2cHg7CiAgd2lkdGg6IDE2cHg7CiAgcGFkZGluZzogMnB4ICFpbXBvcnRhbnQ7CiAgb3BhY2l0eTogLjc7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDEwMG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAxMDBtcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAxMDBtcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDEwMG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IG9wYWNpdHkgMTAwbXMgZWFzZS1pbi1vdXQ7Cn0KCi5wcm9maWxlIC51cmxzIGxpIGE6aG92ZXIsCi5wcm9maWxlIC51cmxzIGxpIGE6Zm9jdXMKewogIG9wYWNpdHk6IDE7Cn0KCi5wcm9maWxlIC51cmxzIGxpIGFbZGF0YS10eXBlPSdob21lcGFnZSddIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVRQVJBT1pBQUsydHJiNit2cDZlbm14c2JITnpjODdPenBTVWxJT0RnM2QzZDRDQWdMbTV1ZERRMEt1cnE3UzB0TUhCd2VibTVxK3ZyL3I2K3RYVjFlTGk0dVhsNWIrL3Y3cTZ1dlB6ODdpNHVINStmdUhoNGRUVTFIMTlmZHpjM01qSXlMeTh2TDI5dmNEQXdNWEZ4Y1BEdy9mMzk5bloyYU9qbzJabVpyT3pzL3Y3Ky9IeDhjbkp5Wnljbk52YjI5M2QzZTN0N2VqbzZQejgvTmpZMkdWbFpmNysvckd4c2NmSHg5TFMwdGZYMTZHaG9jek16SEp5Y3YzOS9lL3Y3NnFxcXYvLy8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0gvQzFoTlVDQkVZWFJoV0UxUVBEOTRjR0ZqYTJWMElHSmxaMmx1UFNMdnU3OGlJR2xrUFNKWE5VMHdUWEJEWldocFNIcHlaVk42VGxSamVtdGpPV1FpUHo0Z1BIZzZlRzF3YldWMFlTQjRiV3h1Y3pwNFBTSmhaRzlpWlRwdWN6cHRaWFJoTHlJZ2VEcDRiWEIwYXowaVFXUnZZbVVnV0UxUUlFTnZjbVVnTlM0d0xXTXdOakFnTmpFdU1UTTBOemMzTENBeU1ERXdMekF5THpFeUxURTNPak15T2pBd0lDQWdJQ0FnSUNBaVBpQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQaUE4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWlCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlJSGh0Ykc1ek9uaHRjRTFOUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmJXMHZJaUI0Yld4dWN6cHpkRkpsWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wzTlVlWEJsTDFKbGMyOTFjbU5sVW1WbUl5SWdlRzF3T2tOeVpXRjBiM0pVYjI5c1BTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTTFJRTFoWTJsdWRHOXphQ0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG96T1VSQlJUaERNVVpETTBNeE1VVXdRVVUyUVRsR05URXdSa1U1TlRZME5DSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEb3pPVVJCUlRoRE1rWkRNME14TVVVd1FVVTJRVGxHTlRFd1JrVTVOVFkwTkNJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qTTVSRUZGT0VKR1JrTXpRekV4UlRCQlJUWkJPVVkxTVRCR1JUazFOalEwSWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2pNNVJFRkZPRU13UmtNelF6RXhSVEJCUlRaQk9VWTFNVEJHUlRrMU5qUTBJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrQWYvKy9mejcrdm40OS9iMTlQUHk4ZkR2N3UzczYrcnA2T2ZtNWVUajR1SGczOTdkM052YTJkalgxdFhVMDlMUjBNL096Y3pMeXNuSXg4YkZ4TVBDd2NDL3ZyMjh1N3E1dUxlMnRiU3pzckd3cjY2dHJLdXFxYWlucHFXa282S2hvSitlblp5Ym1wbVlsNWFWbEpPU2taQ1BqbzJNaTRxSmlJZUdoWVNEZ29HQWYzNTlmSHQ2ZVhoM2RuVjBjM0p4Y0c5dWJXeHJhbWxvWjJabFpHTmlZV0JmWGwxY1cxcFpXRmRXVlZSVFVsRlFUMDVOVEV0S1NVaEhSa1ZFUTBKQlFEOCtQVHc3T2prNE56WTFORE15TVRBdkxpMHNLeW9wS0NjbUpTUWpJaUVnSHg0ZEhCc2FHUmdYRmhVVUV4SVJFQThPRFF3TENna0lCd1lGQkFNQ0FRQUFJZmtFQVFBQVFBQXNBQUFBQUJFQUVRQUFCOGlBUUlKQVA0V0dob09KaFFVR095YzdCZ1dGaVlROUNRZ0JLdzRVQVFnSlBUK0RQejBETEF3aEV6QXhQendtQTZDRVB3Y0FDejRORkM2R0hqa0hoaElFUENJK05RQWdQSVVCR0FRYmhRSUtQd28rUGc0a2hUd2xOZzBDaFJrYVB4NE9IUStIS2cwNEhJVTdvQmNmRVljL3RSTTczTjZqT2hmSGhSRTNMZWcvem9aU1ZQQ0I0b1VoRE50Ky9NcjNZNkFQQmpKWUxUTTB5MUF0YVIxK0FPZ1ZhdFFBQ0RRS2pmRHhnUWVFVjZFRWpib1U0SUVGQmhZOHdWTDBnOUdPR1pBa3BhVDA3bENpUUFBNyk7IH0KLnByb2ZpbGUgLnVybHMgbGkgYVtkYXRhLXR5cGU9J2dvb2dsZSddICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9naWY7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQVJWQk1WRVgvLy8vZ1NqL2dTajhBQUFELy8vLy8vLy9nU2ovLy8vLzc2T2ZtYkdQd3BaL3hzS3Y5OVBQdW1aUGlWVXYxeHNQNTNkdnFnM3YzMHMvb2QyL3p1N2ZrWVZmc2pvZUN3NEw3QUFBQUJuUlNUbE1BQU84QU1CQWlTM0JvQUFBQWIwbEVRVlI0WG1YUDJRckRNQXdGMGNSdDUzcDN0dmIvUDdWMkhpeEs1MFZ3RUFndC96a3NYQWQrNmhEYTRTVjVRRGZrUXQyVTNoTlVZZGNCR2cwNGdRNjIwYURxTXZCS1o5dXFYYUZFK1lvQklCVU1pRTNTWlpCam9FaHB3ZzRRc2lZNFJoL041eDUzcitlNmpybDhBU29aQmhtb0hOVHJBQUFBQUVsRlRrU3VRbUNDKTsgfQoucHJvZmlsZSAudXJscyBsaSBhW2RhdGEtdHlwZT0ndHdpdHRlciddICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL2dpZjtiYXNlNjQsQUFBQkFBRUFFQkFBQUFFQUlBQm9CQUFBRmdBQUFDZ0FBQUFRQUFBQUlBQUFBQUVBSUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS92NytELzcrL2ovKy92NWcvdjcrWVA3Ky9tRCsvdjVJL3Y3K0tQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RCsvdjRIL3Y3K1VQYnY0cEhneDQ3QjFLOVkzdFd3V043VXIxamUzc0tDeCtyYnVLaisvdjVuL3Y3K0dQLy8vd0QvLy84QS8vLy9BUC8vL3dEKy92NFkrZmJ3ZU0yeWNNZTJpQjcvdkkwZi84U1RJZi9LbHlML3pKa2kvOHlaSXYvTG1DTC8wYWhLNS9IcDFKSCsvdjRZLy8vL0FQLy8vd0QvLy84QTdPVFRhcXVITitDdWprWFBzNVpUdjZONkcvKzJpQjcveHBVaC84eVpJdi9NbVNML3pKa2kvOHlaSXYvS215NzM4T2pVaS8vLy93RC8vLzhBLy8vL0FNS3RmWTd3NitFZi8vLy9BUC8vL3dELy8vOEEzc3FicDhpV0lmL01tU0wvekpraS84eVpJdi9NbVNML3k1Z2kvOG1lUE83Ky92NHcvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QrL3Y0SC92NytWOUN0V04zS21DTC96SmtpLzh5Wkl2L01tU0wvekpraS84eVpJdi9KbHlILzV0U3FwLzcrL21EKy92NC8vLy8vQVAvLy93RC8vLzhBK1BYdkp0R3laZFhOblMvM3k1Z2kvOHFZSXYvTG1DTC96SmtpLzh5Wkl2L01tU0wveTVnaS84MmlQTzdMcVZmZTBieU1tZi8vL3dELy8vOEEvdjcrRC9EbzFKSEtteTczeXBjaS84S1NJUCsvanlEL3hwUWgvOHVZSXYvTW1TTC96SmtpLzhxWUl2Ky9qeUQvcklFZC85bktxSDcvLy84QS8vLy9BUFB1NFR6QWxTejN3WkVnLzdtTEgvK3NnUjMvdVpkR3o3bUxILy9KbHlIL3pKa2kvOHlaSXYvR2xTSC90bzByOWVYYnhEL1Z4NmRnLy8vL0FQNysvaC9wMzhXaHRJc3E5YWwvSFAra2Z5anV5YmFLZ2YvLy93Q3pqempsd0pBZy84cVlJdi9KbHlIL3U0d2YvOENrWXJuLy8vOEEvLy8vQVAvLy93RGoyc1JNbkhVYS83bWVZYTdWeDZkZy8vLy9BUC8vL3dELy8vOEEyTW1uWUs2REhmKytqaUQvdm80Zy82MkNIZi9rMnNRLy8vLy9BUC8vL3dELy8vOEE4T3ZoSC9mMDd3Ly8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dDL3AzQ2ZwbndjLzY2R0t2UGcxTFo4Ly8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BTlhIcDJESnRvcUJ5TFdLZ2YvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLzhBQVAvL0FBRGdQd0FBd0E4QUFJQUhBQUI0QndBQStBTUFBUEFBQUFEZ0FRQUE0QU1BQU1FREFBRFBod0FBLzQ4QUFQL25BQUQvL3dBQS8vOEFBQT09KTsgfQoucHJvZmlsZSAudXJscyBsaSBhW2RhdGEtdHlwZT0nbGFueXJkJ10gICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQU9ZQUFEOTJ4eHRMbEgreS94bFl0SU9rMWlGTGpKQzgvbHlOMTNTaTVuS204VFplbXZ2Mzh5cGVySTZodk9ycjdTTlFsUlpGalRKcnZWSjl2U3Bud0ZPRXpHS1QydmJ6N21PWDVWZUl6di8vK3I3TzVHdWQ1bVdVMnpWc3dJQ3gra2Q3eUltNS9pQmd2ZmIwOGZMeDd5aGx2eGxHalBqMThmSHc4QzFwd0krNy9pSk5rQ1JQa1N0a3VpVlZueUJOa0NKUGxmUHk4UER3Ny96NjlveTYvaDlSbkNsV20vVHk4WCtoMHZqMDdpMW52RFp2eFBIdjdqRm10dEhaNHh4VXFPRGs2akp1eElHWnY5UGc5Snl6MUV4c240eTUvY2JOMXg5Tmt5VlJrbXVpOHBqQi9vdWd3Sm02NlhxcThGQnZvTzd2NzQrOC9vU3k5U0JManFhMXkvajI4NFcyL2o1cHFTQmN0ZS92OE16UjJwVy8vdmoyOUp1ejF1UHA4dGpmNlh1dy8zNm0zeUJXcHpCcndYZXQrekZzd1c2T3YzK2V5dlB5NzQyZnZGeUl5RnlMejdMTytQWDA4ZmYyODluaThMalE5Sit5MEhlcDhQLzk5VFZzdTJtVjF6VnN2dkx4OEsvSDdDUmd1Q1prdnBTbHZ5eGt0OExOM01iVDUzcXUrdS92N3lIL0MxaE5VQ0JFWVhSaFdFMVFQRDk0Y0dGamEyVjBJR0psWjJsdVBTTHZ1NzhpSUdsa1BTSlhOVTB3VFhCRFpXaHBTSHB5WlZONlRsUmplbXRqT1dRaVB6NGdQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlRV1J2WW1VZ1dFMVFJRU52Y21VZ05TNHdMV013TmpBZ05qRXVNVE0wTnpjM0xDQXlNREV3THpBeUx6RXlMVEUzT2pNeU9qQXdJQ0FnSUNBZ0lDQWlQaUE4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGlBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlpQjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpSUhodGJHNXpPbmh0Y0UxTlBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZiVzB2SWlCNGJXeHVjenB6ZEZKbFpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMM05VZVhCbEwxSmxjMjkxY21ObFVtVm1JeUlnZUcxd09rTnlaV0YwYjNKVWIyOXNQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdRMU0xSUUxaFkybHVkRzl6YUNJZ2VHMXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvek9VUkJSVGhDUkVaRE0wTXhNVVV3UVVVMlFUbEdOVEV3UmtVNU5UWTBOQ0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG96T1VSQlJUaENSVVpETTBNeE1VVXdRVVUyUVRsR05URXdSa1U1TlRZME5DSStJRHg0YlhCTlRUcEVaWEpwZG1Wa1JuSnZiU0J6ZEZKbFpqcHBibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPak01UkVGRk9FSkNSa016UXpFeFJUQkJSVFpCT1VZMU1UQkdSVGsxTmpRMElpQnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qTTVSRUZGT0VKRFJrTXpRekV4UlRCQlJUWkJPVVkxTVRCR1JUazFOalEwSWk4K0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBpQThMM0prWmpwU1JFWStJRHd2ZURwNGJYQnRaWFJoUGlBOFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K0FmLysvZno3K3ZuNDkvYjE5UFB5OGZEdjd1M3M2K3JwNk9mbTVlVGo0dUhnMzk3ZDNOdmEyZGpYMXRYVTA5TFIwTS9PemN6THlzbkl4OGJGeE1QQ3djQy92cjI4dTdxNXVMZTJ0YlN6c3JHd3I2NnRyS3VxcWFpbnBxV2tvNktob0orZW5aeWJtcG1ZbDVhVmxKT1NrWkNQam8yTWk0cUppSWVHaFlTRGdvR0FmMzU5Zkh0NmVYaDNkblYwYzNKeGNHOXViV3hyYW1sb1oyWmxaR05pWVdCZlhsMWNXMXBaV0ZkV1ZWUlRVbEZRVDA1TlRFdEtTVWhIUmtWRVEwSkJRRDgrUFR3N09qazROelkxTkRNeU1UQXZMaTBzS3lvcEtDY21KU1FqSWlFZ0h4NGRIQnNhR1JnWEZoVVVFeElSRUE4T0RRd0xDZ2tJQndZRkJBTUNBUUFBSWZrRUFBQUFBQUFzQUFBQUFCQUFFQUFBQi9DQVNpa3BJRE16Qm9pSmlGQmFJRjlGYTBKdlh3S1ZscFZWSGg1ZE9CWU9VV04rb3FOK0hrMEpibWQvRmt4SkNhK3dDWEVJRjNjbWZ5SWFGeHU4dlJzSUJ3ZGdXREV3UDNRVnlSekxGUWNkUUFCOUluOGpOeGhxYWhnVUh6cGtkUk1oQkF0L0MwTW9PanBpS0JNVEVSRVRlUjhPSjJ3OU9TUVRKQ0VoN1R3c0xIZzBtSWd4UXNLQUt4SFMzSml6aDRGREgyYkdMWUFqZ1lzWEczTEtoS25Sb2dVTkt3N3MvSGtDWTRHSU5obVdCRUR5NE1HTEkzeW8vTEd6UmNhSUxIb1VIRm5SOGdHRUlCbGs3RERTd0lrS0NEdFY5RHlpWUFvYUlsSWdCSGpSY2tVQkZWaFZTQ2tCb1lTTHJGZ0xCQUlBT3c9PSk7IH0KCi5wcm9maWxlIC5saXN0LWFydGljbGVzCnsKICBjb2xvcjogIzY2NjsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBmbG9hdDogbGVmdDsKICBmb250LXNpemU6IDE1cHg7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBwYWRkaW5nOiAzcHg7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogY29sb3IgMTUwbXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0OwogIC1vLXRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0Owp9CgoucHJvZmlsZTpob3ZlciAubGlzdC1hcnRpY2xlcyB7IGNvbG9yOiAjNWZhNGEwOyB9Ci5wcm9maWxlOmZvY3VzIC5saXN0LWFydGljbGVzIHsgY29sb3I6ICM1ZmE0YTA7IH0KCi5wcm9maWxlIC5saXN0LWFydGljbGVzIHNwYW4KewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDMwMG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IC1tcy10cmFuc2Zvcm0gMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDMwMG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzMDBtcyBlYXNlLWluLW91dDsKfQoKLnByb2ZpbGUgLmxpc3QtYXJ0aWNsZXMuYWN0aXZlIHNwYW4KewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgLW8tdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQoKLnByb2ZpbGUgLm1hcCwKLnByb2ZpbGUgLmFydGljbGVzCnsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDI3OHB4OwogIGhlaWdodDogMTI1cHg7CiAgb3ZlcmZsb3c6IGF1dG87CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW1vei10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGFsbCAzMDBtcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbjogYWxsIDMwMG1zIGVhc2UtaW4tb3V0Owp9CgoucHJvZmlsZSAubWFwICAgICAgICAgICAgIHsgbGVmdDogLTgwMHB4OyB0b3A6IDEzNXB4OyB9Ci5wcm9maWxlIC5hcnRpY2xlcyAgICAgICAgeyBsZWZ0OiA4MDBweDsgdG9wOiAxMzVweDsgfQoucHJvZmlsZSAubWFwLmFjdGl2ZSwKLnByb2ZpbGUgLmFydGljbGVzLmFjdGl2ZSB7IGxlZnQ6IDIwcHg7IHRvcDogMTM1cHg7IH0KCi5wcm9maWxlIC5tYXAKewogIGJhY2tncm91bmQ6ICNkZGQ7Cn0KCi5wcm9maWxlIC5hcnRpY2xlcwp7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi5wcm9maWxlIC5hcnRpY2xlcyBsaQp7CiAgbWFyZ2luOiAuM2VtIDA7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLnByb2ZpbGUgLmFydGljbGVzIGEKewogIGZvbnQtc2l6ZTogMTNweDsKICBkaXNwbGF5OiBsaXN0LWl0ZW07CiAgbGlzdC1zdHlsZTogc3F1YXJlOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAucHJvZmlsZQp7CiAgbWFyZ2luOiAwIDAgMiUgMiU7CiAgd2lkdGg6IDIzLjUlOwp9Cgpib2R5W2RhdGEtaHJlZj0ncHJvZmlsZXMnXSAucHJvZmlsZTpmaXJzdC1jaGlsZCwKYm9keVtkYXRhLWhyZWY9J3Byb2ZpbGVzJ10gLnByb2ZpbGU6bnRoLWNoaWxkKDNuICsgMSkKewogIG1hcmdpbi1sZWZ0OiAwOwp9Cgpib2R5W2RhdGEtaHJlZj0ncHJvZmlsZXMnXSAucHJvZmlsZSBoMwp7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKYm9keVtkYXRhLWhyZWY9J2hvbWUnXSAucHJvZmlsZSBzZWN0aW9uCnsKICBoZWlnaHQ6IDc1cHg7CiAgcGFkZGluZzogNiU7Cn0KCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLnByb2ZpbGU6Zmlyc3QtY2hpbGQsCmJvZHlbZGF0YS1ocmVmPSdob21lJ10gLnByb2ZpbGU6bnRoLWNoaWxkKDRuICsgMSkKewogIG1hcmdpbi1sZWZ0OiAwOwp9Cgpib2R5W2RhdGEtaHJlZj0naG9tZSddIC5wcm9maWxlIGgzCnsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDEwcHg7Cn0KCnVsLmF1dGhvcnMKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCnVsLmF1dGhvcnMgbGkKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogMSUgMDsKICBwYWRkaW5nOiAwIDMlIDAgMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHdpZHRoOiAyNDBweDsKICBkaXNwbGF5OiBibG9jazsKfQoKdWwuYXV0aG9ycyBsaS5wcm9maWxlIGgyCnsKICBtYXJnaW4tdG9wOiAuMjVlbTsKfQoKLm9uZV90aGlyZCB1bC5hdXRob3JzIGxpCnsKICBjbGVhcjogbm9uZTsKICBmbG9hdDogbm9uZTsKICBtYXJnaW46IDMlIDAgNSU7CiAgd2lkdGg6IDEwMCU7Cn0KCi50d29fdGhpcmRzIHVsLmF1dGhvcnMgbGkKewogIHdpZHRoOiA0NyU7CiAgbWFyZ2luLWJvdHRvbTogMiU7Cn0KCgoKLyogRkVBVFVSRVM6IE9VVExJTkUgTkFWSUdBVElPTiAqLwoKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW9mZmxpbmUnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtc3RvcmFnZSddIC5vdXRsaW5lX25hdl90b2dnbGUsCmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1jb25uZWN0aXZpdHknXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtZmlsZV9hY2Nlc3MnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtc2VtYW50aWNzJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW11bHRpbWVkaWEnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtZ3JhcGhpY3MnXSAub3V0bGluZV9uYXZfdG9nZ2xlLApib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtcHJlc2VudGF0aW9uJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXBlcmZvcm1hbmNlJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW51dHNfYW5kX2JvbHRzJ10gLm91dGxpbmVfbmF2X3RvZ2dsZSwKYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlCnsKICBkaXNwbGF5OiBibG9jazsKfQoKLm91dGxpbmVfbmF2X3RvZ2dsZQp7CiAgZGlzcGxheTogbm9uZTsKICBwb3NpdGlvbjogZml4ZWQ7CiAgbGVmdDogNTAlOwogIHRvcDogMTQ1cHg7CiAgbWFyZ2luLWxlZnQ6IDUyNXB4OwogIHdpZHRoOiAzMHB4OwogIGhlaWdodDogMzBweDsKICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICBwYWRkaW5nOiAxMHB4OwogIHotaW5kZXg6IDM7Cn0KCi5vdXRsaW5lX25hdl90b2dnbGUgaW1nIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAxMHB4OwogIGxlZnQ6IDEwcHg7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IGFsbCAuMjVzIGVhc2UtaW4tb3V0OwogIC1tcy10cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBhbGwgLjI1cyBlYXNlLWluLW91dDsKICB6LWluZGV4OiA0Owp9Cgoub3V0bGluZV9uYXZfdG9nZ2xlIGltZy5zaG93CnsKICB6LWluZGV4OiA1Owp9Cgoub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCBpbWcuc2hvdwp7CiAgb3BhY2l0eTogMDsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogIC1vLXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCm5hdi5vdXRsaW5lIHsKICBkaXNwbGF5OiBub25lOwogIGJhY2tncm91bmQtY29sb3I6ICNiZWJlYmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiA1MCU7CiAgdG9wOiAyMHB4OwogIHBhZGRpbmc6IDIwcHg7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIGJveC1zaGFkb3c6IDAgMCAxMHB4IDAgI2JiYjsKICBvdmVyZmxvdzogYXV0bzsKICBtYXgtaGVpZ2h0OiA1MjVweDsKICB6LWluZGV4OiAzOwp9CgpuYXYub3V0bGluZSBoMwp7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbWFyZ2luOiAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCm5hdi5vdXRsaW5lLnRvYwp7CiAgd2lkdGg6IDMwMHB4Owp9CgpuYXYub3V0bGluZS50b2MgdWwKewogIG1hcmdpbi1sZWZ0OiAxLjVlbTsKICBtYXJnaW4tYm90dG9tOiAxZW07Cn0KCm5hdi5vdXRsaW5lLnRvYyBwIHsKICBmb250LXNpemU6IDEzcHg7Cn0KCm5hdi5vdXRsaW5lLnRvYyB1bDpsYXN0LWNoaWxkCnsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgpuYXYub3V0bGluZS50b2MgYQp7CiAgbWFyZ2luLWxlZnQ6IC0xLjVlbTsKICB0ZXh0LWluZGVudDogMS41ZW07Cn0KCm5hdi5vdXRsaW5lLnRvYyBwIGEKewogIG1hcmdpbi1sZWZ0OiAwOwp9CgpuYXYub3V0bGluZS50b2MgbGkKewogIG1hcmdpbjogLjVlbSAwOwp9CgpuYXYub3V0bGluZS5mZWF0dXJlcwp7CiAgd2lkdGg6IDEzMHB4Owp9CgpuYXYub3V0bGluZS5mZWF0dXJlcyB1bAp7CiAgbWFyZ2luOiAuNzVlbSAwIC0uNWVtIDA7Cn0KCm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpCnsKICBtYXJnaW46IDA7Cn0KCm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEKewogIGRpc3BsYXk6IGJsb2NrOwp9CgpuYXYub3V0bGluZS5mZWF0dXJlcyBsaSBhLnNlY3Rpb25fdGl0bGUKewogIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQ7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBmb250LXNpemU6IDEzcHg7CiAgcGFkZGluZzogLjI1ZW0gMCAuMjVlbSAxOHB4Owp9CgpuYXYub3V0bGluZS5mZWF0dXJlcyBsaS5jdXJyZW50IGEuc2VjdGlvbl90aXRsZQp7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKbmF2Lm91dGxpbmUuZmVhdHVyZXMgbGkgYS5vZmZsaW5lICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZDTTBORU1rVkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkNNME5FTWtaRk9FRkNNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01VSXpRMFF5UTBVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBHTVVJelEwUXlSRVU0UVVJeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZ2tseSs4QUFBRHhTVVJCVkhqYVRGR3hFWUpBRUh6UTNDOUJNa09oQXFoQXJVQWRDcEJRSXlVeUZBdGdwQU9sQXJVRDdNRFFVRU16ZDUxOTVXYVdPKzUyNysvdlBTTkwwOVRDN1lBeFlKVitBbnVnS011U3NmRkVIc0tkUmNpQlJnS0tGOEFkU0NqcXFuQm9KODNmR2pRN3FSazVFdzhKZGprQ0ljZ2t4Q0lFd0ZyQ3F3U0JqODlRM2EzSUhLRVNjUWJjVktmRmJpU3JibFlOUXBGSkhBbTB2cStMR295VHdOWEFoYVBwcEZ6NWlRU1hUaFJGRHdSTCtCYzg0eG94aTIrUUN3YjQzOElOZ0pWYksvZWZBWE9RcXRhV1dNdjBQdCthMXlvNFVhUFJlbnFIdmtiYi9CNnVKZUtGcDdxNFcyY0ZzdHVTK1Fnd0FLTnhXQ2lENllwcEFBQUFBRWxGVGtTdVFtQ0MpOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuc3RvcmFnZSAgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFMQ0FZQUFBQkxjR3hmQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UmpGQ00wTkVNekpGT0VGQ01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSakZDTTBORU16TkZPRUZDTVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEdNVUl6UTBRek1FVTRRVUl4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwR01VSXpRMFF6TVVVNFFVSXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHNCWkw5NEFBQURhU1VSQlZIamFiRkhCRFlKQUVEek1GVUFIWWdmWXdWbUJVb0VRQ2tBN2tBckVBb2hhQVhTZ2RrQUpsRUFKenBqQjdJTk5KcHZibWQyZHU0dWNvaXpMR0NrSDlpcU53TE50MjdjekVVbDhRTG9ERTBYaTFnRHJBNUNoa1p6ekVLZklIVkNqZUxIVHdOWGlpTjF2QTRvOE9JZ3ppUktreFBRbDJsN1FwdGZhcmJIV3ljWmttbmlQSTVCNlRSOUUwTjRENThJdEJBYSsvR3dEb2xGVEs5bGFpblNsOWJrMk5VaG40R05BUHVpWmI1SHh6YWZyRjJ6d3dnSGN4djdEQ2VsSy8rWWZhS3NDWWcwYi9nMXFDaElFaVVZMU4vT25NYjRDREFEdHNWR2VQUEhWL2dBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuY29ubmVjdGl2aXR5ICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFLQ0FZQUFBQ0FMTC82QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRa0pGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlFrTkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEcEdNVUl6UTBRek5FVTRRVUl4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZDUVVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHVTZFpva0FBQURJU1VSQlZIamFiRkRiRGNJd0VFdUFBZmpsanhGS0Z3QTJhRGNnNmdDSUNlQ1R2MDVRdFd6QUJyQkJ3Z1owZzQ2QWpSd1VxcDdrUEM1bm4zTzJxcXFMTVdaci91UFdORTFuSm1LZTUzbkF2Z0o2WVFDdXlQZmUrekFtV0M3b2tyRVFxbS9kRDloYXdBRWtuWG5HK3pBVHNRYU9pVkJxa1NKcjRNSExJbnFtSXBSZktpNkF1NFRZNFJRSjN3NzZvSk1OMm5raVY0cFVwSCtJbGlLcEZIR0hiaTF5UEhlVGhNUXZMV3hvRTZTbEJzSGMvamVsR0Npb1pjbHB2T01JZHB3UktUUFRFVDRDREFBaG8wTEJVbGs1MWdBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuZmlsZV9hY2Nlc3MgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFMQ0FZQUFBQ3BySGNtQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRa1pGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlF6QkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3hNVEF4T1VWQ1JFVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZDUlVVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGoxMVpMa0FBQUNTU1VSQlZIamFZbUFBZ3VUa1pBTWdkbUJBQStqaVRFaHk2NEVTODVFVUpnQ3A4MENzQUJOalJOSnBBTVQ5UUx3QWlBOEM4WHdvZXlGVS9nSkk4WDhHNG9BakM0aWNPM2N1SXo1VlFBUDNvN3VaSUtCTU1TZ1VnTGlmb0dKb2NJRkNJUUU1R0pHRERoUWFCNkI4VURBbWdvSUppRUdlZWdERUg2REJHZ2dLRFVja3pZWEFrTGtBdGNVUU9VSkFCZ0FFR0FEclB5dUkrVnNObXdBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuc2VtYW50aWNzICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FZQUFBQldkVnpuQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TVRFd01UbEZRek5GT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNVEV3TVRsRlF6UkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3hNVEF4T1VWRE1VVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRveE1UQXhPVVZETWtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGlHK3pWUUFBQUN0U1VSQlZIamFqSkNMRGNJd0RFUnh4UUFkb1d6UUVicEtsQUdBQ1NpRFJDMlRBSnZBQmgyQk84a0JZMXlKU0tlbTl2TW4xMnlDazNOdW9TN0tpUWZ4T1VCN2lQY1pPcGRTSGw4RkRsd0lRWVJPMEdBTEJYQ1BuMnNGRVp6ZDFNRVVwcTNHanhVMFFHY2EzRFQrZVlQclJPaHBWNndOUmQyWS9LNHJiMHVOamlhd0E1aVlBRGhDYk5JaU5qSUhYYUJlVml4ZHRNblBWSWtzRFF4NEY0b0dwOGpTd0pCN1hlV3ZRL1lsd0FDaTVGd05wRzdaVEFBQUFBQkpSVTVFcmtKZ2dnPT0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEubXVsdGltZWRpYSAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFKQ0FZQUFBRGtaTll0QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRakJGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOVU16TWtZMlFqRkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQlJVVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpCUmtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHBtUHR3d0FBQUJ3U1VSQlZIamFZa3hPVGpaZ1lHQUlBT0lGUUN3QVpUUE1uVHUzQVNnSFlvUGtMd0Q1RzVpQWpQMUFMQS9FSDRDNEhvanRnZmdCMUpCOElOWUg0Z01nQXhpQmd2K0J0Q05RSjFnQUd3Q3FBUmxZeU1SQUhIQUFPWkZZeFdCQU84VXNVSG8vMEJORUtYWWswdUFMQUFFR0FHSlBHdHJQek9HbUFBQUFBRWxGVGtTdVFtQ0MpOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEuZ3JhcGhpY3MgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBc0FBQUFLQ0FZQUFBQmk4S1NEQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRalJGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOVU16TWtZMlFqVkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQ01rVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpDTTBVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHVjZm1iZ0FBQUN1U1VSQlZIamFZbVJBQThuSnlRbEFTaCtJTHdMeGhybHo1MzZBeVRFQ0pRV0F0QUVRWHdCSkFQa2dkandRQndDeEFoQWZBT0tOUUx5QUNVaThCK0wxSUJxb2NEK1FkZ0RpaVVDTmlrRGFFR1FJRVBlRERHU0MyaENJSk9FUHhQVkFqUXBBRFNEYkNtSE9ZSUV4UUJKUXhUZ0JFd01KZ0tCaWtIT1FuUUVLbXZWQXdRMVFYNE44THdBTmpYaG9TRDBBcVdPRTZnNkFlaXdBcXBBQjZ2NkZJTTFRLzJDMTFnSFphbVFBRUdBQXZZQTJ2UXRLQUVZQUFBQUFTVVZPUks1Q1lJST0pOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEucHJlc2VudGF0aW9uICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBb0FBQUFKQ0FZQUFBQUxwcjBUQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TlVNek1rWTJRamhGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOalpFTVRoRFJqWkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFRek15UmpaQ05rVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMVF6TXlSalpDTjBVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHM5V2NWVUFBQUNDU1VSQlZIamFZbVFBZ3VUa1pBTWcxYytBR3h4a2dUSWVBSEVqRGtWZ0E1aWdIQVU4cGdrQThRRVdKRjBPZUJSZllNQUhnRzUzQU9MN1lLdUJEQVVnYnNDaEZtVExBUkNEQmNySkJ5cm1COUlMNTg2ZGV3R2tHY2dPQU9KNElKNElVc2dJRkFRNU5nRXFhQUFOQVpEWUJpRGVDTlM0QVp1YkRFRHV3dVlHZ0FBREFCTDJJQmdDc1BEQkFBQUFBRWxGVGtTdVFtQ0MpOyB9Cm5hdi5vdXRsaW5lLmZlYXR1cmVzIGxpIGEucGVyZm9ybWFuY2UgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FZQUFBQldkVnpuQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5SnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROU0JOWVdOcGJuUnZjMmdpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TmpaRU1UaERSamxGT0VJd01URkZNRGcyTmtKR05EbENOakU1TkVORU16SWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOalpFTVRoRFJrRkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzJOa1F4T0VOR04wVTRRakF4TVVVd09EWTJRa1kwT1VJMk1UazBRMFF6TWlJZ2MzUlNaV1k2Wkc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMk5rUXhPRU5HT0VVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUG9VWmQ2VUFBQURxU1VSQlZIamFkRkhSRFlJd0ZJUk80QVk2QW01UUp3QW1FTU1BeEFsZ0E4SUFSSmhBMktCTW9DT3dnYnFCZCtTYTlFT2JYRjdoM3IxMzd6V09mcHl5TEY4SU8rRFk5LzB6NUdJbGtMd0JLL0JSZEVBTExFQUtYQ2syRWhhS0k3QUhKcENyaE1RTTFFendnb0VXV0FHNHFHdUNPNnRPc2pkdUFoSnEvVlppSVhzMTdtMWcvNHp2ekNoNVJxVmNSS3BxN0dTUmRBRFg2UHR1TkZSRnRRU3pST3hFaTJ2Z3dobXBjeitVdHRQSllxZC9GYnNpOStTSHRrcmNqb1lmL0Z6cWFzTjN5RFFvUlluODhzRWVXaXUzNUxpMU9IamRKQ0Q5SXk3c0JNNGl1dWpmNFdxQjVoZjNGV0FBcmM1b05FdFBiek1BQUFBQVNVVk9SSzVDWUlJPSk7IH0KbmF2Lm91dGxpbmUuZmVhdHVyZXMgbGkgYS5udXRzX2FuZF9ib2x0cyB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQUxDQVlBQUFCTGNHeGZBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdNaTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOalpFTVRoRFJrUkZPRUl3TVRGRk1EZzJOa0pHTkRsQ05qRTVORU5FTXpJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5qWkVNVGhEUmtWRk9FSXdNVEZGTURnMk5rSkdORGxDTmpFNU5FTkVNeklpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvMk5rUXhPRU5HUWtVNFFqQXhNVVV3T0RZMlFrWTBPVUkyTVRrMFEwUXpNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG8yTmtReE9FTkdRMFU0UWpBeE1VVXdPRFkyUWtZME9VSTJNVGswUTBRek1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QbkdhWlowQUFBRGVTVVJCVkhqYWZGR0JEWUl3RUtTRUFkaEEzQUFuc0d5Z0cyZzZnSFlDWlFKMUFBSk00QWl3Z1d5Z0c4Z0kzaVZuMHBoR2txUGYvdjFkLzJzU2ZjNjVBc3N1aVg5ajB6UWpnelE0dkFEckNIa0IzQ0dZYzVOSjNXTFpBRXNvdlg0cjVINENmQmFvMXlRcmVRQ28yT3NxTlRBZ2R6UDRIVVZZcWZqSk93TjBZcTVpRVhndDRpS1ZGZFZuckNVd0k5NENIdkVWc0JMaTN2SktrNXJ0U0tZSzFFbzVrTnlyZ1BGTWh6M0h5Y2FoT2tuMUFieEY3TUkrdjFNNEEwTTRGYm1FZWZhV0dCM2thdGJEcFl1TWxJN3NhelJCZ3EvYy9ubnBpc0ZIZ0FFQWxrVlg4MU9qQ3U0QUFBQUFTVVZPUks1Q1lJST0pOyB9CgpuYXYub3V0bGluZS5mZWF0dXJlcyB1bCB1bAp7CiAgZGlzcGxheTogbm9uZTsKICBtYXJnaW46IDAgMCAuNzVlbTsKfQoKbmF2Lm91dGxpbmUuZmVhdHVyZXMgdWwgdWwgYQp7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgcGFkZGluZzogLjNlbSAwIC4zZW0gMThweDsKfQoKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW9mZmxpbmUnXSAgICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLm9mZmxpbmUgICAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXN0b3JhZ2UnXSAgICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnN0b3JhZ2UgICAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWNvbm5lY3Rpdml0eSddICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLmNvbm5lY3Rpdml0eSAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWZpbGVfYWNjZXNzJ10gICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLmZpbGVfYWNjZXNzICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXNlbWFudGljcyddICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnNlbWFudGljcyAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW11bHRpbWVkaWEnXSAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLm11bHRpbWVkaWEgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWdyYXBoaWNzJ10gICAgICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLmdyYXBoaWNzICAgICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXByZXNlbnRhdGlvbiddICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnByZXNlbnRhdGlvbiAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXBlcmZvcm1hbmNlJ10gICAgbmF2Lm91dGxpbmUuZmVhdHVyZXMgLnBlcmZvcm1hbmNlICAgIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW51dHNfYW5kX2JvbHRzJ10gbmF2Lm91dGxpbmUuZmVhdHVyZXMgLm51dHNfYW5kX2JvbHRzIHVsIHsgZGlzcGxheTogYmxvY2s7IH0KCgoKLyogRkVBVFVSRVM6IENPTlRFTlQgKi8KCmJvZHlbZGF0YS1ocmVmKj0nZmVhdHVyZXMnXSAucGFnZSBoZWFkZXIKewogIG1pbi1oZWlnaHQ6IDI1MHB4Owp9Cgpib2R5W2RhdGEtaHJlZio9J2ZlYXR1cmVzJ10gLnBhZ2UgaGVhZGVyIGhncm91cCwKYm9keVtkYXRhLWhyZWYqPSdmZWF0dXJlcyddIC5wYWdlIGhlYWRlciBzZWN0aW9uCnsKICB6LWluZGV4OiAyOwp9Cgpib2R5W2RhdGEtaHJlZio9J2ZlYXR1cmVzJ10gLnBhZ2UgaGVhZGVyIHNlY3Rpb24gcC5pbnRybwp7CiAgZm9udC1zaXplOiAxOHB4Owp9Cgpib2R5W2RhdGEtaHJlZio9J2ZlYXR1cmVzJ10gLnBhZ2UgaGVhZGVyIHNlY3Rpb24gcAp7CiAgbGluZS1oZWlnaHQ6IDEuNzsKfQoKLmZlYXR1cmVfaWNvbgp7CiAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1hZ2VzL2ZlYXR1cmVfaWNvbnMucG5nKSwgdXJsKC9zdGF0aWMvaW1hZ2VzL2ZlYXR1cmVfaWNvbl9iYWNrZ3JvdW5kLnBuZyk7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wLCBsZWZ0IHRvcDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogMTsKICB0b3A6IC0xNXB4OwogIGxlZnQ6IC01MHB4OwogIHdpZHRoOiA0NTNweDsKICBoZWlnaHQ6IDM3MnB4OwogIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuMjVzIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuMjVzIGVhc2UtaW4tb3V0OwogIC1tcy10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLXBvc2l0aW9uIC4yNXMgZWFzZS1pbi1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuMjVzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGJhY2tncm91bmQtcG9zaXRpb24gLjI1cyBlYXNlLWluLW91dDsKfQoKYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLW9mZmxpbmUnXSAgICAgICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciA3NnB4LCBsZWZ0IHRvcDsgfQpib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtc3RvcmFnZSddICAgICAgICAuZmVhdHVyZV9pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yOThweCwgbGVmdCB0b3A7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLWNvbm5lY3Rpdml0eSddICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtNjcycHgsIGxlZnQgdG9wOyB9CmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1maWxlX2FjY2VzcyddICAgIC5mZWF0dXJlX2ljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTEwNDZweCwgbGVmdCB0b3A7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXNlbWFudGljcyddICAgICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMTQyOHB4LCBsZWZ0IHRvcDsgfQpib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtbXVsdGltZWRpYSddICAgICAuZmVhdHVyZV9pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xNzkwcHgsIGxlZnQgdG9wOyB9CmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1ncmFwaGljcyddICAgICAgIC5mZWF0dXJlX2ljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTIxNjRweCwgbGVmdCB0b3A7IH0KYm9keVtkYXRhLWhyZWY9J2ZlYXR1cmVzLXByZXNlbnRhdGlvbiddICAgLmZlYXR1cmVfaWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMjUzOHB4LCBsZWZ0IHRvcDsgfQpib2R5W2RhdGEtaHJlZj0nZmVhdHVyZXMtcGVyZm9ybWFuY2UnXSAgICAuZmVhdHVyZV9pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yOTEycHgsIGxlZnQgdG9wOyB9CmJvZHlbZGF0YS1ocmVmPSdmZWF0dXJlcy1udXRzX2FuZF9ib2x0cyddIC5mZWF0dXJlX2ljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTMyODZweCwgbGVmdCB0b3A7IH0KCmRpdi5kZXNjcmlwdGlvbiBwCnsKICBmb250LXNpemU6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBtYXJnaW46IDAgMCAxZW07Cn0KCmRpdi5kZXNjcmlwdGlvbiArIHNlY3Rpb24uc3VwcG9ydC5ub25lCnsKICBtYXJnaW4tdG9wOiAwOwp9CgpzZWN0aW9uLnN1cHBvcnQgaDMsCnNlY3Rpb24udXBkYXRlcyBoMwp7CiAgbWFyZ2luLXRvcDogMDsKfQoKc2VjdGlvbi51cGRhdGVzIHVsCnsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogMWVtIDAgMCAwOwogIHBhZGRpbmc6IDA7Cn0KCnNlY3Rpb24udXBkYXRlcyBsaQp7CiAgbWFyZ2luOiAwIDAgLjVlbTsKICAtbW96LWNvbHVtbi1icmVhay1hZnRlcjogYXZvaWQ7CiAgLXdlYmtpdC1jb2x1bW4tYnJlYWstYWZ0ZXI6IGF2b2lkOwogIC1vLWNvbHVtbi1icmVhay1hZnRlcjogYXZvaWQ7CiAgLW1zLWNvbHVtbi1icmVhay1hZnRlcjogYXZvaWQ7CiAgY29sdW1uLWJyZWFrLWFmdGVyOiBhdm9pZDsKICAtbW96LWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZTogYXZvaWQ7CiAgLW1zLWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC1vLWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIGNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwp9CgpzZWN0aW9uLnVwZGF0ZXMudHdvX2NvbHVtbnMKewogIC1tb3otY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgLW8tY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgLW1zLWNvbHVtbi1jb3VudDogMSAhaW1wb3J0YW50OwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgY29sdW1uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgbWFyZ2luOiAwIDAgMiUgMCAhaW1wb3J0YW50OwogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsKfQoKc2VjdGlvbi51cGRhdGVzLnR3b19jb2x1bW5zIHVsCnsKICAtbW96LWNvbHVtbi1jb3VudDogMjsKICAtby1jb2x1bW4tY291bnQ6IDI7CiAgLW1zLWNvbHVtbi1jb3VudDogMjsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogMjsKICBjb2x1bW4tY291bnQ6IDI7CiAgLW1vei1jb2x1bW4tZ2FwOiAyMHB4OwogIC13ZWJraXQtY29sdW1uLWdhcDogMjBweDsKICAtby1jb2x1bW4tZ2FwOiAyMHB4OwogIC1tcy1jb2x1bW4tZ2FwOiAyMHB4OwogIGNvbHVtbi1nYXA6IDIwcHg7Cn0KCnNlY3Rpb24uc3VwcG9ydAp7CiAgbWFyZ2luLXJpZ2h0OiAyZW0gIWltcG9ydGFudDsKfQoKc2VjdGlvbi5zdXBwb3J0IGgzCnsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgpzZWN0aW9uLnN1cHBvcnQgaDQKewogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IC43NWVtIDAgMS41ZW07Cn0KCnNlY3Rpb24uc3VwcG9ydCBoNCBhCnsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDE4cHg7Cn0KCnNlY3Rpb24uc3VwcG9ydCB0YWJsZQp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgpzZWN0aW9uLnN1cHBvcnQgdGFibGUgKyB0YWJsZQp7CiAgbWFyZ2luLXRvcDogMmVtOwp9CgpzZWN0aW9uLnN1cHBvcnQgdGhlYWQgdGgKewogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IGFsbCAuMXMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGFsbCAuMXMgZWFzZS1pbi1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW4tb3V0OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IC0yMHB4OwogIGNvbG9yOiAjMzMzOwogIGZvbnQtc2l6ZTogMTFweDsKICBmb250LXdlaWdodDogNDAwOwogIHBhZGRpbmc6IDNweCAwOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogIHdpZHRoOiA4N3B4OwogIG9wYWNpdHk6IDA7Cn0KCnNlY3Rpb24uc3VwcG9ydCB0YWJsZSArIHRhYmxlIHRoZWFkIHRoOm50aC1jaGlsZCgxKTpmaXJzdC1sZXR0ZXIgeyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgfSAvKiBEb24ndCBjYXBpdGFsaXplIHRoZSAnaScgaW4gaU9TLiAqLwoKc2VjdGlvbi5zdXBwb3J0IHRoZWFkIHRoLmN1cnJlbnQKewogIG9wYWNpdHk6IDE7Cn0KCnNlY3Rpb24uc3VwcG9ydCB0aGVhZCB0aDpudGgtY2hpbGQoMSkgeyBsZWZ0OiAwOyB9CnNlY3Rpb24uc3VwcG9ydCB0aGVhZCB0aDpudGgtY2hpbGQoMikgeyBsZWZ0OiA2NXB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0aGVhZCB0aDpudGgtY2hpbGQoMykgeyBsZWZ0OiAxMzVweDsgfQpzZWN0aW9uLnN1cHBvcnQgdGhlYWQgdGg6bnRoLWNoaWxkKDQpIHsgbGVmdDogMjA4cHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRoZWFkIHRoOm50aC1jaGlsZCg1KSB7IGxlZnQ6IDI3OHB4OyB9CgpzZWN0aW9uLnN1cHBvcnQgdGQgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvc3RhdGljL2ltYWdlcy9icm93c2Vycy5wbmcpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgZm9udC1zaXplOiAyNHB4OwogIHBhZGRpbmctdG9wOiA1MHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogODVweDsKfQoKc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLmNocm9tZSAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgMnB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0Ym9keSB0ZC5maXJlZm94IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xNTlweDsgfQpzZWN0aW9uLnN1cHBvcnQgdGJvZHkgdGQuc2FmYXJpICB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMzIwcHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLm9wZXJhICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTQ4MHB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0Ym9keSB0ZC5pZSAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC02NDRweDsgfQpzZWN0aW9uLnN1cHBvcnQgdGJvZHkgdGQuaW9zX3NhZiB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtODA1cHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLmFuZHJvaWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTk2NnB4OyB9CnNlY3Rpb24uc3VwcG9ydCB0Ym9keSB0ZC5vcF9taW5pIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xMTI1cHg7IH0Kc2VjdGlvbi5zdXBwb3J0IHRib2R5IHRkLm9wX21vYiAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTEyODdweDsgfQoKc2VjdGlvbi5zdXBwb3J0IHAuY3JlZGl0CnsKICBjb2xvcjogIzg4ODsKICBmb250LXNpemU6IDEzcHg7CiAgbWFyZ2luLXRvcDogMi41ZW07CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpzZWN0aW9uLnN1cHBvcnQgcC5jcmVkaXQgYQp7CiAgY29sb3I6ICMzMzM7Cn0KCnNlY3Rpb24uc3VwcG9ydCBhc2lkZS5zdXBwb3J0X2RldGFpbHMgcAp7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxLjY7CiAgbWFyZ2luOiAxLjVlbSAwIDA7CiAgcGFkZGluZzogMS41ZW0gMCAwOwp9CgpzZWN0aW9uLnN1cHBvcnQubm9uZQp7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUsCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSArIHNlY3Rpb24sCnNlY3Rpb24uc3VwcG9ydC5ub25lICsgc2VjdGlvbgp7CiAgZmxvYXQ6IG5vbmU7CiAgaGVpZ2h0OiBpbmhlcml0OwogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsKfQoKI3VwZGF0ZXMKewogIG1hcmdpbi1ib3R0b206IDIlICFpbXBvcnRhbnQ7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZQp7CiAgaGVpZ2h0OiBpbmhlcml0Owp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUgZGl2CnsKICBjbGVhcjogbGVmdDsKICBwYWRkaW5nOiAuNzVlbSAwOwp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUgaDQKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogNDVweCAwIDA7CiAgcGFkZGluZzogMS4yZW0gMCAwOwogIHdpZHRoOiAzMDBweDsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIGRpdiArIGRpdiBoNAp7CiAgbWFyZ2luLXRvcDogMDsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIHRhYmxlCnsKICBmbG9hdDogbGVmdDsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIHRhYmxlICsgdGFibGUKewogIG1hcmdpbi10b3A6IDA7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSB0ZAp7CiAgcGFkZGluZy10b3A6IDYwcHg7CiAgd2lkdGg6IDcwcHg7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSBkaXYgKyBkaXYKewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwp9CgpzZWN0aW9uLnN1cHBvcnQubXVsdGlwbGUgZGl2ICsgZGl2IGg0CnsKICBwYWRkaW5nLXRvcDogLjRlbTsKfQoKc2VjdGlvbi5zdXBwb3J0Lm11bHRpcGxlIGRpdiArIGRpdiB0YWJsZQp7CiAgbWFyZ2luLXRvcDogLjI1ZW07Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSBkaXYgKyBkaXYgdGQKewogIGJhY2tncm91bmQ6IDA7CiAgcGFkZGluZy10b3A6IDA7Cn0KCnNlY3Rpb24uc3VwcG9ydC5tdWx0aXBsZSBwCnsKICBjbGVhcjogbGVmdDsKICBtYXJnaW4tdG9wOiAxZW07CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoKc2VjdGlvbi5zdXBwb3J0ICsgc2VjdGlvbgp7CiAgY2xlYXI6IGJvdGg7Cn0KCnVsLmZpZ3VyZXMKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCmFydGljbGUuZmVhdHVyZSBmaWd1cmUsCnNlY3Rpb24uZmlndXJlcyBmaWd1cmUsCnVsLmZpZ3VyZXMgbGkKewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiA1MCU7CiAgbWFyZ2luOiAxZW0gMCAuNWVtOwogIHBhZGRpbmc6IDA7Cn0KCnVsLmZpZ3VyZXMgbGkKewogIG1pbi1oZWlnaHQ6IDg1cHg7Cn0KCmFydGljbGUuZmVhdHVyZSBmaWd1cmUsCnNlY3Rpb24uZmlndXJlcyBmaWd1cmUsCnVsLmZpZ3VyZXMuYm9va3MgbGkKewogIG1pbi1oZWlnaHQ6IDEwMHB4Owp9CgphcnRpY2xlLmZlYXR1cmUgZmlndXJlIHNlY3Rpb24ub25lX2hhbGYgZmlndXJlLAphcnRpY2xlLmZlYXR1cmUgZmlndXJlIHNlY3Rpb24ub25lX3RoaXJkIGZpZ3VyZSwKYXJ0aWNsZS5mZWF0dXJlIGZpZ3VyZSBzZWN0aW9uLnR3b190aGlyZHMgZmlndXJlLApzZWN0aW9uLmZpZ3VyZXMub25lX2hhbGYgZmlndXJlLApzZWN0aW9uLmZpZ3VyZXMub25lX3RoaXJkIGZpZ3VyZSwKc2VjdGlvbi5maWd1cmVzLnR3b190aGlyZHMgZmlndXJlCnsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogMTAwJTsKfQoKYXJ0aWNsZS5mZWF0dXJlIGZpZ3VyZSBhLAp1bC5maWd1cmVzIGxpIGEKewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogNjAwOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgphcnRpY2xlLmZlYXR1cmUgZmlndXJlIGEgcCwKc2VjdGlvbi5maWd1cmVzIGZpZ3VyZSBhIHAsCnVsLmZpZ3VyZXMgbGkgYSBwCnsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDEzcHg7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBtYXJnaW46IC4yNWVtIDA7Cn0KCnNlY3Rpb24uZmlndXJlcyBmaWdjYXB0aW9uID4gYSB7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBmb250LXNpemU6IDE0cHg7Cn0KCmFydGljbGUuZmVhdHVyZSBmaWd1cmUgaW1nLApzZWN0aW9uLmZpZ3VyZXMgZmlndXJlIGltZywKdWwuZmlndXJlcyBsaSBhIGltZwp7CiAgZmxvYXQ6IGxlZnQ7CiAgbWF4LXdpZHRoOiAxNTBweDsKICBoZWlnaHQ6IGF1dG87CiAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKfQoKYXJ0aWNsZS5mZWF0dXJlIGZpZ2NhcHRpb24sCnNlY3Rpb24uZmlndXJlcyBmaWdjYXB0aW9uLAp1bC5maWd1cmVzIGxpIGEgc3Ryb25nLAp1bC5maWd1cmVzIGxpIGEgcAp7CiAgbWFyZ2luOiAwIDAgMCAxNTBweDsKICBwYWRkaW5nOiAwIDEuNWVtOwp9Cgp1bC5maWd1cmVzIGxpIGEKewogIGZvbnQtd2VpZ2h0OiA0MDA7Cn0KCnVsLmZpZ3VyZXMgbGkgYSBzdHJvbmcKewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTRweDsKICBtYXJnaW4tdG9wOiAtLjFlbTsKfQoKdWwuZmlndXJlcy5ib29rcyBsaSBpbWcKewogIG1heC13aWR0aDogMTA1cHg7Cn0KCnVsLmZpZ3VyZXMuYm9va3MgbGkgYSBzdHJvbmcsCnVsLmZpZ3VyZXMuYm9va3MgbGkgYSBwCnsKICBtYXJnaW4tbGVmdDogMTAwcHg7Cn0KCmFydGljbGUudHdvX2NvbHVtbnMgc2VjdGlvbiBmaWd1cmUsCnNlY3Rpb24udHdvX3RoaXJkcyBmaWd1cmUKewogIHdpZHRoOiAxMDAlOwp9CgphcnRpY2xlLnR3b19jb2x1bW5zIHNlY3Rpb24gZmlnY2FwdGlvbiwKc2VjdGlvbi50d29fdGhpcmRzIGZpZ2NhcHRpb24KewogIHBhZGRpbmctcmlnaHQ6IDA7Cn0KCnVsLmRlZmluaXRpb25zCnsKICBsaW5lLWhlaWdodDogMS41OwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAtLjc1ZW0gMCAwIDA7CiAgcGFkZGluZzogMDsKICAtbW96LWNvbHVtbi1jb3VudDogMjsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogMjsKICAtbXMtY29sdW1uLWNvdW50OiAyOwogIC1vLWNvbHVtbi1jb3VudDogMjsKICBjb2x1bW4tY291bnQ6IDI7CiAgLW1vei1jb2x1bW4tZ2FwOiAyMHB4OwogIC13ZWJraXQtY29sdW1uLWdhcDogMjBweDsKICAtbXMtY29sdW1uLWdhcDogMjBweDsKICAtby1jb2x1bW4tZ2FwOiAyMHB4OwogIGNvbHVtbi1nYXA6IDIwcHg7Cn0KCnVsLmRlZmluaXRpb25zIGxpCnsKICBmb250LXNpemU6IDE0cHg7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IC43NWVtIDA7CiAgLW1vei1jb2x1bW4tYnJlYWstaW5zaWRlOiBhdm9pZDsKICAtd2Via2l0LWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC1vLWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIC1tcy1jb2x1bW4tYnJlYWstaW5zaWRlOiBhdm9pZDsKICBjb2x1bW4tYnJlYWstaW5zaWRlOiBhdm9pZDsKfQoKdWwuZGVmaW5pdGlvbnMgbGkgc3Bhbgp7CiAgZGlzcGxheTogYmxvY2s7Cn0KCnVsLmRlZmluaXRpb25zIGxpIGEKewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5vbmVfaGFsZiB1bC5kZWZpbml0aW9ucywKLm9uZV90aGlyZCB1bC5kZWZpbml0aW9ucywKLnR3b190aGlyZHMgdWwuZGVmaW5pdGlvbnMKewogIC1tb3otY29sdW1uLWNvdW50OiAxOwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAxOwogIC1tcy1jb2x1bW4tY291bnQ6IDE7CiAgLW8tY29sdW1uLWNvdW50OiAxOwogIGNvbHVtbi1jb3VudDogMTsKfQoKc2VjdGlvbiB1bAp7CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxLjY7CiAgbGlzdC1zdHlsZTogc3F1YXJlOwogIG1hcmdpbi1sZWZ0OiAxLjc1ZW07CiAgcGFkZGluZy1sZWZ0OiAwOwp9CgpzZWN0aW9uIGxpCnsKICBtYXJnaW4tYm90dG9tOiAuNzVlbTsKfQoKc2VjdGlvbiB1bC50d29fY29sdW1ucwp7CiAgbWFyZ2luOiAwOwp9CgpzZWN0aW9uIHVsLnR3b19jb2x1bW5zIGxpCnsKICBtYXJnaW46IC4yNWVtIDAgLjc1ZW0gMS41ZW07Cn0KCgovKiBVUERBVEVTICYgVFVUT1JJQUxTICovCgphcnRpY2xlLnR1dG9yaWFsIHsKICBtYXJnaW4tbGVmdDogMzQwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwp9CgphcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUKewogIHBvc2l0aW9uOiBzdGF0aWM7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgd2lkdGg6IGluaGVyaXQ7CiAgaGVpZ2h0OiBpbmhlcml0OwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luOiAwOwp9CgphcnRpY2xlLnR1dG9yaWFsIG5hdi5vdXRsaW5lLnRvYwp7CiAgbWFyZ2luOiAwOwogIHdpZHRoOiAyODBweDsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IC0zNDBweDsKICBib3gtc2hhZG93OiBub25lOwogIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IC8qIHRvIGlnbm9yZSB0aGUgZmFkZVRvZ2dsZSBvbiB3aWRlLWRpc3BsYXkgdHJlYXRtZW50ICovCiAgb3BhY2l0eTogMSAhaW1wb3J0YW50OyAvKiB0byBpZ25vcmUgdGhlIGZhZGVUb2dnbGUgb24gd2lkZS1kaXNwbGF5IHRyZWF0bWVudCAqLwp9CgoKYXJ0aWNsZS50dXRvcmlhbCBuYXYub3V0bGluZSBoMwp7CiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgIG1hcmdpbi1ib3R0b206IDFlbTsKfQoKYXJ0aWNsZS50dXRvcmlhbCBoMTp0YXJnZXQsCmFydGljbGUudHV0b3JpYWwgaDI6dGFyZ2V0LAphcnRpY2xlLnR1dG9yaWFsIGgzOnRhcmdldCwKYXJ0aWNsZS50dXRvcmlhbCBoNDp0YXJnZXQsCmFydGljbGUudHV0b3JpYWwgaDU6dGFyZ2V0CnsKICBwYWRkaW5nLXRvcDogNTBweDsKfQoKCnNlY3Rpb24uY2MsCnNlY3Rpb24uZGlzcXVzCnsKICBtYXJnaW4tbGVmdDogMzQwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIKewogIG1hcmdpbi10b3A6IC41ZW07Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciBoMwp7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbWFyZ2luLWJvdHRvbTogLjM1ZW07Cn0KCiNmaWx0ZXIgewogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXdlaWdodDogNjAwOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIgdWwKewogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciBsaQp7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAuM2VtIDA7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciBsaSBpbnB1dAp7CiAgbWFyZ2luLXJpZ2h0OiA1cHg7Cn0KCi5wYWdlIGhlYWRlciBzZWN0aW9uLmZpbHRlciAub25lX2hhbGYgdWwgbGkKewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbi10b3A6IDA7CiAgd2lkdGg6IDUwJTsKfQoKLnBhZ2UgaGVhZGVyIHNlY3Rpb24uZmlsdGVyIGRpdi50YWdfZmlsdGVyCnsKICBjbGVhcjogYm90aDsKICBmbG9hdDogbGVmdDsKICBwYWRkaW5nLXRvcDogMWVtOwp9CgoucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIgZGl2LnRhZ19maWx0ZXIgbGFiZWwKewogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKaW5wdXQuc2VhcmNoIHsKICBiYWNrZ3JvdW5kOiAjZWVlOwogIGJvcmRlcjogMDsKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIG1hcmdpbjogMCAwIDAgLjVlbTsKICBwYWRkaW5nOiAuMmVtIC4zZW07CiAgdmVydGljYWwtYWxpZ246IC0ycHg7CiAgd2lkdGg6IDU0MHB4Owp9CgoudHV0b3JpYWxfbGlzdGluZwp7CiAgbWFyZ2luOiAxLjVlbSAwIDIuNWVtOwogIHBhZGRpbmc6IDA7Cn0KCi50dXRvcmlhbF9saXN0aW5nIGgzCnsKICBmb250LXNpemU6IDE2cHg7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi50dXRvcmlhbF9saXN0aW5nIC5kYXRlLAoudHV0b3JpYWxfbGlzdGluZyAuYXV0aG9yLAoudHV0b3JpYWxfbGlzdGluZyAudGFncywKLnR1dG9yaWFsX2xpc3RpbmcgLnRhZywKLnR1dG9yaWFsX2xpc3RpbmcgLmNsYXNzZXMKewogIGZsb2F0OiBsZWZ0Owp9CgoudHV0b3JpYWxfbGlzdGluZyAuZGF0ZSwKLnR1dG9yaWFsX2xpc3RpbmcgLmF1dGhvciwKLnR1dG9yaWFsX2xpc3RpbmcgLmJyb3dzZXJzLAoudHV0b3JpYWxfbGlzdGluZyAudGFncywKLnR1dG9yaWFsX2xpc3RpbmcgLmNsYXNzZXMKewogIGhlaWdodDogMThweDsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLmF1dGhvciwKLnR1dG9yaWFsX2xpc3RpbmcgLnRhZ3MKewogIG1hcmdpbi1yaWdodDogMS41ZW07Cn0KCi50dXRvcmlhbF9saXN0aW5ncyAudGFncwp7Cgp9CgoudHV0b3JpYWxfbGlzdGluZyAuYXV0aG9yIHsKICBtYXJnaW4tbGVmdDogMS41ZW07Cn0KCi50dXRvcmlhbF9saXN0aW5nIC5hdXRob3IgaW1nLmF1dGhvcl9pbWFnZQp7CiAgd2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAxOHB4OwogIG1hcmdpbi1sZWZ0OiAwLjI1ZW07CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLnRhZwp7CiAgY29sb3I6ICM4ODg7CiAgZm9udC1zaXplOiAxMXB4OwogIG1hcmdpbjogMnB4IDAuNWVtIDAgMC41ZW07CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi50dXRvcmlhbF9saXN0aW5nIC50YWc6aG92ZXIsCi50dXRvcmlhbF9saXN0aW5nIC50YWc6Zm9jdXMKewogIGNvbG9yOiAjMzMzOwp9CgoudHV0b3JpYWxfbGlzdGluZyAuY2xhc3Nlcwp7CiAgbWFyZ2luLWxlZnQ6IDFlbTsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLmJyb3dzZXJzCnsKICBtYXJnaW46IDAgMS41ZW07Cn0KCi50dXRvcmlhbF9saXN0aW5nIC5zdW1tYXJ5CnsKICBjbGVhcjogbGVmdDsKICBwYWRkaW5nLXRvcDogLjVlbTsKfQoKLnR1dG9yaWFsX2xpc3RpbmcgLmJ1dHRvbmxpbmsKewogIGRpc3BsYXk6IG5vbmU7Cn0KCmhlYWRlci50dXRvcmlhbCB7CiAgcGFkZGluZzogMWVtIDAuOWVtOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCmhlYWRlci50dXRvcmlhbCBoZ3JvdXAgKyBzZWN0aW9uCnsKICBtYXJnaW4tdG9wOiAwOwp9CgpoZWFkZXIudHV0b3JpYWwgLmJ5bGluZQp7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKaGVhZGVyLnR1dG9yaWFsIGFzaWRlCnsKICBmbG9hdDogbGVmdDsKICB3aWR0aDogNTAlOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCmhlYWRlci50dXRvcmlhbCBhc2lkZQp7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCmhlYWRlci50dXRvcmlhbCBzZWN0aW9uIGgzLApoZWFkZXIudHV0b3JpYWwgc2VjdGlvbgp7CiAgY29sb3I6ICMzMzM7CiAgZm9udC1zaXplOiAxM3B4OwogIHRleHQtdHJhbnNmb3JtOiBub25lOwp9CmhlYWRlci50dXRvcmlhbCBzZWN0aW9uIGgyIHsKICBmb250LXNpemU6IDI2cHg7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IDAgMCAuMjVlbTsKfQoKaGVhZGVyLnR1dG9yaWFsIC5ieWxpbmUKewogIG1hcmdpbi10b3A6IC43NWVtOwp9CgpoZWFkZXIudHV0b3JpYWwgLmJ5bGluZSBoZ3JvdXAKewogIGZsb2F0OiBub25lOwogIHBhZGRpbmc6IDA7CiAgd2lkdGg6IDEwMCU7Cn0KCmhlYWRlci50dXRvcmlhbCAuYnlsaW5lIGltZwp7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDUwcHg7CiAgaGVpZ2h0OiA1MHB4OwogIG1hcmdpbjogLjJlbSAuNzVlbSAwIDA7Cn0KCmhlYWRlci50dXRvcmlhbCAuYnlsaW5lIGgyCnsKICBmb250LXdlaWdodDogMzAwOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWFyZ2luOiAwIDAgLjE1ZW07Cn0KCmhlYWRlci50dXRvcmlhbCAuYnlsaW5lIGgyIHN0cm9uZwp7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5ieWxpbmUgaDIgc3Bhbgp7CiAgY29sb3I6ICMzMzM7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC13ZWlnaHQ6IDMwMDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5icm93c2VyX3N1cHBvcnQKewogIGZvbnQtc2l6ZTogMTJweDsKICBwYWRkaW5nLXRvcDogMWVtOwogIHdpZHRoOiA2MzJweDsKfQoKaGVhZGVyLnR1dG9yaWFsIGFzaWRlIGEKewogIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5icm93c2VyX3N1cHBvcnQgaDMKewogIGZsb2F0OiBsZWZ0OwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LXdlaWdodDogNjAwOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWFyZ2luOiAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCmhlYWRlci50dXRvcmlhbCAuYnJvd3Nlcl9zdXBwb3J0IHAKewogIGZsb2F0OiBsZWZ0OwogIGZvbnQtc2l6ZTogMTJweDsKICBsaW5lLWhlaWdodDogMS41OwogIG1hcmdpbjogMDsKfQoKaGVhZGVyLnR1dG9yaWFsIC5jb21wYXRpYmxlLWJsb2NrIHsKICBmb250LXNpemU6IHNtYWxsOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQpoZWFkZXIudHV0b3JpYWwgI25vdGNvbXBhdGlibGUgewogIGNvbG9yOiByZWQ7Cn0KCmhlYWRlci50dXRvcmlhbCAjY29tcGF0aWJsZSB7CiAgY29sb3I6IGdyZWVuOwp9CgoucmVkaXJlY3Rfbm90aWZpY2F0aW9uIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmhlYWRlci50dXRvcmlhbCAuZGF0ZSB0aW1lIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCmFydGljbGUudHV0b3JpYWwgZmlndXJlCnsKICBkaXNwbGF5OiBibG9jazsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmFydGljbGUudHV0b3JpYWwgc2VjdGlvbiB7CiAgb3ZlcmZsb3c6IHZpc2libGU7IC8qIE1ha2Ugc3VyZSBGQUNUIGFuZCBUSVAgdGV4dCBpc24ndCBjdXQgb2ZmICovCn0KCmFydGljbGUudHV0b3JpYWwgLm5vdGljZSB7CiAgYmFja2dyb3VuZDogaHNsYSg2MCwgNzAlLCA5MiUsIDEpOwogIHBhZGRpbmc6IDRweCAxMHB4OwogIGJvcmRlcjogMXB4IHNvbGlkIGhzbGEoNDcsIDEwMCUsIDcyJSwgMSk7CiAgYm9yZGVyLXJhZGl1czogMnB4Owp9CgphcnRpY2xlLnR1dG9yaWFsIC5ub3RpY2UuZmFjdCwKYXJ0aWNsZS50dXRvcmlhbCAubm90aWNlLnRpcCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHBhZGRpbmctbGVmdDogMjVweDsKfQphcnRpY2xlLnR1dG9yaWFsIC5ub3RpY2UuZmFjdDpiZWZvcmUsCmFydGljbGUudHV0b3JpYWwgLm5vdGljZS50aXA6YmVmb3JlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAtNXB4OwogIGxlZnQ6IC0xMHB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVooLTMwZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlWigtMzBkZWcpOwogIC1vLXRyYW5zZm9ybTogcm90YXRlWigtMzBkZWcpOwogIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVooLTMwZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZVooLTMwZGVnKTsKICBjb2xvcjogcmdiKDIzNywgNzEsIDUwKTsKICBmb250LXdlaWdodDogYm9sZDsKICBjb250ZW50OiAiRmFjdCI7Cn0KYXJ0aWNsZS50dXRvcmlhbCAubm90aWNlLnRpcDpiZWZvcmUgewogIGNvbnRlbnQ6ICJUaXAiOwogIHRvcDogLTVweDsKICBsZWZ0OiAtNXB4Owp9CgphcnRpY2xlLnR1dG9yaWFsIGZpZ3VyZSBpbWcKewogIG1heC13aWR0aDogMTAwJTsKICBoZWlnaHQ6IGF1dG87CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKYXJ0aWNsZS50dXRvcmlhbCBmaWdjYXB0aW9uCnsKICBtYXJnaW4tdG9wOiAxZW07CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CgphcnRpY2xlLnR1dG9yaWFsIGg0IHsKICBmb250LXNpemU6IDE2cHg7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBtYXJnaW46IDAgMCAuMjVlbTsKfQphcnRpY2xlLnR1dG9yaWFsICBibG9ja3F1b3RlLmNvbW1lbnRhcnkgewogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXNpemU6IDE0cHg7CiAgcGFkZGluZzogMjBweCAxMHB4IDIwcHggNDBweDsKICBib3JkZXItcmFkaXVzOiA3cHg7CiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7CiAgYm9yZGVyOiAycHggZGFzaGVkICNhZmNlYTk7CiAgYmFja2dyb3VuZDogI2VhZjJlODsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCmFydGljbGUudHV0b3JpYWwgYmxvY2txdW90ZS5jb21tZW50YXJ5IGNvZGUgewogIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQoKYXJ0aWNsZS50dXRvcmlhbCAudGFsa2luZ2hlYWQ6YmVmb3JlIHsKICBjb250ZW50OiAnJzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogLTIwcHg7CiAgdG9wOiAxMHB4OwogIHdpZHRoOiA1MHB4OwogIGhlaWdodDogNTBweDsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMHB4IC0xMHB4OwogIGJvcmRlci1yYWRpdXM6IDUwJTsKfQoKLnRvb2x0aXAgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLnRvb2x0aXAgLnByb3BlcnR5IHsKICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNmZmY7Cn0KLnRvb2x0aXAgLnByb3BlcnR5IC5rd2QgewogIGNvbG9yOiAjNTA4Qjg4Owp9Ci50b29sdGlwOmhvdmVyOmFmdGVyIHsKICBjb250ZW50OiBhdHRyKGRhdGEtdG9vbHRpcCk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44NSk7CiAgcGFkZGluZzogNXB4IDlweDsKICBjb2xvcjogI2ZmZjsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgbGVmdDogMDsKICB0b3A6IDI1cHg7CiAgd2lkdGg6IDM5MHB4OwogIHotaW5kZXg6IDEwMDsKfQoKLnBhZ2UgaGVhZGVyIC5kaXNxdXNfY29tbWVudHMgewogIGNsZWFyOiBib3RoOwogIGZsb2F0OiBsZWZ0OwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXdlaWdodDogNjAwOwogIG1hcmdpbjogMWVtIDAgMDsKfQoKLmNjIHAKewogIGZvbnQtc2l6ZTogODUlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKcHJlLnByZXR0eXByaW50IHsKICBtYXJnaW46IDFlbSBhdXRvOwogIHBhZGRpbmc6IDFlbTsKfQoKcHJlLnByZXR0eXByaW50LnNtYWxsIHsKICBwYWRkaW5nOiAwLjVlbTsKfQoKLyogUHJldHR5IHByaW50aW5nIHN0eWxlcy4gVXNlZCB3aXRoIHByZXR0aWZ5LmpzLiAqLwovKiBWaW0gc3VuYnVyc3QgdGhlbWUgYnkgRGF2aWQgTGVpYm92aWMgKi8KCnByZSAuc3RyLCBjb2RlIC5zdHIgeyBjb2xvcjogIzY1QjA0MjsgfSAvKiBzdHJpbmcgIC0gZ3JlZW4gKi8KcHJlIC5rd2QsIGNvZGUgLmt3ZCB7IGNvbG9yOiAjRTI4OTY0OyB9IC8qIGtleXdvcmQgLSBkYXJrIHBpbmsgKi8KcHJlIC5jb20sIGNvZGUgLmNvbSB7IGNvbG9yOiAjQUVBRUFFOyBmb250LXN0eWxlOiBpdGFsaWM7IH0gLyogY29tbWVudCAtIGdyYXkgKi8KcHJlIC50eXAsIGNvZGUgLnR5cCB7IGNvbG9yOiAjODliZGZmOyB9IC8qIHR5cGUgLSBsaWdodCBibHVlICovCnByZSAubGl0LCBjb2RlIC5saXQgeyBjb2xvcjogIzMzODdDQzsgfSAvKiBsaXRlcmFsIC0gYmx1ZSAqLwpwcmUgLnB1biwgY29kZSAucHVuIHsgY29sb3I6ICNmZmY7IH0gLyogcHVuY3R1YXRpb24gLSB3aGl0ZSAqLwpwcmUgLnBsbiwgY29kZSAucGxuIHsgY29sb3I6ICNmZmY7IH0gLyogcGxhaW50ZXh0IC0gd2hpdGUgKi8KcHJlIC50YWcsIGNvZGUgLnRhZyB7IGNvbG9yOiAjODliZGZmOyB9IC8qIGh0bWwveG1sIHRhZyAgICAtIGxpZ2h0IGJsdWUgKi8KcHJlIC5hdG4sIGNvZGUgLmF0biB7IGNvbG9yOiAjYmRiNzZiOyB9IC8qIGh0bWwveG1sIGF0dHJpYnV0ZSBuYW1lICAtIGtoYWtpICovCnByZSAuYXR2LCBjb2RlIC5hdHYgeyBjb2xvcjogIzY1QjA0MjsgfSAvKiBodG1sL3htbCBhdHRyaWJ1dGUgdmFsdWUgLSBncmVlbiAqLwpwcmUgLmRlYywgY29kZSAuZGVjIHsgY29sb3I6ICMzMzg3Q0M7IH0gLyogZGVjaW1hbCAtIGJsdWUgKi8KCnByZS5wcmV0dHlwcmludCwgY29kZS5wcmV0dHlwcmludCB7CiAgY29sb3I6IHdoaXRlOwogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7CiAgYm9yZGVyLXJhZGl1czogOHB4Owp9CgovKiBESVNBQkxFIFNFTEVDVElPTiAgKi8KCmhlYWRlci5tYWluLAojbG9nbywKLndhdGVybWFyaywKbmF2LAoubmF2LAouc2hhcmUsCi5ieWxpbmUgaW1nLAojaHRtbDViYWRnZSwKLmRpc3F1c19jb21tZW50cywKc2VjdGlvbi5kaXNxdXMKewogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW8tdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCgovKiBIRUxQRVJTICAqLwoKLmlyIHsgZGlzcGxheTogYmxvY2s7IGJvcmRlcjogMDsgdGV4dC1pbmRlbnQ6IC05OTllbTsgb3ZlcmZsb3c6IGhpZGRlbjsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IHRleHQtYWxpZ246IGxlZnQ7IGRpcmVjdGlvbjogbHRyOyB9Ci5pciBiciB7IGRpc3BsYXk6IG5vbmU7IH0KLmhpZGRlbiB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgdmlzaWJpbGl0eTogaGlkZGVuOyB9Ci52aXN1YWxseWhpZGRlbiB7IGJvcmRlcjogMDsgY2xpcDogcmVjdCgwIDAgMCAwKTsgaGVpZ2h0OiAxcHg7IG1hcmdpbjogLTFweDsgb3ZlcmZsb3c6IGhpZGRlbjsgcGFkZGluZzogMDsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMXB4OyB9Ci52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6YWN0aXZlLCAudmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmZvY3VzIHsgY2xpcDogYXV0bzsgaGVpZ2h0OiBhdXRvOyBtYXJnaW46IDA7IG92ZXJmbG93OiB2aXNpYmxlOyBwb3NpdGlvbjogc3RhdGljOyB3aWR0aDogYXV0bzsgfQouaW52aXNpYmxlIHsgdmlzaWJpbGl0eTogaGlkZGVuOyB9Ci5jbGVhcmZpeDpiZWZvcmUsIC5jbGVhcmZpeDphZnRlciB7IGNvbnRlbnQ6ICIiOyBkaXNwbGF5OiB0YWJsZTsgfQouY2xlYXJmaXg6YWZ0ZXIgeyBjbGVhcjogYm90aDsgfQouY2xlYXJmaXggeyB6b29tOiAxOyB9CgoKLyogR29vZ2xlIFBsdXMgSWNvbiAqLwojZ29vZ2xlX3BsdXNfcGFnZV9saW5rIHsKICBmbG9hdDogcmlnaHQ7Cn0KCiNnb29nbGVfcGx1c19wYWdlX2xpbmsgYSB7CiAgYmFja2dyb3VuZDogbm9uZTsKICBjb2xvcjogIzMzMzsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQ6IDEzcHgvMTZweCBhcmlhbCxzYW5zLXNlcmlmOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBwYWRkaW5nOiAwOwp9CgojZ29vZ2xlX3BsdXNfcGFnZV9saW5rIGEgc3BhbiB7CiAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2ltYWdlcy9pY29ucy9ncGx1cy0xNi5wbmcpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDE2cHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB0ZXh0LWluZGVudDogMTZweDsKICB3aWR0aDogMTZweDsKfQoKCiNsaXZlYmFubmVyIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiAtNTBweDsKICByaWdodDogLTk1cHg7CiAgYmFja2dyb3VuZDogIzUwOEI4ODsKICBjb2xvcjogd2hpdGU7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVooNDBkZWcpOwogIC1tb3otdHJhbnNmb3JtOiByb3RhdGVaKDQwZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGVaKDQwZGVnKTsKICAtby10cmFuc2Zvcm06IHJvdGF0ZVooNDBkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlWig0MGRlZyk7CiAgZm9udC1zaXplOiAyNXB4OwogIHBhZGRpbmc6IDVweCA3MHB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgei1pbmRleDogMTAwMDsKICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogMCA1MCU7CiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIC1vLXRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIHRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgYm94LXNoYWRvdzogMHB4IDBweCAxMHB4ICMyMjI7CiAgdGV4dC1zaGFkb3c6IDBweCAwcHggNXB4ICMwMDA7Cn0KCiNsaXZlYmFubmVyIC5yZWNvcmQgewogIGJhY2tncm91bmQtY29sb3I6IHJlZDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAxNXB4OwogIGhlaWdodDogMTVweDsKICBtYXJnaW4tYm90dG9tOiAycHg7Cn0KCmtiZCwgLmtiZCB7CiAgcGFkZGluZzogMC4xZW0gMC42ZW07CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwNCwgMjA0LCAyMDQpOwogIGZvbnQtc2l6ZTogMTFweDsKICBmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0NywgMjQ3LCAyNDcpOwogIGNvbG9yOiByZ2IoNTEsIDUxLCA1MSk7CiAgYm94LXNoYWRvdzogMCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwIDAgMCAycHggcmdiKDI1NSwgMjU1LCAyNTUpIGluc2V0OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luOiAwIDAuMWVtOwogIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYigyNTUsIDI1NSwgMjU1KTsKICBsaW5lLWhlaWdodDogMS41OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi8qIFBSSU5UICovCgpAbWVkaWEgcHJpbnQgewogICogeyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgZmlsdGVyOm5vbmUgIWltcG9ydGFudDsgLW1zLWZpbHRlcjogbm9uZSAhaW1wb3J0YW50OyB9CiAgYSwgYTp2aXNpdGVkIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KICBhW2hyZWZdOmFmdGVyIHsgY29udGVudDogIiAoIiBhdHRyKGhyZWYpICIpIjsgfQogIGFiYnJbdGl0bGVdOmFmdGVyIHsgY29udGVudDogIiAoIiBhdHRyKHRpdGxlKSAiKSI7IH0KICAuaXIgYTphZnRlciwgYVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlciwgYVtocmVmXj0iIyJdOmFmdGVyIHsgY29udGVudDogIiI7IH0KICBwcmUsIGJsb2NrcXVvdGUgeyBib3JkZXI6IDFweCBzb2xpZCAjOTk5OyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KICB0aGVhZCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsgfQogIHRyLCBpbWcgeyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KICBpbWcgeyBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgfQogIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfQogIC5wYWdlIHsgbWF4LXdpZHRoOiAxMDAlIH0KICBwLCBoMiwgaDMgeyBvcnBoYW5zOiAzOyB3aWRvd3M6IDM7IH0KICBoMiwgaDMgeyBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsgfQoKICBwcmUgLnN0ciwgY29kZSAuc3RyIHsgY29sb3I6ICMwNjA7IH0KICBwcmUgLmt3ZCwgY29kZSAua3dkIHsgY29sb3I6ICMwMDY7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgcHJlIC5jb20sIGNvZGUgLmNvbSB7IGNvbG9yOiAjNjAwOyBmb250LXN0eWxlOiBpdGFsaWM7IH0KICBwcmUgLnR5cCwgY29kZSAudHlwIHsgY29sb3I6ICM0MDQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgcHJlIC5saXQsIGNvZGUgLmxpdCB7IGNvbG9yOiAjMDQ0OyB9CiAgcHJlIC5wdW4sIGNvZGUgLnB1biB7IGNvbG9yOiAjNDQwOyB9CiAgcHJlIC5wbG4sIGNvZGUgLnBsbiB7IGNvbG9yOiAjMDAwOyB9CiAgcHJlIC50YWcsIGNvZGUgLnRhZyB7IGNvbG9yOiAjMDA2OyBmb250LXdlaWdodDogYm9sZDsgfQogIHByZSAuYXRuLCBjb2RlIC5hdG4geyBjb2xvcjogIzQwNDsgfQogIHByZSAuYXR2LCBjb2RlIC5hdHYgeyBjb2xvcjogIzA2MDsgfQoKICAucGFnZSBoZWFkZXIgLnNoYXJlLCBuYXYsIGhlYWRlciBoZ3JvdXAsIGEuZGlzcXVzX2NvbW1lbnRzIHsgZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fQp9CgoKLyogUkVTUE9OU0lWRSAqLwoKLyogR2V0IHVzIHByb21vdGVkIHRvIGEgY29tcG9zaXRlZCBsYXllciBmb3IgdGhlc2UgZWxlbWVudHMuIExlYXZlIG1vYmlsZQogICBvZmYgYmVjYXVzZSBpdCBhbHJlYWR5IHByb21vdGVzIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzLiBSZW1vdmUgdGhpcyB3aGVuCiAgIGRlc2t0b3AgZm9sbG93cyBzdWl0ZS4gKi8KCkBtZWRpYSBvbmx5IGFsbCBhbmQgKG1heC13aWR0aDogMTAyNHB4KSBhbmQgKG1heC1oZWlnaHQ6IDc2OHB4KQp7CiAgYm9keVtkYXRhLWhyZWY9J2hvbWUnXSwKICBib2R5W2RhdGEtaHJlZj0nZ2FtaW5nJ10sCiAgYm9keVtkYXRhLWhyZWY9J2J1c2luZXNzJ10KICB7CiAgICAtbW96LWJhY2tncm91bmQtc2l6ZTogMTAyNHB4IDc2OHB4OwogICAgYmFja2dyb3VuZC1zaXplOiAxMDI0cHggNzY4cHg7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODBweCkgewogIGFydGljbGUudHV0b3JpYWwgbmF2Lm91dGxpbmUudG9jLmZpeGVkCiAgewogICAgbWF4LWhlaWdodDogbm9uZTsKICB9CgogIC5wYXR0ZXJuLWJnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gLnBhdHRlcm4tYmcgewogICAgYm9yZGVyLXJhZGl1czogNXB4OwogIH0KCiAgLnBhdHRlcm4tYmctbGlnaHRlciwKICBhcnRpY2xlLnNlY3Rpb25lZCA+IHNlY3Rpb246bm90KCNjbGFzc2VzKSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMXB4IDFweCAxMHB4ICNjY2M7CiAgfQoKICAucGFnZSBoZWFkZXIgLnNoYXJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7CgogIC5zdWJoZWFkZXIKICB7CiAgICBiYWNrZ3JvdW5kOiAjNjVBOEE1OwogICAgaGVpZ2h0OiBhdXRvOwogIH0KCiAgLnN1YmhlYWRlcjo6YmVmb3JlCiAgewogICAgY29udGVudDogJyc7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHotaW5kZXg6IC0xOwogIH0KCiAgLnN1YmhlYWRlcjo6YWZ0ZXIKICB7CiAgICAtbW96LWJveC1zaGFkb3c6IDAgM3B4IDEycHggNXB4IGJsYWNrOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCAxMnB4IDVweCBibGFjazsKICAgIC1vLWJveC1zaGFkb3c6IDAgM3B4IDEycHggNXB4IGJsYWNrOwogICAgLW1zLWJveC1zaGFkb3c6IDAgM3B4IDEycHggNXB4IGJsYWNrOwogICAgYm94LXNoYWRvdzogMCAzcHggMTJweCA1cHggYmxhY2s7CiAgICBjb250ZW50OiAnJzsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgei1pbmRleDogLTE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7OwogICAgdG9wOiAtMTBweDsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaAogIHsKICAgIGZvbnQtc2l6ZTogNDhweDsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLnN1YmhlYWRlciAuc2VhcmNoIGxhYmVsCiAgewogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgfQoKICAuc3ViaGVhZGVyIC5zZWFyY2ggaW5wdXQKICB7CiAgICBiYWNrZ3JvdW5kOiBoc2xhKDAsIDAlLCA5OSUsIDAuMik7CiAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiBoc2woMTc2LCAyNyUsIDEzJSk7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICB0ZXh0LWluZGVudDogNXB4OwogICAgd2lkdGg6IDU4MHB4OwogICAgb3V0bGluZTogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWxlZnQ6IDdweDsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaCBpbnB1dFtwbGFjZWhvbGRlcl06Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgewogICAgY29sb3I6IGhzbGEoMTc2LCAyNyUsIDMzJSwgMC40KTsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaCBpbnB1dDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGhzbGEoMTc2LCAyNyUsIDMzJSwgMC40KTsKICB9CgogIC5zdWJoZWFkZXIgLnNlYXJjaCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcgogIHsKICAgIGNvbG9yOiAjYjBkMmQwOwogICAgcGFkZGluZy1sZWZ0OiAxNXB4OwogIH0KCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sCiAgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uLAogIGlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24KICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgLnBhZ2UgaGVhZGVyIC5zaGFyZSB7CiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA4NjBweCkgewogIC5wYWdlIGhlYWRlciAuc2hhcmUgewogICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDAwcHgpIHsKCiAgaGVhZGVyLm1haW4sCiAgLndhdGVybWFyaywKICBhcnRpY2xlLnR1dG9yaWFsIG5hdi5vdXRsaW5lLnRvYy5maXhlZAogICB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICB9CgogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX2hhbGYgICB7CiAgICB3aWR0aDogNDUlOwogICAgbWF4LWhlaWdodDogMzUwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogIH0KICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV90aGlyZCAgeyB3aWR0aDogMjglOyB9CiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi50d29fdGhpcmRzIHsgd2lkdGg6IDU4JTsgfQoKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV9oYWxmLAogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX3RoaXJkLAogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX3F1YXJ0ZXIsCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi50d29fdGhpcmRzCiAgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW46IDAgMCAyJSAyJTsKICB9CgogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24ub25lX2hhbGYgKyBzZWN0aW9uLm9uZV9oYWxmICsgc2VjdGlvbiwKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLnR3b190aGlyZHMgKyBzZWN0aW9uLm9uZV90aGlyZCArIHNlY3Rpb24sCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQgKyBzZWN0aW9uLnR3b190aGlyZHMgKyBzZWN0aW9uCiAgewogICAgY2xlYXI6IGJvdGg7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgfQoKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV9oYWxmICsgc2VjdGlvbi5vbmVfaGFsZiArIHNlY3Rpb24gKyBzZWN0aW9uLAogIGFydGljbGUuc2VjdGlvbmVkIHNlY3Rpb24udHdvX3RoaXJkcyArIHNlY3Rpb24ub25lX3RoaXJkICsgc2VjdGlvbiArIHNlY3Rpb24sCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQgKyBzZWN0aW9uLnR3b190aGlyZHMgKyBzZWN0aW9uICsgc2VjdGlvbgogIHsKICAgIG1hcmdpbi10b3A6IDA7CiAgfQoKICBhcnRpY2xlLnNlY3Rpb25lZCBzZWN0aW9uLm9uZV9oYWxmOm50aC1jaGlsZCgybiArIDEpLAogIC50aGlyZHMgc2VjdGlvbi5vbmVfdGhpcmQ6bnRoLWNoaWxkKDNuICsgMSksCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQ6Zmlyc3QtY2hpbGQKICB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogIGFydGljbGUuc2VjdGlvbmVkICNzdXBwb3J0LAogIGFydGljbGUuc2VjdGlvbmVkICN1cGRhdGVzCiAgewogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogNDUlOwogICAgbWFyZ2luOiAwIDAgMiUgMCAhaW1wb3J0YW50OwogIH0KCiAgYXJ0aWNsZS5zZWN0aW9uZWQgI3VwZGF0ZXMKICB7CiAgICBtYXJnaW46IDAgMiUgMiUgMCAhaW1wb3J0YW50OwogIH0KCiAgLyogSG9tZXBhZ2UgKi8KCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbi5vbmVfdGhpcmQgIHsgd2lkdGg6IDMyJTsgfQoKICBuYXYub3V0bGluZS50b2MKICB7CiAgICBib3gtc2hhZG93OiAxcHggMXB4IDEwcHggI2NjYyAhaW1wb3J0YW50OwogIH0KCiAgLnBhdHRlcm4tYmctbGlnaHRlciwKICBhcnRpY2xlLnNlY3Rpb25lZCA+IHNlY3Rpb246bm90KCNjbGFzc2VzKSB7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIG5hdi5vdXRsaW5lLnRvYy5maXhlZAogIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogNTBweDsKICAgIGxlZnQ6IDUwJTsKICAgIG1hcmdpbi1sZWZ0OiAtNTAwcHg7CiAgICBtYXgtaGVpZ2h0OiA1MjVweDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMDBweCkgewogICNob21lX21lbnUge30KICAjdHV0b3JpYWxzX21lbnUge30KICAjdXBkYXRlc19tZW51IHt9CiAgI2ZlYXR1cmVzX3Nob3cgeyB9CiAgI3NsaWRlc19tZW51IHsgfQogICNyZXNvdXJjZXNfbWVudSB7fQogICNwcm9maWxlc19tZW51IHsgIH0KICAjY29udHJpYl9tZW51IHsgIH0KICAjc2VhcmNoX3Nob3cgc3BhbiB7IGRpc3BsYXk6IG5vbmU7IH0KCiAgLnBhZ2UsCiAgLnBhZ2UgaGVhZGVyLAogIGhlYWRlciwKICAuc3ViaGVhZGVyIGRpdiwKICAubmF2LAogICN1cGRhdGVzX2xpc3QKICB7CiAgICB3aWR0aDogaW5oZXJpdCAhaW1wb3J0YW50OwogIH0KCiAgLnBhZ2UgewogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIH0KCiAgLnBhZ2UuY3VycmVudAogIHsKICAgIG1hcmdpbi10b3A6IDBlbTsKICB9CgogIGhlYWRlci5tYWluCiAgewogICAgcGFkZGluZzogMDsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgd2lkdGg6IDEwMCU7CiAgfQoKICBoZWFkZXIubWFpbiBuYXYKICB7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIGhlYWRlciBoZ3JvdXAgKyBzZWN0aW9uCiAgewogICAgZmxvYXQ6IG5vbmU7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsLAogIHNlY3Rpb24uY2MsCiAgc2VjdGlvbi5kaXNxdXMKICB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogIG5hdi5vdXRsaW5lLnRvYwogIHsKICAgIG1hcmdpbi1ib3R0b206IDJlbTsKICAgIHBhZGRpbmc6IDA7CiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLAogIHNlY3Rpb24sCiAgYXJ0aWNsZS5zZWN0aW9uZWQgc2VjdGlvbiwKICBzZWN0aW9uLmxpbmtfdGFyZ2V0LAogIC5wYWdlIGhlYWRlcgogIHsKICAgIHBhZGRpbmc6IDFlbSAxLjI1ZW07CiAgfQoKICBzZWN0aW9uLm9uZV9oYWxmLAogIHNlY3Rpb24ub25lX3RoaXJkLAogIHNlY3Rpb24ub25lX3F1YXJ0ZXIsCiAgc2VjdGlvbi50d29fdGhpcmRzCiAgewogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDsKICB9CgogIC5wYWdlIGhlYWRlciAuc2hhcmUgbGkKICB7CiAgICBwb3NpdGlvbjogc3RhdGljOwogIH0KCiAgLnBhZ2UgaGVhZGVyIC5zaGFyZSB1bAogIHsKICAgIG1hcmdpbi10b3A6IDFlbTsKICB9CgogIC5wYWdlIGhlYWRlciAuc2hhcmUgbGkKICB7CiAgICBkaXNwbGF5OiBpbmxpbmU7CiAgfQoKICAvKiBIb21lcGFnZSAqLwoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGhlYWRlci50d29fY29sdW1ucwogIHsKICAgIHBhZGRpbmc6IDIlOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwLAogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gaGVhZGVyLnR3b19jb2x1bW5zIHAKICB7CiAgICBmbG9hdDogbm9uZTsKICAgIHdpZHRoOiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGhlYWRlci50d29fY29sdW1ucyBoZ3JvdXAgaDEsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBoZWFkZXIudHdvX2NvbHVtbnMgaGdyb3VwIGgyCiAgewogICAgZm9udC1zaXplOiAyMjUlOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBoZWFkZXIudHdvX2NvbHVtbnMgcAogIHsKICAgIG1hcmdpbjogLjVlbSAwIDA7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIC5vbmVfdGhpcmQKICB7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiBpbmhlcml0OwogICAgbWFyZ2luLWxlZnQ6IDIlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAyJTsKICAgIHdpZHRoOiAyOCUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gLm9uZV90aGlyZDpmaXJzdC1jaGlsZAogIHsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIC5vbmVfdGhpcmQgYQogIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGFydGljbGUucHJvZmlsZQogIHsKICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICBtYXJnaW46IDIlIDAgMCAyJSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDMyJSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpCiAgewogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICB9CgogIC8qIFR1dG9yaWFscyAmIFVwZGF0ZXMgKi8KCiAgLnBhZ2UgaGVhZGVyIHNlY3Rpb24uZmlsdGVyIGRpdi50YWdfZmlsdGVyCiAgewogICAgd2lkdGg6IDEwMCU7CiAgfQoKICAucGFnZSBoZWFkZXIgc2VjdGlvbi5maWx0ZXIgZGl2LnRhZ19maWx0ZXIgaW5wdXQKICB7CiAgICB3aWR0aDogOTAlOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IC41ZW0gMDsKICB9CgogIC8qIFByb2ZpbGVzICovCgogIGJvZHlbZGF0YS1ocmVmPSJwcm9maWxlcyJdIC5wcm9maWxlOmZpcnN0LWNoaWxkLAogIGJvZHlbZGF0YS1ocmVmPSJwcm9maWxlcyJdIC5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpCiAgewogICAgbWFyZ2luLWxlZnQ6IDIlOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9InByb2ZpbGVzIl0gLnByb2ZpbGU6Zmlyc3QtY2hpbGQsCiAgYm9keVtkYXRhLWhyZWY9InByb2ZpbGVzIl0gLnByb2ZpbGU6bnRoLWNoaWxkKDJuICsgMSkKICB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogIGFydGljbGUucHJvZmlsZQogIHsKICAgIG1hcmdpbi1sZWZ0OiAyJTsKICAgIHdpZHRoOiA0OSU7CgogIH0KCiAgYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24KICB7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICB9CgogIC5wcm9maWxlIC5tYXAsCiAgLnByb2ZpbGUgLmxpc3QtYXJ0aWNsZXMgc3BhbgogIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAucHJvZmlsZSAubGlzdC1hcnRpY2xlcwogIHsKICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50OwogICAgY29sb3I6ICM2NjYgIWltcG9ydGFudDsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcwogIHsKICAgIG1hcmdpbjogMi43NWVtIDAgMCA5NHB4OwogICAgcG9zaXRpb246IHN0YXRpYzsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcwogIHsKICAgIHdpZHRoOiA3MCU7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4NjBweCkgewoKICAjaG9tZV9tZW51IHt9CiAgI3R1dG9yaWFsc19tZW51IHt9CiAgI3VwZGF0ZXNfbWVudSB7fQogICNmZWF0dXJlc19zaG93IHsgfQogICNzbGlkZXNfbWVudSB7IH0KICAjcmVzb3VyY2VzX21lbnUge30KICAjd2h5X21lbnUge30KICAjY29udHJpYl9tZW51IHsgZGlzcGxheTogbm9uZTsgfQogICNzZWFyY2hfc2hvdyBzcGFuIHsgZGlzcGxheTogbm9uZTsgfQoKICBoZWFkZXIubWFpbiBuYXYgdWwgbGkgYSwgI2hvbWVfaG9ybnMKICBoZWFkZXIubWFpbiBuYXYgdWwgbGkjZmVhdHVyZXNfc2hvdywKICBoZWFkZXIubWFpbiBoMQogIHsKICB9CgogIGhlYWRlci5tYWluIG5hdiB1bCBsaSNmZWF0dXJlc19zaG93IHsKICB9CgogIGhlYWRlci5tYWluIG5hdiB1bCBsaSNzZWFyY2hfc2hvdwogIHsKICAgIGZsb2F0OiByaWdodDsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIuZmVhdHVyZXMKICB7CiAgICBiYWNrZ3JvdW5kOiAjNWZhNGEwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIuZmVhdHVyZXMgaDIKICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgaGVhZGVyLm1haW4gLnN1YmhlYWRlciAjZmVhdHVyZXNfaGlkZQogIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgcGFkZGluZzogMnB4IDAgMCAxMHB4OwogICAgd2lkdGg6IDI0cHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgfQoKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bAogIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMCAwIC41ZW07CiAgICB3aWR0aDogaW5oZXJpdDsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIgLmZlYXR1cmVzIGxpCiAgewogICAgZmxvYXQ6IGxlZnQ7CiAgfQoKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyLnNlYXJjaAogIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjVhOGE1OwogIG1hcmdpbjogMCAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDVweDsKICAgICAgICBmb250LXNpemU6IDEuNmVtOwogIGNsZWFyOiBib3RoOwogIH0KCiAgaGVhZGVyLm1haW4gLnN1YmhlYWRlci5zZWFyY2ggbGFiZWwgc3BhbiwKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyLnNlYXJjaCBpbWcKICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgaGVhZGVyLm1haW4gLnN1YmhlYWRlci5zZWFyY2ggaW5wdXQKICB7CiAgd2lkdGg6IDEwMCU7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIC5wYWdlIGhlYWRlci50d29fY29sdW1ucyBzZWN0aW9uLAogIC5wYWdlIGhlYWRlciBoZ3JvdXAsCiAgLnBhZ2UgaGVhZGVyIHNlY3Rpb24KICB7CiAgICBmbG9hdDogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogIH0KCiAgLnBhZ2UgaGVhZGVyID4gaGdyb3VwOmZpcnN0LWNoaWxkIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkgewogICNob21lX21lbnUge30KICAjdHV0b3JpYWxzX21lbnUge30KICAjdXBkYXRlc19tZW51IHt9CiAgI2ZlYXR1cmVzX3Nob3cgeyB9CiAgI3NsaWRlc19tZW51IHsgfQogICNyZXNvdXJjZXNfbWVudSB7fQogICNwcm9maWxlc19tZW51IHsgZGlzcGxheTogbm9uZTsgfQogICNjb250cmliX21lbnUgeyBkaXNwbGF5OiBub25lOyB9CiAgI3NlYXJjaF9zaG93IHNwYW4geyBkaXNwbGF5OiBub25lOyB9CgoKICBoZWFkZXIubWFpbiB7CiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50OwogIH0KCiAgaGVhZGVyLm1haW4gI2hvbWVfaG9ybnMKICB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW46IC4xZW07CiAgICBwYWRkaW5nOiAwLjRlbSAwLjZlbTsKICB9CgogIGhlYWRlci5tYWluICNob21lX2hvcm5zIGltZyB7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMjRweDsKICB9CgogIGhlYWRlci5tYWluIG5hdiBsaTpmaXJzdC1jaGlsZCwKICAubmF2CiAgewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZQogIHsKICAgIG1hcmdpbjogMDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gaGVhZGVyCiAgewogICAgbWFyZ2luLWJvdHRvbTogMDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI2NsYXNzZXMKICB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIC5vbmVfdGhpcmQsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAub25lX3RoaXJkOmZpcnN0LWNoaWxkCiAgewogICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CgogICAgd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gc2VjdGlvbi5saW5rX3RhcmdldCBhCiAgewogICAgaGVpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwOwogIH0KCiAgLnBhZ2UKICB7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICB9CgogIHNlY3Rpb24KICB7CiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgYXJ0aWNsZS5mZWF0dXJlIGZpZ3VyZSwKICBzZWN0aW9uLmZpZ3VyZXMgZmlndXJlLAogIHVsLmZpZ3VyZXMgbGkKICB7CiAgICBmbG9hdDogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogIH0KCiAgLyogSG9tZXBhZ2UgKi8KCiAgI3VwZGF0ZXNfdGl0bGUsCiAgI3VwZGF0ZXNfYmFkZ2UKICB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjc3RhcnQKICB7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICB3aWR0aDogaW5oZXJpdDsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdICNsb2dvLAogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI3VwZGF0ZXMKICB7CiAgICBwb3NpdGlvbjogc3RhdGljOwogICAgaGVpZ2h0OiBpbmhlcml0OwogIH0KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcwogIHsKICAgIG1hcmdpbjogMi41JSAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAyJSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDk2JSAhaW1wb3J0YW50OwogIH0KfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsKCiAgI2hvbWVfbWVudSB7fQogICN0dXRvcmlhbHNfbWVudSB7fQogICN1cGRhdGVzX21lbnUge30KICAjZmVhdHVyZXNfc2hvdyB7fQogICNzbGlkZXNfbWVudSB7IGRpc3BsYXk6IG5vbmU7IH0KICAjcmVzb3VyY2VzX21lbnUge30KICAjcHJvZmlsZXNfbWVudSB7IGRpc3BsYXk6IG5vbmU7IH0KICAjY29udHJpYl9tZW51IHsgZGlzcGxheTogbm9uZTsgfQogICNzZWFyY2hfc2hvdyBzcGFuIHsgZGlzcGxheTogbm9uZTsgfQoKICB1bC5kZWZpbml0aW9ucwogIHsKICAgIC1tb3otY29sdW1uLWNvdW50OiAwOwogICAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDA7CiAgICAtbXMtY29sdW1uLWNvdW50OiAwOwogICAgLW8tY29sdW1uLWNvdW50OiAwOwogICAgY29sdW1uLWNvdW50OiAwOwogIH0KCiAgLyogUHJvZmlsZXMgKi8KCiAgYXJ0aWNsZS5wcm9maWxlCiAgewogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJTsKICB9CgogIGFydGljbGUucHJvZmlsZSBzZWN0aW9uCiAgewogICAgaGVpZ2h0OiBpbmhlcml0OwogICAgbWFyZ2luOiAuNzVlbSAwICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYm90dG9tOiAwOwogICAgcmlnaHQ6IDA7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMmVtOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMDsKICAgIHRvcDogYXV0byAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3cteTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiA1cHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUM0OTM2OwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiB0b3AgMC4ycyBlYXNlLWluLW91dDsKICAgIHRyYW5zaXRpb246IHRvcCAwLjJzIGVhc2UtaW4tb3V0OwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlIGgzIHsKICAgIG1hcmdpbjogMHB4ICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUgdWwgewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgewogICAgdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBib3R0b206IDAgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJTsKICAgIHdpZHRoOiAxMDAlOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzRlNGU0ZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDEycHggIzI1MjUyNTsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IG5vbmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50OwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCAgdWwgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIGgzIHsKICAgIG1hcmdpbjogMWVtOwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCB1bCBhIHsKICAgIGNvbG9yOiAjZGRkOwogICAgbWFyZ2luOiAwOwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCB1bCBhOmFjdGl2ZSB7CiAgICBjb2xvcjogI2RkZDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgYTp2aXNpdGVkIHsKICAgIGNvbG9yOiAjZGRkOwogIH0KCiAgYXJ0aWNsZS50dXRvcmlhbCAub3V0bGluZV9uYXZfdG9nZ2xlLmFjdGl2YXRlZCB1bCB1bCBhIHsKICAgIGNvbG9yOiAjYmJiOwogICAgY29sb3I6ICNiYmIgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgIGE6YWN0aXZlIHsKICAgIGNvbG9yOiAjYmJiOwogICAgY29sb3I6ICNiYmIgIWltcG9ydGFudDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgdWwgYTp2aXNpdGVkIHsKICAgIGNvbG9yOiAjYmJiICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIHVsIHVsIHVsIGEgewogICAgY29sb3I6ICM5OTkgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgdWwgYTphY3RpdmUgewogICAgY29sb3I6ICM5OTkgIWltcG9ydGFudDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgdWwgdWwgdWwgYTp2aXNpdGVkIHsKICAgIGNvbG9yOiAjOTk5ICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIG5hdiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUM0OTM2ICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogd2hpdGU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLXRvcDogNHB4ICFpbXBvcnRhbnQ7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIG5hdiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgY29sb3I6IHdoaXRlOwogICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICB9CgogIGFydGljbGUudHV0b3JpYWwgLm91dGxpbmVfbmF2X3RvZ2dsZS5hY3RpdmF0ZWQgbmF2Lm91dGxpbmUudG9jIHVsIHsKICAgIG1hcmdpbi1sZWZ0OiAxZW07CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIGgzIHsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgfQoKICBhcnRpY2xlLnR1dG9yaWFsIC5vdXRsaW5lX25hdl90b2dnbGUuYWN0aXZhdGVkIG5hdiBsaSB7CiAgICBtYXJnaW4tYm90dG9tOiAxZW07CiAgICBmb250LXNpemU6MTZweDsKICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgfQoKICAucHJvZmlsZSAuYXJ0aWNsZXMKICB7CiAgICBoZWlnaHQ6IGluaGVyaXQ7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcyBsaQogIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmUgIWltcG9ydGFudDsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBtYXJnaW4tbGVmdDogMWVtOwogICAgdGV4dC1pbmRlbnQ6IC0xLjVlbTsKICB9CgogIC5wcm9maWxlIC5hcnRpY2xlcyBhCiAgewogICAgbGlzdC1zdHlsZTogbm9uZSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgfQoKCiAgLnR3b19jb2x1bW5zCiAgewogICAgLW1vei1jb2x1bW4tY291bnQ6IDE7CiAgICAtby1jb2x1bW4tY291bnQ6IDE7CiAgICAtbXMtY29sdW1uLWNvdW50OiAxOwogICAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDE7CiAgICBjb2x1bW4tY291bnQ6IDE7CiAgfQoKICBkaXYub25lX3F1YXJ0ZXIsCiAgZGl2Lm9uZV9oYWxmICAgIHsgZmxvYXQ6IGxlZnQ7IH0KICBkaXYub25lX3F1YXJ0ZXIgewogICAgd2lkdGg6IDUwJTsKICAgIHBhZGRpbmctYm90dG9tOiAuNzVlbTsKICB9CiAgZGl2Lm9uZV9oYWxmICAgIHsgd2lkdGg6IDEwMCU7IH0KCiAgLyogSG9tZXBhZ2UgKi8KCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcy5mZWVkIGxpCiAgewogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiYmI7CiAgICBwYWRkaW5nOiAuMjVlbSAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI3VwZGF0ZXMuZmVlZCBsaTpmaXJzdC1jaGlsZAogIHsKICAgIGJvcmRlci10b3A6IDA7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdICN1cGRhdGVzLmZlZWQgbGkgc3Bhbi5ieWxpbmUsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcy5mZWVkIGxpIHNwYW4uZGV0YWlscwogIHsKICAgIGRpc3BsYXk6IGlubGluZTsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gI3VwZGF0ZXMuZmVlZCBsaSBzcGFuLmNsYXNzZXMsCiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSAjdXBkYXRlcy5mZWVkIGxpIHNwYW4udHlwZQogIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGFydGljbGUucHJvZmlsZSB7IHdpZHRoOiA0OSUgIWltcG9ydGFudDsgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24geyBwYWRkaW5nOiAwIDQlICFpbXBvcnRhbnQ7IH0KICBib2R5W2RhdGEtaHJlZj0iaG9tZSJdIGFydGljbGUucHJvZmlsZTpudGgtY2hpbGQoM24gKyAxKSB7IG1hcmdpbi1sZWZ0OiAyJSAhaW1wb3J0YW50OyB9CiAgYm9keVtkYXRhLWhyZWY9ImhvbWUiXSBhcnRpY2xlLnByb2ZpbGU6bnRoLWNoaWxkKDJuICsgMSkgeyBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OyB9CgogIG5hdi50b2MgewogICAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBoZWlnaHQ6IDVweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlZDQ3MzI7CiAgfQoKICAucGFnZSBoZWFkZXIgLnNoYXJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KSB7CiAgI2hvbWVfbWVudSB7fQogICN0dXRvcmlhbHNfbWVudSB7fQogICN1cGRhdGVzX21lbnUge30KICAjZmVhdHVyZXNfc2hvdyB7IGRpc3BsYXk6IG5vbmU7IH0KICAjc2xpZGVzX21lbnUgeyBkaXNwbGF5OiBub25lOyB9CiAgI3Jlc291cmNlc19tZW51IHt9CiAgI3Byb2ZpbGVzX21lbnUgeyBkaXNwbGF5OiBub25lOyB9CiAgI2NvbnRyaWJfbWVudSB7IGRpc3BsYXk6IG5vbmU7IH0KICAjc2VhcmNoX3Nob3cgc3BhbiB7IGRpc3BsYXk6IG5vbmU7IH0KCiAgbmF2Lm91dGxpbmUgewogICAgbWF4LWhlaWdodDogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgLnBhZ2UsCiAgLnBhZ2UuY3VycmVudCwKICAucGFnZSBoZWFkZXIKICB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgfQoKICAucGFnZSBoZWFkZXIudHV0b3JpYWwgaDEgewogICAgIGZvbnQtc2l6ZTogMjVweCAhaW1wb3J0YW50OwogIH0KCiAgaGVhZGVyLm1haW4gaDEKICB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxvYXQ6IGxlZnQ7CiAgfQoKCiAgaGVhZGVyLm1haW4gaDEKICB7CiAgICBtYXJnaW46IC4xZW07CiAgICBwYWRkaW5nOiAwLjRlbSAwLjZlbTsKICB9CgogIGhlYWRlci50dXRvcmlhbCAuYnJvd3Nlcl9zdXBwb3J0IHsKICAgIG1hcmdpbjogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgaGVhZGVyLm1haW4gbmF2IHVsIGxpI2ZlYXR1cmVzX3Nob3cgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIuc2VhcmNoCiAgewogICAgbWFyZ2luOiAuMTVlbSAwIDAgLjVlbTsKICB9CgogIGhlYWRlci5tYWluIC5zdWJoZWFkZXIgLmZlYXR1cmVzIHVsCiAgewogICAgbWFyZ2luLWxlZnQ6IDEycHg7CiAgICB3aWR0aDogMzYwcHg7CiAgfQoKICBoZWFkZXIubWFpbiAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaQogIHsKICAgIHdpZHRoOiAxNjBweDsKICB9CgogIC8qIEhvbWVwYWdlICovCgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlCiAgewogICAgbWFyZ2luOiAyJSAwIDAgMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24KICB7CiAgICBwYWRkaW5nOiAwIDIlICFpbXBvcnRhbnQ7CiAgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgybiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQoKICAjYXV0aG9ycyB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQoubWFpbiAuc3ViaGVhZGVyIC5mZWF0dXJlcyB1bCBsaQogIHsKICAgIHdpZHRoOiAxNjBweDsKICB9CgogIC8qIEhvbWVwYWdlICovCgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlCiAgewogICAgbWFyZ2luOiAyJSAwIDAgMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICB9CgogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlIHNlY3Rpb24KICB7CiAgICBwYWRkaW5nOiAwIDIlICFpbXBvcnRhbnQ7CiAgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgzbiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQogIGJvZHlbZGF0YS1ocmVmPSJob21lIl0gYXJ0aWNsZS5wcm9maWxlOm50aC1jaGlsZCgybiArIDEpIHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQoKICAjYXV0aG9ycyB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQo=" > -->

<!--	<script id="script_vue_js" src='data:/text/plain;base64,LyohCiAqIFZ1ZS5qcyB2Mi41LjE3CiAqIChjKSAyMDE0LTIwMTggRXZhbiBZb3UKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KIWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6ZS5WdWU9dCgpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB5PU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIG51bGw9PWV9ZnVuY3Rpb24gRChlKXtyZXR1cm4gbnVsbCE9ZX1mdW5jdGlvbiBTKGUpe3JldHVybiEwPT09ZX1mdW5jdGlvbiBUKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlfHwic3ltYm9sIj09dHlwZW9mIGV8fCJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gUChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX12YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1yLmNhbGwoZSl9ZnVuY3Rpb24gaShlKXt2YXIgdD1wYXJzZUZsb2F0KFN0cmluZyhlKSk7cmV0dXJuIDA8PXQmJk1hdGguZmxvb3IodCk9PT10JiZpc0Zpbml0ZShlKX1mdW5jdGlvbiB0KGUpe3JldHVybiBudWxsPT1lPyIiOiJvYmplY3QiPT10eXBlb2YgZT9KU09OLnN0cmluZ2lmeShlLG51bGwsMik6U3RyaW5nKGUpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUuc3BsaXQoIiwiKSxpPTA7aTxyLmxlbmd0aDtpKyspbltyW2ldXT0hMDtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbihlKXtyZXR1cm4gbltlXX19dmFyIGM9cygic2xvdCxjb21wb25lbnQiLCEwKSx1PXMoImtleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzIik7ZnVuY3Rpb24gZihlLHQpe2lmKGUubGVuZ3RoKXt2YXIgbj1lLmluZGV4T2YodCk7aWYoLTE8bilyZXR1cm4gZS5zcGxpY2UobiwxKX19dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBwKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfWZ1bmN0aW9uIGUodCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV18fChuW2VdPXQoZSkpfX12YXIgbz0vLShcdykvZyxnPWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShvLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dC50b1VwcGVyQ2FzZSgpOiIifSl9KSxkPWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX0pLGE9L1xCKFtBLVpdKS9nLF89ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGEsIi0kMSIpLnRvTG93ZXJDYXNlKCl9KTt2YXIgdj1GdW5jdGlvbi5wcm90b3R5cGUuYmluZD9mdW5jdGlvbihlLHQpe3JldHVybiBlLmJpbmQodCl9OmZ1bmN0aW9uKG4scil7ZnVuY3Rpb24gZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO3JldHVybiB0PzE8dD9uLmFwcGx5KHIsYXJndW1lbnRzKTpuLmNhbGwocixlKTpuLmNhbGwocil9cmV0dXJuIGUuX2xlbmd0aD1uLmxlbmd0aCxlfTtmdW5jdGlvbiBoKGUsdCl7dD10fHwwO2Zvcih2YXIgbj1lLmxlbmd0aC10LHI9bmV3IEFycmF5KG4pO24tLTspcltuXT1lW24rdF07cmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBiKGUpe2Zvcih2YXIgdD17fSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmbSh0LGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uICQoZSx0LG4pe312YXIgTz1mdW5jdGlvbihlLHQsbil7cmV0dXJuITF9LHc9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O2Z1bmN0aW9uIEModCxuKXtpZih0PT09bilyZXR1cm4hMDt2YXIgZT1QKHQpLHI9UChuKTtpZighZXx8IXIpcmV0dXJuIWUmJiFyJiZTdHJpbmcodCk9PT1TdHJpbmcobik7dHJ5e3ZhciBpPUFycmF5LmlzQXJyYXkodCksbz1BcnJheS5pc0FycmF5KG4pO2lmKGkmJm8pcmV0dXJuIHQubGVuZ3RoPT09bi5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24oZSx0KXtyZXR1cm4gQyhlLG5bdF0pfSk7aWYoaXx8bylyZXR1cm4hMTt2YXIgYT1PYmplY3Qua2V5cyh0KSxzPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PXMubGVuZ3RoJiZhLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBDKHRbZV0sbltlXSl9KX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24geChlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKEMoZVtuXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBSKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIEU9ImRhdGEtc2VydmVyLXJlbmRlcmVkIixrPVsiY29tcG9uZW50IiwiZGlyZWN0aXZlIiwiZmlsdGVyIl0sQT1bImJlZm9yZUNyZWF0ZSIsImNyZWF0ZWQiLCJiZWZvcmVNb3VudCIsIm1vdW50ZWQiLCJiZWZvcmVVcGRhdGUiLCJ1cGRhdGVkIiwiYmVmb3JlRGVzdHJveSIsImRlc3Ryb3llZCIsImFjdGl2YXRlZCIsImRlYWN0aXZhdGVkIiwiZXJyb3JDYXB0dXJlZCJdLGo9e29wdGlvbk1lcmdlU3RyYXRlZ2llczpPYmplY3QuY3JlYXRlKG51bGwpLHNpbGVudDohMSxwcm9kdWN0aW9uVGlwOiExLGRldnRvb2xzOiExLHBlcmZvcm1hbmNlOiExLGVycm9ySGFuZGxlcjpudWxsLHdhcm5IYW5kbGVyOm51bGwsaWdub3JlZEVsZW1lbnRzOltdLGtleUNvZGVzOk9iamVjdC5jcmVhdGUobnVsbCksaXNSZXNlcnZlZFRhZzpPLGlzUmVzZXJ2ZWRBdHRyOk8saXNVbmtub3duRWxlbWVudDpPLGdldFRhZ05hbWVzcGFjZTokLHBhcnNlUGxhdGZvcm1UYWdOYW1lOncsbXVzdFVzZVByb3A6TyxfbGlmZWN5Y2xlSG9va3M6QX07ZnVuY3Rpb24gTihlLHQsbixyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ISFyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfXZhciBMPS9bXlx3LiRdLzt2YXIgSSxIPSJfX3Byb3RvX18iaW57fSxCPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LFU9InVuZGVmaW5lZCIhPXR5cGVvZiBXWEVudmlyb25tZW50JiYhIVdYRW52aXJvbm1lbnQucGxhdGZvcm0sVj1VJiZXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCksej1CJiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLEs9eiYmL21zaWV8dHJpZGVudC8udGVzdCh6KSxKPXomJjA8ei5pbmRleE9mKCJtc2llIDkuMCIpLHE9eiYmMDx6LmluZGV4T2YoImVkZ2UvIiksVz0oeiYmei5pbmRleE9mKCJhbmRyb2lkIikseiYmL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KHopfHwiaW9zIj09PVYpLEc9KHomJi9jaHJvbWVcL1xkKy8udGVzdCh6KSx7fS53YXRjaCksWj0hMTtpZihCKXRyeXt2YXIgWD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe1o9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QtcGFzc2l2ZSIsbnVsbCxYKX1jYXRjaChlKXt9dmFyIFk9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09SSYmKEk9IUImJiFVJiYidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmInNlcnZlciI9PT1nbG9iYWwucHJvY2Vzcy5lbnYuVlVFX0VOViksSX0sUT1CJiZ3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztmdW5jdGlvbiBlZShlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmL25hdGl2ZSBjb2RlLy50ZXN0KGUudG9TdHJpbmcoKSl9dmFyIHRlLG5lPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlZShTeW1ib2wpJiYidW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJmVlKFJlZmxlY3Qub3duS2V5cyk7dGU9InVuZGVmaW5lZCIhPXR5cGVvZiBTZXQmJmVlKFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PXRoaXMuc2V0W2VdfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRbZV09ITB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX0sZX0oKTt2YXIgcmU9JCxpZT0wLG9lPWZ1bmN0aW9uKCl7dGhpcy5pZD1pZSsrLHRoaXMuc3Vicz1bXX07b2UucHJvdG90eXBlLmFkZFN1Yj1mdW5jdGlvbihlKXt0aGlzLnN1YnMucHVzaChlKX0sb2UucHJvdG90eXBlLnJlbW92ZVN1Yj1mdW5jdGlvbihlKXtmKHRoaXMuc3VicyxlKX0sb2UucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe29lLnRhcmdldCYmb2UudGFyZ2V0LmFkZERlcCh0aGlzKX0sb2UucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnN1YnMuc2xpY2UoKSx0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWVbdF0udXBkYXRlKCl9LG9lLnRhcmdldD1udWxsO3ZhciBhZT1bXTtmdW5jdGlvbiBzZShlKXtvZS50YXJnZXQmJmFlLnB1c2gob2UudGFyZ2V0KSxvZS50YXJnZXQ9ZX1mdW5jdGlvbiBjZSgpe29lLnRhcmdldD1hZS5wb3AoKX12YXIgbGU9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt0aGlzLnRhZz1lLHRoaXMuZGF0YT10LHRoaXMuY2hpbGRyZW49bix0aGlzLnRleHQ9cix0aGlzLmVsbT1pLHRoaXMubnM9dm9pZCAwLHRoaXMuY29udGV4dD1vLHRoaXMuZm5Db250ZXh0PXZvaWQgMCx0aGlzLmZuT3B0aW9ucz12b2lkIDAsdGhpcy5mblNjb3BlSWQ9dm9pZCAwLHRoaXMua2V5PXQmJnQua2V5LHRoaXMuY29tcG9uZW50T3B0aW9ucz1hLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9dm9pZCAwLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLnJhdz0hMSx0aGlzLmlzU3RhdGljPSExLHRoaXMuaXNSb290SW5zZXJ0PSEwLHRoaXMuaXNDb21tZW50PSExLHRoaXMuaXNDbG9uZWQ9ITEsdGhpcy5pc09uY2U9ITEsdGhpcy5hc3luY0ZhY3Rvcnk9cyx0aGlzLmFzeW5jTWV0YT12b2lkIDAsdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXI9ITF9LHVlPXtjaGlsZDp7Y29uZmlndXJhYmxlOiEwfX07dWUuY2hpbGQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxlLnByb3RvdHlwZSx1ZSk7dmFyIGZlPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgdD1uZXcgbGU7cmV0dXJuIHQudGV4dD1lLHQuaXNDb21tZW50PSEwLHR9O2Z1bmN0aW9uIHBlKGUpe3JldHVybiBuZXcgbGUodm9pZCAwLHZvaWQgMCx2b2lkIDAsU3RyaW5nKGUpKX1mdW5jdGlvbiBkZShlKXt2YXIgdD1uZXcgbGUoZS50YWcsZS5kYXRhLGUuY2hpbGRyZW4sZS50ZXh0LGUuZWxtLGUuY29udGV4dCxlLmNvbXBvbmVudE9wdGlvbnMsZS5hc3luY0ZhY3RvcnkpO3JldHVybiB0Lm5zPWUubnMsdC5pc1N0YXRpYz1lLmlzU3RhdGljLHQua2V5PWUua2V5LHQuaXNDb21tZW50PWUuaXNDb21tZW50LHQuZm5Db250ZXh0PWUuZm5Db250ZXh0LHQuZm5PcHRpb25zPWUuZm5PcHRpb25zLHQuZm5TY29wZUlkPWUuZm5TY29wZUlkLHQuaXNDbG9uZWQ9ITAsdH12YXIgdmU9QXJyYXkucHJvdG90eXBlLGhlPU9iamVjdC5jcmVhdGUodmUpO1sicHVzaCIsInBvcCIsInNoaWZ0IiwidW5zaGlmdCIsInNwbGljZSIsInNvcnQiLCJyZXZlcnNlIl0uZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgYT12ZVtvXTtOKGhlLG8sZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD1hcmd1bWVudHMubGVuZ3RoO3QtLTspZVt0XT1hcmd1bWVudHNbdF07dmFyIG4scj1hLmFwcGx5KHRoaXMsZSksaT10aGlzLl9fb2JfXztzd2l0Y2gobyl7Y2FzZSJwdXNoIjpjYXNlInVuc2hpZnQiOm49ZTticmVhaztjYXNlInNwbGljZSI6bj1lLnNsaWNlKDIpfXJldHVybiBuJiZpLm9ic2VydmVBcnJheShuKSxpLmRlcC5ub3RpZnkoKSxyfSl9KTt2YXIgbWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGUpLHllPSEwO2Z1bmN0aW9uIGdlKGUpe3llPWV9dmFyIF9lPWZ1bmN0aW9uKGUpeyh0aGlzLnZhbHVlPWUsdGhpcy5kZXA9bmV3IG9lLHRoaXMudm1Db3VudD0wLE4oZSwiX19vYl9fIix0aGlzKSxBcnJheS5pc0FycmF5KGUpKT8oKEg/YmU6JGUpKGUsaGUsbWUpLHRoaXMub2JzZXJ2ZUFycmF5KGUpKTp0aGlzLndhbGsoZSl9O2Z1bmN0aW9uIGJlKGUsdCxuKXtlLl9fcHJvdG9fXz10fWZ1bmN0aW9uICRlKGUsdCxuKXtmb3IodmFyIHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPW5bcl07TihlLG8sdFtvXSl9fWZ1bmN0aW9uIHdlKGUsdCl7dmFyIG47aWYoUChlKSYmIShlIGluc3RhbmNlb2YgbGUpKXJldHVybiBwKGUsIl9fb2JfXyIpJiZlLl9fb2JfXyBpbnN0YW5jZW9mIF9lP249ZS5fX29iX186eWUmJiFZKCkmJihBcnJheS5pc0FycmF5KGUpfHxsKGUpKSYmT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmIWUuX2lzVnVlJiYobj1uZXcgX2UoZSkpLHQmJm4mJm4udm1Db3VudCsrLG59ZnVuY3Rpb24gQ2UobixlLHIsdCxpKXt2YXIgbz1uZXcgb2UsYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSk7aWYoIWF8fCExIT09YS5jb25maWd1cmFibGUpe3ZhciBzPWEmJmEuZ2V0O3N8fDIhPT1hcmd1bWVudHMubGVuZ3RofHwocj1uW2VdKTt2YXIgYz1hJiZhLnNldCxsPSFpJiZ3ZShyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1zP3MuY2FsbChuKTpyO3JldHVybiBvZS50YXJnZXQmJihvLmRlcGVuZCgpLGwmJihsLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KGUpJiZmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj12b2lkIDAscj0wLGk9dC5sZW5ndGg7cjxpO3IrKykobj10W3JdKSYmbi5fX29iX18mJm4uX19vYl9fLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KG4pJiZlKG4pfShlKSkpLGV9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1zP3MuY2FsbChuKTpyO2U9PT10fHxlIT1lJiZ0IT10fHwoYz9jLmNhbGwobixlKTpyPWUsbD0haSYmd2UoZSksby5ub3RpZnkoKSl9fSl9fWZ1bmN0aW9uIHhlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpJiZpKHQpKXJldHVybiBlLmxlbmd0aD1NYXRoLm1heChlLmxlbmd0aCx0KSxlLnNwbGljZSh0LDEsbiksbjtpZih0IGluIGUmJiEodCBpbiBPYmplY3QucHJvdG90eXBlKSlyZXR1cm4gZVt0XT1uO3ZhciByPWUuX19vYl9fO3JldHVybiBlLl9pc1Z1ZXx8ciYmci52bUNvdW50P246cj8oQ2Uoci52YWx1ZSx0LG4pLHIuZGVwLm5vdGlmeSgpLG4pOmVbdF09bn1mdW5jdGlvbiBrZShlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkmJmkodCkpZS5zcGxpY2UodCwxKTtlbHNle3ZhciBuPWUuX19vYl9fO2UuX2lzVnVlfHxuJiZuLnZtQ291bnR8fHAoZSx0KSYmKGRlbGV0ZSBlW3RdLG4mJm4uZGVwLm5vdGlmeSgpKX19X2UucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKGUpLG49MDtuPHQubGVuZ3RoO24rKylDZShlLHRbbl0pfSxfZS5wcm90b3R5cGUub2JzZXJ2ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl3ZShlW3RdKX07dmFyIEFlPWoub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO2Z1bmN0aW9uIE9lKGUsdCl7aWYoIXQpcmV0dXJuIGU7Zm9yKHZhciBuLHIsaSxvPU9iamVjdC5rZXlzKHQpLGE9MDthPG8ubGVuZ3RoO2ErKylyPWVbbj1vW2FdXSxpPXRbbl0scChlLG4pP2wocikmJmwoaSkmJk9lKHIsaSk6eGUoZSxuLGkpO3JldHVybiBlfWZ1bmN0aW9uIFNlKG4scixpKXtyZXR1cm4gaT9mdW5jdGlvbigpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiByP3IuY2FsbChpLGkpOnIsdD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmNhbGwoaSxpKTpuO3JldHVybiBlP09lKGUsdCk6dH06cj9uP2Z1bmN0aW9uKCl7cmV0dXJuIE9lKCJmdW5jdGlvbiI9PXR5cGVvZiByP3IuY2FsbCh0aGlzLHRoaXMpOnIsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5jYWxsKHRoaXMsdGhpcyk6bil9OnI6bn1mdW5jdGlvbiBUZShlLHQpe3JldHVybiB0P2U/ZS5jb25jYXQodCk6QXJyYXkuaXNBcnJheSh0KT90Olt0XTplfWZ1bmN0aW9uIEVlKGUsdCxuLHIpe3ZhciBpPU9iamVjdC5jcmVhdGUoZXx8bnVsbCk7cmV0dXJuIHQ/bShpLHQpOml9QWUuZGF0YT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/U2UoZSx0LG4pOnQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6U2UoZSx0KX0sQS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FlW2VdPVRlfSksay5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FlW2UrInMiXT1FZX0pLEFlLndhdGNoPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9PT1HJiYoZT12b2lkIDApLHQ9PT1HJiYodD12b2lkIDApLCF0KXJldHVybiBPYmplY3QuY3JlYXRlKGV8fG51bGwpO2lmKCFlKXJldHVybiB0O3ZhciBpPXt9O2Zvcih2YXIgbyBpbiBtKGksZSksdCl7dmFyIGE9aVtvXSxzPXRbb107YSYmIUFycmF5LmlzQXJyYXkoYSkmJihhPVthXSksaVtvXT1hP2EuY29uY2F0KHMpOkFycmF5LmlzQXJyYXkocyk/czpbc119cmV0dXJuIGl9LEFlLnByb3BzPUFlLm1ldGhvZHM9QWUuaW5qZWN0PUFlLmNvbXB1dGVkPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFlKXJldHVybiB0O3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIG0oaSxlKSx0JiZtKGksdCksaX0sQWUucHJvdmlkZT1TZTt2YXIgamU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9lOnR9O2Z1bmN0aW9uIE5lKG4scixpKXsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHI9ci5vcHRpb25zKSxmdW5jdGlvbihlLHQpe3ZhciBuPWUucHJvcHM7aWYobil7dmFyIHIsaSxvPXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHI9bi5sZW5ndGg7ci0tOykic3RyaW5nIj09dHlwZW9mKGk9bltyXSkmJihvW2coaSldPXt0eXBlOm51bGx9KTtlbHNlIGlmKGwobikpZm9yKHZhciBhIGluIG4paT1uW2FdLG9bZyhhKV09bChpKT9pOnt0eXBlOml9O2UucHJvcHM9b319KHIpLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmplY3Q7aWYobil7dmFyIHI9ZS5pbmplY3Q9e307aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylyW25baV1dPXtmcm9tOm5baV19O2Vsc2UgaWYobChuKSlmb3IodmFyIG8gaW4gbil7dmFyIGE9bltvXTtyW29dPWwoYSk/bSh7ZnJvbTpvfSxhKTp7ZnJvbTphfX19fShyKSxmdW5jdGlvbihlKXt2YXIgdD1lLmRpcmVjdGl2ZXM7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHRbbl09e2JpbmQ6cix1cGRhdGU6cn0pfX0ocik7dmFyIGU9ci5leHRlbmRzO2lmKGUmJihuPU5lKG4sZSxpKSksci5taXhpbnMpZm9yKHZhciB0PTAsbz1yLm1peGlucy5sZW5ndGg7dDxvO3QrKyluPU5lKG4sci5taXhpbnNbdF0saSk7dmFyIGEscz17fTtmb3IoYSBpbiBuKWMoYSk7Zm9yKGEgaW4gcilwKG4sYSl8fGMoYSk7ZnVuY3Rpb24gYyhlKXt2YXIgdD1BZVtlXXx8amU7c1tlXT10KG5bZV0scltlXSxpLGUpfXJldHVybiBzfWZ1bmN0aW9uIExlKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGk9ZVt0XTtpZihwKGksbikpcmV0dXJuIGlbbl07dmFyIG89ZyhuKTtpZihwKGksbykpcmV0dXJuIGlbb107dmFyIGE9ZChvKTtyZXR1cm4gcChpLGEpP2lbYV06aVtuXXx8aVtvXXx8aVthXX19ZnVuY3Rpb24gSWUoZSx0LG4scil7dmFyIGk9dFtlXSxvPSFwKG4sZSksYT1uW2VdLHM9UGUoQm9vbGVhbixpLnR5cGUpO2lmKC0xPHMpaWYobyYmIXAoaSwiZGVmYXVsdCIpKWE9ITE7ZWxzZSBpZigiIj09PWF8fGE9PT1fKGUpKXt2YXIgYz1QZShTdHJpbmcsaS50eXBlKTsoYzwwfHxzPGMpJiYoYT0hMCl9aWYodm9pZCAwPT09YSl7YT1mdW5jdGlvbihlLHQsbil7aWYoIXAodCwiZGVmYXVsdCIpKXJldHVybjt2YXIgcj10LmRlZmF1bHQ7aWYoZSYmZS4kb3B0aW9ucy5wcm9wc0RhdGEmJnZvaWQgMD09PWUuJG9wdGlvbnMucHJvcHNEYXRhW25dJiZ2b2lkIDAhPT1lLl9wcm9wc1tuXSlyZXR1cm4gZS5fcHJvcHNbbl07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHImJiJGdW5jdGlvbiIhPT1NZSh0LnR5cGUpP3IuY2FsbChlKTpyfShyLGksZSk7dmFyIGw9eWU7Z2UoITApLHdlKGEpLGdlKGwpfXJldHVybiBhfWZ1bmN0aW9uIE1lKGUpe3ZhciB0PWUmJmUudG9TdHJpbmcoKS5tYXRjaCgvXlxzKmZ1bmN0aW9uIChcdyspLyk7cmV0dXJuIHQ/dFsxXToiIn1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBNZShlKT09PU1lKHQpfWZ1bmN0aW9uIFBlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIERlKHQsZSk/MDotMTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoRGUodFtuXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBGZShlLHQsbil7aWYodClmb3IodmFyIHI9dDtyPXIuJHBhcmVudDspe3ZhciBpPXIuJG9wdGlvbnMuZXJyb3JDYXB0dXJlZDtpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXRyeXtpZighMT09PWlbb10uY2FsbChyLGUsdCxuKSlyZXR1cm59Y2F0Y2goZSl7UmUoZSxyLCJlcnJvckNhcHR1cmVkIGhvb2siKX19UmUoZSx0LG4pfWZ1bmN0aW9uIFJlKGUsdCxuKXtpZihqLmVycm9ySGFuZGxlcil0cnl7cmV0dXJuIGouZXJyb3JIYW5kbGVyLmNhbGwobnVsbCxlLHQsbil9Y2F0Y2goZSl7SGUoZSxudWxsLCJjb25maWcuZXJyb3JIYW5kbGVyIil9SGUoZSx0LG4pfWZ1bmN0aW9uIEhlKGUsdCxuKXtpZighQiYmIVV8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZSl0aHJvdyBlO2NvbnNvbGUuZXJyb3IoZSl9dmFyIEJlLFVlLFZlPVtdLHplPSExO2Z1bmN0aW9uIEtlKCl7emU9ITE7Zm9yKHZhciBlPVZlLnNsaWNlKDApLHQ9VmUubGVuZ3RoPTA7dDxlLmxlbmd0aDt0KyspZVt0XSgpfXZhciBKZT0hMTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNldEltbWVkaWF0ZSYmZWUoc2V0SW1tZWRpYXRlKSlVZT1mdW5jdGlvbigpe3NldEltbWVkaWF0ZShLZSl9O2Vsc2UgaWYoInVuZGVmaW5lZCI9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbHx8IWVlKE1lc3NhZ2VDaGFubmVsKSYmIltvYmplY3QgTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl0iIT09TWVzc2FnZUNoYW5uZWwudG9TdHJpbmcoKSlVZT1mdW5jdGlvbigpe3NldFRpbWVvdXQoS2UsMCl9O2Vsc2V7dmFyIHFlPW5ldyBNZXNzYWdlQ2hhbm5lbCxXZT1xZS5wb3J0MjtxZS5wb3J0MS5vbm1lc3NhZ2U9S2UsVWU9ZnVuY3Rpb24oKXtXZS5wb3N0TWVzc2FnZSgxKX19aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiZlZShQcm9taXNlKSl7dmFyIEdlPVByb21pc2UucmVzb2x2ZSgpO0JlPWZ1bmN0aW9uKCl7R2UudGhlbihLZSksVyYmc2V0VGltZW91dCgkKX19ZWxzZSBCZT1VZTtmdW5jdGlvbiBaZShlLHQpe3ZhciBuO2lmKFZlLnB1c2goZnVuY3Rpb24oKXtpZihlKXRyeXtlLmNhbGwodCl9Y2F0Y2goZSl7RmUoZSx0LCJuZXh0VGljayIpfWVsc2UgbiYmbih0KX0pLHplfHwoemU9ITAsSmU/VWUoKTpCZSgpKSwhZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtuPWV9KX12YXIgWGU9bmV3IHRlO2Z1bmN0aW9uIFllKGUpeyFmdW5jdGlvbiBlKHQsbil7dmFyIHIsaTt2YXIgbz1BcnJheS5pc0FycmF5KHQpO2lmKCFvJiYhUCh0KXx8T2JqZWN0LmlzRnJvemVuKHQpfHx0IGluc3RhbmNlb2YgbGUpcmV0dXJuO2lmKHQuX19vYl9fKXt2YXIgYT10Ll9fb2JfXy5kZXAuaWQ7aWYobi5oYXMoYSkpcmV0dXJuO24uYWRkKGEpfWlmKG8pZm9yKHI9dC5sZW5ndGg7ci0tOyllKHRbcl0sbik7ZWxzZSBmb3IoaT1PYmplY3Qua2V5cyh0KSxyPWkubGVuZ3RoO3ItLTspZSh0W2lbcl1dLG4pfShlLFhlKSxYZS5jbGVhcigpfXZhciBRZSxldD1lKGZ1bmN0aW9uKGUpe3ZhciB0PSImIj09PWUuY2hhckF0KDApLG49In4iPT09KGU9dD9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKSxyPSIhIj09PShlPW4/ZS5zbGljZSgxKTplKS5jaGFyQXQoMCk7cmV0dXJue25hbWU6ZT1yP2Uuc2xpY2UoMSk6ZSxvbmNlOm4sY2FwdHVyZTpyLHBhc3NpdmU6dH19KTtmdW5jdGlvbiB0dChlKXtmdW5jdGlvbiBpKCl7dmFyIGU9YXJndW1lbnRzLHQ9aS5mbnM7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2Zvcih2YXIgbj10LnNsaWNlKCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl0uYXBwbHkobnVsbCxlKX1yZXR1cm4gaS5mbnM9ZSxpfWZ1bmN0aW9uIG50KGUsdCxuLHIsaSl7dmFyIG8sYSxzLGM7Zm9yKG8gaW4gZSlhPWVbb10scz10W29dLGM9ZXQobyksTShhKXx8KE0ocyk/KE0oYS5mbnMpJiYoYT1lW29dPXR0KGEpKSxuKGMubmFtZSxhLGMub25jZSxjLmNhcHR1cmUsYy5wYXNzaXZlLGMucGFyYW1zKSk6YSE9PXMmJihzLmZucz1hLGVbb109cykpO2ZvcihvIGluIHQpTShlW29dKSYmcigoYz1ldChvKSkubmFtZSx0W29dLGMuY2FwdHVyZSl9ZnVuY3Rpb24gcnQoZSx0LG4pe3ZhciByO2UgaW5zdGFuY2VvZiBsZSYmKGU9ZS5kYXRhLmhvb2t8fChlLmRhdGEuaG9vaz17fSkpO3ZhciBpPWVbdF07ZnVuY3Rpb24gbygpe24uYXBwbHkodGhpcyxhcmd1bWVudHMpLGYoci5mbnMsbyl9TShpKT9yPXR0KFtvXSk6RChpLmZucykmJlMoaS5tZXJnZWQpPyhyPWkpLmZucy5wdXNoKG8pOnI9dHQoW2ksb10pLHIubWVyZ2VkPSEwLGVbdF09cn1mdW5jdGlvbiBpdChlLHQsbixyLGkpe2lmKEQodCkpe2lmKHAodCxuKSlyZXR1cm4gZVtuXT10W25dLGl8fGRlbGV0ZSB0W25dLCEwO2lmKHAodCxyKSlyZXR1cm4gZVtuXT10W3JdLGl8fGRlbGV0ZSB0W3JdLCEwfXJldHVybiExfWZ1bmN0aW9uIG90KGUpe3JldHVybiBUKGUpP1twZShlKV06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbiBlKHQsbil7dmFyIHI9W107dmFyIGksbyxhLHM7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylNKG89dFtpXSl8fCJib29sZWFuIj09dHlwZW9mIG98fChhPXIubGVuZ3RoLTEscz1yW2FdLEFycmF5LmlzQXJyYXkobyk/MDxvLmxlbmd0aCYmKGF0KChvPWUobywobnx8IiIpKyJfIitpKSlbMF0pJiZhdChzKSYmKHJbYV09cGUocy50ZXh0K29bMF0udGV4dCksby5zaGlmdCgpKSxyLnB1c2guYXBwbHkocixvKSk6VChvKT9hdChzKT9yW2FdPXBlKHMudGV4dCtvKToiIiE9PW8mJnIucHVzaChwZShvKSk6YXQobykmJmF0KHMpP3JbYV09cGUocy50ZXh0K28udGV4dCk6KFModC5faXNWTGlzdCkmJkQoby50YWcpJiZNKG8ua2V5KSYmRChuKSYmKG8ua2V5PSJfX3ZsaXN0IituKyJfIitpKyJfXyIpLHIucHVzaChvKSkpO3JldHVybiByfShlKTp2b2lkIDB9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIEQoZSkmJkQoZS50ZXh0KSYmITE9PT1lLmlzQ29tbWVudH1mdW5jdGlvbiBzdChlLHQpe3JldHVybihlLl9fZXNNb2R1bGV8fG5lJiYiTW9kdWxlIj09PWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkmJihlPWUuZGVmYXVsdCksUChlKT90LmV4dGVuZChlKTplfWZ1bmN0aW9uIGN0KGUpe3JldHVybiBlLmlzQ29tbWVudCYmZS5hc3luY0ZhY3Rvcnl9ZnVuY3Rpb24gbHQoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTtpZihEKG4pJiYoRChuLmNvbXBvbmVudE9wdGlvbnMpfHxjdChuKSkpcmV0dXJuIG59fWZ1bmN0aW9uIHV0KGUsdCxuKXtuP1FlLiRvbmNlKGUsdCk6UWUuJG9uKGUsdCl9ZnVuY3Rpb24gZnQoZSx0KXtRZS4kb2ZmKGUsdCl9ZnVuY3Rpb24gcHQoZSx0LG4pe1FlPWUsbnQodCxufHx7fSx1dCxmdCksUWU9dm9pZCAwfWZ1bmN0aW9uIGR0KGUsdCl7dmFyIG49e307aWYoIWUpcmV0dXJuIG47Zm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lW3JdLGE9by5kYXRhO2lmKGEmJmEuYXR0cnMmJmEuYXR0cnMuc2xvdCYmZGVsZXRlIGEuYXR0cnMuc2xvdCxvLmNvbnRleHQhPT10JiZvLmZuQ29udGV4dCE9PXR8fCFhfHxudWxsPT1hLnNsb3QpKG4uZGVmYXVsdHx8KG4uZGVmYXVsdD1bXSkpLnB1c2gobyk7ZWxzZXt2YXIgcz1hLnNsb3QsYz1uW3NdfHwobltzXT1bXSk7InRlbXBsYXRlIj09PW8udGFnP2MucHVzaC5hcHBseShjLG8uY2hpbGRyZW58fFtdKTpjLnB1c2gobyl9fWZvcih2YXIgbCBpbiBuKW5bbF0uZXZlcnkodnQpJiZkZWxldGUgbltsXTtyZXR1cm4gbn1mdW5jdGlvbiB2dChlKXtyZXR1cm4gZS5pc0NvbW1lbnQmJiFlLmFzeW5jRmFjdG9yeXx8IiAiPT09ZS50ZXh0fWZ1bmN0aW9uIGh0KGUsdCl7dD10fHx7fTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylBcnJheS5pc0FycmF5KGVbbl0pP2h0KGVbbl0sdCk6dFtlW25dLmtleV09ZVtuXS5mbjtyZXR1cm4gdH12YXIgbXQ9bnVsbDtmdW5jdGlvbiB5dChlKXtmb3IoO2UmJihlPWUuJHBhcmVudCk7KWlmKGUuX2luYWN0aXZlKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGd0KGUsdCl7aWYodCl7aWYoZS5fZGlyZWN0SW5hY3RpdmU9ITEseXQoZSkpcmV0dXJufWVsc2UgaWYoZS5fZGlyZWN0SW5hY3RpdmUpcmV0dXJuO2lmKGUuX2luYWN0aXZlfHxudWxsPT09ZS5faW5hY3RpdmUpe2UuX2luYWN0aXZlPSExO2Zvcih2YXIgbj0wO248ZS4kY2hpbGRyZW4ubGVuZ3RoO24rKylndChlLiRjaGlsZHJlbltuXSk7X3QoZSwiYWN0aXZhdGVkIil9fWZ1bmN0aW9uIF90KHQsbil7c2UoKTt2YXIgZT10LiRvcHRpb25zW25dO2lmKGUpZm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXRyeXtlW3JdLmNhbGwodCl9Y2F0Y2goZSl7RmUoZSx0LG4rIiBob29rIil9dC5faGFzSG9va0V2ZW50JiZ0LiRlbWl0KCJob29rOiIrbiksY2UoKX12YXIgYnQ9W10sJHQ9W10sd3Q9e30sQ3Q9ITEseHQ9ITEsa3Q9MDtmdW5jdGlvbiBBdCgpe3ZhciBlLHQ7Zm9yKHh0PSEwLGJ0LnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pZC10LmlkfSksa3Q9MDtrdDxidC5sZW5ndGg7a3QrKyl0PShlPWJ0W2t0XSkuaWQsd3RbdF09bnVsbCxlLnJ1bigpO3ZhciBuPSR0LnNsaWNlKCkscj1idC5zbGljZSgpO2t0PWJ0Lmxlbmd0aD0kdC5sZW5ndGg9MCx3dD17fSxDdD14dD0hMSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLl9pbmFjdGl2ZT0hMCxndChlW3RdLCEwKX0obiksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7Zm9yKDt0LS07KXt2YXIgbj1lW3RdLHI9bi52bTtyLl93YXRjaGVyPT09biYmci5faXNNb3VudGVkJiZfdChyLCJ1cGRhdGVkIil9fShyKSxRJiZqLmRldnRvb2xzJiZRLmVtaXQoImZsdXNoIil9dmFyIE90PTAsU3Q9ZnVuY3Rpb24oZSx0LG4scixpKXt0aGlzLnZtPWUsaSYmKGUuX3dhdGNoZXI9dGhpcyksZS5fd2F0Y2hlcnMucHVzaCh0aGlzKSxyPyh0aGlzLmRlZXA9ISFyLmRlZXAsdGhpcy51c2VyPSEhci51c2VyLHRoaXMubGF6eT0hIXIubGF6eSx0aGlzLnN5bmM9ISFyLnN5bmMpOnRoaXMuZGVlcD10aGlzLnVzZXI9dGhpcy5sYXp5PXRoaXMuc3luYz0hMSx0aGlzLmNiPW4sdGhpcy5pZD0rK090LHRoaXMuYWN0aXZlPSEwLHRoaXMuZGlydHk9dGhpcy5sYXp5LHRoaXMuZGVwcz1bXSx0aGlzLm5ld0RlcHM9W10sdGhpcy5kZXBJZHM9bmV3IHRlLHRoaXMubmV3RGVwSWRzPW5ldyB0ZSx0aGlzLmV4cHJlc3Npb249IiIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5nZXR0ZXI9dDoodGhpcy5nZXR0ZXI9ZnVuY3Rpb24oZSl7aWYoIUwudGVzdChlKSl7dmFyIG49ZS5zcGxpdCgiLiIpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoO3QrKyl7aWYoIWUpcmV0dXJuO2U9ZVtuW3RdXX1yZXR1cm4gZX19fSh0KSx0aGlzLmdldHRlcnx8KHRoaXMuZ2V0dGVyPWZ1bmN0aW9uKCl7fSkpLHRoaXMudmFsdWU9dGhpcy5sYXp5P3ZvaWQgMDp0aGlzLmdldCgpfTtTdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU7c2UodGhpcyk7dmFyIHQ9dGhpcy52bTt0cnl7ZT10aGlzLmdldHRlci5jYWxsKHQsdCl9Y2F0Y2goZSl7aWYoIXRoaXMudXNlcil0aHJvdyBlO0ZlKGUsdCwnZ2V0dGVyIGZvciB3YXRjaGVyICInK3RoaXMuZXhwcmVzc2lvbisnIicpfWZpbmFsbHl7dGhpcy5kZWVwJiZZZShlKSxjZSgpLHRoaXMuY2xlYW51cERlcHMoKX1yZXR1cm4gZX0sU3QucHJvdG90eXBlLmFkZERlcD1mdW5jdGlvbihlKXt2YXIgdD1lLmlkO3RoaXMubmV3RGVwSWRzLmhhcyh0KXx8KHRoaXMubmV3RGVwSWRzLmFkZCh0KSx0aGlzLm5ld0RlcHMucHVzaChlKSx0aGlzLmRlcElkcy5oYXModCl8fGUuYWRkU3ViKHRoaXMpKX0sU3QucHJvdG90eXBlLmNsZWFudXBEZXBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl7dmFyIHQ9dGhpcy5kZXBzW2VdO3RoaXMubmV3RGVwSWRzLmhhcyh0LmlkKXx8dC5yZW1vdmVTdWIodGhpcyl9dmFyIG49dGhpcy5kZXBJZHM7dGhpcy5kZXBJZHM9dGhpcy5uZXdEZXBJZHMsdGhpcy5uZXdEZXBJZHM9bix0aGlzLm5ld0RlcElkcy5jbGVhcigpLG49dGhpcy5kZXBzLHRoaXMuZGVwcz10aGlzLm5ld0RlcHMsdGhpcy5uZXdEZXBzPW4sdGhpcy5uZXdEZXBzLmxlbmd0aD0wfSxTdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5sYXp5P3RoaXMuZGlydHk9ITA6dGhpcy5zeW5jP3RoaXMucnVuKCk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZDtpZihudWxsPT13dFt0XSl7aWYod3RbdF09ITAseHQpe2Zvcih2YXIgbj1idC5sZW5ndGgtMTtrdDxuJiZidFtuXS5pZD5lLmlkOyluLS07YnQuc3BsaWNlKG4rMSwwLGUpfWVsc2UgYnQucHVzaChlKTtDdHx8KEN0PSEwLFplKEF0KSl9fSh0aGlzKX0sU3QucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt2YXIgZT10aGlzLmdldCgpO2lmKGUhPT10aGlzLnZhbHVlfHxQKGUpfHx0aGlzLmRlZXApe3ZhciB0PXRoaXMudmFsdWU7aWYodGhpcy52YWx1ZT1lLHRoaXMudXNlcil0cnl7dGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX1jYXRjaChlKXtGZShlLHRoaXMudm0sJ2NhbGxiYWNrIGZvciB3YXRjaGVyICInK3RoaXMuZXhwcmVzc2lvbisnIicpfWVsc2UgdGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX19fSxTdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0eT0hMX0sU3QucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmRlcHMubGVuZ3RoO2UtLTspdGhpcy5kZXBzW2VdLmRlcGVuZCgpfSxTdC5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZHx8Zih0aGlzLnZtLl93YXRjaGVycyx0aGlzKTtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXRoaXMuZGVwc1tlXS5yZW1vdmVTdWIodGhpcyk7dGhpcy5hY3RpdmU9ITF9fTt2YXIgVHQ9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDokLHNldDokfTtmdW5jdGlvbiBFdChlLHQsbil7VHQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdF1bbl19LFR0LnNldD1mdW5jdGlvbihlKXt0aGlzW3RdW25dPWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sVHQpfWZ1bmN0aW9uIGp0KGUpe2UuX3dhdGNoZXJzPVtdO3ZhciB0PWUuJG9wdGlvbnM7dC5wcm9wcyYmZnVuY3Rpb24obixyKXt2YXIgaT1uLiRvcHRpb25zLnByb3BzRGF0YXx8e30sbz1uLl9wcm9wcz17fSxhPW4uJG9wdGlvbnMuX3Byb3BLZXlzPVtdO24uJHBhcmVudCYmZ2UoITEpO3ZhciBlPWZ1bmN0aW9uKGUpe2EucHVzaChlKTt2YXIgdD1JZShlLHIsaSxuKTtDZShvLGUsdCksZSBpbiBufHxFdChuLCJfcHJvcHMiLGUpfTtmb3IodmFyIHQgaW4gcillKHQpO2dlKCEwKX0oZSx0LnByb3BzKSx0Lm1ldGhvZHMmJmZ1bmN0aW9uKGUsdCl7ZS4kb3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gdCllW25dPW51bGw9PXRbbl0/JDp2KHRbbl0sZSl9KGUsdC5tZXRob2RzKSx0LmRhdGE/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucy5kYXRhO2wodD1lLl9kYXRhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCl7c2UoKTt0cnl7cmV0dXJuIGUuY2FsbCh0LHQpfWNhdGNoKGUpe3JldHVybiBGZShlLHQsImRhdGEoKSIpLHt9fWZpbmFsbHl7Y2UoKX19KHQsZSk6dHx8e30pfHwodD17fSk7dmFyIG49T2JqZWN0LmtleXModCkscj1lLiRvcHRpb25zLnByb3BzLGk9KGUuJG9wdGlvbnMubWV0aG9kcyxuLmxlbmd0aCk7Zm9yKDtpLS07KXt2YXIgbz1uW2ldO3ImJnAocixvKXx8KHZvaWQgMCwzNiE9PShhPShvKyIiKS5jaGFyQ29kZUF0KDApKSYmOTUhPT1hJiZFdChlLCJfZGF0YSIsbykpfXZhciBhO3dlKHQsITApfShlKTp3ZShlLl9kYXRhPXt9LCEwKSx0LmNvbXB1dGVkJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuX2NvbXB1dGVkV2F0Y2hlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSxyPVkoKTtmb3IodmFyIGkgaW4gdCl7dmFyIG89dFtpXSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBvP286by5nZXQ7cnx8KG5baV09bmV3IFN0KGUsYXx8JCwkLE50KSksaSBpbiBlfHxMdChlLGksbyl9fShlLHQuY29tcHV0ZWQpLHQud2F0Y2gmJnQud2F0Y2ghPT1HJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXt2YXIgcj10W25dO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspTXQoZSxuLHJbaV0pO2Vsc2UgTXQoZSxuLHIpfX0oZSx0LndhdGNoKX12YXIgTnQ9e2xhenk6ITB9O2Z1bmN0aW9uIEx0KGUsdCxuKXt2YXIgcj0hWSgpOyJmdW5jdGlvbiI9PXR5cGVvZiBuPyhUdC5nZXQ9cj9JdCh0KTpuLFR0LnNldD0kKTooVHQuZ2V0PW4uZ2V0P3ImJiExIT09bi5jYWNoZT9JdCh0KTpuLmdldDokLFR0LnNldD1uLnNldD9uLnNldDokKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LFR0KX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb21wdXRlZFdhdGNoZXJzJiZ0aGlzLl9jb21wdXRlZFdhdGNoZXJzW3RdO2lmKGUpcmV0dXJuIGUuZGlydHkmJmUuZXZhbHVhdGUoKSxvZS50YXJnZXQmJmUuZGVwZW5kKCksZS52YWx1ZX19ZnVuY3Rpb24gTXQoZSx0LG4scil7cmV0dXJuIGwobikmJihuPShyPW4pLmhhbmRsZXIpLCJzdHJpbmciPT10eXBlb2YgbiYmKG49ZVtuXSksZS4kd2F0Y2godCxuLHIpfWZ1bmN0aW9uIER0KHQsZSl7aWYodCl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1uZT9SZWZsZWN0Lm93bktleXModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pOk9iamVjdC5rZXlzKHQpLGk9MDtpPHIubGVuZ3RoO2krKyl7Zm9yKHZhciBvPXJbaV0sYT10W29dLmZyb20scz1lO3M7KXtpZihzLl9wcm92aWRlZCYmcChzLl9wcm92aWRlZCxhKSl7bltvXT1zLl9wcm92aWRlZFthXTticmVha31zPXMuJHBhcmVudH1pZighcyYmImRlZmF1bHQiaW4gdFtvXSl7dmFyIGM9dFtvXS5kZWZhdWx0O25bb109ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yy5jYWxsKGUpOmN9fXJldHVybiBufX1mdW5jdGlvbiBQdChlLHQpe3ZhciBuLHIsaSxvLGE7aWYoQXJyYXkuaXNBcnJheShlKXx8InN0cmluZyI9PXR5cGVvZiBlKWZvcihuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluW3JdPXQoZVtyXSxyKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobj1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspbltyXT10KHIrMSxyKTtlbHNlIGlmKFAoZSkpZm9yKG89T2JqZWN0LmtleXMoZSksbj1uZXcgQXJyYXkoby5sZW5ndGgpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspYT1vW3JdLG5bcl09dChlW2FdLGEscik7cmV0dXJuIEQobikmJihuLl9pc1ZMaXN0PSEwKSxufWZ1bmN0aW9uIEZ0KGUsdCxuLHIpe3ZhciBpLG89dGhpcy4kc2NvcGVkU2xvdHNbZV07aWYobyluPW58fHt9LHImJihuPW0obSh7fSxyKSxuKSksaT1vKG4pfHx0O2Vsc2V7dmFyIGE9dGhpcy4kc2xvdHNbZV07YSYmKGEuX3JlbmRlcmVkPSEwKSxpPWF8fHR9dmFyIHM9biYmbi5zbG90O3JldHVybiBzP3RoaXMuJGNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIix7c2xvdDpzfSxpKTppfWZ1bmN0aW9uIFJ0KGUpe3JldHVybiBMZSh0aGlzLiRvcHRpb25zLCJmaWx0ZXJzIixlKXx8d31mdW5jdGlvbiBIdChlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpPy0xPT09ZS5pbmRleE9mKHQpOmUhPT10fWZ1bmN0aW9uIEJ0KGUsdCxuLHIsaSl7dmFyIG89ai5rZXlDb2Rlc1t0XXx8bjtyZXR1cm4gaSYmciYmIWoua2V5Q29kZXNbdF0/SHQoaSxyKTpvP0h0KG8sZSk6cj9fKHIpIT09dDp2b2lkIDB9ZnVuY3Rpb24gVXQobixyLGksbyxhKXtpZihpKWlmKFAoaSkpe3ZhciBzO0FycmF5LmlzQXJyYXkoaSkmJihpPWIoaSkpO3ZhciBlPWZ1bmN0aW9uKHQpe2lmKCJjbGFzcyI9PT10fHwic3R5bGUiPT09dHx8dSh0KSlzPW47ZWxzZXt2YXIgZT1uLmF0dHJzJiZuLmF0dHJzLnR5cGU7cz1vfHxqLm11c3RVc2VQcm9wKHIsZSx0KT9uLmRvbVByb3BzfHwobi5kb21Qcm9wcz17fSk6bi5hdHRyc3x8KG4uYXR0cnM9e30pfXQgaW4gc3x8KHNbdF09aVt0XSxhJiYoKG4ub258fChuLm9uPXt9KSlbInVwZGF0ZToiK3RdPWZ1bmN0aW9uKGUpe2lbdF09ZX0pKX07Zm9yKHZhciB0IGluIGkpZSh0KX1lbHNlO3JldHVybiBufWZ1bmN0aW9uIFZ0KGUsdCl7dmFyIG49dGhpcy5fc3RhdGljVHJlZXN8fCh0aGlzLl9zdGF0aWNUcmVlcz1bXSkscj1uW2VdO3JldHVybiByJiYhdHx8S3Qocj1uW2VdPXRoaXMuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zW2VdLmNhbGwodGhpcy5fcmVuZGVyUHJveHksbnVsbCx0aGlzKSwiX19zdGF0aWNfXyIrZSwhMSkscn1mdW5jdGlvbiB6dChlLHQsbil7cmV0dXJuIEt0KGUsIl9fb25jZV9fIit0KyhuPyJfIituOiIiKSwhMCksZX1mdW5jdGlvbiBLdChlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiYic3RyaW5nIiE9dHlwZW9mIGVbcl0mJkp0KGVbcl0sdCsiXyIrcixuKTtlbHNlIEp0KGUsdCxuKX1mdW5jdGlvbiBKdChlLHQsbil7ZS5pc1N0YXRpYz0hMCxlLmtleT10LGUuaXNPbmNlPW59ZnVuY3Rpb24gcXQoZSx0KXtpZih0KWlmKGwodCkpe3ZhciBuPWUub249ZS5vbj9tKHt9LGUub24pOnt9O2Zvcih2YXIgciBpbiB0KXt2YXIgaT1uW3JdLG89dFtyXTtuW3JdPWk/W10uY29uY2F0KGksbyk6b319ZWxzZTtyZXR1cm4gZX1mdW5jdGlvbiBXdChlKXtlLl9vPXp0LGUuX249RixlLl9zPXQsZS5fbD1QdCxlLl90PUZ0LGUuX3E9QyxlLl9pPXgsZS5fbT1WdCxlLl9mPVJ0LGUuX2s9QnQsZS5fYj1VdCxlLl92PXBlLGUuX2U9ZmUsZS5fdT1odCxlLl9nPXF0fWZ1bmN0aW9uIEd0KGUsdCxuLG8scil7dmFyIGEscz1yLm9wdGlvbnM7cChvLCJfdWlkIik/KGE9T2JqZWN0LmNyZWF0ZShvKSkuX29yaWdpbmFsPW86bz0oYT1vKS5fb3JpZ2luYWw7dmFyIGk9UyhzLl9jb21waWxlZCksYz0haTt0aGlzLmRhdGE9ZSx0aGlzLnByb3BzPXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMucGFyZW50PW8sdGhpcy5saXN0ZW5lcnM9ZS5vbnx8eSx0aGlzLmluamVjdGlvbnM9RHQocy5pbmplY3QsbyksdGhpcy5zbG90cz1mdW5jdGlvbigpe3JldHVybiBkdChuLG8pfSxpJiYodGhpcy4kb3B0aW9ucz1zLHRoaXMuJHNsb3RzPXRoaXMuc2xvdHMoKSx0aGlzLiRzY29wZWRTbG90cz1lLnNjb3BlZFNsb3RzfHx5KSxzLl9zY29wZUlkP3RoaXMuX2M9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9cm4oYSxlLHQsbixyLGMpO3JldHVybiBpJiYhQXJyYXkuaXNBcnJheShpKSYmKGkuZm5TY29wZUlkPXMuX3Njb3BlSWQsaS5mbkNvbnRleHQ9byksaX06dGhpcy5fYz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcm4oYSxlLHQsbixyLGMpfX1mdW5jdGlvbiBadChlLHQsbixyKXt2YXIgaT1kZShlKTtyZXR1cm4gaS5mbkNvbnRleHQ9bixpLmZuT3B0aW9ucz1yLHQuc2xvdCYmKChpLmRhdGF8fChpLmRhdGE9e30pKS5zbG90PXQuc2xvdCksaX1mdW5jdGlvbiBYdChlLHQpe2Zvcih2YXIgbiBpbiB0KWVbZyhuKV09dFtuXX1XdChHdC5wcm90b3R5cGUpO3ZhciBZdD17aW5pdDpmdW5jdGlvbihlLHQsbixyKXtpZihlLmNvbXBvbmVudEluc3RhbmNlJiYhZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQmJmUuZGF0YS5rZWVwQWxpdmUpe3ZhciBpPWU7WXQucHJlcGF0Y2goaSxpKX1lbHNleyhlLmNvbXBvbmVudEluc3RhbmNlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXtfaXNDb21wb25lbnQ6ITAscGFyZW50OnQsX3BhcmVudFZub2RlOmUsX3BhcmVudEVsbTpufHxudWxsLF9yZWZFbG06cnx8bnVsbH0sbz1lLmRhdGEuaW5saW5lVGVtcGxhdGU7RChvKSYmKGkucmVuZGVyPW8ucmVuZGVyLGkuc3RhdGljUmVuZGVyRm5zPW8uc3RhdGljUmVuZGVyRm5zKTtyZXR1cm4gbmV3IGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKGkpfShlLG10LG4scikpLiRtb3VudCh0P2UuZWxtOnZvaWQgMCx0KX19LHByZXBhdGNoOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jb21wb25lbnRPcHRpb25zOyFmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSEhKGl8fGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVufHxyLmRhdGEuc2NvcGVkU2xvdHN8fGUuJHNjb3BlZFNsb3RzIT09eSk7aWYoZS4kb3B0aW9ucy5fcGFyZW50Vm5vZGU9cixlLiR2bm9kZT1yLGUuX3Zub2RlJiYoZS5fdm5vZGUucGFyZW50PXIpLGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuPWksZS4kYXR0cnM9ci5kYXRhLmF0dHJzfHx5LGUuJGxpc3RlbmVycz1ufHx5LHQmJmUuJG9wdGlvbnMucHJvcHMpe2dlKCExKTtmb3IodmFyIGE9ZS5fcHJvcHMscz1lLiRvcHRpb25zLl9wcm9wS2V5c3x8W10sYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgbD1zW2NdLHU9ZS4kb3B0aW9ucy5wcm9wczthW2xdPUllKGwsdSx0LGUpfWdlKCEwKSxlLiRvcHRpb25zLnByb3BzRGF0YT10fW49bnx8eTt2YXIgZj1lLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzPW4scHQoZSxuLGYpLG8mJihlLiRzbG90cz1kdChpLHIuY29udGV4dCksZS4kZm9yY2VVcGRhdGUoKSl9KHQuY29tcG9uZW50SW5zdGFuY2U9ZS5jb21wb25lbnRJbnN0YW5jZSxuLnByb3BzRGF0YSxuLmxpc3RlbmVycyx0LG4uY2hpbGRyZW4pfSxpbnNlcnQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmNvbnRleHQscj1lLmNvbXBvbmVudEluc3RhbmNlO3IuX2lzTW91bnRlZHx8KHIuX2lzTW91bnRlZD0hMCxfdChyLCJtb3VudGVkIikpLGUuZGF0YS5rZWVwQWxpdmUmJihuLl9pc01vdW50ZWQ/KCh0PXIpLl9pbmFjdGl2ZT0hMSwkdC5wdXNoKHQpKTpndChyLCEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21wb25lbnRJbnN0YW5jZTt0Ll9pc0Rlc3Ryb3llZHx8KGUuZGF0YS5rZWVwQWxpdmU/ZnVuY3Rpb24gZSh0LG4pe2lmKCEobiYmKHQuX2RpcmVjdEluYWN0aXZlPSEwLHl0KHQpKXx8dC5faW5hY3RpdmUpKXt0Ll9pbmFjdGl2ZT0hMDtmb3IodmFyIHI9MDtyPHQuJGNoaWxkcmVuLmxlbmd0aDtyKyspZSh0LiRjaGlsZHJlbltyXSk7X3QodCwiZGVhY3RpdmF0ZWQiKX19KHQsITApOnQuJGRlc3Ryb3koKSl9fSxRdD1PYmplY3Qua2V5cyhZdCk7ZnVuY3Rpb24gZW4oZSx0LG4scixpKXtpZighTShlKSl7dmFyIG89bi4kb3B0aW9ucy5fYmFzZTtpZihQKGUpJiYoZT1vLmV4dGVuZChlKSksImZ1bmN0aW9uIj09dHlwZW9mIGUpe3ZhciBhLHMsYyxsLHUsZixwO2lmKE0oZS5jaWQpJiZ2b2lkIDA9PT0oZT1mdW5jdGlvbih0LG4sZSl7aWYoUyh0LmVycm9yKSYmRCh0LmVycm9yQ29tcCkpcmV0dXJuIHQuZXJyb3JDb21wO2lmKEQodC5yZXNvbHZlZCkpcmV0dXJuIHQucmVzb2x2ZWQ7aWYoUyh0LmxvYWRpbmcpJiZEKHQubG9hZGluZ0NvbXApKXJldHVybiB0LmxvYWRpbmdDb21wO2lmKCFEKHQuY29udGV4dHMpKXt2YXIgcj10LmNvbnRleHRzPVtlXSxpPSEwLG89ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspcltlXS4kZm9yY2VVcGRhdGUoKX0sYT1SKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZWQ9c3QoZSxuKSxpfHxvKCl9KSxzPVIoZnVuY3Rpb24oZSl7RCh0LmVycm9yQ29tcCkmJih0LmVycm9yPSEwLG8oKSl9KSxjPXQoYSxzKTtyZXR1cm4gUChjKSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW4/TSh0LnJlc29sdmVkKSYmYy50aGVuKGEscyk6RChjLmNvbXBvbmVudCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbXBvbmVudC50aGVuJiYoYy5jb21wb25lbnQudGhlbihhLHMpLEQoYy5lcnJvcikmJih0LmVycm9yQ29tcD1zdChjLmVycm9yLG4pKSxEKGMubG9hZGluZykmJih0LmxvYWRpbmdDb21wPXN0KGMubG9hZGluZyxuKSwwPT09Yy5kZWxheT90LmxvYWRpbmc9ITA6c2V0VGltZW91dChmdW5jdGlvbigpe00odC5yZXNvbHZlZCkmJk0odC5lcnJvcikmJih0LmxvYWRpbmc9ITAsbygpKX0sYy5kZWxheXx8MjAwKSksRChjLnRpbWVvdXQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TSh0LnJlc29sdmVkKSYmcyhudWxsKX0sYy50aW1lb3V0KSkpLGk9ITEsdC5sb2FkaW5nP3QubG9hZGluZ0NvbXA6dC5yZXNvbHZlZH10LmNvbnRleHRzLnB1c2goZSl9KGE9ZSxvLG4pKSlyZXR1cm4gcz1hLGM9dCxsPW4sdT1yLGY9aSwocD1mZSgpKS5hc3luY0ZhY3Rvcnk9cyxwLmFzeW5jTWV0YT17ZGF0YTpjLGNvbnRleHQ6bCxjaGlsZHJlbjp1LHRhZzpmfSxwO3Q9dHx8e30sZG4oZSksRCh0Lm1vZGVsKSYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm1vZGVsJiZlLm1vZGVsLnByb3B8fCJ2YWx1ZSIscj1lLm1vZGVsJiZlLm1vZGVsLmV2ZW50fHwiaW5wdXQiOyh0LnByb3BzfHwodC5wcm9wcz17fSkpW25dPXQubW9kZWwudmFsdWU7dmFyIGk9dC5vbnx8KHQub249e30pO0QoaVtyXSk/aVtyXT1bdC5tb2RlbC5jYWxsYmFja10uY29uY2F0KGlbcl0pOmlbcl09dC5tb2RlbC5jYWxsYmFja30oZS5vcHRpb25zLHQpO3ZhciBkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Lm9wdGlvbnMucHJvcHM7aWYoIU0ocikpe3ZhciBpPXt9LG89ZS5hdHRycyxhPWUucHJvcHM7aWYoRChvKXx8RChhKSlmb3IodmFyIHMgaW4gcil7dmFyIGM9XyhzKTtpdChpLGEscyxjLCEwKXx8aXQoaSxvLHMsYywhMSl9cmV0dXJuIGl9fSh0LGUpO2lmKFMoZS5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWUub3B0aW9ucyxhPXt9LHM9by5wcm9wcztpZihEKHMpKWZvcih2YXIgYyBpbiBzKWFbY109SWUoYyxzLHR8fHkpO2Vsc2UgRChuLmF0dHJzKSYmWHQoYSxuLmF0dHJzKSxEKG4ucHJvcHMpJiZYdChhLG4ucHJvcHMpO3ZhciBsPW5ldyBHdChuLGEsaSxyLGUpLHU9by5yZW5kZXIuY2FsbChudWxsLGwuX2MsbCk7aWYodSBpbnN0YW5jZW9mIGxlKXJldHVybiBadCh1LG4sbC5wYXJlbnQsbyk7aWYoQXJyYXkuaXNBcnJheSh1KSl7Zm9yKHZhciBmPW90KHUpfHxbXSxwPW5ldyBBcnJheShmLmxlbmd0aCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXBbZF09WnQoZltkXSxuLGwucGFyZW50LG8pO3JldHVybiBwfX0oZSxkLHQsbixyKTt2YXIgdj10Lm9uO2lmKHQub249dC5uYXRpdmVPbixTKGUub3B0aW9ucy5hYnN0cmFjdCkpe3ZhciBoPXQuc2xvdDt0PXt9LGgmJih0LnNsb3Q9aCl9IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmhvb2t8fChlLmhvb2s9e30pLG49MDtuPFF0Lmxlbmd0aDtuKyspe3ZhciByPVF0W25dO3Rbcl09WXRbcl19fSh0KTt2YXIgbT1lLm9wdGlvbnMubmFtZXx8aTtyZXR1cm4gbmV3IGxlKCJ2dWUtY29tcG9uZW50LSIrZS5jaWQrKG0/Ii0iK206IiIpLHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsbix7Q3RvcjplLHByb3BzRGF0YTpkLGxpc3RlbmVyczp2LHRhZzppLGNoaWxkcmVuOnJ9LGEpfX19dmFyIHRuPTEsbm49MjtmdW5jdGlvbiBybihlLHQsbixyLGksbyl7cmV0dXJuKEFycmF5LmlzQXJyYXkobil8fFQobikpJiYoaT1yLHI9bixuPXZvaWQgMCksUyhvKSYmKGk9bm4pLGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoRChuKSYmRChuLl9fb2JfXykpcmV0dXJuIGZlKCk7RChuKSYmRChuLmlzKSYmKHQ9bi5pcyk7aWYoIXQpcmV0dXJuIGZlKCk7QXJyYXkuaXNBcnJheShyKSYmImZ1bmN0aW9uIj09dHlwZW9mIHJbMF0mJigobj1ufHx7fSkuc2NvcGVkU2xvdHM9e2RlZmF1bHQ6clswXX0sci5sZW5ndGg9MCk7aT09PW5uP3I9b3Qocik6aT09PXRuJiYocj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylpZihBcnJheS5pc0FycmF5KGVbdF0pKXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpO3JldHVybiBlfShyKSk7dmFyIG8sYTtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBzO2E9ZS4kdm5vZGUmJmUuJHZub2RlLm5zfHxqLmdldFRhZ05hbWVzcGFjZSh0KSxvPWouaXNSZXNlcnZlZFRhZyh0KT9uZXcgbGUoai5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0KSxuLHIsdm9pZCAwLHZvaWQgMCxlKTpEKHM9TGUoZS4kb3B0aW9ucywiY29tcG9uZW50cyIsdCkpP2VuKHMsbixlLHIsdCk6bmV3IGxlKHQsbixyLHZvaWQgMCx2b2lkIDAsZSl9ZWxzZSBvPWVuKHQsbixlLHIpO3JldHVybiBBcnJheS5pc0FycmF5KG8pP286RChvKT8oRChhKSYmZnVuY3Rpb24gZSh0LG4scil7dC5ucz1uOyJmb3JlaWduT2JqZWN0Ij09PXQudGFnJiYobj12b2lkIDAscj0hMCk7aWYoRCh0LmNoaWxkcmVuKSlmb3IodmFyIGk9MCxvPXQuY2hpbGRyZW4ubGVuZ3RoO2k8bztpKyspe3ZhciBhPXQuY2hpbGRyZW5baV07RChhLnRhZykmJihNKGEubnMpfHxTKHIpJiYic3ZnIiE9PWEudGFnKSYmZShhLG4scil9fShvLGEpLEQobikmJmZ1bmN0aW9uKGUpe1AoZS5zdHlsZSkmJlllKGUuc3R5bGUpO1AoZS5jbGFzcykmJlllKGUuY2xhc3MpfShuKSxvKTpmZSgpfShlLHQsbixyLGkpfXZhciBvbixhbixzbixjbixsbix1bixmbixwbj0wO2Z1bmN0aW9uIGRuKGUpe3ZhciB0PWUub3B0aW9ucztpZihlLnN1cGVyKXt2YXIgbj1kbihlLnN1cGVyKTtpZihuIT09ZS5zdXBlck9wdGlvbnMpe2Uuc3VwZXJPcHRpb25zPW47dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLm9wdGlvbnMscj1lLmV4dGVuZE9wdGlvbnMsaT1lLnNlYWxlZE9wdGlvbnM7Zm9yKHZhciBvIGluIG4pbltvXSE9PWlbb10mJih0fHwodD17fSksdFtvXT12bihuW29dLHJbb10saVtvXSkpO3JldHVybiB0fShlKTtyJiZtKGUuZXh0ZW5kT3B0aW9ucyxyKSwodD1lLm9wdGlvbnM9TmUobixlLmV4dGVuZE9wdGlvbnMpKS5uYW1lJiYodC5jb21wb25lbnRzW3QubmFtZV09ZSl9fXJldHVybiB0fWZ1bmN0aW9uIHZuKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1bXTtuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKSgwPD10LmluZGV4T2YoZVtpXSl8fG4uaW5kZXhPZihlW2ldKTwwKSYmci5wdXNoKGVbaV0pO3JldHVybiByfXJldHVybiBlfWZ1bmN0aW9uIGhuKGUpe3RoaXMuX2luaXQoZSl9ZnVuY3Rpb24gbW4oZSl7ZS5jaWQ9MDt2YXIgYT0xO2UuZXh0ZW5kPWZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIHQ9dGhpcyxuPXQuY2lkLHI9ZS5fQ3Rvcnx8KGUuX0N0b3I9e30pO2lmKHJbbl0pcmV0dXJuIHJbbl07dmFyIGk9ZS5uYW1lfHx0Lm9wdGlvbnMubmFtZSxvPWZ1bmN0aW9uKGUpe3RoaXMuX2luaXQoZSl9O3JldHVybigoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW8pLmNpZD1hKyssby5vcHRpb25zPU5lKHQub3B0aW9ucyxlKSxvLnN1cGVyPXQsby5vcHRpb25zLnByb3BzJiZmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIHQpRXQoZS5wcm90b3R5cGUsIl9wcm9wcyIsbil9KG8pLG8ub3B0aW9ucy5jb21wdXRlZCYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zLmNvbXB1dGVkO2Zvcih2YXIgbiBpbiB0KUx0KGUucHJvdG90eXBlLG4sdFtuXSl9KG8pLG8uZXh0ZW5kPXQuZXh0ZW5kLG8ubWl4aW49dC5taXhpbixvLnVzZT10LnVzZSxrLmZvckVhY2goZnVuY3Rpb24oZSl7b1tlXT10W2VdfSksaSYmKG8ub3B0aW9ucy5jb21wb25lbnRzW2ldPW8pLG8uc3VwZXJPcHRpb25zPXQub3B0aW9ucyxvLmV4dGVuZE9wdGlvbnM9ZSxvLnNlYWxlZE9wdGlvbnM9bSh7fSxvLm9wdGlvbnMpLHJbbl09b319ZnVuY3Rpb24geW4oZSl7cmV0dXJuIGUmJihlLkN0b3Iub3B0aW9ucy5uYW1lfHxlLnRhZyl9ZnVuY3Rpb24gZ24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8tMTxlLmluZGV4T2YodCk6InN0cmluZyI9PXR5cGVvZiBlPy0xPGUuc3BsaXQoIiwiKS5pbmRleE9mKHQpOihuPWUsIltvYmplY3QgUmVnRXhwXSI9PT1yLmNhbGwobikmJmUudGVzdCh0KSk7dmFyIG59ZnVuY3Rpb24gX24oZSx0KXt2YXIgbj1lLmNhY2hlLHI9ZS5rZXlzLGk9ZS5fdm5vZGU7Zm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb107aWYoYSl7dmFyIHM9eW4oYS5jb21wb25lbnRPcHRpb25zKTtzJiYhdChzKSYmYm4obixvLHIsaSl9fX1mdW5jdGlvbiBibihlLHQsbixyKXt2YXIgaT1lW3RdOyFpfHxyJiZpLnRhZz09PXIudGFnfHxpLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCksZVt0XT1udWxsLGYobix0KX1obi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbz10aGlzO28uX3VpZD1wbisrLG8uX2lzVnVlPSEwLGUmJmUuX2lzQ29tcG9uZW50P2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS4kb3B0aW9ucz1PYmplY3QuY3JlYXRlKGUuY29uc3RydWN0b3Iub3B0aW9ucykscj10Ll9wYXJlbnRWbm9kZTtuLnBhcmVudD10LnBhcmVudCxuLl9wYXJlbnRWbm9kZT1yLG4uX3BhcmVudEVsbT10Ll9wYXJlbnRFbG0sbi5fcmVmRWxtPXQuX3JlZkVsbTt2YXIgaT1yLmNvbXBvbmVudE9wdGlvbnM7bi5wcm9wc0RhdGE9aS5wcm9wc0RhdGEsbi5fcGFyZW50TGlzdGVuZXJzPWkubGlzdGVuZXJzLG4uX3JlbmRlckNoaWxkcmVuPWkuY2hpbGRyZW4sbi5fY29tcG9uZW50VGFnPWkudGFnLHQucmVuZGVyJiYobi5yZW5kZXI9dC5yZW5kZXIsbi5zdGF0aWNSZW5kZXJGbnM9dC5zdGF0aWNSZW5kZXJGbnMpfShvLGUpOm8uJG9wdGlvbnM9TmUoZG4oby5jb25zdHJ1Y3RvciksZXx8e30sbyksZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucyxuPXQucGFyZW50O2lmKG4mJiF0LmFic3RyYWN0KXtmb3IoO24uJG9wdGlvbnMuYWJzdHJhY3QmJm4uJHBhcmVudDspbj1uLiRwYXJlbnQ7bi4kY2hpbGRyZW4ucHVzaChlKX1lLiRwYXJlbnQ9bixlLiRyb290PW4/bi4kcm9vdDplLGUuJGNoaWxkcmVuPVtdLGUuJHJlZnM9e30sZS5fd2F0Y2hlcj1udWxsLGUuX2luYWN0aXZlPW51bGwsZS5fZGlyZWN0SW5hY3RpdmU9ITEsZS5faXNNb3VudGVkPSExLGUuX2lzRGVzdHJveWVkPSExLGUuX2lzQmVpbmdEZXN0cm95ZWQ9ITF9KChvLl9yZW5kZXJQcm94eT1vKS5fc2VsZj1vKSxmdW5jdGlvbihlKXtlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9oYXNIb29rRXZlbnQ9ITE7dmFyIHQ9ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO3QmJnB0KGUsdCl9KG8pLGZ1bmN0aW9uKGkpe2kuX3Zub2RlPW51bGwsaS5fc3RhdGljVHJlZXM9bnVsbDt2YXIgZT1pLiRvcHRpb25zLHQ9aS4kdm5vZGU9ZS5fcGFyZW50Vm5vZGUsbj10JiZ0LmNvbnRleHQ7aS4kc2xvdHM9ZHQoZS5fcmVuZGVyQ2hpbGRyZW4sbiksaS4kc2NvcGVkU2xvdHM9eSxpLl9jPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBybihpLGUsdCxuLHIsITEpfSxpLiRjcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBybihpLGUsdCxuLHIsITApfTt2YXIgcj10JiZ0LmRhdGE7Q2UoaSwiJGF0dHJzIixyJiZyLmF0dHJzfHx5LG51bGwsITApLENlKGksIiRsaXN0ZW5lcnMiLGUuX3BhcmVudExpc3RlbmVyc3x8eSxudWxsLCEwKX0obyksX3QobywiYmVmb3JlQ3JlYXRlIiksKG49RHQoKHQ9bykuJG9wdGlvbnMuaW5qZWN0LHQpKSYmKGdlKCExKSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0NlKHQsZSxuW2VdKX0pLGdlKCEwKSksanQobyksKGk9KHI9bykuJG9wdGlvbnMucHJvdmlkZSkmJihyLl9wcm92aWRlZD0iZnVuY3Rpb24iPT10eXBlb2YgaT9pLmNhbGwocik6aSksX3QobywiY3JlYXRlZCIpLG8uJG9wdGlvbnMuZWwmJm8uJG1vdW50KG8uJG9wdGlvbnMuZWwpfSxvbj1obixhbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGF9fSxzbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb3BzfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KG9uLnByb3RvdHlwZSwiJGRhdGEiLGFuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkob24ucHJvdG90eXBlLCIkcHJvcHMiLHNuKSxvbi5wcm90b3R5cGUuJHNldD14ZSxvbi5wcm90b3R5cGUuJGRlbGV0ZT1rZSxvbi5wcm90b3R5cGUuJHdhdGNoPWZ1bmN0aW9uKGUsdCxuKXtpZihsKHQpKXJldHVybiBNdCh0aGlzLGUsdCxuKTsobj1ufHx7fSkudXNlcj0hMDt2YXIgcj1uZXcgU3QodGhpcyxlLHQsbik7cmV0dXJuIG4uaW1tZWRpYXRlJiZ0LmNhbGwodGhpcyxyLnZhbHVlKSxmdW5jdGlvbigpe3IudGVhcmRvd24oKX19LGxuPS9eaG9vazovLChjbj1obikucHJvdG90eXBlLiRvbj1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRoaXMuJG9uKGVbbl0sdCk7ZWxzZSh0aGlzLl9ldmVudHNbZV18fCh0aGlzLl9ldmVudHNbZV09W10pKS5wdXNoKHQpLGxuLnRlc3QoZSkmJih0aGlzLl9oYXNIb29rRXZlbnQ9ITApO3JldHVybiB0aGlzfSxjbi5wcm90b3R5cGUuJG9uY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2Z1bmN0aW9uIHIoKXtuLiRvZmYoZSxyKSx0LmFwcGx5KG4sYXJndW1lbnRzKX1yZXR1cm4gci5mbj10LG4uJG9uKGUsciksbn0sY24ucHJvdG90eXBlLiRvZmY9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxuO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl0aGlzLiRvZmYoZVtyXSx0KTtyZXR1cm4gbn12YXIgbz1uLl9ldmVudHNbZV07aWYoIW8pcmV0dXJuIG47aWYoIXQpcmV0dXJuIG4uX2V2ZW50c1tlXT1udWxsLG47aWYodClmb3IodmFyIGEscz1vLmxlbmd0aDtzLS07KWlmKChhPW9bc10pPT09dHx8YS5mbj09PXQpe28uc3BsaWNlKHMsMSk7YnJlYWt9cmV0dXJuIG59LGNuLnByb3RvdHlwZS4kZW1pdD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLGU9bi5fZXZlbnRzW3RdO2lmKGUpe2U9MTxlLmxlbmd0aD9oKGUpOmU7Zm9yKHZhciByPWgoYXJndW1lbnRzLDEpLGk9MCxvPWUubGVuZ3RoO2k8bztpKyspdHJ5e2VbaV0uYXBwbHkobixyKX1jYXRjaChlKXtGZShlLG4sJ2V2ZW50IGhhbmRsZXIgZm9yICInK3QrJyInKX19cmV0dXJuIG59LCh1bj1obikucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24uX2lzTW91bnRlZCYmX3QobiwiYmVmb3JlVXBkYXRlIik7dmFyIHI9bi4kZWwsaT1uLl92bm9kZSxvPW10OyhtdD1uKS5fdm5vZGU9ZSxpP24uJGVsPW4uX19wYXRjaF9fKGksZSk6KG4uJGVsPW4uX19wYXRjaF9fKG4uJGVsLGUsdCwhMSxuLiRvcHRpb25zLl9wYXJlbnRFbG0sbi4kb3B0aW9ucy5fcmVmRWxtKSxuLiRvcHRpb25zLl9wYXJlbnRFbG09bi4kb3B0aW9ucy5fcmVmRWxtPW51bGwpLG10PW8sciYmKHIuX192dWVfXz1udWxsKSxuLiRlbCYmKG4uJGVsLl9fdnVlX189biksbi4kdm5vZGUmJm4uJHBhcmVudCYmbi4kdm5vZGU9PT1uLiRwYXJlbnQuX3Zub2RlJiYobi4kcGFyZW50LiRlbD1uLiRlbCl9LHVuLnByb3RvdHlwZS4kZm9yY2VVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl93YXRjaGVyJiZ0aGlzLl93YXRjaGVyLnVwZGF0ZSgpfSx1bi5wcm90b3R5cGUuJGRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFlLl9pc0JlaW5nRGVzdHJveWVkKXtfdChlLCJiZWZvcmVEZXN0cm95IiksZS5faXNCZWluZ0Rlc3Ryb3llZD0hMDt2YXIgdD1lLiRwYXJlbnQ7IXR8fHQuX2lzQmVpbmdEZXN0cm95ZWR8fGUuJG9wdGlvbnMuYWJzdHJhY3R8fGYodC4kY2hpbGRyZW4sZSksZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci50ZWFyZG93bigpO2Zvcih2YXIgbj1lLl93YXRjaGVycy5sZW5ndGg7bi0tOyllLl93YXRjaGVyc1tuXS50ZWFyZG93bigpO2UuX2RhdGEuX19vYl9fJiZlLl9kYXRhLl9fb2JfXy52bUNvdW50LS0sZS5faXNEZXN0cm95ZWQ9ITAsZS5fX3BhdGNoX18oZS5fdm5vZGUsbnVsbCksX3QoZSwiZGVzdHJveWVkIiksZS4kb2ZmKCksZS4kZWwmJihlLiRlbC5fX3Z1ZV9fPW51bGwpLGUuJHZub2RlJiYoZS4kdm5vZGUucGFyZW50PW51bGwpfX0sV3QoKGZuPWhuKS5wcm90b3R5cGUpLGZuLnByb3RvdHlwZS4kbmV4dFRpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIFplKGUsdGhpcyl9LGZuLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLGU9bi4kb3B0aW9ucyxyPWUucmVuZGVyLGk9ZS5fcGFyZW50Vm5vZGU7aSYmKG4uJHNjb3BlZFNsb3RzPWkuZGF0YS5zY29wZWRTbG90c3x8eSksbi4kdm5vZGU9aTt0cnl7dD1yLmNhbGwobi5fcmVuZGVyUHJveHksbi4kY3JlYXRlRWxlbWVudCl9Y2F0Y2goZSl7RmUoZSxuLCJyZW5kZXIiKSx0PW4uX3Zub2RlfXJldHVybiB0IGluc3RhbmNlb2YgbGV8fCh0PWZlKCkpLHQucGFyZW50PWksdH07dmFyICRuLHduLENuLHhuPVtTdHJpbmcsUmVnRXhwLEFycmF5XSxrbj17S2VlcEFsaXZlOntuYW1lOiJrZWVwLWFsaXZlIixhYnN0cmFjdDohMCxwcm9wczp7aW5jbHVkZTp4bixleGNsdWRlOnhuLG1heDpbU3RyaW5nLE51bWJlcl19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5rZXlzPVtdfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5jYWNoZSlibih0aGlzLmNhY2hlLGUsdGhpcy5rZXlzKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kd2F0Y2goImluY2x1ZGUiLGZ1bmN0aW9uKHQpe19uKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGduKHQsZSl9KX0pLHRoaXMuJHdhdGNoKCJleGNsdWRlIixmdW5jdGlvbih0KXtfbihlLGZ1bmN0aW9uKGUpe3JldHVybiFnbih0LGUpfSl9KX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2xvdHMuZGVmYXVsdCx0PWx0KGUpLG49dCYmdC5jb21wb25lbnRPcHRpb25zO2lmKG4pe3ZhciByPXluKG4pLGk9dGhpcy5pbmNsdWRlLG89dGhpcy5leGNsdWRlO2lmKGkmJighcnx8IWduKGkscikpfHxvJiZyJiZnbihvLHIpKXJldHVybiB0O3ZhciBhPXRoaXMuY2FjaGUscz10aGlzLmtleXMsYz1udWxsPT10LmtleT9uLkN0b3IuY2lkKyhuLnRhZz8iOjoiK24udGFnOiIiKTp0LmtleTthW2NdPyh0LmNvbXBvbmVudEluc3RhbmNlPWFbY10uY29tcG9uZW50SW5zdGFuY2UsZihzLGMpLHMucHVzaChjKSk6KGFbY109dCxzLnB1c2goYyksdGhpcy5tYXgmJnMubGVuZ3RoPnBhcnNlSW50KHRoaXMubWF4KSYmYm4oYSxzWzBdLHMsdGhpcy5fdm5vZGUpKSx0LmRhdGEua2VlcEFsaXZlPSEwfXJldHVybiB0fHxlJiZlWzBdfX19OyRuPWhuLENuPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkbiwiY29uZmlnIixDbiksJG4udXRpbD17d2FybjpyZSxleHRlbmQ6bSxtZXJnZU9wdGlvbnM6TmUsZGVmaW5lUmVhY3RpdmU6Q2V9LCRuLnNldD14ZSwkbi5kZWxldGU9a2UsJG4ubmV4dFRpY2s9WmUsJG4ub3B0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLGsuZm9yRWFjaChmdW5jdGlvbihlKXskbi5vcHRpb25zW2UrInMiXT1PYmplY3QuY3JlYXRlKG51bGwpfSksbSgoJG4ub3B0aW9ucy5fYmFzZT0kbikub3B0aW9ucy5jb21wb25lbnRzLGtuKSwkbi51c2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5zdGFsbGVkUGx1Z2luc3x8KHRoaXMuX2luc3RhbGxlZFBsdWdpbnM9W10pO2lmKC0xPHQuaW5kZXhPZihlKSlyZXR1cm4gdGhpczt2YXIgbj1oKGFyZ3VtZW50cywxKTtyZXR1cm4gbi51bnNoaWZ0KHRoaXMpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmluc3RhbGw/ZS5pbnN0YWxsLmFwcGx5KGUsbik6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYXBwbHkobnVsbCxuKSx0LnB1c2goZSksdGhpc30sJG4ubWl4aW49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9ucz1OZSh0aGlzLm9wdGlvbnMsZSksdGhpc30sbW4oJG4pLHduPSRuLGsuZm9yRWFjaChmdW5jdGlvbihuKXt3bltuXT1mdW5jdGlvbihlLHQpe3JldHVybiB0PygiY29tcG9uZW50Ij09PW4mJmwodCkmJih0Lm5hbWU9dC5uYW1lfHxlLHQ9dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZCh0KSksImRpcmVjdGl2ZSI9PT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9e2JpbmQ6dCx1cGRhdGU6dH0pLHRoaXMub3B0aW9uc1tuKyJzIl1bZV09dCk6dGhpcy5vcHRpb25zW24rInMiXVtlXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaG4ucHJvdG90eXBlLCIkaXNTZXJ2ZXIiLHtnZXQ6WX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShobi5wcm90b3R5cGUsIiRzc3JDb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShobiwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHQiLHt2YWx1ZTpHdH0pLGhuLnZlcnNpb249IjIuNS4xNyI7dmFyIEFuPXMoInN0eWxlLGNsYXNzIiksT249cygiaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzcyIpLFNuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idmFsdWUiPT09biYmT24oZSkmJiJidXR0b24iIT09dHx8InNlbGVjdGVkIj09PW4mJiJvcHRpb24iPT09ZXx8ImNoZWNrZWQiPT09biYmImlucHV0Ij09PWV8fCJtdXRlZCI9PT1uJiYidmlkZW8iPT09ZX0sVG49cygiY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrIiksRW49cygiYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSxkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRlcm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSxtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsdHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZSIpLGpuPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixObj1mdW5jdGlvbihlKXtyZXR1cm4iOiI9PT1lLmNoYXJBdCg1KSYmInhsaW5rIj09PWUuc2xpY2UoMCw1KX0sTG49ZnVuY3Rpb24oZSl7cmV0dXJuIE5uKGUpP2Uuc2xpY2UoNixlLmxlbmd0aCk6IiJ9LEluPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV9O2Z1bmN0aW9uIE1uKGUpe2Zvcih2YXIgdD1lLmRhdGEsbj1lLHI9ZTtEKHIuY29tcG9uZW50SW5zdGFuY2UpOykocj1yLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJnIuZGF0YSYmKHQ9RG4oci5kYXRhLHQpKTtmb3IoO0Qobj1uLnBhcmVudCk7KW4mJm4uZGF0YSYmKHQ9RG4odCxuLmRhdGEpKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihEKGUpfHxEKHQpKXJldHVybiBQbihlLEZuKHQpKTtyZXR1cm4iIn0odC5zdGF0aWNDbGFzcyx0LmNsYXNzKX1mdW5jdGlvbiBEbihlLHQpe3JldHVybntzdGF0aWNDbGFzczpQbihlLnN0YXRpY0NsYXNzLHQuc3RhdGljQ2xhc3MpLGNsYXNzOkQoZS5jbGFzcyk/W2UuY2xhc3MsdC5jbGFzc106dC5jbGFzc319ZnVuY3Rpb24gUG4oZSx0KXtyZXR1cm4gZT90P2UrIiAiK3Q6ZTp0fHwiIn1mdW5jdGlvbiBGbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKUQodD1GbihlW3JdKSkmJiIiIT09dCYmKG4mJihuKz0iICIpLG4rPXQpO3JldHVybiBufShlKTpQKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PSIiO2Zvcih2YXIgbiBpbiBlKWVbbl0mJih0JiYodCs9IiAiKSx0Kz1uKTtyZXR1cm4gdH0oZSk6InN0cmluZyI9PXR5cGVvZiBlP2U6IiJ9dmFyIFJuPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixtYXRoOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIn0sSG49cygiaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSxzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbyxlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucyxjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0cixidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LGNvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QiKSxCbj1zKCJzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsZm9yZWlnbk9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldyIsITApLFVuPWZ1bmN0aW9uKGUpe3JldHVybiBIbihlKXx8Qm4oZSl9O2Z1bmN0aW9uIFZuKGUpe3JldHVybiBCbihlKT8ic3ZnIjoibWF0aCI9PT1lPyJtYXRoIjp2b2lkIDB9dmFyIHpuPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIEtuPXMoInRleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsIik7ZnVuY3Rpb24gSm4oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpO3JldHVybiB0fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX1yZXR1cm4gZX12YXIgcW49T2JqZWN0LmZyZWV6ZSh7Y3JlYXRlRWxlbWVudDpmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuInNlbGVjdCIhPT1lfHx0LmRhdGEmJnQuZGF0YS5hdHRycyYmdm9pZCAwIT09dC5kYXRhLmF0dHJzLm11bHRpcGxlJiZuLnNldEF0dHJpYnV0ZSgibXVsdGlwbGUiLCJtdWx0aXBsZSIpLG59LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbihlLHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoUm5bZV0sdCl9LGNyZWF0ZVRleHROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihlLHQpe2UucmVtb3ZlQ2hpbGQodCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUsdCl7ZS5hcHBlbmRDaGlsZCh0KX0scGFyZW50Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlfSxuZXh0U2libGluZzpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXh0U2libGluZ30sdGFnTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lfSxzZXRUZXh0Q29udGVudDpmdW5jdGlvbihlLHQpe2UudGV4dENvbnRlbnQ9dH0sc2V0U3R5bGVTY29wZTpmdW5jdGlvbihlLHQpe2Uuc2V0QXR0cmlidXRlKHQsIiIpfX0pLFduPXtjcmVhdGU6ZnVuY3Rpb24oZSx0KXtHbih0KX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZS5kYXRhLnJlZiE9PXQuZGF0YS5yZWYmJihHbihlLCEwKSxHbih0KSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7R24oZSwhMCl9fTtmdW5jdGlvbiBHbihlLHQpe3ZhciBuPWUuZGF0YS5yZWY7aWYoRChuKSl7dmFyIHI9ZS5jb250ZXh0LGk9ZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5lbG0sbz1yLiRyZWZzO3Q/QXJyYXkuaXNBcnJheShvW25dKT9mKG9bbl0saSk6b1tuXT09PWkmJihvW25dPXZvaWQgMCk6ZS5kYXRhLnJlZkluRm9yP0FycmF5LmlzQXJyYXkob1tuXSk/b1tuXS5pbmRleE9mKGkpPDAmJm9bbl0ucHVzaChpKTpvW25dPVtpXTpvW25dPWl9fXZhciBabj1uZXcgbGUoIiIse30sW10pLFhuPVsiY3JlYXRlIiwiYWN0aXZhdGUiLCJ1cGRhdGUiLCJyZW1vdmUiLCJkZXN0cm95Il07ZnVuY3Rpb24gWW4oZSx0KXtyZXR1cm4gZS5rZXk9PT10LmtleSYmKGUudGFnPT09dC50YWcmJmUuaXNDb21tZW50PT09dC5pc0NvbW1lbnQmJkQoZS5kYXRhKT09PUQodC5kYXRhKSYmZnVuY3Rpb24oZSx0KXtpZigiaW5wdXQiIT09ZS50YWcpcmV0dXJuITA7dmFyIG4scj1EKG49ZS5kYXRhKSYmRChuPW4uYXR0cnMpJiZuLnR5cGUsaT1EKG49dC5kYXRhKSYmRChuPW4uYXR0cnMpJiZuLnR5cGU7cmV0dXJuIHI9PT1pfHxLbihyKSYmS24oaSl9KGUsdCl8fFMoZS5pc0FzeW5jUGxhY2Vob2xkZXIpJiZlLmFzeW5jRmFjdG9yeT09PXQuYXN5bmNGYWN0b3J5JiZNKHQuYXN5bmNGYWN0b3J5LmVycm9yKSl9ZnVuY3Rpb24gUW4oZSx0LG4pe3ZhciByLGksbz17fTtmb3Iocj10O3I8PW47KytyKUQoaT1lW3JdLmtleSkmJihvW2ldPXIpO3JldHVybiBvfXZhciBlcj17Y3JlYXRlOnRyLHVwZGF0ZTp0cixkZXN0cm95OmZ1bmN0aW9uKGUpe3RyKGUsWm4pfX07ZnVuY3Rpb24gdHIoZSx0KXsoZS5kYXRhLmRpcmVjdGl2ZXN8fHQuZGF0YS5kaXJlY3RpdmVzKSYmZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbz10PT09Wm4sYT1uPT09Wm4scz1ycih0LmRhdGEuZGlyZWN0aXZlcyx0LmNvbnRleHQpLGM9cnIobi5kYXRhLmRpcmVjdGl2ZXMsbi5jb250ZXh0KSxsPVtdLHU9W107Zm9yKGUgaW4gYylyPXNbZV0saT1jW2VdLHI/KGkub2xkVmFsdWU9ci52YWx1ZSxpcihpLCJ1cGRhdGUiLG4sdCksaS5kZWYmJmkuZGVmLmNvbXBvbmVudFVwZGF0ZWQmJnUucHVzaChpKSk6KGlyKGksImJpbmQiLG4sdCksaS5kZWYmJmkuZGVmLmluc2VydGVkJiZsLnB1c2goaSkpO2lmKGwubGVuZ3RoKXt2YXIgZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bC5sZW5ndGg7ZSsrKWlyKGxbZV0sImluc2VydGVkIixuLHQpfTtvP3J0KG4sImluc2VydCIsZik6ZigpfXUubGVuZ3RoJiZydChuLCJwb3N0cGF0Y2giLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspaXIodVtlXSwiY29tcG9uZW50VXBkYXRlZCIsbix0KX0pO2lmKCFvKWZvcihlIGluIHMpY1tlXXx8aXIoc1tlXSwidW5iaW5kIix0LHQsYSl9KGUsdCl9dmFyIG5yPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gcnIoZSx0KXt2YXIgbixyLGksbz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCFlKXJldHVybiBvO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspKHI9ZVtuXSkubW9kaWZpZXJzfHwoci5tb2RpZmllcnM9bnIpLChvWyhpPXIsaS5yYXdOYW1lfHxpLm5hbWUrIi4iK09iamVjdC5rZXlzKGkubW9kaWZpZXJzfHx7fSkuam9pbigiLiIpKV09cikuZGVmPUxlKHQuJG9wdGlvbnMsImRpcmVjdGl2ZXMiLHIubmFtZSk7cmV0dXJuIG99ZnVuY3Rpb24gaXIodCxuLHIsZSxpKXt2YXIgbz10LmRlZiYmdC5kZWZbbl07aWYobyl0cnl7byhyLmVsbSx0LHIsZSxpKX1jYXRjaChlKXtGZShlLHIuY29udGV4dCwiZGlyZWN0aXZlICIrdC5uYW1lKyIgIituKyIgaG9vayIpfX12YXIgb3I9W1duLGVyXTtmdW5jdGlvbiBhcihlLHQpe3ZhciBuPXQuY29tcG9uZW50T3B0aW9ucztpZighKEQobikmJiExPT09bi5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzfHxNKGUuZGF0YS5hdHRycykmJk0odC5kYXRhLmF0dHJzKSkpe3ZhciByLGksbz10LmVsbSxhPWUuZGF0YS5hdHRyc3x8e30scz10LmRhdGEuYXR0cnN8fHt9O2ZvcihyIGluIEQocy5fX29iX18pJiYocz10LmRhdGEuYXR0cnM9bSh7fSxzKSkscylpPXNbcl0sYVtyXSE9PWkmJnNyKG8scixpKTtmb3IociBpbihLfHxxKSYmcy52YWx1ZSE9PWEudmFsdWUmJnNyKG8sInZhbHVlIixzLnZhbHVlKSxhKU0oc1tyXSkmJihObihyKT9vLnJlbW92ZUF0dHJpYnV0ZU5TKGpuLExuKHIpKTpUbihyKXx8by5yZW1vdmVBdHRyaWJ1dGUocikpfX1mdW5jdGlvbiBzcihlLHQsbil7LTE8ZS50YWdOYW1lLmluZGV4T2YoIi0iKT9jcihlLHQsbik6RW4odCk/SW4obik/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG49ImFsbG93ZnVsbHNjcmVlbiI9PT10JiYiRU1CRUQiPT09ZS50YWdOYW1lPyJ0cnVlIjp0LGUuc2V0QXR0cmlidXRlKHQsbikpOlRuKHQpP2Uuc2V0QXR0cmlidXRlKHQsSW4obil8fCJmYWxzZSI9PT1uPyJmYWxzZSI6InRydWUiKTpObih0KT9JbihuKT9lLnJlbW92ZUF0dHJpYnV0ZU5TKGpuLExuKHQpKTplLnNldEF0dHJpYnV0ZU5TKGpuLHQsbik6Y3IoZSx0LG4pfWZ1bmN0aW9uIGNyKHQsZSxuKXtpZihJbihuKSl0LnJlbW92ZUF0dHJpYnV0ZShlKTtlbHNle2lmKEsmJiFKJiYiVEVYVEFSRUEiPT09dC50YWdOYW1lJiYicGxhY2Vob2xkZXIiPT09ZSYmIXQuX19pZXBoKXt2YXIgcj1mdW5jdGlvbihlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHIpfTt0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixyKSx0Ll9faWVwaD0hMH10LnNldEF0dHJpYnV0ZShlLG4pfX12YXIgbHI9e2NyZWF0ZTphcix1cGRhdGU6YXJ9O2Z1bmN0aW9uIHVyKGUsdCl7dmFyIG49dC5lbG0scj10LmRhdGEsaT1lLmRhdGE7aWYoIShNKHIuc3RhdGljQ2xhc3MpJiZNKHIuY2xhc3MpJiYoTShpKXx8TShpLnN0YXRpY0NsYXNzKSYmTShpLmNsYXNzKSkpKXt2YXIgbz1Nbih0KSxhPW4uX3RyYW5zaXRpb25DbGFzc2VzO0QoYSkmJihvPVBuKG8sRm4oYSkpKSxvIT09bi5fcHJldkNsYXNzJiYobi5zZXRBdHRyaWJ1dGUoImNsYXNzIixvKSxuLl9wcmV2Q2xhc3M9byl9fXZhciBmcixwcixkcix2cixocixtcix5cj17Y3JlYXRlOnVyLHVwZGF0ZTp1cn0sZ3I9L1tcdykuK1wtXyRcXV0vO2Z1bmN0aW9uIF9yKGUpe3ZhciB0LG4scixpLG8sYT0hMSxzPSExLGM9ITEsbD0hMSx1PTAsZj0wLHA9MCxkPTA7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpZihuPXQsdD1lLmNoYXJDb2RlQXQociksYSkzOT09PXQmJjkyIT09biYmKGE9ITEpO2Vsc2UgaWYocykzND09PXQmJjkyIT09biYmKHM9ITEpO2Vsc2UgaWYoYyk5Nj09PXQmJjkyIT09biYmKGM9ITEpO2Vsc2UgaWYobCk0Nz09PXQmJjkyIT09biYmKGw9ITEpO2Vsc2UgaWYoMTI0IT09dHx8MTI0PT09ZS5jaGFyQ29kZUF0KHIrMSl8fDEyND09PWUuY2hhckNvZGVBdChyLTEpfHx1fHxmfHxwKXtzd2l0Y2godCl7Y2FzZSAzNDpzPSEwO2JyZWFrO2Nhc2UgMzk6YT0hMDticmVhaztjYXNlIDk2OmM9ITA7YnJlYWs7Y2FzZSA0MDpwKys7YnJlYWs7Y2FzZSA0MTpwLS07YnJlYWs7Y2FzZSA5MTpmKys7YnJlYWs7Y2FzZSA5MzpmLS07YnJlYWs7Y2FzZSAxMjM6dSsrO2JyZWFrO2Nhc2UgMTI1OnUtLX1pZig0Nz09PXQpe2Zvcih2YXIgdj1yLTEsaD12b2lkIDA7MDw9diYmIiAiPT09KGg9ZS5jaGFyQXQodikpO3YtLSk7aCYmZ3IudGVzdChoKXx8KGw9ITApfX1lbHNlIHZvaWQgMD09PWk/KGQ9cisxLGk9ZS5zbGljZSgwLHIpLnRyaW0oKSk6bSgpO2Z1bmN0aW9uIG0oKXsob3x8KG89W10pKS5wdXNoKGUuc2xpY2UoZCxyKS50cmltKCkpLGQ9cisxfWlmKHZvaWQgMD09PWk/aT1lLnNsaWNlKDAscikudHJpbSgpOjAhPT1kJiZtKCksbylmb3Iocj0wO3I8by5sZW5ndGg7cisrKWk9YnIoaSxvW3JdKTtyZXR1cm4gaX1mdW5jdGlvbiBicihlLHQpe3ZhciBuPXQuaW5kZXhPZigiKCIpO2lmKG48MClyZXR1cm4nX2YoIicrdCsnIikoJytlKyIpIjt2YXIgcj10LnNsaWNlKDAsbiksaT10LnNsaWNlKG4rMSk7cmV0dXJuJ19mKCInK3IrJyIpKCcrZSsoIikiIT09aT8iLCIraTppKX1mdW5jdGlvbiAkcihlKXtjb25zb2xlLmVycm9yKCJbVnVlIGNvbXBpbGVyXTogIitlKX1mdW5jdGlvbiB3cihlLHQpe3JldHVybiBlP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6W119ZnVuY3Rpb24gQ3IoZSx0LG4peyhlLnByb3BzfHwoZS5wcm9wcz1bXSkpLnB1c2goe25hbWU6dCx2YWx1ZTpufSksZS5wbGFpbj0hMX1mdW5jdGlvbiB4cihlLHQsbil7KGUuYXR0cnN8fChlLmF0dHJzPVtdKSkucHVzaCh7bmFtZTp0LHZhbHVlOm59KSxlLnBsYWluPSExfWZ1bmN0aW9uIGtyKGUsdCxuKXtlLmF0dHJzTWFwW3RdPW4sZS5hdHRyc0xpc3QucHVzaCh7bmFtZTp0LHZhbHVlOm59KX1mdW5jdGlvbiBBcihlLHQsbixyLGksbyl7dmFyIGE7KHI9cnx8eSkuY2FwdHVyZSYmKGRlbGV0ZSByLmNhcHR1cmUsdD0iISIrdCksci5vbmNlJiYoZGVsZXRlIHIub25jZSx0PSJ+Iit0KSxyLnBhc3NpdmUmJihkZWxldGUgci5wYXNzaXZlLHQ9IiYiK3QpLCJjbGljayI9PT10JiYoci5yaWdodD8odD0iY29udGV4dG1lbnUiLGRlbGV0ZSByLnJpZ2h0KTpyLm1pZGRsZSYmKHQ9Im1vdXNldXAiKSksci5uYXRpdmU/KGRlbGV0ZSByLm5hdGl2ZSxhPWUubmF0aXZlRXZlbnRzfHwoZS5uYXRpdmVFdmVudHM9e30pKTphPWUuZXZlbnRzfHwoZS5ldmVudHM9e30pO3ZhciBzPXt2YWx1ZTpuLnRyaW0oKX07ciE9PXkmJihzLm1vZGlmaWVycz1yKTt2YXIgYz1hW3RdO0FycmF5LmlzQXJyYXkoYyk/aT9jLnVuc2hpZnQocyk6Yy5wdXNoKHMpOmFbdF09Yz9pP1tzLGNdOltjLHNdOnMsZS5wbGFpbj0hMX1mdW5jdGlvbiBPcihlLHQsbil7dmFyIHI9U3IoZSwiOiIrdCl8fFNyKGUsInYtYmluZDoiK3QpO2lmKG51bGwhPXIpcmV0dXJuIF9yKHIpO2lmKCExIT09bil7dmFyIGk9U3IoZSx0KTtpZihudWxsIT1pKXJldHVybiBKU09OLnN0cmluZ2lmeShpKX19ZnVuY3Rpb24gU3IoZSx0LG4pe3ZhciByO2lmKG51bGwhPShyPWUuYXR0cnNNYXBbdF0pKWZvcih2YXIgaT1lLmF0dHJzTGlzdCxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKGlbb10ubmFtZT09PXQpe2kuc3BsaWNlKG8sMSk7YnJlYWt9cmV0dXJuIG4mJmRlbGV0ZSBlLmF0dHJzTWFwW3RdLHJ9ZnVuY3Rpb24gVHIoZSx0LG4pe3ZhciByPW58fHt9LGk9ci5udW1iZXIsbz0iJCR2IixhPW87ci50cmltJiYoYT0iKHR5cGVvZiAkJHYgPT09ICdzdHJpbmcnPyAkJHYudHJpbSgpOiAkJHYpIiksaSYmKGE9Il9uKCIrYSsiKSIpO3ZhciBzPUVyKHQsYSk7ZS5tb2RlbD17dmFsdWU6IigiK3QrIikiLGV4cHJlc3Npb246JyInK3QrJyInLGNhbGxiYWNrOiJmdW5jdGlvbiAoJCR2KSB7IitzKyJ9In19ZnVuY3Rpb24gRXIoZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZihlPWUudHJpbSgpLGZyPWUubGVuZ3RoLGUuaW5kZXhPZigiWyIpPDB8fGUubGFzdEluZGV4T2YoIl0iKTxmci0xKXJldHVybi0xPCh2cj1lLmxhc3RJbmRleE9mKCIuIikpP3tleHA6ZS5zbGljZSgwLHZyKSxrZXk6JyInK2Uuc2xpY2UodnIrMSkrJyInfTp7ZXhwOmUsa2V5Om51bGx9O3ByPWUsdnI9aHI9bXI9MDtmb3IoOyFOcigpOylMcihkcj1qcigpKT9Ncihkcik6OTE9PT1kciYmSXIoZHIpO3JldHVybntleHA6ZS5zbGljZSgwLGhyKSxrZXk6ZS5zbGljZShocisxLG1yKX19KGUpO3JldHVybiBudWxsPT09bi5rZXk/ZSsiPSIrdDoiJHNldCgiK24uZXhwKyIsICIrbi5rZXkrIiwgIit0KyIpIn1mdW5jdGlvbiBqcigpe3JldHVybiBwci5jaGFyQ29kZUF0KCsrdnIpfWZ1bmN0aW9uIE5yKCl7cmV0dXJuIGZyPD12cn1mdW5jdGlvbiBMcihlKXtyZXR1cm4gMzQ9PT1lfHwzOT09PWV9ZnVuY3Rpb24gSXIoZSl7dmFyIHQ9MTtmb3IoaHI9dnI7IU5yKCk7KWlmKExyKGU9anIoKSkpTXIoZSk7ZWxzZSBpZig5MT09PWUmJnQrKyw5Mz09PWUmJnQtLSwwPT09dCl7bXI9dnI7YnJlYWt9fWZ1bmN0aW9uIE1yKGUpe2Zvcih2YXIgdD1lOyFOcigpJiYoZT1qcigpKSE9PXQ7KTt9dmFyIERyLFByPSJfX3IiLEZyPSJfX2MiO2Z1bmN0aW9uIFJyKGUsdCxuLHIsaSl7dmFyIG8sYSxzLGMsbDt0PShvPXQpLl93aXRoVGFza3x8KG8uX3dpdGhUYXNrPWZ1bmN0aW9uKCl7SmU9ITA7dmFyIGU9by5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIEplPSExLGV9KSxuJiYoYT10LHM9ZSxjPXIsbD1Ecix0PWZ1bmN0aW9uIGUoKXtudWxsIT09YS5hcHBseShudWxsLGFyZ3VtZW50cykmJkhyKHMsZSxjLGwpfSksRHIuYWRkRXZlbnRMaXN0ZW5lcihlLHQsWj97Y2FwdHVyZTpyLHBhc3NpdmU6aX06cil9ZnVuY3Rpb24gSHIoZSx0LG4scil7KHJ8fERyKS5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5fd2l0aFRhc2t8fHQsbil9ZnVuY3Rpb24gQnIoZSx0KXtpZighTShlLmRhdGEub24pfHwhTSh0LmRhdGEub24pKXt2YXIgbj10LmRhdGEub258fHt9LHI9ZS5kYXRhLm9ufHx7fTtEcj10LmVsbSxmdW5jdGlvbihlKXtpZihEKGVbUHJdKSl7dmFyIHQ9Sz8iY2hhbmdlIjoiaW5wdXQiO2VbdF09W10uY29uY2F0KGVbUHJdLGVbdF18fFtdKSxkZWxldGUgZVtQcl19RChlW0ZyXSkmJihlLmNoYW5nZT1bXS5jb25jYXQoZVtGcl0sZS5jaGFuZ2V8fFtdKSxkZWxldGUgZVtGcl0pfShuKSxudChuLHIsUnIsSHIsdC5jb250ZXh0KSxEcj12b2lkIDB9fXZhciBVcj17Y3JlYXRlOkJyLHVwZGF0ZTpCcn07ZnVuY3Rpb24gVnIoZSx0KXtpZighTShlLmRhdGEuZG9tUHJvcHMpfHwhTSh0LmRhdGEuZG9tUHJvcHMpKXt2YXIgbixyLGksbyxhPXQuZWxtLHM9ZS5kYXRhLmRvbVByb3BzfHx7fSxjPXQuZGF0YS5kb21Qcm9wc3x8e307Zm9yKG4gaW4gRChjLl9fb2JfXykmJihjPXQuZGF0YS5kb21Qcm9wcz1tKHt9LGMpKSxzKU0oY1tuXSkmJihhW25dPSIiKTtmb3IobiBpbiBjKXtpZihyPWNbbl0sInRleHRDb250ZW50Ij09PW58fCJpbm5lckhUTUwiPT09bil7aWYodC5jaGlsZHJlbiYmKHQuY2hpbGRyZW4ubGVuZ3RoPTApLHI9PT1zW25dKWNvbnRpbnVlOzE9PT1hLmNoaWxkTm9kZXMubGVuZ3RoJiZhLnJlbW92ZUNoaWxkKGEuY2hpbGROb2Rlc1swXSl9aWYoInZhbHVlIj09PW4pe3ZhciBsPU0oYS5fdmFsdWU9cik/IiI6U3RyaW5nKHIpO289bCwoaT1hKS5jb21wb3Npbmd8fCJPUFRJT04iIT09aS50YWdOYW1lJiYhZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDt0cnl7bj1kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09ZX1jYXRjaChlKXt9cmV0dXJuIG4mJmUudmFsdWUhPT10fShpLG8pJiYhZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnZhbHVlLHI9ZS5fdk1vZGlmaWVycztpZihEKHIpKXtpZihyLmxhenkpcmV0dXJuITE7aWYoci5udW1iZXIpcmV0dXJuIEYobikhPT1GKHQpO2lmKHIudHJpbSlyZXR1cm4gbi50cmltKCkhPT10LnRyaW0oKX1yZXR1cm4gbiE9PXR9KGksbyl8fChhLnZhbHVlPWwpfWVsc2UgYVtuXT1yfX19dmFyIHpyPXtjcmVhdGU6VnIsdXBkYXRlOlZyfSxLcj1lKGZ1bmN0aW9uKGUpe3ZhciBuPXt9LHI9LzooLispLztyZXR1cm4gZS5zcGxpdCgvOyg/IVteKF0qXCkpL2cpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZS5zcGxpdChyKTsxPHQubGVuZ3RoJiYoblt0WzBdLnRyaW0oKV09dFsxXS50cmltKCkpfX0pLG59KTtmdW5jdGlvbiBKcihlKXt2YXIgdD1xcihlLnN0eWxlKTtyZXR1cm4gZS5zdGF0aWNTdHlsZT9tKGUuc3RhdGljU3R5bGUsdCk6dH1mdW5jdGlvbiBxcihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9iKGUpOiJzdHJpbmciPT10eXBlb2YgZT9LcihlKTplfXZhciBXcixHcj0vXi0tLyxacj0vXHMqIWltcG9ydGFudCQvLFhyPWZ1bmN0aW9uKGUsdCxuKXtpZihHci50ZXN0KHQpKWUuc3R5bGUuc2V0UHJvcGVydHkodCxuKTtlbHNlIGlmKFpyLnRlc3QobikpZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4ucmVwbGFjZShaciwiIiksImltcG9ydGFudCIpO2Vsc2V7dmFyIHI9UXIodCk7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspZS5zdHlsZVtyXT1uW2ldO2Vsc2UgZS5zdHlsZVtyXT1ufX0sWXI9WyJXZWJraXQiLCJNb3oiLCJtcyJdLFFyPWUoZnVuY3Rpb24oZSl7aWYoV3I9V3J8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJmaWx0ZXIiIT09KGU9ZyhlKSkmJmUgaW4gV3IpcmV0dXJuIGU7Zm9yKHZhciB0PWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPTA7bjxZci5sZW5ndGg7bisrKXt2YXIgcj1ZcltuXSt0O2lmKHIgaW4gV3IpcmV0dXJuIHJ9fSk7ZnVuY3Rpb24gZWkoZSx0KXt2YXIgbj10LmRhdGEscj1lLmRhdGE7aWYoIShNKG4uc3RhdGljU3R5bGUpJiZNKG4uc3R5bGUpJiZNKHIuc3RhdGljU3R5bGUpJiZNKHIuc3R5bGUpKSl7dmFyIGksbyxhPXQuZWxtLHM9ci5zdGF0aWNTdHlsZSxjPXIubm9ybWFsaXplZFN0eWxlfHxyLnN0eWxlfHx7fSxsPXN8fGMsdT1xcih0LmRhdGEuc3R5bGUpfHx7fTt0LmRhdGEubm9ybWFsaXplZFN0eWxlPUQodS5fX29iX18pP20oe30sdSk6dTt2YXIgZj1mdW5jdGlvbihlLHQpe3ZhciBuLHI9e307aWYodClmb3IodmFyIGk9ZTtpLmNvbXBvbmVudEluc3RhbmNlOykoaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJmkuZGF0YSYmKG49SnIoaS5kYXRhKSkmJm0ocixuKTsobj1KcihlLmRhdGEpKSYmbShyLG4pO2Zvcih2YXIgbz1lO289by5wYXJlbnQ7KW8uZGF0YSYmKG49SnIoby5kYXRhKSkmJm0ocixuKTtyZXR1cm4gcn0odCwhMCk7Zm9yKG8gaW4gbClNKGZbb10pJiZYcihhLG8sIiIpO2ZvcihvIGluIGYpKGk9ZltvXSkhPT1sW29dJiZYcihhLG8sbnVsbD09aT8iIjppKX19dmFyIHRpPXtjcmVhdGU6ZWksdXBkYXRlOmVpfTtmdW5jdGlvbiBuaSh0LGUpe2lmKGUmJihlPWUudHJpbSgpKSlpZih0LmNsYXNzTGlzdCktMTxlLmluZGV4T2YoIiAiKT9lLnNwbGl0KC9ccysvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNsYXNzTGlzdC5hZGQoZSl9KTp0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj0iICIrKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIikrIiAiO24uaW5kZXhPZigiICIrZSsiICIpPDAmJnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsKG4rZSkudHJpbSgpKX19ZnVuY3Rpb24gcmkodCxlKXtpZihlJiYoZT1lLnRyaW0oKSkpaWYodC5jbGFzc0xpc3QpLTE8ZS5pbmRleE9mKCIgIik/ZS5zcGxpdCgvXHMrLykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5jbGFzc0xpc3QucmVtb3ZlKGUpfSk6dC5jbGFzc0xpc3QucmVtb3ZlKGUpLHQuY2xhc3NMaXN0Lmxlbmd0aHx8dC5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7ZWxzZXtmb3IodmFyIG49IiAiKyh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpKyIgIixyPSIgIitlKyIgIjswPD1uLmluZGV4T2Yocik7KW49bi5yZXBsYWNlKHIsIiAiKTsobj1uLnRyaW0oKSk/dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixuKTp0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKX19ZnVuY3Rpb24gaWkoZSl7aWYoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgdD17fTtyZXR1cm4hMSE9PWUuY3NzJiZtKHQsb2koZS5uYW1lfHwidiIpKSxtKHQsZSksdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/b2koZSk6dm9pZCAwfX12YXIgb2k9ZShmdW5jdGlvbihlKXtyZXR1cm57ZW50ZXJDbGFzczplKyItZW50ZXIiLGVudGVyVG9DbGFzczplKyItZW50ZXItdG8iLGVudGVyQWN0aXZlQ2xhc3M6ZSsiLWVudGVyLWFjdGl2ZSIsbGVhdmVDbGFzczplKyItbGVhdmUiLGxlYXZlVG9DbGFzczplKyItbGVhdmUtdG8iLGxlYXZlQWN0aXZlQ2xhc3M6ZSsiLWxlYXZlLWFjdGl2ZSJ9fSksYWk9QiYmIUosc2k9InRyYW5zaXRpb24iLGNpPSJhbmltYXRpb24iLGxpPSJ0cmFuc2l0aW9uIix1aT0idHJhbnNpdGlvbmVuZCIsZmk9ImFuaW1hdGlvbiIscGk9ImFuaW1hdGlvbmVuZCI7YWkmJih2b2lkIDA9PT13aW5kb3cub250cmFuc2l0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kJiYobGk9IldlYmtpdFRyYW5zaXRpb24iLHVpPSJ3ZWJraXRUcmFuc2l0aW9uRW5kIiksdm9pZCAwPT09d2luZG93Lm9uYW5pbWF0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQmJihmaT0iV2Via2l0QW5pbWF0aW9uIixwaT0id2Via2l0QW5pbWF0aW9uRW5kIikpO3ZhciBkaT1CP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6c2V0VGltZW91dDpmdW5jdGlvbihlKXtyZXR1cm4gZSgpfTtmdW5jdGlvbiB2aShlKXtkaShmdW5jdGlvbigpe2RpKGUpfSl9ZnVuY3Rpb24gaGkoZSx0KXt2YXIgbj1lLl90cmFuc2l0aW9uQ2xhc3Nlc3x8KGUuX3RyYW5zaXRpb25DbGFzc2VzPVtdKTtuLmluZGV4T2YodCk8MCYmKG4ucHVzaCh0KSxuaShlLHQpKX1mdW5jdGlvbiBtaShlLHQpe2UuX3RyYW5zaXRpb25DbGFzc2VzJiZmKGUuX3RyYW5zaXRpb25DbGFzc2VzLHQpLHJpKGUsdCl9ZnVuY3Rpb24geWkodCxlLG4pe3ZhciByPV9pKHQsZSksaT1yLnR5cGUsbz1yLnRpbWVvdXQsYT1yLnByb3BDb3VudDtpZighaSlyZXR1cm4gbigpO3ZhciBzPWk9PT1zaT91aTpwaSxjPTAsbD1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLHUpLG4oKX0sdT1mdW5jdGlvbihlKXtlLnRhcmdldD09PXQmJisrYz49YSYmbCgpfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YzxhJiZsKCl9LG8rMSksdC5hZGRFdmVudExpc3RlbmVyKHMsdSl9dmFyIGdpPS9cYih0cmFuc2Zvcm18YWxsKSgsfCQpLztmdW5jdGlvbiBfaShlLHQpe3ZhciBuLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSksaT1yW2xpKyJEZWxheSJdLnNwbGl0KCIsICIpLG89cltsaSsiRHVyYXRpb24iXS5zcGxpdCgiLCAiKSxhPWJpKGksbykscz1yW2ZpKyJEZWxheSJdLnNwbGl0KCIsICIpLGM9cltmaSsiRHVyYXRpb24iXS5zcGxpdCgiLCAiKSxsPWJpKHMsYyksdT0wLGY9MDtyZXR1cm4gdD09PXNpPzA8YSYmKG49c2ksdT1hLGY9by5sZW5ndGgpOnQ9PT1jaT8wPGwmJihuPWNpLHU9bCxmPWMubGVuZ3RoKTpmPShuPTA8KHU9TWF0aC5tYXgoYSxsKSk/bDxhP3NpOmNpOm51bGwpP249PT1zaT9vLmxlbmd0aDpjLmxlbmd0aDowLHt0eXBlOm4sdGltZW91dDp1LHByb3BDb3VudDpmLGhhc1RyYW5zZm9ybTpuPT09c2kmJmdpLnRlc3QocltsaSsiUHJvcGVydHkiXSl9fWZ1bmN0aW9uIGJpKG4sZSl7Zm9yKDtuLmxlbmd0aDxlLmxlbmd0aDspbj1uLmNvbmNhdChuKTtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCxlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiAkaShlKSskaShuW3RdKX0pKX1mdW5jdGlvbiAkaShlKXtyZXR1cm4gMWUzKk51bWJlcihlLnNsaWNlKDAsLTEpKX1mdW5jdGlvbiB3aShuLGUpe3ZhciByPW4uZWxtO0Qoci5fbGVhdmVDYikmJihyLl9sZWF2ZUNiLmNhbmNlbGxlZD0hMCxyLl9sZWF2ZUNiKCkpO3ZhciB0PWlpKG4uZGF0YS50cmFuc2l0aW9uKTtpZighTSh0KSYmIUQoci5fZW50ZXJDYikmJjE9PT1yLm5vZGVUeXBlKXtmb3IodmFyIGk9dC5jc3Msbz10LnR5cGUsYT10LmVudGVyQ2xhc3Mscz10LmVudGVyVG9DbGFzcyxjPXQuZW50ZXJBY3RpdmVDbGFzcyxsPXQuYXBwZWFyQ2xhc3MsdT10LmFwcGVhclRvQ2xhc3MsZj10LmFwcGVhckFjdGl2ZUNsYXNzLHA9dC5iZWZvcmVFbnRlcixkPXQuZW50ZXIsdj10LmFmdGVyRW50ZXIsaD10LmVudGVyQ2FuY2VsbGVkLG09dC5iZWZvcmVBcHBlYXIseT10LmFwcGVhcixnPXQuYWZ0ZXJBcHBlYXIsXz10LmFwcGVhckNhbmNlbGxlZCxiPXQuZHVyYXRpb24sJD1tdCx3PW10LiR2bm9kZTt3JiZ3LnBhcmVudDspJD0odz13LnBhcmVudCkuY29udGV4dDt2YXIgQz0hJC5faXNNb3VudGVkfHwhbi5pc1Jvb3RJbnNlcnQ7aWYoIUN8fHl8fCIiPT09eSl7dmFyIHg9QyYmbD9sOmEsaz1DJiZmP2Y6YyxBPUMmJnU/dTpzLE89QyYmbXx8cCxTPUMmJiJmdW5jdGlvbiI9PXR5cGVvZiB5P3k6ZCxUPUMmJmd8fHYsRT1DJiZffHxoLGo9RihQKGIpP2IuZW50ZXI6YiksTj0hMSE9PWkmJiFKLEw9a2koUyksST1yLl9lbnRlckNiPVIoZnVuY3Rpb24oKXtOJiYobWkocixBKSxtaShyLGspKSxJLmNhbmNlbGxlZD8oTiYmbWkocix4KSxFJiZFKHIpKTpUJiZUKHIpLHIuX2VudGVyQ2I9bnVsbH0pO24uZGF0YS5zaG93fHxydChuLCJpbnNlcnQiLGZ1bmN0aW9uKCl7dmFyIGU9ci5wYXJlbnROb2RlLHQ9ZSYmZS5fcGVuZGluZyYmZS5fcGVuZGluZ1tuLmtleV07dCYmdC50YWc9PT1uLnRhZyYmdC5lbG0uX2xlYXZlQ2ImJnQuZWxtLl9sZWF2ZUNiKCksUyYmUyhyLEkpfSksTyYmTyhyKSxOJiYoaGkocix4KSxoaShyLGspLHZpKGZ1bmN0aW9uKCl7bWkocix4KSxJLmNhbmNlbGxlZHx8KGhpKHIsQSksTHx8KHhpKGopP3NldFRpbWVvdXQoSSxqKTp5aShyLG8sSSkpKX0pKSxuLmRhdGEuc2hvdyYmKGUmJmUoKSxTJiZTKHIsSSkpLE58fEx8fEkoKX19fWZ1bmN0aW9uIENpKGUsdCl7dmFyIG49ZS5lbG07RChuLl9lbnRlckNiKSYmKG4uX2VudGVyQ2IuY2FuY2VsbGVkPSEwLG4uX2VudGVyQ2IoKSk7dmFyIHI9aWkoZS5kYXRhLnRyYW5zaXRpb24pO2lmKE0ocil8fDEhPT1uLm5vZGVUeXBlKXJldHVybiB0KCk7aWYoIUQobi5fbGVhdmVDYikpe3ZhciBpPXIuY3NzLG89ci50eXBlLGE9ci5sZWF2ZUNsYXNzLHM9ci5sZWF2ZVRvQ2xhc3MsYz1yLmxlYXZlQWN0aXZlQ2xhc3MsbD1yLmJlZm9yZUxlYXZlLHU9ci5sZWF2ZSxmPXIuYWZ0ZXJMZWF2ZSxwPXIubGVhdmVDYW5jZWxsZWQsZD1yLmRlbGF5TGVhdmUsdj1yLmR1cmF0aW9uLGg9ITEhPT1pJiYhSixtPWtpKHUpLHk9RihQKHYpP3YubGVhdmU6diksZz1uLl9sZWF2ZUNiPVIoZnVuY3Rpb24oKXtuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5fcGVuZGluZyYmKG4ucGFyZW50Tm9kZS5fcGVuZGluZ1tlLmtleV09bnVsbCksaCYmKG1pKG4scyksbWkobixjKSksZy5jYW5jZWxsZWQ/KGgmJm1pKG4sYSkscCYmcChuKSk6KHQoKSxmJiZmKG4pKSxuLl9sZWF2ZUNiPW51bGx9KTtkP2QoXyk6XygpfWZ1bmN0aW9uIF8oKXtnLmNhbmNlbGxlZHx8KGUuZGF0YS5zaG93fHwoKG4ucGFyZW50Tm9kZS5fcGVuZGluZ3x8KG4ucGFyZW50Tm9kZS5fcGVuZGluZz17fSkpW2Uua2V5XT1lKSxsJiZsKG4pLGgmJihoaShuLGEpLGhpKG4sYyksdmkoZnVuY3Rpb24oKXttaShuLGEpLGcuY2FuY2VsbGVkfHwoaGkobixzKSxtfHwoeGkoeSk/c2V0VGltZW91dChnLHkpOnlpKG4sbyxnKSkpfSkpLHUmJnUobixnKSxofHxtfHxnKCkpfX1mdW5jdGlvbiB4aShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJiFpc05hTihlKX1mdW5jdGlvbiBraShlKXtpZihNKGUpKXJldHVybiExO3ZhciB0PWUuZm5zO3JldHVybiBEKHQpP2tpKEFycmF5LmlzQXJyYXkodCk/dFswXTp0KToxPChlLl9sZW5ndGh8fGUubGVuZ3RoKX1mdW5jdGlvbiBBaShlLHQpeyEwIT09dC5kYXRhLnNob3cmJndpKHQpfXZhciBPaT1mdW5jdGlvbihlKXt2YXIgcix0LGc9e30sbj1lLm1vZHVsZXMsXz1lLm5vZGVPcHM7Zm9yKHI9MDtyPFhuLmxlbmd0aDsrK3IpZm9yKGdbWG5bcl1dPVtdLHQ9MDt0PG4ubGVuZ3RoOysrdClEKG5bdF1bWG5bcl1dKSYmZ1tYbltyXV0ucHVzaChuW3RdW1huW3JdXSk7ZnVuY3Rpb24gbyhlKXt2YXIgdD1fLnBhcmVudE5vZGUoZSk7RCh0KSYmXy5yZW1vdmVDaGlsZCh0LGUpfWZ1bmN0aW9uIGIoZSx0LG4scixpLG8sYSl7aWYoRChlLmVsbSkmJkQobykmJihlPW9bYV09ZGUoZSkpLGUuaXNSb290SW5zZXJ0PSFpLCFmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmRhdGE7aWYoRChpKSl7dmFyIG89RChlLmNvbXBvbmVudEluc3RhbmNlKSYmaS5rZWVwQWxpdmU7aWYoRChpPWkuaG9vaykmJkQoaT1pLmluaXQpJiZpKGUsITEsbixyKSxEKGUuY29tcG9uZW50SW5zdGFuY2UpKXJldHVybiBkKGUsdCksUyhvKSYmZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpLG89ZTtvLmNvbXBvbmVudEluc3RhbmNlOylpZihvPW8uY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLEQoaT1vLmRhdGEpJiZEKGk9aS50cmFuc2l0aW9uKSl7Zm9yKGk9MDtpPGcuYWN0aXZhdGUubGVuZ3RoOysraSlnLmFjdGl2YXRlW2ldKFpuLG8pO3QucHVzaChvKTticmVha311KG4sZS5lbG0scil9KGUsdCxuLHIpLCEwfX0oZSx0LG4scikpe3ZhciBzPWUuZGF0YSxjPWUuY2hpbGRyZW4sbD1lLnRhZztEKGwpPyhlLmVsbT1lLm5zP18uY3JlYXRlRWxlbWVudE5TKGUubnMsbCk6Xy5jcmVhdGVFbGVtZW50KGwsZSksZihlKSx2KGUsYyx0KSxEKHMpJiZoKGUsdCkpOlMoZS5pc0NvbW1lbnQpP2UuZWxtPV8uY3JlYXRlQ29tbWVudChlLnRleHQpOmUuZWxtPV8uY3JlYXRlVGV4dE5vZGUoZS50ZXh0KSx1KG4sZS5lbG0scil9fWZ1bmN0aW9uIGQoZSx0KXtEKGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSYmKHQucHVzaC5hcHBseSh0LGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSxlLmRhdGEucGVuZGluZ0luc2VydD1udWxsKSxlLmVsbT1lLmNvbXBvbmVudEluc3RhbmNlLiRlbCwkKGUpPyhoKGUsdCksZihlKSk6KEduKGUpLHQucHVzaChlKSl9ZnVuY3Rpb24gdShlLHQsbil7RChlKSYmKEQobik/bi5wYXJlbnROb2RlPT09ZSYmXy5pbnNlcnRCZWZvcmUoZSx0LG4pOl8uYXBwZW5kQ2hpbGQoZSx0KSl9ZnVuY3Rpb24gdihlLHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrciliKHRbcl0sbixlLmVsbSxudWxsLCEwLHQscik7ZWxzZSBUKGUudGV4dCkmJl8uYXBwZW5kQ2hpbGQoZS5lbG0sXy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoZS50ZXh0KSkpfWZ1bmN0aW9uICQoZSl7Zm9yKDtlLmNvbXBvbmVudEluc3RhbmNlOyllPWUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO3JldHVybiBEKGUudGFnKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciBuPTA7bjxnLmNyZWF0ZS5sZW5ndGg7KytuKWcuY3JlYXRlW25dKFpuLGUpO0Qocj1lLmRhdGEuaG9vaykmJihEKHIuY3JlYXRlKSYmci5jcmVhdGUoWm4sZSksRChyLmluc2VydCkmJnQucHVzaChlKSl9ZnVuY3Rpb24gZihlKXt2YXIgdDtpZihEKHQ9ZS5mblNjb3BlSWQpKV8uc2V0U3R5bGVTY29wZShlLmVsbSx0KTtlbHNlIGZvcih2YXIgbj1lO247KUQodD1uLmNvbnRleHQpJiZEKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJl8uc2V0U3R5bGVTY29wZShlLmVsbSx0KSxuPW4ucGFyZW50O0QodD1tdCkmJnQhPT1lLmNvbnRleHQmJnQhPT1lLmZuQ29udGV4dCYmRCh0PXQuJG9wdGlvbnMuX3Njb3BlSWQpJiZfLnNldFN0eWxlU2NvcGUoZS5lbG0sdCl9ZnVuY3Rpb24geShlLHQsbixyLGksbyl7Zm9yKDtyPD1pOysrciliKG5bcl0sbyxlLHQsITEsbixyKX1mdW5jdGlvbiB3KGUpe3ZhciB0LG4scj1lLmRhdGE7aWYoRChyKSlmb3IoRCh0PXIuaG9vaykmJkQodD10LmRlc3Ryb3kpJiZ0KGUpLHQ9MDt0PGcuZGVzdHJveS5sZW5ndGg7Kyt0KWcuZGVzdHJveVt0XShlKTtpZihEKHQ9ZS5jaGlsZHJlbikpZm9yKG49MDtuPGUuY2hpbGRyZW4ubGVuZ3RoOysrbil3KGUuY2hpbGRyZW5bbl0pfWZ1bmN0aW9uIEMoZSx0LG4scil7Zm9yKDtuPD1yOysrbil7dmFyIGk9dFtuXTtEKGkpJiYoRChpLnRhZyk/KGEoaSksdyhpKSk6byhpLmVsbSkpfX1mdW5jdGlvbiBhKGUsdCl7aWYoRCh0KXx8RChlLmRhdGEpKXt2YXIgbixyPWcucmVtb3ZlLmxlbmd0aCsxO2ZvcihEKHQpP3QubGlzdGVuZXJzKz1yOnQ9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7MD09LS1uLmxpc3RlbmVycyYmbyhlKX1yZXR1cm4gbi5saXN0ZW5lcnM9dCxufShlLmVsbSxyKSxEKG49ZS5jb21wb25lbnRJbnN0YW5jZSkmJkQobj1uLl92bm9kZSkmJkQobi5kYXRhKSYmYShuLHQpLG49MDtuPGcucmVtb3ZlLmxlbmd0aDsrK24pZy5yZW1vdmVbbl0oZSx0KTtEKG49ZS5kYXRhLmhvb2spJiZEKG49bi5yZW1vdmUpP24oZSx0KTp0KCl9ZWxzZSBvKGUuZWxtKX1mdW5jdGlvbiB4KGUsdCxuLHIpe2Zvcih2YXIgaT1uO2k8cjtpKyspe3ZhciBvPXRbaV07aWYoRChvKSYmWW4oZSxvKSlyZXR1cm4gaX19ZnVuY3Rpb24gayhlLHQsbixyKXtpZihlIT09dCl7dmFyIGk9dC5lbG09ZS5lbG07aWYoUyhlLmlzQXN5bmNQbGFjZWhvbGRlcikpRCh0LmFzeW5jRmFjdG9yeS5yZXNvbHZlZCk/TyhlLmVsbSx0LG4pOnQuaXNBc3luY1BsYWNlaG9sZGVyPSEwO2Vsc2UgaWYoUyh0LmlzU3RhdGljKSYmUyhlLmlzU3RhdGljKSYmdC5rZXk9PT1lLmtleSYmKFModC5pc0Nsb25lZCl8fFModC5pc09uY2UpKSl0LmNvbXBvbmVudEluc3RhbmNlPWUuY29tcG9uZW50SW5zdGFuY2U7ZWxzZXt2YXIgbyxhPXQuZGF0YTtEKGEpJiZEKG89YS5ob29rKSYmRChvPW8ucHJlcGF0Y2gpJiZvKGUsdCk7dmFyIHM9ZS5jaGlsZHJlbixjPXQuY2hpbGRyZW47aWYoRChhKSYmJCh0KSl7Zm9yKG89MDtvPGcudXBkYXRlLmxlbmd0aDsrK28pZy51cGRhdGVbb10oZSx0KTtEKG89YS5ob29rKSYmRChvPW8udXBkYXRlKSYmbyhlLHQpfU0odC50ZXh0KT9EKHMpJiZEKGMpP3MhPT1jJiZmdW5jdGlvbihlLHQsbixyLGkpe2Zvcih2YXIgbyxhLHMsYz0wLGw9MCx1PXQubGVuZ3RoLTEsZj10WzBdLHA9dFt1XSxkPW4ubGVuZ3RoLTEsdj1uWzBdLGg9bltkXSxtPSFpO2M8PXUmJmw8PWQ7KU0oZik/Zj10WysrY106TShwKT9wPXRbLS11XTpZbihmLHYpPyhrKGYsdixyKSxmPXRbKytjXSx2PW5bKytsXSk6WW4ocCxoKT8oayhwLGgscikscD10Wy0tdV0saD1uWy0tZF0pOlluKGYsaCk/KGsoZixoLHIpLG0mJl8uaW5zZXJ0QmVmb3JlKGUsZi5lbG0sXy5uZXh0U2libGluZyhwLmVsbSkpLGY9dFsrK2NdLGg9blstLWRdKTooWW4ocCx2KT8oayhwLHYsciksbSYmXy5pbnNlcnRCZWZvcmUoZSxwLmVsbSxmLmVsbSkscD10Wy0tdV0pOihNKG8pJiYobz1Rbih0LGMsdSkpLE0oYT1EKHYua2V5KT9vW3Yua2V5XTp4KHYsdCxjLHUpKT9iKHYscixlLGYuZWxtLCExLG4sbCk6WW4ocz10W2FdLHYpPyhrKHMsdixyKSx0W2FdPXZvaWQgMCxtJiZfLmluc2VydEJlZm9yZShlLHMuZWxtLGYuZWxtKSk6Yih2LHIsZSxmLmVsbSwhMSxuLGwpKSx2PW5bKytsXSk7dTxjP3koZSxNKG5bZCsxXSk/bnVsbDpuW2QrMV0uZWxtLG4sbCxkLHIpOmQ8bCYmQygwLHQsYyx1KX0oaSxzLGMsbixyKTpEKGMpPyhEKGUudGV4dCkmJl8uc2V0VGV4dENvbnRlbnQoaSwiIikseShpLG51bGwsYywwLGMubGVuZ3RoLTEsbikpOkQocyk/QygwLHMsMCxzLmxlbmd0aC0xKTpEKGUudGV4dCkmJl8uc2V0VGV4dENvbnRlbnQoaSwiIik6ZS50ZXh0IT09dC50ZXh0JiZfLnNldFRleHRDb250ZW50KGksdC50ZXh0KSxEKGEpJiZEKG89YS5ob29rKSYmRChvPW8ucG9zdHBhdGNoKSYmbyhlLHQpfX19ZnVuY3Rpb24gQShlLHQsbil7aWYoUyhuKSYmRChlLnBhcmVudCkpZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0PXQ7ZWxzZSBmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLmRhdGEuaG9vay5pbnNlcnQodFtyXSl9dmFyIG09cygiYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Iik7ZnVuY3Rpb24gTyhlLHQsbixyKXt2YXIgaSxvPXQudGFnLGE9dC5kYXRhLHM9dC5jaGlsZHJlbjtpZihyPXJ8fGEmJmEucHJlLHQuZWxtPWUsUyh0LmlzQ29tbWVudCkmJkQodC5hc3luY0ZhY3RvcnkpKXJldHVybiB0LmlzQXN5bmNQbGFjZWhvbGRlcj0hMDtpZihEKGEpJiYoRChpPWEuaG9vaykmJkQoaT1pLmluaXQpJiZpKHQsITApLEQoaT10LmNvbXBvbmVudEluc3RhbmNlKSkpcmV0dXJuIGQodCxuKSwhMDtpZihEKG8pKXtpZihEKHMpKWlmKGUuaGFzQ2hpbGROb2RlcygpKWlmKEQoaT1hKSYmRChpPWkuZG9tUHJvcHMpJiZEKGk9aS5pbm5lckhUTUwpKXtpZihpIT09ZS5pbm5lckhUTUwpcmV0dXJuITF9ZWxzZXtmb3IodmFyIGM9ITAsbD1lLmZpcnN0Q2hpbGQsdT0wO3U8cy5sZW5ndGg7dSsrKXtpZighbHx8IU8obCxzW3VdLG4scikpe2M9ITE7YnJlYWt9bD1sLm5leHRTaWJsaW5nfWlmKCFjfHxsKXJldHVybiExfWVsc2Ugdih0LHMsbik7aWYoRChhKSl7dmFyIGY9ITE7Zm9yKHZhciBwIGluIGEpaWYoIW0ocCkpe2Y9ITAsaCh0LG4pO2JyZWFrfSFmJiZhLmNsYXNzJiZZZShhLmNsYXNzKX19ZWxzZSBlLmRhdGEhPT10LnRleHQmJihlLmRhdGE9dC50ZXh0KTtyZXR1cm4hMH1yZXR1cm4gZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKCFNKHQpKXt2YXIgYSxzPSExLGM9W107aWYoTShlKSlzPSEwLGIodCxjLGksbyk7ZWxzZXt2YXIgbD1EKGUubm9kZVR5cGUpO2lmKCFsJiZZbihlLHQpKWsoZSx0LGMscik7ZWxzZXtpZihsKXtpZigxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoRSkmJihlLnJlbW92ZUF0dHJpYnV0ZShFKSxuPSEwKSxTKG4pJiZPKGUsdCxjKSlyZXR1cm4gQSh0LGMsITApLGU7YT1lLGU9bmV3IGxlKF8udGFnTmFtZShhKS50b0xvd2VyQ2FzZSgpLHt9LFtdLHZvaWQgMCxhKX12YXIgdT1lLmVsbSxmPV8ucGFyZW50Tm9kZSh1KTtpZihiKHQsYyx1Ll9sZWF2ZUNiP251bGw6ZixfLm5leHRTaWJsaW5nKHUpKSxEKHQucGFyZW50KSlmb3IodmFyIHA9dC5wYXJlbnQsZD0kKHQpO3A7KXtmb3IodmFyIHY9MDt2PGcuZGVzdHJveS5sZW5ndGg7Kyt2KWcuZGVzdHJveVt2XShwKTtpZihwLmVsbT10LmVsbSxkKXtmb3IodmFyIGg9MDtoPGcuY3JlYXRlLmxlbmd0aDsrK2gpZy5jcmVhdGVbaF0oWm4scCk7dmFyIG09cC5kYXRhLmhvb2suaW5zZXJ0O2lmKG0ubWVyZ2VkKWZvcih2YXIgeT0xO3k8bS5mbnMubGVuZ3RoO3krKyltLmZuc1t5XSgpfWVsc2UgR24ocCk7cD1wLnBhcmVudH1EKGYpP0MoMCxbZV0sMCwwKTpEKGUudGFnKSYmdyhlKX19cmV0dXJuIEEodCxjLHMpLHQuZWxtfUQoZSkmJncoZSl9fSh7bm9kZU9wczpxbixtb2R1bGVzOltscix5cixVcix6cix0aSxCP3tjcmVhdGU6QWksYWN0aXZhdGU6QWkscmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ITAhPT1lLmRhdGEuc2hvdz9DaShlLHQpOnQoKX19Ont9XS5jb25jYXQob3IpfSk7SiYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7ZSYmZS52bW9kZWwmJk1pKGUsImlucHV0Iil9KTt2YXIgU2k9e2luc2VydGVkOmZ1bmN0aW9uKGUsdCxuLHIpeyJzZWxlY3QiPT09bi50YWc/KHIuZWxtJiYhci5lbG0uX3ZPcHRpb25zP3J0KG4sInBvc3RwYXRjaCIsZnVuY3Rpb24oKXtTaS5jb21wb25lbnRVcGRhdGVkKGUsdCxuKX0pOlRpKGUsdCxuLmNvbnRleHQpLGUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxOaSkpOigidGV4dGFyZWEiPT09bi50YWd8fEtuKGUudHlwZSkpJiYoZS5fdk1vZGlmaWVycz10Lm1vZGlmaWVycyx0Lm1vZGlmaWVycy5sYXp5fHwoZS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IixMaSksZS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsSWkpLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixJaSksSiYmKGUudm1vZGVsPSEwKSkpfSxjb21wb25lbnRVcGRhdGVkOmZ1bmN0aW9uKGUsdCxuKXtpZigic2VsZWN0Ij09PW4udGFnKXtUaShlLHQsbi5jb250ZXh0KTt2YXIgcj1lLl92T3B0aW9ucyxpPWUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxOaSk7aWYoaS5zb21lKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIUMoZSxyW3RdKX0pKShlLm11bHRpcGxlP3QudmFsdWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gamkoZSxpKX0pOnQudmFsdWUhPT10Lm9sZFZhbHVlJiZqaSh0LnZhbHVlLGkpKSYmTWkoZSwiY2hhbmdlIil9fX07ZnVuY3Rpb24gVGkoZSx0LG4pe0VpKGUsdCxuKSwoS3x8cSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtFaShlLHQsbil9LDApfWZ1bmN0aW9uIEVpKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9ZS5tdWx0aXBsZTtpZighaXx8QXJyYXkuaXNBcnJheShyKSl7Zm9yKHZhciBvLGEscz0wLGM9ZS5vcHRpb25zLmxlbmd0aDtzPGM7cysrKWlmKGE9ZS5vcHRpb25zW3NdLGkpbz0tMTx4KHIsTmkoYSkpLGEuc2VsZWN0ZWQhPT1vJiYoYS5zZWxlY3RlZD1vKTtlbHNlIGlmKEMoTmkoYSkscikpcmV0dXJuIHZvaWQoZS5zZWxlY3RlZEluZGV4IT09cyYmKGUuc2VsZWN0ZWRJbmRleD1zKSk7aXx8KGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIGppKHQsZSl7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIUMoZSx0KX0pfWZ1bmN0aW9uIE5pKGUpe3JldHVybiJfdmFsdWUiaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIExpKGUpe2UudGFyZ2V0LmNvbXBvc2luZz0hMH1mdW5jdGlvbiBJaShlKXtlLnRhcmdldC5jb21wb3NpbmcmJihlLnRhcmdldC5jb21wb3Npbmc9ITEsTWkoZS50YXJnZXQsImlucHV0IikpfWZ1bmN0aW9uIE1pKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkhUTUxFdmVudHMiKTtuLmluaXRFdmVudCh0LCEwLCEwKSxlLmRpc3BhdGNoRXZlbnQobil9ZnVuY3Rpb24gRGkoZSl7cmV0dXJuIWUuY29tcG9uZW50SW5zdGFuY2V8fGUuZGF0YSYmZS5kYXRhLnRyYW5zaXRpb24/ZTpEaShlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSl9dmFyIFBpPXttb2RlbDpTaSxzaG93OntiaW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9KG49RGkobikpLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uLG89ZS5fX3ZPcmlnaW5hbERpc3BsYXk9Im5vbmUiPT09ZS5zdHlsZS5kaXNwbGF5PyIiOmUuc3R5bGUuZGlzcGxheTtyJiZpPyhuLmRhdGEuc2hvdz0hMCx3aShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PW99KSk6ZS5zdHlsZS5kaXNwbGF5PXI/bzoibm9uZSJ9LHVwZGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC52YWx1ZTshciE9IXQub2xkVmFsdWUmJigobj1EaShuKSkuZGF0YSYmbi5kYXRhLnRyYW5zaXRpb24/KG4uZGF0YS5zaG93PSEwLHI/d2kobixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1lLl9fdk9yaWdpbmFsRGlzcGxheX0pOkNpKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9Im5vbmUifSkpOmUuc3R5bGUuZGlzcGxheT1yP2UuX192T3JpZ2luYWxEaXNwbGF5OiJub25lIil9LHVuYmluZDpmdW5jdGlvbihlLHQsbixyLGkpe2l8fChlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXkpfX19LEZpPXtuYW1lOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixjc3M6Qm9vbGVhbixtb2RlOlN0cmluZyx0eXBlOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxkdXJhdGlvbjpbTnVtYmVyLFN0cmluZyxPYmplY3RdfTtmdW5jdGlvbiBSaShlKXt2YXIgdD1lJiZlLmNvbXBvbmVudE9wdGlvbnM7cmV0dXJuIHQmJnQuQ3Rvci5vcHRpb25zLmFic3RyYWN0P1JpKGx0KHQuY2hpbGRyZW4pKTplfWZ1bmN0aW9uIEhpKGUpe3ZhciB0PXt9LG49ZS4kb3B0aW9ucztmb3IodmFyIHIgaW4gbi5wcm9wc0RhdGEpdFtyXT1lW3JdO3ZhciBpPW4uX3BhcmVudExpc3RlbmVycztmb3IodmFyIG8gaW4gaSl0W2cobyldPWlbb107cmV0dXJuIHR9ZnVuY3Rpb24gQmkoZSx0KXtpZigvXGQta2VlcC1hbGl2ZSQvLnRlc3QodC50YWcpKXJldHVybiBlKCJrZWVwLWFsaXZlIix7cHJvcHM6dC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YX0pfXZhciBVaT17bmFtZToidHJhbnNpdGlvbiIscHJvcHM6RmksYWJzdHJhY3Q6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRzbG90cy5kZWZhdWx0O2lmKG4mJihuPW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ3x8Y3QoZSl9KSkubGVuZ3RoKXt2YXIgcj10aGlzLm1vZGUsaT1uWzBdO2lmKGZ1bmN0aW9uKGUpe2Zvcig7ZT1lLnBhcmVudDspaWYoZS5kYXRhLnRyYW5zaXRpb24pcmV0dXJuITB9KHRoaXMuJHZub2RlKSlyZXR1cm4gaTt2YXIgbz1SaShpKTtpZighbylyZXR1cm4gaTtpZih0aGlzLl9sZWF2aW5nKXJldHVybiBCaShlLGkpO3ZhciBhPSJfX3RyYW5zaXRpb24tIit0aGlzLl91aWQrIi0iO28ua2V5PW51bGw9PW8ua2V5P28uaXNDb21tZW50P2ErImNvbW1lbnQiOmErby50YWc6VChvLmtleSk/MD09PVN0cmluZyhvLmtleSkuaW5kZXhPZihhKT9vLmtleTphK28ua2V5Om8ua2V5O3ZhciBzLGMsbD0oby5kYXRhfHwoby5kYXRhPXt9KSkudHJhbnNpdGlvbj1IaSh0aGlzKSx1PXRoaXMuX3Zub2RlLGY9UmkodSk7aWYoby5kYXRhLmRpcmVjdGl2ZXMmJm8uZGF0YS5kaXJlY3RpdmVzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuInNob3ciPT09ZS5uYW1lfSkmJihvLmRhdGEuc2hvdz0hMCksZiYmZi5kYXRhJiYocz1vLChjPWYpLmtleSE9PXMua2V5fHxjLnRhZyE9PXMudGFnKSYmIWN0KGYpJiYoIWYuY29tcG9uZW50SW5zdGFuY2V8fCFmLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpKXt2YXIgcD1mLmRhdGEudHJhbnNpdGlvbj1tKHt9LGwpO2lmKCJvdXQtaW4iPT09cilyZXR1cm4gdGhpcy5fbGVhdmluZz0hMCxydChwLCJhZnRlckxlYXZlIixmdW5jdGlvbigpe3QuX2xlYXZpbmc9ITEsdC4kZm9yY2VVcGRhdGUoKX0pLEJpKGUsaSk7aWYoImluLW91dCI9PT1yKXtpZihjdChvKSlyZXR1cm4gdTt2YXIgZCx2PWZ1bmN0aW9uKCl7ZCgpfTtydChsLCJhZnRlckVudGVyIix2KSxydChsLCJlbnRlckNhbmNlbGxlZCIsdikscnQocCwiZGVsYXlMZWF2ZSIsZnVuY3Rpb24oZSl7ZD1lfSl9fXJldHVybiBpfX19LFZpPW0oe3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30sRmkpO2Z1bmN0aW9uIHppKGUpe2UuZWxtLl9tb3ZlQ2ImJmUuZWxtLl9tb3ZlQ2IoKSxlLmVsbS5fZW50ZXJDYiYmZS5lbG0uX2VudGVyQ2IoKX1mdW5jdGlvbiBLaShlKXtlLmRhdGEubmV3UG9zPWUuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIEppKGUpe3ZhciB0PWUuZGF0YS5wb3Msbj1lLmRhdGEubmV3UG9zLHI9dC5sZWZ0LW4ubGVmdCxpPXQudG9wLW4udG9wO2lmKHJ8fGkpe2UuZGF0YS5tb3ZlZD0hMDt2YXIgbz1lLmVsbS5zdHlsZTtvLnRyYW5zZm9ybT1vLldlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrcisicHgsIitpKyJweCkiLG8udHJhbnNpdGlvbkR1cmF0aW9uPSIwcyJ9fWRlbGV0ZSBWaS5tb2RlO3ZhciBxaT17VHJhbnNpdGlvbjpVaSxUcmFuc2l0aW9uR3JvdXA6e3Byb3BzOlZpLHJlbmRlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50YWd8fHRoaXMuJHZub2RlLmRhdGEudGFnfHwic3BhbiIsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9dGhpcy5wcmV2Q2hpbGRyZW49dGhpcy5jaGlsZHJlbixpPXRoaXMuJHNsb3RzLmRlZmF1bHR8fFtdLG89dGhpcy5jaGlsZHJlbj1bXSxhPUhpKHRoaXMpLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGM9aVtzXTtjLnRhZyYmbnVsbCE9Yy5rZXkmJjAhPT1TdHJpbmcoYy5rZXkpLmluZGV4T2YoIl9fdmxpc3QiKSYmKG8ucHVzaChjKSwoKG5bYy5rZXldPWMpLmRhdGF8fChjLmRhdGE9e30pKS50cmFuc2l0aW9uPWEpfWlmKHIpe2Zvcih2YXIgbD1bXSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIHA9cltmXTtwLmRhdGEudHJhbnNpdGlvbj1hLHAuZGF0YS5wb3M9cC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbltwLmtleV0/bC5wdXNoKHApOnUucHVzaChwKX10aGlzLmtlcHQ9ZSh0LG51bGwsbCksdGhpcy5yZW1vdmVkPXV9cmV0dXJuIGUodCxudWxsLG8pfSxiZWZvcmVVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9fcGF0Y2hfXyh0aGlzLl92bm9kZSx0aGlzLmtlcHQsITEsITApLHRoaXMuX3Zub2RlPXRoaXMua2VwdH0sdXBkYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJldkNoaWxkcmVuLHI9dGhpcy5tb3ZlQ2xhc3N8fCh0aGlzLm5hbWV8fCJ2IikrIi1tb3ZlIjtlLmxlbmd0aCYmdGhpcy5oYXNNb3ZlKGVbMF0uZWxtLHIpJiYoZS5mb3JFYWNoKHppKSxlLmZvckVhY2goS2kpLGUuZm9yRWFjaChKaSksdGhpcy5fcmVmbG93PWRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmRhdGEubW92ZWQpe3ZhciBuPWUuZWxtLHQ9bi5zdHlsZTtoaShuLHIpLHQudHJhbnNmb3JtPXQuV2Via2l0VHJhbnNmb3JtPXQudHJhbnNpdGlvbkR1cmF0aW9uPSIiLG4uYWRkRXZlbnRMaXN0ZW5lcih1aSxuLl9tb3ZlQ2I9ZnVuY3Rpb24gZSh0KXt0JiYhL3RyYW5zZm9ybSQvLnRlc3QodC5wcm9wZXJ0eU5hbWUpfHwobi5yZW1vdmVFdmVudExpc3RlbmVyKHVpLGUpLG4uX21vdmVDYj1udWxsLG1pKG4scikpfSl9fSkpfSxtZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKGUsdCl7aWYoIWFpKXJldHVybiExO2lmKHRoaXMuX2hhc01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49ZS5jbG9uZU5vZGUoKTtlLl90cmFuc2l0aW9uQ2xhc3NlcyYmZS5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyaShuLGUpfSksbmkobix0KSxuLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuJGVsLmFwcGVuZENoaWxkKG4pO3ZhciByPV9pKG4pO3JldHVybiB0aGlzLiRlbC5yZW1vdmVDaGlsZChuKSx0aGlzLl9oYXNNb3ZlPXIuaGFzVHJhbnNmb3JtfX19fTtobi5jb25maWcubXVzdFVzZVByb3A9U24saG4uY29uZmlnLmlzUmVzZXJ2ZWRUYWc9VW4saG4uY29uZmlnLmlzUmVzZXJ2ZWRBdHRyPUFuLGhuLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2U9Vm4saG4uY29uZmlnLmlzVW5rbm93bkVsZW1lbnQ9ZnVuY3Rpb24oZSl7aWYoIUIpcmV0dXJuITA7aWYoVW4oZSkpcmV0dXJuITE7aWYoZT1lLnRvTG93ZXJDYXNlKCksbnVsbCE9em5bZV0pcmV0dXJuIHpuW2VdO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuLTE8ZS5pbmRleE9mKCItIik/em5bZV09dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnR8fHQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTEVsZW1lbnQ6em5bZV09L0hUTUxVbmtub3duRWxlbWVudC8udGVzdCh0LnRvU3RyaW5nKCkpfSxtKGhuLm9wdGlvbnMuZGlyZWN0aXZlcyxQaSksbShobi5vcHRpb25zLmNvbXBvbmVudHMscWkpLGhuLnByb3RvdHlwZS5fX3BhdGNoX189Qj9PaTokLGhuLnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lJiZCP0puKGUpOnZvaWQgMCxyPWUsaT10LChuPXRoaXMpLiRlbD1yLG4uJG9wdGlvbnMucmVuZGVyfHwobi4kb3B0aW9ucy5yZW5kZXI9ZmUpLF90KG4sImJlZm9yZU1vdW50IiksbmV3IFN0KG4sZnVuY3Rpb24oKXtuLl91cGRhdGUobi5fcmVuZGVyKCksaSl9LCQsbnVsbCwhMCksaT0hMSxudWxsPT1uLiR2bm9kZSYmKG4uX2lzTW91bnRlZD0hMCxfdChuLCJtb3VudGVkIikpLG47dmFyIG4scixpfSxCJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ai5kZXZ0b29scyYmUSYmUS5lbWl0KCJpbml0Iixobil9LDApO3ZhciBXaT0vXHtceygoPzoufFxuKSs/KVx9XH0vZyxHaT0vWy0uKis/XiR7fSgpfFtcXVwvXFxdL2csWmk9ZShmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnJlcGxhY2UoR2ksIlxcJCYiKSxuPWVbMV0ucmVwbGFjZShHaSwiXFwkJiIpO3JldHVybiBuZXcgUmVnRXhwKHQrIigoPzoufFxcbikrPykiK24sImciKX0pO3ZhciBYaT17c3RhdGljS2V5czpbInN0YXRpY0NsYXNzIl0sdHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe3Qud2Fybjt2YXIgbj1TcihlLCJjbGFzcyIpO24mJihlLnN0YXRpY0NsYXNzPUpTT04uc3RyaW5naWZ5KG4pKTt2YXIgcj1PcihlLCJjbGFzcyIsITEpO3ImJihlLmNsYXNzQmluZGluZz1yKX0sZ2VuRGF0YTpmdW5jdGlvbihlKXt2YXIgdD0iIjtyZXR1cm4gZS5zdGF0aWNDbGFzcyYmKHQrPSJzdGF0aWNDbGFzczoiK2Uuc3RhdGljQ2xhc3MrIiwiKSxlLmNsYXNzQmluZGluZyYmKHQrPSJjbGFzczoiK2UuY2xhc3NCaW5kaW5nKyIsIiksdH19O3ZhciBZaSxRaT17c3RhdGljS2V5czpbInN0YXRpY1N0eWxlIl0sdHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe3Qud2Fybjt2YXIgbj1TcihlLCJzdHlsZSIpO24mJihlLnN0YXRpY1N0eWxlPUpTT04uc3RyaW5naWZ5KEtyKG4pKSk7dmFyIHI9T3IoZSwic3R5bGUiLCExKTtyJiYoZS5zdHlsZUJpbmRpbmc9cil9LGdlbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7cmV0dXJuIGUuc3RhdGljU3R5bGUmJih0Kz0ic3RhdGljU3R5bGU6IitlLnN0YXRpY1N0eWxlKyIsIiksZS5zdHlsZUJpbmRpbmcmJih0Kz0ic3R5bGU6KCIrZS5zdHlsZUJpbmRpbmcrIiksIiksdH19LGVvPWZ1bmN0aW9uKGUpe3JldHVybihZaT1ZaXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1lLFlpLnRleHRDb250ZW50fSx0bz1zKCJhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbixsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiciIpLG5vPXMoImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2UiKSxybz1zKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmFzZSxibG9ja3F1b3RlLGJvZHksY2FwdGlvbixjb2wsY29sZ3JvdXAsZGQsZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxsaSxtZW51aXRlbSxtZXRhLG9wdGdyb3VwLG9wdGlvbixwYXJhbSxycCxydCxzb3VyY2Usc3R5bGUsc3VtbWFyeSx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0aXRsZSx0cix0cmFjayIpLGlvPS9eXHMqKFteXHMiJzw+XC89XSspKD86XHMqKD0pXHMqKD86IihbXiJdKikiK3wnKFteJ10qKScrfChbXlxzIic9PD5gXSspKSk/Lyxvbz0iW2EtekEtWl9dW1xcd1xcLVxcLl0qIixhbz0iKCg/OiIrb28rIlxcOik/IitvbysiKSIsc289bmV3IFJlZ0V4cCgiXjwiK2FvKSxjbz0vXlxzKihcLz8pPi8sbG89bmV3IFJlZ0V4cCgiXjxcXC8iK2FvKyJbXj5dKj4iKSx1bz0vXjwhRE9DVFlQRSBbXj5dKz4vaSxmbz0vXjwhXC0tLyxwbz0vXjwhXFsvLHZvPSExOyJ4Ii5yZXBsYWNlKC94KC4pPy9nLGZ1bmN0aW9uKGUsdCl7dm89IiI9PT10fSk7dmFyIGhvPXMoInNjcmlwdCxzdHlsZSx0ZXh0YXJlYSIsITApLG1vPXt9LHlvPXsiJmx0OyI6IjwiLCImZ3Q7IjoiPiIsIiZxdW90OyI6JyInLCImYW1wOyI6IiYiLCImIzEwOyI6IlxuIiwiJiM5OyI6Ilx0In0sZ289LyYoPzpsdHxndHxxdW90fGFtcCk7L2csX289LyYoPzpsdHxndHxxdW90fGFtcHwjMTB8IzkpOy9nLGJvPXMoInByZSx0ZXh0YXJlYSIsITApLCRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmJvKGUpJiYiXG4iPT09dFswXX07dmFyIHdvLENvLHhvLGtvLEFvLE9vLFNvLFRvLEVvPS9eQHxedi1vbjovLGpvPS9edi18XkB8XjovLE5vPS8oW15dKj8pXHMrKD86aW58b2YpXHMrKFteXSopLyxMbz0vLChbXixcfVxdXSopKD86LChbXixcfVxdXSopKT8kLyxJbz0vXlwofFwpJC9nLE1vPS86KC4qKSQvLERvPS9eOnxedi1iaW5kOi8sUG89L1wuW14uXSsvZyxGbz1lKGVvKTtmdW5jdGlvbiBSbyhlLHQsbil7cmV0dXJue3R5cGU6MSx0YWc6ZSxhdHRyc0xpc3Q6dCxhdHRyc01hcDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9e30sbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W2Vbbl0ubmFtZV09ZVtuXS52YWx1ZTtyZXR1cm4gdH0odCkscGFyZW50Om4sY2hpbGRyZW46W119fWZ1bmN0aW9uIEhvKGUscCl7d289cC53YXJufHwkcixPbz1wLmlzUHJlVGFnfHxPLFNvPXAubXVzdFVzZVByb3B8fE8sVG89cC5nZXRUYWdOYW1lc3BhY2V8fE8seG89d3IocC5tb2R1bGVzLCJ0cmFuc2Zvcm1Ob2RlIiksa289d3IocC5tb2R1bGVzLCJwcmVUcmFuc2Zvcm1Ob2RlIiksQW89d3IocC5tb2R1bGVzLCJwb3N0VHJhbnNmb3JtTm9kZSIpLENvPXAuZGVsaW1pdGVyczt2YXIgZCx2LGg9W10saT0hMSE9PXAucHJlc2VydmVXaGl0ZXNwYWNlLG09ITEseT0hMTtmdW5jdGlvbiBnKGUpe2UucHJlJiYobT0hMSksT28oZS50YWcpJiYoeT0hMSk7Zm9yKHZhciB0PTA7dDxBby5sZW5ndGg7dCsrKUFvW3RdKGUscCl9cmV0dXJuIGZ1bmN0aW9uKGksZCl7Zm9yKHZhciBlLHYsaD1bXSxtPWQuZXhwZWN0SFRNTCx5PWQuaXNVbmFyeVRhZ3x8TyxnPWQuY2FuQmVMZWZ0T3BlblRhZ3x8TyxhPTA7aTspe2lmKGU9aSx2JiZobyh2KSl7dmFyIHI9MCxvPXYudG9Mb3dlckNhc2UoKSx0PW1vW29dfHwobW9bb109bmV3IFJlZ0V4cCgiKFtcXHNcXFNdKj8pKDwvIitvKyJbXj5dKj4pIiwiaSIpKSxuPWkucmVwbGFjZSh0LGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcj1uLmxlbmd0aCxobyhvKXx8Im5vc2NyaXB0Ij09PW98fCh0PXQucmVwbGFjZSgvPCFcLS0oW1xzXFNdKj8pLS0+L2csIiQxIikucmVwbGFjZSgvPCFcW0NEQVRBXFsoW1xzXFNdKj8pXV0+L2csIiQxIikpLCRvKG8sdCkmJih0PXQuc2xpY2UoMSkpLGQuY2hhcnMmJmQuY2hhcnModCksIiJ9KTthKz1pLmxlbmd0aC1uLmxlbmd0aCxpPW4sQShvLGEtcixhKX1lbHNle3ZhciBzPWkuaW5kZXhPZigiPCIpO2lmKDA9PT1zKXtpZihmby50ZXN0KGkpKXt2YXIgYz1pLmluZGV4T2YoIi0tXHgzZSIpO2lmKDA8PWMpe2Quc2hvdWxkS2VlcENvbW1lbnQmJmQuY29tbWVudChpLnN1YnN0cmluZyg0LGMpKSxDKGMrMyk7Y29udGludWV9fWlmKHBvLnRlc3QoaSkpe3ZhciBsPWkuaW5kZXhPZigiXT4iKTtpZigwPD1sKXtDKGwrMik7Y29udGludWV9fXZhciB1PWkubWF0Y2godW8pO2lmKHUpe0ModVswXS5sZW5ndGgpO2NvbnRpbnVlfXZhciBmPWkubWF0Y2gobG8pO2lmKGYpe3ZhciBwPWE7QyhmWzBdLmxlbmd0aCksQShmWzFdLHAsYSk7Y29udGludWV9dmFyIF89eCgpO2lmKF8pe2soXyksJG8odixpKSYmQygxKTtjb250aW51ZX19dmFyIGI9dm9pZCAwLCQ9dm9pZCAwLHc9dm9pZCAwO2lmKDA8PXMpe2ZvcigkPWkuc2xpY2Uocyk7IShsby50ZXN0KCQpfHxzby50ZXN0KCQpfHxmby50ZXN0KCQpfHxwby50ZXN0KCQpfHwodz0kLmluZGV4T2YoIjwiLDEpKTwwKTspcys9dywkPWkuc2xpY2Uocyk7Yj1pLnN1YnN0cmluZygwLHMpLEMocyl9czwwJiYoYj1pLGk9IiIpLGQuY2hhcnMmJmImJmQuY2hhcnMoYil9aWYoaT09PWUpe2QuY2hhcnMmJmQuY2hhcnMoaSk7YnJlYWt9fWZ1bmN0aW9uIEMoZSl7YSs9ZSxpPWkuc3Vic3RyaW5nKGUpfWZ1bmN0aW9uIHgoKXt2YXIgZT1pLm1hdGNoKHNvKTtpZihlKXt2YXIgdCxuLHI9e3RhZ05hbWU6ZVsxXSxhdHRyczpbXSxzdGFydDphfTtmb3IoQyhlWzBdLmxlbmd0aCk7ISh0PWkubWF0Y2goY28pKSYmKG49aS5tYXRjaChpbykpOylDKG5bMF0ubGVuZ3RoKSxyLmF0dHJzLnB1c2gobik7aWYodClyZXR1cm4gci51bmFyeVNsYXNoPXRbMV0sQyh0WzBdLmxlbmd0aCksci5lbmQ9YSxyfX1mdW5jdGlvbiBrKGUpe3ZhciB0PWUudGFnTmFtZSxuPWUudW5hcnlTbGFzaDttJiYoInAiPT09diYmcm8odCkmJkEodiksZyh0KSYmdj09PXQmJkEodCkpO2Zvcih2YXIgcixpLG8sYT15KHQpfHwhIW4scz1lLmF0dHJzLmxlbmd0aCxjPW5ldyBBcnJheShzKSxsPTA7bDxzO2wrKyl7dmFyIHU9ZS5hdHRyc1tsXTt2byYmLTE9PT11WzBdLmluZGV4T2YoJyIiJykmJigiIj09PXVbM10mJmRlbGV0ZSB1WzNdLCIiPT09dVs0XSYmZGVsZXRlIHVbNF0sIiI9PT11WzVdJiZkZWxldGUgdVs1XSk7dmFyIGY9dVszXXx8dVs0XXx8dVs1XXx8IiIscD0iYSI9PT10JiYiaHJlZiI9PT11WzFdP2Quc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOmQuc2hvdWxkRGVjb2RlTmV3bGluZXM7Y1tsXT17bmFtZTp1WzFdLHZhbHVlOihyPWYsaT1wLG89aT9fbzpnbyxyLnJlcGxhY2UobyxmdW5jdGlvbihlKXtyZXR1cm4geW9bZV19KSl9fWF8fChoLnB1c2goe3RhZzp0LGxvd2VyQ2FzZWRUYWc6dC50b0xvd2VyQ2FzZSgpLGF0dHJzOmN9KSx2PXQpLGQuc3RhcnQmJmQuc3RhcnQodCxjLGEsZS5zdGFydCxlLmVuZCl9ZnVuY3Rpb24gQShlLHQsbil7dmFyIHIsaTtpZihudWxsPT10JiYodD1hKSxudWxsPT1uJiYobj1hKSxlJiYoaT1lLnRvTG93ZXJDYXNlKCkpLGUpZm9yKHI9aC5sZW5ndGgtMTswPD1yJiZoW3JdLmxvd2VyQ2FzZWRUYWchPT1pO3ItLSk7ZWxzZSByPTA7aWYoMDw9cil7Zm9yKHZhciBvPWgubGVuZ3RoLTE7cjw9bztvLS0pZC5lbmQmJmQuZW5kKGhbb10udGFnLHQsbik7aC5sZW5ndGg9cix2PXImJmhbci0xXS50YWd9ZWxzZSJiciI9PT1pP2Quc3RhcnQmJmQuc3RhcnQoZSxbXSwhMCx0LG4pOiJwIj09PWkmJihkLnN0YXJ0JiZkLnN0YXJ0KGUsW10sITEsdCxuKSxkLmVuZCYmZC5lbmQoZSx0LG4pKX1BKCl9KGUse3dhcm46d28sZXhwZWN0SFRNTDpwLmV4cGVjdEhUTUwsaXNVbmFyeVRhZzpwLmlzVW5hcnlUYWcsY2FuQmVMZWZ0T3BlblRhZzpwLmNhbkJlTGVmdE9wZW5UYWcsc2hvdWxkRGVjb2RlTmV3bGluZXM6cC5zaG91bGREZWNvZGVOZXdsaW5lcyxzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6cC5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsc2hvdWxkS2VlcENvbW1lbnQ6cC5jb21tZW50cyxzdGFydDpmdW5jdGlvbihlLHQsbil7dmFyIHI9diYmdi5uc3x8VG8oZSk7SyYmInN2ZyI9PT1yJiYodD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO0tvLnRlc3Qoci5uYW1lKXx8KHIubmFtZT1yLm5hbWUucmVwbGFjZShKbywiIiksdC5wdXNoKHIpKX1yZXR1cm4gdH0odCkpO3ZhciBpLG8sYSxzLGMsbD1SbyhlLHQsdik7ciYmKGwubnM9ciksInN0eWxlIiE9PShpPWwpLnRhZyYmKCJzY3JpcHQiIT09aS50YWd8fGkuYXR0cnNNYXAudHlwZSYmInRleHQvamF2YXNjcmlwdCIhPT1pLmF0dHJzTWFwLnR5cGUpfHxZKCl8fChsLmZvcmJpZGRlbj0hMCk7Zm9yKHZhciB1PTA7dTxrby5sZW5ndGg7dSsrKWw9a29bdV0obCxwKXx8bDtpZihtfHwobnVsbCE9U3Iobz1sLCJ2LXByZSIpJiYoby5wcmU9ITApLGwucHJlJiYobT0hMCkpLE9vKGwudGFnKSYmKHk9ITApLG0/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyc0xpc3QubGVuZ3RoO2lmKHQpZm9yKHZhciBuPWUuYXR0cnM9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09e25hbWU6ZS5hdHRyc0xpc3Rbcl0ubmFtZSx2YWx1ZTpKU09OLnN0cmluZ2lmeShlLmF0dHJzTGlzdFtyXS52YWx1ZSl9O2Vsc2UgZS5wcmV8fChlLnBsYWluPSEwKX0obCk6bC5wcm9jZXNzZWR8fChVbyhsKSxmdW5jdGlvbihlKXt2YXIgdD1TcihlLCJ2LWlmIik7aWYodCllLmlmPXQsVm8oZSx7ZXhwOnQsYmxvY2s6ZX0pO2Vsc2V7bnVsbCE9U3IoZSwidi1lbHNlIikmJihlLmVsc2U9ITApO3ZhciBuPVNyKGUsInYtZWxzZS1pZiIpO24mJihlLmVsc2VpZj1uKX19KGwpLG51bGwhPVNyKGE9bCwidi1vbmNlIikmJihhLm9uY2U9ITApLEJvKGwscCkpLGQ/aC5sZW5ndGh8fGQuaWYmJihsLmVsc2VpZnx8bC5lbHNlKSYmVm8oZCx7ZXhwOmwuZWxzZWlmLGJsb2NrOmx9KTpkPWwsdiYmIWwuZm9yYmlkZGVuKWlmKGwuZWxzZWlmfHxsLmVsc2Upcz1sLChjPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2Zvcig7dC0tOyl7aWYoMT09PWVbdF0udHlwZSlyZXR1cm4gZVt0XTtlLnBvcCgpfX0odi5jaGlsZHJlbikpJiZjLmlmJiZWbyhjLHtleHA6cy5lbHNlaWYsYmxvY2s6c30pO2Vsc2UgaWYobC5zbG90U2NvcGUpe3YucGxhaW49ITE7dmFyIGY9bC5zbG90VGFyZ2V0fHwnImRlZmF1bHQiJzsodi5zY29wZWRTbG90c3x8KHYuc2NvcGVkU2xvdHM9e30pKVtmXT1sfWVsc2Ugdi5jaGlsZHJlbi5wdXNoKGwpLGwucGFyZW50PXY7bj9nKGwpOih2PWwsaC5wdXNoKGwpKX0sZW5kOmZ1bmN0aW9uKCl7dmFyIGU9aFtoLmxlbmd0aC0xXSx0PWUuY2hpbGRyZW5bZS5jaGlsZHJlbi5sZW5ndGgtMV07dCYmMz09PXQudHlwZSYmIiAiPT09dC50ZXh0JiYheSYmZS5jaGlsZHJlbi5wb3AoKSxoLmxlbmd0aC09MSx2PWhbaC5sZW5ndGgtMV0sZyhlKX0sY2hhcnM6ZnVuY3Rpb24oZSl7aWYodiYmKCFLfHwidGV4dGFyZWEiIT09di50YWd8fHYuYXR0cnNNYXAucGxhY2Vob2xkZXIhPT1lKSl7dmFyIHQsbixyPXYuY2hpbGRyZW47aWYoZT15fHxlLnRyaW0oKT8ic2NyaXB0Ij09PSh0PXYpLnRhZ3x8InN0eWxlIj09PXQudGFnP2U6Rm8oZSk6aSYmci5sZW5ndGg/IiAiOiIiKSFtJiYiICIhPT1lJiYobj1mdW5jdGlvbihlLHQpe3ZhciBuPXQ/WmkodCk6V2k7aWYobi50ZXN0KGUpKXtmb3IodmFyIHIsaSxvLGE9W10scz1bXSxjPW4ubGFzdEluZGV4PTA7cj1uLmV4ZWMoZSk7KXtjPChpPXIuaW5kZXgpJiYocy5wdXNoKG89ZS5zbGljZShjLGkpKSxhLnB1c2goSlNPTi5zdHJpbmdpZnkobykpKTt2YXIgbD1fcihyWzFdLnRyaW0oKSk7YS5wdXNoKCJfcygiK2wrIikiKSxzLnB1c2goeyJAYmluZGluZyI6bH0pLGM9aStyWzBdLmxlbmd0aH1yZXR1cm4gYzxlLmxlbmd0aCYmKHMucHVzaChvPWUuc2xpY2UoYykpLGEucHVzaChKU09OLnN0cmluZ2lmeShvKSkpLHtleHByZXNzaW9uOmEuam9pbigiKyIpLHRva2VuczpzfX19KGUsQ28pKT9yLnB1c2goe3R5cGU6MixleHByZXNzaW9uOm4uZXhwcmVzc2lvbix0b2tlbnM6bi50b2tlbnMsdGV4dDplfSk6IiAiPT09ZSYmci5sZW5ndGgmJiIgIj09PXJbci5sZW5ndGgtMV0udGV4dHx8ci5wdXNoKHt0eXBlOjMsdGV4dDplfSl9fSxjb21tZW50OmZ1bmN0aW9uKGUpe3YuY2hpbGRyZW4ucHVzaCh7dHlwZTozLHRleHQ6ZSxpc0NvbW1lbnQ6ITB9KX19KSxkfWZ1bmN0aW9uIEJvKGUsdCl7dmFyIG4scixpLG87KHI9T3Iobj1lLCJrZXkiKSkmJihuLmtleT1yKSxlLnBsYWluPSFlLmtleSYmIWUuYXR0cnNMaXN0Lmxlbmd0aCwobz1PcihpPWUsInJlZiIpKSYmKGkucmVmPW8saS5yZWZJbkZvcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZTt0Oyl7aWYodm9pZCAwIT09dC5mb3IpcmV0dXJuITA7dD10LnBhcmVudH1yZXR1cm4hMX0oaSkpLGZ1bmN0aW9uKGUpe2lmKCJzbG90Ij09PWUudGFnKWUuc2xvdE5hbWU9T3IoZSwibmFtZSIpO2Vsc2V7dmFyIHQ7InRlbXBsYXRlIj09PWUudGFnPyh0PVNyKGUsInNjb3BlIiksZS5zbG90U2NvcGU9dHx8U3IoZSwic2xvdC1zY29wZSIpKToodD1TcihlLCJzbG90LXNjb3BlIikpJiYoZS5zbG90U2NvcGU9dCk7dmFyIG49T3IoZSwic2xvdCIpO24mJihlLnNsb3RUYXJnZXQ9JyIiJz09PW4/JyJkZWZhdWx0Iic6biwidGVtcGxhdGUiPT09ZS50YWd8fGUuc2xvdFNjb3BlfHx4cihlLCJzbG90IixuKSl9fShlKSxmdW5jdGlvbihlKXt2YXIgdDsodD1PcihlLCJpcyIpKSYmKGUuY29tcG9uZW50PXQpO251bGwhPVNyKGUsImlubGluZS10ZW1wbGF0ZSIpJiYoZS5pbmxpbmVUZW1wbGF0ZT0hMCl9KGUpO2Zvcih2YXIgYT0wO2E8eG8ubGVuZ3RoO2ErKyllPXhvW2FdKGUsdCl8fGU7IWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLGM9ZS5hdHRyc0xpc3Q7Zm9yKHQ9MCxuPWMubGVuZ3RoO3Q8bjt0KyspaWYocj1pPWNbdF0ubmFtZSxvPWNbdF0udmFsdWUsam8udGVzdChyKSlpZihlLmhhc0JpbmRpbmdzPSEwLChhPXpvKHIpKSYmKHI9ci5yZXBsYWNlKFBvLCIiKSksRG8udGVzdChyKSlyPXIucmVwbGFjZShEbywiIiksbz1fcihvKSxzPSExLGEmJihhLnByb3AmJihzPSEwLCJpbm5lckh0bWwiPT09KHI9ZyhyKSkmJihyPSJpbm5lckhUTUwiKSksYS5jYW1lbCYmKHI9ZyhyKSksYS5zeW5jJiZBcihlLCJ1cGRhdGU6IitnKHIpLEVyKG8sIiRldmVudCIpKSksc3x8IWUuY29tcG9uZW50JiZTbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscik/Q3IoZSxyLG8pOnhyKGUscixvKTtlbHNlIGlmKEVvLnRlc3Qocikpcj1yLnJlcGxhY2UoRW8sIiIpLEFyKGUscixvLGEsITEpO2Vsc2V7dmFyIGw9KHI9ci5yZXBsYWNlKGpvLCIiKSkubWF0Y2goTW8pLHU9bCYmbFsxXTt1JiYocj1yLnNsaWNlKDAsLSh1Lmxlbmd0aCsxKSkpLHA9cixkPWksdj1vLGg9dSxtPWEsKChmPWUpLmRpcmVjdGl2ZXN8fChmLmRpcmVjdGl2ZXM9W10pKS5wdXNoKHtuYW1lOnAscmF3TmFtZTpkLHZhbHVlOnYsYXJnOmgsbW9kaWZpZXJzOm19KSxmLnBsYWluPSExfWVsc2UgeHIoZSxyLEpTT04uc3RyaW5naWZ5KG8pKSwhZS5jb21wb25lbnQmJiJtdXRlZCI9PT1yJiZTbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscikmJkNyKGUsciwidHJ1ZSIpO3ZhciBmLHAsZCx2LGgsbX0oZSl9ZnVuY3Rpb24gVW8oZSl7dmFyIHQ7aWYodD1TcihlLCJ2LWZvciIpKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKE5vKTtpZighdClyZXR1cm47dmFyIG49e307bi5mb3I9dFsyXS50cmltKCk7dmFyIHI9dFsxXS50cmltKCkucmVwbGFjZShJbywiIiksaT1yLm1hdGNoKExvKTtpPyhuLmFsaWFzPXIucmVwbGFjZShMbywiIiksbi5pdGVyYXRvcjE9aVsxXS50cmltKCksaVsyXSYmKG4uaXRlcmF0b3IyPWlbMl0udHJpbSgpKSk6bi5hbGlhcz1yO3JldHVybiBufSh0KTtuJiZtKGUsbil9fWZ1bmN0aW9uIFZvKGUsdCl7ZS5pZkNvbmRpdGlvbnN8fChlLmlmQ29uZGl0aW9ucz1bXSksZS5pZkNvbmRpdGlvbnMucHVzaCh0KX1mdW5jdGlvbiB6byhlKXt2YXIgdD1lLm1hdGNoKFBvKTtpZih0KXt2YXIgbj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZS5zbGljZSgxKV09ITB9KSxufX12YXIgS289L154bWxuczpOU1xkKy8sSm89L15OU1xkKzovO2Z1bmN0aW9uIHFvKGUpe3JldHVybiBSbyhlLnRhZyxlLmF0dHJzTGlzdC5zbGljZSgpLGUucGFyZW50KX12YXIgV289W1hpLFFpLHtwcmVUcmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7aWYoImlucHV0Ij09PWUudGFnKXt2YXIgbixyPWUuYXR0cnNNYXA7aWYoIXJbInYtbW9kZWwiXSlyZXR1cm47aWYoKHJbIjp0eXBlIl18fHJbInYtYmluZDp0eXBlIl0pJiYobj1PcihlLCJ0eXBlIikpLHIudHlwZXx8bnx8IXJbInYtYmluZCJdfHwobj0iKCIrclsidi1iaW5kIl0rIikudHlwZSIpLG4pe3ZhciBpPVNyKGUsInYtaWYiLCEwKSxvPWk/IiYmKCIraSsiKSI6IiIsYT1udWxsIT1TcihlLCJ2LWVsc2UiLCEwKSxzPVNyKGUsInYtZWxzZS1pZiIsITApLGM9cW8oZSk7VW8oYyksa3IoYywidHlwZSIsImNoZWNrYm94IiksQm8oYyx0KSxjLnByb2Nlc3NlZD0hMCxjLmlmPSIoIituKyIpPT09J2NoZWNrYm94JyIrbyxWbyhjLHtleHA6Yy5pZixibG9jazpjfSk7dmFyIGw9cW8oZSk7U3IobCwidi1mb3IiLCEwKSxrcihsLCJ0eXBlIiwicmFkaW8iKSxCbyhsLHQpLFZvKGMse2V4cDoiKCIrbisiKT09PSdyYWRpbyciK28sYmxvY2s6bH0pO3ZhciB1PXFvKGUpO3JldHVybiBTcih1LCJ2LWZvciIsITApLGtyKHUsIjp0eXBlIixuKSxCbyh1LHQpLFZvKGMse2V4cDppLGJsb2NrOnV9KSxhP2MuZWxzZT0hMDpzJiYoYy5lbHNlaWY9cyksY319fX1dO3ZhciBHbyxabyxYbyxZbz17ZXhwZWN0SFRNTDohMCxtb2R1bGVzOldvLGRpcmVjdGl2ZXM6e21vZGVsOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLGMsbCx1LGYscCxkLHYsaCxtLHksZyxfPXQudmFsdWUsYj10Lm1vZGlmaWVycywkPWUudGFnLHc9ZS5hdHRyc01hcC50eXBlO2lmKGUuY29tcG9uZW50KXJldHVybiBUcihlLF8sYiksITE7aWYoInNlbGVjdCI9PT0kKWg9ZSxtPV8sZz0oZz0ndmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSAiX3ZhbHVlIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlO3JldHVybiAnKygoeT1iKSYmeS5udW1iZXI/Il9uKHZhbCkiOiJ2YWwiKSsifSk7IikrIiAiK0VyKG0sIiRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSIpLEFyKGgsImNoYW5nZSIsZyxudWxsLCEwKTtlbHNlIGlmKCJpbnB1dCI9PT0kJiYiY2hlY2tib3giPT09dyljPWUsbD1fLGY9KHU9YikmJnUubnVtYmVyLHA9T3IoYywidmFsdWUiKXx8Im51bGwiLGQ9T3IoYywidHJ1ZS12YWx1ZSIpfHwidHJ1ZSIsdj1PcihjLCJmYWxzZS12YWx1ZSIpfHwiZmFsc2UiLENyKGMsImNoZWNrZWQiLCJBcnJheS5pc0FycmF5KCIrbCsiKT9faSgiK2wrIiwiK3ArIik+LTEiKygidHJ1ZSI9PT1kPyI6KCIrbCsiKSI6IjpfcSgiK2wrIiwiK2QrIikiKSksQXIoYywiY2hhbmdlIiwidmFyICQkYT0iK2wrIiwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQkZWwuY2hlY2tlZD8oIitkKyIpOigiK3YrIik7aWYoQXJyYXkuaXNBcnJheSgkJGEpKXt2YXIgJCR2PSIrKGY/Il9uKCIrcCsiKSI6cCkrIiwkJGk9X2koJCRhLCQkdik7aWYoJCRlbC5jaGVja2VkKXskJGk8MCYmKCIrRXIobCwiJCRhLmNvbmNhdChbJCR2XSkiKSsiKX1lbHNleyQkaT4tMSYmKCIrRXIobCwiJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSkiKSsiKX19ZWxzZXsiK0VyKGwsIiQkYyIpKyJ9IixudWxsLCEwKTtlbHNlIGlmKCJpbnB1dCI9PT0kJiYicmFkaW8iPT09dylyPWUsaT1fLGE9KG89YikmJm8ubnVtYmVyLHM9T3IociwidmFsdWUiKXx8Im51bGwiLENyKHIsImNoZWNrZWQiLCJfcSgiK2krIiwiKyhzPWE/Il9uKCIrcysiKSI6cykrIikiKSxBcihyLCJjaGFuZ2UiLEVyKGkscyksbnVsbCwhMCk7ZWxzZSBpZigiaW5wdXQiPT09JHx8InRleHRhcmVhIj09PSQpIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmF0dHJzTWFwLnR5cGUsaT1ufHx7fSxvPWkubGF6eSxhPWkubnVtYmVyLHM9aS50cmltLGM9IW8mJiJyYW5nZSIhPT1yLGw9bz8iY2hhbmdlIjoicmFuZ2UiPT09cj9QcjoiaW5wdXQiLHU9IiRldmVudC50YXJnZXQudmFsdWUiO3MmJih1PSIkZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKSIpLGEmJih1PSJfbigiK3UrIikiKTt2YXIgZj1Fcih0LHUpO2MmJihmPSJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47IitmKSxDcihlLCJ2YWx1ZSIsIigiK3QrIikiKSxBcihlLGwsZixudWxsLCEwKSwoc3x8YSkmJkFyKGUsImJsdXIiLCIkZm9yY2VVcGRhdGUoKSIpfShlLF8sYik7ZWxzZSBpZighai5pc1Jlc2VydmVkVGFnKCQpKXJldHVybiBUcihlLF8sYiksITE7cmV0dXJuITB9LHRleHQ6ZnVuY3Rpb24oZSx0KXt0LnZhbHVlJiZDcihlLCJ0ZXh0Q29udGVudCIsIl9zKCIrdC52YWx1ZSsiKSIpfSxodG1sOmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmQ3IoZSwiaW5uZXJIVE1MIiwiX3MoIit0LnZhbHVlKyIpIil9fSxpc1ByZVRhZzpmdW5jdGlvbihlKXtyZXR1cm4icHJlIj09PWV9LGlzVW5hcnlUYWc6dG8sbXVzdFVzZVByb3A6U24sY2FuQmVMZWZ0T3BlblRhZzpubyxpc1Jlc2VydmVkVGFnOlVuLGdldFRhZ05hbWVzcGFjZTpWbixzdGF0aWNLZXlzOihHbz1XbyxHby5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQodC5zdGF0aWNLZXlzfHxbXSl9LFtdKS5qb2luKCIsIikpfSxRbz1lKGZ1bmN0aW9uKGUpe3JldHVybiBzKCJ0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzIisoZT8iLCIrZToiIikpfSk7ZnVuY3Rpb24gZWEoZSx0KXtlJiYoWm89UW8odC5zdGF0aWNLZXlzfHwiIiksWG89dC5pc1Jlc2VydmVkVGFnfHxPLGZ1bmN0aW9uIGUodCl7dC5zdGF0aWM9ZnVuY3Rpb24oZSl7aWYoMj09PWUudHlwZSlyZXR1cm4hMTtpZigzPT09ZS50eXBlKXJldHVybiEwO3JldHVybiEoIWUucHJlJiYoZS5oYXNCaW5kaW5nc3x8ZS5pZnx8ZS5mb3J8fGMoZS50YWcpfHwhWG8oZS50YWcpfHxmdW5jdGlvbihlKXtmb3IoO2UucGFyZW50Oyl7aWYoInRlbXBsYXRlIiE9PShlPWUucGFyZW50KS50YWcpcmV0dXJuITE7aWYoZS5mb3IpcmV0dXJuITB9cmV0dXJuITF9KGUpfHwhT2JqZWN0LmtleXMoZSkuZXZlcnkoWm8pKSl9KHQpO2lmKDE9PT10LnR5cGUpe2lmKCFYbyh0LnRhZykmJiJzbG90IiE9PXQudGFnJiZudWxsPT10LmF0dHJzTWFwWyJpbmxpbmUtdGVtcGxhdGUiXSlyZXR1cm47Zm9yKHZhciBuPTAscj10LmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10LmNoaWxkcmVuW25dO2UoaSksaS5zdGF0aWN8fCh0LnN0YXRpYz0hMSl9aWYodC5pZkNvbmRpdGlvbnMpZm9yKHZhciBvPTEsYT10LmlmQ29uZGl0aW9ucy5sZW5ndGg7bzxhO28rKyl7dmFyIHM9dC5pZkNvbmRpdGlvbnNbb10uYmxvY2s7ZShzKSxzLnN0YXRpY3x8KHQuc3RhdGljPSExKX19fShlKSxmdW5jdGlvbiBlKHQsbil7aWYoMT09PXQudHlwZSl7aWYoKHQuc3RhdGljfHx0Lm9uY2UpJiYodC5zdGF0aWNJbkZvcj1uKSx0LnN0YXRpYyYmdC5jaGlsZHJlbi5sZW5ndGgmJigxIT09dC5jaGlsZHJlbi5sZW5ndGh8fDMhPT10LmNoaWxkcmVuWzBdLnR5cGUpKXJldHVybiB2b2lkKHQuc3RhdGljUm9vdD0hMCk7aWYodC5zdGF0aWNSb290PSExLHQuY2hpbGRyZW4pZm9yKHZhciByPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtyPGk7cisrKWUodC5jaGlsZHJlbltyXSxufHwhIXQuZm9yKTtpZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKWUodC5pZkNvbmRpdGlvbnNbb10uYmxvY2ssbil9fShlLCExKSl9dmFyIHRhPS9eKFtcdyRfXSt8XChbXildKj9cKSlccyo9PnxeZnVuY3Rpb25ccypcKC8sbmE9L15bQS1aYS16XyRdW1x3JF0qKD86XC5bQS1aYS16XyRdW1x3JF0qfFxbJ1teJ10qPyddfFxbIlteIl0qPyJdfFxbXGQrXXxcW1tBLVphLXpfJF1bXHckXSpdKSokLyxyYT17ZXNjOjI3LHRhYjo5LGVudGVyOjEzLHNwYWNlOjMyLHVwOjM4LGxlZnQ6MzcscmlnaHQ6MzksZG93bjo0MCxkZWxldGU6WzgsNDZdfSxpYT17ZXNjOiJFc2NhcGUiLHRhYjoiVGFiIixlbnRlcjoiRW50ZXIiLHNwYWNlOiIgIix1cDpbIlVwIiwiQXJyb3dVcCJdLGxlZnQ6WyJMZWZ0IiwiQXJyb3dMZWZ0Il0scmlnaHQ6WyJSaWdodCIsIkFycm93UmlnaHQiXSxkb3duOlsiRG93biIsIkFycm93RG93biJdLGRlbGV0ZTpbIkJhY2tzcGFjZSIsIkRlbGV0ZSJdfSxvYT1mdW5jdGlvbihlKXtyZXR1cm4iaWYoIitlKyIpcmV0dXJuIG51bGw7In0sYWE9e3N0b3A6IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsiLHByZXZlbnQ6IiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyIsc2VsZjpvYSgiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXQiKSxjdHJsOm9hKCIhJGV2ZW50LmN0cmxLZXkiKSxzaGlmdDpvYSgiISRldmVudC5zaGlmdEtleSIpLGFsdDpvYSgiISRldmVudC5hbHRLZXkiKSxtZXRhOm9hKCIhJGV2ZW50Lm1ldGFLZXkiKSxsZWZ0Om9hKCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMCIpLG1pZGRsZTpvYSgiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDEiKSxyaWdodDpvYSgiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDIiKX07ZnVuY3Rpb24gc2EoZSx0LG4pe3ZhciByPXQ/Im5hdGl2ZU9uOnsiOiJvbjp7Ijtmb3IodmFyIGkgaW4gZSlyKz0nIicraSsnIjonK2NhKGksZVtpXSkrIiwiO3JldHVybiByLnNsaWNlKDAsLTEpKyJ9In1mdW5jdGlvbiBjYSh0LGUpe2lmKCFlKXJldHVybiJmdW5jdGlvbigpe30iO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIlsiK2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjYSh0LGUpfSkuam9pbigiLCIpKyJdIjt2YXIgbj1uYS50ZXN0KGUudmFsdWUpLHI9dGEudGVzdChlLnZhbHVlKTtpZihlLm1vZGlmaWVycyl7dmFyIGk9IiIsbz0iIixhPVtdO2Zvcih2YXIgcyBpbiBlLm1vZGlmaWVycylpZihhYVtzXSlvKz1hYVtzXSxyYVtzXSYmYS5wdXNoKHMpO2Vsc2UgaWYoImV4YWN0Ij09PXMpe3ZhciBjPWUubW9kaWZpZXJzO28rPW9hKFsiY3RybCIsInNoaWZ0IiwiYWx0IiwibWV0YSJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hY1tlXX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iJGV2ZW50LiIrZSsiS2V5In0pLmpvaW4oInx8IikpfWVsc2UgYS5wdXNoKHMpO3JldHVybiBhLmxlbmd0aCYmKGkrPSJpZighKCdidXR0b24nIGluICRldmVudCkmJiIrYS5tYXAobGEpLmpvaW4oIiYmIikrIilyZXR1cm4gbnVsbDsiKSxvJiYoaSs9byksImZ1bmN0aW9uKCRldmVudCl7IitpKyhuPyJyZXR1cm4gIitlLnZhbHVlKyIoJGV2ZW50KSI6cj8icmV0dXJuICgiK2UudmFsdWUrIikoJGV2ZW50KSI6ZS52YWx1ZSkrIn0ifXJldHVybiBufHxyP2UudmFsdWU6ImZ1bmN0aW9uKCRldmVudCl7IitlLnZhbHVlKyJ9In1mdW5jdGlvbiBsYShlKXt2YXIgdD1wYXJzZUludChlLDEwKTtpZih0KXJldHVybiIkZXZlbnQua2V5Q29kZSE9PSIrdDt2YXIgbj1yYVtlXSxyPWlhW2VdO3JldHVybiJfaygkZXZlbnQua2V5Q29kZSwiK0pTT04uc3RyaW5naWZ5KGUpKyIsIitKU09OLnN0cmluZ2lmeShuKSsiLCRldmVudC5rZXksIitKU09OLnN0cmluZ2lmeShyKSsiKSJ9dmFyIHVhPXtvbjpmdW5jdGlvbihlLHQpe2Uud3JhcExpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4iX2coIitlKyIsIit0LnZhbHVlKyIpIn19LGJpbmQ6ZnVuY3Rpb24odCxuKXt0LndyYXBEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiJfYigiK2UrIiwnIit0LnRhZysiJywiK24udmFsdWUrIiwiKyhuLm1vZGlmaWVycyYmbi5tb2RpZmllcnMucHJvcD8idHJ1ZSI6ImZhbHNlIikrKG4ubW9kaWZpZXJzJiZuLm1vZGlmaWVycy5zeW5jPyIsdHJ1ZSI6IiIpKyIpIn19LGNsb2FrOiR9LGZhPWZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMud2Fybj1lLndhcm58fCRyLHRoaXMudHJhbnNmb3Jtcz13cihlLm1vZHVsZXMsInRyYW5zZm9ybUNvZGUiKSx0aGlzLmRhdGFHZW5GbnM9d3IoZS5tb2R1bGVzLCJnZW5EYXRhIiksdGhpcy5kaXJlY3RpdmVzPW0obSh7fSx1YSksZS5kaXJlY3RpdmVzKTt2YXIgdD1lLmlzUmVzZXJ2ZWRUYWd8fE87dGhpcy5tYXliZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4hdChlLnRhZyl9LHRoaXMub25jZUlkPTAsdGhpcy5zdGF0aWNSZW5kZXJGbnM9W119O2Z1bmN0aW9uIHBhKGUsdCl7dmFyIG49bmV3IGZhKHQpO3JldHVybntyZW5kZXI6IndpdGgodGhpcyl7cmV0dXJuICIrKGU/ZGEoZSxuKTonX2MoImRpdiIpJykrIn0iLHN0YXRpY1JlbmRlckZuczpuLnN0YXRpY1JlbmRlckZuc319ZnVuY3Rpb24gZGEoZSx0KXtpZihlLnN0YXRpY1Jvb3QmJiFlLnN0YXRpY1Byb2Nlc3NlZClyZXR1cm4gdmEoZSx0KTtpZihlLm9uY2UmJiFlLm9uY2VQcm9jZXNzZWQpcmV0dXJuIGhhKGUsdCk7aWYoZS5mb3ImJiFlLmZvclByb2Nlc3NlZClyZXR1cm4gZj10LHY9KHU9ZSkuZm9yLGg9dS5hbGlhcyxtPXUuaXRlcmF0b3IxPyIsIit1Lml0ZXJhdG9yMToiIix5PXUuaXRlcmF0b3IyPyIsIit1Lml0ZXJhdG9yMjoiIix1LmZvclByb2Nlc3NlZD0hMCwoZHx8Il9sIikrIigoIit2KyIpLGZ1bmN0aW9uKCIraCttK3krIil7cmV0dXJuICIrKHB8fGRhKSh1LGYpKyJ9KSI7aWYoZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIG1hKGUsdCk7aWYoInRlbXBsYXRlIiE9PWUudGFnfHxlLnNsb3RUYXJnZXQpe2lmKCJzbG90Ij09PWUudGFnKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2xvdE5hbWV8fCciZGVmYXVsdCInLHI9X2EoZSx0KSxpPSJfdCgiK24rKHI/IiwiK3I6IiIpLG89ZS5hdHRycyYmInsiK2UuYXR0cnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnKGUubmFtZSkrIjoiK2UudmFsdWV9KS5qb2luKCIsIikrIn0iLGE9ZS5hdHRyc01hcFsidi1iaW5kIl07IW8mJiFhfHxyfHwoaSs9IixudWxsIik7byYmKGkrPSIsIitvKTthJiYoaSs9KG8/IiI6IixudWxsIikrIiwiK2EpO3JldHVybiBpKyIpIn0oZSx0KTt2YXIgbjtpZihlLmNvbXBvbmVudClhPWUuY29tcG9uZW50LGM9dCxsPShzPWUpLmlubGluZVRlbXBsYXRlP251bGw6X2EocyxjLCEwKSxuPSJfYygiK2ErIiwiK3lhKHMsYykrKGw/IiwiK2w6IiIpKyIpIjtlbHNle3ZhciByPWUucGxhaW4/dm9pZCAwOnlhKGUsdCksaT1lLmlubGluZVRlbXBsYXRlP251bGw6X2EoZSx0LCEwKTtuPSJfYygnIitlLnRhZysiJyIrKHI/IiwiK3I6IiIpKyhpPyIsIitpOiIiKSsiKSJ9Zm9yKHZhciBvPTA7bzx0LnRyYW5zZm9ybXMubGVuZ3RoO28rKyluPXQudHJhbnNmb3Jtc1tvXShlLG4pO3JldHVybiBufXJldHVybiBfYShlLHQpfHwidm9pZCAwIjt2YXIgYSxzLGMsbCx1LGYscCxkLHYsaCxtLHl9ZnVuY3Rpb24gdmEoZSx0KXtyZXR1cm4gZS5zdGF0aWNQcm9jZXNzZWQ9ITAsdC5zdGF0aWNSZW5kZXJGbnMucHVzaCgid2l0aCh0aGlzKXtyZXR1cm4gIitkYShlLHQpKyJ9IiksIl9tKCIrKHQuc3RhdGljUmVuZGVyRm5zLmxlbmd0aC0xKSsoZS5zdGF0aWNJbkZvcj8iLHRydWUiOiIiKSsiKSJ9ZnVuY3Rpb24gaGEoZSx0KXtpZihlLm9uY2VQcm9jZXNzZWQ9ITAsZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIG1hKGUsdCk7aWYoZS5zdGF0aWNJbkZvcil7Zm9yKHZhciBuPSIiLHI9ZS5wYXJlbnQ7cjspe2lmKHIuZm9yKXtuPXIua2V5O2JyZWFrfXI9ci5wYXJlbnR9cmV0dXJuIG4/Il9vKCIrZGEoZSx0KSsiLCIrdC5vbmNlSWQrKysiLCIrbisiKSI6ZGEoZSx0KX1yZXR1cm4gdmEoZSx0KX1mdW5jdGlvbiBtYShlLHQsbixyKXtyZXR1cm4gZS5pZlByb2Nlc3NlZD0hMCxmdW5jdGlvbiBlKHQsbixyLGkpe2lmKCF0Lmxlbmd0aClyZXR1cm4gaXx8Il9lKCkiO3ZhciBvPXQuc2hpZnQoKTtyZXR1cm4gby5leHA/IigiK28uZXhwKyIpPyIrYShvLmJsb2NrKSsiOiIrZSh0LG4scixpKToiIithKG8uYmxvY2spO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIHI/cihlLG4pOmUub25jZT9oYShlLG4pOmRhKGUsbil9fShlLmlmQ29uZGl0aW9ucy5zbGljZSgpLHQsbixyKX1mdW5jdGlvbiB5YShlLHQpe3ZhciBuLHIsaT0ieyIsbz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZGlyZWN0aXZlcztpZighbilyZXR1cm47dmFyIHIsaSxvLGEscz0iZGlyZWN0aXZlczpbIixjPSExO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXtvPW5bcl0sYT0hMDt2YXIgbD10LmRpcmVjdGl2ZXNbby5uYW1lXTtsJiYoYT0hIWwoZSxvLHQud2FybikpLGEmJihjPSEwLHMrPSd7bmFtZToiJytvLm5hbWUrJyIscmF3TmFtZToiJytvLnJhd05hbWUrJyInKyhvLnZhbHVlPyIsdmFsdWU6KCIrby52YWx1ZSsiKSxleHByZXNzaW9uOiIrSlNPTi5zdHJpbmdpZnkoby52YWx1ZSk6IiIpKyhvLmFyZz8nLGFyZzoiJytvLmFyZysnIic6IiIpKyhvLm1vZGlmaWVycz8iLG1vZGlmaWVyczoiK0pTT04uc3RyaW5naWZ5KG8ubW9kaWZpZXJzKToiIikrIn0sIil9aWYoYylyZXR1cm4gcy5zbGljZSgwLC0xKSsiXSJ9KGUsdCk7byYmKGkrPW8rIiwiKSxlLmtleSYmKGkrPSJrZXk6IitlLmtleSsiLCIpLGUucmVmJiYoaSs9InJlZjoiK2UucmVmKyIsIiksZS5yZWZJbkZvciYmKGkrPSJyZWZJbkZvcjp0cnVlLCIpLGUucHJlJiYoaSs9InByZTp0cnVlLCIpLGUuY29tcG9uZW50JiYoaSs9J3RhZzoiJytlLnRhZysnIiwnKTtmb3IodmFyIGE9MDthPHQuZGF0YUdlbkZucy5sZW5ndGg7YSsrKWkrPXQuZGF0YUdlbkZuc1thXShlKTtpZihlLmF0dHJzJiYoaSs9ImF0dHJzOnsiK3dhKGUuYXR0cnMpKyJ9LCIpLGUucHJvcHMmJihpKz0iZG9tUHJvcHM6eyIrd2EoZS5wcm9wcykrIn0sIiksZS5ldmVudHMmJihpKz1zYShlLmV2ZW50cywhMSx0Lndhcm4pKyIsIiksZS5uYXRpdmVFdmVudHMmJihpKz1zYShlLm5hdGl2ZUV2ZW50cywhMCx0Lndhcm4pKyIsIiksZS5zbG90VGFyZ2V0JiYhZS5zbG90U2NvcGUmJihpKz0ic2xvdDoiK2Uuc2xvdFRhcmdldCsiLCIpLGUuc2NvcGVkU2xvdHMmJihpKz0obj1lLnNjb3BlZFNsb3RzLHI9dCwic2NvcGVkU2xvdHM6X3UoWyIrT2JqZWN0LmtleXMobikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnYShlLG5bZV0scil9KS5qb2luKCIsIikrIl0pLCIpKSxlLm1vZGVsJiYoaSs9Im1vZGVsOnt2YWx1ZToiK2UubW9kZWwudmFsdWUrIixjYWxsYmFjazoiK2UubW9kZWwuY2FsbGJhY2srIixleHByZXNzaW9uOiIrZS5tb2RlbC5leHByZXNzaW9uKyJ9LCIpLGUuaW5saW5lVGVtcGxhdGUpe3ZhciBzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGlsZHJlblswXTtpZigxPT09bi50eXBlKXt2YXIgcj1wYShuLHQub3B0aW9ucyk7cmV0dXJuImlubGluZVRlbXBsYXRlOntyZW5kZXI6ZnVuY3Rpb24oKXsiK3IucmVuZGVyKyJ9LHN0YXRpY1JlbmRlckZuczpbIityLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uKCl7IitlKyJ9In0pLmpvaW4oIiwiKSsiXX0ifX0oZSx0KTtzJiYoaSs9cysiLCIpfXJldHVybiBpPWkucmVwbGFjZSgvLCQvLCIiKSsifSIsZS53cmFwRGF0YSYmKGk9ZS53cmFwRGF0YShpKSksZS53cmFwTGlzdGVuZXJzJiYoaT1lLndyYXBMaXN0ZW5lcnMoaSkpLGl9ZnVuY3Rpb24gZ2EoZSx0LG4pe3JldHVybiB0LmZvciYmIXQuZm9yUHJvY2Vzc2VkPyhyPWUsbz1uLGE9KGk9dCkuZm9yLHM9aS5hbGlhcyxjPWkuaXRlcmF0b3IxPyIsIitpLml0ZXJhdG9yMToiIixsPWkuaXRlcmF0b3IyPyIsIitpLml0ZXJhdG9yMjoiIixpLmZvclByb2Nlc3NlZD0hMCwiX2woKCIrYSsiKSxmdW5jdGlvbigiK3MrYytsKyIpe3JldHVybiAiK2dhKHIsaSxvKSsifSkiKToie2tleToiK2UrIixmbjoiKygiZnVuY3Rpb24oIitTdHJpbmcodC5zbG90U2NvcGUpKyIpe3JldHVybiAiKygidGVtcGxhdGUiPT09dC50YWc/dC5pZj90LmlmKyI/IisoX2EodCxuKXx8InVuZGVmaW5lZCIpKyI6dW5kZWZpbmVkIjpfYSh0LG4pfHwidW5kZWZpbmVkIjpkYSh0LG4pKSsifSIpKyJ9Ijt2YXIgcixpLG8sYSxzLGMsbH1mdW5jdGlvbiBfYShlLHQsbixyLGkpe3ZhciBvPWUuY2hpbGRyZW47aWYoby5sZW5ndGgpe3ZhciBhPW9bMF07aWYoMT09PW8ubGVuZ3RoJiZhLmZvciYmInRlbXBsYXRlIiE9PWEudGFnJiYic2xvdCIhPT1hLnRhZylyZXR1cm4ocnx8ZGEpKGEsdCk7dmFyIHM9bj9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpZigxPT09aS50eXBlKXtpZihiYShpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGJhKGUuYmxvY2spfSkpe249MjticmVha30odChpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5ibG9jayl9KSkmJihuPTEpfX1yZXR1cm4gbn0obyx0Lm1heWJlQ29tcG9uZW50KTowLGM9aXx8JGE7cmV0dXJuIlsiK28ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUsdCl9KS5qb2luKCIsIikrIl0iKyhzPyIsIitzOiIiKX19ZnVuY3Rpb24gYmEoZSl7cmV0dXJuIHZvaWQgMCE9PWUuZm9yfHwidGVtcGxhdGUiPT09ZS50YWd8fCJzbG90Ij09PWUudGFnfWZ1bmN0aW9uICRhKGUsdCl7cmV0dXJuIDE9PT1lLnR5cGU/ZGEoZSx0KTozPT09ZS50eXBlJiZlLmlzQ29tbWVudD8ocj1lLCJfZSgiK0pTT04uc3RyaW5naWZ5KHIudGV4dCkrIikiKToiX3YoIisoMj09PShuPWUpLnR5cGU/bi5leHByZXNzaW9uOkNhKEpTT04uc3RyaW5naWZ5KG4udGV4dCkpKSsiKSI7dmFyIG4scn1mdW5jdGlvbiB3YShlKXtmb3IodmFyIHQ9IiIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3QrPSciJytyLm5hbWUrJyI6JytDYShyLnZhbHVlKSsiLCJ9cmV0dXJuIHQuc2xpY2UoMCwtMSl9ZnVuY3Rpb24gQ2EoZSl7cmV0dXJuIGUucmVwbGFjZSgvXHUyMDI4L2csIlxcdTIwMjgiKS5yZXBsYWNlKC9cdTIwMjkvZywiXFx1MjAyOSIpfW5ldyBSZWdFeHAoIlxcYiIrImRvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3Qsc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LGV4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHMiLnNwbGl0KCIsIikuam9pbigiXFxifFxcYiIpKyJcXGIiKSxuZXcgUmVnRXhwKCJcXGIiKyJkZWxldGUsdHlwZW9mLHZvaWQiLnNwbGl0KCIsIikuam9pbigiXFxzKlxcKFteXFwpXSpcXCl8XFxiIikrIlxccypcXChbXlxcKV0qXFwpIik7ZnVuY3Rpb24geGEodCxuKXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbih0KX1jYXRjaChlKXtyZXR1cm4gbi5wdXNoKHtlcnI6ZSxjb2RlOnR9KSwkfX12YXIga2EsQWEsT2E9KGthPWZ1bmN0aW9uKGUsdCl7dmFyIG49SG8oZS50cmltKCksdCk7ITEhPT10Lm9wdGltaXplJiZlYShuLHQpO3ZhciByPXBhKG4sdCk7cmV0dXJue2FzdDpuLHJlbmRlcjpyLnJlbmRlcixzdGF0aWNSZW5kZXJGbnM6ci5zdGF0aWNSZW5kZXJGbnN9fSxmdW5jdGlvbihzKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShzKSxyPVtdLGk9W107aWYobi53YXJuPWZ1bmN0aW9uKGUsdCl7KHQ/aTpyKS5wdXNoKGUpfSx0KWZvcih2YXIgbyBpbiB0Lm1vZHVsZXMmJihuLm1vZHVsZXM9KHMubW9kdWxlc3x8W10pLmNvbmNhdCh0Lm1vZHVsZXMpKSx0LmRpcmVjdGl2ZXMmJihuLmRpcmVjdGl2ZXM9bShPYmplY3QuY3JlYXRlKHMuZGlyZWN0aXZlc3x8bnVsbCksdC5kaXJlY3RpdmVzKSksdCkibW9kdWxlcyIhPT1vJiYiZGlyZWN0aXZlcyIhPT1vJiYobltvXT10W29dKTt2YXIgYT1rYShlLG4pO3JldHVybiBhLmVycm9ycz1yLGEudGlwcz1pLGF9cmV0dXJue2NvbXBpbGU6ZSxjb21waWxlVG9GdW5jdGlvbnM6KGM9ZSxsPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oZSx0LG4peyh0PW0oe30sdCkpLndhcm4sZGVsZXRlIHQud2Fybjt2YXIgcj10LmRlbGltaXRlcnM/U3RyaW5nKHQuZGVsaW1pdGVycykrZTplO2lmKGxbcl0pcmV0dXJuIGxbcl07dmFyIGk9YyhlLHQpLG89e30sYT1bXTtyZXR1cm4gby5yZW5kZXI9eGEoaS5yZW5kZXIsYSksby5zdGF0aWNSZW5kZXJGbnM9aS5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB4YShlLGEpfSksbFtyXT1vfSl9O3ZhciBjLGx9KShZbykuY29tcGlsZVRvRnVuY3Rpb25zO2Z1bmN0aW9uIFNhKGUpe3JldHVybihBYT1BYXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1lPyc8YSBocmVmPSJcbiIvPic6JzxkaXYgYT0iXG4iLz4nLDA8QWEuaW5uZXJIVE1MLmluZGV4T2YoIiYjMTA7Iil9dmFyIFRhPSEhQiYmU2EoITEpLEVhPSEhQiYmU2EoITApLGphPWUoZnVuY3Rpb24oZSl7dmFyIHQ9Sm4oZSk7cmV0dXJuIHQmJnQuaW5uZXJIVE1MfSksTmE9aG4ucHJvdG90eXBlLiRtb3VudDtyZXR1cm4gaG4ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe2lmKChlPWUmJkpuKGUpKT09PWRvY3VtZW50LmJvZHl8fGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy4kb3B0aW9ucztpZighbi5yZW5kZXIpe3ZhciByPW4udGVtcGxhdGU7aWYocilpZigic3RyaW5nIj09dHlwZW9mIHIpIiMiPT09ci5jaGFyQXQoMCkmJihyPWphKHIpKTtlbHNle2lmKCFyLm5vZGVUeXBlKXJldHVybiB0aGlzO3I9ci5pbm5lckhUTUx9ZWxzZSBlJiYocj1mdW5jdGlvbihlKXt7aWYoZS5vdXRlckhUTUwpcmV0dXJuIGUub3V0ZXJIVE1MO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmFwcGVuZENoaWxkKGUuY2xvbmVOb2RlKCEwKSksdC5pbm5lckhUTUx9fShlKSk7aWYocil7dmFyIGk9T2Eocix7c2hvdWxkRGVjb2RlTmV3bGluZXM6VGEsc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOkVhLGRlbGltaXRlcnM6bi5kZWxpbWl0ZXJzLGNvbW1lbnRzOm4uY29tbWVudHN9LHRoaXMpLG89aS5yZW5kZXIsYT1pLnN0YXRpY1JlbmRlckZucztuLnJlbmRlcj1vLG4uc3RhdGljUmVuZGVyRm5zPWF9fXJldHVybiBOYS5jYWxsKHRoaXMsZSx0KX0saG4uY29tcGlsZT1PYSxobn0pOw=='></script>    -->

	<style id="style_yokkmokk">
		@font-face {
			font-family: yokkmokkOT;
			src: url("data:font/ttf;base64,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AEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgCjAFcAWABZAJYAWgChAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwANAJwAnQCeAJ8AoAChAAAAAAAQAAAAqAkIBQABAQMCAwQFAwMEAgQCBQQCAwMDAwQDAgQCAgMEAwIGAwgFBAQEBAIEBAMGBQQEBQQCAwMEBgUEAwICAgQDBgQEAgQFAgQEAgYEAwQEBAICAwMGBQQDAwMFAgICBgYGBgYGCAgEBAQCAgIFBAQEBAQEAwMDAwMEBAQEBAQHBgQEBAICAgQDAwMDAwMDAwMDCAYCAgICAgIBAgIEAgICBgUBBQUAAAoJBQABAQMCBAUGAwMFAgQCBQUCBAMDBAUDAgQCAgMEAwMHAwkGBAQFBAIEBAMHBgUEBgQCBAQEBwUEAwICAwUDBwUEAgUGAgQEAgYFAwUFBQICAwMGBQQDAwMGAwIDBwcHBwcHCQkEBAQCAgIGBQUFBQUFBAQEBAMFBQUFBQUIBwQEBAICAgUDAwMDAwQDAwMDCAcDAwICAgIBAgIEAgICBwUBBQUAAAsKBgACAgQCBAUGAwMFAgQCBgUDBAQEBAUEAwUDAgMEAwMIAwoGBQUFBQIEBQMHBgUEBgUDBAQECAYFAwIDAwUDCAUFAwUGAgQEAgcFBAUFBQMDAwMHBgUDBAQGAwIDCAgICAgICQoFBQUCAgIGBQUFBQUFBAQEBAMFBQUFBQUJCAUFBQICAgUEBAQEBAQDAwMDCQgDAwICAwIBAgIEAgICBwYBBgYAAAwLBgACAgQDBAYHBAQGAgUDBgYDBQQEBAUEAwUDAwQFBAMIAwsHBQUFBQIFBQQIBwYFBwUDBQUFCAYFAwMDAwYDCQYFAwUHAgUFAggGBAYGBgMDBAQHBgUDBAQHAwMDCAgICAgICgsFBQUCAgIHBgYGBgYGBQUFBQMGBgYGBgYJCQUFBQICAgYEBAQEBAQEBAQECggDAwMDAwIBAwMFAwMDCAYBBgYAAA0MBwACAgQDBQYHBAQGAwUDBwYDBQQFBQYEAwYDAwQFBAMJBAwIBgYGBQMFBgQJBwYFCAUDBQUFCQcFBAMDAwYECQYGAwYIAwUFAggGBQYGBgMDBAQIBwYEBAQHAwMDCQkJCQkJCwwGBgYDAwMHBgYGBgYGBQUFBQQGBgYGBgYKCQYGBgMDAwYFBQUFBQUEBAQECwkDAwMDAwIBAwMFAwMDCQcCBwcAAA4NBwACAgUDBQcIBAQHAwUDBwcDBQUFBQYFAwYDAwQFBAQKBAwIBgYGBgMGBgQJCAcGCAYDBQUGCggGBAMDBAcECgcGAwYIAwYGAwkHBQcHBwMDBAQJBwYEBQUIBAMECgoKCgoKDA0GBgYDAwMIBwcHBwcHBQUFBQQHBwcHBwcLCgYGBgMDAwcFBQUFBQUEBAQEDAoEBAMDAwMBAwMGAwMDCQcCBwcAAA8OCAACAgUDBgcIBQUHAwYDCAcDBgUFBQcFBAcEAwUGBQQLBA0JBwcHBgMGBwUKCAcGCQYEBgYGCggGBAMEBAcECwcHBAcJAwYGAwkHBQcHBwQDBQUJCAYEBQUJBAMECwsLCwsLDQ4HBwcDAwMIBwcHBwcHBgYGBgQHBwcHBwcMCwcHBwMDAwcFBQUFBQUFBQUFDQoEBAMDBAMCAwMGAwMDCggCCAgAABAPCAACAgUEBggJBQUIAwYECAgEBgUGBgcFBAcEBAUGBQQLBQ4JBwcHBwMGBwULCQgGCQcEBgYGCwkHBAQEBAgFCwgHBAcJAwcGAwoHBggIBwQEBQUKCAcEBQUJBAMECwsLCwsLDg8HBwcDAwMJCAgICAgIBgYGBgUICAgICAgNCwcHBwMDAwcGBgYGBgYFBQUFDgsEBAQEBAMCAwMGBAQECwgCCAgAABEQCQACAgYEBggJBQUIAwcECQgEBwYGBggGBAcEBAUHBQUMBQ8KBwcIBwMHCAULCggHCgcEBgYHDAkHBQQEBAgFDAgHBAgKAwcHAwsIBggICAQEBQUKCQcFBgYKBAQFDAwMDAwMDxAHCAcDAwMKCAgICAgIBgYGBgUICAgICAgNDAcHBwMDAwgGBgYGBgYFBQUFDgwFBQQEBAMCBAQHBAQECwkCCQkAABIQCQADAwYEBwkKBgYJBAcECQkEBwYGBggGBAgEBAYHBgUNBRAKCAgICAQHCAUMCgkHCwcEBwcHDQoIBQQEBQkFDQkIBAgKBAcHAwsIBgkJCAQEBQYLCQgFBgYKBQQFDQ0NDQ0NDxAICAgEBAQKCQkJCQkJBwcHBwUJCQkJCQkODQgICAQEBAgGBgYGBgYFBQUFDwwFBQQEBAMCBAQHBAQEDAkCCQkAABMRCgADAwYEBwkLBgYJBAcECgkEBwYHBwkGBAgFBAYHBgUNBhELCAgJCAQICAYNCwkICwgEBwcIDQoIBQQFBQkFDQkIBAkLBAgIBAwJBwkJCQQEBgYMCggFBgYLBQQFDQ0NDQ0NEBEICAgEBAQLCQkJCQkJBwcHBwUJCQkJCQkPDQgICAQEBAkHBwcHBwcGBgYGEA0FBQQEBQQCBAQIBAQEDQoCCgoAABQSCgADAwcEBwoLBgYKBAgECgoFCAcHBwkHBQkFBAYIBgUOBhIMCQkJCAQICQYNCwoIDAgFCAgIDgsIBgUFBQoGDgoJBQkMBAgIBA0JBwoKCQUFBgYMCgkGBwcLBQQFDg4ODg4OERIJCQkEBAQLCgoKCgoKCAgICAYKCgoKCgoQDgkJCQQEBAkHBwcHBwcGBgYGEQ4FBQUFBQQCBAQIBQUEDgoCCgoAABUTCwADAwcFCAoMBgYKBAgFCwoFCAcHBwoHBQkFBQYIBgYPBhMMCQkJCQQJCQYODAoIDAkFCAgIDwsJBgUFBQoGDwoJBQoMBAkIBA0KBwoKCgUFBgcNCwkGBwcMBQQGDw8PDw8PEhMJCQkEBAQMCgoKCgoKCAgICAYKCgoKCgoRDwkJCQQEBAoHBwcHBwcGBgYGEg4GBgUFBQQCBAQIBQUFDgsDCwsAABYUCwADAwcFCAsMBwcLBAkFCwoFCAcICAoHBQoFBQcJBwYPBhQNCgoKCQQJCgcPDAoJDQkFCAgJDwwJBgUFBgsGEAsKBQoNBAkJBA4KCAsLCgUFBwcOCwkGBwcNBgUGDw8PDw8PExQKCgoEBAQMCgoKCgoLCAgICAYLCwsLCwsREAoKCgQEBAoICAgICAgHBwcHEw8GBgUFBQQCBQUJBQUFDwsDCwsAABcVDAADAwcFCQsNBwcLBQkFDAsFCQcICAsIBQoGBQcJBwYQBxQNCgoKCgUJCgcPDQsJDQoFCQkJEAwKBgUGBgsHEAsKBQoNBQkJBA4LCAsLCwUFBwcODAoGBwgNBgUGEBAQEBAQFBUKCgoFBQUNCwsLCwsLCQkJCQcLCwsLCwsSEAoKCgUFBQsICAgICAgHBwcHFBAGBgUFBgQCBQUJBQUFEAwDDAwAABgWDAADAwgFCQwNBwcMBQkFDAsGCQgICAsIBgoGBQcJBwYRBxUOCgoLCgUKCwcQDgsKDgoGCQkKEQ0KBwUGBgsHEQwKBgsOBQoKBA8LCAwMCwYGBwgPDAoHCAgOBgUGERERERERFRYKCwoFBQUOCwsLCwsMCQkJCQcLCwsLCwsTEQoKCgUFBQsICAgICAgHBwcHFBEGBgUFBgQCBQUKBQUFEAwDDAwAAAABAV0BkAAFAAICvAKKAAAAjwK8AooAAAHFADIBAwAAAAAEAAAAAAAAAAAAAAMAAAAAAAAAAAAAAABNQUNSAEAAICIZAyH/OQAAAyEAxwAAAAEAAAAAAAAAAQAAgAAAAACLAT8AAGAAAbQCdVlva2ttb2trICAgICAgICD/////N////llPS1IwMAAAAAAAAAABAAAAAQAAmJpL9V8PPPUAAAPoAAAAALfnFZIAAAAAt+cVkv+2/zkDawMhAAAAAwACAAEAAAAAAAEAAAMh/zkAAAOQ/7b/uANrAAEAAAAAAAAAAAAAAAAAAACkAAEAAACkAJgADQAAAAAAAgAIAEAACgAAAF0AvgABAAE=");
			}
		@font-face {
			font-family: 'yokkmokkOT_file';
			src: url('./fonts/yokkmokkOT.otf'); /* IE 5-8 */ 
			src: local('?'),             /* sneakily trick IE */
		        url('./fonts/yokkmokk.ttf') format('truetype'), /* Opera, Safari */
		        url('./fonts/yokkmokkOT.woff') format('woff'),    /* FF 3.6, Chrome 5, IE9 */
		        url('./fonts/yokkmokkOT.svg#font') format('svg'); /* iOS */
			}

		body { 
//				document.getElementById("body").style.font = "italic bold 20px arial,serif"; 
//				background: url("data:font/ttf;base64,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AEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgCjAFcAWABZAJYAWgChAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwANAJwAnQCeAJ8AoAChAAAAAAAQAAAAqAkIBQABAQMCAwQFAwMEAgQCBQQCAwMDAwQDAgQCAgMEAwIGAwgFBAQEBAIEBAMGBQQEBQQCAwMEBgUEAwICAgQDBgQEAgQFAgQEAgYEAwQEBAICAwMGBQQDAwMFAgICBgYGBgYGCAgEBAQCAgIFBAQEBAQEAwMDAwMEBAQEBAQHBgQEBAICAgQDAwMDAwMDAwMDCAYCAgICAgIBAgIEAgICBgUBBQUAAAoJBQABAQMCBAUGAwMFAgQCBQUCBAMDBAUDAgQCAgMEAwMHAwkGBAQFBAIEBAMHBgUEBgQCBAQEBwUEAwICAwUDBwUEAgUGAgQEAgYFAwUFBQICAwMGBQQDAwMGAwIDBwcHBwcHCQkEBAQCAgIGBQUFBQUFBAQEBAMFBQUFBQUIBwQEBAICAgUDAwMDAwQDAwMDCAcDAwICAgIBAgIEAgICBwUBBQUAAAsKBgACAgQCBAUGAwMFAgQCBgUDBAQEBAUEAwUDAgMEAwMIAwoGBQUFBQIEBQMHBgUEBgUDBAQECAYFAwIDAwUDCAUFAwUGAgQEAgcFBAUFBQMDAwMHBgUDBAQGAwIDCAgICAgICQoFBQUCAgIGBQUFBQUFBAQEBAMFBQUFBQUJCAUFBQICAgUEBAQEBAQDAwMDCQgDAwICAwIBAgIEAgICBwYBBgYAAAwLBgACAgQDBAYHBAQGAgUDBgYDBQQEBAUEAwUDAwQFBAMIAwsHBQUFBQIFBQQIBwYFBwUDBQUFCAYFAwMDAwYDCQYFAwUHAgUFAggGBAYGBgMDBAQHBgUDBAQHAwMDCAgICAgICgsFBQUCAgIHBgYGBgYGBQUFBQMGBgYGBgYJCQUFBQICAgYEBAQEBAQEBAQECggDAwMDAwIBAwMFAwMDCAYBBgYAAA0MBwACAgQDBQYHBAQGAwUDBwYDBQQFBQYEAwYDAwQFBAMJBAwIBgYGBQMFBgQJBwYFCAUDBQUFCQcFBAMDAwYECQYGAwYIAwUFAggGBQYGBgMDBAQIBwYEBAQHAwMDCQkJCQkJCwwGBgYDAwMHBgYGBgYGBQUFBQQGBgYGBgYKCQYGBgMDAwYFBQUFBQUEBAQECwkDAwMDAwIBAwMFAwMDCQcCBwcAAA4NBwACAgUDBQcIBAQHAwUDBwcDBQUFBQYFAwYDAwQFBAQKBAwIBgYGBgMGBgQJCAcGCAYDBQUGCggGBAMDBAcECgcGAwYIAwYGAwkHBQcHBwMDBAQJBwYEBQUIBAMECgoKCgoKDA0GBgYDAwMIBwcHBwcHBQUFBQQHBwcHBwcLCgYGBgMDAwcFBQUFBQUEBAQEDAoEBAMDAwMBAwMGAwMDCQcCBwcAAA8OCAACAgUDBgcIBQUHAwYDCAcDBgUFBQcFBAcEAwUGBQQLBA0JBwcHBgMGBwUKCAcGCQYEBgYGCggGBAMEBAcECwcHBAcJAwYGAwkHBQcHBwQDBQUJCAYEBQUJBAMECwsLCwsLDQ4HBwcDAwMIBwcHBwcHBgYGBgQHBwcHBwcMCwcHBwMDAwcFBQUFBQUFBQUFDQoEBAMDBAMCAwMGAwMDCggCCAgAABAPCAACAgUEBggJBQUIAwYECAgEBgUGBgcFBAcEBAUGBQQLBQ4JBwcHBwMGBwULCQgGCQcEBgYGCwkHBAQEBAgFCwgHBAcJAwcGAwoHBggIBwQEBQUKCAcEBQUJBAMECwsLCwsLDg8HBwcDAwMJCAgICAgIBgYGBgUICAgICAgNCwcHBwMDAwcGBgYGBgYFBQUFDgsEBAQEBAMCAwMGBAQECwgCCAgAABEQCQACAgYEBggJBQUIAwcECQgEBwYGBggGBAcEBAUHBQUMBQ8KBwcIBwMHCAULCggHCgcEBgYHDAkHBQQEBAgFDAgHBAgKAwcHAwsIBggICAQEBQUKCQcFBgYKBAQFDAwMDAwMDxAHCAcDAwMKCAgICAgIBgYGBgUICAgICAgNDAcHBwMDAwgGBgYGBgYFBQUFDgwFBQQEBAMCBAQHBAQECwkCCQkAABIQCQADAwYEBwkKBgYJBAcECQkEBwYGBggGBAgEBAYHBgUNBRAKCAgICAQHCAUMCgkHCwcEBwcHDQoIBQQEBQkFDQkIBAgKBAcHAwsIBgkJCAQEBQYLCQgFBgYKBQQFDQ0NDQ0NDxAICAgEBAQKCQkJCQkJBwcHBwUJCQkJCQkODQgICAQEBAgGBgYGBgYFBQUFDwwFBQQEBAMCBAQHBAQEDAkCCQkAABMRCgADAwYEBwkLBgYJBAcECgkEBwYHBwkGBAgFBAYHBgUNBhELCAgJCAQICAYNCwkICwgEBwcIDQoIBQQFBQkFDQkIBAkLBAgIBAwJBwkJCQQEBgYMCggFBgYLBQQFDQ0NDQ0NEBEICAgEBAQLCQkJCQkJBwcHBwUJCQkJCQkPDQgICAQEBAkHBwcHBwcGBgYGEA0FBQQEBQQCBAQIBAQEDQoCCgoAABQSCgADAwcEBwoLBgYKBAgECgoFCAcHBwkHBQkFBAYIBgUOBhIMCQkJCAQICQYNCwoIDAgFCAgIDgsIBgUFBQoGDgoJBQkMBAgIBA0JBwoKCQUFBgYMCgkGBwcLBQQFDg4ODg4OERIJCQkEBAQLCgoKCgoKCAgICAYKCgoKCgoQDgkJCQQEBAkHBwcHBwcGBgYGEQ4FBQUFBQQCBAQIBQUEDgoCCgoAABUTCwADAwcFCAoMBgYKBAgFCwoFCAcHBwoHBQkFBQYIBgYPBhMMCQkJCQQJCQYODAoIDAkFCAgIDwsJBgUFBQoGDwoJBQoMBAkIBA0KBwoKCgUFBgcNCwkGBwcMBQQGDw8PDw8PEhMJCQkEBAQMCgoKCgoKCAgICAYKCgoKCgoRDwkJCQQEBAoHBwcHBwcGBgYGEg4GBgUFBQQCBAQIBQUFDgsDCwsAABYUCwADAwcFCAsMBwcLBAkFCwoFCAcICAoHBQoFBQcJBwYPBhQNCgoKCQQJCgcPDAoJDQkFCAgJDwwJBgUFBgsGEAsKBQoNBAkJBA4KCAsLCgUFBwcOCwkGBwcNBgUGDw8PDw8PExQKCgoEBAQMCgoKCgoLCAgICAYLCwsLCwsREAoKCgQEBAoICAgICAgHBwcHEw8GBgUFBQQCBQUJBQUFDwsDCwsAABcVDAADAwcFCQsNBwcLBQkFDAsFCQcICAsIBQoGBQcJBwYQBxQNCgoKCgUJCgcPDQsJDQoFCQkJEAwKBgUGBgsHEAsKBQoNBQkJBA4LCAsLCwUFBwcODAoGBwgNBgUGEBAQEBAQFBUKCgoFBQUNCwsLCwsLCQkJCQcLCwsLCwsSEAoKCgUFBQsICAgICAgHBwcHFBAGBgUFBgQCBQUJBQUFEAwDDAwAABgWDAADAwgFCQwNBwcMBQkFDAsGCQgICAsIBgoGBQcJBwYRBxUOCgoLCgUKCwcQDgsKDgoGCQkKEQ0KBwUGBgsHEQwKBgsOBQoKBA8LCAwMCwYGBwgPDAoHCAgOBgUGERERERERFRYKCwoFBQUOCwsLCwsMCQkJCQcLCwsLCwsTEQoKCgUFBQsICAgICAgHBwcHFBEGBgUFBgQCBQUKBQUFEAwDDAwAAAABAV0BkAAFAAICvAKKAAAAjwK8AooAAAHFADIBAwAAAAAEAAAAAAAAAAAAAAMAAAAAAAAAAAAAAABNQUNSAEAAICIZAyH/OQAAAyEAxwAAAAEAAAAAAAAAAQAAgAAAAACLAT8AAGAAAbQCdVlva2ttb2trICAgICAgICD/////N////llPS1IwMAAAAAAAAAABAAAAAQAAmJpL9V8PPPUAAAPoAAAAALfnFZIAAAAAt+cVkv+2/zkDawMhAAAAAwACAAEAAAAAAAEAAAMh/zkAAAOQ/7b/uANrAAEAAAAAAAAAAAAAAAAAAACkAAEAAACkAJgADQAAAAAAAgAIAEAACgAAAF0AvgABAAE=");
//				color: black;
//				background-color: lightblue;
				url_bgimg: "/imgs/bg/bg_frax_ribbon.jpg";
				background: url(url_bgimg) darkslategrey;
				color: ivory;
				font-size:62.5%; 
				font-family: yokkmokkOT;
				font-size: 22pt;
				}

//			h1 { font-size: 2.4em; } /* =24px */
//			h1 { font-size: 64pt; color: ivory; font-family: yokkmokkOT; } /* =24px */
//			h1 { font-size: 32pt; color: ivory; font-family: yokkmokkOT; } /* =24px */
//			h2 { font-size: 28pt; color: ivory; font-family: yokkmokkOT } /* =24px */
//			h1 { font-size: 26pt; color: darksalmon; font-family: yokkmokkOT; } /* =24px */
//			h1 { font-size: 26pt; color: burlywood; font-family: yokkmokkOT; } /* =24px */
			h1 { font-size: 26pt; color: cornsilk; font-family: yokkmokkOT; } /* =24px */
			h2 { font-size: 22pt; color: grey; font-family: yokkmokkOT } /* =24px */
			h3 { font-size: 18pt; color: grey; font-family: "times new roman"; } /* =24px */
			h4 { font-size: 14pt; color: grey; font-family: "times new roman"; } /* =24px */
			p  { font-size: 10pt; } /* =14px */
			dl { font-size: 20pt; color: ivory; font-family: arial;  } /* =14px? */
			dd { font-size: 18pt; color: ivory; font-family: arial;  } /* =14px? */

			ol { font-size: 20pt; color: ivory; font-family: "times new roman";  } /* =14px? */
			li { font-size: 18pt; color: ivory; font-family: "times new roman";  } /* =14px? */

			</style>    
	




	<style id="style_mov">
/* Style the navigation menu */
/* Hide the links inside the navigation menu (except for logo/home) */
/* Style navigation menu links */
/* Style the hamburger menu */
/* Add a grey background color on mouse-over */

		.topnav {
			overflow: hidden;
			background-color: #333;
			position: relative;
			}
		.topnav #myLinks {display: none;}
		.topnav a {
			color: white;
			padding: 14px 16px;
			text-decoration: none;
			font-size: 17px;
			display: block;
			}
		.topnav a.icon {
			background: black;
			height: 100;
			width: 200;
			display: block;
			position: absolute;
			right: 0;
			top: 0;
//			url_bgimg: "/imgs/btn/koeye.png";
//			background: url(url_bgimg) darkslategrey;
			}
		.topnav a:hover {
//			background-color: #ddd;
			background-color: white;
			color: black;
//			height: 100;
			width: 200;
			}

/* Style the active link (or home/logo) */
		.active {
//			background-color: #4CAF50;
			background-color: linen;
			color: white;
			} 
		</style>

	<script id="script_mobile">
/* Toggle between showing and hiding the navigation menu links when the user clicks on the hamburger menu / bar icon */
		function myFunction() {
			var x = document.getElementById("myLinks");
			if (x.style.display === "block") {
				x.style.display = "none";
				} 
			else {
				x.style.display = "block";
  				}
			} 
		</script>
<!--
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
	<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
	<script type="text/javascript" src="/sl/bg/jquery.easing.1.3.js"></script>
	<script type="text/javascript" src="/sl/bg/jquery.mousewheel.min.js"></script>
	<script type="text/javascript" src="/zm/ZoomifyImageViewer.js"></script>
	-->

	<script  id= "script_sl_jquery_js" type="text/javascript" src="data:/text/plain;base64,LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuNC40CiAqIGh0dHA6Ly9qcXVlcnkuY29tLwogKgogKiBDb3B5cmlnaHQgMjAxMCwgSm9obiBSZXNpZwogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBJbmNsdWRlcyBTaXp6bGUuanMKICogaHR0cDovL3NpenpsZWpzLmNvbS8KICogQ29weXJpZ2h0IDIwMTAsIFRoZSBEb2pvIEZvdW5kYXRpb24KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgogKgogKiBEYXRlOiBUaHUgTm92IDExIDE5OjA0OjUzIDIwMTAgLTA1MDAKICovCihmdW5jdGlvbihFLEIpe2Z1bmN0aW9uIGthKGEsYixkKXtpZihkPT09QiYmYS5ub2RlVHlwZT09PTEpe2Q9YS5nZXRBdHRyaWJ1dGUoImRhdGEtIitiKTtpZih0eXBlb2YgZD09PSJzdHJpbmciKXt0cnl7ZD1kPT09InRydWUiP3RydWU6ZD09PSJmYWxzZSI/ZmFsc2U6ZD09PSJudWxsIj9udWxsOiFjLmlzTmFOKGQpP3BhcnNlRmxvYXQoZCk6SmEudGVzdChkKT9jLnBhcnNlSlNPTihkKTpkfWNhdGNoKGUpe31jLmRhdGEoYSxiLGQpfWVsc2UgZD1CfXJldHVybiBkfWZ1bmN0aW9uIFUoKXtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gY2EoKXtyZXR1cm4gdHJ1ZX1mdW5jdGlvbiBsYShhLGIsZCl7ZFswXS50eXBlPWE7cmV0dXJuIGMuZXZlbnQuaGFuZGxlLmFwcGx5KGIsZCl9ZnVuY3Rpb24gS2EoYSl7dmFyIGIsZCxlLGYsaCxsLGssbyx4LHIsQSxDPVtdO2Y9W107aD1jLmRhdGEodGhpcyx0aGlzLm5vZGVUeXBlPyJldmVudHMiOiJfX2V2ZW50c19fIik7aWYodHlwZW9mIGg9PT0iZnVuY3Rpb24iKWg9CmguZXZlbnRzO2lmKCEoYS5saXZlRmlyZWQ9PT10aGlzfHwhaHx8IWgubGl2ZXx8YS5idXR0b24mJmEudHlwZT09PSJjbGljayIpKXtpZihhLm5hbWVzcGFjZSlBPVJlZ0V4cCgiKF58XFwuKSIrYS5uYW1lc3BhY2Uuc3BsaXQoIi4iKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKTthLmxpdmVGaXJlZD10aGlzO3ZhciBKPWgubGl2ZS5zbGljZSgwKTtmb3Ioaz0wO2s8Si5sZW5ndGg7aysrKXtoPUpba107aC5vcmlnVHlwZS5yZXBsYWNlKFgsIiIpPT09YS50eXBlP2YucHVzaChoLnNlbGVjdG9yKTpKLnNwbGljZShrLS0sMSl9Zj1jKGEudGFyZ2V0KS5jbG9zZXN0KGYsYS5jdXJyZW50VGFyZ2V0KTtvPTA7Zm9yKHg9Zi5sZW5ndGg7bzx4O28rKyl7cj1mW29dO2ZvcihrPTA7azxKLmxlbmd0aDtrKyspe2g9SltrXTtpZihyLnNlbGVjdG9yPT09aC5zZWxlY3RvciYmKCFBfHxBLnRlc3QoaC5uYW1lc3BhY2UpKSl7bD1yLmVsZW07ZT1udWxsO2lmKGgucHJlVHlwZT09PSJtb3VzZWVudGVyInx8CmgucHJlVHlwZT09PSJtb3VzZWxlYXZlIil7YS50eXBlPWgucHJlVHlwZTtlPWMoYS5yZWxhdGVkVGFyZ2V0KS5jbG9zZXN0KGguc2VsZWN0b3IpWzBdfWlmKCFlfHxlIT09bClDLnB1c2goe2VsZW06bCxoYW5kbGVPYmo6aCxsZXZlbDpyLmxldmVsfSl9fX1vPTA7Zm9yKHg9Qy5sZW5ndGg7bzx4O28rKyl7Zj1DW29dO2lmKGQmJmYubGV2ZWw+ZClicmVhazthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtO2EuZGF0YT1mLmhhbmRsZU9iai5kYXRhO2EuaGFuZGxlT2JqPWYuaGFuZGxlT2JqO0E9Zi5oYW5kbGVPYmoub3JpZ0hhbmRsZXIuYXBwbHkoZi5lbGVtLGFyZ3VtZW50cyk7aWYoQT09PWZhbHNlfHxhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2Q9Zi5sZXZlbDtpZihBPT09ZmFsc2UpYj1mYWxzZTtpZihhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWt9fXJldHVybiBifX1mdW5jdGlvbiBZKGEsYil7cmV0dXJuKGEmJmEhPT0iKiI/YSsiLiI6IiIpK2IucmVwbGFjZShMYSwKImAiKS5yZXBsYWNlKE1hLCImIil9ZnVuY3Rpb24gbWEoYSxiLGQpe2lmKGMuaXNGdW5jdGlvbihiKSlyZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZixoKXtyZXR1cm4hIWIuY2FsbChmLGgsZik9PT1kfSk7ZWxzZSBpZihiLm5vZGVUeXBlKXJldHVybiBjLmdyZXAoYSxmdW5jdGlvbihmKXtyZXR1cm4gZj09PWI9PT1kfSk7ZWxzZSBpZih0eXBlb2YgYj09PSJzdHJpbmciKXt2YXIgZT1jLmdyZXAoYSxmdW5jdGlvbihmKXtyZXR1cm4gZi5ub2RlVHlwZT09PTF9KTtpZihOYS50ZXN0KGIpKXJldHVybiBjLmZpbHRlcihiLGUsIWQpO2Vsc2UgYj1jLmZpbHRlcihiLGUpfXJldHVybiBjLmdyZXAoYSxmdW5jdGlvbihmKXtyZXR1cm4gYy5pbkFycmF5KGYsYik+PTA9PT1kfSl9ZnVuY3Rpb24gbmEoYSxiKXt2YXIgZD0wO2IuZWFjaChmdW5jdGlvbigpe2lmKHRoaXMubm9kZU5hbWU9PT0oYVtkXSYmYVtkXS5ub2RlTmFtZSkpe3ZhciBlPWMuZGF0YShhW2QrK10pLGY9Yy5kYXRhKHRoaXMsCmUpO2lmKGU9ZSYmZS5ldmVudHMpe2RlbGV0ZSBmLmhhbmRsZTtmLmV2ZW50cz17fTtmb3IodmFyIGggaW4gZSlmb3IodmFyIGwgaW4gZVtoXSljLmV2ZW50LmFkZCh0aGlzLGgsZVtoXVtsXSxlW2hdW2xdLmRhdGEpfX19KX1mdW5jdGlvbiBPYShhLGIpe2Iuc3JjP2MuYWpheCh7dXJsOmIuc3JjLGFzeW5jOmZhbHNlLGRhdGFUeXBlOiJzY3JpcHQifSk6Yy5nbG9iYWxFdmFsKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKTtiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBvYShhLGIsZCl7dmFyIGU9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodDtpZihkPT09ImJvcmRlciIpcmV0dXJuIGU7Yy5lYWNoKGI9PT0id2lkdGgiP1BhOlFhLGZ1bmN0aW9uKCl7ZHx8KGUtPXBhcnNlRmxvYXQoYy5jc3MoYSwicGFkZGluZyIrdGhpcykpfHwwKTtpZihkPT09Im1hcmdpbiIpZSs9cGFyc2VGbG9hdChjLmNzcyhhLAoibWFyZ2luIit0aGlzKSl8fDA7ZWxzZSBlLT1wYXJzZUZsb2F0KGMuY3NzKGEsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDB9KTtyZXR1cm4gZX1mdW5jdGlvbiBkYShhLGIsZCxlKXtpZihjLmlzQXJyYXkoYikmJmIubGVuZ3RoKWMuZWFjaChiLGZ1bmN0aW9uKGYsaCl7ZHx8UmEudGVzdChhKT9lKGEsaCk6ZGEoYSsiWyIrKHR5cGVvZiBoPT09Im9iamVjdCJ8fGMuaXNBcnJheShoKT9mOiIiKSsiXSIsaCxkLGUpfSk7ZWxzZSBpZighZCYmYiE9bnVsbCYmdHlwZW9mIGI9PT0ib2JqZWN0IiljLmlzRW1wdHlPYmplY3QoYik/ZShhLCIiKTpjLmVhY2goYixmdW5jdGlvbihmLGgpe2RhKGErIlsiK2YrIl0iLGgsZCxlKX0pO2Vsc2UgZShhLGIpfWZ1bmN0aW9uIFMoYSxiKXt2YXIgZD17fTtjLmVhY2gocGEuY29uY2F0LmFwcGx5KFtdLHBhLnNsaWNlKDAsYikpLGZ1bmN0aW9uKCl7ZFt0aGlzXT1hfSk7cmV0dXJuIGR9ZnVuY3Rpb24gcWEoYSl7aWYoIWVhW2FdKXt2YXIgYj1jKCI8IisKYSsiPiIpLmFwcGVuZFRvKCJib2R5IiksZD1iLmNzcygiZGlzcGxheSIpO2IucmVtb3ZlKCk7aWYoZD09PSJub25lInx8ZD09PSIiKWQ9ImJsb2NrIjtlYVthXT1kfXJldHVybiBlYVthXX1mdW5jdGlvbiBmYShhKXtyZXR1cm4gYy5pc1dpbmRvdyhhKT9hOmEubm9kZVR5cGU9PT05P2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OmZhbHNlfXZhciB0PUUuZG9jdW1lbnQsYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtpZighYi5pc1JlYWR5KXt0cnl7dC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChqKXtzZXRUaW1lb3V0KGEsMSk7cmV0dXJufWIucmVhZHkoKX19dmFyIGI9ZnVuY3Rpb24oaixzKXtyZXR1cm4gbmV3IGIuZm4uaW5pdChqLHMpfSxkPUUualF1ZXJ5LGU9RS4kLGYsaD0vXig/OltePF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0rKSQpLyxsPS9cUy8saz0vXlxzKy8sbz0vXHMrJC8seD0vXFcvLHI9L1xkLyxBPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sCkM9L15bXF0sOnt9XHNdKiQvLEo9L1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZyx3PS8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZyxJPS8oPzpefDp8LCkoPzpccypcWykrL2csTD0vKHdlYmtpdClbIFwvXShbXHcuXSspLyxnPS8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSspLyxpPS8obXNpZSkgKFtcdy5dKykvLG49Lyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKSk/LyxtPW5hdmlnYXRvci51c2VyQWdlbnQscD1mYWxzZSxxPVtdLHUseT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxNPUFycmF5LnByb3RvdHlwZS5wdXNoLE49QXJyYXkucHJvdG90eXBlLnNsaWNlLE89U3RyaW5nLnByb3RvdHlwZS50cmltLEQ9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsUj17fTtiLmZuPWIucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGosCnMpe3ZhciB2LHosSDtpZighailyZXR1cm4gdGhpcztpZihqLm5vZGVUeXBlKXt0aGlzLmNvbnRleHQ9dGhpc1swXT1qO3RoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYoaj09PSJib2R5IiYmIXMmJnQuYm9keSl7dGhpcy5jb250ZXh0PXQ7dGhpc1swXT10LmJvZHk7dGhpcy5zZWxlY3Rvcj0iYm9keSI7dGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZih0eXBlb2Ygaj09PSJzdHJpbmciKWlmKCh2PWguZXhlYyhqKSkmJih2WzFdfHwhcykpaWYodlsxXSl7SD1zP3Mub3duZXJEb2N1bWVudHx8czp0O2lmKHo9QS5leGVjKGopKWlmKGIuaXNQbGFpbk9iamVjdChzKSl7aj1bdC5jcmVhdGVFbGVtZW50KHpbMV0pXTtiLmZuLmF0dHIuY2FsbChqLHMsdHJ1ZSl9ZWxzZSBqPVtILmNyZWF0ZUVsZW1lbnQoelsxXSldO2Vsc2V7ej1iLmJ1aWxkRnJhZ21lbnQoW3ZbMV1dLFtIXSk7aj0oei5jYWNoZWFibGU/ei5mcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSk6ei5mcmFnbWVudCkuY2hpbGROb2Rlc31yZXR1cm4gYi5tZXJnZSh0aGlzLApqKX1lbHNle2lmKCh6PXQuZ2V0RWxlbWVudEJ5SWQodlsyXSkpJiZ6LnBhcmVudE5vZGUpe2lmKHouaWQhPT12WzJdKXJldHVybiBmLmZpbmQoaik7dGhpcy5sZW5ndGg9MTt0aGlzWzBdPXp9dGhpcy5jb250ZXh0PXQ7dGhpcy5zZWxlY3Rvcj1qO3JldHVybiB0aGlzfWVsc2UgaWYoIXMmJiF4LnRlc3Qoaikpe3RoaXMuc2VsZWN0b3I9ajt0aGlzLmNvbnRleHQ9dDtqPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaik7cmV0dXJuIGIubWVyZ2UodGhpcyxqKX1lbHNlIHJldHVybiFzfHxzLmpxdWVyeT8oc3x8ZikuZmluZChqKTpiKHMpLmZpbmQoaik7ZWxzZSBpZihiLmlzRnVuY3Rpb24oaikpcmV0dXJuIGYucmVhZHkoaik7aWYoai5zZWxlY3RvciE9PUIpe3RoaXMuc2VsZWN0b3I9ai5zZWxlY3Rvcjt0aGlzLmNvbnRleHQ9ai5jb250ZXh0fXJldHVybiBiLm1ha2VBcnJheShqLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNC40IixsZW5ndGg6MCxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSwKdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBOLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGope3JldHVybiBqPT1udWxsP3RoaXMudG9BcnJheSgpOmo8MD90aGlzLnNsaWNlKGopWzBdOnRoaXNbal19LHB1c2hTdGFjazpmdW5jdGlvbihqLHMsdil7dmFyIHo9YigpO2IuaXNBcnJheShqKT9NLmFwcGx5KHosaik6Yi5tZXJnZSh6LGopO3oucHJldk9iamVjdD10aGlzO3ouY29udGV4dD10aGlzLmNvbnRleHQ7aWYocz09PSJmaW5kIil6LnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKSt2O2Vsc2UgaWYocyl6LnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK3MrIigiK3YrIikiO3JldHVybiB6fSxlYWNoOmZ1bmN0aW9uKGoscyl7cmV0dXJuIGIuZWFjaCh0aGlzLGoscyl9LHJlYWR5OmZ1bmN0aW9uKGope2IuYmluZFJlYWR5KCk7aWYoYi5pc1JlYWR5KWouY2FsbCh0LGIpO2Vsc2UgcSYmcS5wdXNoKGopO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihqKXtyZXR1cm4gaj09PQotMT90aGlzLnNsaWNlKGopOnRoaXMuc2xpY2UoaiwraisxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soTi5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixOLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGIubWFwKHRoaXMsZnVuY3Rpb24ocyx2KXtyZXR1cm4gai5jYWxsKHMsdixzKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8YihudWxsKX0scHVzaDpNLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfTtiLmZuLmluaXQucHJvdG90eXBlPWIuZm47Yi5leHRlbmQ9Yi5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgaixzLHYseixILEc9YXJndW1lbnRzWzBdfHx7fSxLPTEsUT1hcmd1bWVudHMubGVuZ3RoLGdhPWZhbHNlOwppZih0eXBlb2YgRz09PSJib29sZWFuIil7Z2E9RztHPWFyZ3VtZW50c1sxXXx8e307Sz0yfWlmKHR5cGVvZiBHIT09Im9iamVjdCImJiFiLmlzRnVuY3Rpb24oRykpRz17fTtpZihRPT09Syl7Rz10aGlzOy0tS31mb3IoO0s8UTtLKyspaWYoKGo9YXJndW1lbnRzW0tdKSE9bnVsbClmb3IocyBpbiBqKXt2PUdbc107ej1qW3NdO2lmKEchPT16KWlmKGdhJiZ6JiYoYi5pc1BsYWluT2JqZWN0KHopfHwoSD1iLmlzQXJyYXkoeikpKSl7aWYoSCl7SD1mYWxzZTt2PXYmJmIuaXNBcnJheSh2KT92OltdfWVsc2Ugdj12JiZiLmlzUGxhaW5PYmplY3Qodik/djp7fTtHW3NdPWIuZXh0ZW5kKGdhLHYseil9ZWxzZSBpZih6IT09QilHW3NdPXp9cmV0dXJuIEd9O2IuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGope0UuJD1lO2lmKGopRS5qUXVlcnk9ZDtyZXR1cm4gYn0saXNSZWFkeTpmYWxzZSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihqKXtqPT09dHJ1ZSYmYi5yZWFkeVdhaXQtLTsKaWYoIWIucmVhZHlXYWl0fHxqIT09dHJ1ZSYmIWIuaXNSZWFkeSl7aWYoIXQuYm9keSlyZXR1cm4gc2V0VGltZW91dChiLnJlYWR5LDEpO2IuaXNSZWFkeT10cnVlO2lmKCEoaiE9PXRydWUmJi0tYi5yZWFkeVdhaXQ+MCkpaWYocSl7dmFyIHM9MCx2PXE7Zm9yKHE9bnVsbDtqPXZbcysrXTspai5jYWxsKHQsYik7Yi5mbi50cmlnZ2VyJiZiKHQpLnRyaWdnZXIoInJlYWR5IikudW5iaW5kKCJyZWFkeSIpfX19LGJpbmRSZWFkeTpmdW5jdGlvbigpe2lmKCFwKXtwPXRydWU7aWYodC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIilyZXR1cm4gc2V0VGltZW91dChiLnJlYWR5LDEpO2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil7dC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIix1LGZhbHNlKTtFLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGIucmVhZHksZmFsc2UpfWVsc2UgaWYodC5hdHRhY2hFdmVudCl7dC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIix1KTtFLmF0dGFjaEV2ZW50KCJvbmxvYWQiLApiLnJlYWR5KTt2YXIgaj1mYWxzZTt0cnl7aj1FLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChzKXt9dC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmomJmEoKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGope3JldHVybiBiLnR5cGUoaik9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGope3JldHVybiBiLnR5cGUoaik9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihqKXtyZXR1cm4gaiYmdHlwZW9mIGo9PT0ib2JqZWN0IiYmInNldEludGVydmFsImluIGp9LGlzTmFOOmZ1bmN0aW9uKGope3JldHVybiBqPT1udWxsfHwhci50ZXN0KGopfHxpc05hTihqKX0sdHlwZTpmdW5jdGlvbihqKXtyZXR1cm4gaj09bnVsbD9TdHJpbmcoaik6Ult5LmNhbGwoaildfHwib2JqZWN0In0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihqKXtpZighanx8Yi50eXBlKGopIT09Im9iamVjdCJ8fGoubm9kZVR5cGV8fGIuaXNXaW5kb3coaikpcmV0dXJuIGZhbHNlO2lmKGouY29uc3RydWN0b3ImJgohRi5jYWxsKGosImNvbnN0cnVjdG9yIikmJiFGLmNhbGwoai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4gZmFsc2U7Zm9yKHZhciBzIGluIGopO3JldHVybiBzPT09Qnx8Ri5jYWxsKGoscyl9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oail7Zm9yKHZhciBzIGluIGopcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfSxlcnJvcjpmdW5jdGlvbihqKXt0aHJvdyBqO30scGFyc2VKU09OOmZ1bmN0aW9uKGope2lmKHR5cGVvZiBqIT09InN0cmluZyJ8fCFqKXJldHVybiBudWxsO2o9Yi50cmltKGopO2lmKEMudGVzdChqLnJlcGxhY2UoSiwiQCIpLnJlcGxhY2UodywiXSIpLnJlcGxhY2UoSSwiIikpKXJldHVybiBFLkpTT04mJkUuSlNPTi5wYXJzZT9FLkpTT04ucGFyc2Uoaik6KG5ldyBGdW5jdGlvbigicmV0dXJuICIraikpKCk7ZWxzZSBiLmVycm9yKCJJbnZhbGlkIEpTT046ICIrail9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oail7aWYoaiYmCmwudGVzdChqKSl7dmFyIHM9dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHx0LmRvY3VtZW50RWxlbWVudCx2PXQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7di50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiO2lmKGIuc3VwcG9ydC5zY3JpcHRFdmFsKXYuYXBwZW5kQ2hpbGQodC5jcmVhdGVUZXh0Tm9kZShqKSk7ZWxzZSB2LnRleHQ9ajtzLmluc2VydEJlZm9yZSh2LHMuZmlyc3RDaGlsZCk7cy5yZW1vdmVDaGlsZCh2KX19LG5vZGVOYW1lOmZ1bmN0aW9uKGoscyl7cmV0dXJuIGoubm9kZU5hbWUmJmoubm9kZU5hbWUudG9VcHBlckNhc2UoKT09PXMudG9VcHBlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihqLHMsdil7dmFyIHosSD0wLEc9ai5sZW5ndGgsSz1HPT09Qnx8Yi5pc0Z1bmN0aW9uKGopO2lmKHYpaWYoSylmb3IoeiBpbiBqKXtpZihzLmFwcGx5KGpbel0sdik9PT1mYWxzZSlicmVha31lbHNlIGZvcig7SDxHOyl7aWYocy5hcHBseShqW0grK10sdik9PT1mYWxzZSlicmVha31lbHNlIGlmKEspZm9yKHogaW4gail7aWYocy5jYWxsKGpbel0sCnosalt6XSk9PT1mYWxzZSlicmVha31lbHNlIGZvcih2PWpbMF07SDxHJiZzLmNhbGwodixILHYpIT09ZmFsc2U7dj1qWysrSF0pO3JldHVybiBqfSx0cmltOk8/ZnVuY3Rpb24oail7cmV0dXJuIGo9PW51bGw/IiI6Ty5jYWxsKGopfTpmdW5jdGlvbihqKXtyZXR1cm4gaj09bnVsbD8iIjpqLnRvU3RyaW5nKCkucmVwbGFjZShrLCIiKS5yZXBsYWNlKG8sIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oaixzKXt2YXIgdj1zfHxbXTtpZihqIT1udWxsKXt2YXIgej1iLnR5cGUoaik7ai5sZW5ndGg9PW51bGx8fHo9PT0ic3RyaW5nInx8ej09PSJmdW5jdGlvbiJ8fHo9PT0icmVnZXhwInx8Yi5pc1dpbmRvdyhqKT9NLmNhbGwodixqKTpiLm1lcmdlKHYsail9cmV0dXJuIHZ9LGluQXJyYXk6ZnVuY3Rpb24oaixzKXtpZihzLmluZGV4T2YpcmV0dXJuIHMuaW5kZXhPZihqKTtmb3IodmFyIHY9MCx6PXMubGVuZ3RoO3Y8ejt2KyspaWYoc1t2XT09PWopcmV0dXJuIHY7cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGosCnMpe3ZhciB2PWoubGVuZ3RoLHo9MDtpZih0eXBlb2Ygcy5sZW5ndGg9PT0ibnVtYmVyIilmb3IodmFyIEg9cy5sZW5ndGg7ejxIO3orKylqW3YrK109c1t6XTtlbHNlIGZvcig7c1t6XSE9PUI7KWpbdisrXT1zW3orK107ai5sZW5ndGg9djtyZXR1cm4gan0sZ3JlcDpmdW5jdGlvbihqLHMsdil7dmFyIHo9W10sSDt2PSEhdjtmb3IodmFyIEc9MCxLPWoubGVuZ3RoO0c8SztHKyspe0g9ISFzKGpbR10sRyk7diE9PUgmJnoucHVzaChqW0ddKX1yZXR1cm4gen0sbWFwOmZ1bmN0aW9uKGoscyx2KXtmb3IodmFyIHo9W10sSCxHPTAsSz1qLmxlbmd0aDtHPEs7RysrKXtIPXMoaltHXSxHLHYpO2lmKEghPW51bGwpelt6Lmxlbmd0aF09SH1yZXR1cm4gei5jb25jYXQuYXBwbHkoW10seil9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihqLHMsdil7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpaWYodHlwZW9mIHM9PT0ic3RyaW5nIil7dj1qO2o9dltzXTtzPUJ9ZWxzZSBpZihzJiYhYi5pc0Z1bmN0aW9uKHMpKXt2PQpzO3M9Qn1pZighcyYmailzPWZ1bmN0aW9uKCl7cmV0dXJuIGouYXBwbHkodnx8dGhpcyxhcmd1bWVudHMpfTtpZihqKXMuZ3VpZD1qLmd1aWQ9ai5ndWlkfHxzLmd1aWR8fGIuZ3VpZCsrO3JldHVybiBzfSxhY2Nlc3M6ZnVuY3Rpb24oaixzLHYseixILEcpe3ZhciBLPWoubGVuZ3RoO2lmKHR5cGVvZiBzPT09Im9iamVjdCIpe2Zvcih2YXIgUSBpbiBzKWIuYWNjZXNzKGosUSxzW1FdLHosSCx2KTtyZXR1cm4gan1pZih2IT09Qil7ej0hRyYmeiYmYi5pc0Z1bmN0aW9uKHYpO2ZvcihRPTA7UTxLO1ErKylIKGpbUV0scyx6P3YuY2FsbChqW1FdLFEsSChqW1FdLHMpKTp2LEcpO3JldHVybiBqfXJldHVybiBLP0goalswXSxzKTpCfSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihqKXtqPWoudG9Mb3dlckNhc2UoKTtqPUwuZXhlYyhqKXx8Zy5leGVjKGopfHxpLmV4ZWMoail8fGouaW5kZXhPZigiY29tcGF0aWJsZSIpPDAmJm4uZXhlYyhqKXx8CltdO3JldHVybnticm93c2VyOmpbMV18fCIiLHZlcnNpb246alsyXXx8IjAifX0sYnJvd3Nlcjp7fX0pO2IuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihqLHMpe1JbIltvYmplY3QgIitzKyJdIl09cy50b0xvd2VyQ2FzZSgpfSk7bT1iLnVhTWF0Y2gobSk7aWYobS5icm93c2VyKXtiLmJyb3dzZXJbbS5icm93c2VyXT10cnVlO2IuYnJvd3Nlci52ZXJzaW9uPW0udmVyc2lvbn1pZihiLmJyb3dzZXIud2Via2l0KWIuYnJvd3Nlci5zYWZhcmk9dHJ1ZTtpZihEKWIuaW5BcnJheT1mdW5jdGlvbihqLHMpe3JldHVybiBELmNhbGwocyxqKX07aWYoIS9ccy8udGVzdCgiXHUwMGEwIikpe2s9L15bXHNceEEwXSsvO289L1tcc1x4QTBdKyQvfWY9Yih0KTtpZih0LmFkZEV2ZW50TGlzdGVuZXIpdT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsdSwKZmFsc2UpO2IucmVhZHkoKX07ZWxzZSBpZih0LmF0dGFjaEV2ZW50KXU9ZnVuY3Rpb24oKXtpZih0LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXt0LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHUpO2IucmVhZHkoKX19O3JldHVybiBFLmpRdWVyeT1FLiQ9Yn0oKTsoZnVuY3Rpb24oKXtjLnN1cHBvcnQ9e307dmFyIGE9dC5kb2N1bWVudEVsZW1lbnQsYj10LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQ9dC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPSJzY3JpcHQiK2Mubm93KCk7ZC5zdHlsZS5kaXNwbGF5PSJub25lIjtkLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0nY29sb3I6cmVkO2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7dmFyIGY9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLGg9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGw9dC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSwKaz1sLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpO2lmKCEoIWZ8fCFmLmxlbmd0aHx8IWgpKXtjLnN1cHBvcnQ9e2xlYWRpbmdXaGl0ZXNwYWNlOmQuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTMsdGJvZHk6IWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGh0bWxTZXJpYWxpemU6ISFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLHN0eWxlOi9yZWQvLnRlc3QoaC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLGhyZWZOb3JtYWxpemVkOmguZ2V0QXR0cmlidXRlKCJocmVmIik9PT0iL2EiLG9wYWNpdHk6L14wLjU1JC8udGVzdChoLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhaC5zdHlsZS5jc3NGbG9hdCxjaGVja09uOmQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0udmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOmsuc2VsZWN0ZWQsZGVsZXRlRXhwYW5kbzp0cnVlLG9wdERpc2FibGVkOmZhbHNlLGNoZWNrQ2xvbmU6ZmFsc2UsCnNjcmlwdEV2YWw6ZmFsc2Usbm9DbG9uZUV2ZW50OnRydWUsYm94TW9kZWw6bnVsbCxpbmxpbmVCbG9ja05lZWRzTGF5b3V0OmZhbHNlLHNocmlua1dyYXBCbG9ja3M6ZmFsc2UscmVsaWFibGVIaWRkZW5PZmZzZXRzOnRydWV9O2wuZGlzYWJsZWQ9dHJ1ZTtjLnN1cHBvcnQub3B0RGlzYWJsZWQ9IWsuZGlzYWJsZWQ7Yi50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiO3RyeXtiLmFwcGVuZENoaWxkKHQuY3JlYXRlVGV4dE5vZGUoIndpbmRvdy4iK2UrIj0xOyIpKX1jYXRjaChvKXt9YS5pbnNlcnRCZWZvcmUoYixhLmZpcnN0Q2hpbGQpO2lmKEVbZV0pe2Muc3VwcG9ydC5zY3JpcHRFdmFsPXRydWU7ZGVsZXRlIEVbZV19dHJ5e2RlbGV0ZSBiLnRlc3R9Y2F0Y2goeCl7Yy5zdXBwb3J0LmRlbGV0ZUV4cGFuZG89ZmFsc2V9YS5yZW1vdmVDaGlsZChiKTtpZihkLmF0dGFjaEV2ZW50JiZkLmZpcmVFdmVudCl7ZC5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24gcigpe2Muc3VwcG9ydC5ub0Nsb25lRXZlbnQ9CmZhbHNlO2QuZGV0YWNoRXZlbnQoIm9uY2xpY2siLHIpfSk7ZC5jbG9uZU5vZGUodHJ1ZSkuZmlyZUV2ZW50KCJvbmNsaWNrIil9ZD10LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaW5uZXJIVE1MPSI8aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9J3JhZGlvdGVzdCcgY2hlY2tlZD0nY2hlY2tlZCcvPiI7YT10LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTthLmFwcGVuZENoaWxkKGQuZmlyc3RDaGlsZCk7Yy5zdXBwb3J0LmNoZWNrQ2xvbmU9YS5jbG9uZU5vZGUodHJ1ZSkuY2xvbmVOb2RlKHRydWUpLmxhc3RDaGlsZC5jaGVja2VkO2MoZnVuY3Rpb24oKXt2YXIgcj10LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUud2lkdGg9ci5zdHlsZS5wYWRkaW5nTGVmdD0iMXB4Ijt0LmJvZHkuYXBwZW5kQ2hpbGQocik7Yy5ib3hNb2RlbD1jLnN1cHBvcnQuYm94TW9kZWw9ci5vZmZzZXRXaWR0aD09PTI7aWYoInpvb20iaW4gci5zdHlsZSl7ci5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiO3Iuc3R5bGUuem9vbT0KMTtjLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dD1yLm9mZnNldFdpZHRoPT09MjtyLnN0eWxlLmRpc3BsYXk9IiI7ci5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiI7Yy5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3M9ci5vZmZzZXRXaWR0aCE9PTJ9ci5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRkaW5nOjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+Ijt2YXIgQT1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpO2Muc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHM9QVswXS5vZmZzZXRIZWlnaHQ9PT0wO0FbMF0uc3R5bGUuZGlzcGxheT0iIjtBWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2Muc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHM9Yy5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmQVswXS5vZmZzZXRIZWlnaHQ9PT0wO3IuaW5uZXJIVE1MPSIiO3QuYm9keS5yZW1vdmVDaGlsZChyKS5zdHlsZS5kaXNwbGF5PQoibm9uZSJ9KTthPWZ1bmN0aW9uKHIpe3ZhciBBPXQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cj0ib24iK3I7dmFyIEM9ciBpbiBBO2lmKCFDKXtBLnNldEF0dHJpYnV0ZShyLCJyZXR1cm47Iik7Qz10eXBlb2YgQVtyXT09PSJmdW5jdGlvbiJ9cmV0dXJuIEN9O2Muc3VwcG9ydC5zdWJtaXRCdWJibGVzPWEoInN1Ym1pdCIpO2Muc3VwcG9ydC5jaGFuZ2VCdWJibGVzPWEoImNoYW5nZSIpO2E9Yj1kPWY9aD1udWxsfX0pKCk7dmFyIHJhPXt9LEphPS9eKD86XHsuKlx9fFxbLipcXSkkLztjLmV4dGVuZCh7Y2FjaGU6e30sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrYy5ub3coKSxub0RhdGE6e2VtYmVkOnRydWUsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDp0cnVlfSxkYXRhOmZ1bmN0aW9uKGEsYixkKXtpZihjLmFjY2VwdERhdGEoYSkpe2E9YT09RT9yYTphO3ZhciBlPWEubm9kZVR5cGUsZj1lP2FbYy5leHBhbmRvXTpudWxsLGg9CmMuY2FjaGU7aWYoIShlJiYhZiYmdHlwZW9mIGI9PT0ic3RyaW5nIiYmZD09PUIpKXtpZihlKWZ8fChhW2MuZXhwYW5kb109Zj0rK2MudXVpZCk7ZWxzZSBoPWE7aWYodHlwZW9mIGI9PT0ib2JqZWN0IilpZihlKWhbZl09Yy5leHRlbmQoaFtmXSxiKTtlbHNlIGMuZXh0ZW5kKGgsYik7ZWxzZSBpZihlJiYhaFtmXSloW2ZdPXt9O2E9ZT9oW2ZdOmg7aWYoZCE9PUIpYVtiXT1kO3JldHVybiB0eXBlb2YgYj09PSJzdHJpbmciP2FbYl06YX19fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7aWYoYy5hY2NlcHREYXRhKGEpKXthPWE9PUU/cmE6YTt2YXIgZD1hLm5vZGVUeXBlLGU9ZD9hW2MuZXhwYW5kb106YSxmPWMuY2FjaGUsaD1kP2ZbZV06ZTtpZihiKXtpZihoKXtkZWxldGUgaFtiXTtkJiZjLmlzRW1wdHlPYmplY3QoaCkmJmMucmVtb3ZlRGF0YShhKX19ZWxzZSBpZihkJiZjLnN1cHBvcnQuZGVsZXRlRXhwYW5kbylkZWxldGUgYVtjLmV4cGFuZG9dO2Vsc2UgaWYoYS5yZW1vdmVBdHRyaWJ1dGUpYS5yZW1vdmVBdHRyaWJ1dGUoYy5leHBhbmRvKTsKZWxzZSBpZihkKWRlbGV0ZSBmW2VdO2Vsc2UgZm9yKHZhciBsIGluIGEpZGVsZXRlIGFbbF19fSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWMubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4hKGI9PT10cnVlfHxhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpIT09Yil9cmV0dXJuIHRydWV9fSk7Yy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxiKXt2YXIgZD1udWxsO2lmKHR5cGVvZiBhPT09InVuZGVmaW5lZCIpe2lmKHRoaXMubGVuZ3RoKXt2YXIgZT10aGlzWzBdLmF0dHJpYnV0ZXMsZjtkPWMuZGF0YSh0aGlzWzBdKTtmb3IodmFyIGg9MCxsPWUubGVuZ3RoO2g8bDtoKyspe2Y9ZVtoXS5uYW1lO2lmKGYuaW5kZXhPZigiZGF0YS0iKT09PTApe2Y9Zi5zdWJzdHIoNSk7a2EodGhpc1swXSxmLGRbZl0pfX19cmV0dXJuIGR9ZWxzZSBpZih0eXBlb2YgYT09PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjLmRhdGEodGhpcywKYSl9KTt2YXIgaz1hLnNwbGl0KCIuIik7a1sxXT1rWzFdPyIuIitrWzFdOiIiO2lmKGI9PT1CKXtkPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK2tbMV0rIiEiLFtrWzBdXSk7aWYoZD09PUImJnRoaXMubGVuZ3RoKXtkPWMuZGF0YSh0aGlzWzBdLGEpO2Q9a2EodGhpc1swXSxhLGQpfXJldHVybiBkPT09QiYma1sxXT90aGlzLmRhdGEoa1swXSk6ZH1lbHNlIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbz1jKHRoaXMpLHg9W2tbMF0sYl07by50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIra1sxXSsiISIseCk7Yy5kYXRhKHRoaXMsYSxiKTtvLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitrWzFdKyIhIix4KX0pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pO2MuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsZCl7aWYoYSl7Yj0oYnx8ImZ4IikrInF1ZXVlIjt2YXIgZT0KYy5kYXRhKGEsYik7aWYoIWQpcmV0dXJuIGV8fFtdO2lmKCFlfHxjLmlzQXJyYXkoZCkpZT1jLmRhdGEoYSxiLGMubWFrZUFycmF5KGQpKTtlbHNlIGUucHVzaChkKTtyZXR1cm4gZX19LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGQ9Yy5xdWV1ZShhLGIpLGU9ZC5zaGlmdCgpO2lmKGU9PT0iaW5wcm9ncmVzcyIpZT1kLnNoaWZ0KCk7aWYoZSl7Yj09PSJmeCImJmQudW5zaGlmdCgiaW5wcm9ncmVzcyIpO2UuY2FsbChhLGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKGEsYil9KX19fSk7Yy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGEhPT0ic3RyaW5nIil7Yj1hO2E9ImZ4In1pZihiPT09QilyZXR1cm4gYy5xdWV1ZSh0aGlzWzBdLGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1jLnF1ZXVlKHRoaXMsYSxiKTthPT09ImZ4IiYmZFswXSE9PSJpbnByb2dyZXNzIiYmYy5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKHRoaXMsCmEpfSl9LGRlbGF5OmZ1bmN0aW9uKGEsYil7YT1jLmZ4P2MuZnguc3BlZWRzW2FdfHxhOmE7Yj1ifHwiZngiO3JldHVybiB0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oKXt2YXIgZD10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmRlcXVldWUoZCxiKX0sYSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX19KTt2YXIgc2E9L1tcblx0XS9nLGhhPS9ccysvLFNhPS9cci9nLFRhPS9eKD86aHJlZnxzcmN8c3R5bGUpJC8sVWE9L14oPzpidXR0b258aW5wdXQpJC9pLFZhPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLFdhPS9eYSg/OnJlYSk/JC9pLHRhPS9eKD86cmFkaW98Y2hlY2tib3gpJC9pO2MucHJvcHM9eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLHJlYWRvbmx5OiJyZWFkT25seSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIscm93c3Bhbjoicm93U3BhbiIsCmNvbHNwYW46ImNvbFNwYW4iLHRhYmluZGV4OiJ0YWJJbmRleCIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciJ9O2MuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMuYWNjZXNzKHRoaXMsYSxiLHRydWUsYy5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5hdHRyKHRoaXMsYSwiIik7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGEpfSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHgpe3ZhciByPWModGhpcyk7ci5hZGRDbGFzcyhhLmNhbGwodGhpcyx4LHIuYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nIilmb3IodmFyIGI9KGF8fCIiKS5zcGxpdChoYSksZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7dmFyIGY9dGhpc1tkXTtpZihmLm5vZGVUeXBlPT09CjEpaWYoZi5jbGFzc05hbWUpe2Zvcih2YXIgaD0iICIrZi5jbGFzc05hbWUrIiAiLGw9Zi5jbGFzc05hbWUsaz0wLG89Yi5sZW5ndGg7azxvO2srKylpZihoLmluZGV4T2YoIiAiK2Jba10rIiAiKTwwKWwrPSIgIitiW2tdO2YuY2xhc3NOYW1lPWMudHJpbShsKX1lbHNlIGYuY2xhc3NOYW1lPWF9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG8pe3ZhciB4PWModGhpcyk7eC5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxvLHguYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nInx8YT09PUIpZm9yKHZhciBiPShhfHwiIikuc3BsaXQoaGEpLGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPXRoaXNbZF07aWYoZi5ub2RlVHlwZT09PTEmJmYuY2xhc3NOYW1lKWlmKGEpe2Zvcih2YXIgaD0oIiAiK2YuY2xhc3NOYW1lKyIgIikucmVwbGFjZShzYSwiICIpLApsPTAsaz1iLmxlbmd0aDtsPGs7bCsrKWg9aC5yZXBsYWNlKCIgIitiW2xdKyIgIiwiICIpO2YuY2xhc3NOYW1lPWMudHJpbShoKX1lbHNlIGYuY2xhc3NOYW1lPSIifXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBkPXR5cGVvZiBhLGU9dHlwZW9mIGI9PT0iYm9vbGVhbiI7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZil7dmFyIGg9Yyh0aGlzKTtoLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGYsaC5hdHRyKCJjbGFzcyIpLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGQ9PT0ic3RyaW5nIilmb3IodmFyIGYsaD0wLGw9Yyh0aGlzKSxrPWIsbz1hLnNwbGl0KGhhKTtmPW9baCsrXTspe2s9ZT9rOiFsLmhhc0NsYXNzKGYpO2xbaz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGYpfWVsc2UgaWYoZD09PSJ1bmRlZmluZWQifHxkPT09ImJvb2xlYW4iKXt0aGlzLmNsYXNzTmFtZSYmYy5kYXRhKHRoaXMsCiJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSk7dGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT1mYWxzZT8iIjpjLmRhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn19KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7YT0iICIrYSsiICI7Zm9yKHZhciBiPTAsZD10aGlzLmxlbmd0aDtiPGQ7YisrKWlmKCgiICIrdGhpc1tiXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHNhLCIgIikuaW5kZXhPZihhKT4tMSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9LHZhbDpmdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aCl7dmFyIGI9dGhpc1swXTtpZihiKXtpZihjLm5vZGVOYW1lKGIsIm9wdGlvbiIpKXt2YXIgZD1iLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWR8fGQuc3BlY2lmaWVkP2IudmFsdWU6Yi50ZXh0fWlmKGMubm9kZU5hbWUoYiwic2VsZWN0Iikpe3ZhciBlPWIuc2VsZWN0ZWRJbmRleDtkPVtdO3ZhciBmPWIub3B0aW9ucztiPWIudHlwZT09PSJzZWxlY3Qtb25lIjsKaWYoZTwwKXJldHVybiBudWxsO3ZhciBoPWI/ZTowO2ZvcihlPWI/ZSsxOmYubGVuZ3RoO2g8ZTtoKyspe3ZhciBsPWZbaF07aWYobC5zZWxlY3RlZCYmKGMuc3VwcG9ydC5vcHREaXNhYmxlZD8hbC5kaXNhYmxlZDpsLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09PW51bGwpJiYoIWwucGFyZW50Tm9kZS5kaXNhYmxlZHx8IWMubm9kZU5hbWUobC5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7YT1jKGwpLnZhbCgpO2lmKGIpcmV0dXJuIGE7ZC5wdXNoKGEpfX1yZXR1cm4gZH1pZih0YS50ZXN0KGIudHlwZSkmJiFjLnN1cHBvcnQuY2hlY2tPbilyZXR1cm4gYi5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6Yi52YWx1ZTtyZXR1cm4oYi52YWx1ZXx8IiIpLnJlcGxhY2UoU2EsIiIpfXJldHVybiBCfXZhciBrPWMuaXNGdW5jdGlvbihhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG8pe3ZhciB4PWModGhpcykscj1hO2lmKHRoaXMubm9kZVR5cGU9PT0xKXtpZihrKXI9CmEuY2FsbCh0aGlzLG8seC52YWwoKSk7aWYocj09bnVsbClyPSIiO2Vsc2UgaWYodHlwZW9mIHI9PT0ibnVtYmVyIilyKz0iIjtlbHNlIGlmKGMuaXNBcnJheShyKSlyPWMubWFwKHIsZnVuY3Rpb24oQyl7cmV0dXJuIEM9PW51bGw/IiI6QysiIn0pO2lmKGMuaXNBcnJheShyKSYmdGEudGVzdCh0aGlzLnR5cGUpKXRoaXMuY2hlY2tlZD1jLmluQXJyYXkoeC52YWwoKSxyKT49MDtlbHNlIGlmKGMubm9kZU5hbWUodGhpcywic2VsZWN0Iikpe3ZhciBBPWMubWFrZUFycmF5KHIpO2MoIm9wdGlvbiIsdGhpcykuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9Yy5pbkFycmF5KGModGhpcykudmFsKCksQSk+PTB9KTtpZighQS5sZW5ndGgpdGhpcy5zZWxlY3RlZEluZGV4PS0xfWVsc2UgdGhpcy52YWx1ZT1yfX0pfX0pO2MuZXh0ZW5kKHthdHRyRm46e3ZhbDp0cnVlLGNzczp0cnVlLGh0bWw6dHJ1ZSx0ZXh0OnRydWUsZGF0YTp0cnVlLHdpZHRoOnRydWUsaGVpZ2h0OnRydWUsb2Zmc2V0OnRydWV9LAphdHRyOmZ1bmN0aW9uKGEsYixkLGUpe2lmKCFhfHxhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpcmV0dXJuIEI7aWYoZSYmYiBpbiBjLmF0dHJGbilyZXR1cm4gYyhhKVtiXShkKTtlPWEubm9kZVR5cGUhPT0xfHwhYy5pc1hNTERvYyhhKTt2YXIgZj1kIT09QjtiPWUmJmMucHJvcHNbYl18fGI7dmFyIGg9VGEudGVzdChiKTtpZigoYiBpbiBhfHxhW2JdIT09QikmJmUmJiFoKXtpZihmKXtiPT09InR5cGUiJiZVYS50ZXN0KGEubm9kZU5hbWUpJiZhLnBhcmVudE5vZGUmJmMuZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpO2lmKGQ9PT1udWxsKWEubm9kZVR5cGU9PT0xJiZhLnJlbW92ZUF0dHJpYnV0ZShiKTtlbHNlIGFbYl09ZH1pZihjLm5vZGVOYW1lKGEsImZvcm0iKSYmYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKXJldHVybiBhLmdldEF0dHJpYnV0ZU5vZGUoYikubm9kZVZhbHVlO2lmKGI9PT0idGFiSW5kZXgiKXJldHVybihiPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiSW5kZXgiKSkmJgpiLnNwZWNpZmllZD9iLnZhbHVlOlZhLnRlc3QoYS5ub2RlTmFtZSl8fFdhLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOkI7cmV0dXJuIGFbYl19aWYoIWMuc3VwcG9ydC5zdHlsZSYmZSYmYj09PSJzdHlsZSIpe2lmKGYpYS5zdHlsZS5jc3NUZXh0PSIiK2Q7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dH1mJiZhLnNldEF0dHJpYnV0ZShiLCIiK2QpO2lmKCFhLmF0dHJpYnV0ZXNbYl0mJmEuaGFzQXR0cmlidXRlJiYhYS5oYXNBdHRyaWJ1dGUoYikpcmV0dXJuIEI7YT0hYy5zdXBwb3J0LmhyZWZOb3JtYWxpemVkJiZlJiZoP2EuZ2V0QXR0cmlidXRlKGIsMik6YS5nZXRBdHRyaWJ1dGUoYik7cmV0dXJuIGE9PT1udWxsP0I6YX19KTt2YXIgWD0vXC4oLiopJC8saWE9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLExhPS9cLi9nLE1hPS8gL2csWGE9L1teXHdccy58YF0vZyxZYT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKFhhLCJcXCQmIil9LHVhPXtmb2N1c2luOjAsZm9jdXNvdXQ6MH07CmMuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGIsZCxlKXtpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OCkpe2lmKGMuaXNXaW5kb3coYSkmJmEhPT1FJiYhYS5mcmFtZUVsZW1lbnQpYT1FO2lmKGQ9PT1mYWxzZSlkPVU7ZWxzZSBpZighZClyZXR1cm47dmFyIGYsaDtpZihkLmhhbmRsZXIpe2Y9ZDtkPWYuaGFuZGxlcn1pZighZC5ndWlkKWQuZ3VpZD1jLmd1aWQrKztpZihoPWMuZGF0YShhKSl7dmFyIGw9YS5ub2RlVHlwZT8iZXZlbnRzIjoiX19ldmVudHNfXyIsaz1oW2xdLG89aC5oYW5kbGU7aWYodHlwZW9mIGs9PT0iZnVuY3Rpb24iKXtvPWsuaGFuZGxlO2s9ay5ldmVudHN9ZWxzZSBpZighayl7YS5ub2RlVHlwZXx8KGhbbF09aD1mdW5jdGlvbigpe30pO2guZXZlbnRzPWs9e319aWYoIW8paC5oYW5kbGU9bz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgYyE9PSJ1bmRlZmluZWQiJiYhYy5ldmVudC50cmlnZ2VyZWQ/Yy5ldmVudC5oYW5kbGUuYXBwbHkoby5lbGVtLAphcmd1bWVudHMpOkJ9O28uZWxlbT1hO2I9Yi5zcGxpdCgiICIpO2Zvcih2YXIgeD0wLHI7bD1iW3grK107KXtoPWY/Yy5leHRlbmQoe30sZik6e2hhbmRsZXI6ZCxkYXRhOmV9O2lmKGwuaW5kZXhPZigiLiIpPi0xKXtyPWwuc3BsaXQoIi4iKTtsPXIuc2hpZnQoKTtoLm5hbWVzcGFjZT1yLnNsaWNlKDApLnNvcnQoKS5qb2luKCIuIil9ZWxzZXtyPVtdO2gubmFtZXNwYWNlPSIifWgudHlwZT1sO2lmKCFoLmd1aWQpaC5ndWlkPWQuZ3VpZDt2YXIgQT1rW2xdLEM9Yy5ldmVudC5zcGVjaWFsW2xdfHx7fTtpZighQSl7QT1rW2xdPVtdO2lmKCFDLnNldHVwfHxDLnNldHVwLmNhbGwoYSxlLHIsbyk9PT1mYWxzZSlpZihhLmFkZEV2ZW50TGlzdGVuZXIpYS5hZGRFdmVudExpc3RlbmVyKGwsbyxmYWxzZSk7ZWxzZSBhLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbCxvKX1pZihDLmFkZCl7Qy5hZGQuY2FsbChhLGgpO2lmKCFoLmhhbmRsZXIuZ3VpZCloLmhhbmRsZXIuZ3VpZD0KZC5ndWlkfUEucHVzaChoKTtjLmV2ZW50Lmdsb2JhbFtsXT10cnVlfWE9bnVsbH19fSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixkLGUpe2lmKCEoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04KSl7aWYoZD09PWZhbHNlKWQ9VTt2YXIgZixoLGw9MCxrLG8seCxyLEEsQyxKPWEubm9kZVR5cGU/ImV2ZW50cyI6Il9fZXZlbnRzX18iLHc9Yy5kYXRhKGEpLEk9dyYmd1tKXTtpZih3JiZJKXtpZih0eXBlb2YgST09PSJmdW5jdGlvbiIpe3c9STtJPUkuZXZlbnRzfWlmKGImJmIudHlwZSl7ZD1iLmhhbmRsZXI7Yj1iLnR5cGV9aWYoIWJ8fHR5cGVvZiBiPT09InN0cmluZyImJmIuY2hhckF0KDApPT09Ii4iKXtiPWJ8fCIiO2ZvcihmIGluIEkpYy5ldmVudC5yZW1vdmUoYSxmK2IpfWVsc2V7Zm9yKGI9Yi5zcGxpdCgiICIpO2Y9YltsKytdOyl7cj1mO2s9Zi5pbmRleE9mKCIuIik8MDtvPVtdO2lmKCFrKXtvPWYuc3BsaXQoIi4iKTtmPW8uc2hpZnQoKTt4PVJlZ0V4cCgiKF58XFwuKSIrCmMubWFwKG8uc2xpY2UoMCkuc29ydCgpLFlhKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKX1pZihBPUlbZl0paWYoZCl7cj1jLmV2ZW50LnNwZWNpYWxbZl18fHt9O2ZvcihoPWV8fDA7aDxBLmxlbmd0aDtoKyspe0M9QVtoXTtpZihkLmd1aWQ9PT1DLmd1aWQpe2lmKGt8fHgudGVzdChDLm5hbWVzcGFjZSkpe2U9PW51bGwmJkEuc3BsaWNlKGgtLSwxKTtyLnJlbW92ZSYmci5yZW1vdmUuY2FsbChhLEMpfWlmKGUhPW51bGwpYnJlYWt9fWlmKEEubGVuZ3RoPT09MHx8ZSE9bnVsbCYmQS5sZW5ndGg9PT0xKXtpZighci50ZWFyZG93bnx8ci50ZWFyZG93bi5jYWxsKGEsbyk9PT1mYWxzZSljLnJlbW92ZUV2ZW50KGEsZix3LmhhbmRsZSk7ZGVsZXRlIElbZl19fWVsc2UgZm9yKGg9MDtoPEEubGVuZ3RoO2grKyl7Qz1BW2hdO2lmKGt8fHgudGVzdChDLm5hbWVzcGFjZSkpe2MuZXZlbnQucmVtb3ZlKGEscixDLmhhbmRsZXIsaCk7QS5zcGxpY2UoaC0tLDEpfX19aWYoYy5pc0VtcHR5T2JqZWN0KEkpKXtpZihiPQp3LmhhbmRsZSliLmVsZW09bnVsbDtkZWxldGUgdy5ldmVudHM7ZGVsZXRlIHcuaGFuZGxlO2lmKHR5cGVvZiB3PT09ImZ1bmN0aW9uIiljLnJlbW92ZURhdGEoYSxKKTtlbHNlIGMuaXNFbXB0eU9iamVjdCh3KSYmYy5yZW1vdmVEYXRhKGEpfX19fX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIsZCxlKXt2YXIgZj1hLnR5cGV8fGE7aWYoIWUpe2E9dHlwZW9mIGE9PT0ib2JqZWN0Ij9hW2MuZXhwYW5kb10/YTpjLmV4dGVuZChjLkV2ZW50KGYpLGEpOmMuRXZlbnQoZik7aWYoZi5pbmRleE9mKCIhIik+PTApe2EudHlwZT1mPWYuc2xpY2UoMCwtMSk7YS5leGNsdXNpdmU9dHJ1ZX1pZighZCl7YS5zdG9wUHJvcGFnYXRpb24oKTtjLmV2ZW50Lmdsb2JhbFtmXSYmYy5lYWNoKGMuY2FjaGUsZnVuY3Rpb24oKXt0aGlzLmV2ZW50cyYmdGhpcy5ldmVudHNbZl0mJmMuZXZlbnQudHJpZ2dlcihhLGIsdGhpcy5oYW5kbGUuZWxlbSl9KX1pZighZHx8ZC5ub2RlVHlwZT09PTN8fGQubm9kZVR5cGU9PT0KOClyZXR1cm4gQjthLnJlc3VsdD1CO2EudGFyZ2V0PWQ7Yj1jLm1ha2VBcnJheShiKTtiLnVuc2hpZnQoYSl9YS5jdXJyZW50VGFyZ2V0PWQ7KGU9ZC5ub2RlVHlwZT9jLmRhdGEoZCwiaGFuZGxlIik6KGMuZGF0YShkLCJfX2V2ZW50c19fIil8fHt9KS5oYW5kbGUpJiZlLmFwcGx5KGQsYik7ZT1kLnBhcmVudE5vZGV8fGQub3duZXJEb2N1bWVudDt0cnl7aWYoIShkJiZkLm5vZGVOYW1lJiZjLm5vRGF0YVtkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSlpZihkWyJvbiIrZl0mJmRbIm9uIitmXS5hcHBseShkLGIpPT09ZmFsc2Upe2EucmVzdWx0PWZhbHNlO2EucHJldmVudERlZmF1bHQoKX19Y2F0Y2goaCl7fWlmKCFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmUpYy5ldmVudC50cmlnZ2VyKGEsYixlLHRydWUpO2Vsc2UgaWYoIWEuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBsO2U9YS50YXJnZXQ7dmFyIGs9Zi5yZXBsYWNlKFgsIiIpLG89Yy5ub2RlTmFtZShlLCJhIikmJms9PT0KImNsaWNrIix4PWMuZXZlbnQuc3BlY2lhbFtrXXx8e307aWYoKCF4Ll9kZWZhdWx0fHx4Ll9kZWZhdWx0LmNhbGwoZCxhKT09PWZhbHNlKSYmIW8mJiEoZSYmZS5ub2RlTmFtZSYmYy5ub0RhdGFbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkpe3RyeXtpZihlW2tdKXtpZihsPWVbIm9uIitrXSllWyJvbiIra109bnVsbDtjLmV2ZW50LnRyaWdnZXJlZD10cnVlO2Vba10oKX19Y2F0Y2gocil7fWlmKGwpZVsib24iK2tdPWw7Yy5ldmVudC50cmlnZ2VyZWQ9ZmFsc2V9fX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiLGQsZSxmO2Q9W107dmFyIGg9Yy5tYWtlQXJyYXkoYXJndW1lbnRzKTthPWhbMF09Yy5ldmVudC5maXgoYXx8RS5ldmVudCk7YS5jdXJyZW50VGFyZ2V0PXRoaXM7Yj1hLnR5cGUuaW5kZXhPZigiLiIpPDAmJiFhLmV4Y2x1c2l2ZTtpZighYil7ZT1hLnR5cGUuc3BsaXQoIi4iKTthLnR5cGU9ZS5zaGlmdCgpO2Q9ZS5zbGljZSgwKS5zb3J0KCk7ZT1SZWdFeHAoIihefFxcLikiKwpkLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpfWEubmFtZXNwYWNlPWEubmFtZXNwYWNlfHxkLmpvaW4oIi4iKTtmPWMuZGF0YSh0aGlzLHRoaXMubm9kZVR5cGU/ImV2ZW50cyI6Il9fZXZlbnRzX18iKTtpZih0eXBlb2YgZj09PSJmdW5jdGlvbiIpZj1mLmV2ZW50cztkPShmfHx7fSlbYS50eXBlXTtpZihmJiZkKXtkPWQuc2xpY2UoMCk7Zj0wO2Zvcih2YXIgbD1kLmxlbmd0aDtmPGw7ZisrKXt2YXIgaz1kW2ZdO2lmKGJ8fGUudGVzdChrLm5hbWVzcGFjZSkpe2EuaGFuZGxlcj1rLmhhbmRsZXI7YS5kYXRhPWsuZGF0YTthLmhhbmRsZU9iaj1rO2s9ay5oYW5kbGVyLmFwcGx5KHRoaXMsaCk7aWYoayE9PUIpe2EucmVzdWx0PWs7aWYoaz09PWZhbHNlKXthLnByZXZlbnREZWZhdWx0KCk7YS5zdG9wUHJvcGFnYXRpb24oKX19aWYoYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrfX19cmV0dXJuIGEucmVzdWx0fSxwcm9wczoiYWx0S2V5IGF0dHJDaGFuZ2UgYXR0ck5hbWUgYnViYmxlcyBidXR0b24gY2FuY2VsYWJsZSBjaGFyQ29kZSBjbGllbnRYIGNsaWVudFkgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRhdGEgZGV0YWlsIGV2ZW50UGhhc2UgZnJvbUVsZW1lbnQgaGFuZGxlciBrZXlDb2RlIGxheWVyWCBsYXllclkgbWV0YUtleSBuZXdWYWx1ZSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgcHJldlZhbHVlIHJlbGF0ZWROb2RlIHJlbGF0ZWRUYXJnZXQgc2NyZWVuWCBzY3JlZW5ZIHNoaWZ0S2V5IHNyY0VsZW1lbnQgdGFyZ2V0IHRvRWxlbWVudCB2aWV3IHdoZWVsRGVsdGEgd2hpY2giLnNwbGl0KCIgIiksCmZpeDpmdW5jdGlvbihhKXtpZihhW2MuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGI9YTthPWMuRXZlbnQoYik7Zm9yKHZhciBkPXRoaXMucHJvcHMubGVuZ3RoLGU7ZDspe2U9dGhpcy5wcm9wc1stLWRdO2FbZV09YltlXX1pZighYS50YXJnZXQpYS50YXJnZXQ9YS5zcmNFbGVtZW50fHx0O2lmKGEudGFyZ2V0Lm5vZGVUeXBlPT09MylhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlO2lmKCFhLnJlbGF0ZWRUYXJnZXQmJmEuZnJvbUVsZW1lbnQpYS5yZWxhdGVkVGFyZ2V0PWEuZnJvbUVsZW1lbnQ9PT1hLnRhcmdldD9hLnRvRWxlbWVudDphLmZyb21FbGVtZW50O2lmKGEucGFnZVg9PW51bGwmJmEuY2xpZW50WCE9bnVsbCl7Yj10LmRvY3VtZW50RWxlbWVudDtkPXQuYm9keTthLnBhZ2VYPWEuY2xpZW50WCsoYiYmYi5zY3JvbGxMZWZ0fHxkJiZkLnNjcm9sbExlZnR8fDApLShiJiZiLmNsaWVudExlZnR8fGQmJmQuY2xpZW50TGVmdHx8MCk7YS5wYWdlWT1hLmNsaWVudFkrKGImJmIuc2Nyb2xsVG9wfHwKZCYmZC5zY3JvbGxUb3B8fDApLShiJiZiLmNsaWVudFRvcHx8ZCYmZC5jbGllbnRUb3B8fDApfWlmKGEud2hpY2g9PW51bGwmJihhLmNoYXJDb2RlIT1udWxsfHxhLmtleUNvZGUhPW51bGwpKWEud2hpY2g9YS5jaGFyQ29kZSE9bnVsbD9hLmNoYXJDb2RlOmEua2V5Q29kZTtpZighYS5tZXRhS2V5JiZhLmN0cmxLZXkpYS5tZXRhS2V5PWEuY3RybEtleTtpZighYS53aGljaCYmYS5idXR0b24hPT1CKWEud2hpY2g9YS5idXR0b24mMT8xOmEuYnV0dG9uJjI/MzphLmJ1dHRvbiY0PzI6MDtyZXR1cm4gYX0sZ3VpZDoxRTgscHJveHk6Yy5wcm94eSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Yy5iaW5kUmVhZHksdGVhcmRvd246Yy5ub29wfSxsaXZlOnthZGQ6ZnVuY3Rpb24oYSl7Yy5ldmVudC5hZGQodGhpcyxZKGEub3JpZ1R5cGUsYS5zZWxlY3RvciksYy5leHRlbmQoe30sYSx7aGFuZGxlcjpLYSxndWlkOmEuaGFuZGxlci5ndWlkfSkpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7Yy5ldmVudC5yZW1vdmUodGhpcywKWShhLm9yaWdUeXBlLGEuc2VsZWN0b3IpLGEpfX0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsZCl7aWYoYy5pc1dpbmRvdyh0aGlzKSl0aGlzLm9uYmVmb3JldW5sb2FkPWR9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7aWYodGhpcy5vbmJlZm9yZXVubG9hZD09PWIpdGhpcy5vbmJlZm9yZXVubG9hZD1udWxsfX19fTtjLnJlbW92ZUV2ZW50PXQucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsZCl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixkLGZhbHNlKX06ZnVuY3Rpb24oYSxiLGQpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGQpfTtjLkV2ZW50PWZ1bmN0aW9uKGEpe2lmKCF0aGlzLnByZXZlbnREZWZhdWx0KXJldHVybiBuZXcgYy5FdmVudChhKTtpZihhJiZhLnR5cGUpe3RoaXMub3JpZ2luYWxFdmVudD1hO3RoaXMudHlwZT1hLnR5cGV9ZWxzZSB0aGlzLnR5cGU9YTt0aGlzLnRpbWVTdGFtcD0KYy5ub3coKTt0aGlzW2MuZXhwYW5kb109dHJ1ZX07Yy5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Y2E7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKGEpaWYoYS5wcmV2ZW50RGVmYXVsdClhLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBhLnJldHVyblZhbHVlPWZhbHNlfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWNhO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDtpZihhKXthLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKTthLmNhbmNlbEJ1YmJsZT10cnVlfX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1jYTt0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6VSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpVLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlV9Owp2YXIgdmE9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZWxhdGVkVGFyZ2V0O3RyeXtmb3IoO2ImJmIhPT10aGlzOyliPWIucGFyZW50Tm9kZTtpZihiIT09dGhpcyl7YS50eXBlPWEuZGF0YTtjLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWNhdGNoKGQpe319LHdhPWZ1bmN0aW9uKGEpe2EudHlwZT1hLmRhdGE7Yy5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihhLGIpe2MuZXZlbnQuc3BlY2lhbFthXT17c2V0dXA6ZnVuY3Rpb24oZCl7Yy5ldmVudC5hZGQodGhpcyxiLGQmJmQuc2VsZWN0b3I/d2E6dmEsYSl9LHRlYXJkb3duOmZ1bmN0aW9uKGQpe2MuZXZlbnQucmVtb3ZlKHRoaXMsYixkJiZkLnNlbGVjdG9yP3dhOnZhKX19fSk7aWYoIWMuc3VwcG9ydC5zdWJtaXRCdWJibGVzKWMuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09CiJmb3JtIil7Yy5ldmVudC5hZGQodGhpcywiY2xpY2suc3BlY2lhbFN1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsZD1iLnR5cGU7aWYoKGQ9PT0ic3VibWl0Inx8ZD09PSJpbWFnZSIpJiZjKGIpLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGgpe2EubGl2ZUZpcmVkPUI7cmV0dXJuIGxhKCJzdWJtaXQiLHRoaXMsYXJndW1lbnRzKX19KTtjLmV2ZW50LmFkZCh0aGlzLCJrZXlwcmVzcy5zcGVjaWFsU3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxkPWIudHlwZTtpZigoZD09PSJ0ZXh0Inx8ZD09PSJwYXNzd29yZCIpJiZjKGIpLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGgmJmEua2V5Q29kZT09PTEzKXthLmxpdmVGaXJlZD1CO3JldHVybiBsYSgic3VibWl0Iix0aGlzLGFyZ3VtZW50cyl9fSl9ZWxzZSByZXR1cm4gZmFsc2V9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Yy5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxTdWJtaXQiKX19O2lmKCFjLnN1cHBvcnQuY2hhbmdlQnViYmxlcyl7dmFyIFYsCnhhPWZ1bmN0aW9uKGEpe3ZhciBiPWEudHlwZSxkPWEudmFsdWU7aWYoYj09PSJyYWRpbyJ8fGI9PT0iY2hlY2tib3giKWQ9YS5jaGVja2VkO2Vsc2UgaWYoYj09PSJzZWxlY3QtbXVsdGlwbGUiKWQ9YS5zZWxlY3RlZEluZGV4Pi0xP2MubWFwKGEub3B0aW9ucyxmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RlZH0pLmpvaW4oIi0iKToiIjtlbHNlIGlmKGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJzZWxlY3QiKWQ9YS5zZWxlY3RlZEluZGV4O3JldHVybiBkfSxaPWZ1bmN0aW9uKGEsYil7dmFyIGQ9YS50YXJnZXQsZSxmO2lmKCEoIWlhLnRlc3QoZC5ub2RlTmFtZSl8fGQucmVhZE9ubHkpKXtlPWMuZGF0YShkLCJfY2hhbmdlX2RhdGEiKTtmPXhhKGQpO2lmKGEudHlwZSE9PSJmb2N1c291dCJ8fGQudHlwZSE9PSJyYWRpbyIpYy5kYXRhKGQsIl9jaGFuZ2VfZGF0YSIsZik7aWYoIShlPT09Qnx8Zj09PWUpKWlmKGUhPW51bGx8fGYpe2EudHlwZT0iY2hhbmdlIjthLmxpdmVGaXJlZD0KQjtyZXR1cm4gYy5ldmVudC50cmlnZ2VyKGEsYixkKX19fTtjLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtmaWx0ZXJzOntmb2N1c291dDpaLGJlZm9yZWRlYWN0aXZhdGU6WixjbGljazpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxkPWIudHlwZTtpZihkPT09InJhZGlvInx8ZD09PSJjaGVja2JveCJ8fGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJzZWxlY3QiKXJldHVybiBaLmNhbGwodGhpcyxhKX0sa2V5ZG93bjpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxkPWIudHlwZTtpZihhLmtleUNvZGU9PT0xMyYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09InRleHRhcmVhInx8YS5rZXlDb2RlPT09MzImJihkPT09ImNoZWNrYm94Inx8ZD09PSJyYWRpbyIpfHxkPT09InNlbGVjdC1tdWx0aXBsZSIpcmV0dXJuIFouY2FsbCh0aGlzLGEpfSxiZWZvcmVhY3RpdmF0ZTpmdW5jdGlvbihhKXthPWEudGFyZ2V0O2MuZGF0YShhLCJfY2hhbmdlX2RhdGEiLHhhKGEpKX19LHNldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy50eXBlPT09CiJmaWxlIilyZXR1cm4gZmFsc2U7Zm9yKHZhciBhIGluIFYpYy5ldmVudC5hZGQodGhpcyxhKyIuc3BlY2lhbENoYW5nZSIsVlthXSk7cmV0dXJuIGlhLnRlc3QodGhpcy5ub2RlTmFtZSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Yy5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxDaGFuZ2UiKTtyZXR1cm4gaWEudGVzdCh0aGlzLm5vZGVOYW1lKX19O1Y9Yy5ldmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJzO1YuZm9jdXM9Vi5iZWZvcmVhY3RpdmF0ZX10LmFkZEV2ZW50TGlzdGVuZXImJmMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBkKGUpe2U9Yy5ldmVudC5maXgoZSk7ZS50eXBlPWI7cmV0dXJuIGMuZXZlbnQudHJpZ2dlcihlLG51bGwsZS50YXJnZXQpfWMuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt1YVtiXSsrPT09MCYmdC5hZGRFdmVudExpc3RlbmVyKGEsZCx0cnVlKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLXVhW2JdPT09CjAmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGQsdHJ1ZSl9fX0pO2MuZWFjaChbImJpbmQiLCJvbmUiXSxmdW5jdGlvbihhLGIpe2MuZm5bYl09ZnVuY3Rpb24oZCxlLGYpe2lmKHR5cGVvZiBkPT09Im9iamVjdCIpe2Zvcih2YXIgaCBpbiBkKXRoaXNbYl0oaCxlLGRbaF0sZik7cmV0dXJuIHRoaXN9aWYoYy5pc0Z1bmN0aW9uKGUpfHxlPT09ZmFsc2Upe2Y9ZTtlPUJ9dmFyIGw9Yj09PSJvbmUiP2MucHJveHkoZixmdW5jdGlvbihvKXtjKHRoaXMpLnVuYmluZChvLGwpO3JldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pOmY7aWYoZD09PSJ1bmxvYWQiJiZiIT09Im9uZSIpdGhpcy5vbmUoZCxlLGYpO2Vsc2V7aD0wO2Zvcih2YXIgaz10aGlzLmxlbmd0aDtoPGs7aCsrKWMuZXZlbnQuYWRkKHRoaXNbaF0sZCxsLGUpfXJldHVybiB0aGlzfX0pO2MuZm4uZXh0ZW5kKHt1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYT09PSJvYmplY3QiJiYhYS5wcmV2ZW50RGVmYXVsdClmb3IodmFyIGQgaW4gYSl0aGlzLnVuYmluZChkLAphW2RdKTtlbHNle2Q9MDtmb3IodmFyIGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyljLmV2ZW50LnJlbW92ZSh0aGlzW2RdLGEsYil9cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixkLGUpe3JldHVybiB0aGlzLmxpdmUoYixkLGUsYSl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLnVuYmluZCgibGl2ZSIpOnRoaXMuZGllKGIsbnVsbCxkLGEpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2MuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXt2YXIgZD1jLkV2ZW50KGEpO2QucHJldmVudERlZmF1bHQoKTtkLnN0b3BQcm9wYWdhdGlvbigpO2MuZXZlbnQudHJpZ2dlcihkLGIsdGhpc1swXSk7cmV0dXJuIGQucmVzdWx0fX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hcmd1bWVudHMsZD0KMTtkPGIubGVuZ3RoOyljLnByb3h5KGEsYltkKytdKTtyZXR1cm4gdGhpcy5jbGljayhjLnByb3h5KGEsZnVuY3Rpb24oZSl7dmFyIGY9KGMuZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQpfHwwKSVkO2MuZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQsZisxKTtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGJbZl0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxmYWxzZX0pKX0saG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSk7dmFyIHlhPXtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQiLG1vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifTtjLmVhY2goWyJsaXZlIiwiZGllIl0sZnVuY3Rpb24oYSxiKXtjLmZuW2JdPWZ1bmN0aW9uKGQsZSxmLGgpe3ZhciBsLGs9MCxvLHgscj1ofHx0aGlzLnNlbGVjdG9yO2g9aD90aGlzOmModGhpcy5jb250ZXh0KTtpZih0eXBlb2YgZD09PQoib2JqZWN0IiYmIWQucHJldmVudERlZmF1bHQpe2ZvcihsIGluIGQpaFtiXShsLGUsZFtsXSxyKTtyZXR1cm4gdGhpc31pZihjLmlzRnVuY3Rpb24oZSkpe2Y9ZTtlPUJ9Zm9yKGQ9KGR8fCIiKS5zcGxpdCgiICIpOyhsPWRbaysrXSkhPW51bGw7KXtvPVguZXhlYyhsKTt4PSIiO2lmKG8pe3g9b1swXTtsPWwucmVwbGFjZShYLCIiKX1pZihsPT09ImhvdmVyIilkLnB1c2goIm1vdXNlZW50ZXIiK3gsIm1vdXNlbGVhdmUiK3gpO2Vsc2V7bz1sO2lmKGw9PT0iZm9jdXMifHxsPT09ImJsdXIiKXtkLnB1c2goeWFbbF0reCk7bCs9eH1lbHNlIGw9KHlhW2xdfHxsKSt4O2lmKGI9PT0ibGl2ZSIpe3g9MDtmb3IodmFyIEE9aC5sZW5ndGg7eDxBO3grKyljLmV2ZW50LmFkZChoW3hdLCJsaXZlLiIrWShsLHIpLHtkYXRhOmUsc2VsZWN0b3I6cixoYW5kbGVyOmYsb3JpZ1R5cGU6bCxvcmlnSGFuZGxlcjpmLHByZVR5cGU6b30pfWVsc2UgaC51bmJpbmQoImxpdmUuIitZKGwsciksZil9fXJldHVybiB0aGlzfX0pOwpjLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtjLmZuW2JdPWZ1bmN0aW9uKGQsZSl7aWYoZT09bnVsbCl7ZT1kO2Q9bnVsbH1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMuYmluZChiLGQsZSk6dGhpcy50cmlnZ2VyKGIpfTtpZihjLmF0dHJGbiljLmF0dHJGbltiXT10cnVlfSk7RS5hdHRhY2hFdmVudCYmIUUuYWRkRXZlbnRMaXN0ZW5lciYmYyhFKS5iaW5kKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGMuY2FjaGUpaWYoYy5jYWNoZVthXS5oYW5kbGUpdHJ5e2MuZXZlbnQucmVtb3ZlKGMuY2FjaGVbYV0uaGFuZGxlLmVsZW0pfWNhdGNoKGIpe319KTsKKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShnLGksbixtLHAscSl7cD0wO2Zvcih2YXIgdT1tLmxlbmd0aDtwPHU7cCsrKXt2YXIgeT1tW3BdO2lmKHkpe3ZhciBGPWZhbHNlO2Zvcih5PXlbZ107eTspe2lmKHkuc2l6Y2FjaGU9PT1uKXtGPW1beS5zaXpzZXRdO2JyZWFrfWlmKHkubm9kZVR5cGU9PT0xJiYhcSl7eS5zaXpjYWNoZT1uO3kuc2l6c2V0PXB9aWYoeS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09aSl7Rj15O2JyZWFrfXk9eVtnXX1tW3BdPUZ9fX1mdW5jdGlvbiBiKGcsaSxuLG0scCxxKXtwPTA7Zm9yKHZhciB1PW0ubGVuZ3RoO3A8dTtwKyspe3ZhciB5PW1bcF07aWYoeSl7dmFyIEY9ZmFsc2U7Zm9yKHk9eVtnXTt5Oyl7aWYoeS5zaXpjYWNoZT09PW4pe0Y9bVt5LnNpenNldF07YnJlYWt9aWYoeS5ub2RlVHlwZT09PTEpe2lmKCFxKXt5LnNpemNhY2hlPW47eS5zaXpzZXQ9cH1pZih0eXBlb2YgaSE9PSJzdHJpbmciKXtpZih5PT09aSl7Rj10cnVlO2JyZWFrfX1lbHNlIGlmKGsuZmlsdGVyKGksClt5XSkubGVuZ3RoPjApe0Y9eTticmVha319eT15W2ddfW1bcF09Rn19fXZhciBkPS8oKD86XCgoPzpcKFteKCldK1wpfFteKCldKykrXCl8XFsoPzpcW1teXFtcXV0qXF18WyciXVteJyJdKlsnIl18W15cW1xdJyJdKykrXF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4rfl0pKFxzKixccyopPygoPzoufFxyfFxuKSopL2csZT0wLGY9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoPWZhbHNlLGw9dHJ1ZTtbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7bD1mYWxzZTtyZXR1cm4gMH0pO3ZhciBrPWZ1bmN0aW9uKGcsaSxuLG0pe249bnx8W107dmFyIHA9aT1pfHx0O2lmKGkubm9kZVR5cGUhPT0xJiZpLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighZ3x8dHlwZW9mIGchPT0ic3RyaW5nIilyZXR1cm4gbjt2YXIgcSx1LHksRixNLE49dHJ1ZSxPPWsuaXNYTUwoaSksRD1bXSxSPWc7ZG97ZC5leGVjKCIiKTtpZihxPWQuZXhlYyhSKSl7Uj1xWzNdO0QucHVzaChxWzFdKTtpZihxWzJdKXtGPXFbM107CmJyZWFrfX19d2hpbGUocSk7aWYoRC5sZW5ndGg+MSYmeC5leGVjKGcpKWlmKEQubGVuZ3RoPT09MiYmby5yZWxhdGl2ZVtEWzBdXSl1PUwoRFswXStEWzFdLGkpO2Vsc2UgZm9yKHU9by5yZWxhdGl2ZVtEWzBdXT9baV06ayhELnNoaWZ0KCksaSk7RC5sZW5ndGg7KXtnPUQuc2hpZnQoKTtpZihvLnJlbGF0aXZlW2ddKWcrPUQuc2hpZnQoKTt1PUwoZyx1KX1lbHNle2lmKCFtJiZELmxlbmd0aD4xJiZpLm5vZGVUeXBlPT09OSYmIU8mJm8ubWF0Y2guSUQudGVzdChEWzBdKSYmIW8ubWF0Y2guSUQudGVzdChEW0QubGVuZ3RoLTFdKSl7cT1rLmZpbmQoRC5zaGlmdCgpLGksTyk7aT1xLmV4cHI/ay5maWx0ZXIocS5leHByLHEuc2V0KVswXTpxLnNldFswXX1pZihpKXtxPW0/e2V4cHI6RC5wb3AoKSxzZXQ6QyhtKX06ay5maW5kKEQucG9wKCksRC5sZW5ndGg9PT0xJiYoRFswXT09PSJ+Inx8RFswXT09PSIrIikmJmkucGFyZW50Tm9kZT9pLnBhcmVudE5vZGU6aSxPKTt1PXEuZXhwcj9rLmZpbHRlcihxLmV4cHIsCnEuc2V0KTpxLnNldDtpZihELmxlbmd0aD4wKXk9Qyh1KTtlbHNlIE49ZmFsc2U7Zm9yKDtELmxlbmd0aDspe3E9TT1ELnBvcCgpO2lmKG8ucmVsYXRpdmVbTV0pcT1ELnBvcCgpO2Vsc2UgTT0iIjtpZihxPT1udWxsKXE9aTtvLnJlbGF0aXZlW01dKHkscSxPKX19ZWxzZSB5PVtdfXl8fCh5PXUpO3l8fGsuZXJyb3IoTXx8Zyk7aWYoZi5jYWxsKHkpPT09IltvYmplY3QgQXJyYXldIilpZihOKWlmKGkmJmkubm9kZVR5cGU9PT0xKWZvcihnPTA7eVtnXSE9bnVsbDtnKyspe2lmKHlbZ10mJih5W2ddPT09dHJ1ZXx8eVtnXS5ub2RlVHlwZT09PTEmJmsuY29udGFpbnMoaSx5W2ddKSkpbi5wdXNoKHVbZ10pfWVsc2UgZm9yKGc9MDt5W2ddIT1udWxsO2crKyl5W2ddJiZ5W2ddLm5vZGVUeXBlPT09MSYmbi5wdXNoKHVbZ10pO2Vsc2Ugbi5wdXNoLmFwcGx5KG4seSk7ZWxzZSBDKHksbik7aWYoRil7ayhGLHAsbixtKTtrLnVuaXF1ZVNvcnQobil9cmV0dXJuIG59O2sudW5pcXVlU29ydD1mdW5jdGlvbihnKXtpZih3KXtoPQpsO2cuc29ydCh3KTtpZihoKWZvcih2YXIgaT0xO2k8Zy5sZW5ndGg7aSsrKWdbaV09PT1nW2ktMV0mJmcuc3BsaWNlKGktLSwxKX1yZXR1cm4gZ307ay5tYXRjaGVzPWZ1bmN0aW9uKGcsaSl7cmV0dXJuIGsoZyxudWxsLG51bGwsaSl9O2subWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGcsaSl7cmV0dXJuIGsoaSxudWxsLG51bGwsW2ddKS5sZW5ndGg+MH07ay5maW5kPWZ1bmN0aW9uKGcsaSxuKXt2YXIgbTtpZighZylyZXR1cm5bXTtmb3IodmFyIHA9MCxxPW8ub3JkZXIubGVuZ3RoO3A8cTtwKyspe3ZhciB1LHk9by5vcmRlcltwXTtpZih1PW8ubGVmdE1hdGNoW3ldLmV4ZWMoZykpe3ZhciBGPXVbMV07dS5zcGxpY2UoMSwxKTtpZihGLnN1YnN0cihGLmxlbmd0aC0xKSE9PSJcXCIpe3VbMV09KHVbMV18fCIiKS5yZXBsYWNlKC9cXC9nLCIiKTttPW8uZmluZFt5XSh1LGksbik7aWYobSE9bnVsbCl7Zz1nLnJlcGxhY2Uoby5tYXRjaFt5XSwiIik7YnJlYWt9fX19bXx8KG09aS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTsKcmV0dXJue3NldDptLGV4cHI6Z319O2suZmlsdGVyPWZ1bmN0aW9uKGcsaSxuLG0pe2Zvcih2YXIgcCxxLHU9Zyx5PVtdLEY9aSxNPWkmJmlbMF0mJmsuaXNYTUwoaVswXSk7ZyYmaS5sZW5ndGg7KXtmb3IodmFyIE4gaW4gby5maWx0ZXIpaWYoKHA9by5sZWZ0TWF0Y2hbTl0uZXhlYyhnKSkhPW51bGwmJnBbMl0pe3ZhciBPLEQsUj1vLmZpbHRlcltOXTtEPXBbMV07cT1mYWxzZTtwLnNwbGljZSgxLDEpO2lmKEQuc3Vic3RyKEQubGVuZ3RoLTEpIT09IlxcIil7aWYoRj09PXkpeT1bXTtpZihvLnByZUZpbHRlcltOXSlpZihwPW8ucHJlRmlsdGVyW05dKHAsRixuLHksbSxNKSl7aWYocD09PXRydWUpY29udGludWV9ZWxzZSBxPU89dHJ1ZTtpZihwKWZvcih2YXIgaj0wOyhEPUZbal0pIT1udWxsO2orKylpZihEKXtPPVIoRCxwLGosRik7dmFyIHM9bV4hIU87aWYobiYmTyE9bnVsbClpZihzKXE9dHJ1ZTtlbHNlIEZbal09ZmFsc2U7ZWxzZSBpZihzKXt5LnB1c2goRCk7cT10cnVlfX1pZihPIT09CkIpe258fChGPXkpO2c9Zy5yZXBsYWNlKG8ubWF0Y2hbTl0sIiIpO2lmKCFxKXJldHVybltdO2JyZWFrfX19aWYoZz09PXUpaWYocT09bnVsbClrLmVycm9yKGcpO2Vsc2UgYnJlYWs7dT1nfXJldHVybiBGfTtrLmVycm9yPWZ1bmN0aW9uKGcpe3Rocm93IlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZzt9O3ZhciBvPWsuc2VsZWN0b3JzPXtvcmRlcjpbIklEIiwiTkFNRSIsIlRBRyJdLG1hdGNoOntJRDovIygoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sQ0xBU1M6L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLyxBVFRSOi9cW1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVxzKig/OihcUz89KVxzKihbJyJdKikoLio/KVwzfClccypcXS8sVEFHOi9eKCg/Oltcd1x1MDBjMC1cdUZGRkZcKlwtXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XCgoZXZlbnxvZGR8W1xkbitcLV0qKVwpKT8vLApQT1M6LzoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vfSxsZWZ0TWF0Y2g6e30sYXR0ck1hcDp7ImNsYXNzIjoiY2xhc3NOYW1lIiwiZm9yIjoiaHRtbEZvciJ9LGF0dHJIYW5kbGU6e2hyZWY6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZ2V0QXR0cmlidXRlKCJocmVmIil9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGcsaSl7dmFyIG49dHlwZW9mIGk9PT0ic3RyaW5nIixtPW4mJiEvXFcvLnRlc3QoaSk7bj1uJiYhbTtpZihtKWk9aS50b0xvd2VyQ2FzZSgpO209MDtmb3IodmFyIHA9Zy5sZW5ndGgscTttPHA7bSsrKWlmKHE9Z1ttXSl7Zm9yKDsocT1xLnByZXZpb3VzU2libGluZykmJnEubm9kZVR5cGUhPT0xOyk7Z1ttXT1ufHxxJiZxLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0KaT9xfHxmYWxzZTpxPT09aX1uJiZrLmZpbHRlcihpLGcsdHJ1ZSl9LCI+IjpmdW5jdGlvbihnLGkpe3ZhciBuLG09dHlwZW9mIGk9PT0ic3RyaW5nIixwPTAscT1nLmxlbmd0aDtpZihtJiYhL1xXLy50ZXN0KGkpKWZvcihpPWkudG9Mb3dlckNhc2UoKTtwPHE7cCsrKXtpZihuPWdbcF0pe249bi5wYXJlbnROb2RlO2dbcF09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09aT9uOmZhbHNlfX1lbHNle2Zvcig7cDxxO3ArKylpZihuPWdbcF0pZ1twXT1tP24ucGFyZW50Tm9kZTpuLnBhcmVudE5vZGU9PT1pO20mJmsuZmlsdGVyKGksZyx0cnVlKX19LCIiOmZ1bmN0aW9uKGcsaSxuKXt2YXIgbSxwPWUrKyxxPWI7aWYodHlwZW9mIGk9PT0ic3RyaW5nIiYmIS9cVy8udGVzdChpKSl7bT1pPWkudG9Mb3dlckNhc2UoKTtxPWF9cSgicGFyZW50Tm9kZSIsaSxwLGcsbSxuKX0sIn4iOmZ1bmN0aW9uKGcsaSxuKXt2YXIgbSxwPWUrKyxxPWI7aWYodHlwZW9mIGk9PT0ic3RyaW5nIiYmIS9cVy8udGVzdChpKSl7bT0KaT1pLnRvTG93ZXJDYXNlKCk7cT1hfXEoInByZXZpb3VzU2libGluZyIsaSxwLGcsbSxuKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGcsaSxuKXtpZih0eXBlb2YgaS5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhbilyZXR1cm4oZz1pLmdldEVsZW1lbnRCeUlkKGdbMV0pKSYmZy5wYXJlbnROb2RlP1tnXTpbXX0sTkFNRTpmdW5jdGlvbihnLGkpe2lmKHR5cGVvZiBpLmdldEVsZW1lbnRzQnlOYW1lIT09InVuZGVmaW5lZCIpe2Zvcih2YXIgbj1bXSxtPWkuZ2V0RWxlbWVudHNCeU5hbWUoZ1sxXSkscD0wLHE9bS5sZW5ndGg7cDxxO3ArKyltW3BdLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09Z1sxXSYmbi5wdXNoKG1bcF0pO3JldHVybiBuLmxlbmd0aD09PTA/bnVsbDpufX0sVEFHOmZ1bmN0aW9uKGcsaSl7cmV0dXJuIGkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZ1sxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKGcsaSxuLG0scCxxKXtnPSIgIitnWzFdLnJlcGxhY2UoL1xcL2csCiIiKSsiICI7aWYocSlyZXR1cm4gZztxPTA7Zm9yKHZhciB1Oyh1PWlbcV0pIT1udWxsO3ErKylpZih1KWlmKHBeKHUuY2xhc3NOYW1lJiYoIiAiK3UuY2xhc3NOYW1lKyIgIikucmVwbGFjZSgvW1x0XG5dL2csIiAiKS5pbmRleE9mKGcpPj0wKSlufHxtLnB1c2godSk7ZWxzZSBpZihuKWlbcV09ZmFsc2U7cmV0dXJuIGZhbHNlfSxJRDpmdW5jdGlvbihnKXtyZXR1cm4gZ1sxXS5yZXBsYWNlKC9cXC9nLCIiKX0sVEFHOmZ1bmN0aW9uKGcpe3JldHVybiBnWzFdLnRvTG93ZXJDYXNlKCl9LENISUxEOmZ1bmN0aW9uKGcpe2lmKGdbMV09PT0ibnRoIil7dmFyIGk9LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYyhnWzJdPT09ImV2ZW4iJiYiMm4ifHxnWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChnWzJdKSYmIjBuKyIrZ1syXXx8Z1syXSk7Z1syXT1pWzFdKyhpWzJdfHwxKS0wO2dbM109aVszXS0wfWdbMF09ZSsrO3JldHVybiBnfSxBVFRSOmZ1bmN0aW9uKGcsaSxuLAptLHAscSl7aT1nWzFdLnJlcGxhY2UoL1xcL2csIiIpO2lmKCFxJiZvLmF0dHJNYXBbaV0pZ1sxXT1vLmF0dHJNYXBbaV07aWYoZ1syXT09PSJ+PSIpZ1s0XT0iICIrZ1s0XSsiICI7cmV0dXJuIGd9LFBTRVVETzpmdW5jdGlvbihnLGksbixtLHApe2lmKGdbMV09PT0ibm90IilpZigoZC5leGVjKGdbM10pfHwiIikubGVuZ3RoPjF8fC9eXHcvLnRlc3QoZ1szXSkpZ1szXT1rKGdbM10sbnVsbCxudWxsLGkpO2Vsc2V7Zz1rLmZpbHRlcihnWzNdLGksbix0cnVlXnApO258fG0ucHVzaC5hcHBseShtLGcpO3JldHVybiBmYWxzZX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoZ1swXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChnWzBdKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZ30sUE9TOmZ1bmN0aW9uKGcpe2cudW5zaGlmdCh0cnVlKTtyZXR1cm4gZ319LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGlzYWJsZWQ9PT1mYWxzZSYmZy50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmRpc2FibGVkPT09CnRydWV9LGNoZWNrZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY2hlY2tlZD09PXRydWV9LHNlbGVjdGVkOmZ1bmN0aW9uKGcpe3JldHVybiBnLnNlbGVjdGVkPT09dHJ1ZX0scGFyZW50OmZ1bmN0aW9uKGcpe3JldHVybiEhZy5maXJzdENoaWxkfSxlbXB0eTpmdW5jdGlvbihnKXtyZXR1cm4hZy5maXJzdENoaWxkfSxoYXM6ZnVuY3Rpb24oZyxpLG4pe3JldHVybiEhayhuWzNdLGcpLmxlbmd0aH0saGVhZGVyOmZ1bmN0aW9uKGcpe3JldHVybi9oXGQvaS50ZXN0KGcubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKGcpe3JldHVybiJ0ZXh0Ij09PWcudHlwZX0scmFkaW86ZnVuY3Rpb24oZyl7cmV0dXJuInJhZGlvIj09PWcudHlwZX0sY2hlY2tib3g6ZnVuY3Rpb24oZyl7cmV0dXJuImNoZWNrYm94Ij09PWcudHlwZX0sZmlsZTpmdW5jdGlvbihnKXtyZXR1cm4iZmlsZSI9PT1nLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKGcpe3JldHVybiJwYXNzd29yZCI9PT1nLnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihnKXtyZXR1cm4ic3VibWl0Ij09PQpnLnR5cGV9LGltYWdlOmZ1bmN0aW9uKGcpe3JldHVybiJpbWFnZSI9PT1nLnR5cGV9LHJlc2V0OmZ1bmN0aW9uKGcpe3JldHVybiJyZXNldCI9PT1nLnR5cGV9LGJ1dHRvbjpmdW5jdGlvbihnKXtyZXR1cm4iYnV0dG9uIj09PWcudHlwZXx8Zy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGcpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChnLm5vZGVOYW1lKX19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGcsaSl7cmV0dXJuIGk9PT0wfSxsYXN0OmZ1bmN0aW9uKGcsaSxuLG0pe3JldHVybiBpPT09bS5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihnLGkpe3JldHVybiBpJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oZyxpKXtyZXR1cm4gaSUyPT09MX0sbHQ6ZnVuY3Rpb24oZyxpLG4pe3JldHVybiBpPG5bM10tMH0sZ3Q6ZnVuY3Rpb24oZyxpLG4pe3JldHVybiBpPm5bM10tMH0sbnRoOmZ1bmN0aW9uKGcsaSxuKXtyZXR1cm4gblszXS0KMD09PWl9LGVxOmZ1bmN0aW9uKGcsaSxuKXtyZXR1cm4gblszXS0wPT09aX19LGZpbHRlcjp7UFNFVURPOmZ1bmN0aW9uKGcsaSxuLG0pe3ZhciBwPWlbMV0scT1vLmZpbHRlcnNbcF07aWYocSlyZXR1cm4gcShnLG4saSxtKTtlbHNlIGlmKHA9PT0iY29udGFpbnMiKXJldHVybihnLnRleHRDb250ZW50fHxnLmlubmVyVGV4dHx8ay5nZXRUZXh0KFtnXSl8fCIiKS5pbmRleE9mKGlbM10pPj0wO2Vsc2UgaWYocD09PSJub3QiKXtpPWlbM107bj0wO2ZvcihtPWkubGVuZ3RoO248bTtuKyspaWYoaVtuXT09PWcpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfWVsc2Ugay5lcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitwKX0sQ0hJTEQ6ZnVuY3Rpb24oZyxpKXt2YXIgbj1pWzFdLG09Zztzd2l0Y2gobil7Y2FzZSAib25seSI6Y2FzZSAiZmlyc3QiOmZvcig7bT1tLnByZXZpb3VzU2libGluZzspaWYobS5ub2RlVHlwZT09PTEpcmV0dXJuIGZhbHNlO2lmKG49PT0KImZpcnN0IilyZXR1cm4gdHJ1ZTttPWc7Y2FzZSAibGFzdCI6Zm9yKDttPW0ubmV4dFNpYmxpbmc7KWlmKG0ubm9kZVR5cGU9PT0xKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTtjYXNlICJudGgiOm49aVsyXTt2YXIgcD1pWzNdO2lmKG49PT0xJiZwPT09MClyZXR1cm4gdHJ1ZTt2YXIgcT1pWzBdLHU9Zy5wYXJlbnROb2RlO2lmKHUmJih1LnNpemNhY2hlIT09cXx8IWcubm9kZUluZGV4KSl7dmFyIHk9MDtmb3IobT11LmZpcnN0Q2hpbGQ7bTttPW0ubmV4dFNpYmxpbmcpaWYobS5ub2RlVHlwZT09PTEpbS5ub2RlSW5kZXg9Kyt5O3Uuc2l6Y2FjaGU9cX1tPWcubm9kZUluZGV4LXA7cmV0dXJuIG49PT0wP209PT0wOm0lbj09PTAmJm0vbj49MH19LElEOmZ1bmN0aW9uKGcsaSl7cmV0dXJuIGcubm9kZVR5cGU9PT0xJiZnLmdldEF0dHJpYnV0ZSgiaWQiKT09PWl9LFRBRzpmdW5jdGlvbihnLGkpe3JldHVybiBpPT09IioiJiZnLm5vZGVUeXBlPT09MXx8Zy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Cml9LENMQVNTOmZ1bmN0aW9uKGcsaSl7cmV0dXJuKCIgIisoZy5jbGFzc05hbWV8fGcuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoaSk+LTF9LEFUVFI6ZnVuY3Rpb24oZyxpKXt2YXIgbj1pWzFdO249by5hdHRySGFuZGxlW25dP28uYXR0ckhhbmRsZVtuXShnKTpnW25dIT1udWxsP2dbbl06Zy5nZXRBdHRyaWJ1dGUobik7dmFyIG09bisiIixwPWlbMl0scT1pWzRdO3JldHVybiBuPT1udWxsP3A9PT0iIT0iOnA9PT0iPSI/bT09PXE6cD09PSIqPSI/bS5pbmRleE9mKHEpPj0wOnA9PT0ifj0iPygiICIrbSsiICIpLmluZGV4T2YocSk+PTA6IXE/bSYmbiE9PWZhbHNlOnA9PT0iIT0iP20hPT1xOnA9PT0iXj0iP20uaW5kZXhPZihxKT09PTA6cD09PSIkPSI/bS5zdWJzdHIobS5sZW5ndGgtcS5sZW5ndGgpPT09cTpwPT09Inw9Ij9tPT09cXx8bS5zdWJzdHIoMCxxLmxlbmd0aCsxKT09PXErIi0iOmZhbHNlfSxQT1M6ZnVuY3Rpb24oZyxpLG4sbSl7dmFyIHA9by5zZXRGaWx0ZXJzW2lbMl1dOwppZihwKXJldHVybiBwKGcsbixpLG0pfX19LHg9by5tYXRjaC5QT1Mscj1mdW5jdGlvbihnLGkpe3JldHVybiJcXCIrKGktMCsxKX0sQTtmb3IoQSBpbiBvLm1hdGNoKXtvLm1hdGNoW0FdPVJlZ0V4cChvLm1hdGNoW0FdLnNvdXJjZSsvKD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpO28ubGVmdE1hdGNoW0FdPVJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbQV0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxyKSl9dmFyIEM9ZnVuY3Rpb24oZyxpKXtnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGcsMCk7aWYoaSl7aS5wdXNoLmFwcGx5KGksZyk7cmV0dXJuIGl9cmV0dXJuIGd9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApfWNhdGNoKEope0M9ZnVuY3Rpb24oZyxpKXt2YXIgbj0wLG09aXx8W107aWYoZi5jYWxsKGcpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShtLApnKTtlbHNlIGlmKHR5cGVvZiBnLmxlbmd0aD09PSJudW1iZXIiKWZvcih2YXIgcD1nLmxlbmd0aDtuPHA7bisrKW0ucHVzaChnW25dKTtlbHNlIGZvcig7Z1tuXTtuKyspbS5wdXNoKGdbbl0pO3JldHVybiBtfX12YXIgdyxJO2lmKHQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXc9ZnVuY3Rpb24oZyxpKXtpZihnPT09aSl7aD10cnVlO3JldHVybiAwfWlmKCFnLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9ufHwhaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbilyZXR1cm4gZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxO3JldHVybiBnLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGkpJjQ/LTE6MX07ZWxzZXt3PWZ1bmN0aW9uKGcsaSl7dmFyIG4sbSxwPVtdLHE9W107bj1nLnBhcmVudE5vZGU7bT1pLnBhcmVudE5vZGU7dmFyIHU9bjtpZihnPT09aSl7aD10cnVlO3JldHVybiAwfWVsc2UgaWYobj09PW0pcmV0dXJuIEkoZyxpKTtlbHNlIGlmKG4pe2lmKCFtKXJldHVybiAxfWVsc2UgcmV0dXJuLTE7CmZvcig7dTspe3AudW5zaGlmdCh1KTt1PXUucGFyZW50Tm9kZX1mb3IodT1tO3U7KXtxLnVuc2hpZnQodSk7dT11LnBhcmVudE5vZGV9bj1wLmxlbmd0aDttPXEubGVuZ3RoO2Zvcih1PTA7dTxuJiZ1PG07dSsrKWlmKHBbdV0hPT1xW3VdKXJldHVybiBJKHBbdV0scVt1XSk7cmV0dXJuIHU9PT1uP0koZyxxW3VdLC0xKTpJKHBbdV0saSwxKX07ST1mdW5jdGlvbihnLGksbil7aWYoZz09PWkpcmV0dXJuIG47Zm9yKGc9Zy5uZXh0U2libGluZztnOyl7aWYoZz09PWkpcmV0dXJuLTE7Zz1nLm5leHRTaWJsaW5nfXJldHVybiAxfX1rLmdldFRleHQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBpPSIiLG4sbT0wO2dbbV07bSsrKXtuPWdbbV07aWYobi5ub2RlVHlwZT09PTN8fG4ubm9kZVR5cGU9PT00KWkrPW4ubm9kZVZhbHVlO2Vsc2UgaWYobi5ub2RlVHlwZSE9PTgpaSs9ay5nZXRUZXh0KG4uY2hpbGROb2Rlcyl9cmV0dXJuIGl9OyhmdW5jdGlvbigpe3ZhciBnPXQuY3JlYXRlRWxlbWVudCgiZGl2IiksCmk9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksbj10LmRvY3VtZW50RWxlbWVudDtnLmlubmVySFRNTD0iPGEgbmFtZT0nIitpKyInLz4iO24uaW5zZXJ0QmVmb3JlKGcsbi5maXJzdENoaWxkKTtpZih0LmdldEVsZW1lbnRCeUlkKGkpKXtvLmZpbmQuSUQ9ZnVuY3Rpb24obSxwLHEpe2lmKHR5cGVvZiBwLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFxKXJldHVybihwPXAuZ2V0RWxlbWVudEJ5SWQobVsxXSkpP3AuaWQ9PT1tWzFdfHx0eXBlb2YgcC5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJnAuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWU9PT1tWzFdP1twXTpCOltdfTtvLmZpbHRlci5JRD1mdW5jdGlvbihtLHApe3ZhciBxPXR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUhPT0idW5kZWZpbmVkIiYmbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBtLm5vZGVUeXBlPT09MSYmcSYmcS5ub2RlVmFsdWU9PT1wfX1uLnJlbW92ZUNoaWxkKGcpOwpuPWc9bnVsbH0pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9dC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmFwcGVuZENoaWxkKHQuY3JlYXRlQ29tbWVudCgiIikpO2lmKGcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MClvLmZpbmQuVEFHPWZ1bmN0aW9uKGksbil7dmFyIG09bi5nZXRFbGVtZW50c0J5VGFnTmFtZShpWzFdKTtpZihpWzFdPT09IioiKXtmb3IodmFyIHA9W10scT0wO21bcV07cSsrKW1bcV0ubm9kZVR5cGU9PT0xJiZwLnB1c2gobVtxXSk7bT1wfXJldHVybiBtfTtnLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiI7aWYoZy5maXJzdENoaWxkJiZ0eXBlb2YgZy5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PSJ1bmRlZmluZWQiJiZnLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyIpby5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oaSl7cmV0dXJuIGkuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX07Zz1udWxsfSkoKTt0LnF1ZXJ5U2VsZWN0b3JBbGwmJgpmdW5jdGlvbigpe3ZhciBnPWssaT10LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuaW5uZXJIVE1MPSI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7aWYoIShpLnF1ZXJ5U2VsZWN0b3JBbGwmJmkucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGg9PT0wKSl7az1mdW5jdGlvbihtLHAscSx1KXtwPXB8fHQ7bT1tLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCF1JiYhay5pc1hNTChwKSlpZihwLm5vZGVUeXBlPT09OSl0cnl7cmV0dXJuIEMocC5xdWVyeVNlbGVjdG9yQWxsKG0pLHEpfWNhdGNoKHkpe31lbHNlIGlmKHAubm9kZVR5cGU9PT0xJiZwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2JqZWN0Iil7dmFyIEY9cC5nZXRBdHRyaWJ1dGUoImlkIiksTT1GfHwiX19zaXp6bGVfXyI7Rnx8cC5zZXRBdHRyaWJ1dGUoImlkIixNKTt0cnl7cmV0dXJuIEMocC5xdWVyeVNlbGVjdG9yQWxsKCIjIitNKyIgIittKSxxKX1jYXRjaChOKXt9ZmluYWxseXtGfHwKcC5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fXJldHVybiBnKG0scCxxLHUpfTtmb3IodmFyIG4gaW4gZylrW25dPWdbbl07aT1udWxsfX0oKTsoZnVuY3Rpb24oKXt2YXIgZz10LmRvY3VtZW50RWxlbWVudCxpPWcubWF0Y2hlc1NlbGVjdG9yfHxnLm1vek1hdGNoZXNTZWxlY3Rvcnx8Zy53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGcubXNNYXRjaGVzU2VsZWN0b3Isbj1mYWxzZTt0cnl7aS5jYWxsKHQuZG9jdW1lbnRFbGVtZW50LCJbdGVzdCE9JyddOnNpenpsZSIpfWNhdGNoKG0pe249dHJ1ZX1pZihpKWsubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKHAscSl7cT1xLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFrLmlzWE1MKHApKXRyeXtpZihufHwhby5tYXRjaC5QU0VVRE8udGVzdChxKSYmIS8hPS8udGVzdChxKSlyZXR1cm4gaS5jYWxsKHAscSl9Y2F0Y2godSl7fXJldHVybiBrKHEsbnVsbCxudWxsLFtwXSkubGVuZ3RoPjB9fSkoKTsoZnVuY3Rpb24oKXt2YXIgZz0KdC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEoIWcuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8Zy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MCkpe2cubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MSl7by5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpO28uZmluZC5DTEFTUz1mdW5jdGlvbihpLG4sbSl7aWYodHlwZW9mIG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PSJ1bmRlZmluZWQiJiYhbSlyZXR1cm4gbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGlbMV0pfTtnPW51bGx9fX0pKCk7ay5jb250YWlucz10LmRvY3VtZW50RWxlbWVudC5jb250YWlucz9mdW5jdGlvbihnLGkpe3JldHVybiBnIT09aSYmKGcuY29udGFpbnM/Zy5jb250YWlucyhpKTp0cnVlKX06dC5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/CmZ1bmN0aW9uKGcsaSl7cmV0dXJuISEoZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpKSYxNil9OmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfTtrLmlzWE1MPWZ1bmN0aW9uKGcpe3JldHVybihnPShnP2cub3duZXJEb2N1bWVudHx8ZzowKS5kb2N1bWVudEVsZW1lbnQpP2cubm9kZU5hbWUhPT0iSFRNTCI6ZmFsc2V9O3ZhciBMPWZ1bmN0aW9uKGcsaSl7Zm9yKHZhciBuLG09W10scD0iIixxPWkubm9kZVR5cGU/W2ldOmk7bj1vLm1hdGNoLlBTRVVETy5leGVjKGcpOyl7cCs9blswXTtnPWcucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIil9Zz1vLnJlbGF0aXZlW2ddP2crIioiOmc7bj0wO2Zvcih2YXIgdT1xLmxlbmd0aDtuPHU7bisrKWsoZyxxW25dLG0pO3JldHVybiBrLmZpbHRlcihwLG0pfTtjLmZpbmQ9aztjLmV4cHI9ay5zZWxlY3RvcnM7Yy5leHByWyI6Il09Yy5leHByLmZpbHRlcnM7Yy51bmlxdWU9ay51bmlxdWVTb3J0O2MudGV4dD1rLmdldFRleHQ7Yy5pc1hNTERvYz1rLmlzWE1MOwpjLmNvbnRhaW5zPWsuY29udGFpbnN9KSgpO3ZhciBaYT0vVW50aWwkLywkYT0vXig/OnBhcmVudHN8cHJldlVudGlsfHByZXZBbGwpLyxhYj0vLC8sTmE9L14uW146I1xbXC4sXSokLyxiYj1BcnJheS5wcm90b3R5cGUuc2xpY2UsY2I9Yy5leHByLm1hdGNoLlBPUztjLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGQ9MCxlPTAsZj10aGlzLmxlbmd0aDtlPGY7ZSsrKXtkPWIubGVuZ3RoO2MuZmluZChhLHRoaXNbZV0sYik7aWYoZT4wKWZvcih2YXIgaD1kO2g8Yi5sZW5ndGg7aCsrKWZvcih2YXIgbD0wO2w8ZDtsKyspaWYoYltsXT09PWJbaF0pe2Iuc3BsaWNlKGgtLSwxKTticmVha319cmV0dXJuIGJ9LGhhczpmdW5jdGlvbihhKXt2YXIgYj1jKGEpO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKylpZihjLmNvbnRhaW5zKHRoaXMsYltkXSkpcmV0dXJuIHRydWV9KX0sCm5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobWEodGhpcyxhLGZhbHNlKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhtYSh0aGlzLGEsdHJ1ZSksImZpbHRlciIsYSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhYSYmYy5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MH0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBkPVtdLGUsZixoPXRoaXNbMF07aWYoYy5pc0FycmF5KGEpKXt2YXIgbCxrPXt9LG89MTtpZihoJiZhLmxlbmd0aCl7ZT0wO2ZvcihmPWEubGVuZ3RoO2U8ZjtlKyspe2w9YVtlXTtrW2xdfHwoa1tsXT1jLmV4cHIubWF0Y2guUE9TLnRlc3QobCk/YyhsLGJ8fHRoaXMuY29udGV4dCk6bCl9Zm9yKDtoJiZoLm93bmVyRG9jdW1lbnQmJmghPT1iOyl7Zm9yKGwgaW4gayl7ZT1rW2xdO2lmKGUuanF1ZXJ5P2UuaW5kZXgoaCk+LTE6YyhoKS5pcyhlKSlkLnB1c2goe3NlbGVjdG9yOmwsZWxlbTpoLGxldmVsOm99KX1oPQpoLnBhcmVudE5vZGU7bysrfX1yZXR1cm4gZH1sPWNiLnRlc3QoYSk/YyhhLGJ8fHRoaXMuY29udGV4dCk6bnVsbDtlPTA7Zm9yKGY9dGhpcy5sZW5ndGg7ZTxmO2UrKylmb3IoaD10aGlzW2VdO2g7KWlmKGw/bC5pbmRleChoKT4tMTpjLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGgsYSkpe2QucHVzaChoKTticmVha31lbHNle2g9aC5wYXJlbnROb2RlO2lmKCFofHwhaC5vd25lckRvY3VtZW50fHxoPT09YilicmVha31kPWQubGVuZ3RoPjE/Yy51bmlxdWUoZCk6ZDtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCwiY2xvc2VzdCIsYSl9LGluZGV4OmZ1bmN0aW9uKGEpe2lmKCFhfHx0eXBlb2YgYT09PSJzdHJpbmciKXJldHVybiBjLmluQXJyYXkodGhpc1swXSxhP2MoYSk6dGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpKTtyZXR1cm4gYy5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGQ9dHlwZW9mIGE9PT0ic3RyaW5nIj9jKGEsYnx8dGhpcy5jb250ZXh0KToKYy5tYWtlQXJyYXkoYSksZT1jLm1lcmdlKHRoaXMuZ2V0KCksZCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKCFkWzBdfHwhZFswXS5wYXJlbnROb2RlfHxkWzBdLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMXx8IWVbMF18fCFlWzBdLnBhcmVudE5vZGV8fGVbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExP2U6Yy51bmlxdWUoZSkpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9fSk7Yy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5wYXJlbnROb2RlKSYmYS5ub2RlVHlwZSE9PTExP2E6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBjLmRpcihhLCJwYXJlbnROb2RlIixkKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gYy5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBjLm50aChhLAoyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGMuZGlyKGEsIm5leHRTaWJsaW5nIixkKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixkKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLnBhcmVudE5vZGUuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OmMubWFrZUFycmF5KGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLApiKXtjLmZuW2FdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5tYXAodGhpcyxiLGQpO1phLnRlc3QoYSl8fChlPWQpO2lmKGUmJnR5cGVvZiBlPT09InN0cmluZyIpZj1jLmZpbHRlcihlLGYpO2Y9dGhpcy5sZW5ndGg+MT9jLnVuaXF1ZShmKTpmO2lmKCh0aGlzLmxlbmd0aD4xfHxhYi50ZXN0KGUpKSYmJGEudGVzdChhKSlmPWYucmV2ZXJzZSgpO3JldHVybiB0aGlzLnB1c2hTdGFjayhmLGEsYmIuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9fSk7Yy5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihhLGIsZCl7aWYoZClhPSI6bm90KCIrYSsiKSI7cmV0dXJuIGIubGVuZ3RoPT09MT9jLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJbMF0sYSk/W2JbMF1dOltdOmMuZmluZC5tYXRjaGVzKGEsYil9LGRpcjpmdW5jdGlvbihhLGIsZCl7dmFyIGU9W107Zm9yKGE9YVtiXTthJiZhLm5vZGVUeXBlIT09OSYmKGQ9PT1CfHxhLm5vZGVUeXBlIT09MXx8IWMoYSkuaXMoZCkpOyl7YS5ub2RlVHlwZT09PTEmJgplLnB1c2goYSk7YT1hW2JdfXJldHVybiBlfSxudGg6ZnVuY3Rpb24oYSxiLGQpe2I9Ynx8MTtmb3IodmFyIGU9MDthO2E9YVtkXSlpZihhLm5vZGVUeXBlPT09MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1bXTthO2E9YS5uZXh0U2libGluZylhLm5vZGVUeXBlPT09MSYmYSE9PWImJmQucHVzaChhKTtyZXR1cm4gZH19KTt2YXIgemE9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywkPS9eXHMrLyxBYT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLEJhPS88KFtcdzpdKykvLGRiPS88dGJvZHkvaSxlYj0vPHwmIz9cdys7LyxDYT0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLERhPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGZiPS9cPShbXj0iJz5cc10rXC8pPi9nLFA9e29wdGlvbjpbMSwKIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O1Aub3B0Z3JvdXA9UC5vcHRpb247UC50Ym9keT1QLnRmb290PVAuY29sZ3JvdXA9UC5jYXB0aW9uPVAudGhlYWQ7UC50aD1QLnRkO2lmKCFjLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSlQLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdO2MuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPQpjKHRoaXMpO2QudGV4dChhLmNhbGwodGhpcyxiLGQudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9PSJvYmplY3QiJiZhIT09QilyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHx0KS5jcmVhdGVUZXh0Tm9kZShhKSk7cmV0dXJuIGMudGV4dCh0aGlzKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihjLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXtjKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsZCkpfSk7aWYodGhpc1swXSl7dmFyIGI9YyhhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUodHJ1ZSk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKTtiLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzO2QuZmlyc3RDaGlsZCYmZC5maXJzdENoaWxkLm5vZGVUeXBlPT09MTspZD1kLmZpcnN0Q2hpbGQ7cmV0dXJuIGR9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LAp3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Yyh0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWModGhpcyksZD1iLmNvbnRlbnRzKCk7ZC5sZW5ndGg/ZC53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2ModGhpcykud3JhcEFsbChhKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Yy5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGModGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsdHJ1ZSxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5hcHBlbmRDaGlsZChhKX0pfSwKcHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmluc2VydEJlZm9yZShhLHRoaXMuZmlyc3RDaGlsZCl9KX0sYmVmb3JlOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmYWxzZSxmdW5jdGlvbihiKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsdGhpcyl9KTtlbHNlIGlmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWMoYXJndW1lbnRzWzBdKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmYWxzZSxmdW5jdGlvbihiKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsCnRoaXMubmV4dFNpYmxpbmcpfSk7ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxjKGFyZ3VtZW50c1swXSkudG9BcnJheSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD0wLGU7KGU9dGhpc1tkXSkhPW51bGw7ZCsrKWlmKCFhfHxjLmZpbHRlcihhLFtlXSkubGVuZ3RoKXtpZighYiYmZS5ub2RlVHlwZT09PTEpe2MuY2xlYW5EYXRhKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7Yy5jbGVhbkRhdGEoW2VdKX1lLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX1yZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiOyhiPXRoaXNbYV0pIT1udWxsO2ErKylmb3IoYi5ub2RlVHlwZT09PTEmJmMuY2xlYW5EYXRhKGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7Yi5maXJzdENoaWxkOyliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCk7CnJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLm1hcChmdW5jdGlvbigpe2lmKCFjLnN1cHBvcnQubm9DbG9uZUV2ZW50JiYhYy5pc1hNTERvYyh0aGlzKSl7dmFyIGQ9dGhpcy5vdXRlckhUTUwsZT10aGlzLm93bmVyRG9jdW1lbnQ7aWYoIWQpe2Q9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmFwcGVuZENoaWxkKHRoaXMuY2xvbmVOb2RlKHRydWUpKTtkPWQuaW5uZXJIVE1MfXJldHVybiBjLmNsZWFuKFtkLnJlcGxhY2UoemEsIiIpLnJlcGxhY2UoZmIsJz0iJDEiPicpLnJlcGxhY2UoJCwiIildLGUpWzBdfWVsc2UgcmV0dXJuIHRoaXMuY2xvbmVOb2RlKHRydWUpfSk7aWYoYT09PXRydWUpe25hKHRoaXMsYik7bmEodGhpcy5maW5kKCIqIiksYi5maW5kKCIqIikpfXJldHVybiBifSxodG1sOmZ1bmN0aW9uKGEpe2lmKGE9PT1CKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLm5vZGVUeXBlPT09MT90aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKHphLCIiKTpudWxsOwplbHNlIGlmKHR5cGVvZiBhPT09InN0cmluZyImJiFDYS50ZXN0KGEpJiYoYy5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlfHwhJC50ZXN0KGEpKSYmIVBbKEJhLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShBYSwiPCQxPjwvJDI+Iik7dHJ5e2Zvcih2YXIgYj0wLGQ9dGhpcy5sZW5ndGg7YjxkO2IrKylpZih0aGlzW2JdLm5vZGVUeXBlPT09MSl7Yy5jbGVhbkRhdGEodGhpc1tiXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTt0aGlzW2JdLmlubmVySFRNTD1hfX1jYXRjaChlKXt0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfX1lbHNlIGMuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oZil7dmFyIGg9Yyh0aGlzKTtoLmh0bWwoYS5jYWxsKHRoaXMsZixoLmh0bWwoKSkpfSk6dGhpcy5lbXB0eSgpLmFwcGVuZChhKTtyZXR1cm4gdGhpc30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXtpZihjLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD0KYyh0aGlzKSxlPWQuaHRtbCgpO2QucmVwbGFjZVdpdGgoYS5jYWxsKHRoaXMsYixlKSl9KTtpZih0eXBlb2YgYSE9PSJzdHJpbmciKWE9YyhhKS5kZXRhY2goKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZXh0U2libGluZyxkPXRoaXMucGFyZW50Tm9kZTtjKHRoaXMpLnJlbW92ZSgpO2I/YyhiKS5iZWZvcmUoYSk6YyhkKS5hcHBlbmQoYSl9KX1lbHNlIHJldHVybiB0aGlzLnB1c2hTdGFjayhjKGMuaXNGdW5jdGlvbihhKT9hKCk6YSksInJlcGxhY2VXaXRoIixhKX0sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLHRydWUpfSxkb21NYW5pcDpmdW5jdGlvbihhLGIsZCl7dmFyIGUsZixoLGw9YVswXSxrPVtdO2lmKCFjLnN1cHBvcnQuY2hlY2tDbG9uZSYmYXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiBsPT09InN0cmluZyImJkRhLnRlc3QobCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2ModGhpcykuZG9tTWFuaXAoYSwKYixkLHRydWUpfSk7aWYoYy5pc0Z1bmN0aW9uKGwpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oeCl7dmFyIHI9Yyh0aGlzKTthWzBdPWwuY2FsbCh0aGlzLHgsYj9yLmh0bWwoKTpCKTtyLmRvbU1hbmlwKGEsYixkKX0pO2lmKHRoaXNbMF0pe2U9bCYmbC5wYXJlbnROb2RlO2U9Yy5zdXBwb3J0LnBhcmVudE5vZGUmJmUmJmUubm9kZVR5cGU9PT0xMSYmZS5jaGlsZE5vZGVzLmxlbmd0aD09PXRoaXMubGVuZ3RoP3tmcmFnbWVudDplfTpjLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspO2g9ZS5mcmFnbWVudDtpZihmPWguY2hpbGROb2Rlcy5sZW5ndGg9PT0xP2g9aC5maXJzdENoaWxkOmguZmlyc3RDaGlsZCl7Yj1iJiZjLm5vZGVOYW1lKGYsInRyIik7Zj0wO2Zvcih2YXIgbz10aGlzLmxlbmd0aDtmPG87ZisrKWQuY2FsbChiP2Mubm9kZU5hbWUodGhpc1tmXSwidGFibGUiKT90aGlzW2ZdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHx0aGlzW2ZdLmFwcGVuZENoaWxkKHRoaXNbZl0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKToKdGhpc1tmXTp0aGlzW2ZdLGY+MHx8ZS5jYWNoZWFibGV8fHRoaXMubGVuZ3RoPjE/aC5jbG9uZU5vZGUodHJ1ZSk6aCl9ay5sZW5ndGgmJmMuZWFjaChrLE9hKX1yZXR1cm4gdGhpc319KTtjLmJ1aWxkRnJhZ21lbnQ9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGYsaDtiPWImJmJbMF0/YlswXS5vd25lckRvY3VtZW50fHxiWzBdOnQ7aWYoYS5sZW5ndGg9PT0xJiZ0eXBlb2YgYVswXT09PSJzdHJpbmciJiZhWzBdLmxlbmd0aDw1MTImJmI9PT10JiYhQ2EudGVzdChhWzBdKSYmKGMuc3VwcG9ydC5jaGVja0Nsb25lfHwhRGEudGVzdChhWzBdKSkpe2Y9dHJ1ZTtpZihoPWMuZnJhZ21lbnRzW2FbMF1dKWlmKGghPT0xKWU9aH1pZighZSl7ZT1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtjLmNsZWFuKGEsYixlLGQpfWlmKGYpYy5mcmFnbWVudHNbYVswXV09aD9lOjE7cmV0dXJue2ZyYWdtZW50OmUsY2FjaGVhYmxlOmZ9fTtjLmZyYWdtZW50cz17fTtjLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLApwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtjLmZuW2FdPWZ1bmN0aW9uKGQpe3ZhciBlPVtdO2Q9YyhkKTt2YXIgZj10aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0ucGFyZW50Tm9kZTtpZihmJiZmLm5vZGVUeXBlPT09MTEmJmYuY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiZkLmxlbmd0aD09PTEpe2RbYl0odGhpc1swXSk7cmV0dXJuIHRoaXN9ZWxzZXtmPTA7Zm9yKHZhciBoPWQubGVuZ3RoO2Y8aDtmKyspe3ZhciBsPShmPjA/dGhpcy5jbG9uZSh0cnVlKTp0aGlzKS5nZXQoKTtjKGRbZl0pW2JdKGwpO2U9ZS5jb25jYXQobCl9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUsYSxkLnNlbGVjdG9yKX19fSk7Yy5leHRlbmQoe2NsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe2I9Ynx8dDtpZih0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT09InVuZGVmaW5lZCIpYj1iLm93bmVyRG9jdW1lbnR8fApiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fHQ7Zm9yKHZhciBmPVtdLGg9MCxsOyhsPWFbaF0pIT1udWxsO2grKyl7aWYodHlwZW9mIGw9PT0ibnVtYmVyIilsKz0iIjtpZihsKXtpZih0eXBlb2YgbD09PSJzdHJpbmciJiYhZWIudGVzdChsKSlsPWIuY3JlYXRlVGV4dE5vZGUobCk7ZWxzZSBpZih0eXBlb2YgbD09PSJzdHJpbmciKXtsPWwucmVwbGFjZShBYSwiPCQxPjwvJDI+Iik7dmFyIGs9KEJhLmV4ZWMobCl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbz1QW2tdfHxQLl9kZWZhdWx0LHg9b1swXSxyPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKHIuaW5uZXJIVE1MPW9bMV0rbCtvWzJdO3gtLTspcj1yLmxhc3RDaGlsZDtpZighYy5zdXBwb3J0LnRib2R5KXt4PWRiLnRlc3QobCk7az1rPT09InRhYmxlIiYmIXg/ci5maXJzdENoaWxkJiZyLmZpcnN0Q2hpbGQuY2hpbGROb2RlczpvWzFdPT09Ijx0YWJsZT4iJiYheD9yLmNoaWxkTm9kZXM6W107Zm9yKG89ay5sZW5ndGgtCjE7bz49MDstLW8pYy5ub2RlTmFtZShrW29dLCJ0Ym9keSIpJiYha1tvXS5jaGlsZE5vZGVzLmxlbmd0aCYma1tvXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGtbb10pfSFjLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJiQudGVzdChsKSYmci5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZSgkLmV4ZWMobClbMF0pLHIuZmlyc3RDaGlsZCk7bD1yLmNoaWxkTm9kZXN9aWYobC5ub2RlVHlwZSlmLnB1c2gobCk7ZWxzZSBmPWMubWVyZ2UoZixsKX19aWYoZClmb3IoaD0wO2ZbaF07aCsrKWlmKGUmJmMubm9kZU5hbWUoZltoXSwic2NyaXB0IikmJighZltoXS50eXBlfHxmW2hdLnR5cGUudG9Mb3dlckNhc2UoKT09PSJ0ZXh0L2phdmFzY3JpcHQiKSllLnB1c2goZltoXS5wYXJlbnROb2RlP2ZbaF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmW2hdKTpmW2hdKTtlbHNle2ZbaF0ubm9kZVR5cGU9PT0xJiZmLnNwbGljZS5hcHBseShmLFtoKzEsMF0uY29uY2F0KGMubWFrZUFycmF5KGZbaF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKSkpOwpkLmFwcGVuZENoaWxkKGZbaF0pfXJldHVybiBmfSxjbGVhbkRhdGE6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGQsZT1jLmNhY2hlLGY9Yy5ldmVudC5zcGVjaWFsLGg9Yy5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8sbD0wLGs7KGs9YVtsXSkhPW51bGw7bCsrKWlmKCEoay5ub2RlTmFtZSYmYy5ub0RhdGFbay5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkpaWYoZD1rW2MuZXhwYW5kb10pe2lmKChiPWVbZF0pJiZiLmV2ZW50cylmb3IodmFyIG8gaW4gYi5ldmVudHMpZltvXT9jLmV2ZW50LnJlbW92ZShrLG8pOmMucmVtb3ZlRXZlbnQoayxvLGIuaGFuZGxlKTtpZihoKWRlbGV0ZSBrW2MuZXhwYW5kb107ZWxzZSBrLnJlbW92ZUF0dHJpYnV0ZSYmay5yZW1vdmVBdHRyaWJ1dGUoYy5leHBhbmRvKTtkZWxldGUgZVtkXX19fSk7dmFyIEVhPS9hbHBoYVwoW14pXSpcKS9pLGdiPS9vcGFjaXR5PShbXildKikvLGhiPS8tKFthLXpdKS9pZyxpYj0vKFtBLVpdKS9nLEZhPS9eLT9cZCsoPzpweCk/JC9pLApqYj0vXi0/XGQvLGtiPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxQYT1bIkxlZnQiLCJSaWdodCJdLFFhPVsiVG9wIiwiQm90dG9tIl0sVyxHYSxhYSxsYj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O2MuZm4uY3NzPWZ1bmN0aW9uKGEsYil7aWYoYXJndW1lbnRzLmxlbmd0aD09PTImJmI9PT1CKXJldHVybiB0aGlzO3JldHVybiBjLmFjY2Vzcyh0aGlzLGEsYix0cnVlLGZ1bmN0aW9uKGQsZSxmKXtyZXR1cm4gZiE9PUI/Yy5zdHlsZShkLGUsZik6Yy5jc3MoZCxlKX0pfTtjLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBkPVcoYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gZD09PSIiPyIxIjpkfWVsc2UgcmV0dXJuIGEuc3R5bGUub3BhY2l0eX19fSxjc3NOdW1iZXI6e3pJbmRleDp0cnVlLGZvbnRXZWlnaHQ6dHJ1ZSxvcGFjaXR5OnRydWUsCnpvb206dHJ1ZSxsaW5lSGVpZ2h0OnRydWV9LGNzc1Byb3BzOnsiZmxvYXQiOmMuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGQsZSl7aWYoISghYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhYS5zdHlsZSkpe3ZhciBmLGg9Yy5jYW1lbENhc2UoYiksbD1hLnN0eWxlLGs9Yy5jc3NIb29rc1toXTtiPWMuY3NzUHJvcHNbaF18fGg7aWYoZCE9PUIpe2lmKCEodHlwZW9mIGQ9PT0ibnVtYmVyIiYmaXNOYU4oZCl8fGQ9PW51bGwpKXtpZih0eXBlb2YgZD09PSJudW1iZXIiJiYhYy5jc3NOdW1iZXJbaF0pZCs9InB4IjtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PUIpdHJ5e2xbYl09ZH1jYXRjaChvKXt9fX1lbHNle2lmKGsmJiJnZXQiaW4gayYmKGY9ay5nZXQoYSxmYWxzZSxlKSkhPT1CKXJldHVybiBmO3JldHVybiBsW2JdfX19LGNzczpmdW5jdGlvbihhLGIsZCl7dmFyIGUsZj1jLmNhbWVsQ2FzZShiKSwKaD1jLmNzc0hvb2tzW2ZdO2I9Yy5jc3NQcm9wc1tmXXx8ZjtpZihoJiYiZ2V0ImluIGgmJihlPWguZ2V0KGEsdHJ1ZSxkKSkhPT1CKXJldHVybiBlO2Vsc2UgaWYoVylyZXR1cm4gVyhhLGIsZil9LHN3YXA6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPXt9LGY7Zm9yKGYgaW4gYil7ZVtmXT1hLnN0eWxlW2ZdO2Euc3R5bGVbZl09YltmXX1kLmNhbGwoYSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWVbZl19LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGhiLGxiKX19KTtjLmN1ckNTUz1jLmNzcztjLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7Yy5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGQsZSxmKXt2YXIgaDtpZihlKXtpZihkLm9mZnNldFdpZHRoIT09MCloPW9hKGQsYixmKTtlbHNlIGMuc3dhcChkLGtiLGZ1bmN0aW9uKCl7aD1vYShkLGIsZil9KTtpZihoPD0wKXtoPVcoZCxiLGIpO2lmKGg9PT0iMHB4IiYmYWEpaD1hYShkLGIsYik7CmlmKGghPW51bGwpcmV0dXJuIGg9PT0iInx8aD09PSJhdXRvIj8iMHB4IjpofWlmKGg8MHx8aD09bnVsbCl7aD1kLnN0eWxlW2JdO3JldHVybiBoPT09IiJ8fGg9PT0iYXV0byI/IjBweCI6aH1yZXR1cm4gdHlwZW9mIGg9PT0ic3RyaW5nIj9oOmgrInB4In19LHNldDpmdW5jdGlvbihkLGUpe2lmKEZhLnRlc3QoZSkpe2U9cGFyc2VGbG9hdChlKTtpZihlPj0wKXJldHVybiBlKyJweCJ9ZWxzZSByZXR1cm4gZX19fSk7aWYoIWMuc3VwcG9ydC5vcGFjaXR5KWMuY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGdiLnRlc3QoKGImJmEuY3VycmVudFN0eWxlP2EuY3VycmVudFN0eWxlLmZpbHRlcjphLnN0eWxlLmZpbHRlcil8fCIiKT9wYXJzZUZsb2F0KFJlZ0V4cC4kMSkvMTAwKyIiOmI/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLnN0eWxlO2Quem9vbT0xO3ZhciBlPWMuaXNOYU4oYik/IiI6ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSIsZj0KZC5maWx0ZXJ8fCIiO2QuZmlsdGVyPUVhLnRlc3QoZik/Zi5yZXBsYWNlKEVhLGUpOmQuZmlsdGVyKyIgIitlfX07aWYodC5kZWZhdWx0VmlldyYmdC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKUdhPWZ1bmN0aW9uKGEsYixkKXt2YXIgZTtkPWQucmVwbGFjZShpYiwiLSQxIikudG9Mb3dlckNhc2UoKTtpZighKGI9YS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSlyZXR1cm4gQjtpZihiPWIuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpKXtlPWIuZ2V0UHJvcGVydHlWYWx1ZShkKTtpZihlPT09IiImJiFjLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYSkpZT1jLnN0eWxlKGEsZCl9cmV0dXJuIGV9O2lmKHQuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSlhYT1mdW5jdGlvbihhLGIpe3ZhciBkLGUsZj1hLmN1cnJlbnRTdHlsZSYmYS5jdXJyZW50U3R5bGVbYl0saD1hLnN0eWxlO2lmKCFGYS50ZXN0KGYpJiZqYi50ZXN0KGYpKXtkPWgubGVmdDsKZT1hLnJ1bnRpbWVTdHlsZS5sZWZ0O2EucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdDtoLmxlZnQ9Yj09PSJmb250U2l6ZSI/IjFlbSI6Znx8MDtmPWgucGl4ZWxMZWZ0KyJweCI7aC5sZWZ0PWQ7YS5ydW50aW1lU3R5bGUubGVmdD1lfXJldHVybiBmPT09IiI/ImF1dG8iOmZ9O1c9R2F8fGFhO2lmKGMuZXhwciYmYy5leHByLmZpbHRlcnMpe2MuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldEhlaWdodDtyZXR1cm4gYS5vZmZzZXRXaWR0aD09PTAmJmI9PT0wfHwhYy5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmKGEuc3R5bGUuZGlzcGxheXx8Yy5jc3MoYSwiZGlzcGxheSIpKT09PSJub25lIn07Yy5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hYy5leHByLmZpbHRlcnMuaGlkZGVuKGEpfX12YXIgbWI9Yy5ub3coKSxuYj0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwKb2I9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2kscGI9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLHFiPS9eKD86R0VUfEhFQUQpJC8sUmE9L1xbXF0kLyxUPS9cPVw/KCZ8JCkvLGphPS9cPy8scmI9LyhbPyZdKV89W14mXSovLHNiPS9eKFx3KzopP1wvXC8oW15cLz8jXSspLyx0Yj0vJTIwL2csdWI9LyMuKiQvLEhhPWMuZm4ubG9hZDtjLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGIsZCl7aWYodHlwZW9mIGEhPT0ic3RyaW5nIiYmSGEpcmV0dXJuIEhhLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlbHNlIGlmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZj1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfWU9IkdFVCI7aWYoYilpZihjLmlzRnVuY3Rpb24oYikpe2Q9YjtiPW51bGx9ZWxzZSBpZih0eXBlb2YgYj09PQoib2JqZWN0Iil7Yj1jLnBhcmFtKGIsYy5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2U9IlBPU1QifXZhciBoPXRoaXM7Yy5hamF4KHt1cmw6YSx0eXBlOmUsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yixjb21wbGV0ZTpmdW5jdGlvbihsLGspe2lmKGs9PT0ic3VjY2VzcyJ8fGs9PT0ibm90bW9kaWZpZWQiKWguaHRtbChmP2MoIjxkaXY+IikuYXBwZW5kKGwucmVzcG9uc2VUZXh0LnJlcGxhY2UobmIsIiIpKS5maW5kKGYpOmwucmVzcG9uc2VUZXh0KTtkJiZoLmVhY2goZCxbbC5yZXNwb25zZVRleHQsayxsXSl9fSk7cmV0dXJuIHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBjLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudHM/Yy5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJgohdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8b2IudGVzdCh0aGlzLm5vZGVOYW1lKXx8cGIudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBkPWModGhpcykudmFsKCk7cmV0dXJuIGQ9PW51bGw/bnVsbDpjLmlzQXJyYXkoZCk/Yy5tYXAoZCxmdW5jdGlvbihlKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6ZX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6ZH19KS5nZXQoKX19KTtjLmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7Yy5mbltiXT1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5iaW5kKGIsZCl9fSk7Yy5leHRlbmQoe2dldDpmdW5jdGlvbihhLGIsZCxlKXtpZihjLmlzRnVuY3Rpb24oYikpe2U9ZXx8ZDtkPWI7Yj1udWxsfXJldHVybiBjLmFqYXgoe3R5cGU6IkdFVCIsdXJsOmEsZGF0YTpiLHN1Y2Nlc3M6ZCxkYXRhVHlwZTplfSl9LApnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYy5nZXQoYSxudWxsLGIsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5nZXQoYSxiLGQsImpzb24iKX0scG9zdDpmdW5jdGlvbihhLGIsZCxlKXtpZihjLmlzRnVuY3Rpb24oYikpe2U9ZXx8ZDtkPWI7Yj17fX1yZXR1cm4gYy5hamF4KHt0eXBlOiJQT1NUIix1cmw6YSxkYXRhOmIsc3VjY2VzczpkLGRhdGFUeXBlOmV9KX0sYWpheFNldHVwOmZ1bmN0aW9uKGEpe2MuZXh0ZW5kKGMuYWpheFNldHRpbmdzLGEpfSxhamF4U2V0dGluZ3M6e3VybDpsb2NhdGlvbi5ocmVmLGdsb2JhbDp0cnVlLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6dHJ1ZSxhc3luYzp0cnVlLHhocjpmdW5jdGlvbigpe3JldHVybiBuZXcgRS5YTUxIdHRwUmVxdWVzdH0sYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLApzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0Iix0ZXh0OiJ0ZXh0L3BsYWluIixfZGVmYXVsdDoiKi8qIn19LGFqYXg6ZnVuY3Rpb24oYSl7dmFyIGI9Yy5leHRlbmQodHJ1ZSx7fSxjLmFqYXhTZXR0aW5ncyxhKSxkLGUsZixoPWIudHlwZS50b1VwcGVyQ2FzZSgpLGw9cWIudGVzdChoKTtiLnVybD1iLnVybC5yZXBsYWNlKHViLCIiKTtiLmNvbnRleHQ9YSYmYS5jb250ZXh0IT1udWxsP2EuY29udGV4dDpiO2lmKGIuZGF0YSYmYi5wcm9jZXNzRGF0YSYmdHlwZW9mIGIuZGF0YSE9PSJzdHJpbmciKWIuZGF0YT1jLnBhcmFtKGIuZGF0YSxiLnRyYWRpdGlvbmFsKTtpZihiLmRhdGFUeXBlPT09Impzb25wIil7aWYoaD09PSJHRVQiKVQudGVzdChiLnVybCl8fChiLnVybCs9KGphLnRlc3QoYi51cmwpPyImIjoiPyIpKyhiLmpzb25wfHwiY2FsbGJhY2siKSsiPT8iKTtlbHNlIGlmKCFiLmRhdGF8fAohVC50ZXN0KGIuZGF0YSkpYi5kYXRhPShiLmRhdGE/Yi5kYXRhKyImIjoiIikrKGIuanNvbnB8fCJjYWxsYmFjayIpKyI9PyI7Yi5kYXRhVHlwZT0ianNvbiJ9aWYoYi5kYXRhVHlwZT09PSJqc29uIiYmKGIuZGF0YSYmVC50ZXN0KGIuZGF0YSl8fFQudGVzdChiLnVybCkpKXtkPWIuanNvbnBDYWxsYmFja3x8Impzb25wIittYisrO2lmKGIuZGF0YSliLmRhdGE9KGIuZGF0YSsiIikucmVwbGFjZShULCI9IitkKyIkMSIpO2IudXJsPWIudXJsLnJlcGxhY2UoVCwiPSIrZCsiJDEiKTtiLmRhdGFUeXBlPSJzY3JpcHQiO3ZhciBrPUVbZF07RVtkXT1mdW5jdGlvbihtKXtpZihjLmlzRnVuY3Rpb24oaykpayhtKTtlbHNle0VbZF09Qjt0cnl7ZGVsZXRlIEVbZF19Y2F0Y2gocCl7fX1mPW07Yy5oYW5kbGVTdWNjZXNzKGIsdyxlLGYpO2MuaGFuZGxlQ29tcGxldGUoYix3LGUsZik7ciYmci5yZW1vdmVDaGlsZChBKX19aWYoYi5kYXRhVHlwZT09PSJzY3JpcHQiJiZiLmNhY2hlPT09bnVsbCliLmNhY2hlPQpmYWxzZTtpZihiLmNhY2hlPT09ZmFsc2UmJmwpe3ZhciBvPWMubm93KCkseD1iLnVybC5yZXBsYWNlKHJiLCIkMV89IitvKTtiLnVybD14Kyh4PT09Yi51cmw/KGphLnRlc3QoYi51cmwpPyImIjoiPyIpKyJfPSIrbzoiIil9aWYoYi5kYXRhJiZsKWIudXJsKz0oamEudGVzdChiLnVybCk/IiYiOiI/IikrYi5kYXRhO2IuZ2xvYmFsJiZjLmFjdGl2ZSsrPT09MCYmYy5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtvPShvPXNiLmV4ZWMoYi51cmwpKSYmKG9bMV0mJm9bMV0udG9Mb3dlckNhc2UoKSE9PWxvY2F0aW9uLnByb3RvY29sfHxvWzJdLnRvTG93ZXJDYXNlKCkhPT1sb2NhdGlvbi5ob3N0KTtpZihiLmRhdGFUeXBlPT09InNjcmlwdCImJmg9PT0iR0VUIiYmbyl7dmFyIHI9dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHx0LmRvY3VtZW50RWxlbWVudCxBPXQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aWYoYi5zY3JpcHRDaGFyc2V0KUEuY2hhcnNldD1iLnNjcmlwdENoYXJzZXQ7CkEuc3JjPWIudXJsO2lmKCFkKXt2YXIgQz1mYWxzZTtBLm9ubG9hZD1BLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKCFDJiYoIXRoaXMucmVhZHlTdGF0ZXx8dGhpcy5yZWFkeVN0YXRlPT09ImxvYWRlZCJ8fHRoaXMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpKXtDPXRydWU7Yy5oYW5kbGVTdWNjZXNzKGIsdyxlLGYpO2MuaGFuZGxlQ29tcGxldGUoYix3LGUsZik7QS5vbmxvYWQ9QS5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDtyJiZBLnBhcmVudE5vZGUmJnIucmVtb3ZlQ2hpbGQoQSl9fX1yLmluc2VydEJlZm9yZShBLHIuZmlyc3RDaGlsZCk7cmV0dXJuIEJ9dmFyIEo9ZmFsc2Usdz1iLnhocigpO2lmKHcpe2IudXNlcm5hbWU/dy5vcGVuKGgsYi51cmwsYi5hc3luYyxiLnVzZXJuYW1lLGIucGFzc3dvcmQpOncub3BlbihoLGIudXJsLGIuYXN5bmMpO3RyeXtpZihiLmRhdGEhPW51bGwmJiFsfHxhJiZhLmNvbnRlbnRUeXBlKXcuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwKYi5jb250ZW50VHlwZSk7aWYoYi5pZk1vZGlmaWVkKXtjLmxhc3RNb2RpZmllZFtiLnVybF0mJncuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGMubGFzdE1vZGlmaWVkW2IudXJsXSk7Yy5ldGFnW2IudXJsXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixjLmV0YWdbYi51cmxdKX1vfHx3LnNldFJlcXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCJYTUxIdHRwUmVxdWVzdCIpO3cuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixiLmRhdGFUeXBlJiZiLmFjY2VwdHNbYi5kYXRhVHlwZV0/Yi5hY2NlcHRzW2IuZGF0YVR5cGVdKyIsICovKjsgcT0wLjAxIjpiLmFjY2VwdHMuX2RlZmF1bHQpfWNhdGNoKEkpe31pZihiLmJlZm9yZVNlbmQmJmIuYmVmb3JlU2VuZC5jYWxsKGIuY29udGV4dCx3LGIpPT09ZmFsc2Upe2IuZ2xvYmFsJiZjLmFjdGl2ZS0tPT09MSYmYy5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpO3cuYWJvcnQoKTtyZXR1cm4gZmFsc2V9Yi5nbG9iYWwmJgpjLnRyaWdnZXJHbG9iYWwoYiwiYWpheFNlbmQiLFt3LGJdKTt2YXIgTD13Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihtKXtpZighd3x8dy5yZWFkeVN0YXRlPT09MHx8bT09PSJhYm9ydCIpe0p8fGMuaGFuZGxlQ29tcGxldGUoYix3LGUsZik7Sj10cnVlO2lmKHcpdy5vbnJlYWR5c3RhdGVjaGFuZ2U9Yy5ub29wfWVsc2UgaWYoIUomJncmJih3LnJlYWR5U3RhdGU9PT00fHxtPT09InRpbWVvdXQiKSl7Sj10cnVlO3cub25yZWFkeXN0YXRlY2hhbmdlPWMubm9vcDtlPW09PT0idGltZW91dCI/InRpbWVvdXQiOiFjLmh0dHBTdWNjZXNzKHcpPyJlcnJvciI6Yi5pZk1vZGlmaWVkJiZjLmh0dHBOb3RNb2RpZmllZCh3LGIudXJsKT8ibm90bW9kaWZpZWQiOiJzdWNjZXNzIjt2YXIgcDtpZihlPT09InN1Y2Nlc3MiKXRyeXtmPWMuaHR0cERhdGEodyxiLmRhdGFUeXBlLGIpfWNhdGNoKHEpe2U9InBhcnNlcmVycm9yIjtwPXF9aWYoZT09PSJzdWNjZXNzInx8ZT09PSJub3Rtb2RpZmllZCIpZHx8CmMuaGFuZGxlU3VjY2VzcyhiLHcsZSxmKTtlbHNlIGMuaGFuZGxlRXJyb3IoYix3LGUscCk7ZHx8Yy5oYW5kbGVDb21wbGV0ZShiLHcsZSxmKTttPT09InRpbWVvdXQiJiZ3LmFib3J0KCk7aWYoYi5hc3luYyl3PW51bGx9fTt0cnl7dmFyIGc9dy5hYm9ydDt3LmFib3J0PWZ1bmN0aW9uKCl7dyYmRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuY2FsbChnLHcpO0woImFib3J0Iil9fWNhdGNoKGkpe31iLmFzeW5jJiZiLnRpbWVvdXQ+MCYmc2V0VGltZW91dChmdW5jdGlvbigpe3cmJiFKJiZMKCJ0aW1lb3V0Iil9LGIudGltZW91dCk7dHJ5e3cuc2VuZChsfHxiLmRhdGE9PW51bGw/bnVsbDpiLmRhdGEpfWNhdGNoKG4pe2MuaGFuZGxlRXJyb3IoYix3LG51bGwsbik7Yy5oYW5kbGVDb21wbGV0ZShiLHcsZSxmKX1iLmFzeW5jfHxMKCk7cmV0dXJuIHd9fSxwYXJhbTpmdW5jdGlvbihhLGIpe3ZhciBkPVtdLGU9ZnVuY3Rpb24oaCxsKXtsPWMuaXNGdW5jdGlvbihsKT9sKCk6bDtkW2QubGVuZ3RoXT0KZW5jb2RlVVJJQ29tcG9uZW50KGgpKyI9IitlbmNvZGVVUklDb21wb25lbnQobCl9O2lmKGI9PT1CKWI9Yy5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWw7aWYoYy5pc0FycmF5KGEpfHxhLmpxdWVyeSljLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IodmFyIGYgaW4gYSlkYShmLGFbZl0sYixlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZSh0YiwiKyIpfX0pO2MuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxoYW5kbGVFcnJvcjpmdW5jdGlvbihhLGIsZCxlKXthLmVycm9yJiZhLmVycm9yLmNhbGwoYS5jb250ZXh0LGIsZCxlKTthLmdsb2JhbCYmYy50cmlnZ2VyR2xvYmFsKGEsImFqYXhFcnJvciIsW2IsYSxlXSl9LGhhbmRsZVN1Y2Nlc3M6ZnVuY3Rpb24oYSxiLGQsZSl7YS5zdWNjZXNzJiZhLnN1Y2Nlc3MuY2FsbChhLmNvbnRleHQsZSxkLGIpO2EuZ2xvYmFsJiZjLnRyaWdnZXJHbG9iYWwoYSwiYWpheFN1Y2Nlc3MiLApbYixhXSl9LGhhbmRsZUNvbXBsZXRlOmZ1bmN0aW9uKGEsYixkKXthLmNvbXBsZXRlJiZhLmNvbXBsZXRlLmNhbGwoYS5jb250ZXh0LGIsZCk7YS5nbG9iYWwmJmMudHJpZ2dlckdsb2JhbChhLCJhamF4Q29tcGxldGUiLFtiLGFdKTthLmdsb2JhbCYmYy5hY3RpdmUtLT09PTEmJmMuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX0sdHJpZ2dlckdsb2JhbDpmdW5jdGlvbihhLGIsZCl7KGEuY29udGV4dCYmYS5jb250ZXh0LnVybD09bnVsbD9jKGEuY29udGV4dCk6Yy5ldmVudCkudHJpZ2dlcihiLGQpfSxodHRwU3VjY2VzczpmdW5jdGlvbihhKXt0cnl7cmV0dXJuIWEuc3RhdHVzJiZsb2NhdGlvbi5wcm90b2NvbD09PSJmaWxlOiJ8fGEuc3RhdHVzPj0yMDAmJmEuc3RhdHVzPDMwMHx8YS5zdGF0dXM9PT0zMDR8fGEuc3RhdHVzPT09MTIyM31jYXRjaChiKXt9cmV0dXJuIGZhbHNlfSxodHRwTm90TW9kaWZpZWQ6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksCmU9YS5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpO2lmKGQpYy5sYXN0TW9kaWZpZWRbYl09ZDtpZihlKWMuZXRhZ1tiXT1lO3JldHVybiBhLnN0YXR1cz09PTMwNH0saHR0cERhdGE6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixmPWI9PT0ieG1sInx8IWImJmUuaW5kZXhPZigieG1sIik+PTA7YT1mP2EucmVzcG9uc2VYTUw6YS5yZXNwb25zZVRleHQ7ZiYmYS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWU9PT0icGFyc2VyZXJyb3IiJiZjLmVycm9yKCJwYXJzZXJlcnJvciIpO2lmKGQmJmQuZGF0YUZpbHRlcilhPWQuZGF0YUZpbHRlcihhLGIpO2lmKHR5cGVvZiBhPT09InN0cmluZyIpaWYoYj09PSJqc29uInx8IWImJmUuaW5kZXhPZigianNvbiIpPj0wKWE9Yy5wYXJzZUpTT04oYSk7ZWxzZSBpZihiPT09InNjcmlwdCJ8fCFiJiZlLmluZGV4T2YoImphdmFzY3JpcHQiKT49MCljLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fSk7CmlmKEUuQWN0aXZlWE9iamVjdCljLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXtpZihFLmxvY2F0aW9uLnByb3RvY29sIT09ImZpbGU6Iil0cnl7cmV0dXJuIG5ldyBFLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGEpe310cnl7cmV0dXJuIG5ldyBFLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX07Yy5zdXBwb3J0LmFqYXg9ISFjLmFqYXhTZXR0aW5ncy54aHIoKTt2YXIgZWE9e30sdmI9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLHdiPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoLiopJC8sYmEscGE9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV07Yy5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGQpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoUygic2hvdyIsCjMpLGEsYixkKTtlbHNle2Q9MDtmb3IodmFyIGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7YT10aGlzW2RdO2I9YS5zdHlsZS5kaXNwbGF5O2lmKCFjLmRhdGEoYSwib2xkZGlzcGxheSIpJiZiPT09Im5vbmUiKWI9YS5zdHlsZS5kaXNwbGF5PSIiO2I9PT0iIiYmYy5jc3MoYSwiZGlzcGxheSIpPT09Im5vbmUiJiZjLmRhdGEoYSwib2xkZGlzcGxheSIscWEoYS5ub2RlTmFtZSkpfWZvcihkPTA7ZDxlO2QrKyl7YT10aGlzW2RdO2I9YS5zdHlsZS5kaXNwbGF5O2lmKGI9PT0iInx8Yj09PSJub25lIilhLnN0eWxlLmRpc3BsYXk9Yy5kYXRhKGEsIm9sZGRpc3BsYXkiKXx8IiJ9cmV0dXJuIHRoaXN9fSxoaWRlOmZ1bmN0aW9uKGEsYixkKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKFMoImhpZGUiLDMpLGEsYixkKTtlbHNle2E9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXtkPWMuY3NzKHRoaXNbYV0sImRpc3BsYXkiKTtkIT09Im5vbmUiJiZjLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIsCmQpfWZvcihhPTA7YTxiO2ErKyl0aGlzW2FdLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3JldHVybiB0aGlzfX0sX3RvZ2dsZTpjLmZuLnRvZ2dsZSx0b2dnbGU6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPXR5cGVvZiBhPT09ImJvb2xlYW4iO2lmKGMuaXNGdW5jdGlvbihhKSYmYy5pc0Z1bmN0aW9uKGIpKXRoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZWxzZSBhPT1udWxsfHxlP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWU/YTpjKHRoaXMpLmlzKCI6aGlkZGVuIik7Yyh0aGlzKVtmPyJzaG93IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1hdGUoUygidG9nZ2xlIiwzKSxhLGIsZCk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsZCxlKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsZCxlKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsZCxlKXt2YXIgZj1jLnNwZWVkKGIsCmQsZSk7aWYoYy5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZi5jb21wbGV0ZSk7cmV0dXJuIHRoaXNbZi5xdWV1ZT09PWZhbHNlPyJlYWNoIjoicXVldWUiXShmdW5jdGlvbigpe3ZhciBoPWMuZXh0ZW5kKHt9LGYpLGwsaz10aGlzLm5vZGVUeXBlPT09MSxvPWsmJmModGhpcykuaXMoIjpoaWRkZW4iKSx4PXRoaXM7Zm9yKGwgaW4gYSl7dmFyIHI9Yy5jYW1lbENhc2UobCk7aWYobCE9PXIpe2Fbcl09YVtsXTtkZWxldGUgYVtsXTtsPXJ9aWYoYVtsXT09PSJoaWRlIiYmb3x8YVtsXT09PSJzaG93IiYmIW8pcmV0dXJuIGguY29tcGxldGUuY2FsbCh0aGlzKTtpZihrJiYobD09PSJoZWlnaHQifHxsPT09IndpZHRoIikpe2gub3ZlcmZsb3c9W3RoaXMuc3R5bGUub3ZlcmZsb3csdGhpcy5zdHlsZS5vdmVyZmxvd1gsdGhpcy5zdHlsZS5vdmVyZmxvd1ldO2lmKGMuY3NzKHRoaXMsImRpc3BsYXkiKT09PSJpbmxpbmUiJiZjLmNzcyh0aGlzLCJmbG9hdCIpPT09Im5vbmUiKWlmKGMuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0KWlmKHFhKHRoaXMubm9kZU5hbWUpPT09CiJpbmxpbmUiKXRoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjtlbHNle3RoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lIjt0aGlzLnN0eWxlLnpvb209MX1lbHNlIHRoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn1pZihjLmlzQXJyYXkoYVtsXSkpeyhoLnNwZWNpYWxFYXNpbmc9aC5zcGVjaWFsRWFzaW5nfHx7fSlbbF09YVtsXVsxXTthW2xdPWFbbF1bMF19fWlmKGgub3ZlcmZsb3chPW51bGwpdGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtoLmN1ckFuaW09Yy5leHRlbmQoe30sYSk7Yy5lYWNoKGEsZnVuY3Rpb24oQSxDKXt2YXIgSj1uZXcgYy5meCh4LGgsQSk7aWYodmIudGVzdChDKSlKW0M9PT0idG9nZ2xlIj9vPyJzaG93IjoiaGlkZSI6Q10oYSk7ZWxzZXt2YXIgdz13Yi5leGVjKEMpLEk9Si5jdXIoKXx8MDtpZih3KXt2YXIgTD1wYXJzZUZsb2F0KHdbMl0pLGc9d1szXXx8InB4IjtpZihnIT09InB4Iil7Yy5zdHlsZSh4LEEsKEx8fDEpK2cpO0k9KEx8fAoxKS9KLmN1cigpKkk7Yy5zdHlsZSh4LEEsSStnKX1pZih3WzFdKUw9KHdbMV09PT0iLT0iPy0xOjEpKkwrSTtKLmN1c3RvbShJLEwsZyl9ZWxzZSBKLmN1c3RvbShJLEMsIiIpfX0pO3JldHVybiB0cnVlfSl9LHN0b3A6ZnVuY3Rpb24oYSxiKXt2YXIgZD1jLnRpbWVyczthJiZ0aGlzLnF1ZXVlKFtdKTt0aGlzLmVhY2goZnVuY3Rpb24oKXtmb3IodmFyIGU9ZC5sZW5ndGgtMTtlPj0wO2UtLSlpZihkW2VdLmVsZW09PT10aGlzKXtiJiZkW2VdKHRydWUpO2Quc3BsaWNlKGUsMSl9fSk7Ynx8dGhpcy5kZXF1ZXVlKCk7cmV0dXJuIHRoaXN9fSk7Yy5lYWNoKHtzbGlkZURvd246Uygic2hvdyIsMSksc2xpZGVVcDpTKCJoaWRlIiwxKSxzbGlkZVRvZ2dsZTpTKCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtjLmZuW2FdPWZ1bmN0aW9uKGQsZSxmKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsCmQsZSxmKX19KTtjLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEmJnR5cGVvZiBhPT09Im9iamVjdCI/Yy5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmR8fCFkJiZifHxjLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6ZCYmYnx8YiYmIWMuaXNGdW5jdGlvbihiKSYmYn07ZS5kdXJhdGlvbj1jLmZ4Lm9mZj8wOnR5cGVvZiBlLmR1cmF0aW9uPT09Im51bWJlciI/ZS5kdXJhdGlvbjplLmR1cmF0aW9uIGluIGMuZnguc3BlZWRzP2MuZnguc3BlZWRzW2UuZHVyYXRpb25dOmMuZnguc3BlZWRzLl9kZWZhdWx0O2Uub2xkPWUuY29tcGxldGU7ZS5jb21wbGV0ZT1mdW5jdGlvbigpe2UucXVldWUhPT1mYWxzZSYmYyh0aGlzKS5kZXF1ZXVlKCk7Yy5pc0Z1bmN0aW9uKGUub2xkKSYmZS5vbGQuY2FsbCh0aGlzKX07cmV0dXJuIGV9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixkLGUpe3JldHVybiBkK2UqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGQsZSl7cmV0dXJuKC1NYXRoLmNvcyhhKgpNYXRoLlBJKS8yKzAuNSkqZStkfX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKGEsYixkKXt0aGlzLm9wdGlvbnM9Yjt0aGlzLmVsZW09YTt0aGlzLnByb3A9ZDtpZighYi5vcmlnKWIub3JpZz17fX19KTtjLmZ4LnByb3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpOyhjLmZ4LnN0ZXBbdGhpcy5wcm9wXXx8Yy5meC5zdGVwLl9kZWZhdWx0KSh0aGlzKX0sY3VyOmZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3ZhciBhPXBhcnNlRmxvYXQoYy5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCkpO3JldHVybiBhJiZhPi0xRTQ/YTowfSxjdXN0b206ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGUobCl7cmV0dXJuIGYuc3RlcChsKX0KdmFyIGY9dGhpcyxoPWMuZng7dGhpcy5zdGFydFRpbWU9Yy5ub3coKTt0aGlzLnN0YXJ0PWE7dGhpcy5lbmQ9Yjt0aGlzLnVuaXQ9ZHx8dGhpcy51bml0fHwicHgiO3RoaXMubm93PXRoaXMuc3RhcnQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0wO2UuZWxlbT10aGlzLmVsZW07aWYoZSgpJiZjLnRpbWVycy5wdXNoKGUpJiYhYmEpYmE9c2V0SW50ZXJ2YWwoaC50aWNrLGguaW50ZXJ2YWwpfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1jLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5zaG93PXRydWU7dGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpO2ModGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWMuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLmhpZGU9dHJ1ZTsKdGhpcy5jdXN0b20odGhpcy5jdXIoKSwwKX0sc3RlcDpmdW5jdGlvbihhKXt2YXIgYj1jLm5vdygpLGQ9dHJ1ZTtpZihhfHxiPj10aGlzLm9wdGlvbnMuZHVyYXRpb24rdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kO3RoaXMucG9zPXRoaXMuc3RhdGU9MTt0aGlzLnVwZGF0ZSgpO3RoaXMub3B0aW9ucy5jdXJBbmltW3RoaXMucHJvcF09dHJ1ZTtmb3IodmFyIGUgaW4gdGhpcy5vcHRpb25zLmN1ckFuaW0paWYodGhpcy5vcHRpb25zLmN1ckFuaW1bZV0hPT10cnVlKWQ9ZmFsc2U7aWYoZCl7aWYodGhpcy5vcHRpb25zLm92ZXJmbG93IT1udWxsJiYhYy5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3Mpe3ZhciBmPXRoaXMuZWxlbSxoPXRoaXMub3B0aW9ucztjLmVhY2goWyIiLCJYIiwiWSJdLGZ1bmN0aW9uKGssbyl7Zi5zdHlsZVsib3ZlcmZsb3ciK29dPWgub3ZlcmZsb3dba119KX10aGlzLm9wdGlvbnMuaGlkZSYmYyh0aGlzLmVsZW0pLmhpZGUoKTtpZih0aGlzLm9wdGlvbnMuaGlkZXx8CnRoaXMub3B0aW9ucy5zaG93KWZvcih2YXIgbCBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSljLnN0eWxlKHRoaXMuZWxlbSxsLHRoaXMub3B0aW9ucy5vcmlnW2xdKTt0aGlzLm9wdGlvbnMuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pfXJldHVybiBmYWxzZX1lbHNle2E9Yi10aGlzLnN0YXJ0VGltZTt0aGlzLnN0YXRlPWEvdGhpcy5vcHRpb25zLmR1cmF0aW9uO2I9dGhpcy5vcHRpb25zLmVhc2luZ3x8KGMuZWFzaW5nLnN3aW5nPyJzd2luZyI6ImxpbmVhciIpO3RoaXMucG9zPWMuZWFzaW5nW3RoaXMub3B0aW9ucy5zcGVjaWFsRWFzaW5nJiZ0aGlzLm9wdGlvbnMuc3BlY2lhbEVhc2luZ1t0aGlzLnByb3BdfHxiXSh0aGlzLnN0YXRlLGEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik7dGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3M7dGhpcy51cGRhdGUoKX1yZXR1cm4gdHJ1ZX19O2MuZXh0ZW5kKGMuZngse3RpY2s6ZnVuY3Rpb24oKXtmb3IodmFyIGE9CmMudGltZXJzLGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdKCl8fGEuc3BsaWNlKGItLSwxKTthLmxlbmd0aHx8Yy5meC5zdG9wKCl9LGludGVydmFsOjEzLHN0b3A6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGJhKTtiYT1udWxsfSxzcGVlZHM6e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihhKXtjLnN0eWxlKGEuZWxlbSwib3BhY2l0eSIsYS5ub3cpfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtpZihhLmVsZW0uc3R5bGUmJmEuZWxlbS5zdHlsZVthLnByb3BdIT1udWxsKWEuZWxlbS5zdHlsZVthLnByb3BdPShhLnByb3A9PT0id2lkdGgifHxhLnByb3A9PT0iaGVpZ2h0Ij9NYXRoLm1heCgwLGEubm93KTphLm5vdykrYS51bml0O2Vsc2UgYS5lbGVtW2EucHJvcF09YS5ub3d9fX0pO2lmKGMuZXhwciYmYy5leHByLmZpbHRlcnMpYy5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGMuZ3JlcChjLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PQpiLmVsZW19KS5sZW5ndGh9O3ZhciB4Yj0vXnQoPzphYmxlfGR8aCkkL2ksSWE9L14oPzpib2R5fGh0bWwpJC9pO2MuZm4ub2Zmc2V0PSJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gdC5kb2N1bWVudEVsZW1lbnQ/ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXSxkO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihsKXtjLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGwpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBjLm9mZnNldC5ib2R5T2Zmc2V0KGIpO3RyeXtkPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2goZSl7fXZhciBmPWIub3duZXJEb2N1bWVudCxoPWYuZG9jdW1lbnRFbGVtZW50O2lmKCFkfHwhYy5jb250YWlucyhoLGIpKXJldHVybiBkfHx7dG9wOjAsbGVmdDowfTtiPWYuYm9keTtmPWZhKGYpO3JldHVybnt0b3A6ZC50b3ArKGYucGFnZVlPZmZzZXR8fGMuc3VwcG9ydC5ib3hNb2RlbCYmCmguc2Nyb2xsVG9wfHxiLnNjcm9sbFRvcCktKGguY2xpZW50VG9wfHxiLmNsaWVudFRvcHx8MCksbGVmdDpkLmxlZnQrKGYucGFnZVhPZmZzZXR8fGMuc3VwcG9ydC5ib3hNb2RlbCYmaC5zY3JvbGxMZWZ0fHxiLnNjcm9sbExlZnQpLShoLmNsaWVudExlZnR8fGIuY2xpZW50TGVmdHx8MCl9fTpmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih4KXtjLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLHgpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBjLm9mZnNldC5ib2R5T2Zmc2V0KGIpO2Mub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgZCxlPWIub2Zmc2V0UGFyZW50LGY9Yi5vd25lckRvY3VtZW50LGg9Zi5kb2N1bWVudEVsZW1lbnQsbD1mLmJvZHk7ZD0oZj1mLmRlZmF1bHRWaWV3KT9mLmdldENvbXB1dGVkU3R5bGUoYixudWxsKTpiLmN1cnJlbnRTdHlsZTsKZm9yKHZhciBrPWIub2Zmc2V0VG9wLG89Yi5vZmZzZXRMZWZ0OyhiPWIucGFyZW50Tm9kZSkmJmIhPT1sJiZiIT09aDspe2lmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmZC5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7ZD1mP2YuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlO2stPWIuc2Nyb2xsVG9wO28tPWIuc2Nyb2xsTGVmdDtpZihiPT09ZSl7ays9Yi5vZmZzZXRUb3A7bys9Yi5vZmZzZXRMZWZ0O2lmKGMub2Zmc2V0LmRvZXNOb3RBZGRCb3JkZXImJiEoYy5vZmZzZXQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHMmJnhiLnRlc3QoYi5ub2RlTmFtZSkpKXtrKz1wYXJzZUZsb2F0KGQuYm9yZGVyVG9wV2lkdGgpfHwwO28rPXBhcnNlRmxvYXQoZC5ib3JkZXJMZWZ0V2lkdGgpfHwwfWU9Yi5vZmZzZXRQYXJlbnR9aWYoYy5vZmZzZXQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZkLm92ZXJmbG93IT09InZpc2libGUiKXtrKz0KcGFyc2VGbG9hdChkLmJvcmRlclRvcFdpZHRoKXx8MDtvKz1wYXJzZUZsb2F0KGQuYm9yZGVyTGVmdFdpZHRoKXx8MH1kPWR9aWYoZC5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGQucG9zaXRpb249PT0ic3RhdGljIil7ays9bC5vZmZzZXRUb3A7bys9bC5vZmZzZXRMZWZ0fWlmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmZC5wb3NpdGlvbj09PSJmaXhlZCIpe2srPU1hdGgubWF4KGguc2Nyb2xsVG9wLGwuc2Nyb2xsVG9wKTtvKz1NYXRoLm1heChoLnNjcm9sbExlZnQsbC5zY3JvbGxMZWZ0KX1yZXR1cm57dG9wOmssbGVmdDpvfX07Yy5vZmZzZXQ9e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10LmJvZHksYj10LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQsZSxmLGg9cGFyc2VGbG9hdChjLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDA7Yy5leHRlbmQoYi5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsCmhlaWdodDoiMXB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSk7Yi5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4Oyc+PGRpdj48L2Rpdj48L2Rpdj48dGFibGUgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OycgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz48dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPiI7YS5pbnNlcnRCZWZvcmUoYixhLmZpcnN0Q2hpbGQpO2Q9Yi5maXJzdENoaWxkO2U9ZC5maXJzdENoaWxkO2Y9ZC5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7dGhpcy5kb2VzTm90QWRkQm9yZGVyPWUub2Zmc2V0VG9wIT09NTt0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPQpmLm9mZnNldFRvcD09PTU7ZS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO2Uuc3R5bGUudG9wPSIyMHB4Ijt0aGlzLnN1cHBvcnRzRml4ZWRQb3NpdGlvbj1lLm9mZnNldFRvcD09PTIwfHxlLm9mZnNldFRvcD09PTE1O2Uuc3R5bGUucG9zaXRpb249ZS5zdHlsZS50b3A9IiI7ZC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7dGhpcy5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZS5vZmZzZXRUb3A9PT0tNTt0aGlzLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PWEub2Zmc2V0VG9wIT09aDthLnJlbW92ZUNoaWxkKGIpO2Mub2Zmc2V0LmluaXRpYWxpemU9Yy5ub29wfSxib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGQ9YS5vZmZzZXRMZWZ0O2Mub2Zmc2V0LmluaXRpYWxpemUoKTtpZihjLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCl7Yis9cGFyc2VGbG9hdChjLmNzcyhhLAoibWFyZ2luVG9wIikpfHwwO2QrPXBhcnNlRmxvYXQoYy5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MH1yZXR1cm57dG9wOmIsbGVmdDpkfX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixkKXt2YXIgZT1jLmNzcyhhLCJwb3NpdGlvbiIpO2lmKGU9PT0ic3RhdGljIilhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7dmFyIGY9YyhhKSxoPWYub2Zmc2V0KCksbD1jLmNzcyhhLCJ0b3AiKSxrPWMuY3NzKGEsImxlZnQiKSxvPWU9PT0iYWJzb2x1dGUiJiZjLmluQXJyYXkoImF1dG8iLFtsLGtdKT4tMTtlPXt9O3ZhciB4PXt9O2lmKG8peD1mLnBvc2l0aW9uKCk7bD1vP3gudG9wOnBhcnNlSW50KGwsMTApfHwwO2s9bz94LmxlZnQ6cGFyc2VJbnQoaywxMCl8fDA7aWYoYy5pc0Z1bmN0aW9uKGIpKWI9Yi5jYWxsKGEsZCxoKTtpZihiLnRvcCE9bnVsbCllLnRvcD1iLnRvcC1oLnRvcCtsO2lmKGIubGVmdCE9bnVsbCllLmxlZnQ9Yi5sZWZ0LWgubGVmdCtrOyJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLAplKTpmLmNzcyhlKX19O2MuZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxlPUlhLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtkLnRvcC09cGFyc2VGbG9hdChjLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDA7ZC5sZWZ0LT1wYXJzZUZsb2F0KGMuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDA7ZS50b3ArPXBhcnNlRmxvYXQoYy5jc3MoYlswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDA7ZS5sZWZ0Kz1wYXJzZUZsb2F0KGMuY3NzKGJbMF0sImJvcmRlckxlZnRXaWR0aCIpKXx8MDtyZXR1cm57dG9wOmQudG9wLWUudG9wLGxlZnQ6ZC5sZWZ0LWUubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8dC5ib2R5O2EmJiFJYS50ZXN0KGEubm9kZU5hbWUpJiYKYy5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiOylhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSk7Yy5lYWNoKFsiTGVmdCIsIlRvcCJdLGZ1bmN0aW9uKGEsYil7dmFyIGQ9InNjcm9sbCIrYjtjLmZuW2RdPWZ1bmN0aW9uKGUpe3ZhciBmPXRoaXNbMF0saDtpZighZilyZXR1cm4gbnVsbDtpZihlIT09QilyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoaD1mYSh0aGlzKSloLnNjcm9sbFRvKCFhP2U6YyhoKS5zY3JvbGxMZWZ0KCksYT9lOmMoaCkuc2Nyb2xsVG9wKCkpO2Vsc2UgdGhpc1tkXT1lfSk7ZWxzZSByZXR1cm4oaD1mYShmKSk/InBhZ2VYT2Zmc2V0ImluIGg/aFthPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Yy5zdXBwb3J0LmJveE1vZGVsJiZoLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8aC5kb2N1bWVudC5ib2R5W2RdOmZbZF19fSk7Yy5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGIpe3ZhciBkPWIudG9Mb3dlckNhc2UoKTsKYy5mblsiaW5uZXIiK2JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF0/cGFyc2VGbG9hdChjLmNzcyh0aGlzWzBdLGQsInBhZGRpbmciKSk6bnVsbH07Yy5mblsib3V0ZXIiK2JdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzWzBdP3BhcnNlRmxvYXQoYy5jc3ModGhpc1swXSxkLGU/Im1hcmdpbiI6ImJvcmRlciIpKTpudWxsfTtjLmZuW2RdPWZ1bmN0aW9uKGUpe3ZhciBmPXRoaXNbMF07aWYoIWYpcmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzO2lmKGMuaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGwpe3ZhciBrPWModGhpcyk7a1tkXShlLmNhbGwodGhpcyxsLGtbZF0oKSkpfSk7aWYoYy5pc1dpbmRvdyhmKSlyZXR1cm4gZi5kb2N1bWVudC5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiJiZmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitiXXx8Zi5kb2N1bWVudC5ib2R5WyJjbGllbnQiK2JdO2Vsc2UgaWYoZi5ub2RlVHlwZT09PTkpcmV0dXJuIE1hdGgubWF4KGYuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiKwpiXSxmLmJvZHlbInNjcm9sbCIrYl0sZi5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIrYl0sZi5ib2R5WyJvZmZzZXQiK2JdLGYuZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiK2JdKTtlbHNlIGlmKGU9PT1CKXtmPWMuY3NzKGYsZCk7dmFyIGg9cGFyc2VGbG9hdChmKTtyZXR1cm4gYy5pc05hTihoKT9mOmh9ZWxzZSByZXR1cm4gdGhpcy5jc3MoZCx0eXBlb2YgZT09PSJzdHJpbmciP2U6ZSsicHgiKX19KX0pKHdpbmRvdyk7Cg=="></script>
	<script id= "script_sl_jqueryui_js" src="data:/text/plain;base64,LyohIGpRdWVyeSBVSSAtIHYxLjguMjQgLSAyMDEyLTA5LTI4CiogaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnktdWkKKiBJbmNsdWRlczoganF1ZXJ5LnVpLmNvcmUuanMsIGpxdWVyeS51aS53aWRnZXQuanMsIGpxdWVyeS51aS5tb3VzZS5qcywganF1ZXJ5LnVpLmRyYWdnYWJsZS5qcywganF1ZXJ5LnVpLmRyb3BwYWJsZS5qcywganF1ZXJ5LnVpLnJlc2l6YWJsZS5qcywganF1ZXJ5LnVpLnNlbGVjdGFibGUuanMsIGpxdWVyeS51aS5zb3J0YWJsZS5qcywganF1ZXJ5LmVmZmVjdHMuY29yZS5qcywganF1ZXJ5LmVmZmVjdHMuYmxpbmQuanMsIGpxdWVyeS5lZmZlY3RzLmJvdW5jZS5qcywganF1ZXJ5LmVmZmVjdHMuY2xpcC5qcywganF1ZXJ5LmVmZmVjdHMuZHJvcC5qcywganF1ZXJ5LmVmZmVjdHMuZXhwbG9kZS5qcywganF1ZXJ5LmVmZmVjdHMuZmFkZS5qcywganF1ZXJ5LmVmZmVjdHMuZm9sZC5qcywganF1ZXJ5LmVmZmVjdHMuaGlnaGxpZ2h0LmpzLCBqcXVlcnkuZWZmZWN0cy5wdWxzYXRlLmpzLCBqcXVlcnkuZWZmZWN0cy5zY2FsZS5qcywganF1ZXJ5LmVmZmVjdHMuc2hha2UuanMsIGpxdWVyeS5lZmZlY3RzLnNsaWRlLmpzLCBqcXVlcnkuZWZmZWN0cy50cmFuc2Zlci5qcywganF1ZXJ5LnVpLmFjY29yZGlvbi5qcywganF1ZXJ5LnVpLmF1dG9jb21wbGV0ZS5qcywganF1ZXJ5LnVpLmJ1dHRvbi5qcywganF1ZXJ5LnVpLmRhdGVwaWNrZXIuanMsIGpxdWVyeS51aS5kaWFsb2cuanMsIGpxdWVyeS51aS5wb3NpdGlvbi5qcywganF1ZXJ5LnVpLnByb2dyZXNzYmFyLmpzLCBqcXVlcnkudWkuc2xpZGVyLmpzLCBqcXVlcnkudWkudGFicy5qcwoqIENvcHlyaWdodCAoYykgMjAxMiBBVVRIT1JTLnR4dDsgTGljZW5zZWQgTUlULCBHUEwgKi8KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhiLGMpe3ZhciBlPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigiYXJlYSI9PT1lKXt2YXIgZj1iLnBhcmVudE5vZGUsZz1mLm5hbWUsaDtyZXR1cm4hYi5ocmVmfHwhZ3x8Zi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im1hcCI/ITE6KGg9YSgiaW1nW3VzZW1hcD0jIitnKyJdIilbMF0sISFoJiZkKGgpKX1yZXR1cm4oL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0Ly50ZXN0KGUpPyFiLmRpc2FibGVkOiJhIj09ZT9iLmhyZWZ8fGM6YykmJmQoYil9ZnVuY3Rpb24gZChiKXtyZXR1cm4hYShiKS5wYXJlbnRzKCkuYW5kU2VsZigpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBhLmN1ckNTUyh0aGlzLCJ2aXNpYmlsaXR5Iik9PT0iaGlkZGVuInx8YS5leHByLmZpbHRlcnMuaGlkZGVuKHRoaXMpfSkubGVuZ3RofWEudWk9YS51aXx8e307aWYoYS51aS52ZXJzaW9uKXJldHVybjthLmV4dGVuZChhLnVpLHt2ZXJzaW9uOiIxLjguMjQiLGtleUNvZGU6e0FMVDoxOCxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkQ6OTEsQ09NTUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMsQ09OVFJPTDoxNyxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsSU5TRVJUOjQ1LExFRlQ6MzcsTUVOVTo5MyxOVU1QQURfQUREOjEwNyxOVU1QQURfREVDSU1BTDoxMTAsTlVNUEFEX0RJVklERToxMTEsTlVNUEFEX0VOVEVSOjEwOCxOVU1QQURfTVVMVElQTFk6MTA2LE5VTVBBRF9TVUJUUkFDVDoxMDksUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxVUDozOCxXSU5ET1dTOjkxfX0pLGEuZm4uZXh0ZW5kKHtwcm9wQXR0cjphLmZuLnByb3B8fGEuZm4uYXR0cixfZm9jdXM6YS5mbi5mb2N1cyxmb2N1czpmdW5jdGlvbihiLGMpe3JldHVybiB0eXBlb2YgYj09Im51bWJlciI/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YShkKS5mb2N1cygpLGMmJmMuY2FsbChkKX0sYil9KTp0aGlzLl9mb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHNjcm9sbFBhcmVudDpmdW5jdGlvbigpe3ZhciBiO3JldHVybiBhLmJyb3dzZXIubXNpZSYmLyhzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8L2Fic29sdXRlLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKT9iPXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybi8ocmVsYXRpdmV8YWJzb2x1dGV8Zml4ZWQpLy50ZXN0KGEuY3VyQ1NTKHRoaXMsInBvc2l0aW9uIiwxKSkmJi8oYXV0b3xzY3JvbGwpLy50ZXN0KGEuY3VyQ1NTKHRoaXMsIm92ZXJmbG93IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy15IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy14IiwxKSl9KS5lcSgwKTpiPXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybi8oYXV0b3xzY3JvbGwpLy50ZXN0KGEuY3VyQ1NTKHRoaXMsIm92ZXJmbG93IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy15IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy14IiwxKSl9KS5lcSgwKSwvZml4ZWQvLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpfHwhYi5sZW5ndGg/YShkb2N1bWVudCk6Yn0sekluZGV4OmZ1bmN0aW9uKGMpe2lmKGMhPT1iKXJldHVybiB0aGlzLmNzcygiekluZGV4IixjKTtpZih0aGlzLmxlbmd0aCl7dmFyIGQ9YSh0aGlzWzBdKSxlLGY7d2hpbGUoZC5sZW5ndGgmJmRbMF0hPT1kb2N1bWVudCl7ZT1kLmNzcygicG9zaXRpb24iKTtpZihlPT09ImFic29sdXRlInx8ZT09PSJyZWxhdGl2ZSJ8fGU9PT0iZml4ZWQiKXtmPXBhcnNlSW50KGQuY3NzKCJ6SW5kZXgiKSwxMCk7aWYoIWlzTmFOKGYpJiZmIT09MClyZXR1cm4gZn1kPWQucGFyZW50KCl9fXJldHVybiAwfSxkaXNhYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmluZCgoYS5zdXBwb3J0LnNlbGVjdHN0YXJ0PyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biIpKyIudWktZGlzYWJsZVNlbGVjdGlvbiIsZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpfSl9LGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgiLnVpLWRpc2FibGVTZWxlY3Rpb24iKX19KSxhKCI8YT4iKS5vdXRlcldpZHRoKDEpLmpxdWVyeXx8YS5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbihjLGQpe2Z1bmN0aW9uIGgoYixjLGQsZil7cmV0dXJuIGEuZWFjaChlLGZ1bmN0aW9uKCl7Yy09cGFyc2VGbG9hdChhLmN1ckNTUyhiLCJwYWRkaW5nIit0aGlzLCEwKSl8fDAsZCYmKGMtPXBhcnNlRmxvYXQoYS5jdXJDU1MoYiwiYm9yZGVyIit0aGlzKyJXaWR0aCIsITApKXx8MCksZiYmKGMtPXBhcnNlRmxvYXQoYS5jdXJDU1MoYiwibWFyZ2luIit0aGlzLCEwKSl8fDApfSksY312YXIgZT1kPT09IldpZHRoIj9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0sZj1kLnRvTG93ZXJDYXNlKCksZz17aW5uZXJXaWR0aDphLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6YS5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOmEuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDphLmZuLm91dGVySGVpZ2h0fTthLmZuWyJpbm5lciIrZF09ZnVuY3Rpb24oYyl7cmV0dXJuIGM9PT1iP2dbImlubmVyIitkXS5jYWxsKHRoaXMpOnRoaXMuZWFjaChmdW5jdGlvbigpe2EodGhpcykuY3NzKGYsaCh0aGlzLGMpKyJweCIpfSl9LGEuZm5bIm91dGVyIitkXT1mdW5jdGlvbihiLGMpe3JldHVybiB0eXBlb2YgYiE9Im51bWJlciI/Z1sib3V0ZXIiK2RdLmNhbGwodGhpcyxiKTp0aGlzLmVhY2goZnVuY3Rpb24oKXthKHRoaXMpLmNzcyhmLGgodGhpcyxiLCEwLGMpKyJweCIpfSl9fSksYS5leHRlbmQoYS5leHByWyI6Il0se2RhdGE6YS5leHByLmNyZWF0ZVBzZXVkbz9hLmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4hIWEuZGF0YShjLGIpfX0pOmZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4hIWEuZGF0YShiLGRbM10pfSxmb2N1c2FibGU6ZnVuY3Rpb24oYil7cmV0dXJuIGMoYiwhaXNOYU4oYS5hdHRyKGIsInRhYmluZGV4IikpKX0sdGFiYmFibGU6ZnVuY3Rpb24oYil7dmFyIGQ9YS5hdHRyKGIsInRhYmluZGV4IiksZT1pc05hTihkKTtyZXR1cm4oZXx8ZD49MCkmJmMoYiwhZSl9fSksYShmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmJvZHksYz1iLmFwcGVuZENoaWxkKGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2Mub2Zmc2V0SGVpZ2h0LGEuZXh0ZW5kKGMuc3R5bGUse21pbkhlaWdodDoiMTAwcHgiLGhlaWdodDoiYXV0byIscGFkZGluZzowLGJvcmRlcldpZHRoOjB9KSxhLnN1cHBvcnQubWluSGVpZ2h0PWMub2Zmc2V0SGVpZ2h0PT09MTAwLGEuc3VwcG9ydC5zZWxlY3RzdGFydD0ib25zZWxlY3RzdGFydCJpbiBjLGIucmVtb3ZlQ2hpbGQoYykuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KSxhLmN1ckNTU3x8KGEuY3VyQ1NTPWEuY3NzKSxhLmV4dGVuZChhLnVpLHtwbHVnaW46e2FkZDpmdW5jdGlvbihiLGMsZCl7dmFyIGU9YS51aVtiXS5wcm90b3R5cGU7Zm9yKHZhciBmIGluIGQpZS5wbHVnaW5zW2ZdPWUucGx1Z2luc1tmXXx8W10sZS5wbHVnaW5zW2ZdLnB1c2goW2MsZFtmXV0pfSxjYWxsOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLnBsdWdpbnNbYl07aWYoIWR8fCFhLmVsZW1lbnRbMF0ucGFyZW50Tm9kZSlyZXR1cm47Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspYS5vcHRpb25zW2RbZV1bMF1dJiZkW2VdWzFdLmFwcGx5KGEuZWxlbWVudCxjKX19LGNvbnRhaW5zOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGRvY3VtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTY6YSE9PWImJmEuY29udGFpbnMoYil9LGhhc1Njcm9sbDpmdW5jdGlvbihiLGMpe2lmKGEoYikuY3NzKCJvdmVyZmxvdyIpPT09ImhpZGRlbiIpcmV0dXJuITE7dmFyIGQ9YyYmYz09PSJsZWZ0Ij8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCIsZT0hMTtyZXR1cm4gYltkXT4wPyEwOihiW2RdPTEsZT1iW2RdPjAsYltkXT0wLGUpfSxpc092ZXJBeGlzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT5iJiZhPGIrY30saXNPdmVyOmZ1bmN0aW9uKGIsYyxkLGUsZixnKXtyZXR1cm4gYS51aS5pc092ZXJBeGlzKGIsZCxmKSYmYS51aS5pc092ZXJBeGlzKGMsZSxnKX19KX0pKGpRdWVyeSksZnVuY3Rpb24oYSxiKXtpZihhLmNsZWFuRGF0YSl7dmFyIGM9YS5jbGVhbkRhdGE7YS5jbGVhbkRhdGE9ZnVuY3Rpb24oYil7Zm9yKHZhciBkPTAsZTsoZT1iW2RdKSE9bnVsbDtkKyspdHJ5e2EoZSkudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfWNhdGNoKGYpe31jKGIpfX1lbHNle3ZhciBkPWEuZm4ucmVtb3ZlO2EuZm4ucmVtb3ZlPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3JldHVybiBjfHwoIWJ8fGEuZmlsdGVyKGIsW3RoaXNdKS5sZW5ndGgpJiZhKCIqIix0aGlzKS5hZGQoW3RoaXNdKS5lYWNoKGZ1bmN0aW9uKCl7dHJ5e2EodGhpcykudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfWNhdGNoKGIpe319KSxkLmNhbGwoYSh0aGlzKSxiLGMpfSl9fWEud2lkZ2V0PWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1iLnNwbGl0KCIuIilbMF0sZjtiPWIuc3BsaXQoIi4iKVsxXSxmPWUrIi0iK2IsZHx8KGQ9YyxjPWEuV2lkZ2V0KSxhLmV4cHJbIjoiXVtmXT1mdW5jdGlvbihjKXtyZXR1cm4hIWEuZGF0YShjLGIpfSxhW2VdPWFbZV18fHt9LGFbZV1bYl09ZnVuY3Rpb24oYSxiKXthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQoYSxiKX07dmFyIGc9bmV3IGM7Zy5vcHRpb25zPWEuZXh0ZW5kKCEwLHt9LGcub3B0aW9ucyksYVtlXVtiXS5wcm90b3R5cGU9YS5leHRlbmQoITAsZyx7bmFtZXNwYWNlOmUsd2lkZ2V0TmFtZTpiLHdpZGdldEV2ZW50UHJlZml4OmFbZV1bYl0ucHJvdG90eXBlLndpZGdldEV2ZW50UHJlZml4fHxiLHdpZGdldEJhc2VDbGFzczpmfSxkKSxhLndpZGdldC5icmlkZ2UoYixhW2VdW2JdKX0sYS53aWRnZXQuYnJpZGdlPWZ1bmN0aW9uKGMsZCl7YS5mbltjXT1mdW5jdGlvbihlKXt2YXIgZj10eXBlb2YgZT09InN0cmluZyIsZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaD10aGlzO3JldHVybiBlPSFmJiZnLmxlbmd0aD9hLmV4dGVuZC5hcHBseShudWxsLFshMCxlXS5jb25jYXQoZykpOmUsZiYmZS5jaGFyQXQoMCk9PT0iXyI/aDooZj90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hLmRhdGEodGhpcyxjKSxmPWQmJmEuaXNGdW5jdGlvbihkW2VdKT9kW2VdLmFwcGx5KGQsZyk6ZDtpZihmIT09ZCYmZiE9PWIpcmV0dXJuIGg9ZiwhMX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEuZGF0YSh0aGlzLGMpO2I/Yi5vcHRpb24oZXx8e30pLl9pbml0KCk6YS5kYXRhKHRoaXMsYyxuZXcgZChlLHRoaXMpKX0pLGgpfX0sYS5XaWRnZXQ9ZnVuY3Rpb24oYSxiKXthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQoYSxiKX0sYS5XaWRnZXQucHJvdG90eXBlPXt3aWRnZXROYW1lOiJ3aWRnZXQiLHdpZGdldEV2ZW50UHJlZml4OiIiLG9wdGlvbnM6e2Rpc2FibGVkOiExfSxfY3JlYXRlV2lkZ2V0OmZ1bmN0aW9uKGIsYyl7YS5kYXRhKGMsdGhpcy53aWRnZXROYW1lLHRoaXMpLHRoaXMuZWxlbWVudD1hKGMpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCghMCx7fSx0aGlzLm9wdGlvbnMsdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLGIpO3ZhciBkPXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoInJlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbigpe2QuZGVzdHJveSgpfSksdGhpcy5fY3JlYXRlKCksdGhpcy5fdHJpZ2dlcigiY3JlYXRlIiksdGhpcy5faW5pdCgpfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1ldGFkYXRhJiZhLm1ldGFkYXRhLmdldCh0aGlzLmVsZW1lbnRbMF0pW3RoaXMud2lkZ2V0TmFtZV19LF9jcmVhdGU6ZnVuY3Rpb24oKXt9LF9pbml0OmZ1bmN0aW9uKCl7fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSksdGhpcy53aWRnZXQoKS51bmJpbmQoIi4iK3RoaXMud2lkZ2V0TmFtZSkucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLnJlbW92ZUNsYXNzKHRoaXMud2lkZ2V0QmFzZUNsYXNzKyItZGlzYWJsZWQgIisidWktc3RhdGUtZGlzYWJsZWQiKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudH0sb3B0aW9uOmZ1bmN0aW9uKGMsZCl7dmFyIGU9YztpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4gYS5leHRlbmQoe30sdGhpcy5vcHRpb25zKTtpZih0eXBlb2YgYz09InN0cmluZyIpe2lmKGQ9PT1iKXJldHVybiB0aGlzLm9wdGlvbnNbY107ZT17fSxlW2NdPWR9cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoZSksdGhpc30sX3NldE9wdGlvbnM6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcztyZXR1cm4gYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXtjLl9zZXRPcHRpb24oYSxiKX0pLHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vcHRpb25zW2FdPWIsYT09PSJkaXNhYmxlZCImJnRoaXMud2lkZ2V0KClbYj8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKHRoaXMud2lkZ2V0QmFzZUNsYXNzKyItZGlzYWJsZWQiKyIgIisidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIixiKSx0aGlzfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLCEwKX0sX3RyaWdnZXI6ZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZz10aGlzLm9wdGlvbnNbYl07ZD1kfHx7fSxjPWEuRXZlbnQoYyksYy50eXBlPShiPT09dGhpcy53aWRnZXRFdmVudFByZWZpeD9iOnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgrYikudG9Mb3dlckNhc2UoKSxjLnRhcmdldD10aGlzLmVsZW1lbnRbMF0sZj1jLm9yaWdpbmFsRXZlbnQ7aWYoZilmb3IoZSBpbiBmKWUgaW4gY3x8KGNbZV09ZltlXSk7cmV0dXJuIHRoaXMuZWxlbWVudC50cmlnZ2VyKGMsZCksIShhLmlzRnVuY3Rpb24oZykmJmcuY2FsbCh0aGlzLmVsZW1lbnRbMF0sYyxkKT09PSExfHxjLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGM9ITE7YShkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbihhKXtjPSExfSksYS53aWRnZXQoInVpLm1vdXNlIix7b3B0aW9uczp7Y2FuY2VsOiI6aW5wdXQsb3B0aW9uIixkaXN0YW5jZToxLGRlbGF5OjB9LF9tb3VzZUluaXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3RoaXMuZWxlbWVudC5iaW5kKCJtb3VzZWRvd24uIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oYSl7cmV0dXJuIGIuX21vdXNlRG93bihhKX0pLmJpbmQoImNsaWNrLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKGMpe2lmKCEwPT09YS5kYXRhKGMudGFyZ2V0LGIud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IikpcmV0dXJuIGEucmVtb3ZlRGF0YShjLnRhcmdldCxiLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksITF9KSx0aGlzLnN0YXJ0ZWQ9ITF9LF9tb3VzZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQudW5iaW5kKCIuIit0aGlzLndpZGdldE5hbWUpLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlJiZhKGRvY3VtZW50KS51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSl9LF9tb3VzZURvd246ZnVuY3Rpb24oYil7aWYoYylyZXR1cm47dGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKGIpLHRoaXMuX21vdXNlRG93bkV2ZW50PWI7dmFyIGQ9dGhpcyxlPWIud2hpY2g9PTEsZj10eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbD09InN0cmluZyImJmIudGFyZ2V0Lm5vZGVOYW1lP2EoYi50YXJnZXQpLmNsb3Nlc3QodGhpcy5vcHRpb25zLmNhbmNlbCkubGVuZ3RoOiExO2lmKCFlfHxmfHwhdGhpcy5fbW91c2VDYXB0dXJlKGIpKXJldHVybiEwO3RoaXMubW91c2VEZWxheU1ldD0hdGhpcy5vcHRpb25zLmRlbGF5LHRoaXMubW91c2VEZWxheU1ldHx8KHRoaXMuX21vdXNlRGVsYXlUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5tb3VzZURlbGF5TWV0PSEwfSx0aGlzLm9wdGlvbnMuZGVsYXkpKTtpZih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGIpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KGIpKXt0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydChiKSE9PSExO2lmKCF0aGlzLl9tb3VzZVN0YXJ0ZWQpcmV0dXJuIGIucHJldmVudERlZmF1bHQoKSwhMH1yZXR1cm4hMD09PWEuZGF0YShiLnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpJiZhLnJlbW92ZURhdGEoYi50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fbW91c2VNb3ZlKGEpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX21vdXNlVXAoYSl9LGEoZG9jdW1lbnQpLmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLGIucHJldmVudERlZmF1bHQoKSxjPSEwLCEwfSxfbW91c2VNb3ZlOmZ1bmN0aW9uKGIpe3JldHVybiFhLmJyb3dzZXIubXNpZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPj05fHwhIWIuYnV0dG9uP3RoaXMuX21vdXNlU3RhcnRlZD8odGhpcy5fbW91c2VEcmFnKGIpLGIucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoYikmJnRoaXMuX21vdXNlRGVsYXlNZXQoYikmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVudCxiKSE9PSExLHRoaXMuX21vdXNlU3RhcnRlZD90aGlzLl9tb3VzZURyYWcoYik6dGhpcy5fbW91c2VVcChiKSksIXRoaXMuX21vdXNlU3RhcnRlZCk6dGhpcy5fbW91c2VVcChiKX0sX21vdXNlVXA6ZnVuY3Rpb24oYil7cmV0dXJuIGEoZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS51bmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKSx0aGlzLl9tb3VzZVN0YXJ0ZWQmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9ITEsYi50YXJnZXQ9PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmYS5kYXRhKGIudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiwhMCksdGhpcy5fbW91c2VTdG9wKGIpKSwhMX0sX21vdXNlRGlzdGFuY2VNZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYLWEucGFnZVgpLE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLWEucGFnZVkpKT49dGhpcy5vcHRpb25zLmRpc3RhbmNlfSxfbW91c2VEZWxheU1ldDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbihhKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oYSl7fSxfbW91c2VTdG9wOmZ1bmN0aW9uKGEpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4hMH19KX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2Eud2lkZ2V0KCJ1aS5kcmFnZ2FibGUiLGEudWkubW91c2Use3dpZGdldEV2ZW50UHJlZml4OiJkcmFnIixvcHRpb25zOnthZGRDbGFzc2VzOiEwLGFwcGVuZFRvOiJwYXJlbnQiLGF4aXM6ITEsY29ubmVjdFRvU29ydGFibGU6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOiJhdXRvIixjdXJzb3JBdDohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6Im9yaWdpbmFsIixpZnJhbWVGaXg6ITEsb3BhY2l0eTohMSxyZWZyZXNoUG9zaXRpb25zOiExLHJldmVydDohMSxyZXZlcnREdXJhdGlvbjo1MDAsc2NvcGU6ImRlZmF1bHQiLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzbmFwOiExLHNuYXBNb2RlOiJib3RoIixzbmFwVG9sZXJhbmNlOjIwLHN0YWNrOiExLHpJbmRleDohMX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5oZWxwZXI9PSJvcmlnaW5hbCImJiEvXig/OnJ8YXxmKS8udGVzdCh0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpKSYmKHRoaXMuZWxlbWVudFswXS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUiKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VJbml0KCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZighdGhpcy5lbGVtZW50LmRhdGEoImRyYWdnYWJsZSIpKXJldHVybjtyZXR1cm4gdGhpcy5lbGVtZW50LnJlbW92ZURhdGEoImRyYWdnYWJsZSIpLnVuYmluZCgiLmRyYWdnYWJsZSIpLnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUgdWktZHJhZ2dhYmxlLWRyYWdnaW5nIHVpLWRyYWdnYWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpLHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcnx8Yy5kaXNhYmxlZHx8YShiLnRhcmdldCkuaXMoIi51aS1yZXNpemFibGUtaGFuZGxlIik/ITE6KHRoaXMuaGFuZGxlPXRoaXMuX2dldEhhbmRsZShiKSx0aGlzLmhhbmRsZT8oYy5pZnJhbWVGaXgmJmEoYy5pZnJhbWVGaXg9PT0hMD8iaWZyYW1lIjpjLmlmcmFtZUZpeCkuZWFjaChmdW5jdGlvbigpe2EoJzxkaXYgY2xhc3M9InVpLWRyYWdnYWJsZS1pZnJhbWVGaXgiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmOyI+PC9kaXY+JykuY3NzKHt3aWR0aDp0aGlzLm9mZnNldFdpZHRoKyJweCIsaGVpZ2h0OnRoaXMub2Zmc2V0SGVpZ2h0KyJweCIscG9zaXRpb246ImFic29sdXRlIixvcGFjaXR5OiIwLjAwMSIsekluZGV4OjFlM30pLmNzcyhhKHRoaXMpLm9mZnNldCgpKS5hcHBlbmRUbygiYm9keSIpfSksITApOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIoYiksdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSxhLnVpLmRkbWFuYWdlciYmKGEudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5vZmZzZXQ9e3RvcDp0aGlzLm9mZnNldC50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMub2Zmc2V0LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnR9LGEuZXh0ZW5kKHRoaXMub2Zmc2V0LHtjbGljazp7bGVmdDpiLnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9wOmIucGFnZVktdGhpcy5vZmZzZXQudG9wfSxwYXJlbnQ6dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkscmVsYXRpdmU6dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX0pLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24oYiksdGhpcy5vcmlnaW5hbFBhZ2VYPWIucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPWIucGFnZVksYy5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihjLmN1cnNvckF0KSxjLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLHRoaXMuX3RyaWdnZXIoInN0YXJ0IixiKT09PSExPyh0aGlzLl9jbGVhcigpLCExKToodGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGEudWkuZGRtYW5hZ2VyJiYhYy5kcm9wQmVoYXZpb3VyJiZhLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLGIpLHRoaXMuX21vdXNlRHJhZyhiLCEwKSxhLnVpLmRkbWFuYWdlciYmYS51aS5kZG1hbmFnZXIuZHJhZ1N0YXJ0KHRoaXMsYiksITApfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGIsYyl7dGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGIpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIik7aWYoIWMpe3ZhciBkPXRoaXMuX3VpSGFzaCgpO2lmKHRoaXMuX3RyaWdnZXIoImRyYWciLGIsZCk9PT0hMSlyZXR1cm4gdGhpcy5fbW91c2VVcCh7fSksITE7dGhpcy5wb3NpdGlvbj1kLnBvc2l0aW9ufWlmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ5Iil0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCsicHgiO2lmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ4Iil0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArInB4IjtyZXR1cm4gYS51aS5kZG1hbmFnZXImJmEudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyxiKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihiKXt2YXIgYz0hMTthLnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiYoYz1hLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsYikpLHRoaXMuZHJvcHBlZCYmKGM9dGhpcy5kcm9wcGVkLHRoaXMuZHJvcHBlZD0hMSk7dmFyIGQ9dGhpcy5lbGVtZW50WzBdLGU9ITE7d2hpbGUoZCYmKGQ9ZC5wYXJlbnROb2RlKSlkPT1kb2N1bWVudCYmKGU9ITApO2lmKCFlJiZ0aGlzLm9wdGlvbnMuaGVscGVyPT09Im9yaWdpbmFsIilyZXR1cm4hMTtpZih0aGlzLm9wdGlvbnMucmV2ZXJ0PT0iaW52YWxpZCImJiFjfHx0aGlzLm9wdGlvbnMucmV2ZXJ0PT0idmFsaWQiJiZjfHx0aGlzLm9wdGlvbnMucmV2ZXJ0PT09ITB8fGEuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMucmV2ZXJ0KSYmdGhpcy5vcHRpb25zLnJldmVydC5jYWxsKHRoaXMuZWxlbWVudCxjKSl7dmFyIGY9dGhpczthKHRoaXMuaGVscGVyKS5hbmltYXRlKHRoaXMub3JpZ2luYWxQb3NpdGlvbixwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0RHVyYXRpb24sMTApLGZ1bmN0aW9uKCl7Zi5fdHJpZ2dlcigic3RvcCIsYikhPT0hMSYmZi5fY2xlYXIoKX0pfWVsc2UgdGhpcy5fdHJpZ2dlcigic3RvcCIsYikhPT0hMSYmdGhpcy5fY2xlYXIoKTtyZXR1cm4hMX0sX21vdXNlVXA6ZnVuY3Rpb24oYil7cmV0dXJuIGEoImRpdi51aS1kcmFnZ2FibGUtaWZyYW1lRml4IikuZWFjaChmdW5jdGlvbigpe3RoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKX0pLGEudWkuZGRtYW5hZ2VyJiZhLnVpLmRkbWFuYWdlci5kcmFnU3RvcCh0aGlzLGIpLGEudWkubW91c2UucHJvdG90eXBlLl9tb3VzZVVwLmNhbGwodGhpcyxiKX0sY2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVscGVyLmlzKCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nIik/dGhpcy5fbW91c2VVcCh7fSk6dGhpcy5fY2xlYXIoKSx0aGlzfSxfZ2V0SGFuZGxlOmZ1bmN0aW9uKGIpe3ZhciBjPSF0aGlzLm9wdGlvbnMuaGFuZGxlfHwhYSh0aGlzLm9wdGlvbnMuaGFuZGxlLHRoaXMuZWxlbWVudCkubGVuZ3RoPyEwOiExO3JldHVybiBhKHRoaXMub3B0aW9ucy5oYW5kbGUsdGhpcy5lbGVtZW50KS5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt0aGlzPT1iLnRhcmdldCYmKGM9ITApfSksY30sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihiKXt2YXIgYz10aGlzLm9wdGlvbnMsZD1hLmlzRnVuY3Rpb24oYy5oZWxwZXIpP2EoYy5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtiXSkpOmMuaGVscGVyPT0iY2xvbmUiP3RoaXMuZWxlbWVudC5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIik6dGhpcy5lbGVtZW50O3JldHVybiBkLnBhcmVudHMoImJvZHkiKS5sZW5ndGh8fGQuYXBwZW5kVG8oYy5hcHBlbmRUbz09InBhcmVudCI/dGhpcy5lbGVtZW50WzBdLnBhcmVudE5vZGU6Yy5hcHBlbmRUbyksZFswXSE9dGhpcy5lbGVtZW50WzBdJiYhLyhmaXhlZHxhYnNvbHV0ZSkvLnRlc3QoZC5jc3MoInBvc2l0aW9uIikpJiZkLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpLGR9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKGIpe3R5cGVvZiBiPT0ic3RyaW5nIiYmKGI9Yi5zcGxpdCgiICIpKSxhLmlzQXJyYXkoYikmJihiPXtsZWZ0OitiWzBdLHRvcDorYlsxXXx8MH0pLCJsZWZ0ImluIGImJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PWIubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIGImJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtYi5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiBiJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPWIudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gYiYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC1iLmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciBiPXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3RoaXMuY3NzUG9zaXRpb249PSJhYnNvbHV0ZSImJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmYS51aS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSkmJihiLmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSxiLnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpO2lmKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5fHx0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lJiZ0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJodG1sIiYmYS5icm93c2VyLm1zaWUpYj17dG9wOjAsbGVmdDowfTtyZXR1cm57dG9wOmIudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OmIubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5jc3NQb3NpdGlvbj09InJlbGF0aXZlIil7dmFyIGE9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCk7cmV0dXJue3RvcDphLnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6YS5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luVG9wIiksMTApfHwwLHJpZ2h0OnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksMTApfHwwLGJvdHRvbTpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucztiLmNvbnRhaW5tZW50PT0icGFyZW50IiYmKGIuY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSk7aWYoYi5jb250YWlubWVudD09ImRvY3VtZW50Inx8Yi5jb250YWlubWVudD09IndpbmRvdyIpdGhpcy5jb250YWlubWVudD1bYi5jb250YWlubWVudD09ImRvY3VtZW50Ij8wOmEod2luZG93KS5zY3JvbGxMZWZ0KCktdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCxiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6YSh3aW5kb3cpLnNjcm9sbFRvcCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLChiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6YSh3aW5kb3cpLnNjcm9sbExlZnQoKSkrYShiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LChiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6YSh3aW5kb3cpLnNjcm9sbFRvcCgpKSsoYShiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdO2lmKCEvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3QoYi5jb250YWlubWVudCkmJmIuY29udGFpbm1lbnQuY29uc3RydWN0b3IhPUFycmF5KXt2YXIgYz1hKGIuY29udGFpbm1lbnQpLGQ9Y1swXTtpZighZClyZXR1cm47dmFyIGU9Yy5vZmZzZXQoKSxmPWEoZCkuY3NzKCJvdmVyZmxvdyIpIT0iaGlkZGVuIjt0aGlzLmNvbnRhaW5tZW50PVsocGFyc2VJbnQoYShkKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KGEoZCkuY3NzKCJwYWRkaW5nTGVmdCIpLDEwKXx8MCksKHBhcnNlSW50KGEoZCkuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KGEoZCkuY3NzKCJwYWRkaW5nVG9wIiksMTApfHwwKSwoZj9NYXRoLm1heChkLnNjcm9sbFdpZHRoLGQub2Zmc2V0V2lkdGgpOmQub2Zmc2V0V2lkdGgpLShwYXJzZUludChhKGQpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoYShkKS5jc3MoInBhZGRpbmdSaWdodCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKGY/TWF0aC5tYXgoZC5zY3JvbGxIZWlnaHQsZC5vZmZzZXRIZWlnaHQpOmQub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoYShkKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoYShkKS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZV9jb250YWluZXI9Y31lbHNlIGIuY29udGFpbm1lbnQuY29uc3RydWN0b3I9PUFycmF5JiYodGhpcy5jb250YWlubWVudD1iLmNvbnRhaW5tZW50KX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKGIsYyl7Y3x8KGM9dGhpcy5wb3NpdGlvbik7dmFyIGQ9Yj09ImFic29sdXRlIj8xOi0xLGU9dGhpcy5vcHRpb25zLGY9dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdPT1kb2N1bWVudHx8IWEudWkuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pKT90aGlzLm9mZnNldFBhcmVudDp0aGlzLnNjcm9sbFBhcmVudCxnPS8oaHRtbHxib2R5KS9pLnRlc3QoZlswXS50YWdOYW1lKTtyZXR1cm57dG9wOmMudG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCpkK3RoaXMub2Zmc2V0LnBhcmVudC50b3AqZC0oYS5icm93c2VyLnNhZmFyaSYmYS5icm93c2VyLnZlcnNpb248NTI2JiZ0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPzA6KHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmc/MDpmLnNjcm9sbFRvcCgpKSpkKSxsZWZ0OmMubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KmQrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqZC0oYS5icm93c2VyLnNhZmFyaSYmYS5icm93c2VyLnZlcnNpb248NTI2JiZ0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPzA6KHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpnPzA6Zi5zY3JvbGxMZWZ0KCkpKmQpfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zLGQ9dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdPT1kb2N1bWVudHx8IWEudWkuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pKT90aGlzLm9mZnNldFBhcmVudDp0aGlzLnNjcm9sbFBhcmVudCxlPS8oaHRtbHxib2R5KS9pLnRlc3QoZFswXS50YWdOYW1lKSxmPWIucGFnZVgsZz1iLnBhZ2VZO2lmKHRoaXMub3JpZ2luYWxQb3NpdGlvbil7dmFyIGg7aWYodGhpcy5jb250YWlubWVudCl7aWYodGhpcy5yZWxhdGl2ZV9jb250YWluZXIpe3ZhciBpPXRoaXMucmVsYXRpdmVfY29udGFpbmVyLm9mZnNldCgpO2g9W3RoaXMuY29udGFpbm1lbnRbMF0raS5sZWZ0LHRoaXMuY29udGFpbm1lbnRbMV0raS50b3AsdGhpcy5jb250YWlubWVudFsyXStpLmxlZnQsdGhpcy5jb250YWlubWVudFszXStpLnRvcF19ZWxzZSBoPXRoaXMuY29udGFpbm1lbnQ7Yi5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PGhbMF0mJihmPWhbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksYi5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8aFsxXSYmKGc9aFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLGIucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD5oWzJdJiYoZj1oWzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGIucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPmhbM10mJihnPWhbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKX1pZihjLmdyaWQpe3ZhciBqPWMuZ3JpZFsxXT90aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoZy10aGlzLm9yaWdpbmFsUGFnZVkpL2MuZ3JpZFsxXSkqYy5ncmlkWzFdOnRoaXMub3JpZ2luYWxQYWdlWTtnPWg/ai10aGlzLm9mZnNldC5jbGljay50b3A8aFsxXXx8ai10aGlzLm9mZnNldC5jbGljay50b3A+aFszXT9qLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDxoWzFdP2orYy5ncmlkWzFdOmotYy5ncmlkWzFdOmo6ajt2YXIgaz1jLmdyaWRbMF0/dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKGYtdGhpcy5vcmlnaW5hbFBhZ2VYKS9jLmdyaWRbMF0pKmMuZ3JpZFswXTp0aGlzLm9yaWdpbmFsUGFnZVg7Zj1oP2stdGhpcy5vZmZzZXQuY2xpY2subGVmdDxoWzBdfHxrLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aFsyXT9rLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8aFswXT9rK2MuZ3JpZFswXTprLWMuZ3JpZFswXTprOmt9fXJldHVybnt0b3A6Zy10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKGEuYnJvd3Nlci5zYWZhcmkmJmEuYnJvd3Nlci52ZXJzaW9uPDUyNiYmdGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8wOnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmU/MDpkLnNjcm9sbFRvcCgpKSxsZWZ0OmYtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KyhhLmJyb3dzZXIuc2FmYXJpJiZhLmJyb3dzZXIudmVyc2lvbjw1MjYmJnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/MDp0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6ZT8wOmQuc2Nyb2xsTGVmdCgpKX19LF9jbGVhcjpmdW5jdGlvbigpe3RoaXMuaGVscGVyLnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSx0aGlzLmhlbHBlclswXSE9dGhpcy5lbGVtZW50WzBdJiYhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMX0sX3RyaWdnZXI6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBkPWR8fHRoaXMuX3VpSGFzaCgpLGEudWkucGx1Z2luLmNhbGwodGhpcyxiLFtjLGRdKSxiPT0iZHJhZyImJih0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpKSxhLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLGIsYyxkKX0scGx1Z2luczp7fSxfdWlIYXNoOmZ1bmN0aW9uKGEpe3JldHVybntoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6dGhpcy5wb3NpdGlvbkFic319fSksYS5leHRlbmQoYS51aS5kcmFnZ2FibGUse3ZlcnNpb246IjEuOC4yNCJ9KSxhLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGU9ZC5vcHRpb25zLGY9YS5leHRlbmQoe30sYyx7aXRlbTpkLmVsZW1lbnR9KTtkLnNvcnRhYmxlcz1bXSxhKGUuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hLmRhdGEodGhpcywic29ydGFibGUiKTtjJiYhYy5vcHRpb25zLmRpc2FibGVkJiYoZC5zb3J0YWJsZXMucHVzaCh7aW5zdGFuY2U6YyxzaG91bGRSZXZlcnQ6Yy5vcHRpb25zLnJldmVydH0pLGMucmVmcmVzaFBvc2l0aW9ucygpLGMuX3RyaWdnZXIoImFjdGl2YXRlIixiLGYpKX0pfSxzdG9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxlPWEuZXh0ZW5kKHt9LGMse2l0ZW06ZC5lbGVtZW50fSk7YS5lYWNoKGQuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5pc092ZXI/KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsZC5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLnNob3VsZFJldmVydCYmKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RvcChiKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLGQub3B0aW9ucy5oZWxwZXI9PSJvcmlnaW5hbCImJnRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0uY3NzKHt0b3A6ImF1dG8iLGxlZnQ6ImF1dG8ifSkpOih0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsYixlKSl9KX0sZHJhZzpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksZT10aGlzLGY9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vZmZzZXQuY2xpY2sudG9wLGQ9dGhpcy5vZmZzZXQuY2xpY2subGVmdCxlPXRoaXMucG9zaXRpb25BYnMudG9wLGY9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LGc9Yi5oZWlnaHQsaD1iLndpZHRoLGk9Yi50b3Asaj1iLmxlZnQ7cmV0dXJuIGEudWkuaXNPdmVyKGUrYyxmK2QsaSxqLGcsaCl9O2EuZWFjaChkLnNvcnRhYmxlcyxmdW5jdGlvbihmKXt0aGlzLmluc3RhbmNlLnBvc2l0aW9uQWJzPWQucG9zaXRpb25BYnMsdGhpcy5pbnN0YW5jZS5oZWxwZXJQcm9wb3J0aW9ucz1kLmhlbHBlclByb3BvcnRpb25zLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrPWQub2Zmc2V0LmNsaWNrLHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpPyh0aGlzLmluc3RhbmNlLmlzT3Zlcnx8KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTEsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbT1hKGUpLmNsb25lKCkucmVtb3ZlQXR0cigiaWQiKS5hcHBlbmRUbyh0aGlzLmluc3RhbmNlLmVsZW1lbnQpLmRhdGEoInNvcnRhYmxlLWl0ZW0iLCEwKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYy5oZWxwZXJbMF19LGIudGFyZ2V0PXRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW1bMF0sdGhpcy5pbnN0YW5jZS5fbW91c2VDYXB0dXJlKGIsITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RhcnQoYiwhMCwhMCksdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2sudG9wPWQub2Zmc2V0LmNsaWNrLnRvcCx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay5sZWZ0PWQub2Zmc2V0LmNsaWNrLmxlZnQsdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQtPWQub2Zmc2V0LnBhcmVudC5sZWZ0LXRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC5sZWZ0LHRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC50b3AtPWQub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCxkLl90cmlnZ2VyKCJ0b1NvcnRhYmxlIixiKSxkLmRyb3BwZWQ9dGhpcy5pbnN0YW5jZS5lbGVtZW50LGQuY3VycmVudEl0ZW09ZC5lbGVtZW50LHRoaXMuaW5zdGFuY2UuZnJvbU91dHNpZGU9ZCksdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbSYmdGhpcy5pbnN0YW5jZS5fbW91c2VEcmFnKGIpKTp0aGlzLmluc3RhbmNlLmlzT3ZlciYmKHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsdGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigib3V0IixiLHRoaXMuaW5zdGFuY2UuX3VpSGFzaCh0aGlzLmluc3RhbmNlKSksdGhpcy5pbnN0YW5jZS5fbW91c2VTdG9wKGIsITApLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9dGhpcy5pbnN0YW5jZS5vcHRpb25zLl9oZWxwZXIsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbS5yZW1vdmUoKSx0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyJiZ0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyLnJlbW92ZSgpLGQuX3RyaWdnZXIoImZyb21Tb3J0YWJsZSIsYiksZC5kcm9wcGVkPSExKX0pfX0pLGEudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY3Vyc29yIix7c3RhcnQ6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKCJib2R5IiksZT1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ZC5jc3MoImN1cnNvciIpJiYoZS5fY3Vyc29yPWQuY3NzKCJjdXJzb3IiKSksZC5jc3MoImN1cnNvciIsZS5jdXJzb3IpfSxzdG9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKS5vcHRpb25zO2QuX2N1cnNvciYmYSgiYm9keSIpLmNzcygiY3Vyc29yIixkLl9jdXJzb3IpfX0pLGEudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwib3BhY2l0eSIse3N0YXJ0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YShjLmhlbHBlciksZT1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ZC5jc3MoIm9wYWNpdHkiKSYmKGUuX29wYWNpdHk9ZC5jc3MoIm9wYWNpdHkiKSksZC5jc3MoIm9wYWNpdHkiLGUub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ZC5fb3BhY2l0eSYmYShjLmhlbHBlcikuY3NzKCJvcGFjaXR5IixkLl9vcGFjaXR5KX19KSxhLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNjcm9sbCIse3N0YXJ0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKTtkLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJmQuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUhPSJIVE1MIiYmKGQub3ZlcmZsb3dPZmZzZXQ9ZC5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxlPWQub3B0aW9ucyxmPSExO2lmKGQuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmZC5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiKXtpZighZS5heGlzfHxlLmF4aXMhPSJ4IilkLm92ZXJmbG93T2Zmc2V0LnRvcCtkLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtYi5wYWdlWTxlLnNjcm9sbFNlbnNpdGl2aXR5P2Quc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1mPWQuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCtlLnNjcm9sbFNwZWVkOmIucGFnZVktZC5vdmVyZmxvd09mZnNldC50b3A8ZS5zY3JvbGxTZW5zaXRpdml0eSYmKGQuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1mPWQuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1lLnNjcm9sbFNwZWVkKTtpZighZS5heGlzfHxlLmF4aXMhPSJ5IilkLm92ZXJmbG93T2Zmc2V0LmxlZnQrZC5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtYi5wYWdlWDxlLnNjcm9sbFNlbnNpdGl2aXR5P2Quc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9Zj1kLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K2Uuc2Nyb2xsU3BlZWQ6Yi5wYWdlWC1kLm92ZXJmbG93T2Zmc2V0LmxlZnQ8ZS5zY3JvbGxTZW5zaXRpdml0eSYmKGQuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9Zj1kLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LWUuc2Nyb2xsU3BlZWQpfWVsc2V7aWYoIWUuYXhpc3x8ZS5heGlzIT0ieCIpYi5wYWdlWS1hKGRvY3VtZW50KS5zY3JvbGxUb3AoKTxlLnNjcm9sbFNlbnNpdGl2aXR5P2Y9YShkb2N1bWVudCkuc2Nyb2xsVG9wKGEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLWUuc2Nyb2xsU3BlZWQpOmEod2luZG93KS5oZWlnaHQoKS0oYi5wYWdlWS1hKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk8ZS5zY3JvbGxTZW5zaXRpdml0eSYmKGY9YShkb2N1bWVudCkuc2Nyb2xsVG9wKGEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK2Uuc2Nyb2xsU3BlZWQpKTtpZighZS5heGlzfHxlLmF4aXMhPSJ5IiliLnBhZ2VYLWEoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTxlLnNjcm9sbFNlbnNpdGl2aXR5P2Y9YShkb2N1bWVudCkuc2Nyb2xsTGVmdChhKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCktZS5zY3JvbGxTcGVlZCk6YSh3aW5kb3cpLndpZHRoKCktKGIucGFnZVgtYShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxlLnNjcm9sbFNlbnNpdGl2aXR5JiYoZj1hKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGEoZG9jdW1lbnQpLnNjcm9sbExlZnQoKStlLnNjcm9sbFNwZWVkKSl9ZiE9PSExJiZhLnVpLmRkbWFuYWdlciYmIWUuZHJvcEJlaGF2aW91ciYmYS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoZCxiKX19KSxhLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNuYXAiLHtzdGFydDpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksZT1kLm9wdGlvbnM7ZC5zbmFwRWxlbWVudHM9W10sYShlLnNuYXAuY29uc3RydWN0b3IhPVN0cmluZz9lLnNuYXAuaXRlbXN8fCI6ZGF0YShkcmFnZ2FibGUpIjplLnNuYXApLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGM9Yi5vZmZzZXQoKTt0aGlzIT1kLmVsZW1lbnRbMF0mJmQuc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06dGhpcyx3aWR0aDpiLm91dGVyV2lkdGgoKSxoZWlnaHQ6Yi5vdXRlckhlaWdodCgpLHRvcDpjLnRvcCxsZWZ0OmMubGVmdH0pfSl9LGRyYWc6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGU9ZC5vcHRpb25zLGY9ZS5zbmFwVG9sZXJhbmNlLGc9Yy5vZmZzZXQubGVmdCxoPWcrZC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxpPWMub2Zmc2V0LnRvcCxqPWkrZC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7Zm9yKHZhciBrPWQuc25hcEVsZW1lbnRzLmxlbmd0aC0xO2s+PTA7ay0tKXt2YXIgbD1kLnNuYXBFbGVtZW50c1trXS5sZWZ0LG09bCtkLnNuYXBFbGVtZW50c1trXS53aWR0aCxuPWQuc25hcEVsZW1lbnRzW2tdLnRvcCxvPW4rZC5zbmFwRWxlbWVudHNba10uaGVpZ2h0O2lmKCEobC1mPGcmJmc8bStmJiZuLWY8aSYmaTxvK2Z8fGwtZjxnJiZnPG0rZiYmbi1mPGomJmo8bytmfHxsLWY8aCYmaDxtK2YmJm4tZjxpJiZpPG8rZnx8bC1mPGgmJmg8bStmJiZuLWY8aiYmajxvK2YpKXtkLnNuYXBFbGVtZW50c1trXS5zbmFwcGluZyYmZC5vcHRpb25zLnNuYXAucmVsZWFzZSYmZC5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKGQuZWxlbWVudCxiLGEuZXh0ZW5kKGQuX3VpSGFzaCgpLHtzbmFwSXRlbTpkLnNuYXBFbGVtZW50c1trXS5pdGVtfSkpLGQuc25hcEVsZW1lbnRzW2tdLnNuYXBwaW5nPSExO2NvbnRpbnVlfWlmKGUuc25hcE1vZGUhPSJpbm5lciIpe3ZhciBwPU1hdGguYWJzKG4taik8PWYscT1NYXRoLmFicyhvLWkpPD1mLHI9TWF0aC5hYnMobC1oKTw9ZixzPU1hdGguYWJzKG0tZyk8PWY7cCYmKGMucG9zaXRpb24udG9wPWQuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpuLWQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcC1kLm1hcmdpbnMudG9wKSxxJiYoYy5wb3NpdGlvbi50b3A9ZC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOm8sbGVmdDowfSkudG9wLWQubWFyZ2lucy50b3ApLHImJihjLnBvc2l0aW9uLmxlZnQ9ZC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpsLWQuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0LWQubWFyZ2lucy5sZWZ0KSxzJiYoYy5wb3NpdGlvbi5sZWZ0PWQuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6bX0pLmxlZnQtZC5tYXJnaW5zLmxlZnQpfXZhciB0PXB8fHF8fHJ8fHM7aWYoZS5zbmFwTW9kZSE9Im91dGVyIil7dmFyIHA9TWF0aC5hYnMobi1pKTw9ZixxPU1hdGguYWJzKG8taik8PWYscj1NYXRoLmFicyhsLWcpPD1mLHM9TWF0aC5hYnMobS1oKTw9ZjtwJiYoYy5wb3NpdGlvbi50b3A9ZC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOm4sbGVmdDowfSkudG9wLWQubWFyZ2lucy50b3ApLHEmJihjLnBvc2l0aW9uLnRvcD1kLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6by1kLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3AtZC5tYXJnaW5zLnRvcCksciYmKGMucG9zaXRpb24ubGVmdD1kLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0Omx9KS5sZWZ0LWQubWFyZ2lucy5sZWZ0KSxzJiYoYy5wb3NpdGlvbi5sZWZ0PWQuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6bS1kLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdC1kLm1hcmdpbnMubGVmdCl9IWQuc25hcEVsZW1lbnRzW2tdLnNuYXBwaW5nJiYocHx8cXx8cnx8c3x8dCkmJmQub3B0aW9ucy5zbmFwLnNuYXAmJmQub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChkLmVsZW1lbnQsYixhLmV4dGVuZChkLl91aUhhc2goKSx7c25hcEl0ZW06ZC5zbmFwRWxlbWVudHNba10uaXRlbX0pKSxkLnNuYXBFbGVtZW50c1trXS5zbmFwcGluZz1wfHxxfHxyfHxzfHx0fX19KSxhLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInN0YWNrIix7c3RhcnQ6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnMsZT1hLm1ha2VBcnJheShhKGQuc3RhY2spKS5zb3J0KGZ1bmN0aW9uKGIsYyl7cmV0dXJuKHBhcnNlSW50KGEoYikuY3NzKCJ6SW5kZXgiKSwxMCl8fDApLShwYXJzZUludChhKGMpLmNzcygiekluZGV4IiksMTApfHwwKX0pO2lmKCFlLmxlbmd0aClyZXR1cm47dmFyIGY9cGFyc2VJbnQoZVswXS5zdHlsZS56SW5kZXgpfHwwO2EoZSkuZWFjaChmdW5jdGlvbihhKXt0aGlzLnN0eWxlLnpJbmRleD1mK2F9KSx0aGlzWzBdLnN0eWxlLnpJbmRleD1mK2UubGVuZ3RofX0pLGEudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiekluZGV4Iix7c3RhcnQ6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKGMuaGVscGVyKSxlPWEodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztkLmNzcygiekluZGV4IikmJihlLl96SW5kZXg9ZC5jc3MoInpJbmRleCIpKSxkLmNzcygiekluZGV4IixlLnpJbmRleCl9LHN0b3A6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ZC5fekluZGV4JiZhKGMuaGVscGVyKS5jc3MoInpJbmRleCIsZC5fekluZGV4KX19KX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2Eud2lkZ2V0KCJ1aS5kcm9wcGFibGUiLHt3aWRnZXRFdmVudFByZWZpeDoiZHJvcCIsb3B0aW9uczp7YWNjZXB0OiIqIixhY3RpdmVDbGFzczohMSxhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxob3ZlckNsYXNzOiExLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm9wdGlvbnMsYz1iLmFjY2VwdDt0aGlzLmlzb3Zlcj0wLHRoaXMuaXNvdXQ9MSx0aGlzLmFjY2VwdD1hLmlzRnVuY3Rpb24oYyk/YzpmdW5jdGlvbihhKXtyZXR1cm4gYS5pcyhjKX0sdGhpcy5wcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSxhLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Iuc2NvcGVdPWEudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbYi5zY29wZV18fFtdLGEudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbYi5zY29wZV0ucHVzaCh0aGlzKSxiLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgYj1hLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RoaXMub3B0aW9ucy5zY29wZV07Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspYltjXT09dGhpcyYmYi5zcGxpY2UoYywxKTtyZXR1cm4gdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcm9wcGFibGUgdWktZHJvcHBhYmxlLWRpc2FibGVkIikucmVtb3ZlRGF0YSgiZHJvcHBhYmxlIikudW5iaW5kKCIuZHJvcHBhYmxlIiksdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe2I9PSJhY2NlcHQiJiYodGhpcy5hY2NlcHQ9YS5pc0Z1bmN0aW9uKGMpP2M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaXMoYyl9KSxhLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9hY3RpdmF0ZTpmdW5jdGlvbihiKXt2YXIgYz1hLnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksYyYmdGhpcy5fdHJpZ2dlcigiYWN0aXZhdGUiLGIsdGhpcy51aShjKSl9LF9kZWFjdGl2YXRlOmZ1bmN0aW9uKGIpe3ZhciBjPWEudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSxjJiZ0aGlzLl90cmlnZ2VyKCJkZWFjdGl2YXRlIixiLHRoaXMudWkoYykpfSxfb3ZlcjpmdW5jdGlvbihiKXt2YXIgYz1hLnVpLmRkbWFuYWdlci5jdXJyZW50O2lmKCFjfHwoYy5jdXJyZW50SXRlbXx8Yy5lbGVtZW50KVswXT09dGhpcy5lbGVtZW50WzBdKXJldHVybjt0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxjLmN1cnJlbnRJdGVtfHxjLmVsZW1lbnQpJiYodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigib3ZlciIsYix0aGlzLnVpKGMpKSl9LF9vdXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS51aS5kZG1hbmFnZXIuY3VycmVudDtpZighY3x8KGMuY3VycmVudEl0ZW18fGMuZWxlbWVudClbMF09PXRoaXMuZWxlbWVudFswXSlyZXR1cm47dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sYy5jdXJyZW50SXRlbXx8Yy5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoIm91dCIsYix0aGlzLnVpKGMpKSl9LF9kcm9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9Y3x8YS51aS5kZG1hbmFnZXIuY3VycmVudDtpZighZHx8KGQuY3VycmVudEl0ZW18fGQuZWxlbWVudClbMF09PXRoaXMuZWxlbWVudFswXSlyZXR1cm4hMTt2YXIgZT0hMTtyZXR1cm4gdGhpcy5lbGVtZW50LmZpbmQoIjpkYXRhKGRyb3BwYWJsZSkiKS5ub3QoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YS5kYXRhKHRoaXMsImRyb3BwYWJsZSIpO2lmKGIub3B0aW9ucy5ncmVlZHkmJiFiLm9wdGlvbnMuZGlzYWJsZWQmJmIub3B0aW9ucy5zY29wZT09ZC5vcHRpb25zLnNjb3BlJiZiLmFjY2VwdC5jYWxsKGIuZWxlbWVudFswXSxkLmN1cnJlbnRJdGVtfHxkLmVsZW1lbnQpJiZhLnVpLmludGVyc2VjdChkLGEuZXh0ZW5kKGIse29mZnNldDpiLmVsZW1lbnQub2Zmc2V0KCl9KSxiLm9wdGlvbnMudG9sZXJhbmNlKSlyZXR1cm4gZT0hMCwhMX0pLGU/ITE6dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sZC5jdXJyZW50SXRlbXx8ZC5lbGVtZW50KT8odGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSx0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJkcm9wIixiLHRoaXMudWkoZCkpLHRoaXMuZWxlbWVudCk6ITF9LHVpOmZ1bmN0aW9uKGEpe3JldHVybntkcmFnZ2FibGU6YS5jdXJyZW50SXRlbXx8YS5lbGVtZW50LGhlbHBlcjphLmhlbHBlcixwb3NpdGlvbjphLnBvc2l0aW9uLG9mZnNldDphLnBvc2l0aW9uQWJzfX19KSxhLmV4dGVuZChhLnVpLmRyb3BwYWJsZSx7dmVyc2lvbjoiMS44LjI0In0pLGEudWkuaW50ZXJzZWN0PWZ1bmN0aW9uKGIsYyxkKXtpZighYy5vZmZzZXQpcmV0dXJuITE7dmFyIGU9KGIucG9zaXRpb25BYnN8fGIucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQsZj1lK2IuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsZz0oYi5wb3NpdGlvbkFic3x8Yi5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wLGg9ZytiLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxpPWMub2Zmc2V0LmxlZnQsaj1pK2MucHJvcG9ydGlvbnMud2lkdGgsaz1jLm9mZnNldC50b3AsbD1rK2MucHJvcG9ydGlvbnMuaGVpZ2h0O3N3aXRjaChkKXtjYXNlImZpdCI6cmV0dXJuIGk8PWUmJmY8PWomJms8PWcmJmg8PWw7Y2FzZSJpbnRlcnNlY3QiOnJldHVybiBpPGUrYi5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZmLWIuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMjxqJiZrPGcrYi5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMiYmaC1iLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPGw7Y2FzZSJwb2ludGVyIjp2YXIgbT0oYi5wb3NpdGlvbkFic3x8Yi5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCsoYi5jbGlja09mZnNldHx8Yi5vZmZzZXQuY2xpY2spLmxlZnQsbj0oYi5wb3NpdGlvbkFic3x8Yi5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wKyhiLmNsaWNrT2Zmc2V0fHxiLm9mZnNldC5jbGljaykudG9wLG89YS51aS5pc092ZXIobixtLGssaSxjLnByb3BvcnRpb25zLmhlaWdodCxjLnByb3BvcnRpb25zLndpZHRoKTtyZXR1cm4gbztjYXNlInRvdWNoIjpyZXR1cm4oZz49ayYmZzw9bHx8aD49ayYmaDw9bHx8ZzxrJiZoPmwpJiYoZT49aSYmZTw9anx8Zj49aSYmZjw9anx8ZTxpJiZmPmopO2RlZmF1bHQ6cmV0dXJuITF9fSxhLnVpLmRkbWFuYWdlcj17Y3VycmVudDpudWxsLGRyb3BwYWJsZXM6eyJkZWZhdWx0IjpbXX0scHJlcGFyZU9mZnNldHM6ZnVuY3Rpb24oYixjKXt2YXIgZD1hLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Iub3B0aW9ucy5zY29wZV18fFtdLGU9Yz9jLnR5cGU6bnVsbCxmPShiLmN1cnJlbnRJdGVtfHxiLmVsZW1lbnQpLmZpbmQoIjpkYXRhKGRyb3BwYWJsZSkiKS5hbmRTZWxmKCk7Zzpmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl7aWYoZFtoXS5vcHRpb25zLmRpc2FibGVkfHxiJiYhZFtoXS5hY2NlcHQuY2FsbChkW2hdLmVsZW1lbnRbMF0sYi5jdXJyZW50SXRlbXx8Yi5lbGVtZW50KSljb250aW51ZTtmb3IodmFyIGk9MDtpPGYubGVuZ3RoO2krKylpZihmW2ldPT1kW2hdLmVsZW1lbnRbMF0pe2RbaF0ucHJvcG9ydGlvbnMuaGVpZ2h0PTA7Y29udGludWUgZ31kW2hdLnZpc2libGU9ZFtoXS5lbGVtZW50LmNzcygiZGlzcGxheSIpIT0ibm9uZSI7aWYoIWRbaF0udmlzaWJsZSljb250aW51ZTtlPT0ibW91c2Vkb3duIiYmZFtoXS5fYWN0aXZhdGUuY2FsbChkW2hdLGMpLGRbaF0ub2Zmc2V0PWRbaF0uZWxlbWVudC5vZmZzZXQoKSxkW2hdLnByb3BvcnRpb25zPXt3aWR0aDpkW2hdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OmRbaF0uZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9fX0sZHJvcDpmdW5jdGlvbihiLGMpe3ZhciBkPSExO3JldHVybiBhLmVhY2goYS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tiLm9wdGlvbnMuc2NvcGVdfHxbXSxmdW5jdGlvbigpe2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuOyF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmYS51aS5pbnRlcnNlY3QoYix0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UpJiYoZD10aGlzLl9kcm9wLmNhbGwodGhpcyxjKXx8ZCksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxiLmN1cnJlbnRJdGVtfHxiLmVsZW1lbnQpJiYodGhpcy5pc291dD0xLHRoaXMuaXNvdmVyPTAsdGhpcy5fZGVhY3RpdmF0ZS5jYWxsKHRoaXMsYykpfSksZH0sZHJhZ1N0YXJ0OmZ1bmN0aW9uKGIsYyl7Yi5lbGVtZW50LnBhcmVudHMoIjpub3QoYm9keSxodG1sKSIpLmJpbmQoInNjcm9sbC5kcm9wcGFibGUiLGZ1bmN0aW9uKCl7Yi5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fGEudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGIsYyl9KX0sZHJhZzpmdW5jdGlvbihiLGMpe2Iub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zJiZhLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhiLGMpLGEuZWFjaChhLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Iub3B0aW9ucy5zY29wZV18fFtdLGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkfHx0aGlzLmdyZWVkeUNoaWxkfHwhdGhpcy52aXNpYmxlKXJldHVybjt2YXIgZD1hLnVpLmludGVyc2VjdChiLHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSksZT0hZCYmdGhpcy5pc292ZXI9PTE/Imlzb3V0IjpkJiZ0aGlzLmlzb3Zlcj09MD8iaXNvdmVyIjpudWxsO2lmKCFlKXJldHVybjt2YXIgZjtpZih0aGlzLm9wdGlvbnMuZ3JlZWR5KXt2YXIgZz10aGlzLm9wdGlvbnMuc2NvcGUsaD10aGlzLmVsZW1lbnQucGFyZW50cygiOmRhdGEoZHJvcHBhYmxlKSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBhLmRhdGEodGhpcywiZHJvcHBhYmxlIikub3B0aW9ucy5zY29wZT09PWd9KTtoLmxlbmd0aCYmKGY9YS5kYXRhKGhbMF0sImRyb3BwYWJsZSIpLGYuZ3JlZWR5Q2hpbGQ9ZT09Imlzb3ZlciI/MTowKX1mJiZlPT0iaXNvdmVyIiYmKGYuaXNvdmVyPTAsZi5pc291dD0xLGYuX291dC5jYWxsKGYsYykpLHRoaXNbZV09MSx0aGlzW2U9PSJpc291dCI/Imlzb3ZlciI6Imlzb3V0Il09MCx0aGlzW2U9PSJpc292ZXIiPyJfb3ZlciI6Il9vdXQiXS5jYWxsKHRoaXMsYyksZiYmZT09Imlzb3V0IiYmKGYuaXNvdXQ9MCxmLmlzb3Zlcj0xLGYuX292ZXIuY2FsbChmLGMpKX0pfSxkcmFnU3RvcDpmdW5jdGlvbihiLGMpe2IuZWxlbWVudC5wYXJlbnRzKCI6bm90KGJvZHksaHRtbCkiKS51bmJpbmQoInNjcm9sbC5kcm9wcGFibGUiKSxiLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8YS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoYixjKX19fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS53aWRnZXQoInVpLnJlc2l6YWJsZSIsYS51aS5tb3VzZSx7d2lkZ2V0RXZlbnRQcmVmaXg6InJlc2l6ZSIsb3B0aW9uczp7YWxzb1Jlc2l6ZTohMSxhbmltYXRlOiExLGFuaW1hdGVEdXJhdGlvbjoic2xvdyIsYW5pbWF0ZUVhc2luZzoic3dpbmciLGFzcGVjdFJhdGlvOiExLGF1dG9IaWRlOiExLGNvbnRhaW5tZW50OiExLGdob3N0OiExLGdyaWQ6ITEsaGFuZGxlczoiZSxzLHNlIixoZWxwZXI6ITEsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxtaW5IZWlnaHQ6MTAsbWluV2lkdGg6MTAsekluZGV4OjFlM30sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYz10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1yZXNpemFibGUiKSxhLmV4dGVuZCh0aGlzLHtfYXNwZWN0UmF0aW86ISFjLmFzcGVjdFJhdGlvLGFzcGVjdFJhdGlvOmMuYXNwZWN0UmF0aW8sb3JpZ2luYWxFbGVtZW50OnRoaXMuZWxlbWVudCxfcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50czpbXSxfaGVscGVyOmMuaGVscGVyfHxjLmdob3N0fHxjLmFuaW1hdGU/Yy5oZWxwZXJ8fCJ1aS1yZXNpemFibGUtaGVscGVyIjpudWxsfSksdGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9jYW52YXN8dGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbnxpbWcvaSkmJih0aGlzLmVsZW1lbnQud3JhcChhKCc8ZGl2IGNsYXNzPSJ1aS13cmFwcGVyIiBzdHlsZT0ib3ZlcmZsb3c6IGhpZGRlbjsiPjwvZGl2PicpLmNzcyh7cG9zaXRpb246dGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSx3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSx0b3A6dGhpcy5lbGVtZW50LmNzcygidG9wIiksbGVmdDp0aGlzLmVsZW1lbnQuY3NzKCJsZWZ0Iil9KSksdGhpcy5lbGVtZW50PXRoaXMuZWxlbWVudC5wYXJlbnQoKS5kYXRhKCJyZXNpemFibGUiLHRoaXMuZWxlbWVudC5kYXRhKCJyZXNpemFibGUiKSksdGhpcy5lbGVtZW50SXNXcmFwcGVyPSEwLHRoaXMuZWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksbWFyZ2luVG9wOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luVG9wIiksbWFyZ2luUmlnaHQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5SaWdodCIpLG1hcmdpbkJvdHRvbTp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpfSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHttYXJnaW5MZWZ0OjAsbWFyZ2luVG9wOjAsbWFyZ2luUmlnaHQ6MCxtYXJnaW5Cb3R0b206MH0pLHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZT10aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiwibm9uZSIpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMucHVzaCh0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOiJzdGF0aWMiLHpvb206MSxkaXNwbGF5OiJibG9jayJ9KSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHttYXJnaW46dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW4iKX0pLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLHRoaXMuaGFuZGxlcz1jLmhhbmRsZXN8fChhKCIudWktcmVzaXphYmxlLWhhbmRsZSIsdGhpcy5lbGVtZW50KS5sZW5ndGg/e246Ii51aS1yZXNpemFibGUtbiIsZToiLnVpLXJlc2l6YWJsZS1lIixzOiIudWktcmVzaXphYmxlLXMiLHc6Ii51aS1yZXNpemFibGUtdyIsc2U6Ii51aS1yZXNpemFibGUtc2UiLHN3OiIudWktcmVzaXphYmxlLXN3IixuZToiLnVpLXJlc2l6YWJsZS1uZSIsbnc6Ii51aS1yZXNpemFibGUtbncifToiZSxzLHNlIik7aWYodGhpcy5oYW5kbGVzLmNvbnN0cnVjdG9yPT1TdHJpbmcpe3RoaXMuaGFuZGxlcz09ImFsbCImJih0aGlzLmhhbmRsZXM9Im4sZSxzLHcsc2Usc3csbmUsbnciKTt2YXIgZD10aGlzLmhhbmRsZXMuc3BsaXQoIiwiKTt0aGlzLmhhbmRsZXM9e307Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe3ZhciBmPWEudHJpbShkW2VdKSxnPSJ1aS1yZXNpemFibGUtIitmLGg9YSgnPGRpdiBjbGFzcz0idWktcmVzaXphYmxlLWhhbmRsZSAnK2crJyI+PC9kaXY+Jyk7aC5jc3Moe3pJbmRleDpjLnpJbmRleH0pLCJzZSI9PWYmJmguYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UiKSx0aGlzLmhhbmRsZXNbZl09Ii51aS1yZXNpemFibGUtIitmLHRoaXMuZWxlbWVudC5hcHBlbmQoaCl9fXRoaXMuX3JlbmRlckF4aXM9ZnVuY3Rpb24oYil7Yj1ifHx0aGlzLmVsZW1lbnQ7Zm9yKHZhciBjIGluIHRoaXMuaGFuZGxlcyl7dGhpcy5oYW5kbGVzW2NdLmNvbnN0cnVjdG9yPT1TdHJpbmcmJih0aGlzLmhhbmRsZXNbY109YSh0aGlzLmhhbmRsZXNbY10sdGhpcy5lbGVtZW50KS5zaG93KCkpO2lmKHRoaXMuZWxlbWVudElzV3JhcHBlciYmdGhpcy5vcmlnaW5hbEVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL3RleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b24vaSkpe3ZhciBkPWEodGhpcy5oYW5kbGVzW2NdLHRoaXMuZWxlbWVudCksZT0wO2U9L3N3fG5lfG53fHNlfG58cy8udGVzdChjKT9kLm91dGVySGVpZ2h0KCk6ZC5vdXRlcldpZHRoKCk7dmFyIGY9WyJwYWRkaW5nIiwvbmV8bnd8bi8udGVzdChjKT8iVG9wIjovc2V8c3d8cy8udGVzdChjKT8iQm90dG9tIjovXmUkLy50ZXN0KGMpPyJSaWdodCI6IkxlZnQiXS5qb2luKCIiKTtiLmNzcyhmLGUpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCl9aWYoIWEodGhpcy5oYW5kbGVzW2NdKS5sZW5ndGgpY29udGludWV9fSx0aGlzLl9yZW5kZXJBeGlzKHRoaXMuZWxlbWVudCksdGhpcy5faGFuZGxlcz1hKCIudWktcmVzaXphYmxlLWhhbmRsZSIsdGhpcy5lbGVtZW50KS5kaXNhYmxlU2VsZWN0aW9uKCksdGhpcy5faGFuZGxlcy5tb3VzZW92ZXIoZnVuY3Rpb24oKXtpZighYi5yZXNpemluZyl7aWYodGhpcy5jbGFzc05hbWUpdmFyIGE9dGhpcy5jbGFzc05hbWUubWF0Y2goL3VpLXJlc2l6YWJsZS0oc2V8c3d8bmV8bnd8bnxlfHN8dykvaSk7Yi5heGlzPWEmJmFbMV0/YVsxXToic2UifX0pLGMuYXV0b0hpZGUmJih0aGlzLl9oYW5kbGVzLmhpZGUoKSxhKHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLmhvdmVyKGZ1bmN0aW9uKCl7aWYoYy5kaXNhYmxlZClyZXR1cm47YSh0aGlzKS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIiksYi5faGFuZGxlcy5zaG93KCl9LGZ1bmN0aW9uKCl7aWYoYy5kaXNhYmxlZClyZXR1cm47Yi5yZXNpemluZ3x8KGEodGhpcykuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLGIuX2hhbmRsZXMuaGlkZSgpKX0pKSx0aGlzLl9tb3VzZUluaXQoKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO3ZhciBiPWZ1bmN0aW9uKGIpe2EoYikucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZSB1aS1yZXNpemFibGUtZGlzYWJsZWQgdWktcmVzaXphYmxlLXJlc2l6aW5nIikucmVtb3ZlRGF0YSgicmVzaXphYmxlIikudW5iaW5kKCIucmVzaXphYmxlIikuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKS5yZW1vdmUoKX07aWYodGhpcy5lbGVtZW50SXNXcmFwcGVyKXtiKHRoaXMuZWxlbWVudCk7dmFyIGM9dGhpcy5lbGVtZW50O2MuYWZ0ZXIodGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjpjLmNzcygicG9zaXRpb24iKSx3aWR0aDpjLm91dGVyV2lkdGgoKSxoZWlnaHQ6Yy5vdXRlckhlaWdodCgpLHRvcDpjLmNzcygidG9wIiksbGVmdDpjLmNzcygibGVmdCIpfSkpLnJlbW92ZSgpfXJldHVybiB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKSxiKHRoaXMub3JpZ2luYWxFbGVtZW50KSx0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGIpe3ZhciBjPSExO2Zvcih2YXIgZCBpbiB0aGlzLmhhbmRsZXMpYSh0aGlzLmhhbmRsZXNbZF0pWzBdPT1iLnRhcmdldCYmKGM9ITApO3JldHVybiF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJmN9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMub3B0aW9ucyxlPXRoaXMuZWxlbWVudC5wb3NpdGlvbigpLGY9dGhpcy5lbGVtZW50O3RoaXMucmVzaXppbmc9ITAsdGhpcy5kb2N1bWVudFNjcm9sbD17dG9wOmEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLGxlZnQ6YShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpfSwoZi5pcygiLnVpLWRyYWdnYWJsZSIpfHwvYWJzb2x1dGUvLnRlc3QoZi5jc3MoInBvc2l0aW9uIikpKSYmZi5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOmUudG9wLGxlZnQ6ZS5sZWZ0fSksdGhpcy5fcmVuZGVyUHJveHkoKTt2YXIgZz1jKHRoaXMuaGVscGVyLmNzcygibGVmdCIpKSxoPWModGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSk7ZC5jb250YWlubWVudCYmKGcrPWEoZC5jb250YWlubWVudCkuc2Nyb2xsTGVmdCgpfHwwLGgrPWEoZC5jb250YWlubWVudCkuc2Nyb2xsVG9wKCl8fDApLHRoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMucG9zaXRpb249e2xlZnQ6Zyx0b3A6aH0sdGhpcy5zaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6Zi5vdXRlcldpZHRoKCksaGVpZ2h0OmYub3V0ZXJIZWlnaHQoKX06e3dpZHRoOmYud2lkdGgoKSxoZWlnaHQ6Zi5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFNpemU9dGhpcy5faGVscGVyP3t3aWR0aDpmLm91dGVyV2lkdGgoKSxoZWlnaHQ6Zi5vdXRlckhlaWdodCgpfTp7d2lkdGg6Zi53aWR0aCgpLGhlaWdodDpmLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e2xlZnQ6Zyx0b3A6aH0sdGhpcy5zaXplRGlmZj17d2lkdGg6Zi5vdXRlcldpZHRoKCktZi53aWR0aCgpLGhlaWdodDpmLm91dGVySGVpZ2h0KCktZi5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb249e2xlZnQ6Yi5wYWdlWCx0b3A6Yi5wYWdlWX0sdGhpcy5hc3BlY3RSYXRpbz10eXBlb2YgZC5hc3BlY3RSYXRpbz09Im51bWJlciI/ZC5hc3BlY3RSYXRpbzp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aC90aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHR8fDE7dmFyIGk9YSgiLnVpLXJlc2l6YWJsZS0iK3RoaXMuYXhpcykuY3NzKCJjdXJzb3IiKTtyZXR1cm4gYSgiYm9keSIpLmNzcygiY3Vyc29yIixpPT0iYXV0byI/dGhpcy5heGlzKyItcmVzaXplIjppKSxmLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSx0aGlzLl9wcm9wYWdhdGUoInN0YXJ0IixiKSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbihiKXt2YXIgYz10aGlzLmhlbHBlcixkPXRoaXMub3B0aW9ucyxlPXt9LGY9dGhpcyxnPXRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uLGg9dGhpcy5heGlzLGk9Yi5wYWdlWC1nLmxlZnR8fDAsaj1iLnBhZ2VZLWcudG9wfHwwLGs9dGhpcy5fY2hhbmdlW2hdO2lmKCFrKXJldHVybiExO3ZhciBsPWsuYXBwbHkodGhpcyxbYixpLGpdKSxtPWEuYnJvd3Nlci5tc2llJiZhLmJyb3dzZXIudmVyc2lvbjw3LG49dGhpcy5zaXplRGlmZjt0aGlzLl91cGRhdGVWaXJ0dWFsQm91bmRhcmllcyhiLnNoaWZ0S2V5KTtpZih0aGlzLl9hc3BlY3RSYXRpb3x8Yi5zaGlmdEtleSlsPXRoaXMuX3VwZGF0ZVJhdGlvKGwsYik7cmV0dXJuIGw9dGhpcy5fcmVzcGVjdFNpemUobCxiKSx0aGlzLl9wcm9wYWdhdGUoInJlc2l6ZSIsYiksYy5jc3Moe3RvcDp0aGlzLnBvc2l0aW9uLnRvcCsicHgiLGxlZnQ6dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIsd2lkdGg6dGhpcy5zaXplLndpZHRoKyJweCIsaGVpZ2h0OnRoaXMuc2l6ZS5oZWlnaHQrInB4In0pLCF0aGlzLl9oZWxwZXImJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpLHRoaXMuX3VwZGF0ZUNhY2hlKGwpLHRoaXMuX3RyaWdnZXIoInJlc2l6ZSIsYix0aGlzLnVpKCkpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGIpe3RoaXMucmVzaXppbmc9ITE7dmFyIGM9dGhpcy5vcHRpb25zLGQ9dGhpcztpZih0aGlzLl9oZWxwZXIpe3ZhciBlPXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMsZj1lLmxlbmd0aCYmL3RleHRhcmVhL2kudGVzdChlWzBdLm5vZGVOYW1lKSxnPWYmJmEudWkuaGFzU2Nyb2xsKGVbMF0sImxlZnQiKT8wOmQuc2l6ZURpZmYuaGVpZ2h0LGg9Zj8wOmQuc2l6ZURpZmYud2lkdGgsaT17d2lkdGg6ZC5oZWxwZXIud2lkdGgoKS1oLGhlaWdodDpkLmhlbHBlci5oZWlnaHQoKS1nfSxqPXBhcnNlSW50KGQuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKGQucG9zaXRpb24ubGVmdC1kLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsaz1wYXJzZUludChkLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKGQucG9zaXRpb24udG9wLWQub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO2MuYW5pbWF0ZXx8dGhpcy5lbGVtZW50LmNzcyhhLmV4dGVuZChpLHt0b3A6ayxsZWZ0Omp9KSksZC5oZWxwZXIuaGVpZ2h0KGQuc2l6ZS5oZWlnaHQpLGQuaGVscGVyLndpZHRoKGQuc2l6ZS53aWR0aCksdGhpcy5faGVscGVyJiYhYy5hbmltYXRlJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpfXJldHVybiBhKCJib2R5IikuY3NzKCJjdXJzb3IiLCJhdXRvIiksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSx0aGlzLl9wcm9wYWdhdGUoInN0b3AiLGIpLHRoaXMuX2hlbHBlciYmdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9LF91cGRhdGVWaXJ0dWFsQm91bmRhcmllczpmdW5jdGlvbihhKXt2YXIgYj10aGlzLm9wdGlvbnMsYyxlLGYsZyxoO2g9e21pbldpZHRoOmQoYi5taW5XaWR0aCk/Yi5taW5XaWR0aDowLG1heFdpZHRoOmQoYi5tYXhXaWR0aCk/Yi5tYXhXaWR0aDpJbmZpbml0eSxtaW5IZWlnaHQ6ZChiLm1pbkhlaWdodCk/Yi5taW5IZWlnaHQ6MCxtYXhIZWlnaHQ6ZChiLm1heEhlaWdodCk/Yi5tYXhIZWlnaHQ6SW5maW5pdHl9O2lmKHRoaXMuX2FzcGVjdFJhdGlvfHxhKWM9aC5taW5IZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxmPWgubWluV2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxlPWgubWF4SGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8sZz1oLm1heFdpZHRoL3RoaXMuYXNwZWN0UmF0aW8sYz5oLm1pbldpZHRoJiYoaC5taW5XaWR0aD1jKSxmPmgubWluSGVpZ2h0JiYoaC5taW5IZWlnaHQ9ZiksZTxoLm1heFdpZHRoJiYoaC5tYXhXaWR0aD1lKSxnPGgubWF4SGVpZ2h0JiYoaC5tYXhIZWlnaHQ9Zyk7dGhpcy5fdkJvdW5kYXJpZXM9aH0sX3VwZGF0ZUNhY2hlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9uczt0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSxkKGEubGVmdCkmJih0aGlzLnBvc2l0aW9uLmxlZnQ9YS5sZWZ0KSxkKGEudG9wKSYmKHRoaXMucG9zaXRpb24udG9wPWEudG9wKSxkKGEuaGVpZ2h0KSYmKHRoaXMuc2l6ZS5oZWlnaHQ9YS5oZWlnaHQpLGQoYS53aWR0aCkmJih0aGlzLnNpemUud2lkdGg9YS53aWR0aCl9LF91cGRhdGVSYXRpbzpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMub3B0aW9ucyxlPXRoaXMucG9zaXRpb24sZj10aGlzLnNpemUsZz10aGlzLmF4aXM7cmV0dXJuIGQoYS5oZWlnaHQpP2Eud2lkdGg9YS5oZWlnaHQqdGhpcy5hc3BlY3RSYXRpbzpkKGEud2lkdGgpJiYoYS5oZWlnaHQ9YS53aWR0aC90aGlzLmFzcGVjdFJhdGlvKSxnPT0ic3ciJiYoYS5sZWZ0PWUubGVmdCsoZi53aWR0aC1hLndpZHRoKSxhLnRvcD1udWxsKSxnPT0ibnciJiYoYS50b3A9ZS50b3ArKGYuaGVpZ2h0LWEuaGVpZ2h0KSxhLmxlZnQ9ZS5sZWZ0KyhmLndpZHRoLWEud2lkdGgpKSxhfSxfcmVzcGVjdFNpemU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmhlbHBlcixlPXRoaXMuX3ZCb3VuZGFyaWVzLGY9dGhpcy5fYXNwZWN0UmF0aW98fGIuc2hpZnRLZXksZz10aGlzLmF4aXMsaD1kKGEud2lkdGgpJiZlLm1heFdpZHRoJiZlLm1heFdpZHRoPGEud2lkdGgsaT1kKGEuaGVpZ2h0KSYmZS5tYXhIZWlnaHQmJmUubWF4SGVpZ2h0PGEuaGVpZ2h0LGo9ZChhLndpZHRoKSYmZS5taW5XaWR0aCYmZS5taW5XaWR0aD5hLndpZHRoLGs9ZChhLmhlaWdodCkmJmUubWluSGVpZ2h0JiZlLm1pbkhlaWdodD5hLmhlaWdodDtqJiYoYS53aWR0aD1lLm1pbldpZHRoKSxrJiYoYS5oZWlnaHQ9ZS5taW5IZWlnaHQpLGgmJihhLndpZHRoPWUubWF4V2lkdGgpLGkmJihhLmhlaWdodD1lLm1heEhlaWdodCk7dmFyIGw9dGhpcy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQrdGhpcy5vcmlnaW5hbFNpemUud2lkdGgsbT10aGlzLnBvc2l0aW9uLnRvcCt0aGlzLnNpemUuaGVpZ2h0LG49L3N3fG53fHcvLnRlc3QoZyksbz0vbnd8bmV8bi8udGVzdChnKTtqJiZuJiYoYS5sZWZ0PWwtZS5taW5XaWR0aCksaCYmbiYmKGEubGVmdD1sLWUubWF4V2lkdGgpLGsmJm8mJihhLnRvcD1tLWUubWluSGVpZ2h0KSxpJiZvJiYoYS50b3A9bS1lLm1heEhlaWdodCk7dmFyIHA9IWEud2lkdGgmJiFhLmhlaWdodDtyZXR1cm4gcCYmIWEubGVmdCYmYS50b3A/YS50b3A9bnVsbDpwJiYhYS50b3AmJmEubGVmdCYmKGEubGVmdD1udWxsKSxhfSxfcHJvcG9ydGlvbmFsbHlSZXNpemU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm9wdGlvbnM7aWYoIXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKXJldHVybjt2YXIgYz10aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50O2Zvcih2YXIgZD0wO2Q8dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzW2RdO2lmKCF0aGlzLmJvcmRlckRpZil7dmFyIGY9W2UuY3NzKCJib3JkZXJUb3BXaWR0aCIpLGUuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksZS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksZS5jc3MoImJvcmRlckxlZnRXaWR0aCIpXSxnPVtlLmNzcygicGFkZGluZ1RvcCIpLGUuY3NzKCJwYWRkaW5nUmlnaHQiKSxlLmNzcygicGFkZGluZ0JvdHRvbSIpLGUuY3NzKCJwYWRkaW5nTGVmdCIpXTt0aGlzLmJvcmRlckRpZj1hLm1hcChmLGZ1bmN0aW9uKGEsYil7dmFyIGM9cGFyc2VJbnQoYSwxMCl8fDAsZD1wYXJzZUludChnW2JdLDEwKXx8MDtyZXR1cm4gYytkfSl9aWYoIWEuYnJvd3Nlci5tc2llfHwhYShjKS5pcygiOmhpZGRlbiIpJiYhYShjKS5wYXJlbnRzKCI6aGlkZGVuIikubGVuZ3RoKWUuY3NzKHtoZWlnaHQ6Yy5oZWlnaHQoKS10aGlzLmJvcmRlckRpZlswXS10aGlzLmJvcmRlckRpZlsyXXx8MCx3aWR0aDpjLndpZHRoKCktdGhpcy5ib3JkZXJEaWZbMV0tdGhpcy5ib3JkZXJEaWZbM118fDB9KTtlbHNlIGNvbnRpbnVlfX0sX3JlbmRlclByb3h5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudE9mZnNldD1iLm9mZnNldCgpO2lmKHRoaXMuX2hlbHBlcil7dGhpcy5oZWxwZXI9dGhpcy5oZWxwZXJ8fGEoJzxkaXYgc3R5bGU9Im92ZXJmbG93OmhpZGRlbjsiPjwvZGl2PicpO3ZhciBkPWEuYnJvd3Nlci5tc2llJiZhLmJyb3dzZXIudmVyc2lvbjw3LGU9ZD8xOjAsZj1kPzI6LTE7dGhpcy5oZWxwZXIuYWRkQ2xhc3ModGhpcy5faGVscGVyKS5jc3Moe3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCkrZixoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkrZixwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6dGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtZSsicHgiLHRvcDp0aGlzLmVsZW1lbnRPZmZzZXQudG9wLWUrInB4Iix6SW5kZXg6KytjLnpJbmRleH0pLHRoaXMuaGVscGVyLmFwcGVuZFRvKCJib2R5IikuZGlzYWJsZVNlbGVjdGlvbigpfWVsc2UgdGhpcy5oZWxwZXI9dGhpcy5lbGVtZW50fSxfY2hhbmdlOntlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm57d2lkdGg6dGhpcy5vcmlnaW5hbFNpemUud2lkdGgrYn19LHc6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMub3B0aW9ucyxlPXRoaXMub3JpZ2luYWxTaXplLGY9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybntsZWZ0OmYubGVmdCtiLHdpZHRoOmUud2lkdGgtYn19LG46ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMub3B0aW9ucyxlPXRoaXMub3JpZ2luYWxTaXplLGY9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybnt0b3A6Zi50b3ArYyxoZWlnaHQ6ZS5oZWlnaHQtY319LHM6ZnVuY3Rpb24oYSxiLGMpe3JldHVybntoZWlnaHQ6dGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0K2N9fSxzZTpmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGEuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFtiLGMsZF0pKX0sc3c6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBhLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbYixjLGRdKSl9LG5lOmZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYS5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW2IsYyxkXSkpfSxudzpmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGEuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFtiLGMsZF0pKX19LF9wcm9wYWdhdGU6ZnVuY3Rpb24oYixjKXthLnVpLnBsdWdpbi5jYWxsKHRoaXMsYixbYyx0aGlzLnVpKCldKSxiIT0icmVzaXplIiYmdGhpcy5fdHJpZ2dlcihiLGMsdGhpcy51aSgpKX0scGx1Z2luczp7fSx1aTpmdW5jdGlvbigpe3JldHVybntvcmlnaW5hbEVsZW1lbnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQsZWxlbWVudDp0aGlzLmVsZW1lbnQsaGVscGVyOnRoaXMuaGVscGVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sc2l6ZTp0aGlzLnNpemUsb3JpZ2luYWxTaXplOnRoaXMub3JpZ2luYWxTaXplLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9ufX19KSxhLmV4dGVuZChhLnVpLnJlc2l6YWJsZSx7dmVyc2lvbjoiMS44LjI0In0pLGEudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYWxzb1Jlc2l6ZSIse3N0YXJ0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxlPWQub3B0aW9ucyxmPWZ1bmN0aW9uKGIpe2EoYikuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyk7Yi5kYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIse3dpZHRoOnBhcnNlSW50KGIud2lkdGgoKSwxMCksaGVpZ2h0OnBhcnNlSW50KGIuaGVpZ2h0KCksMTApLGxlZnQ6cGFyc2VJbnQoYi5jc3MoImxlZnQiKSwxMCksdG9wOnBhcnNlSW50KGIuY3NzKCJ0b3AiKSwxMCl9KX0pfTt0eXBlb2YgZS5hbHNvUmVzaXplPT0ib2JqZWN0IiYmIWUuYWxzb1Jlc2l6ZS5wYXJlbnROb2RlP2UuYWxzb1Jlc2l6ZS5sZW5ndGg/KGUuYWxzb1Jlc2l6ZT1lLmFsc29SZXNpemVbMF0sZihlLmFsc29SZXNpemUpKTphLmVhY2goZS5hbHNvUmVzaXplLGZ1bmN0aW9uKGEpe2YoYSl9KTpmKGUuYWxzb1Jlc2l6ZSl9LHJlc2l6ZTpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgicmVzaXphYmxlIiksZT1kLm9wdGlvbnMsZj1kLm9yaWdpbmFsU2l6ZSxnPWQub3JpZ2luYWxQb3NpdGlvbixoPXtoZWlnaHQ6ZC5zaXplLmhlaWdodC1mLmhlaWdodHx8MCx3aWR0aDpkLnNpemUud2lkdGgtZi53aWR0aHx8MCx0b3A6ZC5wb3NpdGlvbi50b3AtZy50b3B8fDAsbGVmdDpkLnBvc2l0aW9uLmxlZnQtZy5sZWZ0fHwwfSxpPWZ1bmN0aW9uKGIsZCl7YShiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxlPWEodGhpcykuZGF0YSgicmVzaXphYmxlLWFsc29yZXNpemUiKSxmPXt9LGc9ZCYmZC5sZW5ndGg/ZDpiLnBhcmVudHMoYy5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aD9bIndpZHRoIiwiaGVpZ2h0Il06WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTthLmVhY2goZyxmdW5jdGlvbihhLGIpe3ZhciBjPShlW2JdfHwwKSsoaFtiXXx8MCk7YyYmYz49MCYmKGZbYl09Y3x8bnVsbCl9KSxiLmNzcyhmKX0pfTt0eXBlb2YgZS5hbHNvUmVzaXplPT0ib2JqZWN0IiYmIWUuYWxzb1Jlc2l6ZS5ub2RlVHlwZT9hLmVhY2goZS5hbHNvUmVzaXplLGZ1bmN0aW9uKGEsYil7aShhLGIpfSk6aShlLmFsc29SZXNpemUpfSxzdG9wOmZ1bmN0aW9uKGIsYyl7YSh0aGlzKS5yZW1vdmVEYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpfX0pLGEudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYW5pbWF0ZSIse3N0b3A6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGU9ZC5vcHRpb25zLGY9ZC5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxnPWYubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KGZbMF0ubm9kZU5hbWUpLGg9ZyYmYS51aS5oYXNTY3JvbGwoZlswXSwibGVmdCIpPzA6ZC5zaXplRGlmZi5oZWlnaHQsaT1nPzA6ZC5zaXplRGlmZi53aWR0aCxqPXt3aWR0aDpkLnNpemUud2lkdGgtaSxoZWlnaHQ6ZC5zaXplLmhlaWdodC1ofSxrPXBhcnNlSW50KGQuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKGQucG9zaXRpb24ubGVmdC1kLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsbD1wYXJzZUludChkLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKGQucG9zaXRpb24udG9wLWQub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO2QuZWxlbWVudC5hbmltYXRlKGEuZXh0ZW5kKGosbCYmaz97dG9wOmwsbGVmdDprfTp7fSkse2R1cmF0aW9uOmUuYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzplLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciBjPXt3aWR0aDpwYXJzZUludChkLmVsZW1lbnQuY3NzKCJ3aWR0aCIpLDEwKSxoZWlnaHQ6cGFyc2VJbnQoZC5lbGVtZW50LmNzcygiaGVpZ2h0IiksMTApLHRvcDpwYXJzZUludChkLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCksbGVmdDpwYXJzZUludChkLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApfTtmJiZmLmxlbmd0aCYmYShmWzBdKS5jc3Moe3dpZHRoOmMud2lkdGgsaGVpZ2h0OmMuaGVpZ2h0fSksZC5fdXBkYXRlQ2FjaGUoYyksZC5fcHJvcGFnYXRlKCJyZXNpemUiLGIpfX0pfX0pLGEudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiY29udGFpbm1lbnQiLHtzdGFydDpmdW5jdGlvbihiLGQpe3ZhciBlPWEodGhpcykuZGF0YSgicmVzaXphYmxlIiksZj1lLm9wdGlvbnMsZz1lLmVsZW1lbnQsaD1mLmNvbnRhaW5tZW50LGk9aCBpbnN0YW5jZW9mIGE/aC5nZXQoMCk6L3BhcmVudC8udGVzdChoKT9nLnBhcmVudCgpLmdldCgwKTpoO2lmKCFpKXJldHVybjtlLmNvbnRhaW5lckVsZW1lbnQ9YShpKTtpZigvZG9jdW1lbnQvLnRlc3QoaCl8fGg9PWRvY3VtZW50KWUuY29udGFpbmVyT2Zmc2V0PXtsZWZ0OjAsdG9wOjB9LGUuY29udGFpbmVyUG9zaXRpb249e2xlZnQ6MCx0b3A6MH0sZS5wYXJlbnREYXRhPXtlbGVtZW50OmEoZG9jdW1lbnQpLGxlZnQ6MCx0b3A6MCx3aWR0aDphKGRvY3VtZW50KS53aWR0aCgpLGhlaWdodDphKGRvY3VtZW50KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodH07ZWxzZXt2YXIgaj1hKGkpLGs9W107YShbIlRvcCIsIlJpZ2h0IiwiTGVmdCIsIkJvdHRvbSJdKS5lYWNoKGZ1bmN0aW9uKGEsYil7a1thXT1jKGouY3NzKCJwYWRkaW5nIitiKSl9KSxlLmNvbnRhaW5lck9mZnNldD1qLm9mZnNldCgpLGUuY29udGFpbmVyUG9zaXRpb249ai5wb3NpdGlvbigpLGUuY29udGFpbmVyU2l6ZT17aGVpZ2h0OmouaW5uZXJIZWlnaHQoKS1rWzNdLHdpZHRoOmouaW5uZXJXaWR0aCgpLWtbMV19O3ZhciBsPWUuY29udGFpbmVyT2Zmc2V0LG09ZS5jb250YWluZXJTaXplLmhlaWdodCxuPWUuY29udGFpbmVyU2l6ZS53aWR0aCxvPWEudWkuaGFzU2Nyb2xsKGksImxlZnQiKT9pLnNjcm9sbFdpZHRoOm4scD1hLnVpLmhhc1Njcm9sbChpKT9pLnNjcm9sbEhlaWdodDptO2UucGFyZW50RGF0YT17ZWxlbWVudDppLGxlZnQ6bC5sZWZ0LHRvcDpsLnRvcCx3aWR0aDpvLGhlaWdodDpwfX19LHJlc2l6ZTpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgicmVzaXphYmxlIiksZT1kLm9wdGlvbnMsZj1kLmNvbnRhaW5lclNpemUsZz1kLmNvbnRhaW5lck9mZnNldCxoPWQuc2l6ZSxpPWQucG9zaXRpb24saj1kLl9hc3BlY3RSYXRpb3x8Yi5zaGlmdEtleSxrPXt0b3A6MCxsZWZ0OjB9LGw9ZC5jb250YWluZXJFbGVtZW50O2xbMF0hPWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGwuY3NzKCJwb3NpdGlvbiIpKSYmKGs9ZyksaS5sZWZ0PChkLl9oZWxwZXI/Zy5sZWZ0OjApJiYoZC5zaXplLndpZHRoPWQuc2l6ZS53aWR0aCsoZC5faGVscGVyP2QucG9zaXRpb24ubGVmdC1nLmxlZnQ6ZC5wb3NpdGlvbi5sZWZ0LWsubGVmdCksaiYmKGQuc2l6ZS5oZWlnaHQ9ZC5zaXplLndpZHRoL2QuYXNwZWN0UmF0aW8pLGQucG9zaXRpb24ubGVmdD1lLmhlbHBlcj9nLmxlZnQ6MCksaS50b3A8KGQuX2hlbHBlcj9nLnRvcDowKSYmKGQuc2l6ZS5oZWlnaHQ9ZC5zaXplLmhlaWdodCsoZC5faGVscGVyP2QucG9zaXRpb24udG9wLWcudG9wOmQucG9zaXRpb24udG9wKSxqJiYoZC5zaXplLndpZHRoPWQuc2l6ZS5oZWlnaHQqZC5hc3BlY3RSYXRpbyksZC5wb3NpdGlvbi50b3A9ZC5faGVscGVyP2cudG9wOjApLGQub2Zmc2V0LmxlZnQ9ZC5wYXJlbnREYXRhLmxlZnQrZC5wb3NpdGlvbi5sZWZ0LGQub2Zmc2V0LnRvcD1kLnBhcmVudERhdGEudG9wK2QucG9zaXRpb24udG9wO3ZhciBtPU1hdGguYWJzKChkLl9oZWxwZXI/ZC5vZmZzZXQubGVmdC1rLmxlZnQ6ZC5vZmZzZXQubGVmdC1rLmxlZnQpK2Quc2l6ZURpZmYud2lkdGgpLG49TWF0aC5hYnMoKGQuX2hlbHBlcj9kLm9mZnNldC50b3Atay50b3A6ZC5vZmZzZXQudG9wLWcudG9wKStkLnNpemVEaWZmLmhlaWdodCksbz1kLmNvbnRhaW5lckVsZW1lbnQuZ2V0KDApPT1kLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLHA9L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KGQuY29udGFpbmVyRWxlbWVudC5jc3MoInBvc2l0aW9uIikpO28mJnAmJihtLT1kLnBhcmVudERhdGEubGVmdCksbStkLnNpemUud2lkdGg+PWQucGFyZW50RGF0YS53aWR0aCYmKGQuc2l6ZS53aWR0aD1kLnBhcmVudERhdGEud2lkdGgtbSxqJiYoZC5zaXplLmhlaWdodD1kLnNpemUud2lkdGgvZC5hc3BlY3RSYXRpbykpLG4rZC5zaXplLmhlaWdodD49ZC5wYXJlbnREYXRhLmhlaWdodCYmKGQuc2l6ZS5oZWlnaHQ9ZC5wYXJlbnREYXRhLmhlaWdodC1uLGomJihkLnNpemUud2lkdGg9ZC5zaXplLmhlaWdodCpkLmFzcGVjdFJhdGlvKSl9LHN0b3A6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGU9ZC5vcHRpb25zLGY9ZC5wb3NpdGlvbixnPWQuY29udGFpbmVyT2Zmc2V0LGg9ZC5jb250YWluZXJQb3NpdGlvbixpPWQuY29udGFpbmVyRWxlbWVudCxqPWEoZC5oZWxwZXIpLGs9ai5vZmZzZXQoKSxsPWoub3V0ZXJXaWR0aCgpLWQuc2l6ZURpZmYud2lkdGgsbT1qLm91dGVySGVpZ2h0KCktZC5zaXplRGlmZi5oZWlnaHQ7ZC5faGVscGVyJiYhZS5hbmltYXRlJiYvcmVsYXRpdmUvLnRlc3QoaS5jc3MoInBvc2l0aW9uIikpJiZhKHRoaXMpLmNzcyh7bGVmdDprLmxlZnQtaC5sZWZ0LWcubGVmdCx3aWR0aDpsLGhlaWdodDptfSksZC5faGVscGVyJiYhZS5hbmltYXRlJiYvc3RhdGljLy50ZXN0KGkuY3NzKCJwb3NpdGlvbiIpKSYmYSh0aGlzKS5jc3Moe2xlZnQ6ay5sZWZ0LWgubGVmdC1nLmxlZnQsd2lkdGg6bCxoZWlnaHQ6bX0pfX0pLGEudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ2hvc3QiLHtzdGFydDpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgicmVzaXphYmxlIiksZT1kLm9wdGlvbnMsZj1kLnNpemU7ZC5naG9zdD1kLm9yaWdpbmFsRWxlbWVudC5jbG9uZSgpLGQuZ2hvc3QuY3NzKHtvcGFjaXR5Oi4yNSxkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6Zi5oZWlnaHQsd2lkdGg6Zi53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWdob3N0IikuYWRkQ2xhc3ModHlwZW9mIGUuZ2hvc3Q9PSJzdHJpbmciP2UuZ2hvc3Q6IiIpLGQuZ2hvc3QuYXBwZW5kVG8oZC5oZWxwZXIpfSxyZXNpemU6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGU9ZC5vcHRpb25zO2QuZ2hvc3QmJmQuZ2hvc3QuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDpkLnNpemUuaGVpZ2h0LHdpZHRoOmQuc2l6ZS53aWR0aH0pfSxzdG9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxlPWQub3B0aW9ucztkLmdob3N0JiZkLmhlbHBlciYmZC5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKGQuZ2hvc3QuZ2V0KDApKX19KSxhLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImdyaWQiLHtyZXNpemU6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGU9ZC5vcHRpb25zLGY9ZC5zaXplLGc9ZC5vcmlnaW5hbFNpemUsaD1kLm9yaWdpbmFsUG9zaXRpb24saT1kLmF4aXMsaj1lLl9hc3BlY3RSYXRpb3x8Yi5zaGlmdEtleTtlLmdyaWQ9dHlwZW9mIGUuZ3JpZD09Im51bWJlciI/W2UuZ3JpZCxlLmdyaWRdOmUuZ3JpZDt2YXIgaz1NYXRoLnJvdW5kKChmLndpZHRoLWcud2lkdGgpLyhlLmdyaWRbMF18fDEpKSooZS5ncmlkWzBdfHwxKSxsPU1hdGgucm91bmQoKGYuaGVpZ2h0LWcuaGVpZ2h0KS8oZS5ncmlkWzFdfHwxKSkqKGUuZ3JpZFsxXXx8MSk7L14oc2V8c3xlKSQvLnRlc3QoaSk/KGQuc2l6ZS53aWR0aD1nLndpZHRoK2ssZC5zaXplLmhlaWdodD1nLmhlaWdodCtsKTovXihuZSkkLy50ZXN0KGkpPyhkLnNpemUud2lkdGg9Zy53aWR0aCtrLGQuc2l6ZS5oZWlnaHQ9Zy5oZWlnaHQrbCxkLnBvc2l0aW9uLnRvcD1oLnRvcC1sKTovXihzdykkLy50ZXN0KGkpPyhkLnNpemUud2lkdGg9Zy53aWR0aCtrLGQuc2l6ZS5oZWlnaHQ9Zy5oZWlnaHQrbCxkLnBvc2l0aW9uLmxlZnQ9aC5sZWZ0LWspOihkLnNpemUud2lkdGg9Zy53aWR0aCtrLGQuc2l6ZS5oZWlnaHQ9Zy5oZWlnaHQrbCxkLnBvc2l0aW9uLnRvcD1oLnRvcC1sLGQucG9zaXRpb24ubGVmdD1oLmxlZnQtayl9fSk7dmFyIGM9ZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTApfHwwfSxkPWZ1bmN0aW9uKGEpe3JldHVybiFpc05hTihwYXJzZUludChhLDEwKSl9fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS53aWRnZXQoInVpLnNlbGVjdGFibGUiLGEudWkubW91c2Use29wdGlvbnM6e2FwcGVuZFRvOiJib2R5IixhdXRvUmVmcmVzaDohMCxkaXN0YW5jZTowLGZpbHRlcjoiKiIsdG9sZXJhbmNlOiJ0b3VjaCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0YWJsZSIpLHRoaXMuZHJhZ2dlZD0hMTt2YXIgYzt0aGlzLnJlZnJlc2g9ZnVuY3Rpb24oKXtjPWEoYi5vcHRpb25zLmZpbHRlcixiLmVsZW1lbnRbMF0pLGMuYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksYy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxjPWIub2Zmc2V0KCk7YS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIse2VsZW1lbnQ6dGhpcywkZWxlbWVudDpiLGxlZnQ6Yy5sZWZ0LHRvcDpjLnRvcCxyaWdodDpjLmxlZnQrYi5vdXRlcldpZHRoKCksYm90dG9tOmMudG9wK2Iub3V0ZXJIZWlnaHQoKSxzdGFydHNlbGVjdGVkOiExLHNlbGVjdGVkOmIuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIiksc2VsZWN0aW5nOmIuaGFzQ2xhc3MoInVpLXNlbGVjdGluZyIpLHVuc2VsZWN0aW5nOmIuaGFzQ2xhc3MoInVpLXVuc2VsZWN0aW5nIil9KX0pfSx0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcz1jLmFkZENsYXNzKCJ1aS1zZWxlY3RlZSIpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuaGVscGVyPWEoIjxkaXYgY2xhc3M9J3VpLXNlbGVjdGFibGUtaGVscGVyJz48L2Rpdj4iKX0sZGVzdHJveTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVlcy5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWUiKS5yZW1vdmVEYXRhKCJzZWxlY3RhYmxlLWl0ZW0iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGFibGUgdWktc2VsZWN0YWJsZS1kaXNhYmxlZCIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUiKS51bmJpbmQoIi5zZWxlY3RhYmxlIiksdGhpcy5fbW91c2VEZXN0cm95KCksdGhpc30sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oYil7dmFyIGM9dGhpczt0aGlzLm9wb3M9W2IucGFnZVgsYi5wYWdlWV07aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXJldHVybjt2YXIgZD10aGlzLm9wdGlvbnM7dGhpcy5zZWxlY3RlZXM9YShkLmZpbHRlcix0aGlzLmVsZW1lbnRbMF0pLHRoaXMuX3RyaWdnZXIoInN0YXJ0IixiKSxhKGQuYXBwZW5kVG8pLmFwcGVuZCh0aGlzLmhlbHBlciksdGhpcy5oZWxwZXIuY3NzKHtsZWZ0OmIuY2xpZW50WCx0b3A6Yi5jbGllbnRZLHdpZHRoOjAsaGVpZ2h0OjB9KSxkLmF1dG9SZWZyZXNoJiZ0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcy5maWx0ZXIoIi51aS1zZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7ZC5zdGFydHNlbGVjdGVkPSEwLCFiLm1ldGFLZXkmJiFiLmN0cmxLZXkmJihkLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGQuc2VsZWN0ZWQ9ITEsZC4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxkLnVuc2VsZWN0aW5nPSEwLGMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIixiLHt1bnNlbGVjdGluZzpkLmVsZW1lbnR9KSl9KSxhKGIudGFyZ2V0KS5wYXJlbnRzKCkuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7aWYoZCl7dmFyIGU9IWIubWV0YUtleSYmIWIuY3RybEtleXx8IWQuJGVsZW1lbnQuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIik7cmV0dXJuIGQuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoZT8idWktdW5zZWxlY3RpbmciOiJ1aS1zZWxlY3RlZCIpLmFkZENsYXNzKGU/InVpLXNlbGVjdGluZyI6InVpLXVuc2VsZWN0aW5nIiksZC51bnNlbGVjdGluZz0hZSxkLnNlbGVjdGluZz1lLGQuc2VsZWN0ZWQ9ZSxlP2MuX3RyaWdnZXIoInNlbGVjdGluZyIsYix7c2VsZWN0aW5nOmQuZWxlbWVudH0pOmMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIixiLHt1bnNlbGVjdGluZzpkLmVsZW1lbnR9KSwhMX19KX0sX21vdXNlRHJhZzpmdW5jdGlvbihiKXt2YXIgYz10aGlzO3RoaXMuZHJhZ2dlZD0hMDtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWQpcmV0dXJuO3ZhciBkPXRoaXMub3B0aW9ucyxlPXRoaXMub3Bvc1swXSxmPXRoaXMub3Bvc1sxXSxnPWIucGFnZVgsaD1iLnBhZ2VZO2lmKGU+Zyl7dmFyIGk9ZztnPWUsZT1pfWlmKGY+aCl7dmFyIGk9aDtoPWYsZj1pfXJldHVybiB0aGlzLmhlbHBlci5jc3Moe2xlZnQ6ZSx0b3A6Zix3aWR0aDpnLWUsaGVpZ2h0OmgtZn0pLHRoaXMuc2VsZWN0ZWVzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1hLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7aWYoIWl8fGkuZWxlbWVudD09Yy5lbGVtZW50WzBdKXJldHVybjt2YXIgaj0hMTtkLnRvbGVyYW5jZT09InRvdWNoIj9qPSEoaS5sZWZ0Pmd8fGkucmlnaHQ8ZXx8aS50b3A+aHx8aS5ib3R0b208Zik6ZC50b2xlcmFuY2U9PSJmaXQiJiYoaj1pLmxlZnQ+ZSYmaS5yaWdodDxnJiZpLnRvcD5mJiZpLmJvdHRvbTxoKSxqPyhpLnNlbGVjdGVkJiYoaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxpLnNlbGVjdGVkPSExKSxpLnVuc2VsZWN0aW5nJiYoaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktdW5zZWxlY3RpbmciKSxpLnVuc2VsZWN0aW5nPSExKSxpLnNlbGVjdGluZ3x8KGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGluZyIpLGkuc2VsZWN0aW5nPSEwLGMuX3RyaWdnZXIoInNlbGVjdGluZyIsYix7c2VsZWN0aW5nOmkuZWxlbWVudH0pKSk6KGkuc2VsZWN0aW5nJiYoKGIubWV0YUtleXx8Yi5jdHJsS2V5KSYmaS5zdGFydHNlbGVjdGVkPyhpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSxpLnNlbGVjdGluZz0hMSxpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITApOihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSxpLnNlbGVjdGluZz0hMSxpLnN0YXJ0c2VsZWN0ZWQmJihpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGkudW5zZWxlY3Rpbmc9ITApLGMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIixiLHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpLGkuc2VsZWN0ZWQmJiFiLm1ldGFLZXkmJiFiLmN0cmxLZXkmJiFpLnN0YXJ0c2VsZWN0ZWQmJihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITEsaS4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxpLnVuc2VsZWN0aW5nPSEwLGMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIixiLHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpfSksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9dGhpczt0aGlzLmRyYWdnZWQ9ITE7dmFyIGQ9dGhpcy5vcHRpb25zO3JldHVybiBhKCIudWktdW5zZWxlY3RpbmciLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtkLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGQudW5zZWxlY3Rpbmc9ITEsZC5zdGFydHNlbGVjdGVkPSExLGMuX3RyaWdnZXIoInVuc2VsZWN0ZWQiLGIse3Vuc2VsZWN0ZWQ6ZC5lbGVtZW50fSl9KSxhKCIudWktc2VsZWN0aW5nIix0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7ZC4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIikuYWRkQ2xhc3MoInVpLXNlbGVjdGVkIiksZC5zZWxlY3Rpbmc9ITEsZC5zZWxlY3RlZD0hMCxkLnN0YXJ0c2VsZWN0ZWQ9ITAsYy5fdHJpZ2dlcigic2VsZWN0ZWQiLGIse3NlbGVjdGVkOmQuZWxlbWVudH0pfSksdGhpcy5fdHJpZ2dlcigic3RvcCIsYiksdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9fSksYS5leHRlbmQoYS51aS5zZWxlY3RhYmxlLHt2ZXJzaW9uOiIxLjguMjQifSl9KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLndpZGdldCgidWkuc29ydGFibGUiLGEudWkubW91c2Use3dpZGdldEV2ZW50UHJlZml4OiJzb3J0IixyZWFkeTohMSxvcHRpb25zOnthcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RXaXRoOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZHJvcE9uRW1wdHk6ITAsZm9yY2VQbGFjZWhvbGRlclNpemU6ITEsZm9yY2VIZWxwZXJTaXplOiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjoib3JpZ2luYWwiLGl0ZW1zOiI+ICoiLG9wYWNpdHk6ITEscGxhY2Vob2xkZXI6ITEscmV2ZXJ0OiExLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzY29wZToiZGVmYXVsdCIsdG9sZXJhbmNlOiJpbnRlcnNlY3QiLHpJbmRleDoxZTN9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnM7dGhpcy5jb250YWluZXJDYWNoZT17fSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNvcnRhYmxlIiksdGhpcy5yZWZyZXNoKCksdGhpcy5mbG9hdGluZz10aGlzLml0ZW1zLmxlbmd0aD9hLmF4aXM9PT0ieCJ8fC9sZWZ0fHJpZ2h0Ly50ZXN0KHRoaXMuaXRlbXNbMF0uaXRlbS5jc3MoImZsb2F0IikpfHwvaW5saW5lfHRhYmxlLWNlbGwvLnRlc3QodGhpcy5pdGVtc1swXS5pdGVtLmNzcygiZGlzcGxheSIpKTohMSx0aGlzLm9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5yZWFkeT0hMH0sZGVzdHJveTpmdW5jdGlvbigpe2EuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZSB1aS1zb3J0YWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgYj10aGlzLml0ZW1zLmxlbmd0aC0xO2I+PTA7Yi0tKXRoaXMuaXRlbXNbYl0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSsiLWl0ZW0iKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe2I9PT0iZGlzYWJsZWQiPyh0aGlzLm9wdGlvbnNbYl09Yyx0aGlzLndpZGdldCgpW2M/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgidWktc29ydGFibGUtZGlzYWJsZWQiKSk6YS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcztpZih0aGlzLnJldmVydGluZylyZXR1cm4hMTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMub3B0aW9ucy50eXBlPT0ic3RhdGljIilyZXR1cm4hMTt0aGlzLl9yZWZyZXNoSXRlbXMoYik7dmFyIGU9bnVsbCxmPXRoaXMsZz1hKGIudGFyZ2V0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe2lmKGEuZGF0YSh0aGlzLGQud2lkZ2V0TmFtZSsiLWl0ZW0iKT09ZilyZXR1cm4gZT1hKHRoaXMpLCExfSk7YS5kYXRhKGIudGFyZ2V0LGQud2lkZ2V0TmFtZSsiLWl0ZW0iKT09ZiYmKGU9YShiLnRhcmdldCkpO2lmKCFlKXJldHVybiExO2lmKHRoaXMub3B0aW9ucy5oYW5kbGUmJiFjKXt2YXIgaD0hMTthKHRoaXMub3B0aW9ucy5oYW5kbGUsZSkuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09Yi50YXJnZXQmJihoPSEwKX0pO2lmKCFoKXJldHVybiExfXJldHVybiB0aGlzLmN1cnJlbnRJdGVtPWUsdGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKSwhMH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oYixjLGQpe3ZhciBlPXRoaXMub3B0aW9ucyxmPXRoaXM7dGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKGIpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSxhLmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6Yi5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDpiLnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihiKSx0aGlzLm9yaWdpbmFsUGFnZVg9Yi5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9Yi5wYWdlWSxlLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGUuY3Vyc29yQXQpLHRoaXMuZG9tUG9zaXRpb249e3ByZXY6dGhpcy5jdXJyZW50SXRlbS5wcmV2KClbMF0scGFyZW50OnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF19LHRoaXMuaGVscGVyWzBdIT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLmN1cnJlbnRJdGVtLmhpZGUoKSx0aGlzLl9jcmVhdGVQbGFjZWhvbGRlcigpLGUuY29udGFpbm1lbnQmJnRoaXMuX3NldENvbnRhaW5tZW50KCksZS5jdXJzb3ImJihhKCJib2R5IikuY3NzKCJjdXJzb3IiKSYmKHRoaXMuX3N0b3JlZEN1cnNvcj1hKCJib2R5IikuY3NzKCJjdXJzb3IiKSksYSgiYm9keSIpLmNzcygiY3Vyc29yIixlLmN1cnNvcikpLGUub3BhY2l0eSYmKHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIpJiYodGhpcy5fc3RvcmVkT3BhY2l0eT10aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSksdGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IixlLm9wYWNpdHkpKSxlLnpJbmRleCYmKHRoaXMuaGVscGVyLmNzcygiekluZGV4IikmJih0aGlzLl9zdG9yZWRaSW5kZXg9dGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSksdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLGUuekluZGV4KSksdGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZ0aGlzLnNjcm9sbFBhcmVudFswXS50YWdOYW1lIT0iSFRNTCImJih0aGlzLm92ZXJmbG93T2Zmc2V0PXRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsYix0aGlzLl91aUhhc2goKSksdGhpcy5fcHJlc2VydmVIZWxwZXJQcm9wb3J0aW9uc3x8dGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpO2lmKCFkKWZvcih2YXIgZz10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy5jb250YWluZXJzW2ddLl90cmlnZ2VyKCJhY3RpdmF0ZSIsYixmLl91aUhhc2godGhpcykpO3JldHVybiBhLnVpLmRkbWFuYWdlciYmKGEudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksYS51aS5kZG1hbmFnZXImJiFlLmRyb3BCZWhhdmlvdXImJmEudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsYiksdGhpcy5kcmFnZ2luZz0hMCx0aGlzLmhlbHBlci5hZGRDbGFzcygidWktc29ydGFibGUtaGVscGVyIiksdGhpcy5fbW91c2VEcmFnKGIpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGIpe3RoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihiKSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpLHRoaXMubGFzdFBvc2l0aW9uQWJzfHwodGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicyk7aWYodGhpcy5vcHRpb25zLnNjcm9sbCl7dmFyIGM9dGhpcy5vcHRpb25zLGQ9ITE7dGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZ0aGlzLnNjcm9sbFBhcmVudFswXS50YWdOYW1lIT0iSFRNTCI/KHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wK3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodC1iLnBhZ2VZPGMuc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPWQ9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wK2Muc2Nyb2xsU3BlZWQ6Yi5wYWdlWS10aGlzLm92ZXJmbG93T2Zmc2V0LnRvcDxjLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPWQ9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLWMuc2Nyb2xsU3BlZWQpLHRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC1iLnBhZ2VYPGMuc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1kPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrYy5zY3JvbGxTcGVlZDpiLnBhZ2VYLXRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdDxjLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1kPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtYy5zY3JvbGxTcGVlZCkpOihiLnBhZ2VZLWEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpPGMuc2Nyb2xsU2Vuc2l0aXZpdHk/ZD1hKGRvY3VtZW50KS5zY3JvbGxUb3AoYShkb2N1bWVudCkuc2Nyb2xsVG9wKCktYy5zY3JvbGxTcGVlZCk6YSh3aW5kb3cpLmhlaWdodCgpLShiLnBhZ2VZLWEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTxjLnNjcm9sbFNlbnNpdGl2aXR5JiYoZD1hKGRvY3VtZW50KS5zY3JvbGxUb3AoYShkb2N1bWVudCkuc2Nyb2xsVG9wKCkrYy5zY3JvbGxTcGVlZCkpLGIucGFnZVgtYShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpPGMuc2Nyb2xsU2Vuc2l0aXZpdHk/ZD1hKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGEoZG9jdW1lbnQpLnNjcm9sbExlZnQoKS1jLnNjcm9sbFNwZWVkKTphKHdpbmRvdykud2lkdGgoKS0oYi5wYWdlWC1hKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpPGMuc2Nyb2xsU2Vuc2l0aXZpdHkmJihkPWEoZG9jdW1lbnQpLnNjcm9sbExlZnQoYShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpK2Muc2Nyb2xsU3BlZWQpKSksZCE9PSExJiZhLnVpLmRkbWFuYWdlciYmIWMuZHJvcEJlaGF2aW91ciYmYS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxiKX10aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpO2lmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ5Iil0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCsicHgiO2lmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ4Iil0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArInB4Ijtmb3IodmFyIGU9dGhpcy5pdGVtcy5sZW5ndGgtMTtlPj0wO2UtLSl7dmFyIGY9dGhpcy5pdGVtc1tlXSxnPWYuaXRlbVswXSxoPXRoaXMuX2ludGVyc2VjdHNXaXRoUG9pbnRlcihmKTtpZighaCljb250aW51ZTtpZihmLmluc3RhbmNlIT09dGhpcy5jdXJyZW50Q29udGFpbmVyKWNvbnRpbnVlO2lmKGchPXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMucGxhY2Vob2xkZXJbaD09MT8ibmV4dCI6InByZXYiXSgpWzBdIT1nJiYhYS51aS5jb250YWlucyh0aGlzLnBsYWNlaG9sZGVyWzBdLGcpJiYodGhpcy5vcHRpb25zLnR5cGU9PSJzZW1pLWR5bmFtaWMiPyFhLnVpLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSxnKTohMCkpe3RoaXMuZGlyZWN0aW9uPWg9PTE/ImRvd24iOiJ1cCI7aWYodGhpcy5vcHRpb25zLnRvbGVyYW5jZT09InBvaW50ZXIifHx0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKGYpKXRoaXMuX3JlYXJyYW5nZShiLGYpO2Vsc2UgYnJlYWs7dGhpcy5fdHJpZ2dlcigiY2hhbmdlIixiLHRoaXMuX3VpSGFzaCgpKTticmVha319cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKGIpLGEudWkuZGRtYW5hZ2VyJiZhLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsYiksdGhpcy5fdHJpZ2dlcigic29ydCIsYix0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihiLGMpe2lmKCFiKXJldHVybjthLnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiZhLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsYik7aWYodGhpcy5vcHRpb25zLnJldmVydCl7dmFyIGQ9dGhpcyxlPWQucGxhY2Vob2xkZXIub2Zmc2V0KCk7ZC5yZXZlcnRpbmc9ITAsYSh0aGlzLmhlbHBlcikuYW5pbWF0ZSh7bGVmdDplLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtZC5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCksdG9wOmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AtZC5tYXJnaW5zLnRvcCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxUb3ApfSxwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0LDEwKXx8NTAwLGZ1bmN0aW9uKCl7ZC5fY2xlYXIoYil9KX1lbHNlIHRoaXMuX2NsZWFyKGIsYyk7cmV0dXJuITF9LGNhbmNlbDpmdW5jdGlvbigpe3ZhciBiPXRoaXM7aWYodGhpcy5kcmFnZ2luZyl7dGhpcy5fbW91c2VVcCh7dGFyZ2V0Om51bGx9KSx0aGlzLm9wdGlvbnMuaGVscGVyPT0ib3JpZ2luYWwiP3RoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpOnRoaXMuY3VycmVudEl0ZW0uc2hvdygpO2Zvcih2YXIgYz10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7Yz49MDtjLS0pdGhpcy5jb250YWluZXJzW2NdLl90cmlnZ2VyKCJkZWFjdGl2YXRlIixudWxsLGIuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2NdLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbY10uX3RyaWdnZXIoIm91dCIsbnVsbCxiLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tjXS5jb250YWluZXJDYWNoZS5vdmVyPTApfXJldHVybiB0aGlzLnBsYWNlaG9sZGVyJiYodGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlJiZ0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5vcHRpb25zLmhlbHBlciE9Im9yaWdpbmFsIiYmdGhpcy5oZWxwZXImJnRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUmJnRoaXMuaGVscGVyLnJlbW92ZSgpLGEuZXh0ZW5kKHRoaXMse2hlbHBlcjpudWxsLGRyYWdnaW5nOiExLHJldmVydGluZzohMSxfbm9GaW5hbFNvcnQ6bnVsbH0pLHRoaXMuZG9tUG9zaXRpb24ucHJldj9hKHRoaXMuZG9tUG9zaXRpb24ucHJldikuYWZ0ZXIodGhpcy5jdXJyZW50SXRlbSk6YSh0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCkucHJlcGVuZCh0aGlzLmN1cnJlbnRJdGVtKSksdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoYiYmYi5jb25uZWN0ZWQpLGQ9W107cmV0dXJuIGI9Ynx8e30sYShjKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9KGEoYi5pdGVtfHx0aGlzKS5hdHRyKGIuYXR0cmlidXRlfHwiaWQiKXx8IiIpLm1hdGNoKGIuZXhwcmVzc2lvbnx8LyguKylbLT1fXSguKykvKTtjJiZkLnB1c2goKGIua2V5fHxjWzFdKyJbXSIpKyI9IisoYi5rZXkmJmIuZXhwcmVzc2lvbj9jWzFdOmNbMl0pKX0pLCFkLmxlbmd0aCYmYi5rZXkmJmQucHVzaChiLmtleSsiPSIpLGQuam9pbigiJiIpfSx0b0FycmF5OmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoYiYmYi5jb25uZWN0ZWQpLGQ9W107cmV0dXJuIGI9Ynx8e30sYy5lYWNoKGZ1bmN0aW9uKCl7ZC5wdXNoKGEoYi5pdGVtfHx0aGlzKS5hdHRyKGIuYXR0cmlidXRlfHwiaWQiKXx8IiIpfSksZH0sX2ludGVyc2VjdHNXaXRoOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucG9zaXRpb25BYnMubGVmdCxjPWIrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxkPXRoaXMucG9zaXRpb25BYnMudG9wLGU9ZCt0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxmPWEubGVmdCxnPWYrYS53aWR0aCxoPWEudG9wLGk9aCthLmhlaWdodCxqPXRoaXMub2Zmc2V0LmNsaWNrLnRvcCxrPXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsbD1kK2o+aCYmZCtqPGkmJmIraz5mJiZiK2s8ZztyZXR1cm4gdGhpcy5vcHRpb25zLnRvbGVyYW5jZT09InBvaW50ZXIifHx0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVyc3x8dGhpcy5vcHRpb25zLnRvbGVyYW5jZSE9InBvaW50ZXIiJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/IndpZHRoIjoiaGVpZ2h0Il0+YVt0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdP2w6ZjxiK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmYy10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI8ZyYmaDxkK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzImJmUtdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMjxpfSxfaW50ZXJzZWN0c1dpdGhQb2ludGVyOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMub3B0aW9ucy5heGlzPT09IngifHxhLnVpLmlzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGIudG9wLGIuaGVpZ2h0KSxkPXRoaXMub3B0aW9ucy5heGlzPT09InkifHxhLnVpLmlzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsYi5sZWZ0LGIud2lkdGgpLGU9YyYmZCxmPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLGc9dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gZT90aGlzLmZsb2F0aW5nP2cmJmc9PSJyaWdodCJ8fGY9PSJkb3duIj8yOjE6ZiYmKGY9PSJkb3duIj8yOjEpOiExfSxfaW50ZXJzZWN0c1dpdGhTaWRlczpmdW5jdGlvbihiKXt2YXIgYz1hLnVpLmlzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGIudG9wK2IuaGVpZ2h0LzIsYi5oZWlnaHQpLGQ9YS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMubGVmdCt0aGlzLm9mZnNldC5jbGljay5sZWZ0LGIubGVmdCtiLndpZHRoLzIsYi53aWR0aCksZT10aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSxmPXRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7cmV0dXJuIHRoaXMuZmxvYXRpbmcmJmY/Zj09InJpZ2h0IiYmZHx8Zj09ImxlZnQiJiYhZDplJiYoZT09ImRvd24iJiZjfHxlPT0idXAiJiYhYyl9LF9nZXREcmFnVmVydGljYWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBvc2l0aW9uQWJzLnRvcC10aGlzLmxhc3RQb3NpdGlvbkFicy50b3A7cmV0dXJuIGEhPTAmJihhPjA/ImRvd24iOiJ1cCIpfSxfZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBvc2l0aW9uQWJzLmxlZnQtdGhpcy5sYXN0UG9zaXRpb25BYnMubGVmdDtyZXR1cm4gYSE9MCYmKGE+MD8icmlnaHQiOiJsZWZ0Iil9LHJlZnJlc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3JlZnJlc2hJdGVtcyhhKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSx0aGlzfSxfY29ubmVjdFdpdGg6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnM7cmV0dXJuIGEuY29ubmVjdFdpdGguY29uc3RydWN0b3I9PVN0cmluZz9bYS5jb25uZWN0V2l0aF06YS5jb25uZWN0V2l0aH0sX2dldEl0ZW1zQXNqUXVlcnk6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxkPVtdLGU9W10sZj10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGYmJmIpZm9yKHZhciBnPWYubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBoPWEoZltnXSk7Zm9yKHZhciBpPWgubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBqPWEuZGF0YShoW2ldLHRoaXMud2lkZ2V0TmFtZSk7aiYmaiE9dGhpcyYmIWoub3B0aW9ucy5kaXNhYmxlZCYmZS5wdXNoKFthLmlzRnVuY3Rpb24oai5vcHRpb25zLml0ZW1zKT9qLm9wdGlvbnMuaXRlbXMuY2FsbChqLmVsZW1lbnQpOmEoai5vcHRpb25zLml0ZW1zLGouZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxqXSl9fWUucHVzaChbYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmEodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSk7Zm9yKHZhciBnPWUubGVuZ3RoLTE7Zz49MDtnLS0pZVtnXVswXS5lYWNoKGZ1bmN0aW9uKCl7ZC5wdXNoKHRoaXMpfSk7cmV0dXJuIGEoZCl9LF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3VycmVudEl0ZW0uZmluZCgiOmRhdGEoIit0aGlzLndpZGdldE5hbWUrIi1pdGVtKSIpO2Zvcih2YXIgYj0wO2I8dGhpcy5pdGVtcy5sZW5ndGg7YisrKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY109PXRoaXMuaXRlbXNbYl0uaXRlbVswXSYmdGhpcy5pdGVtcy5zcGxpY2UoYiwxKX0sX3JlZnJlc2hJdGVtczpmdW5jdGlvbihiKXt0aGlzLml0ZW1zPVtdLHRoaXMuY29udGFpbmVycz1bdGhpc107dmFyIGM9dGhpcy5pdGVtcyxkPXRoaXMsZT1bW2EuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpP3RoaXMub3B0aW9ucy5pdGVtcy5jYWxsKHRoaXMuZWxlbWVudFswXSxiLHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTphKHRoaXMub3B0aW9ucy5pdGVtcyx0aGlzLmVsZW1lbnQpLHRoaXNdXSxmPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYoZiYmdGhpcy5yZWFkeSlmb3IodmFyIGc9Zi5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGg9YShmW2ddKTtmb3IodmFyIGk9aC5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIGo9YS5kYXRhKGhbaV0sdGhpcy53aWRnZXROYW1lKTtqJiZqIT10aGlzJiYhai5vcHRpb25zLmRpc2FibGVkJiYoZS5wdXNoKFthLmlzRnVuY3Rpb24oai5vcHRpb25zLml0ZW1zKT9qLm9wdGlvbnMuaXRlbXMuY2FsbChqLmVsZW1lbnRbMF0sYix7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6YShqLm9wdGlvbnMuaXRlbXMsai5lbGVtZW50KSxqXSksdGhpcy5jb250YWluZXJzLnB1c2goaikpfX1mb3IodmFyIGc9ZS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGs9ZVtnXVsxXSxsPWVbZ11bMF07Zm9yKHZhciBpPTAsbT1sLmxlbmd0aDtpPG07aSsrKXt2YXIgbj1hKGxbaV0pO24uZGF0YSh0aGlzLndpZGdldE5hbWUrIi1pdGVtIixrKSxjLnB1c2goe2l0ZW06bixpbnN0YW5jZTprLHdpZHRoOjAsaGVpZ2h0OjAsbGVmdDowLHRvcDowfSl9fX0scmVmcmVzaFBvc2l0aW9uczpmdW5jdGlvbihiKXt0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpO2Zvcih2YXIgYz10aGlzLml0ZW1zLmxlbmd0aC0xO2M+PTA7Yy0tKXt2YXIgZD10aGlzLml0ZW1zW2NdO2lmKGQuaW5zdGFuY2UhPXRoaXMuY3VycmVudENvbnRhaW5lciYmdGhpcy5jdXJyZW50Q29udGFpbmVyJiZkLml0ZW1bMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0pY29udGludWU7dmFyIGU9dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/YSh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxkLml0ZW0pOmQuaXRlbTtifHwoZC53aWR0aD1lLm91dGVyV2lkdGgoKSxkLmhlaWdodD1lLm91dGVySGVpZ2h0KCkpO3ZhciBmPWUub2Zmc2V0KCk7ZC5sZWZ0PWYubGVmdCxkLnRvcD1mLnRvcH1pZih0aGlzLm9wdGlvbnMuY3VzdG9tJiZ0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKXRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKTtlbHNlIGZvcih2YXIgYz10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBmPXRoaXMuY29udGFpbmVyc1tjXS5lbGVtZW50Lm9mZnNldCgpO3RoaXMuY29udGFpbmVyc1tjXS5jb250YWluZXJDYWNoZS5sZWZ0PWYubGVmdCx0aGlzLmNvbnRhaW5lcnNbY10uY29udGFpbmVyQ2FjaGUudG9wPWYudG9wLHRoaXMuY29udGFpbmVyc1tjXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbY10uZWxlbWVudC5vdXRlcldpZHRoKCksdGhpcy5jb250YWluZXJzW2NdLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbY10uZWxlbWVudC5vdXRlckhlaWdodCgpfXJldHVybiB0aGlzfSxfY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24oYil7dmFyIGM9Ynx8dGhpcyxkPWMub3B0aW9ucztpZighZC5wbGFjZWhvbGRlcnx8ZC5wbGFjZWhvbGRlci5jb25zdHJ1Y3Rvcj09U3RyaW5nKXt2YXIgZT1kLnBsYWNlaG9sZGVyO2QucGxhY2Vob2xkZXI9e2VsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgYj1hKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYy5jdXJyZW50SXRlbVswXS5ub2RlTmFtZSkpLmFkZENsYXNzKGV8fGMuY3VycmVudEl0ZW1bMF0uY2xhc3NOYW1lKyIgdWktc29ydGFibGUtcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIilbMF07cmV0dXJuIGV8fChiLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpLGJ9LHVwZGF0ZTpmdW5jdGlvbihhLGIpe2lmKGUmJiFkLmZvcmNlUGxhY2Vob2xkZXJTaXplKXJldHVybjtiLmhlaWdodCgpfHxiLmhlaWdodChjLmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCktcGFyc2VJbnQoYy5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdUb3AiKXx8MCwxMCktcGFyc2VJbnQoYy5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdCb3R0b20iKXx8MCwxMCkpLGIud2lkdGgoKXx8Yi53aWR0aChjLmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKS1wYXJzZUludChjLmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0xlZnQiKXx8MCwxMCktcGFyc2VJbnQoYy5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdSaWdodCIpfHwwLDEwKSl9fX1jLnBsYWNlaG9sZGVyPWEoZC5wbGFjZWhvbGRlci5lbGVtZW50LmNhbGwoYy5lbGVtZW50LGMuY3VycmVudEl0ZW0pKSxjLmN1cnJlbnRJdGVtLmFmdGVyKGMucGxhY2Vob2xkZXIpLGQucGxhY2Vob2xkZXIudXBkYXRlKGMsYy5wbGFjZWhvbGRlcil9LF9jb250YWN0Q29udGFpbmVyczpmdW5jdGlvbihiKXt2YXIgYz1udWxsLGQ9bnVsbDtmb3IodmFyIGU9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2U+PTA7ZS0tKXtpZihhLnVpLmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2VdLmVsZW1lbnRbMF0pKWNvbnRpbnVlO2lmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZSkpe2lmKGMmJmEudWkuY29udGFpbnModGhpcy5jb250YWluZXJzW2VdLmVsZW1lbnRbMF0sYy5lbGVtZW50WzBdKSljb250aW51ZTtjPXRoaXMuY29udGFpbmVyc1tlXSxkPWV9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbZV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tlXS5fdHJpZ2dlcigib3V0IixiLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2VdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9aWYoIWMpcmV0dXJuO2lmKHRoaXMuY29udGFpbmVycy5sZW5ndGg9PT0xKXRoaXMuY29udGFpbmVyc1tkXS5fdHJpZ2dlcigib3ZlciIsYix0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tkXS5jb250YWluZXJDYWNoZS5vdmVyPTE7ZWxzZSBpZih0aGlzLmN1cnJlbnRDb250YWluZXIhPXRoaXMuY29udGFpbmVyc1tkXSl7dmFyIGY9MWU0LGc9bnVsbCxoPXRoaXMucG9zaXRpb25BYnNbdGhpcy5jb250YWluZXJzW2RdLmZsb2F0aW5nPyJsZWZ0IjoidG9wIl07Zm9yKHZhciBpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pe2lmKCFhLnVpLmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1tkXS5lbGVtZW50WzBdLHRoaXMuaXRlbXNbaV0uaXRlbVswXSkpY29udGludWU7dmFyIGo9dGhpcy5jb250YWluZXJzW2RdLmZsb2F0aW5nP3RoaXMuaXRlbXNbaV0uaXRlbS5vZmZzZXQoKS5sZWZ0OnRoaXMuaXRlbXNbaV0uaXRlbS5vZmZzZXQoKS50b3A7TWF0aC5hYnMoai1oKTxmJiYoZj1NYXRoLmFicyhqLWgpLGc9dGhpcy5pdGVtc1tpXSx0aGlzLmRpcmVjdGlvbj1qLWg+MD8iZG93biI6InVwIil9aWYoIWcmJiF0aGlzLm9wdGlvbnMuZHJvcE9uRW1wdHkpcmV0dXJuO3RoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNbZF0sZz90aGlzLl9yZWFycmFuZ2UoYixnLG51bGwsITApOnRoaXMuX3JlYXJyYW5nZShiLG51bGwsdGhpcy5jb250YWluZXJzW2RdLmVsZW1lbnQsITApLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsYix0aGlzLl91aUhhc2goKSksdGhpcy5jb250YWluZXJzW2RdLl90cmlnZ2VyKCJjaGFuZ2UiLGIsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIudXBkYXRlKHRoaXMuY3VycmVudENvbnRhaW5lcix0aGlzLnBsYWNlaG9sZGVyKSx0aGlzLmNvbnRhaW5lcnNbZF0uX3RyaWdnZXIoIm92ZXIiLGIsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbZF0uY29udGFpbmVyQ2FjaGUub3Zlcj0xfX0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihiKXt2YXIgYz10aGlzLm9wdGlvbnMsZD1hLmlzRnVuY3Rpb24oYy5oZWxwZXIpP2EoYy5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtiLHRoaXMuY3VycmVudEl0ZW1dKSk6Yy5oZWxwZXI9PSJjbG9uZSI/dGhpcy5jdXJyZW50SXRlbS5jbG9uZSgpOnRoaXMuY3VycmVudEl0ZW07cmV0dXJuIGQucGFyZW50cygiYm9keSIpLmxlbmd0aHx8YShjLmFwcGVuZFRvIT0icGFyZW50Ij9jLmFwcGVuZFRvOnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoZFswXSksZFswXT09dGhpcy5jdXJyZW50SXRlbVswXSYmKHRoaXMuX3N0b3JlZENTUz17d2lkdGg6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS53aWR0aCxoZWlnaHQ6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS5oZWlnaHQscG9zaXRpb246dGhpcy5jdXJyZW50SXRlbS5jc3MoInBvc2l0aW9uIiksdG9wOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuY3VycmVudEl0ZW0uY3NzKCJsZWZ0Iil9KSwoZFswXS5zdHlsZS53aWR0aD09IiJ8fGMuZm9yY2VIZWxwZXJTaXplKSYmZC53aWR0aCh0aGlzLmN1cnJlbnRJdGVtLndpZHRoKCkpLChkWzBdLnN0eWxlLmhlaWdodD09IiJ8fGMuZm9yY2VIZWxwZXJTaXplKSYmZC5oZWlnaHQodGhpcy5jdXJyZW50SXRlbS5oZWlnaHQoKSksZH0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24oYil7dHlwZW9mIGI9PSJzdHJpbmciJiYoYj1iLnNwbGl0KCIgIikpLGEuaXNBcnJheShiKSYmKGI9e2xlZnQ6K2JbMF0sdG9wOitiWzFdfHwwfSksImxlZnQiaW4gYiYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9Yi5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSwicmlnaHQiaW4gYiYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC1iLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSwidG9wImluIGImJih0aGlzLm9mZnNldC5jbGljay50b3A9Yi50b3ArdGhpcy5tYXJnaW5zLnRvcCksImJvdHRvbSJpbiBiJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LWIuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCk7dmFyIGI9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZhLnVpLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKGIubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLGIudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSk7aWYodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJnRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Imh0bWwiJiZhLmJyb3dzZXIubXNpZSliPXt0b3A6MCxsZWZ0OjB9O3JldHVybnt0b3A6Yi50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLGxlZnQ6Yi5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiKXt2YXIgYT10aGlzLmN1cnJlbnRJdGVtLnBvc2l0aW9uKCk7cmV0dXJue3RvcDphLnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6YS5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpbkxlZnQiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuY3VycmVudEl0ZW0uY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucztiLmNvbnRhaW5tZW50PT0icGFyZW50IiYmKGIuY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSk7aWYoYi5jb250YWlubWVudD09ImRvY3VtZW50Inx8Yi5jb250YWlubWVudD09IndpbmRvdyIpdGhpcy5jb250YWlubWVudD1bMC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsYShiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LChhKGIuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF07aWYoIS9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdChiLmNvbnRhaW5tZW50KSl7dmFyIGM9YShiLmNvbnRhaW5tZW50KVswXSxkPWEoYi5jb250YWlubWVudCkub2Zmc2V0KCksZT1hKGMpLmNzcygib3ZlcmZsb3ciKSE9ImhpZGRlbiI7dGhpcy5jb250YWlubWVudD1bZC5sZWZ0KyhwYXJzZUludChhKGMpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoYShjKS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKS10aGlzLm1hcmdpbnMubGVmdCxkLnRvcCsocGFyc2VJbnQoYShjKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoYShjKS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLXRoaXMubWFyZ2lucy50b3AsZC5sZWZ0KyhlP01hdGgubWF4KGMuc2Nyb2xsV2lkdGgsYy5vZmZzZXRXaWR0aCk6Yy5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGEoYykuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApLShwYXJzZUludChhKGMpLmNzcygicGFkZGluZ1JpZ2h0IiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LGQudG9wKyhlP01hdGgubWF4KGMuc2Nyb2xsSGVpZ2h0LGMub2Zmc2V0SGVpZ2h0KTpjLm9mZnNldEhlaWdodCktKHBhcnNlSW50KGEoYykuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGEoYykuY3NzKCJwYWRkaW5nQm90dG9tIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXX19LF9jb252ZXJ0UG9zaXRpb25UbzpmdW5jdGlvbihiLGMpe2N8fChjPXRoaXMucG9zaXRpb24pO3ZhciBkPWI9PSJhYnNvbHV0ZSI/MTotMSxlPXRoaXMub3B0aW9ucyxmPXRoaXMuY3NzUG9zaXRpb249PSJhYnNvbHV0ZSImJih0aGlzLnNjcm9sbFBhcmVudFswXT09ZG9jdW1lbnR8fCFhLnVpLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSk/dGhpcy5vZmZzZXRQYXJlbnQ6dGhpcy5zY3JvbGxQYXJlbnQsZz0vKGh0bWx8Ym9keSkvaS50ZXN0KGZbMF0udGFnTmFtZSk7cmV0dXJue3RvcDpjLnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AqZCt0aGlzLm9mZnNldC5wYXJlbnQudG9wKmQtKGEuYnJvd3Nlci5zYWZhcmkmJnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/MDoodGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6Zz8wOmYuc2Nyb2xsVG9wKCkpKmQpLGxlZnQ6Yy5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqZCt0aGlzLm9mZnNldC5wYXJlbnQubGVmdCpkLShhLmJyb3dzZXIuc2FmYXJpJiZ0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPzA6KHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpnPzA6Zi5zY3JvbGxMZWZ0KCkpKmQpfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zLGQ9dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdPT1kb2N1bWVudHx8IWEudWkuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pKT90aGlzLm9mZnNldFBhcmVudDp0aGlzLnNjcm9sbFBhcmVudCxlPS8oaHRtbHxib2R5KS9pLnRlc3QoZFswXS50YWdOYW1lKTt0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiJiYodGhpcy5zY3JvbGxQYXJlbnRbMF09PWRvY3VtZW50fHx0aGlzLnNjcm9sbFBhcmVudFswXT09dGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodGhpcy5vZmZzZXQucmVsYXRpdmU9dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKSk7dmFyIGY9Yi5wYWdlWCxnPWIucGFnZVk7aWYodGhpcy5vcmlnaW5hbFBvc2l0aW9uKXt0aGlzLmNvbnRhaW5tZW50JiYoYi5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0mJihmPXRoaXMuY29udGFpbm1lbnRbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksYi5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXSYmKGc9dGhpcy5jb250YWlubWVudFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLGIucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD50aGlzLmNvbnRhaW5tZW50WzJdJiYoZj10aGlzLmNvbnRhaW5tZW50WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGIucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnRoaXMuY29udGFpbm1lbnRbM10mJihnPXRoaXMuY29udGFpbm1lbnRbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSk7aWYoYy5ncmlkKXt2YXIgaD10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoZy10aGlzLm9yaWdpbmFsUGFnZVkpL2MuZ3JpZFsxXSkqYy5ncmlkWzFdO2c9dGhpcy5jb250YWlubWVudD9oLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdfHxoLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdP2gtdGhpcy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0/aCtjLmdyaWRbMV06aC1jLmdyaWRbMV06aDpoO3ZhciBpPXRoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChmLXRoaXMub3JpZ2luYWxQYWdlWCkvYy5ncmlkWzBdKSpjLmdyaWRbMF07Zj10aGlzLmNvbnRhaW5tZW50P2ktdGhpcy5vZmZzZXQuY2xpY2subGVmdDx0aGlzLmNvbnRhaW5tZW50WzBdfHxpLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dGhpcy5jb250YWlubWVudFsyXT9pLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXT9pK2MuZ3JpZFswXTppLWMuZ3JpZFswXTppOml9fXJldHVybnt0b3A6Zy10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKGEuYnJvd3Nlci5zYWZhcmkmJnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/MDp0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTplPzA6ZC5zY3JvbGxUb3AoKSksbGVmdDpmLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCsoYS5icm93c2VyLnNhZmFyaSYmdGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8wOnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTplPzA6ZC5zY3JvbGxMZWZ0KCkpfX0sX3JlYXJyYW5nZTpmdW5jdGlvbihhLGIsYyxkKXtjP2NbMF0uYXBwZW5kQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSk6Yi5pdGVtWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMucGxhY2Vob2xkZXJbMF0sdGhpcy5kaXJlY3Rpb249PSJkb3duIj9iLml0ZW1bMF06Yi5pdGVtWzBdLm5leHRTaWJsaW5nKSx0aGlzLmNvdW50ZXI9dGhpcy5jb3VudGVyPysrdGhpcy5jb3VudGVyOjE7dmFyIGU9dGhpcyxmPXRoaXMuY291bnRlcjt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2Y9PWUuY291bnRlciYmZS5yZWZyZXNoUG9zaXRpb25zKCFkKX0sMCl9LF9jbGVhcjpmdW5jdGlvbihiLGMpe3RoaXMucmV2ZXJ0aW5nPSExO3ZhciBkPVtdLGU9dGhpczshdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsO2lmKHRoaXMuaGVscGVyWzBdPT10aGlzLmN1cnJlbnRJdGVtWzBdKXtmb3IodmFyIGYgaW4gdGhpcy5fc3RvcmVkQ1NTKWlmKHRoaXMuX3N0b3JlZENTU1tmXT09ImF1dG8ifHx0aGlzLl9zdG9yZWRDU1NbZl09PSJzdGF0aWMiKXRoaXMuX3N0b3JlZENTU1tmXT0iIjt0aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKX1lbHNlIHRoaXMuY3VycmVudEl0ZW0uc2hvdygpO3RoaXMuZnJvbU91dHNpZGUmJiFjJiZkLnB1c2goZnVuY3Rpb24oYSl7dGhpcy5fdHJpZ2dlcigicmVjZWl2ZSIsYSx0aGlzLl91aUhhc2godGhpcy5mcm9tT3V0c2lkZSkpfSksKHRoaXMuZnJvbU91dHNpZGV8fHRoaXMuZG9tUG9zaXRpb24ucHJldiE9dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF18fHRoaXMuZG9tUG9zaXRpb24ucGFyZW50IT10aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdKSYmIWMmJmQucHVzaChmdW5jdGlvbihhKXt0aGlzLl90cmlnZ2VyKCJ1cGRhdGUiLGEsdGhpcy5fdWlIYXNoKCkpfSksdGhpcyE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmKGN8fChkLnB1c2goZnVuY3Rpb24oYSl7dGhpcy5fdHJpZ2dlcigicmVtb3ZlIixhLHRoaXMuX3VpSGFzaCgpKX0pLGQucHVzaChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7YS5fdHJpZ2dlcigicmVjZWl2ZSIsYix0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpLGQucHVzaChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7YS5fdHJpZ2dlcigidXBkYXRlIixiLHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSkpKTtmb3IodmFyIGY9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2Y+PTA7Zi0tKWN8fGQucHVzaChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7YS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsYix0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY29udGFpbmVyc1tmXSkpLHRoaXMuY29udGFpbmVyc1tmXS5jb250YWluZXJDYWNoZS5vdmVyJiYoZC5wdXNoKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXthLl90cmlnZ2VyKCJvdXQiLGIsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmNvbnRhaW5lcnNbZl0pKSx0aGlzLmNvbnRhaW5lcnNbZl0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTt0aGlzLl9zdG9yZWRDdXJzb3ImJmEoImJvZHkiKS5jc3MoImN1cnNvciIsdGhpcy5fc3RvcmVkQ3Vyc29yKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLHRoaXMuX3N0b3JlZFpJbmRleD09ImF1dG8iPyIiOnRoaXMuX3N0b3JlZFpJbmRleCksdGhpcy5kcmFnZ2luZz0hMTtpZih0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwpe2lmKCFjKXt0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIixiLHRoaXMuX3VpSGFzaCgpKTtmb3IodmFyIGY9MDtmPGQubGVuZ3RoO2YrKylkW2ZdLmNhbGwodGhpcyxiKTt0aGlzLl90cmlnZ2VyKCJzdG9wIixiLHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhMX1jfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIixiLHRoaXMuX3VpSGFzaCgpKSx0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5oZWxwZXJbMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGw7aWYoIWMpe2Zvcih2YXIgZj0wO2Y8ZC5sZW5ndGg7ZisrKWRbZl0uY2FsbCh0aGlzLGIpO3RoaXMuX3RyaWdnZXIoInN0b3AiLGIsdGhpcy5fdWlIYXNoKCkpfXJldHVybiB0aGlzLmZyb21PdXRzaWRlPSExLCEwfSxfdHJpZ2dlcjpmdW5jdGlvbigpe2EuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT0hMSYmdGhpcy5jYW5jZWwoKX0sX3VpSGFzaDpmdW5jdGlvbihiKXt2YXIgYz1ifHx0aGlzO3JldHVybntoZWxwZXI6Yy5oZWxwZXIscGxhY2Vob2xkZXI6Yy5wbGFjZWhvbGRlcnx8YShbXSkscG9zaXRpb246Yy5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOmMub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6Yy5wb3NpdGlvbkFicyxpdGVtOmMuY3VycmVudEl0ZW0sc2VuZGVyOmI/Yi5lbGVtZW50Om51bGx9fX0pLGEuZXh0ZW5kKGEudWkuc29ydGFibGUse3ZlcnNpb246IjEuOC4yNCJ9KX0oalF1ZXJ5KSxqUXVlcnkuZWZmZWN0c3x8ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3ZhciBjO3JldHVybiBiJiZiLmNvbnN0cnVjdG9yPT1BcnJheSYmYi5sZW5ndGg9PTM/YjooYz0vcmdiXChccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxzKlwpLy5leGVjKGIpKT9bcGFyc2VJbnQoY1sxXSwxMCkscGFyc2VJbnQoY1syXSwxMCkscGFyc2VJbnQoY1szXSwxMCldOihjPS9yZ2JcKFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqXCkvLmV4ZWMoYikpP1twYXJzZUZsb2F0KGNbMV0pKjIuNTUscGFyc2VGbG9hdChjWzJdKSoyLjU1LHBhcnNlRmxvYXQoY1szXSkqMi41NV06KGM9LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkvLmV4ZWMoYikpP1twYXJzZUludChjWzFdLDE2KSxwYXJzZUludChjWzJdLDE2KSxwYXJzZUludChjWzNdLDE2KV06KGM9LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkvLmV4ZWMoYikpP1twYXJzZUludChjWzFdK2NbMV0sMTYpLHBhcnNlSW50KGNbMl0rY1syXSwxNikscGFyc2VJbnQoY1szXStjWzNdLDE2KV06KGM9L3JnYmFcKDAsIDAsIDAsIDBcKS8uZXhlYyhiKSk/ZS50cmFuc3BhcmVudDplW2EudHJpbShiKS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBkKGIsZCl7dmFyIGU7ZG97ZT0oYS5jdXJDU1N8fGEuY3NzKShiLGQpO2lmKGUhPSIiJiZlIT0idHJhbnNwYXJlbnQifHxhLm5vZGVOYW1lKGIsImJvZHkiKSlicmVhaztkPSJiYWNrZ3JvdW5kQ29sb3IifXdoaWxlKGI9Yi5wYXJlbnROb2RlKTtyZXR1cm4gYyhlKX1mdW5jdGlvbiBoKCl7dmFyIGE9ZG9jdW1lbnQuZGVmYXVsdFZpZXc/ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpOnRoaXMuY3VycmVudFN0eWxlLGI9e30sYyxkO2lmKGEmJmEubGVuZ3RoJiZhWzBdJiZhW2FbMF1dKXt2YXIgZT1hLmxlbmd0aDt3aGlsZShlLS0pYz1hW2VdLHR5cGVvZiBhW2NdPT0ic3RyaW5nIiYmKGQ9Yy5yZXBsYWNlKC9cLShcdykvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KSxiW2RdPWFbY10pfWVsc2UgZm9yKGMgaW4gYSl0eXBlb2YgYVtjXT09InN0cmluZyImJihiW2NdPWFbY10pO3JldHVybiBifWZ1bmN0aW9uIGkoYil7dmFyIGMsZDtmb3IoYyBpbiBiKWQ9YltjXSwoZD09bnVsbHx8YS5pc0Z1bmN0aW9uKGQpfHxjIGluIGd8fC9zY3JvbGxiYXIvLnRlc3QoYyl8fCEvY29sb3IvaS50ZXN0KGMpJiZpc05hTihwYXJzZUZsb2F0KGQpKSkmJmRlbGV0ZSBiW2NdO3JldHVybiBifWZ1bmN0aW9uIGooYSxiKXt2YXIgYz17XzowfSxkO2ZvcihkIGluIGIpYVtkXSE9YltkXSYmKGNbZF09YltkXSk7cmV0dXJuIGN9ZnVuY3Rpb24gayhiLGMsZCxlKXt0eXBlb2YgYj09Im9iamVjdCImJihlPWMsZD1udWxsLGM9YixiPWMuZWZmZWN0KSxhLmlzRnVuY3Rpb24oYykmJihlPWMsZD1udWxsLGM9e30pO2lmKHR5cGVvZiBjPT0ibnVtYmVyInx8YS5meC5zcGVlZHNbY10pZT1kLGQ9YyxjPXt9O3JldHVybiBhLmlzRnVuY3Rpb24oZCkmJihlPWQsZD1udWxsKSxjPWN8fHt9LGQ9ZHx8Yy5kdXJhdGlvbixkPWEuZngub2ZmPzA6dHlwZW9mIGQ9PSJudW1iZXIiP2Q6ZCBpbiBhLmZ4LnNwZWVkcz9hLmZ4LnNwZWVkc1tkXTphLmZ4LnNwZWVkcy5fZGVmYXVsdCxlPWV8fGMuY29tcGxldGUsW2IsYyxkLGVdfWZ1bmN0aW9uIGwoYil7cmV0dXJuIWJ8fHR5cGVvZiBiPT0ibnVtYmVyInx8YS5meC5zcGVlZHNbYl0/ITA6dHlwZW9mIGI9PSJzdHJpbmciJiYhYS5lZmZlY3RzW2JdPyEwOiExfWEuZWZmZWN0cz17fSxhLmVhY2goWyJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiY29sb3IiLCJvdXRsaW5lQ29sb3IiXSxmdW5jdGlvbihiLGUpe2EuZnguc3RlcFtlXT1mdW5jdGlvbihhKXthLmNvbG9ySW5pdHx8KGEuc3RhcnQ9ZChhLmVsZW0sZSksYS5lbmQ9YyhhLmVuZCksYS5jb2xvckluaXQ9ITApLGEuZWxlbS5zdHlsZVtlXT0icmdiKCIrTWF0aC5tYXgoTWF0aC5taW4ocGFyc2VJbnQoYS5wb3MqKGEuZW5kWzBdLWEuc3RhcnRbMF0pK2Euc3RhcnRbMF0sMTApLDI1NSksMCkrIiwiK01hdGgubWF4KE1hdGgubWluKHBhcnNlSW50KGEucG9zKihhLmVuZFsxXS1hLnN0YXJ0WzFdKSthLnN0YXJ0WzFdLDEwKSwyNTUpLDApKyIsIitNYXRoLm1heChNYXRoLm1pbihwYXJzZUludChhLnBvcyooYS5lbmRbMl0tYS5zdGFydFsyXSkrYS5zdGFydFsyXSwxMCksMjU1KSwwKSsiKSJ9fSk7dmFyIGU9e2FxdWE6WzAsMjU1LDI1NV0sYXp1cmU6WzI0MCwyNTUsMjU1XSxiZWlnZTpbMjQ1LDI0NSwyMjBdLGJsYWNrOlswLDAsMF0sYmx1ZTpbMCwwLDI1NV0sYnJvd246WzE2NSw0Miw0Ml0sY3lhbjpbMCwyNTUsMjU1XSxkYXJrYmx1ZTpbMCwwLDEzOV0sZGFya2N5YW46WzAsMTM5LDEzOV0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJrZ3JlZW46WzAsMTAwLDBdLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnb2xkOlsyNTUsMjE1LDBdLGdyZWVuOlswLDEyOCwwXSxpbmRpZ286Wzc1LDAsMTMwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzBdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0XSxsaWdodGdyZXk6WzIxMSwyMTEsMjExXSxsaWdodHBpbms6WzI1NSwxODIsMTkzXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxuYXZ5OlswLDAsMTI4XSxvbGl2ZTpbMTI4LDEyOCwwXSxvcmFuZ2U6WzI1NSwxNjUsMF0scGluazpbMjU1LDE5MiwyMDNdLHB1cnBsZTpbMTI4LDAsMTI4XSx2aW9sZXQ6WzEyOCwwLDEyOF0scmVkOlsyNTUsMCwwXSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSx3aGl0ZTpbMjU1LDI1NSwyNTVdLHllbGxvdzpbMjU1LDI1NSwwXSx0cmFuc3BhcmVudDpbMjU1LDI1NSwyNTVdfSxmPVsiYWRkIiwicmVtb3ZlIiwidG9nZ2xlIl0sZz17Ym9yZGVyOjEsYm9yZGVyQm90dG9tOjEsYm9yZGVyQ29sb3I6MSxib3JkZXJMZWZ0OjEsYm9yZGVyUmlnaHQ6MSxib3JkZXJUb3A6MSxib3JkZXJXaWR0aDoxLG1hcmdpbjoxLHBhZGRpbmc6MX07YS5lZmZlY3RzLmFuaW1hdGVDbGFzcz1mdW5jdGlvbihiLGMsZCxlKXtyZXR1cm4gYS5pc0Z1bmN0aW9uKGQpJiYoZT1kLGQ9bnVsbCksdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBnPWEodGhpcyksaz1nLmF0dHIoInN0eWxlIil8fCIgIixsPWkoaC5jYWxsKHRoaXMpKSxtLG49Zy5hdHRyKCJjbGFzcyIpfHwiIjthLmVhY2goZixmdW5jdGlvbihhLGMpe2JbY10mJmdbYysiQ2xhc3MiXShiW2NdKX0pLG09aShoLmNhbGwodGhpcykpLGcuYXR0cigiY2xhc3MiLG4pLGcuYW5pbWF0ZShqKGwsbSkse3F1ZXVlOiExLGR1cmF0aW9uOmMsZWFzaW5nOmQsY29tcGxldGU6ZnVuY3Rpb24oKXthLmVhY2goZixmdW5jdGlvbihhLGMpe2JbY10mJmdbYysiQ2xhc3MiXShiW2NdKX0pLHR5cGVvZiBnLmF0dHIoInN0eWxlIik9PSJvYmplY3QiPyhnLmF0dHIoInN0eWxlIikuY3NzVGV4dD0iIixnLmF0dHIoInN0eWxlIikuY3NzVGV4dD1rKTpnLmF0dHIoInN0eWxlIixrKSxlJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLmRlcXVldWUodGhpcyl9fSl9KX0sYS5mbi5leHRlbmQoe19hZGRDbGFzczphLmZuLmFkZENsYXNzLGFkZENsYXNzOmZ1bmN0aW9uKGIsYyxkLGUpe3JldHVybiBjP2EuZWZmZWN0cy5hbmltYXRlQ2xhc3MuYXBwbHkodGhpcyxbe2FkZDpifSxjLGQsZV0pOnRoaXMuX2FkZENsYXNzKGIpfSxfcmVtb3ZlQ2xhc3M6YS5mbi5yZW1vdmVDbGFzcyxyZW1vdmVDbGFzczpmdW5jdGlvbihiLGMsZCxlKXtyZXR1cm4gYz9hLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmFwcGx5KHRoaXMsW3tyZW1vdmU6Yn0sYyxkLGVdKTp0aGlzLl9yZW1vdmVDbGFzcyhiKX0sX3RvZ2dsZUNsYXNzOmEuZm4udG9nZ2xlQ2xhc3MsdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYyxkLGUsZixnKXtyZXR1cm4gdHlwZW9mIGQ9PSJib29sZWFuInx8ZD09PWI/ZT9hLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmFwcGx5KHRoaXMsW2Q/e2FkZDpjfTp7cmVtb3ZlOmN9LGUsZixnXSk6dGhpcy5fdG9nZ2xlQ2xhc3MoYyxkKTphLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmFwcGx5KHRoaXMsW3t0b2dnbGU6Y30sZCxlLGZdKX0sc3dpdGNoQ2xhc3M6ZnVuY3Rpb24oYixjLGQsZSxmKXtyZXR1cm4gYS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5hcHBseSh0aGlzLFt7YWRkOmMscmVtb3ZlOmJ9LGQsZSxmXSl9fSksYS5leHRlbmQoYS5lZmZlY3RzLHt2ZXJzaW9uOiIxLjguMjQiLHNhdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdIT09bnVsbCYmYS5kYXRhKCJlYy5zdG9yYWdlLiIrYltjXSxhWzBdLnN0eWxlW2JbY11dKX0scmVzdG9yZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10hPT1udWxsJiZhLmNzcyhiW2NdLGEuZGF0YSgiZWMuc3RvcmFnZS4iK2JbY10pKX0sc2V0TW9kZTpmdW5jdGlvbihhLGIpe3JldHVybiBiPT0idG9nZ2xlIiYmKGI9YS5pcygiOmhpZGRlbiIpPyJzaG93IjoiaGlkZSIpLGJ9LGdldEJhc2VsaW5lOmZ1bmN0aW9uKGEsYil7dmFyIGMsZDtzd2l0Y2goYVswXSl7Y2FzZSJ0b3AiOmM9MDticmVhaztjYXNlIm1pZGRsZSI6Yz0uNTticmVhaztjYXNlImJvdHRvbSI6Yz0xO2JyZWFrO2RlZmF1bHQ6Yz1hWzBdL2IuaGVpZ2h0fXN3aXRjaChhWzFdKXtjYXNlImxlZnQiOmQ9MDticmVhaztjYXNlImNlbnRlciI6ZD0uNTticmVhaztjYXNlInJpZ2h0IjpkPTE7YnJlYWs7ZGVmYXVsdDpkPWFbMV0vYi53aWR0aH1yZXR1cm57eDpkLHk6Y319LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oYil7aWYoYi5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKXJldHVybiBiLnBhcmVudCgpO3ZhciBjPXt3aWR0aDpiLm91dGVyV2lkdGgoITApLGhlaWdodDpiLm91dGVySGVpZ2h0KCEwKSwiZmxvYXQiOmIuY3NzKCJmbG9hdCIpfSxkPWEoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWVmZmVjdHMtd3JhcHBlciIpLmNzcyh7Zm9udFNpemU6IjEwMCUiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLG1hcmdpbjowLHBhZGRpbmc6MH0pLGU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDt0cnl7ZS5pZH1jYXRjaChmKXtlPWRvY3VtZW50LmJvZHl9cmV0dXJuIGIud3JhcChkKSwoYlswXT09PWV8fGEuY29udGFpbnMoYlswXSxlKSkmJmEoZSkuZm9jdXMoKSxkPWIucGFyZW50KCksYi5jc3MoInBvc2l0aW9uIik9PSJzdGF0aWMiPyhkLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIn0pLGIuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSkpOihhLmV4dGVuZChjLHtwb3NpdGlvbjpiLmNzcygicG9zaXRpb24iKSx6SW5kZXg6Yi5jc3MoInotaW5kZXgiKX0pLGEuZWFjaChbInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCJdLGZ1bmN0aW9uKGEsZCl7Y1tkXT1iLmNzcyhkKSxpc05hTihwYXJzZUludChjW2RdLDEwKSkmJihjW2RdPSJhdXRvIil9KSxiLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6MCxsZWZ0OjAscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byJ9KSksZC5jc3MoYykuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKGIpe3ZhciBjLGQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4gYi5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpPyhjPWIucGFyZW50KCkucmVwbGFjZVdpdGgoYiksKGJbMF09PT1kfHxhLmNvbnRhaW5zKGJbMF0sZCkpJiZhKGQpLmZvY3VzKCksYyk6Yn0sc2V0VHJhbnNpdGlvbjpmdW5jdGlvbihiLGMsZCxlKXtyZXR1cm4gZT1lfHx7fSxhLmVhY2goYyxmdW5jdGlvbihhLGMpe3ZhciBmPWIuY3NzVW5pdChjKTtmWzBdPjAmJihlW2NdPWZbMF0qZCtmWzFdKX0pLGV9fSksYS5mbi5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZj1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnPXtvcHRpb25zOmZbMV0sZHVyYXRpb246ZlsyXSxjYWxsYmFjazpmWzNdfSxoPWcub3B0aW9ucy5tb2RlLGk9YS5lZmZlY3RzW2JdO3JldHVybiBhLmZ4Lm9mZnx8IWk/aD90aGlzW2hdKGcuZHVyYXRpb24sZy5jYWxsYmFjayk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zy5jYWxsYmFjayYmZy5jYWxsYmFjay5jYWxsKHRoaXMpfSk6aS5jYWxsKHRoaXMsZyl9LF9zaG93OmEuZm4uc2hvdyxzaG93OmZ1bmN0aW9uKGEpe2lmKGwoYSkpcmV0dXJuIHRoaXMuX3Nob3cuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBiPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBiWzFdLm1vZGU9InNob3ciLHRoaXMuZWZmZWN0LmFwcGx5KHRoaXMsYil9LF9oaWRlOmEuZm4uaGlkZSxoaWRlOmZ1bmN0aW9uKGEpe2lmKGwoYSkpcmV0dXJuIHRoaXMuX2hpZGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBiPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBiWzFdLm1vZGU9ImhpZGUiLHRoaXMuZWZmZWN0LmFwcGx5KHRoaXMsYil9LF9fdG9nZ2xlOmEuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihiKXtpZihsKGIpfHx0eXBlb2YgYj09ImJvb2xlYW4ifHxhLmlzRnVuY3Rpb24oYikpcmV0dXJuIHRoaXMuX190b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBjPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBjWzFdLm1vZGU9InRvZ2dsZSIsdGhpcy5lZmZlY3QuYXBwbHkodGhpcyxjKX0sY3NzVW5pdDpmdW5jdGlvbihiKXt2YXIgYz10aGlzLmNzcyhiKSxkPVtdO3JldHVybiBhLmVhY2goWyJlbSIsInB4IiwiJSIsInB0Il0sZnVuY3Rpb24oYSxiKXtjLmluZGV4T2YoYik+MCYmKGQ9W3BhcnNlRmxvYXQoYyksYl0pfSksZH19KTt2YXIgbT17fTthLmVhY2goWyJRdWFkIiwiQ3ViaWMiLCJRdWFydCIsIlF1aW50IiwiRXhwbyJdLGZ1bmN0aW9uKGEsYil7bVtiXT1mdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5wb3coYixhKzIpfX0pLGEuZXh0ZW5kKG0se1NpbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEtTWF0aC5jb3MoYSpNYXRoLlBJLzIpfSxDaXJjOmZ1bmN0aW9uKGEpe3JldHVybiAxLU1hdGguc3FydCgxLWEqYSl9LEVsYXN0aWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT0wfHxhPT09MT9hOi1NYXRoLnBvdygyLDgqKGEtMSkpKk1hdGguc2luKCgoYS0xKSo4MC03LjUpKk1hdGguUEkvMTUpfSxCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiBhKmEqKDMqYS0yKX0sQm91bmNlOmZ1bmN0aW9uKGEpe3ZhciBiLGM9NDt3aGlsZShhPCgoYj1NYXRoLnBvdygyLC0tYykpLTEpLzExKTtyZXR1cm4gMS9NYXRoLnBvdyg0LDMtYyktNy41NjI1Kk1hdGgucG93KChiKjMtMikvMjItYSwyKX19KSxhLmVhY2gobSxmdW5jdGlvbihiLGMpe2EuZWFzaW5nWyJlYXNlSW4iK2JdPWMsYS5lYXNpbmdbImVhc2VPdXQiK2JdPWZ1bmN0aW9uKGEpe3JldHVybiAxLWMoMS1hKX0sYS5lYXNpbmdbImVhc2VJbk91dCIrYl09ZnVuY3Rpb24oYSl7cmV0dXJuIGE8LjU/YyhhKjIpLzI6YyhhKi0yKzIpLy0yKzF9fSl9KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuYmxpbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLGU9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImhpZGUiKSxmPWIub3B0aW9ucy5kaXJlY3Rpb258fCJ2ZXJ0aWNhbCI7YS5lZmZlY3RzLnNhdmUoYyxkKSxjLnNob3coKTt2YXIgZz1hLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihjKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksaD1mPT0idmVydGljYWwiPyJoZWlnaHQiOiJ3aWR0aCIsaT1mPT0idmVydGljYWwiP2cuaGVpZ2h0KCk6Zy53aWR0aCgpO2U9PSJzaG93IiYmZy5jc3MoaCwwKTt2YXIgaj17fTtqW2hdPWU9PSJzaG93Ij9pOjAsZy5hbmltYXRlKGosYi5kdXJhdGlvbixiLm9wdGlvbnMuZWFzaW5nLGZ1bmN0aW9uKCl7ZT09ImhpZGUiJiZjLmhpZGUoKSxhLmVmZmVjdHMucmVzdG9yZShjLGQpLGEuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGMpLGIuY2FsbGJhY2smJmIuY2FsbGJhY2suYXBwbHkoY1swXSxhcmd1bWVudHMpLGMuZGVxdWV1ZSgpfSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuYm91bmNlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlPWEuZWZmZWN0cy5zZXRNb2RlKGMsYi5vcHRpb25zLm1vZGV8fCJlZmZlY3QiKSxmPWIub3B0aW9ucy5kaXJlY3Rpb258fCJ1cCIsZz1iLm9wdGlvbnMuZGlzdGFuY2V8fDIwLGg9Yi5vcHRpb25zLnRpbWVzfHw1LGk9Yi5kdXJhdGlvbnx8MjUwOy9zaG93fGhpZGUvLnRlc3QoZSkmJmQucHVzaCgib3BhY2l0eSIpLGEuZWZmZWN0cy5zYXZlKGMsZCksYy5zaG93KCksYS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYyk7dmFyIGo9Zj09InVwInx8Zj09ImRvd24iPyJ0b3AiOiJsZWZ0IixrPWY9PSJ1cCJ8fGY9PSJsZWZ0Ij8icG9zIjoibmVnIixnPWIub3B0aW9ucy5kaXN0YW5jZXx8KGo9PSJ0b3AiP2Mub3V0ZXJIZWlnaHQoITApLzM6Yy5vdXRlcldpZHRoKCEwKS8zKTtlPT0ic2hvdyImJmMuY3NzKCJvcGFjaXR5IiwwKS5jc3MoaixrPT0icG9zIj8tZzpnKSxlPT0iaGlkZSImJihnPWcvKGgqMikpLGUhPSJoaWRlIiYmaC0tO2lmKGU9PSJzaG93Iil7dmFyIGw9e29wYWNpdHk6MX07bFtqXT0oaz09InBvcyI/Iis9IjoiLT0iKStnLGMuYW5pbWF0ZShsLGkvMixiLm9wdGlvbnMuZWFzaW5nKSxnPWcvMixoLS19Zm9yKHZhciBtPTA7bTxoO20rKyl7dmFyIG49e30scD17fTtuW2pdPShrPT0icG9zIj8iLT0iOiIrPSIpK2cscFtqXT0oaz09InBvcyI/Iis9IjoiLT0iKStnLGMuYW5pbWF0ZShuLGkvMixiLm9wdGlvbnMuZWFzaW5nKS5hbmltYXRlKHAsaS8yLGIub3B0aW9ucy5lYXNpbmcpLGc9ZT09ImhpZGUiP2cqMjpnLzJ9aWYoZT09ImhpZGUiKXt2YXIgbD17b3BhY2l0eTowfTtsW2pdPShrPT0icG9zIj8iLT0iOiIrPSIpK2csYy5hbmltYXRlKGwsaS8yLGIub3B0aW9ucy5lYXNpbmcsZnVuY3Rpb24oKXtjLmhpZGUoKSxhLmVmZmVjdHMucmVzdG9yZShjLGQpLGEuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGMpLGIuY2FsbGJhY2smJmIuY2FsbGJhY2suYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9ZWxzZXt2YXIgbj17fSxwPXt9O25bal09KGs9PSJwb3MiPyItPSI6Iis9IikrZyxwW2pdPShrPT0icG9zIj8iKz0iOiItPSIpK2csYy5hbmltYXRlKG4saS8yLGIub3B0aW9ucy5lYXNpbmcpLmFuaW1hdGUocCxpLzIsYi5vcHRpb25zLmVhc2luZyxmdW5jdGlvbigpe2EuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1jLnF1ZXVlKCJmeCIsZnVuY3Rpb24oKXtjLmRlcXVldWUoKX0pLGMuZGVxdWV1ZSgpfSl9fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS5lZmZlY3RzLmNsaXA9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0sZT1hLmVmZmVjdHMuc2V0TW9kZShjLGIub3B0aW9ucy5tb2RlfHwiaGlkZSIpLGY9Yi5vcHRpb25zLmRpcmVjdGlvbnx8InZlcnRpY2FsIjthLmVmZmVjdHMuc2F2ZShjLGQpLGMuc2hvdygpO3ZhciBnPWEuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGMpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxoPWNbMF0udGFnTmFtZT09IklNRyI/ZzpjLGk9e3NpemU6Zj09InZlcnRpY2FsIj8iaGVpZ2h0Ijoid2lkdGgiLHBvc2l0aW9uOmY9PSJ2ZXJ0aWNhbCI/InRvcCI6ImxlZnQifSxqPWY9PSJ2ZXJ0aWNhbCI/aC5oZWlnaHQoKTpoLndpZHRoKCk7ZT09InNob3ciJiYoaC5jc3MoaS5zaXplLDApLGguY3NzKGkucG9zaXRpb24sai8yKSk7dmFyIGs9e307a1tpLnNpemVdPWU9PSJzaG93Ij9qOjAsa1tpLnBvc2l0aW9uXT1lPT0ic2hvdyI/MDpqLzIsaC5hbmltYXRlKGsse3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseShjWzBdLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9fSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuZHJvcD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwib3BhY2l0eSJdLGU9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImhpZGUiKSxmPWIub3B0aW9ucy5kaXJlY3Rpb258fCJsZWZ0IjthLmVmZmVjdHMuc2F2ZShjLGQpLGMuc2hvdygpLGEuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGMpO3ZhciBnPWY9PSJ1cCJ8fGY9PSJkb3duIj8idG9wIjoibGVmdCIsaD1mPT0idXAifHxmPT0ibGVmdCI/InBvcyI6Im5lZyIsaT1iLm9wdGlvbnMuZGlzdGFuY2V8fChnPT0idG9wIj9jLm91dGVySGVpZ2h0KCEwKS8yOmMub3V0ZXJXaWR0aCghMCkvMik7ZT09InNob3ciJiZjLmNzcygib3BhY2l0eSIsMCkuY3NzKGcsaD09InBvcyI/LWk6aSk7dmFyIGo9e29wYWNpdHk6ZT09InNob3ciPzE6MH07altnXT0oZT09InNob3ciP2g9PSJwb3MiPyIrPSI6Ii09IjpoPT0icG9zIj8iLT0iOiIrPSIpK2ksYy5hbmltYXRlKGose3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseSh0aGlzLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9fSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuZXhwbG9kZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWIub3B0aW9ucy5waWVjZXM/TWF0aC5yb3VuZChNYXRoLnNxcnQoYi5vcHRpb25zLnBpZWNlcykpOjMsZD1iLm9wdGlvbnMucGllY2VzP01hdGgucm91bmQoTWF0aC5zcXJ0KGIub3B0aW9ucy5waWVjZXMpKTozO2Iub3B0aW9ucy5tb2RlPWIub3B0aW9ucy5tb2RlPT0idG9nZ2xlIj9hKHRoaXMpLmlzKCI6dmlzaWJsZSIpPyJoaWRlIjoic2hvdyI6Yi5vcHRpb25zLm1vZGU7dmFyIGU9YSh0aGlzKS5zaG93KCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIiksZj1lLm9mZnNldCgpO2YudG9wLT1wYXJzZUludChlLmNzcygibWFyZ2luVG9wIiksMTApfHwwLGYubGVmdC09cGFyc2VJbnQoZS5jc3MoIm1hcmdpbkxlZnQiKSwxMCl8fDA7dmFyIGc9ZS5vdXRlcldpZHRoKCEwKSxoPWUub3V0ZXJIZWlnaHQoITApO2Zvcih2YXIgaT0wO2k8YztpKyspZm9yKHZhciBqPTA7ajxkO2orKyllLmNsb25lKCkuYXBwZW5kVG8oImJvZHkiKS53cmFwKCI8ZGl2PjwvZGl2PiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJ2aXNpYmxlIixsZWZ0Oi1qKihnL2QpLHRvcDotaSooaC9jKX0pLnBhcmVudCgpLmFkZENsYXNzKCJ1aS1lZmZlY3RzLWV4cGxvZGUiKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsb3ZlcmZsb3c6ImhpZGRlbiIsd2lkdGg6Zy9kLGhlaWdodDpoL2MsbGVmdDpmLmxlZnQraiooZy9kKSsoYi5vcHRpb25zLm1vZGU9PSJzaG93Ij8oai1NYXRoLmZsb29yKGQvMikpKihnL2QpOjApLHRvcDpmLnRvcCtpKihoL2MpKyhiLm9wdGlvbnMubW9kZT09InNob3ciPyhpLU1hdGguZmxvb3IoYy8yKSkqKGgvYyk6MCksb3BhY2l0eTpiLm9wdGlvbnMubW9kZT09InNob3ciPzA6MX0pLmFuaW1hdGUoe2xlZnQ6Zi5sZWZ0K2oqKGcvZCkrKGIub3B0aW9ucy5tb2RlPT0ic2hvdyI/MDooai1NYXRoLmZsb29yKGQvMikpKihnL2QpKSx0b3A6Zi50b3AraSooaC9jKSsoYi5vcHRpb25zLm1vZGU9PSJzaG93Ij8wOihpLU1hdGguZmxvb3IoYy8yKSkqKGgvYykpLG9wYWNpdHk6Yi5vcHRpb25zLm1vZGU9PSJzaG93Ij8xOjB9LGIuZHVyYXRpb258fDUwMCk7c2V0VGltZW91dChmdW5jdGlvbigpe2Iub3B0aW9ucy5tb2RlPT0ic2hvdyI/ZS5jc3Moe3Zpc2liaWxpdHk6InZpc2libGUifSk6ZS5jc3Moe3Zpc2liaWxpdHk6InZpc2libGUifSkuaGlkZSgpLGIuY2FsbGJhY2smJmIuY2FsbGJhY2suYXBwbHkoZVswXSksZS5kZXF1ZXVlKCksYSgiZGl2LnVpLWVmZmVjdHMtZXhwbG9kZSIpLnJlbW92ZSgpfSxiLmR1cmF0aW9ufHw1MDApfSl9fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS5lZmZlY3RzLmZhZGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImhpZGUiKTtjLmFuaW1hdGUoe29wYWNpdHk6ZH0se3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtiLmNhbGxiYWNrJiZiLmNhbGxiYWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjLmRlcXVldWUoKX19KX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EuZWZmZWN0cy5mb2xkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlPWEuZWZmZWN0cy5zZXRNb2RlKGMsYi5vcHRpb25zLm1vZGV8fCJoaWRlIiksZj1iLm9wdGlvbnMuc2l6ZXx8MTUsZz0hIWIub3B0aW9ucy5ob3JpekZpcnN0LGg9Yi5kdXJhdGlvbj9iLmR1cmF0aW9uLzI6YS5meC5zcGVlZHMuX2RlZmF1bHQvMjthLmVmZmVjdHMuc2F2ZShjLGQpLGMuc2hvdygpO3ZhciBpPWEuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGMpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxqPWU9PSJzaG93IiE9ZyxrPWo/WyJ3aWR0aCIsImhlaWdodCJdOlsiaGVpZ2h0Iiwid2lkdGgiXSxsPWo/W2kud2lkdGgoKSxpLmhlaWdodCgpXTpbaS5oZWlnaHQoKSxpLndpZHRoKCldLG09LyhbMC05XSspJS8uZXhlYyhmKTttJiYoZj1wYXJzZUludChtWzFdLDEwKS8xMDAqbFtlPT0iaGlkZSI/MDoxXSksZT09InNob3ciJiZpLmNzcyhnP3toZWlnaHQ6MCx3aWR0aDpmfTp7aGVpZ2h0OmYsd2lkdGg6MH0pO3ZhciBuPXt9LHA9e307bltrWzBdXT1lPT0ic2hvdyI/bFswXTpmLHBba1sxXV09ZT09InNob3ciP2xbMV06MCxpLmFuaW1hdGUobixoLGIub3B0aW9ucy5lYXNpbmcpLmFuaW1hdGUocCxoLGIub3B0aW9ucy5lYXNpbmcsZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseShjWzBdLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9KX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EuZWZmZWN0cy5oaWdobGlnaHQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kQ29sb3IiLCJvcGFjaXR5Il0sZT1hLmVmZmVjdHMuc2V0TW9kZShjLGIub3B0aW9ucy5tb2RlfHwic2hvdyIpLGY9e2JhY2tncm91bmRDb2xvcjpjLmNzcygiYmFja2dyb3VuZENvbG9yIil9O2U9PSJoaWRlIiYmKGYub3BhY2l0eT0wKSxhLmVmZmVjdHMuc2F2ZShjLGQpLGMuc2hvdygpLmNzcyh7YmFja2dyb3VuZEltYWdlOiJub25lIixiYWNrZ3JvdW5kQ29sb3I6Yi5vcHRpb25zLmNvbG9yfHwiI2ZmZmY5OSJ9KS5hbmltYXRlKGYse3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksZT09InNob3ciJiYhYS5zdXBwb3J0Lm9wYWNpdHkmJnRoaXMuc3R5bGUucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSxiLmNhbGxiYWNrJiZiLmNhbGxiYWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjLmRlcXVldWUoKX19KX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EuZWZmZWN0cy5wdWxzYXRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWEuZWZmZWN0cy5zZXRNb2RlKGMsYi5vcHRpb25zLm1vZGV8fCJzaG93IiksZT0oYi5vcHRpb25zLnRpbWVzfHw1KSoyLTEsZj1iLmR1cmF0aW9uP2IuZHVyYXRpb24vMjphLmZ4LnNwZWVkcy5fZGVmYXVsdC8yLGc9Yy5pcygiOnZpc2libGUiKSxoPTA7Z3x8KGMuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCksaD0xKSwoZD09ImhpZGUiJiZnfHxkPT0ic2hvdyImJiFnKSYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspYy5hbmltYXRlKHtvcGFjaXR5Omh9LGYsYi5vcHRpb25zLmVhc2luZyksaD0oaCsxKSUyO2MuYW5pbWF0ZSh7b3BhY2l0eTpofSxmLGIub3B0aW9ucy5lYXNpbmcsZnVuY3Rpb24oKXtoPT0wJiZjLmhpZGUoKSxiLmNhbGxiYWNrJiZiLmNhbGxiYWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGMucXVldWUoImZ4IixmdW5jdGlvbigpe2MuZGVxdWV1ZSgpfSkuZGVxdWV1ZSgpfSl9fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS5lZmZlY3RzLnB1ZmY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImhpZGUiKSxlPXBhcnNlSW50KGIub3B0aW9ucy5wZXJjZW50LDEwKXx8MTUwLGY9ZS8xMDAsZz17aGVpZ2h0OmMuaGVpZ2h0KCksd2lkdGg6Yy53aWR0aCgpfTthLmV4dGVuZChiLm9wdGlvbnMse2ZhZGU6ITAsbW9kZTpkLHBlcmNlbnQ6ZD09ImhpZGUiP2U6MTAwLGZyb206ZD09ImhpZGUiP2c6e2hlaWdodDpnLmhlaWdodCpmLHdpZHRoOmcud2lkdGgqZn19KSxjLmVmZmVjdCgic2NhbGUiLGIub3B0aW9ucyxiLmR1cmF0aW9uLGIuY2FsbGJhY2spLGMuZGVxdWV1ZSgpfSl9LGEuZWZmZWN0cy5zY2FsZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1hLmV4dGVuZCghMCx7fSxiLm9wdGlvbnMpLGU9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImVmZmVjdCIpLGY9cGFyc2VJbnQoYi5vcHRpb25zLnBlcmNlbnQsMTApfHwocGFyc2VJbnQoYi5vcHRpb25zLnBlcmNlbnQsMTApPT0wPzA6ZT09ImhpZGUiPzA6MTAwKSxnPWIub3B0aW9ucy5kaXJlY3Rpb258fCJib3RoIixoPWIub3B0aW9ucy5vcmlnaW47ZSE9ImVmZmVjdCImJihkLm9yaWdpbj1ofHxbIm1pZGRsZSIsImNlbnRlciJdLGQucmVzdG9yZT0hMCk7dmFyIGk9e2hlaWdodDpjLmhlaWdodCgpLHdpZHRoOmMud2lkdGgoKX07Yy5mcm9tPWIub3B0aW9ucy5mcm9tfHwoZT09InNob3ciP3toZWlnaHQ6MCx3aWR0aDowfTppKTt2YXIgaj17eTpnIT0iaG9yaXpvbnRhbCI/Zi8xMDA6MSx4OmchPSJ2ZXJ0aWNhbCI/Zi8xMDA6MX07Yy50bz17aGVpZ2h0OmkuaGVpZ2h0KmoueSx3aWR0aDppLndpZHRoKmoueH0sYi5vcHRpb25zLmZhZGUmJihlPT0ic2hvdyImJihjLmZyb20ub3BhY2l0eT0wLGMudG8ub3BhY2l0eT0xKSxlPT0iaGlkZSImJihjLmZyb20ub3BhY2l0eT0xLGMudG8ub3BhY2l0eT0wKSksZC5mcm9tPWMuZnJvbSxkLnRvPWMudG8sZC5tb2RlPWUsYy5lZmZlY3QoInNpemUiLGQsYi5kdXJhdGlvbixiLmNhbGxiYWNrKSxjLmRlcXVldWUoKX0pfSxhLmVmZmVjdHMuc2l6ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxlPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxmPVsid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyJdLGc9WyJmb250U2l6ZSJdLGg9WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxpPVsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Il0saj1hLmVmZmVjdHMuc2V0TW9kZShjLGIub3B0aW9ucy5tb2RlfHwiZWZmZWN0Iiksaz1iLm9wdGlvbnMucmVzdG9yZXx8ITEsbD1iLm9wdGlvbnMuc2NhbGV8fCJib3RoIixtPWIub3B0aW9ucy5vcmlnaW4sbj17aGVpZ2h0OmMuaGVpZ2h0KCksd2lkdGg6Yy53aWR0aCgpfTtjLmZyb209Yi5vcHRpb25zLmZyb218fG4sYy50bz1iLm9wdGlvbnMudG98fG47aWYobSl7dmFyIHA9YS5lZmZlY3RzLmdldEJhc2VsaW5lKG0sbik7Yy5mcm9tLnRvcD0obi5oZWlnaHQtYy5mcm9tLmhlaWdodCkqcC55LGMuZnJvbS5sZWZ0PShuLndpZHRoLWMuZnJvbS53aWR0aCkqcC54LGMudG8udG9wPShuLmhlaWdodC1jLnRvLmhlaWdodCkqcC55LGMudG8ubGVmdD0obi53aWR0aC1jLnRvLndpZHRoKSpwLnh9dmFyIHE9e2Zyb206e3k6Yy5mcm9tLmhlaWdodC9uLmhlaWdodCx4OmMuZnJvbS53aWR0aC9uLndpZHRofSx0bzp7eTpjLnRvLmhlaWdodC9uLmhlaWdodCx4OmMudG8ud2lkdGgvbi53aWR0aH19O2lmKGw9PSJib3gifHxsPT0iYm90aCIpcS5mcm9tLnkhPXEudG8ueSYmKGQ9ZC5jb25jYXQoaCksYy5mcm9tPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsaCxxLmZyb20ueSxjLmZyb20pLGMudG89YS5lZmZlY3RzLnNldFRyYW5zaXRpb24oYyxoLHEudG8ueSxjLnRvKSkscS5mcm9tLnghPXEudG8ueCYmKGQ9ZC5jb25jYXQoaSksYy5mcm9tPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsaSxxLmZyb20ueCxjLmZyb20pLGMudG89YS5lZmZlY3RzLnNldFRyYW5zaXRpb24oYyxpLHEudG8ueCxjLnRvKSk7KGw9PSJjb250ZW50Inx8bD09ImJvdGgiKSYmcS5mcm9tLnkhPXEudG8ueSYmKGQ9ZC5jb25jYXQoZyksYy5mcm9tPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsZyxxLmZyb20ueSxjLmZyb20pLGMudG89YS5lZmZlY3RzLnNldFRyYW5zaXRpb24oYyxnLHEudG8ueSxjLnRvKSksYS5lZmZlY3RzLnNhdmUoYyxrP2Q6ZSksYy5zaG93KCksYS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYyksYy5jc3MoIm92ZXJmbG93IiwiaGlkZGVuIikuY3NzKGMuZnJvbSk7aWYobD09ImNvbnRlbnQifHxsPT0iYm90aCIpaD1oLmNvbmNhdChbIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSJdKS5jb25jYXQoZyksaT1pLmNvbmNhdChbIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCJdKSxmPWQuY29uY2F0KGgpLmNvbmNhdChpKSxjLmZpbmQoIipbd2lkdGhdIikuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyk7ayYmYS5lZmZlY3RzLnNhdmUoYyxmKTt2YXIgZD17aGVpZ2h0OmMuaGVpZ2h0KCksd2lkdGg6Yy53aWR0aCgpfTtjLmZyb209e2hlaWdodDpkLmhlaWdodCpxLmZyb20ueSx3aWR0aDpkLndpZHRoKnEuZnJvbS54fSxjLnRvPXtoZWlnaHQ6ZC5oZWlnaHQqcS50by55LHdpZHRoOmQud2lkdGgqcS50by54fSxxLmZyb20ueSE9cS50by55JiYoYy5mcm9tPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsaCxxLmZyb20ueSxjLmZyb20pLGMudG89YS5lZmZlY3RzLnNldFRyYW5zaXRpb24oYyxoLHEudG8ueSxjLnRvKSkscS5mcm9tLnghPXEudG8ueCYmKGMuZnJvbT1hLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihjLGkscS5mcm9tLngsYy5mcm9tKSxjLnRvPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsaSxxLnRvLngsYy50bykpLGMuY3NzKGMuZnJvbSksYy5hbmltYXRlKGMudG8sYi5kdXJhdGlvbixiLm9wdGlvbnMuZWFzaW5nLGZ1bmN0aW9uKCl7ayYmYS5lZmZlY3RzLnJlc3RvcmUoYyxmKX0pfSk7Yy5hbmltYXRlKGMudG8se3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtjLnRvLm9wYWNpdHk9PT0wJiZjLmNzcygib3BhY2l0eSIsYy5mcm9tLm9wYWNpdHkpLGo9PSJoaWRlIiYmYy5oaWRlKCksYS5lZmZlY3RzLnJlc3RvcmUoYyxrP2Q6ZSksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseSh0aGlzLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9fSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuc2hha2U9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLGU9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImVmZmVjdCIpLGY9Yi5vcHRpb25zLmRpcmVjdGlvbnx8ImxlZnQiLGc9Yi5vcHRpb25zLmRpc3RhbmNlfHwyMCxoPWIub3B0aW9ucy50aW1lc3x8MyxpPWIuZHVyYXRpb258fGIub3B0aW9ucy5kdXJhdGlvbnx8MTQwO2EuZWZmZWN0cy5zYXZlKGMsZCksYy5zaG93KCksYS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYyk7dmFyIGo9Zj09InVwInx8Zj09ImRvd24iPyJ0b3AiOiJsZWZ0IixrPWY9PSJ1cCJ8fGY9PSJsZWZ0Ij8icG9zIjoibmVnIixsPXt9LG09e30sbj17fTtsW2pdPShrPT0icG9zIj8iLT0iOiIrPSIpK2csbVtqXT0oaz09InBvcyI/Iis9IjoiLT0iKStnKjIsbltqXT0oaz09InBvcyI/Ii09IjoiKz0iKStnKjIsYy5hbmltYXRlKGwsaSxiLm9wdGlvbnMuZWFzaW5nKTtmb3IodmFyIHA9MTtwPGg7cCsrKWMuYW5pbWF0ZShtLGksYi5vcHRpb25zLmVhc2luZykuYW5pbWF0ZShuLGksYi5vcHRpb25zLmVhc2luZyk7Yy5hbmltYXRlKG0saSxiLm9wdGlvbnMuZWFzaW5nKS5hbmltYXRlKGwsaS8yLGIub3B0aW9ucy5lYXNpbmcsZnVuY3Rpb24oKXthLmVmZmVjdHMucmVzdG9yZShjLGQpLGEuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGMpLGIuY2FsbGJhY2smJmIuY2FsbGJhY2suYXBwbHkodGhpcyxhcmd1bWVudHMpfSksYy5xdWV1ZSgiZngiLGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKCl9KSxjLmRlcXVldWUoKX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EuZWZmZWN0cy5zbGlkZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0sZT1hLmVmZmVjdHMuc2V0TW9kZShjLGIub3B0aW9ucy5tb2RlfHwic2hvdyIpLGY9Yi5vcHRpb25zLmRpcmVjdGlvbnx8ImxlZnQiO2EuZWZmZWN0cy5zYXZlKGMsZCksYy5zaG93KCksYS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYykuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pO3ZhciBnPWY9PSJ1cCJ8fGY9PSJkb3duIj8idG9wIjoibGVmdCIsaD1mPT0idXAifHxmPT0ibGVmdCI/InBvcyI6Im5lZyIsaT1iLm9wdGlvbnMuZGlzdGFuY2V8fChnPT0idG9wIj9jLm91dGVySGVpZ2h0KCEwKTpjLm91dGVyV2lkdGgoITApKTtlPT0ic2hvdyImJmMuY3NzKGcsaD09InBvcyI/aXNOYU4oaSk/Ii0iK2k6LWk6aSk7dmFyIGo9e307altnXT0oZT09InNob3ciP2g9PSJwb3MiPyIrPSI6Ii09IjpoPT0icG9zIj8iLT0iOiIrPSIpK2ksYy5hbmltYXRlKGose3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseSh0aGlzLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9fSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMudHJhbnNmZXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9YShiLm9wdGlvbnMudG8pLGU9ZC5vZmZzZXQoKSxmPXt0b3A6ZS50b3AsbGVmdDplLmxlZnQsaGVpZ2h0OmQuaW5uZXJIZWlnaHQoKSx3aWR0aDpkLmlubmVyV2lkdGgoKX0sZz1jLm9mZnNldCgpLGg9YSgnPGRpdiBjbGFzcz0idWktZWZmZWN0cy10cmFuc2ZlciI+PC9kaXY+JykuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoYi5vcHRpb25zLmNsYXNzTmFtZSkuY3NzKHt0b3A6Zy50b3AsbGVmdDpnLmxlZnQsaGVpZ2h0OmMuaW5uZXJIZWlnaHQoKSx3aWR0aDpjLmlubmVyV2lkdGgoKSxwb3NpdGlvbjoiYWJzb2x1dGUifSkuYW5pbWF0ZShmLGIuZHVyYXRpb24sYi5vcHRpb25zLmVhc2luZyxmdW5jdGlvbigpe2gucmVtb3ZlKCksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseShjWzBdLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9KX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2Eud2lkZ2V0KCJ1aS5hY2NvcmRpb24iLHtvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlZDoic2xpZGUiLGF1dG9IZWlnaHQ6ITAsY2xlYXJTdHlsZTohMSxjb2xsYXBzaWJsZTohMSxldmVudDoiY2xpY2siLGZpbGxTcGFjZTohMSxoZWFkZXI6Ij4gbGkgPiA6Zmlyc3QtY2hpbGQsPiA6bm90KGxpKTpldmVuIixpY29uczp7aGVhZGVyOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsaGVhZGVyU2VsZWN0ZWQ6InVpLWljb24tdHJpYW5nbGUtMS1zIn0sbmF2aWdhdGlvbjohMSxuYXZpZ2F0aW9uRmlsdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHJlZi50b0xvd2VyQ2FzZSgpPT09bG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYz1iLm9wdGlvbnM7Yi5ydW5uaW5nPTAsYi5lbGVtZW50LmFkZENsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLmNoaWxkcmVuKCJsaSIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tbGktZml4IiksYi5oZWFkZXJzPWIuZWxlbWVudC5maW5kKGMuaGVhZGVyKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1oZWxwZXItcmVzZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIikuYmluZCgibW91c2VlbnRlci5hY2NvcmRpb24iLGZ1bmN0aW9uKCl7aWYoYy5kaXNhYmxlZClyZXR1cm47YSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKX0pLmJpbmQoIm1vdXNlbGVhdmUuYWNjb3JkaW9uIixmdW5jdGlvbigpe2lmKGMuZGlzYWJsZWQpcmV0dXJuO2EodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9KS5iaW5kKCJmb2N1cy5hY2NvcmRpb24iLGZ1bmN0aW9uKCl7aWYoYy5kaXNhYmxlZClyZXR1cm47YSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKX0pLmJpbmQoImJsdXIuYWNjb3JkaW9uIixmdW5jdGlvbigpe2lmKGMuZGlzYWJsZWQpcmV0dXJuO2EodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9KSxiLmhlYWRlcnMubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudCB1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpO2lmKGMubmF2aWdhdGlvbil7dmFyIGQ9Yi5lbGVtZW50LmZpbmQoImEiKS5maWx0ZXIoYy5uYXZpZ2F0aW9uRmlsdGVyKS5lcSgwKTtpZihkLmxlbmd0aCl7dmFyIGU9ZC5jbG9zZXN0KCIudWktYWNjb3JkaW9uLWhlYWRlciIpO2UubGVuZ3RoP2IuYWN0aXZlPWU6Yi5hY3RpdmU9ZC5jbG9zZXN0KCIudWktYWNjb3JkaW9uLWNvbnRlbnQiKS5wcmV2KCl9fWIuYWN0aXZlPWIuX2ZpbmRBY3RpdmUoYi5hY3RpdmV8fGMuYWN0aXZlKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1zdGF0ZS1hY3RpdmUiKS50b2dnbGVDbGFzcygidWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS1jb3JuZXItdG9wIiksYi5hY3RpdmUubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKSxiLl9jcmVhdGVJY29ucygpLGIucmVzaXplKCksYi5lbGVtZW50LmF0dHIoInJvbGUiLCJ0YWJsaXN0IiksYi5oZWFkZXJzLmF0dHIoInJvbGUiLCJ0YWIiKS5iaW5kKCJrZXlkb3duLmFjY29yZGlvbiIsZnVuY3Rpb24oYSl7cmV0dXJuIGIuX2tleWRvd24oYSl9KS5uZXh0KCkuYXR0cigicm9sZSIsInRhYnBhbmVsIiksYi5oZWFkZXJzLm5vdChiLmFjdGl2ZXx8IiIpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmhpZGUoKSxiLmFjdGl2ZS5sZW5ndGg/Yi5hY3RpdmUuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1zZWxlY3RlZCI6InRydWUiLHRhYkluZGV4OjB9KTpiLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLGEuYnJvd3Nlci5zYWZhcml8fGIuaGVhZGVycy5maW5kKCJhIikuYXR0cigidGFiSW5kZXgiLC0xKSxjLmV2ZW50JiZiLmhlYWRlcnMuYmluZChjLmV2ZW50LnNwbGl0KCIgIikuam9pbigiLmFjY29yZGlvbiAiKSsiLmFjY29yZGlvbiIsZnVuY3Rpb24oYSl7Yi5fY2xpY2tIYW5kbGVyLmNhbGwoYixhLHRoaXMpLGEucHJldmVudERlZmF1bHQoKX0pfSxfY3JlYXRlSWNvbnM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm9wdGlvbnM7Yi5pY29ucyYmKGEoIjxzcGFuPjwvc3Bhbj4iKS5hZGRDbGFzcygidWktaWNvbiAiK2IuaWNvbnMuaGVhZGVyKS5wcmVwZW5kVG8odGhpcy5oZWFkZXJzKSx0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLWljb24iKS50b2dnbGVDbGFzcyhiLmljb25zLmhlYWRlcikudG9nZ2xlQ2xhc3MoYi5pY29ucy5oZWFkZXJTZWxlY3RlZCksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKSl9LF9kZXN0cm95SWNvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlcnMuY2hpbGRyZW4oIi51aS1pY29uIikucmVtb3ZlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuaGVhZGVycy51bmJpbmQoIi5hY2NvcmRpb24iKS5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24tZGlzYWJsZWQgdWktaGVscGVyLXJlc2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1hY3RpdmUgdWktc3RhdGUtZGlzYWJsZWQgdWktY29ybmVyLXRvcCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1zZWxlY3RlZCIpLnJlbW92ZUF0dHIoInRhYkluZGV4IiksdGhpcy5oZWFkZXJzLmZpbmQoImEiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLHRoaXMuX2Rlc3Ryb3lJY29ucygpO3ZhciBjPXRoaXMuaGVhZGVycy5uZXh0KCkuY3NzKCJkaXNwbGF5IiwiIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSB1aS1hY2NvcmRpb24tY29udGVudCB1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUgdWktYWNjb3JkaW9uLWRpc2FibGVkIHVpLXN0YXRlLWRpc2FibGVkIik7cmV0dXJuKGIuYXV0b0hlaWdodHx8Yi5maWxsSGVpZ2h0KSYmYy5jc3MoImhlaWdodCIsIiIpLGEuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24oYixjKXthLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksYj09ImFjdGl2ZSImJnRoaXMuYWN0aXZhdGUoYyksYj09Imljb25zIiYmKHRoaXMuX2Rlc3Ryb3lJY29ucygpLGMmJnRoaXMuX2NyZWF0ZUljb25zKCkpLGI9PSJkaXNhYmxlZCImJnRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSlbYz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJ1aS1hY2NvcmRpb24tZGlzYWJsZWQgdWktc3RhdGUtZGlzYWJsZWQiKX0sX2tleWRvd246ZnVuY3Rpb24oYil7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkfHxiLmFsdEtleXx8Yi5jdHJsS2V5KXJldHVybjt2YXIgYz1hLnVpLmtleUNvZGUsZD10aGlzLmhlYWRlcnMubGVuZ3RoLGU9dGhpcy5oZWFkZXJzLmluZGV4KGIudGFyZ2V0KSxmPSExO3N3aXRjaChiLmtleUNvZGUpe2Nhc2UgYy5SSUdIVDpjYXNlIGMuRE9XTjpmPXRoaXMuaGVhZGVyc1soZSsxKSVkXTticmVhaztjYXNlIGMuTEVGVDpjYXNlIGMuVVA6Zj10aGlzLmhlYWRlcnNbKGUtMStkKSVkXTticmVhaztjYXNlIGMuU1BBQ0U6Y2FzZSBjLkVOVEVSOnRoaXMuX2NsaWNrSGFuZGxlcih7dGFyZ2V0OmIudGFyZ2V0fSxiLnRhcmdldCksYi5wcmV2ZW50RGVmYXVsdCgpfXJldHVybiBmPyhhKGIudGFyZ2V0KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGEoZikuYXR0cigidGFiSW5kZXgiLDApLGYuZm9jdXMoKSwhMSk6ITB9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucyxjO2lmKGIuZmlsbFNwYWNlKXtpZihhLmJyb3dzZXIubXNpZSl7dmFyIGQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmNzcygib3ZlcmZsb3ciKTt0aGlzLmVsZW1lbnQucGFyZW50KCkuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpfWM9dGhpcy5lbGVtZW50LnBhcmVudCgpLmhlaWdodCgpLGEuYnJvd3Nlci5tc2llJiZ0aGlzLmVsZW1lbnQucGFyZW50KCkuY3NzKCJvdmVyZmxvdyIsZCksdGhpcy5oZWFkZXJzLmVhY2goZnVuY3Rpb24oKXtjLT1hKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe2EodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsYy1hKHRoaXMpLmlubmVySGVpZ2h0KCkrYSh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKCJvdmVyZmxvdyIsImF1dG8iKX1lbHNlIGIuYXV0b0hlaWdodCYmKGM9MCx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtjPU1hdGgubWF4KGMsYSh0aGlzKS5oZWlnaHQoIiIpLmhlaWdodCgpKX0pLmhlaWdodChjKSk7cmV0dXJuIHRoaXN9LGFjdGl2YXRlOmZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucy5hY3RpdmU9YTt2YXIgYj10aGlzLl9maW5kQWN0aXZlKGEpWzBdO3JldHVybiB0aGlzLl9jbGlja0hhbmRsZXIoe3RhcmdldDpifSxiKSx0aGlzfSxfZmluZEFjdGl2ZTpmdW5jdGlvbihiKXtyZXR1cm4gYj90eXBlb2YgYj09Im51bWJlciI/dGhpcy5oZWFkZXJzLmZpbHRlcigiOmVxKCIrYisiKSIpOnRoaXMuaGVhZGVycy5ub3QodGhpcy5oZWFkZXJzLm5vdChiKSk6Yj09PSExP2EoW10pOnRoaXMuaGVhZGVycy5maWx0ZXIoIjplcSgwKSIpfSxfY2xpY2tIYW5kbGVyOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5vcHRpb25zO2lmKGQuZGlzYWJsZWQpcmV0dXJuO2lmKCFiLnRhcmdldCl7aWYoIWQuY29sbGFwc2libGUpcmV0dXJuO3RoaXMuYWN0aXZlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUgdWktY29ybmVyLXRvcCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKS5jaGlsZHJlbigiLnVpLWljb24iKS5yZW1vdmVDbGFzcyhkLmljb25zLmhlYWRlclNlbGVjdGVkKS5hZGRDbGFzcyhkLmljb25zLmhlYWRlciksdGhpcy5hY3RpdmUubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKTt2YXIgZT10aGlzLmFjdGl2ZS5uZXh0KCksZj17b3B0aW9uczpkLG5ld0hlYWRlcjphKFtdKSxvbGRIZWFkZXI6ZC5hY3RpdmUsbmV3Q29udGVudDphKFtdKSxvbGRDb250ZW50OmV9LGc9dGhpcy5hY3RpdmU9YShbXSk7dGhpcy5fdG9nZ2xlKGcsZSxmKTtyZXR1cm59dmFyIGg9YShiLmN1cnJlbnRUYXJnZXR8fGMpLGk9aFswXT09PXRoaXMuYWN0aXZlWzBdO2QuYWN0aXZlPWQuY29sbGFwc2libGUmJmk/ITE6dGhpcy5oZWFkZXJzLmluZGV4KGgpO2lmKHRoaXMucnVubmluZ3x8IWQuY29sbGFwc2libGUmJmkpcmV0dXJuO3ZhciBqPXRoaXMuYWN0aXZlLGc9aC5uZXh0KCksZT10aGlzLmFjdGl2ZS5uZXh0KCksZj17b3B0aW9uczpkLG5ld0hlYWRlcjppJiZkLmNvbGxhcHNpYmxlP2EoW10pOmgsb2xkSGVhZGVyOnRoaXMuYWN0aXZlLG5ld0NvbnRlbnQ6aSYmZC5jb2xsYXBzaWJsZT9hKFtdKTpnLG9sZENvbnRlbnQ6ZX0saz10aGlzLmhlYWRlcnMuaW5kZXgodGhpcy5hY3RpdmVbMF0pPnRoaXMuaGVhZGVycy5pbmRleChoWzBdKTt0aGlzLmFjdGl2ZT1pP2EoW10pOmgsdGhpcy5fdG9nZ2xlKGcsZSxmLGksayksai5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIikuY2hpbGRyZW4oIi51aS1pY29uIikucmVtb3ZlQ2xhc3MoZC5pY29ucy5oZWFkZXJTZWxlY3RlZCkuYWRkQ2xhc3MoZC5pY29ucy5oZWFkZXIpLGl8fChoLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKS5jaGlsZHJlbigiLnVpLWljb24iKS5yZW1vdmVDbGFzcyhkLmljb25zLmhlYWRlcikuYWRkQ2xhc3MoZC5pY29ucy5oZWFkZXJTZWxlY3RlZCksaC5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpKTtyZXR1cm59LF90b2dnbGU6ZnVuY3Rpb24oYixjLGQsZSxmKXt2YXIgZz10aGlzLGg9Zy5vcHRpb25zO2cudG9TaG93PWIsZy50b0hpZGU9YyxnLmRhdGE9ZDt2YXIgaT1mdW5jdGlvbigpe2lmKCFnKXJldHVybjtyZXR1cm4gZy5fY29tcGxldGVkLmFwcGx5KGcsYXJndW1lbnRzKX07Zy5fdHJpZ2dlcigiY2hhbmdlc3RhcnQiLG51bGwsZy5kYXRhKSxnLnJ1bm5pbmc9Yy5zaXplKCk9PT0wP2Iuc2l6ZSgpOmMuc2l6ZSgpO2lmKGguYW5pbWF0ZWQpe3ZhciBqPXt9O2guY29sbGFwc2libGUmJmU/aj17dG9TaG93OmEoW10pLHRvSGlkZTpjLGNvbXBsZXRlOmksZG93bjpmLGF1dG9IZWlnaHQ6aC5hdXRvSGVpZ2h0fHxoLmZpbGxTcGFjZX06aj17dG9TaG93OmIsdG9IaWRlOmMsY29tcGxldGU6aSxkb3duOmYsYXV0b0hlaWdodDpoLmF1dG9IZWlnaHR8fGguZmlsbFNwYWNlfSxoLnByb3hpZWR8fChoLnByb3hpZWQ9aC5hbmltYXRlZCksaC5wcm94aWVkRHVyYXRpb258fChoLnByb3hpZWREdXJhdGlvbj1oLmR1cmF0aW9uKSxoLmFuaW1hdGVkPWEuaXNGdW5jdGlvbihoLnByb3hpZWQpP2gucHJveGllZChqKTpoLnByb3hpZWQsaC5kdXJhdGlvbj1hLmlzRnVuY3Rpb24oaC5wcm94aWVkRHVyYXRpb24pP2gucHJveGllZER1cmF0aW9uKGopOmgucHJveGllZER1cmF0aW9uO3ZhciBrPWEudWkuYWNjb3JkaW9uLmFuaW1hdGlvbnMsbD1oLmR1cmF0aW9uLG09aC5hbmltYXRlZDttJiYha1ttXSYmIWEuZWFzaW5nW21dJiYobT0ic2xpZGUiKSxrW21dfHwoa1ttXT1mdW5jdGlvbihhKXt0aGlzLnNsaWRlKGEse2Vhc2luZzptLGR1cmF0aW9uOmx8fDcwMH0pfSksa1ttXShqKX1lbHNlIGguY29sbGFwc2libGUmJmU/Yi50b2dnbGUoKTooYy5oaWRlKCksYi5zaG93KCkpLGkoITApO2MucHJldigpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkuYmx1cigpLGIucHJldigpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSkuZm9jdXMoKX0sX2NvbXBsZXRlZDpmdW5jdGlvbihhKXt0aGlzLnJ1bm5pbmc9YT8wOi0tdGhpcy5ydW5uaW5nO2lmKHRoaXMucnVubmluZylyZXR1cm47dGhpcy5vcHRpb25zLmNsZWFyU3R5bGUmJnRoaXMudG9TaG93LmFkZCh0aGlzLnRvSGlkZSkuY3NzKHtoZWlnaHQ6IiIsb3ZlcmZsb3c6IiJ9KSx0aGlzLnRvSGlkZS5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIiksdGhpcy50b0hpZGUubGVuZ3RoJiYodGhpcy50b0hpZGUucGFyZW50KClbMF0uY2xhc3NOYW1lPXRoaXMudG9IaWRlLnBhcmVudCgpWzBdLmNsYXNzTmFtZSksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixudWxsLHRoaXMuZGF0YSl9fSksYS5leHRlbmQoYS51aS5hY2NvcmRpb24se3ZlcnNpb246IjEuOC4yNCIsYW5pbWF0aW9uczp7c2xpZGU6ZnVuY3Rpb24oYixjKXtiPWEuZXh0ZW5kKHtlYXNpbmc6InN3aW5nIixkdXJhdGlvbjozMDB9LGIsYyk7aWYoIWIudG9IaWRlLnNpemUoKSl7Yi50b1Nob3cuYW5pbWF0ZSh7aGVpZ2h0OiJzaG93IixwYWRkaW5nVG9wOiJzaG93IixwYWRkaW5nQm90dG9tOiJzaG93In0sYik7cmV0dXJufWlmKCFiLnRvU2hvdy5zaXplKCkpe2IudG9IaWRlLmFuaW1hdGUoe2hlaWdodDoiaGlkZSIscGFkZGluZ1RvcDoiaGlkZSIscGFkZGluZ0JvdHRvbToiaGlkZSJ9LGIpO3JldHVybn12YXIgZD1iLnRvU2hvdy5jc3MoIm92ZXJmbG93IiksZT0wLGY9e30sZz17fSxoPVsiaGVpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxpLGo9Yi50b1Nob3c7aT1qWzBdLnN0eWxlLndpZHRoLGoud2lkdGgoai5wYXJlbnQoKS53aWR0aCgpLXBhcnNlRmxvYXQoai5jc3MoInBhZGRpbmdMZWZ0IikpLXBhcnNlRmxvYXQoai5jc3MoInBhZGRpbmdSaWdodCIpKS0ocGFyc2VGbG9hdChqLmNzcygiYm9yZGVyTGVmdFdpZHRoIikpfHwwKS0ocGFyc2VGbG9hdChqLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpKXx8MCkpLGEuZWFjaChoLGZ1bmN0aW9uKGMsZCl7Z1tkXT0iaGlkZSI7dmFyIGU9KCIiK2EuY3NzKGIudG9TaG93WzBdLGQpKS5tYXRjaCgvXihbXGQrLS5dKykoLiopJC8pO2ZbZF09e3ZhbHVlOmVbMV0sdW5pdDplWzJdfHwicHgifX0pLGIudG9TaG93LmNzcyh7aGVpZ2h0OjAsb3ZlcmZsb3c6ImhpZGRlbiJ9KS5zaG93KCksYi50b0hpZGUuZmlsdGVyKCI6aGlkZGVuIikuZWFjaChiLmNvbXBsZXRlKS5lbmQoKS5maWx0ZXIoIjp2aXNpYmxlIikuYW5pbWF0ZShnLHtzdGVwOmZ1bmN0aW9uKGEsYyl7Yy5wcm9wPT0iaGVpZ2h0IiYmKGU9Yy5lbmQtYy5zdGFydD09PTA/MDooYy5ub3ctYy5zdGFydCkvKGMuZW5kLWMuc3RhcnQpKSxiLnRvU2hvd1swXS5zdHlsZVtjLnByb3BdPWUqZltjLnByb3BdLnZhbHVlK2ZbYy5wcm9wXS51bml0fSxkdXJhdGlvbjpiLmR1cmF0aW9uLGVhc2luZzpiLmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe2IuYXV0b0hlaWdodHx8Yi50b1Nob3cuY3NzKCJoZWlnaHQiLCIiKSxiLnRvU2hvdy5jc3Moe3dpZHRoOmksb3ZlcmZsb3c6ZH0pLGIuY29tcGxldGUoKX19KX0sYm91bmNlc2xpZGU6ZnVuY3Rpb24oYSl7dGhpcy5zbGlkZShhLHtlYXNpbmc6YS5kb3duPyJlYXNlT3V0Qm91bmNlIjoic3dpbmciLGR1cmF0aW9uOmEuZG93bj8xZTM6MjAwfSl9fX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGM9MDthLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIix7b3B0aW9uczp7YXBwZW5kVG86ImJvZHkiLGF1dG9Gb2N1czohMSxkZWxheTozMDAsbWluTGVuZ3RoOjEscG9zaXRpb246e215OiJsZWZ0IHRvcCIsYXQ6ImxlZnQgYm90dG9tIixjb2xsaXNpb246Im5vbmUifSxzb3VyY2U6bnVsbH0scGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9dGhpcy5lbGVtZW50WzBdLm93bmVyRG9jdW1lbnQsZDt0aGlzLmlzTXVsdGlMaW5lPXRoaXMuZWxlbWVudC5pcygidGV4dGFyZWEiKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpLmF0dHIoe3JvbGU6InRleHRib3giLCJhcmlhLWF1dG9jb21wbGV0ZSI6Imxpc3QiLCJhcmlhLWhhc3BvcHVwIjoidHJ1ZSJ9KS5iaW5kKCJrZXlkb3duLmF1dG9jb21wbGV0ZSIsZnVuY3Rpb24oYyl7aWYoYi5vcHRpb25zLmRpc2FibGVkfHxiLmVsZW1lbnQucHJvcEF0dHIoInJlYWRPbmx5IikpcmV0dXJuO2Q9ITE7dmFyIGU9YS51aS5rZXlDb2RlO3N3aXRjaChjLmtleUNvZGUpe2Nhc2UgZS5QQUdFX1VQOmIuX21vdmUoInByZXZpb3VzUGFnZSIsYyk7YnJlYWs7Y2FzZSBlLlBBR0VfRE9XTjpiLl9tb3ZlKCJuZXh0UGFnZSIsYyk7YnJlYWs7Y2FzZSBlLlVQOmIuX2tleUV2ZW50KCJwcmV2aW91cyIsYyk7YnJlYWs7Y2FzZSBlLkRPV046Yi5fa2V5RXZlbnQoIm5leHQiLGMpO2JyZWFrO2Nhc2UgZS5FTlRFUjpjYXNlIGUuTlVNUEFEX0VOVEVSOmIubWVudS5hY3RpdmUmJihkPSEwLGMucHJldmVudERlZmF1bHQoKSk7Y2FzZSBlLlRBQjppZighYi5tZW51LmFjdGl2ZSlyZXR1cm47Yi5tZW51LnNlbGVjdChjKTticmVhaztjYXNlIGUuRVNDQVBFOmIuZWxlbWVudC52YWwoYi50ZXJtKSxiLmNsb3NlKGMpO2JyZWFrO2RlZmF1bHQ6Y2xlYXJUaW1lb3V0KGIuc2VhcmNoaW5nKSxiLnNlYXJjaGluZz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi50ZXJtIT1iLmVsZW1lbnQudmFsKCkmJihiLnNlbGVjdGVkSXRlbT1udWxsLGIuc2VhcmNoKG51bGwsYykpfSxiLm9wdGlvbnMuZGVsYXkpfX0pLmJpbmQoImtleXByZXNzLmF1dG9jb21wbGV0ZSIsZnVuY3Rpb24oYSl7ZCYmKGQ9ITEsYS5wcmV2ZW50RGVmYXVsdCgpKX0pLmJpbmQoImZvY3VzLmF1dG9jb21wbGV0ZSIsZnVuY3Rpb24oKXtpZihiLm9wdGlvbnMuZGlzYWJsZWQpcmV0dXJuO2Iuc2VsZWN0ZWRJdGVtPW51bGwsYi5wcmV2aW91cz1iLmVsZW1lbnQudmFsKCl9KS5iaW5kKCJibHVyLmF1dG9jb21wbGV0ZSIsZnVuY3Rpb24oYSl7aWYoYi5vcHRpb25zLmRpc2FibGVkKXJldHVybjtjbGVhclRpbWVvdXQoYi5zZWFyY2hpbmcpLGIuY2xvc2luZz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5jbG9zZShhKSxiLl9jaGFuZ2UoYSl9LDE1MCl9KSx0aGlzLl9pbml0U291cmNlKCksdGhpcy5tZW51PWEoIjx1bD48L3VsPiIpLmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUiKS5hcHBlbmRUbyhhKHRoaXMub3B0aW9ucy5hcHBlbmRUb3x8ImJvZHkiLGMpWzBdKS5tb3VzZWRvd24oZnVuY3Rpb24oYyl7dmFyIGQ9Yi5tZW51LmVsZW1lbnRbMF07YShjLnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aHx8c2V0VGltZW91dChmdW5jdGlvbigpe2EoZG9jdW1lbnQpLm9uZSgibW91c2Vkb3duIixmdW5jdGlvbihjKXtjLnRhcmdldCE9PWIuZWxlbWVudFswXSYmYy50YXJnZXQhPT1kJiYhYS51aS5jb250YWlucyhkLGMudGFyZ2V0KSYmYi5jbG9zZSgpfSl9LDEpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoYi5jbG9zaW5nKX0sMTMpfSkubWVudSh7Zm9jdXM6ZnVuY3Rpb24oYSxjKXt2YXIgZD1jLml0ZW0uZGF0YSgiaXRlbS5hdXRvY29tcGxldGUiKTshMSE9PWIuX3RyaWdnZXIoImZvY3VzIixhLHtpdGVtOmR9KSYmL15rZXkvLnRlc3QoYS5vcmlnaW5hbEV2ZW50LnR5cGUpJiZiLmVsZW1lbnQudmFsKGQudmFsdWUpfSxzZWxlY3RlZDpmdW5jdGlvbihhLGQpe3ZhciBlPWQuaXRlbS5kYXRhKCJpdGVtLmF1dG9jb21wbGV0ZSIpLGY9Yi5wcmV2aW91cztiLmVsZW1lbnRbMF0hPT1jLmFjdGl2ZUVsZW1lbnQmJihiLmVsZW1lbnQuZm9jdXMoKSxiLnByZXZpb3VzPWYsc2V0VGltZW91dChmdW5jdGlvbigpe2IucHJldmlvdXM9ZixiLnNlbGVjdGVkSXRlbT1lfSwxKSksITEhPT1iLl90cmlnZ2VyKCJzZWxlY3QiLGEse2l0ZW06ZX0pJiZiLmVsZW1lbnQudmFsKGUudmFsdWUpLGIudGVybT1iLmVsZW1lbnQudmFsKCksYi5jbG9zZShhKSxiLnNlbGVjdGVkSXRlbT1lfSxibHVyOmZ1bmN0aW9uKGEsYyl7Yi5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikmJmIuZWxlbWVudC52YWwoKSE9PWIudGVybSYmYi5lbGVtZW50LnZhbChiLnRlcm0pfX0pLnpJbmRleCh0aGlzLmVsZW1lbnQuekluZGV4KCkrMSkuY3NzKHt0b3A6MCxsZWZ0OjB9KS5oaWRlKCkuZGF0YSgibWVudSIpLGEuZm4uYmdpZnJhbWUmJnRoaXMubWVudS5lbGVtZW50LmJnaWZyYW1lKCksYi5iZWZvcmV1bmxvYWRIYW5kbGVyPWZ1bmN0aW9uKCl7Yi5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfSxhKHdpbmRvdykuYmluZCgiYmVmb3JldW5sb2FkIixiLmJlZm9yZXVubG9hZEhhbmRsZXIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1hdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhhc3BvcHVwIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksYSh3aW5kb3cpLnVuYmluZCgiYmVmb3JldW5sb2FkIix0aGlzLmJlZm9yZXVubG9hZEhhbmRsZXIpLGEuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24oYixjKXthLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksYj09PSJzb3VyY2UiJiZ0aGlzLl9pbml0U291cmNlKCksYj09PSJhcHBlbmRUbyImJnRoaXMubWVudS5lbGVtZW50LmFwcGVuZFRvKGEoY3x8ImJvZHkiLHRoaXMuZWxlbWVudFswXS5vd25lckRvY3VtZW50KVswXSksYj09PSJkaXNhYmxlZCImJmMmJnRoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpfSxfaW5pdFNvdXJjZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYyxkO2EuaXNBcnJheSh0aGlzLm9wdGlvbnMuc291cmNlKT8oYz10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKGIsZCl7ZChhLnVpLmF1dG9jb21wbGV0ZS5maWx0ZXIoYyxiLnRlcm0pKX0pOnR5cGVvZiB0aGlzLm9wdGlvbnMuc291cmNlPT0ic3RyaW5nIj8oZD10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKGMsZSl7Yi54aHImJmIueGhyLmFib3J0KCksYi54aHI9YS5hamF4KHt1cmw6ZCxkYXRhOmMsZGF0YVR5cGU6Impzb24iLHN1Y2Nlc3M6ZnVuY3Rpb24oYSxiKXtlKGEpfSxlcnJvcjpmdW5jdGlvbigpe2UoW10pfX0pfSk6dGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZX0sc2VhcmNoOmZ1bmN0aW9uKGEsYil7YT1hIT1udWxsP2E6dGhpcy5lbGVtZW50LnZhbCgpLHRoaXMudGVybT10aGlzLmVsZW1lbnQudmFsKCk7aWYoYS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aClyZXR1cm4gdGhpcy5jbG9zZShiKTtjbGVhclRpbWVvdXQodGhpcy5jbG9zaW5nKTtpZih0aGlzLl90cmlnZ2VyKCJzZWFyY2giLGIpPT09ITEpcmV0dXJuO3JldHVybiB0aGlzLl9zZWFyY2goYSl9LF9zZWFyY2g6ZnVuY3Rpb24oYSl7dGhpcy5wZW5kaW5nKyssdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpLHRoaXMuc291cmNlKHt0ZXJtOmF9LHRoaXMuX3Jlc3BvbnNlKCkpfSxfcmVzcG9uc2U6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9KytjO3JldHVybiBmdW5jdGlvbihkKXtiPT09YyYmYS5fX3Jlc3BvbnNlKGQpLGEucGVuZGluZy0tLGEucGVuZGluZ3x8YS5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpfX0sX19yZXNwb25zZTpmdW5jdGlvbihhKXshdGhpcy5vcHRpb25zLmRpc2FibGVkJiZhJiZhLmxlbmd0aD8oYT10aGlzLl9ub3JtYWxpemUoYSksdGhpcy5fc3VnZ2VzdChhKSx0aGlzLl90cmlnZ2VyKCJvcGVuIikpOnRoaXMuY2xvc2UoKX0sY2xvc2U6ZnVuY3Rpb24oYSl7Y2xlYXJUaW1lb3V0KHRoaXMuY2xvc2luZyksdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikmJih0aGlzLm1lbnUuZWxlbWVudC5oaWRlKCksdGhpcy5tZW51LmRlYWN0aXZhdGUoKSx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsYSkpfSxfY2hhbmdlOmZ1bmN0aW9uKGEpe3RoaXMucHJldmlvdXMhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsYSx7aXRlbTp0aGlzLnNlbGVjdGVkSXRlbX0pfSxfbm9ybWFsaXplOmZ1bmN0aW9uKGIpe3JldHVybiBiLmxlbmd0aCYmYlswXS5sYWJlbCYmYlswXS52YWx1ZT9iOmEubWFwKGIsZnVuY3Rpb24oYil7cmV0dXJuIHR5cGVvZiBiPT0ic3RyaW5nIj97bGFiZWw6Yix2YWx1ZTpifTphLmV4dGVuZCh7bGFiZWw6Yi5sYWJlbHx8Yi52YWx1ZSx2YWx1ZTpiLnZhbHVlfHxiLmxhYmVsfSxiKX0pfSxfc3VnZ2VzdDpmdW5jdGlvbihiKXt2YXIgYz10aGlzLm1lbnUuZWxlbWVudC5lbXB0eSgpLnpJbmRleCh0aGlzLmVsZW1lbnQuekluZGV4KCkrMSk7dGhpcy5fcmVuZGVyTWVudShjLGIpLHRoaXMubWVudS5kZWFjdGl2YXRlKCksdGhpcy5tZW51LnJlZnJlc2goKSxjLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksYy5wb3NpdGlvbihhLmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dChuZXcgYS5FdmVudCgibW91c2VvdmVyIikpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciBhPXRoaXMubWVudS5lbGVtZW50O2Eub3V0ZXJXaWR0aChNYXRoLm1heChhLndpZHRoKCIiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpczthLmVhY2goYyxmdW5jdGlvbihhLGMpe2QuX3JlbmRlckl0ZW0oYixjKX0pfSxfcmVuZGVySXRlbTpmdW5jdGlvbihiLGMpe3JldHVybiBhKCI8bGk+PC9saT4iKS5kYXRhKCJpdGVtLmF1dG9jb21wbGV0ZSIsYykuYXBwZW5kKGEoIjxhPjwvYT4iKS50ZXh0KGMubGFiZWwpKS5hcHBlbmRUbyhiKX0sX21vdmU6ZnVuY3Rpb24oYSxiKXtpZighdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpe3RoaXMuc2VhcmNoKG51bGwsYik7cmV0dXJufWlmKHRoaXMubWVudS5maXJzdCgpJiYvXnByZXZpb3VzLy50ZXN0KGEpfHx0aGlzLm1lbnUubGFzdCgpJiYvXm5leHQvLnRlc3QoYSkpe3RoaXMuZWxlbWVudC52YWwodGhpcy50ZXJtKSx0aGlzLm1lbnUuZGVhY3RpdmF0ZSgpO3JldHVybn10aGlzLm1lbnVbYV0oYil9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudH0sX2tleUV2ZW50OmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKXRoaXMuX21vdmUoYSxiKSxiLnByZXZlbnREZWZhdWx0KCl9fSksYS5leHRlbmQoYS51aS5hdXRvY29tcGxldGUse2VzY2FwZVJlZ2V4OmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1stW1xde30oKSorPy4sXFxeJHwjXHNdL2csIlxcJCYiKX0sZmlsdGVyOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9bmV3IFJlZ0V4cChhLnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleChjKSwiaSIpO3JldHVybiBhLmdyZXAoYixmdW5jdGlvbihhKXtyZXR1cm4gZC50ZXN0KGEubGFiZWx8fGEudmFsdWV8fGEpfSl9fSl9KGpRdWVyeSksZnVuY3Rpb24oYSl7YS53aWRnZXQoInVpLm1lbnUiLHtfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpczt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5hdHRyKHtyb2xlOiJsaXN0Ym94IiwiYXJpYS1hY3RpdmVkZXNjZW5kYW50IjoidWktYWN0aXZlLW1lbnVpdGVtIn0pLmNsaWNrKGZ1bmN0aW9uKGMpe2lmKCFhKGMudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIGEiKS5sZW5ndGgpcmV0dXJuO2MucHJldmVudERlZmF1bHQoKSxiLnNlbGVjdChjKX0pLHRoaXMucmVmcmVzaCgpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPXRoaXMuZWxlbWVudC5jaGlsZHJlbigibGk6bm90KC51aS1tZW51LWl0ZW0pOmhhcyhhKSIpLmFkZENsYXNzKCJ1aS1tZW51LWl0ZW0iKS5hdHRyKCJyb2xlIiwibWVudWl0ZW0iKTtjLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3MoInVpLWNvcm5lci1hbGwiKS5hdHRyKCJ0YWJpbmRleCIsLTEpLm1vdXNlZW50ZXIoZnVuY3Rpb24oYyl7Yi5hY3RpdmF0ZShjLGEodGhpcykucGFyZW50KCkpfSkubW91c2VsZWF2ZShmdW5jdGlvbigpe2IuZGVhY3RpdmF0ZSgpfSl9LGFjdGl2YXRlOmZ1bmN0aW9uKGEsYil7dGhpcy5kZWFjdGl2YXRlKCk7aWYodGhpcy5oYXNTY3JvbGwoKSl7dmFyIGM9Yi5vZmZzZXQoKS50b3AtdGhpcy5lbGVtZW50Lm9mZnNldCgpLnRvcCxkPXRoaXMuZWxlbWVudC5zY3JvbGxUb3AoKSxlPXRoaXMuZWxlbWVudC5oZWlnaHQoKTtjPDA/dGhpcy5lbGVtZW50LnNjcm9sbFRvcChkK2MpOmM+PWUmJnRoaXMuZWxlbWVudC5zY3JvbGxUb3AoZCtjLWUrYi5oZWlnaHQoKSl9dGhpcy5hY3RpdmU9Yi5lcSgwKS5jaGlsZHJlbigiYSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLmF0dHIoImlkIiwidWktYWN0aXZlLW1lbnVpdGVtIikuZW5kKCksdGhpcy5fdHJpZ2dlcigiZm9jdXMiLGEse2l0ZW06Yn0pfSxkZWFjdGl2YXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZlKXJldHVybjt0aGlzLmFjdGl2ZS5jaGlsZHJlbigiYSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoImlkIiksdGhpcy5fdHJpZ2dlcigiYmx1ciIpLHRoaXMuYWN0aXZlPW51bGx9LG5leHQ6ZnVuY3Rpb24oYSl7dGhpcy5tb3ZlKCJuZXh0IiwiLnVpLW1lbnUtaXRlbTpmaXJzdCIsYSl9LHByZXZpb3VzOmZ1bmN0aW9uKGEpe3RoaXMubW92ZSgicHJldiIsIi51aS1tZW51LWl0ZW06bGFzdCIsYSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKS5sZW5ndGh9LG1vdmU6ZnVuY3Rpb24oYSxiLGMpe2lmKCF0aGlzLmFjdGl2ZSl7dGhpcy5hY3RpdmF0ZShjLHRoaXMuZWxlbWVudC5jaGlsZHJlbihiKSk7cmV0dXJufXZhciBkPXRoaXMuYWN0aXZlW2ErIkFsbCJdKCIudWktbWVudS1pdGVtIikuZXEoMCk7ZC5sZW5ndGg/dGhpcy5hY3RpdmF0ZShjLGQpOnRoaXMuYWN0aXZhdGUoYyx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oYikpfSxuZXh0UGFnZTpmdW5jdGlvbihiKXtpZih0aGlzLmhhc1Njcm9sbCgpKXtpZighdGhpcy5hY3RpdmV8fHRoaXMubGFzdCgpKXt0aGlzLmFjdGl2YXRlKGIsdGhpcy5lbGVtZW50LmNoaWxkcmVuKCIudWktbWVudS1pdGVtOmZpcnN0IikpO3JldHVybn12YXIgYz10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3AsZD10aGlzLmVsZW1lbnQuaGVpZ2h0KCksZT10aGlzLmVsZW1lbnQuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLm9mZnNldCgpLnRvcC1jLWQrYSh0aGlzKS5oZWlnaHQoKTtyZXR1cm4gYjwxMCYmYj4tMTB9KTtlLmxlbmd0aHx8KGU9dGhpcy5lbGVtZW50LmNoaWxkcmVuKCIudWktbWVudS1pdGVtOmxhc3QiKSksdGhpcy5hY3RpdmF0ZShiLGUpfWVsc2UgdGhpcy5hY3RpdmF0ZShiLHRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcighdGhpcy5hY3RpdmV8fHRoaXMubGFzdCgpPyI6Zmlyc3QiOiI6bGFzdCIpKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKGIpe2lmKHRoaXMuaGFzU2Nyb2xsKCkpe2lmKCF0aGlzLmFjdGl2ZXx8dGhpcy5maXJzdCgpKXt0aGlzLmFjdGl2YXRlKGIsdGhpcy5lbGVtZW50LmNoaWxkcmVuKCIudWktbWVudS1pdGVtOmxhc3QiKSk7cmV0dXJufXZhciBjPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxkPXRoaXMuZWxlbWVudC5oZWlnaHQoKSxlPXRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBiPWEodGhpcykub2Zmc2V0KCkudG9wLWMrZC1hKHRoaXMpLmhlaWdodCgpO3JldHVybiBiPDEwJiZiPi0xMH0pO2UubGVuZ3RofHwoZT10aGlzLmVsZW1lbnQuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW06Zmlyc3QiKSksdGhpcy5hY3RpdmF0ZShiLGUpfWVsc2UgdGhpcy5hY3RpdmF0ZShiLHRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcighdGhpcy5hY3RpdmV8fHRoaXMuZmlyc3QoKT8iOmxhc3QiOiI6Zmlyc3QiKSl9LGhhc1Njcm9sbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuaGVpZ2h0KCk8dGhpcy5lbGVtZW50W2EuZm4ucHJvcD8icHJvcCI6ImF0dHIiXSgic2Nyb2xsSGVpZ2h0Iil9LHNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLl90cmlnZ2VyKCJzZWxlY3RlZCIsYSx7aXRlbTp0aGlzLmFjdGl2ZX0pfX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZz0idWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiLGg9InVpLXN0YXRlLWhvdmVyIHVpLXN0YXRlLWFjdGl2ZSAiLGk9InVpLWJ1dHRvbi1pY29ucy1vbmx5IHVpLWJ1dHRvbi1pY29uLW9ubHkgdWktYnV0dG9uLXRleHQtaWNvbnMgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IHVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IHVpLWJ1dHRvbi10ZXh0LW9ubHkiLGo9ZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLmZpbmQoIjp1aS1idXR0b24iKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5idXR0b24oInJlZnJlc2giKX0sMSl9LGs9ZnVuY3Rpb24oYil7dmFyIGM9Yi5uYW1lLGQ9Yi5mb3JtLGU9YShbXSk7cmV0dXJuIGMmJihkP2U9YShkKS5maW5kKCJbbmFtZT0nIitjKyInXSIpOmU9YSgiW25hbWU9JyIrYysiJ10iLGIub3duZXJEb2N1bWVudCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZm9ybX0pKSxlfTthLndpZGdldCgidWkuYnV0dG9uIix7b3B0aW9uczp7ZGlzYWJsZWQ6bnVsbCx0ZXh0OiEwLGxhYmVsOm51bGwsaWNvbnM6e3ByaW1hcnk6bnVsbCxzZWNvbmRhcnk6bnVsbH19LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuY2xvc2VzdCgiZm9ybSIpLnVuYmluZCgicmVzZXQuYnV0dG9uIikuYmluZCgicmVzZXQuYnV0dG9uIixqKSx0eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkIT0iYm9vbGVhbiI/dGhpcy5vcHRpb25zLmRpc2FibGVkPSEhdGhpcy5lbGVtZW50LnByb3BBdHRyKCJkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5wcm9wQXR0cigiZGlzYWJsZWQiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fZGV0ZXJtaW5lQnV0dG9uVHlwZSgpLHRoaXMuaGFzVGl0bGU9ISF0aGlzLmJ1dHRvbkVsZW1lbnQuYXR0cigidGl0bGUiKTt2YXIgYj10aGlzLGg9dGhpcy5vcHRpb25zLGk9dGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIixsPSJ1aS1zdGF0ZS1ob3ZlciIrKGk/IiI6IiB1aS1zdGF0ZS1hY3RpdmUiKSxtPSJ1aS1zdGF0ZS1mb2N1cyI7aC5sYWJlbD09PW51bGwmJihoLmxhYmVsPXRoaXMuYnV0dG9uRWxlbWVudC5odG1sKCkpLHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhnKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuYmluZCgibW91c2VlbnRlci5idXR0b24iLGZ1bmN0aW9uKCl7aWYoaC5kaXNhYmxlZClyZXR1cm47YSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzPT09YyYmYSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIil9KS5iaW5kKCJtb3VzZWxlYXZlLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkKXJldHVybjthKHRoaXMpLnJlbW92ZUNsYXNzKGwpfSkuYmluZCgiY2xpY2suYnV0dG9uIixmdW5jdGlvbihhKXtoLmRpc2FibGVkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSksdGhpcy5lbGVtZW50LmJpbmQoImZvY3VzLmJ1dHRvbiIsZnVuY3Rpb24oKXtiLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MobSl9KS5iaW5kKCJibHVyLmJ1dHRvbiIsZnVuY3Rpb24oKXtiLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MobSl9KSxpJiYodGhpcy5lbGVtZW50LmJpbmQoImNoYW5nZS5idXR0b24iLGZ1bmN0aW9uKCl7aWYoZilyZXR1cm47Yi5yZWZyZXNoKCl9KSx0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duLmJ1dHRvbiIsZnVuY3Rpb24oYSl7aWYoaC5kaXNhYmxlZClyZXR1cm47Zj0hMSxkPWEucGFnZVgsZT1hLnBhZ2VZfSkuYmluZCgibW91c2V1cC5idXR0b24iLGZ1bmN0aW9uKGEpe2lmKGguZGlzYWJsZWQpcmV0dXJuO2lmKGQhPT1hLnBhZ2VYfHxlIT09YS5wYWdlWSlmPSEwfSkpLHRoaXMudHlwZT09PSJjaGVja2JveCI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkfHxmKXJldHVybiExO2EodGhpcykudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGIuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLGIuZWxlbWVudFswXS5jaGVja2VkKX0pOnRoaXMudHlwZT09PSJyYWRpbyI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkfHxmKXJldHVybiExO2EodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGIuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik7dmFyIGM9Yi5lbGVtZW50WzBdO2soYykubm90KGMpLm1hcChmdW5jdGlvbigpe3JldHVybiBhKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOih0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkKXJldHVybiExO2EodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGM9dGhpcyxhKGRvY3VtZW50KS5vbmUoIm1vdXNldXAiLGZ1bmN0aW9uKCl7Yz1udWxsfSl9KS5iaW5kKCJtb3VzZXVwLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkKXJldHVybiExO2EodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5ZG93bi5idXR0b24iLGZ1bmN0aW9uKGIpe2lmKGguZGlzYWJsZWQpcmV0dXJuITE7KGIua2V5Q29kZT09YS51aS5rZXlDb2RlLlNQQUNFfHxiLmtleUNvZGU9PWEudWkua2V5Q29kZS5FTlRFUikmJmEodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5dXAuYnV0dG9uIixmdW5jdGlvbigpe2EodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSksdGhpcy5idXR0b25FbGVtZW50LmlzKCJhIikmJnRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbihiKXtiLmtleUNvZGU9PT1hLnVpLmtleUNvZGUuU1BBQ0UmJmEodGhpcykuY2xpY2soKX0pKSx0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIixoLmRpc2FibGVkKSx0aGlzLl9yZXNldEJ1dHRvbigpfSxfZGV0ZXJtaW5lQnV0dG9uVHlwZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5pcygiOmNoZWNrYm94Iik/dGhpcy50eXBlPSJjaGVja2JveCI6dGhpcy5lbGVtZW50LmlzKCI6cmFkaW8iKT90aGlzLnR5cGU9InJhZGlvIjp0aGlzLmVsZW1lbnQuaXMoImlucHV0Iik/dGhpcy50eXBlPSJpbnB1dCI6dGhpcy50eXBlPSJidXR0b24iO2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpe3ZhciBhPXRoaXMuZWxlbWVudC5wYXJlbnRzKCkuZmlsdGVyKCI6bGFzdCIpLGI9ImxhYmVsW2Zvcj0nIit0aGlzLmVsZW1lbnQuYXR0cigiaWQiKSsiJ10iO3RoaXMuYnV0dG9uRWxlbWVudD1hLmZpbmQoYiksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KGE9YS5sZW5ndGg/YS5zaWJsaW5ncygpOnRoaXMuZWxlbWVudC5zaWJsaW5ncygpLHRoaXMuYnV0dG9uRWxlbWVudD1hLmZpbHRlcihiKSx0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RofHwodGhpcy5idXR0b25FbGVtZW50PWEuZmluZChiKSkpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIik7dmFyIGM9dGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpO2MmJnRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5idXR0b25FbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsYyl9ZWxzZSB0aGlzLmJ1dHRvbkVsZW1lbnQ9dGhpcy5lbGVtZW50fSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idXR0b25FbGVtZW50fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoZysiICIraCsiICIraSkucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIiksYS5XaWRnZXQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKX0sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe2EuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihiPT09ImRpc2FibGVkIil7Yz90aGlzLmVsZW1lbnQucHJvcEF0dHIoImRpc2FibGVkIiwhMCk6dGhpcy5lbGVtZW50LnByb3BBdHRyKCJkaXNhYmxlZCIsITEpO3JldHVybn10aGlzLl9yZXNldEJ1dHRvbigpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKTtiIT09dGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIixiKSx0aGlzLnR5cGU9PT0icmFkaW8iP2sodGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7YSh0aGlzKS5pcygiOmNoZWNrZWQiKT9hKHRoaXMpLmJ1dHRvbigid2lkZ2V0IikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTphKHRoaXMpLmJ1dHRvbigid2lkZ2V0IikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIil9KTp0aGlzLnR5cGU9PT0iY2hlY2tib3giJiYodGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpP3RoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpOnRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSl9LF9yZXNldEJ1dHRvbjpmdW5jdGlvbigpe2lmKHRoaXMudHlwZT09PSJpbnB1dCIpe3RoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5lbGVtZW50LnZhbCh0aGlzLm9wdGlvbnMubGFiZWwpO3JldHVybn12YXIgYj10aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoaSksYz1hKCI8c3Bhbj48L3NwYW4+Iix0aGlzLmVsZW1lbnRbMF0ub3duZXJEb2N1bWVudCkuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0IikuaHRtbCh0aGlzLm9wdGlvbnMubGFiZWwpLmFwcGVuZFRvKGIuZW1wdHkoKSkudGV4dCgpLGQ9dGhpcy5vcHRpb25zLmljb25zLGU9ZC5wcmltYXJ5JiZkLnNlY29uZGFyeSxmPVtdO2QucHJpbWFyeXx8ZC5zZWNvbmRhcnk/KHRoaXMub3B0aW9ucy50ZXh0JiZmLnB1c2goInVpLWJ1dHRvbi10ZXh0LWljb24iKyhlPyJzIjpkLnByaW1hcnk/Ii1wcmltYXJ5IjoiLXNlY29uZGFyeSIpKSxkLnByaW1hcnkmJmIucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiK2QucHJpbWFyeSsiJz48L3NwYW4+IiksZC5zZWNvbmRhcnkmJmIuYXBwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHVpLWljb24gIitkLnNlY29uZGFyeSsiJz48L3NwYW4+IiksdGhpcy5vcHRpb25zLnRleHR8fChmLnB1c2goZT8idWktYnV0dG9uLWljb25zLW9ubHkiOiJ1aS1idXR0b24taWNvbi1vbmx5IiksdGhpcy5oYXNUaXRsZXx8Yi5hdHRyKCJ0aXRsZSIsYykpKTpmLnB1c2goInVpLWJ1dHRvbi10ZXh0LW9ubHkiKSxiLmFkZENsYXNzKGYuam9pbigiICIpKX19KSxhLndpZGdldCgidWkuYnV0dG9uc2V0Iix7b3B0aW9uczp7aXRlbXM6IjpidXR0b24sIDpzdWJtaXQsIDpyZXNldCwgOmNoZWNrYm94LCA6cmFkaW8sIGEsIDpkYXRhKGJ1dHRvbikifSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1idXR0b25zZXQiKX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2goKX0sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe2I9PT0iZGlzYWJsZWQiJiZ0aGlzLmJ1dHRvbnMuYnV0dG9uKCJvcHRpb24iLGIsYyksYS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LmNzcygiZGlyZWN0aW9uIik9PT0icnRsIjt0aGlzLmJ1dHRvbnM9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKS5lbmQoKS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKS5lbmQoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZmlsdGVyKCI6Zmlyc3QiKS5hZGRDbGFzcyhiPyJ1aS1jb3JuZXItcmlnaHQiOiJ1aS1jb3JuZXItbGVmdCIpLmVuZCgpLmZpbHRlcigiOmxhc3QiKS5hZGRDbGFzcyhiPyJ1aS1jb3JuZXItbGVmdCI6InVpLWNvcm5lci1yaWdodCIpLmVuZCgpLmVuZCgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1idXR0b25zZXQiKSx0aGlzLmJ1dHRvbnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5idXR0b24oImRlc3Ryb3kiKSxhLldpZGdldC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpfX0pfShqUXVlcnkpLGZ1bmN0aW9uKCQsdW5kZWZpbmVkKXtmdW5jdGlvbiBEYXRlcGlja2VyKCl7dGhpcy5kZWJ1Zz0hMSx0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPSJ1aS1kYXRlcGlja2VyLWRpdiIsdGhpcy5faW5saW5lQ2xhc3M9InVpLWRhdGVwaWNrZXItaW5saW5lIix0aGlzLl9hcHBlbmRDbGFzcz0idWktZGF0ZXBpY2tlci1hcHBlbmQiLHRoaXMuX3RyaWdnZXJDbGFzcz0idWktZGF0ZXBpY2tlci10cmlnZ2VyIix0aGlzLl9kaWFsb2dDbGFzcz0idWktZGF0ZXBpY2tlci1kaWFsb2ciLHRoaXMuX2Rpc2FibGVDbGFzcz0idWktZGF0ZXBpY2tlci1kaXNhYmxlZCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlIix0aGlzLl9jdXJyZW50Q2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkiLHRoaXMuX2RheU92ZXJDbGFzcz0idWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlciIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsWyIiXT17Y2xvc2VUZXh0OiJEb25lIixwcmV2VGV4dDoiUHJldiIsbmV4dFRleHQ6Ik5leHQiLGN1cnJlbnRUZXh0OiJUb2RheSIsbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sd2Vla0hlYWRlcjoiV2siLGRhdGVGb3JtYXQ6Im1tL2RkL3l5IixmaXJzdERheTowLGlzUlRMOiExLHNob3dNb250aEFmdGVyWWVhcjohMSx5ZWFyU3VmZml4OiIifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOiJmb2N1cyIsc2hvd0FuaW06ImZhZGVJbiIsc2hvd09wdGlvbnM6e30sZGVmYXVsdERhdGU6bnVsbCxhcHBlbmRUZXh0OiIiLGJ1dHRvblRleHQ6Ii4uLiIsYnV0dG9uSW1hZ2U6IiIsYnV0dG9uSW1hZ2VPbmx5OiExLGhpZGVJZk5vUHJldk5leHQ6ITEsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDohMSxnb3RvQ3VycmVudDohMSxjaGFuZ2VNb250aDohMSxjaGFuZ2VZZWFyOiExLHllYXJSYW5nZToiYy0xMDpjKzEwIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjoiKzEwIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOiJmYXN0IixiZWZvcmVTaG93RGF5Om51bGwsYmVmb3JlU2hvdzpudWxsLG9uU2VsZWN0Om51bGwsb25DaGFuZ2VNb250aFllYXI6bnVsbCxvbkNsb3NlOm51bGwsbnVtYmVyT2ZNb250aHM6MSxzaG93Q3VycmVudEF0UG9zOjAsc3RlcE1vbnRoczoxLHN0ZXBCaWdNb250aHM6MTIsYWx0RmllbGQ6IiIsYWx0Rm9ybWF0OiIiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sJC5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMuZHBEaXY9YmluZEhvdmVyKCQoJzxkaXYgaWQ9IicrdGhpcy5fbWFpbkRpdklkKyciIGNsYXNzPSJ1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCI+PC9kaXY+JykpfWZ1bmN0aW9uIGJpbmRIb3ZlcihhKXt2YXIgYj0iYnV0dG9uLCAudWktZGF0ZXBpY2tlci1wcmV2LCAudWktZGF0ZXBpY2tlci1uZXh0LCAudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhIjtyZXR1cm4gYS5iaW5kKCJtb3VzZW91dCIsZnVuY3Rpb24oYSl7dmFyIGM9JChhLnRhcmdldCkuY2xvc2VzdChiKTtpZighYy5sZW5ndGgpcmV0dXJuO2MucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIHVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciB1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKX0pLmJpbmQoIm1vdXNlb3ZlciIsZnVuY3Rpb24oYyl7dmFyIGQ9JChjLnRhcmdldCkuY2xvc2VzdChiKTtpZigkLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGluc3RBY3RpdmUuaW5saW5lP2EucGFyZW50KClbMF06aW5zdEFjdGl2ZS5pbnB1dFswXSl8fCFkLmxlbmd0aClyZXR1cm47ZC5wYXJlbnRzKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpLmZpbmQoImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSxkLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLGQuaGFzQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldiIpJiZkLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSxkLmhhc0NsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQiKSYmZC5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIil9KX1mdW5jdGlvbiBleHRlbmRSZW1vdmUoYSxiKXskLmV4dGVuZChhLGIpO2Zvcih2YXIgYyBpbiBiKWlmKGJbY109PW51bGx8fGJbY109PXVuZGVmaW5lZClhW2NdPWJbY107cmV0dXJuIGF9ZnVuY3Rpb24gaXNBcnJheShhKXtyZXR1cm4gYSYmKCQuYnJvd3Nlci5zYWZhcmkmJnR5cGVvZiBhPT0ib2JqZWN0IiYmYS5sZW5ndGh8fGEuY29uc3RydWN0b3ImJmEuY29uc3RydWN0b3IudG9TdHJpbmcoKS5tYXRjaCgvXEFycmF5XChcKS8pKX0kLmV4dGVuZCgkLnVpLHtkYXRlcGlja2VyOnt2ZXJzaW9uOiIxLjguMjQifX0pO3ZhciBQUk9QX05BTUU9ImRhdGVwaWNrZXIiLGRwdXVpZD0obmV3IERhdGUpLmdldFRpbWUoKSxpbnN0QWN0aXZlOyQuZXh0ZW5kKERhdGVwaWNrZXIucHJvdG90eXBlLHttYXJrZXJDbGFzc05hbWU6Imhhc0RhdGVwaWNrZXIiLG1heFJvd3M6NCxsb2c6ZnVuY3Rpb24oKXt0aGlzLmRlYnVnJiZjb25zb2xlLmxvZy5hcHBseSgiIixhcmd1bWVudHMpfSxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbihhKXtyZXR1cm4gZXh0ZW5kUmVtb3ZlKHRoaXMuX2RlZmF1bHRzLGF8fHt9KSx0aGlzfSxfYXR0YWNoRGF0ZXBpY2tlcjpmdW5jdGlvbih0YXJnZXQsc2V0dGluZ3Mpe3ZhciBpbmxpbmVTZXR0aW5ncz1udWxsO2Zvcih2YXIgYXR0ck5hbWUgaW4gdGhpcy5fZGVmYXVsdHMpe3ZhciBhdHRyVmFsdWU9dGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0ZToiK2F0dHJOYW1lKTtpZihhdHRyVmFsdWUpe2lubGluZVNldHRpbmdzPWlubGluZVNldHRpbmdzfHx7fTt0cnl7aW5saW5lU2V0dGluZ3NbYXR0ck5hbWVdPWV2YWwoYXR0clZhbHVlKX1jYXRjaChlcnIpe2lubGluZVNldHRpbmdzW2F0dHJOYW1lXT1hdHRyVmFsdWV9fX12YXIgbm9kZU5hbWU9dGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksaW5saW5lPW5vZGVOYW1lPT0iZGl2Inx8bm9kZU5hbWU9PSJzcGFuIjt0YXJnZXQuaWR8fCh0aGlzLnV1aWQrPTEsdGFyZ2V0LmlkPSJkcCIrdGhpcy51dWlkKTt2YXIgaW5zdD10aGlzLl9uZXdJbnN0KCQodGFyZ2V0KSxpbmxpbmUpO2luc3Quc2V0dGluZ3M9JC5leHRlbmQoe30sc2V0dGluZ3N8fHt9LGlubGluZVNldHRpbmdzfHx7fSksbm9kZU5hbWU9PSJpbnB1dCI/dGhpcy5fY29ubmVjdERhdGVwaWNrZXIodGFyZ2V0LGluc3QpOmlubGluZSYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcih0YXJnZXQsaW5zdCl9LF9uZXdJbnN0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YVswXS5pZC5yZXBsYWNlKC8oW15BLVphLXowLTlfLV0pL2csIlxcXFwkMSIpO3JldHVybntpZDpjLGlucHV0OmEsc2VsZWN0ZWREYXk6MCxzZWxlY3RlZE1vbnRoOjAsc2VsZWN0ZWRZZWFyOjAsZHJhd01vbnRoOjAsZHJhd1llYXI6MCxpbmxpbmU6YixkcERpdjpiP2JpbmRIb3ZlcigkKCc8ZGl2IGNsYXNzPSInK3RoaXMuX2lubGluZUNsYXNzKycgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwiPjwvZGl2PicpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKGEsYil7dmFyIGM9JChhKTtiLmFwcGVuZD0kKFtdKSxiLnRyaWdnZXI9JChbXSk7aWYoYy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3RoaXMuX2F0dGFjaG1lbnRzKGMsYiksYy5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkua2V5ZG93bih0aGlzLl9kb0tleURvd24pLmtleXByZXNzKHRoaXMuX2RvS2V5UHJlc3MpLmtleXVwKHRoaXMuX2RvS2V5VXApLmJpbmQoInNldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oYSxjLGQpe2Iuc2V0dGluZ3NbY109ZH0pLmJpbmQoImdldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5fZ2V0KGIsYyl9KSx0aGlzLl9hdXRvU2l6ZShiKSwkLmRhdGEoYSxQUk9QX05BTUUsYiksYi5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoYSl9LF9hdHRhY2htZW50czpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2dldChiLCJhcHBlbmRUZXh0IiksZD10aGlzLl9nZXQoYiwiaXNSVEwiKTtiLmFwcGVuZCYmYi5hcHBlbmQucmVtb3ZlKCksYyYmKGIuYXBwZW5kPSQoJzxzcGFuIGNsYXNzPSInK3RoaXMuX2FwcGVuZENsYXNzKyciPicrYysiPC9zcGFuPiIpLGFbZD8iYmVmb3JlIjoiYWZ0ZXIiXShiLmFwcGVuZCkpLGEudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLGIudHJpZ2dlciYmYi50cmlnZ2VyLnJlbW92ZSgpO3ZhciBlPXRoaXMuX2dldChiLCJzaG93T24iKTsoZT09ImZvY3VzInx8ZT09ImJvdGgiKSYmYS5mb2N1cyh0aGlzLl9zaG93RGF0ZXBpY2tlcik7aWYoZT09ImJ1dHRvbiJ8fGU9PSJib3RoIil7dmFyIGY9dGhpcy5fZ2V0KGIsImJ1dHRvblRleHQiKSxnPXRoaXMuX2dldChiLCJidXR0b25JbWFnZSIpO2IudHJpZ2dlcj0kKHRoaXMuX2dldChiLCJidXR0b25JbWFnZU9ubHkiKT8kKCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpnLGFsdDpmLHRpdGxlOmZ9KTokKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PC9idXR0b24+JykuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKGc9PSIiP2Y6JCgiPGltZy8+IikuYXR0cih7c3JjOmcsYWx0OmYsdGl0bGU6Zn0pKSksYVtkPyJiZWZvcmUiOiJhZnRlciJdKGIudHJpZ2dlciksYi50cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuICQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJiQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT1hWzBdPyQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTokLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9YVswXT8oJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoYVswXSkpOiQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoYVswXSksITF9KX19LF9hdXRvU2l6ZTpmdW5jdGlvbihhKXtpZih0aGlzLl9nZXQoYSwiYXV0b1NpemUiKSYmIWEuaW5saW5lKXt2YXIgYj1uZXcgRGF0ZSgyMDA5LDExLDIwKSxjPXRoaXMuX2dldChhLCJkYXRlRm9ybWF0Iik7aWYoYy5tYXRjaCgvW0RNXS8pKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj0wLGM9MDtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLmxlbmd0aD5iJiYoYj1hW2RdLmxlbmd0aCxjPWQpO3JldHVybiBjfTtiLnNldE1vbnRoKGQodGhpcy5fZ2V0KGEsYy5tYXRjaCgvTU0vKT8ibW9udGhOYW1lcyI6Im1vbnRoTmFtZXNTaG9ydCIpKSksYi5zZXREYXRlKGQodGhpcy5fZ2V0KGEsYy5tYXRjaCgvREQvKT8iZGF5TmFtZXMiOiJkYXlOYW1lc1Nob3J0IikpKzIwLWIuZ2V0RGF5KCkpfWEuaW5wdXQuYXR0cigic2l6ZSIsdGhpcy5fZm9ybWF0RGF0ZShhLGIpLmxlbmd0aCl9fSxfaW5saW5lRGF0ZXBpY2tlcjpmdW5jdGlvbihhLGIpe3ZhciBjPSQoYSk7aWYoYy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO2MuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChiLmRwRGl2KS5iaW5kKCJzZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGEsYyxkKXtiLnNldHRpbmdzW2NdPWR9KS5iaW5kKCJnZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuX2dldChiLGMpfSksJC5kYXRhKGEsUFJPUF9OQU1FLGIpLHRoaXMuX3NldERhdGUoYix0aGlzLl9nZXREZWZhdWx0RGF0ZShiKSwhMCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihiKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoYiksYi5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoYSksYi5kcERpdi5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPXRoaXMuX2RpYWxvZ0luc3Q7aWYoIWYpe3RoaXMudXVpZCs9MTt2YXIgZz0iZHAiK3RoaXMudXVpZDt0aGlzLl9kaWFsb2dJbnB1dD0kKCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IicrZysnIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDBweDsgd2lkdGg6IDBweDsiLz4nKSx0aGlzLl9kaWFsb2dJbnB1dC5rZXlkb3duKHRoaXMuX2RvS2V5RG93biksJCgiYm9keSIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCksZj10aGlzLl9kaWFsb2dJbnN0PXRoaXMuX25ld0luc3QodGhpcy5fZGlhbG9nSW5wdXQsITEpLGYuc2V0dGluZ3M9e30sJC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFBST1BfTkFNRSxmKX1leHRlbmRSZW1vdmUoZi5zZXR0aW5ncyxkfHx7fSksYj1iJiZiLmNvbnN0cnVjdG9yPT1EYXRlP3RoaXMuX2Zvcm1hdERhdGUoZixiKTpiLHRoaXMuX2RpYWxvZ0lucHV0LnZhbChiKSx0aGlzLl9wb3M9ZT9lLmxlbmd0aD9lOltlLnBhZ2VYLGUucGFnZVldOm51bGw7aWYoIXRoaXMuX3Bvcyl7dmFyIGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxqPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsaz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDt0aGlzLl9wb3M9W2gvMi0xMDAraixpLzItMTUwK2tdfXJldHVybiB0aGlzLl9kaWFsb2dJbnB1dC5jc3MoImxlZnQiLHRoaXMuX3Bvc1swXSsyMCsicHgiKS5jc3MoInRvcCIsdGhpcy5fcG9zWzFdKyJweCIpLGYuc2V0dGluZ3Mub25TZWxlY3Q9Yyx0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksJC5ibG9ja1VJJiYkLmJsb2NrVUkodGhpcy5kcERpdiksJC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFBST1BfTkFNRSxmKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24oYSl7dmFyIGI9JChhKSxjPSQuZGF0YShhLFBST1BfTkFNRSk7aWYoIWIuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjt2YXIgZD1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7JC5yZW1vdmVEYXRhKGEsUFJPUF9OQU1FKSxkPT0iaW5wdXQiPyhjLmFwcGVuZC5yZW1vdmUoKSxjLnRyaWdnZXIucmVtb3ZlKCksYi5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZCgia2V5ZG93biIsdGhpcy5fZG9LZXlEb3duKS51bmJpbmQoImtleXByZXNzIix0aGlzLl9kb0tleVByZXNzKS51bmJpbmQoImtleXVwIix0aGlzLl9kb0tleVVwKSk6KGQ9PSJkaXYifHxkPT0ic3BhbiIpJiZiLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihhKXt2YXIgYj0kKGEpLGM9JC5kYXRhKGEsUFJPUF9OQU1FKTtpZighYi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3ZhciBkPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihkPT0iaW5wdXQiKWEuZGlzYWJsZWQ9ITEsYy50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMS4wIixjdXJzb3I6IiJ9KTtlbHNlIGlmKGQ9PSJkaXYifHxkPT0ic3BhbiIpe3ZhciBlPWIuY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKTtlLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksZS5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnJlbW92ZUF0dHIoImRpc2FibGVkIil9dGhpcy5fZGlzYWJsZWRJbnB1dHM9JC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oYil7cmV0dXJuIGI9PWE/bnVsbDpifSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihhKXt2YXIgYj0kKGEpLGM9JC5kYXRhKGEsUFJPUF9OQU1FKTtpZighYi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3ZhciBkPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihkPT0iaW5wdXQiKWEuZGlzYWJsZWQ9ITAsYy50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITB9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMC41IixjdXJzb3I6ImRlZmF1bHQifSk7ZWxzZSBpZihkPT0iZGl2Inx8ZD09InNwYW4iKXt2YXIgZT1iLmNoaWxkcmVuKCIuIit0aGlzLl9pbmxpbmVDbGFzcyk7ZS5jaGlsZHJlbigpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLGUuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIil9dGhpcy5fZGlzYWJsZWRJbnB1dHM9JC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oYil7cmV0dXJuIGI9PWE/bnVsbDpifSksdGhpcy5fZGlzYWJsZWRJbnB1dHNbdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoXT1hfSxfaXNEaXNhYmxlZERhdGVwaWNrZXI6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuITE7Zm9yKHZhciBiPTA7Yjx0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg7YisrKWlmKHRoaXMuX2Rpc2FibGVkSW5wdXRzW2JdPT1hKXJldHVybiEwO3JldHVybiExfSxfZ2V0SW5zdDpmdW5jdGlvbihhKXt0cnl7cmV0dXJuICQuZGF0YShhLFBST1BfTkFNRSl9Y2F0Y2goYil7dGhyb3ciTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXIifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEluc3QoYSk7aWYoYXJndW1lbnRzLmxlbmd0aD09MiYmdHlwZW9mIGI9PSJzdHJpbmciKXJldHVybiBiPT0iZGVmYXVsdHMiPyQuZXh0ZW5kKHt9LCQuZGF0ZXBpY2tlci5fZGVmYXVsdHMpOmQ/Yj09ImFsbCI/JC5leHRlbmQoe30sZC5zZXR0aW5ncyk6dGhpcy5fZ2V0KGQsYik6bnVsbDt2YXIgZT1ifHx7fTt0eXBlb2YgYj09InN0cmluZyImJihlPXt9LGVbYl09Yyk7aWYoZCl7dGhpcy5fY3VySW5zdD09ZCYmdGhpcy5faGlkZURhdGVwaWNrZXIoKTt2YXIgZj10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcihhLCEwKSxnPXRoaXMuX2dldE1pbk1heERhdGUoZCwibWluIiksaD10aGlzLl9nZXRNaW5NYXhEYXRlKGQsIm1heCIpO2V4dGVuZFJlbW92ZShkLnNldHRpbmdzLGUpLGchPT1udWxsJiZlLmRhdGVGb3JtYXQhPT11bmRlZmluZWQmJmUubWluRGF0ZT09PXVuZGVmaW5lZCYmKGQuc2V0dGluZ3MubWluRGF0ZT10aGlzLl9mb3JtYXREYXRlKGQsZykpLGghPT1udWxsJiZlLmRhdGVGb3JtYXQhPT11bmRlZmluZWQmJmUubWF4RGF0ZT09PXVuZGVmaW5lZCYmKGQuc2V0dGluZ3MubWF4RGF0ZT10aGlzLl9mb3JtYXREYXRlKGQsaCkpLHRoaXMuX2F0dGFjaG1lbnRzKCQoYSksZCksdGhpcy5fYXV0b1NpemUoZCksdGhpcy5fc2V0RGF0ZShkLGYpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShkKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGQpfX0sX2NoYW5nZURhdGVwaWNrZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX29wdGlvbkRhdGVwaWNrZXIoYSxiLGMpfSxfcmVmcmVzaERhdGVwaWNrZXI6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fZ2V0SW5zdChhKTtiJiZ0aGlzLl91cGRhdGVEYXRlcGlja2VyKGIpfSxfc2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9nZXRJbnN0KGEpO2MmJih0aGlzLl9zZXREYXRlKGMsYiksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihjKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoYykpfSxfZ2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9nZXRJbnN0KGEpO3JldHVybiBjJiYhYy5pbmxpbmUmJnRoaXMuX3NldERhdGVGcm9tRmllbGQoYyxiKSxjP3RoaXMuX2dldERhdGUoYyk6bnVsbH0sX2RvS2V5RG93bjpmdW5jdGlvbihhKXt2YXIgYj0kLmRhdGVwaWNrZXIuX2dldEluc3QoYS50YXJnZXQpLGM9ITAsZD1iLmRwRGl2LmlzKCIudWktZGF0ZXBpY2tlci1ydGwiKTtiLl9rZXlFdmVudD0hMDtpZigkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nKXN3aXRjaChhLmtleUNvZGUpe2Nhc2UgOTokLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksYz0hMTticmVhaztjYXNlIDEzOnZhciBlPSQoInRkLiIrJC5kYXRlcGlja2VyLl9kYXlPdmVyQ2xhc3MrIjpub3QoLiIrJC5kYXRlcGlja2VyLl9jdXJyZW50Q2xhc3MrIikiLGIuZHBEaXYpO2VbMF0mJiQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGEudGFyZ2V0LGIuc2VsZWN0ZWRNb250aCxiLnNlbGVjdGVkWWVhcixlWzBdKTt2YXIgZj0kLmRhdGVwaWNrZXIuX2dldChiLCJvblNlbGVjdCIpO2lmKGYpe3ZhciBnPSQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShiKTtmLmFwcGx5KGIuaW5wdXQ/Yi5pbnB1dFswXTpudWxsLFtnLGJdKX1lbHNlICQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTtyZXR1cm4hMTtjYXNlIDI3OiQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTticmVhaztjYXNlIDMzOiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShhLnRhcmdldCxhLmN0cmxLZXk/LSQuZGF0ZXBpY2tlci5fZ2V0KGIsInN0ZXBCaWdNb250aHMiKTotJC5kYXRlcGlja2VyLl9nZXQoYiwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzNDokLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoYS50YXJnZXQsYS5jdHJsS2V5PyskLmRhdGVwaWNrZXIuX2dldChiLCJzdGVwQmlnTW9udGhzIik6KyQuZGF0ZXBpY2tlci5fZ2V0KGIsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzU6KGEuY3RybEtleXx8YS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9jbGVhckRhdGUoYS50YXJnZXQpLGM9YS5jdHJsS2V5fHxhLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNjooYS5jdHJsS2V5fHxhLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShhLnRhcmdldCksYz1hLmN0cmxLZXl8fGEubWV0YUtleTticmVhaztjYXNlIDM3OihhLmN0cmxLZXl8fGEubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShhLnRhcmdldCxkPzE6LTEsIkQiKSxjPWEuY3RybEtleXx8YS5tZXRhS2V5LGEub3JpZ2luYWxFdmVudC5hbHRLZXkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShhLnRhcmdldCxhLmN0cmxLZXk/LSQuZGF0ZXBpY2tlci5fZ2V0KGIsInN0ZXBCaWdNb250aHMiKTotJC5kYXRlcGlja2VyLl9nZXQoYiwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzODooYS5jdHJsS2V5fHxhLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoYS50YXJnZXQsLTcsIkQiKSxjPWEuY3RybEtleXx8YS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzk6KGEuY3RybEtleXx8YS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGEudGFyZ2V0LGQ/LTE6MSwiRCIpLGM9YS5jdHJsS2V5fHxhLm1ldGFLZXksYS5vcmlnaW5hbEV2ZW50LmFsdEtleSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGEudGFyZ2V0LGEuY3RybEtleT8rJC5kYXRlcGlja2VyLl9nZXQoYiwic3RlcEJpZ01vbnRocyIpOiskLmRhdGVwaWNrZXIuX2dldChiLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDQwOihhLmN0cmxLZXl8fGEubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShhLnRhcmdldCw3LCJEIiksYz1hLmN0cmxLZXl8fGEubWV0YUtleTticmVhaztkZWZhdWx0OmM9ITF9ZWxzZSBhLmtleUNvZGU9PTM2JiZhLmN0cmxLZXk/JC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0aGlzKTpjPSExO2MmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSl9LF9kb0tleVByZXNzOmZ1bmN0aW9uKGEpe3ZhciBiPSQuZGF0ZXBpY2tlci5fZ2V0SW5zdChhLnRhcmdldCk7aWYoJC5kYXRlcGlja2VyLl9nZXQoYiwiY29uc3RyYWluSW5wdXQiKSl7dmFyIGM9JC5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKCQuZGF0ZXBpY2tlci5fZ2V0KGIsImRhdGVGb3JtYXQiKSksZD1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuY2hhckNvZGU9PXVuZGVmaW5lZD9hLmtleUNvZGU6YS5jaGFyQ29kZSk7cmV0dXJuIGEuY3RybEtleXx8YS5tZXRhS2V5fHxkPCIgInx8IWN8fGMuaW5kZXhPZihkKT4tMX19LF9kb0tleVVwOmZ1bmN0aW9uKGEpe3ZhciBiPSQuZGF0ZXBpY2tlci5fZ2V0SW5zdChhLnRhcmdldCk7aWYoYi5pbnB1dC52YWwoKSE9Yi5sYXN0VmFsKXRyeXt2YXIgYz0kLmRhdGVwaWNrZXIucGFyc2VEYXRlKCQuZGF0ZXBpY2tlci5fZ2V0KGIsImRhdGVGb3JtYXQiKSxiLmlucHV0P2IuaW5wdXQudmFsKCk6bnVsbCwkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhiKSk7YyYmKCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChiKSwkLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShiKSwkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIoYikpfWNhdGNoKGQpeyQuZGF0ZXBpY2tlci5sb2coZCl9cmV0dXJuITB9LF9zaG93RGF0ZXBpY2tlcjpmdW5jdGlvbihhKXthPWEudGFyZ2V0fHxhLGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9ImlucHV0IiYmKGE9JCgiaW5wdXQiLGEucGFyZW50Tm9kZSlbMF0pO2lmKCQuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoYSl8fCQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT1hKXJldHVybjt2YXIgYj0kLmRhdGVwaWNrZXIuX2dldEluc3QoYSk7JC5kYXRlcGlja2VyLl9jdXJJbnN0JiYkLmRhdGVwaWNrZXIuX2N1ckluc3QhPWImJigkLmRhdGVwaWNrZXIuX2N1ckluc3QuZHBEaXYuc3RvcCghMCwhMCksYiYmJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigkLmRhdGVwaWNrZXIuX2N1ckluc3QuaW5wdXRbMF0pKTt2YXIgYz0kLmRhdGVwaWNrZXIuX2dldChiLCJiZWZvcmVTaG93IiksZD1jP2MuYXBwbHkoYSxbYSxiXSk6e307aWYoZD09PSExKXJldHVybjtleHRlbmRSZW1vdmUoYi5zZXR0aW5ncyxkKSxiLmxhc3RWYWw9bnVsbCwkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD1hLCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChiKSwkLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYoYS52YWx1ZT0iIiksJC5kYXRlcGlja2VyLl9wb3N8fCgkLmRhdGVwaWNrZXIuX3Bvcz0kLmRhdGVwaWNrZXIuX2ZpbmRQb3MoYSksJC5kYXRlcGlja2VyLl9wb3NbMV0rPWEub2Zmc2V0SGVpZ2h0KTt2YXIgZT0hMTskKGEpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIGV8PSQodGhpcykuY3NzKCJwb3NpdGlvbiIpPT0iZml4ZWQiLCFlfSksZSYmJC5icm93c2VyLm9wZXJhJiYoJC5kYXRlcGlja2VyLl9wb3NbMF0tPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LCQuZGF0ZXBpY2tlci5fcG9zWzFdLT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKTt2YXIgZj17bGVmdDokLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6JC5kYXRlcGlja2VyLl9wb3NbMV19OyQuZGF0ZXBpY2tlci5fcG9zPW51bGwsYi5kcERpdi5lbXB0eSgpLGIuZHBEaXYuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6ImJsb2NrIix0b3A6Ii0xMDAwcHgifSksJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGIpLGY9JC5kYXRlcGlja2VyLl9jaGVja09mZnNldChiLGYsZSksYi5kcERpdi5jc3Moe3Bvc2l0aW9uOiQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJiQuYmxvY2tVST8ic3RhdGljIjplPyJmaXhlZCI6ImFic29sdXRlIixkaXNwbGF5OiJub25lIixsZWZ0OmYubGVmdCsicHgiLHRvcDpmLnRvcCsicHgifSk7aWYoIWIuaW5saW5lKXt2YXIgZz0kLmRhdGVwaWNrZXIuX2dldChiLCJzaG93QW5pbSIpLGg9JC5kYXRlcGlja2VyLl9nZXQoYiwiZHVyYXRpb24iKSxpPWZ1bmN0aW9uKCl7dmFyIGE9Yi5kcERpdi5maW5kKCJpZnJhbWUudWktZGF0ZXBpY2tlci1jb3ZlciIpO2lmKCEhYS5sZW5ndGgpe3ZhciBjPSQuZGF0ZXBpY2tlci5fZ2V0Qm9yZGVycyhiLmRwRGl2KTthLmNzcyh7bGVmdDotY1swXSx0b3A6LWNbMV0sd2lkdGg6Yi5kcERpdi5vdXRlcldpZHRoKCksaGVpZ2h0OmIuZHBEaXYub3V0ZXJIZWlnaHQoKX0pfX07Yi5kcERpdi56SW5kZXgoJChhKS56SW5kZXgoKSsxKSwkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nPSEwLCQuZWZmZWN0cyYmJC5lZmZlY3RzW2ddP2IuZHBEaXYuc2hvdyhnLCQuZGF0ZXBpY2tlci5fZ2V0KGIsInNob3dPcHRpb25zIiksaCxpKTpiLmRwRGl2W2d8fCJzaG93Il0oZz9oOm51bGwsaSksKCFnfHwhaCkmJmkoKSxiLmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhYi5pbnB1dC5pcygiOmRpc2FibGVkIikmJmIuaW5wdXQuZm9jdXMoKSwkLmRhdGVwaWNrZXIuX2N1ckluc3Q9Yn19LF91cGRhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7Yi5tYXhSb3dzPTQ7dmFyIGM9JC5kYXRlcGlja2VyLl9nZXRCb3JkZXJzKGEuZHBEaXYpO2luc3RBY3RpdmU9YSxhLmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVyYXRlSFRNTChhKSksdGhpcy5fYXR0YWNoSGFuZGxlcnMoYSk7dmFyIGQ9YS5kcERpdi5maW5kKCJpZnJhbWUudWktZGF0ZXBpY2tlci1jb3ZlciIpOyFkLmxlbmd0aHx8ZC5jc3Moe2xlZnQ6LWNbMF0sdG9wOi1jWzFdLHdpZHRoOmEuZHBEaXYub3V0ZXJXaWR0aCgpLGhlaWdodDphLmRwRGl2Lm91dGVySGVpZ2h0KCl9KSxhLmRwRGl2LmZpbmQoIi4iK3RoaXMuX2RheU92ZXJDbGFzcysiIGEiKS5tb3VzZW92ZXIoKTt2YXIgZT10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhhKSxmPWVbMV0sZz0xNzthLmRwRGl2LnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLTIgdWktZGF0ZXBpY2tlci1tdWx0aS0zIHVpLWRhdGVwaWNrZXItbXVsdGktNCIpLndpZHRoKCIiKSxmPjEmJmEuZHBEaXYuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktIitmKS5jc3MoIndpZHRoIixnKmYrImVtIiksYS5kcERpdlsoZVswXSE9MXx8ZVsxXSE9MT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItbXVsdGkiKSxhLmRwRGl2Wyh0aGlzLl9nZXQoYSwiaXNSVEwiKT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItcnRsIiksYT09JC5kYXRlcGlja2VyLl9jdXJJbnN0JiYkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZhLmlucHV0JiZhLmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhYS5pbnB1dC5pcygiOmRpc2FibGVkIikmJmEuaW5wdXRbMF0hPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJmEuaW5wdXQuZm9jdXMoKTtpZihhLnllYXJzaHRtbCl7dmFyIGg9YS55ZWFyc2h0bWw7c2V0VGltZW91dChmdW5jdGlvbigpe2g9PT1hLnllYXJzaHRtbCYmYS55ZWFyc2h0bWwmJmEuZHBEaXYuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhcjpmaXJzdCIpLnJlcGxhY2VXaXRoKGEueWVhcnNodG1sKSxoPWEueWVhcnNodG1sPW51bGx9LDApfX0sX2dldEJvcmRlcnM6ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oYSl7cmV0dXJue3RoaW46MSxtZWRpdW06Mix0aGljazozfVthXXx8YX07cmV0dXJuW3BhcnNlRmxvYXQoYihhLmNzcygiYm9yZGVyLWxlZnQtd2lkdGgiKSkpLHBhcnNlRmxvYXQoYihhLmNzcygiYm9yZGVyLXRvcC13aWR0aCIpKSldfSxfY2hlY2tPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZHBEaXYub3V0ZXJXaWR0aCgpLGU9YS5kcERpdi5vdXRlckhlaWdodCgpLGY9YS5pbnB1dD9hLmlucHV0Lm91dGVyV2lkdGgoKTowLGc9YS5pbnB1dD9hLmlucHV0Lm91dGVySGVpZ2h0KCk6MCxoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCsoYz8wOiQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KyhjPzA6JChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpO3JldHVybiBiLmxlZnQtPXRoaXMuX2dldChhLCJpc1JUTCIpP2QtZjowLGIubGVmdC09YyYmYi5sZWZ0PT1hLmlucHV0Lm9mZnNldCgpLmxlZnQ/JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsYi50b3AtPWMmJmIudG9wPT1hLmlucHV0Lm9mZnNldCgpLnRvcCtnPyQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpOjAsYi5sZWZ0LT1NYXRoLm1pbihiLmxlZnQsYi5sZWZ0K2Q+aCYmaD5kP01hdGguYWJzKGIubGVmdCtkLWgpOjApLGIudG9wLT1NYXRoLm1pbihiLnRvcCxiLnRvcCtlPmkmJmk+ZT9NYXRoLmFicyhlK2cpOjApLGJ9LF9maW5kUG9zOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldEluc3QoYSksYz10aGlzLl9nZXQoYiwiaXNSVEwiKTt3aGlsZShhJiYoYS50eXBlPT0iaGlkZGVuInx8YS5ub2RlVHlwZSE9MXx8JC5leHByLmZpbHRlcnMuaGlkZGVuKGEpKSlhPWFbYz8icHJldmlvdXNTaWJsaW5nIjoibmV4dFNpYmxpbmciXTt2YXIgZD0kKGEpLm9mZnNldCgpO3JldHVybltkLmxlZnQsZC50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fY3VySW5zdDtpZighYnx8YSYmYiE9JC5kYXRhKGEsUFJPUF9OQU1FKSlyZXR1cm47aWYodGhpcy5fZGF0ZXBpY2tlclNob3dpbmcpe3ZhciBjPXRoaXMuX2dldChiLCJzaG93QW5pbSIpLGQ9dGhpcy5fZ2V0KGIsImR1cmF0aW9uIiksZT1mdW5jdGlvbigpeyQuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyhiKX07JC5lZmZlY3RzJiYkLmVmZmVjdHNbY10/Yi5kcERpdi5oaWRlKGMsJC5kYXRlcGlja2VyLl9nZXQoYiwic2hvd09wdGlvbnMiKSxkLGUpOmIuZHBEaXZbYz09InNsaWRlRG93biI/InNsaWRlVXAiOmM9PSJmYWRlSW4iPyJmYWRlT3V0IjoiaGlkZSJdKGM/ZDpudWxsLGUpLGN8fGUoKSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMTt2YXIgZj10aGlzLl9nZXQoYiwib25DbG9zZSIpO2YmJmYuYXBwbHkoYi5pbnB1dD9iLmlucHV0WzBdOm51bGwsW2IuaW5wdXQ/Yi5pbnB1dC52YWwoKToiIixiXSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMCIsdG9wOiItMTAwcHgifSksJC5ibG9ja1VJJiYoJC51bmJsb2NrVUkoKSwkKCJib2R5IikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITF9fSxfdGlkeURpYWxvZzpmdW5jdGlvbihhKXthLmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS51bmJpbmQoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24oYSl7aWYoISQuZGF0ZXBpY2tlci5fY3VySW5zdClyZXR1cm47dmFyIGI9JChhLnRhcmdldCksYz0kLmRhdGVwaWNrZXIuX2dldEluc3QoYlswXSk7KGJbMF0uaWQhPSQuZGF0ZXBpY2tlci5fbWFpbkRpdklkJiZiLnBhcmVudHMoIiMiKyQuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGg9PTAmJiFiLmhhc0NsYXNzKCQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYhYi5jbG9zZXN0KCIuIiskLmRhdGVwaWNrZXIuX3RyaWdnZXJDbGFzcykubGVuZ3RoJiYkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYoISQuZGF0ZXBpY2tlci5faW5EaWFsb2d8fCEkLmJsb2NrVUkpfHxiLmhhc0NsYXNzKCQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYkLmRhdGVwaWNrZXIuX2N1ckluc3QhPWMpJiYkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LF9hZGp1c3REYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0kKGEpLGU9dGhpcy5fZ2V0SW5zdChkWzBdKTtpZih0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihkWzBdKSlyZXR1cm47dGhpcy5fYWRqdXN0SW5zdERhdGUoZSxiKyhjPT0iTSI/dGhpcy5fZ2V0KGUsInNob3dDdXJyZW50QXRQb3MiKTowKSxjKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGUpfSxfZ290b1RvZGF5OmZ1bmN0aW9uKGEpe3ZhciBiPSQoYSksYz10aGlzLl9nZXRJbnN0KGJbMF0pO2lmKHRoaXMuX2dldChjLCJnb3RvQ3VycmVudCIpJiZjLmN1cnJlbnREYXkpYy5zZWxlY3RlZERheT1jLmN1cnJlbnREYXksYy5kcmF3TW9udGg9Yy5zZWxlY3RlZE1vbnRoPWMuY3VycmVudE1vbnRoLGMuZHJhd1llYXI9Yy5zZWxlY3RlZFllYXI9Yy5jdXJyZW50WWVhcjtlbHNle3ZhciBkPW5ldyBEYXRlO2Muc2VsZWN0ZWREYXk9ZC5nZXREYXRlKCksYy5kcmF3TW9udGg9Yy5zZWxlY3RlZE1vbnRoPWQuZ2V0TW9udGgoKSxjLmRyYXdZZWFyPWMuc2VsZWN0ZWRZZWFyPWQuZ2V0RnVsbFllYXIoKX10aGlzLl9ub3RpZnlDaGFuZ2UoYyksdGhpcy5fYWRqdXN0RGF0ZShiKX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9JChhKSxlPXRoaXMuX2dldEluc3QoZFswXSk7ZVsic2VsZWN0ZWQiKyhjPT0iTSI/Ik1vbnRoIjoiWWVhciIpXT1lWyJkcmF3IisoYz09Ik0iPyJNb250aCI6IlllYXIiKV09cGFyc2VJbnQoYi5vcHRpb25zW2Iuc2VsZWN0ZWRJbmRleF0udmFsdWUsMTApLHRoaXMuX25vdGlmeUNoYW5nZShlKSx0aGlzLl9hZGp1c3REYXRlKGQpfSxfc2VsZWN0RGF5OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSQoYSk7aWYoJChkKS5oYXNDbGFzcyh0aGlzLl91bnNlbGVjdGFibGVDbGFzcyl8fHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKGVbMF0pKXJldHVybjt2YXIgZj10aGlzLl9nZXRJbnN0KGVbMF0pO2Yuc2VsZWN0ZWREYXk9Zi5jdXJyZW50RGF5PSQoImEiLGQpLmh0bWwoKSxmLnNlbGVjdGVkTW9udGg9Zi5jdXJyZW50TW9udGg9YixmLnNlbGVjdGVkWWVhcj1mLmN1cnJlbnRZZWFyPWMsdGhpcy5fc2VsZWN0RGF0ZShhLHRoaXMuX2Zvcm1hdERhdGUoZixmLmN1cnJlbnREYXksZi5jdXJyZW50TW9udGgsZi5jdXJyZW50WWVhcikpfSxfY2xlYXJEYXRlOmZ1bmN0aW9uKGEpe3ZhciBiPSQoYSksYz10aGlzLl9nZXRJbnN0KGJbMF0pO3RoaXMuX3NlbGVjdERhdGUoYiwiIil9LF9zZWxlY3REYXRlOmZ1bmN0aW9uKGEsYil7dmFyIGM9JChhKSxkPXRoaXMuX2dldEluc3QoY1swXSk7Yj1iIT1udWxsP2I6dGhpcy5fZm9ybWF0RGF0ZShkKSxkLmlucHV0JiZkLmlucHV0LnZhbChiKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoZCk7dmFyIGU9dGhpcy5fZ2V0KGQsIm9uU2VsZWN0Iik7ZT9lLmFwcGx5KGQuaW5wdXQ/ZC5pbnB1dFswXTpudWxsLFtiLGRdKTpkLmlucHV0JiZkLmlucHV0LnRyaWdnZXIoImNoYW5nZSIpLGQuaW5saW5lP3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIoZCk6KHRoaXMuX2hpZGVEYXRlcGlja2VyKCksdGhpcy5fbGFzdElucHV0PWQuaW5wdXRbMF0sdHlwZW9mIGQuaW5wdXRbMF0hPSJvYmplY3QiJiZkLmlucHV0LmZvY3VzKCksdGhpcy5fbGFzdElucHV0PW51bGwpfSxfdXBkYXRlQWx0ZXJuYXRlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJhbHRGaWVsZCIpO2lmKGIpe3ZhciBjPXRoaXMuX2dldChhLCJhbHRGb3JtYXQiKXx8dGhpcy5fZ2V0KGEsImRhdGVGb3JtYXQiKSxkPXRoaXMuX2dldERhdGUoYSksZT10aGlzLmZvcm1hdERhdGUoYyxkLHRoaXMuX2dldEZvcm1hdENvbmZpZyhhKSk7JChiKS5lYWNoKGZ1bmN0aW9uKCl7JCh0aGlzKS52YWwoZSl9KX19LG5vV2Vla2VuZHM6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXREYXkoKTtyZXR1cm5bYj4wJiZiPDYsIiJdfSxpc284NjAxV2VlazpmdW5jdGlvbihhKXt2YXIgYj1uZXcgRGF0ZShhLmdldFRpbWUoKSk7Yi5zZXREYXRlKGIuZ2V0RGF0ZSgpKzQtKGIuZ2V0RGF5KCl8fDcpKTt2YXIgYz1iLmdldFRpbWUoKTtyZXR1cm4gYi5zZXRNb250aCgwKSxiLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKChjLWIpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PW51bGx8fGI9PW51bGwpdGhyb3ciSW52YWxpZCBhcmd1bWVudHMiO2I9dHlwZW9mIGI9PSJvYmplY3QiP2IudG9TdHJpbmcoKTpiKyIiO2lmKGI9PSIiKXJldHVybiBudWxsO3ZhciBkPShjP2Muc2hvcnRZZWFyQ3V0b2ZmOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5zaG9ydFllYXJDdXRvZmY7ZD10eXBlb2YgZCE9InN0cmluZyI/ZDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGQsMTApO3ZhciBlPShjP2MuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxmPShjP2MuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGc9KGM/Yy5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxoPShjP2MubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxpPS0xLGo9LTEsaz0tMSxsPS0xLG09ITEsbj1mdW5jdGlvbihiKXt2YXIgYz1zKzE8YS5sZW5ndGgmJmEuY2hhckF0KHMrMSk9PWI7cmV0dXJuIGMmJnMrKyxjfSxvPWZ1bmN0aW9uKGEpe3ZhciBjPW4oYSksZD1hPT0iQCI/MTQ6YT09IiEiPzIwOmE9PSJ5IiYmYz80OmE9PSJvIj8zOjIsZT1uZXcgUmVnRXhwKCJeXFxkezEsIitkKyJ9IiksZj1iLnN1YnN0cmluZyhyKS5tYXRjaChlKTtpZighZil0aHJvdyJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiAiK3I7cmV0dXJuIHIrPWZbMF0ubGVuZ3RoLHBhcnNlSW50KGZbMF0sMTApfSxwPWZ1bmN0aW9uKGEsYyxkKXt2YXIgZT0kLm1hcChuKGEpP2Q6YyxmdW5jdGlvbihhLGIpe3JldHVybltbYixhXV19KS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuLShhWzFdLmxlbmd0aC1iWzFdLmxlbmd0aCl9KSxmPS0xOyQuZWFjaChlLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9Y1sxXTtpZihiLnN1YnN0cihyLGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT1kLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGY9Y1swXSxyKz1kLmxlbmd0aCwhMX0pO2lmKGYhPS0xKXJldHVybiBmKzE7dGhyb3ciVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uICIrcn0scT1mdW5jdGlvbigpe2lmKGIuY2hhckF0KHIpIT1hLmNoYXJBdChzKSl0aHJvdyJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gIityO3IrK30scj0wO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKWlmKG0pYS5jaGFyQXQocyk9PSInIiYmIW4oIiciKT9tPSExOnEoKTtlbHNlIHN3aXRjaChhLmNoYXJBdChzKSl7Y2FzZSJkIjprPW8oImQiKTticmVhaztjYXNlIkQiOnAoIkQiLGUsZik7YnJlYWs7Y2FzZSJvIjpsPW8oIm8iKTticmVhaztjYXNlIm0iOmo9bygibSIpO2JyZWFrO2Nhc2UiTSI6aj1wKCJNIixnLGgpO2JyZWFrO2Nhc2UieSI6aT1vKCJ5Iik7YnJlYWs7Y2FzZSJAIjp2YXIgdD1uZXcgRGF0ZShvKCJAIikpO2k9dC5nZXRGdWxsWWVhcigpLGo9dC5nZXRNb250aCgpKzEsaz10LmdldERhdGUoKTticmVhaztjYXNlIiEiOnZhciB0PW5ldyBEYXRlKChvKCIhIiktdGhpcy5fdGlja3NUbzE5NzApLzFlNCk7aT10LmdldEZ1bGxZZWFyKCksaj10LmdldE1vbnRoKCkrMSxrPXQuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiJyI6bigiJyIpP3EoKTptPSEwO2JyZWFrO2RlZmF1bHQ6cSgpfWlmKHI8Yi5sZW5ndGgpdGhyb3ciRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiAiK2Iuc3Vic3RyaW5nKHIpO2k9PS0xP2k9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpOmk8MTAwJiYoaSs9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArKGk8PWQ/MDotMTAwKSk7aWYobD4tMSl7aj0xLGs9bDtkb3t2YXIgdT10aGlzLl9nZXREYXlzSW5Nb250aChpLGotMSk7aWYoazw9dSlicmVhaztqKyssay09dX13aGlsZSghMCl9dmFyIHQ9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaSxqLTEsaykpO2lmKHQuZ2V0RnVsbFllYXIoKSE9aXx8dC5nZXRNb250aCgpKzEhPWp8fHQuZ2V0RGF0ZSgpIT1rKXRocm93IkludmFsaWQgZGF0ZSI7cmV0dXJuIHR9LEFUT006Inl5LW1tLWRkIixDT09LSUU6IkQsIGRkIE0geXkiLElTT184NjAxOiJ5eS1tbS1kZCIsUkZDXzgyMjoiRCwgZCBNIHkiLFJGQ184NTA6IkRELCBkZC1NLXkiLFJGQ18xMDM2OiJELCBkIE0geSIsUkZDXzExMjM6IkQsIGQgTSB5eSIsUkZDXzI4MjI6IkQsIGQgTSB5eSIsUlNTOiJELCBkIE0geSIsVElDS1M6IiEiLFRJTUVTVEFNUDoiQCIsVzNDOiJ5eS1tbS1kZCIsX3RpY2tzVG8xOTcwOig3MTg2ODUrTWF0aC5mbG9vcig0OTIuNSktTWF0aC5mbG9vcigxOS43KStNYXRoLmZsb29yKDQuOTI1KSkqMjQqNjAqNjAqMWU3LGZvcm1hdERhdGU6ZnVuY3Rpb24oYSxiLGMpe2lmKCFiKXJldHVybiIiO3ZhciBkPShjP2MuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxlPShjP2MuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGY9KGM/Yy5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxnPShjP2MubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKGIpe3ZhciBjPW0rMTxhLmxlbmd0aCYmYS5jaGFyQXQobSsxKT09YjtyZXR1cm4gYyYmbSsrLGN9LGk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIiK2I7aWYoaChhKSl3aGlsZShkLmxlbmd0aDxjKWQ9IjAiK2Q7cmV0dXJuIGR9LGo9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGgoYSk/ZFtiXTpjW2JdfSxrPSIiLGw9ITE7aWYoYilmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKylpZihsKWEuY2hhckF0KG0pPT0iJyImJiFoKCInIik/bD0hMTprKz1hLmNoYXJBdChtKTtlbHNlIHN3aXRjaChhLmNoYXJBdChtKSl7Y2FzZSJkIjprKz1pKCJkIixiLmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOmsrPWooIkQiLGIuZ2V0RGF5KCksZCxlKTticmVhaztjYXNlIm8iOmsrPWkoIm8iLE1hdGgucm91bmQoKChuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKSkuZ2V0VGltZSgpLShuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksMCwwKSkuZ2V0VGltZSgpKS84NjRlNSksMyk7YnJlYWs7Y2FzZSJtIjprKz1pKCJtIixiLmdldE1vbnRoKCkrMSwyKTticmVhaztjYXNlIk0iOmsrPWooIk0iLGIuZ2V0TW9udGgoKSxmLGcpO2JyZWFrO2Nhc2UieSI6ays9aCgieSIpP2IuZ2V0RnVsbFllYXIoKTooYi5nZXRZZWFyKCklMTAwPDEwPyIwIjoiIikrYi5nZXRZZWFyKCklMTAwO2JyZWFrO2Nhc2UiQCI6ays9Yi5nZXRUaW1lKCk7YnJlYWs7Y2FzZSIhIjprKz1iLmdldFRpbWUoKSoxZTQrdGhpcy5fdGlja3NUbzE5NzA7YnJlYWs7Y2FzZSInIjpoKCInIik/ays9IiciOmw9ITA7YnJlYWs7ZGVmYXVsdDprKz1hLmNoYXJBdChtKX1yZXR1cm4ga30sX3Bvc3NpYmxlQ2hhcnM6ZnVuY3Rpb24oYSl7dmFyIGI9IiIsYz0hMSxkPWZ1bmN0aW9uKGIpe3ZhciBjPWUrMTxhLmxlbmd0aCYmYS5jaGFyQXQoZSsxKT09YjtyZXR1cm4gYyYmZSsrLGN9O2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKWlmKGMpYS5jaGFyQXQoZSk9PSInIiYmIWQoIiciKT9jPSExOmIrPWEuY2hhckF0KGUpO2Vsc2Ugc3dpdGNoKGEuY2hhckF0KGUpKXtjYXNlImQiOmNhc2UibSI6Y2FzZSJ5IjpjYXNlIkAiOmIrPSIwMTIzNDU2Nzg5IjticmVhaztjYXNlIkQiOmNhc2UiTSI6cmV0dXJuIG51bGw7Y2FzZSInIjpkKCInIik/Yis9IiciOmM9ITA7YnJlYWs7ZGVmYXVsdDpiKz1hLmNoYXJBdChlKX1yZXR1cm4gYn0sX2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnNldHRpbmdzW2JdIT09dW5kZWZpbmVkP2Euc2V0dGluZ3NbYl06dGhpcy5fZGVmYXVsdHNbYl19LF9zZXREYXRlRnJvbUZpZWxkOmZ1bmN0aW9uKGEsYil7aWYoYS5pbnB1dC52YWwoKT09YS5sYXN0VmFsKXJldHVybjt2YXIgYz10aGlzLl9nZXQoYSwiZGF0ZUZvcm1hdCIpLGQ9YS5sYXN0VmFsPWEuaW5wdXQ/YS5pbnB1dC52YWwoKTpudWxsLGUsZjtlPWY9dGhpcy5fZ2V0RGVmYXVsdERhdGUoYSk7dmFyIGc9dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGEpO3RyeXtlPXRoaXMucGFyc2VEYXRlKGMsZCxnKXx8Zn1jYXRjaChoKXt0aGlzLmxvZyhoKSxkPWI/IiI6ZH1hLnNlbGVjdGVkRGF5PWUuZ2V0RGF0ZSgpLGEuZHJhd01vbnRoPWEuc2VsZWN0ZWRNb250aD1lLmdldE1vbnRoKCksYS5kcmF3WWVhcj1hLnNlbGVjdGVkWWVhcj1lLmdldEZ1bGxZZWFyKCksYS5jdXJyZW50RGF5PWQ/ZS5nZXREYXRlKCk6MCxhLmN1cnJlbnRNb250aD1kP2UuZ2V0TW9udGgoKTowLGEuY3VycmVudFllYXI9ZD9lLmdldEZ1bGxZZWFyKCk6MCx0aGlzLl9hZGp1c3RJbnN0RGF0ZShhKX0sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heChhLHRoaXMuX2RldGVybWluZURhdGUoYSx0aGlzLl9nZXQoYSwiZGVmYXVsdERhdGUiKSxuZXcgRGF0ZSkpfSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IERhdGU7cmV0dXJuIGIuc2V0RGF0ZShiLmdldERhdGUoKSthKSxifSxlPWZ1bmN0aW9uKGIpe3RyeXtyZXR1cm4gJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgkLmRhdGVwaWNrZXIuX2dldChhLCJkYXRlRm9ybWF0IiksYiwkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhhKSl9Y2F0Y2goYyl7fXZhciBkPShiLnRvTG93ZXJDYXNlKCkubWF0Y2goL15jLyk/JC5kYXRlcGlja2VyLl9nZXREYXRlKGEpOm51bGwpfHxuZXcgRGF0ZSxlPWQuZ2V0RnVsbFllYXIoKSxmPWQuZ2V0TW9udGgoKSxnPWQuZ2V0RGF0ZSgpLGg9LyhbKy1dP1swLTldKylccyooZHxEfHd8V3xtfE18eXxZKT8vZyxpPWguZXhlYyhiKTt3aGlsZShpKXtzd2l0Y2goaVsyXXx8ImQiKXtjYXNlImQiOmNhc2UiRCI6Zys9cGFyc2VJbnQoaVsxXSwxMCk7YnJlYWs7Y2FzZSJ3IjpjYXNlIlciOmcrPXBhcnNlSW50KGlbMV0sMTApKjc7YnJlYWs7Y2FzZSJtIjpjYXNlIk0iOmYrPXBhcnNlSW50KGlbMV0sMTApLGc9TWF0aC5taW4oZywkLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKGUsZikpO2JyZWFrO2Nhc2UieSI6Y2FzZSJZIjplKz1wYXJzZUludChpWzFdLDEwKSxnPU1hdGgubWluKGcsJC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChlLGYpKX1pPWguZXhlYyhiKX1yZXR1cm4gbmV3IERhdGUoZSxmLGcpfSxmPWI9PW51bGx8fGI9PT0iIj9jOnR5cGVvZiBiPT0ic3RyaW5nIj9lKGIpOnR5cGVvZiBiPT0ibnVtYmVyIj9pc05hTihiKT9jOmQoYik6bmV3IERhdGUoYi5nZXRUaW1lKCkpO3JldHVybiBmPWYmJmYudG9TdHJpbmcoKT09IkludmFsaWQgRGF0ZSI/YzpmLGYmJihmLnNldEhvdXJzKDApLGYuc2V0TWludXRlcygwKSxmLnNldFNlY29uZHMoMCksZi5zZXRNaWxsaXNlY29uZHMoMCkpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGYpfSxfZGF5bGlnaHRTYXZpbmdBZGp1c3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/KGEuc2V0SG91cnMoYS5nZXRIb3VycygpPjEyP2EuZ2V0SG91cnMoKSsyOjApLGEpOm51bGx9LF9zZXREYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0hYixlPWEuc2VsZWN0ZWRNb250aCxmPWEuc2VsZWN0ZWRZZWFyLGc9dGhpcy5fcmVzdHJpY3RNaW5NYXgoYSx0aGlzLl9kZXRlcm1pbmVEYXRlKGEsYixuZXcgRGF0ZSkpO2Euc2VsZWN0ZWREYXk9YS5jdXJyZW50RGF5PWcuZ2V0RGF0ZSgpLGEuZHJhd01vbnRoPWEuc2VsZWN0ZWRNb250aD1hLmN1cnJlbnRNb250aD1nLmdldE1vbnRoKCksYS5kcmF3WWVhcj1hLnNlbGVjdGVkWWVhcj1hLmN1cnJlbnRZZWFyPWcuZ2V0RnVsbFllYXIoKSwoZSE9YS5zZWxlY3RlZE1vbnRofHxmIT1hLnNlbGVjdGVkWWVhcikmJiFjJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoYSksdGhpcy5fYWRqdXN0SW5zdERhdGUoYSksYS5pbnB1dCYmYS5pbnB1dC52YWwoZD8iIjp0aGlzLl9mb3JtYXREYXRlKGEpKX0sX2dldERhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9IWEuY3VycmVudFllYXJ8fGEuaW5wdXQmJmEuaW5wdXQudmFsKCk9PSIiP251bGw6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoYS5jdXJyZW50WWVhcixhLmN1cnJlbnRNb250aCxhLmN1cnJlbnREYXkpKTtyZXR1cm4gYn0sX2F0dGFjaEhhbmRsZXJzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJzdGVwTW9udGhzIiksYz0iIyIrYS5pZC5yZXBsYWNlKC9cXFxcL2csIlxcIik7YS5kcERpdi5maW5kKCJbZGF0YS1oYW5kbGVyXSIpLm1hcChmdW5jdGlvbigpe3ZhciBhPXtwcmV2OmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoYywtYiwiTSIpfSxuZXh0OmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoYywrYiwiTSIpfSxoaWRlOmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LHRvZGF5OmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShjKX0sc2VsZWN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9zZWxlY3REYXkoYywrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtbW9udGgiKSwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEteWVhciIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiB3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKGMsdGhpcywiTSIpLCExfSxzZWxlY3RZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIoYyx0aGlzLCJZIiksITF9fTskKHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtZXZlbnQiKSxhW3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWhhbmRsZXIiKV0pfSl9LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IERhdGU7Yj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKSk7dmFyIGM9dGhpcy5fZ2V0KGEsImlzUlRMIiksZD10aGlzLl9nZXQoYSwic2hvd0J1dHRvblBhbmVsIiksZT10aGlzLl9nZXQoYSwiaGlkZUlmTm9QcmV2TmV4dCIpLGY9dGhpcy5fZ2V0KGEsIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXQiKSxnPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGEpLGg9dGhpcy5fZ2V0KGEsInNob3dDdXJyZW50QXRQb3MiKSxpPXRoaXMuX2dldChhLCJzdGVwTW9udGhzIiksaj1nWzBdIT0xfHxnWzFdIT0xLGs9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoYS5jdXJyZW50RGF5P25ldyBEYXRlKGEuY3VycmVudFllYXIsYS5jdXJyZW50TW9udGgsYS5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLGw9dGhpcy5fZ2V0TWluTWF4RGF0ZShhLCJtaW4iKSxtPXRoaXMuX2dldE1pbk1heERhdGUoYSwibWF4Iiksbj1hLmRyYXdNb250aC1oLG89YS5kcmF3WWVhcjtuPDAmJihuKz0xMixvLS0pO2lmKG0pe3ZhciBwPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG0uZ2V0RnVsbFllYXIoKSxtLmdldE1vbnRoKCktZ1swXSpnWzFdKzEsbS5nZXREYXRlKCkpKTtwPWwmJnA8bD9sOnA7d2hpbGUodGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUobyxuLDEpKT5wKW4tLSxuPDAmJihuPTExLG8tLSl9YS5kcmF3TW9udGg9bixhLmRyYXdZZWFyPW87dmFyIHE9dGhpcy5fZ2V0KGEsInByZXZUZXh0Iik7cT1mP3RoaXMuZm9ybWF0RGF0ZShxLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG8sbi1pLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoYSkpOnE7dmFyIHI9dGhpcy5fY2FuQWRqdXN0TW9udGgoYSwtMSxvLG4pPyc8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0icHJldiIgZGF0YS1ldmVudD0iY2xpY2siIHRpdGxlPSInK3ErJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysoYz8iZSI6InciKSsnIj4nK3ErIjwvc3Bhbj48L2E+IjplPyIiOic8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQiIHRpdGxlPSInK3ErJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysoYz8iZSI6InciKSsnIj4nK3ErIjwvc3Bhbj48L2E+IixzPXRoaXMuX2dldChhLCJuZXh0VGV4dCIpO3M9Zj90aGlzLmZvcm1hdERhdGUocyx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShvLG4raSwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGEpKTpzO3ZhciB0PXRoaXMuX2NhbkFkanVzdE1vbnRoKGEsMSxvLG4pPyc8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0ibmV4dCIgZGF0YS1ldmVudD0iY2xpY2siIHRpdGxlPSInK3MrJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysoYz8idyI6ImUiKSsnIj4nK3MrIjwvc3Bhbj48L2E+IjplPyIiOic8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQiIHRpdGxlPSInK3MrJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysoYz8idyI6ImUiKSsnIj4nK3MrIjwvc3Bhbj48L2E+Iix1PXRoaXMuX2dldChhLCJjdXJyZW50VGV4dCIpLHY9dGhpcy5fZ2V0KGEsImdvdG9DdXJyZW50IikmJmEuY3VycmVudERheT9rOmI7dT1mP3RoaXMuZm9ybWF0RGF0ZSh1LHYsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGEpKTp1O3ZhciB3PWEuaW5saW5lPyIiOic8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0iaGlkZSIgZGF0YS1ldmVudD0iY2xpY2siPicrdGhpcy5fZ2V0KGEsImNsb3NlVGV4dCIpKyI8L2J1dHRvbj4iLHg9ZD8nPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50Ij4nKyhjP3c6IiIpKyh0aGlzLl9pc0luUmFuZ2UoYSx2KT8nPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWN1cnJlbnQgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVyLWFsbCIgZGF0YS1oYW5kbGVyPSJ0b2RheSIgZGF0YS1ldmVudD0iY2xpY2siPicrdSsiPC9idXR0b24+IjoiIikrKGM/IiI6dykrIjwvZGl2PiI6IiIseT1wYXJzZUludCh0aGlzLl9nZXQoYSwiZmlyc3REYXkiKSwxMCk7eT1pc05hTih5KT8wOnk7dmFyIHo9dGhpcy5fZ2V0KGEsInNob3dXZWVrIiksQT10aGlzLl9nZXQoYSwiZGF5TmFtZXMiKSxCPXRoaXMuX2dldChhLCJkYXlOYW1lc1Nob3J0IiksQz10aGlzLl9nZXQoYSwiZGF5TmFtZXNNaW4iKSxEPXRoaXMuX2dldChhLCJtb250aE5hbWVzIiksRT10aGlzLl9nZXQoYSwibW9udGhOYW1lc1Nob3J0IiksRj10aGlzLl9nZXQoYSwiYmVmb3JlU2hvd0RheSIpLEc9dGhpcy5fZ2V0KGEsInNob3dPdGhlck1vbnRocyIpLEg9dGhpcy5fZ2V0KGEsInNlbGVjdE90aGVyTW9udGhzIiksST10aGlzLl9nZXQoYSwiY2FsY3VsYXRlV2VlayIpfHx0aGlzLmlzbzg2MDFXZWVrLEo9dGhpcy5fZ2V0RGVmYXVsdERhdGUoYSksSz0iIjtmb3IodmFyIEw9MDtMPGdbMF07TCsrKXt2YXIgTT0iIjt0aGlzLm1heFJvd3M9NDtmb3IodmFyIE49MDtOPGdbMV07TisrKXt2YXIgTz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShvLG4sYS5zZWxlY3RlZERheSkpLFA9IiB1aS1jb3JuZXItYWxsIixRPSIiO2lmKGope1ErPSc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLWdyb3VwJztpZihnWzFdPjEpc3dpdGNoKE4pe2Nhc2UgMDpRKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3QiLFA9IiB1aS1jb3JuZXItIisoYz8icmlnaHQiOiJsZWZ0Iik7YnJlYWs7Y2FzZSBnWzFdLTE6USs9IiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QiLFA9IiB1aS1jb3JuZXItIisoYz8ibGVmdCI6InJpZ2h0Iik7YnJlYWs7ZGVmYXVsdDpRKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIixQPSIifVErPSciPid9USs9JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4JytQKyciPicrKC9hbGx8bGVmdC8udGVzdChQKSYmTD09MD9jP3Q6cjoiIikrKC9hbGx8cmlnaHQvLnRlc3QoUCkmJkw9PTA/Yz9yOnQ6IiIpK3RoaXMuX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyKGEsbixvLGwsbSxMPjB8fE4+MCxELEUpKyc8L2Rpdj48dGFibGUgY2xhc3M9InVpLWRhdGVwaWNrZXItY2FsZW5kYXIiPjx0aGVhZD4nKyI8dHI+Ijt2YXIgUj16Pyc8dGggY2xhc3M9InVpLWRhdGVwaWNrZXItd2Vlay1jb2wiPicrdGhpcy5fZ2V0KGEsIndlZWtIZWFkZXIiKSsiPC90aD4iOiIiO2Zvcih2YXIgUz0wO1M8NztTKyspe3ZhciBUPShTK3kpJTc7Uis9Ijx0aCIrKChTK3krNiklNz49NT8nIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXdlZWstZW5kIic6IiIpKyI+IisnPHNwYW4gdGl0bGU9IicrQVtUXSsnIj4nK0NbVF0rIjwvc3Bhbj48L3RoPiJ9USs9UisiPC90cj48L3RoZWFkPjx0Ym9keT4iO3ZhciBVPXRoaXMuX2dldERheXNJbk1vbnRoKG8sbik7bz09YS5zZWxlY3RlZFllYXImJm49PWEuc2VsZWN0ZWRNb250aCYmKGEuc2VsZWN0ZWREYXk9TWF0aC5taW4oYS5zZWxlY3RlZERheSxVKSk7dmFyIFY9KHRoaXMuX2dldEZpcnN0RGF5T2ZNb250aChvLG4pLXkrNyklNyxXPU1hdGguY2VpbCgoVitVKS83KSxYPWo/dGhpcy5tYXhSb3dzPlc/dGhpcy5tYXhSb3dzOlc6Vzt0aGlzLm1heFJvd3M9WDt2YXIgWT10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShvLG4sMS1WKSk7Zm9yKHZhciBaPTA7WjxYO1orKyl7USs9Ijx0cj4iO3ZhciBfPXo/Jzx0ZCBjbGFzcz0idWktZGF0ZXBpY2tlci13ZWVrLWNvbCI+Jyt0aGlzLl9nZXQoYSwiY2FsY3VsYXRlV2VlayIpKFkpKyI8L3RkPiI6IiI7Zm9yKHZhciBTPTA7Uzw3O1MrKyl7dmFyIGJhPUY/Ri5hcHBseShhLmlucHV0P2EuaW5wdXRbMF06bnVsbCxbWV0pOlshMCwiIl0sYmI9WS5nZXRNb250aCgpIT1uLGJjPWJiJiYhSHx8IWJhWzBdfHxsJiZZPGx8fG0mJlk+bTtfKz0nPHRkIGNsYXNzPSInKygoUyt5KzYpJTc+PTU/IiB1aS1kYXRlcGlja2VyLXdlZWstZW5kIjoiIikrKGJiPyIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aCI6IiIpKyhZLmdldFRpbWUoKT09Ty5nZXRUaW1lKCkmJm49PWEuc2VsZWN0ZWRNb250aCYmYS5fa2V5RXZlbnR8fEouZ2V0VGltZSgpPT1ZLmdldFRpbWUoKSYmSi5nZXRUaW1lKCk9PU8uZ2V0VGltZSgpPyIgIit0aGlzLl9kYXlPdmVyQ2xhc3M6IiIpKyhiYz8iICIrdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MrIiB1aS1zdGF0ZS1kaXNhYmxlZCI6IiIpKyhiYiYmIUc/IiI6IiAiK2JhWzFdKyhZLmdldFRpbWUoKT09ay5nZXRUaW1lKCk/IiAiK3RoaXMuX2N1cnJlbnRDbGFzczoiIikrKFkuZ2V0VGltZSgpPT1iLmdldFRpbWUoKT8iIHVpLWRhdGVwaWNrZXItdG9kYXkiOiIiKSkrJyInKygoIWJifHxHKSYmYmFbMl0/JyB0aXRsZT0iJytiYVsyXSsnIic6IiIpKyhiYz8iIjonIGRhdGEtaGFuZGxlcj0ic2VsZWN0RGF5IiBkYXRhLWV2ZW50PSJjbGljayIgZGF0YS1tb250aD0iJytZLmdldE1vbnRoKCkrJyIgZGF0YS15ZWFyPSInK1kuZ2V0RnVsbFllYXIoKSsnIicpKyI+IisoYmImJiFHPyImI3hhMDsiOmJjPyc8c3BhbiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCI+JytZLmdldERhdGUoKSsiPC9zcGFuPiI6JzxhIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0JysoWS5nZXRUaW1lKCk9PWIuZ2V0VGltZSgpPyIgdWktc3RhdGUtaGlnaGxpZ2h0IjoiIikrKFkuZ2V0VGltZSgpPT1rLmdldFRpbWUoKT8iIHVpLXN0YXRlLWFjdGl2ZSI6IiIpKyhiYj8iIHVpLXByaW9yaXR5LXNlY29uZGFyeSI6IiIpKyciIGhyZWY9IiMiPicrWS5nZXREYXRlKCkrIjwvYT4iKSsiPC90ZD4iLFkuc2V0RGF0ZShZLmdldERhdGUoKSsxKSxZPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KFkpfVErPV8rIjwvdHI+In1uKyssbj4xMSYmKG49MCxvKyspLFErPSI8L3Rib2R5PjwvdGFibGU+Iisoaj8iPC9kaXY+IisoZ1swXT4wJiZOPT1nWzFdLTE/JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItcm93LWJyZWFrIj48L2Rpdj4nOiIiKToiIiksTSs9UX1LKz1NfXJldHVybiBLKz14KygkLmJyb3dzZXIubXNpZSYmcGFyc2VJbnQoJC5icm93c2VyLnZlcnNpb24sMTApPDcmJiFhLmlubGluZT8nPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6ZmFsc2U7IiBjbGFzcz0idWktZGF0ZXBpY2tlci1jb3ZlciIgZnJhbWVib3JkZXI9IjAiPjwvaWZyYW1lPic6IiIpLGEuX2tleUV2ZW50PSExLEt9LF9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcjpmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPXRoaXMuX2dldChhLCJjaGFuZ2VNb250aCIpLGo9dGhpcy5fZ2V0KGEsImNoYW5nZVllYXIiKSxrPXRoaXMuX2dldChhLCJzaG93TW9udGhBZnRlclllYXIiKSxsPSc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXRpdGxlIj4nLG09IiI7aWYoZnx8IWkpbSs9JzxzcGFuIGNsYXNzPSJ1aS1kYXRlcGlja2VyLW1vbnRoIj4nK2dbYl0rIjwvc3Bhbj4iO2Vsc2V7dmFyIG49ZCYmZC5nZXRGdWxsWWVhcigpPT1jLG89ZSYmZS5nZXRGdWxsWWVhcigpPT1jO20rPSc8c2VsZWN0IGNsYXNzPSJ1aS1kYXRlcGlja2VyLW1vbnRoIiBkYXRhLWhhbmRsZXI9InNlbGVjdE1vbnRoIiBkYXRhLWV2ZW50PSJjaGFuZ2UiPic7Zm9yKHZhciBwPTA7cDwxMjtwKyspKCFufHxwPj1kLmdldE1vbnRoKCkpJiYoIW98fHA8PWUuZ2V0TW9udGgoKSkmJihtKz0nPG9wdGlvbiB2YWx1ZT0iJytwKyciJysocD09Yj8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsiPiIraFtwXSsiPC9vcHRpb24+Iik7bSs9Ijwvc2VsZWN0PiJ9a3x8KGwrPW0rKGZ8fCFpfHwhaj8iJiN4YTA7IjoiIikpO2lmKCFhLnllYXJzaHRtbCl7YS55ZWFyc2h0bWw9IiI7aWYoZnx8IWopbCs9JzxzcGFuIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXllYXIiPicrYysiPC9zcGFuPiI7ZWxzZXt2YXIgcT10aGlzLl9nZXQoYSwieWVhclJhbmdlIikuc3BsaXQoIjoiKSxyPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxzPWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL2NbKy1dLiovKT9jK3BhcnNlSW50KGEuc3Vic3RyaW5nKDEpLDEwKTphLm1hdGNoKC9bKy1dLiovKT9yK3BhcnNlSW50KGEsMTApOnBhcnNlSW50KGEsMTApO3JldHVybiBpc05hTihiKT9yOmJ9LHQ9cyhxWzBdKSx1PU1hdGgubWF4KHQscyhxWzFdfHwiIikpO3Q9ZD9NYXRoLm1heCh0LGQuZ2V0RnVsbFllYXIoKSk6dCx1PWU/TWF0aC5taW4odSxlLmdldEZ1bGxZZWFyKCkpOnUsYS55ZWFyc2h0bWwrPSc8c2VsZWN0IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXllYXIiIGRhdGEtaGFuZGxlcj0ic2VsZWN0WWVhciIgZGF0YS1ldmVudD0iY2hhbmdlIj4nO2Zvcig7dDw9dTt0KyspYS55ZWFyc2h0bWwrPSc8b3B0aW9uIHZhbHVlPSInK3QrJyInKyh0PT1jPycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyI+Iit0KyI8L29wdGlvbj4iO2EueWVhcnNodG1sKz0iPC9zZWxlY3Q+IixsKz1hLnllYXJzaHRtbCxhLnllYXJzaHRtbD1udWxsfX1yZXR1cm4gbCs9dGhpcy5fZ2V0KGEsInllYXJTdWZmaXgiKSxrJiYobCs9KGZ8fCFpfHwhaj8iJiN4YTA7IjoiIikrbSksbCs9IjwvZGl2PiIsbH0sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmRyYXdZZWFyKyhjPT0iWSI/YjowKSxlPWEuZHJhd01vbnRoKyhjPT0iTSI/YjowKSxmPU1hdGgubWluKGEuc2VsZWN0ZWREYXksdGhpcy5fZ2V0RGF5c0luTW9udGgoZCxlKSkrKGM9PSJEIj9iOjApLGc9dGhpcy5fcmVzdHJpY3RNaW5NYXgoYSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkLGUsZikpKTthLnNlbGVjdGVkRGF5PWcuZ2V0RGF0ZSgpLGEuZHJhd01vbnRoPWEuc2VsZWN0ZWRNb250aD1nLmdldE1vbnRoKCksYS5kcmF3WWVhcj1hLnNlbGVjdGVkWWVhcj1nLmdldEZ1bGxZZWFyKCksKGM9PSJNInx8Yz09IlkiKSYmdGhpcy5fbm90aWZ5Q2hhbmdlKGEpfSxfcmVzdHJpY3RNaW5NYXg6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9nZXRNaW5NYXhEYXRlKGEsIm1pbiIpLGQ9dGhpcy5fZ2V0TWluTWF4RGF0ZShhLCJtYXgiKSxlPWMmJmI8Yz9jOmI7cmV0dXJuIGU9ZCYmZT5kP2Q6ZSxlfSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJvbkNoYW5nZU1vbnRoWWVhciIpO2ImJmIuYXBwbHkoYS5pbnB1dD9hLmlucHV0WzBdOm51bGwsW2Euc2VsZWN0ZWRZZWFyLGEuc2VsZWN0ZWRNb250aCsxLGFdKX0sX2dldE51bWJlck9mTW9udGhzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJudW1iZXJPZk1vbnRocyIpO3JldHVybiBiPT1udWxsP1sxLDFdOnR5cGVvZiBiPT0ibnVtYmVyIj9bMSxiXTpifSxfZ2V0TWluTWF4RGF0ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKGEsdGhpcy5fZ2V0KGEsYisiRGF0ZSIpLG51bGwpfSxfZ2V0RGF5c0luTW9udGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gMzItdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoYSxiLDMyKSkuZ2V0RGF0ZSgpfSxfZ2V0Rmlyc3REYXlPZk1vbnRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuKG5ldyBEYXRlKGEsYiwxKSkuZ2V0RGF5KCl9LF9jYW5BZGp1c3RNb250aDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhhKSxmPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGMsZCsoYjwwP2I6ZVswXSplWzFdKSwxKSk7cmV0dXJuIGI8MCYmZi5zZXREYXRlKHRoaXMuX2dldERheXNJbk1vbnRoKGYuZ2V0RnVsbFllYXIoKSxmLmdldE1vbnRoKCkpKSx0aGlzLl9pc0luUmFuZ2UoYSxmKX0sX2lzSW5SYW5nZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2dldE1pbk1heERhdGUoYSwibWluIiksZD10aGlzLl9nZXRNaW5NYXhEYXRlKGEsIm1heCIpO3JldHVybighY3x8Yi5nZXRUaW1lKCk+PWMuZ2V0VGltZSgpKSYmKCFkfHxiLmdldFRpbWUoKTw9ZC5nZXRUaW1lKCkpfSxfZ2V0Rm9ybWF0Q29uZmlnOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJzaG9ydFllYXJDdXRvZmYiKTtyZXR1cm4gYj10eXBlb2YgYiE9InN0cmluZyI/YjoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGIsMTApLHtzaG9ydFllYXJDdXRvZmY6YixkYXlOYW1lc1Nob3J0OnRoaXMuX2dldChhLCJkYXlOYW1lc1Nob3J0IiksZGF5TmFtZXM6dGhpcy5fZ2V0KGEsImRheU5hbWVzIiksbW9udGhOYW1lc1Nob3J0OnRoaXMuX2dldChhLCJtb250aE5hbWVzU2hvcnQiKSxtb250aE5hbWVzOnRoaXMuX2dldChhLCJtb250aE5hbWVzIil9fSxfZm9ybWF0RGF0ZTpmdW5jdGlvbihhLGIsYyxkKXtifHwoYS5jdXJyZW50RGF5PWEuc2VsZWN0ZWREYXksYS5jdXJyZW50TW9udGg9YS5zZWxlY3RlZE1vbnRoLGEuY3VycmVudFllYXI9YS5zZWxlY3RlZFllYXIpO3ZhciBlPWI/dHlwZW9mIGI9PSJvYmplY3QiP2I6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZCxjLGIpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShhLmN1cnJlbnRZZWFyLGEuY3VycmVudE1vbnRoLGEuY3VycmVudERheSkpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5fZ2V0KGEsImRhdGVGb3JtYXQiKSxlLHRoaXMuX2dldEZvcm1hdENvbmZpZyhhKSl9fSksJC5mbi5kYXRlcGlja2VyPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczskLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWR8fCgkKGRvY3VtZW50KS5tb3VzZWRvd24oJC5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2spLmZpbmQoImJvZHkiKS5hcHBlbmQoJC5kYXRlcGlja2VyLmRwRGl2KSwkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApO3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmcifHxhIT0iaXNEaXNhYmxlZCImJmEhPSJnZXREYXRlIiYmYSE9IndpZGdldCI/YT09Im9wdGlvbiImJmFyZ3VtZW50cy5sZW5ndGg9PTImJnR5cGVvZiBhcmd1bWVudHNbMV09PSJzdHJpbmciPyQuZGF0ZXBpY2tlclsiXyIrYSsiRGF0ZXBpY2tlciJdLmFwcGx5KCQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGIpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0eXBlb2YgYT09InN0cmluZyI/JC5kYXRlcGlja2VyWyJfIithKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQoYikpOiQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLGEpfSk6JC5kYXRlcGlja2VyWyJfIithKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoYikpfSwkLmRhdGVwaWNrZXI9bmV3IERhdGVwaWNrZXIsJC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLCQuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLCQuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjguMjQiLHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXT0kfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGM9InVpLWRpYWxvZyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCAiLGQ9e2J1dHRvbnM6ITAsaGVpZ2h0OiEwLG1heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITAsd2lkdGg6ITB9LGU9e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9O2Eud2lkZ2V0KCJ1aS5kaWFsb2ciLHtvcHRpb25zOnthdXRvT3BlbjohMCxidXR0b25zOnt9LGNsb3NlT25Fc2NhcGU6ITAsY2xvc2VUZXh0OiJjbG9zZSIsZGlhbG9nQ2xhc3M6IiIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6ImF1dG8iLG1heEhlaWdodDohMSxtYXhXaWR0aDohMSxtaW5IZWlnaHQ6MTUwLG1pbldpZHRoOjE1MCxtb2RhbDohMSxwb3NpdGlvbjp7bXk6ImNlbnRlciIsYXQ6ImNlbnRlciIsY29sbGlzaW9uOiJmaXQiLHVzaW5nOmZ1bmN0aW9uKGIpe3ZhciBjPWEodGhpcykuY3NzKGIpLm9mZnNldCgpLnRvcDtjPDAmJmEodGhpcykuY3NzKCJ0b3AiLGIudG9wLWMpfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCxzdGFjazohMCx0aXRsZToiIix3aWR0aDozMDAsekluZGV4OjFlM30sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiKSx0eXBlb2YgdGhpcy5vcmlnaW5hbFRpdGxlIT0ic3RyaW5nIiYmKHRoaXMub3JpZ2luYWxUaXRsZT0iIiksdGhpcy5vcHRpb25zLnRpdGxlPXRoaXMub3B0aW9ucy50aXRsZXx8dGhpcy5vcmlnaW5hbFRpdGxlO3ZhciBiPXRoaXMsZD1iLm9wdGlvbnMsZT1kLnRpdGxlfHwiJiMxNjA7IixmPWEudWkuZGlhbG9nLmdldFRpdGxlSWQoYi5lbGVtZW50KSxnPShiLnVpRGlhbG9nPWEoIjxkaXY+PC9kaXY+IikpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmhpZGUoKS5hZGRDbGFzcyhjK2QuZGlhbG9nQ2xhc3MpLmNzcyh7ekluZGV4OmQuekluZGV4fSkuYXR0cigidGFiSW5kZXgiLC0xKS5jc3MoIm91dGxpbmUiLDApLmtleWRvd24oZnVuY3Rpb24oYyl7ZC5jbG9zZU9uRXNjYXBlJiYhYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5rZXlDb2RlJiZjLmtleUNvZGU9PT1hLnVpLmtleUNvZGUuRVNDQVBFJiYoYi5jbG9zZShjKSxjLnByZXZlbnREZWZhdWx0KCkpfSkuYXR0cih7cm9sZToiZGlhbG9nIiwiYXJpYS1sYWJlbGxlZGJ5IjpmfSkubW91c2Vkb3duKGZ1bmN0aW9uKGEpe2IubW92ZVRvVG9wKCExLGEpfSksaD1iLmVsZW1lbnQuc2hvdygpLnJlbW92ZUF0dHIoInRpdGxlIikuYWRkQ2xhc3MoInVpLWRpYWxvZy1jb250ZW50IHVpLXdpZGdldC1jb250ZW50IikuYXBwZW5kVG8oZyksaT0oYi51aURpYWxvZ1RpdGxlYmFyPWEoIjxkaXY+PC9kaXY+IikpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1jbGVhcmZpeCIpLnByZXBlbmRUbyhnKSxqPWEoJzxhIGhyZWY9IiMiPjwvYT4nKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIHVpLWNvcm5lci1hbGwiKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuaG92ZXIoZnVuY3Rpb24oKXtqLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSxmdW5jdGlvbigpe2oucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9KS5mb2N1cyhmdW5jdGlvbigpe2ouYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9KS5ibHVyKGZ1bmN0aW9uKCl7ai5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0pLmNsaWNrKGZ1bmN0aW9uKGEpe3JldHVybiBiLmNsb3NlKGEpLCExfSkuYXBwZW5kVG8oaSksaz0oYi51aURpYWxvZ1RpdGxlYmFyQ2xvc2VUZXh0PWEoIjxzcGFuPjwvc3Bhbj4iKSkuYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1jbG9zZXRoaWNrIikudGV4dChkLmNsb3NlVGV4dCkuYXBwZW5kVG8oaiksbD1hKCI8c3Bhbj48L3NwYW4+IikuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZSIpLmF0dHIoImlkIixmKS5odG1sKGUpLnByZXBlbmRUbyhpKTthLmlzRnVuY3Rpb24oZC5iZWZvcmVjbG9zZSkmJiFhLmlzRnVuY3Rpb24oZC5iZWZvcmVDbG9zZSkmJihkLmJlZm9yZUNsb3NlPWQuYmVmb3JlY2xvc2UpLGkuZmluZCgiKiIpLmFkZChpKS5kaXNhYmxlU2VsZWN0aW9uKCksZC5kcmFnZ2FibGUmJmEuZm4uZHJhZ2dhYmxlJiZiLl9tYWtlRHJhZ2dhYmxlKCksZC5yZXNpemFibGUmJmEuZm4ucmVzaXphYmxlJiZiLl9tYWtlUmVzaXphYmxlKCksYi5fY3JlYXRlQnV0dG9ucyhkLmJ1dHRvbnMpLGIuX2lzT3Blbj0hMSxhLmZuLmJnaWZyYW1lJiZnLmJnaWZyYW1lKCl9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF1dG9PcGVuJiZ0aGlzLm9wZW4oKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGEub3ZlcmxheSYmYS5vdmVybGF5LmRlc3Ryb3koKSxhLnVpRGlhbG9nLmhpZGUoKSxhLmVsZW1lbnQudW5iaW5kKCIuZGlhbG9nIikucmVtb3ZlRGF0YSgiZGlhbG9nIikucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1jb250ZW50IHVpLXdpZGdldC1jb250ZW50IikuaGlkZSgpLmFwcGVuZFRvKCJib2R5IiksYS51aURpYWxvZy5yZW1vdmUoKSxhLm9yaWdpbmFsVGl0bGUmJmEuZWxlbWVudC5hdHRyKCJ0aXRsZSIsYS5vcmlnaW5hbFRpdGxlKSxhfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aURpYWxvZ30sY2xvc2U6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxkLGU7aWYoITE9PT1jLl90cmlnZ2VyKCJiZWZvcmVDbG9zZSIsYikpcmV0dXJuO3JldHVybiBjLm92ZXJsYXkmJmMub3ZlcmxheS5kZXN0cm95KCksYy51aURpYWxvZy51bmJpbmQoImtleXByZXNzLnVpLWRpYWxvZyIpLGMuX2lzT3Blbj0hMSxjLm9wdGlvbnMuaGlkZT9jLnVpRGlhbG9nLmhpZGUoYy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtjLl90cmlnZ2VyKCJjbG9zZSIsYil9KTooYy51aURpYWxvZy5oaWRlKCksYy5fdHJpZ2dlcigiY2xvc2UiLGIpKSxhLnVpLmRpYWxvZy5vdmVybGF5LnJlc2l6ZSgpLGMub3B0aW9ucy5tb2RhbCYmKGQ9MCxhKCIudWktZGlhbG9nIikuZWFjaChmdW5jdGlvbigpe3RoaXMhPT1jLnVpRGlhbG9nWzBdJiYoZT1hKHRoaXMpLmNzcygiei1pbmRleCIpLGlzTmFOKGUpfHwoZD1NYXRoLm1heChkLGUpKSl9KSxhLnVpLmRpYWxvZy5tYXhaPWQpLGN9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc09wZW59LG1vdmVUb1RvcDpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMsZT1kLm9wdGlvbnMsZjtyZXR1cm4gZS5tb2RhbCYmIWJ8fCFlLnN0YWNrJiYhZS5tb2RhbD9kLl90cmlnZ2VyKCJmb2N1cyIsYyk6KGUuekluZGV4PmEudWkuZGlhbG9nLm1heFomJihhLnVpLmRpYWxvZy5tYXhaPWUuekluZGV4KSxkLm92ZXJsYXkmJihhLnVpLmRpYWxvZy5tYXhaKz0xLGQub3ZlcmxheS4kZWwuY3NzKCJ6LWluZGV4IixhLnVpLmRpYWxvZy5vdmVybGF5Lm1heFo9YS51aS5kaWFsb2cubWF4WikpLGY9e3Njcm9sbFRvcDpkLmVsZW1lbnQuc2Nyb2xsVG9wKCksc2Nyb2xsTGVmdDpkLmVsZW1lbnQuc2Nyb2xsTGVmdCgpfSxhLnVpLmRpYWxvZy5tYXhaKz0xLGQudWlEaWFsb2cuY3NzKCJ6LWluZGV4IixhLnVpLmRpYWxvZy5tYXhaKSxkLmVsZW1lbnQuYXR0cihmKSxkLl90cmlnZ2VyKCJmb2N1cyIsYyksZCl9LG9wZW46ZnVuY3Rpb24oKXtpZih0aGlzLl9pc09wZW4pcmV0dXJuO3ZhciBiPXRoaXMsYz1iLm9wdGlvbnMsZD1iLnVpRGlhbG9nO3JldHVybiBiLm92ZXJsYXk9Yy5tb2RhbD9uZXcgYS51aS5kaWFsb2cub3ZlcmxheShiKTpudWxsLGIuX3NpemUoKSxiLl9wb3NpdGlvbihjLnBvc2l0aW9uKSxkLnNob3coYy5zaG93KSxiLm1vdmVUb1RvcCghMCksYy5tb2RhbCYmZC5iaW5kKCJrZXlkb3duLnVpLWRpYWxvZyIsZnVuY3Rpb24oYil7aWYoYi5rZXlDb2RlIT09YS51aS5rZXlDb2RlLlRBQilyZXR1cm47dmFyIGM9YSgiOnRhYmJhYmxlIix0aGlzKSxkPWMuZmlsdGVyKCI6Zmlyc3QiKSxlPWMuZmlsdGVyKCI6bGFzdCIpO2lmKGIudGFyZ2V0PT09ZVswXSYmIWIuc2hpZnRLZXkpcmV0dXJuIGQuZm9jdXMoMSksITE7aWYoYi50YXJnZXQ9PT1kWzBdJiZiLnNoaWZ0S2V5KXJldHVybiBlLmZvY3VzKDEpLCExfSksYShiLmVsZW1lbnQuZmluZCgiOnRhYmJhYmxlIikuZ2V0KCkuY29uY2F0KGQuZmluZCgiLnVpLWRpYWxvZy1idXR0b25wYW5lIDp0YWJiYWJsZSIpLmdldCgpLmNvbmNhdChkLmdldCgpKSkpLmVxKDApLmZvY3VzKCksYi5faXNPcGVuPSEwLGIuX3RyaWdnZXIoIm9wZW4iKSxifSxfY3JlYXRlQnV0dG9uczpmdW5jdGlvbihiKXt2YXIgYz10aGlzLGQ9ITEsZT1hKCI8ZGl2PjwvZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXgiKSxmPWEoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zZXQiKS5hcHBlbmRUbyhlKTtjLnVpRGlhbG9nLmZpbmQoIi51aS1kaWFsb2ctYnV0dG9ucGFuZSIpLnJlbW92ZSgpLHR5cGVvZiBiPT0ib2JqZWN0IiYmYiE9PW51bGwmJmEuZWFjaChiLGZ1bmN0aW9uKCl7cmV0dXJuIShkPSEwKX0pLGQmJihhLmVhY2goYixmdW5jdGlvbihiLGQpe2Q9YS5pc0Z1bmN0aW9uKGQpP3tjbGljazpkLHRleHQ6Yn06ZDt2YXIgZT1hKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PC9idXR0b24+JykuY2xpY2soZnVuY3Rpb24oKXtkLmNsaWNrLmFwcGx5KGMuZWxlbWVudFswXSxhcmd1bWVudHMpfSkuYXBwZW5kVG8oZik7YS5lYWNoKGQsZnVuY3Rpb24oYSxiKXtpZihhPT09ImNsaWNrIilyZXR1cm47YSBpbiBlP2VbYV0oYik6ZS5hdHRyKGEsYil9KSxhLmZuLmJ1dHRvbiYmZS5idXR0b24oKX0pLGUuYXBwZW5kVG8oYy51aURpYWxvZykpfSxfbWFrZURyYWdnYWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGYoYSl7cmV0dXJue3Bvc2l0aW9uOmEucG9zaXRpb24sb2Zmc2V0OmEub2Zmc2V0fX12YXIgYj10aGlzLGM9Yi5vcHRpb25zLGQ9YShkb2N1bWVudCksZTtiLnVpRGlhbG9nLmRyYWdnYWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQsIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiLGhhbmRsZToiLnVpLWRpYWxvZy10aXRsZWJhciIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixzdGFydDpmdW5jdGlvbihkLGcpe2U9Yy5oZWlnaHQ9PT0iYXV0byI/ImF1dG8iOmEodGhpcykuaGVpZ2h0KCksYSh0aGlzKS5oZWlnaHQoYSh0aGlzKS5oZWlnaHQoKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy1kcmFnZ2luZyIpLGIuX3RyaWdnZXIoImRyYWdTdGFydCIsZCxmKGcpKX0sZHJhZzpmdW5jdGlvbihhLGMpe2IuX3RyaWdnZXIoImRyYWciLGEsZihjKSl9LHN0b3A6ZnVuY3Rpb24oZyxoKXtjLnBvc2l0aW9uPVtoLnBvc2l0aW9uLmxlZnQtZC5zY3JvbGxMZWZ0KCksaC5wb3NpdGlvbi50b3AtZC5zY3JvbGxUb3AoKV0sYSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIikuaGVpZ2h0KGUpLGIuX3RyaWdnZXIoImRyYWdTdG9wIixnLGYoaCkpLGEudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKCl9fSl9LF9tYWtlUmVzaXphYmxlOmZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGgoYSl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246YS5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTphLm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjphLnBvc2l0aW9uLHNpemU6YS5zaXplfX1jPWM9PT1iP3RoaXMub3B0aW9ucy5yZXNpemFibGU6Yzt2YXIgZD10aGlzLGU9ZC5vcHRpb25zLGY9ZC51aURpYWxvZy5jc3MoInBvc2l0aW9uIiksZz10eXBlb2YgYz09InN0cmluZyI/YzoibixlLHMsdyxzZSxzdyxuZSxudyI7ZC51aURpYWxvZy5yZXNpemFibGUoe2NhbmNlbDoiLnVpLWRpYWxvZy1jb250ZW50Iixjb250YWlubWVudDoiZG9jdW1lbnQiLGFsc29SZXNpemU6ZC5lbGVtZW50LG1heFdpZHRoOmUubWF4V2lkdGgsbWF4SGVpZ2h0OmUubWF4SGVpZ2h0LG1pbldpZHRoOmUubWluV2lkdGgsbWluSGVpZ2h0OmQuX21pbkhlaWdodCgpLGhhbmRsZXM6ZyxzdGFydDpmdW5jdGlvbihiLGMpe2EodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1yZXNpemluZyIpLGQuX3RyaWdnZXIoInJlc2l6ZVN0YXJ0IixiLGgoYykpfSxyZXNpemU6ZnVuY3Rpb24oYSxiKXtkLl90cmlnZ2VyKCJyZXNpemUiLGEsaChiKSl9LHN0b3A6ZnVuY3Rpb24oYixjKXthKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctcmVzaXppbmciKSxlLmhlaWdodD1hKHRoaXMpLmhlaWdodCgpLGUud2lkdGg9YSh0aGlzKS53aWR0aCgpLGQuX3RyaWdnZXIoInJlc2l6ZVN0b3AiLGIsaChjKSksYS51aS5kaWFsb2cub3ZlcmxheS5yZXNpemUoKX19KS5jc3MoInBvc2l0aW9uIixmKS5maW5kKCIudWktcmVzaXphYmxlLXNlIikuYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1ncmlwLWRpYWdvbmFsLXNlIil9LF9taW5IZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnM7cmV0dXJuIGEuaGVpZ2h0PT09ImF1dG8iP2EubWluSGVpZ2h0Ok1hdGgubWluKGEubWluSGVpZ2h0LGEuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKGIpe3ZhciBjPVtdLGQ9WzAsMF0sZTtpZihiKXtpZih0eXBlb2YgYj09InN0cmluZyJ8fHR5cGVvZiBiPT0ib2JqZWN0IiYmIjAiaW4gYiljPWIuc3BsaXQ/Yi5zcGxpdCgiICIpOltiWzBdLGJbMV1dLGMubGVuZ3RoPT09MSYmKGNbMV09Y1swXSksYS5lYWNoKFsibGVmdCIsInRvcCJdLGZ1bmN0aW9uKGEsYil7K2NbYV09PT1jW2FdJiYoZFthXT1jW2FdLGNbYV09Yil9KSxiPXtteTpjLmpvaW4oIiAiKSxhdDpjLmpvaW4oIiAiKSxvZmZzZXQ6ZC5qb2luKCIgIil9O2I9YS5leHRlbmQoe30sYS51aS5kaWFsb2cucHJvdG90eXBlLm9wdGlvbnMucG9zaXRpb24sYil9ZWxzZSBiPWEudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uO2U9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKSxlfHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLmNzcyh7dG9wOjAsbGVmdDowfSkucG9zaXRpb24oYS5leHRlbmQoe29mOndpbmRvd30sYikpLGV8fHRoaXMudWlEaWFsb2cuaGlkZSgpfSxfc2V0T3B0aW9uczpmdW5jdGlvbihiKXt2YXIgYz10aGlzLGY9e30sZz0hMTthLmVhY2goYixmdW5jdGlvbihhLGIpe2MuX3NldE9wdGlvbihhLGIpLGEgaW4gZCYmKGc9ITApLGEgaW4gZSYmKGZbYV09Yil9KSxnJiZ0aGlzLl9zaXplKCksdGhpcy51aURpYWxvZy5pcygiOmRhdGEocmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIixmKX0sX3NldE9wdGlvbjpmdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMsZj1lLnVpRGlhbG9nO3N3aXRjaChiKXtjYXNlImJlZm9yZWNsb3NlIjpiPSJiZWZvcmVDbG9zZSI7YnJlYWs7Y2FzZSJidXR0b25zIjplLl9jcmVhdGVCdXR0b25zKGQpO2JyZWFrO2Nhc2UiY2xvc2VUZXh0IjplLnVpRGlhbG9nVGl0bGViYXJDbG9zZVRleHQudGV4dCgiIitkKTticmVhaztjYXNlImRpYWxvZ0NsYXNzIjpmLnJlbW92ZUNsYXNzKGUub3B0aW9ucy5kaWFsb2dDbGFzcykuYWRkQ2xhc3MoYytkKTticmVhaztjYXNlImRpc2FibGVkIjpkP2YuYWRkQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpOmYucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpO2JyZWFrO2Nhc2UiZHJhZ2dhYmxlIjp2YXIgZz1mLmlzKCI6ZGF0YShkcmFnZ2FibGUpIik7ZyYmIWQmJmYuZHJhZ2dhYmxlKCJkZXN0cm95IiksIWcmJmQmJmUuX21ha2VEcmFnZ2FibGUoKTticmVhaztjYXNlInBvc2l0aW9uIjplLl9wb3NpdGlvbihkKTticmVhaztjYXNlInJlc2l6YWJsZSI6dmFyIGg9Zi5pcygiOmRhdGEocmVzaXphYmxlKSIpO2gmJiFkJiZmLnJlc2l6YWJsZSgiZGVzdHJveSIpLGgmJnR5cGVvZiBkPT0ic3RyaW5nIiYmZi5yZXNpemFibGUoIm9wdGlvbiIsImhhbmRsZXMiLGQpLCFoJiZkIT09ITEmJmUuX21ha2VSZXNpemFibGUoZCk7YnJlYWs7Y2FzZSJ0aXRsZSI6YSgiLnVpLWRpYWxvZy10aXRsZSIsZS51aURpYWxvZ1RpdGxlYmFyKS5odG1sKCIiKyhkfHwiJiMxNjA7IikpfWEuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KGUsYXJndW1lbnRzKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm9wdGlvbnMsYyxkLGU9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKTt0aGlzLmVsZW1lbnQuc2hvdygpLmNzcyh7d2lkdGg6ImF1dG8iLG1pbkhlaWdodDowLGhlaWdodDowfSksYi5taW5XaWR0aD5iLndpZHRoJiYoYi53aWR0aD1iLm1pbldpZHRoKSxjPXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6ImF1dG8iLHdpZHRoOmIud2lkdGh9KS5oZWlnaHQoKSxkPU1hdGgubWF4KDAsYi5taW5IZWlnaHQtYyk7aWYoYi5oZWlnaHQ9PT0iYXV0byIpaWYoYS5zdXBwb3J0Lm1pbkhlaWdodCl0aGlzLmVsZW1lbnQuY3NzKHttaW5IZWlnaHQ6ZCxoZWlnaHQ6ImF1dG8ifSk7ZWxzZXt0aGlzLnVpRGlhbG9nLnNob3coKTt2YXIgZj10aGlzLmVsZW1lbnQuY3NzKCJoZWlnaHQiLCJhdXRvIikuaGVpZ2h0KCk7ZXx8dGhpcy51aURpYWxvZy5oaWRlKCksdGhpcy5lbGVtZW50LmhlaWdodChNYXRoLm1heChmLGQpKX1lbHNlIHRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoYi5oZWlnaHQtYywwKSk7dGhpcy51aURpYWxvZy5pcygiOmRhdGEocmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9fSksYS5leHRlbmQoYS51aS5kaWFsb2cse3ZlcnNpb246IjEuOC4yNCIsdXVpZDowLG1heFo6MCxnZXRUaXRsZUlkOmZ1bmN0aW9uKGEpe3ZhciBiPWEuYXR0cigiaWQiKTtyZXR1cm4gYnx8KHRoaXMudXVpZCs9MSxiPXRoaXMudXVpZCksInVpLWRpYWxvZy10aXRsZS0iK2J9LG92ZXJsYXk6ZnVuY3Rpb24oYil7dGhpcy4kZWw9YS51aS5kaWFsb2cub3ZlcmxheS5jcmVhdGUoYil9fSksYS5leHRlbmQoYS51aS5kaWFsb2cub3ZlcmxheSx7aW5zdGFuY2VzOltdLG9sZEluc3RhbmNlczpbXSxtYXhaOjAsZXZlbnRzOmEubWFwKCJmb2N1cyxtb3VzZWRvd24sbW91c2V1cCxrZXlkb3duLGtleXByZXNzLGNsaWNrIi5zcGxpdCgiLCIpLGZ1bmN0aW9uKGEpe3JldHVybiBhKyIuZGlhbG9nLW92ZXJsYXkifSkuam9pbigiICIpLGNyZWF0ZTpmdW5jdGlvbihiKXt0aGlzLmluc3RhbmNlcy5sZW5ndGg9PT0wJiYoc2V0VGltZW91dChmdW5jdGlvbigpe2EudWkuZGlhbG9nLm92ZXJsYXkuaW5zdGFuY2VzLmxlbmd0aCYmYShkb2N1bWVudCkuYmluZChhLnVpLmRpYWxvZy5vdmVybGF5LmV2ZW50cyxmdW5jdGlvbihiKXtpZihhKGIudGFyZ2V0KS56SW5kZXgoKTxhLnVpLmRpYWxvZy5vdmVybGF5Lm1heFopcmV0dXJuITF9KX0sMSksYShkb2N1bWVudCkuYmluZCgia2V5ZG93bi5kaWFsb2ctb3ZlcmxheSIsZnVuY3Rpb24oYyl7Yi5vcHRpb25zLmNsb3NlT25Fc2NhcGUmJiFjLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZjLmtleUNvZGUmJmMua2V5Q29kZT09PWEudWkua2V5Q29kZS5FU0NBUEUmJihiLmNsb3NlKGMpLGMucHJldmVudERlZmF1bHQoKSl9KSxhKHdpbmRvdykuYmluZCgicmVzaXplLmRpYWxvZy1vdmVybGF5IixhLnVpLmRpYWxvZy5vdmVybGF5LnJlc2l6ZSkpO3ZhciBjPSh0aGlzLm9sZEluc3RhbmNlcy5wb3AoKXx8YSgiPGRpdj48L2Rpdj4iKS5hZGRDbGFzcygidWktd2lkZ2V0LW92ZXJsYXkiKSkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSkuY3NzKHt3aWR0aDp0aGlzLndpZHRoKCksaGVpZ2h0OnRoaXMuaGVpZ2h0KCl9KTtyZXR1cm4gYS5mbi5iZ2lmcmFtZSYmYy5iZ2lmcmFtZSgpLHRoaXMuaW5zdGFuY2VzLnB1c2goYyksY30sZGVzdHJveTpmdW5jdGlvbihiKXt2YXIgYz1hLmluQXJyYXkoYix0aGlzLmluc3RhbmNlcyk7YyE9LTEmJnRoaXMub2xkSW5zdGFuY2VzLnB1c2godGhpcy5pbnN0YW5jZXMuc3BsaWNlKGMsMSlbMF0pLHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTAmJmEoW2RvY3VtZW50LHdpbmRvd10pLnVuYmluZCgiLmRpYWxvZy1vdmVybGF5IiksYi5yZW1vdmUoKTt2YXIgZD0wO2EuZWFjaCh0aGlzLmluc3RhbmNlcyxmdW5jdGlvbigpe2Q9TWF0aC5tYXgoZCx0aGlzLmNzcygiei1pbmRleCIpKX0pLHRoaXMubWF4Wj1kfSxoZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgYixjO3JldHVybiBhLmJyb3dzZXIubXNpZSYmYS5icm93c2VyLnZlcnNpb248Nz8oYj1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KSxjPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpLGI8Yz9hKHdpbmRvdykuaGVpZ2h0KCkrInB4IjpiKyJweCIpOmEoZG9jdW1lbnQpLmhlaWdodCgpKyJweCJ9LHdpZHRoOmZ1bmN0aW9uKCl7dmFyIGIsYztyZXR1cm4gYS5icm93c2VyLm1zaWU/KGI9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoLGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGgpLGM9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoLGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgpLGI8Yz9hKHdpbmRvdykud2lkdGgoKSsicHgiOmIrInB4Iik6YShkb2N1bWVudCkud2lkdGgoKSsicHgifSxyZXNpemU6ZnVuY3Rpb24oKXt2YXIgYj1hKFtdKTthLmVhY2goYS51aS5kaWFsb2cub3ZlcmxheS5pbnN0YW5jZXMsZnVuY3Rpb24oKXtiPWIuYWRkKHRoaXMpfSksYi5jc3Moe3dpZHRoOjAsaGVpZ2h0OjB9KS5jc3Moe3dpZHRoOmEudWkuZGlhbG9nLm92ZXJsYXkud2lkdGgoKSxoZWlnaHQ6YS51aS5kaWFsb2cub3ZlcmxheS5oZWlnaHQoKX0pfX0pLGEuZXh0ZW5kKGEudWkuZGlhbG9nLm92ZXJsYXkucHJvdG90eXBlLHtkZXN0cm95OmZ1bmN0aW9uKCl7YS51aS5kaWFsb2cub3ZlcmxheS5kZXN0cm95KHRoaXMuJGVsKX19KX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EudWk9YS51aXx8e307dmFyIGM9L2xlZnR8Y2VudGVyfHJpZ2h0LyxkPS90b3B8Y2VudGVyfGJvdHRvbS8sZT0iY2VudGVyIixmPXt9LGc9YS5mbi5wb3NpdGlvbixoPWEuZm4ub2Zmc2V0O2EuZm4ucG9zaXRpb249ZnVuY3Rpb24oYil7aWYoIWJ8fCFiLm9mKXJldHVybiBnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiPWEuZXh0ZW5kKHt9LGIpO3ZhciBoPWEoYi5vZiksaT1oWzBdLGo9KGIuY29sbGlzaW9ufHwiZmxpcCIpLnNwbGl0KCIgIiksaz1iLm9mZnNldD9iLm9mZnNldC5zcGxpdCgiICIpOlswLDBdLGwsbSxuO3JldHVybiBpLm5vZGVUeXBlPT09OT8obD1oLndpZHRoKCksbT1oLmhlaWdodCgpLG49e3RvcDowLGxlZnQ6MH0pOmkuc2V0VGltZW91dD8obD1oLndpZHRoKCksbT1oLmhlaWdodCgpLG49e3RvcDpoLnNjcm9sbFRvcCgpLGxlZnQ6aC5zY3JvbGxMZWZ0KCl9KTppLnByZXZlbnREZWZhdWx0PyhiLmF0PSJsZWZ0IHRvcCIsbD1tPTAsbj17dG9wOmIub2YucGFnZVksbGVmdDpiLm9mLnBhZ2VYfSk6KGw9aC5vdXRlcldpZHRoKCksbT1oLm91dGVySGVpZ2h0KCksbj1oLm9mZnNldCgpKSxhLmVhY2goWyJteSIsImF0Il0sZnVuY3Rpb24oKXt2YXIgYT0oYlt0aGlzXXx8IiIpLnNwbGl0KCIgIik7YS5sZW5ndGg9PT0xJiYoYT1jLnRlc3QoYVswXSk/YS5jb25jYXQoW2VdKTpkLnRlc3QoYVswXSk/W2VdLmNvbmNhdChhKTpbZSxlXSksYVswXT1jLnRlc3QoYVswXSk/YVswXTplLGFbMV09ZC50ZXN0KGFbMV0pP2FbMV06ZSxiW3RoaXNdPWF9KSxqLmxlbmd0aD09PTEmJihqWzFdPWpbMF0pLGtbMF09cGFyc2VJbnQoa1swXSwxMCl8fDAsay5sZW5ndGg9PT0xJiYoa1sxXT1rWzBdKSxrWzFdPXBhcnNlSW50KGtbMV0sMTApfHwwLGIuYXRbMF09PT0icmlnaHQiP24ubGVmdCs9bDpiLmF0WzBdPT09ZSYmKG4ubGVmdCs9bC8yKSxiLmF0WzFdPT09ImJvdHRvbSI/bi50b3ArPW06Yi5hdFsxXT09PWUmJihuLnRvcCs9bS8yKSxuLmxlZnQrPWtbMF0sbi50b3ArPWtbMV0sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWMub3V0ZXJXaWR0aCgpLGc9Yy5vdXRlckhlaWdodCgpLGg9cGFyc2VJbnQoYS5jdXJDU1ModGhpcywibWFyZ2luTGVmdCIsITApKXx8MCxpPXBhcnNlSW50KGEuY3VyQ1NTKHRoaXMsIm1hcmdpblRvcCIsITApKXx8MCxvPWQraCsocGFyc2VJbnQoYS5jdXJDU1ModGhpcywibWFyZ2luUmlnaHQiLCEwKSl8fDApLHA9ZytpKyhwYXJzZUludChhLmN1ckNTUyh0aGlzLCJtYXJnaW5Cb3R0b20iLCEwKSl8fDApLHE9YS5leHRlbmQoe30sbikscjtiLm15WzBdPT09InJpZ2h0Ij9xLmxlZnQtPWQ6Yi5teVswXT09PWUmJihxLmxlZnQtPWQvMiksYi5teVsxXT09PSJib3R0b20iP3EudG9wLT1nOmIubXlbMV09PT1lJiYocS50b3AtPWcvMiksZi5mcmFjdGlvbnN8fChxLmxlZnQ9TWF0aC5yb3VuZChxLmxlZnQpLHEudG9wPU1hdGgucm91bmQocS50b3ApKSxyPXtsZWZ0OnEubGVmdC1oLHRvcDpxLnRvcC1pfSxhLmVhY2goWyJsZWZ0IiwidG9wIl0sZnVuY3Rpb24oYyxlKXthLnVpLnBvc2l0aW9uW2pbY11dJiZhLnVpLnBvc2l0aW9uW2pbY11dW2VdKHEse3RhcmdldFdpZHRoOmwsdGFyZ2V0SGVpZ2h0Om0sZWxlbVdpZHRoOmQsZWxlbUhlaWdodDpnLGNvbGxpc2lvblBvc2l0aW9uOnIsY29sbGlzaW9uV2lkdGg6byxjb2xsaXNpb25IZWlnaHQ6cCxvZmZzZXQ6ayxteTpiLm15LGF0OmIuYXR9KX0pLGEuZm4uYmdpZnJhbWUmJmMuYmdpZnJhbWUoKSxjLm9mZnNldChhLmV4dGVuZChxLHt1c2luZzpiLnVzaW5nfSkpfSl9LGEudWkucG9zaXRpb249e2ZpdDp7bGVmdDpmdW5jdGlvbihiLGMpe3ZhciBkPWEod2luZG93KSxlPWMuY29sbGlzaW9uUG9zaXRpb24ubGVmdCtjLmNvbGxpc2lvbldpZHRoLWQud2lkdGgoKS1kLnNjcm9sbExlZnQoKTtiLmxlZnQ9ZT4wP2IubGVmdC1lOk1hdGgubWF4KGIubGVmdC1jLmNvbGxpc2lvblBvc2l0aW9uLmxlZnQsYi5sZWZ0KX0sdG9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh3aW5kb3cpLGU9Yy5jb2xsaXNpb25Qb3NpdGlvbi50b3ArYy5jb2xsaXNpb25IZWlnaHQtZC5oZWlnaHQoKS1kLnNjcm9sbFRvcCgpO2IudG9wPWU+MD9iLnRvcC1lOk1hdGgubWF4KGIudG9wLWMuY29sbGlzaW9uUG9zaXRpb24udG9wLGIudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oYixjKXtpZihjLmF0WzBdPT09ZSlyZXR1cm47dmFyIGQ9YSh3aW5kb3cpLGY9Yy5jb2xsaXNpb25Qb3NpdGlvbi5sZWZ0K2MuY29sbGlzaW9uV2lkdGgtZC53aWR0aCgpLWQuc2Nyb2xsTGVmdCgpLGc9Yy5teVswXT09PSJsZWZ0Ij8tYy5lbGVtV2lkdGg6Yy5teVswXT09PSJyaWdodCI/Yy5lbGVtV2lkdGg6MCxoPWMuYXRbMF09PT0ibGVmdCI/Yy50YXJnZXRXaWR0aDotYy50YXJnZXRXaWR0aCxpPS0yKmMub2Zmc2V0WzBdO2IubGVmdCs9Yy5jb2xsaXNpb25Qb3NpdGlvbi5sZWZ0PDA/ZytoK2k6Zj4wP2craCtpOjB9LHRvcDpmdW5jdGlvbihiLGMpe2lmKGMuYXRbMV09PT1lKXJldHVybjt2YXIgZD1hKHdpbmRvdyksZj1jLmNvbGxpc2lvblBvc2l0aW9uLnRvcCtjLmNvbGxpc2lvbkhlaWdodC1kLmhlaWdodCgpLWQuc2Nyb2xsVG9wKCksZz1jLm15WzFdPT09InRvcCI/LWMuZWxlbUhlaWdodDpjLm15WzFdPT09ImJvdHRvbSI/Yy5lbGVtSGVpZ2h0OjAsaD1jLmF0WzFdPT09InRvcCI/Yy50YXJnZXRIZWlnaHQ6LWMudGFyZ2V0SGVpZ2h0LGk9LTIqYy5vZmZzZXRbMV07Yi50b3ArPWMuY29sbGlzaW9uUG9zaXRpb24udG9wPDA/ZytoK2k6Zj4wP2craCtpOjB9fX0sYS5vZmZzZXQuc2V0T2Zmc2V0fHwoYS5vZmZzZXQuc2V0T2Zmc2V0PWZ1bmN0aW9uKGIsYyl7L3N0YXRpYy8udGVzdChhLmN1ckNTUyhiLCJwb3NpdGlvbiIpKSYmKGIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGQ9YShiKSxlPWQub2Zmc2V0KCksZj1wYXJzZUludChhLmN1ckNTUyhiLCJ0b3AiLCEwKSwxMCl8fDAsZz1wYXJzZUludChhLmN1ckNTUyhiLCJsZWZ0IiwhMCksMTApfHwwLGg9e3RvcDpjLnRvcC1lLnRvcCtmLGxlZnQ6Yy5sZWZ0LWUubGVmdCtnfTsidXNpbmciaW4gYz9jLnVzaW5nLmNhbGwoYixoKTpkLmNzcyhoKX0sYS5mbi5vZmZzZXQ9ZnVuY3Rpb24oYil7dmFyIGM9dGhpc1swXTtyZXR1cm4hY3x8IWMub3duZXJEb2N1bWVudD9udWxsOmI/YS5pc0Z1bmN0aW9uKGIpP3RoaXMuZWFjaChmdW5jdGlvbihjKXthKHRoaXMpLm9mZnNldChiLmNhbGwodGhpcyxjLGEodGhpcykub2Zmc2V0KCkpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe2Eub2Zmc2V0LnNldE9mZnNldCh0aGlzLGIpfSk6aC5jYWxsKHRoaXMpfSksYS5jdXJDU1N8fChhLmN1ckNTUz1hLmNzcyksZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZCxlLGcsaCxpO2Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChiPyJkaXYiOiJib2R5IiksZz17dmlzaWJpbGl0eToiaGlkZGVuIix3aWR0aDowLGhlaWdodDowLGJvcmRlcjowLG1hcmdpbjowLGJhY2tncm91bmQ6Im5vbmUifSxiJiZhLmV4dGVuZChnLHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwcHgiLHRvcDoiLTEwMDBweCJ9KTtmb3IodmFyIGogaW4gZylkLnN0eWxlW2pdPWdbal07ZC5hcHBlbmRDaGlsZChjKSxlPWJ8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlLmluc2VydEJlZm9yZShkLGUuZmlyc3RDaGlsZCksYy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEwLjc0MzIyMjJweDsgdG9wOiAxMC40MzIzMjVweDsgaGVpZ2h0OiAzMHB4OyB3aWR0aDogMjAxcHg7IixoPWEoYykub2Zmc2V0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ9KS5vZmZzZXQoKSxkLmlubmVySFRNTD0iIixlLnJlbW92ZUNoaWxkKGQpLGk9aC50b3AraC5sZWZ0KyhiPzJlMzowKSxmLmZyYWN0aW9ucz1pPjIxJiZpPDIyfSgpfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS53aWRnZXQoInVpLnByb2dyZXNzYmFyIix7b3B0aW9uczp7dmFsdWU6MCxtYXg6MTAwfSxtaW46MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLmF0dHIoe3JvbGU6InByb2dyZXNzYmFyIiwiYXJpYS12YWx1ZW1pbiI6dGhpcy5taW4sImFyaWEtdmFsdWVtYXgiOnRoaXMub3B0aW9ucy5tYXgsImFyaWEtdmFsdWVub3ciOnRoaXMuX3ZhbHVlKCl9KSx0aGlzLnZhbHVlRGl2PWEoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLXZhbHVlIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWxlZnQnPjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCksdGhpcy5vbGRWYWx1ZT10aGlzLl92YWx1ZSgpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLnZhbHVlRGl2LnJlbW92ZSgpLGEuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iP3RoaXMuX3ZhbHVlKCk6KHRoaXMuX3NldE9wdGlvbigidmFsdWUiLGEpLHRoaXMpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGIsYyl7Yj09PSJ2YWx1ZSImJih0aGlzLm9wdGlvbnMudmFsdWU9Yyx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl92YWx1ZSgpPT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcigiY29tcGxldGUiKSksYS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIHR5cGVvZiBhIT0ibnVtYmVyIiYmKGE9MCksTWF0aC5taW4odGhpcy5vcHRpb25zLm1heCxNYXRoLm1heCh0aGlzLm1pbixhKSl9LF9wZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLl92YWx1ZSgpL3RoaXMub3B0aW9ucy5tYXh9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnZhbHVlKCksYj10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy5vbGRWYWx1ZSE9PWEmJih0aGlzLm9sZFZhbHVlPWEsdGhpcy5fdHJpZ2dlcigiY2hhbmdlIikpLHRoaXMudmFsdWVEaXYudG9nZ2xlKGE+dGhpcy5taW4pLnRvZ2dsZUNsYXNzKCJ1aS1jb3JuZXItcmlnaHQiLGE9PT10aGlzLm9wdGlvbnMubWF4KS53aWR0aChiLnRvRml4ZWQoMCkrIiUiKSx0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS12YWx1ZW5vdyIsYSl9fSksYS5leHRlbmQoYS51aS5wcm9ncmVzc2Jhcix7dmVyc2lvbjoiMS44LjI0In0pfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGM9NTthLndpZGdldCgidWkuc2xpZGVyIixhLnVpLm1vdXNlLHt3aWRnZXRFdmVudFByZWZpeDoic2xpZGUiLG9wdGlvbnM6e2FuaW1hdGU6ITEsZGlzdGFuY2U6MCxtYXg6MTAwLG1pbjowLG9yaWVudGF0aW9uOiJob3Jpem9udGFsIixyYW5nZTohMSxzdGVwOjEsdmFsdWU6MCx2YWx1ZXM6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMsZD10aGlzLm9wdGlvbnMsZT10aGlzLmVsZW1lbnQuZmluZCgiLnVpLXNsaWRlci1oYW5kbGUiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiksZj0iPGEgY2xhc3M9J3VpLXNsaWRlci1oYW5kbGUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsJyBocmVmPScjJz48L2E+IixnPWQudmFsdWVzJiZkLnZhbHVlcy5sZW5ndGh8fDEsaD1bXTt0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKyIgdWktd2lkZ2V0IisiIHVpLXdpZGdldC1jb250ZW50IisiIHVpLWNvcm5lci1hbGwiKyhkLmRpc2FibGVkPyIgdWktc2xpZGVyLWRpc2FibGVkIHVpLWRpc2FibGVkIjoiIikpLHRoaXMucmFuZ2U9YShbXSksZC5yYW5nZSYmKGQucmFuZ2U9PT0hMCYmKGQudmFsdWVzfHwoZC52YWx1ZXM9W3RoaXMuX3ZhbHVlTWluKCksdGhpcy5fdmFsdWVNaW4oKV0pLGQudmFsdWVzLmxlbmd0aCYmZC52YWx1ZXMubGVuZ3RoIT09MiYmKGQudmFsdWVzPVtkLnZhbHVlc1swXSxkLnZhbHVlc1swXV0pKSx0aGlzLnJhbmdlPWEoIjxkaXY+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktc2xpZGVyLXJhbmdlIHVpLXdpZGdldC1oZWFkZXIiKyhkLnJhbmdlPT09Im1pbiJ8fGQucmFuZ2U9PT0ibWF4Ij8iIHVpLXNsaWRlci1yYW5nZS0iK2QucmFuZ2U6IiIpKSk7Zm9yKHZhciBpPWUubGVuZ3RoO2k8ZztpKz0xKWgucHVzaChmKTt0aGlzLmhhbmRsZXM9ZS5hZGQoYShoLmpvaW4oIiIpKS5hcHBlbmRUbyhiLmVsZW1lbnQpKSx0aGlzLmhhbmRsZT10aGlzLmhhbmRsZXMuZXEoMCksdGhpcy5oYW5kbGVzLmFkZCh0aGlzLnJhbmdlKS5maWx0ZXIoImEiKS5jbGljayhmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCl9KS5ob3ZlcihmdW5jdGlvbigpe2QuZGlzYWJsZWR8fGEodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9LGZ1bmN0aW9uKCl7YSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKX0pLmZvY3VzKGZ1bmN0aW9uKCl7ZC5kaXNhYmxlZD9hKHRoaXMpLmJsdXIoKTooYSgiLnVpLXNsaWRlciAudWktc3RhdGUtZm9jdXMiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSxhKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpKX0pLmJsdXIoZnVuY3Rpb24oKXthKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSksdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oYil7YSh0aGlzKS5kYXRhKCJpbmRleC51aS1zbGlkZXItaGFuZGxlIixiKX0pLHRoaXMuaGFuZGxlcy5rZXlkb3duKGZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcykuZGF0YSgiaW5kZXgudWktc2xpZGVyLWhhbmRsZSIpLGYsZyxoLGk7aWYoYi5vcHRpb25zLmRpc2FibGVkKXJldHVybjtzd2l0Y2goZC5rZXlDb2RlKXtjYXNlIGEudWkua2V5Q29kZS5IT01FOmNhc2UgYS51aS5rZXlDb2RlLkVORDpjYXNlIGEudWkua2V5Q29kZS5QQUdFX1VQOmNhc2UgYS51aS5rZXlDb2RlLlBBR0VfRE9XTjpjYXNlIGEudWkua2V5Q29kZS5VUDpjYXNlIGEudWkua2V5Q29kZS5SSUdIVDpjYXNlIGEudWkua2V5Q29kZS5ET1dOOmNhc2UgYS51aS5rZXlDb2RlLkxFRlQ6ZC5wcmV2ZW50RGVmYXVsdCgpO2lmKCFiLl9rZXlTbGlkaW5nKXtiLl9rZXlTbGlkaW5nPSEwLGEodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGY9Yi5fc3RhcnQoZCxlKTtpZihmPT09ITEpcmV0dXJufX1pPWIub3B0aW9ucy5zdGVwLGIub3B0aW9ucy52YWx1ZXMmJmIub3B0aW9ucy52YWx1ZXMubGVuZ3RoP2c9aD1iLnZhbHVlcyhlKTpnPWg9Yi52YWx1ZSgpO3N3aXRjaChkLmtleUNvZGUpe2Nhc2UgYS51aS5rZXlDb2RlLkhPTUU6aD1iLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgYS51aS5rZXlDb2RlLkVORDpoPWIuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSBhLnVpLmtleUNvZGUuUEFHRV9VUDpoPWIuX3RyaW1BbGlnblZhbHVlKGcrKGIuX3ZhbHVlTWF4KCktYi5fdmFsdWVNaW4oKSkvYyk7YnJlYWs7Y2FzZSBhLnVpLmtleUNvZGUuUEFHRV9ET1dOOmg9Yi5fdHJpbUFsaWduVmFsdWUoZy0oYi5fdmFsdWVNYXgoKS1iLl92YWx1ZU1pbigpKS9jKTticmVhaztjYXNlIGEudWkua2V5Q29kZS5VUDpjYXNlIGEudWkua2V5Q29kZS5SSUdIVDppZihnPT09Yi5fdmFsdWVNYXgoKSlyZXR1cm47aD1iLl90cmltQWxpZ25WYWx1ZShnK2kpO2JyZWFrO2Nhc2UgYS51aS5rZXlDb2RlLkRPV046Y2FzZSBhLnVpLmtleUNvZGUuTEVGVDppZihnPT09Yi5fdmFsdWVNaW4oKSlyZXR1cm47aD1iLl90cmltQWxpZ25WYWx1ZShnLWkpfWIuX3NsaWRlKGQsZSxoKX0pLmtleXVwKGZ1bmN0aW9uKGMpe3ZhciBkPWEodGhpcykuZGF0YSgiaW5kZXgudWktc2xpZGVyLWhhbmRsZSIpO2IuX2tleVNsaWRpbmcmJihiLl9rZXlTbGlkaW5nPSExLGIuX3N0b3AoYyxkKSxiLl9jaGFuZ2UoYyxkKSxhKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSl9KSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExfSxkZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFuZGxlcy5yZW1vdmUoKSx0aGlzLnJhbmdlLnJlbW92ZSgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCB1aS1zbGlkZXItZGlzYWJsZWQgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5yZW1vdmVEYXRhKCJzbGlkZXIiKS51bmJpbmQoIi5zbGlkZXIiKSx0aGlzLl9tb3VzZURlc3Ryb3koKSx0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMub3B0aW9ucyxkLGUsZixnLGgsaSxqLGssbDtyZXR1cm4gYy5kaXNhYmxlZD8hMToodGhpcy5lbGVtZW50U2l6ZT17d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCl9LHRoaXMuZWxlbWVudE9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksZD17eDpiLnBhZ2VYLHk6Yi5wYWdlWX0sZT10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UoZCksZj10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkrMSxoPXRoaXMsdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9TWF0aC5hYnMoZS1oLnZhbHVlcyhiKSk7Zj5jJiYoZj1jLGc9YSh0aGlzKSxpPWIpfSksYy5yYW5nZT09PSEwJiZ0aGlzLnZhbHVlcygxKT09PWMubWluJiYoaSs9MSxnPWEodGhpcy5oYW5kbGVzW2ldKSksaj10aGlzLl9zdGFydChiLGkpLGo9PT0hMT8hMToodGhpcy5fbW91c2VTbGlkaW5nPSEwLGguX2hhbmRsZUluZGV4PWksZy5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuZm9jdXMoKSxrPWcub2Zmc2V0KCksbD0hYShiLnRhcmdldCkucGFyZW50cygpLmFuZFNlbGYoKS5pcygiLnVpLXNsaWRlci1oYW5kbGUiKSx0aGlzLl9jbGlja09mZnNldD1sP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OmIucGFnZVgtay5sZWZ0LWcud2lkdGgoKS8yLHRvcDpiLnBhZ2VZLWsudG9wLWcuaGVpZ2h0KCkvMi0ocGFyc2VJbnQoZy5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZy5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZy5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MCl9LHRoaXMuaGFuZGxlcy5oYXNDbGFzcygidWktc3RhdGUtaG92ZXIiKXx8dGhpcy5fc2xpZGUoYixpLGUpLHRoaXMuX2FuaW1hdGVPZmY9ITAsITApKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oYSl7dmFyIGI9e3g6YS5wYWdlWCx5OmEucGFnZVl9LGM9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKGIpO3JldHVybiB0aGlzLl9zbGlkZShhLHRoaXMuX2hhbmRsZUluZGV4LGMpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9zdG9wKGEsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2NoYW5nZShhLHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9oYW5kbGVJbmRleD1udWxsLHRoaXMuX2NsaWNrT2Zmc2V0PW51bGwsdGhpcy5fYW5pbWF0ZU9mZj0hMSwhMX0sX2RldGVjdE9yaWVudGF0aW9uOmZ1bmN0aW9uKCl7dGhpcy5vcmllbnRhdGlvbj10aGlzLm9wdGlvbnMub3JpZW50YXRpb249PT0idmVydGljYWwiPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwifSxfbm9ybVZhbHVlRnJvbU1vdXNlOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGY7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/KGI9dGhpcy5lbGVtZW50U2l6ZS53aWR0aCxjPWEueC10aGlzLmVsZW1lbnRPZmZzZXQubGVmdC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQubGVmdDowKSk6KGI9dGhpcy5lbGVtZW50U2l6ZS5oZWlnaHQsYz1hLnktdGhpcy5lbGVtZW50T2Zmc2V0LnRvcC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQudG9wOjApKSxkPWMvYixkPjEmJihkPTEpLGQ8MCYmKGQ9MCksdGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCImJihkPTEtZCksZT10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCksZj10aGlzLl92YWx1ZU1pbigpK2QqZSx0aGlzLl90cmltQWxpZ25WYWx1ZShmKX0sX3N0YXJ0OmZ1bmN0aW9uKGEsYil7dmFyIGM9e2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6dGhpcy52YWx1ZSgpfTtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihjLnZhbHVlPXRoaXMudmFsdWVzKGIpLGMudmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX3RyaWdnZXIoInN0YXJ0IixhLGMpfSxfc2xpZGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZjt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD8oZD10aGlzLnZhbHVlcyhiPzA6MSksdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg9PT0yJiZ0aGlzLm9wdGlvbnMucmFuZ2U9PT0hMCYmKGI9PT0wJiZjPmR8fGI9PT0xJiZjPGQpJiYoYz1kKSxjIT09dGhpcy52YWx1ZXMoYikmJihlPXRoaXMudmFsdWVzKCksZVtiXT1jLGY9dGhpcy5fdHJpZ2dlcigic2xpZGUiLGEse2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6Yyx2YWx1ZXM6ZX0pLGQ9dGhpcy52YWx1ZXMoYj8wOjEpLGYhPT0hMSYmdGhpcy52YWx1ZXMoYixjLCEwKSkpOmMhPT10aGlzLnZhbHVlKCkmJihmPXRoaXMuX3RyaWdnZXIoInNsaWRlIixhLHtoYW5kbGU6dGhpcy5oYW5kbGVzW2JdLHZhbHVlOmN9KSxmIT09ITEmJnRoaXMudmFsdWUoYykpfSxfc3RvcDpmdW5jdGlvbihhLGIpe3ZhciBjPXtoYW5kbGU6dGhpcy5oYW5kbGVzW2JdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihjLnZhbHVlPXRoaXMudmFsdWVzKGIpLGMudmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX3RyaWdnZXIoInN0b3AiLGEsYyl9LF9jaGFuZ2U6ZnVuY3Rpb24oYSxiKXtpZighdGhpcy5fa2V5U2xpZGluZyYmIXRoaXMuX21vdXNlU2xpZGluZyl7dmFyIGM9e2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6dGhpcy52YWx1ZSgpfTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKGMudmFsdWU9dGhpcy52YWx1ZXMoYiksYy52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixhLGMpfX0sdmFsdWU6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aCl7dGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGEpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApO3JldHVybn1yZXR1cm4gdGhpcy5fdmFsdWUoKX0sdmFsdWVzOmZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7dGhpcy5vcHRpb25zLnZhbHVlc1tiXT10aGlzLl90cmltQWxpZ25WYWx1ZShjKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCxiKTtyZXR1cm59aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3ZhbHVlcygpO2lmKCFhLmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/dGhpcy5fdmFsdWVzKGIpOnRoaXMudmFsdWUoKTtkPXRoaXMub3B0aW9ucy52YWx1ZXMsZT1hcmd1bWVudHNbMF07Zm9yKGY9MDtmPGQubGVuZ3RoO2YrPTEpZFtmXT10aGlzLl90cmltQWxpZ25WYWx1ZShlW2ZdKSx0aGlzLl9jaGFuZ2UobnVsbCxmKTt0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe3ZhciBkLGU9MDthLmlzQXJyYXkodGhpcy5vcHRpb25zLnZhbHVlcykmJihlPXRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKSxhLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7c3dpdGNoKGIpe2Nhc2UiZGlzYWJsZWQiOmM/KHRoaXMuaGFuZGxlcy5maWx0ZXIoIi51aS1zdGF0ZS1mb2N1cyIpLmJsdXIoKSx0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksdGhpcy5oYW5kbGVzLnByb3BBdHRyKCJkaXNhYmxlZCIsITApLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZGlzYWJsZWQiKSk6KHRoaXMuaGFuZGxlcy5wcm9wQXR0cigiZGlzYWJsZWQiLCExKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRpc2FibGVkIikpO2JyZWFrO2Nhc2Uib3JpZW50YXRpb24iOnRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWwiKS5hZGRDbGFzcygidWktc2xpZGVyLSIrdGhpcy5vcmllbnRhdGlvbiksdGhpcy5fcmVmcmVzaFZhbHVlKCk7YnJlYWs7Y2FzZSJ2YWx1ZSI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UidmFsdWVzIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpO2ZvcihkPTA7ZDxlO2QrPTEpdGhpcy5fY2hhbmdlKG51bGwsZCk7dGhpcy5fYW5pbWF0ZU9mZj0hMX19LF92YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucy52YWx1ZTtyZXR1cm4gYT10aGlzLl90cmltQWxpZ25WYWx1ZShhKSxhfSxfdmFsdWVzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZDtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBiPXRoaXMub3B0aW9ucy52YWx1ZXNbYV0sYj10aGlzLl90cmltQWxpZ25WYWx1ZShiKSxiO2M9dGhpcy5vcHRpb25zLnZhbHVlcy5zbGljZSgpO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKz0xKWNbZF09dGhpcy5fdHJpbUFsaWduVmFsdWUoY1tkXSk7cmV0dXJuIGN9LF90cmltQWxpZ25WYWx1ZTpmdW5jdGlvbihhKXtpZihhPD10aGlzLl92YWx1ZU1pbigpKXJldHVybiB0aGlzLl92YWx1ZU1pbigpO2lmKGE+PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWF4KCk7dmFyIGI9dGhpcy5vcHRpb25zLnN0ZXA+MD90aGlzLm9wdGlvbnMuc3RlcDoxLGM9KGEtdGhpcy5fdmFsdWVNaW4oKSklYixkPWEtYztyZXR1cm4gTWF0aC5hYnMoYykqMj49YiYmKGQrPWM+MD9iOi1iKSxwYXJzZUZsb2F0KGQudG9GaXhlZCg1KSl9LF92YWx1ZU1pbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWlufSxfdmFsdWVNYXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heH0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucy5yYW5nZSxjPXRoaXMub3B0aW9ucyxkPXRoaXMsZT10aGlzLl9hbmltYXRlT2ZmPyExOmMuYW5pbWF0ZSxmLGc9e30saCxpLGosazt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihiLGkpe2Y9KGQudmFsdWVzKGIpLWQuX3ZhbHVlTWluKCkpLyhkLl92YWx1ZU1heCgpLWQuX3ZhbHVlTWluKCkpKjEwMCxnW2Qub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/ImxlZnQiOiJib3R0b20iXT1mKyIlIixhKHRoaXMpLnN0b3AoMSwxKVtlPyJhbmltYXRlIjoiY3NzIl0oZyxjLmFuaW1hdGUpLGQub3B0aW9ucy5yYW5nZT09PSEwJiYoZC5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8oYj09PTAmJmQucmFuZ2Uuc3RvcCgxLDEpW2U/ImFuaW1hdGUiOiJjc3MiXSh7bGVmdDpmKyIlIn0sYy5hbmltYXRlKSxiPT09MSYmZC5yYW5nZVtlPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOmYtaCsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpjLmFuaW1hdGV9KSk6KGI9PT0wJiZkLnJhbmdlLnN0b3AoMSwxKVtlPyJhbmltYXRlIjoiY3NzIl0oe2JvdHRvbTpmKyIlIn0sYy5hbmltYXRlKSxiPT09MSYmZC5yYW5nZVtlPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDpmLWgrIiUifSx7cXVldWU6ITEsZHVyYXRpb246Yy5hbmltYXRlfSkpKSxoPWZ9KTooaT10aGlzLnZhbHVlKCksaj10aGlzLl92YWx1ZU1pbigpLGs9dGhpcy5fdmFsdWVNYXgoKSxmPWshPT1qPyhpLWopLyhrLWopKjEwMDowLGdbZC5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8ibGVmdCI6ImJvdHRvbSJdPWYrIiUiLHRoaXMuaGFuZGxlLnN0b3AoMSwxKVtlPyJhbmltYXRlIjoiY3NzIl0oZyxjLmFuaW1hdGUpLGI9PT0ibWluIiYmdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbZT8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDpmKyIlIn0sYy5hbmltYXRlKSxiPT09Im1heCImJnRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCImJnRoaXMucmFuZ2VbZT8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDoxMDAtZisiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpjLmFuaW1hdGV9KSxiPT09Im1pbiImJnRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtlPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDpmKyIlIn0sYy5hbmltYXRlKSxiPT09Im1heCImJnRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiZ0aGlzLnJhbmdlW2U/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0OjEwMC1mKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOmMuYW5pbWF0ZX0pKX19KSxhLmV4dGVuZChhLnVpLnNsaWRlcix7dmVyc2lvbjoiMS44LjI0In0pfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZSgpe3JldHVybisrY31mdW5jdGlvbiBmKCl7cmV0dXJuKytkfXZhciBjPTAsZD0wO2Eud2lkZ2V0KCJ1aS50YWJzIix7b3B0aW9uczp7YWRkOm51bGwsYWpheE9wdGlvbnM6bnVsbCxjYWNoZTohMSxjb29raWU6bnVsbCxjb2xsYXBzaWJsZTohMSxkaXNhYmxlOm51bGwsZGlzYWJsZWQ6W10sZW5hYmxlOm51bGwsZXZlbnQ6ImNsaWNrIixmeDpudWxsLGlkUHJlZml4OiJ1aS10YWJzLSIsbG9hZDpudWxsLHBhbmVsVGVtcGxhdGU6IjxkaXY+PC9kaXY+IixyZW1vdmU6bnVsbCxzZWxlY3Q6bnVsbCxzaG93Om51bGwsc3Bpbm5lcjoiPGVtPkxvYWRpbmcmIzgyMzA7PC9lbT4iLHRhYlRlbXBsYXRlOiI8bGk+PGEgaHJlZj0nI3tocmVmfSc+PHNwYW4+I3tsYWJlbH08L3NwYW4+PC9hPjwvbGk+In0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3RhYmlmeSghMCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oYSxiKXtpZihhPT0ic2VsZWN0ZWQiKXtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2libGUmJmI9PXRoaXMub3B0aW9ucy5zZWxlY3RlZClyZXR1cm47dGhpcy5zZWxlY3QoYil9ZWxzZSB0aGlzLm9wdGlvbnNbYV09Yix0aGlzLl90YWJpZnkoKX0sX3RhYklkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRpdGxlJiZhLnRpdGxlLnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKC9bXlx3XHUwMGMwLVx1RkZGRi1dL2csIiIpfHx0aGlzLm9wdGlvbnMuaWRQcmVmaXgrZSgpfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC86L2csIlxcOiIpfSxfY29va2llOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5jb29raWV8fCh0aGlzLmNvb2tpZT10aGlzLm9wdGlvbnMuY29va2llLm5hbWV8fCJ1aS10YWJzLSIrZigpKTtyZXR1cm4gYS5jb29raWUuYXBwbHkobnVsbCxbYl0uY29uY2F0KGEubWFrZUFycmF5KGFyZ3VtZW50cykpKX0sX3VpOmZ1bmN0aW9uKGEsYil7cmV0dXJue3RhYjphLHBhbmVsOmIsaW5kZXg6dGhpcy5hbmNob3JzLmluZGV4KGEpfX0sX2NsZWFudXA6ZnVuY3Rpb24oKXt0aGlzLmxpcy5maWx0ZXIoIi51aS1zdGF0ZS1wcm9jZXNzaW5nIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLXByb2Nlc3NpbmciKS5maW5kKCJzcGFuOmRhdGEobGFiZWwudGFicykiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKTtiLmh0bWwoYi5kYXRhKCJsYWJlbC50YWJzIikpLnJlbW92ZURhdGEoImxhYmVsLnRhYnMiKX0pfSxfdGFiaWZ5OmZ1bmN0aW9uKGMpe2Z1bmN0aW9uIG0oYixjKXtiLmNzcygiZGlzcGxheSIsIiIpLCFhLnN1cHBvcnQub3BhY2l0eSYmYy5vcGFjaXR5JiZiWzBdLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIil9dmFyIGQ9dGhpcyxlPXRoaXMub3B0aW9ucyxmPS9eIy4rLzt0aGlzLmxpc3Q9dGhpcy5lbGVtZW50LmZpbmQoIm9sLHVsIikuZXEoMCksdGhpcy5saXM9YSgiID4gbGk6aGFzKGFbaHJlZl0pIix0aGlzLmxpc3QpLHRoaXMuYW5jaG9ycz10aGlzLmxpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gYSgiYSIsdGhpcylbMF19KSx0aGlzLnBhbmVscz1hKFtdKSx0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbihiLGMpe3ZhciBnPWEoYykuYXR0cigiaHJlZiIpLGg9Zy5zcGxpdCgiIyIpWzBdLGk7aCYmKGg9PT1sb2NhdGlvbi50b1N0cmluZygpLnNwbGl0KCIjIilbMF18fChpPWEoImJhc2UiKVswXSkmJmg9PT1pLmhyZWYpJiYoZz1jLmhhc2gsYy5ocmVmPWcpO2lmKGYudGVzdChnKSlkLnBhbmVscz1kLnBhbmVscy5hZGQoZC5lbGVtZW50LmZpbmQoZC5fc2FuaXRpemVTZWxlY3RvcihnKSkpO2Vsc2UgaWYoZyYmZyE9PSIjIil7YS5kYXRhKGMsImhyZWYudGFicyIsZyksYS5kYXRhKGMsImxvYWQudGFicyIsZy5yZXBsYWNlKC8jLiokLywiIikpO3ZhciBqPWQuX3RhYklkKGMpO2MuaHJlZj0iIyIrajt2YXIgaz1kLmVsZW1lbnQuZmluZCgiIyIraik7ay5sZW5ndGh8fChrPWEoZS5wYW5lbFRlbXBsYXRlKS5hdHRyKCJpZCIsaikuYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmluc2VydEFmdGVyKGQucGFuZWxzW2ItMV18fGQubGlzdCksay5kYXRhKCJkZXN0cm95LnRhYnMiLCEwKSksZC5wYW5lbHM9ZC5wYW5lbHMuYWRkKGspfWVsc2UgZS5kaXNhYmxlZC5wdXNoKGIpfSksYz8odGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIiksdGhpcy5saXN0LmFkZENsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLHRoaXMubGlzLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AiKSx0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIiksZS5zZWxlY3RlZD09PWI/KGxvY2F0aW9uLmhhc2gmJnRoaXMuYW5jaG9ycy5lYWNoKGZ1bmN0aW9uKGEsYil7aWYoYi5oYXNoPT1sb2NhdGlvbi5oYXNoKXJldHVybiBlLnNlbGVjdGVkPWEsITF9KSx0eXBlb2YgZS5zZWxlY3RlZCE9Im51bWJlciImJmUuY29va2llJiYoZS5zZWxlY3RlZD1wYXJzZUludChkLl9jb29raWUoKSwxMCkpLHR5cGVvZiBlLnNlbGVjdGVkIT0ibnVtYmVyIiYmdGhpcy5saXMuZmlsdGVyKCIudWktdGFicy1zZWxlY3RlZCIpLmxlbmd0aCYmKGUuc2VsZWN0ZWQ9dGhpcy5saXMuaW5kZXgodGhpcy5saXMuZmlsdGVyKCIudWktdGFicy1zZWxlY3RlZCIpKSksZS5zZWxlY3RlZD1lLnNlbGVjdGVkfHwodGhpcy5saXMubGVuZ3RoPzA6LTEpKTplLnNlbGVjdGVkPT09bnVsbCYmKGUuc2VsZWN0ZWQ9LTEpLGUuc2VsZWN0ZWQ9ZS5zZWxlY3RlZD49MCYmdGhpcy5hbmNob3JzW2Uuc2VsZWN0ZWRdfHxlLnNlbGVjdGVkPDA/ZS5zZWxlY3RlZDowLGUuZGlzYWJsZWQ9YS51bmlxdWUoZS5kaXNhYmxlZC5jb25jYXQoYS5tYXAodGhpcy5saXMuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihhLGIpe3JldHVybiBkLmxpcy5pbmRleChhKX0pKSkuc29ydCgpLGEuaW5BcnJheShlLnNlbGVjdGVkLGUuZGlzYWJsZWQpIT0tMSYmZS5kaXNhYmxlZC5zcGxpY2UoYS5pbkFycmF5KGUuc2VsZWN0ZWQsZS5kaXNhYmxlZCksMSksdGhpcy5wYW5lbHMuYWRkQ2xhc3MoInVpLXRhYnMtaGlkZSIpLHRoaXMubGlzLnJlbW92ZUNsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIHVpLXN0YXRlLWFjdGl2ZSIpLGUuc2VsZWN0ZWQ+PTAmJnRoaXMuYW5jaG9ycy5sZW5ndGgmJihkLmVsZW1lbnQuZmluZChkLl9zYW5pdGl6ZVNlbGVjdG9yKGQuYW5jaG9yc1tlLnNlbGVjdGVkXS5oYXNoKSkucmVtb3ZlQ2xhc3MoInVpLXRhYnMtaGlkZSIpLHRoaXMubGlzLmVxKGUuc2VsZWN0ZWQpLmFkZENsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIHVpLXN0YXRlLWFjdGl2ZSIpLGQuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtkLl90cmlnZ2VyKCJzaG93IixudWxsLGQuX3VpKGQuYW5jaG9yc1tlLnNlbGVjdGVkXSxkLmVsZW1lbnQuZmluZChkLl9zYW5pdGl6ZVNlbGVjdG9yKGQuYW5jaG9yc1tlLnNlbGVjdGVkXS5oYXNoKSlbMF0pKX0pLHRoaXMubG9hZChlLnNlbGVjdGVkKSksYSh3aW5kb3cpLmJpbmQoInVubG9hZCIsZnVuY3Rpb24oKXtkLmxpcy5hZGQoZC5hbmNob3JzKS51bmJpbmQoIi50YWJzIiksZC5saXM9ZC5hbmNob3JzPWQucGFuZWxzPW51bGx9KSk6ZS5zZWxlY3RlZD10aGlzLmxpcy5pbmRleCh0aGlzLmxpcy5maWx0ZXIoIi51aS10YWJzLXNlbGVjdGVkIikpLHRoaXMuZWxlbWVudFtlLmNvbGxhcHNpYmxlPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oInVpLXRhYnMtY29sbGFwc2libGUiKSxlLmNvb2tpZSYmdGhpcy5fY29va2llKGUuc2VsZWN0ZWQsZS5jb29raWUpO2Zvcih2YXIgZz0wLGg7aD10aGlzLmxpc1tnXTtnKyspYShoKVthLmluQXJyYXkoZyxlLmRpc2FibGVkKSE9LTEmJiFhKGgpLmhhc0NsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIik/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgidWktc3RhdGUtZGlzYWJsZWQiKTtlLmNhY2hlPT09ITEmJnRoaXMuYW5jaG9ycy5yZW1vdmVEYXRhKCJjYWNoZS50YWJzIiksdGhpcy5saXMuYWRkKHRoaXMuYW5jaG9ycykudW5iaW5kKCIudGFicyIpO2lmKGUuZXZlbnQhPT0ibW91c2VvdmVyIil7dmFyIGk9ZnVuY3Rpb24oYSxiKXtiLmlzKCI6bm90KC51aS1zdGF0ZS1kaXNhYmxlZCkiKSYmYi5hZGRDbGFzcygidWktc3RhdGUtIithKX0saj1mdW5jdGlvbihhLGIpe2IucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLSIrYSl9O3RoaXMubGlzLmJpbmQoIm1vdXNlb3Zlci50YWJzIixmdW5jdGlvbigpe2koImhvdmVyIixhKHRoaXMpKX0pLHRoaXMubGlzLmJpbmQoIm1vdXNlb3V0LnRhYnMiLGZ1bmN0aW9uKCl7aigiaG92ZXIiLGEodGhpcykpfSksdGhpcy5hbmNob3JzLmJpbmQoImZvY3VzLnRhYnMiLGZ1bmN0aW9uKCl7aSgiZm9jdXMiLGEodGhpcykuY2xvc2VzdCgibGkiKSl9KSx0aGlzLmFuY2hvcnMuYmluZCgiYmx1ci50YWJzIixmdW5jdGlvbigpe2ooImZvY3VzIixhKHRoaXMpLmNsb3Nlc3QoImxpIikpfSl9dmFyIGssbDtlLmZ4JiYoYS5pc0FycmF5KGUuZngpPyhrPWUuZnhbMF0sbD1lLmZ4WzFdKTprPWw9ZS5meCk7dmFyIG49bD9mdW5jdGlvbihiLGMpe2EoYikuY2xvc2VzdCgibGkiKS5hZGRDbGFzcygidWktdGFicy1zZWxlY3RlZCB1aS1zdGF0ZS1hY3RpdmUiKSxjLmhpZGUoKS5yZW1vdmVDbGFzcygidWktdGFicy1oaWRlIikuYW5pbWF0ZShsLGwuZHVyYXRpb258fCJub3JtYWwiLGZ1bmN0aW9uKCl7bShjLGwpLGQuX3RyaWdnZXIoInNob3ciLG51bGwsZC5fdWkoYixjWzBdKSl9KX06ZnVuY3Rpb24oYixjKXthKGIpLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlIiksYy5yZW1vdmVDbGFzcygidWktdGFicy1oaWRlIiksZC5fdHJpZ2dlcigic2hvdyIsbnVsbCxkLl91aShiLGNbMF0pKX0sbz1rP2Z1bmN0aW9uKGEsYil7Yi5hbmltYXRlKGssay5kdXJhdGlvbnx8Im5vcm1hbCIsZnVuY3Rpb24oKXtkLmxpcy5yZW1vdmVDbGFzcygidWktdGFicy1zZWxlY3RlZCB1aS1zdGF0ZS1hY3RpdmUiKSxiLmFkZENsYXNzKCJ1aS10YWJzLWhpZGUiKSxtKGIsayksZC5lbGVtZW50LmRlcXVldWUoInRhYnMiKX0pfTpmdW5jdGlvbihhLGIsYyl7ZC5saXMucmVtb3ZlQ2xhc3MoInVpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlIiksYi5hZGRDbGFzcygidWktdGFicy1oaWRlIiksZC5lbGVtZW50LmRlcXVldWUoInRhYnMiKX07dGhpcy5hbmNob3JzLmJpbmQoZS5ldmVudCsiLnRhYnMiLGZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPWEoYikuY2xvc2VzdCgibGkiKSxmPWQucGFuZWxzLmZpbHRlcigiOm5vdCgudWktdGFicy1oaWRlKSIpLGc9ZC5lbGVtZW50LmZpbmQoZC5fc2FuaXRpemVTZWxlY3RvcihiLmhhc2gpKTtpZihjLmhhc0NsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIikmJiFlLmNvbGxhcHNpYmxlfHxjLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHxjLmhhc0NsYXNzKCJ1aS1zdGF0ZS1wcm9jZXNzaW5nIil8fGQucGFuZWxzLmZpbHRlcigiOmFuaW1hdGVkIikubGVuZ3RofHxkLl90cmlnZ2VyKCJzZWxlY3QiLG51bGwsZC5fdWkodGhpcyxnWzBdKSk9PT0hMSlyZXR1cm4gdGhpcy5ibHVyKCksITE7ZS5zZWxlY3RlZD1kLmFuY2hvcnMuaW5kZXgodGhpcyksZC5hYm9ydCgpO2lmKGUuY29sbGFwc2libGUpe2lmKGMuaGFzQ2xhc3MoInVpLXRhYnMtc2VsZWN0ZWQiKSlyZXR1cm4gZS5zZWxlY3RlZD0tMSxlLmNvb2tpZSYmZC5fY29va2llKGUuc2VsZWN0ZWQsZS5jb29raWUpLGQuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtvKGIsZil9KS5kZXF1ZXVlKCJ0YWJzIiksdGhpcy5ibHVyKCksITE7aWYoIWYubGVuZ3RoKXJldHVybiBlLmNvb2tpZSYmZC5fY29va2llKGUuc2VsZWN0ZWQsZS5jb29raWUpLGQuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtuKGIsZyl9KSxkLmxvYWQoZC5hbmNob3JzLmluZGV4KHRoaXMpKSx0aGlzLmJsdXIoKSwhMX1lLmNvb2tpZSYmZC5fY29va2llKGUuc2VsZWN0ZWQsZS5jb29raWUpO2lmKGcubGVuZ3RoKWYubGVuZ3RoJiZkLmVsZW1lbnQucXVldWUoInRhYnMiLGZ1bmN0aW9uKCl7byhiLGYpfSksZC5lbGVtZW50LnF1ZXVlKCJ0YWJzIixmdW5jdGlvbigpe24oYixnKX0pLGQubG9hZChkLmFuY2hvcnMuaW5kZXgodGhpcykpO2Vsc2UgdGhyb3cialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuIjthLmJyb3dzZXIubXNpZSYmdGhpcy5ibHVyKCl9KSx0aGlzLmFuY2hvcnMuYmluZCgiY2xpY2sudGFicyIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pfSxfZ2V0SW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIiYmKGE9dGhpcy5hbmNob3JzLmluZGV4KHRoaXMuYW5jaG9ycy5maWx0ZXIoIltocmVmJD0nIithKyInXSIpKSksYX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5hYm9ydCgpLHRoaXMuZWxlbWVudC51bmJpbmQoIi50YWJzIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZSIpLnJlbW92ZURhdGEoInRhYnMiKSx0aGlzLmxpc3QucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIiksdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hLmRhdGEodGhpcywiaHJlZi50YWJzIik7YiYmKHRoaXMuaHJlZj1iKTt2YXIgYz1hKHRoaXMpLnVuYmluZCgiLnRhYnMiKTthLmVhY2goWyJocmVmIiwibG9hZCIsImNhY2hlIl0sZnVuY3Rpb24oYSxiKXtjLnJlbW92ZURhdGEoYisiLnRhYnMiKX0pfSksdGhpcy5saXMudW5iaW5kKCIudGFicyIpLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2EuZGF0YSh0aGlzLCJkZXN0cm95LnRhYnMiKT9hKHRoaXMpLnJlbW92ZSgpOmEodGhpcykucmVtb3ZlQ2xhc3MoWyJ1aS1zdGF0ZS1kZWZhdWx0IiwidWktY29ybmVyLXRvcCIsInVpLXRhYnMtc2VsZWN0ZWQiLCJ1aS1zdGF0ZS1hY3RpdmUiLCJ1aS1zdGF0ZS1ob3ZlciIsInVpLXN0YXRlLWZvY3VzIiwidWktc3RhdGUtZGlzYWJsZWQiLCJ1aS10YWJzLXBhbmVsIiwidWktd2lkZ2V0LWNvbnRlbnQiLCJ1aS1jb3JuZXItYm90dG9tIiwidWktdGFicy1oaWRlIl0uam9pbigiICIpKX0pLGIuY29va2llJiZ0aGlzLl9jb29raWUobnVsbCxiLmNvb2tpZSksdGhpc30sYWRkOmZ1bmN0aW9uKGMsZCxlKXtlPT09YiYmKGU9dGhpcy5hbmNob3JzLmxlbmd0aCk7dmFyIGY9dGhpcyxnPXRoaXMub3B0aW9ucyxoPWEoZy50YWJUZW1wbGF0ZS5yZXBsYWNlKC8jXHtocmVmXH0vZyxjKS5yZXBsYWNlKC8jXHtsYWJlbFx9L2csZCkpLGk9Yy5pbmRleE9mKCIjIik/dGhpcy5fdGFiSWQoYSgiYSIsaClbMF0pOmMucmVwbGFjZSgiIyIsIiIpO2guYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCIpLmRhdGEoImRlc3Ryb3kudGFicyIsITApO3ZhciBqPWYuZWxlbWVudC5maW5kKCIjIitpKTtyZXR1cm4gai5sZW5ndGh8fChqPWEoZy5wYW5lbFRlbXBsYXRlKS5hdHRyKCJpZCIsaSkuZGF0YSgiZGVzdHJveS50YWJzIiwhMCkpLGouYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSB1aS10YWJzLWhpZGUiKSxlPj10aGlzLmxpcy5sZW5ndGg/KGguYXBwZW5kVG8odGhpcy5saXN0KSxqLmFwcGVuZFRvKHRoaXMubGlzdFswXS5wYXJlbnROb2RlKSk6KGguaW5zZXJ0QmVmb3JlKHRoaXMubGlzW2VdKSxqLmluc2VydEJlZm9yZSh0aGlzLnBhbmVsc1tlXSkpLGcuZGlzYWJsZWQ9YS5tYXAoZy5kaXNhYmxlZCxmdW5jdGlvbihhLGIpe3JldHVybiBhPj1lPysrYTphfSksdGhpcy5fdGFiaWZ5KCksdGhpcy5hbmNob3JzLmxlbmd0aD09MSYmKGcuc2VsZWN0ZWQ9MCxoLmFkZENsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIHVpLXN0YXRlLWFjdGl2ZSIpLGoucmVtb3ZlQ2xhc3MoInVpLXRhYnMtaGlkZSIpLHRoaXMuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtmLl90cmlnZ2VyKCJzaG93IixudWxsLGYuX3VpKGYuYW5jaG9yc1swXSxmLnBhbmVsc1swXSkpfSksdGhpcy5sb2FkKDApKSx0aGlzLl90cmlnZ2VyKCJhZGQiLG51bGwsdGhpcy5fdWkodGhpcy5hbmNob3JzW2VdLHRoaXMucGFuZWxzW2VdKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGIpe2I9dGhpcy5fZ2V0SW5kZXgoYik7dmFyIGM9dGhpcy5vcHRpb25zLGQ9dGhpcy5saXMuZXEoYikucmVtb3ZlKCksZT10aGlzLnBhbmVscy5lcShiKS5yZW1vdmUoKTtyZXR1cm4gZC5oYXNDbGFzcygidWktdGFicy1zZWxlY3RlZCIpJiZ0aGlzLmFuY2hvcnMubGVuZ3RoPjEmJnRoaXMuc2VsZWN0KGIrKGIrMTx0aGlzLmFuY2hvcnMubGVuZ3RoPzE6LTEpKSxjLmRpc2FibGVkPWEubWFwKGEuZ3JlcChjLmRpc2FibGVkLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEhPWJ9KSxmdW5jdGlvbihhLGMpe3JldHVybiBhPj1iPy0tYTphfSksdGhpcy5fdGFiaWZ5KCksdGhpcy5fdHJpZ2dlcigicmVtb3ZlIixudWxsLHRoaXMuX3VpKGQuZmluZCgiYSIpWzBdLGVbMF0pKSx0aGlzfSxlbmFibGU6ZnVuY3Rpb24oYil7Yj10aGlzLl9nZXRJbmRleChiKTt2YXIgYz10aGlzLm9wdGlvbnM7aWYoYS5pbkFycmF5KGIsYy5kaXNhYmxlZCk9PS0xKXJldHVybjtyZXR1cm4gdGhpcy5saXMuZXEoYikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksYy5kaXNhYmxlZD1hLmdyZXAoYy5kaXNhYmxlZCxmdW5jdGlvbihhLGMpe3JldHVybiBhIT1ifSksdGhpcy5fdHJpZ2dlcigiZW5hYmxlIixudWxsLHRoaXMuX3VpKHRoaXMuYW5jaG9yc1tiXSx0aGlzLnBhbmVsc1tiXSkpLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oYSl7YT10aGlzLl9nZXRJbmRleChhKTt2YXIgYj10aGlzLGM9dGhpcy5vcHRpb25zO3JldHVybiBhIT1jLnNlbGVjdGVkJiYodGhpcy5saXMuZXEoYSkuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksYy5kaXNhYmxlZC5wdXNoKGEpLGMuZGlzYWJsZWQuc29ydCgpLHRoaXMuX3RyaWdnZXIoImRpc2FibGUiLG51bGwsdGhpcy5fdWkodGhpcy5hbmNob3JzW2FdLHRoaXMucGFuZWxzW2FdKSkpLHRoaXN9LHNlbGVjdDpmdW5jdGlvbihhKXthPXRoaXMuX2dldEluZGV4KGEpO2lmKGE9PS0xKWlmKHRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZSYmdGhpcy5vcHRpb25zLnNlbGVjdGVkIT0tMSlhPXRoaXMub3B0aW9ucy5zZWxlY3RlZDtlbHNlIHJldHVybiB0aGlzO3JldHVybiB0aGlzLmFuY2hvcnMuZXEoYSkudHJpZ2dlcih0aGlzLm9wdGlvbnMuZXZlbnQrIi50YWJzIiksdGhpc30sbG9hZDpmdW5jdGlvbihiKXtiPXRoaXMuX2dldEluZGV4KGIpO3ZhciBjPXRoaXMsZD10aGlzLm9wdGlvbnMsZT10aGlzLmFuY2hvcnMuZXEoYilbMF0sZj1hLmRhdGEoZSwibG9hZC50YWJzIik7dGhpcy5hYm9ydCgpO2lmKCFmfHx0aGlzLmVsZW1lbnQucXVldWUoInRhYnMiKS5sZW5ndGghPT0wJiZhLmRhdGEoZSwiY2FjaGUudGFicyIpKXt0aGlzLmVsZW1lbnQuZGVxdWV1ZSgidGFicyIpO3JldHVybn10aGlzLmxpcy5lcShiKS5hZGRDbGFzcygidWktc3RhdGUtcHJvY2Vzc2luZyIpO2lmKGQuc3Bpbm5lcil7dmFyIGc9YSgic3BhbiIsZSk7Zy5kYXRhKCJsYWJlbC50YWJzIixnLmh0bWwoKSkuaHRtbChkLnNwaW5uZXIpfXJldHVybiB0aGlzLnhocj1hLmFqYXgoYS5leHRlbmQoe30sZC5hamF4T3B0aW9ucyx7dXJsOmYsc3VjY2VzczpmdW5jdGlvbihmLGcpe2MuZWxlbWVudC5maW5kKGMuX3Nhbml0aXplU2VsZWN0b3IoZS5oYXNoKSkuaHRtbChmKSxjLl9jbGVhbnVwKCksZC5jYWNoZSYmYS5kYXRhKGUsImNhY2hlLnRhYnMiLCEwKSxjLl90cmlnZ2VyKCJsb2FkIixudWxsLGMuX3VpKGMuYW5jaG9yc1tiXSxjLnBhbmVsc1tiXSkpO3RyeXtkLmFqYXhPcHRpb25zLnN1Y2Nlc3MoZixnKX1jYXRjaChoKXt9fSxlcnJvcjpmdW5jdGlvbihhLGYsZyl7Yy5fY2xlYW51cCgpLGMuX3RyaWdnZXIoImxvYWQiLG51bGwsYy5fdWkoYy5hbmNob3JzW2JdLGMucGFuZWxzW2JdKSk7dHJ5e2QuYWpheE9wdGlvbnMuZXJyb3IoYSxmLGIsZSl9Y2F0Y2goZyl7fX19KSksYy5lbGVtZW50LmRlcXVldWUoInRhYnMiKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQucXVldWUoW10pLHRoaXMucGFuZWxzLnN0b3AoITEsITApLHRoaXMuZWxlbWVudC5xdWV1ZSgidGFicyIsdGhpcy5lbGVtZW50LnF1ZXVlKCJ0YWJzIikuc3BsaWNlKC0yLDIpKSx0aGlzLnhociYmKHRoaXMueGhyLmFib3J0KCksZGVsZXRlIHRoaXMueGhyKSx0aGlzLl9jbGVhbnVwKCksdGhpc30sdXJsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYW5jaG9ycy5lcShhKS5yZW1vdmVEYXRhKCJjYWNoZS50YWJzIikuZGF0YSgibG9hZC50YWJzIixiKSx0aGlzfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbmNob3JzLmxlbmd0aH19KSxhLmV4dGVuZChhLnVpLnRhYnMse3ZlcnNpb246IjEuOC4yNCJ9KSxhLmV4dGVuZChhLnVpLnRhYnMucHJvdG90eXBlLHtyb3RhdGlvbjpudWxsLHJvdGF0ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMsZD10aGlzLm9wdGlvbnMsZT1jLl9yb3RhdGV8fChjLl9yb3RhdGU9ZnVuY3Rpb24oYil7Y2xlYXJUaW1lb3V0KGMucm90YXRpb24pLGMucm90YXRpb249c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWQuc2VsZWN0ZWQ7Yy5zZWxlY3QoKythPGMuYW5jaG9ycy5sZW5ndGg/YTowKX0sYSksYiYmYi5zdG9wUHJvcGFnYXRpb24oKX0pLGY9Yy5fdW5yb3RhdGV8fChjLl91bnJvdGF0ZT1iP2Z1bmN0aW9uKGEpe2UoKX06ZnVuY3Rpb24oYSl7YS5jbGllbnRYJiZjLnJvdGF0ZShudWxsKX0pO3JldHVybiBhPyh0aGlzLmVsZW1lbnQuYmluZCgidGFic3Nob3ciLGUpLHRoaXMuYW5jaG9ycy5iaW5kKGQuZXZlbnQrIi50YWJzIixmKSxlKCkpOihjbGVhclRpbWVvdXQoYy5yb3RhdGlvbiksdGhpcy5lbGVtZW50LnVuYmluZCgidGFic3Nob3ciLGUpLHRoaXMuYW5jaG9ycy51bmJpbmQoZC5ldmVudCsiLnRhYnMiLGYpLGRlbGV0ZSB0aGlzLl9yb3RhdGUsZGVsZXRlIHRoaXMuX3Vucm90YXRlKSx0aGlzfX0pfShqUXVlcnkpOwoK"></script>
	<script id= "script_sl_jquery_easing_js" src="data:/text/plain;base64,LyoKICogalF1ZXJ5IEVhc2luZyB2MS4zIC0gaHR0cDovL2dzZ2QuY28udWsvc2FuZGJveC9qcXVlcnkvZWFzaW5nLwogKgogKiBVc2VzIHRoZSBidWlsdCBpbiBlYXNpbmcgY2FwYWJpbGl0aWVzIGFkZGVkIEluIGpRdWVyeSAxLjEKICogdG8gb2ZmZXIgbXVsdGlwbGUgZWFzaW5nIG9wdGlvbnMKICoKICogVEVSTVMgT0YgVVNFIC0galF1ZXJ5IEVhc2luZwogKiAKICogT3BlbiBzb3VyY2UgdW5kZXIgdGhlIEJTRCBMaWNlbnNlLiAKICogCiAqIENvcHlyaWdodCDCqSAyMDA4IEdlb3JnZSBNY0dpbmxleSBTbWl0aAogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCiAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKICogCiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIAogKiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IAogKiBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyAKICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAKICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UgCiAqIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqIAogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSAKICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogKiAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCiAqICBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgCiAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCiAqICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICoKKi8KCi8vIHQ6IGN1cnJlbnQgdGltZSwgYjogYmVnSW5uSW5nIHZhbHVlLCBjOiBjaGFuZ2UgSW4gdmFsdWUsIGQ6IGR1cmF0aW9uCmpRdWVyeS5lYXNpbmdbJ2pzd2luZyddID0galF1ZXJ5LmVhc2luZ1snc3dpbmcnXTsKCmpRdWVyeS5leHRlbmQoIGpRdWVyeS5lYXNpbmcsCnsKCWRlZjogJ2Vhc2VPdXRRdWFkJywKCXN3aW5nOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCS8vYWxlcnQoalF1ZXJ5LmVhc2luZy5kZWZhdWx0KTsKCQlyZXR1cm4galF1ZXJ5LmVhc2luZ1tqUXVlcnkuZWFzaW5nLmRlZl0oeCwgdCwgYiwgYywgZCk7Cgl9LAoJZWFzZUluUXVhZDogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gYyoodC89ZCkqdCArIGI7Cgl9LAoJZWFzZU91dFF1YWQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIC1jICoodC89ZCkqKHQtMikgKyBiOwoJfSwKCWVhc2VJbk91dFF1YWQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQgKyBiOwoJCXJldHVybiAtYy8yICogKCgtLXQpKih0LTIpIC0gMSkgKyBiOwoJfSwKCWVhc2VJbkN1YmljOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXJldHVybiBjKih0Lz1kKSp0KnQgKyBiOwoJfSwKCWVhc2VPdXRDdWJpYzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gYyooKHQ9dC9kLTEpKnQqdCArIDEpICsgYjsKCX0sCgllYXNlSW5PdXRDdWJpYzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlpZiAoKHQvPWQvMikgPCAxKSByZXR1cm4gYy8yKnQqdCp0ICsgYjsKCQlyZXR1cm4gYy8yKigodC09MikqdCp0ICsgMikgKyBiOwoJfSwKCWVhc2VJblF1YXJ0OiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXJldHVybiBjKih0Lz1kKSp0KnQqdCArIGI7Cgl9LAoJZWFzZU91dFF1YXJ0OiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXJldHVybiAtYyAqICgodD10L2QtMSkqdCp0KnQgLSAxKSArIGI7Cgl9LAoJZWFzZUluT3V0UXVhcnQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQqdCp0ICsgYjsKCQlyZXR1cm4gLWMvMiAqICgodC09MikqdCp0KnQgLSAyKSArIGI7Cgl9LAoJZWFzZUluUXVpbnQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIGMqKHQvPWQpKnQqdCp0KnQgKyBiOwoJfSwKCWVhc2VPdXRRdWludDogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gYyooKHQ9dC9kLTEpKnQqdCp0KnQgKyAxKSArIGI7Cgl9LAoJZWFzZUluT3V0UXVpbnQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQqdCp0KnQgKyBiOwoJCXJldHVybiBjLzIqKCh0LT0yKSp0KnQqdCp0ICsgMikgKyBiOwoJfSwKCWVhc2VJblNpbmU6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIC1jICogTWF0aC5jb3ModC9kICogKE1hdGguUEkvMikpICsgYyArIGI7Cgl9LAoJZWFzZU91dFNpbmU6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIGMgKiBNYXRoLnNpbih0L2QgKiAoTWF0aC5QSS8yKSkgKyBiOwoJfSwKCWVhc2VJbk91dFNpbmU6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIC1jLzIgKiAoTWF0aC5jb3MoTWF0aC5QSSp0L2QpIC0gMSkgKyBiOwoJfSwKCWVhc2VJbkV4cG86IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuICh0PT0wKSA/IGIgOiBjICogTWF0aC5wb3coMiwgMTAgKiAodC9kIC0gMSkpICsgYjsKCX0sCgllYXNlT3V0RXhwbzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gKHQ9PWQpID8gYitjIDogYyAqICgtTWF0aC5wb3coMiwgLTEwICogdC9kKSArIDEpICsgYjsKCX0sCgllYXNlSW5PdXRFeHBvOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCWlmICh0PT0wKSByZXR1cm4gYjsKCQlpZiAodD09ZCkgcmV0dXJuIGIrYzsKCQlpZiAoKHQvPWQvMikgPCAxKSByZXR1cm4gYy8yICogTWF0aC5wb3coMiwgMTAgKiAodCAtIDEpKSArIGI7CgkJcmV0dXJuIGMvMiAqICgtTWF0aC5wb3coMiwgLTEwICogLS10KSArIDIpICsgYjsKCX0sCgllYXNlSW5DaXJjOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXJldHVybiAtYyAqIChNYXRoLnNxcnQoMSAtICh0Lz1kKSp0KSAtIDEpICsgYjsKCX0sCgllYXNlT3V0Q2lyYzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gYyAqIE1hdGguc3FydCgxIC0gKHQ9dC9kLTEpKnQpICsgYjsKCX0sCgllYXNlSW5PdXRDaXJjOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCWlmICgodC89ZC8yKSA8IDEpIHJldHVybiAtYy8yICogKE1hdGguc3FydCgxIC0gdCp0KSAtIDEpICsgYjsKCQlyZXR1cm4gYy8yICogKE1hdGguc3FydCgxIC0gKHQtPTIpKnQpICsgMSkgKyBiOwoJfSwKCWVhc2VJbkVsYXN0aWM6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJdmFyIHM9MS43MDE1ODt2YXIgcD0wO3ZhciBhPWM7CgkJaWYgKHQ9PTApIHJldHVybiBiOyAgaWYgKCh0Lz1kKT09MSkgcmV0dXJuIGIrYzsgIGlmICghcCkgcD1kKi4zOwoJCWlmIChhIDwgTWF0aC5hYnMoYykpIHsgYT1jOyB2YXIgcz1wLzQ7IH0KCQllbHNlIHZhciBzID0gcC8oMipNYXRoLlBJKSAqIE1hdGguYXNpbiAoYy9hKTsKCQlyZXR1cm4gLShhKk1hdGgucG93KDIsMTAqKHQtPTEpKSAqIE1hdGguc2luKCAodCpkLXMpKigyKk1hdGguUEkpL3AgKSkgKyBiOwoJfSwKCWVhc2VPdXRFbGFzdGljOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXZhciBzPTEuNzAxNTg7dmFyIHA9MDt2YXIgYT1jOwoJCWlmICh0PT0wKSByZXR1cm4gYjsgIGlmICgodC89ZCk9PTEpIHJldHVybiBiK2M7ICBpZiAoIXApIHA9ZCouMzsKCQlpZiAoYSA8IE1hdGguYWJzKGMpKSB7IGE9YzsgdmFyIHM9cC80OyB9CgkJZWxzZSB2YXIgcyA9IHAvKDIqTWF0aC5QSSkgKiBNYXRoLmFzaW4gKGMvYSk7CgkJcmV0dXJuIGEqTWF0aC5wb3coMiwtMTAqdCkgKiBNYXRoLnNpbiggKHQqZC1zKSooMipNYXRoLlBJKS9wICkgKyBjICsgYjsKCX0sCgllYXNlSW5PdXRFbGFzdGljOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXZhciBzPTEuNzAxNTg7dmFyIHA9MDt2YXIgYT1jOwoJCWlmICh0PT0wKSByZXR1cm4gYjsgIGlmICgodC89ZC8yKT09MikgcmV0dXJuIGIrYzsgIGlmICghcCkgcD1kKiguMyoxLjUpOwoJCWlmIChhIDwgTWF0aC5hYnMoYykpIHsgYT1jOyB2YXIgcz1wLzQ7IH0KCQllbHNlIHZhciBzID0gcC8oMipNYXRoLlBJKSAqIE1hdGguYXNpbiAoYy9hKTsKCQlpZiAodCA8IDEpIHJldHVybiAtLjUqKGEqTWF0aC5wb3coMiwxMCoodC09MSkpICogTWF0aC5zaW4oICh0KmQtcykqKDIqTWF0aC5QSSkvcCApKSArIGI7CgkJcmV0dXJuIGEqTWF0aC5wb3coMiwtMTAqKHQtPTEpKSAqIE1hdGguc2luKCAodCpkLXMpKigyKk1hdGguUEkpL3AgKSouNSArIGMgKyBiOwoJfSwKCWVhc2VJbkJhY2s6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkLCBzKSB7CgkJaWYgKHMgPT0gdW5kZWZpbmVkKSBzID0gMS43MDE1ODsKCQlyZXR1cm4gYyoodC89ZCkqdCooKHMrMSkqdCAtIHMpICsgYjsKCX0sCgllYXNlT3V0QmFjazogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQsIHMpIHsKCQlpZiAocyA9PSB1bmRlZmluZWQpIHMgPSAxLjcwMTU4OwoJCXJldHVybiBjKigodD10L2QtMSkqdCooKHMrMSkqdCArIHMpICsgMSkgKyBiOwoJfSwKCWVhc2VJbk91dEJhY2s6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkLCBzKSB7CgkJaWYgKHMgPT0gdW5kZWZpbmVkKSBzID0gMS43MDE1ODsgCgkJaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMioodCp0KigoKHMqPSgxLjUyNSkpKzEpKnQgLSBzKSkgKyBiOwoJCXJldHVybiBjLzIqKCh0LT0yKSp0KigoKHMqPSgxLjUyNSkpKzEpKnQgKyBzKSArIDIpICsgYjsKCX0sCgllYXNlSW5Cb3VuY2U6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIGMgLSBqUXVlcnkuZWFzaW5nLmVhc2VPdXRCb3VuY2UgKHgsIGQtdCwgMCwgYywgZCkgKyBiOwoJfSwKCWVhc2VPdXRCb3VuY2U6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJaWYgKCh0Lz1kKSA8ICgxLzIuNzUpKSB7CgkJCXJldHVybiBjKig3LjU2MjUqdCp0KSArIGI7CgkJfSBlbHNlIGlmICh0IDwgKDIvMi43NSkpIHsKCQkJcmV0dXJuIGMqKDcuNTYyNSoodC09KDEuNS8yLjc1KSkqdCArIC43NSkgKyBiOwoJCX0gZWxzZSBpZiAodCA8ICgyLjUvMi43NSkpIHsKCQkJcmV0dXJuIGMqKDcuNTYyNSoodC09KDIuMjUvMi43NSkpKnQgKyAuOTM3NSkgKyBiOwoJCX0gZWxzZSB7CgkJCXJldHVybiBjKig3LjU2MjUqKHQtPSgyLjYyNS8yLjc1KSkqdCArIC45ODQzNzUpICsgYjsKCQl9Cgl9LAoJZWFzZUluT3V0Qm91bmNlOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCWlmICh0IDwgZC8yKSByZXR1cm4galF1ZXJ5LmVhc2luZy5lYXNlSW5Cb3VuY2UgKHgsIHQqMiwgMCwgYywgZCkgKiAuNSArIGI7CgkJcmV0dXJuIGpRdWVyeS5lYXNpbmcuZWFzZU91dEJvdW5jZSAoeCwgdCoyLWQsIDAsIGMsIGQpICogLjUgKyBjKi41ICsgYjsKCX0KfSk7CgovKgogKgogKiBURVJNUyBPRiBVU0UgLSBFQVNJTkcgRVFVQVRJT05TCiAqIAogKiBPcGVuIHNvdXJjZSB1bmRlciB0aGUgQlNEIExpY2Vuc2UuIAogKiAKICogQ29weXJpZ2h0IMKpIDIwMDEgUm9iZXJ0IFBlbm5lcgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCiAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKICogCiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIAogKiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IAogKiBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyAKICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAKICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UgCiAqIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqIAogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSAKICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogKiAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCiAqICBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgCiAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCiAqICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICoKICov"></script>
	<script id= "script_sl_jquery_mousewheel_js" src="data:/text/plain;base64,LyogQ29weXJpZ2h0IChjKSAyMDA5IEJyYW5kb24gQWFyb24gKGh0dHA6Ly9icmFuZG9uYWFyb24ubmV0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKQogKiBhbmQgR1BMIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocCkgbGljZW5zZXMuCiAqIFRoYW5rcyB0bzogaHR0cDovL2Fkb21hcy5vcmcvamF2YXNjcmlwdC1tb3VzZS13aGVlbC8gZm9yIHNvbWUgcG9pbnRlcnMuCiAqIFRoYW5rcyB0bzogTWF0aGlhcyBCYW5rKGh0dHA6Ly93d3cubWF0aGlhcy1iYW5rLmRlKSBmb3IgYSBzY29wZSBidWcgZml4LgogKgogKiBWZXJzaW9uOiAzLjAuMgogKiAKICogUmVxdWlyZXM6IDEuMi4yKwogKi8KKGZ1bmN0aW9uKGMpe3ZhciBhPVsiRE9NTW91c2VTY3JvbGwiLCJtb3VzZXdoZWVsIl07Yy5ldmVudC5zcGVjaWFsLm1vdXNld2hlZWw9e3NldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy5hZGRFdmVudExpc3RlbmVyKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZDspe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihhWy0tZF0sYixmYWxzZSl9fWVsc2V7dGhpcy5vbm1vdXNld2hlZWw9Yn19LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZDspe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhWy0tZF0sYixmYWxzZSl9fWVsc2V7dGhpcy5vbm1vdXNld2hlZWw9bnVsbH19fTtjLmZuLmV4dGVuZCh7bW91c2V3aGVlbDpmdW5jdGlvbihkKXtyZXR1cm4gZD90aGlzLmJpbmQoIm1vdXNld2hlZWwiLGQpOnRoaXMudHJpZ2dlcigibW91c2V3aGVlbCIpfSx1bm1vdXNld2hlZWw6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMudW5iaW5kKCJtb3VzZXdoZWVsIixkKX19KTtmdW5jdGlvbiBiKGYpe3ZhciBkPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGc9MCxlPXRydWU7Zj1jLmV2ZW50LmZpeChmfHx3aW5kb3cuZXZlbnQpO2YudHlwZT0ibW91c2V3aGVlbCI7aWYoZi53aGVlbERlbHRhKXtnPWYud2hlZWxEZWx0YS8xMjB9aWYoZi5kZXRhaWwpe2c9LWYuZGV0YWlsLzN9ZC51bnNoaWZ0KGYsZyk7cmV0dXJuIGMuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsZCl9fSkoalF1ZXJ5KTs=" ></script>
	<script id="script_zmviewer" src="data:/text/plain;base64,KGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30uY2FsbCgpO2EuWj17fX0pKCksWi5zaG93SW1hZ2U9ZnVuY3Rpb24oYSxiLGMpe1ouVXRpbHMuejEyOCgpLFouVXRpbHMuejEyNygpLFouVXRpbHMuejEyNigpLFouVXRpbHMuejE2MygpLFoucGFnZUNvbnRhaW5lcklEPWEsWi5pbWFnZVBhdGg9Wi5VdGlscy56MjQzKGIpLFoucGFyYW1ldGVycz1aLlV0aWxzLnoyMzMoYyksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJET01Db250ZW50TG9hZGVkIixaLmluaXRpYWxpemUpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csImxvYWQiLFouaW5pdGlhbGl6ZSl9LFouaW5pdGlhbGl6ZT1mdW5jdGlvbigpe2FyZ3VtZW50cy5jYWxsZWUuZG9uZXx8KGFyZ3VtZW50cy5jYWxsZWUuZG9uZT0hMCxaLlV0aWxzLnoxNjQoKSxaLlV0aWxzLnoyNDkoWi5wYXJhbWV0ZXJzKSxaLlZpZXdlcj1uZXcgWi56MTIyLFouVXRpbHMuaXNTdHJWYWwoWi5jb3B5cmlnaHRQYXRoKT9aLlV0aWxzLmVuZm9yY2VDb3B5cmlnaHQoKTpaLlZpZXdlci56MTQ5KCksWi5kZWJ1ZyYmWi5VdGlscy50cmFjZShaLlV0aWxzLnoxODUoIno2NyIpKSl9LFouejEyMj1mdW5jdGlvbigpe1ouVmlld2VyRGlzcGxheT1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImRpdiIsIlZpZXdlckRpc3BsYXkiLCJpbmxpbmUtYmxvY2siLCJyZWxhdGl2ZSIsImhpZGRlbiIsIjEwMCUiLCIxMDAlIiwiMHB4IiwiMHB4Iiwibm9uZSIsIjBweCIsInRyYW5zcGFyZW50IG5vbmUiLCIwcHgiLCIwcHgiLCJwb2ludGVyIiksWi5wYWdlQ29udGFpbmVyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFoucGFnZUNvbnRhaW5lcklEKTt2YXIgYT1aLlV0aWxzLnoxNzYoWi5wYWdlQ29udGFpbmVyKTtaLnZpZXdlclc9cGFyc2VGbG9hdChhLndpZHRoKSxaLnZpZXdlckg9cGFyc2VGbG9hdChhLmhlaWdodCksaXNOYU4oWi52aWV3ZXJXKSYmKFoudmlld2VyVz1aLlZpZXdlckRpc3BsYXkuY2xpZW50V2lkdGgpLGlzTmFOKFoudmlld2VySCkmJihaLnZpZXdlckg9Wi5WaWV3ZXJEaXNwbGF5LmNsaWVudEhlaWdodCksWi5wYWdlQ29udGFpbmVyLmlubmVySFRNTD0iIixaLnBhZ2VDb250YWluZXIuYXBwZW5kQ2hpbGQoWi5WaWV3ZXJEaXNwbGF5KSx0aGlzLnoxNDk9ZnVuY3Rpb24oKXtaLlZpZXdwb3J0PW5ldyBaLnoxMjV9LHRoaXMuejE0OD1mdW5jdGlvbigpe1oudG9vbGJhclZpc2libGU+MCYmKFouVG9vbGJhcj1uZXcgWi56MTI0KFouVmlld3BvcnQpKSxaLm5hdmlnYXRvclZpc2libGU+MCYmKFouTmF2aWdhdG9yPW5ldyBaLnoxMjMoWi5WaWV3cG9ydCkpLFouTmF2aWdhdG9yJiZaLk5hdmlnYXRvci56Mjc3KCl9LHRoaXMuc2V0U2l6ZUFuZFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjLGQsZSl7Wi52aWV3ZXJXPWEsWi52aWV3ZXJIPWIsWi5WaWV3ZXJEaXNwbGF5LnN0eWxlLndpZHRoPWErInB4IixaLlZpZXdlckRpc3BsYXkuc3R5bGUuaGVpZ2h0PWIrInB4IixaLlZpZXdwb3J0JiZaLlZpZXdwb3J0LnoxODAoKSYmWi5WaWV3cG9ydC5zZXRTaXplQW5kUG9zaXRpb24oYSxiLGMsZCk7dmFyIGY9Wi50b29sYmFyUG9zaXRpb249PTE/Yi1aLnRvb2xiYXJIOjA7Wi5Ub29sYmFyRGlzcGxheSYmWi5Ub29sYmFyLnoxODAoKSYmKFouVG9vbGJhci5zZXRTaXplQW5kUG9zaXRpb24oYSxudWxsLG51bGwsZiksWi50b29sYmFyVmlzaWJsZT4xJiZaLlRvb2xiYXIuc2hvdyghMCkpLFouTmF2aWdhdG9yRGlzcGxheSYmWi5OYXZpZ2F0b3IuejE4MCgpJiYoWi5OYXZpZ2F0b3Iuc2V0U2l6ZUFuZFBvc2l0aW9uKG51bGwsbnVsbCxjLGQsWi5uYXZpZ2F0b3JGaXQpLFoubmF2aWdhdG9yVmlzaWJsZT4xJiZaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCEwKSksZSYmWi5WaWV3cG9ydC56Mjc0KCEwKX0sdGhpcy5zZXRJbWFnZVBhdGg9ZnVuY3Rpb24oYSl7Wi5WaWV3cG9ydC56MjkzQWxsU3RvcCghMCksWi5pbWFnZVBhdGg9Wi5VdGlscy56MjQzKGEpO3ZhciBiPW5ldyBaLnoxMDEsYz1aLlV0aWxzLnoxNDAoWi5pbWFnZVBhdGgrIi8iKyJJbWFnZVByb3BlcnRpZXMueG1sIik7Yi5sb2FkWE1MKGMpfX0sWi56MTI1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gY2QoKXt6PTEsQT0wLEI9MCxGPVtdLEc9W10sSD1bXSxJPVtdLEo9W10sSz1bXSxMPVtdLE09W10sTj1bXSxPPVtdLFA9W10sUT1bXSxSPTB9ZnVuY3Rpb24gY2UoKXtyZXR1cm4gYn1mdW5jdGlvbiBjZihhKXtiPWF9ZnVuY3Rpb24gY2coKXtoPVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2Iiwidmlld3BvcnRDb250YWluZXIiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsInZpc2libGUiLCIxcHgiLCIxcHgiLCIwcHgiLCIwcHgiLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpLFouVmlld2VyRGlzcGxheS5hcHBlbmRDaGlsZChoKSxpPWgsaz1pLnN0eWxlLGw9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KFoudXNlQ2FudmFzPyJjYW52YXMiOiJkaXYiLCJ2aWV3cG9ydEJhY2tmaWxsRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwidmlzaWJsZSIsIjFweCIsIjFweCIsIjBweCIsIjBweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4IiksaC5hcHBlbmRDaGlsZChsKSxtPWwsbj1tLnN0eWxlLHA9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KFoudXNlQ2FudmFzPyJjYW52YXMiOiJkaXYiLCJ2aWV3cG9ydERpc3BsYXkiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsInZpc2libGUiLCIxcHgiLCIxcHgiLCIwcHgiLCIwcHgiLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpLGguYXBwZW5kQ2hpbGQocCkscT1wLHI9cS5zdHlsZSxaLlV0aWxzLmlzU3RyVmFsKFoud2F0ZXJtYXJrUGF0aCkmJih0PVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2Iiwid2F0ZXJtYXJrRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwidmlzaWJsZSIsIjFweCIsIjFweCIsIjBweCIsIjBweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4IiksaC5hcHBlbmRDaGlsZCh0KSx1PXQsdj11LnN0eWxlKSxaLlV0aWxzLmlzU3RyVmFsKFouaG90c3BvdFBhdGgpJiYodz1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImRpdiIsImhvdHNwb3RzRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwidmlzaWJsZSIsIjFweCIsIjFweCIsIjBweCIsIjBweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4IiksaC5hcHBlbmRDaGlsZCh3KSx4PXcseT14LnN0eWxlKSxaLnVzZUNhbnZhcz8obz1tLmdldENvbnRleHQoIjJkIikscz1xLmdldENvbnRleHQoIjJkIikpOihtLmlubmVySFRNTD0iIixxLmlubmVySFRNTD0iIiksdSYmKHUuaW5uZXJIVE1MPSIiKSx4JiYoeC5pbm5lckhUTUw9IiIpfWZ1bmN0aW9uIGNoKGEsYixjLGQpe2N8fChjPTApLGR8fChkPTApLFk9YSwkPWIsYmI9WSpYLGJjPSQqWCxiZD1iYi8yLGJlPWJjLzIsYmY9LSgoYmItWSkvMikrYyxiZz0oYmItWSkvMitjLGJoPS0oKGJjLSQpLzIpK2QsYmk9KGJjLSQpLzIrZCxpLndpZHRoPWJiLGkuaGVpZ2h0PWJjLGsud2lkdGg9YmIrInB4IixrLmhlaWdodD1iYysicHgiLGsubGVmdD1iZisicHgiLGsudG9wPWJoKyJweCIscS53aWR0aD1iYixxLmhlaWdodD1iYyx1JiYodS53aWR0aD1iYix1LmhlaWdodD1iYyx2LndpZHRoPWJiKyJweCIsdi5oZWlnaHQ9YmMrInB4IiksWi51c2VDYW52YXMmJihzLnRyYW5zbGF0ZShiZCxiZSkscy5zYXZlKCkpfWZ1bmN0aW9uIGNpKCl7dmFyIGE9Wi5pbWFnZVcsYj1aLmltYWdlSDt3aGlsZShhPmN8fGI+YylhPWEvMixiPWIvMix6Kys7YT1aLmltYWdlVyxiPVouaW1hZ2VIO2Zvcih2YXIgZD16LTE7ZD49MDtkLS0pSFtkXT1hLElbZF09YixKW2RdPU1hdGguY2VpbChIW2RdL2MpLEtbZF09TWF0aC5jZWlsKElbZF0vYyksTFtkXT1KW2RdKktbZF0sYT1hLzIsYj1iLzJ9ZnVuY3Rpb24gY2ooKXtaLmluaXRpYWxYfHwoWi5pbml0aWFsWD1aLmltYWdlVy8yKSxaLmluaXRpYWxZfHwoWi5pbml0aWFsWT1aLmltYWdlSC8yKTt2YXIgYT1jUigpO1ouZml0WiYmWi5maXRaIT1hJiYoWi5pbml0aWFsWj09Wi5maXRaJiYoWi5pbml0aWFsWj1udWxsKSxaLm1pblo9PVouZml0WiYmKFoubWluWj1udWxsKSxaLm1heFo9PVouZml0WiYmKFoubWF4Wj1udWxsKSxaLmZpdFo9bnVsbCksWi5maXRafHwoWi5maXRaPWEpLFouaW5pdGlhbFp8fChaLmluaXRpYWxaPVouZml0WiksWi5taW5afHwoWi5taW5aPVouZml0WiksWi5tYXhafHwoWi5tYXhaPVouZml0WiksWi5pbml0aWFsWjxaLm1pblomJihaLmluaXRpYWxaPVoubWluWiksWi5pbml0aWFsWj5aLm1heFomJihaLmluaXRpYWxaPVoubWF4Wil9ZnVuY3Rpb24gY2soKXtjbChXKSx6PlQmJihjbChWKSx6PlMmJmNsKFUpKSxHLnNvcnQoKSxHPVouVXRpbHMuejI0MihHKSxjcyhHLGNKLDApfWZ1bmN0aW9uIGNsKGEpe3ZhciBiPUpbYV0tMSxjPUtbYV0tMTtmb3IodmFyIGQ9MDtkPD1jO2QrKylmb3IodmFyIGU9MDtlPD1iO2UrKylHLnB1c2goYSsiLSIrZSsiLSIrZCl9ZnVuY3Rpb24gY20oYSxiKXt2YXIgYz0obmV3IERhdGUpLmdldFRpbWUoKSxkPWJmLXBhcnNlRmxvYXQoay5sZWZ0KSxlPWJoLXBhcnNlRmxvYXQoay50b3ApO2subGVmdD1iZisicHgiLGsudG9wPWJoKyJweCIsWi5pbWFnZVg9Wi5pbWFnZVgrZC9aLmltYWdlWixaLmltYWdlWT1aLmltYWdlWStlL1ouaW1hZ2VaLGNyKG0sQixGLCExLCExKSxjcihxLEEsTywhMSwhMSksY1koKTt2YXIgZj1jdygpO2E+MD9mLnJpZ2h0PWYubGVmdDphPDAmJihmLmxlZnQ9Zi5yaWdodCksYj4wP2YuYm90dG9tPWYudG9wOmI8MCYmKGYudG9wPWYuYm90dG9tKTtmb3IodmFyIGc9Zi50b3A7Zzw9Zi5ib3R0b207ZysrKWZvcih2YXIgaD1mLmxlZnQ7aDw9Zi5yaWdodDtoKyspUS5wdXNoKEErIi0iK2grIi0iK2cpO3ZhciBpPVEubGVuZ3RoO2Zvcih2YXIgaj0wO2o8aTtqKyspe3ZhciBsPVFbal07aWYobCl7dmFyIG49bmV3IGNHKGwpO2NJKG4sYyxjSyl9fWk+MzAmJlEuc3BsaWNlKGktMzAsMzApfWZ1bmN0aW9uIGNuKCl7dmFyIGE9ITE7cGFyc2VGbG9hdChyLndpZHRoKSE9cS53aWR0aCYmKFoudXNlQ2FudmFzJiYoci53aWR0aD1xLndpZHRoKyJweCIsci5oZWlnaHQ9cS5oZWlnaHQrInB4IixyLmxlZnQ9IjBweCIsci50b3A9IjBweCIscy5yZXN0b3JlKCkscy5zYXZlKCkscy5zY2FsZShDLEMpKSxhPSEwKTtpZihwYXJzZUZsb2F0KGsubGVmdCkhPWJmfHxwYXJzZUZsb2F0KGsudG9wKSE9Ymgpe3ZhciBiPXBhcnNlRmxvYXQoay5sZWZ0KS1iZixjPXBhcnNlRmxvYXQoay50b3ApLWJoO2subGVmdD1iZisicHgiLGsudG9wPWJoKyJweCIsYmw9cGFyc2VGbG9hdChuLmxlZnQpK2IsYm09cGFyc2VGbG9hdChuLnRvcCkrYyxuLmxlZnQ9YmwrInB4IixuLnRvcD1ibSsicHgiO3ZhciBkPWNCKEEsQyk7Wi5pbWFnZVg9Wi5pbWFnZVgtYi9kLFouaW1hZ2VZPVouaW1hZ2VZLWMvZCxhPSEwfWEmJihjcihxLEEsTywhMCwhMSksY1koKSl9ZnVuY3Rpb24gY28oKXtDIT1EJiYoWi5pbWFnZVo9YnopLFouaW1hZ2VaPFoubWluWiYmKFouaW1hZ2VaPVoubWluWik7dmFyIGE9ZCxiPXo7d2hpbGUoYS8yPj1aLmltYWdlWiliLS0sYS89MjtiPWItMTwwPzA6Yi0xO3ZhciBjPWNDKGIsWi5pbWFnZVopO2lmKGIhPUF8fGMhPUMpWi51c2VDYW52YXMmJihzLnJlc3RvcmUoKSxzLnNhdmUoKSxzLnNjYWxlKGMsYykpLEE9YixDPWM7RD1DfWZ1bmN0aW9uIGNwKCl7Qj1BPlM/VTpBPlQ/VjpXLEU9Y0MoQixaLmltYWdlWiksdGllckJhY2tmaWxsVz1IW0JdLHRpZXJCYWNrZmlsbEg9SVtCXSxtLndpZHRoPXRpZXJCYWNrZmlsbFcsbS5oZWlnaHQ9dGllckJhY2tmaWxsSDt2YXIgYT10aWVyQmFja2ZpbGxXKkUsYj10aWVyQmFja2ZpbGxIKkUsYz1aLmltYWdlWCpaLmltYWdlWixkPVouaW1hZ2VZKlouaW1hZ2VaO2JqPWEsYms9YixibD1iZC1jLGJtPWJlLWQsWi51c2VDYW52YXMmJihuLndpZHRoPWJqKyJweCIsbi5oZWlnaHQ9YmsrInB4Iiksbi5sZWZ0PWJsKyJweCIsbi50b3A9Ym0rInB4In1mdW5jdGlvbiBjcSgpe3ZhciBhPWN3KCk7Zm9yKHZhciBiPWEudG9wLGM9YS5ib3R0b207Yjw9YztiKyspZm9yKHZhciBkPWEubGVmdCxlPWEucmlnaHQ7ZDw9ZTtkKyspTi5wdXNoKEErIi0iK2QrIi0iK2IpO1Auc29ydCgpLE4uc29ydCgpLFA9Wi5VdGlscy56MjQyKFApLE49Wi5VdGlscy56MjQyKE4pO3ZhciBmPVouVXRpbHMuaW50ZXJzZWN0KE4sUCk7Tj1aLlV0aWxzLnN1YnRyYWN0KE4sUCksUj10aWxlc0xvYWRpbmdOYW1lc0xlbmd0aD1OLmxlbmd0aCxaLlRvb2xiYXJEaXNwbGF5JiZaLlRvb2xiYXIuejE4MCgpJiZaLlRvb2xiYXIuc2hvd1Byb2dyZXNzKFIsdGlsZXNMb2FkaW5nTmFtZXNMZW5ndGgpLFA9Wi5VdGlscy5zdWJ0cmFjdChQLGYpLFA9UC5jb25jYXQoZiksdGlsZXNMb2FkaW5nTmFtZXNMZW5ndGghPTAmJihNPVtdKX1mdW5jdGlvbiBjcihhLGIsYyxkLGUpe2V8fGN0KGEpO2lmKGQpe3ZhciBmPU1hdGguZmxvb3IoYy5sZW5ndGgvMik7Zm9yKHZhciBnPWYsaD1jLmxlbmd0aDtnPGg7ZysrKXt2YXIgaT1jW2ddO2kmJmkudD09YiYmY00oYSxiLGkpO2lmKGMubGVuZ3RoLWctMSE9Zyl7dmFyIGk9Y1tjLmxlbmd0aC1nLTFdO2kmJmkudD09YiYmY00oYSxiLGkpfX19ZWxzZSBmb3IodmFyIGc9MCxoPWMubGVuZ3RoO2c8aDtnKyspe3ZhciBpPWNbZ107aSYmaS50PT1iJiZjTShhLGIsaSl9fWZ1bmN0aW9uIGNzKGEsYixjKXtpZihhLmxlbmd0aD4wKXt2YXIgZD0obmV3IERhdGUpLmdldFRpbWUoKTtpZihjKXt2YXIgZT1NYXRoLmZsb29yKGEubGVuZ3RoLzIpO2Zvcih2YXIgZj1lLGc9YS5sZW5ndGg7ZjxnO2YrKyl7dmFyIGg9YVtmXTtpZihoKXt2YXIgaT1uZXcgY0coaCk7Y0koaSxkLGIpfWlmKGEubGVuZ3RoLWYtMSE9Zil7dmFyIGg9YVthLmxlbmd0aC1mLTFdO2lmKGgpe3ZhciBpPW5ldyBjRyhoKTtjSShpLGQsYil9fX19ZWxzZSBmb3IodmFyIGY9MCxnPWEubGVuZ3RoO2Y8ZztmKyspe3ZhciBoPWFbZl07aWYoaCl7dmFyIGk9bmV3IGNHKGgpO2NJKGksZCxiKX19fX1mdW5jdGlvbiBjdChhKXtpZihhKWlmKFoudXNlQ2FudmFzJiZhLnRhZ05hbWU9PSJDQU5WQVMiKXt2YXIgYj1hLmdldENvbnRleHQoIjJkIik7Yi5zYXZlKCksYi5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGIuY2xlYXJSZWN0KDAsMCxiLmNhbnZhcy53aWR0aCxiLmNhbnZhcy5oZWlnaHQpLGIucmVzdG9yZSgpfWVsc2UgaWYoYS5oYXNDaGlsZE5vZGVzKCkpd2hpbGUoYS5jaGlsZE5vZGVzLmxlbmd0aD49MSlhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gY3UoKXtpZihaLlRvb2xiYXJEaXNwbGF5JiZaLlRvb2xiYXIuejE4MCgpKXt2YXIgYT1jQihBLEMpO1ouVG9vbGJhci56MjY2KGEpfX1mdW5jdGlvbiBjdigpe1ouTmF2aWdhdG9yJiZaLk5hdmlnYXRvci56MTgwKCkmJlouTmF2aWdhdG9yLnoyNjgoKX1mdW5jdGlvbiBjdygpe3JldHVybiBuZXcgY3ooY3goKSxBKX1mdW5jdGlvbiBjeCgpe3ZhciBhPXBhcnNlRmxvYXQoay5sZWZ0KS1iZixiPXBhcnNlRmxvYXQoay50b3ApLWJoO2lmKFoudXNlQ2FudmFzKXt2YXIgYz1wYXJzZUZsb2F0KGsud2lkdGgpL2kud2lkdGg7YS89YyxiLz1jfXZhciBkPWNCKEEsQyk7cmV0dXJuIGEhPTAmJihhLz1kKSxiIT0wJiYoYi89ZCksbmV3IGNBKFouaW1hZ2VYLWEsWi5pbWFnZVktYiwtKFkvMiksWS8yLC0oJC8yKSwkLzIsZCl9ZnVuY3Rpb24gY3koKXt2YXIgYT1wYXJzZUZsb2F0KGsubGVmdCktYmYsYj1wYXJzZUZsb2F0KGsudG9wKS1iaDtpZihaLnVzZUNhbnZhcyl7dmFyIGM9cGFyc2VGbG9hdChrLndpZHRoKS9pLndpZHRoO2EvPWMsYi89Y312YXIgZD1jQihBLEMpO3JldHVybiBhIT0wJiYoYS89ZCksYiE9MCYmKGIvPWQpLG5ldyBjQShaLmltYWdlWC1hLFouaW1hZ2VZLWIsLShiYi8yKSxiYi8yLC0oYmMvMiksYmMvMixkKX1mdW5jdGlvbiBjeihhLGIpe3ZhciBkPWNCKGIsMSksZT1NYXRoLmZsb29yKGEubGVmdCpkL2MpLGY9TWF0aC5mbG9vcihhLnJpZ2h0KmQvYyksZz1NYXRoLmZsb29yKGEudG9wKmQvYyksaD1NYXRoLmZsb29yKGEuYm90dG9tKmQvYyk7ZTwwJiYoZT0wKSxmPkpbQV0tMSYmKGY9SltBXS0xKSxnPDAmJihnPTApLGg+S1tBXS0xJiYoaD1LW0FdLTEpLHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9Zix0aGlzLnRvcD1nLHRoaXMuYm90dG9tPWh9ZnVuY3Rpb24gY0EoYSxiLGMsZCxlLGYsZyl7dGhpcy5sZWZ0PWErYy9nLHRoaXMucmlnaHQ9YStkL2csdGhpcy50b3A9YitlL2csdGhpcy5ib3R0b209YitmL2d9ZnVuY3Rpb24gY0IoYSxiKXt2YXIgYz1iKihIW2FdL1ouaW1hZ2VXKTtyZXR1cm4gY31mdW5jdGlvbiBjQyhhLGIpe3ZhciBjPWIvKEhbYV0vWi5pbWFnZVcpO3JldHVybiBjfWZ1bmN0aW9uIGNEKGEsYil7dmFyIGM9YS1aLlV0aWxzLnoxNzQoWi5WaWV3ZXJEaXNwbGF5KS54LGQ9Yi1aLlV0aWxzLnoxNzQoWi5WaWV3ZXJEaXNwbGF5KS55O3JldHVybiBuZXcgWi5VdGlscy5Qb2ludChjLGQpfWZ1bmN0aW9uIGNFKGEsYil7dmFyIGM9cGFyc2VGbG9hdChrLmxlZnQpK2JkLGQ9cGFyc2VGbG9hdChrLnRvcCkrYmUsZT1hLWMsZj1iLWQsZz1lL1ouaW1hZ2VaLGg9Zi9aLmltYWdlWixpPVouaW1hZ2VYK2csaj1aLmltYWdlWStoO3JldHVybiBuZXcgWi5VdGlscy5Qb2ludChpLGopfWZ1bmN0aW9uIGNGKGEsYil7dmFyIGM9Wi5pbWFnZVgtYSxkPVouaW1hZ2VZLWIsZT1jKlouaW1hZ2VaLGY9ZCpaLmltYWdlWixnPXBhcnNlRmxvYXQoay5sZWZ0KStiZCxoPXBhcnNlRmxvYXQoay50b3ApK2JlLGk9Zy1lLGo9aC1mO3JldHVybiBuZXcgWi5VdGlscy5Qb2ludChpLGopfWZ1bmN0aW9uIGNHKGEpe3RoaXMubmFtZT1hLHRoaXMudD1wYXJzZUludChhLnN1YnN0cmluZygwLGEuaW5kZXhPZigiLSIpKSwxMCksdGhpcy5jPXBhcnNlSW50KGEuc3Vic3RyaW5nKGEuaW5kZXhPZigiLSIpKzEsYS5sYXN0SW5kZXhPZigiLSIpKSwxMCksdGhpcy5yPXBhcnNlSW50KGEuc3Vic3RyaW5nKGEubGFzdEluZGV4T2YoIi0iKSsxKSwxMCksdGhpcy54PU1hdGguZmxvb3IodGhpcy5jKmMpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMucipjKSx0aGlzLmltYWdlPW51bGwsdGhpcy5hbHBoYT0wLHRoaXMudXJsPVouVXRpbHMuejE0MChjSCh0aGlzLnQsdGhpcy5jLHRoaXMucix0aGlzLm5hbWUpKSx0aGlzLmVsbXQ9bnVsbCx0aGlzLnN0eWxlPW51bGx9ZnVuY3Rpb24gY0goYSxiLGQsZSl7dmFyIGY9ZCpKW2FdK2I7Zm9yKHZhciBnPTA7ZzxhO2crKylmKz1MW2ddO3ZhciBoPU1hdGguZmxvb3IoZi9jKSxpPVouaW1hZ2VQYXRoKyIvIisiVGlsZUdyb3VwIitoKyIvIitlKyIuanBnIjtyZXR1cm4gaX1mdW5jdGlvbiBjSShhLGIsYyl7YS5sb2FkaW5nPWNiLnoyMTJJbWFnZShhLnVybCxaLlV0aWxzLmNyZWF0ZUNhbGxiYWNrKG51bGwsYyxhLGIpKX1mdW5jdGlvbiBjSihhLGIsYyl7aWYoYSYmYiYmYyl7YS5pbWFnZT1jO3ZhciBkPWEubmFtZTtGLnB1c2goYSk7dmFyIGU9Ry5pbmRleE9mKGQpO2UhPS0xJiZHLnNwbGljZShlLDEpLGEuYWxwaGE9MSxhLnQ9PUImJmNNKG0sQixhKX19ZnVuY3Rpb24gY0soYSxiLGMpe2lmKGEmJmImJmMpe2EuaW1hZ2U9Yzt2YXIgZD1hLm5hbWU7Y00ocSxBLGEpfX1mdW5jdGlvbiBjTChhLGIsYyl7aWYoYSYmYiYmYyl7YS5pbWFnZT1jO3ZhciBkPWEubmFtZTtPLnB1c2goYSksUC5wdXNoKGQpO3ZhciBlPU4uaW5kZXhPZihkKTtlIT0tMSYmTi5zcGxpY2UoZSwxKSxNLnB1c2goYSksYkZ8fChiRj13aW5kb3cuc2V0SW50ZXJ2YWwoY1AsNTApKTt2YXIgZz1OLmxlbmd0aDtnPT0wJiYoWi51c2VDYW52YXMmJmNyKHEsQSxPLCEwLCExKSxQLmxlbmd0aD5mJiZjUSgpLFI9MCksWi5Ub29sYmFyRGlzcGxheSYmWi5Ub29sYmFyLnoxODAoKSYmWi5Ub29sYmFyLnNob3dQcm9ncmVzcyhSLGcpfX1mdW5jdGlvbiBjTShhLGIsYyl7dmFyIGQ9Yy54LGU9Yy55LGY9Y0IoYiwxKTtpZihaLnVzZUNhbnZhcylhPT1xJiYoZC09Wi5pbWFnZVgqZixlLT1aLmltYWdlWSpmKSxjTihhLGMsZCxlKTtlbHNle3ZhciBnO2E9PXE/KGQtPVouaW1hZ2VYKmYtYmQvQyxlLT1aLmltYWdlWSpmLWJlL0MsZz1DKTpnPUUsY08oYSxjLGQsZSxnKX19ZnVuY3Rpb24gY04oYSxiLGMsZCl7dmFyIGU9YS5nZXRDb250ZXh0KCIyZCIpO1ouYWxwaGFTdXBwb3J0ZWQmJmIuYWxwaGE8MT8oZS5nbG9iYWxBbHBoYT1iLmFscGhhLGUuZHJhd0ltYWdlKGIuaW1hZ2UsYyxkKSxlLmdsb2JhbEFscGhhPTEpOmUuZHJhd0ltYWdlKGIuaW1hZ2UsYyxkKX1mdW5jdGlvbiBjTyhhLGIsYyxkLGUpe2IuZWxtdHx8KGIuZWxtdD1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImltZyIpLGIuZWxtdC5vbm1vdXNlZG93bj1aLlV0aWxzLnByZXZlbnREZWZhdWx0LFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihiLmVsbXQsImNvbnRleHRtZW51IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxiLmVsbXQuc3JjPWIudXJsLGIuc3R5bGU9Yi5lbG10LnN0eWxlLGIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixaLlV0aWxzLnJlbmRlclF1YWxpdHkoYixaLnJlbmRlclF1YWxpdHkpLFouY3NzVHJhbnNmb3Jtc1N1cHBvcnRlZCYmKGIuc3R5bGVbWi5jc3NUcmFuc2Zvcm1Qcm9wZXJ0eSsiT3JpZ2luIl09IjBweCAwcHgiKSksYi5lbG10LnBhcmVudE5vZGUhPWEmJmEuYXBwZW5kQ2hpbGQoYi5lbG10KTt2YXIgZj1iLnN0eWxlO2YuZGlzcGxheT0ibm9uZSIsWi5jc3NUcmFuc2Zvcm1zU3VwcG9ydGVkP2ZbWi5jc3NUcmFuc2Zvcm1Qcm9wZXJ0eV09WyJtYXRyaXgoIiwoYi5pbWFnZS53aWR0aC9iLmVsbXQud2lkdGgqZSkudG9GaXhlZCg4KSwiLDAsMCwiLChiLmltYWdlLmhlaWdodC9iLmVsbXQuaGVpZ2h0KmUpLnRvRml4ZWQoOCksIiwiLChjKmUpLnRvRml4ZWQoOCksWi5jc3NUcmFuc2Zvcm1Ob1VuaXRzPyIsIjoicHgsIiwoZCplKS50b0ZpeGVkKDgpLFouY3NzVHJhbnNmb3JtTm9Vbml0cz8iKSI6InB4KSJdLmpvaW4oIiIpOihmLndpZHRoPWIuaW1hZ2Uud2lkdGgqZSsicHgiLGYuaGVpZ2h0PWIuaW1hZ2UuaGVpZ2h0KmUrInB4IixmLmxlZnQ9YyplKyJweCIsZi50b3A9ZCplKyJweCIpLGYuZGlzcGxheT0iaW5saW5lLWJsb2NrIixaLlV0aWxzLnNldE9wYWNpdHkoYixiLmFscGhhKX1mdW5jdGlvbiBjUChhKXt2YXIgYj1NLmxlbmd0aCxjPTA7Zm9yKHZhciBkPTA7ZDxiO2QrKyl7dmFyIGU9TVtkXTtlLnQ9PUEmJihlLmFscGhhPDE/KGUuYWxwaGErPWJFLGUuYWxwaGE+MSYmKGUuYWxwaGE9MSksY00ocSxBLGUpKTooYysrLGM+PWImJih3aW5kb3cuY2xlYXJJbnRlcnZhbChiRiksYkY9bnVsbCkpKX19ZnVuY3Rpb24gY1EoKXt2YXIgYT1QLmxlbmd0aC1mO2Zvcih2YXIgYj0wO2I8YTtiKyspaj1QLmluZGV4T2YoT1tiXS5uYW1lKSxqIT0tMSYmUC5zcGxpY2UoaiwxKSxPLnNwbGljZShiLDEpfWZ1bmN0aW9uIGNSKCl7cmV0dXJuIFouaW1hZ2VXL1ouaW1hZ2VIPlkvJD9ZL1ouaW1hZ2VXOiQvWi5pbWFnZUh9ZnVuY3Rpb24gY1MoYSxiKXtpZihaLmNvbnN0cmFpblBhbil7dmFyIGM9bmV3IGNBKGEsYiwtKFkvMiksWS8yLC0oJC8yKSwkLzIsWi5pbWFnZVopLGQ9Yy5sZWZ0LGU9Yy5yaWdodCxmPWMudG9wLGc9Yy5ib3R0b207Wi5pbWFnZVcqWi5pbWFnZVo+WT9kPDA/YT1ZLzIvWi5pbWFnZVo6ZT5aLmltYWdlVyYmKGE9Wi5pbWFnZVctWS8yL1ouaW1hZ2VaKTphPVouaW1hZ2VXLzIsWi5pbWFnZUgqWi5pbWFnZVo+JD9mPDA/Yj0kLzIvWi5pbWFnZVo6Zz5aLmltYWdlSCYmKGI9Wi5pbWFnZUgtJC8yL1ouaW1hZ2VaKTpiPVouaW1hZ2VILzJ9cmV0dXJuIG5ldyBaLlV0aWxzLlBvaW50KGEsYil9ZnVuY3Rpb24gY1QoYSxiKXtpZihaLmNvbnN0cmFpblBhbil7dmFyIGM9Y0IoQSxDKSxkPVouaW1hZ2VYLGU9Wi5pbWFnZVksZj1uZXcgY0EoZCxlLC0oWS8yKSxZLzIsLSgkLzIpLCQvMixjKSxnPWYubGVmdCxoPWYucmlnaHQsaT1mLnRvcCxqPWYuYm90dG9tO1ouaW1hZ2VXKmM+WT9nPDA/YSs9ZypjOmg+Wi5pbWFnZVcmJihhLT0oWi5pbWFnZVctaCkqYyk6YSs9KGQtWi5pbWFnZVcvMikqYyxaLmltYWdlSCpjPiQ/aTwwP2IrPWkqYzpqPlouaW1hZ2VIJiYoYi09KFouaW1hZ2VILWopKmMpOmIrPShlLVouaW1hZ2VILzIpKmN9cmV0dXJuIG5ldyBaLlV0aWxzLlBvaW50KGEsYil9ZnVuY3Rpb24gY1UoYSxiKXtpZihaLmNvbnN0cmFpblBhbil7dmFyIGM9Wi5pbWFnZVgtKGEtYmYpL1ouaW1hZ2VaLGQ9Wi5pbWFnZVktKGItYmgpL1ouaW1hZ2VaLGU9bmV3IGNBKGMsZCwtKFkvMiksWS8yLC0oJC8yKSwkLzIsWi5pbWFnZVopLGY9ZS5sZWZ0LGc9ZS5yaWdodCxoPWUudG9wLGk9ZS5ib3R0b207Wi5pbWFnZVcqWi5pbWFnZVo+WT9mPDA/YSs9ZipaLmltYWdlWjpnPlouaW1hZ2VXJiYoYS09KFouaW1hZ2VXLWcpKlouaW1hZ2VaKTphKz0oYy1aLmltYWdlVy8yKSpaLmltYWdlWixaLmltYWdlSCpaLmltYWdlWj4kP2g8MD9iKz1oKlouaW1hZ2VaOmk+Wi5pbWFnZUgmJihiLT0oWi5pbWFnZUgtaSkqWi5pbWFnZVopOmIrPShkLVouaW1hZ2VILzIpKlouaW1hZ2VafXJldHVybiBuZXcgWi5VdGlscy5Qb2ludChhLGIpfWZ1bmN0aW9uIGNWKGEpe3JldHVybiBhPloubWF4Wj9hPVoubWF4WjphPFoubWluWiYmKGE9Wi5taW5aKSxhfWZ1bmN0aW9uIGNXKCl7Ylo9bmV3IEltYWdlLGIkPXBhcnNlRmxvYXQoWi5VdGlscy56MTg1KCJ6NzMiKSksYloudXJsPVoud2F0ZXJtYXJrUGF0aCxiWi5vbmxvYWQ9Y1gsYloub25lcnJvcj1jWixiWi5zcmM9Wi53YXRlcm1hcmtQYXRofWZ1bmN0aW9uIGNYKCl7aWYodSl7dmFyIGE9cGFyc2VGbG9hdChaLlV0aWxzLnoxODUoIno3NCIpKSxiPXBhcnNlRmxvYXQoWi5VdGlscy56MTg1KCJ6NzYiKSksYz1wYXJzZUZsb2F0KFouVXRpbHMuejE4NSgiejc1IikpLGQ9Y0IoQSxDKSxlPShaLmltYWdlVypkLXUud2lkdGgpLzIsZj0oWi5pbWFnZUgqZC11LmhlaWdodCkvMixnPShaLmltYWdlVy8yLVouaW1hZ2VYKSpkLGg9KFouaW1hZ2VILzItWi5pbWFnZVkpKmQsaT1kPGE/YTpkLGo9TWF0aC5yb3VuZChaLmltYWdlVy9iKSxrPU1hdGgucm91bmQoWi5pbWFnZUgvYyksbD1jeSgpO3dpU2NhbGVkVz1iWi53aWR0aCppLHdpU2NhbGVkSD1iWi5oZWlnaHQqaTt2YXIgbT0wLG49MDtmb3IodmFyIG89MTtvPD1qO28rKylmb3IodmFyIHA9MTtwPD1rO3ArKyl7dmFyIHE9TWF0aC5yb3VuZChaLmltYWdlVy8oaisxKSpvKSxyPU1hdGgucm91bmQoWi5pbWFnZUgvKGsrMSkqcCk7aWYocT5sLmxlZnQmJnE8bC5yaWdodCYmcj5sLnRvcCYmcjxsLmJvdHRvbSl7dmFyIHM9TWF0aC5yb3VuZChxKmQtd2lTY2FsZWRXLzItZStnKSx0PU1hdGgucm91bmQocipkLXdpU2NhbGVkSC8yLWYraCk7aWYoWi5pbWFnZVc+NGUzKXt2YXIgdj1tKzEwMCx3PW4rMTAwO2lmKHM8diYmdDx3KWNvbnRpbnVlO209cyxuPXR9dmFyIHg9YlouY2xvbmVOb2RlKCEwKTtaLlV0aWxzLnNldE9wYWNpdHkoeCxiJCkseC53aWR0aD13aVNjYWxlZFcseC5oZWlnaHQ9d2lTY2FsZWRIO3ZhciB5PVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2Iiwid2lDIiwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLHdpU2NhbGVkVysicHgiLHdpU2NhbGVkSCsicHgiLHMrInB4Iix0KyJweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4Iik7eS5hcHBlbmRDaGlsZCh4KSx1LmFwcGVuZENoaWxkKHkpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih4LCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHgsIm1vdXNlZG93biIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCl9fX19ZnVuY3Rpb24gY1koKXt1JiYoY3QodSksY1goKSl9ZnVuY3Rpb24gY1ooKXtaLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6OTciKSt0aGlzLnVybCl9ZnVuY3Rpb24gYyQoYixjLGQpe2EuejI5M0FsbFN0b3AoKSxaLmltYWdlWj1jVihkKTt2YXIgZT1jUyhiLGMpO1ouaW1hZ2VYPWUueCxaLmltYWdlWT1lLnksYS56Mjc0KCEwKX1mdW5jdGlvbiBjXygpe2lmKGJCKXtkYihidixidyxieCwhMSk7aWYoYnYhPT0wfHxidyE9PTB8fGJ4IT09MCliQj13aW5kb3cuc2V0VGltZW91dChjXyxiQSl9fWZ1bmN0aW9uIGRhKCl7Yk88Ykk/KGRiKGJKLGJLLGJMLCEwKSxiTysrLGJOPXdpbmRvdy5zZXRUaW1lb3V0KGRhLGJIKSk6KEM9Yk8qYkwrY0MoQSxaLmltYWdlWiksYS56MjkzQWxsU3RvcCgpLGEuejI3MyghMCkpfWZ1bmN0aW9uIGRiKGEsYixkLGUpe3ZhciBmLGcsaCxpPSExLGo9ITEsbD0hMTtpZihkIT0wKXt2YXIgbT1DKigxK2QpO2UmJihtPUMrZCk7dmFyIG49Y0IoQSxtKTtoPWNWKG4pO2lmKGghPVouaW1hZ2VaKXt2YXIgbz1kZShoKTtvJiYoIWUsaj0hMCxsPSEwKX19aWYoYSE9MHx8YiE9MCl7dmFyIHA9cGFyc2VGbG9hdChrLmxlZnQpK2Escz1wYXJzZUZsb2F0KGsudG9wKStiLHQ9Y1UocCxzKTtmPXQueCxnPXQueSxrLmxlZnQ9ZisicHgiLGsudG9wPWcrInB4IixpPSEwLGw9ITB9dmFyIHU9YnklMj09MDt1JiYoY1koKSxqJiZjdSgpLGwmJmN2KCkpO2lmKGkpdmFyIHY9Wi51c2VDYW52YXM/cGFyc2VGbG9hdChyLndpZHRoKS9xLndpZHRoOjEsdz1NYXRoLnJvdW5kKGMvYnUqQyp2KSx4PWJ5JXc9PTAmJmJ5IT0wfWZ1bmN0aW9uIGRjKCl7YkImJih3aW5kb3cuY2xlYXJUaW1lb3V0KGJCKSxiQj1udWxsKSxidj0wLGJ3PTAsYng9MCxieT0wfWZ1bmN0aW9uIGRkKCl7Yk4mJih3aW5kb3cuY2xlYXJUaW1lb3V0KGJOKSxiTj1udWxsKX1mdW5jdGlvbiBkZShhKXt2YXIgYj0hMSxjPWNDKEEsYSk7aWYoYyE9Qyl7Qz1jLEU9Y0MoQixhKTt2YXIgZD1jL0QsZT1iYipkLGY9YmMqZCxnPShiYi1lKS8yLGg9KGJjLWYpLzI7aWYoYzxEKXt2YXIgaT1jVChnLGgpO2subGVmdD1iZitpLngtZysicHgiLGsudG9wPWJoK2kueS1oKyJweCJ9aWYoWi51c2VDYW52YXMpci53aWR0aD1lKyJweCIsci5oZWlnaHQ9ZisicHgiLHIubGVmdD1nKyJweCIsci50b3A9aCsicHgiLGU9YmoqZCxmPWJrKmQsZz1ibCtaLmltYWdlWCooMS1kKSpaLmltYWdlWixoPWJtK1ouaW1hZ2VZKigxLWQpKlouaW1hZ2VaLG4ud2lkdGg9ZSsicHgiLG4uaGVpZ2h0PWYrInB4IixuLmxlZnQ9ZysicHgiLG4udG9wPWgrInB4IjtlbHNle2NyKHEsQSxPLCEwLCExKSx0aWVyQmFja2ZpbGxXPUhbQl0sdGllckJhY2tmaWxsSD1JW0JdLG0ud2lkdGg9dGllckJhY2tmaWxsVyxtLmhlaWdodD10aWVyQmFja2ZpbGxIO3ZhciBqPXRpZXJCYWNrZmlsbFcqRSxsPXRpZXJCYWNrZmlsbEgqRSxvPVouaW1hZ2VYKmEscD1aLmltYWdlWSphO2JsPWJkLW8sYm09YmUtcCxuLmxlZnQ9YmwrInB4IixuLnRvcD1ibSsicHgiLGNyKG0sQixGLCExLCExKX1iPSEwfXJldHVybiBifWZ1bmN0aW9uIGRmKGEpe2E/KGJYfHxkZygpLGJYLmVsbXQuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIik6YlgmJihiWC5lbG10LnN0eWxlLmRpc3BsYXk9Im5vbmUiKX1mdW5jdGlvbiBkZygpe3ZhciBhPVouVXRpbHMuejE4NSgiejIxIiksYj0zNCxjPTM0LGQ9MjAsZT1wYXJzZUZsb2F0KFoudmlld2VyVyktKGIrZCksZj1wYXJzZUZsb2F0KFoudmlld2VySCktKGMrZCksZz1aLlV0aWxzLnoxODUoInoyMCIpO2JYPW5ldyBaLlV0aWxzLkJ1dHRvbigiYnV0dG9uRlBDYW5jZWwiLGEsbnVsbCxudWxsLG51bGwsbnVsbCxiKyJweCIsYysicHgiLGUrInB4IixmKyJweCIsIm1vdXNlZG93biIsZGgsInoxMDIiLCJzb2xpZCIsIjFweCIsZywiMHB4IiwiMHB4IiksWi5WaWV3ZXJEaXNwbGF5LmFwcGVuZENoaWxkKGJYLmVsbXQpfWZ1bmN0aW9uIGRoKCl7YS50b2dnbGVGdWxsUGFnZVZpZXcoITEpfWZ1bmN0aW9uIGRpKCl7Wi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJrZXlkb3duIixkeiksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJrZXl1cCIsZEEpLFoubW9iaWxlRGV2aWNlPyhaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwidG91Y2hzdGFydCIsZHApLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihpLCJ0b3VjaG1vdmUiLGRxKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwidG91Y2hlbmQiLGRyKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwidG91Y2hjYW5jZWwiLGRzKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwiZ2VzdHVyZXN0YXJ0IixkdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGksImdlc3R1cmVjaGFuZ2UiLGR1KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwiZ2VzdHVyZWVuZCIsZHYpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0ub25vcmllbnRhdGlvbmNoYW5nZT1keSk6KFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihaLlZpZXdlckRpc3BsYXksIm1vdXNlb3ZlciIsZGopLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihaLlZpZXdlckRpc3BsYXksIm1vdXNlb3V0IixkbiksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKFouVmlld2VyRGlzcGxheSwibW91c2Vtb3ZlIixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwibW91c2Vkb3duIixkayksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGksIm1vdXNlbW92ZSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCkpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihtLCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHEsImNvbnRleHRtZW51IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSx1JiZaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIodSwiY29udGV4dG1lbnUiLFouVXRpbHMucHJldmVudERlZmF1bHQpLHgmJlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih4LCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCl9ZnVuY3Rpb24gZGooYSl7dmFyIGI9Wi5VdGlscy56MjI1KFouVXRpbHMudGFyZ2V0KFouVXRpbHMuZXZlbnQoYSkpKSxjPVouVXRpbHMuejIyNShaLlV0aWxzLnJlbGF0ZWRUYXJnZXQoYSkpO2lmKCFifHwhYylaLlRvb2xiYXJEaXNwbGF5JiZaLnRvb2xiYXJWaXNpYmxlPjEmJlouVG9vbGJhci5zaG93KCEwKSxaLk5hdmlnYXRvckRpc3BsYXkmJloubmF2aWdhdG9yVmlzaWJsZT4xJiZaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCEwKSxibz1udWxsfWZ1bmN0aW9uIGRrKGEpe2lmKFouVXRpbHMuaXNSaWdodE1vdXNlQnV0dG9uKGEpKXJldHVybjtibj0hMDt2YXIgYj1aLlV0aWxzLnoxODEoYSk7cmV0dXJuIGJQPW5ldyBaLlV0aWxzLlBvaW50KGIueCxiLnkpLGkubW91c2VYUHJpb3I9Yi54LGkubW91c2VZUHJpb3I9Yi55LFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2Vtb3ZlIixkbCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGksIm1vdXNldXAiLGRtKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNldXAiLGRtKSwhMX1mdW5jdGlvbiBkbChiKXtpZighWi5tb3VzZVBhbilyZXR1cm47dmFyIGI9Wi5VdGlscy5ldmVudChiKSxjPVouVXRpbHMuejE4MShiKSxkPWMueC1pLm1vdXNlWFByaW9yLGU9Yy55LWkubW91c2VZUHJpb3I7aWYoIWlzTmFOKGQpJiYhaXNOYU4oZSkpe3ZhciBmPXBhcnNlRmxvYXQoay5sZWZ0KStkLGc9cGFyc2VGbG9hdChrLnRvcCkrZSxoPWNVKGYsZyk7ay5sZWZ0PWgueCsicHgiLGsudG9wPWgueSsicHgiLGkubW91c2VYUHJpb3I9Yy54LGkubW91c2VZUHJpb3I9Yy55O2lmKFouTmF2aWdhdG9yKXt2YXIgaj1hLnoxNDEoaCk7Wi5OYXZpZ2F0b3IuejI2M1JlY3RhbmdsZVBvc2l0aW9uKGopfX1yZXR1cm4hMX1mdW5jdGlvbiBkbShiKXtibj0hMSxkb2N1bWVudC5tb3VzZW1vdmU9bnVsbCxkb2N1bWVudC5tb3VzZXVwPW51bGwsWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLGRsKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaSwibW91c2V1cCIsZG0pLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsZG0pO3ZhciBiPVouVXRpbHMuZXZlbnQoYiksYz1aLlV0aWxzLnoxODEoYiksZDtibz9kPWJvOmQ9bmV3IFouVXRpbHMuUG9pbnQoYy54LGMueSk7dmFyIGU9TWF0aC5zcXJ0KE1hdGgucG93KGJQLngtZC54LDIpK01hdGgucG93KGJQLnktZC55LDIpKTtpZihlPDQpe3ZhciBmPWEuejE3MyhiLGQsQSxDKTtaLmNsaWNrWm9vbT9hLnoyOTNUb1ZpZXcoZi54LGYueSxmLnopOlouY2xpY2tQYW4mJmEuejI5M1RvVmlldyhmLngsZi55LFouaW1hZ2VaKX1lbHNlIFoubW91c2VQYW4mJmEuejI3NCgpO2JvJiYoWi5Ub29sYmFyRGlzcGxheSYmWi50b29sYmFyVmlzaWJsZT4xJiZaLlRvb2xiYXIuc2hvdyghMSksWi5OYXZpZ2F0b3JEaXNwbGF5JiZaLm5hdmlnYXRvclZpc2libGU+MSYmWi5OYXZpZ2F0b3Iuc2V0VmlzaWJpbGl0eSghMSkpfWZ1bmN0aW9uIGRuKGEpe3ZhciBiPVouVXRpbHMuejIyNShaLlV0aWxzLnRhcmdldChhKSksYz1aLlV0aWxzLnoyMjUoWi5VdGlscy5yZWxhdGVkVGFyZ2V0KFouVXRpbHMuZXZlbnQoYSkpKTtpZighYnx8IWMpaWYoIWJuKVouVG9vbGJhckRpc3BsYXkmJloudG9vbGJhclZpc2libGU+MSYmWi5Ub29sYmFyLnNob3coITEpLFouTmF2aWdhdG9yRGlzcGxheSYmWi5uYXZpZ2F0b3JWaXNpYmxlPjEmJlouTmF2aWdhdG9yLnNldFZpc2liaWxpdHkoITEpO2Vsc2V7dmFyIGQ9Wi5VdGlscy56MTgxKGEpO2JvPW5ldyBaLlV0aWxzLlBvaW50KGQueCxkLnkpfX1mdW5jdGlvbiBkcChhKXt2YXIgYj1aLlV0aWxzLnoxNzgoYSk7aWYoYiYmIWJwKXticj0hMTt2YXIgYz1iLnRhcmdldCxkPW5ldyBaLlV0aWxzLlBvaW50KGIucGFnZVgsYi5wYWdlWSk7YlA9bmV3IFouVXRpbHMuUG9pbnQoZC54LGQueSksaS5tb3VzZVhQcmlvcj1kLngsaS5tb3VzZVlQcmlvcj1kLnl9fWZ1bmN0aW9uIGRxKGIpe2IucHJldmVudERlZmF1bHQoKTtpZighWi5tb3VzZVBhbilyZXR1cm47dmFyIGM9Wi5VdGlscy56MTc4KGIpO2lmKGMmJiFicCYmIWJyKXt2YXIgZD1jLnRhcmdldCxlPW5ldyBaLlV0aWxzLlBvaW50KGMucGFnZVgsYy5wYWdlWSksZj1lLngtaS5tb3VzZVhQcmlvcixnPWUueS1pLm1vdXNlWVByaW9yO2lmKCFpc05hTihmKSYmIWlzTmFOKGcpKXt2YXIgaD1wYXJzZUZsb2F0KGsubGVmdCkrZixqPXBhcnNlRmxvYXQoay50b3ApK2csbD1jVShoLGopO2subGVmdD1sLngrInB4IixrLnRvcD1sLnkrInB4IixpLm1vdXNlWFByaW9yPWUueCxpLm1vdXNlWVByaW9yPWUueTtpZihaLk5hdmlnYXRvcil7dmFyIG09YS56MTQxKGwpO1ouTmF2aWdhdG9yLnoyNjNSZWN0YW5nbGVQb3NpdGlvbihtKX19fXJldHVybiExfWZ1bmN0aW9uIGRyKGIpe2lmKCFicCYmIWJyKXt2YXIgYz0hMSxkPVouVXRpbHMuejE3OChiKTtpZihkKXt2YXIgZT1kLnRhcmdldCxmPW5ldyBaLlV0aWxzLlBvaW50KGQucGFnZVgsZC5wYWdlWSksZz1uZXcgWi5VdGlscy5Qb2ludChmLngsZi55KSxoPU1hdGguc3FydChNYXRoLnBvdyhiUC54LWcueCwyKStNYXRoLnBvdyhiUC55LWcueSwyKSk7aWYoaDw0KXt2YXIgaT1hLnoxNzMoYixnLEEsQyk7Wi5jbGlja1pvb20/YS56MjkzVG9WaWV3KGkueCxpLnksaS56KTpaLmNsaWNrUGFuJiZhLnoyOTNUb1ZpZXcoaS54LGkueSxaLmltYWdlWil9ZWxzZSBjPSEwfWVsc2UgYz0hMDtjJiZaLm1vdXNlUGFuJiZhLnoyNzQoKX19ZnVuY3Rpb24gZHMoYil7aWYoIWJwJiYhYnIpe3ZhciBjPSExLGQ9Wi5VdGlscy56MTc4KGIpO2lmKGQpe3ZhciBlPWQudGFyZ2V0LGY9bmV3IFouVXRpbHMuUG9pbnQoZC5wYWdlWCxkLnBhZ2VZKSxnPW5ldyBaLlV0aWxzLlBvaW50KGYueCxmLnkpLGg9TWF0aC5zcXJ0KE1hdGgucG93KGJQLngtZy54LDIpK01hdGgucG93KGJQLnktZy55LDIpKTtpZihoPDQpe3ZhciBpPWEuejE3MyhiLGcsQSxDKTtaLmNsaWNrWm9vbT9hLnoyOTNUb1ZpZXcoaS54LGkueSxpLnopOlouY2xpY2tQYW4mJmEuejI5M1RvVmlldyhpLngsaS55LFouaW1hZ2VaKX1lbHNlIGM9ITB9ZWxzZSBjPSEwO2MmJloubW91c2VQYW4mJmEuejI3NCgpfX1mdW5jdGlvbiBkdChhKXt2YXIgYT1aLlV0aWxzLmV2ZW50KGEpO2R1KGEpLGJwfHwoYnA9d2luZG93LnNldEludGVydmFsKGR3LGJzKSl9ZnVuY3Rpb24gZHUoYSl7dmFyIGE9Wi5VdGlscy5ldmVudChhKTthLnByZXZlbnREZWZhdWx0KCksYnE9TWF0aC5yb3VuZChhLnNjYWxlKjEwMCkvMTAwfWZ1bmN0aW9uIGR2KGIpe2JwJiYod2luZG93LmNsZWFySW50ZXJ2YWwoYnApLGJyPSEwLGJwPW51bGwpLFoubW91c2VQYW4mJmEuejI3NCgpfWZ1bmN0aW9uIGR3KGEpe2lmKCFaLm1vdXNlUGFuKXJldHVybjt2YXIgYj1keChBLEQsYnEpLGM9Y1YoYik7YiE9Wi5pbWFnZVomJmRlKGMpfWZ1bmN0aW9uIGR4KGEsYixjKXt2YXIgZD1iKmMsZT1jQihhLGQpO3JldHVybiBlfWZ1bmN0aW9uIGR5KGIpe1ouZnVsbFBhZ2UmJihaLlRvb2xiYXJEaXNwbGF5JiZaLnRvb2xiYXJWaXNpYmxlPjEmJlouVG9vbGJhci5zaG93KCExKSxaLk5hdmlnYXRvckRpc3BsYXkmJloubmF2aWdhdG9yVmlzaWJsZT4xJiZaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCExKSxhLnRvZ2dsZUZ1bGxQYWdlVmlldyghMSksYS50b2dnbGVGdWxsUGFnZVZpZXcoITApLFouVG9vbGJhckRpc3BsYXkmJloudG9vbGJhclZpc2libGU+MSYmWi5Ub29sYmFyLnNob3coITApLFouTmF2aWdhdG9yRGlzcGxheSYmWi5uYXZpZ2F0b3JWaXNpYmxlPjEmJlouTmF2aWdhdG9yLnNldFZpc2liaWxpdHkoITApKX1mdW5jdGlvbiBkeihiKXtpZighWi5rZXlzKXJldHVybjt2YXIgYj1aLlV0aWxzLmV2ZW50KGIpO3N3aXRjaChiLmtleUNvZGUpe2Nhc2UgOTA6YS56b29tKCJvdXQiKTticmVhaztjYXNlIDE3OmEuem9vbSgib3V0Iik7YnJlYWs7Y2FzZSA2NTphLnpvb20oImluIik7YnJlYWs7Y2FzZSAxNjphLnpvb20oImluIik7YnJlYWs7Y2FzZSAzNzphLnBhbigibGVmdCIpO2JyZWFrO2Nhc2UgMzg6YS5wYW4oInVwIik7YnJlYWs7Y2FzZSA0MDphLnBhbigiZG93biIpO2JyZWFrO2Nhc2UgMzk6YS5wYW4oInJpZ2h0Iik7YnJlYWs7Y2FzZSAyNzpaLmZ1bGxQYWdlP2EudG9nZ2xlRnVsbFBhZ2VWaWV3KCExKTphLnJlc2V0KCl9fWZ1bmN0aW9uIGRBKGIpe2lmKCFaLmtleXMpcmV0dXJuO3ZhciBiPVouVXRpbHMuZXZlbnQoYiksYz1iLmtleUNvZGU7Yz09OTB8fGM9PTE3fHxjPT02NXx8Yz09MTY/YS56b29tKCJzdG9wIik6Yz09Mzd8fGM9PTM5P2EucGFuKCJob3Jpem9udGFsU3RvcCIpOihjPT0zOHx8Yz09NDApJiZhLnBhbigidmVydGljYWxTdG9wIil9dmFyIGE9dGhpcyxiPSExLGM9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NjEiKSwxMCksZD1wYXJzZUZsb2F0KFouVXRpbHMuejE4NSgiejU5IikpLGU9ZC8yLGY9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NjIiKSwxMCksZz1aLnRvb2xiYXJWaXNpYmxlPT0xP1oudG9vbGJhckg6MCxoLGksayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyx4LHk7Y2coKTt2YXIgej0xLEE9MCxCPTAsQyxELEUsRj1bXSxHPVtdLEg9W10sST1bXSxKPVtdLEs9W10sTD1bXSxNPVtdLE49W10sTz1bXSxQPVtdLFE9W10sUj0wLFM9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NyIpLDEwKSxUPXBhcnNlSW50KFouVXRpbHMuejE4NSgiejYiKSwxMCksVT1wYXJzZUludChaLlV0aWxzLnoxODUoIno1IiksMTApLFY9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NCIpLDEwKSxXPXBhcnNlSW50KFouVXRpbHMuejE4NSgiejMiKSwxMCksWD1wYXJzZUludChaLlV0aWxzLnoxODUoIno0NSIpLDEwKSxZLCQsXyxiYSxiYixiYyxiZCxiZSxiZixiZyxiaCxiaSxiaixiayxibCxibTtZPVoudmlld2VyVywkPVoudmlld2VySCxfPWJhPTAsJC09ZyxaLnRvb2xiYXJQb3NpdGlvbj09MCYmKGJhKz1nKTt2YXIgYm49ITEsYm89bnVsbCxicD1udWxsLGJxPW51bGwsYnI9ITEsYnM9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6MjQiKSwxMCksYnQ9cGFyc2VGbG9hdChaLlV0aWxzLnoxODUoIno4MSIpKSpaLnpvb21TcGVlZDtaLm1vYmlsZURldmljZSYmKGJ0Lz0yKTt2YXIgYnU9TWF0aC5yb3VuZChwYXJzZUZsb2F0KFouVXRpbHMuejE4NSgiejQ3IikpKloucGFuU3BlZWQpLGJ2PTAsYnc9MCxieD0wLGJ5PTAsYno9MCxiQT1wYXJzZUludChaLlV0aWxzLnoxODUoIno3NyIpLDEwKSxiQixiQyxiRCxiRT1wYXJzZUZsb2F0KFouVXRpbHMuejE4NSgiejE5IikpKlouZmFkZUluU3BlZWQsYkYsYkc9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NzgiKSwxMCksYkg9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NzkiKSwxMCksYkk9YkcvYkgsYkosYkssYkwsYk0sYk4sYk8sYlAsYlEsYlIsYlMsYlQsYlUsYlYsYlcsYlgsYlk7aWYoWi5VdGlscy5pc1N0clZhbChaLndhdGVybWFya1BhdGgpKXZhciBiWixiJCxiXz1bXSxjYT1bXTtjaChZLCQsXyxiYSk7dmFyIGNiPW5ldyBaLnoxMDEsY2M9Wi5VdGlscy56MTQwKFouaW1hZ2VQYXRoKyIvIisiSW1hZ2VQcm9wZXJ0aWVzLnhtbCIpO2NiLmxvYWRYTUwoY2MpLHRoaXMuejIwNj1mdW5jdGlvbihhLGIpe1ouaW1hZ2VXPWEsWi5pbWFnZUg9YixjaSgpLGNqKCksRT1jQyhCLFouaW5pdGlhbFopLEM9Y0MoQSxaLmluaXRpYWxaKSxEPUMsWi51c2VDYW52YXMmJnMuc2NhbGUoQyxDKSx1JiZjVygpLGNrKCksYyQoWi5pbml0aWFsWCxaLmluaXRpYWxZLFouaW5pdGlhbFopLGRpKCksY2YoITApLFouVmlld2VyLnoxNDgoKX0sdGhpcy5yZXoyMDY9ZnVuY3Rpb24oYSxiKXtjZighMSksY2QoKSxaLmltYWdlVz1hLFouaW1hZ2VIPWIsY2koKSxjaigpLEU9Y0MoQixaLmluaXRpYWxaKSxDPWNDKEEsWi5pbml0aWFsWiksRD1DLFoudXNlQ2FudmFzJiYocy5yZXN0b3JlKCkscy5zY2FsZShDLEMpKSxjaygpLGNoKFksJCxfLGJhKSxtJiZjdChtKSxxJiZjdChxKSx1JiZjdCh1KSxjJChaLmluaXRpYWxYLFouaW5pdGlhbFksWi5pbml0aWFsWiksY2YoITApLFoubmF2aWdhdG9yVmlzaWJsZT4wJiZaLk5hdmlnYXRvci5zZXRJbWFnZVBhdGgoWi5pbWFnZVBhdGgpfSx0aGlzLnoxODA9ZnVuY3Rpb24oKXtyZXR1cm4gY2UoKX0sdGhpcy56MjAxPWZ1bmN0aW9uKCl7cmV0dXJuIGJifSx0aGlzLnoxNzk9ZnVuY3Rpb24oKXtyZXR1cm4gYmN9LHRoaXMuejE4Nj1mdW5jdGlvbigpe3JldHVybiB6fSx0aGlzLnoxOTU9ZnVuY3Rpb24oKXtyZXR1cm4gY30sdGhpcy56MTg3PWZ1bmN0aW9uKCl7cmV0dXJuIEF9LHRoaXMuejE4OT1mdW5jdGlvbigpe3JldHVybiBDfSx0aGlzLnoxODlBc1pvb209ZnVuY3Rpb24oKXt2YXIgYT1jQihBLEMpO3JldHVybiBhfSx0aGlzLnoxOTQ9ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdGhpcy56MTkzPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHRoaXMuejE5Nz1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLnoxOTI9ZnVuY3Rpb24oKXtyZXR1cm4gSC5qb2luKCIsIil9LHRoaXMuejE4OD1mdW5jdGlvbigpe3JldHVybiBJLmpvaW4oIiwgIil9LHRoaXMuejE5MT1mdW5jdGlvbigpe3JldHVybiBMLmpvaW4oIiwgIil9LHRoaXMuejE5Nj1mdW5jdGlvbigpe3ZhciBhPU4uam9pbigiLCAiKT09IiI/IkN1cnJlbnQgdmlldyBsb2FkaW5nIGNvbXBsZXRlIjpOLmpvaW4oIiwgIik7cmV0dXJuIGF9LHRoaXMuc2V0U2l6ZUFuZFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjLGQpe2NoKGEsYixjLGQpfSx0aGlzLnoyNzQ9ZnVuY3Rpb24oYSl7aWYoQyE9RHx8Wi5pbWFnZVohPWJ6fHxwYXJzZUZsb2F0KGsubGVmdCkhPWJmfHxwYXJzZUZsb2F0KGsudG9wKSE9Ymh8fGEpe2NuKCksYno9Y0IoQSxDKTt2YXIgYz0hMTtpZihDIT1EfHxaLmltYWdlWiE9Ynp8fCFifHxhKVouaW1hZ2VaPGJ6JiYhYSYmKGM9ITApLGNvKCksY3AoKSxjcihtLEIsRiwhMSwhMSk7Y3EoKSxjcihxLEEsTywhMCxjKSxjcyhOLGNMLDApLGN1KCksY3YoKX19LHRoaXMuc2V0Vmlldz1mdW5jdGlvbihhLGIsYyl7aWYoYT09dW5kZWZpbmVkfHxhPT1udWxsKWE9Wi5pbWFnZVcvMjtpZihiPT11bmRlZmluZWR8fGI9PW51bGwpYj1aLmltYWdlSC8yO2M9PXVuZGVmaW5lZHx8Yz09bnVsbD9jPVouZml0WjpjPjEmJihjPWMvMTAwKSxjJChhLGIsYyl9LHRoaXMuem9vbT1mdW5jdGlvbihiKXtzd2l0Y2goYil7Y2FzZSJvdXQiOmJ4Pj0wJiYoYngtPWJ0KTticmVhaztjYXNlImluIjpieDw9MCYmKGJ4Kz1idCk7YnJlYWs7Y2FzZSJzdG9wIjpieD0wfVouem9vbWluZz1ieD09MD8ic3RvcCI6Yng+MD8iaW4iOiJvdXQiLGJ4IT0wP2JCfHwoKGJ4PDAmJlouaW1hZ2VaPloubWluWnx8Yng+MCYmWi5pbWFnZVo8Wi5tYXhaKSYmYS56MjczKCExKSxaLnVzZUNhbnZhc3x8Y3QodSksYkI9d2luZG93LnNldFRpbWVvdXQoY18sYkEpKTooYS56MjkzQWxsU3RvcCgpLGEuejI3MyghMCkpfSx0aGlzLnBhbj1mdW5jdGlvbihiKXtzd2l0Y2goYil7Y2FzZSJsZWZ0Ijpidjw9MCYmKGJ2Kz1idSk7YnJlYWs7Y2FzZSJ1cCI6Ync8PTAmJihidys9YnUpO2JyZWFrO2Nhc2UiZG93biI6Ync+PTAmJihidy09YnUpO2JyZWFrO2Nhc2UicmlnaHQiOmJ2Pj0wJiYoYnYtPWJ1KTticmVhaztjYXNlImhvcml6b250YWxTdG9wIjpidj0wO2JyZWFrO2Nhc2UidmVydGljYWxTdG9wIjpidz0wO2JyZWFrO2Nhc2Uic3RvcCI6YnY9MCxidz0wfVoucGFubmluZ1g9YnY9PTA/InN0b3AiOmJ2PjA/ImxlZnQiOiJyaWdodCIsWi5wYW5uaW5nWT1idz09MD8ic3RvcCI6Ync+MD8idXAiOiJkb3duIixiQz1aLmltYWdlWCpjQihBLDEpLGJEPVouaW1hZ2VZKmNCKEEsMSksYnYhPTB8fGJ3IT0wP2JCfHwoYS56MjczKCEwKSxaLnVzZUNhbnZhc3x8Y3QodSksYkI9d2luZG93LnNldFRpbWVvdXQoY18sYkEpKTooYS56MjkzQWxsU3RvcCgpLGEuejI3MyghMCkpfSx0aGlzLnoyOTNUb1ZpZXc9ZnVuY3Rpb24oYixjLGQpe2EuejI5M0FsbFN0b3AoKTt2YXIgZT1jRihiLGMpLGY9YmQtZS54LGc9YmUtZS55LGg9Y0MoQSxkKSxpPWNDKEIsZCksaj1wYXJzZUZsb2F0KGsubGVmdCkrZixsPXBhcnNlRmxvYXQoay50b3ApK2csbT1oLUMsbj1pLUU7Yko9ai9iSSxiSz1sL2JJLGJMPW0vYkksYk09bi9iSSxhLnoyNzMoITEpLGJPPTAsYk49d2luZG93LnNldFRpbWVvdXQoZGEsYkgpfSx0aGlzLnoyOTNBbGxTdG9wPWZ1bmN0aW9uKGIpe2RjKCksZGQoKSxifHxhLnoyNzQoKX0sdGhpcy56MjQ1PWZ1bmN0aW9uKGEpe3ZhciBiPWRlKGEpO2ImJihjWSgpLGN2KCkpfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7YS56MjkzVG9WaWV3KFouaW5pdGlhbFgsWi5pbml0aWFsWSxaLmluaXRpYWxaKX0sdGhpcy50b2dnbGVGdWxsUGFnZVZpZXdFeHRlcm5hbD1mdW5jdGlvbigpe2JZPSEwLGEudG9nZ2xlRnVsbFBhZ2VWaWV3KCl9LHRoaXMudG9nZ2xlRnVsbFBhZ2VWaWV3PWZ1bmN0aW9uKGIpe2EuejI5M0FsbFN0b3AoKSxaLmZ1bGxQYWdlPWI/YjohWi5mdWxsUGFnZTt2YXIgYz1kb2N1bWVudC5ib2R5LGQ9Yy5zdHlsZSxlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxmPVouVmlld2VyRGlzcGxheS5zdHlsZSxnPW51bGwsaD1udWxsO2lmKFouZnVsbFBhZ2Upe2JRPWQud2lkdGgsYlI9ZC5oZWlnaHQsYlM9ZC5vdmVyZmxvdyxiVD1lLm92ZXJmbG93LGJVPWYuYmFja2dyb3VuZENvbG9yLGJWPWYucG9zaXRpb24sYlc9Zi56SW5kZXg7dmFyIGk7Wi5tb2JpbGVEZXZpY2U/KGk9Wi5VdGlscy56MjAxaW5kb3dTaXplKCksZC53aWR0aD1pLngsZC5oZWlnaHQ9aS55KTooZC53aWR0aD0iMTAwJSIsZC5oZWlnaHQ9IjEwMCUiKSxkLm92ZXJmbG93PSJoaWRkZW4iLGUub3ZlcmZsb3c9ImhpZGRlbiIsZi5iYWNrZ3JvdW5kQ29sb3I9Wi5VdGlscy56MTg1KCJ6MjIiKSxmLnBvc2l0aW9uPSJmaXhlZCIsZi56SW5kZXg9Ijk5OTk5OTk5IixpPVouVXRpbHMuejIwMWluZG93U2l6ZSgpLGc9aS54LGg9aS55fWVsc2V7ZC53aWR0aD1iUSxkLmhlaWdodD1iUixkLm92ZXJmbG93PWJTLGUub3ZlcmZsb3c9YlQsZi5iYWNrZ3JvdW5kQ29sb3I9YlUsZi5wb3NpdGlvbj0icmVsYXRpdmUiLGYuekluZGV4PWJXO3ZhciBqPVouVXRpbHMuejE3NihaLnBhZ2VDb250YWluZXIpO2c9cGFyc2VGbG9hdChqLndpZHRoKSxoPXBhcnNlRmxvYXQoai5oZWlnaHQpLGlzTmFOKGcpJiYoZz1aLlZpZXdlckRpc3BsYXkuY2xpZW50V2lkdGgpLGlzTmFOKGgpJiYoaD1aLlZpZXdlckRpc3BsYXkuY2xpZW50SGVpZ2h0KSxiWT0hMX1aLnZpZXdlclc9ZyxaLnZpZXdlckg9aCxjaChnLGgpLGRmKGJZKTtpZihaLlRvb2xiYXJEaXNwbGF5JiZaLlRvb2xiYXIuejE4MCgpKXtaLnRvb2xiYXJDdXJyZW50Vz1aLnRvb2xiYXJXPT0tMT9nOloudG9vbGJhclc7dmFyIGw9Wi50b29sYmFyUG9zaXRpb249PTE/Wi52aWV3ZXJILVoudG9vbGJhckg6MDtaLlRvb2xiYXIuc2V0U2l6ZUFuZFBvc2l0aW9uKFoudG9vbGJhckN1cnJlbnRXLG51bGwsbnVsbCxsKX1aLk5hdmlnYXRvckRpc3BsYXkmJlouTmF2aWdhdG9yLnoxODAoKSYmWi5OYXZpZ2F0b3Iuc2V0U2l6ZUFuZFBvc2l0aW9uKFoubmF2aWdhdG9yVyxaLm5hdmlnYXRvckgsWi5uYXZpZ2F0b3JMLTEsWi5uYXZpZ2F0b3JULTEpLGNqKCksWi5pbWFnZVo9Y1YoWi5pbWFnZVopO2lmKFouY29uc3RyYWluUGFuKXt2YXIgbT1wYXJzZUZsb2F0KGsubGVmdCksbj1wYXJzZUZsb2F0KGsudG9wKSxvPWNVKG0sbik7ay5sZWZ0PW8ueCsicHgiLGsudG9wPW8ueSsicHgifWEuejI3NCghMCl9LHRoaXMuejI3MT1mdW5jdGlvbigpe3ZhciBhPVouVmlld2VyRGlzcGxheS5maXJzdENoaWxkLmNoaWxkTm9kZXNbMF0uc3R5bGU7YS5kaXNwbGF5PWEuZGlzcGxheT09Im5vbmUiPyJpbmxpbmUtYmxvY2siOiJub25lIn0sdGhpcy56MjcyPWZ1bmN0aW9uKCl7dmFyIGE9Wi5WaWV3ZXJEaXNwbGF5LmZpcnN0Q2hpbGQuY2hpbGROb2Rlc1sxXS5zdHlsZTthLmRpc3BsYXk9YS5kaXNwbGF5PT0ibm9uZSI/ImlubGluZS1ibG9jayI6Im5vbmUifSx0aGlzLnoyNzM9ZnVuY3Rpb24oYSl7aWYodil7dmFyIGI9YT9hOnYuZGlzcGxheSE9ImlubGluZS1ibG9jayI7di5kaXNwbGF5PWI/ImlubGluZS1ibG9jayI6Im5vbmUifX0sdGhpcy50b2dnbGVDb25zdHJhaW5QYW49ZnVuY3Rpb24oKXtaLmNvbnN0cmFpblBhbj0hWi5jb25zdHJhaW5QYW47aWYoWi5jb25zdHJhaW5QYW4pe3ZhciBiPXBhcnNlRmxvYXQoci5sZWZ0KSxjPXBhcnNlRmxvYXQoci50b3ApLGQ9Y1UoYixjKTtrLmxlZnQ9ZC54KyJweCIsay50b3A9ZC55KyJweCIsYS56Mjc0KCl9fSx0aGlzLnoxNzM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9cGFyc2VGbG9hdChaLlV0aWxzLnoxODUoInoxMFRJRVJTS0lQVEhSRVNIT0xEIikpLGY9Y0QoYi54LGIueSksZz1jRShmLngsZi55KSxoPWNCKGMsZCk7cmV0dXJuIGEuYWx0S2V5PyhkPjErZT9oPWNCKGMsMSk6Yz4wJiYoaD1jQihjLTEsMSkpLGgtWi5maXRaPGUmJihoPVouZml0WikpOmQ8MS1lP2g9Y0IoYywxKTpjPHotMSYmKGg9Y0IoYysxLDEpKSxuZXcgWi5VdGlscy5Qb2ludDNEKGcueCxnLnksaCl9LHRoaXMuejI2Nz1mdW5jdGlvbihhLGIpe3ZhciBjPS0oYS1aLmltYWdlWCksZD0tKGItWi5pbWFnZVkpLGU9YypaLmltYWdlWixmPWQqWi5pbWFnZVosZz1lK2JmLGg9ZitiaCxpPWNVKGcsaCk7ay5sZWZ0PWkueCsicHgiLGsudG9wPWkueSsicHgifSx0aGlzLnoxNDE9ZnVuY3Rpb24oYSl7aWYoIWEpdmFyIGE9bmV3IFouVXRpbHMuUG9pbnQocGFyc2VGbG9hdChrLmxlZnQpLHBhcnNlRmxvYXQoay50b3ApKTt2YXIgYj1hLngtYmYsYz1hLnktYmgsZD1iL1ouaW1hZ2VaLGU9Yy9aLmltYWdlWixmPVouaW1hZ2VYLWQsZz1aLmltYWdlWS1lO3JldHVybiBuZXcgWi5VdGlscy5Qb2ludChmLGcpfX0sWi56MTI0PWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIHUoKXt3aW5kb3cuY2xlYXJJbnRlcnZhbChxKSxxPW51bGw7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2dyZXNzVGV4dEJveCIpLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7YSYmKGEubm9kZVZhbHVlPSIiKX1mdW5jdGlvbiB2KCl7cmV0dXJuIGN9ZnVuY3Rpb24gdyhhKXtjPWF9ZnVuY3Rpb24geChhLGIsYyxkKXthfHwoYT1aLnRvb2xiYXJWaXNpYmxlPjA/Wi50b29sYmFyQ3VycmVudFc6MCksYnx8KGI9Wi50b29sYmFyVmlzaWJsZT4wP2Y6MCksY3x8KGM9MCksZHx8KGQ9Wi50b29sYmFyUG9zaXRpb249PTE/Wi52aWV3ZXJILWY6MCk7dmFyIGU9Wi5Ub29sYmFyRGlzcGxheS5zdHlsZTtlLndpZHRoPWErInB4IixlLmhlaWdodD1iKyJweCIsZS5sZWZ0PWMrInB4IixlLnRvcD1kKyJweCIseShhLGIpfWZ1bmN0aW9uIHkoYSxiKXt2YXIgYz1hLGQ9YixlPXRvb2xiYXJTa2luU2l6ZXNbMl0sZj10b29sYmFyU2tpblNpemVzWzNdLGc9dG9vbGJhclNraW5TaXplc1s0XSxoPXRvb2xiYXJTa2luU2l6ZXNbNV0saT10b29sYmFyU2tpblNpemVzWzZdLGo9dG9vbGJhclNraW5TaXplc1s3XSxrPXRvb2xiYXJTa2luU2l6ZXNbOF0sbD10b29sYmFyU2tpblNpemVzWzldLG09dG9vbGJhclNraW5TaXplc1sxMF0sbj10b29sYmFyU2tpblNpemVzWzExXSxvPXRvb2xiYXJTa2luU2l6ZXNbMTJdLHA9dG9vbGJhclNraW5TaXplc1sxM10scT10b29sYmFyU2tpblNpemVzWzE0XSx1PXRvb2xiYXJTa2luU2l6ZXNbMTVdLHY9MCx3PShkLWYpLzIrMSx4PShkLWgpLzIseT0oZC1qKS8yLHo9eSoxLjMsQT15KzQsQj15KzIsQz1aLmxvZ29WaXNpYmxlPT0xPzA6ay8yLEQ9Wi5sb2dvVmlzaWJsZT09MT8wOmsvMixFPWstKGktZyksRj1aLmZ1bGxQYWdlVmlzaWJsZT84OjcsRz0yMCxIPUYqaysyKkU7Wi5zbGlkZXJWaXNpYmxlJiYoSCs9cCkscj1zPXQ9ITE7dmFyIEk9Wi5sb2dvVmlzaWJsZT09MT9lKzI6MCxKPVoudG9vbGJhclZpc2libGUhPTAmJloudG9vbGJhclZpc2libGUhPTE/azowLEs9SStKLEw9SytHK0grRytxO0w+YyYmKHI9ITAsTC1wPmMmJihzPSEwLEwtcC1xPmMmJih0PSEwLEs9MCkscT0wKSxILT1wKTt2YXIgTT1LKyhjLXEtSy1IKS8yLE49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJhY2tncm91bmQiKTtOLnN0eWxlLndpZHRoPWMrInB4IixOLmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9Yys0MDArInB4IixOLnN0eWxlLmhlaWdodD1kKyJweCIsTi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1kKyJweCI7dmFyIE89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbkNvbnRhaW5lciIpO08uc3R5bGUud2lkdGg9SCtHKjIrInB4IixPLnN0eWxlLmhlaWdodD1kKyJweCIsTy5zdHlsZS5sZWZ0PU0tRysicHgiO3ZhciBQPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25CYWNrZ3JvdW5kIik7Wi5VdGlscy56MjAzKFAscGFyc2VGbG9hdChPLnN0eWxlLndpZHRoKSxwYXJzZUZsb2F0KE8uc3R5bGUuaGVpZ2h0KSksUC5zdHlsZS5sZWZ0PSIwcHgiO3ZhciBRPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyTG9nbyIpO2lmKFEpe3ZhciBSPVEuc3R5bGU7aWYoUilpZighdCl7Ui5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLFouVXRpbHMuejIwMyhRLGUsZiksUi5sZWZ0PXYrInB4IixSLnRvcD13KyJweCIsdis9ZSsyO3ZhciBTPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dvRGl2aWRlciIpO2lmKFMpe1ouVXRpbHMuejIwMyhTLGcsaCk7dmFyIFQ9Uy5zdHlsZTtULmxlZnQ9disicHgiLFQudG9wPXgrInB4In19ZWxzZSBSLmRpc3BsYXk9Im5vbmUifWlmKFoudG9vbGJhclZpc2libGUhPTAmJloudG9vbGJhclZpc2libGUhPTEpe3ZhciBVPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25NaW5pbWl6ZSIpLFY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbkV4cGFuZCIpO2lmKFUmJlYpe3ZhciBXPVUuc3R5bGUsWD1WLnN0eWxlO1cmJlgmJih0PyhXLmRpc3BsYXk9Im5vbmUiLFguZGlzcGxheT0ibm9uZSIpOihXLmRpc3BsYXk9ImlubGluZS1ibG9jayIsWC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLFouVXRpbHMuejEzOChVLGksaiksWi5VdGlscy56MTM4KFYsaSxqKSxXLmxlZnQ9ditDKyJweCIsVy50b3A9eisicHgiLFgubGVmdD12K0QrInB4IixYLnRvcD16KyJweCIpKX19dj1HO3ZhciBZPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25ab29tT3V0Iik7Wi5VdGlscy56MTM4KFksaSxqKTt2YXIgJD1ZLnN0eWxlOyQubGVmdD12KyJweCIsJC50b3A9eSsicHgiLHYrPWs7dmFyIF89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRyYWNrU2xpZGVyIiksYmE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvblNsaWRlciIpO2lmKF8mJmJhKXt2YXIgYmI9Xy5zdHlsZSxiYz1iYS5zdHlsZTtiYiYmYmMmJihyPyhiYi5kaXNwbGF5PSJub25lIixiYy5kaXNwbGF5PSJub25lIik6KGJiLmRpc3BsYXk9ImlubGluZS1ibG9jayIsYmMuZGlzcGxheT0iaW5saW5lLWJsb2NrIixaLlV0aWxzLnoyMDMoXyxuLG8pLGJiLmxlZnQ9di0yKyJweCIsYmIudG9wPUErInB4IixaLlV0aWxzLnoxMzgoYmEsbCxtKSxiYy5sZWZ0PXBhcnNlRmxvYXQoYmIubGVmdCkrInB4IixiYy50b3A9QisicHgiLHYrPXApKX12YXIgYmQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvblpvb21JbiIpO1ouVXRpbHMuejEzOChiZCxpLGopO3ZhciBiZT1iZC5zdHlsZTtiZS5sZWZ0PXYrInB4IixiZS50b3A9eSsicHgiLHYrPWsrMTt2YXIgYmY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhbkRpdmlkZXIiKTtaLlV0aWxzLnoyMDMoYmYsZyxoKTt2YXIgYmc9YmYuc3R5bGU7YmcubGVmdD12KyJweCIsYmcudG9wPXgrInB4Iix2Kz1FO3ZhciBiaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uUGFuTGVmdCIpO1ouVXRpbHMuejEzOChiaCxpLGopO3ZhciBiaT1iaC5zdHlsZTtiaS5sZWZ0PXYrInB4IixiaS50b3A9eSsicHgiLHYrPWs7dmFyIGJqPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25QYW5VcCIpO1ouVXRpbHMuejEzOChiaixpLGopO3ZhciBiaz1iai5zdHlsZTtiay5sZWZ0PXYrInB4Iixiay50b3A9eSsicHgiLHYrPWs7dmFyIGJsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25QYW5Eb3duIik7Wi5VdGlscy56MTM4KGJsLGksaik7dmFyIGJtPWJsLnN0eWxlO2JtLmxlZnQ9disicHgiLGJtLnRvcD15KyJweCIsdis9azt2YXIgYm49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvblBhblJpZ2h0Iik7Wi5VdGlscy56MTM4KGJuLGksaik7dmFyIGJvPWJuLnN0eWxlO2JvLmxlZnQ9disicHgiLGJvLnRvcD15KyJweCIsdis9azt2YXIgYnA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvblJlc2V0Iik7Wi5VdGlscy56MTM4KGJwLGksaik7dmFyIGJxPWJwLnN0eWxlO2JxLmxlZnQ9disicHgiLGJxLnRvcD15KyJweCIsdis9aysxO3ZhciBicj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnVsbFBhZ2VEaXZpZGVyIik7aWYoYnIpe1ouVXRpbHMuejIwMyhicixnLGgpO3ZhciBicz1ici5zdHlsZTticy5sZWZ0PXYrInB4Iixicy50b3A9eCsicHgiLHYrPUU7dmFyIGJ0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25GdWxsUGFnZSIpO1ouVXRpbHMuejEzOChidCxpLGopO3ZhciBidT1idC5zdHlsZTtidS5sZWZ0PXYrInB4IixidS50b3A9eSsicHgifXZhciBidj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZ3Jlc3NUZXh0Qm94Iik7aWYoYnYpe3ZhciBidz1idi5zdHlsZTtidyYmKHM/YncuZGlzcGxheT0ibm9uZSI6KGJ3LmRpc3BsYXk9ImlubGluZS1ibG9jayIsYncud2lkdGg9cSsicHgiLGJ3LmhlaWdodD11KyJweCIsYncubGVmdD1jLXBhcnNlRmxvYXQoTy5zdHlsZS5sZWZ0KS1wYXJzZUZsb2F0KGJ3LndpZHRoKSsicHgiLGJ3LnRvcD0oZC1wYXJzZUZsb2F0KGJ3LmhlaWdodCkpLzIrInB4IikpfX1mdW5jdGlvbiB6KGEpe1oudG9vbGJhclZpc2libGU8NCYmIVoubW9iaWxlRGV2aWNlP0EoYSk6QighYSl9ZnVuY3Rpb24gQShhKXtnJiYoYT9nLmRpc3BsYXk9ImlubGluZS1ibG9jayI6Zy5kaXNwbGF5PSJub25lIil9ZnVuY3Rpb24gQihhKXtpZihnKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uQ29udGFpbmVyIiksYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmFja2dyb3VuZCIpLGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbk1pbmltaXplIiksZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uRXhwYW5kIiksZj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nb0RpdmlkZXIiKSxoPTA7dHx8KGg9cGFyc2VGbG9hdChlLnN0eWxlLmxlZnQpK3BhcnNlRmxvYXQoZS5zdHlsZS53aWR0aCkrNCk7dmFyIGk9Wi50b29sYmFyQ3VycmVudFc7YT8oYi5zdHlsZS5kaXNwbGF5PSJub25lIix0fHwoZiYmKGYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLGQuc3R5bGUuZGlzcGxheT0ibm9uZSIsZS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSxnLndpZHRoPWgrInB4IixjLnN0eWxlLndpZHRoPWgrInB4Iik6KGIuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIix0fHwoZiYmKGYuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIiksZC5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGUuc3R5bGUuZGlzcGxheT0ibm9uZSIpLGcud2lkdGg9aSsicHgiLGMuc3R5bGUud2lkdGg9aSsicHgiKX19ZnVuY3Rpb24gQyhhKXtpZihaLnNsaWRlclZpc2libGUpe2h8fChoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0cmFja1NsaWRlciIpKSxpfHwoaT1oLnN0eWxlKSxqfHwoaj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uU2xpZGVyIikpLGt8fChrPWouc3R5bGUpO2lmKGkmJmspe3ZhciBiPVoubWF4Wi1aLm1pblosYz0oYS1aLm1pblopL2I7dHJhY2tMPXBhcnNlRmxvYXQoaS5sZWZ0KSx0cmFja1I9cGFyc2VGbG9hdChpLmxlZnQpK3BhcnNlRmxvYXQoaS53aWR0aCktcGFyc2VGbG9hdChrLndpZHRoKTt2YXIgZD10cmFja1ItdHJhY2tMLGU9YypkK3RyYWNrTDtrLmxlZnQ9ZSsicHgifX19ZnVuY3Rpb24gRChiKXtofHwoaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHJhY2tTbGlkZXIiKSksaXx8KGk9aC5zdHlsZSk7aWYoaCYmaSl7dmFyIGMsZD1aLlV0aWxzLnoxNzQoaCk7Wi5tb2JpbGVEZXZpY2U/Yz1aLlV0aWxzLnoxODEoYikueC1kLng6Yz1iLmNsaWVudFgtZC54O3ZhciBlPUgoYywwLHBhcnNlRmxvYXQoaS53aWR0aCkpO2U8Wi5taW5aKy4xJiYoZT1aLm1pblopLGU+Wi5tYXhaLS4xJiYoZT1aLm1heFopLGEuejI0NShlKSxhLnoyNzQoKX19ZnVuY3Rpb24gRShhKXtuPSEwLGp8fChqPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25TbGlkZXIiKSk7aWYoail7dmFyIGI9Wi5VdGlscy56MTgxKGEpO2oubW91c2VYUHJpb3I9Yi54LGoubW91c2VZUHJpb3I9Yi55fX1mdW5jdGlvbiBGKGIpe2h8fChoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0cmFja1NsaWRlciIpKSxpfHwoaT1oLnN0eWxlKSxqfHwoaj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uU2xpZGVyIikpLGt8fChrPWouc3R5bGUpO2lmKGkmJmomJmspe3RyYWNrTD1wYXJzZUZsb2F0KGkubGVmdCksdHJhY2tSPXBhcnNlRmxvYXQoaS5sZWZ0KStwYXJzZUZsb2F0KGkud2lkdGgpLXBhcnNlRmxvYXQoay53aWR0aCk7dmFyIGM9cGFyc2VGbG9hdChrLmxlZnQpKyhwLngtai5tb3VzZVhQcmlvcik7Yzx0cmFja0w/Yz10cmFja0w6Yz50cmFja1I/Yz10cmFja1I6ai5tb3VzZVhQcmlvcj1wLngsay5sZWZ0PWMrInB4Ijt2YXIgZD1IKGMsdHJhY2tMLHRyYWNrUik7YS56MjQ1KGQpfX1mdW5jdGlvbiBHKCl7bj0hMSxhLnoyNzQoKX1mdW5jdGlvbiBIKGEsYixjKXt2YXIgZD1jLWIsZT0oYS1iKS9kLGY9Wi5tYXhaLVoubWluWixnPVoubWluWitmKmU7cmV0dXJuIGd9ZnVuY3Rpb24gSShhKXt2YXIgYT1aLlV0aWxzLmV2ZW50KGEpLGI9Wi5VdGlscy5yZWxhdGVkVGFyZ2V0KFouVXRpbHMuZXZlbnQoYSkpO2lmKCFuJiZiKXt2YXIgYz1iLnBhcmVudE5vZGU7SyhjKX19ZnVuY3Rpb24gSihhKXtaLm1vYmlsZURldmljZSYmYS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBhPVouVXRpbHMuZXZlbnQoYSksYj1aLlV0aWxzLnRhcmdldChhKSxjPVouVXRpbHMucmVsYXRlZFRhcmdldChhKTtpZihiKXt2YXIgZD1iLnBhcmVudE5vZGU7ZCYmKHRhcmdldFBhcmVudElEPWQuaWQpfWlmKGMpe3ZhciBlPWMucGFyZW50Tm9kZTtlJiYocmVsYXRlZFRhcmdldFBhcmVudElEPWUuaWQpfWlmKCFufHxhLnR5cGU9PSJtb3VzZXVwInx8YS50eXBlPT0idG91Y2hlbmQifHxhLnR5cGU9PSJ0b3VjaGNhbmNlbCIpTigpLGImJiFaLlV0aWxzLmlzUmlnaHRNb3VzZUJ1dHRvbihhKSYmKHRhcmdldFBhcmVudElEJiZ0YXJnZXRQYXJlbnRJRCE9InRyYWNrU2xpZGVyIiYmYS50eXBlIT0ibW91c2Vtb3ZlIiYmKE8oYSksUChhKSksUShhKSl9ZnVuY3Rpb24gSyhiKXthJiZhLnoyOTNBbGxTdG9wKCksYi5pZCYmYi5pZC5pbmRleE9mKCJidXR0b24iKSE9LTE/KEwoYiksTShiKSk6Yi5pZCYmYi5pZC5pbmRleE9mKCJiYWNrZ3JvdW5kIikhPS0xJiZOKCl9ZnVuY3Rpb24gTChhKXtaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSwibW91c2Vkb3duIixKKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsSiksWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKGEsIm1vdXNlb3V0IixKKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VvdmVyIixKKX1mdW5jdGlvbiBNKGEpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2ltZ1VwSUQpLGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYS5faW1nT3ZlcklEKSxkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2ltZ0Rvd25JRCk7YiYmKGIuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLGMmJihjLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpLGQmJihkLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpfWZ1bmN0aW9uIE4oKXt2YXIgYT1aLlRvb2xiYXJEaXNwbGF5LmNoaWxkTm9kZXMsYj1udWxsO2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7Yj1hW2NdO2lmKGIuaWQmJmIuaWQuaW5kZXhPZigiYnV0dG9uIikhPS0xKWlmKGIuaWQhPSJidXR0b25Db250YWluZXIiKUwoYiksTShiKTtlbHNle3ZhciBlPWIuY2hpbGROb2RlcyxmPW51bGw7Zm9yKHZhciBnPTAsaD1lLmxlbmd0aDtnPGg7ZysrKWY9ZVtnXSxmLmlkJiZmLmlkLmluZGV4T2YoImJ1dHRvbiIpIT0tMSYmKEwoZiksTShmKSl9fX1mdW5jdGlvbiBPKGEpe3ZhciBiPVouVXRpbHMudGFyZ2V0KGEpO2lmKGIpe3ZhciBjPWIucGFyZW50Tm9kZTtjJiYoWi5tb2JpbGVEZXZpY2U/KFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihjLCJ0b3VjaHN0YXJ0IixKKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYywidG91Y2hlbmQiLEopLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihjLCJ0b3VjaGNhbmNlbCIsSikpOihaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYywibW91c2VvdmVyIixKKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYywibW91c2Vkb3duIixKKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYywibW91c2V1cCIsSiksWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKGMsIm1vdXNlb3V0IixKKSkpfX1mdW5jdGlvbiBQKGEpe3ZhciBiPVouVXRpbHMudGFyZ2V0KGEpO2lmKGIpe3ZhciBjPVouVXRpbHMudGFyZ2V0KGEpLnBhcmVudE5vZGU7aWYoYylpZighYy5faW1nVXBJRClLKGMpO2Vsc2V7dmFyIGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYy5faW1nVXBJRCksZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChjLl9pbWdPdmVySUQpLGY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYy5faW1nRG93bklEKTtpZihkJiZlJiZmKXt2YXIgZz1kLnN0eWxlLGg9ZS5zdHlsZSxpPWYuc3R5bGU7Zy52aXNpYmlsaXR5PSJoaWRkZW4iLGgudmlzaWJpbGl0eT0iaGlkZGVuIixpLnZpc2liaWxpdHk9ImhpZGRlbiI7c3dpdGNoKGEudHlwZSl7Y2FzZSJtb3VzZW92ZXIiOmgudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOmkudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJtb3VzZW1vdmUiOmkudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJtb3VzZXVwIjpoLnZpc2liaWxpdHk9InZpc2libGUiO2JyZWFrO2Nhc2UibW91c2VvdXQiOmcudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJ0b3VjaHN0YXJ0IjppLnZpc2liaWxpdHk9InZpc2libGUiO2JyZWFrO2Nhc2UidG91Y2hlbmQiOmcudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Zy52aXNpYmlsaXR5PSJ2aXNpYmxlIn19fX19ZnVuY3Rpb24gUShjKXt2YXIgZD1aLlV0aWxzLnRhcmdldChjKS5wYXJlbnROb2RlO2lmKGQpe3ZhciBlPWQuaWQ7c3dpdGNoKGMudHlwZSl7Y2FzZSJtb3VzZW92ZXIiOlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkLCJtb3VzZWRvd24iLEopO2JyZWFrO2Nhc2UibW91c2Vkb3duIjpaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZCwibW91c2V1cCIsSik7aWYoYSlzd2l0Y2goZSl7Y2FzZSJidXR0b25NaW5pbWl6ZSI6Yi56MjE1KCEwKSxaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCExKTticmVhaztjYXNlImJ1dHRvbkV4cGFuZCI6Yi56MjE1KCExKSxaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCEwKTticmVhaztjYXNlImJ1dHRvblpvb21PdXQiOmEuem9vbSgib3V0Iik7YnJlYWs7Y2FzZSJidXR0b25TbGlkZXIiOkUoYyksUihjKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNlbW92ZSIsUiksb3x8KG89d2luZG93LnNldEludGVydmFsKEYsbSkpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsSik7YnJlYWs7Y2FzZSJ0cmFja1NsaWRlciI6RChjKTticmVhaztjYXNlImJ1dHRvblpvb21JbiI6YS56b29tKCJpbiIpO2JyZWFrO2Nhc2UiYnV0dG9uUGFuTGVmdCI6YS5wYW4oImxlZnQiKTticmVhaztjYXNlImJ1dHRvblBhblVwIjphLnBhbigidXAiKTticmVhaztjYXNlImJ1dHRvblBhbkRvd24iOmEucGFuKCJkb3duIik7YnJlYWs7Y2FzZSJidXR0b25QYW5SaWdodCI6YS5wYW4oInJpZ2h0Iik7YnJlYWs7Y2FzZSJidXR0b25SZXNldCI6YS5yZXNldCgpfWJyZWFrO2Nhc2UibW91c2V1cCI6Wi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsIm1vdXNlZG93biIsSiksYSYmKGU9PSJidXR0b25TbGlkZXIifHxuPyhvJiYod2luZG93LmNsZWFySW50ZXJ2YWwobyksbz1udWxsKSxHKCksWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLFIpLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsSiksTigpKTplPT0iYnV0dG9uWm9vbU91dCJ8fGU9PSJidXR0b25ab29tSW4iP2Euem9vbSgic3RvcCIpOmU9PSJidXR0b25QYW5MZWZ0Inx8ZT09ImJ1dHRvblBhblJpZ2h0Ij9hLnBhbigiaG9yaXpvbnRhbFN0b3AiKTplPT0iYnV0dG9uUGFuVXAifHxlPT0iYnV0dG9uUGFuRG93biI/YS5wYW4oInZlcnRpY2FsU3RvcCIpOmU9PSJidXR0b25GdWxsUGFnZSImJmEudG9nZ2xlRnVsbFBhZ2VWaWV3KCkpO2JyZWFrO2Nhc2UibW91c2VvdXQiOlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkLCJtb3VzZW92ZXIiLEopLGEmJihlPT0iYnV0dG9uWm9vbU91dCJ8fGU9PSJidXR0b25ab29tSW4iP2Euem9vbSgic3RvcCIpOmU9PSJidXR0b25QYW5MZWZ0Inx8ZT09ImJ1dHRvblBhblJpZ2h0Ij9hLnBhbigiaG9yaXpvbnRhbFN0b3AiKTooZT09ImJ1dHRvblBhblVwInx8ZT09ImJ1dHRvblBhbkRvd24iKSYmYS5wYW4oInZlcnRpY2FsU3RvcCIpKTticmVhaztjYXNlInRvdWNoc3RhcnQiOlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkLCJ0b3VjaGVuZCIsSiksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsInRvdWNoY2FuY2VsIixKKTtpZihhKXN3aXRjaChlKXtjYXNlImJ1dHRvbk1pbmltaXplIjpiLnoyMTUoITApLFouTmF2aWdhdG9yLnNldFZpc2liaWxpdHkoITEpO2JyZWFrO2Nhc2UiYnV0dG9uRXhwYW5kIjpiLnoyMTUoITEpLFouTmF2aWdhdG9yLnNldFZpc2liaWxpdHkoITApO2JyZWFrO2Nhc2UiYnV0dG9uWm9vbU91dCI6YS56b29tKCJvdXQiKTticmVhaztjYXNlImJ1dHRvblNsaWRlciI6RShjKSxTKGMpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwidG91Y2htb3ZlIixTKSxvfHwobz13aW5kb3cuc2V0SW50ZXJ2YWwoRixtKSksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsInRvdWNoZW5kIixKKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZCwidG91Y2hjYW5jZWwiLEopO2JyZWFrO2Nhc2UidHJhY2tTbGlkZXIiOkQoYyk7YnJlYWs7Y2FzZSJidXR0b25ab29tSW4iOmEuem9vbSgiaW4iKTticmVhaztjYXNlImJ1dHRvblBhbkxlZnQiOmEucGFuKCJsZWZ0Iik7YnJlYWs7Y2FzZSJidXR0b25QYW5VcCI6YS5wYW4oInVwIik7YnJlYWs7Y2FzZSJidXR0b25QYW5Eb3duIjphLnBhbigiZG93biIpO2JyZWFrO2Nhc2UiYnV0dG9uUGFuUmlnaHQiOmEucGFuKCJyaWdodCIpO2JyZWFrO2Nhc2UiYnV0dG9uUmVzZXQiOmEucmVzZXQoKX1icmVhaztjYXNlInRvdWNoZW5kIjpaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZCwidG91Y2hzdGFydCIsSiksYSYmKGU9PSJidXR0b25ab29tT3V0Inx8ZT09ImJ1dHRvblpvb21JbiI/KGEuem9vbSgic3RvcCIpLFouZGVidWcmJmU9PSJidXR0b25ab29tT3V0IiYmYy5hbHRLZXkmJlouVXRpbHMuejI1MygpKTplPT0iYnV0dG9uU2xpZGVyIj8obyYmKHdpbmRvdy5jbGVhckludGVydmFsKG8pLG89bnVsbCksRygpLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwidG91Y2htb3ZlIixTKSk6ZT09ImJ1dHRvblBhbkxlZnQifHxlPT0iYnV0dG9uUGFuUmlnaHQiP2EucGFuKCJob3Jpem9udGFsU3RvcCIpOmU9PSJidXR0b25QYW5VcCJ8fGU9PSJidXR0b25QYW5Eb3duIj9hLnBhbigidmVydGljYWxTdG9wIik6ZT09ImJ1dHRvbkZ1bGxQYWdlIiYmYS50b2dnbGVGdWxsUGFnZVZpZXcoKSk7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Wi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsInRvdWNoc3RhcnQiLEopLGEmJihlPT0iYnV0dG9uWm9vbU91dCJ8fGU9PSJidXR0b25ab29tSW4iPyhhLnpvb20oInN0b3AiKSxaLmRlYnVnJiZlPT0iYnV0dG9uWm9vbU91dCImJmMuYWx0S2V5JiZaLlV0aWxzLnoyNTMoKSk6ZT09ImJ1dHRvblNsaWRlciI/KG8mJih3aW5kb3cuY2xlYXJJbnRlcnZhbChvKSxvPW51bGwpLEcoKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsInRvdWNobW92ZSIsUykpOmU9PSJidXR0b25QYW5MZWZ0Inx8ZT09ImJ1dHRvblBhblJpZ2h0Ij9hLnBhbigiaG9yaXpvbnRhbFN0b3AiKTplPT0iYnV0dG9uUGFuVXAifHxlPT0iYnV0dG9uUGFuRG93biI/YS5wYW4oInZlcnRpY2FsU3RvcCIpOmU9PSJidXR0b25GdWxsUGFnZSImJmEudG9nZ2xlRnVsbFBhZ2VWaWV3KCkpfX19ZnVuY3Rpb24gUihhKXtwPW5ldyBaLlV0aWxzLlBvaW50KGEuY2xpZW50WCxhLmNsaWVudFkpfWZ1bmN0aW9uIFMoYSl7dmFyIGI9Wi5VdGlscy56MTc4KGEpO2lmKGIpe3ZhciBjPWIudGFyZ2V0O3A9bmV3IFouVXRpbHMuUG9pbnQoYi5wYWdlWCxiLnBhZ2VZKX19dmFyIGI9dGhpcyxjPSExLGQ9bmV3IFouejEwMTtaLnNraW5QYXRoPVouVXRpbHMuejI0MyhaLnNraW5QYXRoKTt2YXIgZT1aLnNraW5QYXRoKyIvIjtkLmxvYWRYTUwoWi5za2luUGF0aCsiLyIrWi5VdGlscy56MTg1KCJ6NTUiKSk7dmFyIGYsZyxoLGksaixrLGw9W10sbT1wYXJzZUludChaLlV0aWxzLnoxODUoIno1NyIpLDEwKSxuPSExLG89bnVsbCxwPW51bGwscT1udWxsLHIscyx0O3RoaXMuejIwNT1mdW5jdGlvbihhLGIpe1ouVG9vbGJhckRpc3BsYXk9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJUb29sYmFyRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwiaGlkZGVuIiwiMXB4IiwiMXB4IiwiMHB4IiwiMXB4Iiwibm9uZSIsIjBweCIsInRyYW5zcGFyZW50IG5vbmUiLCIwcHgiLCIwcHgiLCJkZWZhdWx0IiksZz1aLlRvb2xiYXJEaXNwbGF5LnN0eWxlO3ZhciBjPW5ldyBaLlV0aWxzLkdyYXBoaWMoImJhY2tncm91bmQiLGUsYlswXSwiMXB4IiwiMXB4IiwiMHB4IiwiMHB4Iik7Wi5Ub29sYmFyRGlzcGxheS5hcHBlbmRDaGlsZChjLmVsbXQpLHRvb2xiYXJTa2luU2l6ZXM9YTtpZihaLmxvZ29WaXNpYmxlKXt2YXIgZDtpZighWi5VdGlscy5pc1N0clZhbChaLmxvZ29DdXN0b21QYXRoKSlkPW5ldyBaLlV0aWxzLkdyYXBoaWMoInRvb2xiYXJMb2dvIixlLGJbMV0sIjFweCIsIjFweCIsIjFweCIsIjFweCIpO2Vsc2V7dmFyIGg9Wi5VdGlscy56MTQwKFoubG9nb0N1c3RvbVBhdGgpO2Q9bmV3IFouVXRpbHMuR3JhcGhpYygidG9vbGJhckxvZ28iLGgsbnVsbCwiMXB4IiwiMXB4IiwiMXB4IiwiMXB4Iil9Wi5Ub29sYmFyRGlzcGxheS5hcHBlbmRDaGlsZChkLmVsbXQpO2lmKFoudG9vbGJhclZpc2libGU9PTB8fFoudG9vbGJhclZpc2libGU9PTEpe3ZhciBpPW5ldyBaLlV0aWxzLkdyYXBoaWMoImxvZ29EaXZpZGVyIixlLGJbMl0sIjFweCIsIjFweCIsIjFweCIsIjFweCIpO1ouVG9vbGJhckRpc3BsYXkuYXBwZW5kQ2hpbGQoaS5lbG10KX19dmFyIGo9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJidXR0b25Db250YWluZXIiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsInZpc2libGUiLCIxcHgiLCIxcHgiLCIwcHgiLCIwcHgiLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIsImRlZmF1bHQiKTtaLlRvb2xiYXJEaXNwbGF5LmFwcGVuZENoaWxkKGopLFoubW9iaWxlRGV2aWNlP1ouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihqLCJ0b3VjaHN0YXJ0IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KTooWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGosIm1vdXNlZG93biIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGosIm1vdXNlb3ZlciIsSSkpO3ZhciBrPW5ldyBaLlV0aWxzLkdyYXBoaWMoImJ1dHRvbkJhY2tncm91bmQiLGUsYlswXSwiMXB4IiwiMXB4IiwiMHB4IiwiMHB4Iik7ai5hcHBlbmRDaGlsZChrLmVsbXQpO2lmKFoudG9vbGJhclZpc2libGUhPTAmJloudG9vbGJhclZpc2libGUhPTF8fFoubW9iaWxlRGV2aWNlKXt2YXIgbD1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvbk1pbmltaXplIixudWxsLGUsYlszXSxiWzRdLGJbNV0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejEwNyIpO1ouVG9vbGJhckRpc3BsYXkuYXBwZW5kQ2hpbGQobC5lbG10KTt2YXIgbT1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvbkV4cGFuZCIsbnVsbCxlLGJbNl0sYls3XSxiWzhdLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMDUiKTtaLlRvb2xiYXJEaXNwbGF5LmFwcGVuZENoaWxkKG0uZWxtdCl9dmFyIG49bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25ab29tT3V0IixudWxsLGUsYls5XSxiWzEwXSxiWzExXSwiMXB4IiwiMXB4IiwiMXB4IiwiMXB4IiwibW91c2VvdmVyIixKLCJ6MTIwIik7ai5hcHBlbmRDaGlsZChuLmVsbXQpO2lmKFouc2xpZGVyVmlzaWJsZSl7dmFyIG89bmV3IFouVXRpbHMuR3JhcGhpYygidHJhY2tTbGlkZXIiLGUsYlsxMl0sIjFweCIsIjFweCIsIjBweCIsIjBweCIpO2ouYXBwZW5kQ2hpbGQoby5lbG10KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoby5lbG10LCJtb3VzZWRvd24iLEopLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihvLmVsbXQsInRvdWNoc3RhcnQiLEopO3ZhciBwPW5ldyBaLlV0aWxzLkJ1dHRvbigiYnV0dG9uU2xpZGVyIixudWxsLGUsYlsxNF0sYlsxNV0sYlsxNl0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejExNCIpO2ouYXBwZW5kQ2hpbGQocC5lbG10KX12YXIgcT1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvblpvb21JbiIsbnVsbCxlLGJbMTddLGJbMThdLGJbMTldLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMTkiKTtqLmFwcGVuZENoaWxkKHEuZWxtdCk7dmFyIHI9bmV3IFouVXRpbHMuR3JhcGhpYygicGFuRGl2aWRlciIsZSxiWzIwXSwiMXB4IiwiMXB4IiwiMXB4IiwiMXB4Iik7ai5hcHBlbmRDaGlsZChyLmVsbXQpO3ZhciBzPW5ldyBaLlV0aWxzLkJ1dHRvbigiYnV0dG9uUGFuTGVmdCIsbnVsbCxlLGJbMjFdLGJbMjJdLGJbMjNdLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMDkiKTtqLmFwcGVuZENoaWxkKHMuZWxtdCk7dmFyIHQ9bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25QYW5VcCIsbnVsbCxlLGJbMjRdLGJbMjVdLGJbMjZdLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMTEiKTtqLmFwcGVuZENoaWxkKHQuZWxtdCk7dmFyIHU9bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25QYW5Eb3duIixudWxsLGUsYlsyN10sYlsyOF0sYlsyOV0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejEwOCIpO2ouYXBwZW5kQ2hpbGQodS5lbG10KTt2YXIgdj1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvblBhblJpZ2h0IixudWxsLGUsYlszMF0sYlszMV0sYlszMl0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejExMCIpO2ouYXBwZW5kQ2hpbGQodi5lbG10KTt2YXIgeT1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvblJlc2V0IixudWxsLGUsYlszM10sYlszNF0sYlszNV0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejExMiIpO2ouYXBwZW5kQ2hpbGQoeS5lbG10KTtpZihaLmZ1bGxQYWdlVmlzaWJsZSl7dmFyIEE9bmV3IFouVXRpbHMuR3JhcGhpYygiZnVsbFBhZ2VEaXZpZGVyIixlLGJbMzZdLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiKTtqLmFwcGVuZENoaWxkKEEuZWxtdCk7dmFyIEI9bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25GdWxsUGFnZSIsbnVsbCxlLGJbMzddLGJbMzhdLGJbMzldLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMTgiKTtqLmFwcGVuZENoaWxkKEIuZWxtdCl9aWYoWi5wcm9ncmVzc1Zpc2libGUpe3ZhciBEPVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2IiwicHJvZ3Jlc3NUZXh0Qm94IiwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpLEU9dG9vbGJhclNraW5TaXplc1sxNl0rInB4IjtqLmFwcGVuZENoaWxkKEQpO3ZhciBGPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFouVXRpbHMuejE4NSgiejUyIikpO0QuYXBwZW5kQ2hpbGQoWi5VdGlscy5jcmVhdGVDZW50ZXJlZEVsZW1lbnQoRikpLFouVXRpbHMuejI1MShGLCJibGFjayIsInZlcmRhbmEiLEUsIm5vbmUiLCJub3JtYWwiLCJub3JtYWwiLCJub3JtYWwiLCJub3JtYWwiLCIxZW0iLCJsZWZ0Iiwibm9uZSIpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihELCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5kaXNhYmxlVGV4dEludGVyYWN0aW9uKEYpfVouVmlld2VyRGlzcGxheS5hcHBlbmRDaGlsZChaLlRvb2xiYXJEaXNwbGF5KSxaLnRvb2xiYXJXPXRvb2xiYXJTa2luU2l6ZXNbMF0sWi50b29sYmFyQ3VycmVudFc9Wi50b29sYmFyVz09LTE/Wi52aWV3ZXJXOloudG9vbGJhclcsWi50b29sYmFySD1mPXRvb2xiYXJTa2luU2l6ZXNbMV07dmFyIEc9Wi50b29sYmFyUG9zaXRpb249PTE/Wi52aWV3ZXJILWY6MDt4KFoudG9vbGJhckN1cnJlbnRXLFoudG9vbGJhckgsMCxHKTtpZihaLlZpZXdwb3J0JiZaLlZpZXdwb3J0LnoxODAoKSl7dmFyIEg9Wi5WaWV3cG9ydC56MTg5QXNab29tKCk7QyhIKX16KFoudG9vbGJhclZpc2libGU9PTF8fFoudG9vbGJhclZpc2libGU9PTJ8fFoudG9vbGJhclZpc2libGU9PTQpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihaLlRvb2xiYXJEaXNwbGF5LCJtb3VzZW92ZXIiLFouVXRpbHMuc3RvcFByb3BhZ2F0aW9uKSx3KCEwKX0sdGhpcy56MTgwPWZ1bmN0aW9uKCl7cmV0dXJuIHYoKX0sdGhpcy5zZXRTaXplQW5kUG9zaXRpb249ZnVuY3Rpb24oYSxiLGMsZCl7eChhLGIsYyxkKX0sdGhpcy5zaG93PWZ1bmN0aW9uKGEpe3ooYSl9LHRoaXMuc2V0VmlzaWJpbGl0eT1mdW5jdGlvbihhKXtBKGEpfSx0aGlzLnoyMTU9ZnVuY3Rpb24oYSl7QihhKX0sdGhpcy5zaG93UHJvZ3Jlc3M9ZnVuY3Rpb24oYSxiKXtpZihaLnByb2dyZXNzVmlzaWJsZSl7cSYmd2luZG93LmNsZWFySW50ZXJ2YWwocSk7dmFyIGMsZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZ3Jlc3NUZXh0Qm94IikuZmlyc3RDaGlsZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDtkJiYoYT09MHx8Yj09MD8oZC5ub2RlVmFsdWU9ImxsbGxsbGxsbGwiLHE9d2luZG93LnNldEludGVydmFsKHUscGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NTEiKSksMTApKTooYz1NYXRoLnJvdW5kKDEwMC1iL2EqMTAwKSxkLm5vZGVWYWx1ZT0ibCIubXVsdGlwbHkoTWF0aC5yb3VuZChjLzEwKSkpKX19LHRoaXMuejI2Nj1mdW5jdGlvbihhKXtDKGEpfX0sWi56MTIzPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIHgoYSl7Wi5OYXZpZ2F0b3JEaXNwbGF5PVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2IiwiTmF2aWdhdG9yRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwiaGlkZGVuIixlKyJweCIsZisicHgiLGcrInB4IixoKyJweCIsInNvbGlkIiwiMXB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpLG89Wi5OYXZpZ2F0b3JEaXNwbGF5LHA9by5zdHlsZTt2YXIgYj1aLlV0aWxzLnoxODUoInozNiIpLGM9Wi5VdGlscy56MTg1KCJ6MzZOT0FMUEhBIiksZD1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImRpdiIsIm5hdmlnYXRvckJhY2tncm91bmQiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsImhpZGRlbiIsZSsicHgiLGYrInB4IiwiMHB4IiwiMHB4Iiwibm9uZSIsIjBweCIsYiwiMHB4IiwiMHB4Iik7Wi5VdGlscy5zZXRPcGFjaXR5KGQsbCxjKSxaLk5hdmlnYXRvckRpc3BsYXkuYXBwZW5kQ2hpbGQoZCkscT1kLHI9cS5zdHlsZTt2YXIgaj1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImRpdiIsIm5hdmlnYXRvckltYWdlQ29udGFpbmVyIiwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLGUrInB4IixmKyJweCIsIjBweCIsIjBweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4Iik7ai5hcHBlbmRDaGlsZChuKSxaLk5hdmlnYXRvckRpc3BsYXkuYXBwZW5kQ2hpbGQoaikscz1qLHQ9cy5zdHlsZSx1PW47dmFyIGs9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJuYXZpZ2F0b3JSZWN0YW5nbGUiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsImhpZGRlbiIsZSsxKyJweCIsZisxKyJweCIsZysicHgiLGgrInB4Iiwic29saWQiLCIxcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4Iik7ay5zdHlsZS5ib3JkZXJDb2xvcj1aLlV0aWxzLnoxODUoIno0MSIpLFouTmF2aWdhdG9yRGlzcGxheS5hcHBlbmRDaGlsZChrKSx2PWssdz12LnN0eWxlLFouVmlld2VyRGlzcGxheS5hcHBlbmRDaGlsZChaLk5hdmlnYXRvckRpc3BsYXkpLEMoZSxmLGcsaCxpKSxIKFoubmF2aWdhdG9yVmlzaWJsZT09MXx8Wi5uYXZpZ2F0b3JWaXNpYmxlPT0yKSxGKCksWi5tb2JpbGVEZXZpY2U/KFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihvLCJ0b3VjaHN0YXJ0IixQKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywidG91Y2htb3ZlIixRKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywidG91Y2hlbmQiLFIpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihvLCJ0b3VjaGNhbmNlbCIsUykpOihaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIodSwibW91c2Vkb3duIixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywibW91c2Vkb3duIixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywibW91c2VvdmVyIixaLlV0aWxzLnN0b3BQcm9wYWdhdGlvbiksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKG8sIm1vdXNlZG93biIsTSkpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihuLCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsImNvbnRleHRtZW51IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaywiY29udGV4dG1lbnUiLFouVXRpbHMucHJldmVudERlZmF1bHQpLEIoITApLEcoKX1mdW5jdGlvbiB5KGEpe0MoZSxmLGcsaCxpKSxIKFoubmF2aWdhdG9yVmlzaWJsZT09MXx8Wi5uYXZpZ2F0b3JWaXNpYmxlPT0yKSxGKCl9ZnVuY3Rpb24geigpe2lmKEEoKSl7ZCYmKHdpbmRvdy5jbGVhckludGVydmFsKGQpLGQ9bnVsbCk7aWYoIW98fCFwfHwhcXx8IXJ8fCFzfHwhdHx8IXV8fCF2fHwhdylvPVouTmF2aWdhdG9yRGlzcGxheSxwPW8uc3R5bGUscT1aLk5hdmlnYXRvckRpc3BsYXkuY2hpbGROb2Rlc1swXSxyPXEuc3R5bGUscz1aLk5hdmlnYXRvckRpc3BsYXkuY2hpbGROb2Rlc1sxXSx0PXMuc3R5bGUsdT1aLk5hdmlnYXRvckRpc3BsYXkuY2hpbGROb2Rlc1sxXS5maXJzdENoaWxkLHY9Wi5OYXZpZ2F0b3JEaXNwbGF5LmNoaWxkTm9kZXNbMl0sdz12LnN0eWxlfX1mdW5jdGlvbiBBKCl7cmV0dXJuIGN9ZnVuY3Rpb24gQihhKXtjPWF9ZnVuY3Rpb24gQyhhLGIsYyxkLGUpe2F8fChhPVoubmF2aWdhdG9yVyksYnx8KGI9Wi5uYXZpZ2F0b3JIKSxjfHwoYz0wKSxkfHwoZD0wKSxvfHwobz1aLk5hdmlnYXRvckRpc3BsYXkpLHB8fChwPW8uc3R5bGUpLHU9by5jaGlsZE5vZGVzWzFdLmZpcnN0Q2hpbGQ7aWYobyYmcCYmdSl7aWYoZSl7dmFyIGY9MSxnPTE7ZT09MD9nPVoudmlld2VyVy9aLnZpZXdlckg6Zz11LndpZHRoL3UuaGVpZ2h0LGY+MT8oYj1hLGIvPWcpOihhPWIsYSo9Zyl9cC53aWR0aD1hKyJweCIscC5oZWlnaHQ9YisicHgiLHAubGVmdD1jLTErInB4IixwLnRvcD1kLTErInB4IixEKGEsYil9fWZ1bmN0aW9uIEQoYSxiKXtyfHwocj1aLk5hdmlnYXRvckRpc3BsYXkuZmlyc3RDaGlsZC5zdHlsZSksdHx8KHQ9Wi5OYXZpZ2F0b3JEaXNwbGF5LmNoaWxkTm9kZXNbMV0uc3R5bGUpLHV8fCh1PVouTmF2aWdhdG9yRGlzcGxheS5jaGlsZE5vZGVzWzFdLmZpcnN0Q2hpbGQpLHImJnQmJnUmJihyLndpZHRoPWErInB4IixyLmhlaWdodD1iKyJweCIsRShhLGIsdS53aWR0aCx1LmhlaWdodCksdC53aWR0aD11LndpZHRoKyJweCIsdC5oZWlnaHQ9dS5oZWlnaHQrInB4Iix0LmxlZnQ9KGEtcGFyc2VGbG9hdCh0LndpZHRoKSkvMisicHgiLHQudG9wPShiLXBhcnNlRmxvYXQodC5oZWlnaHQpKS8yKyJweCIsRygpKX1mdW5jdGlvbiBFKGEsYixjLGQpe3V8fCh1PVouTmF2aWdhdG9yRGlzcGxheS5jaGlsZE5vZGVzWzFdLmZpcnN0Q2hpbGQpO2lmKHUpe3ZhciBlPWMvZCxmPWEvYyxnPWIvZCxoPTAsaT0wO2Y8PWc/KGM9YSxkPWEvZSxpPShiLWQqKGEvYykpLzIpOmc8ZiYmKGQ9YixjPWIqZSxoPShhLWMqKGIvZCkpLzIpLHUud2lkdGg9Yyx1LmhlaWdodD1kfX1mdW5jdGlvbiBGKCl7cHx8KHA9Wi5OYXZpZ2F0b3JEaXNwbGF5LnN0eWxlKSxwJiYocC56SW5kZXg9cC56SW5kZXgrMTAwKX1mdW5jdGlvbiBHKCl7aWYoWi5WaWV3cG9ydCYmWi5WaWV3cG9ydC56MTgwKCkpe0koKTt2YXIgYT1aLlZpZXdwb3J0LnoxNDEoKTtKKGEpfX1mdW5jdGlvbiBIKGEpe3B8fChwPVouTmF2aWdhdG9yRGlzcGxheS5zdHlsZSkscCYmKGE/cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnAuZGlzcGxheT0ibm9uZSIpfWZ1bmN0aW9uIEkoKXtpZih1JiZ3KXt2YXIgYT11LndpZHRoL1ouaW1hZ2VXLGI9dS5oZWlnaHQvWi5pbWFnZUgsYz1aLlZpZXdwb3J0LnoxODlBc1pvb20oKSxkPVoudmlld2VyVyphL2MsZT1aLnZpZXdlckgqYi9jO3cud2lkdGg9ZCsicHgiLHcuaGVpZ2h0PWUrInB4In19ZnVuY3Rpb24gSihhKXtpZih1JiZ3JiZ0KXt2YXIgYj11LndpZHRoL1ouaW1hZ2VXLGM9dS5oZWlnaHQvWi5pbWFnZUgsZD1hLngqYixlPWEueSpjLGY9ZC1wYXJzZUZsb2F0KHcud2lkdGgpLzIsZz1lLXBhcnNlRmxvYXQody5oZWlnaHQpLzI7dy5sZWZ0PWYrcGFyc2VGbG9hdCh0LmxlZnQpKyJweCIsdy50b3A9ZytwYXJzZUZsb2F0KHQudG9wKSsicHgifX1mdW5jdGlvbiBLKCl7aWYodyYmdCYmdSl7dmFyIGE9cGFyc2VGbG9hdCh3LmxlZnQpLXBhcnNlRmxvYXQodC5sZWZ0KSxiPXBhcnNlRmxvYXQody50b3ApLXBhcnNlRmxvYXQodC50b3ApLGM9YSsocGFyc2VGbG9hdCh3LndpZHRoKS0xKS8yLGQ9YisocGFyc2VGbG9hdCh3LmhlaWdodCktMSkvMixlPVouaW1hZ2VXL3Uud2lkdGgsZj1aLmltYWdlSC91LmhlaWdodCxnPWMqZSxoPWQqZjtaLlZpZXdwb3J0LnoyNjcoZyxoKX19ZnVuY3Rpb24gTCgpe1ouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno4OCIpKX1mdW5jdGlvbiBNKGEpe2lmKG8mJnYmJncpe3ZhciBhPVouVXRpbHMuZXZlbnQoYSk7di5tb3VzZVhQcmlvcj1hLmNsaWVudFgsdi5tb3VzZVlQcmlvcj1hLmNsaWVudFksemFwdHZEcmFnUHRTdGFydD1uZXcgWi5VdGlscy5Qb2ludChhLmNsaWVudFgsYS5jbGllbnRZKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywibW91c2Vtb3ZlIixOKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywibW91c2V1cCIsTyksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZXVwIixPKX19ZnVuY3Rpb24gTihhKXtpZih2JiZ3KXt2YXIgYj1wYXJzZUZsb2F0KHcubGVmdCksYz1wYXJzZUZsb2F0KHcudG9wKTtyZXR1cm4gdy5sZWZ0PWIrKGEuY2xpZW50WC12Lm1vdXNlWFByaW9yKSsicHgiLHcudG9wPWMrKGEuY2xpZW50WS12Lm1vdXNlWVByaW9yKSsicHgiLHYubW91c2VYUHJpb3I9YS5jbGllbnRYLHYubW91c2VZUHJpb3I9YS5jbGllbnRZLEsoKSwhMX19ZnVuY3Rpb24gTyhhKXtpZihvJiZ2JiZ3KXtkb2N1bWVudC5tb3VzZW1vdmU9bnVsbCxkb2N1bWVudC5tb3VzZXVwPW51bGwsWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKG8sIm1vdXNlbW92ZSIsTiksWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKG8sIm1vdXNldXAiLE8pLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsTyk7dmFyIGE9Wi5VdGlscy5ldmVudChhKSxiPW5ldyBaLlV0aWxzLlBvaW50KGEuY2xpZW50WCxhLmNsaWVudFkpLGM9TWF0aC5zcXJ0KE1hdGgucG93KHphcHR2RHJhZ1B0U3RhcnQueC1iLngsMikrTWF0aC5wb3coemFwdHZEcmFnUHRTdGFydC55LWIueSwyKSk7aWYoYzw0KXt2YXIgZD1aLlV0aWxzLnoxNzQoWi5OYXZpZ2F0b3JEaXNwbGF5KTt3LmxlZnQ9YS5jbGllbnRYLWQueC1wYXJzZUZsb2F0KHcud2lkdGgpLzIrInB4Iix3LnRvcD1hLmNsaWVudFktZC55LXBhcnNlRmxvYXQody5oZWlnaHQpLzIrInB4In1LKCksWi5WaWV3cG9ydC56Mjc0KCl9fWZ1bmN0aW9uIFAoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO2lmKG8mJnYmJncpe3ZhciBiPVouVXRpbHMuejE3OChhKTtpZihiKXt2YXIgYz1iLnRhcmdldCxkPW5ldyBaLlV0aWxzLlBvaW50KGIucGFnZVgsYi5wYWdlWSk7emFwdHZEcmFnUHRTdGFydD1uZXcgWi5VdGlscy5Qb2ludChkLngsZC55KSx2Lm1vdXNlWFByaW9yPWQueCx2Lm1vdXNlWVByaW9yPWQueSx6YXB0dkRyYWdQdFN0YXJ0PW5ldyBaLlV0aWxzLlBvaW50KGQueCxkLnkpfX19ZnVuY3Rpb24gUShhKXthLnByZXZlbnREZWZhdWx0KCk7aWYoIVoubW91c2VQYW4pcmV0dXJuO2lmKHYmJncpe3ZhciBiPVouVXRpbHMuejE3OChhKTtpZihiKXt2YXIgYz1iLnRhcmdldCxkPW5ldyBaLlV0aWxzLlBvaW50KGIucGFnZVgsYi5wYWdlWSksZT1wYXJzZUZsb2F0KHcubGVmdCksZj1wYXJzZUZsb2F0KHcudG9wKTtyZXR1cm4gdy5sZWZ0PWUrKGQueC12Lm1vdXNlWFByaW9yKSsicHgiLHcudG9wPWYrKGQueS12Lm1vdXNlWVByaW9yKSsicHgiLHYubW91c2VYUHJpb3I9ZC54LHYubW91c2VZUHJpb3I9ZC55LEsoKSwhMX19cmV0dXJuITF9ZnVuY3Rpb24gUihhKXtpZihvJiZ2JiZ3KXt2YXIgYj1aLlV0aWxzLnoxNzgoYSk7aWYoYil7dmFyIGM9Yi50YXJnZXQsZD1uZXcgWi5VdGlscy5Qb2ludChiLnBhZ2VYLGIucGFnZVkpLGU9bmV3IFouVXRpbHMuUG9pbnQoZC54LGQueSksZj1NYXRoLnNxcnQoTWF0aC5wb3coemFwdHZEcmFnUHRTdGFydC54LWUueCwyKStNYXRoLnBvdyh6YXB0dkRyYWdQdFN0YXJ0LnktZS55LDIpKSxnPVoubW9iaWxlRGV2aWNlPzY6MztpZihmPGcpe3ZhciBoPVouVXRpbHMuejE3NChaLk5hdmlnYXRvckRpc3BsYXkpO3cubGVmdD1kLngtaC54LXBhcnNlRmxvYXQody53aWR0aCkvMisicHgiLHcudG9wPWQueS1oLnktcGFyc2VGbG9hdCh3LmhlaWdodCkvMisicHgifX1LKCksWi5WaWV3cG9ydC56Mjc0KCl9fWZ1bmN0aW9uIFMoYSl7aWYobyYmdiYmdyl7dmFyIGI9Wi5VdGlscy56MTc4KGEpO2lmKGIpe3ZhciBjPWIudGFyZ2V0LGQ9bmV3IFouVXRpbHMuUG9pbnQoYi5wYWdlWCxiLnBhZ2VZKSxlPW5ldyBaLlV0aWxzLlBvaW50KGQueCxkLnkpLGY9TWF0aC5zcXJ0KE1hdGgucG93KHphcHR2RHJhZ1B0U3RhcnQueC1lLngsMikrTWF0aC5wb3coemFwdHZEcmFnUHRTdGFydC55LWUueSwyKSksZz1aLm1vYmlsZURldmljZT82OjM7aWYoZjxnKXt2YXIgaD1aLlV0aWxzLnoxNzQoWi5OYXZpZ2F0b3JEaXNwbGF5KTt3LmxlZnQ9ZC54LWgueC1wYXJzZUZsb2F0KHcud2lkdGgpLzIrInB4Iix3LnRvcD1kLnktaC55LXBhcnNlRmxvYXQody5oZWlnaHQpLzIrInB4In19SygpLFouVmlld3BvcnQuejI3NCgpfX12YXIgYj10aGlzLGM9ITEsZCxlPVoubmF2aWdhdG9yVyxmPVoubmF2aWdhdG9ySCxnPVoubmF2aWdhdG9yTC0xLGg9Wi5uYXZpZ2F0b3JULTEsaT1aLm5hdmlnYXRvckZpdCxqLGs9bnVsbCxsPXBhcnNlRmxvYXQoWi5VdGlscy56MTg1KCJ6MzUiKSksbT1aLlV0aWxzLnoxNDAoWi5pbWFnZVBhdGgrIi9UaWxlR3JvdXAwLyIrIjAtMC0wLmpwZyIpLG49bmV3IEltYWdlO24ub25sb2FkPXgsbi5vbmVycm9yPUwsbi5zcmM9bTt2YXIgbyxwLHEscixzLHQsdSx2LHc7dGhpcy5zZXRJbWFnZVBhdGg9ZnVuY3Rpb24oYSl7bT1aLlV0aWxzLnoxNDAoWi5pbWFnZVBhdGgrIi9UaWxlR3JvdXAwLyIrIjAtMC0wLmpwZyIpLHMucmVtb3ZlQ2hpbGQobiksbj1udWxsLG49bmV3IEltYWdlLHMuYXBwZW5kQ2hpbGQobiksbi5vbmxvYWQ9eSxuLm9uZXJyb3I9TCxuLnNyYz1tfSx0aGlzLnoxODA9ZnVuY3Rpb24oKXtyZXR1cm4gQSgpfSx0aGlzLnNldFNpemVBbmRQb3NpdGlvbj1mdW5jdGlvbihhLGIsYyxkLGUpe2V8fChlPWkpLEMoYSxiLGMsZCxlKX0sdGhpcy5zZXRWaXNpYmlsaXR5PWZ1bmN0aW9uKGEpe0goYSl9LHRoaXMuejI2OD1mdW5jdGlvbigpe0coKX0sdGhpcy56MjYzUmVjdGFuZ2xlRGltZW5zaW9ucz1mdW5jdGlvbigpe0koKX0sdGhpcy56MjYzUmVjdGFuZ2xlUG9zaXRpb249ZnVuY3Rpb24oYSl7SihhKX0sdGhpcy56Mjc3PWZ1bmN0aW9uKCl7QSgpP3ooKTpkPXdpbmRvdy5zZXRJbnRlcnZhbCh6LDMwMCl9fSxaLnoxMDE9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhhLGIpe3ZhciBjPW51bGwsZD10eXBlb2YgYj09ImZ1bmN0aW9uIjtpZihkKXZhciBlPWIsYj1mdW5jdGlvbigpe3dpbmRvdy5zZXRUaW1lb3V0KFouVXRpbHMuY3JlYXRlQ2FsbGJhY2sobnVsbCxlLGMpLDEpfTtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7dmFyIGY9WyJNc3htbDIuWE1MSFRUUCIsIk1zeG1sMy5YTUxIVFRQIiwiTWljcm9zb2Z0LlhNTEhUVFAiXTtmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKyl0cnl7Yz1uZXcgQWN0aXZlWE9iamVjdChmW2ddKTticmVha31jYXRjaChoKXtjb250aW51ZX19ZWxzZSB3aW5kb3cuWE1MSHR0cFJlcXVlc3QmJihjPW5ldyBYTUxIdHRwUmVxdWVzdCk7Y3x8Wi5VdGlscy56MjU1KFouVXRpbHMuejE4NSgiejk5IikpLGQmJihjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT09NCYmKGMub25yZWFkeXN0YXRlY2hhbmdlPW5ldyBGdW5jdGlvbixiKCkpfSk7dHJ5e2Mub3BlbigiR0VUIixhLGQpLGMuc2VuZChudWxsKX1jYXRjaChoKXthLmluZGV4T2YoIkltYWdlUHJvcGVydGllcy54bWwiKSE9LTE/Wi5VdGlscy56MjU1KFouVXRpbHMuejE4NSgiejg3LUlNQUdFWE1MIikpOmEuaW5kZXhPZigic2tpbkZpbGVzLnhtbCIpIT0tMT9aLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6ODctVE9PTEJBUlhNTCIpKTpaLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6ODciKSksYy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxjPW51bGx9cmV0dXJuIGQ/bnVsbDpjfWZ1bmN0aW9uIGQoYSl7aWYoYSl7aWYoIWEpWi5VdGlscy56MjU1KFouVXRpbHMuejE4NSgiejg5IikpO2Vsc2UgaWYoYS5zdGF0dXMhPT0yMDAmJmEuc3RhdHVzIT09MCl7dmFyIGI9YS5zdGF0dXMsYz1iPT00MDQ/Ik5vdCBGb3VuZCI6YS5zdGF0dXNUZXh0O1ouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno5MCIpK2IrIiAtICIrYyl9dmFyIGQ9bnVsbDthLnJlc3BvbnNlWE1MJiZhLnJlc3BvbnNlWE1MLmRvY3VtZW50RWxlbWVudD9kPWEucmVzcG9uc2VYTUw6YS5yZXNwb25zZVRleHQmJihkPVouVXRpbHMuejE1OChhLnJlc3BvbnNlVGV4dCkpLGUoZCl9ZWxzZSBaLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6ODQiKSl9ZnVuY3Rpb24gZShhKXtpZihhJiZhLmRvY3VtZW50RWxlbWVudCl7dmFyIGI9YS5kb2N1bWVudEVsZW1lbnQudGFnTmFtZTtiPT0iQ09QWVJJR0hUIj9mKCJjb3B5cmlnaHQiLGEpOmI9PSJJTUFHRV9QUk9QRVJUSUVTIj9mKCJpbWFnZSIsYSk6Yj09IlNLSU5EQVRBIj9mKCJza2luIixhKTpaLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6MTAwIikpfWVsc2UgWi5VdGlscy56MjU1KFouVXRpbHMuejE4NSgiejEwMCIpKX1mdW5jdGlvbiBmKGEsYil7aWYoYT09ImNvcHlyaWdodCIpe3ZhciBjPWIuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiU1RBVEVNRU5UVEVYVCIpLGQ9Yi5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJERUNMSU5FRFRFWFQiKTtaLlV0aWxzLmlzU3RyVmFsKGMpP1ouVXRpbHMuejI1MighMCxjLGQpOlouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno4NiIpKX1lbHNlIGlmKGE9PSJpbWFnZSIpe3ZhciBlPXBhcnNlSW50KGIuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiV0lEVEgiKSwxMCksZj1wYXJzZUludChiLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoIkhFSUdIVCIpLDEwKTshaXNOYU4oZSkmJmU+MCYmIWlzTmFOKGYpJiZmPjA/Wi5WaWV3cG9ydCYmKFouVmlld3BvcnQuejE4MCgpP1ouVmlld3BvcnQucmV6MjA2KGUsZik6Wi5WaWV3cG9ydC56MjA2KGUsZikpOlouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno4NiIpKX1lbHNlIGlmKGE9PSJza2luIil7Wi5za2luTW9kZT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJTRVRVUCIpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJTS0lOTU9ERSIpLm5vZGVWYWx1ZTt2YXIgZyxoO1ouc2tpbk1vZGU9PTF8fFouc2tpbk1vZGU9PTAmJiFaLm1vYmlsZURldmljZT8oZz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJTRVRVUCIpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJGT0xERVJTVEFOREFSRCIpLm5vZGVWYWx1ZSxoPSJTSVpFU1NUQU5EQVJEIik6KGc9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU0VUVVAiKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiRk9MREVSTEFSR0UiKS5ub2RlVmFsdWUsaD0iU0laRVNMQVJHRSIpO3ZhciBpPVtdO2kucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlRPT0xCQVJXIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiVE9PTEJBUkgiKS5ub2RlVmFsdWUpKSxpLnB1c2gocGFyc2VGbG9hdChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGgpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJMT0dPVyIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIkxPR09IIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiRElWSURFUlciKS5ub2RlVmFsdWUpKSxpLnB1c2gocGFyc2VGbG9hdChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGgpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJESVZJREVSSCIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIkJVVFRPTlciKS5ub2RlVmFsdWUpKSxpLnB1c2gocGFyc2VGbG9hdChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGgpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJCVVRUT05IIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiQlVUVE9OU1BBTiIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlNMSURFUkJVVFRPTlciKS5ub2RlVmFsdWUpKSxpLnB1c2gocGFyc2VGbG9hdChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGgpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJTTElERVJCVVRUT05IIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiU0xJREVSVFJBQ0tXIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiU0xJREVSVFJBQ0tIIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiU0xJREVSU1BBTiIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlBST0dSRVNTVyIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlBST0dSRVNTSCIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlBST0dSRVNTRk9OVFNJWkUiKS5ub2RlVmFsdWUpKTt2YXIgaj1bXSxrPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkZJTEVTIilbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlNLSU4wIikubm9kZVZhbHVlLGw9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRklMRVMiKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiU0tJTjM5Iikubm9kZVZhbHVlO2lmKFouVXRpbHMuaXNTdHJWYWwoaykmJlouVXRpbHMuaXNTdHJWYWwobCkpe3ZhciBtPSExO2Zvcih2YXIgbj0wO248NDA7bisrKXt2YXIgbz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJGSUxFUyIpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJTS0lOIituKS5ub2RlVmFsdWU7Wi5VdGlscy5pc1N0clZhbChvKT9qW25dPWcrIi8iK286KGpbbl09Im51bGwiLG09ITApfW0mJlouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIkVSUk9SX1NLSU5TWE1MTUlTU0lOR05BTUVTIikpLFouVG9vbGJhciYmWi5Ub29sYmFyLnoyMDUoaSxqKX1lbHNlIFouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno5MSIpKX19ZnVuY3Rpb24gZyhhLGMsZCl7Yi0tO2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXRyeXthKGQpfWNhdGNoKGUpe1ouVXRpbHMuejI1NShlLm5hbWUrWi5VdGlscy56MTg1KCJ6ODMiKStjKyIgIitlLm1lc3NhZ2UpfX1mdW5jdGlvbiBoKGEsYil7ZnVuY3Rpb24gZShlKXtjLm9ubG9hZD1udWxsLGMub25hYm9ydD1udWxsLGMub25lcnJvcj1udWxsLGQmJndpbmRvdy5jbGVhclRpbWVvdXQoZCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtiKGEsZT9jOm51bGwpfSwxKX12YXIgYz1udWxsLGQ9bnVsbDt0aGlzLnN0YXJ0PWZ1bmN0aW9uKCl7Yz1uZXcgSW1hZ2U7dmFyIGI9ZnVuY3Rpb24oKXtlKCEwKX0sZj1mdW5jdGlvbigpe2UoITEpfSxnPWZ1bmN0aW9uKCl7ZSghMSl9O2Mub25sb2FkPWIsYy5vbmFib3J0PWYsYy5vbmVycm9yPWYsZD13aW5kb3cuc2V0VGltZW91dChnLHBhcnNlRmxvYXQoWi5VdGlscy56MTg1KCJ6NjAiKSkpLGMuc3JjPWF9fXZhciBiPTA7dGhpcy5sb2FkWE1MPWZ1bmN0aW9uKGEpe2MoYSxkKX0sdGhpcy56MjEySW1hZ2U9ZnVuY3Rpb24oYSxjKXtpZihiPj1wYXJzZUludChaLlV0aWxzLnoxODUoInoyNSIpLDEwKSlyZXR1cm4hMTt2YXIgZD1aLlV0aWxzLmNyZWF0ZUNhbGxiYWNrKG51bGwsZyxjKSxlPW5ldyBoKGEsZCk7cmV0dXJuIGIrKyxlLnN0YXJ0KCksITB9fSxaLlV0aWxzPXt6MTYzOmZ1bmN0aW9uKCl7Wi5wYWdlQ29udGFpbmVySUQ9bnVsbCxaLmltYWdlUGF0aD1udWxsLFouc2tpblBhdGg9bnVsbCxaLnNraW5Nb2RlPW51bGwsWi5wYXJhbWV0ZXJzPW51bGwsWi5icm93c2Vycz1udWxsLFouYnJvd3Nlcj1udWxsLFouYnJvd3NlclZlcnNpb249bnVsbCxaLmNhbnZhc1N1cHBvcnRlZD1udWxsLFouY3NzVHJhbnNmb3Jtc1N1cHBvcnRlZD1udWxsLFouY3NzVHJhbnNmb3JtUHJvcGVydHk9bnVsbCxaLmNzc1RyYW5zZm9ybU5vVW5pdHM9bnVsbCxaLmFscGhhU3VwcG9ydGVkPW51bGwsWi5yZW5kZXJRdWFsaXR5PW51bGwsWi5tb2JpbGVEZXZpY2U9bnVsbCxaLmluaXRpYWxYPW51bGwsWi5pbml0aWFsWT1udWxsLFouaW5pdGlhbFo9bnVsbCxaLm1pblo9bnVsbCxaLm1heFo9bnVsbCxaLnpvb21TcGVlZD1udWxsLFoucGFuU3BlZWQ9bnVsbCxaLmZhZGVJblNwZWVkPW51bGwsWi50b29sYmFyVmlzaWJsZT1udWxsLFoudG9vbGJhclc9bnVsbCxaLnRvb2xiYXJIPW51bGwsWi50b29sYmFyUG9zaXRpb249bnVsbCxaLm5hdmlnYXRvclZpc2libGU9bnVsbCxaLm5hdmlnYXRvclc9bnVsbCxaLm5hdmlnYXRvckg9bnVsbCxaLm5hdmlnYXRvckw9bnVsbCxaLm5hdmlnYXRvclQ9bnVsbCxaLm5hdmlnYXRvckZpdD1udWxsLFouY2xpY2tab29tPW51bGwsWi5jbGlja1Bhbj1udWxsLFoubW91c2VQYW49bnVsbCxaLmtleXM9bnVsbCxaLmNvbnN0cmFpblBhbj1udWxsLFoudG9vbHRpcHNWaXNpYmxlPW51bGwsWi5jb3B5cmlnaHRQYXRoPW51bGwsWi53YXRlcm1hcmtQYXRoPW51bGwsWi5zbGlkZXJWaXNpYmxlPW51bGwsWi5mdWxsUGFnZVZpc2libGU9bnVsbCxaLnByb2dyZXNzVmlzaWJsZT1udWxsLFoubG9nb1Zpc2libGU9bnVsbCxaLmxvZ29DdXN0b21QYXRoPW51bGwsWi5jYW52YXM9bnVsbCxaLmRlYnVnPW51bGwsWi5WaWV3ZXI9bnVsbCxaLlZpZXdlckRpc3BsYXk9bnVsbCxaLlZpZXdwb3J0PW51bGwsWi5Ub29sYmFyPW51bGwsWi5Ub29sYmFyRGlzcGxheT1udWxsLFouVG9vbHRpcERpc3BsYXk9bnVsbCxaLk5hdmlnYXRvcj1udWxsLFouTmF2aWdhdG9yRGlzcGxheT1udWxsLFouQ29weXJpZ2h0RGlzcGxheT1udWxsLFouaW1hZ2VXPW51bGwsWi5pbWFnZUg9bnVsbCxaLmltYWdlWD0wLFouaW1hZ2VZPTAsWi5pbWFnZVo9MCxaLmZpdFo9bnVsbCxaLnpvb21pbmc9InN0b3AiLFoucGFubmluZ1g9InN0b3AiLFoucGFubmluZ1k9InN0b3AiLFouZnVsbFBhZ2U9ITEsWi51c2VDYW52YXM9ITAsWi5UcmFjZURpc3BsYXk9bnVsbCxaLnRyYWNlcz1udWxsfSxlbmZvcmNlQ29weXJpZ2h0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy56MjM4KCJpbWFnZUNvcHlyaWdodCIpO2E/Wi5WaWV3ZXIuejE0OSgpOnRoaXMuejIxMCgpfSx6MjEwOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IFouejEwMTthLmxvYWRYTUwoWi5jb3B5cmlnaHRQYXRoKX0sejI1MjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy56MTg1KCJ6MTYiKSxlPXRoaXMuejE4NSgiejE0Iik7aWYoYSl7Wi5Db3B5cmlnaHREaXNwbGF5PXRoaXMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2IiwiQ29weXJpZ2h0RGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwiaGlkZGVuIixaLnZpZXdlclctMisicHgiLFoudmlld2VySC0yKyJweCIsIjBweCIsIjBweCIsInNvbGlkIiwiMXB4IixkLCIwcHgiLCIwcHgiKSxaLlZpZXdlckRpc3BsYXkuYXBwZW5kQ2hpbGQoWi5Db3B5cmlnaHREaXNwbGF5KTt2YXIgZj00NDAsZz0yMDAsaD1wYXJzZUZsb2F0KFouQ29weXJpZ2h0RGlzcGxheS5zdHlsZS53aWR0aCkvMi1mLzIsaT1wYXJzZUZsb2F0KFouQ29weXJpZ2h0RGlzcGxheS5zdHlsZS5oZWlnaHQpLzItZy8yLGo9dGhpcy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJ0ZXh0Qm94IiwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLGYrInB4IixnKyJweCIsaCsicHgiLGkrInB4Iiwibm9uZSIsIjBweCIsInRyYW5zcGFyZW50IG5vbmUiLCIwcHgiLCIwcHgiKTtqLmlkPSJ0ZXh0Qm94IixaLkNvcHlyaWdodERpc3BsYXkuYXBwZW5kQ2hpbGQoaik7dmFyIGs9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYik7ai5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNlbnRlcmVkRWxlbWVudChrKSksdGhpcy56MjUxKGssImJsYWNrIiwidmVyZGFuYSIsIjE2cHgiLCJub25lIiwibm9ybWFsIiwibm9ybWFsIiwibm9ybWFsIiwibm9ybWFsIiwiMWVtIiwianVzdGlmeSIsIm5vbmUiKTt2YXIgbD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjKTtqLmFwcGVuZENoaWxkKGwpO3ZhciBtPTgwLG49MjAsbz0zMCxwPTIwLHE9aCtmLzItKG0qMitvKS8yLHI9aStnK3Ascz10aGlzLnoxODUoInoxMyIpLHQ9bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25BZ3JlZSIscyxudWxsLG51bGwsbnVsbCxudWxsLG0rInB4IixuKyJweCIscSsicHgiLHIrInB4IiwibW91c2Vkb3duIix0aGlzLnoxNjAsInoxMDMiLCJzb2xpZCIsIjFweCIsZSwiMHB4IiwiMHB4Iik7Wi5Db3B5cmlnaHREaXNwbGF5LmFwcGVuZENoaWxkKHQuZWxtdCkscSs9bStvLHM9dGhpcy56MTg1KCJ6MTUiKTt2YXIgdT1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvbkV4aXQiLHMsbnVsbCxudWxsLG51bGwsbnVsbCxtKyJweCIsbisicHgiLHErInB4IixyKyJweCIsIm1vdXNlZG93biIsdGhpcy56MTYxLCJ6MTA0Iiwic29saWQiLCIxcHgiLGUsIjBweCIsIjBweCIpO1ouQ29weXJpZ2h0RGlzcGxheS5hcHBlbmRDaGlsZCh1LmVsbXQpfWVsc2V7dmFyIGo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRCb3giKSx2PWouY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudDtqLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQudGV4dENvbnRlbnQ9djt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uQWdyZWUiKTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwibW91c2Vkb3duIix0aGlzLnoxNjApLFouQ29weXJpZ2h0RGlzcGxheS5yZW1vdmVDaGlsZCh0KTt2YXIgdT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uRXhpdCIpO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih1LCJtb3VzZWRvd24iLHRoaXMuejE2MSksWi5Db3B5cmlnaHREaXNwbGF5LnJlbW92ZUNoaWxkKHUpfX0sQnV0dG9uOmZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMpe3ZhciB0PVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgic3BhbiIsYSwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLGcsaCxpLGosbixvLHAscSxyLHMpO2lmKCFaLlV0aWxzLmlzU3RyVmFsKGIpKXt2YXIgdT1aLlV0aWxzLmNyZWF0ZUdyYXBoaWNFbGVtZW50KGMrIi8iK2QpLHY9Wi5VdGlscy5jcmVhdGVHcmFwaGljRWxlbWVudChjKyIvIitlKSx3PVouVXRpbHMuY3JlYXRlR3JhcGhpY0VsZW1lbnQoYysiLyIrZik7dS5pZD10LmlkKyItaW1nVXAiLHYuaWQ9dC5pZCsiLWltZ092ZXIiLHcuaWQ9dC5pZCsiLWltZ0Rvd24iLHQuX2ltZ1VwSUQ9dS5pZCx0Ll9pbWdPdmVySUQ9di5pZCx0Ll9pbWdEb3duSUQ9dy5pZDt2YXIgeD11LnN0eWxlLHk9di5zdHlsZSx6PXcuc3R5bGU7eC5wb3NpdGlvbj15LnBvc2l0aW9uPXoucG9zaXRpb249ImFic29sdXRlIix4LndpZHRoPXkud2lkdGg9eS53aWR0aD1nLHguaGVpZ2h0PXkuaGVpZ2h0PXkuaGVpZ2h0PWgseC50b3A9eS50b3A9ei50b3A9IjBweCIseC5sZWZ0PXkubGVmdD16LmxlZnQ9IjBweCIsWi5icm93c2VyPT1aLmJyb3dzZXJzLkZJUkVGT1gmJlouYnJvd3NlclZlcnNpb248MyYmKHgudG9wPXkudG9wPXoudG9wPSIiKSx5LnZpc2liaWxpdHk9ImhpZGRlbiIsei52aXNpYmlsaXR5PSJoaWRkZW4iLHQuYXBwZW5kQ2hpbGQodSksdC5hcHBlbmRDaGlsZCh2KSx0LmFwcGVuZENoaWxkKHcpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih1LCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHYsImNvbnRleHRtZW51IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIodywiY29udGV4dG1lbnUiLFouVXRpbHMucHJldmVudERlZmF1bHQpfWVsc2V7dmFyIEE9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYik7dC5hcHBlbmRDaGlsZChaLlV0aWxzLmNyZWF0ZUNlbnRlcmVkRWxlbWVudChBKSksWi5VdGlscy56MjUxKEEsImJsYWNrIiwidmVyZGFuYSIsIjEzcHgiLCJub25lIiwibm9ybWFsIiwibm9ybWFsIiwibm9ybWFsIiwibm9ybWFsIiwiMWVtIiwiY2VudGVyIiwibm9uZSIpLFouVXRpbHMuZGlzYWJsZVRleHRJbnRlcmFjdGlvbihBKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIodCwiY29udGV4dG1lbnUiLFouVXRpbHMucHJldmVudERlZmF1bHQpfVoudG9vbHRpcHNWaXNpYmxlJiZaLlV0aWxzLmlzU3RyVmFsKG0pJiYodC50aXRsZT1aLlV0aWxzLnoxODUobSkpLFoubW9iaWxlRGV2aWNlP1ouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih0LCJ0b3VjaHN0YXJ0IixsKTooWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHQsIm1vdXNlZG93biIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHQsIm1vdXNlb3ZlciIsWi5VdGlscy5zdG9wUHJvcGFnYXRpb24pLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZW91dCIsWi5VdGlscy5zdG9wUHJvcGFnYXRpb24pLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih0LGssbCkpLHRoaXMuZWxtdD10fSx6MTM4OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLnN0eWxlO2Qud2lkdGg9YisicHgiLGQuaGVpZ2h0PWMrInB4Ijt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhLl9pbWdVcElEKSxmPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2ltZ092ZXJJRCksZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhLl9pbWdEb3duSUQpO2lmKGUmJmYmJmcpe3ZhciBoPWUuc3R5bGUsaT1mLnN0eWxlLGo9Zy5zdHlsZTtoLndpZHRoPWIrInB4IixoLmhlaWdodD1jKyJweCIsaS53aWR0aD1iKyJweCIsaS5oZWlnaHQ9YysicHgiLGoud2lkdGg9YisicHgiLGouaGVpZ2h0PWMrInB4In19LEdyYXBoaWM6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9Yz9iKyIvIitjOmIsaT1aLlV0aWxzLmNyZWF0ZUdyYXBoaWNFbGVtZW50KGgpLGo9aS5zdHlsZTtqLndpZHRoPWQsai5oZWlnaHQ9ZTt2YXIgYz1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoInNwYW4iLGEsImlubGluZS1ibG9jayIsImFic29sdXRlIiwiaGlkZGVuIixkLGUsZixnLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpO2MuYXBwZW5kQ2hpbGQoaSksdGhpcy5lbG10PWMsWi5tb2JpbGVEZXZpY2U/Wi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGksInRvdWNoc3RhcnQiLFouVXRpbHMucHJldmVudERlZmF1bHQpOlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihpLCJtb3VzZWRvd24iLFouVXRpbHMucHJldmVudERlZmF1bHQpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihpLCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCl9LHoyMDM6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuc3R5bGU7ZC53aWR0aD1iKyJweCIsZC5oZWlnaHQ9YysicHgiO3ZhciBlPWEuZmlyc3RDaGlsZCxmPWUuc3R5bGU7Zi53aWR0aD1iKyJweCIsZi5oZWlnaHQ9YysicHgifSx6MTYwOmZ1bmN0aW9uKGEpe1ouVmlld2VyRGlzcGxheS5yZW1vdmVDaGlsZChaLkNvcHlyaWdodERpc3BsYXkpLGRvY3VtZW50LmNvb2tpZT0iaW1hZ2VDb3B5cmlnaHQ9Y29uZmlybWVkIixaLlZpZXdlci56MTQ5KCl9LHoxNjE6ZnVuY3Rpb24oYSl7Wi5VdGlscy56MjUyKCExKTtyZXR1cm59LHoxMjg6ZnVuY3Rpb24oKXtTdHJpbmcucHJvdG90eXBlLm11bHRpcGx5fHwoU3RyaW5nLnByb3RvdHlwZS5tdWx0aXBseT1mdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5qb2luLGI9e307cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBiLmxlbmd0aD1jKzEsYS5jYWxsKGIsdGhpcyl9fSgpKSxBcnJheS5wcm90b3R5cGUuaW5kZXhPZnx8KEFycmF5LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGEsYil7Yj9iPDAmJihiPU1hdGgubWF4KDAsdGhpcy5sZW5ndGgrYikpOmI9MDtmb3IodmFyIGM9YixkPXRoaXMubGVuZ3RoO2M8ZDtjKyspaWYodGhpc1tjXT09PWEpcmV0dXJuIGM7cmV0dXJuLTF9KSxBcnJheS5wcm90b3R5cGUucHVzaHx8KEFycmF5LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGEpe3RoaXNbdGhpcy5sZW5ndGhdPWF9KSxBcnJheS5wcm90b3R5cGUuc3BsaWNlfHwoQXJyYXkucHJvdG90eXBlLnN1YmFycj1mdW5jdGlvbihhLGIpe2lmKGE+PXRoaXMubGVuZ3RofHxiJiZiPD0wKXJldHVybltdO2E8MCYmKE1hdGguYWJzKGEpPnRoaXMubGVuZ3RoP2E9MDphPXRoaXMubGVuZ3RoK2EpO2lmKCFifHxiK2E+dGhpcy5sZW5ndGgpYj10aGlzLmxlbmd0aC1hO3ZhciBjPVtdO2Zvcih2YXIgZD1hO2Q8YStiO2QrKyljLnB1c2godGhpc1tkXSk7cmV0dXJuIGN9LEFycmF5LnByb3RvdHlwZS5zdWJhcnJheT1mdW5jdGlvbihhLGIpe2E8MCYmKGE9MCk7aWYoIWJ8fGI+dGhpcy5sZW5ndGgpYj10aGlzLmxlbmd0aDtpZihhPT1iKXJldHVybltdO3ZhciBjPVtdO2Zvcih2YXIgZD1hO2Q8YjtkKyspYy5wdXNoKHRoaXNbZF0pO3JldHVybiBjfSxBcnJheS5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKGEsYil7YjwwJiYoYj0wKTt2YXIgYz1bXTtpZihhcmd1bWVudHMubGVuZ3RoPjIpZm9yKHZhciBkPTIsZT1hcmd1bWVudHMubGVuZ3RoO2Q8ZTtkKyspYy5wdXNoKGFyZ3VtZW50c1tkXSk7dmFyIGY9dGhpcy5zdWJhcnJheSgwLGEpLGc9dGhpcy5zdWJhcnIoYSxiKSxoPXRoaXMuc3ViYXJyYXkoYStiKSxpPWYuY29uY2F0KGMsaCk7dGhpcy5sZW5ndGg9MDtmb3IodmFyIGQ9MCxlPWkubGVuZ3RoO2Q8ZTtkKyspdGhpcy5wdXNoKGlbZF0pO3JldHVybiBnfSl9LHoxMjc6ZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyPyh0aGlzLmRpc2FibGVUZXh0SW50ZXJhY3Rpb249ZnVuY3Rpb24oYSl7YSYmKHRuUz1hLnBhcmVudE5vZGUuc3R5bGUsdG5TJiYoYS5wYXJlbnROb2RlLnVuc2VsZWN0YWJsZT0ib24iLHRuUy51c2VyU2VsZWN0PSJub25lIix0blMuTW96VXNlclNlbGVjdD0ibm9uZSIsdG5TLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLHRuUy53ZWJraXRUb3VjaENhbGxvdXQ9Im5vbmUiLHRuUy53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj0idHJhbnNwYXJlbnQiKSl9LHRoaXMucmVuZGVyUXVhbGl0eT1mdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPWI9PSJoaWdoIj8ib3B0aW1pemVRdWFsaXR5Ijoib3B0aW1pemVTcGVlZCI7YS5zdHlsZS5zZXRQcm9wZXJ0eSgiaW1hZ2UtcmVuZGVyaW5nIixjLG51bGwpfX0sdGhpcy5zZXRPcGFjaXR5PWZ1bmN0aW9uKGEsYixjKXtaLmFscGhhU3VwcG9ydGVkP2Euc3R5bGUub3BhY2l0eT1iOmMmJihhLnN0eWxlLmJhY2tncm91bmRDb2xvcj1jKX0pOmRvY3VtZW50LmF0dGFjaEV2ZW50JiYodGhpcy5kaXNhYmxlVGV4dEludGVyYWN0aW9uPWZ1bmN0aW9uKGEpe2EmJihhLnBhcmVudE5vZGUudW5zZWxlY3RhYmxlPSJvbiIsYS5wYXJlbnROb2RlLm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0pfSx0aGlzLnJlbmRlclF1YWxpdHk9ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1iPT0iaGlnaCI/ImJpY3ViaWMiOiJuZWFyZXN0LW5laWdoYm9yIjthLnN0eWxlLm1zSW50ZXJwb2xhdGlvbk1vZGU9Y319LHRoaXMuc2V0T3BhY2l0eT1mdW5jdGlvbihhLGIsYyl7Wi5hbHBoYVN1cHBvcnRlZD8oYS5zdHlsZS5maWx0ZXI9InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PScgKyB2YWx1ZSArICcpIixhLnN0eWxlLmZpbHRlcj0iYWxwaGEob3BhY2l0eT0iK2IrIikiKTpjJiYoYS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9Yyl9KX0sejEyNjpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI/KHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7Yj09Im1vdXNld2hlZWwiJiZlbG10LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIixjLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoYixjLCExKX0sdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXtiPT0ibW91c2V3aGVlbCImJmVsbXQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLGMsITEpLGEmJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfSx0aGlzLmV2ZW50PWZ1bmN0aW9uKGEpe3JldHVybiBhfSx0aGlzLnRhcmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYS50YXJnZXR9LHRoaXMucmVsYXRlZFRhcmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZWxhdGVkVGFyZ2V0fSx0aGlzLmlzUmlnaHRNb3VzZUJ1dHRvbj1mdW5jdGlvbihhKXt2YXIgYj0hMTtpZihhLndoaWNoPT0yfHxhLndoaWNoPT0zKWI9ITA7cmV0dXJuIGJ9LHRoaXMucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSk6ZG9jdW1lbnQuYXR0YWNoRXZlbnQmJih0aGlzLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKHRoaXMuX2ZpbmRMaXN0ZW5lcihhLGIsYykhPS0xKXJldHVybjt2YXIgZD1mdW5jdGlvbigpe3ZhciBiPXdpbmRvdy5ldmVudDtGdW5jdGlvbi5wcm90b3R5cGUuY2FsbD9jLmNhbGwoYSxiKTooYS5fY3VycmVudExpc3RlbmVyPWMsYS5fY3VycmVudExpc3RlbmVyKGIpLGEuX2N1cnJlbnRMaXN0ZW5lcj1udWxsKX07YS5hdHRhY2hFdmVudCgib24iK2IsZCk7dmFyIGU9e3RhcmdldDphLGV2ZW50TmFtZTpiLGhhbmRsZXI6YyxoYW5kbGVyMjpkfSxmPWEuZG9jdW1lbnR8fGEsZz1mLnBhcmVudFdpbmRvdyxoPSJsIit0aGlzLl9saXN0ZW5lckNvdW50ZXIrKztnLl9hbGxMaXN0ZW5lcnN8fChnLl9hbGxMaXN0ZW5lcnM9e30pLGcuX2FsbExpc3RlbmVyc1toXT1lLGEuX2xpc3RlbmVyc3x8KGEuX2xpc3RlbmVycz1bXSksYS5fbGlzdGVuZXJzW2EuX2xpc3RlbmVycy5sZW5ndGhdPWgsZy5fdW5sb2FkTGlzdGVuZXJBZGRlZHx8KGcuX3VubG9hZExpc3RlbmVyQWRkZWQ9ITAsZy5hdHRhY2hFdmVudCgib251bmxvYWQiLHRoaXMuX3JlbW92ZUFsbExpc3RlbmVycykpfSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKGEpe3ZhciBkPXRoaXMuX2ZpbmRMaXN0ZW5lcihhLGIsYyk7aWYoZD09LTEpcmV0dXJuO3ZhciBlPWEuZG9jdW1lbnR8fGEsZj1lLnBhcmVudFdpbmRvdyxnPWEuX2xpc3RlbmVyc1tkXSxoPWYuX2FsbExpc3RlbmVyc1tnXTthLmRldGFjaEV2ZW50KCJvbiIrYixoLmhhbmRsZXIyKSxhLl9saXN0ZW5lcnMuc3BsaWNlKGQsMSksZGVsZXRlIGYuX2FsbExpc3RlbmVyc1tnXX19LHRoaXMuZXZlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHdpbmRvdy5ldmVudH0sdGhpcy50YXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3JjRWxlbWVudH0sdGhpcy5yZWxhdGVkVGFyZ2V0PWZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7cmV0dXJuIGEudHlwZT09Im1vdXNlb3ZlciI/Yj1hLmZyb21FbGVtZW50OmEudHlwZT09Im1vdXNlb3V0IiYmKGI9YS50b0VsZW1lbnQpLGJ9LHRoaXMuaXNSaWdodE1vdXNlQnV0dG9uPWZ1bmN0aW9uKGEpe3ZhciBiPSExO3JldHVybiBhLmJ1dHRvbj09MiYmKGI9ITApLGJ9LHRoaXMucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oYSl7YSYmKGEucmV0dXJuVmFsdWU9ITEpfSx0aGlzLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbihhKXthLmNhbmNlbEJ1YmJsZT0hMH0sdGhpcy5fZmluZExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLl9saXN0ZW5lcnM7aWYoIWQpcmV0dXJuLTE7dmFyIGU9YS5kb2N1bWVudHx8YSxmPWUucGFyZW50V2luZG93O2Zvcih2YXIgZz1kLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgaD1kW2ddLGk9Zi5fYWxsTGlzdGVuZXJzW2hdO2lmKGkuZXZlbnROYW1lPT1iJiZpLmhhbmRsZXI9PWMpcmV0dXJuIGd9cmV0dXJuLTF9LHRoaXMuX3JlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBhPXRoaXM7Zm9yKGlkIGluIGEuX2FsbExpc3RlbmVycyl7dmFyIGI9YS5fYWxsTGlzdGVuZXJzW2lkXTtiLnRhcmdldC5kZXRhY2hFdmVudCgib24iK2IuZXZlbnROYW1lLGIuaGFuZGxlcjIpLGRlbGV0ZSBhLl9hbGxMaXN0ZW5lcnNbaWRdfX0sdGhpcy5fbGlzdGVuZXJDb3VudGVyPTApfSx6MTY0OmZ1bmN0aW9uKCl7Wi5icm93c2Vycz17VU5LTk9XTjowLElFOjEsRklSRUZPWDoyLFNBRkFSSTozLENIUk9NRTo0LE9QRVJBOjV9O3ZhciBhPVouYnJvd3NlcnMuVU5LTk9XTixiPTAsYz1uYXZpZ2F0b3IuYXBwTmFtZSxkPW5hdmlnYXRvci5hcHBWZXJzaW9uLGU9ITEsZj0hMSxnPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtpZihjIT0iTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyInx8IXdpbmRvdy5hdHRhY2hFdmVudHx8IXdpbmRvdy5BY3RpdmVYT2JqZWN0KWlmKGMhPSJOZXRzY2FwZSJ8fCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciljPT0iT3BlcmEiJiYhIXdpbmRvdy5vcGVyYSYmISF3aW5kb3cuYXR0YWNoRXZlbnQmJihhPVouYnJvd3NlcnMuT1BFUkEsYj1wYXJzZUZsb2F0KGQpKTtlbHNle3ZhciBpPWcuaW5kZXhPZigiZmlyZWZveCIpLGo9Zy5pbmRleE9mKCJzYWZhcmkiKSxrPWcuaW5kZXhPZigiY2hyb21lIik7aWYoaT49MClhPVouYnJvd3NlcnMuRklSRUZPWCxiPXBhcnNlRmxvYXQoZy5zdWJzdHJpbmcoaSs4KSk7ZWxzZSBpZihqPj0wKXt2YXIgbD1nLnN1YnN0cmluZygwLGopLmxhc3RJbmRleE9mKCIvIik7YT1rPj0wP1ouYnJvd3NlcnMuQ0hST01FOlouYnJvd3NlcnMuU0FGQVJJLGI9cGFyc2VGbG9hdChnLnN1YnN0cmluZyhsKzEsaikpfXZhciBtPW5ldyBJbWFnZTttLnN0eWxlLmdldFByb3BlcnR5VmFsdWUmJihmPW0uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiaW1hZ2UtcmVuZGVyaW5nIikpfWVsc2V7dmFyIGg9Zy5pbmRleE9mKCJtc2llIik7YT1aLmJyb3dzZXJzLklFLGI9cGFyc2VGbG9hdChnLnN1YnN0cmluZyhoKzUsZy5pbmRleE9mKCI7IixoKSkpLGU9dHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZSE9InVuZGVmaW5lZCJ9dmFyIG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx7fSxvPW4uc3R5bGV8fHt9LHA9ITEscT1bInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSIsIk1velRyYW5zZm9ybSJdLHIsczt3aGlsZShyPXEuc2hpZnQoKSlpZih0eXBlb2Ygb1tyXSE9InVuZGVmaW5lZCIpe3A9ITAscz0vd2Via2l0L2kudGVzdChyKTticmVha312YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0JiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpLHU9IShhPT1aLmJyb3dzZXJzLlNBRkFSSSYmYjw0fHxhPT1aLmJyb3dzZXJzLkNIUk9NRSYmYjwyKSx2PXQmJnUsdz0hKGE9PVouYnJvd3NlcnMuSUV8fGE9PVouYnJvd3NlcnMuQ0hST01FJiZiPDIpLHg9ZXx8Zj8iaGlnaCI6bnVsbCx5PWcuaW5kZXhPZigiYW5kcm9pZCIpPi0xfHxnLmluZGV4T2YoImlwaG9uZSIpPi0xfHxnLmluZGV4T2YoImlwYWQiKT4tMXx8Zy5pbmRleE9mKCJpcG9kIik+LTE7Wi5icm93c2VyPWEsWi5icm93c2VyVmVyc2lvbj1iLFouY2FudmFzU3VwcG9ydGVkPXYsWi51c2VDYW52YXM9Wi5jYW52YXNTdXBwb3J0ZWQsWi5jc3NUcmFuc2Zvcm1zU3VwcG9ydGVkPXAsWi5jc3NUcmFuc2Zvcm1Qcm9wZXJ0eT1yLFouY3NzVHJhbnNmb3JtTm9Vbml0cz1zLFouYWxwaGFTdXBwb3J0ZWQ9dyxaLnJlbmRlclF1YWxpdHk9eCxaLm1vYmlsZURldmljZT15fSxpc1N0clZhbDpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbCYmYSE9IiJ9LHoxNzQ6ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPTAsZD10aGlzLnoxNzYoYSkucG9zaXRpb249PSJmaXhlZCIsZT10aGlzLnoxODMoYSxkKTt3aGlsZShlKXtiKz1hLm9mZnNldExlZnQsYys9YS5vZmZzZXRUb3A7aWYoZCl7dmFyIGY9dGhpcy56MTg0KCk7Yis9Zi54LGMrPWYueX1hPWUsZD10aGlzLnoxNzYoYSkucG9zaXRpb249PSJmaXhlZCIsZT10aGlzLnoxODMoYSxkKX1yZXR1cm4gbmV3IHRoaXMuUG9pbnQoYixjKX0sejE4MzpmdW5jdGlvbihhLGIpe3JldHVybiBiJiZhIT1kb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHk6YS5vZmZzZXRQYXJlbnR9LHoxNzU6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyB0aGlzLlBvaW50KGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpfSx6MTc2OmZ1bmN0aW9uKGEpe2lmKGEuY3VycmVudFN0eWxlKXJldHVybiBhLmN1cnJlbnRTdHlsZTtpZih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSlyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoYSwiIik7dGhpcy56MjU1KHRoaXMuejE4NSgiejkzIikpfSx6MTc3OmZ1bmN0aW9uKGEpe3JldHVybiB6MTc0KFouVXRpbHMudGFyZ2V0KGEpKX0sejE3ODpmdW5jdGlvbihhKXt2YXIgYj1udWxsLGM9YS50b3VjaGVzLGQ9YS5jaGFuZ2VkVG91Y2hlcztyZXR1cm4gYyE9PXVuZGVmaW5lZD9iPWNbMF06ZCE9PXVuZGVmaW5lZCYmKGI9ZFswXSksYn0sejE4MTpmdW5jdGlvbihhKXt2YXIgYj0wLGM9MDtyZXR1cm4gYS50eXBlPT0iRE9NTW91c2VTY3JvbGwiJiZicm93c2VyPT1Ccm93c2VyLkZJUkVGT1gmJmJyb3dzZXJWZXJzaW9uPDM/KGI9YS5zY3JlZW5YLGM9YS5zY3JlZW5ZKTp0eXBlb2YgYS5wYWdlWD09Im51bWJlciI/KGI9YS5wYWdlWCxjPWEucGFnZVkpOnR5cGVvZiBhLmNsaWVudFg9PSJudW1iZXIiPyhiPWEuY2xpZW50WCtkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQrZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsYz1hLmNsaWVudFkrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCk6dGhpcy56MjU1KHRoaXMuejE4NSgiejk0IikpLG5ldyB0aGlzLlBvaW50KGIsYyl9LHoxODI6ZnVuY3Rpb24oYSl7dmFyIGI9MDtyZXR1cm4gdHlwZW9mIGEud2hlZWxEZWx0YT09Im51bWJlciI/Yj1hLndoZWVsRGVsdGE6dHlwZW9mIGEuZGV0YWlsPT0ibnVtYmVyIj9iPWEuZGV0YWlsKi0xOnRoaXMuejI1NSh0aGlzLnoxODUoIno5NSIpKSxiP2IvTWF0aC5hYnMoYik6MH0sejE4NDpmdW5jdGlvbigpe3ZhciBhPTAsYj0wLGM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx7fSxkPWRvY3VtZW50LmJvZHl8fHt9O2lmKHR5cGVvZiB3aW5kb3cucGFnZVhPZmZzZXQ9PSJudW1iZXIiKWE9d2luZG93LnBhZ2VYT2Zmc2V0LGI9d2luZG93LnBhZ2VZT2Zmc2V0O2Vsc2UgaWYoZC5zY3JvbGxMZWZ0fHxkLnNjcm9sbFRvcClhPWQuc2Nyb2xsTGVmdCxiPWQuc2Nyb2xsVG9wO2Vsc2UgaWYoYy5zY3JvbGxMZWZ0fHxjLnNjcm9sbFRvcClhPWMuc2Nyb2xsTGVmdCxiPWMuc2Nyb2xsVG9wO3JldHVybiBuZXcgdGhpcy5Qb2ludChhLGIpfSx6MjAxaW5kb3dTaXplOmZ1bmN0aW9uKCl7dmFyIGE9MCxiPTAsYz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fHt9LGQ9ZG9jdW1lbnQuYm9keXx8e307cmV0dXJuIHR5cGVvZiB3aW5kb3cuaW5uZXJXaWR0aD09Im51bWJlciI/KGE9d2luZG93LmlubmVyV2lkdGgsYj13aW5kb3cuaW5uZXJIZWlnaHQpOmMuY2xpZW50V2lkdGh8fGMuY2xpZW50SGVpZ2h0PyhhPWMuY2xpZW50V2lkdGgsYj1jLmNsaWVudEhlaWdodCk6ZC5jbGllbnRXaWR0aHx8ZC5jbGllbnRIZWlnaHQ/KGE9ZC5jbGllbnRXaWR0aCxiPWQuY2xpZW50SGVpZ2h0KTp0aGlzLnoyNTUodGhpcy56MTg1KCJ6OTYiKSksbmV3IHRoaXMuUG9pbnQoYSxiKX0sejIyNTpmdW5jdGlvbihhKXt2YXIgYj0hMSxjPWE7d2hpbGUoYj09ITEpaWYoYyljLmlkP2MuaWQ9PSJWaWV3ZXJEaXNwbGF5Ij9iPSEwOmM9Yy5wYXJlbnROb2RlOmM9Yy5wYXJlbnROb2RlO2Vsc2UgYnJlYWs7cmV0dXJuIGJ9LHoyMzg6ZnVuY3Rpb24oYSl7dmFyIGI9YSsiPSIsYz1kb2N1bWVudC5jb29raWUuc3BsaXQoIjsiKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTt3aGlsZShlLmNoYXJBdCgwKT09IiAiKWU9ZS5zdWJzdHJpbmcoMSxlLmxlbmd0aCk7aWYoZS5pbmRleE9mKGIpPT0wKXJldHVybiBlLnN1YnN0cmluZyhiLmxlbmd0aCxlLmxlbmd0aCl9cmV0dXJuIG51bGx9LHoyNDM6ZnVuY3Rpb24oYSl7dmFyIGI9YS5zbGljZSgtMSxhLmxlbmd0aCk9PSIvIj9hLnNsaWNlKDAsYS5sZW5ndGgtMSk6YTtyZXR1cm4gYj1hLnNsaWNlKDAsMSk9PSIvIj9hLnNsaWNlKDEsYS5sZW5ndGgpOmEsYn0sejE0MDpmdW5jdGlvbihhKXtpZihaLmJyb3dzZXI9PVouYnJvd3NlcnMuSUUpe3ZhciBiPShuZXcgRGF0ZSkuZ2V0VGltZSgpLnRvU3RyaW5nKCksYz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCksZD1jK2I7YSs9Ij9zdWZmaXhUb0Jsb2NrUGF0aENhY2hpbmc9IitkfXJldHVybiBhfSx6MTcwOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybihhLz1kLzIpPDE/Yy8yKmEqYSphKmEqYStiOmMvMiooKGEtPTIpKmEqYSphKmErMikrYn0sejIzMzpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gYSYmKGI9YS5zcGxpdCgiJiIpKSxifSx6MjQ5OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuejE4NSgiejUwIiksYz10aGlzLnoxODUoIno0OSIpLGQ9dGhpcy56MTg1KCJ6NDgiKTtaLnNraW5QYXRoPXRoaXMuejE4NSgiejU2IiksWi5za2luTW9kZT10aGlzLnoxODUoIno1NCIpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MjYiKSkpfHwoWi5pbml0aWFsWD1wYXJzZUZsb2F0KHRoaXMuejE4NSgiejI2IikpKSxpc05hTihwYXJzZUZsb2F0KHRoaXMuejE4NSgiejI3IikpKXx8KFouaW5pdGlhbFk9cGFyc2VGbG9hdCh0aGlzLnoxODUoInoyNyIpKSksaXNOYU4ocGFyc2VGbG9hdCh0aGlzLnoxODUoInoyOCIpKSl8fChaLmluaXRpYWxaPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MjgiKSkpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MzMiKSkpfHwoWi5taW5aPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MzMiKSkpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MzIiKSkpfHwoWi5tYXhaPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MzIiKSkpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6ODAiKSkpfHwoWi56b29tU3BlZWQ9cGFyc2VGbG9hdCh0aGlzLnoxODUoIno4MCIpKSksaXNOYU4ocGFyc2VGbG9hdCh0aGlzLnoxODUoIno0NiIpKSl8fChaLnBhblNwZWVkPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6NDYiKSkpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MTgiKSkpfHwoWi5mYWRlSW5TcGVlZD1wYXJzZUZsb2F0KHRoaXMuejE4NSgiejE4IikpKSxaLnRvb2xiYXJWaXNpYmxlPXBhcnNlSW50KHRoaXMuejE4NSgiejY0IiksMTApLFoudG9vbGJhclBvc2l0aW9uPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6NjMiKSksWi50b29sdGlwc1Zpc2libGU9dGhpcy56MTg1KCJ6NjUiKSE9IjAiLFoubmF2aWdhdG9yVmlzaWJsZT1wYXJzZUludCh0aGlzLnoxODUoIno0MyIpLDEwKSxaLm5hdmlnYXRvclc9cGFyc2VJbnQodGhpcy56MTg1KCJ6NDQiKSwxMCksWi5uYXZpZ2F0b3JIPXBhcnNlSW50KHRoaXMuejE4NSgiejM5IiksMTApLFoubmF2aWdhdG9yTD1wYXJzZUludCh0aGlzLnoxODUoIno0MCIpLDEwKSxaLm5hdmlnYXRvclQ9cGFyc2VJbnQodGhpcy56MTg1KCJ6NDIiKSwxMCksWi5uYXZpZ2F0b3JGaXQ9dGhpcy56MTg1KCJ6MzgiKSxaLmNsaWNrWm9vbT10aGlzLnoxODUoInoxMCIpIT0iMCIsWi5jbGlja1Bhbj10aGlzLnoxODUoIno5IikhPSIwIixaLm1vdXNlUGFuPXRoaXMuejE4NSgiejM0IikhPSIwIixaLmtleXM9dGhpcy56MTg1KCJ6MjkiKSE9IjAiLFouY29uc3RyYWluUGFuPXRoaXMuejE4NSgiejEyIikhPSIwIixaLnNsaWRlclZpc2libGU9dGhpcy56MTg1KCJ6NTgiKSE9IjAiLFouZnVsbFBhZ2VWaXNpYmxlPXRoaXMuejE4NSgiejIzIikhPSIwIixaLnByb2dyZXNzVmlzaWJsZT10aGlzLnoxODUoIno1MyIpIT0iMCIsWi5sb2dvVmlzaWJsZT10aGlzLnoxODUoInozMSIpIT0iMCIsWi5sb2dvQ3VzdG9tUGF0aD10aGlzLnoxODUoInozMCIpLFouY2FudmFzPXRoaXMuejE4NSgiejgiKSE9IjAiLFouZGVidWc9dGhpcy56MTg1KCJ6MTciKSE9IjAiO2lmKHRoaXMuaXNTdHJWYWwoYSkpZm9yKHZhciBlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1hW2VdLGg9Zy5pbmRleE9mKCI9Iik7aWYoaD4wKXt2YXIgaT1nLnN1YnN0cmluZygwLGgpLGo9Zy5zdWJzdHJpbmcoaCsxKTtpZih0aGlzLmlzU3RyVmFsKGopKXN3aXRjaChpKXtjYXNlInpJbml0aWFsWCI6aXNOYU4ocGFyc2VGbG9hdChqKSl8fChaLmluaXRpYWxYPXBhcnNlRmxvYXQoaikpO2JyZWFrO2Nhc2UiekluaXRpYWxZIjppc05hTihwYXJzZUZsb2F0KGopKXx8KFouaW5pdGlhbFk9cGFyc2VGbG9hdChqKSk7YnJlYWs7Y2FzZSJ6SW5pdGlhbFpvb20iOmlzTmFOKHBhcnNlRmxvYXQoaikpfHwoWi5pbml0aWFsWj1wYXJzZUZsb2F0KGopLFouaW5pdGlhbFomJihaLmluaXRpYWxaLz0xMDApKTticmVhaztjYXNlInpNaW5ab29tIjohaXNOYU4ocGFyc2VGbG9hdChqKSkmJnBhcnNlRmxvYXQoaik+LjAxJiYoWi5taW5aPXBhcnNlRmxvYXQoaiksWi5taW5aJiYoWi5taW5aLz0xMDApKTticmVhaztjYXNlInpNYXhab29tIjppc05hTihwYXJzZUZsb2F0KGopKXx8KFoubWF4Wj1wYXJzZUZsb2F0KGopLFoubWF4WiYmKFoubWF4Wi89MTAwKSk7YnJlYWs7Y2FzZSJ6TmF2aWdhdG9yVmlzaWJsZSI6Wi5uYXZpZ2F0b3JWaXNpYmxlPXBhcnNlSW50KGosMTApO2JyZWFrO2Nhc2UielRvb2xiYXJWaXNpYmxlIjpaLnRvb2xiYXJWaXNpYmxlPXBhcnNlSW50KGosMTApO2JyZWFrO2Nhc2UiekxvZ29WaXNpYmxlIjpqPT0iMCImJihaLmxvZ29WaXNpYmxlPSExKTticmVhaztjYXNlInpTbGlkZXJWaXNpYmxlIjpqPT0iMCImJihaLnNsaWRlclZpc2libGU9ITEpO2JyZWFrO2Nhc2UiekZ1bGxQYWdlVmlzaWJsZSI6aj09IjAiJiYoWi5mdWxsUGFnZVZpc2libGU9ITEpO2JyZWFrO2Nhc2UielByb2dyZXNzVmlzaWJsZSI6aj09IjAiJiYoWi5wcm9ncmVzc1Zpc2libGU9ITEpO2JyZWFrO2Nhc2UielRvb2x0aXBzVmlzaWJsZSI6aj09IjAiJiYoWi50b29sdGlwc1Zpc2libGU9ITEpO2JyZWFrO2Nhc2UielNraW5QYXRoIjpaLnNraW5QYXRoPWo7YnJlYWs7ZGVmYXVsdDppZihiPT1jKWFsZXJ0KGQrIiAiK2kpO2Vsc2Ugc3dpdGNoKGkpe2Nhc2Uielpvb21TcGVlZCI6Wi56b29tU3BlZWQ9cGFyc2VJbnQoaiwxMCk7YnJlYWs7Y2FzZSJ6UGFuU3BlZWQiOloucGFuU3BlZWQ9cGFyc2VJbnQoaiwxMCk7YnJlYWs7Y2FzZSJ6RmFkZUluU3BlZWQiOlouZmFkZUluU3BlZWQ9cGFyc2VJbnQoaiwxMCk7YnJlYWs7Y2FzZSJ6VG9vbGJhclBvc2l0aW9uIjpaLnRvb2xiYXJQb3NpdGlvbj1wYXJzZUludChqLDEwKTticmVhaztjYXNlInpOYXZpZ2F0b3JXaWR0aCI6aXNOYU4ocGFyc2VGbG9hdChqKSl8fChaLm5hdmlnYXRvclc9cGFyc2VGbG9hdChqKSk7YnJlYWs7Y2FzZSJ6TmF2aWdhdG9ySGVpZ2h0Ijppc05hTihwYXJzZUZsb2F0KGopKXx8KFoubmF2aWdhdG9ySD1wYXJzZUZsb2F0KGopKTticmVhaztjYXNlInpOYXZpZ2F0b3JMZWZ0Ijppc05hTihwYXJzZUZsb2F0KGopKXx8KFoubmF2aWdhdG9yTD1wYXJzZUZsb2F0KGopKTticmVhaztjYXNlInpOYXZpZ2F0b3JUb3AiOmlzTmFOKHBhcnNlRmxvYXQoaikpfHwoWi5uYXZpZ2F0b3JUPXBhcnNlRmxvYXQoaikpO2JyZWFrO2Nhc2Uiek5hdmlnYXRvckZpdCI6aXNOYU4ocGFyc2VGbG9hdChqKSl8fChaLm5hdmlnYXRvckZpdD1wYXJzZUludChqLDEwKSk7YnJlYWs7Y2FzZSJ6Q2xpY2tab29tIjpqPT0iMCImJihaLmNsaWNrWm9vbT0hMSk7YnJlYWs7Y2FzZSJ6Q2xpY2tQYW4iOmo9PSIwIiYmKFouY2xpY2tQYW49ITEpO2JyZWFrO2Nhc2Uiek1vdXNlUGFuIjpqPT0iMCImJihaLm1vdXNlUGFuPSExKTticmVhaztjYXNlInpLZXlzIjpqPT0iMCImJihaLmtleXM9ITEpO2JyZWFrO2Nhc2UiekNvbnN0cmFpblBhbiI6aj09IjAiJiYoWi5jb25zdHJhaW5QYW49ITEpO2JyZWFrO2Nhc2UiekNvcHlyaWdodFBhdGgiOlouY29weXJpZ2h0UGF0aD1qO2JyZWFrO2Nhc2UieldhdGVybWFya1BhdGgiOloud2F0ZXJtYXJrUGF0aD1qO2JyZWFrO2Nhc2UiekxvZ29DdXN0b21QYXRoIjpaLmxvZ29DdXN0b21QYXRoPWo7YnJlYWs7Y2FzZSJ6Q2FudmFzIjpqPT0iMCImJihaLmNhbnZhcz0hMSk7aWYoIVouY2FudmFzU3VwcG9ydGVkfHwhWi5jYW52YXMpWi51c2VDYW52YXM9ITE7YnJlYWs7Y2FzZSJ6RGVidWciOmo9PSIxIiYmKFouZGVidWc9ITApfX19fX0sejI0MjpmdW5jdGlvbihhKXtmb3IodmFyIGI9MTtiPGEubGVuZ3RoOylhW2ItMV09PWFbYl0/YS5zcGxpY2UoYiwxKTpiKys7cmV0dXJuIGF9LGludGVyc2VjdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hW2RdLGY9ITE7Zm9yKHZhciBnPTA7ZzxiLmxlbmd0aCYmZT49KGVsbXQyPWJbZ10pO2crKylpZihlbG10Mj09ZSl7Zj0hMDticmVha31mJiZjLnB1c2goYVtkXSl9cmV0dXJuIGN9LHN1YnRyYWN0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY10sZT0hMTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoJiZkPj0oZWxtdDI9YltmXSk7ZisrKWlmKGVsbXQyPT1kKXtlPSEwO2JyZWFrfWUmJmEuc3BsaWNlKGMtLSwxKX1yZXR1cm4gYX0sY3JlYXRlQ2FsbGJhY2s6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtmb3IodmFyIGQ9MixlPWFyZ3VtZW50cy5sZW5ndGg7ZDxlO2QrKyljLnB1c2goYXJndW1lbnRzW2RdKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1jLmNvbmNhdChbXSk7Zm9yKHZhciBlPTAsZj1hcmd1bWVudHMubGVuZ3RoO2U8ZjtlKyspZC5wdXNoKGFyZ3VtZW50c1tlXSk7cmV0dXJuIGIuYXBwbHkoYSxkKX19LHoyNTU6ZnVuY3Rpb24oYSl7YWxlcnQoYSl9LGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8pe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYSk7dGhpcy5pc1N0clZhbChiKSYmKHAuaWQ9Yik7dmFyIHE9cC5zdHlsZTtyZXR1cm4gcS5kaXNwbGF5PXRoaXMuaXNTdHJWYWwoYyk/YzoiaW5saW5lLWJsb2NrIixxLnBvc2l0aW9uPXRoaXMuaXNTdHJWYWwoZCk/ZDoic3RhdGljIixxLm92ZXJmbG93PXRoaXMuaXNTdHJWYWwoZSk/ZToiaGlkZGVuIixhPT0iY2FudmFzIj8odGhpcy5pc1N0clZhbChmKSYmcC5zZXRBdHRyaWJ1dGUoIndpZHRoIixmKSx0aGlzLmlzU3RyVmFsKGcpJiZwLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixnKSk6KHRoaXMuaXNTdHJWYWwoZikmJihxLndpZHRoPWYpLHRoaXMuaXNTdHJWYWwoZyYmZykmJihxLmhlaWdodD1nKSksdGhpcy5pc1N0clZhbChoKSYmKHEubGVmdD1oKSx0aGlzLmlzU3RyVmFsKGkpJiYocS50b3A9aSkscS5ib3JkZXJTdHlsZT10aGlzLmlzU3RyVmFsKGopP2o6Im5vbmUiLHEuYm9yZGVyV2lkdGg9dGhpcy5pc1N0clZhbChrKT9rOiIwcHgiLHEuYmFja2dyb3VuZD10aGlzLmlzU3RyVmFsKGwpP2w6InRyYW5zcGFyZW50IG5vbmUiLHEubWFyZ2luPXRoaXMuaXNTdHJWYWwobSk/bToiMHB4IixxLnBhZGRpbmc9dGhpcy5pc1N0clZhbChuKT9uOiIwcHgiLHRoaXMuaXNTdHJWYWwobykmJihxLmN1cnNvcj1vKSxwfSxjcmVhdGVDZW50ZXJlZEVsZW1lbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiKSxjPVtdO2MucHVzaCgnPGRpdiBzdHlsZT0iZGlzcGxheTp0YWJsZTsgaGVpZ2h0OjEwMCU7IHdpZHRoOjEwMCU7JyksYy5wdXNoKCJib3JkZXI6bm9uZTsgbWFyZ2luOjBweDsgcGFkZGluZzowcHg7IiksYy5wdXNoKCcjcG9zaXRpb246cmVsYXRpdmU7IG92ZXJmbG93OmhpZGRlbjsgdGV4dC1hbGlnbjpsZWZ0OyI+JyksYy5wdXNoKCc8ZGl2IHN0eWxlPSIjcG9zaXRpb246YWJzb2x1dGU7ICN0b3A6NTAlOyB3aWR0aDoxMDAlOyAnKSxjLnB1c2goImJvcmRlcjpub25lOyBtYXJnaW46MHB4OyBwYWRkaW5nOjBweDsiKSxjLnB1c2goJ2Rpc3BsYXk6dGFibGUtY2VsbDsgdmVydGljYWwtYWxpZ246bWlkZGxlOyI+JyksYy5wdXNoKCc8ZGl2IHN0eWxlPSIjcG9zaXRpb246cmVsYXRpdmU7ICN0b3A6LTUwJTsgd2lkdGg6MTAwJTsgJyksYy5wdXNoKCJib3JkZXI6bm9uZTsgbWFyZ2luOjBweDsgcGFkZGluZzowcHg7IiksYy5wdXNoKCd0ZXh0LWFsaWduOmNlbnRlcjsiPjwvZGl2PjwvZGl2PjwvZGl2PicpLGIuaW5uZXJIVE1MPWMuam9pbigiIiksYj1iLmZpcnN0Q2hpbGQ7dmFyIGQ9YixlPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO3doaWxlKGUubGVuZ3RoPjApZD1lWzBdLGU9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7cmV0dXJuIGQuYXBwZW5kQ2hpbGQoYSksYn0sY3JlYXRlR3JhcGhpY0VsZW1lbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJpbWciKSxjPW51bGw7cmV0dXJuIFouYnJvd3Nlcj09Wi5icm93c2Vycy5JRSYmWi5icm93c2VyVmVyc2lvbjw3PyhjPXRoaXMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgic3BhbiIsbnVsbCwiaW5saW5lLWJsb2NrIiksYi5vbmxvYWQ9ZnVuY3Rpb24oKXtjLnN0eWxlLndpZHRoPWMuc3R5bGUud2lkdGh8fGIud2lkdGgrInB4IixjLnN0eWxlLmhlaWdodD1jLnN0eWxlLmhlaWdodHx8Yi5oZWlnaHQrInB4IixiLm9ubG9hZD1udWxsLGI9bnVsbH0sYy5zdHlsZS5maWx0ZXI9InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0nIithKyInLCBzaXppbmdNZXRob2Q9J3NjYWxlJykiKTooYz1iLGMuc3JjPWEpLGN9LHoyNTE6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpe3ZhciBtPWEucGFyZW50Tm9kZS5zdHlsZTttLmNvbG9yPWIsbS5mb250RmFtaWx5PWMsbS5mb250U2l6ZT1kLG0uZm9udFNpemVBZGp1c3Q9ZSxtLmZvbnRTdHlsZT1mLG0uZm9udFN0cmV0Y2g9ZyxtLmZvbnRWYXJpYW50PWgsbS5mb250V2VpZ2h0PWksbS5saW5lSGVpZ2h0PWosbS50ZXh0QWxpZ249ayxtLnRleHREZWNvcmF0aW9uPWx9LHoxNTg6ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl0cnl7Yj1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGIuYXN5bmM9ITEsYi5sb2FkWE1MKGEpfWNhdGNoKGMpe3RoaXMuejI1NShjLm5hbWUrdGhpcy56MTg1KCJ6ODIiKStjLm1lc3NhZ2UpfWVsc2UgaWYod2luZG93LkRPTVBhcnNlcil0cnl7dmFyIGQ9bmV3IERPTVBhcnNlcjtiPWQucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIil9Y2F0Y2goYyl7dGhpcy56MjU1KGMubmFtZSt0aGlzLnoxODUoIno4MiIpK2MubWVzc2FnZSl9ZWxzZSB0aGlzLnoyNTUodGhpcy56MTg1KCJ6OTgiKSk7cmV0dXJuIGJ9LFBvaW50OmZ1bmN0aW9uKGEsYil7dGhpcy54PXR5cGVvZiBhPT0ibnVtYmVyIj9hOjAsdGhpcy55PXR5cGVvZiBiPT0ibnVtYmVyIj9iOjB9LFBvaW50M0Q6ZnVuY3Rpb24oYSxiLGMpe3RoaXMueD10eXBlb2YgYT09Im51bWJlciI/YTowLHRoaXMueT10eXBlb2YgYj09Im51bWJlciI/YjowLHRoaXMuej10eXBlb2YgYz09Im51bWJlciI/YzowfSx6MTg1OmZ1bmN0aW9uKGEpe3ZhciBiPSIiO3N3aXRjaChhKXtjYXNlIno1MCI6Yj0iRW5hYmxlIERldmVsb3BlciBwYXJhbWV0ZXJzIjticmVhaztjYXNlIno0OSI6Yj0iQ2hhbmdpbmcgVGhpcyBWaW9sYXRlcyBMaWNlbnNlIEFncmVlbWVudCI7YnJlYWs7Y2FzZSJ6NDgiOmI9IlN1cHBvcnQgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIGVuYWJsZWQgb25seSBpbiB0aGUgWm9vbWlmeSBJbWFnZSBWaWV3ZXIgaW5jbHVkZWQgaW4gdGhlIFpvb21pZnkgSFRNTDUgRGV2ZWxvcGVyIGVkaXRpb246ICI7YnJlYWs7Y2FzZSJ6MjUiOmI9IjEwMCI7YnJlYWs7Y2FzZSJ6NjAiOmI9IjMwMDAwIjticmVhaztjYXNlIno2MSI6Yj0iMjU2IjticmVhaztjYXNlIno1OSI6Yj0iMS4xNSI7YnJlYWs7Y2FzZSJ6NjIiOmI9IjMwMCI7YnJlYWs7Y2FzZSJ6NyI6Yj0iNiI7YnJlYWs7Y2FzZSJ6NiI6Yj0iMyI7YnJlYWs7Y2FzZSJ6NSI6Yj0iMyI7YnJlYWs7Y2FzZSJ6NCI6Yj0iMiI7YnJlYWs7Y2FzZSJ6MyI6Yj0iMCI7YnJlYWs7Y2FzZSJ6NDUiOmI9IjIiO2JyZWFrO2Nhc2UiejQ2IjpiPSI1IjticmVhaztjYXNlIno0NyI6Yj0iMTAiO2JyZWFrO2Nhc2UiejgwIjpiPSI1IjticmVhaztjYXNlIno4MSI6Yj0iMC4wMiI7YnJlYWs7Y2FzZSJ6NzciOmI9IjMwIjticmVhaztjYXNlIno3OCI6Yj0iMjAwIjticmVhaztjYXNlIno3OSI6Yj0iMTAiO2JyZWFrO2Nhc2UiejEwVElFUlNLSVBUSFJFU0hPTEQiOmI9IjAxLiI7YnJlYWs7Y2FzZSJ6MjQiOmI9IjEwIjticmVhaztjYXNlInoxOCI6Yj0iNSI7YnJlYWs7Y2FzZSJ6MTkiOmI9IjAuMDY3IjticmVhaztjYXNlIno2NCI6Yj0iNCI7YnJlYWs7Y2FzZSJ6NjMiOmI9IjEiO2JyZWFrO2Nhc2UiejY1IjpiPSIxIjticmVhaztjYXNlIno0MyI6Yj0iMiI7YnJlYWs7Y2FzZSJ6NDQiOmI9IjE1MCI7YnJlYWs7Y2FzZSJ6MzkiOmI9IjEwMCI7YnJlYWs7Y2FzZSJ6NDAiOmI9IjAiO2JyZWFrO2Nhc2UiejQyIjpiPSIwIjticmVhaztjYXNlInozOCI6Yj1udWxsO2JyZWFrO2Nhc2UiejM2IjpiPSIjZmZmZmZmIjticmVhaztjYXNlInozNk5PQUxQSEEiOmI9IiNmYmZhZmEiO2JyZWFrO2Nhc2UiejM1IjpiPSIwLjc1IjticmVhaztjYXNlIno0MSI6Yj0iYmx1ZSI7YnJlYWs7Y2FzZSJ6NTUiOmI9InNraW5GaWxlcy54bWwiO2JyZWFrO2Nhc2UiejU2IjpiPSJBc3NldHMvU2tpbnMvRGVmYXVsdCI7YnJlYWs7Y2FzZSJ6NTQiOmI9IjAiO2JyZWFrO2Nhc2UiejEyIjpiPSIxIjticmVhaztjYXNlIno1OCI6Yj0iMSI7YnJlYWs7Y2FzZSJ6NTciOmI9IjEwIjticmVhaztjYXNlInoyMyI6Yj0iMSI7YnJlYWs7Y2FzZSJ6MjIiOmI9IndoaXRlIjticmVhaztjYXNlInoyMSI6Yj0iWCI7YnJlYWs7Y2FzZSJ6MjAiOmI9Ilx0I0Y4RjhGOCI7YnJlYWs7Y2FzZSJ6NTMiOmI9IjEiO2JyZWFrO2Nhc2UiejUxIjpiPSI1MDAiO2JyZWFrO2Nhc2UiejUyIjpiPSIgIjticmVhaztjYXNlInozMSI6Yj0iMSI7YnJlYWs7Y2FzZSJ6MzAiOmI9bnVsbDticmVhaztjYXNlIno4IjpiPSIxIjticmVhaztjYXNlInoxNyI6Yj0iMCI7YnJlYWs7Y2FzZSJ6MTYiOmI9ImxpZ2h0Z3JheSI7YnJlYWs7Y2FzZSJ6MTQiOmI9IndoaXRlIjticmVhaztjYXNlInoxMyI6Yj0iQWdyZWUiO2JyZWFrO2Nhc2UiejE1IjpiPSJFeGl0IjticmVhaztjYXNlIno3MyI6Yj0iMC42IjticmVhaztjYXNlIno3NCI6Yj0iMC4zMyI7YnJlYWs7Y2FzZSJ6NzYiOmI9IjUxMiI7YnJlYWs7Y2FzZSJ6NzUiOmI9IjM4NCI7YnJlYWs7Y2FzZSJ6MjYiOmI9bnVsbDticmVhaztjYXNlInoyNyI6Yj1udWxsO2JyZWFrO2Nhc2UiejI4IjpiPW51bGw7YnJlYWs7Y2FzZSJ6MzMiOmI9bnVsbDticmVhaztjYXNlInozMiI6Yj0iMSI7YnJlYWs7Y2FzZSJ6MTAiOmI9IjEiO2JyZWFrO2Nhc2UiejkiOmI9IjEiO2JyZWFrO2Nhc2UiejM0IjpiPSIxIjticmVhaztjYXNlInoyOSI6Yj0iMSI7YnJlYWs7Y2FzZSJ6NjciOmI9IlRoaXMgcGFuZWwgaXMgZW5hYmxlZCB1c2luZyB0aGUgSFRNTCBwYXJhbWV0ZXIgJ3pEZWJ1Zz0xJy4gSXQgY2FuIGJlIGNhbGxlZCBhcyBmb2xsb3dzOlxuXG4gICBaLlV0aWxzLnRyYWNlKCd2YWx1ZSB0byBkaXNwbGF5Jyk7ICBcblxuVGhlIGJ1dHRvbnMgYmVsb3cgZGlzcGxheSBvciBtb2RpZnkgaW1wb3J0YW50IHN0YXRlIHZhbHVlcy4gIFdlYiBkZXNpZ25lcnMgbmV3IHRvIEphdmFTY3JpcHQgd2lsbCBhbHNvIGJlbmVmaXQgZnJvbSB0aGUgY29uc29sZSwgdHJhY2UsIHByb2ZpbGluZywgYW5kIG90aGVyIGRlYnVnZ2luZyBmZWF0dXJlcyBvZiBsZWFkaW5nIGJyb3dzZXJzLiI7YnJlYWs7Y2FzZSJ6NjgiOmI9ImxpZ2h0Z3JheSI7YnJlYWs7Y2FzZSJ6NjYiOmI9IndoaXRlIjticmVhaztjYXNlIno2OSI6Yj0iU2hvdyBHbG9iYWxzIjticmVhaztjYXNlIno3MiI6Yj0iVG9nZ2xlIERpc3BsYXkiO2JyZWFrO2Nhc2UiejcwIjpiPSJUb2dnbGUgQmFja2ZpbGwiO2JyZWFrO2Nhc2UiejcxIjpiPSJUb2dnbGUgQ29uc3RyYWluIFBhbiI7YnJlYWs7Y2FzZSJ6OTkiOmI9IkJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdC4iO2JyZWFrO2Nhc2Uiejg3LUlNQUdFWE1MIjpiPSJFcnJvciBsb2FkaW5nIGltYWdlOiBwbGVhc2UgbWFrZSBzdXJlIGltYWdlIHBhdGggaW4gd2ViIHBhZ2UgbWF0Y2hlcyBpbWFnZSBmb2xkZXIgbG9jYXRpb24gb24gd2Vic2VydmVyLiI7YnJlYWs7Y2FzZSJ6ODctVE9PTEJBUlhNTCI6Yj0iRXJyb3IgbG9hZGluZyB0b29sYmFyOiBwbGVhc2UgdmVyaWZ5IHNraW4gZmlsZXMgYXJlIG9uIHdlYnNlcnZlciBpbiBzYW1lIGZvbGRlciBhcyB6MTIyLmpzIGZpbGUgYW5kIGFyZSBpbiBkZWZhdWx0IGZvbGRlciBzdHJ1Y3R1cmUgJ0Fzc2V0cy9Ta2lucy9EZWZhdWx0Jywgb3IgYWRkIHpTa2luUGF0aCBwYXJhbWV0ZXIgdG8gd2VicGFnZS4iO2JyZWFrO2Nhc2Uiejg3IjpiPSJFcnJvciBtYWtpbmcgbmV0d29yayByZXF1ZXN0OiBwb3NzaWJsZSBpbnZhbGlkIHBhdGggb3IgbmV0d29yayBlcnJvci4iO2JyZWFrO2Nhc2Uiejg0IjpiPSJJbWFnZSBmYWlsZWQgdG8gbG9hZDogcG9zc2libGUgaW52YWxpZCBwYXRoLCBtaXNzaW5nIGltYWdlLCBvciBuZXR3b3JrIGVycm9yLiI7YnJlYWs7Y2FzZSJ6ODkiOmI9IkVycm9yIHJlbGF0ZWQgdG8gbmV0d29yayBzZWN1cml0eTogIjticmVhaztjYXNlIno5MCI6Yj0iRXJyb3IgcmVsYXRlZCB0byBuZXR3b3JrIHN0YXR1czogIjticmVhaztjYXNlIno4MiI6Yj0iIGNvbnZlcnRpbmcgWE1MIHRleHQgdG8gWE1MIGRvYyAoRE9NUGFyc2VyKTogIjticmVhaztjYXNlIno5OCI6Yj0iQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFhNTCBET00uIjticmVhaztjYXNlInoxMDAiOmI9IlhNTCBpbnZhbGlkLiI7YnJlYWs7Y2FzZSJ6ODYiOmI9IkltYWdlIFhNTCBpbnZhbGlkLiI7YnJlYWs7Y2FzZSJ6ODMiOmI9IiB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2s6ICI7YnJlYWs7Y2FzZSJ6ODUiOmI9IkltYWdlIHRpbWVkIG91dDogIjticmVhaztjYXNlIno4OCI6Yj0iTmF2aWdhdG9yIGltYWdlIGZhaWxlZCB0byBsb2FkOiBwb3NzaWJsZSBpbnZhbGlkIHBhdGgsIG1pc3NpbmcgaW1hZ2UsIG9yIG5ldHdvcmsgZXJyb3IuIjticmVhaztjYXNlIno5MSI6Yj0iU2tpbiBYTUwgaW52YWxpZC4iO2JyZWFrO2Nhc2UiejkyIjpiPSJUaGUgc2tpbiBYTUwgZmlsZSBoYXMgb25lIG9yIG1vcmUgZmF1bHR5IG5hbWUgbGluZXMuIjticmVhaztjYXNlIno5NyI6Yj0iV2F0ZXJtYXJrIGltYWdlIGZhaWxlZCB0byBsb2FkOiAiO2JyZWFrO2Nhc2UiejkzIjpiPSJVbmtub3duIGVsZW1lbnQgc3R5bGUgLSBubyBrbm93biBtZXRob2QgdG8gaWRlbnRpZnkuIjticmVhaztjYXNlIno5NCI6Yj0iVW5rbm93biBtb3VzZSBwb3NpdGlvbiAtIG5vIGtub3duIG1ldGhvZCB0byBjYWxjdWxhdGUuIjticmVhaztjYXNlIno5NSI6Yj0iVW5rbm93biBtb3VzZSBzY3JvbGwgLSBubyBrbm93biBtZXRob2QgdG8gY2FsY3VsYXRlLiI7YnJlYWs7Y2FzZSJ6OTYiOmI9IlVua25vd24gd2luZG93IHNpemUgLSBubyBrbm93biBtZXRob2QgdG8gY2FsY3VsYXRlLiI7YnJlYWs7Y2FzZSJ6MTA2IjpiPSJMYXVuY2ggWm9vbWlmeSBXZWJzaXRlIjticmVhaztjYXNlInoxMDciOmI9Ik1pbmltaXplIFRvb2xiYXIiO2JyZWFrO2Nhc2UiejEwNSI6Yj0iRXhwYW5kIFRvb2xiYXIiO2JyZWFrO2Nhc2UiejEyMCI6Yj0iWm9vbSBPdXQiO2JyZWFrO2Nhc2UiejExNCI6Yj0iWm9vbSBJbiBBbmQgT3V0IjticmVhaztjYXNlInoxMTkiOmI9Ilpvb20gSW4iO2JyZWFrO2Nhc2UiejEwOSI6Yj0iUGFuIExlZnQiO2JyZWFrO2Nhc2UiejExMSI6Yj0iUGFuIFVwIjticmVhaztjYXNlInoxMDgiOmI9IlBhbiBEb3duIjticmVhaztjYXNlInoxMTAiOmI9IlBhbiBSaWdodCI7YnJlYWs7Y2FzZSJ6MTEyIjpiPSJSZXNldCBJbml0aWFsIFZpZXciO2JyZWFrO2Nhc2UiejExOCI6Yj0iVG9nZ2xlIEZ1bGwgUGFnZSBWaWV3IjticmVhaztjYXNlInoxMDIiOmI9IkNhbmNlbCBGdWxsIFBhZ2UgVmlldyI7YnJlYWs7Y2FzZSJ6MTAzIjpiPSJBZ3JlZSB0byBjb3B5cmlnaHQgYW5kIHZpZXcgaW1hZ2VzIjticmVhaztjYXNlInoxMDQiOmI9IkV4aXQgYW5kIGRvIG5vdCB2aWV3IGltYWdlcyI7YnJlYWs7Y2FzZSJ6MTEzIjpiPSJUb2dnbGUgRnVsbCBQYWdlIFZpZXciO2JyZWFrO2Nhc2UiejExNyI6Yj0iVG9nZ2xlIFZpZXdwb3J0IERpc3BsYXkiO2JyZWFrO2Nhc2UiejExNSI6Yj0iVG9nZ2xlIFZpZXdwb3J0IEJhY2tmaWxsIjticmVhaztjYXNlInoxMTYiOmI9IlRvZ2dsZSBDb25zdHJhaW4gUGFuIjticmVhaztkZWZhdWx0OmI9IlVuZXhwZWN0ZWQgcmVzb3VyY2UgcmVxdWVzdCJ9cmV0dXJuIGJ9LHoyNTM6ZnVuY3Rpb24oKXt2YXIgYT0iIjthKz0iXG4iLGErPSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk9PTUlGWSBJTUFHRSBWSUVXRVIgLSBDVVJSRU5UIFZBTFVFU1xuIixhKz0iXG4iLGErPSJJTUFHRSAmIFNLSU46ICAgICIsYSs9IlouaW1hZ2VQYXRoPSIrWi5pbWFnZVBhdGgrIiwgICAiLGErPSJaLnNraW5QYXRoPSIrWi5za2luUGF0aCsiLCAgICIsYSs9Ilouc2tpbk1vZGU9IitaLnNraW5Nb2RlKyIsICAgIixhKz0iWi5pbWFnZVc9IitaLmltYWdlVysiLCAgICIsYSs9IlouaW1hZ2VIPSIrWi5pbWFnZUgrIiwgICAiLGErPSJ0aWVyQ291bnQ9IitaLlZpZXdwb3J0LnoxODYoKSsiLCAgICIsYSs9IlRJTEVfU0laRT0iK1ouVmlld3BvcnQuejE5NSgpKyJcbiIsYSs9IlxuIixhKz0iUEFHRSAmIEJST1dTRVI6ICAgICIsYSs9IloucGFnZUNvbnRhaW5lcj0iK1oucGFnZUNvbnRhaW5lcisiLCAgICIsYSs9IlouYnJvd3Nlcj0iK1ouYnJvd3NlcisiLCAgICIsYSs9IlouYnJvd3NlclZlcnNpb249IitaLmJyb3dzZXJWZXJzaW9uKyIsICAgIixhKz0iWi5jYW52YXNTdXBwb3J0ZWQ9IitaLmNhbnZhc1N1cHBvcnRlZCsiLCAgICIsYSs9IlouY3NzVHJhbnNmb3Jtc1N1cHBvcnRlZD0iK1ouY3NzVHJhbnNmb3Jtc1N1cHBvcnRlZCsiLCAgICIsYSs9IlouY3NzVHJhbnNmb3JtUHJvcGVydHk9IitaLmNzc1RyYW5zZm9ybVByb3BlcnR5KyIsICAgIixhKz0iWi5jc3NUcmFuc2Zvcm1Ob1VuaXRzPSIrWi5jc3NUcmFuc2Zvcm1Ob1VuaXRzKyIsICAgIixhKz0iWi5hbHBoYVN1cHBvcnRlZD0iK1ouYWxwaGFTdXBwb3J0ZWQrIiwgICAiLGErPSJaLnJlbmRlclF1YWxpdHk9IitaLnJlbmRlclF1YWxpdHkrIiwgICAiLGErPSJaLm1vYmlsZURldmljZT0iK1oubW9iaWxlRGV2aWNlKyJcbiIsYSs9IlxuIixhKz0iVklFV0VSIE9QVElPTlMgJiBERUZBVUxUUzogICAgIixhKz0iWi5pbml0aWFsWD0iK1ouaW5pdGlhbFgrIiwgICAiLGErPSJaLmluaXRpYWxZPSIrWi5pbml0aWFsWSsiLCAgICIsYSs9IlouaW5pdGlhbFo9IitaLmluaXRpYWxaKyIsICAgIixhKz0iWi5taW5aPSIrWi5taW5aKyIsICAgIixhKz0iWi5tYXhaPSIrWi5tYXhaKyIsICAgIixhKz0iWi5maXRaPSIrWi5maXRaKyIsICAgIixhKz0iWi56b29tU3BlZWQ9IitaLnpvb21TcGVlZCsiLCAgICIsYSs9IloucGFuU3BlZWQ9IitaLnBhblNwZWVkKyIsICAgIixhKz0iWi5mYWRlSW5TcGVlZD0iK1ouZmFkZUluU3BlZWQrIiwgICAiLGErPSJaLnRvb2xiYXJWaXNpYmxlPSIrWi50b29sYmFyVmlzaWJsZSsiLCAgICIsYSs9IloudG9vbGJhclc9IitaLnRvb2xiYXJXKyIsICAgIixhKz0iWi50b29sYmFyQ3VycmVudFc9IitaLnRvb2xiYXJDdXJyZW50VysiLCAgICIsYSs9IloudG9vbGJhckg9IitaLnRvb2xiYXJIKyIsICAgIixhKz0iWi50b29sYmFyUG9zaXRpb249IitaLnRvb2xiYXJQb3NpdGlvbisiLCAgICIsYSs9IloudG9vbHRpcHNWaXNpYmxlPSIrWi50b29sdGlwc1Zpc2libGUrIiwgICAiLGErPSJaLm5hdmlnYXRvclZpc2libGU9IitaLm5hdmlnYXRvclZpc2libGUrIiwgICAiLGErPSJaLm5hdmlnYXRvclc9IitaLm5hdmlnYXRvclcrIiwgICAiLGErPSJaLm5hdmlnYXRvckg9IitaLm5hdmlnYXRvckgrIiwgICAiLGErPSJaLm5hdmlnYXRvckw9IitaLm5hdmlnYXRvckwrIiwgICAiLGErPSJaLm5hdmlnYXRvclQ9IitaLm5hdmlnYXRvclQrIiwgICAiLGErPSJaLm5hdmlnYXRvckZpdD0iK1oubmF2aWdhdG9yRml0KyIsICAgIixhKz0iWi5jbGlja1pvb209IitaLmNsaWNrWm9vbSsiLCAgICIsYSs9IlouY2xpY2tQYW49IitaLmNsaWNrUGFuKyIsICAgIixhKz0iWi5tb3VzZVBhbj0iK1oubW91c2VQYW4rIiwgICAiLGErPSJaLmtleXM9IitaLmtleXMrIiwgICAiLGErPSJaLmNvbnN0cmFpblBhbj0iK1ouY29uc3RyYWluUGFuKyIsICAgIixhKz0iV2F0ZXJtYXJrIGFscGhhID0gIitaLlV0aWxzLnoxODUoIno3MyIpKyIsICAgIixhKz0iWi53YXRlcm1hcmtQYXRoPSIrWi53YXRlcm1hcmtQYXRoKyIsICAgIixhKz0iWi5jb3B5cmlnaHRQYXRoPSIrWi5jb3B5cmlnaHRQYXRoKyIsICAgIixhKz0iWi5zbGlkZXJWaXNpYmxlPSIrWi5zbGlkZXJWaXNpYmxlKyIsICAgIixhKz0iWi5mdWxsUGFnZVZpc2libGU9IitaLmZ1bGxQYWdlVmlzaWJsZSsiLCAgICIsYSs9IloucHJvZ3Jlc3NWaXNpYmxlPSIrWi5wcm9ncmVzc1Zpc2libGUrIiwgICAiLGErPSJaLmxvZ29WaXNpYmxlPSIrWi5sb2dvVmlzaWJsZSsiLCAgICIsYSs9IloubG9nb0N1c3RvbVBhdGg9IitaLmxvZ29DdXN0b21QYXRoKyIsICAgIixhKz0iWi5jYW52YXM9IitaLmNhbnZhcysiXG4iLGErPSJcbiIsYSs9IklOVEVSTkFMIFZBTFVFUzogICAgIixhKz0iXG4iLGErPSJkaXNwbGF5Vz0iK1ouVmlld3BvcnQuejIwMSgpKyIsICAgIixhKz0iZGlzcGxheUg9IitaLlZpZXdwb3J0LnoxNzkoKSsiLCAgICIsYSs9InRpZXJDdXJyZW50PSIrWi5WaWV3cG9ydC56MTg3KCkrIiwgICAiLGErPSJ0aWVyU2NhbGU9IitaLlZpZXdwb3J0LnoxODkoKSsiLCAgICIsYSs9IlRJRVJTX01BWF9TQ0FMRV9VUD0iK1ouVmlld3BvcnQuejE5NCgpKyIsICAgIixhKz0iVElFUlNfTUFYX1NDQUxFX0RPV049IitaLlZpZXdwb3J0LnoxOTMoKSsiLCAgICIsYSs9IlRJTEVTX01BWF9DQUNIRT0iK1ouVmlld3BvcnQuejE5NygpKyIsICAgIixhKz0iWi51c2VDYW52YXM9IitaLnVzZUNhbnZhcysiXG4iLGErPSJcbiIsYSs9IklOVEVSTkFMIExJU1RTOiAgICAiLGErPSJ0aWVyV3M9IitaLlZpZXdwb3J0LnoxOTIoKSsiLCAgICIsYSs9InRpZXJIcz0iK1ouVmlld3BvcnQuejE4OCgpKyIsICAgIixhKz0idGllclRpbGVDb3VudHM9IitaLlZpZXdwb3J0LnoxOTEoKSsiLCAgICIsYSs9InRpbGVzTG9hZGluZ05hbWVzPSIrWi5WaWV3cG9ydC56MTk2KCkrIlxuIixhKz0iXG4iLGFsZXJ0KGEpfSx6MjU2OmZ1bmN0aW9uKCl7Wi5UcmFjZURpc3BsYXk/Wi5UcmFjZURpc3BsYXkuZGlzcGxheT09ImlubGluZS1ibG9jayI/Wi5UcmFjZURpc3BsYXkuZGlzcGxheT0ibm9uZSI6Wi5UcmFjZURpc3BsYXkuZGlzcGxheT0iaW5saW5lLWJsb2NrIjpaLlV0aWxzLmNvbmZpZ3VyZVRyYWNlRGlzcGxheSgpfSxjb25maWd1cmVUcmFjZURpc3BsYXk6ZnVuY3Rpb24oKXt2YXIgYT1aLnZpZXdlclcvMyxiPVoudmlld2VySC8zKzQ1LGM9MTAsZD1wYXJzZUZsb2F0KFoudmlld2VySCkvMyxlPXRoaXMuejE4NSgiejY4Iik7Wi5UcmFjZURpc3BsYXk9dGhpcy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJUcmFjZURpc3BsYXkiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsImhpZGRlbiIsYSsicHgiLGIrInB4IixjKyJweCIsZCsicHgiLCJzb2xpZCIsIjFweCIsZSwiMHB4IiwiMTBweCIpLFouVmlld2VyRGlzcGxheS5hcHBlbmRDaGlsZChaLlRyYWNlRGlzcGxheSksWi50cmFjZXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEVYVEFSRUEiKTt2YXIgZj1aLnRyYWNlcy5zdHlsZTtmLndpZHRoPWEtMTUrInB4IixmLmhlaWdodD1iLTYwKyJweCIsZi5mb250RmFtaWx5PSJ2ZXJkYW5hIixmLmZvbnRTaXplPSIxMHB4IixmLmJvcmRlcj0ic29saWQiLGYuYm9yZGVyV2lkdGg9IjFweCIsZi5wYWRkaW5nPSI1cHgiLGYucmVzaXplPSJub25lIixaLnRyYWNlcy52YWx1ZT0iVHJhY2UgVmFsdWVzXG4iLFouVHJhY2VEaXNwbGF5LmFwcGVuZENoaWxkKFoudHJhY2VzKTt2YXIgZz01OCxoPTQyLGk9MjAsaj1iLWgvMi0xMCxrPTEwLGw9dGhpcy56MTg1KCJ6NjYiKSxtPXRoaXMuejE4NSgiejY5Iiksbj1uZXcgdGhpcy5CdXR0b24oImJ1dHRvblNob3dHbG9iYWxzIixtLG51bGwsbnVsbCxudWxsLG51bGwsZysicHgiLGgrInB4IixpKyJweCIsaisicHgiLCJtb3VzZWRvd24iLHRoaXMuejI1MywiejExMyIsInNvbGlkIiwiMXB4IixsLCIwcHgiLCIwcHgiKTtaLlRyYWNlRGlzcGxheS5hcHBlbmRDaGlsZChuLmVsbXQpLGkrPWcrazt2YXIgbT10aGlzLnoxODUoIno3MiIpLG89bmV3IHRoaXMuQnV0dG9uKCJidXR0b25Ub2dnbGVEaXNwbGF5IixtLG51bGwsbnVsbCxudWxsLG51bGwsZysicHgiLGgrInB4IixpKyJweCIsaisicHgiLCJtb3VzZWRvd24iLFouVmlld3BvcnQuejI3MiwiejExNyIsInNvbGlkIiwiMXB4IixsLCIwcHgiLCIwcHgiKTtaLlRyYWNlRGlzcGxheS5hcHBlbmRDaGlsZChvLmVsbXQpLGkrPWcrazt2YXIgbT10aGlzLnoxODUoIno3MCIpLHA9bmV3IHRoaXMuQnV0dG9uKCJidXR0b25Ub2dnbGVCYWNrZmlsbCIsbSxudWxsLG51bGwsbnVsbCxudWxsLGcrInB4IixoKyJweCIsaSsicHgiLGorInB4IiwibW91c2Vkb3duIixaLlZpZXdwb3J0LnoyNzEsInoxMTUiLCJzb2xpZCIsIjFweCIsbCwiMHB4IiwiMHB4Iik7Wi5UcmFjZURpc3BsYXkuYXBwZW5kQ2hpbGQocC5lbG10KSxpKz1nK2ssZys9MTI7dmFyIG09dGhpcy56MTg1KCJ6NzEiKSxxPW5ldyB0aGlzLkJ1dHRvbigiYnV0dG9uVG9nZ2xlQ29uc3RyYWluUGFuIixtLG51bGwsbnVsbCxudWxsLG51bGwsZysicHgiLGgrInB4IixpKyJweCIsaisicHgiLCJtb3VzZWRvd24iLFouVmlld3BvcnQudG9nZ2xlQ29uc3RyYWluUGFuLCJ6MTE2Iiwic29saWQiLCIxcHgiLGwsIjBweCIsIjBweCIpO1ouVHJhY2VEaXNwbGF5LmFwcGVuZENoaWxkKHEuZWxtdCl9LHRyYWNlOmZ1bmN0aW9uKGEpe1ouVHJhY2VEaXNwbGF5fHxaLlV0aWxzLmNvbmZpZ3VyZVRyYWNlRGlzcGxheSgpLFoudHJhY2VzJiYoWi50cmFjZXMudmFsdWUrPSJcbiIrYSsiXG4iKX19"></script>



		<script id="script_kogrids">
			function kogrids(args) {
//				random_fb();
//				random_ko();
//				random_av();
//				random_sl();
//				random_us();
//				random_u();
//				random_zm();
//				alert( "BUGS_330 kogrids args="+args );
				var myko = new Array();
				var mykob = new Array();
				var mykow = new Array();
				var mykoeyeb = new Array();
				var mykoeyew = new Array();
mykob =
`/imgs/kogrids/tn/tn_kob_grid1.png
/imgs/kogrids/tn/tn_kob_grid2.png
/imgs/kogrids/tn/tn_kob_grid3.png
/imgs/kogrids/tn/tn_kob_grid4.png
/imgs/kogrids/tn/tn_kob_grid5.png
/imgs/kogrids/tn/tn_kob_grid6.png
/imgs/kogrids/tn/tn_kob_grid7.png
/imgs/kogrids/tn/tn_kob_grid8.png
/imgs/kogrids/tn/tn_kob_grid9.png
/imgs/kogrids/tn/tn_kob_grid.gif`.split("\n");

mykow = 
`/imgs/kogrids/tn/tn_kow_grid1.png
/imgs/kogrids/tn/tn_kow_grid2.png
/imgs/kogrids/tn/tn_kow_grid3.png
/imgs/kogrids/tn/tn_kow_grid4.png
/imgs/kogrids/tn/tn_kow_grid5.png
/imgs/kogrids/tn/tn_kow_grid6.png
/imgs/kogrids/tn/tn_kow_grid7.png
/imgs/kogrids/tn/tn_kow_grid8.png
/imgs/kogrids/tn/tn_kow_grid9.png
/imgs/kogrids/tn/tn_kow_grip.gif`.split("\n");


mykoeyeb =
`/imgs/kogrids/tn/tn_koeyeb_grid1.png
/imgs/kogrids/tn/tn_koeyeb_grid2.png
/imgs/kogrids/tn/tn_koeyeb_grid3.png
/imgs/kogrids/tn/tn_koeyeb_grid4.png
/imgs/kogrids/tn/tn_koeyeb_grid5.png
/imgs/kogrids/tn/tn_koeyeb_grid6.png
/imgs/kogrids/tn/tn_koeyeb_grid7.png
/imgs/kogrids/tn/tn_koeyeb_grid8.png
/imgs/kogrids/tn/tn_koeyeb_grid9.png
/imgs/kogrids/tn/tn_koeyeb_grid_delay5.gif`.split("\n");

mykoeyew =
`/imgs/kogrids/tn/tn_koeyew_grid1.png
/imgs/kogrids/tn/tn_koeyew_grid2.png
/imgs/kogrids/tn/tn_koeyew_grid3.png
/imgs/kogrids/tn/tn_koeyew_grid4.png
/imgs/kogrids/tn/tn_koeyew_grid5.png
/imgs/kogrids/tn/tn_koeyew_grid6.png
/imgs/kogrids/tn/tn_koeyew_grid7.png
/imgs/kogrids/tn/tn_koeyew_grid8.png
/imgs/kogrids/tn/tn_koeyew_grid9.png
/imgs/kogrids/tn/tn_koeyew_grip_delay5.gif`.split("\n");

myko =
`/imgs/bh/bluehost_grid01.jpg
/imgs/bh/bluehost_grid02.jpg
/imgs/bh/bluehost_grid03.jpg
/imgs/bh/bluehost_grid04.jpg
/imgs/bh/bluehost_grid05.jpg
/imgs/bh/bluehost_grid06.jpg
/imgs/bh/bluehost_grid07.jpg
/imgs/bh/bluehost_grid08.jpg
/imgs/bh/bluehost_grid09.jpg
/imgs/bh/bh_anim.gif`.split("\n");
			
				var ko=Math.floor(Math.random()*myko.length);
				var kob=Math.floor(Math.random()*mykob.length);
				var kow=Math.floor(Math.random()*mykow.length);
				var koeyeb=Math.floor(Math.random()*mykoeyeb.length);
				var koeyew=Math.floor(Math.random()*mykoeyew.length);
				var koeyeb1=Math.floor(Math.random()*mykoeyeb.length);
				var koeyew1=Math.floor(Math.random()*mykoeyew.length);
				var koeyeb2=Math.floor(Math.random()*mykoeyeb.length);
				var koeyew2=Math.floor(Math.random()*mykoeyew.length);


				var max=4; var min=1;
				var delay1=random_int(max,min);
				var delay2=random_int(max,min);
				var delay3=random_int(max,min);
				var delay4=random_int(max,min);

				if( delay1 = 1 ) mykoeyeb[10]="/imgs/kogrids/tn/tn_koeyew_grid_delay100.gif";
				if( delay1 = 2 ) mykoeyeb[10]="/imgs/kogrids/tn/tn_koeyew_grid_delay25.gif";
				if( delay1 = 3 ) mykoeyeb[10]="/imgs/kogrids/tn/tn_koeyew_grid_delay50.gif";
				if( delay1 = 4 ) mykoeyeb[10]="/imgs/kogrids/tn/tn_koeyew_grid_delay5.gif";

				if( delay2 = 1 ) mykoeyew[10]="/imgs/kogrids/tn/tn_koeyew_grip_delay100.gif";
				if( delay2 = 2 ) mykoeyew[10]="/imgs/kogrids/tn/tn_koeyew_grip_delay25.gif";
				if( delay2 = 3 ) mykoeyew[10]="/imgs/kogrids/tn/tn_koeyew_grip_delay50.gif";
				if( delay2 = 4 ) mykoeyew[10]="/imgs/kogrids/tn/tn_koeyew_grip_delay5.gif";
//				alert( "BUGS_400 delay1="+delay1+" delay2="+delay2 );

				if (ko==0) ko=10;
				if (kob==0) kob=10;
				if (kow==0) kow=10;
				if (koeyeb==0) koeyeb=10;
				if (koeyew==0) koeyew=10;
				if (koeyeb1==0) koeyeb1=10;
				if (koeyew1==0) koeyew1=10;
				if (koeyeb2==0) koeyeb2=10;
				if (koeyew2==0) koeyew2=10;

var htmout_spacer = 
`<br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br>
<hr color=red>
<hr color=white>
<hr color=blue>
<br><br><br><br>`;



var htmout_mouse = `
<a href="/imgs/btn/giphy_mouse02.gif" class="popover" target=_blank>
	<img src="/imgs/btn/giphy_phone01.gif" height=100>
	<span><img src="/imgs/btn/giphy_mouse02.gif" width=100 height=100></span>
	</a>
<a href="/imgs/btn/giphy_mouse01.gif" class="popover" target=_blank>
	<img src="/tl/imgs/construction_sawhorse.gif" class="popover" width=150 height=5 target=_blank>
	<span><img src="/imgs/btn/giphy_mouse01.gif" width=150 height=100></span>
	</a>

<a href="/tl/imgs/construction_sawhorse.gif" class="popover" width=150 height=100 target=_blank>
	<img src="/tl/imgs/construction_sawhorse.gif" width=150 height=100 border=0 class="popover">
	<span><img src="/imgs/btn/construction01.png" width=150 height=100 ></span>
	</a>

	<a href="/notes.html" class="popover" target=_blank>
		<img src="/fb/law/imgs/giphy_notes03.gif" height=100 width=100 border=0>
		<span><img src="/fb/law/imgs/giphy_notes03.gif" height=100 width=100></span>
		</a>
	<a href="notes.txt" class="popover" target=_blank>
		<img src=/imgs/gif/notes/giphy_notes10.gif height=5 width=100>
		<span><img src=/imgs/gif/notes/giphy_notes10.gif height=100 width=100></span>
		</a>

	<a href="/index_vu.html" class="popover" target=_blank>
		<img src="/imgs/gif/view/giphy_view19.gif" height=100 width=100 border=0>
		<span><img src="/imgs/gif/view/giphy_view22.gif" height=100 width=100></span>
		</a>
	<a href="/imgs/gif/spacers/giphy_spacer_12.gif" class="popover" target=_blank>
		<img src=/imgs/gif/spacers/tn/tn_giphy_spacer_12.gif height=5 width=100>
		<span><img src=/imgs/gif/spacers/tn/tn_giphy_spacer_12.gif height=100 width=100></span>
		</a>

	<a href="/fb/law/" class="popover" target=_blank>
		<img src="/fb/law/pages/1.jpg" height=100 width=100 border=0>
		<span><img src="/fb/jtfdc/pages/1.jpg" height=100 width=100></span>
		</a>
	<a href="/imgs/gif/spacers/giphy_spacer_12.gif" class="popover" target=_blank>
		<img src=/imgs/gif/spacers/tn/tn_giphy_spacer_12.gif height=5 width=100>
		<span><img src=/imgs/gif/spacers/tn/tn_giphy_spacer_12.gif height=100 width=100></span>
		</a>
	<a href="/fb/jtfdcr/" class="popover" target=_blank>
		<img src="/fb/jtfdcr/pages/1.jpg" height=100 width=100 border=0>
		<span><img src="/fb/jtfdc/pages/1.jpg" height=100 width=100></span>
		</a>
	<a href="/imgs/gif/spacers/giphy_spacer_12.gif" class="popover" target=_blank>
		<img src=/imgs/gif/spacers/tn/tn_giphy_spacer_12.gif height=5 width=100>
		<span><img src=/imgs/gif/spacers/tn/tn_giphy_spacer_12.gif height=100 width=100></span>
		</a>
<a href="/imgs/btn/giphy_mouse01.gif" class="popover" target=_blank>
	<img src="/imgs/btn/giphy_phone02.gif" height=100>
	<span><img src="/imgs/btn/giphy_mouse01.gif" height=100></span>
	</a>
	<br><br><br><br><br><br>
	<br><br><br><br><br><br>
	<br><br><br><br><br><br>
	<br><br><br><br><br><br>
`;

				htmout  = '\n';
				htmout += '<a href="index.html" class="thumbnail"  target=_blank>';
				htmout += '<img src="'+mykoeyeb[koeyeb1]+'" height=75 alt=kob border=0>';
//				htmout += '<span><img src="/imgs/kogrids/tn/tn_links_ko2us.png" height=400 alt="" border=0></span>';
				htmout += '<span><img src="/imgs/kogrids/links_ko2us.png" height=400 alt="" border=0></span>';
				htmout += '</a>';
				htmout += '&nbsp  &nbsp';
				htmout += '<a href="/ko_center/ko_center.php?q=login" class="thumbnail" target=_blank>';
				htmout += '<img src="'+mykoeyew[koeyew1]+'" height=75 alt=koeyeb border=0>';
//				htmout += '<span><img src="/imgs/kogrids/tn/tn_links_kologin.png" height=400 alt="kolgin" border=0></span>';
				htmout += '<span><img src="/imgs/kogrids/links_kologin.png" height=400 alt="kolgin" border=0></span>';
				htmout += '</a>';
				htmout += '&nbsp  &nbsp';
				htmout += '<a href="cfaa.html" class="thumbnail" target=_blank>';
				htmout += '<img src="'+mykoeyeb[koeyeb2]+'"  height=75 alt=koeyew border=0>';
//				htmout += '<span><img src="/imgs/kogrids/tn/tn_links_cfaa.png" height=400 alt="" border=0></span>';
				htmout += '<span><img src="/imgs/kogrids/links_cfaa.png" height=400 alt="" border=0></span>';
				htmout += '</a>';
				htmout += '&nbsp &nbsp &nbsp';
				htmout += '<a href="https://www.bluehost.com/?utm_source=%28direct%29&utm_medium=affiliate&utm_campaign=affiliate-link_konet_notype" class="thumbnail" target=_blank>';
				htmout += '<img src="'+mykoeyew[koeyew2]+'" height=75 alt=kow border=0>';
//				htmout += '<span><img src="/imgs/kogrids/tn/tn_links_bluehost.png" height=400 alt="bluehost.com" border=0></span>';
				htmout += '<span><img src="/imgs/kogrids/links_bluehost.png" height=400 alt="bluehost.com" border=0></span>';
				htmout += '</a>';
				htmout += '\n';

				htmout_kogrids=htmout;


				htmout_m = "";
				htmout_m += "<hr color=black>\n";
				htmout_m += "<hr color=white>\n";
				htmout_m += '<a href=#div_kogrids class="popover" >\n';	
				htmout_m += '	<img  src=/imgs/btn/kop12.png onclick="kogrids(\'\'); return false;" border=0>\n';
				htmout_m += '	<span><img src=/imgs/btn/kop34.png onclick="kogrids(\'\');" border=0></span>\n';
				htmout_m += '	</a>\n';
				htmout_m += '<button id="btn_kogrids" onclick="kogrids()">-= kogrids =-</button>\n';
				htmout_m += "<hr color=white>\n";
				htmout_m += "<hr color=black>\n";
				htmout_m += htmout_kogrids;
				htmout_m += htmout_spacer;
				htmout_m += "<hr color=white>\n";
				htmout_m += "<hr color=black>\n";


				htmout_w = "";
				htmout_w += "<hr color=white>\n";
				htmout_w += '<a href=# class="popover" >\n';	
				htmout_w += '	<img src=/imgs/btn/kop1.png onclick="kogrids(\'w\'); return false;" border=0>\n';
				htmout_w += '	<span><img src=/imgs/btn/kop2.png onclick="kogrids(\'w\');" border=0></span>\n';
				htmout_w += '	</a>\n';
				htmout_w += htmout_kogrids;
				htmout_w += htmout_spacer;
				htmout_w += htmout_mouse;
//				htmout_w += htmout_headline;

				htmout_b = "";
				htmout_b += "<hr color=black>\n";
				htmout_b += htmout_kogrids;
				htmout_b += '<a href=# class="popover" >\n';	
				htmout_b += '	<img src=/imgs/btn/kop3.png onclick="kogrids(\'b\');" border=0>\n';
				htmout_b += '	<span><img src=/imgs/btn/kop4.png onclick="kogrids(\'b\'); return false;" border=0></span>\n';
				htmout_b += '	</a>\n';
				htmout_b += '<button id="btn_kogrids_b" onclick="kogrids()">-= kogrids_b =-</button>\n';
				htmout_b += '<br><br><br><br>\n';
				htmout_b += htmout_spacer;
				htmout_b += "<hr color=black>\n";

//				alert( "BUGS_411 kogrids_w htmout_w="+htmout_w );
				var div_kogrids_w = document.getElementById('div_kogrids_w');
				div_kogrids_w.innerHTML = htmout_w;

//				alert( "BUGS_410 kogrids htmout="+htmout );
				var div_kogrids = document.getElementById('div_kogrids_m');
				div_kogrids.innerHTML = htmout_m;

				var div_kogrids_b = document.getElementById('div_kogrids_b');
				div_kogrids_b.innerHTML = htmout_b;


				var htmout_hllinks=hllinks();
				document.getElementById("div_hllinks").innerHTML = htmout_hllinks;
				var htmout_hltext=hltext();
				document.getElementById("div_hltext").innerHTML = htmout_hltext;


//				document.getElementByID("div_kogrids").innerHTML = htmout;
// appends			div_kogrids.insertAdjacentHTML('beforeend', htmout);

//				alert( "BUGS_413 kogrids_b htmout_b="+htmout_b );


//				var div_kogrids = document.getElementbyID("div_kogrids");
//				var div_kogrids = document.getElementbyID("div_kogrids") = htmout;
//				document.getElementById('div_kogrids').insertAdjacentHTML("beforebegin", htmout )
//				div_kogrids.insertAdjacentHTML('beforeend', htmout);
//				div_kogrids.show();
//				document.write( htmout );

//				document.write("<a href=index.html target=_blank>")
//				document.write('<img src="'+myko[ko]+'" height=30  border=0 alt=ko_bluehost_affiliate >')
//				document.write("</a>")
//				alert( "BUGS_420 kogrids htmout="+htmout );
				}

			function hllinks() {
				var mode="pop";
//				var hllink = load_us_links();

var hllink = `
https://www.muenkstax.com|/imgs/us/muenks_tax.png|acct_muenks|/imgs/btn/koeye.png|biz
http://501lawfirm.com/partners/greg-luber/|/imgs/us/law_luber_greg.png|law_luber_greg|/imgs/btn/koeye.png|law
https://www.facebook.com/Law-Offices-of-Kevin-J-Dolley-LLC-341402859203412/|/imgs/us/law_dolley_kellyj.png|law_kjd|/imgs/btn/koeye.png|law
https://www.linkedin.com/in/alan-cohen-2314473b/|/imgs/us/law_cohen_alan_w.png|law__cohen_alan_w|/imgs/btn/koeye.png|law
https://twitter.com/AlanWCohenEsq|/imgs/us/cohen_alan_w_twitter.png|cohen_alan_w_twitter|/imgs/btn/koeye.png|law
http://www.primerus.com/attorneys/alexander-h-kuehling-esq-rosenblum-goldenhersh-st-louis-missouri-mo.htm|/imgs/us/law_kuehling_alexander.png|law_law_kuehling_alexander|/imgs/btn/koeye.png|law
http://elsterlaw.com/henry-elster-attorney-missouri-best/|/imgs/us/law_elster_henry.png|law_elster_henry|/imgs/btn/koeye.png|law
https://pview.findlaw.com/view/2830721_1|/imgs/us/law_walters_alan.png|law_walters_alan|/imgs/btn/koeye.png|law
http://koreintillery.com/|/imgs/us/law_korein_tillery.png|law_korein_tillery|/imgs/btn/koeye.png|law
http://www.smithbrownllc.com/|/imgs/us/law_smith_brown.png|law_smith_brown|/imgs/btn/koeye.png|law
https://www.thompsoncoburn.com/|/imgs/us/law_thompson_coburn.png|law__thompson_coburn|/imgs/btn/koeye.png|law
http://www.gatewayloan.com/|/imgs/us/gateway_mortgage.png|gateway_mortgage|/imgs/btn/koeye.png|acct
https://www.coldwellbankerhomes.com/mo/saint-charles/agent/kenneth-ken-miesner/aid_15483/|/imgs/us/gundaker_ken_meisner.png|gundaker_ken_meisner|/imgs/btn/koeye.png|biz
https://www.topos-surveying.com/|/imgs/us/topos.png|topos_survey|/imgs/btn/koeye.png|biz
https://www.facebook.com/groups/9700pagealumni/|/imgs/us/mil_page9700.png|mil-page9700|/imgs/btn/koeye.png|mil
https://ftknox.afceachapters.org/|/imgs/us/afcea_knox.png|org_afcea_knox|/imgs/btn/koeye.png|org
https://www.facebook.com/AFCEAGoldVault/|/imgs/us/afcea_knox_facebook.png|org_afcea_knox_facebook|/imgs/btn/koeye.png|org
https://scott.afceachapters.org/|/imgs/us/afcea_scott.png|org_afcea_scott|/imgs/btn/koeye.png|org
https://www.facebook.com/afcea128/|/imgs/us/afcea_scott_facebook.png|org_afcea_scott_facebook|/imgs/btn/koeye.png|org
https://checonsulting.com|/imgs/us/checonsulting.png|biz_checonsulting|/imgs/btn/koeye.png|biz
https://northwesternmutual.com/|/imgs/us/biz_northwesternmutual.png|northwesternmutual|/imgs/btn/koeye.png|acct
https://bdo.com/about/us-locations/bdo-st-louis|/imgs/us/bdo-stl.png|acct_bdo-stl|/imgs/btn/koeye.png|acct
https://bdo.com/about/us-locations/bdo-cleveland-office|/imgs/us/bdo-cle.png|acct_bdo-cle|/imgs/btn/koeye.png|acct
http://saic.com|/imgs/us/saic.png|saic|/imgs/btn/koeye.png|biz
http://leidos.com|/imgs/us/leidos.png|leidos|/imgs/btn/koeye.png|biz
`.split("\n");

//				alert( "BUGS_730 hllinks hllink="+hllink+" mode="+mode );
				var htmout_hllinks = "";
				var htmout_hllinkz = "";
				for (i = 0; i < hllink.length; i++) {
					if( hllink[i].length == 0 ) { continue; }
//					alert( "BUGS_731 hllinks i="+i+" hllink.length="+hllink.length );
					var my_btnimg = "/imgs/btn/koeye.png";
//					alert( "BUGS_732 hllinks i="+i+" hllink.length="+hllink.length );
					var my_href = hllink[i].split("|")[0];
//					alert( "BUGS_733 hllinks i="+i+" hllink.length="+hllink.length );
					var my_popimg = hllink[i].split("|")[1];
//					alert( "BUGS_734 hllinks i="+i+" my_popimg="+my_popimg );
					var my_alt = hllink[i].split("|")[2];
//					alert( "BUGS_735 hllinks i="+i+" hllink.length="+hllink.length );

					htmout_hllinkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
					htmout_hllinkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

					htmout_hllinks += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
					htmout_hllinks += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
					htmout_hllinks += '<span><img src="' + my_popimg + '" height=200 alt="' + my_alt + '"></span></a>';
					}

//				alert( "BUGS_5533 htmout_hllinkz ="+htmout_hllinkz+" mode="+mode );
//				alert( "BUGS_5534 htmout_hllinks ="+htmout_hllinks+" mode="+mode );
//				alert( "BUGS_5535 window.htmout_hllinks ="+window.htmout_hllinks+" mode="+mode );

				if( mode === 'pop' ) {
					htmout_hllinks += "<br><br>";
					var div_hllinks = document.getElementById('div_hllinks');
					div_hllinks.insertAdjacentHTML('beforeend', htmout_hllinks);
					return( htmout_hllinks );
					}

				htmout_us_linkz += "<br><br>";
				var div_us_linkz = document.getElementById('div_hllinkz');
				div_us_linkz.insertAdjacentHTML('beforeend', htmout_us_linkz);

				return( htmout_hllinks );
				}

			function hltext() {
//				alert( "BUGS_712 hltext" );
var htmout_hltext = `
<br><hr color=black><br>
<br><hr color=red><br>
<br><hr color=white><br>
<br><hr color=blue><br>

<h1>-= latest offerings for the  wonderful stakeholders of our lives 20200309_1300 =-</h1>
<h2>-= latest offerings for the  wonderful stakeholders of our lives 20200309_1300 =-</h2>
<h3>-= latest offerings for the  wonderful stakeholders of our lives 20200309_1300 =-</h3>
<pre>
pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq
20200309_1300	-= shock n awe =-
20200312_1500	its all about dogs property and privledge
20200312_0930	ground zero north county modernization
	</pre>

<a href=http://501lawfirm.com/partners/greg-luber/ target=_blank>
	<img src=/imgs/btn/btn_501law.png border=0 height=50 >
	</a>

<a href=https://www.facebook.com/Law-Offices-of-Kevin-J-Dolley-LLC-341402859203412/ target=_blank>
	<img src=/imgs/btn/btn_dolleylaw.png alt="dolleylaw" border=0 height=50 >
	</a>



<pre>
	professional integrety honesty humanity
	checkmout

	city museum of the mind

	learn n earn
	teach youself
	knowing is doing

	rabid holes - trap door - broken links
	private group tours on request

bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd
	</pre>
<br><hr color=blue><br>
<br><hr color=white><br>
<br><hr color=red><br>
<br><hr color=black><br>
`;




var htmout_hltext_20200218 = `
<br><hr color=black><br>
<br><hr color=red><br>
<br><hr color=white><br>
<br><hr color=blue><br>
<h1>-= hltext_20200312_1600 =</h1>
<h2>-= hltext_20200312_1600 =</h2>
<h3>-= hltext_20200312_1600 =</h3>
<br><hr color=blue><br>
<br><hr color=white><br>
<br><hr color=red><br>
<br><hr color=black><br>
`;
//				var htmout_hltext="htmout_hltext";
				return( htmout_hltext );
				}


			function random_fb(fb_list) {
				var fb_list=new Array();
				fb_list=load_fb_links();
				var fb_len = fb_list.length;
				var slotlim = 6;
				var j=0; var k=0;
				var htmout = "";
				for( j=0; j<slotlim; j++ ) {
					k=random_int(1, fb_len );
					var fb_url = fb_links[k].split("|")[0];
					var fb_img = fb_links[k].split("|")[1];
					var fb_tn = fb_links[k].split("|")[2];
//					alert( "BUGS_550 j="+j+" k="+k+"  fb_url="+fb_url+" fb_tn="+fb_tn );
					htmout += '<a href="'+fb_url+'" class="popover" >';
					htmout += '	<img src="'+fb_tn+'"  >';
					htmout += '	<span><img src="'+fb_tn+'" width="200" ></span>';
					htmout += '	</a>';
//					alert( "BUGS_560 j="+j+" k="+k+" htmout="+htmout );
					}
				var div_fb_slots = document.getElementById('div_fb_slots');
				div_fb_slots.innerHTML = htmout;

//				alert( "BUGS_570 j="+j+" k="+k+" htmout="+htmout );
				}


			function random_ko(ko_links) {
				var ko_ko_links=new Array();
				ko_links=load_ko_links();
				var ko_len = ko_links.length;
				var slotlim = 1;
				var j=0; var k=0;
				var htmout = "";
				for( j=0; j<slotlim; j++ ) {
					k=random_int(1, ko_len );
					var ko_url = ko_links[k].split("|")[0];
					var ko_img = ko_links[k].split("|")[1];
					var ko_tn = ko_links[k].split("|")[3];
//					alert( "BUGS_601 j="+j+" k="+k+"  ko_url="+ko_url+" ko_tn="+ko_tn );
					ko_tn = "imgs/btn/koeye.png";
					htmout += '<a href="'+ko_url+'" class="popover" target=_blank >';
					htmout += '	<img src="'+ko_tn+'"  >';
					htmout += '	<span><img src="'+ko_tn+'" width="200" ></span>';
					htmout += '	</a>';
//					alert( "BUGS_602 j="+j+" k="+k+" ko_tn="+ko_tn+"  htmout="+htmout );
					}
//				alert( "BUGS_603 j="+j+" k="+k+" htmout="+htmout );
				var div_random_ko = document.getElementById('div_random_ko');
				div_random_ko.innerHTML = htmout;
//				alert( "BUGS_607 j="+j+" k="+k+" htmout="+htmout );
				}

			function load_av_links() {
				var j=0;
				var av_links = new Array();
av_links =
`/index.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|
/index0.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|
/index1.mp4|/imgs/btn/koeye.png|i/img/btn/koeyeb.png|
/index2.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|
/index3.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|
/index4.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|
/index5.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|
/index6.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|
/index7.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|
/index9.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|
/jtfdc_20190516_0830_tiny.mp4|/imgs/btn/koeye.png|/img/btn/koeyeb.png|`.split("\n");
				return(av_links);
				}

			function random_av(av_links) {
				var av_links=new Array();
				av_links=load_av_links();
				var av_len = av_links.length;
				var slotlim = 1;
				var j=0; var k=0;
				var htmout = "";
				for( j=0; j<slotlim; j++ ) {
					k=random_int(1, av_len );
					var av_url = av_links[k].split("|")[0];
					var av_img = av_links[k].split("|")[1];
					var av_tn = av_links[k].split("|")[2];
					av_tn="imgs/btn/kow.png";
//					alert( "BUGS_601 j="+j+" k="+k+"  av_url="+av_url+" av_tn="+av_tn );
					htmout += '<a href="'+av_url+'" class="popover" target=_blank >';
					htmout += '	<img src="'+av_tn+'"  >';
					htmout += '	<span><img src="'+av_tn+'" width="200" ></span>';
					htmout += '	</a>';
//					alert( "BUGS_602 j="+j+" k="+k+" htmout="+htmout );
					}
				var div_random_av = document.getElementById('div_random_av');
				div_random_av.innerHTML = htmout;
//				alert( "BUGS_637 j="+j+" k="+k+" htmout="+htmout );
				}

			function load_sl_links() {
//				alert( "BUGS_645 load_sl_links" );
				var j=0;
				var sl_links = new Array();
sl_links =
`http://ko2.us/sl/html/index_sl_kb-books-mil-korea74.html|http://ko2.usimgs/btn/koeye.png|http://ko2.usimg/btn/koeyeb.png|
http://ko2.us/sl/html/index_sl_kb-books-mil-korea74.html|http://ko2.usimgs/btn/koeye.png|http://ko2.usimg/btn/koeyeb.png|
http://ko2.us/sl/html/index_sl_kb-books-mil-korea74.html|http://ko2.usimgs/btn/koeye.png|http://ko2.usimg/btn/koeyeb.png|
http://ko2.us/sl/html/index_sl_kb-books-mil-korea74.html|http://ko2.usimgs/btn/koeye.png|http://ko2.usimg/btn/koeyeb.png|`.split("\n");
//				alert( "BUGS_652 load_sl_links" );
				return(sl_links);
				}

			function random_sl(sl_links) {
//				alert( "BUGS_660 sl_links" );
				var sl_links=new Array();
				sl_links=load_sl_links();
				var sl_len = sl_links.length;
				var slotlim = 1;
				var j=0; var k=0;
				var htmout = "";
				for( j=0; j<slotlim; j++ ) {
					k=random_int(1, sl_len );
					var sl_url = sl_links[k].split("|")[0];
					var sl_img = sl_links[k].split("|")[1];
					var sl_tn = sl_links[k].split("|")[2];
					sl_tn="imgs/btn/koeyew.png";
//					alert( "BUGS_601 j="+j+" k="+k+"  sl_url="+sl_url+" sl_tn="+sl_tn );
					htmout += '<a href="'+sl_url+'" class="popover" target=_blank >';
					htmout += '	<img src="'+sl_tn+'"  >';
					htmout += '	<span><img src="'+sl_tn+'" width="200" ></span>';
					htmout += '	</a>';
//					alert( "BUGS_677 random_sl j="+j+" k="+k+" htmout="+htmout );
					}
				var div_random_sl = document.getElementById('div_random_sl');
				div_random_sl.innerHTML = htmout;
//				alert( "BUGS_680 j="+j+" k="+k+" htmout="+htmout );
				}

			function load_zm_links() {
//				alert( "BUGS_685 load_zm_links" );
				var j=0;
				var zm_links = new Array();
zm_links =
`http://ko2.us/index_zm.html?zmid=/ko_jtf/zm/jtf_parcels/jtf39|/imgs/btn/koeye.png|./ko_jtf/zm/jtf_parcels/jtf39/TileGroup/0-0-0.jpg|
http://ko2.us/index_zm.html?zmid=/ko_jtf/zm/jtf_parcels/jtf38|/imgs/btn/koeye.png|./ko_jtf/zm/jtf_parcels/jtf38/TileGroup/0-0-0.jpg|
http://ko2.us/index_zm.html?zmid=/ko_jtf/zm/jtf_parcels/jtf32|/imgs/btn/koeye.png|./ko_jtf/zm/jtf_parcels/jtf32/TileGroup/0-0-0.jpg|
http://ko2.us/index_zm.html?zmid=/ko_jtf/zm/jtf_parcels/jtf31|/imgs/btn/koeye.png|./ko_jtf/zm/jtf_parcels/jtf31/TileGroup/0-0-0.jpg|
http://ko2.us/index_zm.html?zmid=/ko_jtf/zm/jtf_parcels/jtf30|/imgs/btn/koeye.png|./ko_jtf/zm/jtf_parcels/jtf30/TileGroup/0-0-0.jpg|
http://ko2.us/index_zm.html?zmid=/ko_jtf/zm/jtf_parcels/jtf29|/imgs/btn/koeye.png|./ko_jtf/zm/jtf_parcels/jtf29/TileGroup/0-0-0.jpg|
http://ko2.us/index_zm.html?zmid=/ko_jtf/zm/jtf_parcels/jtf28|imgs/btn/koeye.png|./ko_jtf/zm/jtf_parcels/jtf28/TileGroup/0-0-0.jpg|`.split("\n");
				return(zm_links);
				}

			function random_zm(zm_links) {
//				alert( "BUGS_690 zm_links" );
				var zm_links=new Array();
				zm_links=load_zm_links();
				var zm_len = zm_links.length;
				var slotlim = 1;
				var j=0; var k=0;
				var htmout = "";
				for( j=0; j<slotlim; j++ ) {
					k=random_int(1, zm_len );
					var zm_url = zm_links[k].split("|")[0];
					var zm_img = zm_links[k].split("|")[1];
					var zm_tn = zm_links[k].split("|")[2];
					zm_tn="imgs/btn/koeye.png";
					zm_tn="imgs/btn/koeye.png";
////					alert( "BUGS_601 j="+j+" k="+k+"  sl_url="+sl_url+" sl_tn="+sl_tn );
					htmout += '<a href="'+zm_url+'" class="popover" target=_blank >';
					htmout += '	<img src="'+zm_tn+'"  >';
					htmout += '	<span><img src="'+zm_tn+'" width="200" ></span>';
					htmout += '	</a>';
//					alert( "BUGS_715 random_zm j="+j+" k="+k+" htmout="+htmout );
					}
				var div_random_zm = document.getElementById('div_random_zm');
				div_random_zm.innerHTML = htmout;
//				alert( "BUGS_720 j="+j+" k="+k+" htmout="+htmout );
				}


			function random_us() {
//				alert( "BUGS_690 random_us" );
				}
			function random_u() {
//				alert( "BUGS_688 random_u" );
				}




			function random_int(max,min) {
				min = Math.ceil(min);
				max = Math.floor(max);
				return Math.floor(Math.random() * (max - min + 1)) + min;	
				}

//			random_kolink()
			</script>

	<script id="script_startup">
		function startup() {
//			alert( "BUGS_800 index startup" );
			var args="";
			script_av_jtf(args);
////			if( /\/jak2/.test(window.location.href)) {
//			if( window.location.href.includes("/jak2")) {
//				alert( "BUGS_100 jak2" );
//				window.loacation.href("#/us/jak2");
//				window.loacation.assign("#/us/jak2");
//				window.loacation.replace("#/us/jak2");
//				}
//			else {
//				alert( "BUGS_102 no_jak2" );
//				window.loacation.replace("#/us/jak2");
//				window.loacation.assign("/us/jak2");
//				window.loacation.href("/us/jak2");
//				}
//
//			var text = '<a href="/imgs/btn/ko.png">';
//			var regex = '/^</gi';
//			matchtest(text,regex);
//			matchtest('# comment', '/^#/gi' );
//			matchtest('// comment', '/\/\//gi' );

//			var res = str.match(/ain/g);

//			var divid = 'div_head';	
//			divtest(divid);
//			divtest('div_av');
//			divtest('div_ax');

			kogrids('');

//			script_hideshow("alloff");
//			script_hideshow("allon");
//			script_hideshow("div_head");
//			script_hideshow("div_av_jtfdc");
//			script_hideshow("div_kov");
//			kov_list('all');



//			alert("BUGS_991 kov_list");
//			kov_list_bugs('all');
//			alert("BUGS_992 kov_list");

//			alert("BUGS_993 kov_list ");
//			script_hideshow_kov("div_kov");
//			init_pano('canvas'); 
//			alert( "BUGS_455 startup done" );
			}
		</script>

	<script id="script_divtest">
		function divtest(divid) {
			alert( "BUGS_970 divtest divid="+divid );
			if( document.getElementById(divid)) {
				alert( "BUGS_971 divtest FIND divid="+divid );
				}
			else {
				alert( "BUGS_972 divtest fail divid="+divid );
				}
			return( document.getElementById(divid));
			}
		</script>
	<script id="script_matchtest">
		function matchtest(text,regex) {
			alert( "BUGS_1000 matchtest text="+text+" regex="+regex );
			var regex_html = '/^</gi';
			var regex_skippound = '/^#/gi';
			var regex_skipslash = '/^\/\//gi';

//			alert( "BUGS_901 matchtest text="+text+" regex="+regex );
//			var text_fancy = 'price[5][68]';
//			var regex_fancy = /price\[(\d+)\]\[(\d+)\]/gi;
//			match = regex_fancy.exec(text_fancy);
//			var matches = text.match(/price\[(\d+)\]\[(\d+)\]/);
//			alert( "BUGS_903 match="+match );

//			var thisRegex = new RegExp('\[(\d+)\]\[(\d+)\]');
//			if(!thisRegex.test(text)) { alert('BUGS_904 fail'); }
//			else {alert('BUGS_905 FIND'); }

//			var regex = new RegExp('/^#/gi');
			var regexx = new RegExp(regex);
			
//			alert( "BUGS_901 FIND text="+text+" regex="+regex );
//			var stat = regex.test(text);
//			alert( "BUGS_902 FIND stat="+stat+" regex="+regex );
//			if( regexx.test(text)) {
//				alert( "BUGS_902 FIND text="+text+" regex="+regex );
//				}
//			alert( "BUGS_903 fail text="+text+" regex="+regex );
			return( regex.test(text));
			}
		</script>


	<script id="script_url">
			var url = document.createElement("a");
			url.href=location.href;
			var output = "output";
			url.pathname = url.pathname.replace(/(^\/?)/,"/");

//			if( url.search != "" ) {
//				script_zm_view( url.search );
//				}

//			alert(location.href)
//			alert(url.protocol)
//			alert(url.hostname)
//			alert(url.pathname)
//			alert(url.search)
//			alert(url.hash)


//			document.write( "hostname=" + url.hostname + " loc.href=" + location.href );
//			document.write( "pathname=" + url.pathname + " search=" + url.search );
			</script>

	<script id="script_docready" type="text/javascript">
		$(document).ready(function() {
// 			sets the draggable
			$('#drag .drg').draggable({
				cursor: 'move',          // sets the cursor apperance
				revert: 'valid'
				});

// sets droppable
// after the draggable is droped, hides it with a hide() effect
			$('#drop').droppable({
				drop: function(event, ui) {
					ui.draggable.hide(1000);
					}
				});

// after the draggable is droped, hides it with a hide() effect
			$('#drop1').droppable({
				drop: function(event, ui) {
					ui.draggable.hide(1000);
					}
				});

// after the draggable is droped, hides it with a hide() effect
			$('#drop2').droppable({
				drop: function(event, ui) {
					ui.draggable.hide(1000);
					}
				});

// when the "#sw" element (inside the "#drop") is clicked
// show the items with class "drg", contained in "#drag"
//			$('#drag .drg').slideDown(1000);
			$('#drop #sw').click(function(){
				var url = "/ko_center/ko_center.php?q=jqui/dragdrop1/"
				$(location).attr('href',url);
				});
			});
		</script>

	<script id="script_load_liks" >
		var svc_links = new Array();
		var fb_links = new Array();
		var ko_links = new Array();
		var us_links = new Array();
		var u_links = new Array();
		var now_links = new Array();
		var srv_links = new Array();
		var kov_links = new Array();
		function load_svc_links() {
			var j=0;
			svc_links[j++]="/index_av.html|/imgs/links/index_av.png|index_av|/imgs/btn/kob.png";
			svc_links[j++]="/index_bb.html|/imgs/links/index_bb.png|index_bb|/imgs/btn/kob.png";
			svc_links[j++]="/index_bp.html|/imgs/links/index_bp.png|index_bb|/imgs/btn/kob.png";
			svc_links[j++]="/index_dd.html|/imgs/links/index_dd.png|index_dd|/imgs/btn/kob.png";
			svc_links[j++]="/index_dl.html|/imgs/links/index_dl.png|index_dl|/imgs/btn/kob.png";
			svc_links[j++]="/index_dp.html|/imgs/links/index_dp.png|index_dp|/imgs/btn/kob.png";
			svc_links[j++]="/index_fb.html|/imgs/links/index_fb.png|index_fb|/imgs/btn/kob.png";
			svc_links[j++]="/index_fl.html|/imgs/links/index_fl.png|index_fl|/imgs/btn/kob.png";
			svc_links[j++]="/index_jg.html|/imgs/links/index_jg.png|index_jg|/imgs/btn/kob.png";
			svc_links[j++]="/index_pn.html|/imgs/links/index_pn.png|index_pn|/imgs/btn/kob.png";
			svc_links[j++]="/index_sc.html|/imgs/links/index_sc.png|index_sc|/imgs/btn/kob.png";
			svc_links[j++]="/index_sl.html|/imgs/links/index_sl.png|index_sl|/imgs/btn/kob.png";
			svc_links[j++]="/index_tl.html|/imgs/links/index_tl.png|index_tl|/imgs/btn/kob.png";
			svc_links[j++]="/index_tm.html|/imgs/links/index_tm.png|index_tm|/imgs/btn/kob.png";
			svc_links[j++]="/index_us.html|/imgs/links/index_us.png|index_us|/imgs/btn/kob.png";
			svc_links[j++]="/index_wc.html|/imgs/links/index_wc.png|index_wc|/imgs/btn/kob.png";
			svc_links[j++]="/index_av.html|/imgs/links/index_av.png|index_av|/imgs/btn/kob.png";
			svc_links[j++]="/index_zm.html|/imgs/links/index_zm.png|index_zm|/imgs/btn/kob.png";
			return( svc_links );
			}

		function load_srv_links() {
			srv_links[0]="http://ko0.us/index.html|/imgs/btn/koeyeb.png|ko0us|/imgs/btn/kob.png";
			srv_links[1]="http://ko1.us/index.html|/imgs/btn/koeye.png|ko1us|/imgs/btn/kop1234.png";
			srv_links[2]="/index.html|/imgs/btn/koeyew.png|ko2us|/imgs/btn/kow.png";
			srv_links[3]="http://konet.org/index.html|/imgs/btn/ko.png|konet-org|/imgs/btn/kib.png";
			srv_links[4]="http://iperms.com/index.html|/imgs/links/iperms.png|iperms-com|/imgs/btn/kop34.png";
//			srv_links[5]="kassil.us/index.html|/imgs/links/kassil.png|kassil-us|/imgs/btn/kop12.png";
//			srv_links[5]="kassil.com/index.html|/imgs/links/kassil.png|kassil-com|/imgs/btn/kop12.png";
			return( srv_links );
			}

//		parser.href = "http://example.com:3000/pathname/?search=test#hash";
//		parser.protocol; // => "http:"
//		parser.host;     // => "example.com:3000"
//		parser.hostname; // => "example.com"
//		parser.port;     // => "3000"
//		parser.pathname; // => "/pathname/"
//		parser.hash;     // => "#hash"
//		parser.search;   // => "?search=test"
//		parser.origin;   // => "http://example.com:3000"

//		var reURLInformation = new RegExp([
//		    '^(https?:)//', // protocol
//		    '(([^:/?#]*)(?::([0-9]+))?)', // host (hostname and port)
//		    '(/{0,1}[^?#]*)', // pathname
//		    '(\\?[^#]*|)', // search
//		    '(#.*|)$' // hash
//		].join(''));
//		var match = href.match(reURLInformation);

// IE doesn't populate all link properties when setting .href with a relative URL,
// however .href will return an absolute URL which then can be used on itself
// to populate these additional fields.

//	function getLocation(href) {
//	    var location = document.createElement("a");
//	    location.href = href;
//	    if (location.host == "") {
//	      location.href = location.href;
//	    }
//	    return location;
//	};

//	var a = getLocation('http://example.com/aa/bb/');
//	document.write(a.hostname);
//	document.write(a.pathname);
//			return( fb_links );
//			}


		function load_fb_links() {
			var j=0;
fb_links =
`/fb/law/skwii/|/fb/law/skwii/pages/tn/tn_1.png|/fb/law/skwii/pages/tn/tn_1.png|law_skwii
/fb/heart/|/fb/heart/pages/tn/tn_1.png|fb/heart/pages/tn/tn_1.png|heart
/fb/soul/|/fb/soul/pages/tn/tn_1.png|fb/soul/pages/tn/tn_1.png|soul
/fb/neuz/|/fb/neuz/pages/tn/tn_1.png|fb/neuz/pages/tn/tn_1.png|neuz
/yt/|/yt/pages/tn/tn_1.png|fb/neuz/pages/tn/tn_1.png|neuz
/fb/birthday/|fb/birthday/pages/tn/tn_1.png|fb/birthday/pages/tn/tn_1.png|birthday
/fb/operation/|fb/operation/pages/tn/tn_1.png|fb/operation/pages/tn/tn_1.png|operation
/fb/law/jkwiiv_byrdbell/|fb/law/jkwiiv_byrdbell/pages/tn/tn_1.jpg|fb/law/jkwiiv_byrdbell/pages/tn/tn_1.png|jkwiiv_byrdbell
/fb/gofunwii/|us/imgs/us_gofunwii_mag.png|us/imgs/tn/tn_fb_gofunwii_mag.png|gofunwii
/fb/byrdpucker/|us/imgs/fb_byrdpucker.png|us/imgs/tn/tn_fb_byrdpucker|byrdpucker
/fb/go/|us/imgs/fb_go.jpg|us/imgs/tn/tn_fb_go.png|go
/fb/focus/|us/imgs/fb_focus.jpg|us/imgs/tn/tn_fb_focus.png|title|desc|mil|js|ht|
/fb/iperms/|us/imgs/fb_iperms.jpg|us/imgs/tn/tn_fb_iperms.png|title|desc|mil|js|ht|
/fb/iperms/page9700|us/imgs/fb_iperms_page9700.jpg|us/imgs/tn/tn_fb_iperms_page9700.png|title|desc|mil|js|ht|
/fb/iperms/boswall_hwccc|us/imgs/fb_iperms__boswall_hwccc.jpg|us/imgs/tn/tn_fb_iperms_boswall_hwccc.png|title|desc|mil|js|ht|
/fb/iperms/bogwall_hwccc|us/imgs/fb_iperms__bogwall_hwccc.jpg|us/imgs/tn/tn_fb_iperms_bogwall_hwccc.png|title|desc|mil|js|ht|
/fb/konet/|fb/imgs/fb_konet.jpg|us/imgs/tn/tn_fb_konet.png|title|desc|ko|js|ht|
/fb/che/|fb/imgs/fb_che.jpg|us/imgs/tn/tn_fb_che.png|title|desc|ka|js|ht|
/fb/nwm/|fb/imgs/fb_nwm.jpg|us/imgs/tn/tn_fb_nwm.png|title|desc|ka|js|ht|
/fb/gov/|fb/imgs/fb_gov.jpg|us/imgs/tn/tn_fb_gov.png|title|desc|ka|js|ht|
/fb/kassil/|fb/imgs/fb_kassil.jpg|us/imgs/tn/tn_fb_kassil.png|title|desc|ka|js|ht|
/fb/jak1/|fb/imgs/fb_jak1.jpg|us/imgs/tn/tn_fb_jak1.png|title|desc|ka|js|ht|
/fb/jak2/|us/imgs/fb_jak2.jpg|us/imgs/tn/tn_fb_jak2.png|title|desc|ka|js|ht|
/fb/jak3/|us/imgs/fb_jak3.jpg|us/imgs/tn/tn_fb_jak3.png|title|desc|ka|js|ht|
/fb/jkwii/|us/imgs/fb_jkwii.jpg|us/imgs/tn/tn_fb_jkwii.png|title|desc|ka|js|ht|
/fb/skwii/|us/imgs/fb_skwii.jpg|us/imgs/tn/tn_fb_skwii.png|title|desc|ka|js|ht|
/fb/pastryroad/|us/imgs/fb_pastryroad.jpg|us/imgs/tn/tn_fb_pastryroad.png|title|desc|ka|js|ht|
/fb/konabus/|us/imgs/fb_konabus.jpg|us/imgs/tn/tn_fb_konabus.png|title|desc|ka|js|ht|
/fb/focus/|us/imgs/fb_focus.jpg|us/imgs/tn/tn_fb_focus.png|title|desc|ka|js|ht|
/fb/kitiworks/|us/imgs/fb_kitiworks.jpg|us/imgs/tn/tn_fb_kitiworks.png|title|desc|ka|js|ht|
/fb/kitiworks/kitinits|us/imgs/fb_kitiworks_kitinits.jpg|us/imgs/tn/tn_fb_kitinits.png|title|desc|ka|js|ht|
/fb/kitiworks/kitisews|us/imgs/fb_kitiworks_kitisews.jpg|us/imgs/tn/tn_fb_kitisews.png|title|desc|ka|js|ht|
/fb/kitiworks/kitiweds|us/imgs/fb_kitiworks_kitiweds.jpg|us/imgs/tn/tn_fb_kitiweds.png|title|desc|ka|js|ht|
/fb/kitiworks/kitikids|us/imgs/fb_kitiworks_kitikids.jpg|us/imgs/tn/tn_fb_kitikids.png|title|desc|ka|js|ht|
/fb/go/|us/imgs/fb_go.jpg|us/imgs/tn/tn_fb_go.png|title|desc|go|js|ht|
/fb/kt/|us/imgs/fb_kt.jpg|us/imgs/tn/tn_fb_kt.png|title|desc|kt|js|ht|
/fb/kou|us/imgs/fb_kou.jpg|us/imgs/tn/tn_fb_kou.png|title|desc|kou|js|ht|
/fb/go/|us/imgs/fb_go.jpg|us/imgs/tn/tn_fb_go.png|title|desc|go|js|ht|
/fb/jtfdc/|us/imgs/fb_jtfdc.jpg|us/imgs/tn/tn_fb_jtfdc.png|title|desc|jtf|js|ht|
/fb/jtfdcr/|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr/animalcontrol|us/imgs/fb_jtfdcr_animalcontrol.jpg|us/imgs/tn/tn_fb_jtfdcr_animalcontrol.png|title|desc|jtf|js|ht|
/fb/jtfdcr/animalcontrol/jtf30.html|us/imgs/fb_jtfdcr_animalcontrol_jtf30.jpg|us/imgs/tn/tn_fb_jtfdcr_animalcontrol_jtf30.png|title|desc|jtf|js|ht|
/fb/jtfdcr/animalcontrol/jtf30.html|us/imgs/fb_jtfdcr_animalcontrol_jtf30.jpg|us/imgs/tn/tn_fb_jtfdcr_animalcontrol_jtf30.png|title|desc|jtf|js|ht|
/fb/jtfdcr/animalcontrol/jtf31.html|us/imgs/fb_jtfdcr_animalcontrol_jtf31.jpg|us/imgs/tn/tn_fb_jtfdcr_animalcontrol_jtf31.png|title|desc|jtf|js|ht|
/fb/jtfdcr/animalcontrol/jtf32.html|us/imgs/fb_jtfdcr_animalcontrol_jtf32.jpg|us/imgs/tn/tn_fb_jtfdcr_animalcontrol_jtf32.png|title|desc|jtf|js|ht|
/fb/jtfdcr/animalcontrol/jtf38.html|us/imgs/fb_jtfdcr_animalcontrol_jtf38.jpg|us/imgs/tn/tn_fb_jtfdcr_animalcontrol_jtf38.png|title|desc|jtf|js|ht|
/fb/jtfdcr/animalcontrol/jtf39.html|us/imgs/fb_jtfdcr_animalcontrol_jtf39.jpg|us/imgs/tn/tn_fb_jtfdcr_animalcontrol_jtf39.png|title|desc|jtf|js|ht|
/fb/jtfdcr/thieftvandlism.html|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr/thieftvandlism_jtf30.html|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr/thieftvandlism_jtf30-2.html|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr/thieftvandlism_jtf31.html|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr/thieftvandlism_jtf39.html|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr/thieftvandlism_jtf28.html|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr/protect|us/imgs/fb_jtfdcr_protect.jpg|us/imgs/tn/tn_fb_jtfdcr_protect.png|title|desc|jtf|js|ht|
/fb/jtfdcr/protect/jtf39.html|us/imgs/fb_jtfdcr_protect_jtf39.jpg|us/imgs/tn/tn_fb_jtfdcr_protect_jtf39.png|title|desc|jtf|js|ht|
/fb/jtfdcr/protect/jtf38.html|us/imgs/fb_jtfdcr_protect_jtf38.jpg|us/imgs/tn/tn_fb_jtfdcr_protect_jtf38.png|title|desc|jtf|js|ht|
/fb/jtfdcr/protect/jtf32.html|us/imgs/fb_jtfdcr_protect_jtf32.jpg|us/imgs/tn/tn_fb_jtfdcr_protect_jtf32.png|title|desc|jtf|js|ht|
/fb/jtfdcr/protect/jtf31.html|us/imgs/fb_jtfdcr_protect_jtf31.jpg|us/imgs/tn/tn_fb_jtfdcr_protect_jtf31.png|title|desc|jtf|js|ht|
/fb/jtfdcr/protect/jtf28.html|us/imgs/fb_jtfdcr_protect_jtf28.jpg|us/imgs/tn/tn_fb_jtfdcr_protect_jtf28.png|title|desc|jtf|js|ht|
/fb/jtfdcr/protect/jtf30.html|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr/preserve/barn|us/imgs/fb_jtfdcr_preserve_barn.jpg|us/imgs/tn/tn_fb_jtfdcr_preserve_barn.png|title|desc|jtf|js|ht|
/fb/jtfdcr/preserve/easement|us/imgs/fb_jtfdcr_preserv_easement.jpg|us/imgs/tn/tn_fb_jtfdcr_preserve_easement.png|title|desc|jtf|js|ht|
/fb/jtfdcr/preserve/easement_jtf30|us/imgs/fb_jtfdcr_preserve_easement_jtf30.jpg|us/imgs/tn/tn_fb_jtfdcr_preserve_easement_jtf30.png|title|desc|jtf|js|ht|
/fb/jtfdcr/preserve/easement_jtf28|us/imgs/fb_jtfdcr_preserve_easement_jtf28.jpg|us/imgs/tn/tn_fb_jtfdcr_preserve_easement_jtf28.png|title|desc|jtf|js|ht|
/fb/jtfdcr/preserve/driveway|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr_preserve/driveway_jtf30|us/imgs/fb_jtfdcr.jpg|us/imgs/tn/tn_fb_jtfdcr.png|title|desc|jtf|js|ht|
/fb/jtfdcr/trials|us/imgs/fb_jtfdcr_trials.jpg|us/imgs/tn/tn_fb_jtfdcr_trials.png|title|desc|jtf|js|ht|
/fb/jtfdcr/trial1|us/imgs/fb_jtfdcr_trial1_judge_.jpg|us/imgs/tn/tn_fb_jtfdcr_trial1_judge_.png|title|desc|jtf|js|ht|
/fb/jtfdcr/trial2|us/imgs/fb_jtfdcr_trial2_judge_schrader.jpg|us/imgs/tn/tn_fb_jtfdcr_trial2_judge_schrader.png|title|desc|jtf|js|ht|
/fb/jtfdcr/trial3|us/imgs/fb_jtfdcr_trial3_judge_brown.jpg|us/imgs/tn/tn_fb_jtfdcr_trial3_judge_brown.png|title|desc|jtf|js|ht|
/fb/jtfdcr/trial4|us/imgs/fb_jtfdcr_trial4_judge_.jpg|us/imgs/tn/tn_fb_jtfdcr_trial4_judge_.png|title|desc|jtf|js|ht|
/fb/jtfdcr/trial|us/imgs/fb_jtfdcr_trial.jpg|us/imgs/tn/tn_fb_jtfdcr_trial.png|title|desc|jtf|js|ht|
/fb/jtfinc/mag|us/imgs/fb_jtfinc.jpg|us/imgs/tn/tn_fb_jtfinc.png|title|desc|jtf|js|ht|
/fb/byrdpucker/mag|us/imgs/fb_byrdpucker.jpg|us/imgs/tn/tn_fb_byrdpucker.png|title|desc|jtf|js|ht|
/fb/redeclaration_of_independance/mag/|us/jkwii4trusstee/mag/pages/1.jpg|us/jkwii4trusstee/mag/pages/1.jpg|
/fb/jkwii4trustee/|us/jkwii4trusstee/mag/pages/1.jpg|us/jkwii4trusstee/mag/pages/1.jpg|
/fb/jmh/|us/jmh/mag/pages/1.jpg|us/jmh/mag/pages/1.jpg|
/fb/kagawa/|us/kagawa/mag/pages/1.jpg|us/kagawa/mag/pages/1.jpg|
/fb/kids/|us/kids/mag/pages/1.jpg|us/kids/mag/pages/1.jpg|
/fb/take_a_neighbor2jail_day|us/imgs/fb_take_a_neighbor2jail_day.jpg/|us/take_a_neighbor2jail_day.jpg|us/imgs/fb_take_a_neighbor2jail_day.jpg|
/fb/who2jail|us/imgs/fb_take_a_neighbor2jail_day.jpg/|us/take_a_neighbor2jail_day.jpg|us/imgs/fb_take_a_neighbor2jail_day.jpg|
/fb/jtfdcr/trials.html/|us/jtfdcr/imgs/trials.jpg|us/jtfdcr/imgs/trials.jpg|
/fb/jtfdcr/trial1_judge_/|us/jtfdcr/imgs/trial1_judge.jpg|us/jtfdcr/imgs/trial1_judge.jpg|
/fb/jtfdcr/trial2_judge_schrader/|us/jtfdcr/imgs/trial2_judge_schrader.jpg|us/jtfdcr/imgs/trial2_judge_schrader.jpg|
/fb/jtfdcr/trial3_judge_brown/|us/jtfdcr/imgs/trial3_judge_brown.jpg|us/jtfdcr/imgs/trial3_judge_brown.jpg|
/fb/jtfdcr/trial4_judge.html/|us/jtfdcr/imgs/trial2_judge_schrader.jpg|us/jtfdcr/imgs/trial4_judge.jpg|
/fb/med/|us/imgs/fb_med.jpg|us/imgs/fb_tn_fb_med.png|
/fb/law/|us/imgs/fb_law.jpg|us/imgs/tn/tn_fb_law.png|
/fb/templets/basic/|us/templets/basic/pages/1.jpg|us/templets/basic/pages/1.jpg|
/fb/templets/mag/|us/templets/mag/pages/1.jpg|us/templets/mag/pages/1.jpg|
/fb/templets/bible/|us/templets/mag/pages/1.jpg|us/templets/mag/pages/1.jpg|
/fb/templets/magazine/|us/templets/magazine/pages/1.jpg|us/templets/magazine/pages/1.jpg|
/fb/templets/book/|us/templets/magazine/pages/1.jpg|us/templets/magazine/pages/1.jpg|`.split("\n");
			return( fb_links );
			}

		function load_gif_links() {
			load_gif_tek_links();
			load_gif_orbs_links();
			load_gif_cute_links();
			}


		function load_gif_tek_links() {
			var j=0;
			var gif_tek_links = new Array();
gif_tek_links =
`/imgs/anim/alien/tek/|/imgs/anim/alien/tek/afda.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/asdfadfad.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/cityspiral.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/lite1.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/lite2.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/litecrystle.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/med1.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/med5.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/med6.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek1.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek12.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek17.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek3.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek5.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek7.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek8.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek9.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/memcore.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/merd2.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/octopus.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/org1.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/photons.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/pip2.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/pulsehelix.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/smoke.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/tesla.gif
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/wave.gif`.split("\n");
//			alert( "BUGS_4330 gif_tek_links="+gif_tek_links );
			return( gif_tek_links );
			}

		function load_gif_orbs_links() {
			var j=0;
			var gif_orbs_links = new Array();
gif_orgs_links =
`/imgs/anim/alien/tek/|/imgs/anim/alien/tek/afda.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/asdfadfad.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/cityspiral.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/lite1.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/lite2.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/litecrystle.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/med1.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/med5.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/med6.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek1.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek12.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek17.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek3.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek5.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek7.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek8.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/mek9.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/memcore.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/merd2.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/octopus.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/org1.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/photons.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/pip2.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/pulsehelix.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/smoke.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/tesla.gif|||||
/imgs/anim/alien/tek/|/imgs/anim/alien/tek/wave.gif|||||`.split("\n");
			return( gif_orbs_links );
			}




		function load_gif_cute_links() {
			var j=0;
			var gif_cute_links = new Array();
gif_cute_links =
`/imgs/anim/cute/|/imgs/anim/cute/boop.gif
/imgs/anim/cute/|/imgs/anim/cute/CA
/imgs/anim/cute/|/imgs/anim/cute/cakelite.gif
/imgs/anim/cute/|/imgs/anim/cute/catas.gif
/imgs/anim/cute/|/imgs/anim/cute/cats.gif
/imgs/anim/cute/|/imgs/anim/cute/cd81506101b9407dec74b5635a70fb16.gif
/imgs/anim/cute/|/imgs/anim/cute/crayons.gif
/imgs/anim/cute/|/imgs/anim/cute/dogconfusion.gif
/imgs/anim/cute/|/imgs/anim/cute/fireworks.gif
/imgs/anim/cute/|/imgs/anim/cute/fireworks13.gif
/imgs/anim/cute/|/imgs/anim/cute/fireworks3.gif
/imgs/anim/cute/|/imgs/anim/cute/fireworks4.gif
/imgs/anim/cute/|/imgs/anim/cute/gipdicehy.gif
/imgs/anim/cute/|/imgs/anim/cute/gipdisneyhy.gif
/imgs/anim/cute/|/imgs/anim/cute/gipfadfahy.gif
/imgs/anim/cute/|/imgs/anim/cute/kid.gif
/imgs/anim/cute/|/imgs/anim/cute/party.gif
/imgs/anim/cute/|/imgs/anim/cute/photonorb.gif
/imgs/anim/cute/|/imgs/anim/cute/sfg.gif
/imgs/anim/cute/|/imgs/anim/cute/boop.gif
/imgs/anim/cute/|/imgs/anim/cute/CA
/imgs/anim/cute/|/imgs/anim/cute/cakelite.gif
/imgs/anim/cute/|/imgs/anim/cute/catas.gif
/imgs/anim/cute/|/imgs/anim/cute/cats.gif
/imgs/anim/cute/|/imgs/anim/cute/cd81506101b9407dec74b5635a70fb16.gif
/imgs/anim/cute/|/imgs/anim/cute/crayons.gif
/imgs/anim/cute/|/imgs/anim/cute/dogconfusion.gif
/imgs/anim/cute/|/imgs/anim/cute/fireworks.gif`.split("\n");
			return( gif_cute_links );
			}

		function load_if_links() {
			var j=0;
			var if_links = new Array();
if_links =
`/us/gofunwii/|us/imgs/fb_gofunwii_mag.jpg|us/imgs/tn/tn_fb_gofunwii_mag.png|gofunwii
/us/byrdpucker/|us/imgs/fb_byrdpucker.jpg|us/imgs/tn/tn_fb_byrdpucker|byrdpucker
/us/go/|us/imgs/fb_go.jpg|us/imgs/tn/tn_fb_go.png|go
/us/iperms/|us/imgs/fb_iperms.jpg|us/imgs/tn/tn_fb_iperms.png|title|desc|mil|js|ht|`.split("\n");
			}

		function load_ko_links() {
			var j=0;

ko_links =
`/blackboard.html|/imgs/links/blackboard.png|blackboard|/imgs/btn/koeye.png
/jkwii/js/threejs/examples/index.html|/imgs/links/index_js3d.png|index_js3d|/imgs/btn/koeye.png
/ko/svc/js/stemkoskijs/Three.js/index.html|/imgs/links/index_js3d-stemkoski.png|index_js3d-stemkoski|/imgs/btn/koeye.png
/jkwii/js/gojs/index.html|/imgs/links/index_jsgo.png|index_jsgo|/imgs/btn/koeye.png
/index_jsdk.html|/imgs/links/index_jsdk.png|index_jsdk|/imgs/btn/koeye.png
/jkwii/koh5_globe/koh5_globe.html|/imgs/links/koh5_globe.png|koh5_globe|/imgs/btn/koeye.png
/jkwii/aud/keybd/index.html|/imgs/links/index_jskb.png|index_jskb|/imgs/btn/koeye.png
/svc/kokbdm/index.html|/imgs/links/index_jskb-dm.png|index_jskb-dm|/imgs/btn/koeye.png
/svc/kokbdms/index.html|/imgs/links/index_jskb-dms.png|index_jskb-dms|/imgs/btn/koeye.png
/piano.html|/imgs/links/index_piano.png|index_piano|/imgs/btn/koeye.png
/jkwii/aud/piano_uri/koh5_piano_uri.html|/imgs/links/index_jskb-uri.png|index_jskb_uri|/imgs/btn/koeye.png
/ko/svc/js/stemkoskijs/index.html|/imgs/links/index_js3d-stemkoski.png|index_js3d-stemkoski|/imgs/btn/koeye.png
/ko/svc/aud/mrcoles/koh5_mrcoles.html|/imgs/links/mrcoles.png|mrcoles|/imgs/btn/koeye.png
http://effectgames.com/demos/canvascycle/|/imgs/links/index_effectgames.png|index_effectgames|/imgs/btn/koeye.png
https://www.leshylabs.com/apps/sfMaker/|/imgs/links/index_sfmaker.png|index_sfmaker|/imgs/btn/koeye.png
https://dragongoserver.net/|/imgs/links/index_dgs.png|index_dgs|/imgs/btn/koeye.png
https://dragongoserver.net/|/imgs/links/index_dgs.png|index_dgs|/imgs/btn/koeye.png
/ko_center/ko_center.php|/imgs/links/ko_center.png|ko_center|/imgs/btn/kob.png
/ko_saic/ko_saic.php|/imgs/links/ko_saic.png|ko_saic|/imgs/btn/kob.png
/index_kt.html|/imgs/links/index_kt.png|index_kt|/imgs/btn/kob.png
/index_jtf.html|/imgs/links/index_jtf.png|index_jtf|/imgs/btn/kob.png
/index2big.html|/imgs/links/index2big.png|index2big|/imgs/btn/kob.png
/index2big.htm|/imgs/links/index2big_noel.png|index2big_noel|/imgs/btn/kob.png
/jkwii/whiteboard.html|/imgs/links/whiteboard.png|whiteboard|/imgs/btn/koeye.png`.split("\n");
//			alert( "BUGS_load_ko_links="+ko_links);
			return( ko_links );
			}



		function load_hllinks() {
var hllinks = `
http://lawdonovan.com|/imgs/us/lawdonovan.png|law_donovan|/imgs/btn/koeye.png|law
http://nathanscohen.com/|/imgs/us/law_cohen_nathan_s.png|law__cohen_nathan_s|/imgs/btn/koeye.png|law
`;



			}

		function load_us_links() {
			var j=0;
//			https://www.yelp.com/biz_photos/rechtin-family-and-cosmetic-dental-care-st-louis-2?adjust_creative=dWJMtmYxpd5N5yoyzSuhtA&utm_campaign=yelp_api&utm_medium=api_v2_business&utm_source=dWJMtmYxpd5N5yoyzSuhtA|
us_links =
`/fb/med/kov_rechtin.html|/imgs/us/med_rechtin.png|med_rechtin|/imgs/btn/koeye.png|med
https://www.muenkstax.com|/imgs/us/muenks_tax.png|acct_muenks|/imgs/btn/koeye.png|biz
http://lawdonovan.com|/imgs/us/lawdonovan.png|law_donovan|/imgs/btn/koeye.png|law
http://nathanscohen.com/|/imgs/us/law_cohen_nathan_s.png|law__cohen_nathan_s|/imgs/btn/koeye.png|law
http://501lawfirm.com/partners/greg-luber/|/imgs/us/law_luber_greg.png|law_luber_greg|/imgs/btn/koeye.png|law
http://lawdonovan.com|/imgs/us/lawdonovan.png|law_donovan|/imgs/btn/koeye.png|law
http://www.missouriemploymentlawattorney.com/|/imgs/us/law_kjd.png|law_kjd|/imgs/btn/koeye.png|law
https://www.facebook.com/Law-Offices-of-Kevin-J-Dolley-LLC-341402859203412/|/imgs/us/law_kjd.png|law_kjd|/imgs/btn/koeye.png|law
http://www.missouriemploymentlawattorney.com/Attorney-Profiles/Mark-Obermeyer.aspx|/imgs/us/law_obermeyer_mark.png|law_kjd_om|/imgs/btn/koeye.png|law
http://501lawfirm.com/|/imgs/us/law_law501.png|law_law501|/imgs/btn/koeye.png|law
http://501lawfirm.com/partners/greg-luber/|/imgs/us/law_luber_greg.png|law_luber_greg|/imgs/btn/koeye.png|law
http://501lawfirm.com/partners/thomas-burke|/imgs/us/law_burke_thomas.png|law_burke_thomas|/imgs/btn/koeye.png|law
http://501lawfirm.com/partners/eric-wulff|/imgs/us/law_wulff_eric.png|law_wulff_eric|/imgs/btn/koeye.png|law
http://501lawfirm.com/partners/thomas-flach|/imgs/us/law_flach_thomas.png|law_flach_thomas|/imgs/btn/koeye.png|law
http://501lawfirm.com/partners/james-briscoe|/imgs/us/law_briscoe_james.png|law_briscoe_james|/imgs/btn/koeye.png|law
http://501lawfirm.com/partners/joseph-briscoe|/imgs/us/law_briscoe_joseph.png|law_briscoe_joseph|/imgs/btn/koeye.png|law
https://www.legaldirectories.com/Lawson-Terry-L-Jr-513853-Atty.aspx|/imgs/us/law_lawson_l_terry.png|law_lawson_terry|/imgs/btn/koeye.png|law
https://www.linkedin.com/in/terry-lawson-a2398ba|/imgs/us/law_lawson_l_terry.png|law_lawson_terry|/imgs/btn/koeye.png|law
https://www.legaldirectories.com/Lawson-Terry-L-Jr-513853-Atty.aspx|/imgs/us/law_lawson_l_terry.png|law_lawson_terry|/imgs/btn/koeye.png|law
https://lsem.org/|/imgs/us/law_lsem.png|law_lsem|/imgs/btn/koeye.png|law
https://opengovny.com/attorney/3064664|/imgs/us/law_lsem.png|law_lsem_allen_kim|/imgs/btn/koeye.png|law
https://www.legalhandle.com/pro-bono-attorneys-Missouri.html|/imgs/us/law_probono.png|law_probono|/imgs/btn/koeye.png|law
http://stlouisinternship.org/|/imgs/us/edu_slip.png|edu_slip|/imgs/btn/koeye.png|edu
https://www.linkedin.com/in/alan-cohen-2314473b/|/imgs/us/law_cohen_alan_w.png|law__cohen_alan_w|/imgs/btn/koeye.png|law
https://twitter.com/AlanWCohenEsq|/imgs/us/cohen_alan_w_twitter.png|cohen_alan_w_twitter|/imgs/btn/koeye.png|law
http://www.primerus.com/attorneys/alexander-h-kuehling-esq-rosenblum-goldenhersh-st-louis-missouri-mo.htm|/imgs/us/law_kuehling_alexander.png|law_law_kuehling_alexander|/imgs/btn/koeye.png|law
http://elsterlaw.com/henry-elster-attorney-missouri-best/|/imgs/us/law_elster_henry.png|law_elster_henry|/imgs/btn/koeye.png|law
https://pview.findlaw.com/view/2830721_1|/imgs/us/law_walters_alan.png|law_walters_alan|/imgs/btn/koeye.png|law
https://www.thompsoncoburn.com/|/imgs/us/law_thompson_coburn.png|law__thompson_coburn|/imgs/btn/koeye.png|law
http://koreintillery.com/|/imgs/us/law_korein_tillery.png|law_korein_tillery|/imgs/btn/koeye.png|law
http://www.smithbrownllc.com/|/imgs/us/law_smith_brown.png|law_smith_brown|/imgs/btn/koeye.png|law
http://www.fdazol.com/|/imgs/us/law_azol.png|law_azol_f|/imgs/btn/koeye.png|law
https://jmhalumni.com|/imgs/us/jmhalumni.png|ed_jmhalumni|/imgs/btn/koeye.png|edu
https://johnmarshallhighschool.com|/imgs/us/johnmarshallhighschool.png|ed_johnmarshallhighschool|/imgs/btn/koeye.png|edu
https://www.greatschools.org/kentucky/brandenburg/1993-Brandenburg-High-School/|/imgs/us/brandenburg_highschool.png|ed_brandenburg-highschool|/imgs/btn/koeye.png|edu
https://www.hazelwoodschools.org/Page/3143|/imgs/us/hazelwood_schools.png|ed_hazelwood_schools|/imgs/btn/koeye.png|edu
https://bw.edu|/imgs/us/bw.png|ed_bw|/imgs/btn/koeye.png|edu
http://oldtowndonuts.com|/imgs/us/oldtowndonuts.png|food_oldtowndonuts|/imgs/btn/koeye.png|food
http://farkaspastries.com|/imgs/us/farkaspastries.png|food_farkaspastries|/imgs/btn/koeye.png|food
https://www.facebook.com/HansaImportHouse|/imgs/us/hansaimporthouse.png|food_hansaimporthouse|/imgs/btn/koeye.png|food
http://havanagrillco.com|/imgs/us/havanagrillco.png|food_havanagrillco|/imgs/btn/koeye.png|food
http://spiros-restaurant.com|/imgs/us/spiros_restaurant.png|food_spiros_restaurant|/imgs/btn/koeye.png|food
https://www.opentable.com/jake-and-tellys-greek-taverna?page=1|/imgs/us/food_jake_tellys.png|food_jake_tellys|/imgs/btn/koeye.png|food
http://edelweissrest.com|/imgs/us/edelweissrest.png|food_edelweissrest|/imgs/btn/koeye.png|food
http://bierwerks.com|/imgs/us/food_bierwerks.png|food_bierwerks|/imgs/btn/koeye.png|food
http://www.savellispizzapastasubs.com/|/imgs/us/food_savellispizza.png|food_savellispizza|/imgs/bmtn/koeye.png|food
https://www.facebook.com/woohoogreekfood2/|/imgs/us/woohoogreekfood2.png|food_woohoogreekfood2|/imgs/btn/koeye.png|food
https://www.facebook.com/groups/9700pagealumni/|/imgs/us/page9700.png|mil-page9700|/imgs/btn/koeye.png|mil
http://johnmarshallhighschool.net/cleveland-oh/alumni-by-class.html|/imgs/us/jmhalum.png|edu-jmhalum|/imgs/btn/koeye.png|edu
https://bdo.com/about/us-locations/bdo-st-louis|/imgs/us/bdo-stl.png|acct_bdo-stl|/imgs/btn/koeye.png|acct
https://bdo.com/about/us-locations/bdo-cleveland-office|/imgs/us/bdo-cle.png|acct_bdo-cle|/imgs/btn/koeye.png|acct
https://www.northwesternmutual.com/|/imgs/us/biz_northwestmutual.png|northwestmutual|/imgs/btn/koeye.png|acct
http://www.gatewayloan.com/|/imgs/us/gateway_mortgage.png|gateway_mortgage|/imgs/btn/koeye.png|acct
https://checonsulting.com|/imgs/us/checonsulting.png|biz_checonsulting|/imgs/btn/koeye.png|biz
http://saic.com|/imgs/us/saic.png|saic|/imgs/btn/koeye.png|biz
http://leidos.com|/imgs/us/leidos.png|leidos|/imgs/btn/koeye.png|biz
/fb/focus|/imgs/us/focus_solutions.png|focus_solutions|/imgs/btn/koeye.png|biz
http://www.finduslocal.com/hardware-stores/kentucky/brandenburg/allens-s-t-hardware-inc|/imgs/us/biz_allens_hardware.png|biz_allens_hardware|/imgs/btn/koeye.png|biz
http://growwarehouse.com|/imgs/us/grow_warehouse.png|grow_warehouse|/imgs/btn/koeye.png|biz
https://www.facebook.com/avondanceandmartialarts|/imgs/us/avondanceandmartialarts.png|avondanceandmartialarts|/imgs/btn/koeye.png|phy
https://www.facebook.com/avondanceandmartialarts|/imgs/us/avondanceandmartialarts.png|avondanceandmartialarts|/imgs/btn/koeye.png|phy
http://www.savellidanceandmartialarts.com/?load=html|/imgs/us/savelli_dance_martialarts.png|savelli_dance_martialarts|/imgs/btn/koeye.png|phy
http://myfusiondance.com/?load=html|/imgs/us/fusion_dance.png|fusion_dance|/imgs/btn/koeye.png|phy
http://www.superseriesbaseball.com/|/imgs/us/super_series_baseball.png|super_series_baseball|/imgs/btn/koeye.png|phy

https://ftknox.afceachapters.org/|/imgs/us/afcea_knox.png|afcea_knox|/imgs/btn/koeye.png|org
https://scott.afceachapters.org/|/imgs/us/afcea_scott.png|afcea_scott|/imgs/btn/koeye.png|org
https://www.ble-t.org/|/imgs/us/ble.png|ble|/imgs/btn/koeye.png|org
http://www.doevalley.org/|/imgs/us/doe_valley.png|doe_valley|/imgs/btn/koeye.png|org

http://www.chapelofthecross.org/|/imgs/us/chapel_of_the_cross.png|chapel_of_the_cross|/imgs/btn/koeye.png|rel
https://www.lds.org/temples/details/st.-louis-missouri-temple|/imgs/us/lds_stl.png|lds_stl|/imgs/btn/koeye.png|rel
https://www.bethanyenglish.org/|/imgs/us/bethany_english_lutheran.png|bethany_english_lutheran|/imgs/btn/koeye.png|rel
https://www.meadecountymessenger.com/|/imgs/us/meade_county_messenger.png|meade_county_messenger|/imgs/btn/koeye.png|media
index_jtfdcr.html|/imgs/us/jtfdcr.png|jtfdcr|/imgs/btn/koeye.png|media
https://mars.jpl.nasa.gov/msl/multimedia/raw/?s=#/?slide=2088|/imgs/us/mars_jpl_nasa.png|mars_jpl_nasa|/imgs/btn/koeye.png|sci
https://mars.nasa.gov/mer/gallery/all/opportunity.html|/imgs/us/mars_nasa_gov.png|mars_nasa_gov|/imgs/btn/koeye.png|sci
index_jtfdcr.html|/imgs/us/jtfdcr.png|jtfdcr|/imgs/btn/koeye.png|media`.split("\n");
			return( us_links );
			}



		function load_u_links() {
			var j=0;
u_links =
`http://lawdonovan.com|/imgs/us/lawdonovan.png|law_donovan|/imgs/btn/koeye.png|law
http://nathanscohen.com/|/imgs/us/law_cohen_nathan_s.png|law__cohen_nathan_s|/imgs/btn/koeye.png|law
https://www.linkedin.com/in/alan-cohen-2314473b/|/imgs/us/law_cohen_alan_w.png|law__cohen_alan_w|/imgs/btn/koeye.png|law
https://twitter.com/AlanWCohenEsq|/imgs/us/cohen_alan_w_twitter.png|cohen_alan_w_twitter|/imgs/btn/koeye.png|law
http://www.primerus.com/attorneys/alexander-h-kuehling-esq-rosenblum-goldenhersh-st-louis-missouri-mo.htm|/imgs/us/law_kuehling_alexander.png|law_law_kuehling_alexander|/imgs/btn/koeye.png|law
http://elsterlaw.com/henry-elster-attorney-missouri-best/|/imgs/us/law_elster_henry.png|law_elster_henry|/imgs/btn/koeye.png|law
https://pview.findlaw.com/view/2830721_1|/imgs/us/law_walters_alan.png|law_walters_alan|/imgs/btn/koeye.png|law
https://www.thompsoncoburn.com/|/imgs/us/law_thompson_coburn.png|law__thompson_coburn|/imgs/btn/koeye.png|law
http://koreintillery.com/|/imgs/us/law_korein_tillery.png|law_korein_tillery|/imgs/btn/koeye.png|law
http://www.smithbrownllc.com/|/imgs/us/law_smith_brown.png|law_smith_brown|/imgs/btn/koeye.png|law`.split("\n");
			return( u_links );
			}



		function load_now_links() {
			var j=0;
now_links =
`http://index_party.html|/imgs/us/lawdonovan.png|law_donovan|/imgs/btn/koeye.png|law
http://index_jtfdc.com/|/imgs/us/law_cohen_nathan_s.png|law__cohen_nathan_s|/imgs/btn/koeye.png|law
http://index_jtfinc.com/|/imgs/us/law_cohen_nathan_s.png|law__cohen_nathan_s|/imgs/btn/koeye.png|law
http://index_stlc.com/|/imgs/us/law_cohen_nathan_s.png|law__cohen_nathan_s|/imgs/btn/koeye.png|law
http://index_jtfdcr.com/|/imgs/us/law_cohen_nathan_s.png|law__cohen_nathan_s|/imgs/btn/koeye.png|law
http://index_byrdpucker.com/|/imgs/us/law_cohen_nathan_s.png|law__cohen_nathan_s|/imgs/btn/koeye.png|law`.split("\n");
			return( now_links );
			}


		function show_svc_links(mode) {
			svc_links = load_svc_links();
			htmout_svc_links = "";
			htmout_svc_linkz = "";
			for (i = 0; i < svc_links.length; i++) {
				my_btnimg = "/imgs/btn/kib.png";
				my_href = svc_links[i].split("|")[0];
				my_popimg = svc_links[i].split("|")[1];
				my_alt = svc_links[i].split("|")[2];

//				htmout_svc_linkz += '<div  class="drag" name="'+my_alt+'" >\n';
				htmout_svc_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_svc_linkz += '<img id="drg" src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';
//				htmout_svc_linkz += '</div >';

//				htmout_svc_links += '<div  class="drag" name="'+my_alt+'" >\n';
				htmout_svc_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_svc_links += '<img class="drag" id="drg" src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_svc_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
//				htmout_svc_links += '</div >';
				}
			if( mode === 'pop' ) {
				htmout_svc_links += "<br><br>\n";
				var div_svc_links = document.getElementById('div_svc_links');
				div_svc_links.insertAdjacentHTML('beforeend', htmout_svc_links);
				return( htmout_svc_links );
				}

			htmout_svc_linkz += "<br><br>\n";
			var div_svc_linkz = document.getElementById('div_svc_linkz');
			div_svc_linkz.insertAdjacentHTML('beforeend', htmout_svc_linkz);
			return( htmout_svc_linkz );
			}



		function show_fb_links(mode) {
			fb_links = load_fb_links();
			htmout_fb_links = "";
			htmout_fb_linkz = "";
			for (i = 0; i < fb_links.length; i++) {
				my_btnimg = "/imgs/btn/koeye.png";
				my_href = fb_links[i].split("|")[0];
				my_popimg = fb_links[i].split("|")[1];
				my_alt = fb_links[i].split("|")[2];

//				htmout_fb_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_fb_linkz += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_fb_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_fb_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_fb_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_fb_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}

			if( mode === 'pop' ) {
				htmout_fb_links += "<br><br>";
				var div_fb_links = document.getElementById('div_fb_links');
				div_fb_links.insertAdjacentHTML('beforeend', htmout_fb_links);
				return( htmout_fb_links );
				}

			htmout_fb_linkz += "<br><br>";
			var div_fb_linkz = document.getElementById('div_fb_linkz');
			div_fb_linkz.insertAdjacentHTML('beforeend', htmout_fb_linkz);
			return( htmout_fb_linkz );
			}

		function show_gif_tek_links(mode) {
			gif_tek_links = load_gif_tek_links();
			htmout_gif_tek_links = "";
			htmout_gif_tek_linkz = "";
			for (i = 0; i < gif_tek_links.length; i++) {
				my_btnimg = "/imgs/btn/koeye.png";
				my_href = gif_tek_links[i].split("|")[0];
				my_popimg = gif_tek_links[i].split("|")[1];
				my_alt = gif_tek_links[i].split("|")[2];

//				htmout_gif_tek_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_gif_tek_linkz += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_gif_tek_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_gif_tek_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_gif_tek_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_gif_tek_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}

			if( mode === 'pop' ) {
				htmout_gif_tek_links += "<br><br>";
				var div_gif_tek_links = document.getElementById('div_gif_tek_links');
				div_gif_tek_links.insertAdjacentHTML('beforeend', htmout_gif_tek_links);
				return( htmout_gif_tek_links );
				}

			htmout_gif_tek_linkz += "<br><br>";
			var div_gif_tek_linkz = document.getElementById('div_gif_tek_linkz');
			div_gif_tek_linkz.insertAdjacentHTML('beforeend', htmout_gif_tek_linkz);
			return( htmout_gif_tek_linkz );
			}

		function show_gif_orbs_links(mode) {
			gif_orgs_links = load_gif_orbs_links();
			htmout_gif_orbs_links = "";
			htmout_gif_orbs_linkz = "";
			for (i = 0; i < gif_orbs_links.length; i++) {
				my_btnimg = "/imgs/btn/koeye.png";
				my_href = gif_orbs_links[i].split("|")[0];
				my_popimg = gif_orbs_links[i].split("|")[1];
				my_alt = gif_orbs_links[i].split("|")[2];

//				htmout_gif_orbs_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_gif_orbs_linkz += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_gif_orbs_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_gif_orbs_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_gif_orbs_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_gif_orbs_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}

			if( mode === 'pop' ) {
				htmout_gif_tek_links += "<br><br>";
				var div_gif_tek_links = document.getElementById('div_gif_tek_links');
				div_gif_tek_links.insertAdjacentHTML('beforeend', htmout_gif_tek_links);
				return( htmout_gif_tek_links );
				}

			htmout_gif_tek_linkz += "<br><br>";
			var div_gif_tek_linkz = document.getElementById('div_gif_tek_linkz');
			div_gif_tek_linkz.insertAdjacentHTML('beforeend', htmout_gif_tek_linkz);
			return( htmout_gif_tek_linkz );
			}

		function show_gif_cute_links(mode) {
			gif_cute_links = load_gif_cute_links();
			htmout_gif_cute_links = "";
			htmout_gif_cute_linkz = "";
			for (i = 0; i < gif_cute_links.length; i++) {
				my_btnimg = "/imgs/btn/koeye.png";
				my_href = gif_cute_links[i].split("|")[0];
				my_popimg = gif_cute_links[i].split("|")[1];
				my_alt = gif_cute_links[i].split("|")[2];

//				htmout_gif_cute_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_gif_cute_linkz += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_gif_cute_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_gif_cute_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_gif_cute_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_gif_cute_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}

			if( mode === 'pop' ) {
				htmout_gif_cute_links += "<br><br>";
				var div_gif_cute_links = document.getElementById('div_gif_cute_links');
				div_gif_cute_links.insertAdjacentHTML('beforeend', htmout_gif_cute_links);
				return( htmout_gif_cute_links );
				}

			htmout_gif_cute_linkz += "<br><br>";
			var div_gif_cute_linkz = document.getElementById('div_cute_linkz');
			div_gif_cute_linkz.insertAdjacentHTML('beforeend', htmout_cute_linkz);
			return( htmout_gif_cute_linkz );
			}

		function show_if_links(mode) {
			if_links = load_if_links();
			htmout_if_links = "";
			htmout_if_linkz = "";
			for (i = 0; i < if_links.length; i++) {
				my_btnimg = "/imgs/btn/koeye.png";
				my_href = if_links[i].split("|")[0];
				my_popimg = if_links[i].split("|")[1];
				my_alt = if_links[i].split("|")[2];

//				htmout_if_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_if_linkz += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_if_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_if_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_if_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_if_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}

			if( mode === 'pop' ) {
				htmout_if_links += "<br><br>";
				var div_if_links = document.getElementById('div_if_links');
				div_if_links.insertAdjacentHTML('beforeend', htmout_if_links);
				return( htmout_if_links );
				}

			htmout_if_linkz += "<br><br>";
			var div_if_linkz = document.getElementById('div_if_linkz');
			div_if_linkz.insertAdjacentHTML('beforeend', htmout_if_linkz);
			return( htmout_if_linkz );
			}







		function show_ko_links(mode) {
			ko_links = load_ko_links();
			htmout_ko_links = "";
			htmout_ko_linkz = "";
			for (i = 0; i < ko_links.length; i++) {
				my_btnimg = "/imgs/btn/koeye.png";
				my_href = ko_links[i].split("|")[0];
				my_popimg = ko_links[i].split("|")[1];
				my_alt = ko_links[i].split("|")[2];

				htmout_ko_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_ko_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_ko_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_ko_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_ko_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}

			if( mode === 'pop' ) {
				htmout_ko_links += "<br><br>";
				var div_ko_links = document.getElementById('div_ko_links');
				div_ko_links.insertAdjacentHTML('beforeend', htmout_ko_links);
				return( htmout_ko_links );
				}

			htmout_ko_linkz += "<br><br>";
			var div_ko_linkz = document.getElementById('div_ko_linkz');
			div_ko_linkz.insertAdjacentHTML('beforeend', htmout_ko_linkz);
			return( htmout_ko_linkz );
			}



		function show_us_links(mode) {
			us_links = load_us_links();
//			alert( "BUGS_5500 show_us_links us_links="+us_links+" mode="+mode );
			htmout_us_links = "";
			htmout_us_linkz = "";
			for (i = 0; i < us_links.length; i++) {
				my_btnimg = "/imgs/btn/koeye.png";
				my_href = us_links[i].split("|")[0];
				my_popimg = us_links[i].split("|")[1];
				my_alt = us_links[i].split("|")[2];

				htmout_us_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_us_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_us_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_us_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_us_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}

//			alert( "BUGS_5533 htmout_us_linkz ="+htmout_us_linkz+" mode="+mode );
//			alert( "BUGS_5534 htmout_us_links ="+htmout_us_links+" mode="+mode );
//			alert( "BUGS_5535 window.htmout_us_links ="+window.htmout_us_links+" mode="+mode );

			if( mode === 'pop' ) {
				htmout_us_links += "<br><br>";
				var div_us_links = document.getElementById('div_us_links');
				div_us_links.insertAdjacentHTML('beforeend', htmout_us_links);
				return( htmout_us_links );
				}

			htmout_us_linkz += "<br><br>";
			var div_us_linkz = document.getElementById('div_us_linkz');
			div_us_linkz.insertAdjacentHTML('beforeend', htmout_us_linkz);
			return( htmout_us_linkz );
			}







		function show_u_links(mode) {
			u_links = load_u_links();
			htmout_u_links = "";
			htmout_u_linkz = "";
			for (i = 0; i < u_links.length; i++) {
				my_btnimg = "/imgs/btn/koeye.png";
				my_href = u_links[i].split("|")[0];
				my_popimg = u_links[i].split("|")[1];
				my_alt = u_links[i].split("|")[2];

				htmout_u_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_u_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_u_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_u_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_u_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}

			if( mode === 'pop' ) {
				htmout_u_links += "<br><br>";
				var div_u_links = document.getElementById('div_u_links');
				div_u_links.insertAdjacentHTML('beforeend', htmout_u_links);
				return( htmout_u_links );
				}

			htmout_u_linkz += "<br><br>";
			var div_u_linkz = document.getElementById('div_u_linkz');
			div_u_linkz.insertAdjacentHTML('beforeend', htmout_u_linkz);
			return( htmout_u_linkz );
			}



		function show_now_links(mode) {
			now_links = load_now_links();
			htmout_now_links = "";
			htmout_now_linkz = "";
			for (i = 0; i < now_links.length; i++) {
				my_btnimg = "/imgs/btn/koeye.png";
				my_href = now_links[i].split("|")[0];
				my_popimg = now_links[i].split("|")[1];
				my_alt = now_links[i].split("|")[2];

				htmout_now_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_now_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_now_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_now_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_now_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}

			if( mode === 'pop' ) {
				htmout_now_links += "<br><br>";
				var div_now_links = document.getElementById('div_now_links');
				div_now_links.insertAdjacentHTML('beforeend', htmout_now_links);
				return( htmout_now_links );
				}

			htmout_now_linkz += "<br><br>";
			var div_now_linkz = document.getElementById('div_now_linkz');
			div_now_linkz.insertAdjacentHTML('beforeend', htmout_now_linkz);
			return( htmout_now_linkz );
			}

		function show_srv_links(mode) {
			srv_links = load_srv_links();
			htmout_srv_links = "";
			htmout_srv_linkz = "";
			for (i = 0; i < srv_links.length; i++) {
				my_btnimg = "/imgs/btn/kiw.png";
				my_href = srv_links[i].split("|")[0];
				my_popimg = srv_links[i].split("|")[1];
				my_alt = srv_links[i].split("|")[2];

				htmout_srv_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
				htmout_srv_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';

				htmout_srv_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
				htmout_srv_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
				htmout_srv_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
				}
			if( mode === 'pop' ) {
				htmout_srv_links += "<br><br>\n"
				var div_srv_links = document.getElementById('div_srv_links');
				div_srv_links.insertAdjacentHTML('beforeend', htmout_srv_links);
				return( htmout_srv_links );
				}

			htmout_srv_linkz += "<br><br>\n"
			var div_srv_linkz = document.getElementById('div_srv_linkz');
			div_srv_linkz.insertAdjacentHTML('beforeend', htmout_srv_linkz);
			return( htmout_srv_linkz );
			}

//			document.write( htmout_svc_links );
//			document.write( htmout_ko_links );
//			document.write( htmout_srv_links );

//			var div_ko_links = document.getElementById("div_ko_links");
//			var div_ko_links_orig = div_ko_links.innerHTML;
//			alert( "BUGS_500 div_ko_links_orig="+div_ko_links_orig );

//			div_ko_links.innerHTML = "";
//			div_ko_links.appendChild( htmout_ko_links);


// pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq
//
// getElementById("foo").insertAdjacentHTML
// <!-- beforebegin / before -->
// <p>
//   <!-- afterbegin / prepend -->
//   foo
//   <!-- beforeend / append -->
// </p>
// <!-- afterend / after-->
//
//		document.getElementById('foo').insertAdjacentHTML("beforebegin", "<hr>")
//		$('#foo').before("<hr>")
//		document.getElementById('foo').insertAdjacentHTML("afterend", "<hr>")
//		$('#foo').append("<hr>")
//		document.getElementById('foo').insertAdjacentHTML("beforeend", "<hr>")
//		$('#foo').append("<hr>")
//		document.getElementById('foo').insertAdjacentHTML("afterbegin", "<hr>")
//		$('#foo').prepend("<hr>")
//
//	var btn = document.getElementById('btn'); // The button itself with an ID of 'btn'
//	var newButton = '<button>New button</button>'; // New button to be inserted
//	btn.insertAdjacentHTML('afterend', newButton);
//
// bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb
		function show_all_links(mode) {
			show_svc_links(mode);
			show_fb_links(mode);
			show_ko_links(mode);
			show_us_links(mode);
			show_u_links(mode);
			show_now_links(mode);
			show_srv_links(mode);
			}

		</script>







		<script name="script_av_jtf">
			function script_av_jtf(args) {
//			alert( "BUGS_3000 script_av_jtf args="+args );
//			var yt_player="<h1>yt_player</h1>";
//			document.getElementById("div_hl_yt_jtfdc").innerHTML=yt_player;
//			return(yt_player);


			var video_player_jtfdcr = "";
			var avlist_jtfdcr_text ="";
			var video_player_jtfdc = "";
			var avlist_jtfdc_text ="";
			var video_player_jtfinc = "";
			var avlist_jtfinc_text ="";
			var j = 0; var k = 0;
			var avlist = new Array();

avlist_jtfdc_text =
`/index.mp4
yt_paulsimon_you_can_call_me_al_official_chevy_chase|https://www.youtube.com/watch?v=uq-gYOrU8bA
yt_liveholland_20120708_caro_emerald_mistaken_identy|https://www.youtube.com/watch?v=nCw0wlv3pyQ
yt_20110830_wackobunny_fiona_apple_criminal_lyrics_w|https://www.youtube.com/watch?v=iFeYjqidaqw
yt_yankovic_20150404_apples_peaches_pumpkin_pie|https://www.youtube.com/watch?v=rnvUcUm0uaY
/index0.mp4
http://ko2.us/kb/byrdpuckers/vid/huckleberry_hound_17_barbeque_hound.mp4
http://ko2.us/kb/byrdpuckers/vid/doghead_video.mp4
http://ko2.us/kb/jtfdcr/vid/jtfdc_kids/jtfdc_20190525_170229_carter_paityn_josh_frontyard_play.mp4
http://ko2.us/kb/jtfdcr/vid/jtfdc_kids/jtfdc_20190713_2103_jkwiikids_hill_accross_walk.mp4
http://ko2.us/kb/jtfdcr/vid/jtfdc_kids/jtfdc_20190721_1414_jak1kidsout_jkwiipush.mp4
http://ko2.us/kb/jtfdcr/vid/jtfdc_kids/jtfdc_20190731_1859_paityn_jkwiictrctr_woof.mp4
http://ko2.us/kb/jtfdcr/vid/jtfdc_kids/jtfdc_20190329_1211_paityn_carter_rollerskating_court.mp4`;

http://ko2.us/kb/vid/youb/willem_dethouars_kuntao_silat_1996_gulfport_school_tampa-0.mp4
http://ko2.us/kb/vid/youb/willem_dethouars_kuntao_silat_1996_gulfport_school_tampa-1.mp4
http://ko2.us/kb/vid/youb/willem_dethouars_kuntao_silat_1996_gulfport_school_tampa-2.mp4;
// alert( "BUGS_780 avlist_jtfdcr_text="+avlist_jtfdcr_text );

avlist_jtfdcr_text =
`http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0695_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0696_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0697_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0698_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0699_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0700_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0701_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0702_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0703_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0704_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0705_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0706_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0707_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0708_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0709_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0710_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0711_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0712_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0713_20200212_1200_skwii_dolley_call.mp4
http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0714_20200212_1200_skwii_dolley_call.mp4`;
//	alert( "BUGS_1260 avlist_jtfdc_text="+avlist_jtfdcr_text );

// http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0676_20200212_1200_skwii_dolley_call.mp4
// http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0677_20200212_1200_skwii_dolley_call.mp4
// http://ko2.us/fb/law/skwii/vid/tn/tn_IMG_0684_20200212_1200_skwii_dolley_call.mp4';

avlist_jtfinc_text =
`http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20160530_13279559_byrd_trustee_threat.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20170522_1841_byrdpair_taking_jtfdc_sawhorse.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20170805_1400_police_byrddog_call.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20180528_132537_byrd_court_pail_encounter.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20180606_1145_jtf40_driveway_byrdpucker_theft_threadt.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20190300_gardner_cant_control_his_dogs.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20190329_1216_byrd_stealing_milkcrates_court.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20190425_1912_jtf31_dogs_frolic_jkwii_outin.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20190509_1224_jkwii_police_officerbell.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20190516_0820_byrd_seagrest_tresspass_treats.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20190516_1856_skwii_byrdstalk_protection_order-may30_9am.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20190529__byrd_siegrist_dogpatrol.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20190706_1932_jkwii_jtf30_dog_in_our_yard_probems.mp4
http://ko2.us/kb/jtfdcr/vid/jtfinc_neighbors_tiny/jtfdc_20190808_1211_stalkaround_jtf38_seagrist_n_bityelvis2_partyinvite2neighbors.mp4`;
// alert( "BUGS_820 avlist_jtfinc_text="+avlist_jtfinc_text );

			var yt_player="";

			avlist=avlist_jtfdcr_text.split("\n");
//			alert( "BUGS_3070 avlist_jtfdcr len="+avlist.length+" avlist="+avlist );
//			video_player_jtfdcr += '<div id="div_av_jtfdc" >';
			video_player_jtfdcr += '<hr color=red>';
			video_player_jtfdcr += '<hr color=white>';
			video_player_jtfdcr += '<hr color=blue>';
			video_player_jtfdcr += '<hr color=black>';
			video_player_jtfdcr += '<h2>jtfdcr  JamesTownFarms Defford Court Report</h2>';
//			alert( "BUGS_840 video_player_jtfdcr="+video_player_jtfdcr );
			for( j=0; j< avlist.length; j++ ) {
//				if( avid.match('#')) continue;
				if( j == 1 ) {video_player_jtfdcr += '<br><br><hr color=white><hr color=black>';}
				if( j == 4 ) {video_player_jtfdcr += '<br><br><hr color=white><hr color=black>';}
				avid=avlist[j];
//				alert( "BUGS_1730 j="+j+" avid="+avid );
				if( avid.match(/^#/gi)) { continue; }
				if( avid.match(/^\/\//gi)) { continue; }
//				if( avid.match(/^</gi)) {
//					video_player_jtfdcr += avid;
//					continue;
//					}

				if( avid.match(/youtube/gi)) {
					alert( "BUGS_1745 j="+j+" avid="+avid );
//					alert( "BUGS_1730 YOUTUBE avid="+avid );
//					var yt_url=avid.split("|")[avid.split("|").length -1 ];
//					ytid_tn = "/imgs/links/tn/tn_yt.png";
//					var ytid_id = ytid.split("=")[1];
//					ytid_img = "http://i.ytimg.com/vi/" + ytid_id + "/default.jpg";
//					var yt_id = yt_url.split("?")[1];
//					var yt_tn = "http://youtube/i/"+yt_id+"/default.jpg";
//					var yt_player="";
//					yt_player += '<a href="'+yt_url+'" target=_blank class="thumbnail">';
//					yt_player += '	<img src="/imgs/btn/yt.png" border=0 height=100 >';
//					yt_player += '	<span><img src="'+yt_tn+'" border=0 height=200 ></span>';
//					yt_player += '	</a>';
//					alert( "BUGS_1740 av_jtfdcr yt_player="+yt_player );
//					video_player_jtfdcr += yt_player;
					continue;
					}

				video_player_jtfdcr += '<video controls="controls_jtfdcr_'+j+'"';
//				video_player_jtfdcr += '<video controls="controls_jtfdcr"';
				video_player_jtfdcr += '	defaultmuted="" muted="true" ';
				video_player_jtfdcr += '	style="width:640px;height:360px;" ';
//				video_player_jtfdcr += '	poster="/fb/law/imgs/kobubble_jtfdcr.png" ';
//				video_player_jtfdcr += '	poster="/fb/law/imgs/kobubble_jtfdcr.png" ';
				video_player_jtfdcr += '	poster="http://ko2.us/fb/jtfdcr/pages/1.jpg" ';
				video_player_jtfdcr += '	<source src="'+avid+'"';
				video_player_jtfdcr += ' type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;">';
				video_player_jtfdcr += '	</video>';
				}
			video_player_jtfdcr += '	<hr color=black>';
			video_player_jtfdcr += '	<hr color=white>';
//			video_player_jtfdcr += '	</div>';
//			alert( "BUGS_3120 avlist_jtfdcr video_player_jtfdcr="+video_player_jtfdcr );

			avlist=avlist_jtfdc_text.split("\n");
//			video_player_jtfdc += '<div id="div_av_jtfdc" >';
			video_player_jtfdc += '<hr color=black>';
			video_player_jtfdc += '<hr color=white>';
			video_player_jtfdc += '<h2>jtfdc 20200309_0330 JamesTownFarms Deffords Court</h2>';
			for( j=0; j< avlist.length; j++ ) {
				avid=avlist[j];
//				alert( "BUGS_1780 j="+j+" avid="+avid );
				if( avid.match(/^#/gi)) { 
					alert( "BUGS_1790 MATCHpound j="+j+" avid="+avid );
					continue; 
					}
				if( avid.match(/^\/\//gi)) { 
					alert( "BUGS_1791 MATCHslash j="+j+" avid="+avid );
					continue; 
					}
				if( avid.match(/^\</gi)) {
					alert( "BUGS_1792 MATCHhtml j="+j+" avid="+avid );
					video_player_jtfdc += avid;
					continue;
					}

				if( avid.match(/youtube/gi)) {
//					alert( "BUGS_3150 YOUTUBE j="+j+" avid="+avid );
					var yt_url=avid.split("|")[avid.split("|").length -1 ];
					ytid_tn = "/fb/jtfdc/pages/1.jpg";
//					alert( "BUGS_3151 YOUTUBE j="+j+" avid="+avid );
					var ytid_id = avid.split("=")[1];
					ytid_img = "http://i.ytimg.com/vi/" + ytid_id + "/default.jpg";
					var yt_id = yt_url.split("=")[1];
					yt_tn = "http://i.ytimg.com/vi/" + yt_id + "/default.jpg";
					yt_player += '<a href="'+yt_url+'" target=_blank class="thumbnail">';
					yt_player += '	<img src="'+ytid_tn+'" height=100 border=0 >';

					yt_player += '	<span><img src="'+yt_tn+'" height=200 border=0 ></span>';
					yt_player += '	</a>';
//					alert( "BUGS_3170 av_jtfdc video_player_jtfdc="+yt_player );
					continue;
					}


				video_player_jtfdc += '<video controls="controls_jtfdc_'+j+'"';
				video_player_jtfdc += '	defaultmuted="" muted="true" ';
				video_player_jtfdc += '	style="width:640px;height:360px;" ';
//				video_player_jtfdc += '	poster="/fb/law/imgs/kobubble_jtfdc.png" ';
				video_player_jtfdc += '	poster="/fb/jtfdc/pages/1.jpg" ';
				video_player_jtfdc += '   <source src="'+avid+'"';
				video_player_jtfdc += '		type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;">';
				video_player_jtfdc += '	</video>';
				}
//			video_player_jtfdc += '	</div>';
//			alert( "BUGS_3181 video_player_jtfdc="+video_player_jtfdc );
//			alert( "BUGS_3182 yt_player="+yt_player );

			avlist = avlist_jtfinc_text.split("\n");	
//			video_player_jtfinc += '<div id="div_av_jtfinc" >';
			video_player_jtfinc += '<hr color=white>';
			video_player_jtfinc += '<hr color=black>';
			video_player_jtfinc += '<h2>jtfinc: 2016-2020 DONUTVANLAW DOGS HORSES and BYRDS </h2>';
			for( j=0; j< avlist.length; j++ ) {
				avid=avlist[j];
				video_player_jtfinc += '<video controls="controls_jtfdcr_'+j+'"';
				video_player_jtfinc += '	defaultmuted="" muted="true" ';
				video_player_jtfinc += '	style="width:640px;height:360px;" ';
//				video_player_jtfinc += '	poster="/fb/law/imgs/kobubble_jtfinc.png" ';
				video_player_jtfinc += '	poster="/fb/jtfinc/pages/1.jpg" ';
				video_player_jtfinc += '	<source src="'+avid+'"';
				video_player_jtfinc += ' 	  type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;">';
				video_player_jtfinc += '	</video>';
				}
			video_player_jtfinc += '	<hr color=black>';
			video_player_jtfinc += '	<hr color=red>';
			video_player_jtfinc += '	<hr color=white>';
			video_player_jtfinc += '	<hr color=blue>';
//			video_player_jtfinc += '	</div>';

			yt_player += "<br><br><br><br>";
			yt_player += "<br><br><br><br>";

//			alert( "BUGS_805 video_player="+video_player );
//			document.write( video_player );
//			document.write( video_player );
//			document.getElementById('div_av').insertAdjacentHTML("afterbegin", video_player);

//			document.getElementById('div_av').insertAdjacentHTML("afterbegin", video_player_jtfdc);
//			document.getElementById('div_av').insertAdjacentHTML("afterbegin", video_player_jtfinc);
//			document.getElementById('div_av').insertAdjacentHTML("afterbegin", video_player_jtfdcr);

			document.getElementById('div_hl_yt_jtfdc').innerHTML = yt_player;
////			document.getElementById('div_av_jtfdc').innerHTML = video_player_jtfdc;
////			document.getElementById('div_yt_jtfdc').innerHTML = yt_player;
////			document.getElementById('div_av_jtfinc').innerHTML = video_player_jtfinc;
////			document.getElementById('div_av_jtfdcr').innerHTML = video_player_jtfdcr;
//			alert( "BUGS_1350 script_av_jtf video_player_jtfdc="+video_player_jtfdcr );

			}
		</script>

<!--
	<script id="script_ajax_urlfunc">
		ajax_urlfunc("url-1", myFunction1);
		ajax_urlfunc("url-2", myFunction2);

		function ajax_urlfunc(url, cFunction) {
			var xhttp;
			xhttp = new XMLHttpRequest();
			xhttp.onreadystatechange = function() {
				if (this.readyState == 4 && this.status == 200) {
					cFunction(this);
					}
				};
			xhttp.open("GET", url, true);
			xhttp.send();
			}

		function myFunction1(xhttp) {
			alert( "myfunction1" );
			}
		function myFunction2(xhttp) {
			alert( "myfunction1" );
			}
		</script>
	-->

	<script id="script_getqueryvariable" >
		function getqueryvariable(variable) {
			alert( "BUGS_1555 GETQUERYVARIABLE" );
			var query = window.location.search.substring(1);
			var vars = query.split("&");
			for (var i=0;i<vars.length;i++) {
				var pair = vars[i].split("=");
				if(pair[0] == variable){return pair[1];}
				}
			return(false);
			}	
		</script>

	<script id="script_hideshow">
		function script_hideshow(element) {
			var htmbugs = ""; 
			htmbugs += '<div id="div_htmbugs">';
			htmbugs += '	<h1>div_htmbugs</h1>';
			htmbugs += '	<pre>';

			var style_d = "_style_d";
			var style_v = "_style_v";
//			alert( "BUGS_101 element="+element );
			var htmout = ""; var j=0; var k=0;
			var divid = "";
			var div_divid = "";
//			var divids = "head jtfdc jtfinc jtfdcr av db dd fb pn sl tl tm yt zm".split(" ");
			var divids = "av_jtfdc av_jtfinc av_jtfdcr <br> av db dd fb pn sl tl tm yt zm <br> jtfdc jtfinc jtfdcr <br> head memes kov tail".split(" ");


//			htmout += '<div id="div_buttons_hideshow">';
////			htmout += '<img src="/imgs/btn/koeyeb_alloff.png" onclick="script_hideshow(\'alloff\'); return false;">';
////			htmout += '<img src="/imgs/btn/koeyew_allon.png" onclick="script_hideshow(\'allon\'); return false;">';
////			htmout += '<br>';
//			alert( "BUGS_2500 element="+element );
			if(( element == "alloff" )) {
 				for( j=0; j<divids.length; j++ ) {
 					divid=divids[j];
					div_divid="div_"+divid;
					if( divid == "<br>" ) { continue; }
					document.getElementById(div_divid).style.display="none";
//					var disp = document.getElementById(div_divid).style.display;
//					alert( "BUGS_2511_allof j="+j+" disp="+disp+" htmout="+htmout+ "element="+element );
					}
				}
			if( element == "allon" )  {
//				alert( "BUGS_2510 allon" );
 				for( j=0; j<divids.length; j++ ) {
 					divid=divids[j];
					div_divid="div_"+divid;
					if( divid == "<br>" ) { continue; }
					document.getElementById(div_divid).style.display="inline";
//					var disp = document.getElementById(div_divid).style.display;
//					alert( "BUGS_2521_allon j="+j+" disp="+disp+" htmout="+htmout+ "element="+element );
					}
				}

			htmout += '<hr color=white>';
			htmout += '<img src="/imgs/btn/koeye_'+"alloff"+'.png" height=50 onclick="script_hideshow(\''+"alloff"+'\');return false;" alt="btn_'+"alloff"+'">';
			htmout += '<img src="/imgs/btn/koeye_'+"allon"+'.png" height=50 onclick="script_hideshow(\''+"allon"+'\');return false;" alt="btn_'+"allon"+'">';
			htmout += '<br>';


 			for( j=0; j<divids.length; j++ ) {
 				divid=divids[j];
				div_divid="div_"+divid;
				if( divid == "<br>" ) {
					htmout += "<br>";
					continue;
					}
//				document.getElementById("test").style.visibility = "hidden";
//				document.getElementById("test").style.display = "none";


				style_v = document.getElementById(div_divid).style.visibility;
//				alert( "BUGS_132 j="+j+" style_d="+style_d+"  style_v="+style_v );
//				document.getElementById(div_divid).style.display = "none";

				style_d = document.getElementById(div_divid).style.display;
//				alert( "BUGS_133 j="+j+" style_d="+style_d+" style_v="+style_v );

				htmbugs += "htmbugs j="+j+" divid="+divid;
				htmbugs += " -== div_divid="+div_divid;
				htmbugs += " element="+element;
				htmbugs += " =- -=";
				htmbugs += " style_d="+style_d+"";
				htmbugs += " style_v="+style_v+"";
				htmbugs += "====================\n";


//				if( div_divid.match(/element/) != '') {
//				if( div_divid.match(element)) {
//				if( div_divid == element ) {
//					alert( "BUGS_141 _MATCH_ div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v );
//					htmbugs += "BUGS_141 _MATCH_ div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
//					}
//				else {
//					alert( "BUGS_142 nomatch div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v );
//					htmbugs += "BUGS_142 _match_ div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
//					}


				if( div_divid == element ) {
					style_d = document.getElementById(div_divid).style.display;
//					alert( "BUGS_160 MATCH div_divid="+div_divid+" element="+element+" style_d="+style_d );
					if( document.getElementById(div_divid).style.display == "none" ) {
						htmout += '<img src="/imgs/btn/koeyew_'+divid+'.png" height=50 onclick="script_hideshow(\''+div_divid+'\');return false;" alt="btn_'+divid+'_hide">';
//						alert( "BUGS_161 _DIV_DIVID-NONE div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v );
						htmbugs += "BUGS_161 _DIV_DIVID-NONE div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
						document.getElementById(div_divid).style.display="inline";
						}
					else {
						htmout += '<img src="/imgs/btn/koeyeb_'+divid+'.png" height=50 onclick="script_hideshow(\''+div_divid+'\');return false;" alt="btn_'+divid+'_hide">';
//						alert( "BUGS_162 DIV_DIVID-INLINE div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v );
						htmbugs += "BUGS_162 DIV_DIVID-INLINE div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
						document.getElementById(div_divid).style.display="none";
						}
					}


				if( div_divid != element ) {
//					alert( "BUGS_170 rest div_divid="+div_divid+" element="+element );
					if( document.getElementById(div_divid).style.display == "none" ) {
						htmout += '<img src="/imgs/btn/koeyeb_'+divid+'.png" height=50 onclick="script_hideshow(\''+div_divid+'\');return false;" alt="btn_'+divid+'">';
//						alert( "BUGS_171 div_divid_none div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v );
						htmbugs += "BUGS_171 div_divid_none div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
						}
					else {
						htmout += '<img src="/imgs/btn/koeyew_'+divid+'.png" height=50 onclick="script_hideshow(\''+div_divid+'\');return false;" alt="btn_'+divid+'_hide">';
//						alert( "BUGS_172 div_divid_inline div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v );
						htmbugs += "BUGS_172 div_divid_inline div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
						}
					}
				}  
//			htmout += '	</div>';

			htmbugs += "	</pre>";
			htmbugs += "	</div>";			

//			alert( "BUGS_181 script_hideshow divid="+divid+" htmout="+htmout );
//			alert( "BUGS_200 htmbugs="+htmbugs );	
//			document.getElementById("div_htmbugs").innerHTML = htmbugs;

			document.getElementById("div_buttons_hideshow_w").innerHTML = htmout;
			document.getElementById("div_buttons_hideshow_m").innerHTML = htmout;
			document.getElementById("div_buttons_hideshow_b").innerHTML = htmout;
			}
 		</script>








	<style id="style_input">
		.fileContainer {
		    overflow: hidden;
		    position: relative;
			}
		
		.fileContainer [type=file] {
		    cursor: inherit;
		    display: block;
		    font-size: 999px;
		    filter: alpha(opacity=0);
		    min-height: 100%;
		    min-width: 100%;
		    opacity: 0;
		    position: absolute;
		    right: 0;
		    text-align: right;`
		    top: 0;
			}
		</style>

	<style id="style_popover" >
		.popover  {
			position: relative;
			float: left;
			padding: 5px;
//			/*z-ka1: 0;*/
//			width: 200px;'
//			height: 300px;
			}
		.popover:hover {
			background-color: darkSlategrey;
// bigboxbug		background-color: yellow;
//			background-color: #e9e9e2;
//			width: 200px;
//			height: 300px;
			/*z-ka1: 50;*/
//			color: white;
			color: ivory;
//			color: #335500;
			text-decoration: none;
			}
/*CSS for enlarged image*/
		.popover span { 
			position: absolute; 		// important
//			width: 200px;
//			height: 300px;
//			background-color: #e5e5e5;
//			left: -1000px;
//			border: 1px solid #666;

//			position: relative; 
			background-color: darkSlategrey;
			padding: 5px;
			border: 0px solid #666;
			visibility: hidden;
			color: ivory;
			text-decoration: none;
			}
/*CSS for enlarged image*/
		.popover span img { 
//			border-width: 0px; 
			border-width: 0px; 
			/*padding: 2px;*/
			}
		
/*CSS for enlarged image on hover*/
		.popover:hover span { 
			visibility: visible; 
//			width: 200px;
			top: 0px; /* use IF IE6 style to correct IE6 positions of larger image relative to thumb */
			left: 0px;/*position where enlarged image should offset horizontally */
			}
		</style>


	<style id="style_thumbnail" >
		.thumbnail  {
			position: relative;
			float: left;
			padding: 5px;
			/*z-ka1: 0;*/
			}
		.thumbnail:hover {
//			background-color: #e9e9e2;
//			color: #335500;
//			z-ka1: 50;
			background-color: darkslategrey;
			color: ivory;
			text-decoration: none;
			}
/*CSS for enlarged image*/
		.thumbnail span { 
//			background-color: #e5e5e5;
//			left: -1000px;
//			color: black;
//			position: relative; 
			position: absolute; 
			background-color: darkSlategrey;
			padding: 5px;
			border: 1px solid #666;
			visibility: hidden;
			color: ivory;
			text-decoration: none;
			}
/*CSS for enlarged image*/
		.thumbnail span img { 
			border-width: 0px; 
			/*padding: 2px;*/
			}
		
/*CSS for enlarged image on hover*/
		.thumbnail:hover span { 
//			width: 100px;
//			top: 5px; /* use IF IE6 style to correct IE6 positions of larger image relative to thumb */
			visibility: visible; 
			width: 50px;
			top: 100px; /* use IF IE6 style to correct IE6 positions of larger image relative to thumb */
			left: 100px;/*position where enlarged image should offset horizontally */
			}
		</style>

	<style id="style_buttons" >
                button {
//			visibility: hidden;
//			background: rgba(7, 99, 53, .1);
			background: transparent;
//	                border: 3px solid rgba(7, 99, 53, 1);
	                border: 3px solid darkslategrey;
			border-radius: 5px;
//			color: rgba(7, 99, 53, 1);
//			color: ivory;
			color: darkSlategrey;
			cursor: pointer;
			line-height: 40px;
			font-size: 20px;
			outline: none;
			padding: 0 20px;
			transition: all .3s;
                	}
	        button:hover {
//	              background: rgba(7, 99, 53, 1);
  	              background: darkSlategrey;
//  	              background: yellow;
//  	              background: white;
//  	              color: rgba(255,255,255,1);
  	              color: ivory;
  	              }
		p {font-size: 20px; font-weight: bold;
		</style>

	<style id="style_input" >
//               body { text-align: center; background-color: "darkSlategrey"; color:"ivory"; }
                input {
//			visibility: hidden;
//			background: rgba(7, 99, 53, .1);
			background: transparent;
//	                border: 3px solid rgba(7, 99, 53, 1);
	                border: 3px solid darkSlategrey;
			border-radius: 5px;
//			color: rgba(7, 99, 53, 1);
//			color: ivory;
			color: darkSlategrey;
			cursor: pointer;
			line-height: 40px;
			font-size: 10px;
			outline: none;
			padding: 0 20px;
			transition: all .3s;
                	}
	        button:hover {
//	              background: rgba(7, 99, 53, 1);
  	              background: darkgreyslate;
//  	              background: yellow;
//  	              background: white;
//  	              color: rgba(255,255,255,1);
//  	              color: white;
  	              color: ivory;
  	              }
		p {font-size: 10px; font-weight: bold;
		</style>
	<style id="style_div_csv type="text/css">
		body {
//			font-family: Arial;
			font-family: yokkmokkOT;
			font-family: arial;
			font-size: 8pt;
			}
		table {
			border: 1px solid #ccc;
			}
		table th {
//			background-color: #F7F7F7;
			background-color: darkSlategrey;
//			color: #333;
			color: ivory;
			font-weight: bold;
			}
		table th, table td {
			padding: 5px;
			border-color: #ccc;
			}
		</style>
		
	<script id="script_url">
			var url = document.createElement("a");
			url.href=location.href;
			var output = "output";
			url.pathname = url.pathname.replace(/(^\/?)/,"/");

//			if( url.search != "" ) {
//				script_zm_view( url.search );
//				}

//			alert(location.href)
//			alert(url.protocol)
//			alert(url.hostname)
//			alert(url.pathname)
//			alert(url.search)
//			alert(url.hash)


//			document.write( "hostname=" + url.hostname + " loc.href=" + location.href );
//			document.write( "pathname=" + url.pathname + " search=" + url.search );
			</script>

	<script id="script_docready" type="text/javascript">
		$(document).ready(function() {
// 			sets the draggable
			$('#drag .drg').draggable({
				cursor: 'move',          // sets the cursor apperance
				revert: 'valid'
				});

// sets droppable
// after the draggable is droped, hides it with a hide() effect
			$('#drop').droppable({
				drop: function(event, ui) {
					ui.draggable.hide(1000);
					}
				});

// after the draggable is droped, hides it with a hide() effect
			$('#drop1').droppable({
				drop: function(event, ui) {
					ui.draggable.hide(1000);
					}
				});

// after the draggable is droped, hides it with a hide() effect
			$('#drop2').droppable({
				drop: function(event, ui) {
					ui.draggable.hide(1000);
					}
				});

// when the "#sw" element (inside the "#drop") is clicked
// show the items with class "drg", contained in "#drag"
//			$('#drag .drg').slideDown(1000);
			$('#drop #sw').click(function(){
				var url = "/ko_center/ko_center.php?q=jqui/dragdrop1/"
				$(location).attr('href',url);
				});
			});
		</script>











	</head>



<!-- <body bgcolor="darkslategrey"> -->
<body onload="startup(); return false;">



<!-- Top Navigation Menu -->
	<div class="topnav">
		<a href="#home" class="active">
			<img src=/imgs/btn/ko.png height=15 border=0>
			</a>

<!-- Navigation links (hidden by default) -->
<!--	<div id="div_kogrids_w"></div>	 -->
	<div id="myLinks">
		<div id="div_hashlinks">
			<a href="#news">News</a>
			<a href="#about">About</a>
			<a href="#contact">Contact</a>
			</div>


		<hr color=white>
		<hr color=black>
		<div id="div_hllinks"<
			<h1>hllinks</h1>
			<a href="/notes.txt" target=_blank><img src=/imgs/gif/notes/giphy_notes10.gif height=100 border=0 alt="notes.txt"></a>
			<a href="/fb/jtfdcr" target=_blank><img src=/fb/jtfdcr/pages/1.jpg height=100 border=0 alt=fb_jtfdcr></a>
			<a href="/fb/law" target=_blank><img src=/fb/law/pages/1.jpg height=100 border=0 alt=fb_law></a>
			<a href="/fb/jtfdc" target=_blank><img src=/fb/jtfdc/pages/1.jpg height=100 alt=_fb_jtfdc border=0></a>
			<hr color=white>
			<a href="/index2big4most.html" class="popover" target=_blank>
				<img src="/imgs/btn/giphy_phone02.gif" height=100>
				<span><img src="/imgs/btn/giphy_mouse02.gif" width=100 height=100></span>
				</a>
			</div>


               <hr color=red>
                <hr color=white>
                <hr color=blue>
                <a href=http://ko2.us/fb/iperms target=_blank class="popover">
                        <img src=/fb/iperms/pages/1.jpg height=400 border=0 alt=ko2us_fb_iperms>
                        <span><img src=/imgs/btn/koeye_handhither.gif height=400 border=0 alt=ko2us_fb_iperms></span>
                        </a>
                <br><br><br><br> <br><br><br><br>
                <br><br><br><br> <br><br><br><br>
		<hr color=red>
		<hr color=white>
		<hr color=blue>





		<div id="div_fb">
			<h1>fb</h1>
			<a href="/fb/konet" target=_blank><img src=/fb/konet/pages/1.jpg height=100 border=0 alt=fb_konet></a>
			<a href="/fb/iperms" target=_blank><img src=/fb/iperms/pages/1.jpg height=100 border=0 alt=fb_iperms></a>
			<a href="/fb/focus" target=_blank><img src=/fb/focus/pages/1.jpg height=100 border=0 alt=fb_focus></a>
			<a href="/fb/che" target=_blank><img src=/fb/che/pages/1.jpg height=100 border=0 alt=fb_che></a>
			<a href="/fb/iperms" target=_blank><img src=/fb/iperms/pages/1.jpg height=100 border=0 alt=fb_iperms></a>
			<a href="/fb/kou" target=_blank><img src=/fb/kou/pages/1.jpg height=100 border=0 alt=fb_go></a>
			<a href="/fb/go" target=_blank><img src=/fb/go/pages/1.jpg height=100 border=0 alt=fb_kt></a>
			<a href="/fb/kt" target=_blank><img src=/fb/kt/pages/1.jpg height=100 border=0 alt=fb_kt></a>
			<a href="/fb/law" target=_blank><img src=/fb/law/pages/1.jpg height=100 border=0 alt=fb_law></a>
			<a href="/fb/kitiworks" target=_blank><img src=/fb/kitiworks/pages/1.jpg height=100 border=0 alt=fb_kitiworks></a>
			<a href="/fb/pastryroad" target=_blank><img src=/fb/pastryroad/pages/1.jpg height=100 border=0 alt=fb_patryroad></a>
			<a href="/fb/konabus" target=_blank><img src=/fb/konabus/pages/1.jpg height=100 border=0 alt=fb_konabus></a>
			<a href="/fb/kids" target=_blank><img src=/fb/kids/pages/1.jpg height=100 border=0 alt=fb_kids></a>
			<a href="/fb/focus" target=_blank><img src=/fb/focus/pages/1.jpg height=100 border=0 alt=fb_focus></a>
			<a href="/fb/che" target=_blank><img src=/fb/che/pages/1.jpg height=100 border=0 alt=fb_che></a>
			<a href="/fb/nwm" target=_blank><img src=/fb/nwm/pages/1.jpg height=100 border=0 alt=fb_nwm></a>
			<a href="/fb/gov" target=_blank><img src=/fb/gov/pages/1.jpg height=100 border=0 alt=fb_gov></a>
			</div>

		<hr color=blue>
		<hr color=white>
		<hr color=red>
		<div id="div_vu" >
			<a href="/index_vu.html" target=_blank><img src=/imgs/btn/koeye_vu.png height=100 border=0 alt=vu></a>
			<a href="/index_av.html" target=_blank><img src=/imgs/btn/koeye_av.png height=100 border=0 alt=av></a>
			<a href="/index_bb.html" target=_blank><img src=/imgs/btn/koeye_bb.png height=100 border=0 alt=bb></a>
			<a href="/index_fb.html" target=_blank><img src=/imgs/btn/koeye_fb.png height=100 border=0 alt=fb></a>
			<a href="/index_pn.html" target=_blank><img src=/imgs/btn/koeye_pn.png height=100 border=0 alt=pn></a>
			<a href="/index_tm.html" target=_blank><img src=/imgs/btn/koeye_tm.png height=100 border=0 alt=tm></a>
			<a href="/index_tl.html" target=_blank><img src=/imgs/btn/koeye_tl.png height=100 border=0 alt=tl></a>
			<a href="/index_sl.html" target=_blank><img src=/imgs/btn/koeye_sl.png height=100 border=0 alt=sl></a>
			<a href="/index_yt.html" target=_blank><img src=/imgs/btn/koeye_yt.png height=100 border=0 alt=yt></a>
			<a href="/index_zm.html" target=_blank><img src=/imgs/btn/koeye_zm.png height=100 border=0 alt=zm></a>
			<a href="/index_vu.html" target=_blank><img src=/imgs/btn/koeye_vu.png height=100 border=0 alt=vu></a>
			</div>

		<div id="div_sites" >
			<h2>sites</h2>
			<a href="http://konet.org" target=_blank><img src=/fb/konet/pages/1.jpg height=100 border=0 alt=konet.org></a>
			<a href="http://iperms.com" target=_blank><img src=/fb/iperms/pages/1.jpg height=100 border=0 alt=iperms.com></a>
			<a href="http://ko1.us" target=_blank><img src=/imgs/btn/ko.png height=100 border=0 alt=ko1.us></a>
			<a href="" target=_blank><img src=/imgs/btn/ok.png height=100 border=0 alt=ko2.us></a>
			</div>
		</div>

<!-- "Hamburger menu" / "Bar icon" to toggle the navigation links -->
		<a href="javascript:void(0);" class="icon" onclick="myFunction()">
			<i class="fa fa-bars"></i>
			</a>
		</div> 

	<div id="div_kogrids_w"></div>	 

	<a href="notes.txt" class="popover" target=_blank>
		<img src=/imgs/gif/notes/giphy_notes10.gif height=100 width=100>
		<span><img src=/imgs/gif/notes/giphy_notes10.gif height=100 width=100></span>
		</a>
	<a href="/fb/jtfdcr" target=_blank><img src=/fb/jtfdcr/pages/1.jpg height=100 border=0 alt=fb_jtfdcr></a>
	<a href="/fb/law" target=_blank><img src=/fb/law/pages/1.jpg height=100 border=0 alt=fb_law></a>
	<a href="/fb/jtfdc" target=_blank><img src=/fb/jtfdc/pages/1.jpg height=100 alt=_fb_jtfdc border=0></a>
	<hr color=red>
	<hr color=white>
	<hr color=blue>
	<a href="/index2big4most.html" class="popover" target=_blank>
		<img src="/imgs/btn/giphy_phone01.gif" height=100>
		<span><img src="/imgs/btn/giphy_mouse01.gif" width=100 height=100></span>
		</a>

               <hr color=red>
                <hr color=white>
                <hr color=blue>
                <a href=http://ko2.us/fb/iperms target=_blank class="popover">
                        <img src=/fb/iperms/pages/1.jpg height=400 border=0 alt=ko2us_fb_iperms>
                        <span><img src=/imgs/btn/koeye_handhither.gif height=400 border=0 alt=ko2us_fb_iperms></span>
                        </a>
                <br><br><br><br> <br><br><br><br>
                <br><br><br><br> <br><br><br><br>
		<hr color=red>
		<hr color=white>
		<hr color=blue>
	<br><br><br><br> <br><br><br><br>
	<br><br><br><br> <br><br><br><br>
	<hr color=blue>
	<hr color=white>
	<hr color=red>

		<br><br><br><br <br><br><br><br
		<br><br><br><br <br><br><br><br
		<div id="div_hl_yt_jtfdc"></div>
		<br><br><br><br <br><br><br><br
		<br><br><br><br <br><br><br><br


		<div id="div_yt">
			<a href=https://www.youtube.com/watch?v=uq-gYOrU8bA target=_blank class="thumbnail">
				<img src=/imgs/btn/koeyeb_yt.png alt=yt_paulsimon_you_can_call_me_al_official_chevy_chase height=50>
				<span><img src=http://i.ytimg.com/vi/uq-gYOrU8bA/default.jpg alt=yt_paulsimon_you_can_call_me_al_official_chevy_chase></span>
				</a>
			<a href=https://www.youtube.com/watch?v=nCw0wlv3pyQ target=_blank class="thumbnail">
				<img src=/imgs/btn/koeyeb_yt.png alt=yt_liveholland_20120708_caro_emerald_mistaken_identy height=50>
				<span><img src=http://i.ytimg.com/vi/nCw0wlv3pyQ/default.jpg alt=yt_liveholland_20120708_caro_emerald_mistaken_identy></span>
				</a>
			<a href=https://www.youtube.com/watch?v=rnvUcUm0uaY target=_blank class="thumbnail">
				<img src=/imgs/btn/koeyeb_yt.png alt=yt_yankovic_20150404_apples_peaches_pumpkin_pie height=50>
				<span><img src=http://i.ytimg.com/vi/rnvUcUm0uaY/default.jpg alt=yt_yankovic_20150404_apples_peaches_pumpkin_pie ></span>
				</a>
			</div>

		<br> <br> <br> <br> <br> <br> <br> <br>
		<br> <br> <br> <br> <br> <br> <br> <br>
		<br> <br> <br> <br> <br> <br> <br> <br>
		<hr color=white>
		<hr color=black>
		<div id="div_av">
			<a href=/kb/vid/mary_tyler_moore/the_mary_tyler_moore_show_s05e01_will_mary_richards_go_to_jail.mp4 target=_blank class="thumbnail">
				<img src=/imgs/btn/koeyeb_av.png alt=the_mary_tyler_moore_show_s05e01_will_mary_richards_jail height=50>
				<span><img src=/av/imgs/av_marytylermoore_s05e01_jail.png target=_blank class="thumbnail">
				</a>
			<a href=/kb/vid/youb/we_believe_in_happy_ending_emmylou_harris_earl_thomas_co.mp4 target=_blank class="thumbnail">
				<img src=/imgs/btn/koeyeb_av.png alt we_believe_in_happy_ending_emmylou_harris_earl_thomas_co target=_blank class="thumbnail" height=50>
				<span><img src=/av/imgs/av_emmylou_happyendings.png target=_blank class="thumbnail">
				</a>
			</div>
		</div>

		<br><br><br><br><br><br><br><br>
		<br><br><br><br><br><br><br><br>
		<hr color=red>
		<hr color=white>
		<hr color=blue>
		<div id="div_iperms" >
			<h1>div_iperms</h1>
			<hr color=yellow>
			<hr color=yellow>
			</div>

	<h1>div_fb</h1>
<div id="canvas">
	<div class="zoom-icon zoom-icon-in"></div>

	<div class="magazine-viewport">
		<div class="container">
			<div class="magazine">
				<!-- Next button -->
				<div ignore="1" class="next-button"></div>
				<!-- Previous button -->
				<div ignore="1" class="previous-button"></div>
				</div>
			</div>
		</div>

	<hr color=yellow>
	<hr color=black>
	<hr color=yellow>

	<script id="script_fb" type="text/javascript">
		function loadApp() {
			alert( "BUGS_2700 loadapp" );
 			$('#canvas').fadeIn(1000);
 			var flipbook = $('.magazine');

// Check if the CSS was already loaded
	
	if (flipbook.width()==0 || flipbook.height()==0) {
		setTimeout(loadApp, 10);
		return;
	}
	
// Create the flipbook
	flipbook.turn({
// Magazine width
// Magazine height
// Duration in millisecond
// Hardware acceleration
// Enables gradients
// Auto center this flipbook
// Elevation from the edge of the flipbook when turning a page
			width: 922,
			height: 600,
			duration: 1000,
			acceleration: !isChrome(),
			gradients: true,
			autoCenter: true,
			elevation: 50,

// The number of pages
//			pages: 12,
//			pages: 16,
			pages: 758,

// Events

			
			when: {
				turning: function(event, page, view) {
					
					var book = $(this),
					currentPage = book.turn('page'),
					pages = book.turn('pages');
			
					// Update the current URI

					Hash.go('page/' + page).update();

					// Show and hide navigation buttons

					disableControls(page);
					

					$('.thumbnails .page-'+currentPage).
						parent().
						removeClass('current');

					$('.thumbnails .page-'+page).
						parent().
						addClass('current');



				},

				turned: function(event, page, view) {

					disableControls(page);

					$(this).turn('center');

					if (page==1) { 
						$(this).turn('peel', 'br');
					}

				},

				missing: function (event, pages) {

					// Add pages that aren't in the magazine

					for (var i = 0; i < pages.length; i++)
						addPage(pages[i], $(this));

				}
			}

	});

	// Zoom.js

	$('.magazine-viewport').zoom({
		flipbook: $('.magazine'),

		max: function() { 
			
			return largeMagazineWidth()/$('.magazine').width();

		}, 

		when: {

			swipeLeft: function() {

				$(this).zoom('flipbook').turn('next');

			},

			swipeRight: function() {
				
				$(this).zoom('flipbook').turn('previous');

			},

			resize: function(event, scale, page, pageElement) {

				if (scale==1)
					loadSmallPage(page, pageElement);
				else
					loadLargePage(page, pageElement);

			},

			zoomIn: function () {

				$('.thumbnails').hide();
				$('.made').hide();
				$('.magazine').removeClass('animated').addClass('zoom-in');
				$('.zoom-icon').removeClass('zoom-icon-in').addClass('zoom-icon-out');
				
				if (!window.escTip && !$.isTouch) {
					escTip = true;

					$('<div />', {'class': 'exit-message'}).
						html('<div>Press ESC to exit</div>').
							appendTo($('body')).
							delay(2000).
							animate({opacity:0}, 500, function() {
								$(this).remove();
							});
				}
			},

			zoomOut: function () {

				$('.exit-message').hide();
				$('.thumbnails').fadeIn();
				$('.made').fadeIn();
				$('.zoom-icon').removeClass('zoom-icon-out').addClass('zoom-icon-in');

				setTimeout(function(){
					$('.magazine').addClass('animated').removeClass('zoom-in');
					resizeViewport();
				}, 0);

			}
		}
	});

	// Zoom event

	if ($.isTouch)
		$('.magazine-viewport').bind('zoom.doubleTap', zoomTo);
	else
		$('.magazine-viewport').bind('zoom.tap', zoomTo);


	// Using arrow keys to turn the page

	$(document).keydown(function(e){

		var previous = 37, next = 39, esc = 27;

		switch (e.keyCode) {
			case previous:

				// left arrow
				$('.magazine').turn('previous');
				e.preventDefault();

			break;
			case next:

				//right arrow
				$('.magazine').turn('next');
				e.preventDefault();

			break;
			case esc:
				
				$('.magazine-viewport').zoom('zoomOut');	
				e.preventDefault();

			break;
		}
	});

	// URIs - Format #/page/1 

	Hash.on('^page\/([0-9]*)$', {
		yep: function(path, parts) {
			var page = parts[1];

			if (page!==undefined) {
				if ($('.magazine').turn('is'))
					$('.magazine').turn('page', page);
			}

		},
		nop: function(path) {

			if ($('.magazine').turn('is'))
				$('.magazine').turn('page', 1);
		}
	});


	$(window).resize(function() {
		resizeViewport();
	}).bind('orientationchange', function() {
		resizeViewport();
	});

	// Events for thumbnails

	$('.thumbnails').click(function(event) {
		
		var page;

		if (event.target && (page=/page-([0-9]+)/.exec($(event.target).attr('class'))) ) {
		
			$('.magazine').turn('page', page[1]);
		}
	});

	$('.thumbnails li').
		bind($.mouseEvents.over, function() {
			
			$(this).addClass('thumb-hover');

		}).bind($.mouseEvents.out, function() {
			
			$(this).removeClass('thumb-hover');

		});

	if ($.isTouch) {
	
		$('.thumbnails').
			addClass('thumbanils-touch').
			bind($.mouseEvents.move, function(event) {
				event.preventDefault();
			});

	} else {

		$('.thumbnails ul').mouseover(function() {

			$('.thumbnails').addClass('thumbnails-hover');

		}).mousedown(function() {

			return false;

		}).mouseout(function() {

			$('.thumbnails').removeClass('thumbnails-hover');

		});

	}


	// Regions

	if ($.isTouch) {
		$('.magazine').bind('touchstart', regionClick);
	} else {
		$('.magazine').click(regionClick);
	}

	// Events for the next button

	$('.next-button').bind($.mouseEvents.over, function() {
		
		$(this).addClass('next-button-hover');

	}).bind($.mouseEvents.out, function() {
		
		$(this).removeClass('next-button-hover');

	}).bind($.mouseEvents.down, function() {
		
		$(this).addClass('next-button-down');

	}).bind($.mouseEvents.up, function() {
		
		$(this).removeClass('next-button-down');

	}).click(function() {
		
		$('.magazine').turn('next');

	});

	// Events for the next button
	
	$('.previous-button').bind($.mouseEvents.over, function() {
		
		$(this).addClass('previous-button-hover');

	}).bind($.mouseEvents.out, function() {
		
		$(this).removeClass('previous-button-hover');

	}).bind($.mouseEvents.down, function() {
		
		$(this).addClass('previous-button-down');

	}).bind($.mouseEvents.up, function() {
		
		$(this).removeClass('previous-button-down');

	}).click(function() {
		
		$('.magazine').turn('previous');

	});


	resizeViewport();

	$('.magazine').addClass('animated');

}

// Zoom icon

 $('.zoom-icon').bind('mouseover', function() { 
 	
 	if ($(this).hasClass('zoom-icon-in'))
 		$(this).addClass('zoom-icon-in-hover');

 	if ($(this).hasClass('zoom-icon-out'))
 		$(this).addClass('zoom-icon-out-hover');
 
 }).bind('mouseout', function() { 
 	
 	 if ($(this).hasClass('zoom-icon-in'))
 		$(this).removeClass('zoom-icon-in-hover');
 	
 	if ($(this).hasClass('zoom-icon-out'))
 		$(this).removeClass('zoom-icon-out-hover');

 }).bind('click', function() {

 	if ($(this).hasClass('zoom-icon-in'))
 		$('.magazine-viewport').zoom('zoomIn');
 	else if ($(this).hasClass('zoom-icon-out'))	
		$('.magazine-viewport').zoom('zoomOut');

 });

 $('#canvas').hide();


// Load the HTML4 version if there's not CSS transform

 yepnope({
//	test : Modernizr.csstransforms,
//	yep: ['../../lib/turn.js'],
//	yep: ['data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UKICogdHVybmpzLmNvbQogKiB0dXJuanMuY29tL2xpY2Vuc2UudHh0CiAqCiAqIENvcHlyaWdodCAoQykgMjAxMiBFbW1hbnVlbCBHYXJjaWEKICogQWxsIHJpZ2h0cyByZXNlcnZlZAogKiovCgooZnVuY3Rpb24oJCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhczNkLAogIAogIGhhc1JvdCwKCiAgdmVuZG9yID0gJycsCiAgCiAgdmVyc2lvbiA9ICc0LjEuMCcsCgogIFBJID0gTWF0aC5QSSwKCiAgQTkwID0gUEkvMiwKCiAgaXNUb3VjaCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdywKCiAgbW91c2VFdmVudHMgPSAoaXNUb3VjaCkgPwogICAgewogICAgICBkb3duOiAndG91Y2hzdGFydCcsCiAgICAgIG1vdmU6ICd0b3VjaG1vdmUnLAogICAgICB1cDogJ3RvdWNoZW5kJywKICAgICAgb3ZlcjogJ3RvdWNoc3RhcnQnLAogICAgICBvdXQ6ICd0b3VjaGVuZCcKICAgIH0KICAgIDoKICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICAvLyBDb250YW5zdHMgdXNlZCBmb3IgZWFjaCBjb3JuZXIKICAvLyAgIHwgdGwgKiB0ciB8CiAgLy8gbCB8ICogICAgICogfCByCiAgLy8gICB8IGJsICogYnIgfAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnYmwnLCAndGwnXSwKICAgIGZvcndhcmQ6IFsnYnInLCAndHInXSwKICAgIGFsbDogWyd0bCcsICdibCcsICd0cicsICdicicsICdsJywgJ3InXQogIH0sCgogIC8vIERpc3BsYXkgdmFsdWVzCgogIGRpc3BsYXlzID0gWydzaW5nbGUnLCAnZG91YmxlJ10sCgogIC8vIERpcmVjdGlvbiB2YWx1ZXMKCiAgZGlyZWN0aW9ucyA9IFsnbHRyJywgJ3J0bCddLAoKICAvLyBEZWZhdWx0IG9wdGlvbnMKCiAgdHVybk9wdGlvbnMgPSB7CgogICAgLy8gRW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KCiAgICBhY2NlbGVyYXRpb246IHRydWUsCgogICAgLy8gRGlzcGxheQoKICAgIGRpc3BsYXk6ICdkb3VibGUnLAoKICAgIC8vIER1cmF0aW9uIG9mIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzCgogICAgZHVyYXRpb246IDYwMCwKCiAgICAvLyBGaXJzdCBwYWdlCgogICAgcGFnZTogMSwKICAgIAogICAgLy8gRW5hYmxlcyBncmFkaWVudHMKCiAgICBncmFkaWVudHM6IHRydWUsCgogICAgLy8gQ29ybmVycyB1c2VkIHdoZW4gdHVybmluZyB0aGUgcGFnZQoKICAgIHR1cm5Db3JuZXJzOiAnYmwsYnInLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMAoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCiAgICAvLyBEZWZpbmUgY29uc3RhbnRzCiAgICAKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKICAgIGhhc1JvdCA9IHJvdGF0aW9uQXZhaWxhYmxlKCk7CiAgICB2ZW5kb3IgPSBnZXRQcmVmaXgoKTsKCiAgICB2YXIgaSwgdGhhdCA9IHRoaXMsIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRpb25zID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRpb25zKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRpb25zOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlWm9vbSA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0aW9ucy5wYWdlcyB8fCAwOwogICAgZGF0YS5ldmVudEhhbmRsZXJzID0gewogICAgICB0b3VjaFN0YXJ0OiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaFN0YXJ0LCB0aGlzKSwKICAgICAgdG91Y2hNb3ZlOiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaE1vdmUsIHRoaXMpLAogICAgICB0b3VjaEVuZDogJC5wcm94eSh0dXJuTWV0aG9kcy5fdG91Y2hFbmQsIHRoaXMpLAogICAgICBzdGFydDogJC5wcm94eSh0dXJuTWV0aG9kcy5fZXZlbnRTdGFydCwgdGhpcykKICAgIH07CgoKCiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgZm9yIChpIGluIG9wdGlvbnMud2hlbikKICAgICAgICBpZiAoaGFzKGksIG9wdGlvbnMud2hlbikpCiAgICAgICAgICB0aGlzLmJpbmQoaSwgb3B0aW9ucy53aGVuW2ldKTsKCiAgICAvLyBTZXQgdGhlIGNzcwoKICAgIHRoaXMuY3NzKHtwb3NpdGlvbjogJ3JlbGF0aXZlJywgd2lkdGg6IG9wdGlvbnMud2lkdGgsIGhlaWdodDogb3B0aW9ucy5oZWlnaHR9KTsKCiAgICAvLyBTZXQgdGhlIGluaXRpYWwgZGlzcGxheQoKICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CgogICAgLy8gU2V0IHRoZSBkaXJlY3Rpb24KCiAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24hPT0nJykKICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CiAgICAKICAgIC8vIFByZXZlbnQgYmx1ZSBzY3JlZW4gcHJvYmxlbXMgb2Ygc3dpdGNoaW5nIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtb2RlCiAgICAvLyBCeSBmb3JjaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgZXZlcgoKICAgIGlmIChoYXMzZCAmJiAhaXNUb3VjaCAmJiBvcHRpb25zLmFjY2VsZXJhdGlvbikKICAgICAgdGhpcy50cmFuc2Zvcm0odHJhbnNsYXRlKDAsIDAsIHRydWUpKTsKCiAgICAvLyBBZGQgcGFnZXMgZnJvbSB0aGUgRE9NCgogICAgZm9yIChpID0gMDsgaTxjaC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoJChjaFtpXSkuYXR0cignaWdub3JlJykhPScxJykgewogICAgICAgIHRoaXMudHVybignYWRkUGFnZScsIGNoW2ldLCArK3BhZ2VOdW0pOwogICAgICB9CiAgICB9CgogICAgLy8gRXZlbnQgbGlzdGVuZXJzCgogICAgJCh0aGlzKS5iaW5kKG1vdXNlRXZlbnRzLmRvd24sIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaFN0YXJ0KS4KICAgICAgYmluZCgnZW5kJywgdHVybk1ldGhvZHMuX2V2ZW50RW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9ldmVudFByZXNzZWQpLgogICAgICBiaW5kKCdyZWxlYXNlZCcsIHR1cm5NZXRob2RzLl9ldmVudFJlbGVhc2VkKS4KICAgICAgYmluZCgnZmxpcCcsIHR1cm5NZXRob2RzLl9mbGlwKTsKCiAgICAkKHRoaXMpLnBhcmVudCgpLmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS5iaW5kKG1vdXNlRXZlbnRzLm1vdmUsIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaE1vdmUpLgogICAgICBiaW5kKG1vdXNlRXZlbnRzLnVwLCBkYXRhLmV2ZW50SGFuZGxlcnMudG91Y2hFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAvLyBUaGlzIGZsaXBib29rIGlzIHJlYWR5CgogICAgZGF0YS5kb25lID0gdHJ1ZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZSBmcm9tIGV4dGVybmFsIGRhdGEKCiAgYWRkUGFnZTogZnVuY3Rpb24oZWxlbWVudCwgcGFnZSkgewoKICAgIHZhciBjdXJyZW50UGFnZSwKICAgICAgY2xhc3NOYW1lLAogICAgICBpbmNQYWdlcyA9IGZhbHNlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGxhc3RQYWdlID0gZGF0YS50b3RhbFBhZ2VzKzE7CgogICAgaWYgKGRhdGEuZGVzdHJveWluZykKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFJlYWQgdGhlIHBhZ2UgbnVtYmVyIGZyb20gdGhlIGNsYXNzTmFtZSBvZiBgZWxlbWVudGAgLSBmb3JtYXQ6IHBbMC05XSsKCiAgICBpZiAoKGN1cnJlbnRQYWdlID0gL1xicChbMC05XSspXGIvLmV4ZWMoJChlbGVtZW50KS5hdHRyKCdjbGFzcycpKSkpCiAgICAgIHBhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZVsxXSwgMTApOwoKICAgIGlmIChwYWdlKSB7CiAgICAgIAogICAgICBpZiAocGFnZT09bGFzdFBhZ2UpCiAgICAgICAgaW5jUGFnZXMgPSB0cnVlOwogICAgICBlbHNlIGlmIChwYWdlPmxhc3RQYWdlKQogICAgICAgIHRocm93IHR1cm5FcnJvcignUGFnZSAiJytwYWdlKyciIGNhbm5vdCBiZSBpbnNlcnRlZCcpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBwYWdlID0gbGFzdFBhZ2U7CiAgICAgIGluY1BhZ2VzID0gdHJ1ZTsKCiAgICB9CgogICAgaWYgKHBhZ2U+PTEgJiYgcGFnZTw9bGFzdFBhZ2UpIHsKCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICAgIGNsYXNzTmFtZSA9IChwYWdlJTIpID8gJyBvZGQnIDogJyBldmVuJzsKICAgICAgZWxzZQogICAgICAgIGNsYXNzTmFtZSA9ICcnOwoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIGlmIChkYXRhLmRvbmUpCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAvLyBNb3ZlIHBhZ2VzIGlmIGl0J3MgbmVjZXNzYXJ5CiAgICAgIGlmIChwYWdlIGluIGRhdGEucGFnZU9ianMpCiAgICAgICAgdHVybk1ldGhvZHMuX21vdmVQYWdlcy5jYWxsKHRoaXMsIHBhZ2UsIDEpOwoKICAgICAgLy8gSW5jcmVhc2UgdGhlIG51bWJlciBvZiBwYWdlcwogICAgICBpZiAoaW5jUGFnZXMpCiAgICAgICAgZGF0YS50b3RhbFBhZ2VzID0gbGFzdFBhZ2U7CgogICAgICAvLyBBZGQgZWxlbWVudAogICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdID0gJChlbGVtZW50KS4KICAgICAgICBjc3MoeydmbG9hdCc6ICdsZWZ0J30pLgogICAgICAgIGFkZENsYXNzKCdwYWdlIHAnICsgcGFnZSArIGNsYXNzTmFtZSk7CgogICAgICBpZiAoIWhhc0hhcmRQYWdlKCkgJiYgIGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2hhcmQnKSkgewogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0ucmVtb3ZlQ2xhc3MoJ2hhcmQnKTsKICAgICAgfQoKICAgICAgLy8gQWRkIHBhZ2UKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgLy8gV3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXSA9ICQoJzxkaXYvPicsCiAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KTsKCiAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhpcyBmbGlwYm9vawogICAgICAgICAgdGhpcy5hcHBlbmQoZGF0YS5wYWdlV3JhcFtwYWdlXSk7CgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VQbGFjZVtwYWdlXSkgewogICAgICAgICAgICAKICAgICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwogICAgICAgICAgICAvLyBNb3ZlIGBwYWdlT2Jqc1twYWdlXWAgdG8gd3JhcHBlcgogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmFwcGVuZFRvKGRhdGEucGFnZVdyYXBbcGFnZV0pOwogICAgICAgICAgCiAgICAgICAgIH0KCiAgICAgICAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIHBhZ2UKICAgICAgICAgIHZhciBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICB9CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9PSBwYWdlKSB7CgogICAgICAgICAvLyBJZiB0aGUgcGFnZSBpc24ndCBpbiBhbm90aGVyIHBsYWNlLCBjcmVhdGUgdGhlIGZsaXAgZWZmZWN0CiAgICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZUZsaXAuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIH0KICAgICAgICAKICAgICAgfSBlbHNlIHsKCiAgICAgICAgLy8gUGxhY2UKICAgICAgICBkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9IDA7CgogICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IGZyb20gdGhlIERPTQogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICAgIH0KCiAgfSwKCiAgLy8gQ2hlY2tzIGlmIGEgcGFnZSBpcyBpbiBtZW1vcnkKICAKICBoYXNQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcmV0dXJuIGhhcyhwYWdlLCB0aGlzLmRhdGEoKS5wYWdlT2Jqcyk7CiAgCiAgfSwKCiAgLy8gQ2VudGVycyB0aGUgZmxpcGJvb2sKCiAgY2VudGVyOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHNpemUgPSAkKHRoaXMpLnR1cm4oJ3NpemUnKSwKICAgICAgbGVmdCA9IDA7CgogICAgaWYgKCFkYXRhLm5vQ2VudGVyKSB7CiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICB9CiAgICAgIAogICAgICB9CgogICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBmbGlwYm9vayA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgZXZlbnRzID0gWwogICAgICAgICdlbmQnLCAnZmlyc3QnLCAnZmxpcCcsICdsYXN0JywgJ3ByZXNzZWQnLAogICAgICAgICdyZWxlYXNlZCcsICdzdGFydCcsICd0dXJuaW5nJywgJ3R1cm5lZCcsCiAgICAgICAgJ3pvb21pbmcnLCAnbWlzc2luZyddOwoKICAgIGlmICh0cmlnZ2VyKCdkZXN0cm95aW5nJywgdGhpcyk9PSdwcmV2ZW50ZWQnKQogICAgICByZXR1cm47CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkLmVhY2goZXZlbnRzLCBmdW5jdGlvbihpbmRleCwgZXZlbnROYW1lKSB7CiAgICAgIGZsaXBib29rLnVuYmluZChldmVudE5hbWUpOwogICAgfSk7CgogICAgdGhpcy5wYXJlbnQoKS51bmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS51bmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoTW92ZSkuCiAgICAgIHVuYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAgIAogICAgICBpZiAodHJpZ2dlcignem9vbWluZycsIHRoaXMsIFtuZXdab29tLCBkYXRhLnpvb21dKT09J3ByZXZlbnRlZCcpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIAogICAgICB2YXIgc2l6ZSA9IHRoaXMudHVybignc2l6ZScpLAogICAgICAgIGN1cnJlbnRWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICAgICAvKi4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7Ki8KCiAgICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwogICAgICAvKmVsc2UKICAgICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogc2l6ZS53aWR0aCAqIGl6IC8gMiAtIG5ld1dpZHRoIC8gMn0pOyovCgogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaTxjdXJyZW50Vmlldy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjdXJyZW50Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSE9ZGF0YS56b29tKSB7CiAgCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgICBjdXJyZW50Vmlld1tpXSwKICAgICAgICAgICAgY3VycmVudFZpZXcsCiAgICAgICAgICAgIGRhdGEucGFnZVpvb21bY3VycmVudFZpZXdbaV1dLAogICAgICAgICAgICBkYXRhLnpvb21dKTsKCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSA9IGRhdGEuem9vbTsKICAgICAgfQogICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLnpvb207CgogIH0sCgogIC8vIEdldHMgdGhlIHNpemUgb2YgYSBwYWdlCgogIF9wYWdlU2l6ZTogZnVuY3Rpb24ocGFnZSwgcG9zaXRpb24pIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwcm9wID0ge307CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKCiAgICAgIHByb3Aud2lkdGggPSB0aGlzLndpZHRoKCk7CiAgICAgIHByb3AuaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHByb3AudG9wID0gMDsKICAgICAgICBwcm9wLmxlZnQgPSAwOwogICAgICAgIHByb3AucmlnaHQgPSAnYXV0byc7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdmFyIHBhZ2VXaWR0aCA9IHRoaXMud2lkdGgoKS8yLAogICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ293bi1zaXplJykpIHsKICAgICAgICBwcm9wLndpZHRoID0gZGF0YS5wYWdlT2Jqc1twYWdlXS53aWR0aCgpOwogICAgICAgIHByb3AuaGVpZ2h0ID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oZWlnaHQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcm9wLndpZHRoID0gcGFnZVdpZHRoOwogICAgICAgIHByb3AuaGVpZ2h0ID0gcGFnZUhlaWdodDsKICAgICAgfQogICAgICAKICAgICAgaWYgKHBvc2l0aW9uKSB7CiAgICAgICAgdmFyIG9kZCA9IHBhZ2UlMjsKICAgICAgICBwcm9wLnRvcCA9IChwYWdlSGVpZ2h0LXByb3AuaGVpZ2h0KS8yOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9IHBhZ2VXaWR0aC1wcm9wLndpZHRoOwogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gJ2F1dG8nOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9ICdhdXRvJzsKCiAgICAgICAgfQogICAgICAKICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcm9wOwoKICB9LAoKICAvLyBQcmVwYXJlcyB0aGUgZmxpcCBlZmZlY3QgZm9yIGEgcGFnZQoKICBfbWFrZUZsaXA6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICghZGF0YS5wYWdlc1twYWdlXSAmJiBkYXRhLnBhZ2VQbGFjZVtwYWdlXT09cGFnZSkgewogICAgICAKICAgICAgdmFyIHNpbmdsZSA9IGRhdGEuZGlzcGxheT09J3NpbmdsZScsCiAgICAgICAgb2RkID0gcGFnZSUyOwoKICAgICAgZGF0YS5wYWdlc1twYWdlXSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgY3NzKHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UpKS4KICAgICAgICBmbGlwKHsKICAgICAgICAgIHBhZ2U6IHBhZ2UsCiAgICAgICAgICBuZXh0OiAob2RkIHx8IHNpbmdsZSkgPyBwYWdlKzEgOiBwYWdlLTEsCiAgICAgICAgICB0dXJuOiB0aGlzCiAgICAgICAgfSkuCiAgICAgICAgZmxpcCgnZGlzYWJsZScsIGRhdGEuZGlzYWJsZWQpOwoKICAgICAgICAvLyBJc3N1ZSBhYm91dCB6LWluZGV4CiAgICAgICAgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGF0YS5wYWdlWm9vbVtwYWdlXSA9IGRhdGEuem9vbTsKICAgICAgICAKICAgIH0KCiAgICByZXR1cm4gZGF0YS5wYWdlc1twYWdlXTsKICB9LAoKICAvLyBNYWtlcyBwYWdlcyB3aXRoaW4gYSByYW5nZQoKICBfbWFrZVJhbmdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgcmFuZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS50b3RhbFBhZ2VzPDEpCiAgICAgIHJldHVybjsKCiAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICBmb3IgKHBhZ2UgPSByYW5nZVswXTsgcGFnZTw9cmFuZ2VbMV07IHBhZ2UrKykKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgfSwKCiAgLy8gUmV0dXJucyBhIHJhbmdlIG9mIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBET00KICAvLyBFeGFtcGxlOgogIC8vIC0gcGFnZSBpbiB0aGUgY3VycmVudCB2aWV3LCByZXR1cm4gdHJ1ZQogIC8vICogcGFnZSBpcyBpbiB0aGUgcmFuZ2UsIHJldHVybiB0cnVlCiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UKICAvLwogIC8vIDEgMi0zIDQtNSA2LTcgOC05IDEwLTExIDEyLTEzCiAgLy8gICAqKiAgKiogIC0tICAgKiogICoqCgogIHJhbmdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIHJlbWFpbmluZ1BhZ2VzLCBsZWZ0LCByaWdodCwgdmlldywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgICAgcGFnZSA9IHBhZ2UgfHwgZGF0YS50cGFnZSB8fCBkYXRhLnBhZ2UgfHwgMTsKICAgICAgdmlldyA9IHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgcGFnZSk7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicrcGFnZSsnIiBpcyBub3QgYSB2YWxpZCBwYWdlJyk7CgogICAgCiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdIHx8IHZpZXdbMF07CiAgICAgIAogICAgICBpZiAodmlld1swXT49MSAmJiB2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpIHsKCiAgICAgICAgcmVtYWluaW5nUGFnZXMgPSBNYXRoLmZsb29yKChwYWdlc0luRE9NLTIpLzIpOwoKICAgICAgICBpZiAoZGF0YS50b3RhbFBhZ2VzLXZpZXdbMV0gPiB2aWV3WzBdKSB7CiAgICAgICAgICBsZWZ0ID0gTWF0aC5taW4odmlld1swXS0xLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICByaWdodCA9IDIqcmVtYWluaW5nUGFnZXMtbGVmdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmlnaHQgPSBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSwgcmVtYWluaW5nUGFnZXMpOwogICAgICAgICAgbGVmdCA9IDIqcmVtYWluaW5nUGFnZXMtcmlnaHQ7CiAgICAgICAgfQoKICAgICAgfSBlbHNlIHsKICAgICAgICBsZWZ0ID0gcGFnZXNJbkRPTS0xOwogICAgICAgIHJpZ2h0ID0gcGFnZXNJbkRPTS0xOwogICAgICB9CgogICAgICByZXR1cm4gW01hdGgubWF4KDEsIHZpZXdbMF0tbGVmdCksCiAgICAgICAgICBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMsIHZpZXdbMV0rcmlnaHQpXTsKCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiBhIHBhZ2UgaXMgd2l0aGluIHRoZSByYW5nZSBvZiBgcGFnZXNJbkRPTWAgZnJvbSB0aGUgY3VycmVudCB2aWV3CgogIF9uZWNlc3NQYWdlOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIGlmIChwYWdlPT09MCkKICAgICAgcmV0dXJuIHRydWU7CgogICAgdmFyIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScpOwoKICAgIHJldHVybiB0aGlzLmRhdGEoKS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhIHBhZ2UKCiAgcmVtb3ZlUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgLy8gRGVsZXRlIGFsbCB0aGUgcGFnZXMKICAgIGlmIChwYWdlPT0nKicpIHsKICAgICAgCiAgICAgIHdoaWxlIChkYXRhLnRvdGFsUGFnZXMhPT0wKSB7CiAgICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgICAKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pIHsKCiAgICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAgIC8vIFJlbW92ZSBgcGFnZWAKICAgICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgICB9CgogICAgICAvLyBNb3ZlIHRoZSBwYWdlcwogICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgLTEpOwoKICAgICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgICAgZGF0YS50b3RhbFBhZ2VzID0gZGF0YS50b3RhbFBhZ2VzLTE7CgogICAgICAvLyBDaGVjayB0aGUgY3VycmVudCB2aWV3CgogICAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykgewoKICAgICAgIGRhdGEucGFnZSA9IG51bGw7CiAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEudG90YWxQYWdlcyk7CgogICAgICB9IGVsc2UgewoKICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICAKICB9LAoKICAvLyBNb3ZlcyBwYWdlcwoKICBfbW92ZVBhZ2VzOiBmdW5jdGlvbihmcm9tLCBjaGFuZ2UpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2luZ2xlID0gZGF0YS5kaXNwbGF5PT0nc2luZ2xlJywKICAgICAgbW92ZSA9IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICAgICAgdmFyIG5leHQgPSBwYWdlICsgY2hhbmdlLAogICAgICAgICAgb2RkID0gbmV4dCUyLAogICAgICAgICAgY2xhc3NOYW1lID0gKG9kZCkgPyAnIG9kZCAnIDogJyBldmVuICc7CgogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1tuZXh0XSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgICAgIHJlbW92ZUNsYXNzKCdwJyArIHBhZ2UgKyAnIG9kZCBldmVuJykuCiAgICAgICAgICAgIGFkZENsYXNzKCdwJyArIG5leHQgKyBjbGFzc05hbWUpOwoKICAgICAgICBpZiAoZGF0YS5wYWdlUGxhY2VbcGFnZV0gJiYgZGF0YS5wYWdlV3JhcFtwYWdlXSkgewoKICAgICAgICAgIGRhdGEucGFnZVBsYWNlW25leHRdID0gbmV4dDsKICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW25leHRdLmhhc0NsYXNzKCdmaXhlZCcpKQogICAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXS4KICAgICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGF0LCBuZXh0LCB0cnVlKSkuCiAgICAgICAgICAgICAgYXR0cigncGFnZScsIG5leHQpOwogICAgICAKICAgICAgICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgICAgICAgZGF0YS5wYWdlc1tuZXh0XSA9IGRhdGEucGFnZXNbcGFnZV0uCiAgICAgICAgICAgICAgICBmbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgICBwYWdlOiBuZXh0LAogICAgICAgICAgICAgICAgICBuZXh0OiAoc2luZ2xlIHx8IG9kZCkgPyBuZXh0KzEgOiBuZXh0LTEKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGNoYW5nZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VzW3BhZ2VdOwogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5PT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CgogICAgfSBlbHNlIHsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlzcGxheSwgZGlzcGxheXMpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJyInK2Rpc3BsYXkgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlzcGxheScpOwogICAgICAKICAgICAgc3dpdGNoKGRpc3BsYXkpIHsKICAgICAgICBjYXNlICdzaW5nbGUnOgoKICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFsIHBhZ2UgdG8gdXNlIGFzIGZvbGRlZCBwYWdlCgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICAgIGNzcyh7J292ZXJmbG93JzogJ2hpZGRlbid9KTsKCiAgICAgICAgICAgIGRhdGEucGFnZU9ianNbMF0gPSAkKCc8ZGl2IC8+JywKICAgICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICAgIGNzcyh7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgICAgICAgYXBwZW5kVG8odGhpcyk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hZGRDbGFzcygnc2hhZG93Jyk7CgogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RvdWJsZSc6CgogICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhbCBwYWdlCgogICAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pIHsKICAgICAgICAgICAgdGhpcy50dXJuKCdzdG9wJykuY3NzKHsnb3ZlcmZsb3cnOiAnJ30pOwogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1swXTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdzaGFkb3cnKTsKCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgCgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0KICAKICB9LAogIAogIC8vIEdldHMgYW5kIHNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpcGJvb2sKCiAgZGlyZWN0aW9uOiBmdW5jdGlvbihkaXIpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkaXI9PT11bmRlZmluZWQpIHsKCiAgICAgIHJldHVybiBkYXRhLmRpcmVjdGlvbjsKCiAgICB9IGVsc2UgewoKICAgICAgZGlyID0gZGlyLnRvTG93ZXJDYXNlKCk7CgogICAgICBpZiAoJC5pbkFycmF5KGRpciwgZGlyZWN0aW9ucyk9PS0xKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicgKyBkaXIgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlyZWN0aW9uJyk7CgogICAgICBpZiAoZGlyPT0ncnRsJykgewogICAgICAgICQodGhpcykuYXR0cignZGlyJywgJ2x0cicpLgogICAgICAgICAgY3NzKHtkaXJlY3Rpb246ICdsdHInfSk7CiAgICAgIH0KCiAgICAgIGRhdGEuZGlyZWN0aW9uID0gZGlyOwoKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCAkKHRoaXMpLndpZHRoKCksICQodGhpcykuaGVpZ2h0KCkpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIERldGVjdHMgYW5pbWF0aW9uCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCBhY3RpdmF0ZWQgY29ybmVyCgogIGNvcm5lcjogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciBjb3JuZXIsCiAgICAgIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlcykgewogICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgIGlmICgoY29ybmVyID0gZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdjb3JuZXInKSkpIHsKICAgICAgICAgIHJldHVybiBjb3JuZXI7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9LAoKICAvLyBHZXRzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgZmxpcGJvb2sKCiAgZGF0YTogZnVuY3Rpb24oKSB7CiAgICAKICAgIHJldHVybiB0aGlzLmRhdGEoKTsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGRhdGEuZGlzYWJsZWQgPSBkaXNhYmxlPT09dW5kZWZpbmVkIHx8IGRpc2FibGU9PT10cnVlOwoKICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgIChkYXRhLmRpc2FibGVkKSA/IHRydWUgOiAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCB2aWV3KT09LTEpOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoPT09dW5kZWZpbmVkIHx8IGhlaWdodD09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHt3aWR0aDogdGhpcy53aWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCl9OwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIHZhciBwYWdlLCBwcm9wLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykgPyB3aWR0aC8yIDogd2lkdGg7CgogICAgICB0aGlzLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pCiAgICAgICAgZGF0YS5wYWdlT2Jqc1swXS5jc3Moe3dpZHRoOiBwYWdlV2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKSBjb250aW51ZTsKCiAgICAgICAgcHJvcCA9IHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UsIHRydWUpOwoKICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyhwcm9wKTsKICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfQogIH0sCgogIC8vIFJlc2l6ZXMgZWFjaCBwYWdlCgogIHJlc2l6ZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5wYWdlc1swXSkgewogICAgICBkYXRhLnBhZ2VXcmFwWzBdLmNzcyh7bGVmdDogLXRoaXMud2lkdGgoKX0pOwogICAgICBkYXRhLnBhZ2VzWzBdLmZsaXAoJ3Jlc2l6ZScsIHRydWUpOwogICAgfQoKICAgIGZvciAocGFnZSA9IDE7IHBhZ2UgPD0gZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CgogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhbiBhbmltYXRpb24gZnJvbSB0aGUgY2FjaGUKCiAgX3JlbW92ZU12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGksIGRhdGEgPSB0aGlzLmRhdGEoKTsKICAgICAgCiAgICBmb3IgKGk9MDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykKICAgICAgaWYgKGRhdGEucGFnZU12W2ldPT1wYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlTXYuc3BsaWNlKGksIDEpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgcmV0dXJuIGZhbHNlOwoKICB9LAoKICAvLyBBZGRzIGFuIGFuaW1hdGlvbiB0byB0aGUgY2FjaGUKICAKICBfYWRkTXY6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9yZW1vdmVNdi5jYWxsKHRoaXMsIHBhZ2UpOwogICAgZGF0YS5wYWdlTXYucHVzaChwYWdlKTsKCiAgfSwKCiAgLy8gR2V0cyBpbmRleGVzIGZvciBhIHZpZXcKCiAgX3ZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAKICAgIHBhZ2UgPSBwYWdlIHx8IGRhdGEucGFnZTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIChwYWdlJTIpID8gW3BhZ2UtMSwgcGFnZV0gOiBbcGFnZSwgcGFnZSsxXTsKICAgIGVsc2UKICAgICAgcmV0dXJuIFtwYWdlXTsKCiAgfSwKCiAgLy8gR2V0cyBhIHZpZXcKCiAgdmlldzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICByZXR1cm4gWyh2aWV3WzBdPjApID8gdmlld1swXSA6IDAsCiAgICAgICAgKHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgPyB2aWV3WzFdIDogMF07CiAgICBlbHNlCiAgICAgIHJldHVybiBbKHZpZXdbMF0+MCAmJiB2aWV3WzBdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1swXSA6IDBdOwoKICB9LAoKICAvLyBTdG9wcyBhbmltYXRpb25zCgogIHN0b3A6IGZ1bmN0aW9uKGlnbm9yZSwgYW5pbWF0ZSkgewoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpKSB7CiAgCiAgICAgIHZhciBpLCBvcHRzLCBwYWdlLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIGlmIChkYXRhLnRwYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlID0gZGF0YS50cGFnZTsKICAgICAgICBkZWxldGUgZGF0YVsndHBhZ2UnXTsKICAgICAgfQoKICAgICAgZm9yIChpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewoKICAgICAgICBpZiAoIWRhdGEucGFnZU12W2ldIHx8IGRhdGEucGFnZU12W2ldPT09aWdub3JlKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIHBhZ2UgPSBkYXRhLnBhZ2VzW2RhdGEucGFnZU12W2ldXTsKICAgICAgICBvcHRzID0gcGFnZS5kYXRhKCkuZi5vcHRzOwoKICAgICAgICBwYWdlLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgYW5pbWF0ZSk7CgogICAgICAgIGlmICghYW5pbWF0ZSkKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CgogICAgICB9CiAgICB9CiAgICAKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzCgogIHBhZ2VzOiBmdW5jdGlvbihwYWdlcykgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHBhZ2VzKSB7CgogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2U+cGFnZXM7IHBhZ2UtLSkKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgfQoKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBwYWdlczsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEucGFnZSk7CgogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgdmFyIHAsCiAgICAgICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJywgcGFnZSksCiAgICAgICAgbWlzc2luZyA9IFtdOwoKICAgIGZvciAocCA9IHJhbmdlWzBdOyBwPD1yYW5nZVsxXTsgcCsrKSB7CiAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1twXSkKICAgICAgICBtaXNzaW5nLnB1c2gocCk7CiAgICB9CgogICAgaWYgKG1pc3NpbmcubGVuZ3RoPjApCiAgICAgIHRoaXMudHJpZ2dlcignbWlzc2luZycsIFttaXNzaW5nXSk7CgogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgCiAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaTxuZXdWaWV3Lmxlbmd0aDsgaSsrKSB7CgogICAgICBpZiAobmV3Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dIT1kYXRhLnpvb20pIHsKICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgbmV3Vmlld1tpXSwKICAgICAgICAgIG5ld1ZpZXcsCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dLAogICAgICAgICAgZGF0YS56b29tXSk7CgogICAgICAgIGRhdGEucGFnZVpvb21bbmV3Vmlld1tpXV0gPSBkYXRhLnpvb207CgogICAgICB9CiAgICB9CgogICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl9tYWtlUmFuZ2UuY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbCh0aGlzKTsKICAgIHRoaXMudHJpZ2dlcigndHVybmVkJywgW3BhZ2UsIG5ld1ZpZXddKTsKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgaWYgKGRhdGEub3B0cy5hdXRvQ2VudGVyKQogICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwoKICB9LAogIAogIC8vIFR1cm5zIHRoZSBwYWdlCgogIF90dXJuUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBjdXJyZW50LAogICAgICBuZXh0LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHBsYWNlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV0sCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKCiAgICBpZiAoZGF0YS5wYWdlIT1wYWdlKSB7CgogICAgICB2YXIgY3VycmVudFBhZ2UgPSBkYXRhLnBhZ2U7CgogICAgICBpZiAodHJpZ2dlcigndHVybmluZycsIHRoaXMsIFtwYWdlLCBuZXdWaWV3XSk9PSdwcmV2ZW50ZWQnKSB7CgogICAgICAgIGlmIChjdXJyZW50UGFnZT09ZGF0YS5wYWdlICYmICQuaW5BcnJheShwbGFjZSwgZGF0YS5wYWdlTXYpIT0tMSkKICAgICAgICAgIGRhdGEucGFnZXNbcGxhY2VdLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuOwoKICAgICAgfQoKICAgICAgaWYgKCQuaW5BcnJheSgxLCBuZXdWaWV3KSE9LTEpCiAgICAgICAgdGhpcy50cmlnZ2VyKCdmaXJzdCcpOwogICAgICBpZiAoJC5pbkFycmF5KGRhdGEudG90YWxQYWdlcywgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignbGFzdCcpOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgewogICAgICBjdXJyZW50ID0gdmlld1swXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMV0gJiYgcGFnZT52aWV3WzFdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzFdOwogICAgICBuZXh0ID0gbmV3Vmlld1swXTsKICAgIH0gZWxzZSBpZiAodmlld1swXSAmJiBwYWdlPHZpZXdbMF0pIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzFdOwogICAgfQoKICAgIHZhciBvcHRzQ29ybmVycyA9IGRhdGEub3B0cy50dXJuQ29ybmVycy5zcGxpdCgnLCcpLAogICAgICBmbGlwRGF0YSA9IGRhdGEucGFnZXNbY3VycmVudF0uZGF0YSgpLmYsCiAgICAgIG9wdHMgPSBmbGlwRGF0YS5vcHRzLAogICAgICBhY3R1YWxQb2ludCA9IGZsaXBEYXRhLnBvaW50OwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIGRhdGEudHBhZ2UgPSBuZXh0OwoKICAgIGlmIChvcHRzLm5leHQhPW5leHQpIHsKICAgICAgb3B0cy5uZXh0ID0gbmV4dDsKICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICB9CgogICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICBmbGlwRGF0YS5wb2ludCA9IGFjdHVhbFBvaW50OwogICAgCiAgICBpZiAoZmxpcERhdGEuZWZmZWN0PT0naGFyZCcpCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAocGFnZT5jdXJyZW50KSA/ICdyJyA6ICdsJyk7CiAgICAgIGVsc2UKICAgICAgICBkYXRhLnBhZ2VzW2N1cnJlbnRdLmZsaXAoJ3R1cm5QYWdlJywKICAgICAgICAgIChwYWdlPmN1cnJlbnQpID8gJ2wnIDogJ3InKTsKICAgIGVsc2UgewogICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKQogICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgb3B0c0Nvcm5lcnNbKHBhZ2U+Y3VycmVudCkgPyAxIDogMF0pOwogICAgICBlbHNlCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICBvcHRzQ29ybmVyc1socGFnZT5jdXJyZW50KSA/IDAgOiAxXSk7CiAgICB9CgogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgYSBwYWdlCgogIHBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gZGF0YS5wYWdlOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIWRhdGEuZGVzdHJveWluZykgewoKICAgICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSwgMTApOwoKICAgICAgICBpZiAocGFnZT4wICYmIHBhZ2U8PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICAgIGlmIChwYWdlIT1kYXRhLnBhZ2UpIHsKICAgICAgICAgICAgaWYgKCFkYXRhLmRvbmUgfHwgJC5pbkFycmF5KHBhZ2UsIHRoaXMudHVybigndmlldycpKSE9LTEpCiAgICAgICAgICAgICAgdHVybk1ldGhvZHMuX2ZpdFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgICAgfQogICAgICAKICAgICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGUgcGFnZSAnICsgcGFnZSArICcgZG9lcyBub3QgZXhpc3QnKTsKCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIG5leHQgdmlldwoKICBuZXh0OiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywgTWF0aC5taW4odGhpcy5kYXRhKCkudG90YWxQYWdlcywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5wb3AoKSArIDEpKTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgcHJldmlvdXMgdmlldwoKICBwcmV2aW91czogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMudHVybigncGFnZScsIE1hdGgubWF4KDEsCiAgICAgIHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgdGhpcy5kYXRhKCkucGFnZSkuc2hpZnQoKSAtIDEpKTsKCiAgfSwKCiAgLy8gU2hvd3MgYSBwZWVsaW5nIGNvcm5lcgoKICBwZWVsOiBmdW5jdGlvbihjb3JuZXIsIGFuaW1hdGUpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGFuaW1hdGUgPSAoYW5pbWF0ZT09PXVuZGVmaW5lZCkgPyB0cnVlIDogYW5pbWF0ZT09PXRydWU7CgogICAgaWYgKGNvcm5lcj09PWZhbHNlKSB7CiAgICAgIAogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBudWxsLCBhbmltYXRlKTsKCiAgICB9IGVsc2UgewogICAgCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGRhdGEucGFnZXNbZGF0YS5wYWdlXS5mbGlwKCdwZWVsJywgY29ybmVyLCBhbmltYXRlKTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHZhciBwYWdlOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1swXSA6IHZpZXdbMV07CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1sxXSA6IHZpZXdbMF07CgogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncGVlbCcsIGNvcm5lciwgYW5pbWF0ZSk7CgogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIC8vIEFkZHMgYSBtb3Rpb24gdG8gdGhlIGludGVybmFsIGxpc3QKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2FkZE1vdGlvblBhZ2U6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBvcHRzID0gJCh0aGlzKS5kYXRhKCkuZi5vcHRzLAogICAgICB0dXJuID0gb3B0cy50dXJuLAogICAgICBkZCA9IHR1cm4uZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9hZGRNdi5jYWxsKHR1cm4sIG9wdHMucGFnZSk7CgogIH0sCgogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpLAogICAgICBhY3R1YWxab29tID0gZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGFjdHVhbFpvb20gJiYgYWN0dWFsWm9vbSE9ZGF0YS56b29tKSB7CiAgICAgIAogICAgICBvcHRzLnR1cm4udHJpZ2dlcignem9vbWVkJyxbCiAgICAgICAgb3B0cy5wYWdlLAogICAgICAgIG9wdHMudHVybi50dXJuKCd2aWV3Jywgb3B0cy5wYWdlKSwKICAgICAgICBhY3R1YWxab29tLAogICAgICAgIGRhdGEuem9vbV0pOwoKICAgICAgZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdID0gZGF0YS56b29tOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJyAmJiBjb3JuZXIpIHsKCiAgICAgIGlmICgoY29ybmVyLmNoYXJBdCgxKT09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgfHwKICAgICAgICAoY29ybmVyLmNoYXJBdCgxKT09J3InICYmIGRhdGEuZGlyZWN0aW9uPT0ncnRsJykpCiAgICAgIHsKICAgICAgICAKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0PG9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UtMTsKICAgICAgICBvcHRzLmZvcmNlID0gdHJ1ZTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dD5vcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlKzE7CgogICAgICB9CgogICAgfQoKICAgIHR1cm5NZXRob2RzLl9hZGRNb3Rpb25QYWdlLmNhbGwoZS50YXJnZXQpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKG9wdHMudHVybik7CiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9ldmVudEVuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CiAgCiAgICB2YXIgdGhhdCA9ICQoZS50YXJnZXQpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuZiwKICAgICAgdHVybiA9IG9wdHMudHVybiwKICAgICAgZGQgPSB0dXJuLmRhdGEoKTsKCiAgICBpZiAodHVybmVkKSB7CgogICAgICB2YXIgdHBhZ2UgPSBkZC50cGFnZSB8fCBkZC5wYWdlOwogICAgCiAgICAgIGlmICh0cGFnZT09b3B0cy5uZXh0IHx8IHRwYWdlPT1vcHRzLnBhZ2UpIHsKICAgICAgICBkZWxldGUgZGQudHBhZ2U7CgogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodHVybiwgdHBhZ2UgfHwgb3B0cy5uZXh0LCB0cnVlKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0dXJuLCBvcHRzLnBhZ2UpOwogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodHVybik7CiAgICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgfQogICAgCiAgfSwKICAKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UHJlc3NlZDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gJChlLnRhcmdldCkuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGFnZXMgPSB0dXJuRGF0YS5wYWdlczsKICAgIAogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSB0cnVlOwoKICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UmVsZWFzZWQ6IGZ1bmN0aW9uKGUsIHBvaW50KSB7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0nYnInIHx8IHBvaW50LmNvcm5lcj09J3RyJykgPwogICAgICAgIHBvaW50Lng8cGFnZS53aWR0aCgpLzI6CiAgICAgICAgcG9pbnQueD5wYWdlLndpZHRoKCkvMjsKICAgIH0gZWxzZSB7CiAgICAgIG91dEFyZWEgPSBwb2ludC54PDAgfHwgcG9pbnQueD5wYWdlLndpZHRoKCk7CiAgICB9CgogICAgaWYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCktZGF0YS50aW1lPDIwMCB8fCBvdXRBcmVhKSB7CgogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHR1cm4sIGRhdGEub3B0cy5uZXh0KTsKCiAgICB9CgogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSBmYWxzZTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCiAgCiAgX2ZsaXA6IGZ1bmN0aW9uKGUpIHsKCiAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwoKICAgIHZhciBvcHRzID0gJChlLnRhcmdldCkuZGF0YSgpLmYub3B0czsKCiAgICBvcHRzLnR1cm4udHJpZ2dlcigndHVybicsIFtvcHRzLm5leHRdKTsKCiAgICBpZiAob3B0cy50dXJuLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXIpIHsKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CiAgICB9CgogIH0sCgogLy8KICBfdG91Y2hTdGFydDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgZm9yICh2YXIgcGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykgJiYKICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRTdGFydC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpPT09ZmFsc2UpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0sCiAgCiAgLy8KICBfdG91Y2hNb3ZlOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudE1vdmUuYXBwbHkoZGF0YS5wYWdlc1twYWdlXSwgYXJndW1lbnRzKTsKICAgICAgfQogICAgfQogIH0sCgogIC8vCiAgX3RvdWNoRW5kOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgfSwKCiAgLy8gQ2FsY3VsYXRlIHRoZSB6LWluZGV4IHZhbHVlIGZvciBwYWdlcyBkdXJpbmcgdGhlIGFuaW1hdGlvbgoKICBjYWxjdWxhdGVaOiBmdW5jdGlvbihtdikgewoKICAgIHZhciBpLCBwYWdlLCBuZXh0UGFnZSwgcGxhY2VQYWdlLCBkcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpLAogICAgICBjdXJyZW50UGFnZSA9IHZpZXdbMF0gfHwgdmlld1sxXSwKICAgICAgdG90YWwgPSBtdi5sZW5ndGgtMSwKICAgICAgciA9IHtwYWdlWjoge30sIHBhcnRaOiB7fSwgcGFnZVY6IHt9fSwKCiAgICAgIGFkZFZpZXcgPSBmdW5jdGlvbihwYWdlKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGF0LnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAgICAgICBpZiAodmlld1swXSkgci5wYWdlVlt2aWV3WzBdXSA9IHRydWU7CiAgICAgICAgaWYgKHZpZXdbMV0pIHIucGFnZVZbdmlld1sxXV0gPSB0cnVlOwogICAgICB9OwogICAgCiAgICBmb3IgKGkgPSAwOyBpPD10b3RhbDsgaSsrKSB7CiAgICAgIHBhZ2UgPSBtdltpXTsKICAgICAgbmV4dFBhZ2UgPSBkYXRhLnBhZ2VzW3BhZ2VdLmRhdGEoKS5mLm9wdHMubmV4dDsKICAgICAgcGxhY2VQYWdlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICAgIGFkZFZpZXcocGFnZSk7CiAgICAgIGFkZFZpZXcobmV4dFBhZ2UpOwogICAgICBkcGFnZSA9IChkYXRhLnBhZ2VQbGFjZVtuZXh0UGFnZV09PW5leHRQYWdlKSA/IG5leHRQYWdlIDogcGFnZTsKICAgICAgci5wYWdlWltkcGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMgLSBNYXRoLmFicyhjdXJyZW50UGFnZS1kcGFnZSk7CiAgICAgIHIucGFydFpbcGxhY2VQYWdlXSA9IGRhdGEudG90YWxQYWdlcyoyIC0gIHRvdGFsICsgaTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpICYmIGRhdGEucGFnZU12WzBdIT09MCkgewoKICAgICAgLy8gVXBkYXRlIG1vdGlvbgoKICAgICAgdmFyIHAsIGFwYWdlLCBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgY29ybmVyID0gdGhpcy50dXJuKCdjb3JuZXInKSwKICAgICAgICBhY3R1YWxWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewoKICAgICAgICBpZiAoIWhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSkKICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBmaXhlZCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2ZpeGVkJyk7CgogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHsKICAgICAgICAgIGRpc3BsYXk6IChwb3MucGFnZVZbcGFnZV0gfHwgZml4ZWQpID8gJycgOiAnbm9uZScsCiAgICAgICAgICB6SW5kZXg6CiAgICAgICAgICAgIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdoYXJkJykgPwogICAgICAgICAgICAgIHBvcy5wYXJ0WltwYWdlXQogICAgICAgICAgICAgIDoKICAgICAgICAgICAgICBwb3MucGFnZVpbcGFnZV0KICAgICAgICAgICAgKSB8fCAoZml4ZWQgPyAtMSA6IDApCiAgICAgICAgfSk7CgogICAgICAgIGlmICgocCA9IGRhdGEucGFnZXNbcGFnZV0pKSB7CgogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CiAgICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnRwYWdlKSB7IC8vIElzIGl0IHR1cm5pbmcgdGhlIHBhZ2UgdG8gYHRwYWdlYD8KCiAgICAgICAgICAgIHAuZmxpcCgnaG92ZXInLCBmYWxzZSkuCiAgICAgICAgICAgICAgZmxpcCgnZGlzYWJsZScsCiAgICAgICAgICAgICAgICAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCBkYXRhLnBhZ2VNdik9PS0xICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzBdICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzFdKTsKCiAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgcC5mbGlwKCdob3ZlcicsIGNvcm5lcj09PWZhbHNlKS4KICAgICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgcGFnZSE9YWN0dWFsVmlld1swXSAmJiBwYWdlIT1hY3R1YWxWaWV3WzFdKTsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VzW3BhZ2VdLgogICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLgogICAgICAgICAgICBmbGlwKCdob3ZlcicsIHRydWUpLgogICAgICAgICAgICBmbGlwKCd6JywgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gVXBkYXRlcyB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIGZsaXBib29rJ3Mgc2hhZG93CgogIF91cGRhdGVTaGFkb3c6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgdmlldywgdmlldzIsIHNoYWRvdywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcGFnZVdpZHRoID0gKGRhdGEuZGlzcGxheT09J3NpbmdsZScpID8gd2lkdGggOiB3aWR0aC8yOwoKICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAoIWRhdGEuc2hhZG93KSB7CiAgICAgIGRhdGEuc2hhZG93ID0gJCgnPGRpdiAvPicsIHsKICAgICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICAgJ2Nzcyc6IGRpdkF0dCgwLCAwLCAwKS5jc3MKICAgICAgICB9KS4KICAgICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbG9jID0gMDsKCiAgICAKICAgIGlmIChwYWdlPT12aWV3WzBdIHx8IHBhZ2U9PXZpZXdbMV0pCiAgICAgIGxvYyA9IDE7CiAgICBlbHNlIGlmICgKICAgICAgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwgcGFnZT09dmlld1sxXSsyKQogICAgKQogICAgICBsb2MgPSAyOwoKICAgIGlmICghdGhpcy50dXJuKCdhbmltYXRpbmcnKSkKICAgICAgc3dpdGNoIChsb2MpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsCiAgICAgICAgICAgIGRpc3BsYXk6ICcnCiAgICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMtMSwKICAgICAgICAgICAgZGlzcGxheTogJycKICAgICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMDoKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKAogICAgICAgICAgewogICAgICAgICAgICB6SW5kZXg6IDAsCiAgICAgICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICAgICAgKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgCiAgICByZXR1cm4gbG9jOwogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG9wdGlvbnMKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykgewogICAgCiAgICBpZiAob3B0aW9ucz09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm9wdHM7CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgICAvLyBTZXQgbmV3IHZhbHVlcwoKICAgICAgJC5leHRlbmQoZGF0YS5vcHRzLCBvcHRpb25zKTsKICAgICAgCiAgICAgIC8vIFNldCBwYWdlcwoKICAgICAgaWYgKG9wdGlvbnMucGFnZXMpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlcycsIG9wdGlvbnMucGFnZXMpOwoKICAgICAgLy8gU2V0IHBhZ2UKCiAgICAgIGlmIChvcHRpb25zLnBhZ2UpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAgIC8vIFNldCBkaXNwbGF5CgogICAgICBpZiAob3B0aW9ucy5kaXNwbGF5KQogICAgICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CiAgICAgIAogICAgICAvLyBTZXQgZGlyZWN0aW9uCgogICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24pCiAgICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CgogICAgICAvLyBTZXQgc2l6ZQoKICAgICAgaWYgKG9wdGlvbnMud2lkdGggJiYgb3B0aW9ucy5oZWlnaHQpCiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQpOwogICAgICAKICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycwoKICAgICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gb3B0aW9ucy53aGVuKQogICAgICAgICAgaWYgKGhhcyhldmVudE5hbWUsIG9wdGlvbnMud2hlbikpIHsKICAgICAgICAgICAgdGhpcy51bmJpbmQoZXZlbnROYW1lKS4KICAgICAgICAgICAgICBiaW5kKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuW2V2ZW50TmFtZV0pOwogICAgICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIEdldHMgdGhlIGN1cnJlbnQgdmVyc2lvbgoKICB2ZXJzaW9uOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdmVyc2lvbjsKCiAgfQp9LAoKLy8gTWV0aG9kcyBhbmQgcHJvcGVydGllcyBmb3IgdGhlIGZsaXAgcGFnZSBlZmZlY3QKCmZsaXBNZXRob2RzID0gewoKICAvLyBDb25zdHJ1Y3RvcgoKICBpbml0OiBmdW5jdGlvbihvcHRzKSB7CgogICAgdGhpcy5kYXRhKHtmOiB7CiAgICAgIGRpc2FibGVkOiBmYWxzZSwKICAgICAgaG92ZXI6IGZhbHNlLAogICAgICBlZmZlY3Q6ICh0aGlzLmhhc0NsYXNzKCdoYXJkJykpID8gJ2hhcmQnIDogJ3NoZWV0JwogICAgfX0pOwogIAogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mOwoKICAgIGRhdGEub3B0c1snei1pbmRleCddID0gejsKCiAgICBpZiAoZGF0YS5md3JhcHBlcikKICAgICAgZGF0YS5md3JhcHBlci5jc3MoewogICAgICAgIHpJbmRleDogeiB8fCBwYXJzZUludChkYXRhLnBhcmVudC5jc3MoJ3otaW5kZXgnKSwgMTApIHx8IDAKICAgICAgfSk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgX2NBbGxvd2VkOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwYWdlID0gZGF0YS5vcHRzLnBhZ2UsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBvZGQgPSBwYWdlJTI7CiAgICAKICAgIGlmIChkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAKICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgWyhvZGQpID8gJ3InIDogJ2wnXSA6CiAgICAgICAgWyhvZGQpID8gJ2wnIDogJ3InXTsKCiAgICB9IGVsc2UgewoKICAgICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChwYWdlPT0xKQogICAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICAgIGNvcm5lcnNbJ2ZvcndhcmQnXSA6IGNvcm5lcnNbJ2JhY2t3YXJkJ107CiAgICAgICAgZWxzZSBpZiAocGFnZT09dHVybkRhdGEudG90YWxQYWdlcykKICAgICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgICBjb3JuZXJzWydiYWNrd2FyZCddIDogY29ybmVyc1snZm9yd2FyZCddOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1sob2RkKSA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCddCiAgICAgICAgICA6CiAgICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJ107CgogICAgICB9CgogICAgfQoKICB9LAoKICBfY29ybmVyQWN0aXZhdGVkOiBmdW5jdGlvbihwKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcG9pbnQgPSB7eDogcC54LCB5OiBwLnksIGNvcm5lcjogJyd9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAocG9pbnQueDw9MCB8fCBwb2ludC55PD0wIHx8IHBvaW50Lng+PXdpZHRoIHx8IHBvaW50Lnk+PWhlaWdodCkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIHZhciBhbGxvd2VkQ29ybmVycyA9IGZsaXBNZXRob2RzLl9jQWxsb3dlZC5jYWxsKHRoaXMpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lng+d2lkdGgtY3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ3InOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lng8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ2wnOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdzaGVldCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lnk8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyKz0gJ3QnOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lnk+PWhlaWdodC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAnYic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgCiAgICAgICAgaWYgKHBvaW50Lng8PWNzeikKICAgICAgICAgIHBvaW50LmNvcm5lcis9ICdsJzsKICAgICAgICBlbHNlIGlmIChwb2ludC54Pj13aWR0aC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAncic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgcmV0dXJuICghcG9pbnQuY29ybmVyIHx8ICQuaW5BcnJheShwb2ludC5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8KICAgICAgZmFsc2UgOiBwb2ludDsKCiAgfSwKCiAgX2lzSUFyZWE6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgcG9zID0gdGhpcy5kYXRhKCkuZi5wYXJlbnQub2Zmc2V0KCk7CgogICAgZSA9IChpc1RvdWNoICYmIGUub3JpZ2luYWxFdmVudCkgPyBlLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXSA6IGU7CgogICAgcmV0dXJuIGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLAogICAgICB7CiAgICAgICAgeDogZS5wYWdlWC1wb3MubGVmdCwKICAgICAgICB5OiBlLnBhZ2VZLXBvcy50b3AKICAgICAgfSk7CgogIH0sCgogIF9jOiBmdW5jdGlvbihjb3JuZXIsIG9wdHMpIHsKCiAgICBvcHRzID0gb3B0cyB8fCAwOwoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ3RsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCBvcHRzKTsKICAgICAgY2FzZSAndHInOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCBvcHRzKTsKICAgICAgY2FzZSAnYmwnOgogICAgICAgIHJldHVybiBwb2ludDJEKG9wdHMsIHRoaXMuaGVpZ2h0KCktb3B0cyk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCktb3B0cywgdGhpcy5oZWlnaHQoKS1vcHRzKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQob3B0cywgMCk7CiAgICAgIGNhc2UgJ3InOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCAwKTsKICAgIH0KCiAgfSwKCiAgX2MyOiBmdW5jdGlvbihjb3JuZXIpIHsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICd0bCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICd0cic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICAgIGNhc2UgJ2JsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCkqMiwgdGhpcy5oZWlnaHQoKSk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICdyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCAwKTsKICAgIH0KCiAgfSwKCiAgX2ZvbGRpbmdQYWdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIG9wdHMgPSBkYXRhLm9wdHM7CgogICAgaWYgKG9wdHMudHVybikgewogICAgICBkYXRhID0gb3B0cy50dXJuLmRhdGEoKTsKICAgICAgaWYgKGRhdGEuZGlzcGxheSA9PSAnc2luZ2xlJykKICAgICAgICByZXR1cm4gKG9wdHMubmV4dD4xIHx8IG9wdHMucGFnZT4xKSA/IGRhdGEucGFnZU9ianNbMF0gOiBudWxsOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGRhdGEucGFnZU9ianNbb3B0cy5uZXh0XTsKICAgIH0KCiAgfSwKCiAgX2JhY2tHcmFkaWVudDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgICAgZ3JhZGllbnQgPSAgdHVybkRhdGEub3B0cy5ncmFkaWVudHMgJiYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnIHx8CiAgICAgICAgIChkYXRhLm9wdHMucGFnZSE9MiAmJiBkYXRhLm9wdHMucGFnZSE9dHVybkRhdGEudG90YWxQYWdlcy0xKSk7CgogICAgaWYgKGdyYWRpZW50ICYmICFkYXRhLmJzaGFkb3cpCiAgICAgIGRhdGEuYnNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgY3NzKHsncG9zaXRpb24nOiAnJywgd2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgYXBwZW5kVG8oZGF0YS5wYXJlbnQpOwoKICAgIHJldHVybiBncmFkaWVudDsKCiAgfSwKCiAgdHlwZTogZnVuY3Rpb24gKCkgewogICAgCiAgICByZXR1cm4gdGhpcy5kYXRhKCkuZi5lZmZlY3Q7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICBpZiAoZnVsbCkgewogICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgIGlmIChmdWxsKSB7CiAgICAgICAgdmFyIHNpemUgPSBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyh3aWR0aCwgMikrTWF0aC5wb3coaGVpZ2h0LCAyKSkpOwoKICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfSk7CiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9KS4KICAgICAgICAgIGNoaWxkcmVuKCc6Zmlyc3QtY2hpbGQnKS4KICAgICAgICAgIGNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBpZiAodHVybkRhdGEub3B0cy5ncmFkaWVudHMpCiAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhpcykpCiAgICAgICAgICBkYXRhLmJzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLnBhcmVudC5pcygnOnZpc2libGUnKSkgewogICAgICAgIHZhciBvZmZzZXQgPSBmaW5kUG9zKGRhdGEucGFyZW50WzBdKTsKCiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3RvcDogb2Zmc2V0LnRvcCwKICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0fSk7CgogICAgICAgIC8vaWYgKGRhdGEub3B0cy50dXJuKSB7CiAgICAgICAgIG9mZnNldCA9IGZpbmRQb3MoZGF0YS5vcHRzLnR1cm5bMF0pOwogICAgICAgICBkYXRhLmZwYXJlbnQuY3NzKHt0b3A6IC1vZmZzZXQudG9wLCBsZWZ0OiAtb2Zmc2V0LmxlZnR9KTsKICAgICAgICAvL30KICAgICAgfQoKICAgICAgdGhpcy5mbGlwKCd6JywgZGF0YS5vcHRzWyd6LWluZGV4J10pOwoKICAgICAgYnJlYWs7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOwoKICAgIGRhdGEucGFyZW50ID0gcGFyZW50OwoKICBpZiAoIWRhdGEud3JhcHBlcikKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKICAgICAgICBjc3NQcm9wZXJ0aWVzW3ZlbmRvciArICd0cmFuc2Zvcm0tc3R5bGUnXSA9ICdwcmVzZXJ2ZS0zZCc7CiAgICAgICAgY3NzUHJvcGVydGllc1t2ZW5kb3IgKyAnYmFja2ZhY2UtdmlzaWJpbGl0eSddID0gJ2hpZGRlbic7CgogICAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpLgogICAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgICAgZGF0YS5mcGFnZSA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93ID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsICAwKSkuCiAgICAgICAgICAgIGhpZGUoKS4KICAgICAgICAgICAgYXBwZW5kVG8ocGFyZW50KTsKCiAgICAgICAgICBkYXRhLmJzaGFkb3cgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgIDApKTsKICAgICAgICB9CgogICAgICBicmVhazsKICAgICAgY2FzZSAnc2hlZXQnOgogICAgICAgIAogICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgICAgICBzaXplID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3cod2lkdGgsIDIpK01hdGgucG93KGhlaWdodCwgMikpKTsKICAgICAgICAKICAgICAgICBkYXRhLmZwYXJlbnQgPSBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudDsKCiAgICAgICAgaWYgKCFkYXRhLmZwYXJlbnQpIHsKICAgICAgICAgIHZhciBmcGFyZW50ID0gJCgnPGRpdi8+Jywge2Nzczogeydwb2ludGVyLWV2ZW50cyc6ICdub25lJ319KS5oaWRlKCk7CiAgICAgICAgICAgIGZwYXJlbnQuZGF0YSgpLmZsaXBzID0gMDsKICAgICAgICAgICAgZnBhcmVudC5jc3MoZGl2QXR0KDAsIDAsICdhdXRvJywgJ3Zpc2libGUnKS5jc3MpLgogICAgICAgICAgICBhcHBlbmRUbyhkYXRhLm9wdHMudHVybik7CiAgICAgICAgICAgIAogICAgICAgICAgICBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAnYXV0bycsIHJpZ2h0OiAnYXV0byd9KTsKCiAgICAgICAgZGF0YS53cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIHRoaXMuY3NzKCd6LWluZGV4JykpKS4KICAgICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgICBwcmVwZW5kKHRoaXMpOwoKICAgICAgICBkYXRhLmZ3cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KHBhcmVudC5vZmZzZXQoKS50b3AsIHBhcmVudC5vZmZzZXQoKS5sZWZ0KSkuCiAgICAgICAgICBoaWRlKCkuCiAgICAgICAgICBhcHBlbmRUbyhkYXRhLmZwYXJlbnQpOwoKICAgICAgICBkYXRhLmZwYWdlID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIDAsICd2aXNpYmxlJykpLgogICAgICAgICAgY3NzKHtjdXJzb3I6ICdkZWZhdWx0J30pLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5md3JhcHBlcik7CgogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykKICAgICAgICAgIGRhdGEuYXNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAgMSkpLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5mcGFnZSk7CgogICAgICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCBkYXRhKTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFNldCBzaXplCiAgICBmbGlwTWV0aG9kcy5yZXNpemUuY2FsbCh0aGlzLCB0cnVlKTsKCiAgfSwKCiAgLy8gVGFrZXMgYSAyUCBwb2ludCBmcm9tIHRoZSBzY3JlZW4gYW5kIGFwcGxpZXMgdGhlIHRyYW5zZm9ybWF0aW9uCgogIF9mb2xkOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKCiAgICAgIGNhc2UgJ2hhcmQnOgoKICAgICAgICBpZiAocG9pbnQuY29ybmVyPT0nbCcpCiAgICAgICAgICBwb2ludC54ID0gTWF0aC5taW4oTWF0aC5tYXgocG9pbnQueCwgMCksIHdpZHRoKjIpOwogICAgICAgIGVsc2UKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChNYXRoLm1pbihwb2ludC54LCB3aWR0aCksIC13aWR0aCk7CgogICAgICAgIHZhciBsZWZ0UG9zLAogICAgICAgICAgc2hhZG93LAogICAgICAgICAgZ3JhZGllbnRYLAogICAgICAgICAgZnBhZ2VPcmlnaW4sCiAgICAgICAgICBwYXJlbnRPcmlnaW4sCiAgICAgICAgICB0b3RhbFBhZ2VzID0gdHVybkRhdGEudG90YWxQYWdlcywKICAgICAgICAgIHpJbmRleCA9IGRhdGEub3B0c1snei1pbmRleCddIHx8IHRvdGFsUGFnZXMsCiAgICAgICAgICBwYXJlbnRDc3MgPSB7J292ZXJmbG93JzogJ3Zpc2libGUnfSwKICAgICAgICAgIHJlbFggPSAoby54KSA/IChvLnggLSBwb2ludC54KS93aWR0aCA6IHBvaW50Lngvd2lkdGgsCiAgICAgICAgICBhbmdsZSA9IHJlbFggKiA5MCwKICAgICAgICAgIGhhbGYgPSBhbmdsZTw5MDsKCiAgICAgICAgc3dpdGNoIChwb2ludC5jb3JuZXIpIHsKICAgICAgICAgIGNhc2UgJ2wnOgoKICAgICAgICAgICAgZnBhZ2VPcmlnaW4gPSAgJzAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMTAwJSA1MCUnOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dC0xPjA7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJzEwMCUnOwogICAgICAgICAgICAgIHNoYWRvdyA9IGRhdGEub3B0cy5wYWdlKzE8dG90YWxQYWdlczsKICAgICAgICAgICAgICBncmFkaWVudFggPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdyJzoKCiAgICAgICAgICAgIGZwYWdlT3JpZ2luID0gICcxMDAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMCUgNTAlJzsKICAgICAgICAgICAgYW5nbGUgPSAtYW5nbGU7CiAgICAgICAgICAgIHdpZHRoID0gLXdpZHRoOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dCsxPHRvdGFsUGFnZXM7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJy0xMDAlJzsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMucGFnZSE9MTsKICAgICAgICAgICAgICBncmFkaWVudFggPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnRDc3NbdmVuZG9yKydwZXJzcGVjdGl2ZS1vcmlnaW4nXSA9IHBhcmVudE9yaWdpbjsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgncm90YXRlWSgnK2FuZ2xlKydkZWcpJyArCiAgICAgICAgICAndHJhbnNsYXRlM2QoMHB4LCAwcHgsICcrKHRoaXMuYXR0cignZGVwdGgnKXx8MCkrJ3B4KScsIHBhcmVudE9yaWdpbik7CgogICAgICAgIGRhdGEuZnBhZ2UudHJhbnNmb3JtKCd0cmFuc2xhdGVYKCcrd2lkdGgrJ3B4KSByb3RhdGVZKCcrKDE4MCthbmdsZSkrJ2RlZyknLCBmcGFnZU9yaWdpbik7CgogICAgICAgIGRhdGEucGFyZW50LmNzcyhwYXJlbnRDc3MpOwoKICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgcmVsWCA9IC1yZWxYKzE7CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt6SW5kZXg6IHpJbmRleCsxfSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXh9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVsWCA9IHJlbFgtMTsKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3pJbmRleDogekluZGV4fSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXgrMX0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CiAgICAgICAgICBpZiAoc2hhZG93KQogICAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHsKICAgICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgICBsZWZ0OiBsZWZ0UG9zLAogICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsJysoMC41KnJlbFgpKycpJwogICAgICAgICAgICB9KS4KICAgICAgICAgICAgdHJhbnNmb3JtKCdyb3RhdGVZKDBkZWcpJyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CgogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7b3BhY2l0eTotcmVsWCArIDF9KTsKCiAgICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgICBpZiAoZGF0YS5ic2hhZG93LnBhcmVudCgpWzBdIT1kYXRhLndyYXBwZXJbMF0pIHsKICAgICAgICAgICAgICBkYXRhLmJzaGFkb3cuYXBwZW5kVG8oZGF0YS53cmFwcGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGRhdGEuYnNoYWRvdy5wYXJlbnQoKVswXSE9ZGF0YS5mcGFnZVswXSkgewogICAgICAgICAgICAgIGRhdGEuYnNoYWRvdy5hcHBlbmRUbyhkYXRhLmZwYWdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLypkYXRhLmJzaGFkb3cuY3NzKHsKICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwnKygwLjEpKycpJwogICAgICAgICAgfSkqLwogICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LCBwb2ludDJEKGdyYWRpZW50WCAqIDEwMCwgMCksIHBvaW50MkQoKC1ncmFkaWVudFggKyAxKSoxMDAsIDApLAogICAgICAgICAgICBbWzAsICdyZ2JhKDAsMCwwLDAuMyknXSxbMSwgJ3JnYmEoMCwwLDAsMCknXV0sMik7CiAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIGEgPSAwLAogICAgICAgICAgYWxwaGEgPSAwLAogICAgICAgICAgYmV0YSwKICAgICAgICAgIHB4LAogICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEsCiAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiwKICAgICAgICAgIGdyYWRpZW50U3RhcnRWYWwsCiAgICAgICAgICBncmFkaWVudFNpemUsCiAgICAgICAgICBncmFkaWVudE9wYWNpdHksCiAgICAgICAgICBzaGFkb3dWYWwsCiAgICAgICAgICBtdiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBkZiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICB0ciA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgICB0YW4gPSBNYXRoLnRhbihhbHBoYSksCiAgICAgICAgICBhYyA9IHR1cm5EYXRhLm9wdHMuYWNjZWxlcmF0aW9uLAogICAgICAgICAgaCA9IGRhdGEud3JhcHBlci5oZWlnaHQoKSwKICAgICAgICAgIHRvcCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMCwgMSkgPT0gJ3QnLAogICAgICAgICAgbGVmdCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMSwgMSkgPT0gJ2wnLAoKICAgICAgY29tcHV0ZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmVsID0gcG9pbnQyRCgwLCAwKTsKICAgICAgICB2YXIgbWlkZGxlID0gcG9pbnQyRCgwLCAwKTsKCiAgICAgICAgcmVsLnggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiBwb2ludC54OwoKICAgICAgICBpZiAoIWhhc1JvdCkgewogICAgICAgICAgcmVsLnkgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWwueSA9IChvLnkpID8gby55IC0gcG9pbnQueSA6IHBvaW50Lnk7CiAgICAgICAgfQoKICAgICAgICBtaWRkbGUueCA9IChsZWZ0KT8gd2lkdGggLSByZWwueC8yIDogcG9pbnQueCArIHJlbC54LzI7CiAgICAgICAgbWlkZGxlLnkgPSByZWwueS8yOwogICAgICAgIAogICAgICAgIHZhciBhbHBoYSA9ICBBOTAtTWF0aC5hdGFuMihyZWwueSwgcmVsLngpLAogICAgICAgICAgZ2FtbWEgPSBhbHBoYSAtIE1hdGguYXRhbjIobWlkZGxlLnksIG1pZGRsZS54KSwKICAgICAgICAgIGRpc3RhbmNlID0gIE1hdGgubWF4KDAsIE1hdGguc2luKGdhbW1hKSAqIE1hdGguc3FydChNYXRoLnBvdyhtaWRkbGUueCwgMikgKyBNYXRoLnBvdyhtaWRkbGUueSwgMikpKTsKICAgICAgICAgIAogICAgICAgICAgYSA9IGRlZyhhbHBoYSk7CgogICAgICAgICAgdHIgPSBwb2ludDJEKGRpc3RhbmNlICogTWF0aC5zaW4oYWxwaGEpLCBkaXN0YW5jZSAqIE1hdGguY29zKGFscGhhKSk7CgogICAgICAgICAgaWYgKGFscGhhID4gQTkwKSB7CiAgICAgICAgICAgIHRyLnggPSB0ci54ICsgTWF0aC5hYnModHIueSAqIHJlbC55L3JlbC54KTsKICAgICAgICAgICAgdHIueSA9IDA7CiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHRyLngqTWF0aC50YW4oUEktYWxwaGEpKSA8IGhlaWdodCkgewogICAgICAgICAgICAgIHBvaW50LnkgPSBNYXRoLnNxcnQoTWF0aC5wb3coaGVpZ2h0LCAyKSsyICogbWlkZGxlLnggKiByZWwueCk7CiAgICAgICAgICAgICAgaWYgKHRvcCkgcG9pbnQueSA9ICBoZWlnaHQgLSBwb2ludC55OwogICAgICAgICAgICAgIHJldHVybiBjb21wdXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICBpZiAoYWxwaGE+QTkwKSB7CiAgICAgICAgICAgIHZhciBiZXRhID0gUEktYWxwaGEsIGRkID0gaCAtIGhlaWdodC9NYXRoLnNpbihiZXRhKTsKICAgICAgICAgICAgbXYgPSBwb2ludDJEKE1hdGgucm91bmQoZGQqTWF0aC5jb3MoYmV0YSkpLCBNYXRoLnJvdW5kKGRkKk1hdGguc2luKGJldGEpKSk7CiAgICAgICAgICAgIGlmIChsZWZ0KSBtdi54ID0gLSBtdi54OwogICAgICAgICAgICBpZiAodG9wKSBtdi55ID0gLSBtdi55OwogICAgICAgICAgfQoKICAgICAgICAgIHB4ID0gTWF0aC5yb3VuZCh0ci55L01hdGgudGFuKGFscGhhKSArIHRyLngpOwogICAgICAKICAgICAgICAgIHZhciBzaWRlID0gd2lkdGggLSBweCwKICAgICAgICAgICAgc2lkZVggPSBzaWRlKk1hdGguY29zKGFscGhhKjIpLAogICAgICAgICAgICBzaWRlWSA9IHNpZGUqTWF0aC5zaW4oYWxwaGEqMik7CiAgICAgICAgICAgIGRmID0gcG9pbnQyRCgKICAgICAgICAgICAgICBNYXRoLnJvdW5kKChsZWZ0ID8gc2lkZSAtc2lkZVggOiBweCtzaWRlWCkpLAogICAgICAgICAgICAgIE1hdGgucm91bmQoKHRvcCkgPyBzaWRlWSA6IGhlaWdodCAtIHNpZGVZKSk7CiAgICAgICAgICAKICAgICAgICAvLyBHcmFkaWVudHMKICAgICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewoKICAgICAgICAgICAgZ3JhZGllbnRTaXplID0gc2lkZSpNYXRoLnNpbihhbHBoYSk7CgogICAgICAgICAgICB2YXIgZW5kaW5nUG9pbnQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGF0LCBwb2ludC5jb3JuZXIpLAogICAgICAgICAgICAgZmFyID0gTWF0aC5zcXJ0KE1hdGgucG93KGVuZGluZ1BvaW50LngtcG9pbnQueCwgMikrTWF0aC5wb3coZW5kaW5nUG9pbnQueS1wb2ludC55LCAyKSkvd2lkdGg7CgogICAgICAgICAgICBzaGFkb3dWYWwgPSBNYXRoLnNpbihBOTAqKChmYXI+MSkgPyAyIC0gZmFyIDogZmFyKSk7CgogICAgICAgICAgICBncmFkaWVudE9wYWNpdHkgPSBNYXRoLm1pbihmYXIsIDEpOwoKICAgICAgICAgICAKICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0VmFsID0gZ3JhZGllbnRTaXplPjEwMCA/IChncmFkaWVudFNpemUtMTAwKS9ncmFkaWVudFNpemUgOiAwOwoKICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QSA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICBncmFkaWVudFNpemUqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSpNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CiAgICAgICAgICAgCgogICAgICAgICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhhdCkpIHsKCiAgICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSoxLjIqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTaXplKjEuMipNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CgogICAgICAgICAgICAgICAgaWYgKCFsZWZ0KSBncmFkaWVudEVuZFBvaW50Qi54ID0gMTAwLWdyYWRpZW50RW5kUG9pbnRCLng7CiAgICAgICAgICAgICAgICBpZiAoIXRvcCkgZ3JhZGllbnRFbmRQb2ludEIueSA9IDEwMC1ncmFkaWVudEVuZFBvaW50Qi55OwoKICAgICAgICAgICAgICB9CgogICAgICAgICAgfQoKICAgICAgICAgIHRyLnggPSBNYXRoLnJvdW5kKHRyLngpOwogICAgICAgICAgdHIueSA9IE1hdGgucm91bmQodHIueSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAoKICAgICAgdHJhbnNmb3JtID0gZnVuY3Rpb24odHIsIGMsIHgsIGEpIHsKICAgICAgCiAgICAgICAgdmFyIGYgPSBbJzAnLCAnYXV0byddLCBtdlcgPSAod2lkdGgtaCkqeFswXS8xMDAsIG12SCA9IChoZWlnaHQtaCkqeFsxXS8xMDAsCiAgICAgICAgICBjc3NBID0ge2xlZnQ6IGZbY1swXV0sIHRvcDogZltjWzFdXSwgcmlnaHQ6IGZbY1syXV0sIGJvdHRvbTogZltjWzNdXX0sCiAgICAgICAgICBjc3NCID0ge30sCiAgICAgICAgICBhbGlhc2luZ0ZrID0gKGEhPTkwICYmIGEhPS05MCkgPyAobGVmdCA/IC0xIDogMSkgOiAwLAogICAgICAgICAgb3JpZ2luID0geFswXSArICclICcgKyB4WzFdICsgJyUnOwoKICAgICAgICB0aGF0LmNzcyhjc3NBKS4KICAgICAgICAgIHRyYW5zZm9ybShyb3RhdGUoYSkgKyB0cmFuc2xhdGUodHIueCArIGFsaWFzaW5nRmssIHRyLnksIGFjKSwgb3JpZ2luKTsKCiAgICAgICAgZGF0YS5mcGFnZS5jc3MoY3NzQSkudHJhbnNmb3JtKAogICAgICAgICAgcm90YXRlKGEpICsKICAgICAgICAgIHRyYW5zbGF0ZSh0ci54ICsgZGYueCAtIG12LnggLSB3aWR0aCp4WzBdLzEwMCwgdHIueSArIGRmLnkgLSBtdi55IC0gaGVpZ2h0KnhbMV0vMTAwLCBhYykgKwogICAgICAgICAgcm90YXRlKCgxODAvYSAtIDIpKmEpLAogICAgICAgICAgb3JpZ2luKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSh0cmFuc2xhdGUoLXRyLnggKyBtdlctYWxpYXNpbmdGaywgLXRyLnkgKyBtdkgsIGFjKSArIHJvdGF0ZSgtYSksIG9yaWdpbik7CgogICAgICAgIGRhdGEuZndyYXBwZXIudHJhbnNmb3JtKHRyYW5zbGF0ZSgtdHIueCArIG12LnggKyBtdlcsIC10ci55ICsgbXYueSArIG12SCwgYWMpICsgcm90YXRlKC1hKSwgb3JpZ2luKTsKICAgICAgCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CgogICAgICAgICAgaWYgKHhbMF0pCiAgICAgICAgICAgIGdyYWRpZW50RW5kUG9pbnRBLnggPSAxMDAtZ3JhZGllbnRFbmRQb2ludEEueDsKCiAgICAgICAgICBpZiAoeFsxXSkKICAgICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEueSA9ICgxMDAtZ3JhZGllbnRFbmRQb2ludEEueSk7CgogICAgICAgICAgY3NzQlsnYm94LXNoYWRvdyddID0gJzAgMCAyMHB4IHJnYmEoMCwwLDAsJysoMC41KnNoYWRvd1ZhbCkrJyknOwogICAgICAgICAgZm9sZGluZy5jc3MoY3NzQik7CgogICAgICAgICAgZ3JhZGllbnQoZGF0YS5hc2hhZG93LAogICAgICAgICAgICAgIHBvaW50MkQobGVmdD8xMDA6MCwgdG9wPzA6MTAwKSwKICAgICAgICAgICAgICBwb2ludDJEKGdyYWRpZW50RW5kUG9pbnRBLngsIGdyYWRpZW50RW5kUG9pbnRBLnkpLAogICAgICAgICAgICAgIFtbZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsMCknXSwKICAgICAgICAgICAgICBbKCgxLWdyYWRpZW50U3RhcnRWYWwpKjAuOCkrZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICBbMSwgJ3JnYmEoMjU1LDI1NSwyNTUsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXV0sCiAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICBhbHBoYSk7CgogICAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9iYWNrR3JhZGllbnQuY2FsbCh0aGF0KSkKICAgICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LAogICAgICAgICAgICAgICAgcG9pbnQyRChsZWZ0PzA6MTAwLCB0b3A/MDoxMDApLAogICAgICAgICAgICAgICAgcG9pbnQyRChncmFkaWVudEVuZFBvaW50Qi54LCBncmFkaWVudEVuZFBvaW50Qi55KSwKICAgICAgICAgICAgICAgIFtbMC42LCAncmdiYSgwLDAsMCwwKSddLAogICAgICAgICAgICAgICAgWzAuOCwgJ3JnYmEoMCwwLDAsJysoMC4zKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICAgIFsxLCAncmdiYSgwLDAsMCwwKSddCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMyk7CiAgICAgICAgfQoKICAgICAgfTsKCiAgICAgIHN3aXRjaCAocG9pbnQuY29ybmVyKSB7CiAgICAgICAgY2FzZSAnbCcgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncicgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndGwnIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChwb2ludC54LCAxKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybSh0ciwgWzEsMCwwLDFdLCBbMTAwLCAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndHInIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1pbihwb2ludC54LCB3aWR0aC0xKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybShwb2ludDJEKC10ci54LCB0ci55KSwgWzAsMCwwLDFdLCBbMCwgMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdibCcgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWF4KHBvaW50LngsIDEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQodHIueCwgLXRyLnkpLCBbMSwxLDAsMF0sIFsxMDAsIDEwMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdicicgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWluKHBvaW50LngsIHdpZHRoLTEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQoLXRyLngsIC10ci55KSwgWzAsMSwxLDBdLCBbMCwgMTAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICBicmVhazsKICB9CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKG1vdmUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGxhY2UgPSB0dXJuRGF0YS5wYWdlUGxhY2U7CiAgICAgIAogICAgaWYgKG1vdmUpIHsKCiAgICAgIHZhciBuZXh0UGFnZSA9IGRhdGEub3B0cy5uZXh0OwogIAogICAgICBpZiAocGxhY2VbbmV4dFBhZ2VdIT1kYXRhLm9wdHMucGFnZSkgewoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKHRoaXMsIGZhbHNlKTsKCiAgICAgICAgdmFyIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKICAgICAgICAKICAgICAgICBmb2xkaW5nLmFwcGVuZFRvKGRhdGEuZnBhZ2UpOwogICAgICAgIHBsYWNlW25leHRQYWdlXSA9IGRhdGEub3B0cy5wYWdlOwogICAgICAgIGRhdGEuZm9sZGluZyA9IG5leHRQYWdlOwogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoZGF0YS5mb2xkaW5nKSB7CgogICAgICAgIGlmICh0dXJuRGF0YS5wYWdlc1tkYXRhLmZvbGRpbmddKSB7CiAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmbGlwIGF2YWlsYWJsZQoKICAgICAgICAgIHZhciBmbGlwRGF0YSA9IHR1cm5EYXRhLnBhZ2VzW2RhdGEuZm9sZGluZ10uZGF0YSgpLmY7CiAgICAgICAgICAKICAgICAgICAgIHR1cm5EYXRhLnBhZ2VPYmpzW2RhdGEuZm9sZGluZ10uCiAgICAgICAgICAgIGFwcGVuZFRvKGZsaXBEYXRhLndyYXBwZXIpOwoKICAgICAgICB9IGVsc2UgaWYgKHR1cm5EYXRhLnBhZ2VXcmFwW2RhdGEuZm9sZGluZ10pIHsKICAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgcGFnZVdyYXBwZXIKCiAgICAgICAgICB0dXJuRGF0YS5wYWdlT2Jqc1tkYXRhLmZvbGRpbmddLgogICAgICAgICAgICBhcHBlbmRUbyh0dXJuRGF0YS5wYWdlV3JhcFtkYXRhLmZvbGRpbmddKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nIGluIHBsYWNlKSB7CiAgICAgICAgICBwbGFjZVtkYXRhLmZvbGRpbmddID0gZGF0YS5mb2xkaW5nOwogICAgICAgIH0KCiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKCiAgICAgIH0KICAgIH0KICB9LAoKICBfc2hvd0ZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGMsIGFuaW1hdGUpIHsKCiAgICB2YXIgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpLAogICAgICBkZCA9IHRoaXMuZGF0YSgpLAogICAgICBkYXRhID0gZGQuZiwKICAgICAgdmlzaWJsZSA9IGRhdGEudmlzaWJsZTsKCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKCF2aXNpYmxlIHx8ICFkYXRhLnBvaW50IHx8IGRhdGEucG9pbnQuY29ybmVyIT1jLmNvcm5lcikgewoKICAgICAgICB2YXIgY29ybmVyID0gKAogICAgICAgICAgZGF0YS5zdGF0dXM9PSdob3ZlcicgfHwKICAgICAgICAgIGRhdGEuc3RhdHVzPT0ncGVlbCcgfHwKICAgICAgICAgIGRhdGEub3B0cy50dXJuLmRhdGEoKS5tb3VzZUFjdGlvbikgPwogICAgICAgIGMuY29ybmVyIDogbnVsbDsKCiAgICAgICAgdmlzaWJsZSA9IGZhbHNlOwoKICAgICAgICBpZiAodHJpZ2dlcignc3RhcnQnLCB0aGlzLCBbZGF0YS5vcHRzLCBjb3JuZXJdKT09J3ByZXZlbnRlZCcpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICB9CgogICAgICBpZiAoYW5pbWF0ZSkgewogICAgICAgIAogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIHBvaW50ID0gKGRhdGEucG9pbnQgJiYgZGF0YS5wb2ludC5jb3JuZXI9PWMuY29ybmVyKSA/CiAgICAgICAgICBkYXRhLnBvaW50IDogZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBjLmNvcm5lciwgMSk7CiAgICAgIAogICAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgICAgZnJvbTogW3BvaW50LngsIHBvaW50LnldLAogICAgICAgICAgdG86IFtjLngsIGMueV0sCiAgICAgICAgICBkdXJhdGlvbjogNTAwLAogICAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgYy54ID0gTWF0aC5yb3VuZCh2WzBdKTsKICAgICAgICAgICAgYy55ID0gTWF0aC5yb3VuZCh2WzFdKTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBjKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSAgewoKICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoaXMsIGMpOwoKICAgICAgICBpZiAoZGQuZWZmZWN0ICYmICFkZC5lZmZlY3QudHVybmluZykKICAgICAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwoKICAgICAgfQoKICAgICAgaWYgKCF2aXNpYmxlKSB7CgogICAgICAgIHN3aXRjaChkYXRhLmVmZmVjdCkgewogICAgICAgICAgY2FzZSAnaGFyZCc6CgogICAgICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fbW92ZUZvbGRpbmdQYWdlLmNhbGwodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgIGRhdGEuZnBhZ2Uuc2hvdygpOwogICAgICAgICAgICBpZiAoZGF0YS5vcHRzLnNoYWRvd3MpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgICAgICAgIGRhdGEudmlzaWJsZSA9IHRydWU7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudC5zaG93KCkuZGF0YSgpLmZsaXBzKys7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgZGF0YS5md3JhcHBlci5zaG93KCk7CiAgICAgICAgICAgIGlmIChkYXRhLmJzaGFkb3cpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5ic2hhZG93TG9jID0gMDsKICAgICAgICAgIGRhdGEuYnNoYWRvdy5yZW1vdmUoKTsKICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CiAgICAgICAgfQoKICAgICAgICBkYXRhLndyYXBwZXIudHJhbnNmb3JtKCcnKTsKICAgICAgICBkYXRhLmZwYWdlLmhpZGUoKTsKCiAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIGlmICgoLS1kYXRhLmZwYXJlbnQuZGF0YSgpLmZsaXBzKT09PTApCiAgICAgICAgICBkYXRhLmZwYXJlbnQuaGlkZSgpOwoKICAgICAgICB0aGlzLmNzcyh7bGVmdDogMCwgdG9wOiAwLCByaWdodDogJ2F1dG8nLCBib3R0b206ICdhdXRvJ30pLgogICAgICAgICAgdHJhbnNmb3JtKCcnKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgnJyk7CgogICAgICAgIGRhdGEuZndyYXBwZXIuaGlkZSgpOwoKICAgICAgICBpZiAoZGF0YS5ic2hhZG93KQogICAgICAgICAgZGF0YS5ic2hhZG93LmhpZGUoKTsKCiAgICAgICAgZm9sZGluZy50cmFuc2Zvcm0oJycpOwoKICAgICAgYnJlYWs7CiAgICB9CgogICAgICBkYXRhLnZpc2libGUgPSBmYWxzZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBoaWRlRm9sZGVkUGFnZTogZnVuY3Rpb24oYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEucG9pbnQpIHJldHVybjsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgIHAxID0gZGF0YS5wb2ludCwKICAgICAgaGlkZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRhdGEucG9pbnQgPSBudWxsOwogICAgICAgIGRhdGEuc3RhdHVzID0gJyc7CiAgICAgICAgdGhhdC5mbGlwKCdoaWRlJyk7CiAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCBmYWxzZV0pOwogICAgICB9OwoKICAgIGlmIChhbmltYXRlKSB7CgogICAgICB2YXIgcDQgPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHAxLmNvcm5lciksCiAgICAgICAgdG9wID0gKHAxLmNvcm5lci5zdWJzdHIoMCwxKT09J3QnKSwKICAgICAgICBkZWx0YSA9ICh0b3ApID8gTWF0aC5taW4oMCwgcDEueS1wNC55KS8yIDogTWF0aC5tYXgoMCwgcDEueS1wNC55KS8yLAogICAgICAgIHAyID0gcG9pbnQyRChwMS54LCBwMS55K2RlbHRhKSwKICAgICAgICBwMyA9IHBvaW50MkQocDQueCwgcDQueS1kZWx0YSk7CiAgICAKICAgICAgdGhpcy5hbmltYXRlZih7CiAgICAgICAgZnJvbTogMCwKICAgICAgICB0bzogMSwKICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgdmFyIG5wID0gYmV6aWVyKHAxLCBwMiwgcDMsIHA0LCB2KTsKICAgICAgICAgIHAxLnggPSBucC54OwogICAgICAgICAgcDEueSA9IG5wLnk7CiAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIHAxKTsKICAgICAgICB9LAogICAgICAgIGNvbXBsZXRlOiBoaWRlLAogICAgICAgIGR1cmF0aW9uOiA4MDAsCiAgICAgICAgaGlkaW5nOiB0cnVlCiAgICAgIH0pOwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKICAgICAgaGlkZSgpOwoKICAgIH0KICB9LAoKICB0dXJuUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCk7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gdHVybkRhdGEub3B0cy5lbGV2YXRpb24gOiAwKSwKICAgICAgcDQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGlzLCBjb3JuZXIuY29ybmVyKTsKCiAgICAgIHRoaXMudHJpZ2dlcignZmxpcCcpLgogICAgICAgIGFuaW1hdGVmKHsKICAgICAgICAgIGZyb206IDAsCiAgICAgICAgICB0bzogMSwKICAgICAgICAgIGZyYW1lOiBmdW5jdGlvbih2KSB7CgogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhhdCwgY29ybmVyKTsKCiAgICAgICAgICB9LAogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAKICAgICAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCB0cnVlXSk7CgogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiB0dXJuRGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgdHVybmluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgICAgZGF0YS5jb3JuZXIgPSBudWxsOwogIH0sCgogIG1vdmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuICdlZmZlY3QnIGluIHRoaXMuZGF0YSgpOwogIAogIH0sCgogIGlzVHVybmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZmxpcCgnbW92aW5nJykgJiYgdGhpcy5kYXRhKCkuZWZmZWN0LnR1cm5pbmc7CiAgCiAgfSwKCiAgY29ybmVyOiBmdW5jdGlvbigpIHsKICAgIAogICAgcmV0dXJuIHRoaXMuZGF0YSgpLmYuY29ybmVyOwogICAgICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwoKICAgIGlmICghZGF0YS5jb3JuZXIgJiYgIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykgJiYKICAgICAgZGF0YS5vcHRzLnBhZ2U9PXR1cm4uZGF0YSgpLnBhZ2VQbGFjZVtkYXRhLm9wdHMucGFnZV0pCiAgICB7CgogICAgICBkYXRhLmNvcm5lciA9IGZsaXBNZXRob2RzLl9pc0lBcmVhLmNhbGwodGhpcywgZSk7CgogICAgICBpZiAoZGF0YS5jb3JuZXIgJiYgZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcykpIHsKCiAgICAgICAgdGhpcy50cmlnZ2VyKCdwcmVzc2VkJywgW2RhdGEucG9pbnRdKTsKICAgICAgICBmbGlwTWV0aG9kcy5fc2hvd0ZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcik7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CgogICAgICBpZiAoZGF0YS5jb3JuZXIpIHsKCiAgICAgICAgdmFyIHBvcyA9IGRhdGEucGFyZW50Lm9mZnNldCgpOwogICAgICAgIGRhdGEuY29ybmVyLnggPSBlWzBdLnBhZ2VYLXBvcy5sZWZ0OwogICAgICAgIGRhdGEuY29ybmVyLnkgPSBlWzBdLnBhZ2VZLXBvcy50b3A7CiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywgZGF0YS5jb3JuZXIpOwoKICAgICAgfSBlbHNlIGlmIChkYXRhLmhvdmVyICYmICF0aGlzLmRhdGEoKS5lZmZlY3QgJiYgdGhpcy5pcygnOnZpc2libGUnKSkgewoKICAgICAgICB2YXIgcG9pbnQgPSBmbGlwTWV0aG9kcy5faXNJQXJlYS5jYWxsKHRoaXMsIGVbMF0pOwoKICAgICAgICBpZiAocG9pbnQpIHsKCiAgICAgICAgICBpZiAoKGRhdGEuZWZmZWN0PT0nc2hlZXQnICYmIHBvaW50LmNvcm5lci5sZW5ndGg9PTIpICB8fCBkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAgICAgICAgIGRhdGEuc3RhdHVzID0gJ2hvdmVyJzsKICAgICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgcG9pbnQuY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAgICAgcG9pbnQueCA9IG9yaWdpbi54OwogICAgICAgICAgICBwb2ludC55ID0gb3JpZ2luLnk7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIHBvaW50LCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBpZiAoZGF0YS5zdGF0dXM9PSdob3ZlcicpIHsKICAgICAgICAgICAgZGF0YS5zdGF0dXMgPSAnJzsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgX2V2ZW50RW5kOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIGNvcm5lciA9IGRhdGEuY29ybmVyOwoKICAgIGlmICghZGF0YS5kaXNhYmxlZCAmJiBjb3JuZXIpIHsKICAgICAgaWYgKHRyaWdnZXIoJ3JlbGVhc2VkJywgdGhpcywgW2RhdGEucG9pbnQgfHwgY29ybmVyXSkhPSdwcmV2ZW50ZWQnKSB7CiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgfQogICAgfQoKICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgfSwKCiAgZGlzYWJsZTogZnVuY3Rpb24oZGlzYWJsZSkgewoKICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCB7J2Rpc2FibGVkJzogZGlzYWJsZX0pOwogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIGhvdmVyOiBmdW5jdGlvbihob3ZlcikgewogICAgCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydob3Zlcic6IGhvdmVyfSk7CiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgcGVlbDogZnVuY3Rpb24gKGNvcm5lciwgYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoY29ybmVyKSB7CgogICAgICBpZiAoJC5pbkFycmF5KGNvcm5lciwgY29ybmVycy5hbGwpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJ0Nvcm5lciAnK2Nvcm5lcisnIGlzIG5vdCBwZXJtaXR0ZWQnKTsKCiAgICAgIGlmICgkLmluQXJyYXkoY29ybmVyLCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKSkhPS0xKSB7CgogICAgICAgIHZhciBwb2ludCA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAKICAgICAgICBkYXRhLnN0YXR1cyA9ICdwZWVsJzsKCiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywKICAgICAgICB7CiAgICAgICAgICBjb3JuZXI6IGNvcm5lciwKICAgICAgICAgIHg6IHBvaW50LngsCiAgICAgICAgICB5OiBwb2ludC55CiAgICAgICAgfSwgYW5pbWF0ZSk7CgogICAgICB9CgoKICAgIH0gZWxzZSB7CgogICAgICBkYXRhLnN0YXR1cyA9ICcnOwoKICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBhbmltYXRlKTsKICAgICAgCiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfQp9OwoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWModGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBub3QgYSBtZXRob2Qgb3IgcHJvcGVydHknKTsKCn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgIHRvcDogdG9wLAogICAgbGVmdDogbGVmdCwKICAgICdvdmVyZmxvdyc6IG92ZXJmIHx8ICdoaWRkZW4nLAogICAgekluZGV4OiB6SW5kZXggfHwgJ2F1dG8nCiAgfQp9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQogIAovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucwoKZnVuY3Rpb24gcmFkKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gZGVncmVlcy8xODAqUEk7Cgp9CgovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcwoKZnVuY3Rpb24gZGVnKHJhZGlhbnMpIHsKICAKICByZXR1cm4gcmFkaWFucy9QSSoxODA7Cgp9CgovLyBHZXRzIGEgMkQgcG9pbnQKCmZ1bmN0aW9uIHBvaW50MkQoeCwgeSkgewogIAogIHJldHVybiB7eDogeCwgeTogeX07Cgp9CgovLyBXZWJraXQgNTM0LjMgb24gQW5kcm9pZCB3cm9uZ2x5IHJlcGFpbnRzIGVsZW1lbnRzIHRoYXQgdXNlIG92ZXJmbG93OmhpZGRlbiArIHJvdGF0aW9uCgpmdW5jdGlvbiByb3RhdGlvbkF2YWlsYWJsZSgpIHsKICB2YXIgcGFydHM7CgogIGlmICgocGFydHMgPSAvQXBwbGVXZWJraXRcLyhbMC05XC5dKykvaS5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpKSkgewogICAgdmFyIHdlYmtpdFZlcnNpb24gPSBwYXJzZUZsb2F0KHBhcnRzWzFdKTsKICAgIHJldHVybiAod2Via2l0VmVyc2lvbj41MzQuMyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8gUmV0dXJucyB0aGUgdHJhc2xhdGUgdmFsdWUKCmZ1bmN0aW9uIHRyYW5zbGF0ZSh4LCB5LCB1c2UzZCkgewogIAogIHJldHVybiAoaGFzM2QgJiYgdXNlM2QpID8gJyB0cmFuc2xhdGUzZCgnICsgeCArICdweCwnICsgeSArICdweCwgMHB4KSAnCiAgOiAnIHRyYW5zbGF0ZSgnICsgeCArICdweCwgJyArIHkgKyAncHgpICc7Cgp9CgovLyBSZXR1cm5zIHRoZSByb3RhdGlvbiB2YWx1ZQoKZnVuY3Rpb24gcm90YXRlKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gJyByb3RhdGUoJyArIGRlZ3JlZXMgKyAnZGVnKSAnOwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gRGV0ZWN0cyB0aGUgdHJhbnNpdGlvbkVuZCBFdmVudAoKZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkVuZCgpIHsKCiAgdmFyIHQsCiAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zha2VlbGVtZW50JyksCiAgICB0cmFuc2l0aW9ucyA9IHsKICAgICAgJ3RyYW5zaXRpb24nOid0cmFuc2l0aW9uZW5kJywKICAgICAgJ09UcmFuc2l0aW9uJzonb1RyYW5zaXRpb25FbmQnLAogICAgICAnTVNUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdNb3pUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzond2Via2l0VHJhbnNpdGlvbkVuZCcKICAgIH07CgogIGZvciAodCBpbiB0cmFuc2l0aW9ucykgewogICAgaWYgKGVsLnN0eWxlW3RdICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdOwogICAgfQogIH0KfQoKLy8gR3JhZGllbnRzCgpmdW5jdGlvbiBncmFkaWVudChvYmosIHAwLCBwMSwgY29sb3JzLCBudW1Db2xvcnMpIHsKCiAgdmFyIGosIGNvbHMgPSBbXTsKCiAgaWYgKHZlbmRvcj09Jy13ZWJraXQtJykgewoKICAgIGZvciAoaiA9IDA7IGo8bnVtQ29sb3JzOyBqKyspCiAgICAgIGNvbHMucHVzaCgnY29sb3Itc3RvcCgnK2NvbG9yc1tqXVswXSsnLCAnK2NvbG9yc1tqXVsxXSsnKScpOwogICAgCiAgICBvYmouY3NzKHsnYmFja2dyb3VuZC1pbWFnZSc6CiAgICAgICAgJy13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAnKwogICAgICAgIHAwLngrJyUgJysKICAgICAgICBwMC55KyclLCcrCiAgICAgICAgcDEueCsnJSAnKwogICAgICAgIHAxLnkrJyUsICcrCiAgICAgICAgY29scy5qb2luKCcsJykgKyAnICknfSk7CiAgfSBlbHNlIHsKICAgIAogICAgcDAgPSB7eDpwMC54LzEwMCAqIG9iai53aWR0aCgpLCB5OnAwLnkvMTAwICogb2JqLmhlaWdodCgpfTsKICAgIHAxID0ge3g6cDEueC8xMDAgKiBvYmoud2lkdGgoKSwgeTpwMS55LzEwMCAqIG9iai5oZWlnaHQoKX07CgogICAgdmFyIGR4ID0gcDEueC1wMC54LAogICAgICBkeSA9IHAxLnktcDAueSwKICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCksCiAgICAgIGFuZ2xlMiA9IGFuZ2xlIC0gTWF0aC5QSS8yLAogICAgICBkaWFnb25hbCA9IE1hdGguYWJzKG9iai53aWR0aCgpKk1hdGguc2luKGFuZ2xlMikpK01hdGguYWJzKG9iai5oZWlnaHQoKSpNYXRoLmNvcyhhbmdsZTIpKSwKICAgICAgZ3JhZGllbnREaWFnb25hbCA9IE1hdGguc3FydChkeSpkeSArIGR4KmR4KSwKICAgICAgY29ybmVyID0gcG9pbnQyRCgocDEueDxwMC54KSA/IG9iai53aWR0aCgpIDogMCwgKHAxLnk8cDAueSkgPyBvYmouaGVpZ2h0KCkgOiAwKSwKICAgICAgc2xvcGUgPSBNYXRoLnRhbihhbmdsZSksCiAgICAgIGludmVyc2UgPSAtMS9zbG9wZSwKICAgICAgeCA9IChpbnZlcnNlKmNvcm5lci54IC0gY29ybmVyLnkgLSBzbG9wZSpwMC54ICsgcDAueSkvKGludmVyc2Utc2xvcGUpLAogICAgICBjID0ge3g6IHgsIHk6IGludmVyc2UqeCAtIGludmVyc2UqY29ybmVyLnggKyBjb3JuZXIueX0sCiAgICAgIHNlZ0EgPSAoTWF0aC5zcXJ0KCBNYXRoLnBvdyhjLngtcDAueCwyKSArIE1hdGgucG93KGMueS1wMC55LDIpKSk7CgogICAgICBmb3IgKGogPSAwOyBqPG51bUNvbG9yczsgaisrKQogICAgICAgIGNvbHMucHVzaCgnICcrY29sb3JzW2pdWzFdKycgJysoKHNlZ0EgKyBncmFkaWVudERpYWdvbmFsKmNvbG9yc1tqXVswXSkqMTAwL2RpYWdvbmFsKSsnJScpOwoKICAgICAgb2JqLmNzcyh7J2JhY2tncm91bmQtaW1hZ2UnOiB2ZW5kb3IrJ2xpbmVhci1ncmFkaWVudCgnICsgKC1hbmdsZSkgKyAncmFkLCcgKyBjb2xzLmpvaW4oJywnKSArICcpJ30pOwogIH0KfQoKCi8vIFRyaWdnZXJzIGFuIGV2ZW50CgpmdW5jdGlvbiB0cmlnZ2VyKGV2ZW50TmFtZSwgY29udGV4dCwgYXJncykgewoKICB2YXIgZXZlbnQgPSAkLkV2ZW50KGV2ZW50TmFtZSk7CiAgY29udGV4dC50cmlnZ2VyKGV2ZW50LCBhcmdzKTsKICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICByZXR1cm4gJ3ByZXZlbnRlZCc7CiAgZWxzZSBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgIHJldHVybiAnc3RvcHBlZCc7CiAgZWxzZQogICAgcmV0dXJuICcnOwp9CgovLyBKUyBFcnJvcnMKCmZ1bmN0aW9uIHR1cm5FcnJvcihtZXNzYWdlKSB7CgogIGZ1bmN0aW9uIFR1cm5Kc0Vycm9yKG1lc3NhZ2UpIHsKICAgIHRoaXMubmFtZSA9ICJUdXJuSnNFcnJvciI7CiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogIH0KCiAgVHVybkpzRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CiAgVHVybkpzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHVybkpzRXJyb3I7CiAgcmV0dXJuIG5ldyBUdXJuSnNFcnJvcihtZXNzYWdlKTsKCn0KCi8vIEZpbmQgdGhlIG9mZnNldCBvZiBhbiBlbGVtZW50IGlnbm9yaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKCiAgdmFyIG9mZnNldCA9IHt0b3A6IDAsIGxlZnQ6IDB9OwoKICBkb3sKICAgIG9mZnNldC5sZWZ0ICs9IG9iai5vZmZzZXRMZWZ0OwogICAgb2Zmc2V0LnRvcCArPSBvYmoub2Zmc2V0VG9wOwogIH0gd2hpbGUgKChvYmogPSBvYmoub2Zmc2V0UGFyZW50KSk7CgogIHJldHVybiBvZmZzZXQ7Cgp9CgovLyBDaGVja3MgaWYgdGhlcmUncyBoYXJkIHBhZ2UgY29tcGF0aWJpbGl0eQovLyBJRTkgaXMgdGhlIG9ubHkgYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaGFyZCBwYWdlcwoKZnVuY3Rpb24gaGFzSGFyZFBhZ2UoKSB7CiAgcmV0dXJuIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUgOS4wJyk9PS0xKTsKfQoKLy8gUmVxdWVzdCBhbiBhbmltYXRpb24KCndpbmRvdy5yZXF1ZXN0QW5pbSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7CiAgICB9OwoKfSkoKTsKCi8vIEV4dGVuZCAkLmZuCgokLmV4dGVuZCgkLmZuLCB7CgogIGZsaXA6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGRlYygkKHRoaXNbMF0pLCBmbGlwTWV0aG9kcywgYXJndW1lbnRzKTsKICB9LAoKICB0dXJuOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBkZWMoJCh0aGlzWzBdKSwgdHVybk1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHJhbnNmb3JtOiBmdW5jdGlvbih0cmFuc2Zvcm0sIG9yaWdpbikgewoKICAgIHZhciBwcm9wZXJ0aWVzID0ge307CiAgICAKICAgIGlmIChvcmlnaW4pCiAgICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSBvcmlnaW47CiAgICAKICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTsKICAKICAgIHJldHVybiB0aGlzLmNzcyhwcm9wZXJ0aWVzKTsKCiAgfSwKCiAgYW5pbWF0ZWY6IGZ1bmN0aW9uKHBvaW50KSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5lZmZlY3QpCiAgICAgIGRhdGEuZWZmZWN0LnN0b3AoKTsKCiAgICBpZiAocG9pbnQpIHsKCiAgICAgIGlmICghcG9pbnQudG8ubGVuZ3RoKSBwb2ludC50byA9IFtwb2ludC50b107CiAgICAgIGlmICghcG9pbnQuZnJvbS5sZW5ndGgpIHBvaW50LmZyb20gPSBbcG9pbnQuZnJvbV07CgogICAgICB2YXIgZGlmZiA9IFtdLAogICAgICAgIGxlbiA9IHBvaW50LnRvLmxlbmd0aCwKICAgICAgICBhbmltYXRpbmcgPSB0cnVlLAogICAgICAgIHRoYXQgPSB0aGlzLAogICAgICAgIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpLAogICAgICAgIGZyYW1lID0gZnVuY3Rpb24oKSB7CgogICAgICAgICAgaWYgKCFkYXRhLmVmZmVjdCB8fCAhYW5pbWF0aW5nKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgdmFyIHYgPSBbXSwKICAgICAgICAgICAgdGltZURpZmYgPSBNYXRoLm1pbihwb2ludC5kdXJhdGlvbiwgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHRpbWUpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgICAgIHYucHVzaChkYXRhLmVmZmVjdC5lYXNpbmcoMSwgdGltZURpZmYsIHBvaW50LmZyb21baV0sIGRpZmZbaV0sIHBvaW50LmR1cmF0aW9uKSk7CgogICAgICAgICAgcG9pbnQuZnJhbWUoKGxlbj09MSkgPyB2WzBdIDogdik7CgogICAgICAgICAgaWYgKHRpbWVEaWZmPT1wb2ludC5kdXJhdGlvbikgewogICAgICAgICAgICBkZWxldGUgZGF0YVsnZWZmZWN0J107CiAgICAgICAgICAgIHRoYXQuZGF0YShkYXRhKTsKICAgICAgICAgICAgaWYgKHBvaW50LmNvbXBsZXRlKQogICAgICAgICAgICAgIHBvaW50LmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW0oZnJhbWUpOwogICAgICAgICAgfQogICAgICAgIH07CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgIGRpZmYucHVzaChwb2ludC50b1tpXSAtIHBvaW50LmZyb21baV0pOwoKICAgICAgZGF0YS5lZmZlY3QgPSAkLmV4dGVuZCh7CiAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBhbmltYXRpbmcgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGVhc2luZzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGRhdGEpIHsKICAgICAgICAgIHJldHVybiBjICogTWF0aC5zcXJ0KDEgLSAodD10L2RhdGEtMSkqdCkgKyBiOwogICAgICAgIH0KICAgICAgfSwgcG9pbnQpOwoKICAgICAgdGhpcy5kYXRhKGRhdGEpOwoKICAgICAgZnJhbWUoKTsKCiAgICB9IGVsc2UgewogICAgICAKICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwoKICAgIH0KICB9Cn0pOwoKLy8gRXhwb3J0IHNvbWUgZ2xvYmFscwoKJC5pc1RvdWNoID0gaXNUb3VjaDsKJC5tb3VzZUV2ZW50cyA9IG1vdXNlRXZlbnRzOwokLmNzc1ByZWZpeCA9IGdldFByZWZpeDsKJC5jc3NUcmFuc2l0aW9uRW5kID0gZ2V0VHJhbnNpdGlvbkVuZDsKJC5maW5kUG9zID0gZmluZFBvczsKCn0pKGpRdWVyeSk7Cg=='],
//	nope: ['../../lib/turn.html4.min.js'],
//	both: ['../../lib/zoom.min.js', 'js/magazine.js', 'css/magazine.css'],
//	both: ['../../lib/zoom.min.js', 'css/magazine.css'],
//	both: ['css/magazine.css'],
//	both: [''],
	both: ['data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UKICogdHVybmpzLmNvbQogKiB0dXJuanMuY29tL2xpY2Vuc2UudHh0CiAqCiAqIENvcHlyaWdodCAoQykgMjAxMiBFbW1hbnVlbCBHYXJjaWEKICogQWxsIHJpZ2h0cyByZXNlcnZlZAogKiovCgooZnVuY3Rpb24oJCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhczNkLAogIAogIGhhc1JvdCwKCiAgdmVuZG9yID0gJycsCiAgCiAgdmVyc2lvbiA9ICc0LjEuMCcsCgogIFBJID0gTWF0aC5QSSwKCiAgQTkwID0gUEkvMiwKCiAgaXNUb3VjaCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdywKCiAgbW91c2VFdmVudHMgPSAoaXNUb3VjaCkgPwogICAgewogICAgICBkb3duOiAndG91Y2hzdGFydCcsCiAgICAgIG1vdmU6ICd0b3VjaG1vdmUnLAogICAgICB1cDogJ3RvdWNoZW5kJywKICAgICAgb3ZlcjogJ3RvdWNoc3RhcnQnLAogICAgICBvdXQ6ICd0b3VjaGVuZCcKICAgIH0KICAgIDoKICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICAvLyBDb250YW5zdHMgdXNlZCBmb3IgZWFjaCBjb3JuZXIKICAvLyAgIHwgdGwgKiB0ciB8CiAgLy8gbCB8ICogICAgICogfCByCiAgLy8gICB8IGJsICogYnIgfAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnYmwnLCAndGwnXSwKICAgIGZvcndhcmQ6IFsnYnInLCAndHInXSwKICAgIGFsbDogWyd0bCcsICdibCcsICd0cicsICdicicsICdsJywgJ3InXQogIH0sCgogIC8vIERpc3BsYXkgdmFsdWVzCgogIGRpc3BsYXlzID0gWydzaW5nbGUnLCAnZG91YmxlJ10sCgogIC8vIERpcmVjdGlvbiB2YWx1ZXMKCiAgZGlyZWN0aW9ucyA9IFsnbHRyJywgJ3J0bCddLAoKICAvLyBEZWZhdWx0IG9wdGlvbnMKCiAgdHVybk9wdGlvbnMgPSB7CgogICAgLy8gRW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KCiAgICBhY2NlbGVyYXRpb246IHRydWUsCgogICAgLy8gRGlzcGxheQoKICAgIGRpc3BsYXk6ICdkb3VibGUnLAoKICAgIC8vIER1cmF0aW9uIG9mIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzCgogICAgZHVyYXRpb246IDYwMCwKCiAgICAvLyBGaXJzdCBwYWdlCgogICAgcGFnZTogMSwKICAgIAogICAgLy8gRW5hYmxlcyBncmFkaWVudHMKCiAgICBncmFkaWVudHM6IHRydWUsCgogICAgLy8gQ29ybmVycyB1c2VkIHdoZW4gdHVybmluZyB0aGUgcGFnZQoKICAgIHR1cm5Db3JuZXJzOiAnYmwsYnInLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMAoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCiAgICAvLyBEZWZpbmUgY29uc3RhbnRzCiAgICAKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKICAgIGhhc1JvdCA9IHJvdGF0aW9uQXZhaWxhYmxlKCk7CiAgICB2ZW5kb3IgPSBnZXRQcmVmaXgoKTsKCiAgICB2YXIgaSwgdGhhdCA9IHRoaXMsIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRpb25zID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRpb25zKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRpb25zOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlWm9vbSA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0aW9ucy5wYWdlcyB8fCAwOwogICAgZGF0YS5ldmVudEhhbmRsZXJzID0gewogICAgICB0b3VjaFN0YXJ0OiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaFN0YXJ0LCB0aGlzKSwKICAgICAgdG91Y2hNb3ZlOiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaE1vdmUsIHRoaXMpLAogICAgICB0b3VjaEVuZDogJC5wcm94eSh0dXJuTWV0aG9kcy5fdG91Y2hFbmQsIHRoaXMpLAogICAgICBzdGFydDogJC5wcm94eSh0dXJuTWV0aG9kcy5fZXZlbnRTdGFydCwgdGhpcykKICAgIH07CgoKCiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgZm9yIChpIGluIG9wdGlvbnMud2hlbikKICAgICAgICBpZiAoaGFzKGksIG9wdGlvbnMud2hlbikpCiAgICAgICAgICB0aGlzLmJpbmQoaSwgb3B0aW9ucy53aGVuW2ldKTsKCiAgICAvLyBTZXQgdGhlIGNzcwoKICAgIHRoaXMuY3NzKHtwb3NpdGlvbjogJ3JlbGF0aXZlJywgd2lkdGg6IG9wdGlvbnMud2lkdGgsIGhlaWdodDogb3B0aW9ucy5oZWlnaHR9KTsKCiAgICAvLyBTZXQgdGhlIGluaXRpYWwgZGlzcGxheQoKICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CgogICAgLy8gU2V0IHRoZSBkaXJlY3Rpb24KCiAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24hPT0nJykKICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CiAgICAKICAgIC8vIFByZXZlbnQgYmx1ZSBzY3JlZW4gcHJvYmxlbXMgb2Ygc3dpdGNoaW5nIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtb2RlCiAgICAvLyBCeSBmb3JjaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgZXZlcgoKICAgIGlmIChoYXMzZCAmJiAhaXNUb3VjaCAmJiBvcHRpb25zLmFjY2VsZXJhdGlvbikKICAgICAgdGhpcy50cmFuc2Zvcm0odHJhbnNsYXRlKDAsIDAsIHRydWUpKTsKCiAgICAvLyBBZGQgcGFnZXMgZnJvbSB0aGUgRE9NCgogICAgZm9yIChpID0gMDsgaTxjaC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoJChjaFtpXSkuYXR0cignaWdub3JlJykhPScxJykgewogICAgICAgIHRoaXMudHVybignYWRkUGFnZScsIGNoW2ldLCArK3BhZ2VOdW0pOwogICAgICB9CiAgICB9CgogICAgLy8gRXZlbnQgbGlzdGVuZXJzCgogICAgJCh0aGlzKS5iaW5kKG1vdXNlRXZlbnRzLmRvd24sIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaFN0YXJ0KS4KICAgICAgYmluZCgnZW5kJywgdHVybk1ldGhvZHMuX2V2ZW50RW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9ldmVudFByZXNzZWQpLgogICAgICBiaW5kKCdyZWxlYXNlZCcsIHR1cm5NZXRob2RzLl9ldmVudFJlbGVhc2VkKS4KICAgICAgYmluZCgnZmxpcCcsIHR1cm5NZXRob2RzLl9mbGlwKTsKCiAgICAkKHRoaXMpLnBhcmVudCgpLmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS5iaW5kKG1vdXNlRXZlbnRzLm1vdmUsIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaE1vdmUpLgogICAgICBiaW5kKG1vdXNlRXZlbnRzLnVwLCBkYXRhLmV2ZW50SGFuZGxlcnMudG91Y2hFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAvLyBUaGlzIGZsaXBib29rIGlzIHJlYWR5CgogICAgZGF0YS5kb25lID0gdHJ1ZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZSBmcm9tIGV4dGVybmFsIGRhdGEKCiAgYWRkUGFnZTogZnVuY3Rpb24oZWxlbWVudCwgcGFnZSkgewoKICAgIHZhciBjdXJyZW50UGFnZSwKICAgICAgY2xhc3NOYW1lLAogICAgICBpbmNQYWdlcyA9IGZhbHNlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGxhc3RQYWdlID0gZGF0YS50b3RhbFBhZ2VzKzE7CgogICAgaWYgKGRhdGEuZGVzdHJveWluZykKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFJlYWQgdGhlIHBhZ2UgbnVtYmVyIGZyb20gdGhlIGNsYXNzTmFtZSBvZiBgZWxlbWVudGAgLSBmb3JtYXQ6IHBbMC05XSsKCiAgICBpZiAoKGN1cnJlbnRQYWdlID0gL1xicChbMC05XSspXGIvLmV4ZWMoJChlbGVtZW50KS5hdHRyKCdjbGFzcycpKSkpCiAgICAgIHBhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZVsxXSwgMTApOwoKICAgIGlmIChwYWdlKSB7CiAgICAgIAogICAgICBpZiAocGFnZT09bGFzdFBhZ2UpCiAgICAgICAgaW5jUGFnZXMgPSB0cnVlOwogICAgICBlbHNlIGlmIChwYWdlPmxhc3RQYWdlKQogICAgICAgIHRocm93IHR1cm5FcnJvcignUGFnZSAiJytwYWdlKyciIGNhbm5vdCBiZSBpbnNlcnRlZCcpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBwYWdlID0gbGFzdFBhZ2U7CiAgICAgIGluY1BhZ2VzID0gdHJ1ZTsKCiAgICB9CgogICAgaWYgKHBhZ2U+PTEgJiYgcGFnZTw9bGFzdFBhZ2UpIHsKCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICAgIGNsYXNzTmFtZSA9IChwYWdlJTIpID8gJyBvZGQnIDogJyBldmVuJzsKICAgICAgZWxzZQogICAgICAgIGNsYXNzTmFtZSA9ICcnOwoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIGlmIChkYXRhLmRvbmUpCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAvLyBNb3ZlIHBhZ2VzIGlmIGl0J3MgbmVjZXNzYXJ5CiAgICAgIGlmIChwYWdlIGluIGRhdGEucGFnZU9ianMpCiAgICAgICAgdHVybk1ldGhvZHMuX21vdmVQYWdlcy5jYWxsKHRoaXMsIHBhZ2UsIDEpOwoKICAgICAgLy8gSW5jcmVhc2UgdGhlIG51bWJlciBvZiBwYWdlcwogICAgICBpZiAoaW5jUGFnZXMpCiAgICAgICAgZGF0YS50b3RhbFBhZ2VzID0gbGFzdFBhZ2U7CgogICAgICAvLyBBZGQgZWxlbWVudAogICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdID0gJChlbGVtZW50KS4KICAgICAgICBjc3MoeydmbG9hdCc6ICdsZWZ0J30pLgogICAgICAgIGFkZENsYXNzKCdwYWdlIHAnICsgcGFnZSArIGNsYXNzTmFtZSk7CgogICAgICBpZiAoIWhhc0hhcmRQYWdlKCkgJiYgIGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2hhcmQnKSkgewogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0ucmVtb3ZlQ2xhc3MoJ2hhcmQnKTsKICAgICAgfQoKICAgICAgLy8gQWRkIHBhZ2UKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgLy8gV3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXSA9ICQoJzxkaXYvPicsCiAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KTsKCiAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhpcyBmbGlwYm9vawogICAgICAgICAgdGhpcy5hcHBlbmQoZGF0YS5wYWdlV3JhcFtwYWdlXSk7CgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VQbGFjZVtwYWdlXSkgewogICAgICAgICAgICAKICAgICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwogICAgICAgICAgICAvLyBNb3ZlIGBwYWdlT2Jqc1twYWdlXWAgdG8gd3JhcHBlcgogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmFwcGVuZFRvKGRhdGEucGFnZVdyYXBbcGFnZV0pOwogICAgICAgICAgCiAgICAgICAgIH0KCiAgICAgICAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIHBhZ2UKICAgICAgICAgIHZhciBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICB9CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9PSBwYWdlKSB7CgogICAgICAgICAvLyBJZiB0aGUgcGFnZSBpc24ndCBpbiBhbm90aGVyIHBsYWNlLCBjcmVhdGUgdGhlIGZsaXAgZWZmZWN0CiAgICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZUZsaXAuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIH0KICAgICAgICAKICAgICAgfSBlbHNlIHsKCiAgICAgICAgLy8gUGxhY2UKICAgICAgICBkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9IDA7CgogICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IGZyb20gdGhlIERPTQogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICAgIH0KCiAgfSwKCiAgLy8gQ2hlY2tzIGlmIGEgcGFnZSBpcyBpbiBtZW1vcnkKICAKICBoYXNQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcmV0dXJuIGhhcyhwYWdlLCB0aGlzLmRhdGEoKS5wYWdlT2Jqcyk7CiAgCiAgfSwKCiAgLy8gQ2VudGVycyB0aGUgZmxpcGJvb2sKCiAgY2VudGVyOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHNpemUgPSAkKHRoaXMpLnR1cm4oJ3NpemUnKSwKICAgICAgbGVmdCA9IDA7CgogICAgaWYgKCFkYXRhLm5vQ2VudGVyKSB7CiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICB9CiAgICAgIAogICAgICB9CgogICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBmbGlwYm9vayA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgZXZlbnRzID0gWwogICAgICAgICdlbmQnLCAnZmlyc3QnLCAnZmxpcCcsICdsYXN0JywgJ3ByZXNzZWQnLAogICAgICAgICdyZWxlYXNlZCcsICdzdGFydCcsICd0dXJuaW5nJywgJ3R1cm5lZCcsCiAgICAgICAgJ3pvb21pbmcnLCAnbWlzc2luZyddOwoKICAgIGlmICh0cmlnZ2VyKCdkZXN0cm95aW5nJywgdGhpcyk9PSdwcmV2ZW50ZWQnKQogICAgICByZXR1cm47CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkLmVhY2goZXZlbnRzLCBmdW5jdGlvbihpbmRleCwgZXZlbnROYW1lKSB7CiAgICAgIGZsaXBib29rLnVuYmluZChldmVudE5hbWUpOwogICAgfSk7CgogICAgdGhpcy5wYXJlbnQoKS51bmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS51bmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoTW92ZSkuCiAgICAgIHVuYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAgIAogICAgICBpZiAodHJpZ2dlcignem9vbWluZycsIHRoaXMsIFtuZXdab29tLCBkYXRhLnpvb21dKT09J3ByZXZlbnRlZCcpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIAogICAgICB2YXIgc2l6ZSA9IHRoaXMudHVybignc2l6ZScpLAogICAgICAgIGN1cnJlbnRWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICAgICAvKi4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7Ki8KCiAgICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwogICAgICAvKmVsc2UKICAgICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogc2l6ZS53aWR0aCAqIGl6IC8gMiAtIG5ld1dpZHRoIC8gMn0pOyovCgogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaTxjdXJyZW50Vmlldy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjdXJyZW50Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSE9ZGF0YS56b29tKSB7CiAgCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgICBjdXJyZW50Vmlld1tpXSwKICAgICAgICAgICAgY3VycmVudFZpZXcsCiAgICAgICAgICAgIGRhdGEucGFnZVpvb21bY3VycmVudFZpZXdbaV1dLAogICAgICAgICAgICBkYXRhLnpvb21dKTsKCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSA9IGRhdGEuem9vbTsKICAgICAgfQogICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLnpvb207CgogIH0sCgogIC8vIEdldHMgdGhlIHNpemUgb2YgYSBwYWdlCgogIF9wYWdlU2l6ZTogZnVuY3Rpb24ocGFnZSwgcG9zaXRpb24pIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwcm9wID0ge307CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKCiAgICAgIHByb3Aud2lkdGggPSB0aGlzLndpZHRoKCk7CiAgICAgIHByb3AuaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHByb3AudG9wID0gMDsKICAgICAgICBwcm9wLmxlZnQgPSAwOwogICAgICAgIHByb3AucmlnaHQgPSAnYXV0byc7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdmFyIHBhZ2VXaWR0aCA9IHRoaXMud2lkdGgoKS8yLAogICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ293bi1zaXplJykpIHsKICAgICAgICBwcm9wLndpZHRoID0gZGF0YS5wYWdlT2Jqc1twYWdlXS53aWR0aCgpOwogICAgICAgIHByb3AuaGVpZ2h0ID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oZWlnaHQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcm9wLndpZHRoID0gcGFnZVdpZHRoOwogICAgICAgIHByb3AuaGVpZ2h0ID0gcGFnZUhlaWdodDsKICAgICAgfQogICAgICAKICAgICAgaWYgKHBvc2l0aW9uKSB7CiAgICAgICAgdmFyIG9kZCA9IHBhZ2UlMjsKICAgICAgICBwcm9wLnRvcCA9IChwYWdlSGVpZ2h0LXByb3AuaGVpZ2h0KS8yOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9IHBhZ2VXaWR0aC1wcm9wLndpZHRoOwogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gJ2F1dG8nOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9ICdhdXRvJzsKCiAgICAgICAgfQogICAgICAKICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcm9wOwoKICB9LAoKICAvLyBQcmVwYXJlcyB0aGUgZmxpcCBlZmZlY3QgZm9yIGEgcGFnZQoKICBfbWFrZUZsaXA6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICghZGF0YS5wYWdlc1twYWdlXSAmJiBkYXRhLnBhZ2VQbGFjZVtwYWdlXT09cGFnZSkgewogICAgICAKICAgICAgdmFyIHNpbmdsZSA9IGRhdGEuZGlzcGxheT09J3NpbmdsZScsCiAgICAgICAgb2RkID0gcGFnZSUyOwoKICAgICAgZGF0YS5wYWdlc1twYWdlXSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgY3NzKHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UpKS4KICAgICAgICBmbGlwKHsKICAgICAgICAgIHBhZ2U6IHBhZ2UsCiAgICAgICAgICBuZXh0OiAob2RkIHx8IHNpbmdsZSkgPyBwYWdlKzEgOiBwYWdlLTEsCiAgICAgICAgICB0dXJuOiB0aGlzCiAgICAgICAgfSkuCiAgICAgICAgZmxpcCgnZGlzYWJsZScsIGRhdGEuZGlzYWJsZWQpOwoKICAgICAgICAvLyBJc3N1ZSBhYm91dCB6LWluZGV4CiAgICAgICAgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGF0YS5wYWdlWm9vbVtwYWdlXSA9IGRhdGEuem9vbTsKICAgICAgICAKICAgIH0KCiAgICByZXR1cm4gZGF0YS5wYWdlc1twYWdlXTsKICB9LAoKICAvLyBNYWtlcyBwYWdlcyB3aXRoaW4gYSByYW5nZQoKICBfbWFrZVJhbmdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgcmFuZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS50b3RhbFBhZ2VzPDEpCiAgICAgIHJldHVybjsKCiAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICBmb3IgKHBhZ2UgPSByYW5nZVswXTsgcGFnZTw9cmFuZ2VbMV07IHBhZ2UrKykKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgfSwKCiAgLy8gUmV0dXJucyBhIHJhbmdlIG9mIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBET00KICAvLyBFeGFtcGxlOgogIC8vIC0gcGFnZSBpbiB0aGUgY3VycmVudCB2aWV3LCByZXR1cm4gdHJ1ZQogIC8vICogcGFnZSBpcyBpbiB0aGUgcmFuZ2UsIHJldHVybiB0cnVlCiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UKICAvLwogIC8vIDEgMi0zIDQtNSA2LTcgOC05IDEwLTExIDEyLTEzCiAgLy8gICAqKiAgKiogIC0tICAgKiogICoqCgogIHJhbmdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIHJlbWFpbmluZ1BhZ2VzLCBsZWZ0LCByaWdodCwgdmlldywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgICAgcGFnZSA9IHBhZ2UgfHwgZGF0YS50cGFnZSB8fCBkYXRhLnBhZ2UgfHwgMTsKICAgICAgdmlldyA9IHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgcGFnZSk7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicrcGFnZSsnIiBpcyBub3QgYSB2YWxpZCBwYWdlJyk7CgogICAgCiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdIHx8IHZpZXdbMF07CiAgICAgIAogICAgICBpZiAodmlld1swXT49MSAmJiB2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpIHsKCiAgICAgICAgcmVtYWluaW5nUGFnZXMgPSBNYXRoLmZsb29yKChwYWdlc0luRE9NLTIpLzIpOwoKICAgICAgICBpZiAoZGF0YS50b3RhbFBhZ2VzLXZpZXdbMV0gPiB2aWV3WzBdKSB7CiAgICAgICAgICBsZWZ0ID0gTWF0aC5taW4odmlld1swXS0xLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICByaWdodCA9IDIqcmVtYWluaW5nUGFnZXMtbGVmdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmlnaHQgPSBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSwgcmVtYWluaW5nUGFnZXMpOwogICAgICAgICAgbGVmdCA9IDIqcmVtYWluaW5nUGFnZXMtcmlnaHQ7CiAgICAgICAgfQoKICAgICAgfSBlbHNlIHsKICAgICAgICBsZWZ0ID0gcGFnZXNJbkRPTS0xOwogICAgICAgIHJpZ2h0ID0gcGFnZXNJbkRPTS0xOwogICAgICB9CgogICAgICByZXR1cm4gW01hdGgubWF4KDEsIHZpZXdbMF0tbGVmdCksCiAgICAgICAgICBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMsIHZpZXdbMV0rcmlnaHQpXTsKCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiBhIHBhZ2UgaXMgd2l0aGluIHRoZSByYW5nZSBvZiBgcGFnZXNJbkRPTWAgZnJvbSB0aGUgY3VycmVudCB2aWV3CgogIF9uZWNlc3NQYWdlOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIGlmIChwYWdlPT09MCkKICAgICAgcmV0dXJuIHRydWU7CgogICAgdmFyIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScpOwoKICAgIHJldHVybiB0aGlzLmRhdGEoKS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhIHBhZ2UKCiAgcmVtb3ZlUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgLy8gRGVsZXRlIGFsbCB0aGUgcGFnZXMKICAgIGlmIChwYWdlPT0nKicpIHsKICAgICAgCiAgICAgIHdoaWxlIChkYXRhLnRvdGFsUGFnZXMhPT0wKSB7CiAgICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgICAKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pIHsKCiAgICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAgIC8vIFJlbW92ZSBgcGFnZWAKICAgICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgICB9CgogICAgICAvLyBNb3ZlIHRoZSBwYWdlcwogICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgLTEpOwoKICAgICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgICAgZGF0YS50b3RhbFBhZ2VzID0gZGF0YS50b3RhbFBhZ2VzLTE7CgogICAgICAvLyBDaGVjayB0aGUgY3VycmVudCB2aWV3CgogICAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykgewoKICAgICAgIGRhdGEucGFnZSA9IG51bGw7CiAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEudG90YWxQYWdlcyk7CgogICAgICB9IGVsc2UgewoKICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICAKICB9LAoKICAvLyBNb3ZlcyBwYWdlcwoKICBfbW92ZVBhZ2VzOiBmdW5jdGlvbihmcm9tLCBjaGFuZ2UpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2luZ2xlID0gZGF0YS5kaXNwbGF5PT0nc2luZ2xlJywKICAgICAgbW92ZSA9IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICAgICAgdmFyIG5leHQgPSBwYWdlICsgY2hhbmdlLAogICAgICAgICAgb2RkID0gbmV4dCUyLAogICAgICAgICAgY2xhc3NOYW1lID0gKG9kZCkgPyAnIG9kZCAnIDogJyBldmVuICc7CgogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1tuZXh0XSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgICAgIHJlbW92ZUNsYXNzKCdwJyArIHBhZ2UgKyAnIG9kZCBldmVuJykuCiAgICAgICAgICAgIGFkZENsYXNzKCdwJyArIG5leHQgKyBjbGFzc05hbWUpOwoKICAgICAgICBpZiAoZGF0YS5wYWdlUGxhY2VbcGFnZV0gJiYgZGF0YS5wYWdlV3JhcFtwYWdlXSkgewoKICAgICAgICAgIGRhdGEucGFnZVBsYWNlW25leHRdID0gbmV4dDsKICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW25leHRdLmhhc0NsYXNzKCdmaXhlZCcpKQogICAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXS4KICAgICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGF0LCBuZXh0LCB0cnVlKSkuCiAgICAgICAgICAgICAgYXR0cigncGFnZScsIG5leHQpOwogICAgICAKICAgICAgICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgICAgICAgZGF0YS5wYWdlc1tuZXh0XSA9IGRhdGEucGFnZXNbcGFnZV0uCiAgICAgICAgICAgICAgICBmbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgICBwYWdlOiBuZXh0LAogICAgICAgICAgICAgICAgICBuZXh0OiAoc2luZ2xlIHx8IG9kZCkgPyBuZXh0KzEgOiBuZXh0LTEKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGNoYW5nZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VzW3BhZ2VdOwogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5PT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CgogICAgfSBlbHNlIHsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlzcGxheSwgZGlzcGxheXMpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJyInK2Rpc3BsYXkgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlzcGxheScpOwogICAgICAKICAgICAgc3dpdGNoKGRpc3BsYXkpIHsKICAgICAgICBjYXNlICdzaW5nbGUnOgoKICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFsIHBhZ2UgdG8gdXNlIGFzIGZvbGRlZCBwYWdlCgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICAgIGNzcyh7J292ZXJmbG93JzogJ2hpZGRlbid9KTsKCiAgICAgICAgICAgIGRhdGEucGFnZU9ianNbMF0gPSAkKCc8ZGl2IC8+JywKICAgICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICAgIGNzcyh7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgICAgICAgYXBwZW5kVG8odGhpcyk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hZGRDbGFzcygnc2hhZG93Jyk7CgogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RvdWJsZSc6CgogICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhbCBwYWdlCgogICAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pIHsKICAgICAgICAgICAgdGhpcy50dXJuKCdzdG9wJykuY3NzKHsnb3ZlcmZsb3cnOiAnJ30pOwogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1swXTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdzaGFkb3cnKTsKCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgCgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0KICAKICB9LAogIAogIC8vIEdldHMgYW5kIHNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpcGJvb2sKCiAgZGlyZWN0aW9uOiBmdW5jdGlvbihkaXIpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkaXI9PT11bmRlZmluZWQpIHsKCiAgICAgIHJldHVybiBkYXRhLmRpcmVjdGlvbjsKCiAgICB9IGVsc2UgewoKICAgICAgZGlyID0gZGlyLnRvTG93ZXJDYXNlKCk7CgogICAgICBpZiAoJC5pbkFycmF5KGRpciwgZGlyZWN0aW9ucyk9PS0xKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicgKyBkaXIgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlyZWN0aW9uJyk7CgogICAgICBpZiAoZGlyPT0ncnRsJykgewogICAgICAgICQodGhpcykuYXR0cignZGlyJywgJ2x0cicpLgogICAgICAgICAgY3NzKHtkaXJlY3Rpb246ICdsdHInfSk7CiAgICAgIH0KCiAgICAgIGRhdGEuZGlyZWN0aW9uID0gZGlyOwoKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCAkKHRoaXMpLndpZHRoKCksICQodGhpcykuaGVpZ2h0KCkpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIERldGVjdHMgYW5pbWF0aW9uCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCBhY3RpdmF0ZWQgY29ybmVyCgogIGNvcm5lcjogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciBjb3JuZXIsCiAgICAgIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlcykgewogICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgIGlmICgoY29ybmVyID0gZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdjb3JuZXInKSkpIHsKICAgICAgICAgIHJldHVybiBjb3JuZXI7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9LAoKICAvLyBHZXRzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgZmxpcGJvb2sKCiAgZGF0YTogZnVuY3Rpb24oKSB7CiAgICAKICAgIHJldHVybiB0aGlzLmRhdGEoKTsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGRhdGEuZGlzYWJsZWQgPSBkaXNhYmxlPT09dW5kZWZpbmVkIHx8IGRpc2FibGU9PT10cnVlOwoKICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgIChkYXRhLmRpc2FibGVkKSA/IHRydWUgOiAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCB2aWV3KT09LTEpOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoPT09dW5kZWZpbmVkIHx8IGhlaWdodD09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHt3aWR0aDogdGhpcy53aWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCl9OwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIHZhciBwYWdlLCBwcm9wLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykgPyB3aWR0aC8yIDogd2lkdGg7CgogICAgICB0aGlzLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pCiAgICAgICAgZGF0YS5wYWdlT2Jqc1swXS5jc3Moe3dpZHRoOiBwYWdlV2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKSBjb250aW51ZTsKCiAgICAgICAgcHJvcCA9IHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UsIHRydWUpOwoKICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyhwcm9wKTsKICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfQogIH0sCgogIC8vIFJlc2l6ZXMgZWFjaCBwYWdlCgogIHJlc2l6ZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5wYWdlc1swXSkgewogICAgICBkYXRhLnBhZ2VXcmFwWzBdLmNzcyh7bGVmdDogLXRoaXMud2lkdGgoKX0pOwogICAgICBkYXRhLnBhZ2VzWzBdLmZsaXAoJ3Jlc2l6ZScsIHRydWUpOwogICAgfQoKICAgIGZvciAocGFnZSA9IDE7IHBhZ2UgPD0gZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CgogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhbiBhbmltYXRpb24gZnJvbSB0aGUgY2FjaGUKCiAgX3JlbW92ZU12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGksIGRhdGEgPSB0aGlzLmRhdGEoKTsKICAgICAgCiAgICBmb3IgKGk9MDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykKICAgICAgaWYgKGRhdGEucGFnZU12W2ldPT1wYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlTXYuc3BsaWNlKGksIDEpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgcmV0dXJuIGZhbHNlOwoKICB9LAoKICAvLyBBZGRzIGFuIGFuaW1hdGlvbiB0byB0aGUgY2FjaGUKICAKICBfYWRkTXY6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9yZW1vdmVNdi5jYWxsKHRoaXMsIHBhZ2UpOwogICAgZGF0YS5wYWdlTXYucHVzaChwYWdlKTsKCiAgfSwKCiAgLy8gR2V0cyBpbmRleGVzIGZvciBhIHZpZXcKCiAgX3ZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAKICAgIHBhZ2UgPSBwYWdlIHx8IGRhdGEucGFnZTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIChwYWdlJTIpID8gW3BhZ2UtMSwgcGFnZV0gOiBbcGFnZSwgcGFnZSsxXTsKICAgIGVsc2UKICAgICAgcmV0dXJuIFtwYWdlXTsKCiAgfSwKCiAgLy8gR2V0cyBhIHZpZXcKCiAgdmlldzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICByZXR1cm4gWyh2aWV3WzBdPjApID8gdmlld1swXSA6IDAsCiAgICAgICAgKHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgPyB2aWV3WzFdIDogMF07CiAgICBlbHNlCiAgICAgIHJldHVybiBbKHZpZXdbMF0+MCAmJiB2aWV3WzBdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1swXSA6IDBdOwoKICB9LAoKICAvLyBTdG9wcyBhbmltYXRpb25zCgogIHN0b3A6IGZ1bmN0aW9uKGlnbm9yZSwgYW5pbWF0ZSkgewoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpKSB7CiAgCiAgICAgIHZhciBpLCBvcHRzLCBwYWdlLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIGlmIChkYXRhLnRwYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlID0gZGF0YS50cGFnZTsKICAgICAgICBkZWxldGUgZGF0YVsndHBhZ2UnXTsKICAgICAgfQoKICAgICAgZm9yIChpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewoKICAgICAgICBpZiAoIWRhdGEucGFnZU12W2ldIHx8IGRhdGEucGFnZU12W2ldPT09aWdub3JlKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIHBhZ2UgPSBkYXRhLnBhZ2VzW2RhdGEucGFnZU12W2ldXTsKICAgICAgICBvcHRzID0gcGFnZS5kYXRhKCkuZi5vcHRzOwoKICAgICAgICBwYWdlLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgYW5pbWF0ZSk7CgogICAgICAgIGlmICghYW5pbWF0ZSkKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CgogICAgICB9CiAgICB9CiAgICAKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzCgogIHBhZ2VzOiBmdW5jdGlvbihwYWdlcykgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHBhZ2VzKSB7CgogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2U+cGFnZXM7IHBhZ2UtLSkKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgfQoKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBwYWdlczsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEucGFnZSk7CgogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgdmFyIHAsCiAgICAgICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJywgcGFnZSksCiAgICAgICAgbWlzc2luZyA9IFtdOwoKICAgIGZvciAocCA9IHJhbmdlWzBdOyBwPD1yYW5nZVsxXTsgcCsrKSB7CiAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1twXSkKICAgICAgICBtaXNzaW5nLnB1c2gocCk7CiAgICB9CgogICAgaWYgKG1pc3NpbmcubGVuZ3RoPjApCiAgICAgIHRoaXMudHJpZ2dlcignbWlzc2luZycsIFttaXNzaW5nXSk7CgogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgCiAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaTxuZXdWaWV3Lmxlbmd0aDsgaSsrKSB7CgogICAgICBpZiAobmV3Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dIT1kYXRhLnpvb20pIHsKICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgbmV3Vmlld1tpXSwKICAgICAgICAgIG5ld1ZpZXcsCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dLAogICAgICAgICAgZGF0YS56b29tXSk7CgogICAgICAgIGRhdGEucGFnZVpvb21bbmV3Vmlld1tpXV0gPSBkYXRhLnpvb207CgogICAgICB9CiAgICB9CgogICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl9tYWtlUmFuZ2UuY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbCh0aGlzKTsKICAgIHRoaXMudHJpZ2dlcigndHVybmVkJywgW3BhZ2UsIG5ld1ZpZXddKTsKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgaWYgKGRhdGEub3B0cy5hdXRvQ2VudGVyKQogICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwoKICB9LAogIAogIC8vIFR1cm5zIHRoZSBwYWdlCgogIF90dXJuUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBjdXJyZW50LAogICAgICBuZXh0LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHBsYWNlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV0sCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKCiAgICBpZiAoZGF0YS5wYWdlIT1wYWdlKSB7CgogICAgICB2YXIgY3VycmVudFBhZ2UgPSBkYXRhLnBhZ2U7CgogICAgICBpZiAodHJpZ2dlcigndHVybmluZycsIHRoaXMsIFtwYWdlLCBuZXdWaWV3XSk9PSdwcmV2ZW50ZWQnKSB7CgogICAgICAgIGlmIChjdXJyZW50UGFnZT09ZGF0YS5wYWdlICYmICQuaW5BcnJheShwbGFjZSwgZGF0YS5wYWdlTXYpIT0tMSkKICAgICAgICAgIGRhdGEucGFnZXNbcGxhY2VdLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuOwoKICAgICAgfQoKICAgICAgaWYgKCQuaW5BcnJheSgxLCBuZXdWaWV3KSE9LTEpCiAgICAgICAgdGhpcy50cmlnZ2VyKCdmaXJzdCcpOwogICAgICBpZiAoJC5pbkFycmF5KGRhdGEudG90YWxQYWdlcywgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignbGFzdCcpOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgewogICAgICBjdXJyZW50ID0gdmlld1swXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMV0gJiYgcGFnZT52aWV3WzFdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzFdOwogICAgICBuZXh0ID0gbmV3Vmlld1swXTsKICAgIH0gZWxzZSBpZiAodmlld1swXSAmJiBwYWdlPHZpZXdbMF0pIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzFdOwogICAgfQoKICAgIHZhciBvcHRzQ29ybmVycyA9IGRhdGEub3B0cy50dXJuQ29ybmVycy5zcGxpdCgnLCcpLAogICAgICBmbGlwRGF0YSA9IGRhdGEucGFnZXNbY3VycmVudF0uZGF0YSgpLmYsCiAgICAgIG9wdHMgPSBmbGlwRGF0YS5vcHRzLAogICAgICBhY3R1YWxQb2ludCA9IGZsaXBEYXRhLnBvaW50OwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIGRhdGEudHBhZ2UgPSBuZXh0OwoKICAgIGlmIChvcHRzLm5leHQhPW5leHQpIHsKICAgICAgb3B0cy5uZXh0ID0gbmV4dDsKICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICB9CgogICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICBmbGlwRGF0YS5wb2ludCA9IGFjdHVhbFBvaW50OwogICAgCiAgICBpZiAoZmxpcERhdGEuZWZmZWN0PT0naGFyZCcpCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAocGFnZT5jdXJyZW50KSA/ICdyJyA6ICdsJyk7CiAgICAgIGVsc2UKICAgICAgICBkYXRhLnBhZ2VzW2N1cnJlbnRdLmZsaXAoJ3R1cm5QYWdlJywKICAgICAgICAgIChwYWdlPmN1cnJlbnQpID8gJ2wnIDogJ3InKTsKICAgIGVsc2UgewogICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKQogICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgb3B0c0Nvcm5lcnNbKHBhZ2U+Y3VycmVudCkgPyAxIDogMF0pOwogICAgICBlbHNlCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICBvcHRzQ29ybmVyc1socGFnZT5jdXJyZW50KSA/IDAgOiAxXSk7CiAgICB9CgogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgYSBwYWdlCgogIHBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gZGF0YS5wYWdlOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIWRhdGEuZGVzdHJveWluZykgewoKICAgICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSwgMTApOwoKICAgICAgICBpZiAocGFnZT4wICYmIHBhZ2U8PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICAgIGlmIChwYWdlIT1kYXRhLnBhZ2UpIHsKICAgICAgICAgICAgaWYgKCFkYXRhLmRvbmUgfHwgJC5pbkFycmF5KHBhZ2UsIHRoaXMudHVybigndmlldycpKSE9LTEpCiAgICAgICAgICAgICAgdHVybk1ldGhvZHMuX2ZpdFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgICAgfQogICAgICAKICAgICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGUgcGFnZSAnICsgcGFnZSArICcgZG9lcyBub3QgZXhpc3QnKTsKCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIG5leHQgdmlldwoKICBuZXh0OiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywgTWF0aC5taW4odGhpcy5kYXRhKCkudG90YWxQYWdlcywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5wb3AoKSArIDEpKTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgcHJldmlvdXMgdmlldwoKICBwcmV2aW91czogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMudHVybigncGFnZScsIE1hdGgubWF4KDEsCiAgICAgIHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgdGhpcy5kYXRhKCkucGFnZSkuc2hpZnQoKSAtIDEpKTsKCiAgfSwKCiAgLy8gU2hvd3MgYSBwZWVsaW5nIGNvcm5lcgoKICBwZWVsOiBmdW5jdGlvbihjb3JuZXIsIGFuaW1hdGUpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGFuaW1hdGUgPSAoYW5pbWF0ZT09PXVuZGVmaW5lZCkgPyB0cnVlIDogYW5pbWF0ZT09PXRydWU7CgogICAgaWYgKGNvcm5lcj09PWZhbHNlKSB7CiAgICAgIAogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBudWxsLCBhbmltYXRlKTsKCiAgICB9IGVsc2UgewogICAgCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGRhdGEucGFnZXNbZGF0YS5wYWdlXS5mbGlwKCdwZWVsJywgY29ybmVyLCBhbmltYXRlKTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHZhciBwYWdlOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1swXSA6IHZpZXdbMV07CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1sxXSA6IHZpZXdbMF07CgogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncGVlbCcsIGNvcm5lciwgYW5pbWF0ZSk7CgogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIC8vIEFkZHMgYSBtb3Rpb24gdG8gdGhlIGludGVybmFsIGxpc3QKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2FkZE1vdGlvblBhZ2U6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBvcHRzID0gJCh0aGlzKS5kYXRhKCkuZi5vcHRzLAogICAgICB0dXJuID0gb3B0cy50dXJuLAogICAgICBkZCA9IHR1cm4uZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9hZGRNdi5jYWxsKHR1cm4sIG9wdHMucGFnZSk7CgogIH0sCgogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpLAogICAgICBhY3R1YWxab29tID0gZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGFjdHVhbFpvb20gJiYgYWN0dWFsWm9vbSE9ZGF0YS56b29tKSB7CiAgICAgIAogICAgICBvcHRzLnR1cm4udHJpZ2dlcignem9vbWVkJyxbCiAgICAgICAgb3B0cy5wYWdlLAogICAgICAgIG9wdHMudHVybi50dXJuKCd2aWV3Jywgb3B0cy5wYWdlKSwKICAgICAgICBhY3R1YWxab29tLAogICAgICAgIGRhdGEuem9vbV0pOwoKICAgICAgZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdID0gZGF0YS56b29tOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJyAmJiBjb3JuZXIpIHsKCiAgICAgIGlmICgoY29ybmVyLmNoYXJBdCgxKT09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgfHwKICAgICAgICAoY29ybmVyLmNoYXJBdCgxKT09J3InICYmIGRhdGEuZGlyZWN0aW9uPT0ncnRsJykpCiAgICAgIHsKICAgICAgICAKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0PG9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UtMTsKICAgICAgICBvcHRzLmZvcmNlID0gdHJ1ZTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dD5vcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlKzE7CgogICAgICB9CgogICAgfQoKICAgIHR1cm5NZXRob2RzLl9hZGRNb3Rpb25QYWdlLmNhbGwoZS50YXJnZXQpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKG9wdHMudHVybik7CiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9ldmVudEVuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CiAgCiAgICB2YXIgdGhhdCA9ICQoZS50YXJnZXQpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuZiwKICAgICAgdHVybiA9IG9wdHMudHVybiwKICAgICAgZGQgPSB0dXJuLmRhdGEoKTsKCiAgICBpZiAodHVybmVkKSB7CgogICAgICB2YXIgdHBhZ2UgPSBkZC50cGFnZSB8fCBkZC5wYWdlOwogICAgCiAgICAgIGlmICh0cGFnZT09b3B0cy5uZXh0IHx8IHRwYWdlPT1vcHRzLnBhZ2UpIHsKICAgICAgICBkZWxldGUgZGQudHBhZ2U7CgogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodHVybiwgdHBhZ2UgfHwgb3B0cy5uZXh0LCB0cnVlKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0dXJuLCBvcHRzLnBhZ2UpOwogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodHVybik7CiAgICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgfQogICAgCiAgfSwKICAKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UHJlc3NlZDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gJChlLnRhcmdldCkuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGFnZXMgPSB0dXJuRGF0YS5wYWdlczsKICAgIAogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSB0cnVlOwoKICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UmVsZWFzZWQ6IGZ1bmN0aW9uKGUsIHBvaW50KSB7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0nYnInIHx8IHBvaW50LmNvcm5lcj09J3RyJykgPwogICAgICAgIHBvaW50Lng8cGFnZS53aWR0aCgpLzI6CiAgICAgICAgcG9pbnQueD5wYWdlLndpZHRoKCkvMjsKICAgIH0gZWxzZSB7CiAgICAgIG91dEFyZWEgPSBwb2ludC54PDAgfHwgcG9pbnQueD5wYWdlLndpZHRoKCk7CiAgICB9CgogICAgaWYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCktZGF0YS50aW1lPDIwMCB8fCBvdXRBcmVhKSB7CgogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHR1cm4sIGRhdGEub3B0cy5uZXh0KTsKCiAgICB9CgogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSBmYWxzZTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCiAgCiAgX2ZsaXA6IGZ1bmN0aW9uKGUpIHsKCiAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwoKICAgIHZhciBvcHRzID0gJChlLnRhcmdldCkuZGF0YSgpLmYub3B0czsKCiAgICBvcHRzLnR1cm4udHJpZ2dlcigndHVybicsIFtvcHRzLm5leHRdKTsKCiAgICBpZiAob3B0cy50dXJuLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXIpIHsKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CiAgICB9CgogIH0sCgogLy8KICBfdG91Y2hTdGFydDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgZm9yICh2YXIgcGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykgJiYKICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRTdGFydC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpPT09ZmFsc2UpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0sCiAgCiAgLy8KICBfdG91Y2hNb3ZlOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudE1vdmUuYXBwbHkoZGF0YS5wYWdlc1twYWdlXSwgYXJndW1lbnRzKTsKICAgICAgfQogICAgfQogIH0sCgogIC8vCiAgX3RvdWNoRW5kOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgfSwKCiAgLy8gQ2FsY3VsYXRlIHRoZSB6LWluZGV4IHZhbHVlIGZvciBwYWdlcyBkdXJpbmcgdGhlIGFuaW1hdGlvbgoKICBjYWxjdWxhdGVaOiBmdW5jdGlvbihtdikgewoKICAgIHZhciBpLCBwYWdlLCBuZXh0UGFnZSwgcGxhY2VQYWdlLCBkcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpLAogICAgICBjdXJyZW50UGFnZSA9IHZpZXdbMF0gfHwgdmlld1sxXSwKICAgICAgdG90YWwgPSBtdi5sZW5ndGgtMSwKICAgICAgciA9IHtwYWdlWjoge30sIHBhcnRaOiB7fSwgcGFnZVY6IHt9fSwKCiAgICAgIGFkZFZpZXcgPSBmdW5jdGlvbihwYWdlKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGF0LnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAgICAgICBpZiAodmlld1swXSkgci5wYWdlVlt2aWV3WzBdXSA9IHRydWU7CiAgICAgICAgaWYgKHZpZXdbMV0pIHIucGFnZVZbdmlld1sxXV0gPSB0cnVlOwogICAgICB9OwogICAgCiAgICBmb3IgKGkgPSAwOyBpPD10b3RhbDsgaSsrKSB7CiAgICAgIHBhZ2UgPSBtdltpXTsKICAgICAgbmV4dFBhZ2UgPSBkYXRhLnBhZ2VzW3BhZ2VdLmRhdGEoKS5mLm9wdHMubmV4dDsKICAgICAgcGxhY2VQYWdlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICAgIGFkZFZpZXcocGFnZSk7CiAgICAgIGFkZFZpZXcobmV4dFBhZ2UpOwogICAgICBkcGFnZSA9IChkYXRhLnBhZ2VQbGFjZVtuZXh0UGFnZV09PW5leHRQYWdlKSA/IG5leHRQYWdlIDogcGFnZTsKICAgICAgci5wYWdlWltkcGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMgLSBNYXRoLmFicyhjdXJyZW50UGFnZS1kcGFnZSk7CiAgICAgIHIucGFydFpbcGxhY2VQYWdlXSA9IGRhdGEudG90YWxQYWdlcyoyIC0gIHRvdGFsICsgaTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpICYmIGRhdGEucGFnZU12WzBdIT09MCkgewoKICAgICAgLy8gVXBkYXRlIG1vdGlvbgoKICAgICAgdmFyIHAsIGFwYWdlLCBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgY29ybmVyID0gdGhpcy50dXJuKCdjb3JuZXInKSwKICAgICAgICBhY3R1YWxWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewoKICAgICAgICBpZiAoIWhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSkKICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBmaXhlZCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2ZpeGVkJyk7CgogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHsKICAgICAgICAgIGRpc3BsYXk6IChwb3MucGFnZVZbcGFnZV0gfHwgZml4ZWQpID8gJycgOiAnbm9uZScsCiAgICAgICAgICB6SW5kZXg6CiAgICAgICAgICAgIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdoYXJkJykgPwogICAgICAgICAgICAgIHBvcy5wYXJ0WltwYWdlXQogICAgICAgICAgICAgIDoKICAgICAgICAgICAgICBwb3MucGFnZVpbcGFnZV0KICAgICAgICAgICAgKSB8fCAoZml4ZWQgPyAtMSA6IDApCiAgICAgICAgfSk7CgogICAgICAgIGlmICgocCA9IGRhdGEucGFnZXNbcGFnZV0pKSB7CgogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CiAgICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnRwYWdlKSB7IC8vIElzIGl0IHR1cm5pbmcgdGhlIHBhZ2UgdG8gYHRwYWdlYD8KCiAgICAgICAgICAgIHAuZmxpcCgnaG92ZXInLCBmYWxzZSkuCiAgICAgICAgICAgICAgZmxpcCgnZGlzYWJsZScsCiAgICAgICAgICAgICAgICAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCBkYXRhLnBhZ2VNdik9PS0xICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzBdICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzFdKTsKCiAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgcC5mbGlwKCdob3ZlcicsIGNvcm5lcj09PWZhbHNlKS4KICAgICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgcGFnZSE9YWN0dWFsVmlld1swXSAmJiBwYWdlIT1hY3R1YWxWaWV3WzFdKTsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VzW3BhZ2VdLgogICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLgogICAgICAgICAgICBmbGlwKCdob3ZlcicsIHRydWUpLgogICAgICAgICAgICBmbGlwKCd6JywgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gVXBkYXRlcyB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIGZsaXBib29rJ3Mgc2hhZG93CgogIF91cGRhdGVTaGFkb3c6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgdmlldywgdmlldzIsIHNoYWRvdywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcGFnZVdpZHRoID0gKGRhdGEuZGlzcGxheT09J3NpbmdsZScpID8gd2lkdGggOiB3aWR0aC8yOwoKICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAoIWRhdGEuc2hhZG93KSB7CiAgICAgIGRhdGEuc2hhZG93ID0gJCgnPGRpdiAvPicsIHsKICAgICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICAgJ2Nzcyc6IGRpdkF0dCgwLCAwLCAwKS5jc3MKICAgICAgICB9KS4KICAgICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbG9jID0gMDsKCiAgICAKICAgIGlmIChwYWdlPT12aWV3WzBdIHx8IHBhZ2U9PXZpZXdbMV0pCiAgICAgIGxvYyA9IDE7CiAgICBlbHNlIGlmICgKICAgICAgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwgcGFnZT09dmlld1sxXSsyKQogICAgKQogICAgICBsb2MgPSAyOwoKICAgIGlmICghdGhpcy50dXJuKCdhbmltYXRpbmcnKSkKICAgICAgc3dpdGNoIChsb2MpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsCiAgICAgICAgICAgIGRpc3BsYXk6ICcnCiAgICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMtMSwKICAgICAgICAgICAgZGlzcGxheTogJycKICAgICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMDoKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKAogICAgICAgICAgewogICAgICAgICAgICB6SW5kZXg6IDAsCiAgICAgICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICAgICAgKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgCiAgICByZXR1cm4gbG9jOwogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG9wdGlvbnMKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykgewogICAgCiAgICBpZiAob3B0aW9ucz09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm9wdHM7CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgICAvLyBTZXQgbmV3IHZhbHVlcwoKICAgICAgJC5leHRlbmQoZGF0YS5vcHRzLCBvcHRpb25zKTsKICAgICAgCiAgICAgIC8vIFNldCBwYWdlcwoKICAgICAgaWYgKG9wdGlvbnMucGFnZXMpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlcycsIG9wdGlvbnMucGFnZXMpOwoKICAgICAgLy8gU2V0IHBhZ2UKCiAgICAgIGlmIChvcHRpb25zLnBhZ2UpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAgIC8vIFNldCBkaXNwbGF5CgogICAgICBpZiAob3B0aW9ucy5kaXNwbGF5KQogICAgICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CiAgICAgIAogICAgICAvLyBTZXQgZGlyZWN0aW9uCgogICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24pCiAgICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CgogICAgICAvLyBTZXQgc2l6ZQoKICAgICAgaWYgKG9wdGlvbnMud2lkdGggJiYgb3B0aW9ucy5oZWlnaHQpCiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQpOwogICAgICAKICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycwoKICAgICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gb3B0aW9ucy53aGVuKQogICAgICAgICAgaWYgKGhhcyhldmVudE5hbWUsIG9wdGlvbnMud2hlbikpIHsKICAgICAgICAgICAgdGhpcy51bmJpbmQoZXZlbnROYW1lKS4KICAgICAgICAgICAgICBiaW5kKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuW2V2ZW50TmFtZV0pOwogICAgICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIEdldHMgdGhlIGN1cnJlbnQgdmVyc2lvbgoKICB2ZXJzaW9uOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdmVyc2lvbjsKCiAgfQp9LAoKLy8gTWV0aG9kcyBhbmQgcHJvcGVydGllcyBmb3IgdGhlIGZsaXAgcGFnZSBlZmZlY3QKCmZsaXBNZXRob2RzID0gewoKICAvLyBDb25zdHJ1Y3RvcgoKICBpbml0OiBmdW5jdGlvbihvcHRzKSB7CgogICAgdGhpcy5kYXRhKHtmOiB7CiAgICAgIGRpc2FibGVkOiBmYWxzZSwKICAgICAgaG92ZXI6IGZhbHNlLAogICAgICBlZmZlY3Q6ICh0aGlzLmhhc0NsYXNzKCdoYXJkJykpID8gJ2hhcmQnIDogJ3NoZWV0JwogICAgfX0pOwogIAogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mOwoKICAgIGRhdGEub3B0c1snei1pbmRleCddID0gejsKCiAgICBpZiAoZGF0YS5md3JhcHBlcikKICAgICAgZGF0YS5md3JhcHBlci5jc3MoewogICAgICAgIHpJbmRleDogeiB8fCBwYXJzZUludChkYXRhLnBhcmVudC5jc3MoJ3otaW5kZXgnKSwgMTApIHx8IDAKICAgICAgfSk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgX2NBbGxvd2VkOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwYWdlID0gZGF0YS5vcHRzLnBhZ2UsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBvZGQgPSBwYWdlJTI7CiAgICAKICAgIGlmIChkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAKICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgWyhvZGQpID8gJ3InIDogJ2wnXSA6CiAgICAgICAgWyhvZGQpID8gJ2wnIDogJ3InXTsKCiAgICB9IGVsc2UgewoKICAgICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChwYWdlPT0xKQogICAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICAgIGNvcm5lcnNbJ2ZvcndhcmQnXSA6IGNvcm5lcnNbJ2JhY2t3YXJkJ107CiAgICAgICAgZWxzZSBpZiAocGFnZT09dHVybkRhdGEudG90YWxQYWdlcykKICAgICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgICBjb3JuZXJzWydiYWNrd2FyZCddIDogY29ybmVyc1snZm9yd2FyZCddOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1sob2RkKSA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCddCiAgICAgICAgICA6CiAgICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJ107CgogICAgICB9CgogICAgfQoKICB9LAoKICBfY29ybmVyQWN0aXZhdGVkOiBmdW5jdGlvbihwKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcG9pbnQgPSB7eDogcC54LCB5OiBwLnksIGNvcm5lcjogJyd9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAocG9pbnQueDw9MCB8fCBwb2ludC55PD0wIHx8IHBvaW50Lng+PXdpZHRoIHx8IHBvaW50Lnk+PWhlaWdodCkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIHZhciBhbGxvd2VkQ29ybmVycyA9IGZsaXBNZXRob2RzLl9jQWxsb3dlZC5jYWxsKHRoaXMpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lng+d2lkdGgtY3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ3InOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lng8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ2wnOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdzaGVldCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lnk8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyKz0gJ3QnOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lnk+PWhlaWdodC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAnYic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgCiAgICAgICAgaWYgKHBvaW50Lng8PWNzeikKICAgICAgICAgIHBvaW50LmNvcm5lcis9ICdsJzsKICAgICAgICBlbHNlIGlmIChwb2ludC54Pj13aWR0aC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAncic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgcmV0dXJuICghcG9pbnQuY29ybmVyIHx8ICQuaW5BcnJheShwb2ludC5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8KICAgICAgZmFsc2UgOiBwb2ludDsKCiAgfSwKCiAgX2lzSUFyZWE6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgcG9zID0gdGhpcy5kYXRhKCkuZi5wYXJlbnQub2Zmc2V0KCk7CgogICAgZSA9IChpc1RvdWNoICYmIGUub3JpZ2luYWxFdmVudCkgPyBlLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXSA6IGU7CgogICAgcmV0dXJuIGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLAogICAgICB7CiAgICAgICAgeDogZS5wYWdlWC1wb3MubGVmdCwKICAgICAgICB5OiBlLnBhZ2VZLXBvcy50b3AKICAgICAgfSk7CgogIH0sCgogIF9jOiBmdW5jdGlvbihjb3JuZXIsIG9wdHMpIHsKCiAgICBvcHRzID0gb3B0cyB8fCAwOwoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ3RsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCBvcHRzKTsKICAgICAgY2FzZSAndHInOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCBvcHRzKTsKICAgICAgY2FzZSAnYmwnOgogICAgICAgIHJldHVybiBwb2ludDJEKG9wdHMsIHRoaXMuaGVpZ2h0KCktb3B0cyk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCktb3B0cywgdGhpcy5oZWlnaHQoKS1vcHRzKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQob3B0cywgMCk7CiAgICAgIGNhc2UgJ3InOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCAwKTsKICAgIH0KCiAgfSwKCiAgX2MyOiBmdW5jdGlvbihjb3JuZXIpIHsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICd0bCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICd0cic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICAgIGNhc2UgJ2JsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCkqMiwgdGhpcy5oZWlnaHQoKSk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICdyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCAwKTsKICAgIH0KCiAgfSwKCiAgX2ZvbGRpbmdQYWdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIG9wdHMgPSBkYXRhLm9wdHM7CgogICAgaWYgKG9wdHMudHVybikgewogICAgICBkYXRhID0gb3B0cy50dXJuLmRhdGEoKTsKICAgICAgaWYgKGRhdGEuZGlzcGxheSA9PSAnc2luZ2xlJykKICAgICAgICByZXR1cm4gKG9wdHMubmV4dD4xIHx8IG9wdHMucGFnZT4xKSA/IGRhdGEucGFnZU9ianNbMF0gOiBudWxsOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGRhdGEucGFnZU9ianNbb3B0cy5uZXh0XTsKICAgIH0KCiAgfSwKCiAgX2JhY2tHcmFkaWVudDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgICAgZ3JhZGllbnQgPSAgdHVybkRhdGEub3B0cy5ncmFkaWVudHMgJiYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnIHx8CiAgICAgICAgIChkYXRhLm9wdHMucGFnZSE9MiAmJiBkYXRhLm9wdHMucGFnZSE9dHVybkRhdGEudG90YWxQYWdlcy0xKSk7CgogICAgaWYgKGdyYWRpZW50ICYmICFkYXRhLmJzaGFkb3cpCiAgICAgIGRhdGEuYnNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgY3NzKHsncG9zaXRpb24nOiAnJywgd2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgYXBwZW5kVG8oZGF0YS5wYXJlbnQpOwoKICAgIHJldHVybiBncmFkaWVudDsKCiAgfSwKCiAgdHlwZTogZnVuY3Rpb24gKCkgewogICAgCiAgICByZXR1cm4gdGhpcy5kYXRhKCkuZi5lZmZlY3Q7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICBpZiAoZnVsbCkgewogICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgIGlmIChmdWxsKSB7CiAgICAgICAgdmFyIHNpemUgPSBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyh3aWR0aCwgMikrTWF0aC5wb3coaGVpZ2h0LCAyKSkpOwoKICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfSk7CiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9KS4KICAgICAgICAgIGNoaWxkcmVuKCc6Zmlyc3QtY2hpbGQnKS4KICAgICAgICAgIGNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBpZiAodHVybkRhdGEub3B0cy5ncmFkaWVudHMpCiAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhpcykpCiAgICAgICAgICBkYXRhLmJzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLnBhcmVudC5pcygnOnZpc2libGUnKSkgewogICAgICAgIHZhciBvZmZzZXQgPSBmaW5kUG9zKGRhdGEucGFyZW50WzBdKTsKCiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3RvcDogb2Zmc2V0LnRvcCwKICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0fSk7CgogICAgICAgIC8vaWYgKGRhdGEub3B0cy50dXJuKSB7CiAgICAgICAgIG9mZnNldCA9IGZpbmRQb3MoZGF0YS5vcHRzLnR1cm5bMF0pOwogICAgICAgICBkYXRhLmZwYXJlbnQuY3NzKHt0b3A6IC1vZmZzZXQudG9wLCBsZWZ0OiAtb2Zmc2V0LmxlZnR9KTsKICAgICAgICAvL30KICAgICAgfQoKICAgICAgdGhpcy5mbGlwKCd6JywgZGF0YS5vcHRzWyd6LWluZGV4J10pOwoKICAgICAgYnJlYWs7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOwoKICAgIGRhdGEucGFyZW50ID0gcGFyZW50OwoKICBpZiAoIWRhdGEud3JhcHBlcikKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKICAgICAgICBjc3NQcm9wZXJ0aWVzW3ZlbmRvciArICd0cmFuc2Zvcm0tc3R5bGUnXSA9ICdwcmVzZXJ2ZS0zZCc7CiAgICAgICAgY3NzUHJvcGVydGllc1t2ZW5kb3IgKyAnYmFja2ZhY2UtdmlzaWJpbGl0eSddID0gJ2hpZGRlbic7CgogICAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpLgogICAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgICAgZGF0YS5mcGFnZSA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93ID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsICAwKSkuCiAgICAgICAgICAgIGhpZGUoKS4KICAgICAgICAgICAgYXBwZW5kVG8ocGFyZW50KTsKCiAgICAgICAgICBkYXRhLmJzaGFkb3cgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgIDApKTsKICAgICAgICB9CgogICAgICBicmVhazsKICAgICAgY2FzZSAnc2hlZXQnOgogICAgICAgIAogICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgICAgICBzaXplID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3cod2lkdGgsIDIpK01hdGgucG93KGhlaWdodCwgMikpKTsKICAgICAgICAKICAgICAgICBkYXRhLmZwYXJlbnQgPSBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudDsKCiAgICAgICAgaWYgKCFkYXRhLmZwYXJlbnQpIHsKICAgICAgICAgIHZhciBmcGFyZW50ID0gJCgnPGRpdi8+Jywge2Nzczogeydwb2ludGVyLWV2ZW50cyc6ICdub25lJ319KS5oaWRlKCk7CiAgICAgICAgICAgIGZwYXJlbnQuZGF0YSgpLmZsaXBzID0gMDsKICAgICAgICAgICAgZnBhcmVudC5jc3MoZGl2QXR0KDAsIDAsICdhdXRvJywgJ3Zpc2libGUnKS5jc3MpLgogICAgICAgICAgICBhcHBlbmRUbyhkYXRhLm9wdHMudHVybik7CiAgICAgICAgICAgIAogICAgICAgICAgICBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAnYXV0bycsIHJpZ2h0OiAnYXV0byd9KTsKCiAgICAgICAgZGF0YS53cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIHRoaXMuY3NzKCd6LWluZGV4JykpKS4KICAgICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgICBwcmVwZW5kKHRoaXMpOwoKICAgICAgICBkYXRhLmZ3cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KHBhcmVudC5vZmZzZXQoKS50b3AsIHBhcmVudC5vZmZzZXQoKS5sZWZ0KSkuCiAgICAgICAgICBoaWRlKCkuCiAgICAgICAgICBhcHBlbmRUbyhkYXRhLmZwYXJlbnQpOwoKICAgICAgICBkYXRhLmZwYWdlID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIDAsICd2aXNpYmxlJykpLgogICAgICAgICAgY3NzKHtjdXJzb3I6ICdkZWZhdWx0J30pLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5md3JhcHBlcik7CgogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykKICAgICAgICAgIGRhdGEuYXNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAgMSkpLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5mcGFnZSk7CgogICAgICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCBkYXRhKTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFNldCBzaXplCiAgICBmbGlwTWV0aG9kcy5yZXNpemUuY2FsbCh0aGlzLCB0cnVlKTsKCiAgfSwKCiAgLy8gVGFrZXMgYSAyUCBwb2ludCBmcm9tIHRoZSBzY3JlZW4gYW5kIGFwcGxpZXMgdGhlIHRyYW5zZm9ybWF0aW9uCgogIF9mb2xkOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKCiAgICAgIGNhc2UgJ2hhcmQnOgoKICAgICAgICBpZiAocG9pbnQuY29ybmVyPT0nbCcpCiAgICAgICAgICBwb2ludC54ID0gTWF0aC5taW4oTWF0aC5tYXgocG9pbnQueCwgMCksIHdpZHRoKjIpOwogICAgICAgIGVsc2UKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChNYXRoLm1pbihwb2ludC54LCB3aWR0aCksIC13aWR0aCk7CgogICAgICAgIHZhciBsZWZ0UG9zLAogICAgICAgICAgc2hhZG93LAogICAgICAgICAgZ3JhZGllbnRYLAogICAgICAgICAgZnBhZ2VPcmlnaW4sCiAgICAgICAgICBwYXJlbnRPcmlnaW4sCiAgICAgICAgICB0b3RhbFBhZ2VzID0gdHVybkRhdGEudG90YWxQYWdlcywKICAgICAgICAgIHpJbmRleCA9IGRhdGEub3B0c1snei1pbmRleCddIHx8IHRvdGFsUGFnZXMsCiAgICAgICAgICBwYXJlbnRDc3MgPSB7J292ZXJmbG93JzogJ3Zpc2libGUnfSwKICAgICAgICAgIHJlbFggPSAoby54KSA/IChvLnggLSBwb2ludC54KS93aWR0aCA6IHBvaW50Lngvd2lkdGgsCiAgICAgICAgICBhbmdsZSA9IHJlbFggKiA5MCwKICAgICAgICAgIGhhbGYgPSBhbmdsZTw5MDsKCiAgICAgICAgc3dpdGNoIChwb2ludC5jb3JuZXIpIHsKICAgICAgICAgIGNhc2UgJ2wnOgoKICAgICAgICAgICAgZnBhZ2VPcmlnaW4gPSAgJzAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMTAwJSA1MCUnOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dC0xPjA7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJzEwMCUnOwogICAgICAgICAgICAgIHNoYWRvdyA9IGRhdGEub3B0cy5wYWdlKzE8dG90YWxQYWdlczsKICAgICAgICAgICAgICBncmFkaWVudFggPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdyJzoKCiAgICAgICAgICAgIGZwYWdlT3JpZ2luID0gICcxMDAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMCUgNTAlJzsKICAgICAgICAgICAgYW5nbGUgPSAtYW5nbGU7CiAgICAgICAgICAgIHdpZHRoID0gLXdpZHRoOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dCsxPHRvdGFsUGFnZXM7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJy0xMDAlJzsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMucGFnZSE9MTsKICAgICAgICAgICAgICBncmFkaWVudFggPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnRDc3NbdmVuZG9yKydwZXJzcGVjdGl2ZS1vcmlnaW4nXSA9IHBhcmVudE9yaWdpbjsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgncm90YXRlWSgnK2FuZ2xlKydkZWcpJyArCiAgICAgICAgICAndHJhbnNsYXRlM2QoMHB4LCAwcHgsICcrKHRoaXMuYXR0cignZGVwdGgnKXx8MCkrJ3B4KScsIHBhcmVudE9yaWdpbik7CgogICAgICAgIGRhdGEuZnBhZ2UudHJhbnNmb3JtKCd0cmFuc2xhdGVYKCcrd2lkdGgrJ3B4KSByb3RhdGVZKCcrKDE4MCthbmdsZSkrJ2RlZyknLCBmcGFnZU9yaWdpbik7CgogICAgICAgIGRhdGEucGFyZW50LmNzcyhwYXJlbnRDc3MpOwoKICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgcmVsWCA9IC1yZWxYKzE7CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt6SW5kZXg6IHpJbmRleCsxfSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXh9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVsWCA9IHJlbFgtMTsKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3pJbmRleDogekluZGV4fSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXgrMX0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CiAgICAgICAgICBpZiAoc2hhZG93KQogICAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHsKICAgICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgICBsZWZ0OiBsZWZ0UG9zLAogICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsJysoMC41KnJlbFgpKycpJwogICAgICAgICAgICB9KS4KICAgICAgICAgICAgdHJhbnNmb3JtKCdyb3RhdGVZKDBkZWcpJyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CgogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7b3BhY2l0eTotcmVsWCArIDF9KTsKCiAgICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgICBpZiAoZGF0YS5ic2hhZG93LnBhcmVudCgpWzBdIT1kYXRhLndyYXBwZXJbMF0pIHsKICAgICAgICAgICAgICBkYXRhLmJzaGFkb3cuYXBwZW5kVG8oZGF0YS53cmFwcGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGRhdGEuYnNoYWRvdy5wYXJlbnQoKVswXSE9ZGF0YS5mcGFnZVswXSkgewogICAgICAgICAgICAgIGRhdGEuYnNoYWRvdy5hcHBlbmRUbyhkYXRhLmZwYWdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLypkYXRhLmJzaGFkb3cuY3NzKHsKICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwnKygwLjEpKycpJwogICAgICAgICAgfSkqLwogICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LCBwb2ludDJEKGdyYWRpZW50WCAqIDEwMCwgMCksIHBvaW50MkQoKC1ncmFkaWVudFggKyAxKSoxMDAsIDApLAogICAgICAgICAgICBbWzAsICdyZ2JhKDAsMCwwLDAuMyknXSxbMSwgJ3JnYmEoMCwwLDAsMCknXV0sMik7CiAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIGEgPSAwLAogICAgICAgICAgYWxwaGEgPSAwLAogICAgICAgICAgYmV0YSwKICAgICAgICAgIHB4LAogICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEsCiAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiwKICAgICAgICAgIGdyYWRpZW50U3RhcnRWYWwsCiAgICAgICAgICBncmFkaWVudFNpemUsCiAgICAgICAgICBncmFkaWVudE9wYWNpdHksCiAgICAgICAgICBzaGFkb3dWYWwsCiAgICAgICAgICBtdiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBkZiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICB0ciA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgICB0YW4gPSBNYXRoLnRhbihhbHBoYSksCiAgICAgICAgICBhYyA9IHR1cm5EYXRhLm9wdHMuYWNjZWxlcmF0aW9uLAogICAgICAgICAgaCA9IGRhdGEud3JhcHBlci5oZWlnaHQoKSwKICAgICAgICAgIHRvcCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMCwgMSkgPT0gJ3QnLAogICAgICAgICAgbGVmdCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMSwgMSkgPT0gJ2wnLAoKICAgICAgY29tcHV0ZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmVsID0gcG9pbnQyRCgwLCAwKTsKICAgICAgICB2YXIgbWlkZGxlID0gcG9pbnQyRCgwLCAwKTsKCiAgICAgICAgcmVsLnggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiBwb2ludC54OwoKICAgICAgICBpZiAoIWhhc1JvdCkgewogICAgICAgICAgcmVsLnkgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWwueSA9IChvLnkpID8gby55IC0gcG9pbnQueSA6IHBvaW50Lnk7CiAgICAgICAgfQoKICAgICAgICBtaWRkbGUueCA9IChsZWZ0KT8gd2lkdGggLSByZWwueC8yIDogcG9pbnQueCArIHJlbC54LzI7CiAgICAgICAgbWlkZGxlLnkgPSByZWwueS8yOwogICAgICAgIAogICAgICAgIHZhciBhbHBoYSA9ICBBOTAtTWF0aC5hdGFuMihyZWwueSwgcmVsLngpLAogICAgICAgICAgZ2FtbWEgPSBhbHBoYSAtIE1hdGguYXRhbjIobWlkZGxlLnksIG1pZGRsZS54KSwKICAgICAgICAgIGRpc3RhbmNlID0gIE1hdGgubWF4KDAsIE1hdGguc2luKGdhbW1hKSAqIE1hdGguc3FydChNYXRoLnBvdyhtaWRkbGUueCwgMikgKyBNYXRoLnBvdyhtaWRkbGUueSwgMikpKTsKICAgICAgICAgIAogICAgICAgICAgYSA9IGRlZyhhbHBoYSk7CgogICAgICAgICAgdHIgPSBwb2ludDJEKGRpc3RhbmNlICogTWF0aC5zaW4oYWxwaGEpLCBkaXN0YW5jZSAqIE1hdGguY29zKGFscGhhKSk7CgogICAgICAgICAgaWYgKGFscGhhID4gQTkwKSB7CiAgICAgICAgICAgIHRyLnggPSB0ci54ICsgTWF0aC5hYnModHIueSAqIHJlbC55L3JlbC54KTsKICAgICAgICAgICAgdHIueSA9IDA7CiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHRyLngqTWF0aC50YW4oUEktYWxwaGEpKSA8IGhlaWdodCkgewogICAgICAgICAgICAgIHBvaW50LnkgPSBNYXRoLnNxcnQoTWF0aC5wb3coaGVpZ2h0LCAyKSsyICogbWlkZGxlLnggKiByZWwueCk7CiAgICAgICAgICAgICAgaWYgKHRvcCkgcG9pbnQueSA9ICBoZWlnaHQgLSBwb2ludC55OwogICAgICAgICAgICAgIHJldHVybiBjb21wdXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICBpZiAoYWxwaGE+QTkwKSB7CiAgICAgICAgICAgIHZhciBiZXRhID0gUEktYWxwaGEsIGRkID0gaCAtIGhlaWdodC9NYXRoLnNpbihiZXRhKTsKICAgICAgICAgICAgbXYgPSBwb2ludDJEKE1hdGgucm91bmQoZGQqTWF0aC5jb3MoYmV0YSkpLCBNYXRoLnJvdW5kKGRkKk1hdGguc2luKGJldGEpKSk7CiAgICAgICAgICAgIGlmIChsZWZ0KSBtdi54ID0gLSBtdi54OwogICAgICAgICAgICBpZiAodG9wKSBtdi55ID0gLSBtdi55OwogICAgICAgICAgfQoKICAgICAgICAgIHB4ID0gTWF0aC5yb3VuZCh0ci55L01hdGgudGFuKGFscGhhKSArIHRyLngpOwogICAgICAKICAgICAgICAgIHZhciBzaWRlID0gd2lkdGggLSBweCwKICAgICAgICAgICAgc2lkZVggPSBzaWRlKk1hdGguY29zKGFscGhhKjIpLAogICAgICAgICAgICBzaWRlWSA9IHNpZGUqTWF0aC5zaW4oYWxwaGEqMik7CiAgICAgICAgICAgIGRmID0gcG9pbnQyRCgKICAgICAgICAgICAgICBNYXRoLnJvdW5kKChsZWZ0ID8gc2lkZSAtc2lkZVggOiBweCtzaWRlWCkpLAogICAgICAgICAgICAgIE1hdGgucm91bmQoKHRvcCkgPyBzaWRlWSA6IGhlaWdodCAtIHNpZGVZKSk7CiAgICAgICAgICAKICAgICAgICAvLyBHcmFkaWVudHMKICAgICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewoKICAgICAgICAgICAgZ3JhZGllbnRTaXplID0gc2lkZSpNYXRoLnNpbihhbHBoYSk7CgogICAgICAgICAgICB2YXIgZW5kaW5nUG9pbnQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGF0LCBwb2ludC5jb3JuZXIpLAogICAgICAgICAgICAgZmFyID0gTWF0aC5zcXJ0KE1hdGgucG93KGVuZGluZ1BvaW50LngtcG9pbnQueCwgMikrTWF0aC5wb3coZW5kaW5nUG9pbnQueS1wb2ludC55LCAyKSkvd2lkdGg7CgogICAgICAgICAgICBzaGFkb3dWYWwgPSBNYXRoLnNpbihBOTAqKChmYXI+MSkgPyAyIC0gZmFyIDogZmFyKSk7CgogICAgICAgICAgICBncmFkaWVudE9wYWNpdHkgPSBNYXRoLm1pbihmYXIsIDEpOwoKICAgICAgICAgICAKICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0VmFsID0gZ3JhZGllbnRTaXplPjEwMCA/IChncmFkaWVudFNpemUtMTAwKS9ncmFkaWVudFNpemUgOiAwOwoKICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QSA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICBncmFkaWVudFNpemUqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSpNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CiAgICAgICAgICAgCgogICAgICAgICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhhdCkpIHsKCiAgICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSoxLjIqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTaXplKjEuMipNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CgogICAgICAgICAgICAgICAgaWYgKCFsZWZ0KSBncmFkaWVudEVuZFBvaW50Qi54ID0gMTAwLWdyYWRpZW50RW5kUG9pbnRCLng7CiAgICAgICAgICAgICAgICBpZiAoIXRvcCkgZ3JhZGllbnRFbmRQb2ludEIueSA9IDEwMC1ncmFkaWVudEVuZFBvaW50Qi55OwoKICAgICAgICAgICAgICB9CgogICAgICAgICAgfQoKICAgICAgICAgIHRyLnggPSBNYXRoLnJvdW5kKHRyLngpOwogICAgICAgICAgdHIueSA9IE1hdGgucm91bmQodHIueSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAoKICAgICAgdHJhbnNmb3JtID0gZnVuY3Rpb24odHIsIGMsIHgsIGEpIHsKICAgICAgCiAgICAgICAgdmFyIGYgPSBbJzAnLCAnYXV0byddLCBtdlcgPSAod2lkdGgtaCkqeFswXS8xMDAsIG12SCA9IChoZWlnaHQtaCkqeFsxXS8xMDAsCiAgICAgICAgICBjc3NBID0ge2xlZnQ6IGZbY1swXV0sIHRvcDogZltjWzFdXSwgcmlnaHQ6IGZbY1syXV0sIGJvdHRvbTogZltjWzNdXX0sCiAgICAgICAgICBjc3NCID0ge30sCiAgICAgICAgICBhbGlhc2luZ0ZrID0gKGEhPTkwICYmIGEhPS05MCkgPyAobGVmdCA/IC0xIDogMSkgOiAwLAogICAgICAgICAgb3JpZ2luID0geFswXSArICclICcgKyB4WzFdICsgJyUnOwoKICAgICAgICB0aGF0LmNzcyhjc3NBKS4KICAgICAgICAgIHRyYW5zZm9ybShyb3RhdGUoYSkgKyB0cmFuc2xhdGUodHIueCArIGFsaWFzaW5nRmssIHRyLnksIGFjKSwgb3JpZ2luKTsKCiAgICAgICAgZGF0YS5mcGFnZS5jc3MoY3NzQSkudHJhbnNmb3JtKAogICAgICAgICAgcm90YXRlKGEpICsKICAgICAgICAgIHRyYW5zbGF0ZSh0ci54ICsgZGYueCAtIG12LnggLSB3aWR0aCp4WzBdLzEwMCwgdHIueSArIGRmLnkgLSBtdi55IC0gaGVpZ2h0KnhbMV0vMTAwLCBhYykgKwogICAgICAgICAgcm90YXRlKCgxODAvYSAtIDIpKmEpLAogICAgICAgICAgb3JpZ2luKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSh0cmFuc2xhdGUoLXRyLnggKyBtdlctYWxpYXNpbmdGaywgLXRyLnkgKyBtdkgsIGFjKSArIHJvdGF0ZSgtYSksIG9yaWdpbik7CgogICAgICAgIGRhdGEuZndyYXBwZXIudHJhbnNmb3JtKHRyYW5zbGF0ZSgtdHIueCArIG12LnggKyBtdlcsIC10ci55ICsgbXYueSArIG12SCwgYWMpICsgcm90YXRlKC1hKSwgb3JpZ2luKTsKICAgICAgCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CgogICAgICAgICAgaWYgKHhbMF0pCiAgICAgICAgICAgIGdyYWRpZW50RW5kUG9pbnRBLnggPSAxMDAtZ3JhZGllbnRFbmRQb2ludEEueDsKCiAgICAgICAgICBpZiAoeFsxXSkKICAgICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEueSA9ICgxMDAtZ3JhZGllbnRFbmRQb2ludEEueSk7CgogICAgICAgICAgY3NzQlsnYm94LXNoYWRvdyddID0gJzAgMCAyMHB4IHJnYmEoMCwwLDAsJysoMC41KnNoYWRvd1ZhbCkrJyknOwogICAgICAgICAgZm9sZGluZy5jc3MoY3NzQik7CgogICAgICAgICAgZ3JhZGllbnQoZGF0YS5hc2hhZG93LAogICAgICAgICAgICAgIHBvaW50MkQobGVmdD8xMDA6MCwgdG9wPzA6MTAwKSwKICAgICAgICAgICAgICBwb2ludDJEKGdyYWRpZW50RW5kUG9pbnRBLngsIGdyYWRpZW50RW5kUG9pbnRBLnkpLAogICAgICAgICAgICAgIFtbZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsMCknXSwKICAgICAgICAgICAgICBbKCgxLWdyYWRpZW50U3RhcnRWYWwpKjAuOCkrZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICBbMSwgJ3JnYmEoMjU1LDI1NSwyNTUsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXV0sCiAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICBhbHBoYSk7CgogICAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9iYWNrR3JhZGllbnQuY2FsbCh0aGF0KSkKICAgICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LAogICAgICAgICAgICAgICAgcG9pbnQyRChsZWZ0PzA6MTAwLCB0b3A/MDoxMDApLAogICAgICAgICAgICAgICAgcG9pbnQyRChncmFkaWVudEVuZFBvaW50Qi54LCBncmFkaWVudEVuZFBvaW50Qi55KSwKICAgICAgICAgICAgICAgIFtbMC42LCAncmdiYSgwLDAsMCwwKSddLAogICAgICAgICAgICAgICAgWzAuOCwgJ3JnYmEoMCwwLDAsJysoMC4zKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICAgIFsxLCAncmdiYSgwLDAsMCwwKSddCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMyk7CiAgICAgICAgfQoKICAgICAgfTsKCiAgICAgIHN3aXRjaCAocG9pbnQuY29ybmVyKSB7CiAgICAgICAgY2FzZSAnbCcgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncicgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndGwnIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChwb2ludC54LCAxKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybSh0ciwgWzEsMCwwLDFdLCBbMTAwLCAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndHInIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1pbihwb2ludC54LCB3aWR0aC0xKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybShwb2ludDJEKC10ci54LCB0ci55KSwgWzAsMCwwLDFdLCBbMCwgMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdibCcgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWF4KHBvaW50LngsIDEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQodHIueCwgLXRyLnkpLCBbMSwxLDAsMF0sIFsxMDAsIDEwMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdicicgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWluKHBvaW50LngsIHdpZHRoLTEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQoLXRyLngsIC10ci55KSwgWzAsMSwxLDBdLCBbMCwgMTAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICBicmVhazsKICB9CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKG1vdmUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGxhY2UgPSB0dXJuRGF0YS5wYWdlUGxhY2U7CiAgICAgIAogICAgaWYgKG1vdmUpIHsKCiAgICAgIHZhciBuZXh0UGFnZSA9IGRhdGEub3B0cy5uZXh0OwogIAogICAgICBpZiAocGxhY2VbbmV4dFBhZ2VdIT1kYXRhLm9wdHMucGFnZSkgewoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKHRoaXMsIGZhbHNlKTsKCiAgICAgICAgdmFyIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKICAgICAgICAKICAgICAgICBmb2xkaW5nLmFwcGVuZFRvKGRhdGEuZnBhZ2UpOwogICAgICAgIHBsYWNlW25leHRQYWdlXSA9IGRhdGEub3B0cy5wYWdlOwogICAgICAgIGRhdGEuZm9sZGluZyA9IG5leHRQYWdlOwogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoZGF0YS5mb2xkaW5nKSB7CgogICAgICAgIGlmICh0dXJuRGF0YS5wYWdlc1tkYXRhLmZvbGRpbmddKSB7CiAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmbGlwIGF2YWlsYWJsZQoKICAgICAgICAgIHZhciBmbGlwRGF0YSA9IHR1cm5EYXRhLnBhZ2VzW2RhdGEuZm9sZGluZ10uZGF0YSgpLmY7CiAgICAgICAgICAKICAgICAgICAgIHR1cm5EYXRhLnBhZ2VPYmpzW2RhdGEuZm9sZGluZ10uCiAgICAgICAgICAgIGFwcGVuZFRvKGZsaXBEYXRhLndyYXBwZXIpOwoKICAgICAgICB9IGVsc2UgaWYgKHR1cm5EYXRhLnBhZ2VXcmFwW2RhdGEuZm9sZGluZ10pIHsKICAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgcGFnZVdyYXBwZXIKCiAgICAgICAgICB0dXJuRGF0YS5wYWdlT2Jqc1tkYXRhLmZvbGRpbmddLgogICAgICAgICAgICBhcHBlbmRUbyh0dXJuRGF0YS5wYWdlV3JhcFtkYXRhLmZvbGRpbmddKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nIGluIHBsYWNlKSB7CiAgICAgICAgICBwbGFjZVtkYXRhLmZvbGRpbmddID0gZGF0YS5mb2xkaW5nOwogICAgICAgIH0KCiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKCiAgICAgIH0KICAgIH0KICB9LAoKICBfc2hvd0ZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGMsIGFuaW1hdGUpIHsKCiAgICB2YXIgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpLAogICAgICBkZCA9IHRoaXMuZGF0YSgpLAogICAgICBkYXRhID0gZGQuZiwKICAgICAgdmlzaWJsZSA9IGRhdGEudmlzaWJsZTsKCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKCF2aXNpYmxlIHx8ICFkYXRhLnBvaW50IHx8IGRhdGEucG9pbnQuY29ybmVyIT1jLmNvcm5lcikgewoKICAgICAgICB2YXIgY29ybmVyID0gKAogICAgICAgICAgZGF0YS5zdGF0dXM9PSdob3ZlcicgfHwKICAgICAgICAgIGRhdGEuc3RhdHVzPT0ncGVlbCcgfHwKICAgICAgICAgIGRhdGEub3B0cy50dXJuLmRhdGEoKS5tb3VzZUFjdGlvbikgPwogICAgICAgIGMuY29ybmVyIDogbnVsbDsKCiAgICAgICAgdmlzaWJsZSA9IGZhbHNlOwoKICAgICAgICBpZiAodHJpZ2dlcignc3RhcnQnLCB0aGlzLCBbZGF0YS5vcHRzLCBjb3JuZXJdKT09J3ByZXZlbnRlZCcpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICB9CgogICAgICBpZiAoYW5pbWF0ZSkgewogICAgICAgIAogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIHBvaW50ID0gKGRhdGEucG9pbnQgJiYgZGF0YS5wb2ludC5jb3JuZXI9PWMuY29ybmVyKSA/CiAgICAgICAgICBkYXRhLnBvaW50IDogZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBjLmNvcm5lciwgMSk7CiAgICAgIAogICAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgICAgZnJvbTogW3BvaW50LngsIHBvaW50LnldLAogICAgICAgICAgdG86IFtjLngsIGMueV0sCiAgICAgICAgICBkdXJhdGlvbjogNTAwLAogICAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgYy54ID0gTWF0aC5yb3VuZCh2WzBdKTsKICAgICAgICAgICAgYy55ID0gTWF0aC5yb3VuZCh2WzFdKTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBjKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSAgewoKICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoaXMsIGMpOwoKICAgICAgICBpZiAoZGQuZWZmZWN0ICYmICFkZC5lZmZlY3QudHVybmluZykKICAgICAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwoKICAgICAgfQoKICAgICAgaWYgKCF2aXNpYmxlKSB7CgogICAgICAgIHN3aXRjaChkYXRhLmVmZmVjdCkgewogICAgICAgICAgY2FzZSAnaGFyZCc6CgogICAgICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fbW92ZUZvbGRpbmdQYWdlLmNhbGwodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgIGRhdGEuZnBhZ2Uuc2hvdygpOwogICAgICAgICAgICBpZiAoZGF0YS5vcHRzLnNoYWRvd3MpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgICAgICAgIGRhdGEudmlzaWJsZSA9IHRydWU7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudC5zaG93KCkuZGF0YSgpLmZsaXBzKys7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgZGF0YS5md3JhcHBlci5zaG93KCk7CiAgICAgICAgICAgIGlmIChkYXRhLmJzaGFkb3cpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5ic2hhZG93TG9jID0gMDsKICAgICAgICAgIGRhdGEuYnNoYWRvdy5yZW1vdmUoKTsKICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CiAgICAgICAgfQoKICAgICAgICBkYXRhLndyYXBwZXIudHJhbnNmb3JtKCcnKTsKICAgICAgICBkYXRhLmZwYWdlLmhpZGUoKTsKCiAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIGlmICgoLS1kYXRhLmZwYXJlbnQuZGF0YSgpLmZsaXBzKT09PTApCiAgICAgICAgICBkYXRhLmZwYXJlbnQuaGlkZSgpOwoKICAgICAgICB0aGlzLmNzcyh7bGVmdDogMCwgdG9wOiAwLCByaWdodDogJ2F1dG8nLCBib3R0b206ICdhdXRvJ30pLgogICAgICAgICAgdHJhbnNmb3JtKCcnKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgnJyk7CgogICAgICAgIGRhdGEuZndyYXBwZXIuaGlkZSgpOwoKICAgICAgICBpZiAoZGF0YS5ic2hhZG93KQogICAgICAgICAgZGF0YS5ic2hhZG93LmhpZGUoKTsKCiAgICAgICAgZm9sZGluZy50cmFuc2Zvcm0oJycpOwoKICAgICAgYnJlYWs7CiAgICB9CgogICAgICBkYXRhLnZpc2libGUgPSBmYWxzZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBoaWRlRm9sZGVkUGFnZTogZnVuY3Rpb24oYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEucG9pbnQpIHJldHVybjsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgIHAxID0gZGF0YS5wb2ludCwKICAgICAgaGlkZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRhdGEucG9pbnQgPSBudWxsOwogICAgICAgIGRhdGEuc3RhdHVzID0gJyc7CiAgICAgICAgdGhhdC5mbGlwKCdoaWRlJyk7CiAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCBmYWxzZV0pOwogICAgICB9OwoKICAgIGlmIChhbmltYXRlKSB7CgogICAgICB2YXIgcDQgPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHAxLmNvcm5lciksCiAgICAgICAgdG9wID0gKHAxLmNvcm5lci5zdWJzdHIoMCwxKT09J3QnKSwKICAgICAgICBkZWx0YSA9ICh0b3ApID8gTWF0aC5taW4oMCwgcDEueS1wNC55KS8yIDogTWF0aC5tYXgoMCwgcDEueS1wNC55KS8yLAogICAgICAgIHAyID0gcG9pbnQyRChwMS54LCBwMS55K2RlbHRhKSwKICAgICAgICBwMyA9IHBvaW50MkQocDQueCwgcDQueS1kZWx0YSk7CiAgICAKICAgICAgdGhpcy5hbmltYXRlZih7CiAgICAgICAgZnJvbTogMCwKICAgICAgICB0bzogMSwKICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgdmFyIG5wID0gYmV6aWVyKHAxLCBwMiwgcDMsIHA0LCB2KTsKICAgICAgICAgIHAxLnggPSBucC54OwogICAgICAgICAgcDEueSA9IG5wLnk7CiAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIHAxKTsKICAgICAgICB9LAogICAgICAgIGNvbXBsZXRlOiBoaWRlLAogICAgICAgIGR1cmF0aW9uOiA4MDAsCiAgICAgICAgaGlkaW5nOiB0cnVlCiAgICAgIH0pOwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKICAgICAgaGlkZSgpOwoKICAgIH0KICB9LAoKICB0dXJuUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCk7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gdHVybkRhdGEub3B0cy5lbGV2YXRpb24gOiAwKSwKICAgICAgcDQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGlzLCBjb3JuZXIuY29ybmVyKTsKCiAgICAgIHRoaXMudHJpZ2dlcignZmxpcCcpLgogICAgICAgIGFuaW1hdGVmKHsKICAgICAgICAgIGZyb206IDAsCiAgICAgICAgICB0bzogMSwKICAgICAgICAgIGZyYW1lOiBmdW5jdGlvbih2KSB7CgogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhhdCwgY29ybmVyKTsKCiAgICAgICAgICB9LAogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAKICAgICAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCB0cnVlXSk7CgogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiB0dXJuRGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgdHVybmluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgICAgZGF0YS5jb3JuZXIgPSBudWxsOwogIH0sCgogIG1vdmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuICdlZmZlY3QnIGluIHRoaXMuZGF0YSgpOwogIAogIH0sCgogIGlzVHVybmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZmxpcCgnbW92aW5nJykgJiYgdGhpcy5kYXRhKCkuZWZmZWN0LnR1cm5pbmc7CiAgCiAgfSwKCiAgY29ybmVyOiBmdW5jdGlvbigpIHsKICAgIAogICAgcmV0dXJuIHRoaXMuZGF0YSgpLmYuY29ybmVyOwogICAgICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwoKICAgIGlmICghZGF0YS5jb3JuZXIgJiYgIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykgJiYKICAgICAgZGF0YS5vcHRzLnBhZ2U9PXR1cm4uZGF0YSgpLnBhZ2VQbGFjZVtkYXRhLm9wdHMucGFnZV0pCiAgICB7CgogICAgICBkYXRhLmNvcm5lciA9IGZsaXBNZXRob2RzLl9pc0lBcmVhLmNhbGwodGhpcywgZSk7CgogICAgICBpZiAoZGF0YS5jb3JuZXIgJiYgZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcykpIHsKCiAgICAgICAgdGhpcy50cmlnZ2VyKCdwcmVzc2VkJywgW2RhdGEucG9pbnRdKTsKICAgICAgICBmbGlwTWV0aG9kcy5fc2hvd0ZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcik7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CgogICAgICBpZiAoZGF0YS5jb3JuZXIpIHsKCiAgICAgICAgdmFyIHBvcyA9IGRhdGEucGFyZW50Lm9mZnNldCgpOwogICAgICAgIGRhdGEuY29ybmVyLnggPSBlWzBdLnBhZ2VYLXBvcy5sZWZ0OwogICAgICAgIGRhdGEuY29ybmVyLnkgPSBlWzBdLnBhZ2VZLXBvcy50b3A7CiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywgZGF0YS5jb3JuZXIpOwoKICAgICAgfSBlbHNlIGlmIChkYXRhLmhvdmVyICYmICF0aGlzLmRhdGEoKS5lZmZlY3QgJiYgdGhpcy5pcygnOnZpc2libGUnKSkgewoKICAgICAgICB2YXIgcG9pbnQgPSBmbGlwTWV0aG9kcy5faXNJQXJlYS5jYWxsKHRoaXMsIGVbMF0pOwoKICAgICAgICBpZiAocG9pbnQpIHsKCiAgICAgICAgICBpZiAoKGRhdGEuZWZmZWN0PT0nc2hlZXQnICYmIHBvaW50LmNvcm5lci5sZW5ndGg9PTIpICB8fCBkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAgICAgICAgIGRhdGEuc3RhdHVzID0gJ2hvdmVyJzsKICAgICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgcG9pbnQuY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAgICAgcG9pbnQueCA9IG9yaWdpbi54OwogICAgICAgICAgICBwb2ludC55ID0gb3JpZ2luLnk7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIHBvaW50LCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBpZiAoZGF0YS5zdGF0dXM9PSdob3ZlcicpIHsKICAgICAgICAgICAgZGF0YS5zdGF0dXMgPSAnJzsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgX2V2ZW50RW5kOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIGNvcm5lciA9IGRhdGEuY29ybmVyOwoKICAgIGlmICghZGF0YS5kaXNhYmxlZCAmJiBjb3JuZXIpIHsKICAgICAgaWYgKHRyaWdnZXIoJ3JlbGVhc2VkJywgdGhpcywgW2RhdGEucG9pbnQgfHwgY29ybmVyXSkhPSdwcmV2ZW50ZWQnKSB7CiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgfQogICAgfQoKICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgfSwKCiAgZGlzYWJsZTogZnVuY3Rpb24oZGlzYWJsZSkgewoKICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCB7J2Rpc2FibGVkJzogZGlzYWJsZX0pOwogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIGhvdmVyOiBmdW5jdGlvbihob3ZlcikgewogICAgCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydob3Zlcic6IGhvdmVyfSk7CiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgcGVlbDogZnVuY3Rpb24gKGNvcm5lciwgYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoY29ybmVyKSB7CgogICAgICBpZiAoJC5pbkFycmF5KGNvcm5lciwgY29ybmVycy5hbGwpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJ0Nvcm5lciAnK2Nvcm5lcisnIGlzIG5vdCBwZXJtaXR0ZWQnKTsKCiAgICAgIGlmICgkLmluQXJyYXkoY29ybmVyLCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKSkhPS0xKSB7CgogICAgICAgIHZhciBwb2ludCA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAKICAgICAgICBkYXRhLnN0YXR1cyA9ICdwZWVsJzsKCiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywKICAgICAgICB7CiAgICAgICAgICBjb3JuZXI6IGNvcm5lciwKICAgICAgICAgIHg6IHBvaW50LngsCiAgICAgICAgICB5OiBwb2ludC55CiAgICAgICAgfSwgYW5pbWF0ZSk7CgogICAgICB9CgoKICAgIH0gZWxzZSB7CgogICAgICBkYXRhLnN0YXR1cyA9ICcnOwoKICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBhbmltYXRlKTsKICAgICAgCiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfQp9OwoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWModGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBub3QgYSBtZXRob2Qgb3IgcHJvcGVydHknKTsKCn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgIHRvcDogdG9wLAogICAgbGVmdDogbGVmdCwKICAgICdvdmVyZmxvdyc6IG92ZXJmIHx8ICdoaWRkZW4nLAogICAgekluZGV4OiB6SW5kZXggfHwgJ2F1dG8nCiAgfQp9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQogIAovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucwoKZnVuY3Rpb24gcmFkKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gZGVncmVlcy8xODAqUEk7Cgp9CgovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcwoKZnVuY3Rpb24gZGVnKHJhZGlhbnMpIHsKICAKICByZXR1cm4gcmFkaWFucy9QSSoxODA7Cgp9CgovLyBHZXRzIGEgMkQgcG9pbnQKCmZ1bmN0aW9uIHBvaW50MkQoeCwgeSkgewogIAogIHJldHVybiB7eDogeCwgeTogeX07Cgp9CgovLyBXZWJraXQgNTM0LjMgb24gQW5kcm9pZCB3cm9uZ2x5IHJlcGFpbnRzIGVsZW1lbnRzIHRoYXQgdXNlIG92ZXJmbG93OmhpZGRlbiArIHJvdGF0aW9uCgpmdW5jdGlvbiByb3RhdGlvbkF2YWlsYWJsZSgpIHsKICB2YXIgcGFydHM7CgogIGlmICgocGFydHMgPSAvQXBwbGVXZWJraXRcLyhbMC05XC5dKykvaS5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpKSkgewogICAgdmFyIHdlYmtpdFZlcnNpb24gPSBwYXJzZUZsb2F0KHBhcnRzWzFdKTsKICAgIHJldHVybiAod2Via2l0VmVyc2lvbj41MzQuMyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8gUmV0dXJucyB0aGUgdHJhc2xhdGUgdmFsdWUKCmZ1bmN0aW9uIHRyYW5zbGF0ZSh4LCB5LCB1c2UzZCkgewogIAogIHJldHVybiAoaGFzM2QgJiYgdXNlM2QpID8gJyB0cmFuc2xhdGUzZCgnICsgeCArICdweCwnICsgeSArICdweCwgMHB4KSAnCiAgOiAnIHRyYW5zbGF0ZSgnICsgeCArICdweCwgJyArIHkgKyAncHgpICc7Cgp9CgovLyBSZXR1cm5zIHRoZSByb3RhdGlvbiB2YWx1ZQoKZnVuY3Rpb24gcm90YXRlKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gJyByb3RhdGUoJyArIGRlZ3JlZXMgKyAnZGVnKSAnOwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gRGV0ZWN0cyB0aGUgdHJhbnNpdGlvbkVuZCBFdmVudAoKZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkVuZCgpIHsKCiAgdmFyIHQsCiAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zha2VlbGVtZW50JyksCiAgICB0cmFuc2l0aW9ucyA9IHsKICAgICAgJ3RyYW5zaXRpb24nOid0cmFuc2l0aW9uZW5kJywKICAgICAgJ09UcmFuc2l0aW9uJzonb1RyYW5zaXRpb25FbmQnLAogICAgICAnTVNUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdNb3pUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzond2Via2l0VHJhbnNpdGlvbkVuZCcKICAgIH07CgogIGZvciAodCBpbiB0cmFuc2l0aW9ucykgewogICAgaWYgKGVsLnN0eWxlW3RdICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdOwogICAgfQogIH0KfQoKLy8gR3JhZGllbnRzCgpmdW5jdGlvbiBncmFkaWVudChvYmosIHAwLCBwMSwgY29sb3JzLCBudW1Db2xvcnMpIHsKCiAgdmFyIGosIGNvbHMgPSBbXTsKCiAgaWYgKHZlbmRvcj09Jy13ZWJraXQtJykgewoKICAgIGZvciAoaiA9IDA7IGo8bnVtQ29sb3JzOyBqKyspCiAgICAgIGNvbHMucHVzaCgnY29sb3Itc3RvcCgnK2NvbG9yc1tqXVswXSsnLCAnK2NvbG9yc1tqXVsxXSsnKScpOwogICAgCiAgICBvYmouY3NzKHsnYmFja2dyb3VuZC1pbWFnZSc6CiAgICAgICAgJy13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAnKwogICAgICAgIHAwLngrJyUgJysKICAgICAgICBwMC55KyclLCcrCiAgICAgICAgcDEueCsnJSAnKwogICAgICAgIHAxLnkrJyUsICcrCiAgICAgICAgY29scy5qb2luKCcsJykgKyAnICknfSk7CiAgfSBlbHNlIHsKICAgIAogICAgcDAgPSB7eDpwMC54LzEwMCAqIG9iai53aWR0aCgpLCB5OnAwLnkvMTAwICogb2JqLmhlaWdodCgpfTsKICAgIHAxID0ge3g6cDEueC8xMDAgKiBvYmoud2lkdGgoKSwgeTpwMS55LzEwMCAqIG9iai5oZWlnaHQoKX07CgogICAgdmFyIGR4ID0gcDEueC1wMC54LAogICAgICBkeSA9IHAxLnktcDAueSwKICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCksCiAgICAgIGFuZ2xlMiA9IGFuZ2xlIC0gTWF0aC5QSS8yLAogICAgICBkaWFnb25hbCA9IE1hdGguYWJzKG9iai53aWR0aCgpKk1hdGguc2luKGFuZ2xlMikpK01hdGguYWJzKG9iai5oZWlnaHQoKSpNYXRoLmNvcyhhbmdsZTIpKSwKICAgICAgZ3JhZGllbnREaWFnb25hbCA9IE1hdGguc3FydChkeSpkeSArIGR4KmR4KSwKICAgICAgY29ybmVyID0gcG9pbnQyRCgocDEueDxwMC54KSA/IG9iai53aWR0aCgpIDogMCwgKHAxLnk8cDAueSkgPyBvYmouaGVpZ2h0KCkgOiAwKSwKICAgICAgc2xvcGUgPSBNYXRoLnRhbihhbmdsZSksCiAgICAgIGludmVyc2UgPSAtMS9zbG9wZSwKICAgICAgeCA9IChpbnZlcnNlKmNvcm5lci54IC0gY29ybmVyLnkgLSBzbG9wZSpwMC54ICsgcDAueSkvKGludmVyc2Utc2xvcGUpLAogICAgICBjID0ge3g6IHgsIHk6IGludmVyc2UqeCAtIGludmVyc2UqY29ybmVyLnggKyBjb3JuZXIueX0sCiAgICAgIHNlZ0EgPSAoTWF0aC5zcXJ0KCBNYXRoLnBvdyhjLngtcDAueCwyKSArIE1hdGgucG93KGMueS1wMC55LDIpKSk7CgogICAgICBmb3IgKGogPSAwOyBqPG51bUNvbG9yczsgaisrKQogICAgICAgIGNvbHMucHVzaCgnICcrY29sb3JzW2pdWzFdKycgJysoKHNlZ0EgKyBncmFkaWVudERpYWdvbmFsKmNvbG9yc1tqXVswXSkqMTAwL2RpYWdvbmFsKSsnJScpOwoKICAgICAgb2JqLmNzcyh7J2JhY2tncm91bmQtaW1hZ2UnOiB2ZW5kb3IrJ2xpbmVhci1ncmFkaWVudCgnICsgKC1hbmdsZSkgKyAncmFkLCcgKyBjb2xzLmpvaW4oJywnKSArICcpJ30pOwogIH0KfQoKCi8vIFRyaWdnZXJzIGFuIGV2ZW50CgpmdW5jdGlvbiB0cmlnZ2VyKGV2ZW50TmFtZSwgY29udGV4dCwgYXJncykgewoKICB2YXIgZXZlbnQgPSAkLkV2ZW50KGV2ZW50TmFtZSk7CiAgY29udGV4dC50cmlnZ2VyKGV2ZW50LCBhcmdzKTsKICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICByZXR1cm4gJ3ByZXZlbnRlZCc7CiAgZWxzZSBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgIHJldHVybiAnc3RvcHBlZCc7CiAgZWxzZQogICAgcmV0dXJuICcnOwp9CgovLyBKUyBFcnJvcnMKCmZ1bmN0aW9uIHR1cm5FcnJvcihtZXNzYWdlKSB7CgogIGZ1bmN0aW9uIFR1cm5Kc0Vycm9yKG1lc3NhZ2UpIHsKICAgIHRoaXMubmFtZSA9ICJUdXJuSnNFcnJvciI7CiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogIH0KCiAgVHVybkpzRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CiAgVHVybkpzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHVybkpzRXJyb3I7CiAgcmV0dXJuIG5ldyBUdXJuSnNFcnJvcihtZXNzYWdlKTsKCn0KCi8vIEZpbmQgdGhlIG9mZnNldCBvZiBhbiBlbGVtZW50IGlnbm9yaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKCiAgdmFyIG9mZnNldCA9IHt0b3A6IDAsIGxlZnQ6IDB9OwoKICBkb3sKICAgIG9mZnNldC5sZWZ0ICs9IG9iai5vZmZzZXRMZWZ0OwogICAgb2Zmc2V0LnRvcCArPSBvYmoub2Zmc2V0VG9wOwogIH0gd2hpbGUgKChvYmogPSBvYmoub2Zmc2V0UGFyZW50KSk7CgogIHJldHVybiBvZmZzZXQ7Cgp9CgovLyBDaGVja3MgaWYgdGhlcmUncyBoYXJkIHBhZ2UgY29tcGF0aWJpbGl0eQovLyBJRTkgaXMgdGhlIG9ubHkgYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaGFyZCBwYWdlcwoKZnVuY3Rpb24gaGFzSGFyZFBhZ2UoKSB7CiAgcmV0dXJuIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUgOS4wJyk9PS0xKTsKfQoKLy8gUmVxdWVzdCBhbiBhbmltYXRpb24KCndpbmRvdy5yZXF1ZXN0QW5pbSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7CiAgICB9OwoKfSkoKTsKCi8vIEV4dGVuZCAkLmZuCgokLmV4dGVuZCgkLmZuLCB7CgogIGZsaXA6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGRlYygkKHRoaXNbMF0pLCBmbGlwTWV0aG9kcywgYXJndW1lbnRzKTsKICB9LAoKICB0dXJuOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBkZWMoJCh0aGlzWzBdKSwgdHVybk1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHJhbnNmb3JtOiBmdW5jdGlvbih0cmFuc2Zvcm0sIG9yaWdpbikgewoKICAgIHZhciBwcm9wZXJ0aWVzID0ge307CiAgICAKICAgIGlmIChvcmlnaW4pCiAgICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSBvcmlnaW47CiAgICAKICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTsKICAKICAgIHJldHVybiB0aGlzLmNzcyhwcm9wZXJ0aWVzKTsKCiAgfSwKCiAgYW5pbWF0ZWY6IGZ1bmN0aW9uKHBvaW50KSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5lZmZlY3QpCiAgICAgIGRhdGEuZWZmZWN0LnN0b3AoKTsKCiAgICBpZiAocG9pbnQpIHsKCiAgICAgIGlmICghcG9pbnQudG8ubGVuZ3RoKSBwb2ludC50byA9IFtwb2ludC50b107CiAgICAgIGlmICghcG9pbnQuZnJvbS5sZW5ndGgpIHBvaW50LmZyb20gPSBbcG9pbnQuZnJvbV07CgogICAgICB2YXIgZGlmZiA9IFtdLAogICAgICAgIGxlbiA9IHBvaW50LnRvLmxlbmd0aCwKICAgICAgICBhbmltYXRpbmcgPSB0cnVlLAogICAgICAgIHRoYXQgPSB0aGlzLAogICAgICAgIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpLAogICAgICAgIGZyYW1lID0gZnVuY3Rpb24oKSB7CgogICAgICAgICAgaWYgKCFkYXRhLmVmZmVjdCB8fCAhYW5pbWF0aW5nKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgdmFyIHYgPSBbXSwKICAgICAgICAgICAgdGltZURpZmYgPSBNYXRoLm1pbihwb2ludC5kdXJhdGlvbiwgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHRpbWUpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgICAgIHYucHVzaChkYXRhLmVmZmVjdC5lYXNpbmcoMSwgdGltZURpZmYsIHBvaW50LmZyb21baV0sIGRpZmZbaV0sIHBvaW50LmR1cmF0aW9uKSk7CgogICAgICAgICAgcG9pbnQuZnJhbWUoKGxlbj09MSkgPyB2WzBdIDogdik7CgogICAgICAgICAgaWYgKHRpbWVEaWZmPT1wb2ludC5kdXJhdGlvbikgewogICAgICAgICAgICBkZWxldGUgZGF0YVsnZWZmZWN0J107CiAgICAgICAgICAgIHRoYXQuZGF0YShkYXRhKTsKICAgICAgICAgICAgaWYgKHBvaW50LmNvbXBsZXRlKQogICAgICAgICAgICAgIHBvaW50LmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW0oZnJhbWUpOwogICAgICAgICAgfQogICAgICAgIH07CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgIGRpZmYucHVzaChwb2ludC50b1tpXSAtIHBvaW50LmZyb21baV0pOwoKICAgICAgZGF0YS5lZmZlY3QgPSAkLmV4dGVuZCh7CiAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBhbmltYXRpbmcgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGVhc2luZzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGRhdGEpIHsKICAgICAgICAgIHJldHVybiBjICogTWF0aC5zcXJ0KDEgLSAodD10L2RhdGEtMSkqdCkgKyBiOwogICAgICAgIH0KICAgICAgfSwgcG9pbnQpOwoKICAgICAgdGhpcy5kYXRhKGRhdGEpOwoKICAgICAgZnJhbWUoKTsKCiAgICB9IGVsc2UgewogICAgICAKICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwoKICAgIH0KICB9Cn0pOwoKLy8gRXhwb3J0IHNvbWUgZ2xvYmFscwoKJC5pc1RvdWNoID0gaXNUb3VjaDsKJC5tb3VzZUV2ZW50cyA9IG1vdXNlRXZlbnRzOwokLmNzc1ByZWZpeCA9IGdldFByZWZpeDsKJC5jc3NUcmFuc2l0aW9uRW5kID0gZ2V0VHJhbnNpdGlvbkVuZDsKJC5maW5kUG9zID0gZmluZFBvczsKCn0pKGpRdWVyeSk7Cg=='],
	complete: loadApp
});

	</script>



<!--
<div id="loadfile">
	<h1>The XMLHttpRequest Object</h1>
	<button type="button" onclick="loadfile()">loadfile</button>
	</div>
	-->

<!--
<script id="script_loadfile">
	function loadfile() {
		var xhttp = new XMLHttpRequest();
		xhttp.onreadystatechange = function() {
			if (this.readyState == 4 && this.status == 200) {
				document.getElementById("loadfile").innerHTML =
				this.responseText;
				}
			};
		xhttp.open("GET", "index_fb_mag.psv", true);
		xhttp.send();
		}
	</script>
	-->


<!--
	<script id="ajaxrequest" > 
		function ajaxRequest(){
			var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; //activeX versions to check for in IE
			if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
				for (var i=0; i<activexmodes.length; i++){
					try{
						return new ActiveXObject(activexmodes[i]);
						}
					catch(e){
//suppress error
						}
					}
				}
			else if (window.XMLHttpRequest) // if Mozilla, Safari etc
				return new XMLHttpRequest();
			else
				return false;
				}
 
	function ajaxpost(){
		var mypostrequest=new ajaxRequest();
		mypostrequest.onreadystatechange=function(){
			if (mypostrequest.readyState==4){
				if (mypostrequest.status==200 || window.location.href.indexOf("http")==-1){
					document.getElementById("result").innerHTML = mypostrequest.responseText;
					}
				else{
					alert("An error has occured making the request");
					}
				}
			}
    
		var userId = encodeURIComponent(document.getElementById("userId").value);
		var password = encodeURIComponent(document.getElementById("password").value);
		var parameters="userId="+userId+"&password="+password;
		mypostrequest.open("POST", "http://localhost:8080/AjaxTest/Login", true);
		mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		mypostrequest.send(parameters);
		}
	</script>
	-->
 
<!--
	<form method="get" action="">
        <table>
            <tr>
                <td>User Id:</td>
                <td><input type="text" id="userId" name="userId" size="30" />
                </td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type="password" id="password" name="password"
                    size="30" />
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><input type="button" value="submit" onClick="ajaxpost()" />
                </td>
            </tr>
		</table>
		</form>
 
	<div id="result"></div>
	-->




	<br><br><br><br> <br><br><br><br>
	<br><br><br><br> <br><br><br><br>
	<br><br><br><br> <br><br><br><br>
	<br><br><br><br> <br><br><br><br>
	<hr color=red>
	<hr color=white>
	<hr color=blue>
	<div id="div_kogrids_m"></div>	
	<hr color=blue>
	<hr color=white>
	<hr color=red>
	<br><br><br><br <br><br><br><br
	<br><br><br><br <br><br><br><br
	<hr color=white>
	<div id="div_kogrids_b"></div>	
	
<!--
	</body>
	</html>
	-->

<!--
        <script type="text/javascript">
		window.location.href = "/iperms/"
		</script>
		-->	


<!--	<script src='/fb/extras/jquery.min.1.7.js'></script>	-->
<!--	<script src='/fb/extras/modnizr.2.5.3.min.js'></script>	-->
<!--	<script src='/fb/lib/hash.js'></script>	-->
<!--
	-->
	<script src='data:/text/plain;base64,LyohIGpRdWVyeSB2MS43IGpxdWVyeS5jb20gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY0EoYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjeChhKXtpZighY21bYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NufHwoY249Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjbi5mcmFtZUJvcmRlcj1jbi53aWR0aD1jbi5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjbik7aWYoIWNvfHwhY24uY3JlYXRlRWxlbWVudCljbz0oY24uY29udGVudFdpbmRvd3x8Y24uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjby53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY28uY2xvc2UoKTtkPWNvLmNyZWF0ZUVsZW1lbnQoYSksY28uYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNuKX1jbVthXT1lfXJldHVybiBjbVthXX1mdW5jdGlvbiBjdyhhLGIpe3ZhciBjPXt9O2YuZWFjaChjcy5jb25jYXQuYXBwbHkoW10sY3Muc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjdigpe2N0PWJ9ZnVuY3Rpb24gY3UoKXtzZXRUaW1lb3V0KGN2LDApO3JldHVybiBjdD1mLm5vdygpfWZ1bmN0aW9uIGNsKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2soKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY2UoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGNkKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gY2MoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkcudGVzdChhKT9kKGEsZSk6Y2MoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpY2MoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGNiKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gY2EoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJWLGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9Y2EoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9Y2EoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJfKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlIpLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiRShhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J6OmJBO2lmKGQ+MCl7YyE9PSJib3JkZXIiJiZmLmVhY2goZSxmdW5jdGlvbigpe2N8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2QrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK3RoaXMpKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDB9KTtyZXR1cm4gZCsicHgifWQ9YkIoYSxiLGIpO2lmKGQ8MHx8ZD09bnVsbClkPWEuc3R5bGVbYl18fDA7ZD1wYXJzZUZsb2F0KGQpfHwwLGMmJmYuZWFjaChlLGZ1bmN0aW9uKCl7ZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIit0aGlzKSl8fDAsYyE9PSJwYWRkaW5nIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrdGhpcykpfHwwKX0pO3JldHVybiBkKyJweCJ9ZnVuY3Rpb24gYnIoYSxiKXtiLnNyYz9mLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYmksIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBicShhKXt2YXIgYj0oYS5ub2RlTmFtZXx8IiIpLnRvTG93ZXJDYXNlKCk7Yj09PSJpbnB1dCI/YnAoYSk6YiE9PSJzY3JpcHQiJiZ0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJmYuZ3JlcChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJwKX1mdW5jdGlvbiBicChhKXtpZihhLnR5cGU9PT0iY2hlY2tib3gifHxhLnR5cGU9PT0icmFkaW8iKWEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkfWZ1bmN0aW9uIGJvKGEpe3JldHVybiB0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOnR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwhPSJ1bmRlZmluZWQiP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9uIGJuKGEsYil7dmFyIGM7aWYoYi5ub2RlVHlwZT09PTEpe2IuY2xlYXJBdHRyaWJ1dGVzJiZiLmNsZWFyQXR0cmlidXRlcygpLGIubWVyZ2VBdHRyaWJ1dGVzJiZiLm1lcmdlQXR0cmlidXRlcyhhKSxjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihjPT09Im9iamVjdCIpYi5vdXRlckhUTUw9YS5vdXRlckhUTUw7ZWxzZSBpZihjIT09ImlucHV0Inx8YS50eXBlIT09ImNoZWNrYm94IiYmYS50eXBlIT09InJhZGlvIil7aWYoYz09PSJvcHRpb24iKWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ7ZWxzZSBpZihjPT09ImlucHV0Inx8Yz09PSJ0ZXh0YXJlYSIpYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWV9ZWxzZSBhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKTtiLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pfX1mdW5jdGlvbiBibShhLGIpe2lmKGIubm9kZVR5cGU9PT0xJiYhIWYuaGFzRGF0YShhKSl7dmFyIGMsZCxlLGc9Zi5fZGF0YShhKSxoPWYuX2RhdGEoYixnKSxpPWcuZXZlbnRzO2lmKGkpe2RlbGV0ZSBoLmhhbmRsZSxoLmV2ZW50cz17fTtmb3IoYyBpbiBpKWZvcihkPTAsZT1pW2NdLmxlbmd0aDtkPGU7ZCsrKWYuZXZlbnQuYWRkKGIsYysoaVtjXVtkXS5uYW1lc3BhY2U/Ii4iOiIiKStpW2NdW2RdLm5hbWVzcGFjZSxpW2NdW2RdLGlbY11bZF0uZGF0YSl9aC5kYXRhJiYoaC5kYXRhPWYuZXh0ZW5kKHt9LGguZGF0YSkpfX1mdW5jdGlvbiBibChhLGIpe3JldHVybiBmLm5vZGVOYW1lKGEsInRhYmxlIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBYKGEpe3ZhciBiPVkuc3BsaXQoIiAiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9ZnVuY3Rpb24gVyhhLGIsYyl7Yj1ifHwwO2lmKGYuaXNGdW5jdGlvbihiKSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2FsbChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgZD1mLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PTF9KTtpZihSLnRlc3QoYikpcmV0dXJuIGYuZmlsdGVyKGIsZCwhYyk7Yj1mLmZpbHRlcihiLGQpfXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBmLmluQXJyYXkoYSxiKT49MD09PWN9KX1mdW5jdGlvbiBWKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiBOKCl7cmV0dXJuITB9ZnVuY3Rpb24gTSgpe3JldHVybiExfWZ1bmN0aW9uIG4oYSxiLGMpe3ZhciBkPWIrImRlZmVyIixlPWIrInF1ZXVlIixnPWIrIm1hcmsiLGg9Zi5fZGF0YShhLGQpO2gmJihjPT09InF1ZXVlInx8IWYuX2RhdGEoYSxlKSkmJihjPT09Im1hcmsifHwhZi5fZGF0YShhLGcpKSYmc2V0VGltZW91dChmdW5jdGlvbigpeyFmLl9kYXRhKGEsZSkmJiFmLl9kYXRhKGEsZykmJihmLnJlbW92ZURhdGEoYSxkLCEwKSxoLmZpcmUoKSl9LDApfWZ1bmN0aW9uIG0oYSl7Zm9yKHZhciBiIGluIGEpe2lmKGI9PT0iZGF0YSImJmYuaXNFbXB0eU9iamVjdChhW2JdKSljb250aW51ZTtpZihiIT09InRvSlNPTiIpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbChhLGMsZCl7aWYoZD09PWImJmEubm9kZVR5cGU9PT0xKXt2YXIgZT0iZGF0YS0iK2MucmVwbGFjZShrLCItJDEiKS50b0xvd2VyQ2FzZSgpO2Q9YS5nZXRBdHRyaWJ1dGUoZSk7aWYodHlwZW9mIGQ9PSJzdHJpbmciKXt0cnl7ZD1kPT09InRydWUiPyEwOmQ9PT0iZmFsc2UiPyExOmQ9PT0ibnVsbCI/bnVsbDpmLmlzTnVtZXJpYyhkKT9wYXJzZUZsb2F0KGQpOmoudGVzdChkKT9mLnBhcnNlSlNPTihkKTpkfWNhdGNoKGcpe31mLmRhdGEoYSxjLGQpfWVsc2UgZD1ifXJldHVybiBkfWZ1bmN0aW9uIGgoYSl7dmFyIGI9Z1thXT17fSxjLGQ7YT1hLnNwbGl0KC9ccysvKTtmb3IoYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBjPWEuZG9jdW1lbnQsZD1hLm5hdmlnYXRvcixlPWEubG9jYXRpb24sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIEsoKXtpZighZS5pc1JlYWR5KXt0cnl7Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChhKXtzZXRUaW1lb3V0KEssMSk7cmV0dXJufWUucmVhZHkoKX19dmFyIGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGUuZm4uaW5pdChhLGIsaCl9LGY9YS5qUXVlcnksZz1hLiQsaCxpPS9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLyxqPS9cUy8saz0vXlxzKy8sbD0vXHMrJC8sbT0vXGQvLG49L148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLyxvPS9eW1xdLDp7fVxzXSokLyxwPS9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2cscT0vIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2cscj0vKD86Xnw6fCwpKD86XHMqXFspKy9nLHM9Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8sdD0vKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8sdT0vKG1zaWUpIChbXHcuXSspLyx2PS8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKykpPy8sdz0vLShbYS16XXxbMC05XSkvaWcseD0vXi1tcy0vLHk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYisiIikudG9VcHBlckNhc2UoKX0sej1kLnVzZXJBZ2VudCxBLEIsQyxEPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEY9QXJyYXkucHJvdG90eXBlLnB1c2gsRz1BcnJheS5wcm90b3R5cGUuc2xpY2UsSD1TdHJpbmcucHJvdG90eXBlLnRyaW0sST1BcnJheS5wcm90b3R5cGUuaW5kZXhPZixKPXt9O2UuZm49ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaW5pdDpmdW5jdGlvbihhLGQsZil7dmFyIGcsaCxqLGs7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFkJiZjLmJvZHkpe3RoaXMuY29udGV4dD1jLHRoaXNbMF09Yy5ib2R5LHRoaXMuc2VsZWN0b3I9YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ic3RyaW5nIil7YS5jaGFyQXQoMCkhPT0iPCJ8fGEuY2hhckF0KGEubGVuZ3RoLTEpIT09Ij4ifHxhLmxlbmd0aDwzP2c9aS5leGVjKGEpOmc9W251bGwsYSxudWxsXTtpZihnJiYoZ1sxXXx8IWQpKXtpZihnWzFdKXtkPWQgaW5zdGFuY2VvZiBlP2RbMF06ZCxrPWQ/ZC5vd25lckRvY3VtZW50fHxkOmMsaj1uLmV4ZWMoYSksaj9lLmlzUGxhaW5PYmplY3QoZCk/KGE9W2MuY3JlYXRlRWxlbWVudChqWzFdKV0sZS5mbi5hdHRyLmNhbGwoYSxkLCEwKSk6YT1bay5jcmVhdGVFbGVtZW50KGpbMV0pXTooaj1lLmJ1aWxkRnJhZ21lbnQoW2dbMV1dLFtrXSksYT0oai5jYWNoZWFibGU/ZS5jbG9uZShqLmZyYWdtZW50KTpqLmZyYWdtZW50KS5jaGlsZE5vZGVzKTtyZXR1cm4gZS5tZXJnZSh0aGlzLGEpfWg9Yy5nZXRFbGVtZW50QnlJZChnWzJdKTtpZihoJiZoLnBhcmVudE5vZGUpe2lmKGguaWQhPT1nWzJdKXJldHVybiBmLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWh9dGhpcy5jb250ZXh0PWMsdGhpcy5zZWxlY3Rvcj1hO3JldHVybiB0aGlzfXJldHVybiFkfHxkLmpxdWVyeT8oZHx8ZikuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGQpLmZpbmQoYSl9aWYoZS5pc0Z1bmN0aW9uKGEpKXJldHVybiBmLnJlYWR5KGEpO2Euc2VsZWN0b3IhPT1iJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpO3JldHVybiBlLm1ha2VBcnJheShhLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNyIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBHLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5jb25zdHJ1Y3RvcigpO2UuaXNBcnJheShhKT9GLmFwcGx5KGQsYSk6ZS5tZXJnZShkLGEpLGQucHJldk9iamVjdD10aGlzLGQuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9kLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStjOmImJihkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTtyZXR1cm4gZH0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBlLmVhY2godGhpcyxhLGIpfSxyZWFkeTpmdW5jdGlvbihhKXtlLmJpbmRSZWFkeSgpLEIuYWRkKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhHLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLEcuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOkYsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LGUuZm4uaW5pdC5wcm90b3R5cGU9ZS5mbixlLmV4dGVuZD1lLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGMsZCxmLGcsaCxpPWFyZ3VtZW50c1swXXx8e30saj0xLGs9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiBpPT0iYm9vbGVhbiImJihsPWksaT1hcmd1bWVudHNbMV18fHt9LGo9MiksdHlwZW9mIGkhPSJvYmplY3QiJiYhZS5pc0Z1bmN0aW9uKGkpJiYoaT17fSksaz09PWomJihpPXRoaXMsLS1qKTtmb3IoO2o8aztqKyspaWYoKGE9YXJndW1lbnRzW2pdKSE9bnVsbClmb3IoYyBpbiBhKXtkPWlbY10sZj1hW2NdO2lmKGk9PT1mKWNvbnRpbnVlO2wmJmYmJihlLmlzUGxhaW5PYmplY3QoZil8fChnPWUuaXNBcnJheShmKSkpPyhnPyhnPSExLGg9ZCYmZS5pc0FycmF5KGQpP2Q6W10pOmg9ZCYmZS5pc1BsYWluT2JqZWN0KGQpP2Q6e30saVtjXT1lLmV4dGVuZChsLGgsZikpOmYhPT1iJiYoaVtjXT1mKX1yZXR1cm4gaX0sZS5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYil7YS4kPT09ZSYmKGEuJD1nKSxiJiZhLmpRdWVyeT09PWUmJihhLmpRdWVyeT1mKTtyZXR1cm4gZX0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9lLnJlYWR5V2FpdCsrOmUucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITAmJiEtLWUucmVhZHlXYWl0fHxhIT09ITAmJiFlLmlzUmVhZHkpe2lmKCFjLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtlLmlzUmVhZHk9ITA7aWYoYSE9PSEwJiYtLWUucmVhZHlXYWl0PjApcmV0dXJuO0IuZmlyZVdpdGgoYyxbZV0pLGUuZm4udHJpZ2dlciYmZShjKS50cmlnZ2VyKCJyZWFkeSIpLnVuYmluZCgicmVhZHkiKX19LGJpbmRSZWFkeTpmdW5jdGlvbigpe2lmKCFCKXtCPWUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpO2lmKGMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixDLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGUucmVhZHksITEpO2Vsc2UgaWYoYy5hdHRhY2hFdmVudCl7Yy5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixDKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLGUucmVhZHkpO3ZhciBiPSExO3RyeXtiPWEuZnJhbWVFbGVtZW50PT1udWxsfWNhdGNoKGQpe31jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCYmYiYmSygpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgYT09Im9iamVjdCImJiJzZXRJbnRlcnZhbCJpbiBhfSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGwmJm0udGVzdChhKSYmIWlzTmFOKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpKW0QuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxlLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIUUuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhRS5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxFLmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgYX0scGFyc2VKU09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1lLnRyaW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtpZihvLnRlc3QoYi5yZXBsYWNlKHAsIkAiKS5yZXBsYWNlKHEsIl0iKS5yZXBsYWNlKHIsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LHBhcnNlWE1MOmZ1bmN0aW9uKGMpe3ZhciBkLGY7dHJ5e2EuRE9NUGFyc2VyPyhmPW5ldyBET01QYXJzZXIsZD1mLnBhcnNlRnJvbVN0cmluZyhjLCJ0ZXh0L3htbCIpKTooZD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGQuYXN5bmM9ImZhbHNlIixkLmxvYWRYTUwoYykpfWNhdGNoKGcpe2Q9Yn0oIWR8fCFkLmRvY3VtZW50RWxlbWVudHx8ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZlLmVycm9yKCJJbnZhbGlkIFhNTDogIitjKTtyZXR1cm4gZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZqLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoeCwibXMtIikucmVwbGFjZSh3LHkpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT1iLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGc9MCxoPWEubGVuZ3RoLGk9aD09PWJ8fGUuaXNGdW5jdGlvbihhKTtpZihkKXtpZihpKXtmb3IoZiBpbiBhKWlmKGMuYXBwbHkoYVtmXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuYXBwbHkoYVtnKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihpKXtmb3IoZiBpbiBhKWlmKGMuY2FsbChhW2ZdLGYsYVtmXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmNhbGwoYVtnXSxnLGFbZysrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpIP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOkguY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UoaywiIikucmVwbGFjZShsLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107aWYoYSE9bnVsbCl7dmFyIGQ9ZS50eXBlKGEpO2EubGVuZ3RoPT1udWxsfHxkPT09InN0cmluZyJ8fGQ9PT0iZnVuY3Rpb24ifHxkPT09InJlZ2V4cCJ8fGUuaXNXaW5kb3coYSk/Ri5jYWxsKGMsYSk6ZS5tZXJnZShjLGEpfXJldHVybiBjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihJKXJldHVybiBJLmNhbGwoYixhLGMpO2Q9Yi5sZW5ndGgsYz1jP2M8MD9NYXRoLm1heCgwLGQrYyk6YzowO2Zvcig7YzxkO2MrKylpZihjIGluIGImJmJbY109PT1hKXJldHVybiBjfXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihhLGMpe3ZhciBkPWEubGVuZ3RoLGU9MDtpZih0eXBlb2YgYy5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1jW2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1kO3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFjO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMhPT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoPVtdLGk9MCxqPWEubGVuZ3RoLGs9YSBpbnN0YW5jZW9mIGV8fGohPT1iJiZ0eXBlb2Ygaj09Im51bWJlciImJihqPjAmJmFbMF0mJmFbai0xXXx8aj09PTB8fGUuaXNBcnJheShhKSk7aWYoaylmb3IoO2k8ajtpKyspZj1jKGFbaV0saSxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7ZWxzZSBmb3IoZyBpbiBhKWY9YyhhW2ddLGcsZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO3JldHVybiBoLmNvbmNhdC5hcHBseShbXSxoKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXt2YXIgZD1hW2NdO2M9YSxhPWR9aWYoIWUuaXNGdW5jdGlvbihhKSlyZXR1cm4gYjt2YXIgZj1HLmNhbGwoYXJndW1lbnRzLDIpLGc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShjLGYuY29uY2F0KEcuY2FsbChhcmd1bWVudHMpKSl9O2cuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxnLmd1aWR8fGUuZ3VpZCsrO3JldHVybiBnfSxhY2Nlc3M6ZnVuY3Rpb24oYSxjLGQsZixnLGgpe3ZhciBpPWEubGVuZ3RoO2lmKHR5cGVvZiBjPT0ib2JqZWN0Iil7Zm9yKHZhciBqIGluIGMpZS5hY2Nlc3MoYSxqLGNbal0sZixnLGQpO3JldHVybiBhfWlmKGQhPT1iKXtmPSFoJiZmJiZlLmlzRnVuY3Rpb24oZCk7Zm9yKHZhciBrPTA7azxpO2srKylnKGFba10sYyxmP2QuY2FsbChhW2tdLGssZyhhW2tdLGMpKTpkLGgpO3JldHVybiBhfXJldHVybiBpP2coYVswXSxjKTpifSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTt2YXIgYj1zLmV4ZWMoYSl8fHQuZXhlYyhhKXx8dS5leGVjKGEpfHxhLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ2LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZS5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWI9dGhpcy5zdWIsYS5mbi5pbml0PWZ1bmN0aW9uKGQsZil7ZiYmZiBpbnN0YW5jZW9mIGUmJiEoZiBpbnN0YW5jZW9mIGEpJiYoZj1hKGYpKTtyZXR1cm4gZS5mbi5pbml0LmNhbGwodGhpcyxkLGYsYil9LGEuZm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgYj1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSksZS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7SlsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KSxBPWUudWFNYXRjaCh6KSxBLmJyb3dzZXImJihlLmJyb3dzZXJbQS5icm93c2VyXT0hMCxlLmJyb3dzZXIudmVyc2lvbj1BLnZlcnNpb24pLGUuYnJvd3Nlci53ZWJraXQmJihlLmJyb3dzZXIuc2FmYXJpPSEwKSxqLnRlc3QoIsKgIikmJihrPS9eW1xzXHhBMF0rLyxsPS9bXHNceEEwXSskLyksaD1lKGMpLGMuYWRkRXZlbnRMaXN0ZW5lcj9DPWZ1bmN0aW9uKCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixDLCExKSxlLnJlYWR5KCl9OmMuYXR0YWNoRXZlbnQmJihDPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmKGMuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQyksZS5yZWFkeSgpKX0pLHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQmJmRlZmluZS5hbWQualF1ZXJ5JiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gZX0pO3JldHVybiBlfSgpLGc9e307Zi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT1hP2dbYV18fGgoYSk6e307dmFyIGM9W10sZD1bXSxlLGksaixrLGwsbT1mdW5jdGlvbihiKXt2YXIgZCxlLGcsaCxpO2ZvcihkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWc9YltkXSxoPWYudHlwZShnKSxoPT09ImFycmF5Ij9tKGcpOmg9PT0iZnVuY3Rpb24iJiYoIWEudW5pcXVlfHwhby5oYXMoZykpJiZjLnB1c2goZyl9LG49ZnVuY3Rpb24oYixmKXtmPWZ8fFtdLGU9IWEubWVtb3J5fHxbYixmXSxpPSEwLGw9anx8MCxqPTAsaz1jLmxlbmd0aDtmb3IoO2MmJmw8aztsKyspaWYoY1tsXS5hcHBseShiLGYpPT09ITEmJmEuc3RvcE9uRmFsc2Upe2U9ITA7YnJlYWt9aT0hMSxjJiYoYS5vbmNlP2U9PT0hMD9vLmRpc2FibGUoKTpjPVtdOmQmJmQubGVuZ3RoJiYoZT1kLnNoaWZ0KCksby5maXJlV2l0aChlWzBdLGVbMV0pKSl9LG89e2FkZDpmdW5jdGlvbigpe2lmKGMpe3ZhciBhPWMubGVuZ3RoO20oYXJndW1lbnRzKSxpP2s9Yy5sZW5ndGg6ZSYmZSE9PSEwJiYoaj1hLG4oZVswXSxlWzFdKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKGMpe3ZhciBiPWFyZ3VtZW50cyxkPTAsZT1iLmxlbmd0aDtmb3IoO2Q8ZTtkKyspZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspaWYoYltkXT09PWNbZl0pe2kmJmY8PWsmJihrLS0sZjw9bCYmbC0tKSxjLnNwbGljZShmLS0sMSk7aWYoYS51bmlxdWUpYnJlYWt9fXJldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7aWYoYyl7dmFyIGI9MCxkPWMubGVuZ3RoO2Zvcig7YjxkO2IrKylpZihhPT09Y1tiXSlyZXR1cm4hMH1yZXR1cm4hMX0sZW1wdHk6ZnVuY3Rpb24oKXtjPVtdO3JldHVybiB0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7Yz1kPWU9YjtyZXR1cm4gdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hY30sbG9jazpmdW5jdGlvbigpe2Q9YiwoIWV8fGU9PT0hMCkmJm8uZGlzYWJsZSgpO3JldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZH0sZmlyZVdpdGg6ZnVuY3Rpb24oYixjKXtkJiYoaT9hLm9uY2V8fGQucHVzaChbYixjXSk6KCFhLm9uY2V8fCFlKSYmbihiLGMpKTtyZXR1cm4gdGhpc30sZmlyZTpmdW5jdGlvbigpe28uZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZX19O3JldHVybiBvfTt2YXIgaT1bXS5zbGljZTtmLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksYz1mLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxkPWYuQ2FsbGJhY2tzKCJtZW1vcnkiKSxlPSJwZW5kaW5nIixnPXtyZXNvbHZlOmIscmVqZWN0OmMsbm90aWZ5OmR9LGg9e2RvbmU6Yi5hZGQsZmFpbDpjLmFkZCxwcm9ncmVzczpkLmFkZCxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBlfSxpc1Jlc29sdmVkOmIuZmlyZWQsaXNSZWplY3RlZDpjLmZpcmVkLHRoZW46ZnVuY3Rpb24oYSxiLGMpe2kuZG9uZShhKS5mYWlsKGIpLnByb2dyZXNzKGMpO3JldHVybiB0aGlzfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5KGksYXJndW1lbnRzKX0scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuRGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwicmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0sZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKXtnPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGcmJmYuaXNGdW5jdGlvbihnLnByb21pc2UpP2cucHJvbWlzZSgpLnRoZW4oZC5yZXNvbHZlLGQucmVqZWN0LGQubm90aWZ5KTpkW2UrIldpdGgiXSh0aGlzPT09aT9kOnRoaXMsW2ddKX0pOmlbYV0oZFtlXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtpZihhPT1udWxsKWE9aDtlbHNlIGZvcih2YXIgYiBpbiBoKWFbYl09aFtiXTtyZXR1cm4gYX19LGk9aC5wcm9taXNlKHt9KSxqO2ZvcihqIGluIGcpaVtqXT1nW2pdLmZpcmUsaVtqKyJXaXRoIl09Z1tqXS5maXJlV2l0aDtpLmRvbmUoZnVuY3Rpb24oKXtlPSJyZXNvbHZlZCJ9LGMuZGlzYWJsZSxkLmxvY2spLmZhaWwoZnVuY3Rpb24oKXtlPSJyZWplY3RlZCJ9LGIuZGlzYWJsZSxkLmxvY2spLGEmJmEuY2FsbChpLGkpO3JldHVybiBpfSx3aGVuOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2VbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YixqLm5vdGlmeVdpdGgoayxlKX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7YlthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpjLC0tZ3x8ai5yZXNvbHZlV2l0aChqLGIpfX12YXIgYj1pLmNhbGwoYXJndW1lbnRzLDApLGM9MCxkPWIubGVuZ3RoLGU9QXJyYXkoZCksZz1kLGg9ZCxqPWQ8PTEmJmEmJmYuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6Zi5EZWZlcnJlZCgpLGs9ai5wcm9taXNlKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmYltjXS5wcm9taXNlJiZmLmlzRnVuY3Rpb24oYltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGwoYyksai5yZWplY3QsbShjKSk6LS1nO2d8fGoucmVzb2x2ZVdpdGgoaixiKX1lbHNlIGohPT1hJiZqLnJlc29sdmVXaXRoKGosZD9bYV06W10pO3JldHVybiBrfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1jLmRvY3VtZW50RWxlbWVudCxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7YS5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxhLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0ndG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjU1Oyc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz48bmF2PjwvbmF2PiIsZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIWR8fCFkLmxlbmd0aHx8IWUpcmV0dXJue307Zz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0saz17bGVhZGluZ1doaXRlc3BhY2U6YS5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChlLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUvLnRlc3QoZS5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWUuc3R5bGUuY3NzRmxvYXQsdW5rbm93bkVsZW1zOiEhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibmF2IikubGVuZ3RoLGNoZWNrT246aS52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6aC5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6YS5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIWMuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwfSxpLmNoZWNrZWQ9ITAsay5ub0Nsb25lQ2hlY2tlZD1pLmNsb25lTm9kZSghMCkuY2hlY2tlZCxnLmRpc2FibGVkPSEwLGsub3B0RGlzYWJsZWQ9IWguZGlzYWJsZWQ7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2godil7ay5kZWxldGVFeHBhbmRvPSExfSFhLmFkZEV2ZW50TGlzdGVuZXImJmEuYXR0YWNoRXZlbnQmJmEuZmlyZUV2ZW50JiYoYS5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXtrLm5vQ2xvbmVFdmVudD0hMX0pLGEuY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSksaT1jLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS52YWx1ZT0idCIsaS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT1pLnZhbHVlPT09InQiLGkuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGEuYXBwZW5kQ2hpbGQoaSksbD1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsLmFwcGVuZENoaWxkKGEubGFzdENoaWxkKSxrLmNoZWNrQ2xvbmU9bC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYS5pbm5lckhUTUw9IiIsYS5zdHlsZS53aWR0aD1hLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiLG09Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLG89Yy5jcmVhdGVFbGVtZW50KG0/ImRpdiI6ImJvZHkiKSxwPXt2aXNpYmlsaXR5OiJoaWRkZW4iLHdpZHRoOjAsaGVpZ2h0OjAsYm9yZGVyOjAsbWFyZ2luOjAsYmFja2dyb3VuZDoibm9uZSJ9LG0mJmYuZXh0ZW5kKHAse3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTk5OXB4Iix0b3A6Ii05OTlweCJ9KTtmb3IodCBpbiBwKW8uc3R5bGVbdF09cFt0XTtvLmFwcGVuZENoaWxkKGEpLG49bXx8YixuLmluc2VydEJlZm9yZShvLG4uZmlyc3RDaGlsZCksay5hcHBlbmRDaGVja2VkPWkuY2hlY2tlZCxrLmJveE1vZGVsPWEub2Zmc2V0V2lkdGg9PT0yLCJ6b29tImluIGEuc3R5bGUmJihhLnN0eWxlLmRpc3BsYXk9ImlubGluZSIsYS5zdHlsZS56b29tPTEsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWEub2Zmc2V0V2lkdGg9PT0yLGEuc3R5bGUuZGlzcGxheT0iIixhLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IixrLnNocmlua1dyYXBCbG9ja3M9YS5vZmZzZXRXaWR0aCE9PTIpLGEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIscT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHU9cVswXS5vZmZzZXRIZWlnaHQ9PT0wLHFbMF0uc3R5bGUuZGlzcGxheT0iIixxWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGsucmVsaWFibGVIaWRkZW5PZmZzZXRzPXUmJnFbMF0ub2Zmc2V0SGVpZ2h0PT09MCxhLmlubmVySFRNTD0iIixjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihqPWMuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS5tYXJnaW5SaWdodD0iMCIsYS5hcHBlbmRDaGlsZChqKSxrLnJlbGlhYmxlTWFyZ2luUmlnaHQ9KHBhcnNlSW50KChjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaixudWxsKXx8e21hcmdpblJpZ2h0OjB9KS5tYXJnaW5SaWdodCwxMCl8fDApPT09MCk7aWYoYS5hdHRhY2hFdmVudClmb3IodCBpbntzdWJtaXQ6MSxjaGFuZ2U6MSxmb2N1c2luOjF9KXM9Im9uIit0LHU9cyBpbiBhLHV8fChhLnNldEF0dHJpYnV0ZShzLCJyZXR1cm47IiksdT10eXBlb2YgYVtzXT09ImZ1bmN0aW9uIiksa1t0KyJCdWJibGVzIl09dTtmKGZ1bmN0aW9uKCl7dmFyIGEsYixkLGUsZyxoLGk9MSxqPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOjA7IixsPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDsiLG49InN0eWxlPSciK2orImJvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7JyIscD0iPGRpdiAiK24rIj48ZGl2PjwvZGl2PjwvZGl2PiIrIjx0YWJsZSAiK24rIiBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPiIrIjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjttPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTshbXx8KGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLnN0eWxlLmNzc1RleHQ9bCsid2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoiK2krInB4IixtLmluc2VydEJlZm9yZShhLG0uZmlyc3RDaGlsZCksbz1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG8uc3R5bGUuY3NzVGV4dD1qK2wsby5pbm5lckhUTUw9cCxhLmFwcGVuZENoaWxkKG8pLGI9by5maXJzdENoaWxkLGQ9Yi5maXJzdENoaWxkLGc9Yi5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQsaD17ZG9lc05vdEFkZEJvcmRlcjpkLm9mZnNldFRvcCE9PTUsZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHM6Zy5vZmZzZXRUb3A9PT01fSxkLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsZC5zdHlsZS50b3A9IjIwcHgiLGguZml4ZWRQb3NpdGlvbj1kLm9mZnNldFRvcD09PTIwfHxkLm9mZnNldFRvcD09PTE1LGQuc3R5bGUucG9zaXRpb249ZC5zdHlsZS50b3A9IiIsYi5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixiLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsaC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZC5vZmZzZXRUb3A9PT0tNSxoLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PW0ub2Zmc2V0VG9wIT09aSxtLnJlbW92ZUNoaWxkKGEpLG89YT1udWxsLGYuZXh0ZW5kKGssaCkpfSksby5pbm5lckhUTUw9IiIsbi5yZW1vdmVDaGlsZChvKSxvPWw9Zz1oPW09aj1hPWk9bnVsbDtyZXR1cm4ga30oKSxmLmJveE1vZGVsPWYuc3VwcG9ydC5ib3hNb2RlbDt2YXIgaj0vXig/Olx7LipcfXxcWy4qXF0pJC8saz0vKFtBLVpdKS9nO2YuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9mLmNhY2hlW2FbZi5leHBhbmRvXV06YVtmLmV4cGFuZG9dO3JldHVybiEhYSYmIW0oYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBnLGgsaSxqPWYuZXhwYW5kbyxrPXR5cGVvZiBjPT0ic3RyaW5nIixsPWEubm9kZVR5cGUsbT1sP2YuY2FjaGU6YSxuPWw/YVtmLmV4cGFuZG9dOmFbZi5leHBhbmRvXSYmZi5leHBhbmRvLG89Yz09PSJldmVudHMiO2lmKCghbnx8IW1bbl18fCFvJiYhZSYmIW1bbl0uZGF0YSkmJmsmJmQ9PT1iKXJldHVybjtufHwobD9hW2YuZXhwYW5kb109bj0rK2YudXVpZDpuPWYuZXhwYW5kbyksbVtuXXx8KG1bbl09e30sbHx8KG1bbl0udG9KU09OPWYubm9vcCkpO2lmKHR5cGVvZiBjPT0ib2JqZWN0Inx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZT9tW25dPWYuZXh0ZW5kKG1bbl0sYyk6bVtuXS5kYXRhPWYuZXh0ZW5kKG1bbl0uZGF0YSxjKTtnPWg9bVtuXSxlfHwoaC5kYXRhfHwoaC5kYXRhPXt9KSxoPWguZGF0YSksZCE9PWImJihoW2YuY2FtZWxDYXNlKGMpXT1kKTtpZihvJiYhaFtjXSlyZXR1cm4gZy5ldmVudHM7az8oaT1oW2NdLGk9PW51bGwmJihpPWhbZi5jYW1lbENhc2UoYyldKSk6aT1oO3JldHVybiBpfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIsYyl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBkLGUsZyxoPWYuZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP2YuY2FjaGU6YSxrPWk/YVtmLmV4cGFuZG9dOmYuZXhwYW5kbztpZighaltrXSlyZXR1cm47aWYoYil7ZD1jP2pba106altrXS5kYXRhO2lmKGQpe2YuaXNBcnJheShiKT9iPWI6YiBpbiBkP2I9W2JdOihiPWYuY2FtZWxDYXNlKGIpLGIgaW4gZD9iPVtiXTpiPWIuc3BsaXQoIiAiKSk7Zm9yKGU9MCxnPWIubGVuZ3RoO2U8ZztlKyspZGVsZXRlIGRbYltlXV07aWYoIShjP206Zi5pc0VtcHR5T2JqZWN0KShkKSlyZXR1cm59fWlmKCFjKXtkZWxldGUgaltrXS5kYXRhO2lmKCFtKGpba10pKXJldHVybn1mLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8IWouc2V0SW50ZXJ2YWw/ZGVsZXRlIGpba106altrXT1udWxsLGkmJihmLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz9kZWxldGUgYVtmLmV4cGFuZG9dOmEucmVtb3ZlQXR0cmlidXRlP2EucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5kbyk6YVtmLmV4cGFuZG9dPW51bGwpfX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRhdGEoYSxiLGMsITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWYubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4gYiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn1yZXR1cm4hMH19KSxmLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZyxoPW51bGw7aWYodHlwZW9mIGE9PSJ1bmRlZmluZWQiKXtpZih0aGlzLmxlbmd0aCl7aD1mLmRhdGEodGhpc1swXSk7aWYodGhpc1swXS5ub2RlVHlwZT09PTEmJiFmLl9kYXRhKHRoaXNbMF0sInBhcnNlZEF0dHJzIikpe2U9dGhpc1swXS5hdHRyaWJ1dGVzO2Zvcih2YXIgaT0wLGo9ZS5sZW5ndGg7aTxqO2krKylnPWVbaV0ubmFtZSxnLmluZGV4T2YoImRhdGEtIik9PT0wJiYoZz1mLmNhbWVsQ2FzZShnLnN1YnN0cmluZyg1KSksbCh0aGlzWzBdLGcsaFtnXSkpO2YuX2RhdGEodGhpc1swXSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGh9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRhdGEodGhpcyxhKX0pO2Q9YS5zcGxpdCgiLiIpLGRbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihjPT09Yil7aD10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitkWzFdKyIhIixbZFswXV0pLGg9PT1iJiZ0aGlzLmxlbmd0aCYmKGg9Zi5kYXRhKHRoaXNbMF0sYSksaD1sKHRoaXNbMF0sYSxoKSk7cmV0dXJuIGg9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTpofXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGU9W2RbMF0sY107Yi50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIrZFsxXSsiISIsZSksZi5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitkWzFdKyIhIixlKX0pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLGYuZXh0ZW5kKHtfbWFyazpmdW5jdGlvbihhLGIpe2EmJihiPShifHwiZngiKSsibWFyayIsZi5fZGF0YShhLGIsKGYuX2RhdGEoYSxiKXx8MCkrMSkpfSxfdW5tYXJrOmZ1bmN0aW9uKGEsYixjKXthIT09ITAmJihjPWIsYj1hLGE9ITEpO2lmKGIpe2M9Y3x8ImZ4Ijt2YXIgZD1jKyJtYXJrIixlPWE/MDooZi5fZGF0YShiLGQpfHwxKS0xO2U/Zi5fZGF0YShiLGQsZSk6KGYucmVtb3ZlRGF0YShiLGQsITApLG4oYixjLCJtYXJrIikpfX0scXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1mLl9kYXRhKGEsYiksYyYmKCFkfHxmLmlzQXJyYXkoYyk/ZD1mLl9kYXRhKGEsYixmLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKTtyZXR1cm4gZHx8W119fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWYucXVldWUoYSxiKSxkPWMuc2hpZnQoKSxlPXt9O2Q9PT0iaW5wcm9ncmVzcyImJihkPWMuc2hpZnQoKSksZCYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxmLl9kYXRhKGEsYisiLnJ1biIsZSksZC5jYWxsKGEsZnVuY3Rpb24oKXtmLmRlcXVldWUoYSxiKX0sZSkpLGMubGVuZ3RofHwoZi5yZW1vdmVEYXRhKGEsYisicXVldWUgIitiKyIucnVuIiwhMCksbihhLGIsInF1ZXVlIikpfX0pLGYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3R5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPSJmeCIpO2lmKGM9PT1iKXJldHVybiBmLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZiWzBdIT09ImlucHJvZ3Jlc3MiJiZmLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Zi5meD9mLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIG0oKXstLWh8fGQucmVzb2x2ZVdpdGgoZSxbZV0pfXR5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPWIpLGE9YXx8ImZ4Ijt2YXIgZD1mLkRlZmVycmVkKCksZT10aGlzLGc9ZS5sZW5ndGgsaD0xLGk9YSsiZGVmZXIiLGo9YSsicXVldWUiLGs9YSsibWFyayIsbDt3aGlsZShnLS0paWYobD1mLmRhdGEoZVtnXSxpLGIsITApfHwoZi5kYXRhKGVbZ10saixiLCEwKXx8Zi5kYXRhKGVbZ10sayxiLCEwKSkmJmYuZGF0YShlW2ddLGksZi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksITApKWgrKyxsLmFkZChtKTttKCk7cmV0dXJuIGQucHJvbWlzZSgpfX0pO3ZhciBvPS9bXG5cdFxyXS9nLHA9L1xzKy8scT0vXHIvZyxyPS9eKD86YnV0dG9ufGlucHV0KSQvaSxzPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLHQ9L15hKD86cmVhKT8kL2ksdT0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSx2PWYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsdyx4LHk7Zi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGIsITAsZi5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLnByb3ApfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGMpe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxoLGk7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyIpe2I9YS5zcGxpdChwKTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7ZT10aGlzW2NdO2lmKGUubm9kZVR5cGU9PT0xKWlmKCFlLmNsYXNzTmFtZSYmYi5sZW5ndGg9PT0xKWUuY2xhc3NOYW1lPWE7ZWxzZXtnPSIgIitlLmNsYXNzTmFtZSsiICI7Zm9yKGg9MCxpPWIubGVuZ3RoO2g8aTtoKyspfmcuaW5kZXhPZigiICIrYltoXSsiICIpfHwoZys9YltoXSsiICIpO2UuY2xhc3NOYW1lPWYudHJpbShnKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZyxoLGksajtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nInx8YT09PWIpe2M9KGF8fCIiKS5zcGxpdChwKTtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO2lmKGcubm9kZVR5cGU9PT0xJiZnLmNsYXNzTmFtZSlpZihhKXtoPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKTtmb3IoaT0wLGo9Yy5sZW5ndGg7aTxqO2krKyloPWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1mLnRyaW0oaCl9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9YS5zcGxpdChwKTt3aGlsZShlPWpbZysrXSlpPWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZz10aGlzWzBdO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZihnKXtjPWYudmFsSG9va3NbZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1tnLnR5cGVdO2lmKGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZywidmFsdWUiKSkhPT1iKXJldHVybiBkO2Q9Zy52YWx1ZTtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2QucmVwbGFjZShxLCIiKTpkPT1udWxsPyIiOmR9cmV0dXJuIGJ9ZT1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXt2YXIgZz1mKHRoaXMpLGg7aWYodGhpcy5ub2RlVHlwZT09PTEpe2U/aD1hLmNhbGwodGhpcyxkLGcudmFsKCkpOmg9YSxoPT1udWxsP2g9IiI6dHlwZW9mIGg9PSJudW1iZXIiP2grPSIiOmYuaXNBcnJheShoKSYmKGg9Zi5tYXAoaCxmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpLGM9Zi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW3RoaXMudHlwZV07aWYoIWN8fCEoInNldCJpbiBjKXx8Yy5zZXQodGhpcyxoLCJ2YWx1ZSIpPT09Yil0aGlzLnZhbHVlPWh9fSl9fSksZi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZz1hLnNlbGVjdGVkSW5kZXgsaD1bXSxpPWEub3B0aW9ucyxqPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihnPDApcmV0dXJuIG51bGw7Yz1qP2c6MCxkPWo/ZysxOmkubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1pW2NdO2lmKGUuc2VsZWN0ZWQmJihmLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFmLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9ZihlKS52YWwoKTtpZihqKXJldHVybiBiO2gucHVzaChiKX19aWYoaiYmIWgubGVuZ3RoJiZpLmxlbmd0aClyZXR1cm4gZihpW2ddKS52YWwoKTtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5tYWtlQXJyYXkoYik7ZihhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1mLmluQXJyYXkoZih0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKTtyZXR1cm4gY319fSxhdHRyRm46e3ZhbDohMCxjc3M6ITAsaHRtbDohMCx0ZXh0OiEwLGRhdGE6ITAsd2lkdGg6ITAsaGVpZ2h0OiEwLG9mZnNldDohMH0sYXR0cjpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZyxoLGksaj1hLm5vZGVUeXBlO2lmKCFhfHxqPT09M3x8aj09PTh8fGo9PT0yKXJldHVybiBiO2lmKGUmJmMgaW4gZi5hdHRyRm4pcmV0dXJuIGYoYSlbY10oZCk7aWYoISgiZ2V0QXR0cmlidXRlImluIGEpKXJldHVybiBmLnByb3AoYSxjLGQpO2k9aiE9PTF8fCFmLmlzWE1MRG9jKGEpLGkmJihjPWMudG9Mb3dlckNhc2UoKSxoPWYuYXR0ckhvb2tzW2NdfHwodS50ZXN0KGMpP3g6dykpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJuIGJ9aWYoaCYmInNldCJpbiBoJiZpJiYoZz1oLnNldChhLGQsYykpIT09YilyZXR1cm4gZzthLnNldEF0dHJpYnV0ZShjLCIiK2QpO3JldHVybiBkfWlmKGgmJiJnZXQiaW4gaCYmaSYmKGc9aC5nZXQoYSxjKSkhPT1udWxsKXJldHVybiBnO2c9YS5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIGc9PT1udWxsP2I6Z30scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxnLGg9MDtpZihhLm5vZGVUeXBlPT09MSl7ZD0oYnx8IiIpLnNwbGl0KHApLGc9ZC5sZW5ndGg7Zm9yKDtoPGc7aCsrKWU9ZFtoXS50b0xvd2VyQ2FzZSgpLGM9Zi5wcm9wRml4W2VdfHxlLGYuYXR0cihhLGUsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHY/ZTpjKSx1LnRlc3QoZSkmJmMgaW4gYSYmKGFbY109ITEpfX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihyLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlmLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFmLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJmYubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTthLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYmKGEudmFsdWU9Yyk7cmV0dXJuIGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe2lmKHcmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHcuZ2V0KGEsYik7cmV0dXJuIGIgaW4gYT9hLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihhLGIsYyl7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5zZXQoYSxiLGMpO2EudmFsdWU9Yn19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpPWEubm9kZVR5cGU7aWYoIWF8fGk9PT0zfHxpPT09OHx8aT09PTIpcmV0dXJuIGI7aD1pIT09MXx8IWYuaXNYTUxEb2MoYSksaCYmKGM9Zi5wcm9wRml4W2NdfHxjLGc9Zi5wcm9wSG9va3NbY10pO3JldHVybiBkIT09Yj9nJiYic2V0ImluIGcmJihlPWcuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/cGFyc2VJbnQoYy52YWx1ZSwxMCk6cy50ZXN0KGEubm9kZU5hbWUpfHx0LnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9fX19KSxmLmF0dHJIb29rcy50YWJpbmRleD1mLnByb3BIb29rcy50YWJJbmRleCx4PXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlPWYucHJvcChhLGMpO3JldHVybiBlPT09ITB8fHR5cGVvZiBlIT0iYm9vbGVhbiImJihkPWEuZ2V0QXR0cmlidXRlTm9kZShjKSkmJmQubm9kZVZhbHVlIT09ITE/Yy50b0xvd2VyQ2FzZSgpOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7Yj09PSExP2YucmVtb3ZlQXR0cihhLGMpOihkPWYucHJvcEZpeFtjXXx8YyxkIGluIGEmJihhW2RdPSEwKSxhLnNldEF0dHJpYnV0ZShjLGMudG9Mb3dlckNhc2UoKSkpO3JldHVybiBjfX0sdnx8KHk9e25hbWU6ITAsaWQ6ITB9LHc9Zi52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkO2Q9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkJiYoeVtjXT9kLm5vZGVWYWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9kLm5vZGVWYWx1ZTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0QXR0cmlidXRlTm9kZShkKTtlfHwoZT1jLmNyZWF0ZUF0dHJpYnV0ZShkKSxhLnNldEF0dHJpYnV0ZU5vZGUoZSkpO3JldHVybiBlLm5vZGVWYWx1ZT1iKyIifX0sZi5hdHRySG9va3MudGFiaW5kZXguc2V0PXcuc2V0LGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmF0dHJIb29rc1tiXT1mLmV4dGVuZChmLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXthLnNldEF0dHJpYnV0ZShiLCJhdXRvIik7cmV0dXJuIGN9fX0pfSksZi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6dy5nZXQsc2V0OmZ1bmN0aW9uKGEsYixjKXtiPT09IiImJihiPSJmYWxzZSIpLHcuc2V0KGEsYixjKX19KSxmLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWR8fGYuZWFjaChbImhyZWYiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYyl7Zi5hdHRySG9va3NbY109Zi5leHRlbmQoZi5hdHRySG9va3NbY10se2dldDpmdW5jdGlvbihhKXt2YXIgZD1hLmdldEF0dHJpYnV0ZShjLDIpO3JldHVybiBkPT09bnVsbD9iOmR9fSl9KSxmLnN1cHBvcnQuc3R5bGV8fChmLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKXx8Yn0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD0iIitifX0pLGYuc3VwcG9ydC5vcHRTZWxlY3RlZHx8KGYucHJvcEhvb2tzLnNlbGVjdGVkPWYuZXh0ZW5kKGYucHJvcEhvb2tzLnNlbGVjdGVkLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2ImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIG51bGx9fSkpLGYuc3VwcG9ydC5lbmN0eXBlfHwoZi5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIiksZi5zdXBwb3J0LmNoZWNrT258fGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2YudmFsSG9va3NbdGhpc109e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6YS52YWx1ZX19fSksZi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT1mLmV4dGVuZChmLnZhbEhvb2tzW3RoaXNdLHtzZXQ6ZnVuY3Rpb24oYSxiKXtpZihmLmlzQXJyYXkoYikpcmV0dXJuIGEuY2hlY2tlZD1mLmluQXJyYXkoZihhKS52YWwoKSxiKT49MH19KX0pO3ZhciB6PS9cLiguKikkLyxBPS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxCPS9cLi9nLEM9LyAvZyxEPS9bXlx3XHMufGBdL2csRT0vXihbXlwuXSopPyg/OlwuKC4rKSk/JC8sRj0vXGJob3ZlcihcLlxTKyk/LyxHPS9ea2V5LyxIPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxJPS9eKFx3KikoPzojKFtcd1wtXSspKT8oPzpcLihbXHdcLV0rKSk/JC8sSj1mdW5jdGlvbihhKXt2YXIgYj1JLmV4ZWMoYSk7YiYmCihiWzFdPShiWzFdfHwiIikudG9Mb3dlckNhc2UoKSxiWzNdPWJbM10mJm5ldyBSZWdFeHAoIig/Ol58XFxzKSIrYlszXSsiKD86XFxzfCQpIikpO3JldHVybiBifSxLPWZ1bmN0aW9uKGEsYil7cmV0dXJuKCFiWzFdfHxhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iWzFdKSYmKCFiWzJdfHxhLmlkPT09YlsyXSkmJighYlszXXx8YlszXS50ZXN0KGEuY2xhc3NOYW1lKSl9LEw9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShGLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9O2YuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OHx8IWN8fCFkfHwhKGg9Zi5fZGF0YShhKSkpKXtkLmhhbmRsZXImJihwPWQsZD1wLmhhbmRsZXIpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyksaj1oLmV2ZW50cyxqfHwoaC5ldmVudHM9aj17fSksaT1oLmhhbmRsZSxpfHwoaC5oYW5kbGU9aT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiJiYoIWF8fGYuZXZlbnQudHJpZ2dlcmVkIT09YS50eXBlKT9mLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGkuZWxlbSxhcmd1bWVudHMpOmJ9LGkuZWxlbT1hKSxjPUwoYykuc3BsaXQoIiAiKTtmb3Ioaz0wO2s8Yy5sZW5ndGg7aysrKXtsPUUuZXhlYyhjW2tdKXx8W10sbT1sWzFdLG49KGxbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbT0oZz9zLmRlbGVnYXRlVHlwZTpzLmJpbmRUeXBlKXx8bSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbz1mLmV4dGVuZCh7dHlwZTptLG9yaWdUeXBlOmxbMV0sZGF0YTplLGhhbmRsZXI6ZCxndWlkOmQuZ3VpZCxzZWxlY3RvcjpnLG5hbWVzcGFjZTpuLmpvaW4oIi4iKX0scCksZyYmKG8ucXVpY2s9SihnKSwhby5xdWljayYmZi5leHByLm1hdGNoLlBPUy50ZXN0KGcpJiYoby5pc1Bvc2l0aW9uYWw9ITApKSxyPWpbbV07aWYoIXIpe3I9alttXT1bXSxyLmRlbGVnYXRlQ291bnQ9MDtpZighcy5zZXR1cHx8cy5zZXR1cC5jYWxsKGEsZSxuLGkpPT09ITEpYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihtLGksITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIittLGkpfXMuYWRkJiYocy5hZGQuY2FsbChhLG8pLG8uaGFuZGxlci5ndWlkfHwoby5oYW5kbGVyLmd1aWQ9ZC5ndWlkKSksZz9yLnNwbGljZShyLmRlbGVnYXRlQ291bnQrKywwLG8pOnIucHVzaChvKSxmLmV2ZW50Lmdsb2JhbFttXT0hMH1hPW51bGx9fSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuaGFzRGF0YShhKSYmZi5fZGF0YShhKSxnLGgsaSxqLGssbCxtLG4sbyxwLHE7aWYoISFlJiYhIShtPWUuZXZlbnRzKSl7Yj1MKGJ8fCIiKS5zcGxpdCgiICIpO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe2g9RS5leGVjKGJbZ10pfHxbXSxpPWhbMV0saj1oWzJdO2lmKCFpKXtqPWo/Ii4iK2o6IiI7Zm9yKGwgaW4gbSlmLmV2ZW50LnJlbW92ZShhLGwraixjLGQpO3JldHVybn1uPWYuZXZlbnQuc3BlY2lhbFtpXXx8e30saT0oZD9uLmRlbGVnYXRlVHlwZTpuLmJpbmRUeXBlKXx8aSxwPW1baV18fFtdLGs9cC5sZW5ndGgsaj1qP25ldyBSZWdFeHAoIihefFxcLikiK2ouc3BsaXQoIi4iKS5zb3J0KCkuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbDtpZihjfHxqfHxkfHxuLnJlbW92ZSlmb3IobD0wO2w8cC5sZW5ndGg7bCsrKXtxPXBbbF07aWYoIWN8fGMuZ3VpZD09PXEuZ3VpZClpZighanx8ai50ZXN0KHEubmFtZXNwYWNlKSlpZighZHx8ZD09PXEuc2VsZWN0b3J8fGQ9PT0iKioiJiZxLnNlbGVjdG9yKXAuc3BsaWNlKGwtLSwxKSxxLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxuLnJlbW92ZSYmbi5yZW1vdmUuY2FsbChhLHEpfWVsc2UgcC5sZW5ndGg9MDtwLmxlbmd0aD09PTAmJmshPT1wLmxlbmd0aCYmKCghbi50ZWFyZG93bnx8bi50ZWFyZG93bi5jYWxsKGEsaik9PT0hMSkmJmYucmVtb3ZlRXZlbnQoYSxpLGUuaGFuZGxlKSxkZWxldGUgbVtpXSl9Zi5pc0VtcHR5T2JqZWN0KG0pJiYobz1lLmhhbmRsZSxvJiYoby5lbGVtPW51bGwpLGYucmVtb3ZlRGF0YShhLFsiZXZlbnRzIiwiaGFuZGxlIl0sITApKX19LGN1c3RvbUV2ZW50OntnZXREYXRhOiEwLHNldERhdGE6ITAsY2hhbmdlRGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihjLGQsZSxnKXtpZighZXx8ZS5ub2RlVHlwZSE9PTMmJmUubm9kZVR5cGUhPT04KXt2YXIgaD1jLnR5cGV8fGMsaT1bXSxqLGssbCxtLG4sbyxwLHEscixzO2guaW5kZXhPZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGs9ITApLGguaW5kZXhPZigiLiIpPj0wJiYoaT1oLnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCghZXx8Zi5ldmVudC5jdXN0b21FdmVudFtoXSkmJiFmLmV2ZW50Lmdsb2JhbFtoXSlyZXR1cm47Yz10eXBlb2YgYz09Im9iamVjdCI/Y1tmLmV4cGFuZG9dP2M6bmV3IGYuRXZlbnQoaCxjKTpuZXcgZi5FdmVudChoKSxjLnR5cGU9aCxjLmlzVHJpZ2dlcj0hMCxjLmV4Y2x1c2l2ZT1rLGMubmFtZXNwYWNlPWkuam9pbigiLiIpLGMubmFtZXNwYWNlX3JlPWMubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2kuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbCxvPWguaW5kZXhPZigiOiIpPDA/Im9uIitoOiIiLChnfHwhZSkmJmMucHJldmVudERlZmF1bHQoKTtpZighZSl7aj1mLmNhY2hlO2ZvcihsIGluIGopaltsXS5ldmVudHMmJmpbbF0uZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGpbbF0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZSksZD1kIT1udWxsP2YubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxwPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkoZSxkKT09PSExKXJldHVybjtyPVtbZSxwLmJpbmRUeXBlfHxoXV07aWYoIWcmJiFwLm5vQnViYmxlJiYhZi5pc1dpbmRvdyhlKSl7cz1wLmRlbGVnYXRlVHlwZXx8aCxuPW51bGw7Zm9yKG09ZS5wYXJlbnROb2RlO207bT1tLnBhcmVudE5vZGUpci5wdXNoKFttLHNdKSxuPW07biYmbj09PWUub3duZXJEb2N1bWVudCYmci5wdXNoKFtuLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvd3x8YSxzXSl9Zm9yKGw9MDtsPHIubGVuZ3RoO2wrKyl7bT1yW2xdWzBdLGMudHlwZT1yW2xdWzFdLHE9KGYuX2RhdGEobSwiZXZlbnRzIil8fHt9KVtjLnR5cGVdJiZmLl9kYXRhKG0sImhhbmRsZSIpLHEmJnEuYXBwbHkobSxkKSxxPW8mJm1bb10scSYmZi5hY2NlcHREYXRhKG0pJiZxLmFwcGx5KG0sZCk7aWYoYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrfWMudHlwZT1oLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fCghcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBseShlLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihoIT09ImNsaWNrInx8IWYubm9kZU5hbWUoZSwiYSIpKSYmZi5hY2NlcHREYXRhKGUpJiZvJiZlW2hdJiYoaCE9PSJmb2N1cyImJmghPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFmLmlzV2luZG93KGUpJiYobj1lW29dLG4mJihlW29dPW51bGwpLGYuZXZlbnQudHJpZ2dlcmVkPWgsZVtoXSgpLGYuZXZlbnQudHJpZ2dlcmVkPWIsbiYmKGVbb109bikpO3JldHVybiBjLnJlc3VsdH19LGRpc3BhdGNoOmZ1bmN0aW9uKGMpe2M9Zi5ldmVudC5maXgoY3x8YS5ldmVudCk7dmFyIGQ9KGYuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtjLnR5cGVdfHxbXSxlPWQuZGVsZWdhdGVDb3VudCxnPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLGg9IWMuZXhjbHVzaXZlJiYhYy5uYW1lc3BhY2UsaT0oZi5ldmVudC5zcGVjaWFsW2MudHlwZV18fHt9KS5oYW5kbGUsaj1bXSxrLGwsbSxuLG8scCxxLHIscyx0LHU7Z1swXT1jLGMuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZihlJiYhYy50YXJnZXQuZGlzYWJsZWQmJighYy5idXR0b258fGMudHlwZSE9PSJjbGljayIpKWZvcihtPWMudGFyZ2V0O20hPXRoaXM7bT1tLnBhcmVudE5vZGV8fHRoaXMpe289e30scT1bXTtmb3Ioaz0wO2s8ZTtrKyspcj1kW2tdLHM9ci5zZWxlY3Rvcix0PW9bc10sci5pc1Bvc2l0aW9uYWw/dD0odHx8KG9bc109ZihzKSkpLmluZGV4KG0pPj0wOnQ9PT1iJiYodD1vW3NdPXIucXVpY2s/SyhtLHIucXVpY2spOmYobSkuaXMocykpLHQmJnEucHVzaChyKTtxLmxlbmd0aCYmai5wdXNoKHtlbGVtOm0sbWF0Y2hlczpxfSl9ZC5sZW5ndGg+ZSYmai5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKGUpfSk7Zm9yKGs9MDtrPGoubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2srKyl7cD1qW2tdLGMuY3VycmVudFRhcmdldD1wLmVsZW07Zm9yKGw9MDtsPHAubWF0Y2hlcy5sZW5ndGgmJiFjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7bCsrKXtyPXAubWF0Y2hlc1tsXTtpZihofHwhYy5uYW1lc3BhY2UmJiFyLm5hbWVzcGFjZXx8Yy5uYW1lc3BhY2VfcmUmJmMubmFtZXNwYWNlX3JlLnRlc3Qoci5uYW1lc3BhY2UpKWMuZGF0YT1yLmRhdGEsYy5oYW5kbGVPYmo9cixuPShpfHxyLmhhbmRsZXIpLmFwcGx5KHAuZWxlbSxnKSxuIT09YiYmKGMucmVzdWx0PW4sbj09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKX19cmV0dXJuIGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7YS53aGljaD09bnVsbCYmKGEud2hpY2g9Yi5jaGFyQ29kZSE9bnVsbD9iLmNoYXJDb2RlOmIua2V5Q29kZSk7cmV0dXJuIGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50IHdoZWVsRGVsdGEiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsZCl7dmFyIGUsZixnLGg9ZC5idXR0b24saT1kLmZyb21FbGVtZW50O2EucGFnZVg9PW51bGwmJmQuY2xpZW50WCE9bnVsbCYmKGU9YS50YXJnZXQub3duZXJEb2N1bWVudHx8YyxmPWUuZG9jdW1lbnRFbGVtZW50LGc9ZS5ib2R5LGEucGFnZVg9ZC5jbGllbnRYKyhmJiZmLnNjcm9sbExlZnR8fGcmJmcuc2Nyb2xsTGVmdHx8MCktKGYmJmYuY2xpZW50TGVmdHx8ZyYmZy5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWQuY2xpZW50WSsoZiYmZi5zY3JvbGxUb3B8fGcmJmcuc2Nyb2xsVG9wfHwwKS0oZiYmZi5jbGllbnRUb3B8fGcmJmcuY2xpZW50VG9wfHwwKSksIWEucmVsYXRlZFRhcmdldCYmaSYmKGEucmVsYXRlZFRhcmdldD1pPT09YS50YXJnZXQ/ZC50b0VsZW1lbnQ6aSksIWEud2hpY2gmJmghPT1iJiYoYS53aGljaD1oJjE/MTpoJjI/MzpoJjQ/MjowKTtyZXR1cm4gYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW2YuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGQsZSxnPWEsaD1mLmV2ZW50LmZpeEhvb2tzW2EudHlwZV18fHt9LGk9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzO2E9Zi5FdmVudChnKTtmb3IoZD1pLmxlbmd0aDtkOyllPWlbLS1kXSxhW2VdPWdbZV07YS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGMpLGEudGFyZ2V0Lm5vZGVUeXBlPT09MyYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT09PWImJihhLm1ldGFLZXk9YS5jdHJsS2V5KTtyZXR1cm4gaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTphfSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Zi5iaW5kUmVhZHl9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4iLG5vQnViYmxlOiEwfSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0Iixub0J1YmJsZTohMH0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7Zi5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuZXh0ZW5kKG5ldyBmLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9mLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOmYuZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LGYuZXZlbnQuaGFuZGxlPWYuZXZlbnQuZGlzcGF0Y2gsZi5yZW1vdmVFdmVudD1jLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXthLmRldGFjaEV2ZW50JiZhLmRldGFjaEV2ZW50KCJvbiIrYixjKX0sZi5FdmVudD1mdW5jdGlvbihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGYuRXZlbnQpKXJldHVybiBuZXcgZi5FdmVudChhLGIpO2EmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fGEucmV0dXJuVmFsdWU9PT0hMXx8YS5nZXRQcmV2ZW50RGVmYXVsdCYmYS5nZXRQcmV2ZW50RGVmYXVsdCgpP046TSk6dGhpcy50eXBlPWEsYiYmZi5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8Zi5ub3coKSx0aGlzW2YuZXhwYW5kb109ITB9LGYuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPU47dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Tjt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Tix0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6TSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpNLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOk19LGYuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Zi5ldmVudC5zcGVjaWFsW2FdPWYuZXZlbnQuc3BlY2lhbFtiXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWEucmVsYXRlZFRhcmdldCxkPWEuaGFuZGxlT2JqLGU9ZC5zZWxlY3RvcixnLGg7aWYoIWN8fGQub3JpZ1R5cGU9PT1hLnR5cGV8fGMhPT1iJiYhZi5jb250YWlucyhiLGMpKWc9YS50eXBlLGEudHlwZT1kLm9yaWdUeXBlLGg9ZC5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9ZztyZXR1cm4gaH19fSksZi5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGM9YS50YXJnZXQsZD1mLm5vZGVOYW1lKGMsImlucHV0Iil8fGYubm9kZU5hbWUoYywiYnV0dG9uIik/Yy5mb3JtOmI7ZCYmIWQuX3N1Ym1pdF9hdHRhY2hlZCYmKGYuZXZlbnQuYWRkKGQsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJmYuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksZC5fc3VibWl0X2F0dGFjaGVkPSEwKX0pfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksZi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKEEudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilmLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLGYuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSxmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCkpfSk7cmV0dXJuITF9Zi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7QS50ZXN0KGIubm9kZU5hbWUpJiYhYi5fY2hhbmdlX2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNTaW11bGF0ZWQmJmYuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksYi5fY2hhbmdlX2F0dGFjaGVkPSEwKX0pfSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7aWYodGhpcyE9PWJ8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHxiLnR5cGUhPT0icmFkaW8iJiZiLnR5cGUhPT0iY2hlY2tib3giKXJldHVybiBhLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpO3JldHVybiBBLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksZi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxmLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGQ9MCxlPWZ1bmN0aW9uKGEpe2YuZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxmLmV2ZW50LmZpeChhKSwhMCl9O2YuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXtkKys9PT0wJiZjLmFkZEV2ZW50TGlzdGVuZXIoYSxlLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLWQ9PT0wJiZjLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxlLCEwKX19fSksZi5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYyxkLGUsZyl7dmFyIGgsaTtpZih0eXBlb2YgYT09Im9iamVjdCIpe3R5cGVvZiBjIT0ic3RyaW5nIiYmKGQ9YyxjPWIpO2ZvcihpIGluIGEpdGhpcy5vbihpLGMsZCxhW2ldLGcpO3JldHVybiB0aGlzfWQ9PW51bGwmJmU9PW51bGw/KGU9YyxkPWM9Yik6ZT09bnVsbCYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oZT1kLGQ9Yik6KGU9ZCxkPWMsYz1iKSk7aWYoZT09PSExKWU9TTtlbHNlIGlmKCFlKXJldHVybiB0aGlzO2c9PT0xJiYoaD1lLGU9ZnVuY3Rpb24oYSl7ZigpLm9mZihhKTtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuZ3VpZD1oLmd1aWR8fChoLmd1aWQ9Zi5ndWlkKyspKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5hZGQodGhpcyxhLGUsZCxjKX0pfSxvbmU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24uY2FsbCh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmope3ZhciBlPWEuaGFuZGxlT2JqO2YoYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGUubmFtZXNwYWNlP2UudHlwZSsiLiIrZS5uYW1lc3BhY2U6ZS50eXBlLGUuc2VsZWN0b3IsZS5oYW5kbGVyKTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09Im9iamVjdCIpe2Zvcih2YXIgZyBpbiBhKXRoaXMub2ZmKGcsYyxhW2ddKTtyZXR1cm4gdGhpc31pZihjPT09ITF8fHR5cGVvZiBjPT0iZnVuY3Rpb24iKWQ9YyxjPWI7ZD09PSExJiYoZD1NKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5yZW1vdmUodGhpcyxhLGQsYyl9KX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGxpdmU6ZnVuY3Rpb24oYSxiLGMpe2YodGhpcy5jb250ZXh0KS5vbihhLHRoaXMuc2VsZWN0b3IsYixjKTtyZXR1cm4gdGhpc30sZGllOmZ1bmN0aW9uKGEsYil7Zih0aGlzLmNvbnRleHQpLm9mZihhLHRoaXMuc2VsZWN0b3J8fCIqKiIsYik7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MT90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYSxjKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gZi5ldmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWEuZ3VpZHx8Zi5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KGYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtmLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxlKzEpLGMucHJldmVudERlZmF1bHQoKTtyZXR1cm4gYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLGYuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLmJpbmQoYixhLGMpOnRoaXMudHJpZ2dlcihiKX0sZi5hdHRyRm4mJihmLmF0dHJGbltiXT0hMCksRy50ZXN0KGIpJiYoZi5ldmVudC5maXhIb29rc1tiXT1mLmV2ZW50LmtleUhvb2tzKSxILnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHgoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9aWYoai5ub2RlVHlwZT09PTEpe2d8fChqW2RdPWMsai5zaXpzZXQ9aCk7aWYodHlwZW9mIGIhPSJzdHJpbmciKXtpZihqPT09Yil7az0hMDticmVha319ZWxzZSBpZihtLmZpbHRlcihiLFtqXSkubGVuZ3RoPjApe2s9ajticmVha319aj1qW2FdfWVbaF09a319fWZ1bmN0aW9uIHcoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9ai5ub2RlVHlwZT09PTEmJiFnJiYoaltkXT1jLGouc2l6c2V0PWgpO2lmKGoubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIpe2s9ajticmVha31qPWpbYV19ZVtoXT1rfX19dmFyIGE9LygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZyxkPSJzaXpjYWNoZSIrKE1hdGgucmFuZG9tKCkrIiIpLnJlcGxhY2UoIi4iLCIiKSxlPTAsZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGg9ITEsaT0hMCxqPS9cXC9nLGs9L1xyXG4vZyxsPS9cVy87WzAsMF0uc29ydChmdW5jdGlvbigpe2k9ITE7cmV0dXJuIDB9KTt2YXIgbT1mdW5jdGlvbihiLGQsZSxmKXtlPWV8fFtdLGQ9ZHx8Yzt2YXIgaD1kO2lmKGQubm9kZVR5cGUhPT0xJiZkLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighYnx8dHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiBlO3ZhciBpLGosayxsLG4scSxyLHQsdT0hMCx2PW0uaXNYTUwoZCksdz1bXSx4PWI7ZG97YS5leGVjKCIiKSxpPWEuZXhlYyh4KTtpZihpKXt4PWlbM10sdy5wdXNoKGlbMV0pO2lmKGlbMl0pe2w9aVszXTticmVha319fXdoaWxlKGkpO2lmKHcubGVuZ3RoPjEmJnAuZXhlYyhiKSlpZih3Lmxlbmd0aD09PTImJm8ucmVsYXRpdmVbd1swXV0paj15KHdbMF0rd1sxXSxkLGYpO2Vsc2V7aj1vLnJlbGF0aXZlW3dbMF1dP1tkXTptKHcuc2hpZnQoKSxkKTt3aGlsZSh3Lmxlbmd0aCliPXcuc2hpZnQoKSxvLnJlbGF0aXZlW2JdJiYoYis9dy5zaGlmdCgpKSxqPXkoYixqLGYpfWVsc2V7IWYmJncubGVuZ3RoPjEmJmQubm9kZVR5cGU9PT05JiYhdiYmby5tYXRjaC5JRC50ZXN0KHdbMF0pJiYhby5tYXRjaC5JRC50ZXN0KHdbdy5sZW5ndGgtMV0pJiYobj1tLmZpbmQody5zaGlmdCgpLGQsdiksZD1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KVswXTpuLnNldFswXSk7aWYoZCl7bj1mP3tleHByOncucG9wKCksc2V0OnMoZil9Om0uZmluZCh3LnBvcCgpLHcubGVuZ3RoPT09MSYmKHdbMF09PT0ifiJ8fHdbMF09PT0iKyIpJiZkLnBhcmVudE5vZGU/ZC5wYXJlbnROb2RlOmQsdiksaj1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KTpuLnNldCx3Lmxlbmd0aD4wP2s9cyhqKTp1PSExO3doaWxlKHcubGVuZ3RoKXE9dy5wb3AoKSxyPXEsby5yZWxhdGl2ZVtxXT9yPXcucG9wKCk6cT0iIixyPT1udWxsJiYocj1kKSxvLnJlbGF0aXZlW3FdKGsscix2KX1lbHNlIGs9dz1bXX1rfHwoaz1qKSxrfHxtLmVycm9yKHF8fGIpO2lmKGcuY2FsbChrKT09PSJbb2JqZWN0IEFycmF5XSIpaWYoIXUpZS5wdXNoLmFwcGx5KGUsayk7ZWxzZSBpZihkJiZkLm5vZGVUeXBlPT09MSlmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJihrW3RdPT09ITB8fGtbdF0ubm9kZVR5cGU9PT0xJiZtLmNvbnRhaW5zKGQsa1t0XSkpJiZlLnB1c2goalt0XSk7ZWxzZSBmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJmtbdF0ubm9kZVR5cGU9PT0xJiZlLnB1c2goalt0XSk7ZWxzZSBzKGssZSk7bCYmKG0obCxoLGUsZiksbS51bmlxdWVTb3J0KGUpKTtyZXR1cm4gZX07bS51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe2lmKHUpe2g9aSxhLnNvcnQodSk7aWYoaClmb3IodmFyIGI9MTtiPGEubGVuZ3RoO2IrKylhW2JdPT09YVtiLTFdJiZhLnNwbGljZShiLS0sMSl9cmV0dXJuIGF9LG0ubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBtKGEsbnVsbCxudWxsLGIpfSxtLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGIpe3JldHVybiBtKGIsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9LG0uZmluZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKCFhKXJldHVybltdO2ZvcihlPTAsZj1vLm9yZGVyLmxlbmd0aDtlPGY7ZSsrKXtoPW8ub3JkZXJbZV07aWYoZz1vLmxlZnRNYXRjaFtoXS5leGVjKGEpKXtpPWdbMV0sZy5zcGxpY2UoMSwxKTtpZihpLnN1YnN0cihpLmxlbmd0aC0xKSE9PSJcXCIpe2dbMV09KGdbMV18fCIiKS5yZXBsYWNlKGosIiIpLGQ9by5maW5kW2hdKGcsYixjKTtpZihkIT1udWxsKXthPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTticmVha319fX1kfHwoZD10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOltdKTtyZXR1cm57c2V0OmQsZXhwcjphfX0sbS5maWx0ZXI9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixwLHE9YSxyPVtdLHM9Yyx0PWMmJmNbMF0mJm0uaXNYTUwoY1swXSk7d2hpbGUoYSYmYy5sZW5ndGgpe2ZvcihoIGluIG8uZmlsdGVyKWlmKChmPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpIT1udWxsJiZmWzJdKXtrPW8uZmlsdGVyW2hdLGw9ZlsxXSxnPSExLGYuc3BsaWNlKDEsMSk7aWYobC5zdWJzdHIobC5sZW5ndGgtMSk9PT0iXFwiKWNvbnRpbnVlO3M9PT1yJiYocj1bXSk7aWYoby5wcmVGaWx0ZXJbaF0pe2Y9by5wcmVGaWx0ZXJbaF0oZixzLGQscixlLHQpO2lmKCFmKWc9aT0hMDtlbHNlIGlmKGY9PT0hMCljb250aW51ZX1pZihmKWZvcihuPTA7KGo9c1tuXSkhPW51bGw7bisrKWomJihpPWsoaixmLG4scykscD1lXmksZCYmaSE9bnVsbD9wP2c9ITA6c1tuXT0hMTpwJiYoci5wdXNoKGopLGc9ITApKTtpZihpIT09Yil7ZHx8KHM9ciksYT1hLnJlcGxhY2Uoby5tYXRjaFtoXSwiIik7aWYoIWcpcmV0dXJuW107YnJlYWt9fWlmKGE9PT1xKWlmKGc9PW51bGwpbS5lcnJvcihhKTtlbHNlIGJyZWFrO3E9YX1yZXR1cm4gc30sbS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2F9O3ZhciBuPW0uZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YS5ub2RlVHlwZSxlPSIiO2lmKGQpe2lmKGQ9PT0xKXtpZih0eXBlb2YgYS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGEudGV4dENvbnRlbnQ7aWYodHlwZW9mIGEuaW5uZXJUZXh0PT0ic3RyaW5nIilyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZShrLCIiKTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZSs9bihhKX1lbHNlIGlmKGQ9PT0zfHxkPT09NClyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSBmb3IoYj0wO2M9YVtiXTtiKyspYy5ub2RlVHlwZSE9PTgmJihlKz1uKGMpKTtyZXR1cm4gZX0sbz1tLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT0ic3RyaW5nIixkPWMmJiFsLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSk7YVtmXT1lfHxoJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2h8fCExOmg9PT1ifWUmJm0uZmlsdGVyKGIsYSwhMCl9LCI+IjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9dHlwZW9mIGI9PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFsLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkJiZtLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwcmV2aW91c1NpYmxpbmciLGIsZixhLGQsYyl9fSxmaW5kOntJRDpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2E9IiAiK2FbMV0ucmVwbGFjZShqLCIiKSsiICI7aWYoZilyZXR1cm4gYTtmb3IodmFyIGc9MCxoOyhoPWJbZ10pIT1udWxsO2crKyloJiYoZV4oaC5jbGFzc05hbWUmJigiICIraC5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCIgIikuaW5kZXhPZihhKT49MCk/Y3x8ZC5wdXNoKGgpOmMmJihiW2ddPSExKSk7cmV0dXJuITF9LElEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIil9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIikudG9Mb3dlckNhc2UoKX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7aWYoYVsxXT09PSJudGgiKXthWzJdfHxtLmVycm9yKGFbMF0pLGFbMl09YVsyXS5yZXBsYWNlKC9eXCt8XHMqL2csIiIpO3ZhciBiPS8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYyhhWzJdPT09ImV2ZW4iJiYiMm4ifHxhWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChhWzJdKSYmIjBuKyIrYVsyXXx8YVsyXSk7YVsyXT1iWzFdKyhiWzJdfHwxKS0wLGFbM109YlszXS0wfWVsc2UgYVsyXSYmbS5lcnJvcihhWzBdKTthWzBdPWUrKztyZXR1cm4gYX0sQVRUUjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YVsxXT1hWzFdLnJlcGxhY2UoaiwiIik7IWYmJm8uYXR0ck1hcFtnXSYmKGFbMV09by5hdHRyTWFwW2ddKSxhWzRdPShhWzRdfHxhWzVdfHwiIikucmVwbGFjZShqLCIiKSxhWzJdPT09In49IiYmKGFbNF09IiAiK2FbNF0rIiAiKTtyZXR1cm4gYX0sUFNFVURPOmZ1bmN0aW9uKGIsYyxkLGUsZil7aWYoYlsxXT09PSJub3QiKWlmKChhLmV4ZWMoYlszXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChiWzNdKSliWzNdPW0oYlszXSxudWxsLG51bGwsYyk7ZWxzZXt2YXIgZz1tLmZpbHRlcihiWzNdLGMsZCwhMF5mKTtkfHxlLnB1c2guYXBwbHkoZSxnKTtyZXR1cm4hMX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoYlswXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChiWzBdKSlyZXR1cm4hMDtyZXR1cm4gYn0sUE9TOmZ1bmN0aW9uKGEpe2EudW5zaGlmdCghMCk7cmV0dXJuIGF9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITEmJmEudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ9PT0hMH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuISFhLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuISFtKGNbM10sYSkubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSxjPWEudHlwZTtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInRleHQiPT09YyYmKGI9PT1jfHxiPT09bnVsbCl9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImNoZWNrYm94Ij09PWEudHlwZX0sZmlsZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImltYWdlIj09PWEudHlwZX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInJlc2V0Ij09PWEudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiJidXR0b24iPT09YS50eXBlfHxiPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPW8uZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8bihbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfW0uZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz1iWzFdLGw9YTtzd2l0Y2goayl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShsPWwucHJldmlvdXNTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGs9PT0iZmlyc3QiKXJldHVybiEwO2w9YTtjYXNlImxhc3QiOndoaWxlKGw9bC5uZXh0U2libGluZylpZihsLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6Yz1iWzJdLGU9YlszXTtpZihjPT09MSYmZT09PTApcmV0dXJuITA7Zj1iWzBdLGc9YS5wYXJlbnROb2RlO2lmKGcmJihnW2RdIT09Znx8IWEubm9kZUluZGV4KSl7aT0wO2ZvcihsPWcuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylsLm5vZGVUeXBlPT09MSYmKGwubm9kZUluZGV4PSsraSk7Z1tkXT1mfWo9YS5ub2RlSW5kZXgtZTtyZXR1cm4gYz09PTA/aj09PTA6aiVjPT09MCYmai9jPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiImJmEubm9kZVR5cGU9PT0xfHwhIWEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bS5hdHRyP20uYXR0cihhLGMpOm8uYXR0ckhhbmRsZVtjXT9vLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOiFmJiZtLmF0dHI/ZCE9bnVsbDpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPW8uc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LHA9by5tYXRjaC5QT1MscT1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciByIGluIG8ubWF0Y2gpby5tYXRjaFtyXT1uZXcgUmVnRXhwKG8ubWF0Y2hbcl0uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksby5sZWZ0TWF0Y2hbcl09bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbcl0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxxKSk7dmFyIHM9ZnVuY3Rpb24oYSxiKXthPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsMCk7aWYoYil7Yi5wdXNoLmFwcGx5KGIsYSk7cmV0dXJuIGJ9cmV0dXJuIGF9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHQpe3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9Ynx8W107aWYoZy5jYWxsKGEpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGEpO2Vsc2UgaWYodHlwZW9mIGEubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGU9YS5sZW5ndGg7YzxlO2MrKylkLnB1c2goYVtjXSk7ZWxzZSBmb3IoO2FbY107YysrKWQucHVzaChhW2NdKTtyZXR1cm4gZH19dmFyIHUsdjtjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj91PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPy0xOjE7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMToxfToodT1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKGEuc291cmNlSW5kZXgmJmIuc291cmNlSW5kZXgpcmV0dXJuIGEuc291cmNlSW5kZXgtYi5zb3VyY2VJbmRleDt2YXIgYyxkLGU9W10sZj1bXSxnPWEucGFyZW50Tm9kZSxpPWIucGFyZW50Tm9kZSxqPWc7aWYoZz09PWkpcmV0dXJuIHYoYSxiKTtpZighZylyZXR1cm4tMTtpZighaSlyZXR1cm4gMTt3aGlsZShqKWUudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtqPWk7d2hpbGUoailmLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaz0wO2s8YyYmazxkO2srKylpZihlW2tdIT09ZltrXSlyZXR1cm4gdihlW2tdLGZba10pO3JldHVybiBrPT09Yz92KGEsZltrXSwtMSk6dihlW2tdLGIsMSl9LHY9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1iKXJldHVybiBjO3ZhciBkPWEubmV4dFNpYmxpbmc7d2hpbGUoZCl7aWYoZD09PWIpcmV0dXJuLTE7ZD1kLm5leHRTaWJsaW5nfXJldHVybiAxfSksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZT1jLmRvY3VtZW50RWxlbWVudDthLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInLz4iLGUuaW5zZXJ0QmVmb3JlKGEsZS5maXJzdENoaWxkKSxjLmdldEVsZW1lbnRCeUlkKGQpJiYoby5maW5kLklEPWZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYy5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFkKXt2YXIgZT1jLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBlP2UuaWQ9PT1hWzFdfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxvLmZpbHRlci5JRD1mdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZjJiZjLm5vZGVWYWx1ZT09PWJ9KSxlLnJlbW92ZUNoaWxkKGEpLGU9YT1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudCgiIikpLGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCYmKG8uZmluZC5UQUc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pO2lmKGFbMV09PT0iKiIpe3ZhciBkPVtdO2Zvcih2YXIgZT0wO2NbZV07ZSsrKWNbZV0ubm9kZVR5cGU9PT0xJiZkLnB1c2goY1tlXSk7Yz1kfXJldHVybiBjfSksYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGEuZmlyc3RDaGlsZCYmdHlwZW9mIGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPSJ1bmRlZmluZWQiJiZhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyImJihvLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfSksYT1udWxsfSgpLGMucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYT1tLGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJfX3NpenpsZV9fIjtiLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKCFiLnF1ZXJ5U2VsZWN0b3JBbGx8fGIucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGghPT0wKXttPWZ1bmN0aW9uKGIsZSxmLGcpe2U9ZXx8YztpZighZyYmIW0uaXNYTUwoZSkpe3ZhciBoPS9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKGIpO2lmKGgmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTkpKXtpZihoWzFdKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYiksZik7aWYoaFsyXSYmby5maW5kLkNMQVNTJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMl0pLGYpfWlmKGUubm9kZVR5cGU9PT05KXtpZihiPT09ImJvZHkiJiZlLmJvZHkpcmV0dXJuIHMoW2UuYm9keV0sZik7aWYoaCYmaFszXSl7dmFyIGk9ZS5nZXRFbGVtZW50QnlJZChoWzNdKTtpZighaXx8IWkucGFyZW50Tm9kZSlyZXR1cm4gcyhbXSxmKTtpZihpLmlkPT09aFszXSlyZXR1cm4gcyhbaV0sZil9dHJ5e3JldHVybiBzKGUucXVlcnlTZWxlY3RvckFsbChiKSxmKX1jYXRjaChqKXt9fWVsc2UgaWYoZS5ub2RlVHlwZT09PTEmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXt2YXIgaz1lLGw9ZS5nZXRBdHRyaWJ1dGUoImlkIiksbj1sfHxkLHA9ZS5wYXJlbnROb2RlLHE9L15ccypbK35dLy50ZXN0KGIpO2w/bj1uLnJlcGxhY2UoLycvZywiXFwkJiIpOmUuc2V0QXR0cmlidXRlKCJpZCIsbikscSYmcCYmKGU9ZS5wYXJlbnROb2RlKTt0cnl7aWYoIXF8fHApcmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWQ9JyIrbisiJ10gIitiKSxmKX1jYXRjaChyKXt9ZmluYWxseXtsfHxrLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBhKGIsZSxmLGcpfTtmb3IodmFyIGUgaW4gYSltW2VdPWFbZV07Yj1udWxsfX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuZG9jdW1lbnRFbGVtZW50LGI9YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcjtpZihiKXt2YXIgZD0hYi5jYWxsKGMuY3JlYXRlRWxlbWVudCgiZGl2IiksImRpdiIpLGU9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChmKXtlPSEwfW0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYyl7Yz1jLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFtLmlzWE1MKGEpKXRyeXtpZihlfHwhby5tYXRjaC5QU0VVRE8udGVzdChjKSYmIS8hPS8udGVzdChjKSl7dmFyIGY9Yi5jYWxsKGEsYyk7aWYoZnx8IWR8fGEuZG9jdW1lbnQmJmEuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gZn19Y2F0Y2goZyl7fXJldHVybiBtKGMsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9fX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjtpZighIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MCl7YS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIjtpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0xKXJldHVybjtvLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIiksby5maW5kLkNMQVNTPWZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT0idW5kZWZpbmVkIiYmIWMpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxjLmRvY3VtZW50RWxlbWVudC5jb250YWlucz9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTptLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0uaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjApLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT1bXSxmPSIiLGc9Yi5ub2RlVHlwZT9bYl06Yjt3aGlsZShkPW8ubWF0Y2guUFNFVURPLmV4ZWMoYSkpZis9ZFswXSxhPWEucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIik7YT1vLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKW0oYSxnW2hdLGUsYyk7cmV0dXJuIG0uZmlsdGVyKGYsZSl9O20uYXR0cj1mLmF0dHIsbS5zZWxlY3RvcnMuYXR0ck1hcD17fSxmLmZpbmQ9bSxmLmV4cHI9bS5zZWxlY3RvcnMsZi5leHByWyI6Il09Zi5leHByLmZpbHRlcnMsZi51bmlxdWU9bS51bmlxdWVTb3J0LGYudGV4dD1tLmdldFRleHQsZi5pc1hNTERvYz1tLmlzWE1MLGYuY29udGFpbnM9bS5jb250YWluc30oKTt2YXIgTz0vVW50aWwkLyxQPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLFE9LywvLFI9L14uW146I1xbXC4sXSokLyxTPUFycmF5LnByb3RvdHlwZS5zbGljZSxUPWYuZXhwci5tYXRjaC5QT1MsVT17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGMsZDtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuIGYoYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoZi5jb250YWlucyhiW2NdLHRoaXMpKXJldHVybiEwfSk7dmFyIGU9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGcsaCxpO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtnPWUubGVuZ3RoLGYuZmluZChhLHRoaXNbY10sZSk7aWYoYz4wKWZvcihoPWc7aDxlLmxlbmd0aDtoKyspZm9yKGk9MDtpPGc7aSsrKWlmKGVbaV09PT1lW2hdKXtlLnNwbGljZShoLS0sMSk7YnJlYWt9fXJldHVybiBlfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZihhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8YzthKyspaWYoZi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVyh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFcodGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiYodHlwZW9mIGE9PSJzdHJpbmciP1QudGVzdChhKT9mKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpmLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQsZSxnPXRoaXNbMF07aWYoZi5pc0FycmF5KGEpKXt2YXIgaD0xO3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspZihnKS5pcyhhW2RdKSYmYy5wdXNoKHtzZWxlY3RvcjphW2RdLGVsZW06ZyxsZXZlbDpofSk7Zz1nLnBhcmVudE5vZGUsaCsrfXJldHVybiBjfXZhciBpPVQudGVzdChhKXx8dHlwZW9mIGEhPSJzdHJpbmciP2YoYSxifHx0aGlzLmNvbnRleHQpOjA7Zm9yKGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe2c9dGhpc1tkXTt3aGlsZShnKXtpZihpP2kuaW5kZXgoZyk+LTE6Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihnLGEpKXtjLnB1c2goZyk7YnJlYWt9Zz1nLnBhcmVudE5vZGU7aWYoIWd8fCFnLm93bmVyRG9jdW1lbnR8fGc9PT1ifHxnLm5vZGVUeXBlPT09MTEpYnJlYWt9fWM9Yy5sZW5ndGg+MT9mLnVuaXF1ZShjKTpjO3JldHVybiB0aGlzLnB1c2hTdGFjayhjLCJjbG9zZXN0IixhKX0saW5kZXg6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTE7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBmLmluQXJyYXkodGhpc1swXSxmKGEpKTtyZXR1cm4gZi5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJzdHJpbmciP2YoYSxiKTpmLm1ha2VBcnJheShhJiZhLm5vZGVUeXBlP1thXTphKSxkPWYubWVyZ2UodGhpcy5nZXQoKSxjKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVihjWzBdKXx8VihkWzBdKT9kOmYudW5pcXVlKGQpKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfX0pLGYuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5ub2RlVHlwZSE9PTExP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEucGFyZW50Tm9kZS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6Zi5tYWtlQXJyYXkoYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPWYubWFwKHRoaXMsYixjKSxnPVMuY2FsbChhcmd1bWVudHMpO08udGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1mLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFVW2FdP2YudW5pcXVlKGUpOmUsKHRoaXMubGVuZ3RoPjF8fFEudGVzdChkKSkmJlAudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsZy5qb2luKCIsIikpfX0pLGYuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oYSxiLGMpe2MmJihhPSI6bm90KCIrYSsiKSIpO3JldHVybiBiLmxlbmd0aD09PTE/Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihiWzBdLGEpP1tiWzBdXTpbXTpmLmZpbmQubWF0Y2hlcyhhLGIpfSxkaXI6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPVtdLGc9YVtjXTt3aGlsZShnJiZnLm5vZGVUeXBlIT09OSYmKGQ9PT1ifHxnLm5vZGVUeXBlIT09MXx8IWYoZykuaXMoZCkpKWcubm9kZVR5cGU9PT0xJiZlLnB1c2goZyksZz1nW2NdO3JldHVybiBlfSxudGg6ZnVuY3Rpb24oYSxiLGMsZCl7Yj1ifHwxO3ZhciBlPTA7Zm9yKDthO2E9YVtjXSlpZihhLm5vZGVUeXBlPT09MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIFk9ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8iLFo9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywkPS9eXHMrLyxfPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vaWcsYmE9LzwoW1x3Ol0rKS8sYmI9Lzx0Ym9keS9pLGJjPS88fCYjP1x3KzsvLGJkPS88KD86c2NyaXB0fHN0eWxlKS9pLGJlPS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksYmY9bmV3IFJlZ0V4cCgiPCg/OiIrWS5yZXBsYWNlKCIgIiwifCIpKyIpIiwiaSIpLGJnPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJoPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmk9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmo9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYms9WChjKTtiai5vcHRncm91cD1iai5vcHRpb24sYmoudGJvZHk9YmoudGZvb3Q9YmouY29sZ3JvdXA9YmouY2FwdGlvbj1iai50aGVhZCxiai50aD1iai50ZCxmLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KGJqLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxmLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9Im9iamVjdCImJmEhPT1iKXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gZi50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1mKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykud3JhcEFsbChhKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Zi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuYXBwZW5kQ2hpbGQoYSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Zihhcmd1bWVudHNbMF0pO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIgosYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmKGFyZ3VtZW50c1swXSkudG9BcnJheSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ7KGQ9dGhpc1tjXSkhPW51bGw7YysrKWlmKCFhfHxmLmZpbHRlcihhLFtkXSkubGVuZ3RoKSFiJiZkLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksZi5jbGVhbkRhdGEoW2RdKSksZC5wYXJlbnROb2RlJiZkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShaLCIiKTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJkLnRlc3QoYSkmJihmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCEkLnRlc3QoYSkpJiYhYmpbKGJhLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShfLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXRoaXNbY10ubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEodGhpc1tjXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSx0aGlzW2NdLmlubmVySFRNTD1hKX1jYXRjaChlKXt0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfX1lbHNlIGYuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKTtjLmh0bWwoYS5jYWxsKHRoaXMsYixjLmh0bWwoKSkpfSk6dGhpcy5lbXB0eSgpLmFwcGVuZChhKTtyZXR1cm4gdGhpc30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpLGQ9Yy5odG1sKCk7Yy5yZXBsYWNlV2l0aChhLmNhbGwodGhpcyxiLGQpKX0pO3R5cGVvZiBhIT0ic3RyaW5nIiYmKGE9ZihhKS5kZXRhY2goKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7Zih0aGlzKS5yZW1vdmUoKSxiP2YoYikuYmVmb3JlKGEpOmYoYykuYXBwZW5kKGEpfSl9cmV0dXJuIHRoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKGYoZi5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpOnRoaXN9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnLGgsaSxqPWFbMF0saz1bXTtpZighZi5zdXBwb3J0LmNoZWNrQ2xvbmUmJmFyZ3VtZW50cy5sZW5ndGg9PT0zJiZ0eXBlb2Ygaj09InN0cmluZyImJmJnLnRlc3QoaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykuZG9tTWFuaXAoYSxjLGQsITApfSk7aWYoZi5pc0Z1bmN0aW9uKGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGc9Zih0aGlzKTthWzBdPWouY2FsbCh0aGlzLGUsYz9nLmh0bWwoKTpiKSxnLmRvbU1hbmlwKGEsYyxkKX0pO2lmKHRoaXNbMF0pe2k9aiYmai5wYXJlbnROb2RlLGYuc3VwcG9ydC5wYXJlbnROb2RlJiZpJiZpLm5vZGVUeXBlPT09MTEmJmkuY2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD9lPXtmcmFnbWVudDppfTplPWYuYnVpbGRGcmFnbWVudChhLHRoaXMsayksaD1lLmZyYWdtZW50LGguY2hpbGROb2Rlcy5sZW5ndGg9PT0xP2c9aD1oLmZpcnN0Q2hpbGQ6Zz1oLmZpcnN0Q2hpbGQ7aWYoZyl7Yz1jJiZmLm5vZGVOYW1lKGcsInRyIik7Zm9yKHZhciBsPTAsbT10aGlzLmxlbmd0aCxuPW0tMTtsPG07bCsrKWQuY2FsbChjP2JsKHRoaXNbbF0sZyk6dGhpc1tsXSxlLmNhY2hlYWJsZXx8bT4xJiZsPG4/Zi5jbG9uZShoLCEwLCEwKTpoKX1rLmxlbmd0aCYmZi5lYWNoKGssYnIpfXJldHVybiB0aGlzfX0pLGYuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGIsZCl7dmFyIGUsZyxoLGksaj1hWzBdO2ImJmJbMF0mJihpPWJbMF0ub3duZXJEb2N1bWVudHx8YlswXSksaS5jcmVhdGVEb2N1bWVudEZyYWdtZW50fHwoaT1jKSxhLmxlbmd0aD09PTEmJnR5cGVvZiBqPT0ic3RyaW5nIiYmai5sZW5ndGg8NTEyJiZpPT09YyYmai5jaGFyQXQoMCk9PT0iPCImJiFiZS50ZXN0KGopJiYoZi5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFiZy50ZXN0KGopKSYmIWYuc3VwcG9ydC51bmtub3duRWxlbXMmJmJmLnRlc3QoaikmJihnPSEwLGg9Zi5mcmFnbWVudHNbal0saCYmaCE9PTEmJihlPWgpKSxlfHwoZT1pLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmLmNsZWFuKGEsaSxlLGQpKSxnJiYoZi5mcmFnbWVudHNbal09aD9lOjEpO3JldHVybntmcmFnbWVudDplLGNhY2hlYWJsZTpnfX0sZi5mcmFnbWVudHM9e30sZi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGMpe3ZhciBkPVtdLGU9ZihjKSxnPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGcmJmcubm9kZVR5cGU9PT0xMSYmZy5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmUubGVuZ3RoPT09MSl7ZVtiXSh0aGlzWzBdKTtyZXR1cm4gdGhpc31mb3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspe3ZhciBqPShoPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCk7ZihlW2hdKVtiXShqKSxkPWQuY29uY2F0KGopfXJldHVybiB0aGlzLnB1c2hTdGFjayhkLGEsZS5zZWxlY3Rvcil9fSksZi5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmNsb25lTm9kZSghMCksZSxnLGg7aWYoKCFmLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhZi5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZi5pc1hNTERvYyhhKSl7Ym4oYSxkKSxlPWJvKGEpLGc9Ym8oZCk7Zm9yKGg9MDtlW2hdOysraClnW2hdJiZibihlW2hdLGdbaF0pfWlmKGIpe2JtKGEsZCk7aWYoYyl7ZT1ibyhhKSxnPWJvKGQpO2ZvcihoPTA7ZVtoXTsrK2gpYm0oZVtoXSxnW2hdKX19ZT1nPW51bGw7cmV0dXJuIGR9LGNsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe3ZhciBnO2I9Ynx8Yyx0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIiYmKGI9Yi5vd25lckRvY3VtZW50fHxiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fGMpO3ZhciBoPVtdLGk7Zm9yKHZhciBqPTAsazsoaz1hW2pdKSE9bnVsbDtqKyspe3R5cGVvZiBrPT0ibnVtYmVyIiYmKGsrPSIiKTtpZighayljb250aW51ZTtpZih0eXBlb2Ygaz09InN0cmluZyIpaWYoIWJjLnRlc3Qoaykpaz1iLmNyZWF0ZVRleHROb2RlKGspO2Vsc2V7az1rLnJlcGxhY2UoXywiPCQxPjwvJDI+Iik7dmFyIGw9KGJhLmV4ZWMoayl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbT1ialtsXXx8YmouX2RlZmF1bHQsbj1tWzBdLG89Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtiPT09Yz9iay5hcHBlbmRDaGlsZChvKTpYKGIpLmFwcGVuZENoaWxkKG8pLG8uaW5uZXJIVE1MPW1bMV0rayttWzJdO3doaWxlKG4tLSlvPW8ubGFzdENoaWxkO2lmKCFmLnN1cHBvcnQudGJvZHkpe3ZhciBwPWJiLnRlc3QoaykscT1sPT09InRhYmxlIiYmIXA/by5maXJzdENoaWxkJiZvLmZpcnN0Q2hpbGQuY2hpbGROb2RlczptWzFdPT09Ijx0YWJsZT4iJiYhcD9vLmNoaWxkTm9kZXM6W107Zm9yKGk9cS5sZW5ndGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHFbaV0sInRib2R5IikmJiFxW2ldLmNoaWxkTm9kZXMubGVuZ3RoJiZxW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocVtpXSl9IWYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmJC50ZXN0KGspJiZvLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKCQuZXhlYyhrKVswXSksby5maXJzdENoaWxkKSxrPW8uY2hpbGROb2Rlc312YXIgcjtpZighZi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpaWYoa1swXSYmdHlwZW9mIChyPWsubGVuZ3RoKT09Im51bWJlciIpZm9yKGk9MDtpPHI7aSsrKWJxKGtbaV0pO2Vsc2UgYnEoayk7ay5ub2RlVHlwZT9oLnB1c2goayk6aD1mLm1lcmdlKGgsayl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiaC50ZXN0KGEudHlwZSl9O2ZvcihqPTA7aFtqXTtqKyspaWYoZSYmZi5ub2RlTmFtZShoW2pdLCJzY3JpcHQiKSYmKCFoW2pdLnR5cGV8fGhbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWUucHVzaChoW2pdLnBhcmVudE5vZGU/aFtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhbal0pOmhbal0pO2Vsc2V7aWYoaFtqXS5ub2RlVHlwZT09PTEpe3ZhciBzPWYuZ3JlcChoW2pdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtoLnNwbGljZS5hcHBseShoLFtqKzEsMF0uY29uY2F0KHMpKX1kLmFwcGVuZENoaWxkKGhbal0pfX1yZXR1cm4gaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5ldmVudC5zcGVjaWFsLGc9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe2lmKGkubm9kZU5hbWUmJmYubm9EYXRhW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1pW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGogaW4gYi5ldmVudHMpZVtqXT9mLmV2ZW50LnJlbW92ZShpLGopOmYucmVtb3ZlRXZlbnQoaSxqLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9Zz9kZWxldGUgaVtmLmV4cGFuZG9dOmkucmVtb3ZlQXR0cmlidXRlJiZpLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJzPS9hbHBoYVwoW14pXSpcKS9pLGJ0PS9vcGFjaXR5PShbXildKikvLGJ1PS8oW0EtWl18Xm1zKS9nLGJ2PS9eLT9cZCsoPzpweCk/JC9pLGJ3PS9eLT9cZC8sYng9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnk9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ6PVsiTGVmdCIsIlJpZ2h0Il0sYkE9WyJUb3AiLCJCb3R0b20iXSxiQixiQyxiRDtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YkIoYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1ieC5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYkIpcmV0dXJuIGJCKGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfX0pLGYuY3VyQ1NTPWYuY3NzLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlO2lmKGMpe2lmKGEub2Zmc2V0V2lkdGghPT0wKXJldHVybiBiRShhLGIsZCk7Zi5zd2FwKGEsYnksZnVuY3Rpb24oKXtlPWJFKGEsYixkKX0pO3JldHVybiBlfX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJ2LnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBidC50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZz1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJmYudHJpbShnLnJlcGxhY2UoYnMsIiIpKT09PSIiKXtjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYoZCYmIWQuZmlsdGVyKXJldHVybn1jLmZpbHRlcj1icy50ZXN0KGcpP2cucmVwbGFjZShicyxlKTpnKyIgIitlfX0pLGYoZnVuY3Rpb24oKXtmLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihhLGIpe3ZhciBjO2Yuc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe2I/Yz1iQihhLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW5SaWdodCIpOmM9YS5zdHlsZS5tYXJnaW5SaWdodH0pO3JldHVybiBjfX0pfSksYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoYkM9ZnVuY3Rpb24oYSxjKXt2YXIgZCxlLGc7Yz1jLnJlcGxhY2UoYnUsIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoIShlPWEub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpcmV0dXJuIGI7aWYoZz1lLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlkPWcuZ2V0UHJvcGVydHlWYWx1ZShjKSxkPT09IiImJiFmLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYSkmJihkPWYuc3R5bGUoYSxjKSk7cmV0dXJuIGR9KSxjLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihiRD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWEuY3VycmVudFN0eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxnPWEuc3R5bGU7Zj09PW51bGwmJmcmJihlPWdbYl0pJiYoZj1lKSwhYnYudGVzdChmKSYmYncudGVzdChmKSYmKGM9Zy5sZWZ0LGQ9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlLmxlZnQsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZy5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDAsZj1nLnBpeGVsTGVmdCsicHgiLGcubGVmdD1jLGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWQpKTtyZXR1cm4gZj09PSIiPyJhdXRvIjpmfSksYkI9YkN8fGJELGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFmLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KTt2YXIgYkY9LyUyMC9nLGJHPS9cW1xdJC8sYkg9L1xyP1xuL2csYkk9LyMuKiQvLGJKPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYks9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJMPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYk09L14oPzpHRVR8SEVBRCkkLyxiTj0vXlwvXC8vLGJPPS9cPy8sYlA9LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYlE9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYlI9L1xzKy8sYlM9LyhbPyZdKV89W14mXSovLGJUPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiVT1mLmZuLmxvYWQsYlY9e30sYlc9e30sYlgsYlksYlo9WyIqLyJdK1siKiJdO3RyeXtiWD1lLmhyZWZ9Y2F0Y2goYiQpe2JYPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJYLmhyZWY9IiIsYlg9YlguaHJlZn1iWT1iVC5leGVjKGJYLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiVSlyZXR1cm4gYlUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYlAsIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJRLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJLLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJILCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiSCwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJpbmQoYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2NiKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksY2IoYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlgsaXNMb2NhbDpiTC50ZXN0KGJZWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Ylp9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6Yl8oYlYpLGFqYXhUcmFuc3BvcnQ6Yl8oYlcpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2NkKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWNlKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5maXJlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksaj1kLnN0YXR1c0NvZGV8fHt9LGssbD17fSxtPXt9LG4sbyxwLHEscixzPTAsdCx1LHY9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXMpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPW1bY109bVtjXXx8YSxsW2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBzPT09Mj9uOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHM9PT0yKXtpZighbyl7bz17fTt3aGlsZShjPWJKLmV4ZWMobikpb1tjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1vW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtzfHwoZC5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1hfHwiYWJvcnQiLHAmJnAuYWJvcnQoYSksdygwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHYpLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsdi5jb21wbGV0ZT1pLmFkZCx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJJLCIiKS5yZXBsYWNlKGJOLGJZWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlIpLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJULmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iWVsxXSYmclsyXT09YllbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiWVszXXx8KGJZWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGNhKGJWLGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJNLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJPLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYlMsIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYk8udGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiWisiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1jYShiVyxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7czwyP3coLTEseik6Zi5lcnJvcih6KX19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpY2MoZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYkYsIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY2Y9Zi5ub3coKSxjZz0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitjZisrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuY29udGVudFR5cGU9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmdHlwZW9mIGIuZGF0YT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjZy50ZXN0KGIudXJsKXx8ZSYmY2cudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2csbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNnLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2g9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNqKWNqW2FdKDAsMSl9OiExLGNpPTAsY2o7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNrKCl8fGNsKCl9OmNrLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKXtpZighYy5jcm9zc0RvbWFpbnx8Zi5zdXBwb3J0LmNvcnMpe3ZhciBkO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZyl7dmFyIGg9Yy54aHIoKSxpLGo7Yy51c2VybmFtZT9oLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMsYy51c2VybmFtZSxjLnBhc3N3b3JkKTpoLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMpO2lmKGMueGhyRmllbGRzKWZvcihqIGluIGMueGhyRmllbGRzKWhbal09Yy54aHJGaWVsZHNbal07Yy5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYy5taW1lVHlwZSksIWMuY3Jvc3NEb21haW4mJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihqIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGosZVtqXSl9Y2F0Y2goayl7fWguc2VuZChjLmhhc0NvbnRlbnQmJmMuZGF0YXx8bnVsbCksZD1mdW5jdGlvbihhLGUpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGQmJihlfHxoLnJlYWR5U3RhdGU9PT00KSl7ZD1iLGkmJihoLm9ucmVhZHlzdGF0ZWNoYW5nZT1mLm5vb3AsY2gmJmRlbGV0ZSBjaltpXSk7aWYoZSloLnJlYWR5U3RhdGUhPT00JiZoLmFib3J0KCk7ZWxzZXtqPWguc3RhdHVzLGw9aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxtPXt9LG49aC5yZXNwb25zZVhNTCxuJiZuLmRvY3VtZW50RWxlbWVudCYmKG0ueG1sPW4pLG0udGV4dD1oLnJlc3BvbnNlVGV4dDt0cnl7az1oLnN0YXR1c1RleHR9Y2F0Y2gobyl7az0iIn0haiYmYy5pc0xvY2FsJiYhYy5jcm9zc0RvbWFpbj9qPW0udGV4dD8yMDA6NDA0Omo9PT0xMjIzJiYoaj0yMDQpfX19Y2F0Y2gocCl7ZXx8ZygtMSxwKX1tJiZnKGosayxtLGwpfSwhYy5hc3luY3x8aC5yZWFkeVN0YXRlPT09ND9kKCk6KGk9KytjaSxjaCYmKGNqfHwoY2o9e30sZihhKS51bmxvYWQoY2gpKSxjaltpXT1kKSxoLm9ucmVhZHlzdGF0ZWNoYW5nZT1kKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY209e30sY24sY28sY3A9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNxPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksY3IsY3M9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV0sY3Q7Zi5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdygic2hvdyIsMyksYSxiLGMpO2Zvcih2YXIgZz0wLGg9dGhpcy5sZW5ndGg7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9ZC5zdHlsZS5kaXNwbGF5LCFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZT09PSJub25lIiYmKGU9ZC5zdHlsZS5kaXNwbGF5PSIiKSxlPT09IiImJmYuY3NzKGQsImRpc3BsYXkiKT09PSJub25lIiYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixjeChkLm5vZGVOYW1lKSkpO2ZvcihnPTA7ZzxoO2crKyl7ZD10aGlzW2ddO2lmKGQuc3R5bGUpe2U9ZC5zdHlsZS5kaXNwbGF5O2lmKGU9PT0iInx8ZT09PSJub25lIilkLnN0eWxlLmRpc3BsYXk9Zi5fZGF0YShkLCJvbGRkaXNwbGF5Iil8fCIifX1yZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihhLGIsYyl7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdygiaGlkZSIsMyksYSxiLGMpO3ZhciBkLGUsZz0wLGg9dGhpcy5sZW5ndGg7Zm9yKDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1mLmNzcyhkLCJkaXNwbGF5IiksZSE9PSJub25lIiYmIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGUpKTtmb3IoZz0wO2c8aDtnKyspdGhpc1tnXS5zdHlsZSYmKHRoaXNbZ10uc3R5bGUuZGlzcGxheT0ibm9uZSIpO3JldHVybiB0aGlzfSxfdG9nZ2xlOmYuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dHlwZW9mIGE9PSJib29sZWFuIjtmLmlzRnVuY3Rpb24oYSkmJmYuaXNGdW5jdGlvbihiKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE9PW51bGx8fGQ/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ZD9hOmYodGhpcykuaXMoIjpoaWRkZW4iKTtmKHRoaXMpW2I/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZShjdygidG9nZ2xlIiwzKSxhLGIsYyk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBnKCl7ZS5xdWV1ZT09PSExJiZmLl9tYXJrKHRoaXMpO3ZhciBiPWYuZXh0ZW5kKHt9LGUpLGM9dGhpcy5ub2RlVHlwZT09PTEsZD1jJiZmKHRoaXMpLmlzKCI6aGlkZGVuIiksZyxoLGksaixrLGwsbSxuLG87Yi5hbmltYXRlZFByb3BlcnRpZXM9e307Zm9yKGkgaW4gYSl7Zz1mLmNhbWVsQ2FzZShpKSxpIT09ZyYmKGFbZ109YVtpXSxkZWxldGUgYVtpXSksaD1hW2ddLGYuaXNBcnJheShoKT8oYi5hbmltYXRlZFByb3BlcnRpZXNbZ109aFsxXSxoPWFbZ109aFswXSk6Yi5hbmltYXRlZFByb3BlcnRpZXNbZ109Yi5zcGVjaWFsRWFzaW5nJiZiLnNwZWNpYWxFYXNpbmdbZ118fGIuZWFzaW5nfHwic3dpbmciO2lmKGg9PT0iaGlkZSImJmR8fGg9PT0ic2hvdyImJiFkKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7YyYmKGc9PT0iaGVpZ2h0Inx8Zz09PSJ3aWR0aCIpJiYoYi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV0sZi5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmYuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSImJighZi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fGN4KHRoaXMubm9kZU5hbWUpPT09ImlubGluZSI/dGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnRoaXMuc3R5bGUuem9vbT0xKSl9Yi5vdmVyZmxvdyE9bnVsbCYmKHRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2ZvcihpIGluIGEpaj1uZXcgZi5meCh0aGlzLGIsaSksaD1hW2ldLGNwLnRlc3QoaCk/KG89Zi5fZGF0YSh0aGlzLCJ0b2dnbGUiK2kpfHwoaD09PSJ0b2dnbGUiP2Q/InNob3ciOiJoaWRlIjowKSxvPyhmLl9kYXRhKHRoaXMsInRvZ2dsZSIraSxvPT09InNob3ciPyJoaWRlIjoic2hvdyIpLGpbb10oKSk6altoXSgpKTooaz1jcS5leGVjKGgpLGw9ai5jdXIoKSxrPyhtPXBhcnNlRmxvYXQoa1syXSksbj1rWzNdfHwoZi5jc3NOdW1iZXJbaV0/IiI6InB4IiksbiE9PSJweCImJihmLnN0eWxlKHRoaXMsaSwobXx8MSkrbiksbD0obXx8MSkvai5jdXIoKSpsLGYuc3R5bGUodGhpcyxpLGwrbikpLGtbMV0mJihtPShrWzFdPT09Ii09Ij8tMToxKSptK2wpLGouY3VzdG9tKGwsbSxuKSk6ai5jdXN0b20obCxoLCIiKSk7cmV0dXJuITB9dmFyIGU9Zi5zcGVlZChiLGMsZCk7aWYoZi5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSxbITFdKTthPWYuZXh0ZW5kKHt9LGEpO3JldHVybiBlLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZS5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGMsZCl7dHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChhLGIsYyl7dmFyIGU9YltjXTtmLnJlbW92ZURhdGEoYSxjLCEwKSxlLnN0b3AoZCl9dmFyIGIsYz0hMSxlPWYudGltZXJzLGc9Zi5fZGF0YSh0aGlzKTtkfHxmLl91bm1hcmsoITAsdGhpcyk7aWYoYT09bnVsbClmb3IoYiBpbiBnKWdbYl0uc3RvcCYmYi5pbmRleE9mKCIucnVuIik9PT1iLmxlbmd0aC00JiZoKHRoaXMsZyxiKTtlbHNlIGdbYj1hKyIucnVuIl0mJmdbYl0uc3RvcCYmaCh0aGlzLGcsYik7Zm9yKGI9ZS5sZW5ndGg7Yi0tOyllW2JdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZVtiXS5xdWV1ZT09PWEpJiYoZD9lW2JdKCEwKTplW2JdLnNhdmVTdGF0ZSgpLGM9ITAsZS5zcGxpY2UoYiwxKSk7KCFkfHwhYykmJmYuZGVxdWV1ZSh0aGlzLGEpfSl9fSksZi5lYWNoKHtzbGlkZURvd246Y3coInNob3ciLDEpLHNsaWRlVXA6Y3coImhpZGUiLDEpLHNsaWRlVG9nZ2xlOmN3KCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLGYuZXh0ZW5kKHtzcGVlZDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmdHlwZW9mIGE9PSJvYmplY3QiP2YuZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8Zi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFmLmlzRnVuY3Rpb24oYikmJmJ9O2QuZHVyYXRpb249Zi5meC5vZmY/MDp0eXBlb2YgZC5kdXJhdGlvbj09Im51bWJlciI/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIGYuZnguc3BlZWRzP2YuZnguc3BlZWRzW2QuZHVyYXRpb25dOmYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKGQucXVldWU9PW51bGx8fGQucXVldWU9PT0hMClkLnF1ZXVlPSJmeCI7ZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKGEpe2YuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZT9mLmRlcXVldWUodGhpcyxkLnF1ZXVlKTphIT09ITEmJmYuX3VubWFyayh0aGlzKX07cmV0dXJuIGR9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnPWIub3JpZ3x8e319fSksZi5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSwoZi5meC5zdGVwW3RoaXMucHJvcF18fGYuZnguc3RlcC5fZGVmYXVsdCkodGhpcyl9LGN1cjpmdW5jdGlvbigpe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiYoIXRoaXMuZWxlbS5zdHlsZXx8dGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpKXJldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXTt2YXIgYSxiPWYuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3ApO3JldHVybiBpc05hTihhPXBhcnNlRmxvYXQoYikpPyFifHxiPT09ImF1dG8iPzA6YjphfSxjdXN0b206ZnVuY3Rpb24oYSxjLGQpe2Z1bmN0aW9uIGgoYSl7cmV0dXJuIGUuc3RlcChhKX12YXIgZT10aGlzLGc9Zi5meDt0aGlzLnN0YXJ0VGltZT1jdHx8Y3UoKSx0aGlzLmVuZD1jLHRoaXMubm93PXRoaXMuc3RhcnQ9YSx0aGlzLnBvcz10aGlzLnN0YXRlPTAsdGhpcy51bml0PWR8fHRoaXMudW5pdHx8KGYuY3NzTnVtYmVyW3RoaXMucHJvcF0/IiI6InB4IiksaC5xdWV1ZT10aGlzLm9wdGlvbnMucXVldWUsaC5lbGVtPXRoaXMuZWxlbSxoLnNhdmVTdGF0ZT1mdW5jdGlvbigpe2Uub3B0aW9ucy5oaWRlJiZmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3ApPT09YiYmZi5fZGF0YShlLmVsZW0sImZ4c2hvdyIrZS5wcm9wLGUuc3RhcnQpfSxoKCkmJmYudGltZXJzLnB1c2goaCkmJiFjciYmKGNyPXNldEludGVydmFsKGcudGljayxnLmludGVydmFsKSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09YXx8Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCxhIT09Yj90aGlzLmN1c3RvbSh0aGlzLmN1cigpLGEpOnRoaXMuY3VzdG9tKHRoaXMucHJvcD09PSJ3aWR0aCJ8fHRoaXMucHJvcD09PSJoZWlnaHQiPzE6MCx0aGlzLmN1cigpKSxmKHRoaXMuZWxlbSkuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5oaWRlPSEwLHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9Y3R8fGN1KCksZz0hMCxoPXRoaXMuZWxlbSxpPXRoaXMub3B0aW9ucztpZihhfHxlPj1pLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZCx0aGlzLnBvcz10aGlzLnN0YXRlPTEsdGhpcy51cGRhdGUoKSxpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdPSEwO2ZvcihiIGluIGkuYW5pbWF0ZWRQcm9wZXJ0aWVzKWkuYW5pbWF0ZWRQcm9wZXJ0aWVzW2JdIT09ITAmJihnPSExKTtpZihnKXtpLm92ZXJmbG93IT1udWxsJiYhZi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MmJmYuZWFjaChbIiIsIlgiLCJZIl0sZnVuY3Rpb24oYSxiKXtoLnN0eWxlWyJvdmVyZmxvdyIrYl09aS5vdmVyZmxvd1thXX0pLGkuaGlkZSYmZihoKS5oaWRlKCk7aWYoaS5oaWRlfHxpLnNob3cpZm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpZi5zdHlsZShoLGIsaS5vcmlnW2JdKSxmLnJlbW92ZURhdGEoaCwiZnhzaG93IitiLCEwKSxmLnJlbW92ZURhdGEoaCwidG9nZ2xlIitiLCEwKTtkPWkuY29tcGxldGUsZCYmKGkuY29tcGxldGU9ITEsZC5jYWxsKGgpKX1yZXR1cm4hMX1pLmR1cmF0aW9uPT1JbmZpbml0eT90aGlzLm5vdz1lOihjPWUtdGhpcy5zdGFydFRpbWUsdGhpcy5zdGF0ZT1jL2kuZHVyYXRpb24sdGhpcy5wb3M9Zi5lYXNpbmdbaS5hbmltYXRlZFByb3BlcnRpZXNbdGhpcy5wcm9wXV0odGhpcy5zdGF0ZSxjLDAsMSxpLmR1cmF0aW9uKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyksdGhpcy51cGRhdGUoKTtyZXR1cm4hMH19LGYuZXh0ZW5kKGYuZngse3RpY2s6ZnVuY3Rpb24oKXt2YXIgYSxiPWYudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxmLmZ4LnN0b3AoKX0saW50ZXJ2YWw6MTMsc3RvcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoY3IpLGNyPW51bGx9LHNwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxzdGVwOntvcGFjaXR5OmZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLCJvcGFjaXR5IixhLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe2EuZWxlbS5zdHlsZSYmYS5lbGVtLnN0eWxlW2EucHJvcF0hPW51bGw/YS5lbGVtLnN0eWxlW2EucHJvcF09YS5ub3crYS51bml0OmEuZWxlbVthLnByb3BdPWEubm93fX19KSxmLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7Zi5meC5zdGVwW2JdPWZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLGIsTWF0aC5tYXgoMCxhLm5vdykpfX0pLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZi5ncmVwKGYudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGN5PS9edCg/OmFibGV8ZHxoKSQvaSxjej0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5nQ2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9mLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdLGM7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dHJ5e2M9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChkKXt9dmFyIGU9Yi5vd25lckRvY3VtZW50LGc9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoIWN8fCFmLmNvbnRhaW5zKGcsYikpcmV0dXJuIGM/e3RvcDpjLnRvcCxsZWZ0OmMubGVmdH06e3RvcDowLGxlZnQ6MH07dmFyIGg9ZS5ib2R5LGk9Y0EoZSksaj1nLmNsaWVudFRvcHx8aC5jbGllbnRUb3B8fDAsaz1nLmNsaWVudExlZnR8fGguY2xpZW50TGVmdHx8MCxsPWkucGFnZVlPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wLG09aS5wYWdlWE9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbExlZnR8fGguc2Nyb2xsTGVmdCxuPWMudG9wK2wtaixvPWMubGVmdCttLWs7cmV0dXJue3RvcDpuLGxlZnQ6b319OmYuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGMsZD1iLm9mZnNldFBhcmVudCxlPWIsZz1iLm93bmVyRG9jdW1lbnQsaD1nLmRvY3VtZW50RWxlbWVudCxpPWcuYm9keSxqPWcuZGVmYXVsdFZpZXcsaz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGw9Yi5vZmZzZXRUb3AsbT1iLm9mZnNldExlZnQ7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmYiE9PWkmJmIhPT1oKXtpZihmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9wLG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLnN1cHBvcnQuZG9lc05vdEFkZEJvcmRlciYmKCFmLnN1cHBvcnQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHN8fCFjeS50ZXN0KGIubm9kZU5hbWUpKSYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGU9ZCxkPWIub2Zmc2V0UGFyZW50KSxmLnN1cHBvcnQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxrLnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIiYmKGwrPU1hdGgubWF4KGguc2Nyb2xsVG9wLGkuc2Nyb2xsVG9wKSxtKz1NYXRoLm1heChoLnNjcm9sbExlZnQsaS5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDpsLGxlZnQ6bX19LGYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3oudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3oudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0ic2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lmKCFlKXJldHVybiBudWxsO2c9Y0EoZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2c9Y0EodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6ZihnKS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhP2Euc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhhLGQsInBhZGRpbmciKSk6dGhpc1tkXSgpOm51bGx9LGYuZm5bIm91dGVyIitjXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiP2Iuc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhiLGQsYT8ibWFyZ2luIjoiYm9yZGVyIikpOnRoaXNbZF0oKTpudWxsfSxmLmZuW2RdPWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXNbMF07aWYoIWUpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Y1tkXShhLmNhbGwodGhpcyxiLGNbZF0oKSkpfSk7aWYoZi5pc1dpbmRvdyhlKSl7dmFyIGc9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10saD1lLmRvY3VtZW50LmJvZHk7cmV0dXJuIGUuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8aCYmaFsiY2xpZW50IitjXXx8Z31pZihlLm5vZGVUeXBlPT09OSlyZXR1cm4gTWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10sZS5ib2R5WyJzY3JvbGwiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2NdLGUuYm9keVsib2Zmc2V0IitjXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitjXSk7aWYoYT09PWIpe3ZhciBpPWYuY3NzKGUsZCksaj1wYXJzZUZsb2F0KGkpO3JldHVybiBmLmlzTnVtZXJpYyhqKT9qOml9cmV0dXJuIHRoaXMuY3NzKGQsdHlwZW9mIGE9PSJzdHJpbmciP2E6YSsicHgiKX19KSxhLmpRdWVyeT1hLiQ9Zn0pKHdpbmRvdyk7'></script>
	<script src='data:/text/plain;base64,LyogTW9kZXJuaXpyIDIuNS4zIChDdXN0b20gQnVpbGQpIHwgTUlUICYgQlNECiAqIEJ1aWxkOiBodHRwOi8vd3d3Lm1vZGVybml6ci5jb20vZG93bmxvYWQvIy1jc3N0cmFuc2Zvcm1zLWNzc3RyYW5zZm9ybXMzZC1zaGl2LWNzc2NsYXNzZXMtdGVzdHN0eWxlcy10ZXN0cHJvcC10ZXN0YWxscHJvcHMtcHJlZml4ZXMtZG9tcHJlZml4ZXMtbG9hZAogKi8KO3dpbmRvdy5Nb2Rlcm5penI9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIHooYSl7ai5jc3NUZXh0PWF9ZnVuY3Rpb24gQShhLGIpe3JldHVybiB6KG0uam9pbihhKyI7IikrKGJ8fCIiKSl9ZnVuY3Rpb24gQihhLGIpe3JldHVybiB0eXBlb2YgYT09PWJ9ZnVuY3Rpb24gQyhhLGIpe3JldHVybiEhfigiIithKS5pbmRleE9mKGIpfWZ1bmN0aW9uIEQoYSxiKXtmb3IodmFyIGQgaW4gYSlpZihqW2FbZF1dIT09YylyZXR1cm4gYj09InBmeCI/YVtkXTohMDtyZXR1cm4hMX1mdW5jdGlvbiBFKGEsYixkKXtmb3IodmFyIGUgaW4gYSl7dmFyIGY9YlthW2VdXTtpZihmIT09YylyZXR1cm4gZD09PSExP2FbZV06QihmLCJmdW5jdGlvbiIpP2YuYmluZChkfHxiKTpmfXJldHVybiExfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPWEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHIoMSksZT0oYSsiICIrby5qb2luKGQrIiAiKStkKS5zcGxpdCgiICIpO3JldHVybiBCKGIsInN0cmluZyIpfHxCKGIsInVuZGVmaW5lZCIpP0QoZSxiKTooZT0oYSsiICIrcC5qb2luKGQrIiAiKStkKS5zcGxpdCgiICIpLEUoZSxiLGMpKX12YXIgZD0iMi41LjMiLGU9e30sZj0hMCxnPWIuZG9jdW1lbnRFbGVtZW50LGg9Im1vZGVybml6ciIsaT1iLmNyZWF0ZUVsZW1lbnQoaCksaj1pLnN0eWxlLGssbD17fS50b1N0cmluZyxtPSIgLXdlYmtpdC0gLW1vei0gLW8tIC1tcy0gIi5zcGxpdCgiICIpLG49IldlYmtpdCBNb3ogTyBtcyIsbz1uLnNwbGl0KCIgIikscD1uLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKSxxPXt9LHI9e30scz17fSx0PVtdLHU9dC5zbGljZSx2LHc9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsaSxqLGs9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPWIuYm9keSxtPWw/bDpiLmNyZWF0ZUVsZW1lbnQoImJvZHkiKTtpZihwYXJzZUludChkLDEwKSl3aGlsZShkLS0paj1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGouaWQ9ZT9lW2RdOmgrKGQrMSksay5hcHBlbmRDaGlsZChqKTtyZXR1cm4gZj1bIiYjMTczOyIsIjxzdHlsZT4iLGEsIjwvc3R5bGU+Il0uam9pbigiIiksay5pZD1oLChsP2s6bSkuaW5uZXJIVE1MKz1mLG0uYXBwZW5kQ2hpbGQoayksbHx8KG0uc3R5bGUuYmFja2dyb3VuZD0iIixnLmFwcGVuZENoaWxkKG0pKSxpPWMoayxhKSxsP2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChrKTptLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobSksISFpfSx4PXt9Lmhhc093blByb3BlcnR5LHk7IUIoeCwidW5kZWZpbmVkIikmJiFCKHguY2FsbCwidW5kZWZpbmVkIik/eT1mdW5jdGlvbihhLGIpe3JldHVybiB4LmNhbGwoYSxiKX06eT1mdW5jdGlvbihhLGIpe3JldHVybiBiIGluIGEmJkIoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbYl0sInVuZGVmaW5lZCIpfSxGdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYodHlwZW9mIGMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgZD11LmNhbGwoYXJndW1lbnRzLDEpLGU9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7dmFyIGE9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlPWMucHJvdG90eXBlO3ZhciBmPW5ldyBhLGc9Yy5hcHBseShmLGQuY29uY2F0KHUuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIE9iamVjdChnKT09PWc/ZzpmfXJldHVybiBjLmFwcGx5KGIsZC5jb25jYXQodS5jYWxsKGFyZ3VtZW50cykpKX07cmV0dXJuIGV9KTt2YXIgRz1mdW5jdGlvbihhLGMpe3ZhciBkPWEuam9pbigiIiksZj1jLmxlbmd0aDt3KGQsZnVuY3Rpb24oYSxjKXt2YXIgZD1iLnN0eWxlU2hlZXRzW2Iuc3R5bGVTaGVldHMubGVuZ3RoLTFdLGc9ZD9kLmNzc1J1bGVzJiZkLmNzc1J1bGVzWzBdP2QuY3NzUnVsZXNbMF0uY3NzVGV4dDpkLmNzc1RleHR8fCIiOiIiLGg9YS5jaGlsZE5vZGVzLGk9e307d2hpbGUoZi0tKWlbaFtmXS5pZF09aFtmXTtlLmNzc3RyYW5zZm9ybXMzZD0oaS5jc3N0cmFuc2Zvcm1zM2QmJmkuY3NzdHJhbnNmb3JtczNkLm9mZnNldExlZnQpPT09OSYmaS5jc3N0cmFuc2Zvcm1zM2Qub2Zmc2V0SGVpZ2h0PT09M30sZixjKX0oWyxbIkBtZWRpYSAoIixtLmpvaW4oInRyYW5zZm9ybS0zZCksKCIpLGgsIikiLCJ7I2Nzc3RyYW5zZm9ybXMzZHtsZWZ0OjlweDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6M3B4O319Il0uam9pbigiIildLFssImNzc3RyYW5zZm9ybXMzZCJdKTtxLmNzc3RyYW5zZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4hIUYoInRyYW5zZm9ybSIpfSxxLmNzc3RyYW5zZm9ybXMzZD1mdW5jdGlvbigpe3ZhciBhPSEhRigicGVyc3BlY3RpdmUiKTtyZXR1cm4gYSYmIndlYmtpdFBlcnNwZWN0aXZlImluIGcuc3R5bGUmJihhPWUuY3NzdHJhbnNmb3JtczNkKSxhfTtmb3IodmFyIEggaW4gcSl5KHEsSCkmJih2PUgudG9Mb3dlckNhc2UoKSxlW3ZdPXFbSF0oKSx0LnB1c2goKGVbdl0/IiI6Im5vLSIpK3YpKTtyZXR1cm4geigiIiksaT1rPW51bGwsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBnKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KCJwIiksZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybiBjLmlubmVySFRNTD0ieDxzdHlsZT4iK2IrIjwvc3R5bGU+IixkLmluc2VydEJlZm9yZShjLmxhc3RDaGlsZCxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGgoKXt2YXIgYT1rLmVsZW1lbnRzO3JldHVybiB0eXBlb2YgYT09InN0cmluZyI/YS5zcGxpdCgiICIpOmF9ZnVuY3Rpb24gaShhKXt2YXIgYj17fSxjPWEuY3JlYXRlRWxlbWVudCxlPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxmPWUoKTthLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGU9KGJbYV18fChiW2FdPWMoYSkpKS5jbG9uZU5vZGUoKTtyZXR1cm4gay5zaGl2TWV0aG9kcyYmZS5jYW5IYXZlQ2hpbGRyZW4mJiFkLnRlc3QoYSk/Zi5hcHBlbmRDaGlsZChlKTplfSxhLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9RnVuY3Rpb24oImgsZiIsInJldHVybiBmdW5jdGlvbigpe3ZhciBuPWYuY2xvbmVOb2RlKCksYz1uLmNyZWF0ZUVsZW1lbnQ7aC5zaGl2TWV0aG9kcyYmKCIraCgpLmpvaW4oKS5yZXBsYWNlKC9cdysvZyxmdW5jdGlvbihhKXtyZXR1cm4gYlthXT1jKGEpLGYuY3JlYXRlRWxlbWVudChhKSwnYygiJythKyciKSd9KSsiKTtyZXR1cm4gbn0iKShrLGYpfWZ1bmN0aW9uIGooYSl7dmFyIGI7cmV0dXJuIGEuZG9jdW1lbnRTaGl2ZWQ/YTooay5zaGl2Q1NTJiYhZSYmKGI9ISFnKGEsImFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxuYXYsc2VjdGlvbntkaXNwbGF5OmJsb2NrfWF1ZGlve2Rpc3BsYXk6bm9uZX1jYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9W2hpZGRlbl17ZGlzcGxheTpub25lfWF1ZGlvW2NvbnRyb2xzXXtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX1tYXJre2JhY2tncm91bmQ6I0ZGMDtjb2xvcjojMDAwfSIpKSxmfHwoYj0haShhKSksYiYmKGEuZG9jdW1lbnRTaGl2ZWQ9YiksYSl9dmFyIGM9YS5odG1sNXx8e30sZD0vXjx8Xig/OmJ1dHRvbnxmb3JtfG1hcHxzZWxlY3R8dGV4dGFyZWEpJC9pLGUsZjsoZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImEiKTthLmlubmVySFRNTD0iPHh5ej48L3h5ej4iLGU9ImhpZGRlbiJpbiBhLGY9YS5jaGlsZE5vZGVzLmxlbmd0aD09MXx8ZnVuY3Rpb24oKXt0cnl7Yi5jcmVhdGVFbGVtZW50KCJhIil9Y2F0Y2goYSl7cmV0dXJuITB9dmFyIGM9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHR5cGVvZiBjLmNsb25lTm9kZT09InVuZGVmaW5lZCJ8fHR5cGVvZiBjLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9PSJ1bmRlZmluZWQifHx0eXBlb2YgYy5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIn0oKX0pKCk7dmFyIGs9e2VsZW1lbnRzOmMuZWxlbWVudHN8fCJhYmJyIGFydGljbGUgYXNpZGUgYXVkaW8gYmRpIGNhbnZhcyBkYXRhIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc3VtbWFyeSB0aW1lIHZpZGVvIixzaGl2Q1NTOmMuc2hpdkNTUyE9PSExLHNoaXZNZXRob2RzOmMuc2hpdk1ldGhvZHMhPT0hMSx0eXBlOiJkZWZhdWx0IixzaGl2RG9jdW1lbnQ6an07YS5odG1sNT1rLGooYil9KHRoaXMsYiksZS5fdmVyc2lvbj1kLGUuX3ByZWZpeGVzPW0sZS5fZG9tUHJlZml4ZXM9cCxlLl9jc3NvbVByZWZpeGVzPW8sZS50ZXN0UHJvcD1mdW5jdGlvbihhKXtyZXR1cm4gRChbYV0pfSxlLnRlc3RBbGxQcm9wcz1GLGUudGVzdFN0eWxlcz13LGcuY2xhc3NOYW1lPWcuY2xhc3NOYW1lLnJlcGxhY2UoLyhefFxzKW5vLWpzKFxzfCQpLywiJDEkMiIpKyhmPyIganMgIit0LmpvaW4oIiAiKToiIiksZX0odGhpcyx0aGlzLmRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBGdW5jdGlvbl0ifWZ1bmN0aW9uIGUoYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGcoYSl7cmV0dXJuIWF8fGE9PSJsb2FkZWQifHxhPT0iY29tcGxldGUifHxhPT0idW5pbml0aWFsaXplZCJ9ZnVuY3Rpb24gaCgpe3ZhciBhPXAuc2hpZnQoKTtxPTEsYT9hLnQ/bShmdW5jdGlvbigpeyhhLnQ9PSJjIj9CLmluamVjdENzczpCLmluamVjdEpzKShhLnMsMCxhLmEsYS54LGEuZSwxKX0sMCk6KGEoKSxoKCkpOnE9MH1mdW5jdGlvbiBpKGEsYyxkLGUsZixpLGope2Z1bmN0aW9uIGsoYil7aWYoIW8mJmcobC5yZWFkeVN0YXRlKSYmKHUucj1vPTEsIXEmJmgoKSxsLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIpKXthIT0iaW1nIiYmbShmdW5jdGlvbigpe3QucmVtb3ZlQ2hpbGQobCl9LDUwKTtmb3IodmFyIGQgaW4geVtjXSl5W2NdLmhhc093blByb3BlcnR5KGQpJiZ5W2NdW2RdLm9ubG9hZCgpfX12YXIgaj1qfHxCLmVycm9yVGltZW91dCxsPXt9LG89MCxyPTAsdT17dDpkLHM6YyxlOmYsYTppLHg6an07eVtjXT09PTEmJihyPTEseVtjXT1bXSxsPWIuY3JlYXRlRWxlbWVudChhKSksYT09Im9iamVjdCI/bC5kYXRhPWM6KGwuc3JjPWMsbC50eXBlPWEpLGwud2lkdGg9bC5oZWlnaHQ9IjAiLGwub25lcnJvcj1sLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2suY2FsbCh0aGlzLHIpfSxwLnNwbGljZShlLDAsdSksYSE9ImltZyImJihyfHx5W2NdPT09Mj8odC5pbnNlcnRCZWZvcmUobCxzP251bGw6biksbShrLGopKTp5W2NdLnB1c2gobCkpfWZ1bmN0aW9uIGooYSxiLGMsZCxmKXtyZXR1cm4gcT0wLGI9Ynx8ImoiLGUoYSk/aShiPT0iYyI/djp1LGEsYix0aGlzLmkrKyxjLGQsZik6KHAuc3BsaWNlKHRoaXMuaSsrLDAsYSkscC5sZW5ndGg9PTEmJmgoKSksdGhpc31mdW5jdGlvbiBrKCl7dmFyIGE9QjtyZXR1cm4gYS5sb2FkZXI9e2xvYWQ6aixpOjB9LGF9dmFyIGw9Yi5kb2N1bWVudEVsZW1lbnQsbT1hLnNldFRpbWVvdXQsbj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxvPXt9LnRvU3RyaW5nLHA9W10scT0wLHI9Ik1vekFwcGVhcmFuY2UiaW4gbC5zdHlsZSxzPXImJiEhYi5jcmVhdGVSYW5nZSgpLmNvbXBhcmVOb2RlLHQ9cz9sOm4ucGFyZW50Tm9kZSxsPWEub3BlcmEmJm8uY2FsbChhLm9wZXJhKT09IltvYmplY3QgT3BlcmFdIixsPSEhYi5hdHRhY2hFdmVudCYmIWwsdT1yPyJvYmplY3QiOmw/InNjcmlwdCI6ImltZyIsdj1sPyJzY3JpcHQiOnUsdz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBBcnJheV0ifSx4PVtdLHk9e30sej17dGltZW91dDpmdW5jdGlvbihhLGIpe3JldHVybiBiLmxlbmd0aCYmKGEudGltZW91dD1iWzBdKSxhfX0sQSxCO0I9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgYT1hLnNwbGl0KCIhIiksYj14Lmxlbmd0aCxjPWEucG9wKCksZD1hLmxlbmd0aCxjPXt1cmw6YyxvcmlnVXJsOmMscHJlZml4ZXM6YX0sZSxmLGc7Zm9yKGY9MDtmPGQ7ZisrKWc9YVtmXS5zcGxpdCgiPSIpLChlPXpbZy5zaGlmdCgpXSkmJihjPWUoYyxnKSk7Zm9yKGY9MDtmPGI7ZisrKWM9eFtmXShjKTtyZXR1cm4gY31mdW5jdGlvbiBnKGEsZSxmLGcsaSl7dmFyIGo9YihhKSxsPWouYXV0b0NhbGxiYWNrO2oudXJsLnNwbGl0KCIuIikucG9wKCkuc3BsaXQoIj8iKS5zaGlmdCgpLGouYnlwYXNzfHwoZSYmKGU9ZChlKT9lOmVbYV18fGVbZ118fGVbYS5zcGxpdCgiLyIpLnBvcCgpLnNwbGl0KCI/IilbMF1dfHxoKSxqLmluc3RlYWQ/ai5pbnN0ZWFkKGEsZSxmLGcsaSk6KHlbai51cmxdP2oubm9leGVjPSEwOnlbai51cmxdPTEsZi5sb2FkKGoudXJsLGouZm9yY2VDU1N8fCFqLmZvcmNlSlMmJiJjc3MiPT1qLnVybC5zcGxpdCgiLiIpLnBvcCgpLnNwbGl0KCI/Iikuc2hpZnQoKT8iYyI6YyxqLm5vZXhlYyxqLmF0dHJzLGoudGltZW91dCksKGQoZSl8fGQobCkpJiZmLmxvYWQoZnVuY3Rpb24oKXtrKCksZSYmZShqLm9yaWdVcmwsaSxnKSxsJiZsKGoub3JpZ1VybCxpLGcpLHlbai51cmxdPTJ9KSkpfWZ1bmN0aW9uIGkoYSxiKXtmdW5jdGlvbiBjKGEsYyl7aWYoYSl7aWYoZShhKSljfHwoaj1mdW5jdGlvbigpe3ZhciBhPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtrLmFwcGx5KHRoaXMsYSksbCgpfSksZyhhLGosYiwwLGgpO2Vsc2UgaWYoT2JqZWN0KGEpPT09YSlmb3IobiBpbiBtPWZ1bmN0aW9uKCl7dmFyIGI9MCxjO2ZvcihjIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShjKSYmYisrO3JldHVybiBifSgpLGEpYS5oYXNPd25Qcm9wZXJ0eShuKSYmKCFjJiYhLS1tJiYoZChqKT9qPWZ1bmN0aW9uKCl7dmFyIGE9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2suYXBwbHkodGhpcyxhKSxsKCl9Ompbbl09ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2EmJmEuYXBwbHkodGhpcyxiKSxsKCl9fShrW25dKSksZyhhW25dLGosYixuLGgpKX1lbHNlIWMmJmwoKX12YXIgaD0hIWEudGVzdCxpPWEubG9hZHx8YS5ib3RoLGo9YS5jYWxsYmFja3x8ZixrPWosbD1hLmNvbXBsZXRlfHxmLG0sbjtjKGg/YS55ZXA6YS5ub3BlLCEhaSksaSYmYyhpKX12YXIgaixsLG09dGhpcy55ZXBub3BlLmxvYWRlcjtpZihlKGEpKWcoYSwwLG0sMCk7ZWxzZSBpZih3KGEpKWZvcihqPTA7ajxhLmxlbmd0aDtqKyspbD1hW2pdLGUobCk/ZyhsLDAsbSwwKTp3KGwpP0IobCk6T2JqZWN0KGwpPT09bCYmaShsLG0pO2Vsc2UgT2JqZWN0KGEpPT09YSYmaShhLG0pfSxCLmFkZFByZWZpeD1mdW5jdGlvbihhLGIpe3pbYV09Yn0sQi5hZGRGaWx0ZXI9ZnVuY3Rpb24oYSl7eC5wdXNoKGEpfSxCLmVycm9yVGltZW91dD0xZTQsYi5yZWFkeVN0YXRlPT1udWxsJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLnJlYWR5U3RhdGU9ImxvYWRpbmciLGIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQT1mdW5jdGlvbigpe2IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwwKSxiLnJlYWR5U3RhdGU9ImNvbXBsZXRlIn0sMCkpLGEueWVwbm9wZT1rKCksYS55ZXBub3BlLmV4ZWN1dGVTdGFjaz1oLGEueWVwbm9wZS5pbmplY3RKcz1mdW5jdGlvbihhLGMsZCxlLGksail7dmFyIGs9Yi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxsLG8sZT1lfHxCLmVycm9yVGltZW91dDtrLnNyYz1hO2ZvcihvIGluIGQpay5zZXRBdHRyaWJ1dGUobyxkW29dKTtjPWo/aDpjfHxmLGsub25yZWFkeXN0YXRlY2hhbmdlPWsub25sb2FkPWZ1bmN0aW9uKCl7IWwmJmcoay5yZWFkeVN0YXRlKSYmKGw9MSxjKCksay5vbmxvYWQ9ay5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCl9LG0oZnVuY3Rpb24oKXtsfHwobD0xLGMoMSkpfSxlKSxpP2sub25sb2FkKCk6bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShrLG4pfSxhLnllcG5vcGUuaW5qZWN0Q3NzPWZ1bmN0aW9uKGEsYyxkLGUsZyxpKXt2YXIgZT1iLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxqLGM9aT9oOmN8fGY7ZS5ocmVmPWEsZS5yZWw9InN0eWxlc2hlZXQiLGUudHlwZT0idGV4dC9jc3MiO2ZvcihqIGluIGQpZS5zZXRBdHRyaWJ1dGUoaixkW2pdKTtnfHwobi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLG4pLG0oYywwKSl9fSh0aGlzLGRvY3VtZW50KSxNb2Rlcm5penIubG9hZD1mdW5jdGlvbigpe3llcG5vcGUuYXBwbHkod2luZG93LFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX07'></script>
	<script src='data:/text/plain;base64,LyoqCiAqIGhhc2guanMKICoKICogQ29weXJpZ2h0IChDKSAyMDEyIEVtbWFudWVsIEdhcmNpYQogKiBNSVQgTGljZW5zZWQKICoKICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBIYXNoLnB1c2hTdGF0ZSh0cnVlKTsKICoKICogSGFzaC5vbignL3BhZ2UvKFswLTldKykkJywKICoJe3llcDogZnVuY3Rpb24ocGF0aCwgcGFydHMpIHsgfSwgbm9wOiBmdW5jdGlvbigpIHsgfX0sCiAqCSdQYWdlICQxJyk7CiAqCiAqIEhhc2guZ28oJy9wYWdlLzEnKTsKICoqLwoKKGZ1bmN0aW9uKCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhc2hlcyA9IHt9LAoJcmVnZXhwID0ge30sCgloaXN0b3J5ID0gW10sCglmcmVxID0gMTAwLAoJbnVtID0gMCwKCXB1c2hTdGF0ZSA9IGZhbHNlLAoJdGltZXIgPSBudWxsLAoJY3VycmVudFVybCA9IG51bGwsCgoJZnJlZXplID0gZnVuY3Rpb24ob2JqKSB7CgkJaWYgKE9iamVjdC5mcmVlemUpIHJldHVybiBPYmplY3QuZnJlZXplKG9iaik7CgkJcmV0dXJuIG9iajsKCX0sCgoJZ2V0SGFzaFBhcnRzID0gZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCcjJyk7Cgl9LAoKCXN0YXJ0VGltZXIgPSBmdW5jdGlvbigpIHsKCQkKCQlpZiAoIXRpbWVyKQoJCQl0aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewoJCQkJaWYgKG51bT4wICYmIGN1cnJlbnRVcmwhPXdpbmRvdy5sb2NhdGlvbi5ocmVmKSB7CgkJCQkJY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwoJCQkJCXdpbmRvdy5IYXNoLmNoZWNrKCk7CgkJCQl9CgkJCX0sIGZyZXEpOwoKCX0sCgoJc3RvcFRpbWVyID0gZnVuY3Rpb24oKSB7CgoJCWlmICh0aW1lcikgewoJCQljbGVhckludGVydmFsKHRpbWVyKTsKCQkJdGltZXIgPSBudWxsOwoJCX0KCgl9OwoKd2luZG93Lkhhc2ggPSBmcmVlemUoewoKCQlwdXNoU3RhdGU6IGZ1bmN0aW9uKHllcykgewoKCQkJaWYgKHdpbmRvdy5oaXN0b3J5ICYmIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSkKCQkJCXB1c2hTdGF0ZSA9IHllczsKCgkJCXJldHVybiB0aGlzOwoJCX0sCgoJCWZyYWdtZW50OiBmdW5jdGlvbigpIHsKCQkJCgkJCXZhciBoYXNoID0gZ2V0SGFzaFBhcnRzKCk7CgkJCXJldHVybiAocHVzaFN0YXRlKSA/CgkJCQl3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAoKGhhc2hbMV0pID8gJyMnICsgaGFzaFsxXSA6ICcnKQoJCQkJOiBoYXNoWzFdIHx8ICcnOwoKCQl9LAoJCQoJCWdldDogZnVuY3Rpb24ocGF0aCwgcGFyYW1zKSB7CgkJCQoJCQl2YXIgcCwgZnJhZ21lbnQgPSAnJywgcGFyYW1ldGVycyA9IFtdOwoKCQkJZm9yKHAgaW4gcGFyYW1zKSB7CgkJCQlpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocCkpCgkJCQkJY29udGludWU7CgkJCQlwYXJhbWV0ZXJzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHApICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtc1twXSkpOwoJCQl9CgoJCQlpZiAocGFyYW1ldGVycy5sZW5ndGg+MCkKCQkJCXBhcmFtZXRlcnMgPSAnPycgKyBwYXJhbWV0ZXJzLmpvaW4oJyYnKTsKCQkKCQkJcmV0dXJuIChwdXNoU3RhdGUpID8gcGF0aCArIHBhcmFtZXRlcnMgOgoJCQkJZ2V0SGFzaFBhcnRzKClbMF0gKyAnIycgKyBwYXRoICsgcGFyYW1ldGVyczsKCgkJfSwKCgkJZ286IGZ1bmN0aW9uKGhhc2gsIHBhcmFtcykgewoKCQkJaWYgKHRoaXMuZnJhZ21lbnQoKSE9aGFzaCkgewoJCQkJdmFyIHRvID0gdGhpcy5nZXQoaGFzaCwgcGFyYW1zKTsKCgkJCQlpZiAocHVzaFN0YXRlKQoJCQkJCXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBkb2N1bWVudC50aXRsZSwgdG8pOwoJCQkJZWxzZQoJCQkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdG87CgkJCQl9CgkJCQoJCQlyZXR1cm4gdGhpczsKCQl9LAoKCQl1cGRhdGU6IGZ1bmN0aW9uICgpIHsKCQkJCgkJCWN1cnJlbnRVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKCQkJcmV0dXJuIHRoaXM7CgoJCX0sCgoJCW9uOiBmdW5jdGlvbihoYXNoLCBjYWxsYmFjaywgdGl0bGUpIHsKCgkJCWlmICghaGFzaGVzW2hhc2hdKQoJCQkJaGFzaGVzW2hhc2hdID0ge3RpdGxlOiB0aXRsZSwgbGlzdGVuZXJzOiBbXX07CgkJCQoJCQloYXNoZXNbaGFzaF0ubGlzdGVuZXJzLnB1c2goY2FsbGJhY2spOwoJCQludW0rKzsKCQkJc3RhcnRUaW1lcigpOwoKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCgkJY2hlY2s6IGZ1bmN0aW9uKCkgewoKCQkJdmFyIGksCgkJCQloYXNoLAoJCQkJcGFydHMsCgkJCQlmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQoKTsKCgoJCQlmb3IgKGhhc2ggaW4gaGFzaGVzKSB7CgkJCQlpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoYXNoZXMsIGhhc2gpKQoJCQkJCWNvbnRpbnVlOwoKCQkJCWhhc2hlc1toYXNoXS5yZWdleHAgPSBoYXNoZXNbaGFzaF0ucmVnZXhwIHx8IG5ldyBSZWdFeHAoaGFzaCk7CgoJCQkJaWYgKChwYXJ0cyA9IGhhc2hlc1toYXNoXS5yZWdleHAuZXhlYyhmcmFnbWVudCkpKSB7CgkJCQkJaWYgKGhhc2hlc1toYXNoXS50aXRsZSkKCQkJCQkJZG9jdW1lbnQudGl0bGUgPSBoYXNoZXNbaGFzaF0udGl0bGU7CgoJCQkJCWZvciAoaSA9IDA7IGk8aGFzaGVzW2hhc2hdLmxpc3RlbmVycy5sZW5ndGg7IGkrKykKCQkJCQkJaWYgKGhhc2hlc1toYXNoXS5saXN0ZW5lcnNbaV0ueWVwKQoJCQkJCQkJaGFzaGVzW2hhc2hdLmxpc3RlbmVyc1tpXS55ZXAoZnJhZ21lbnQsIHBhcnRzKTsKCQkJCX0gZWxzZSB7CgkJCQkJZm9yIChpID0gMDsgaTxoYXNoZXNbaGFzaF0ubGlzdGVuZXJzLmxlbmd0aDsgaSsrKQoJCQkJCQlpZiAoaGFzaGVzW2hhc2hdLmxpc3RlbmVyc1tpXS5ub3ApCgkJCQkJCQloYXNoZXNbaGFzaF0ubGlzdGVuZXJzW2ldLm5vcChmcmFnbWVudCk7CgkJCQl9CgoJCQl9CgoJCQlyZXR1cm4gdGhpczsKCQl9Cn0pOwoKfSkoKTsK'></script>
<!--
	yep: ['../../lib/turn.js'],
	nope: ['../../lib/turn.html4.min.js'],
	both: ['../../lib/zoom.min.js', 'js/magazine.js', 'css/magazine.css'],
	-->

<!--	<script src='/fb/lib/turn.js'></script>	-->
<!--	<script src='data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UKICogdHVybmpzLmNvbQogKiB0dXJuanMuY29tL2xpY2Vuc2UudHh0CiAqCiAqIENvcHlyaWdodCAoQykgMjAxMiBFbW1hbnVlbCBHYXJjaWEKICogQWxsIHJpZ2h0cyByZXNlcnZlZAogKiovCgooZnVuY3Rpb24oJCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhczNkLAogIAogIGhhc1JvdCwKCiAgdmVuZG9yID0gJycsCiAgCiAgdmVyc2lvbiA9ICc0LjEuMCcsCgogIFBJID0gTWF0aC5QSSwKCiAgQTkwID0gUEkvMiwKCiAgaXNUb3VjaCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdywKCiAgbW91c2VFdmVudHMgPSAoaXNUb3VjaCkgPwogICAgewogICAgICBkb3duOiAndG91Y2hzdGFydCcsCiAgICAgIG1vdmU6ICd0b3VjaG1vdmUnLAogICAgICB1cDogJ3RvdWNoZW5kJywKICAgICAgb3ZlcjogJ3RvdWNoc3RhcnQnLAogICAgICBvdXQ6ICd0b3VjaGVuZCcKICAgIH0KICAgIDoKICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICAvLyBDb250YW5zdHMgdXNlZCBmb3IgZWFjaCBjb3JuZXIKICAvLyAgIHwgdGwgKiB0ciB8CiAgLy8gbCB8ICogICAgICogfCByCiAgLy8gICB8IGJsICogYnIgfAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnYmwnLCAndGwnXSwKICAgIGZvcndhcmQ6IFsnYnInLCAndHInXSwKICAgIGFsbDogWyd0bCcsICdibCcsICd0cicsICdicicsICdsJywgJ3InXQogIH0sCgogIC8vIERpc3BsYXkgdmFsdWVzCgogIGRpc3BsYXlzID0gWydzaW5nbGUnLCAnZG91YmxlJ10sCgogIC8vIERpcmVjdGlvbiB2YWx1ZXMKCiAgZGlyZWN0aW9ucyA9IFsnbHRyJywgJ3J0bCddLAoKICAvLyBEZWZhdWx0IG9wdGlvbnMKCiAgdHVybk9wdGlvbnMgPSB7CgogICAgLy8gRW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KCiAgICBhY2NlbGVyYXRpb246IHRydWUsCgogICAgLy8gRGlzcGxheQoKICAgIGRpc3BsYXk6ICdkb3VibGUnLAoKICAgIC8vIER1cmF0aW9uIG9mIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzCgogICAgZHVyYXRpb246IDYwMCwKCiAgICAvLyBGaXJzdCBwYWdlCgogICAgcGFnZTogMSwKICAgIAogICAgLy8gRW5hYmxlcyBncmFkaWVudHMKCiAgICBncmFkaWVudHM6IHRydWUsCgogICAgLy8gQ29ybmVycyB1c2VkIHdoZW4gdHVybmluZyB0aGUgcGFnZQoKICAgIHR1cm5Db3JuZXJzOiAnYmwsYnInLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMAoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCiAgICAvLyBEZWZpbmUgY29uc3RhbnRzCiAgICAKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKICAgIGhhc1JvdCA9IHJvdGF0aW9uQXZhaWxhYmxlKCk7CiAgICB2ZW5kb3IgPSBnZXRQcmVmaXgoKTsKCiAgICB2YXIgaSwgdGhhdCA9IHRoaXMsIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRpb25zID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRpb25zKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRpb25zOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlWm9vbSA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0aW9ucy5wYWdlcyB8fCAwOwogICAgZGF0YS5ldmVudEhhbmRsZXJzID0gewogICAgICB0b3VjaFN0YXJ0OiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaFN0YXJ0LCB0aGlzKSwKICAgICAgdG91Y2hNb3ZlOiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaE1vdmUsIHRoaXMpLAogICAgICB0b3VjaEVuZDogJC5wcm94eSh0dXJuTWV0aG9kcy5fdG91Y2hFbmQsIHRoaXMpLAogICAgICBzdGFydDogJC5wcm94eSh0dXJuTWV0aG9kcy5fZXZlbnRTdGFydCwgdGhpcykKICAgIH07CgoKCiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgZm9yIChpIGluIG9wdGlvbnMud2hlbikKICAgICAgICBpZiAoaGFzKGksIG9wdGlvbnMud2hlbikpCiAgICAgICAgICB0aGlzLmJpbmQoaSwgb3B0aW9ucy53aGVuW2ldKTsKCiAgICAvLyBTZXQgdGhlIGNzcwoKICAgIHRoaXMuY3NzKHtwb3NpdGlvbjogJ3JlbGF0aXZlJywgd2lkdGg6IG9wdGlvbnMud2lkdGgsIGhlaWdodDogb3B0aW9ucy5oZWlnaHR9KTsKCiAgICAvLyBTZXQgdGhlIGluaXRpYWwgZGlzcGxheQoKICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CgogICAgLy8gU2V0IHRoZSBkaXJlY3Rpb24KCiAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24hPT0nJykKICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CiAgICAKICAgIC8vIFByZXZlbnQgYmx1ZSBzY3JlZW4gcHJvYmxlbXMgb2Ygc3dpdGNoaW5nIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtb2RlCiAgICAvLyBCeSBmb3JjaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgZXZlcgoKICAgIGlmIChoYXMzZCAmJiAhaXNUb3VjaCAmJiBvcHRpb25zLmFjY2VsZXJhdGlvbikKICAgICAgdGhpcy50cmFuc2Zvcm0odHJhbnNsYXRlKDAsIDAsIHRydWUpKTsKCiAgICAvLyBBZGQgcGFnZXMgZnJvbSB0aGUgRE9NCgogICAgZm9yIChpID0gMDsgaTxjaC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoJChjaFtpXSkuYXR0cignaWdub3JlJykhPScxJykgewogICAgICAgIHRoaXMudHVybignYWRkUGFnZScsIGNoW2ldLCArK3BhZ2VOdW0pOwogICAgICB9CiAgICB9CgogICAgLy8gRXZlbnQgbGlzdGVuZXJzCgogICAgJCh0aGlzKS5iaW5kKG1vdXNlRXZlbnRzLmRvd24sIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaFN0YXJ0KS4KICAgICAgYmluZCgnZW5kJywgdHVybk1ldGhvZHMuX2V2ZW50RW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9ldmVudFByZXNzZWQpLgogICAgICBiaW5kKCdyZWxlYXNlZCcsIHR1cm5NZXRob2RzLl9ldmVudFJlbGVhc2VkKS4KICAgICAgYmluZCgnZmxpcCcsIHR1cm5NZXRob2RzLl9mbGlwKTsKCiAgICAkKHRoaXMpLnBhcmVudCgpLmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS5iaW5kKG1vdXNlRXZlbnRzLm1vdmUsIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaE1vdmUpLgogICAgICBiaW5kKG1vdXNlRXZlbnRzLnVwLCBkYXRhLmV2ZW50SGFuZGxlcnMudG91Y2hFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAvLyBUaGlzIGZsaXBib29rIGlzIHJlYWR5CgogICAgZGF0YS5kb25lID0gdHJ1ZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZSBmcm9tIGV4dGVybmFsIGRhdGEKCiAgYWRkUGFnZTogZnVuY3Rpb24oZWxlbWVudCwgcGFnZSkgewoKICAgIHZhciBjdXJyZW50UGFnZSwKICAgICAgY2xhc3NOYW1lLAogICAgICBpbmNQYWdlcyA9IGZhbHNlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGxhc3RQYWdlID0gZGF0YS50b3RhbFBhZ2VzKzE7CgogICAgaWYgKGRhdGEuZGVzdHJveWluZykKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFJlYWQgdGhlIHBhZ2UgbnVtYmVyIGZyb20gdGhlIGNsYXNzTmFtZSBvZiBgZWxlbWVudGAgLSBmb3JtYXQ6IHBbMC05XSsKCiAgICBpZiAoKGN1cnJlbnRQYWdlID0gL1xicChbMC05XSspXGIvLmV4ZWMoJChlbGVtZW50KS5hdHRyKCdjbGFzcycpKSkpCiAgICAgIHBhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZVsxXSwgMTApOwoKICAgIGlmIChwYWdlKSB7CiAgICAgIAogICAgICBpZiAocGFnZT09bGFzdFBhZ2UpCiAgICAgICAgaW5jUGFnZXMgPSB0cnVlOwogICAgICBlbHNlIGlmIChwYWdlPmxhc3RQYWdlKQogICAgICAgIHRocm93IHR1cm5FcnJvcignUGFnZSAiJytwYWdlKyciIGNhbm5vdCBiZSBpbnNlcnRlZCcpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBwYWdlID0gbGFzdFBhZ2U7CiAgICAgIGluY1BhZ2VzID0gdHJ1ZTsKCiAgICB9CgogICAgaWYgKHBhZ2U+PTEgJiYgcGFnZTw9bGFzdFBhZ2UpIHsKCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICAgIGNsYXNzTmFtZSA9IChwYWdlJTIpID8gJyBvZGQnIDogJyBldmVuJzsKICAgICAgZWxzZQogICAgICAgIGNsYXNzTmFtZSA9ICcnOwoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIGlmIChkYXRhLmRvbmUpCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAvLyBNb3ZlIHBhZ2VzIGlmIGl0J3MgbmVjZXNzYXJ5CiAgICAgIGlmIChwYWdlIGluIGRhdGEucGFnZU9ianMpCiAgICAgICAgdHVybk1ldGhvZHMuX21vdmVQYWdlcy5jYWxsKHRoaXMsIHBhZ2UsIDEpOwoKICAgICAgLy8gSW5jcmVhc2UgdGhlIG51bWJlciBvZiBwYWdlcwogICAgICBpZiAoaW5jUGFnZXMpCiAgICAgICAgZGF0YS50b3RhbFBhZ2VzID0gbGFzdFBhZ2U7CgogICAgICAvLyBBZGQgZWxlbWVudAogICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdID0gJChlbGVtZW50KS4KICAgICAgICBjc3MoeydmbG9hdCc6ICdsZWZ0J30pLgogICAgICAgIGFkZENsYXNzKCdwYWdlIHAnICsgcGFnZSArIGNsYXNzTmFtZSk7CgogICAgICBpZiAoIWhhc0hhcmRQYWdlKCkgJiYgIGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2hhcmQnKSkgewogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0ucmVtb3ZlQ2xhc3MoJ2hhcmQnKTsKICAgICAgfQoKICAgICAgLy8gQWRkIHBhZ2UKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgLy8gV3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXSA9ICQoJzxkaXYvPicsCiAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KTsKCiAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhpcyBmbGlwYm9vawogICAgICAgICAgdGhpcy5hcHBlbmQoZGF0YS5wYWdlV3JhcFtwYWdlXSk7CgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VQbGFjZVtwYWdlXSkgewogICAgICAgICAgICAKICAgICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwogICAgICAgICAgICAvLyBNb3ZlIGBwYWdlT2Jqc1twYWdlXWAgdG8gd3JhcHBlcgogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmFwcGVuZFRvKGRhdGEucGFnZVdyYXBbcGFnZV0pOwogICAgICAgICAgCiAgICAgICAgIH0KCiAgICAgICAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIHBhZ2UKICAgICAgICAgIHZhciBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICB9CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9PSBwYWdlKSB7CgogICAgICAgICAvLyBJZiB0aGUgcGFnZSBpc24ndCBpbiBhbm90aGVyIHBsYWNlLCBjcmVhdGUgdGhlIGZsaXAgZWZmZWN0CiAgICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZUZsaXAuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIH0KICAgICAgICAKICAgICAgfSBlbHNlIHsKCiAgICAgICAgLy8gUGxhY2UKICAgICAgICBkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9IDA7CgogICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IGZyb20gdGhlIERPTQogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICAgIH0KCiAgfSwKCiAgLy8gQ2hlY2tzIGlmIGEgcGFnZSBpcyBpbiBtZW1vcnkKICAKICBoYXNQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcmV0dXJuIGhhcyhwYWdlLCB0aGlzLmRhdGEoKS5wYWdlT2Jqcyk7CiAgCiAgfSwKCiAgLy8gQ2VudGVycyB0aGUgZmxpcGJvb2sKCiAgY2VudGVyOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHNpemUgPSAkKHRoaXMpLnR1cm4oJ3NpemUnKSwKICAgICAgbGVmdCA9IDA7CgogICAgaWYgKCFkYXRhLm5vQ2VudGVyKSB7CiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICB9CiAgICAgIAogICAgICB9CgogICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBmbGlwYm9vayA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgZXZlbnRzID0gWwogICAgICAgICdlbmQnLCAnZmlyc3QnLCAnZmxpcCcsICdsYXN0JywgJ3ByZXNzZWQnLAogICAgICAgICdyZWxlYXNlZCcsICdzdGFydCcsICd0dXJuaW5nJywgJ3R1cm5lZCcsCiAgICAgICAgJ3pvb21pbmcnLCAnbWlzc2luZyddOwoKICAgIGlmICh0cmlnZ2VyKCdkZXN0cm95aW5nJywgdGhpcyk9PSdwcmV2ZW50ZWQnKQogICAgICByZXR1cm47CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkLmVhY2goZXZlbnRzLCBmdW5jdGlvbihpbmRleCwgZXZlbnROYW1lKSB7CiAgICAgIGZsaXBib29rLnVuYmluZChldmVudE5hbWUpOwogICAgfSk7CgogICAgdGhpcy5wYXJlbnQoKS51bmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS51bmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoTW92ZSkuCiAgICAgIHVuYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAgIAogICAgICBpZiAodHJpZ2dlcignem9vbWluZycsIHRoaXMsIFtuZXdab29tLCBkYXRhLnpvb21dKT09J3ByZXZlbnRlZCcpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIAogICAgICB2YXIgc2l6ZSA9IHRoaXMudHVybignc2l6ZScpLAogICAgICAgIGN1cnJlbnRWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICAgICAvKi4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7Ki8KCiAgICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwogICAgICAvKmVsc2UKICAgICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogc2l6ZS53aWR0aCAqIGl6IC8gMiAtIG5ld1dpZHRoIC8gMn0pOyovCgogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaTxjdXJyZW50Vmlldy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjdXJyZW50Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSE9ZGF0YS56b29tKSB7CiAgCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgICBjdXJyZW50Vmlld1tpXSwKICAgICAgICAgICAgY3VycmVudFZpZXcsCiAgICAgICAgICAgIGRhdGEucGFnZVpvb21bY3VycmVudFZpZXdbaV1dLAogICAgICAgICAgICBkYXRhLnpvb21dKTsKCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSA9IGRhdGEuem9vbTsKICAgICAgfQogICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLnpvb207CgogIH0sCgogIC8vIEdldHMgdGhlIHNpemUgb2YgYSBwYWdlCgogIF9wYWdlU2l6ZTogZnVuY3Rpb24ocGFnZSwgcG9zaXRpb24pIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwcm9wID0ge307CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKCiAgICAgIHByb3Aud2lkdGggPSB0aGlzLndpZHRoKCk7CiAgICAgIHByb3AuaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHByb3AudG9wID0gMDsKICAgICAgICBwcm9wLmxlZnQgPSAwOwogICAgICAgIHByb3AucmlnaHQgPSAnYXV0byc7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdmFyIHBhZ2VXaWR0aCA9IHRoaXMud2lkdGgoKS8yLAogICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ293bi1zaXplJykpIHsKICAgICAgICBwcm9wLndpZHRoID0gZGF0YS5wYWdlT2Jqc1twYWdlXS53aWR0aCgpOwogICAgICAgIHByb3AuaGVpZ2h0ID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oZWlnaHQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcm9wLndpZHRoID0gcGFnZVdpZHRoOwogICAgICAgIHByb3AuaGVpZ2h0ID0gcGFnZUhlaWdodDsKICAgICAgfQogICAgICAKICAgICAgaWYgKHBvc2l0aW9uKSB7CiAgICAgICAgdmFyIG9kZCA9IHBhZ2UlMjsKICAgICAgICBwcm9wLnRvcCA9IChwYWdlSGVpZ2h0LXByb3AuaGVpZ2h0KS8yOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9IHBhZ2VXaWR0aC1wcm9wLndpZHRoOwogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gJ2F1dG8nOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9ICdhdXRvJzsKCiAgICAgICAgfQogICAgICAKICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcm9wOwoKICB9LAoKICAvLyBQcmVwYXJlcyB0aGUgZmxpcCBlZmZlY3QgZm9yIGEgcGFnZQoKICBfbWFrZUZsaXA6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICghZGF0YS5wYWdlc1twYWdlXSAmJiBkYXRhLnBhZ2VQbGFjZVtwYWdlXT09cGFnZSkgewogICAgICAKICAgICAgdmFyIHNpbmdsZSA9IGRhdGEuZGlzcGxheT09J3NpbmdsZScsCiAgICAgICAgb2RkID0gcGFnZSUyOwoKICAgICAgZGF0YS5wYWdlc1twYWdlXSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgY3NzKHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UpKS4KICAgICAgICBmbGlwKHsKICAgICAgICAgIHBhZ2U6IHBhZ2UsCiAgICAgICAgICBuZXh0OiAob2RkIHx8IHNpbmdsZSkgPyBwYWdlKzEgOiBwYWdlLTEsCiAgICAgICAgICB0dXJuOiB0aGlzCiAgICAgICAgfSkuCiAgICAgICAgZmxpcCgnZGlzYWJsZScsIGRhdGEuZGlzYWJsZWQpOwoKICAgICAgICAvLyBJc3N1ZSBhYm91dCB6LWluZGV4CiAgICAgICAgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGF0YS5wYWdlWm9vbVtwYWdlXSA9IGRhdGEuem9vbTsKICAgICAgICAKICAgIH0KCiAgICByZXR1cm4gZGF0YS5wYWdlc1twYWdlXTsKICB9LAoKICAvLyBNYWtlcyBwYWdlcyB3aXRoaW4gYSByYW5nZQoKICBfbWFrZVJhbmdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgcmFuZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS50b3RhbFBhZ2VzPDEpCiAgICAgIHJldHVybjsKCiAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICBmb3IgKHBhZ2UgPSByYW5nZVswXTsgcGFnZTw9cmFuZ2VbMV07IHBhZ2UrKykKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgfSwKCiAgLy8gUmV0dXJucyBhIHJhbmdlIG9mIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBET00KICAvLyBFeGFtcGxlOgogIC8vIC0gcGFnZSBpbiB0aGUgY3VycmVudCB2aWV3LCByZXR1cm4gdHJ1ZQogIC8vICogcGFnZSBpcyBpbiB0aGUgcmFuZ2UsIHJldHVybiB0cnVlCiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UKICAvLwogIC8vIDEgMi0zIDQtNSA2LTcgOC05IDEwLTExIDEyLTEzCiAgLy8gICAqKiAgKiogIC0tICAgKiogICoqCgogIHJhbmdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIHJlbWFpbmluZ1BhZ2VzLCBsZWZ0LCByaWdodCwgdmlldywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgICAgcGFnZSA9IHBhZ2UgfHwgZGF0YS50cGFnZSB8fCBkYXRhLnBhZ2UgfHwgMTsKICAgICAgdmlldyA9IHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgcGFnZSk7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicrcGFnZSsnIiBpcyBub3QgYSB2YWxpZCBwYWdlJyk7CgogICAgCiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdIHx8IHZpZXdbMF07CiAgICAgIAogICAgICBpZiAodmlld1swXT49MSAmJiB2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpIHsKCiAgICAgICAgcmVtYWluaW5nUGFnZXMgPSBNYXRoLmZsb29yKChwYWdlc0luRE9NLTIpLzIpOwoKICAgICAgICBpZiAoZGF0YS50b3RhbFBhZ2VzLXZpZXdbMV0gPiB2aWV3WzBdKSB7CiAgICAgICAgICBsZWZ0ID0gTWF0aC5taW4odmlld1swXS0xLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICByaWdodCA9IDIqcmVtYWluaW5nUGFnZXMtbGVmdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmlnaHQgPSBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSwgcmVtYWluaW5nUGFnZXMpOwogICAgICAgICAgbGVmdCA9IDIqcmVtYWluaW5nUGFnZXMtcmlnaHQ7CiAgICAgICAgfQoKICAgICAgfSBlbHNlIHsKICAgICAgICBsZWZ0ID0gcGFnZXNJbkRPTS0xOwogICAgICAgIHJpZ2h0ID0gcGFnZXNJbkRPTS0xOwogICAgICB9CgogICAgICByZXR1cm4gW01hdGgubWF4KDEsIHZpZXdbMF0tbGVmdCksCiAgICAgICAgICBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMsIHZpZXdbMV0rcmlnaHQpXTsKCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiBhIHBhZ2UgaXMgd2l0aGluIHRoZSByYW5nZSBvZiBgcGFnZXNJbkRPTWAgZnJvbSB0aGUgY3VycmVudCB2aWV3CgogIF9uZWNlc3NQYWdlOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIGlmIChwYWdlPT09MCkKICAgICAgcmV0dXJuIHRydWU7CgogICAgdmFyIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScpOwoKICAgIHJldHVybiB0aGlzLmRhdGEoKS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhIHBhZ2UKCiAgcmVtb3ZlUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgLy8gRGVsZXRlIGFsbCB0aGUgcGFnZXMKICAgIGlmIChwYWdlPT0nKicpIHsKICAgICAgCiAgICAgIHdoaWxlIChkYXRhLnRvdGFsUGFnZXMhPT0wKSB7CiAgICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgICAKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pIHsKCiAgICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAgIC8vIFJlbW92ZSBgcGFnZWAKICAgICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgICB9CgogICAgICAvLyBNb3ZlIHRoZSBwYWdlcwogICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgLTEpOwoKICAgICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgICAgZGF0YS50b3RhbFBhZ2VzID0gZGF0YS50b3RhbFBhZ2VzLTE7CgogICAgICAvLyBDaGVjayB0aGUgY3VycmVudCB2aWV3CgogICAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykgewoKICAgICAgIGRhdGEucGFnZSA9IG51bGw7CiAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEudG90YWxQYWdlcyk7CgogICAgICB9IGVsc2UgewoKICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICAKICB9LAoKICAvLyBNb3ZlcyBwYWdlcwoKICBfbW92ZVBhZ2VzOiBmdW5jdGlvbihmcm9tLCBjaGFuZ2UpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2luZ2xlID0gZGF0YS5kaXNwbGF5PT0nc2luZ2xlJywKICAgICAgbW92ZSA9IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICAgICAgdmFyIG5leHQgPSBwYWdlICsgY2hhbmdlLAogICAgICAgICAgb2RkID0gbmV4dCUyLAogICAgICAgICAgY2xhc3NOYW1lID0gKG9kZCkgPyAnIG9kZCAnIDogJyBldmVuICc7CgogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1tuZXh0XSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgICAgIHJlbW92ZUNsYXNzKCdwJyArIHBhZ2UgKyAnIG9kZCBldmVuJykuCiAgICAgICAgICAgIGFkZENsYXNzKCdwJyArIG5leHQgKyBjbGFzc05hbWUpOwoKICAgICAgICBpZiAoZGF0YS5wYWdlUGxhY2VbcGFnZV0gJiYgZGF0YS5wYWdlV3JhcFtwYWdlXSkgewoKICAgICAgICAgIGRhdGEucGFnZVBsYWNlW25leHRdID0gbmV4dDsKICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW25leHRdLmhhc0NsYXNzKCdmaXhlZCcpKQogICAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXS4KICAgICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGF0LCBuZXh0LCB0cnVlKSkuCiAgICAgICAgICAgICAgYXR0cigncGFnZScsIG5leHQpOwogICAgICAKICAgICAgICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgICAgICAgZGF0YS5wYWdlc1tuZXh0XSA9IGRhdGEucGFnZXNbcGFnZV0uCiAgICAgICAgICAgICAgICBmbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgICBwYWdlOiBuZXh0LAogICAgICAgICAgICAgICAgICBuZXh0OiAoc2luZ2xlIHx8IG9kZCkgPyBuZXh0KzEgOiBuZXh0LTEKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGNoYW5nZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VzW3BhZ2VdOwogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5PT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CgogICAgfSBlbHNlIHsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlzcGxheSwgZGlzcGxheXMpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJyInK2Rpc3BsYXkgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlzcGxheScpOwogICAgICAKICAgICAgc3dpdGNoKGRpc3BsYXkpIHsKICAgICAgICBjYXNlICdzaW5nbGUnOgoKICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFsIHBhZ2UgdG8gdXNlIGFzIGZvbGRlZCBwYWdlCgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICAgIGNzcyh7J292ZXJmbG93JzogJ2hpZGRlbid9KTsKCiAgICAgICAgICAgIGRhdGEucGFnZU9ianNbMF0gPSAkKCc8ZGl2IC8+JywKICAgICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICAgIGNzcyh7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgICAgICAgYXBwZW5kVG8odGhpcyk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hZGRDbGFzcygnc2hhZG93Jyk7CgogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RvdWJsZSc6CgogICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhbCBwYWdlCgogICAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pIHsKICAgICAgICAgICAgdGhpcy50dXJuKCdzdG9wJykuY3NzKHsnb3ZlcmZsb3cnOiAnJ30pOwogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1swXTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdzaGFkb3cnKTsKCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgCgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0KICAKICB9LAogIAogIC8vIEdldHMgYW5kIHNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpcGJvb2sKCiAgZGlyZWN0aW9uOiBmdW5jdGlvbihkaXIpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkaXI9PT11bmRlZmluZWQpIHsKCiAgICAgIHJldHVybiBkYXRhLmRpcmVjdGlvbjsKCiAgICB9IGVsc2UgewoKICAgICAgZGlyID0gZGlyLnRvTG93ZXJDYXNlKCk7CgogICAgICBpZiAoJC5pbkFycmF5KGRpciwgZGlyZWN0aW9ucyk9PS0xKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicgKyBkaXIgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlyZWN0aW9uJyk7CgogICAgICBpZiAoZGlyPT0ncnRsJykgewogICAgICAgICQodGhpcykuYXR0cignZGlyJywgJ2x0cicpLgogICAgICAgICAgY3NzKHtkaXJlY3Rpb246ICdsdHInfSk7CiAgICAgIH0KCiAgICAgIGRhdGEuZGlyZWN0aW9uID0gZGlyOwoKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCAkKHRoaXMpLndpZHRoKCksICQodGhpcykuaGVpZ2h0KCkpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIERldGVjdHMgYW5pbWF0aW9uCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCBhY3RpdmF0ZWQgY29ybmVyCgogIGNvcm5lcjogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciBjb3JuZXIsCiAgICAgIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlcykgewogICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgIGlmICgoY29ybmVyID0gZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdjb3JuZXInKSkpIHsKICAgICAgICAgIHJldHVybiBjb3JuZXI7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9LAoKICAvLyBHZXRzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgZmxpcGJvb2sKCiAgZGF0YTogZnVuY3Rpb24oKSB7CiAgICAKICAgIHJldHVybiB0aGlzLmRhdGEoKTsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGRhdGEuZGlzYWJsZWQgPSBkaXNhYmxlPT09dW5kZWZpbmVkIHx8IGRpc2FibGU9PT10cnVlOwoKICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgIChkYXRhLmRpc2FibGVkKSA/IHRydWUgOiAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCB2aWV3KT09LTEpOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoPT09dW5kZWZpbmVkIHx8IGhlaWdodD09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHt3aWR0aDogdGhpcy53aWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCl9OwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIHZhciBwYWdlLCBwcm9wLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykgPyB3aWR0aC8yIDogd2lkdGg7CgogICAgICB0aGlzLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pCiAgICAgICAgZGF0YS5wYWdlT2Jqc1swXS5jc3Moe3dpZHRoOiBwYWdlV2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKSBjb250aW51ZTsKCiAgICAgICAgcHJvcCA9IHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UsIHRydWUpOwoKICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyhwcm9wKTsKICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfQogIH0sCgogIC8vIFJlc2l6ZXMgZWFjaCBwYWdlCgogIHJlc2l6ZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5wYWdlc1swXSkgewogICAgICBkYXRhLnBhZ2VXcmFwWzBdLmNzcyh7bGVmdDogLXRoaXMud2lkdGgoKX0pOwogICAgICBkYXRhLnBhZ2VzWzBdLmZsaXAoJ3Jlc2l6ZScsIHRydWUpOwogICAgfQoKICAgIGZvciAocGFnZSA9IDE7IHBhZ2UgPD0gZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CgogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhbiBhbmltYXRpb24gZnJvbSB0aGUgY2FjaGUKCiAgX3JlbW92ZU12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGksIGRhdGEgPSB0aGlzLmRhdGEoKTsKICAgICAgCiAgICBmb3IgKGk9MDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykKICAgICAgaWYgKGRhdGEucGFnZU12W2ldPT1wYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlTXYuc3BsaWNlKGksIDEpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgcmV0dXJuIGZhbHNlOwoKICB9LAoKICAvLyBBZGRzIGFuIGFuaW1hdGlvbiB0byB0aGUgY2FjaGUKICAKICBfYWRkTXY6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9yZW1vdmVNdi5jYWxsKHRoaXMsIHBhZ2UpOwogICAgZGF0YS5wYWdlTXYucHVzaChwYWdlKTsKCiAgfSwKCiAgLy8gR2V0cyBpbmRleGVzIGZvciBhIHZpZXcKCiAgX3ZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAKICAgIHBhZ2UgPSBwYWdlIHx8IGRhdGEucGFnZTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIChwYWdlJTIpID8gW3BhZ2UtMSwgcGFnZV0gOiBbcGFnZSwgcGFnZSsxXTsKICAgIGVsc2UKICAgICAgcmV0dXJuIFtwYWdlXTsKCiAgfSwKCiAgLy8gR2V0cyBhIHZpZXcKCiAgdmlldzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICByZXR1cm4gWyh2aWV3WzBdPjApID8gdmlld1swXSA6IDAsCiAgICAgICAgKHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgPyB2aWV3WzFdIDogMF07CiAgICBlbHNlCiAgICAgIHJldHVybiBbKHZpZXdbMF0+MCAmJiB2aWV3WzBdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1swXSA6IDBdOwoKICB9LAoKICAvLyBTdG9wcyBhbmltYXRpb25zCgogIHN0b3A6IGZ1bmN0aW9uKGlnbm9yZSwgYW5pbWF0ZSkgewoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpKSB7CiAgCiAgICAgIHZhciBpLCBvcHRzLCBwYWdlLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIGlmIChkYXRhLnRwYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlID0gZGF0YS50cGFnZTsKICAgICAgICBkZWxldGUgZGF0YVsndHBhZ2UnXTsKICAgICAgfQoKICAgICAgZm9yIChpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewoKICAgICAgICBpZiAoIWRhdGEucGFnZU12W2ldIHx8IGRhdGEucGFnZU12W2ldPT09aWdub3JlKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIHBhZ2UgPSBkYXRhLnBhZ2VzW2RhdGEucGFnZU12W2ldXTsKICAgICAgICBvcHRzID0gcGFnZS5kYXRhKCkuZi5vcHRzOwoKICAgICAgICBwYWdlLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgYW5pbWF0ZSk7CgogICAgICAgIGlmICghYW5pbWF0ZSkKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CgogICAgICB9CiAgICB9CiAgICAKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzCgogIHBhZ2VzOiBmdW5jdGlvbihwYWdlcykgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHBhZ2VzKSB7CgogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2U+cGFnZXM7IHBhZ2UtLSkKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgfQoKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBwYWdlczsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEucGFnZSk7CgogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgdmFyIHAsCiAgICAgICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJywgcGFnZSksCiAgICAgICAgbWlzc2luZyA9IFtdOwoKICAgIGZvciAocCA9IHJhbmdlWzBdOyBwPD1yYW5nZVsxXTsgcCsrKSB7CiAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1twXSkKICAgICAgICBtaXNzaW5nLnB1c2gocCk7CiAgICB9CgogICAgaWYgKG1pc3NpbmcubGVuZ3RoPjApCiAgICAgIHRoaXMudHJpZ2dlcignbWlzc2luZycsIFttaXNzaW5nXSk7CgogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgCiAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaTxuZXdWaWV3Lmxlbmd0aDsgaSsrKSB7CgogICAgICBpZiAobmV3Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dIT1kYXRhLnpvb20pIHsKICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgbmV3Vmlld1tpXSwKICAgICAgICAgIG5ld1ZpZXcsCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dLAogICAgICAgICAgZGF0YS56b29tXSk7CgogICAgICAgIGRhdGEucGFnZVpvb21bbmV3Vmlld1tpXV0gPSBkYXRhLnpvb207CgogICAgICB9CiAgICB9CgogICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl9tYWtlUmFuZ2UuY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbCh0aGlzKTsKICAgIHRoaXMudHJpZ2dlcigndHVybmVkJywgW3BhZ2UsIG5ld1ZpZXddKTsKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgaWYgKGRhdGEub3B0cy5hdXRvQ2VudGVyKQogICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwoKICB9LAogIAogIC8vIFR1cm5zIHRoZSBwYWdlCgogIF90dXJuUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBjdXJyZW50LAogICAgICBuZXh0LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHBsYWNlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV0sCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKCiAgICBpZiAoZGF0YS5wYWdlIT1wYWdlKSB7CgogICAgICB2YXIgY3VycmVudFBhZ2UgPSBkYXRhLnBhZ2U7CgogICAgICBpZiAodHJpZ2dlcigndHVybmluZycsIHRoaXMsIFtwYWdlLCBuZXdWaWV3XSk9PSdwcmV2ZW50ZWQnKSB7CgogICAgICAgIGlmIChjdXJyZW50UGFnZT09ZGF0YS5wYWdlICYmICQuaW5BcnJheShwbGFjZSwgZGF0YS5wYWdlTXYpIT0tMSkKICAgICAgICAgIGRhdGEucGFnZXNbcGxhY2VdLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuOwoKICAgICAgfQoKICAgICAgaWYgKCQuaW5BcnJheSgxLCBuZXdWaWV3KSE9LTEpCiAgICAgICAgdGhpcy50cmlnZ2VyKCdmaXJzdCcpOwogICAgICBpZiAoJC5pbkFycmF5KGRhdGEudG90YWxQYWdlcywgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignbGFzdCcpOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgewogICAgICBjdXJyZW50ID0gdmlld1swXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMV0gJiYgcGFnZT52aWV3WzFdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzFdOwogICAgICBuZXh0ID0gbmV3Vmlld1swXTsKICAgIH0gZWxzZSBpZiAodmlld1swXSAmJiBwYWdlPHZpZXdbMF0pIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzFdOwogICAgfQoKICAgIHZhciBvcHRzQ29ybmVycyA9IGRhdGEub3B0cy50dXJuQ29ybmVycy5zcGxpdCgnLCcpLAogICAgICBmbGlwRGF0YSA9IGRhdGEucGFnZXNbY3VycmVudF0uZGF0YSgpLmYsCiAgICAgIG9wdHMgPSBmbGlwRGF0YS5vcHRzLAogICAgICBhY3R1YWxQb2ludCA9IGZsaXBEYXRhLnBvaW50OwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIGRhdGEudHBhZ2UgPSBuZXh0OwoKICAgIGlmIChvcHRzLm5leHQhPW5leHQpIHsKICAgICAgb3B0cy5uZXh0ID0gbmV4dDsKICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICB9CgogICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICBmbGlwRGF0YS5wb2ludCA9IGFjdHVhbFBvaW50OwogICAgCiAgICBpZiAoZmxpcERhdGEuZWZmZWN0PT0naGFyZCcpCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAocGFnZT5jdXJyZW50KSA/ICdyJyA6ICdsJyk7CiAgICAgIGVsc2UKICAgICAgICBkYXRhLnBhZ2VzW2N1cnJlbnRdLmZsaXAoJ3R1cm5QYWdlJywKICAgICAgICAgIChwYWdlPmN1cnJlbnQpID8gJ2wnIDogJ3InKTsKICAgIGVsc2UgewogICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKQogICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgb3B0c0Nvcm5lcnNbKHBhZ2U+Y3VycmVudCkgPyAxIDogMF0pOwogICAgICBlbHNlCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICBvcHRzQ29ybmVyc1socGFnZT5jdXJyZW50KSA/IDAgOiAxXSk7CiAgICB9CgogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgYSBwYWdlCgogIHBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gZGF0YS5wYWdlOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIWRhdGEuZGVzdHJveWluZykgewoKICAgICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSwgMTApOwoKICAgICAgICBpZiAocGFnZT4wICYmIHBhZ2U8PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICAgIGlmIChwYWdlIT1kYXRhLnBhZ2UpIHsKICAgICAgICAgICAgaWYgKCFkYXRhLmRvbmUgfHwgJC5pbkFycmF5KHBhZ2UsIHRoaXMudHVybigndmlldycpKSE9LTEpCiAgICAgICAgICAgICAgdHVybk1ldGhvZHMuX2ZpdFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgICAgfQogICAgICAKICAgICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGUgcGFnZSAnICsgcGFnZSArICcgZG9lcyBub3QgZXhpc3QnKTsKCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIG5leHQgdmlldwoKICBuZXh0OiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywgTWF0aC5taW4odGhpcy5kYXRhKCkudG90YWxQYWdlcywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5wb3AoKSArIDEpKTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgcHJldmlvdXMgdmlldwoKICBwcmV2aW91czogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMudHVybigncGFnZScsIE1hdGgubWF4KDEsCiAgICAgIHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgdGhpcy5kYXRhKCkucGFnZSkuc2hpZnQoKSAtIDEpKTsKCiAgfSwKCiAgLy8gU2hvd3MgYSBwZWVsaW5nIGNvcm5lcgoKICBwZWVsOiBmdW5jdGlvbihjb3JuZXIsIGFuaW1hdGUpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGFuaW1hdGUgPSAoYW5pbWF0ZT09PXVuZGVmaW5lZCkgPyB0cnVlIDogYW5pbWF0ZT09PXRydWU7CgogICAgaWYgKGNvcm5lcj09PWZhbHNlKSB7CiAgICAgIAogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBudWxsLCBhbmltYXRlKTsKCiAgICB9IGVsc2UgewogICAgCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGRhdGEucGFnZXNbZGF0YS5wYWdlXS5mbGlwKCdwZWVsJywgY29ybmVyLCBhbmltYXRlKTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHZhciBwYWdlOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1swXSA6IHZpZXdbMV07CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1sxXSA6IHZpZXdbMF07CgogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncGVlbCcsIGNvcm5lciwgYW5pbWF0ZSk7CgogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIC8vIEFkZHMgYSBtb3Rpb24gdG8gdGhlIGludGVybmFsIGxpc3QKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2FkZE1vdGlvblBhZ2U6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBvcHRzID0gJCh0aGlzKS5kYXRhKCkuZi5vcHRzLAogICAgICB0dXJuID0gb3B0cy50dXJuLAogICAgICBkZCA9IHR1cm4uZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9hZGRNdi5jYWxsKHR1cm4sIG9wdHMucGFnZSk7CgogIH0sCgogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpLAogICAgICBhY3R1YWxab29tID0gZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGFjdHVhbFpvb20gJiYgYWN0dWFsWm9vbSE9ZGF0YS56b29tKSB7CiAgICAgIAogICAgICBvcHRzLnR1cm4udHJpZ2dlcignem9vbWVkJyxbCiAgICAgICAgb3B0cy5wYWdlLAogICAgICAgIG9wdHMudHVybi50dXJuKCd2aWV3Jywgb3B0cy5wYWdlKSwKICAgICAgICBhY3R1YWxab29tLAogICAgICAgIGRhdGEuem9vbV0pOwoKICAgICAgZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdID0gZGF0YS56b29tOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJyAmJiBjb3JuZXIpIHsKCiAgICAgIGlmICgoY29ybmVyLmNoYXJBdCgxKT09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgfHwKICAgICAgICAoY29ybmVyLmNoYXJBdCgxKT09J3InICYmIGRhdGEuZGlyZWN0aW9uPT0ncnRsJykpCiAgICAgIHsKICAgICAgICAKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0PG9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UtMTsKICAgICAgICBvcHRzLmZvcmNlID0gdHJ1ZTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dD5vcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlKzE7CgogICAgICB9CgogICAgfQoKICAgIHR1cm5NZXRob2RzLl9hZGRNb3Rpb25QYWdlLmNhbGwoZS50YXJnZXQpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKG9wdHMudHVybik7CiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9ldmVudEVuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CiAgCiAgICB2YXIgdGhhdCA9ICQoZS50YXJnZXQpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuZiwKICAgICAgdHVybiA9IG9wdHMudHVybiwKICAgICAgZGQgPSB0dXJuLmRhdGEoKTsKCiAgICBpZiAodHVybmVkKSB7CgogICAgICB2YXIgdHBhZ2UgPSBkZC50cGFnZSB8fCBkZC5wYWdlOwogICAgCiAgICAgIGlmICh0cGFnZT09b3B0cy5uZXh0IHx8IHRwYWdlPT1vcHRzLnBhZ2UpIHsKICAgICAgICBkZWxldGUgZGQudHBhZ2U7CgogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodHVybiwgdHBhZ2UgfHwgb3B0cy5uZXh0LCB0cnVlKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0dXJuLCBvcHRzLnBhZ2UpOwogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodHVybik7CiAgICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgfQogICAgCiAgfSwKICAKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UHJlc3NlZDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gJChlLnRhcmdldCkuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGFnZXMgPSB0dXJuRGF0YS5wYWdlczsKICAgIAogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSB0cnVlOwoKICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UmVsZWFzZWQ6IGZ1bmN0aW9uKGUsIHBvaW50KSB7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0nYnInIHx8IHBvaW50LmNvcm5lcj09J3RyJykgPwogICAgICAgIHBvaW50Lng8cGFnZS53aWR0aCgpLzI6CiAgICAgICAgcG9pbnQueD5wYWdlLndpZHRoKCkvMjsKICAgIH0gZWxzZSB7CiAgICAgIG91dEFyZWEgPSBwb2ludC54PDAgfHwgcG9pbnQueD5wYWdlLndpZHRoKCk7CiAgICB9CgogICAgaWYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCktZGF0YS50aW1lPDIwMCB8fCBvdXRBcmVhKSB7CgogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHR1cm4sIGRhdGEub3B0cy5uZXh0KTsKCiAgICB9CgogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSBmYWxzZTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCiAgCiAgX2ZsaXA6IGZ1bmN0aW9uKGUpIHsKCiAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwoKICAgIHZhciBvcHRzID0gJChlLnRhcmdldCkuZGF0YSgpLmYub3B0czsKCiAgICBvcHRzLnR1cm4udHJpZ2dlcigndHVybicsIFtvcHRzLm5leHRdKTsKCiAgICBpZiAob3B0cy50dXJuLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXIpIHsKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CiAgICB9CgogIH0sCgogLy8KICBfdG91Y2hTdGFydDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgZm9yICh2YXIgcGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykgJiYKICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRTdGFydC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpPT09ZmFsc2UpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0sCiAgCiAgLy8KICBfdG91Y2hNb3ZlOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudE1vdmUuYXBwbHkoZGF0YS5wYWdlc1twYWdlXSwgYXJndW1lbnRzKTsKICAgICAgfQogICAgfQogIH0sCgogIC8vCiAgX3RvdWNoRW5kOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgfSwKCiAgLy8gQ2FsY3VsYXRlIHRoZSB6LWluZGV4IHZhbHVlIGZvciBwYWdlcyBkdXJpbmcgdGhlIGFuaW1hdGlvbgoKICBjYWxjdWxhdGVaOiBmdW5jdGlvbihtdikgewoKICAgIHZhciBpLCBwYWdlLCBuZXh0UGFnZSwgcGxhY2VQYWdlLCBkcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpLAogICAgICBjdXJyZW50UGFnZSA9IHZpZXdbMF0gfHwgdmlld1sxXSwKICAgICAgdG90YWwgPSBtdi5sZW5ndGgtMSwKICAgICAgciA9IHtwYWdlWjoge30sIHBhcnRaOiB7fSwgcGFnZVY6IHt9fSwKCiAgICAgIGFkZFZpZXcgPSBmdW5jdGlvbihwYWdlKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGF0LnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAgICAgICBpZiAodmlld1swXSkgci5wYWdlVlt2aWV3WzBdXSA9IHRydWU7CiAgICAgICAgaWYgKHZpZXdbMV0pIHIucGFnZVZbdmlld1sxXV0gPSB0cnVlOwogICAgICB9OwogICAgCiAgICBmb3IgKGkgPSAwOyBpPD10b3RhbDsgaSsrKSB7CiAgICAgIHBhZ2UgPSBtdltpXTsKICAgICAgbmV4dFBhZ2UgPSBkYXRhLnBhZ2VzW3BhZ2VdLmRhdGEoKS5mLm9wdHMubmV4dDsKICAgICAgcGxhY2VQYWdlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICAgIGFkZFZpZXcocGFnZSk7CiAgICAgIGFkZFZpZXcobmV4dFBhZ2UpOwogICAgICBkcGFnZSA9IChkYXRhLnBhZ2VQbGFjZVtuZXh0UGFnZV09PW5leHRQYWdlKSA/IG5leHRQYWdlIDogcGFnZTsKICAgICAgci5wYWdlWltkcGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMgLSBNYXRoLmFicyhjdXJyZW50UGFnZS1kcGFnZSk7CiAgICAgIHIucGFydFpbcGxhY2VQYWdlXSA9IGRhdGEudG90YWxQYWdlcyoyIC0gIHRvdGFsICsgaTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpICYmIGRhdGEucGFnZU12WzBdIT09MCkgewoKICAgICAgLy8gVXBkYXRlIG1vdGlvbgoKICAgICAgdmFyIHAsIGFwYWdlLCBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgY29ybmVyID0gdGhpcy50dXJuKCdjb3JuZXInKSwKICAgICAgICBhY3R1YWxWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewoKICAgICAgICBpZiAoIWhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSkKICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBmaXhlZCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2ZpeGVkJyk7CgogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHsKICAgICAgICAgIGRpc3BsYXk6IChwb3MucGFnZVZbcGFnZV0gfHwgZml4ZWQpID8gJycgOiAnbm9uZScsCiAgICAgICAgICB6SW5kZXg6CiAgICAgICAgICAgIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdoYXJkJykgPwogICAgICAgICAgICAgIHBvcy5wYXJ0WltwYWdlXQogICAgICAgICAgICAgIDoKICAgICAgICAgICAgICBwb3MucGFnZVpbcGFnZV0KICAgICAgICAgICAgKSB8fCAoZml4ZWQgPyAtMSA6IDApCiAgICAgICAgfSk7CgogICAgICAgIGlmICgocCA9IGRhdGEucGFnZXNbcGFnZV0pKSB7CgogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CiAgICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnRwYWdlKSB7IC8vIElzIGl0IHR1cm5pbmcgdGhlIHBhZ2UgdG8gYHRwYWdlYD8KCiAgICAgICAgICAgIHAuZmxpcCgnaG92ZXInLCBmYWxzZSkuCiAgICAgICAgICAgICAgZmxpcCgnZGlzYWJsZScsCiAgICAgICAgICAgICAgICAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCBkYXRhLnBhZ2VNdik9PS0xICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzBdICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzFdKTsKCiAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgcC5mbGlwKCdob3ZlcicsIGNvcm5lcj09PWZhbHNlKS4KICAgICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgcGFnZSE9YWN0dWFsVmlld1swXSAmJiBwYWdlIT1hY3R1YWxWaWV3WzFdKTsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VzW3BhZ2VdLgogICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLgogICAgICAgICAgICBmbGlwKCdob3ZlcicsIHRydWUpLgogICAgICAgICAgICBmbGlwKCd6JywgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gVXBkYXRlcyB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIGZsaXBib29rJ3Mgc2hhZG93CgogIF91cGRhdGVTaGFkb3c6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgdmlldywgdmlldzIsIHNoYWRvdywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcGFnZVdpZHRoID0gKGRhdGEuZGlzcGxheT09J3NpbmdsZScpID8gd2lkdGggOiB3aWR0aC8yOwoKICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAoIWRhdGEuc2hhZG93KSB7CiAgICAgIGRhdGEuc2hhZG93ID0gJCgnPGRpdiAvPicsIHsKICAgICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICAgJ2Nzcyc6IGRpdkF0dCgwLCAwLCAwKS5jc3MKICAgICAgICB9KS4KICAgICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbG9jID0gMDsKCiAgICAKICAgIGlmIChwYWdlPT12aWV3WzBdIHx8IHBhZ2U9PXZpZXdbMV0pCiAgICAgIGxvYyA9IDE7CiAgICBlbHNlIGlmICgKICAgICAgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwgcGFnZT09dmlld1sxXSsyKQogICAgKQogICAgICBsb2MgPSAyOwoKICAgIGlmICghdGhpcy50dXJuKCdhbmltYXRpbmcnKSkKICAgICAgc3dpdGNoIChsb2MpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsCiAgICAgICAgICAgIGRpc3BsYXk6ICcnCiAgICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMtMSwKICAgICAgICAgICAgZGlzcGxheTogJycKICAgICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMDoKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKAogICAgICAgICAgewogICAgICAgICAgICB6SW5kZXg6IDAsCiAgICAgICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICAgICAgKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgCiAgICByZXR1cm4gbG9jOwogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG9wdGlvbnMKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykgewogICAgCiAgICBpZiAob3B0aW9ucz09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm9wdHM7CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgICAvLyBTZXQgbmV3IHZhbHVlcwoKICAgICAgJC5leHRlbmQoZGF0YS5vcHRzLCBvcHRpb25zKTsKICAgICAgCiAgICAgIC8vIFNldCBwYWdlcwoKICAgICAgaWYgKG9wdGlvbnMucGFnZXMpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlcycsIG9wdGlvbnMucGFnZXMpOwoKICAgICAgLy8gU2V0IHBhZ2UKCiAgICAgIGlmIChvcHRpb25zLnBhZ2UpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAgIC8vIFNldCBkaXNwbGF5CgogICAgICBpZiAob3B0aW9ucy5kaXNwbGF5KQogICAgICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CiAgICAgIAogICAgICAvLyBTZXQgZGlyZWN0aW9uCgogICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24pCiAgICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CgogICAgICAvLyBTZXQgc2l6ZQoKICAgICAgaWYgKG9wdGlvbnMud2lkdGggJiYgb3B0aW9ucy5oZWlnaHQpCiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQpOwogICAgICAKICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycwoKICAgICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gb3B0aW9ucy53aGVuKQogICAgICAgICAgaWYgKGhhcyhldmVudE5hbWUsIG9wdGlvbnMud2hlbikpIHsKICAgICAgICAgICAgdGhpcy51bmJpbmQoZXZlbnROYW1lKS4KICAgICAgICAgICAgICBiaW5kKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuW2V2ZW50TmFtZV0pOwogICAgICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIEdldHMgdGhlIGN1cnJlbnQgdmVyc2lvbgoKICB2ZXJzaW9uOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdmVyc2lvbjsKCiAgfQp9LAoKLy8gTWV0aG9kcyBhbmQgcHJvcGVydGllcyBmb3IgdGhlIGZsaXAgcGFnZSBlZmZlY3QKCmZsaXBNZXRob2RzID0gewoKICAvLyBDb25zdHJ1Y3RvcgoKICBpbml0OiBmdW5jdGlvbihvcHRzKSB7CgogICAgdGhpcy5kYXRhKHtmOiB7CiAgICAgIGRpc2FibGVkOiBmYWxzZSwKICAgICAgaG92ZXI6IGZhbHNlLAogICAgICBlZmZlY3Q6ICh0aGlzLmhhc0NsYXNzKCdoYXJkJykpID8gJ2hhcmQnIDogJ3NoZWV0JwogICAgfX0pOwogIAogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mOwoKICAgIGRhdGEub3B0c1snei1pbmRleCddID0gejsKCiAgICBpZiAoZGF0YS5md3JhcHBlcikKICAgICAgZGF0YS5md3JhcHBlci5jc3MoewogICAgICAgIHpJbmRleDogeiB8fCBwYXJzZUludChkYXRhLnBhcmVudC5jc3MoJ3otaW5kZXgnKSwgMTApIHx8IDAKICAgICAgfSk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgX2NBbGxvd2VkOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwYWdlID0gZGF0YS5vcHRzLnBhZ2UsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBvZGQgPSBwYWdlJTI7CiAgICAKICAgIGlmIChkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAKICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgWyhvZGQpID8gJ3InIDogJ2wnXSA6CiAgICAgICAgWyhvZGQpID8gJ2wnIDogJ3InXTsKCiAgICB9IGVsc2UgewoKICAgICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChwYWdlPT0xKQogICAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICAgIGNvcm5lcnNbJ2ZvcndhcmQnXSA6IGNvcm5lcnNbJ2JhY2t3YXJkJ107CiAgICAgICAgZWxzZSBpZiAocGFnZT09dHVybkRhdGEudG90YWxQYWdlcykKICAgICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgICBjb3JuZXJzWydiYWNrd2FyZCddIDogY29ybmVyc1snZm9yd2FyZCddOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1sob2RkKSA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCddCiAgICAgICAgICA6CiAgICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJ107CgogICAgICB9CgogICAgfQoKICB9LAoKICBfY29ybmVyQWN0aXZhdGVkOiBmdW5jdGlvbihwKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcG9pbnQgPSB7eDogcC54LCB5OiBwLnksIGNvcm5lcjogJyd9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAocG9pbnQueDw9MCB8fCBwb2ludC55PD0wIHx8IHBvaW50Lng+PXdpZHRoIHx8IHBvaW50Lnk+PWhlaWdodCkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIHZhciBhbGxvd2VkQ29ybmVycyA9IGZsaXBNZXRob2RzLl9jQWxsb3dlZC5jYWxsKHRoaXMpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lng+d2lkdGgtY3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ3InOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lng8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ2wnOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdzaGVldCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lnk8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyKz0gJ3QnOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lnk+PWhlaWdodC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAnYic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgCiAgICAgICAgaWYgKHBvaW50Lng8PWNzeikKICAgICAgICAgIHBvaW50LmNvcm5lcis9ICdsJzsKICAgICAgICBlbHNlIGlmIChwb2ludC54Pj13aWR0aC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAncic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgcmV0dXJuICghcG9pbnQuY29ybmVyIHx8ICQuaW5BcnJheShwb2ludC5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8KICAgICAgZmFsc2UgOiBwb2ludDsKCiAgfSwKCiAgX2lzSUFyZWE6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgcG9zID0gdGhpcy5kYXRhKCkuZi5wYXJlbnQub2Zmc2V0KCk7CgogICAgZSA9IChpc1RvdWNoICYmIGUub3JpZ2luYWxFdmVudCkgPyBlLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXSA6IGU7CgogICAgcmV0dXJuIGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLAogICAgICB7CiAgICAgICAgeDogZS5wYWdlWC1wb3MubGVmdCwKICAgICAgICB5OiBlLnBhZ2VZLXBvcy50b3AKICAgICAgfSk7CgogIH0sCgogIF9jOiBmdW5jdGlvbihjb3JuZXIsIG9wdHMpIHsKCiAgICBvcHRzID0gb3B0cyB8fCAwOwoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ3RsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCBvcHRzKTsKICAgICAgY2FzZSAndHInOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCBvcHRzKTsKICAgICAgY2FzZSAnYmwnOgogICAgICAgIHJldHVybiBwb2ludDJEKG9wdHMsIHRoaXMuaGVpZ2h0KCktb3B0cyk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCktb3B0cywgdGhpcy5oZWlnaHQoKS1vcHRzKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQob3B0cywgMCk7CiAgICAgIGNhc2UgJ3InOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCAwKTsKICAgIH0KCiAgfSwKCiAgX2MyOiBmdW5jdGlvbihjb3JuZXIpIHsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICd0bCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICd0cic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICAgIGNhc2UgJ2JsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCkqMiwgdGhpcy5oZWlnaHQoKSk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICdyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCAwKTsKICAgIH0KCiAgfSwKCiAgX2ZvbGRpbmdQYWdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIG9wdHMgPSBkYXRhLm9wdHM7CgogICAgaWYgKG9wdHMudHVybikgewogICAgICBkYXRhID0gb3B0cy50dXJuLmRhdGEoKTsKICAgICAgaWYgKGRhdGEuZGlzcGxheSA9PSAnc2luZ2xlJykKICAgICAgICByZXR1cm4gKG9wdHMubmV4dD4xIHx8IG9wdHMucGFnZT4xKSA/IGRhdGEucGFnZU9ianNbMF0gOiBudWxsOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGRhdGEucGFnZU9ianNbb3B0cy5uZXh0XTsKICAgIH0KCiAgfSwKCiAgX2JhY2tHcmFkaWVudDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgICAgZ3JhZGllbnQgPSAgdHVybkRhdGEub3B0cy5ncmFkaWVudHMgJiYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnIHx8CiAgICAgICAgIChkYXRhLm9wdHMucGFnZSE9MiAmJiBkYXRhLm9wdHMucGFnZSE9dHVybkRhdGEudG90YWxQYWdlcy0xKSk7CgogICAgaWYgKGdyYWRpZW50ICYmICFkYXRhLmJzaGFkb3cpCiAgICAgIGRhdGEuYnNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgY3NzKHsncG9zaXRpb24nOiAnJywgd2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgYXBwZW5kVG8oZGF0YS5wYXJlbnQpOwoKICAgIHJldHVybiBncmFkaWVudDsKCiAgfSwKCiAgdHlwZTogZnVuY3Rpb24gKCkgewogICAgCiAgICByZXR1cm4gdGhpcy5kYXRhKCkuZi5lZmZlY3Q7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICBpZiAoZnVsbCkgewogICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgIGlmIChmdWxsKSB7CiAgICAgICAgdmFyIHNpemUgPSBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyh3aWR0aCwgMikrTWF0aC5wb3coaGVpZ2h0LCAyKSkpOwoKICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfSk7CiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9KS4KICAgICAgICAgIGNoaWxkcmVuKCc6Zmlyc3QtY2hpbGQnKS4KICAgICAgICAgIGNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBpZiAodHVybkRhdGEub3B0cy5ncmFkaWVudHMpCiAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhpcykpCiAgICAgICAgICBkYXRhLmJzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLnBhcmVudC5pcygnOnZpc2libGUnKSkgewogICAgICAgIHZhciBvZmZzZXQgPSBmaW5kUG9zKGRhdGEucGFyZW50WzBdKTsKCiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3RvcDogb2Zmc2V0LnRvcCwKICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0fSk7CgogICAgICAgIC8vaWYgKGRhdGEub3B0cy50dXJuKSB7CiAgICAgICAgIG9mZnNldCA9IGZpbmRQb3MoZGF0YS5vcHRzLnR1cm5bMF0pOwogICAgICAgICBkYXRhLmZwYXJlbnQuY3NzKHt0b3A6IC1vZmZzZXQudG9wLCBsZWZ0OiAtb2Zmc2V0LmxlZnR9KTsKICAgICAgICAvL30KICAgICAgfQoKICAgICAgdGhpcy5mbGlwKCd6JywgZGF0YS5vcHRzWyd6LWluZGV4J10pOwoKICAgICAgYnJlYWs7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOwoKICAgIGRhdGEucGFyZW50ID0gcGFyZW50OwoKICBpZiAoIWRhdGEud3JhcHBlcikKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKICAgICAgICBjc3NQcm9wZXJ0aWVzW3ZlbmRvciArICd0cmFuc2Zvcm0tc3R5bGUnXSA9ICdwcmVzZXJ2ZS0zZCc7CiAgICAgICAgY3NzUHJvcGVydGllc1t2ZW5kb3IgKyAnYmFja2ZhY2UtdmlzaWJpbGl0eSddID0gJ2hpZGRlbic7CgogICAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpLgogICAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgICAgZGF0YS5mcGFnZSA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93ID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsICAwKSkuCiAgICAgICAgICAgIGhpZGUoKS4KICAgICAgICAgICAgYXBwZW5kVG8ocGFyZW50KTsKCiAgICAgICAgICBkYXRhLmJzaGFkb3cgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgIDApKTsKICAgICAgICB9CgogICAgICBicmVhazsKICAgICAgY2FzZSAnc2hlZXQnOgogICAgICAgIAogICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgICAgICBzaXplID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3cod2lkdGgsIDIpK01hdGgucG93KGhlaWdodCwgMikpKTsKICAgICAgICAKICAgICAgICBkYXRhLmZwYXJlbnQgPSBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudDsKCiAgICAgICAgaWYgKCFkYXRhLmZwYXJlbnQpIHsKICAgICAgICAgIHZhciBmcGFyZW50ID0gJCgnPGRpdi8+Jywge2Nzczogeydwb2ludGVyLWV2ZW50cyc6ICdub25lJ319KS5oaWRlKCk7CiAgICAgICAgICAgIGZwYXJlbnQuZGF0YSgpLmZsaXBzID0gMDsKICAgICAgICAgICAgZnBhcmVudC5jc3MoZGl2QXR0KDAsIDAsICdhdXRvJywgJ3Zpc2libGUnKS5jc3MpLgogICAgICAgICAgICBhcHBlbmRUbyhkYXRhLm9wdHMudHVybik7CiAgICAgICAgICAgIAogICAgICAgICAgICBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAnYXV0bycsIHJpZ2h0OiAnYXV0byd9KTsKCiAgICAgICAgZGF0YS53cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIHRoaXMuY3NzKCd6LWluZGV4JykpKS4KICAgICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgICBwcmVwZW5kKHRoaXMpOwoKICAgICAgICBkYXRhLmZ3cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KHBhcmVudC5vZmZzZXQoKS50b3AsIHBhcmVudC5vZmZzZXQoKS5sZWZ0KSkuCiAgICAgICAgICBoaWRlKCkuCiAgICAgICAgICBhcHBlbmRUbyhkYXRhLmZwYXJlbnQpOwoKICAgICAgICBkYXRhLmZwYWdlID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIDAsICd2aXNpYmxlJykpLgogICAgICAgICAgY3NzKHtjdXJzb3I6ICdkZWZhdWx0J30pLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5md3JhcHBlcik7CgogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykKICAgICAgICAgIGRhdGEuYXNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAgMSkpLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5mcGFnZSk7CgogICAgICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCBkYXRhKTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFNldCBzaXplCiAgICBmbGlwTWV0aG9kcy5yZXNpemUuY2FsbCh0aGlzLCB0cnVlKTsKCiAgfSwKCiAgLy8gVGFrZXMgYSAyUCBwb2ludCBmcm9tIHRoZSBzY3JlZW4gYW5kIGFwcGxpZXMgdGhlIHRyYW5zZm9ybWF0aW9uCgogIF9mb2xkOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKCiAgICAgIGNhc2UgJ2hhcmQnOgoKICAgICAgICBpZiAocG9pbnQuY29ybmVyPT0nbCcpCiAgICAgICAgICBwb2ludC54ID0gTWF0aC5taW4oTWF0aC5tYXgocG9pbnQueCwgMCksIHdpZHRoKjIpOwogICAgICAgIGVsc2UKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChNYXRoLm1pbihwb2ludC54LCB3aWR0aCksIC13aWR0aCk7CgogICAgICAgIHZhciBsZWZ0UG9zLAogICAgICAgICAgc2hhZG93LAogICAgICAgICAgZ3JhZGllbnRYLAogICAgICAgICAgZnBhZ2VPcmlnaW4sCiAgICAgICAgICBwYXJlbnRPcmlnaW4sCiAgICAgICAgICB0b3RhbFBhZ2VzID0gdHVybkRhdGEudG90YWxQYWdlcywKICAgICAgICAgIHpJbmRleCA9IGRhdGEub3B0c1snei1pbmRleCddIHx8IHRvdGFsUGFnZXMsCiAgICAgICAgICBwYXJlbnRDc3MgPSB7J292ZXJmbG93JzogJ3Zpc2libGUnfSwKICAgICAgICAgIHJlbFggPSAoby54KSA/IChvLnggLSBwb2ludC54KS93aWR0aCA6IHBvaW50Lngvd2lkdGgsCiAgICAgICAgICBhbmdsZSA9IHJlbFggKiA5MCwKICAgICAgICAgIGhhbGYgPSBhbmdsZTw5MDsKCiAgICAgICAgc3dpdGNoIChwb2ludC5jb3JuZXIpIHsKICAgICAgICAgIGNhc2UgJ2wnOgoKICAgICAgICAgICAgZnBhZ2VPcmlnaW4gPSAgJzAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMTAwJSA1MCUnOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dC0xPjA7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJzEwMCUnOwogICAgICAgICAgICAgIHNoYWRvdyA9IGRhdGEub3B0cy5wYWdlKzE8dG90YWxQYWdlczsKICAgICAgICAgICAgICBncmFkaWVudFggPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdyJzoKCiAgICAgICAgICAgIGZwYWdlT3JpZ2luID0gICcxMDAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMCUgNTAlJzsKICAgICAgICAgICAgYW5nbGUgPSAtYW5nbGU7CiAgICAgICAgICAgIHdpZHRoID0gLXdpZHRoOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dCsxPHRvdGFsUGFnZXM7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJy0xMDAlJzsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMucGFnZSE9MTsKICAgICAgICAgICAgICBncmFkaWVudFggPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnRDc3NbdmVuZG9yKydwZXJzcGVjdGl2ZS1vcmlnaW4nXSA9IHBhcmVudE9yaWdpbjsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgncm90YXRlWSgnK2FuZ2xlKydkZWcpJyArCiAgICAgICAgICAndHJhbnNsYXRlM2QoMHB4LCAwcHgsICcrKHRoaXMuYXR0cignZGVwdGgnKXx8MCkrJ3B4KScsIHBhcmVudE9yaWdpbik7CgogICAgICAgIGRhdGEuZnBhZ2UudHJhbnNmb3JtKCd0cmFuc2xhdGVYKCcrd2lkdGgrJ3B4KSByb3RhdGVZKCcrKDE4MCthbmdsZSkrJ2RlZyknLCBmcGFnZU9yaWdpbik7CgogICAgICAgIGRhdGEucGFyZW50LmNzcyhwYXJlbnRDc3MpOwoKICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgcmVsWCA9IC1yZWxYKzE7CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt6SW5kZXg6IHpJbmRleCsxfSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXh9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVsWCA9IHJlbFgtMTsKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3pJbmRleDogekluZGV4fSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXgrMX0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CiAgICAgICAgICBpZiAoc2hhZG93KQogICAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHsKICAgICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgICBsZWZ0OiBsZWZ0UG9zLAogICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsJysoMC41KnJlbFgpKycpJwogICAgICAgICAgICB9KS4KICAgICAgICAgICAgdHJhbnNmb3JtKCdyb3RhdGVZKDBkZWcpJyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CgogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7b3BhY2l0eTotcmVsWCArIDF9KTsKCiAgICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgICBpZiAoZGF0YS5ic2hhZG93LnBhcmVudCgpWzBdIT1kYXRhLndyYXBwZXJbMF0pIHsKICAgICAgICAgICAgICBkYXRhLmJzaGFkb3cuYXBwZW5kVG8oZGF0YS53cmFwcGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGRhdGEuYnNoYWRvdy5wYXJlbnQoKVswXSE9ZGF0YS5mcGFnZVswXSkgewogICAgICAgICAgICAgIGRhdGEuYnNoYWRvdy5hcHBlbmRUbyhkYXRhLmZwYWdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLypkYXRhLmJzaGFkb3cuY3NzKHsKICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwnKygwLjEpKycpJwogICAgICAgICAgfSkqLwogICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LCBwb2ludDJEKGdyYWRpZW50WCAqIDEwMCwgMCksIHBvaW50MkQoKC1ncmFkaWVudFggKyAxKSoxMDAsIDApLAogICAgICAgICAgICBbWzAsICdyZ2JhKDAsMCwwLDAuMyknXSxbMSwgJ3JnYmEoMCwwLDAsMCknXV0sMik7CiAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIGEgPSAwLAogICAgICAgICAgYWxwaGEgPSAwLAogICAgICAgICAgYmV0YSwKICAgICAgICAgIHB4LAogICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEsCiAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiwKICAgICAgICAgIGdyYWRpZW50U3RhcnRWYWwsCiAgICAgICAgICBncmFkaWVudFNpemUsCiAgICAgICAgICBncmFkaWVudE9wYWNpdHksCiAgICAgICAgICBzaGFkb3dWYWwsCiAgICAgICAgICBtdiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBkZiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICB0ciA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgICB0YW4gPSBNYXRoLnRhbihhbHBoYSksCiAgICAgICAgICBhYyA9IHR1cm5EYXRhLm9wdHMuYWNjZWxlcmF0aW9uLAogICAgICAgICAgaCA9IGRhdGEud3JhcHBlci5oZWlnaHQoKSwKICAgICAgICAgIHRvcCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMCwgMSkgPT0gJ3QnLAogICAgICAgICAgbGVmdCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMSwgMSkgPT0gJ2wnLAoKICAgICAgY29tcHV0ZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmVsID0gcG9pbnQyRCgwLCAwKTsKICAgICAgICB2YXIgbWlkZGxlID0gcG9pbnQyRCgwLCAwKTsKCiAgICAgICAgcmVsLnggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiBwb2ludC54OwoKICAgICAgICBpZiAoIWhhc1JvdCkgewogICAgICAgICAgcmVsLnkgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWwueSA9IChvLnkpID8gby55IC0gcG9pbnQueSA6IHBvaW50Lnk7CiAgICAgICAgfQoKICAgICAgICBtaWRkbGUueCA9IChsZWZ0KT8gd2lkdGggLSByZWwueC8yIDogcG9pbnQueCArIHJlbC54LzI7CiAgICAgICAgbWlkZGxlLnkgPSByZWwueS8yOwogICAgICAgIAogICAgICAgIHZhciBhbHBoYSA9ICBBOTAtTWF0aC5hdGFuMihyZWwueSwgcmVsLngpLAogICAgICAgICAgZ2FtbWEgPSBhbHBoYSAtIE1hdGguYXRhbjIobWlkZGxlLnksIG1pZGRsZS54KSwKICAgICAgICAgIGRpc3RhbmNlID0gIE1hdGgubWF4KDAsIE1hdGguc2luKGdhbW1hKSAqIE1hdGguc3FydChNYXRoLnBvdyhtaWRkbGUueCwgMikgKyBNYXRoLnBvdyhtaWRkbGUueSwgMikpKTsKICAgICAgICAgIAogICAgICAgICAgYSA9IGRlZyhhbHBoYSk7CgogICAgICAgICAgdHIgPSBwb2ludDJEKGRpc3RhbmNlICogTWF0aC5zaW4oYWxwaGEpLCBkaXN0YW5jZSAqIE1hdGguY29zKGFscGhhKSk7CgogICAgICAgICAgaWYgKGFscGhhID4gQTkwKSB7CiAgICAgICAgICAgIHRyLnggPSB0ci54ICsgTWF0aC5hYnModHIueSAqIHJlbC55L3JlbC54KTsKICAgICAgICAgICAgdHIueSA9IDA7CiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHRyLngqTWF0aC50YW4oUEktYWxwaGEpKSA8IGhlaWdodCkgewogICAgICAgICAgICAgIHBvaW50LnkgPSBNYXRoLnNxcnQoTWF0aC5wb3coaGVpZ2h0LCAyKSsyICogbWlkZGxlLnggKiByZWwueCk7CiAgICAgICAgICAgICAgaWYgKHRvcCkgcG9pbnQueSA9ICBoZWlnaHQgLSBwb2ludC55OwogICAgICAgICAgICAgIHJldHVybiBjb21wdXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICBpZiAoYWxwaGE+QTkwKSB7CiAgICAgICAgICAgIHZhciBiZXRhID0gUEktYWxwaGEsIGRkID0gaCAtIGhlaWdodC9NYXRoLnNpbihiZXRhKTsKICAgICAgICAgICAgbXYgPSBwb2ludDJEKE1hdGgucm91bmQoZGQqTWF0aC5jb3MoYmV0YSkpLCBNYXRoLnJvdW5kKGRkKk1hdGguc2luKGJldGEpKSk7CiAgICAgICAgICAgIGlmIChsZWZ0KSBtdi54ID0gLSBtdi54OwogICAgICAgICAgICBpZiAodG9wKSBtdi55ID0gLSBtdi55OwogICAgICAgICAgfQoKICAgICAgICAgIHB4ID0gTWF0aC5yb3VuZCh0ci55L01hdGgudGFuKGFscGhhKSArIHRyLngpOwogICAgICAKICAgICAgICAgIHZhciBzaWRlID0gd2lkdGggLSBweCwKICAgICAgICAgICAgc2lkZVggPSBzaWRlKk1hdGguY29zKGFscGhhKjIpLAogICAgICAgICAgICBzaWRlWSA9IHNpZGUqTWF0aC5zaW4oYWxwaGEqMik7CiAgICAgICAgICAgIGRmID0gcG9pbnQyRCgKICAgICAgICAgICAgICBNYXRoLnJvdW5kKChsZWZ0ID8gc2lkZSAtc2lkZVggOiBweCtzaWRlWCkpLAogICAgICAgICAgICAgIE1hdGgucm91bmQoKHRvcCkgPyBzaWRlWSA6IGhlaWdodCAtIHNpZGVZKSk7CiAgICAgICAgICAKICAgICAgICAvLyBHcmFkaWVudHMKICAgICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewoKICAgICAgICAgICAgZ3JhZGllbnRTaXplID0gc2lkZSpNYXRoLnNpbihhbHBoYSk7CgogICAgICAgICAgICB2YXIgZW5kaW5nUG9pbnQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGF0LCBwb2ludC5jb3JuZXIpLAogICAgICAgICAgICAgZmFyID0gTWF0aC5zcXJ0KE1hdGgucG93KGVuZGluZ1BvaW50LngtcG9pbnQueCwgMikrTWF0aC5wb3coZW5kaW5nUG9pbnQueS1wb2ludC55LCAyKSkvd2lkdGg7CgogICAgICAgICAgICBzaGFkb3dWYWwgPSBNYXRoLnNpbihBOTAqKChmYXI+MSkgPyAyIC0gZmFyIDogZmFyKSk7CgogICAgICAgICAgICBncmFkaWVudE9wYWNpdHkgPSBNYXRoLm1pbihmYXIsIDEpOwoKICAgICAgICAgICAKICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0VmFsID0gZ3JhZGllbnRTaXplPjEwMCA/IChncmFkaWVudFNpemUtMTAwKS9ncmFkaWVudFNpemUgOiAwOwoKICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QSA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICBncmFkaWVudFNpemUqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSpNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CiAgICAgICAgICAgCgogICAgICAgICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhhdCkpIHsKCiAgICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSoxLjIqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTaXplKjEuMipNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CgogICAgICAgICAgICAgICAgaWYgKCFsZWZ0KSBncmFkaWVudEVuZFBvaW50Qi54ID0gMTAwLWdyYWRpZW50RW5kUG9pbnRCLng7CiAgICAgICAgICAgICAgICBpZiAoIXRvcCkgZ3JhZGllbnRFbmRQb2ludEIueSA9IDEwMC1ncmFkaWVudEVuZFBvaW50Qi55OwoKICAgICAgICAgICAgICB9CgogICAgICAgICAgfQoKICAgICAgICAgIHRyLnggPSBNYXRoLnJvdW5kKHRyLngpOwogICAgICAgICAgdHIueSA9IE1hdGgucm91bmQodHIueSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAoKICAgICAgdHJhbnNmb3JtID0gZnVuY3Rpb24odHIsIGMsIHgsIGEpIHsKICAgICAgCiAgICAgICAgdmFyIGYgPSBbJzAnLCAnYXV0byddLCBtdlcgPSAod2lkdGgtaCkqeFswXS8xMDAsIG12SCA9IChoZWlnaHQtaCkqeFsxXS8xMDAsCiAgICAgICAgICBjc3NBID0ge2xlZnQ6IGZbY1swXV0sIHRvcDogZltjWzFdXSwgcmlnaHQ6IGZbY1syXV0sIGJvdHRvbTogZltjWzNdXX0sCiAgICAgICAgICBjc3NCID0ge30sCiAgICAgICAgICBhbGlhc2luZ0ZrID0gKGEhPTkwICYmIGEhPS05MCkgPyAobGVmdCA/IC0xIDogMSkgOiAwLAogICAgICAgICAgb3JpZ2luID0geFswXSArICclICcgKyB4WzFdICsgJyUnOwoKICAgICAgICB0aGF0LmNzcyhjc3NBKS4KICAgICAgICAgIHRyYW5zZm9ybShyb3RhdGUoYSkgKyB0cmFuc2xhdGUodHIueCArIGFsaWFzaW5nRmssIHRyLnksIGFjKSwgb3JpZ2luKTsKCiAgICAgICAgZGF0YS5mcGFnZS5jc3MoY3NzQSkudHJhbnNmb3JtKAogICAgICAgICAgcm90YXRlKGEpICsKICAgICAgICAgIHRyYW5zbGF0ZSh0ci54ICsgZGYueCAtIG12LnggLSB3aWR0aCp4WzBdLzEwMCwgdHIueSArIGRmLnkgLSBtdi55IC0gaGVpZ2h0KnhbMV0vMTAwLCBhYykgKwogICAgICAgICAgcm90YXRlKCgxODAvYSAtIDIpKmEpLAogICAgICAgICAgb3JpZ2luKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSh0cmFuc2xhdGUoLXRyLnggKyBtdlctYWxpYXNpbmdGaywgLXRyLnkgKyBtdkgsIGFjKSArIHJvdGF0ZSgtYSksIG9yaWdpbik7CgogICAgICAgIGRhdGEuZndyYXBwZXIudHJhbnNmb3JtKHRyYW5zbGF0ZSgtdHIueCArIG12LnggKyBtdlcsIC10ci55ICsgbXYueSArIG12SCwgYWMpICsgcm90YXRlKC1hKSwgb3JpZ2luKTsKICAgICAgCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CgogICAgICAgICAgaWYgKHhbMF0pCiAgICAgICAgICAgIGdyYWRpZW50RW5kUG9pbnRBLnggPSAxMDAtZ3JhZGllbnRFbmRQb2ludEEueDsKCiAgICAgICAgICBpZiAoeFsxXSkKICAgICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEueSA9ICgxMDAtZ3JhZGllbnRFbmRQb2ludEEueSk7CgogICAgICAgICAgY3NzQlsnYm94LXNoYWRvdyddID0gJzAgMCAyMHB4IHJnYmEoMCwwLDAsJysoMC41KnNoYWRvd1ZhbCkrJyknOwogICAgICAgICAgZm9sZGluZy5jc3MoY3NzQik7CgogICAgICAgICAgZ3JhZGllbnQoZGF0YS5hc2hhZG93LAogICAgICAgICAgICAgIHBvaW50MkQobGVmdD8xMDA6MCwgdG9wPzA6MTAwKSwKICAgICAgICAgICAgICBwb2ludDJEKGdyYWRpZW50RW5kUG9pbnRBLngsIGdyYWRpZW50RW5kUG9pbnRBLnkpLAogICAgICAgICAgICAgIFtbZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsMCknXSwKICAgICAgICAgICAgICBbKCgxLWdyYWRpZW50U3RhcnRWYWwpKjAuOCkrZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICBbMSwgJ3JnYmEoMjU1LDI1NSwyNTUsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXV0sCiAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICBhbHBoYSk7CgogICAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9iYWNrR3JhZGllbnQuY2FsbCh0aGF0KSkKICAgICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LAogICAgICAgICAgICAgICAgcG9pbnQyRChsZWZ0PzA6MTAwLCB0b3A/MDoxMDApLAogICAgICAgICAgICAgICAgcG9pbnQyRChncmFkaWVudEVuZFBvaW50Qi54LCBncmFkaWVudEVuZFBvaW50Qi55KSwKICAgICAgICAgICAgICAgIFtbMC42LCAncmdiYSgwLDAsMCwwKSddLAogICAgICAgICAgICAgICAgWzAuOCwgJ3JnYmEoMCwwLDAsJysoMC4zKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICAgIFsxLCAncmdiYSgwLDAsMCwwKSddCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMyk7CiAgICAgICAgfQoKICAgICAgfTsKCiAgICAgIHN3aXRjaCAocG9pbnQuY29ybmVyKSB7CiAgICAgICAgY2FzZSAnbCcgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncicgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndGwnIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChwb2ludC54LCAxKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybSh0ciwgWzEsMCwwLDFdLCBbMTAwLCAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndHInIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1pbihwb2ludC54LCB3aWR0aC0xKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybShwb2ludDJEKC10ci54LCB0ci55KSwgWzAsMCwwLDFdLCBbMCwgMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdibCcgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWF4KHBvaW50LngsIDEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQodHIueCwgLXRyLnkpLCBbMSwxLDAsMF0sIFsxMDAsIDEwMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdicicgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWluKHBvaW50LngsIHdpZHRoLTEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQoLXRyLngsIC10ci55KSwgWzAsMSwxLDBdLCBbMCwgMTAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICBicmVhazsKICB9CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKG1vdmUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGxhY2UgPSB0dXJuRGF0YS5wYWdlUGxhY2U7CiAgICAgIAogICAgaWYgKG1vdmUpIHsKCiAgICAgIHZhciBuZXh0UGFnZSA9IGRhdGEub3B0cy5uZXh0OwogIAogICAgICBpZiAocGxhY2VbbmV4dFBhZ2VdIT1kYXRhLm9wdHMucGFnZSkgewoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKHRoaXMsIGZhbHNlKTsKCiAgICAgICAgdmFyIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKICAgICAgICAKICAgICAgICBmb2xkaW5nLmFwcGVuZFRvKGRhdGEuZnBhZ2UpOwogICAgICAgIHBsYWNlW25leHRQYWdlXSA9IGRhdGEub3B0cy5wYWdlOwogICAgICAgIGRhdGEuZm9sZGluZyA9IG5leHRQYWdlOwogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoZGF0YS5mb2xkaW5nKSB7CgogICAgICAgIGlmICh0dXJuRGF0YS5wYWdlc1tkYXRhLmZvbGRpbmddKSB7CiAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmbGlwIGF2YWlsYWJsZQoKICAgICAgICAgIHZhciBmbGlwRGF0YSA9IHR1cm5EYXRhLnBhZ2VzW2RhdGEuZm9sZGluZ10uZGF0YSgpLmY7CiAgICAgICAgICAKICAgICAgICAgIHR1cm5EYXRhLnBhZ2VPYmpzW2RhdGEuZm9sZGluZ10uCiAgICAgICAgICAgIGFwcGVuZFRvKGZsaXBEYXRhLndyYXBwZXIpOwoKICAgICAgICB9IGVsc2UgaWYgKHR1cm5EYXRhLnBhZ2VXcmFwW2RhdGEuZm9sZGluZ10pIHsKICAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgcGFnZVdyYXBwZXIKCiAgICAgICAgICB0dXJuRGF0YS5wYWdlT2Jqc1tkYXRhLmZvbGRpbmddLgogICAgICAgICAgICBhcHBlbmRUbyh0dXJuRGF0YS5wYWdlV3JhcFtkYXRhLmZvbGRpbmddKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nIGluIHBsYWNlKSB7CiAgICAgICAgICBwbGFjZVtkYXRhLmZvbGRpbmddID0gZGF0YS5mb2xkaW5nOwogICAgICAgIH0KCiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKCiAgICAgIH0KICAgIH0KICB9LAoKICBfc2hvd0ZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGMsIGFuaW1hdGUpIHsKCiAgICB2YXIgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpLAogICAgICBkZCA9IHRoaXMuZGF0YSgpLAogICAgICBkYXRhID0gZGQuZiwKICAgICAgdmlzaWJsZSA9IGRhdGEudmlzaWJsZTsKCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKCF2aXNpYmxlIHx8ICFkYXRhLnBvaW50IHx8IGRhdGEucG9pbnQuY29ybmVyIT1jLmNvcm5lcikgewoKICAgICAgICB2YXIgY29ybmVyID0gKAogICAgICAgICAgZGF0YS5zdGF0dXM9PSdob3ZlcicgfHwKICAgICAgICAgIGRhdGEuc3RhdHVzPT0ncGVlbCcgfHwKICAgICAgICAgIGRhdGEub3B0cy50dXJuLmRhdGEoKS5tb3VzZUFjdGlvbikgPwogICAgICAgIGMuY29ybmVyIDogbnVsbDsKCiAgICAgICAgdmlzaWJsZSA9IGZhbHNlOwoKICAgICAgICBpZiAodHJpZ2dlcignc3RhcnQnLCB0aGlzLCBbZGF0YS5vcHRzLCBjb3JuZXJdKT09J3ByZXZlbnRlZCcpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICB9CgogICAgICBpZiAoYW5pbWF0ZSkgewogICAgICAgIAogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIHBvaW50ID0gKGRhdGEucG9pbnQgJiYgZGF0YS5wb2ludC5jb3JuZXI9PWMuY29ybmVyKSA/CiAgICAgICAgICBkYXRhLnBvaW50IDogZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBjLmNvcm5lciwgMSk7CiAgICAgIAogICAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgICAgZnJvbTogW3BvaW50LngsIHBvaW50LnldLAogICAgICAgICAgdG86IFtjLngsIGMueV0sCiAgICAgICAgICBkdXJhdGlvbjogNTAwLAogICAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgYy54ID0gTWF0aC5yb3VuZCh2WzBdKTsKICAgICAgICAgICAgYy55ID0gTWF0aC5yb3VuZCh2WzFdKTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBjKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSAgewoKICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoaXMsIGMpOwoKICAgICAgICBpZiAoZGQuZWZmZWN0ICYmICFkZC5lZmZlY3QudHVybmluZykKICAgICAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwoKICAgICAgfQoKICAgICAgaWYgKCF2aXNpYmxlKSB7CgogICAgICAgIHN3aXRjaChkYXRhLmVmZmVjdCkgewogICAgICAgICAgY2FzZSAnaGFyZCc6CgogICAgICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fbW92ZUZvbGRpbmdQYWdlLmNhbGwodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgIGRhdGEuZnBhZ2Uuc2hvdygpOwogICAgICAgICAgICBpZiAoZGF0YS5vcHRzLnNoYWRvd3MpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgICAgICAgIGRhdGEudmlzaWJsZSA9IHRydWU7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudC5zaG93KCkuZGF0YSgpLmZsaXBzKys7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgZGF0YS5md3JhcHBlci5zaG93KCk7CiAgICAgICAgICAgIGlmIChkYXRhLmJzaGFkb3cpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5ic2hhZG93TG9jID0gMDsKICAgICAgICAgIGRhdGEuYnNoYWRvdy5yZW1vdmUoKTsKICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CiAgICAgICAgfQoKICAgICAgICBkYXRhLndyYXBwZXIudHJhbnNmb3JtKCcnKTsKICAgICAgICBkYXRhLmZwYWdlLmhpZGUoKTsKCiAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIGlmICgoLS1kYXRhLmZwYXJlbnQuZGF0YSgpLmZsaXBzKT09PTApCiAgICAgICAgICBkYXRhLmZwYXJlbnQuaGlkZSgpOwoKICAgICAgICB0aGlzLmNzcyh7bGVmdDogMCwgdG9wOiAwLCByaWdodDogJ2F1dG8nLCBib3R0b206ICdhdXRvJ30pLgogICAgICAgICAgdHJhbnNmb3JtKCcnKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgnJyk7CgogICAgICAgIGRhdGEuZndyYXBwZXIuaGlkZSgpOwoKICAgICAgICBpZiAoZGF0YS5ic2hhZG93KQogICAgICAgICAgZGF0YS5ic2hhZG93LmhpZGUoKTsKCiAgICAgICAgZm9sZGluZy50cmFuc2Zvcm0oJycpOwoKICAgICAgYnJlYWs7CiAgICB9CgogICAgICBkYXRhLnZpc2libGUgPSBmYWxzZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBoaWRlRm9sZGVkUGFnZTogZnVuY3Rpb24oYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEucG9pbnQpIHJldHVybjsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgIHAxID0gZGF0YS5wb2ludCwKICAgICAgaGlkZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRhdGEucG9pbnQgPSBudWxsOwogICAgICAgIGRhdGEuc3RhdHVzID0gJyc7CiAgICAgICAgdGhhdC5mbGlwKCdoaWRlJyk7CiAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCBmYWxzZV0pOwogICAgICB9OwoKICAgIGlmIChhbmltYXRlKSB7CgogICAgICB2YXIgcDQgPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHAxLmNvcm5lciksCiAgICAgICAgdG9wID0gKHAxLmNvcm5lci5zdWJzdHIoMCwxKT09J3QnKSwKICAgICAgICBkZWx0YSA9ICh0b3ApID8gTWF0aC5taW4oMCwgcDEueS1wNC55KS8yIDogTWF0aC5tYXgoMCwgcDEueS1wNC55KS8yLAogICAgICAgIHAyID0gcG9pbnQyRChwMS54LCBwMS55K2RlbHRhKSwKICAgICAgICBwMyA9IHBvaW50MkQocDQueCwgcDQueS1kZWx0YSk7CiAgICAKICAgICAgdGhpcy5hbmltYXRlZih7CiAgICAgICAgZnJvbTogMCwKICAgICAgICB0bzogMSwKICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgdmFyIG5wID0gYmV6aWVyKHAxLCBwMiwgcDMsIHA0LCB2KTsKICAgICAgICAgIHAxLnggPSBucC54OwogICAgICAgICAgcDEueSA9IG5wLnk7CiAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIHAxKTsKICAgICAgICB9LAogICAgICAgIGNvbXBsZXRlOiBoaWRlLAogICAgICAgIGR1cmF0aW9uOiA4MDAsCiAgICAgICAgaGlkaW5nOiB0cnVlCiAgICAgIH0pOwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKICAgICAgaGlkZSgpOwoKICAgIH0KICB9LAoKICB0dXJuUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCk7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gdHVybkRhdGEub3B0cy5lbGV2YXRpb24gOiAwKSwKICAgICAgcDQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGlzLCBjb3JuZXIuY29ybmVyKTsKCiAgICAgIHRoaXMudHJpZ2dlcignZmxpcCcpLgogICAgICAgIGFuaW1hdGVmKHsKICAgICAgICAgIGZyb206IDAsCiAgICAgICAgICB0bzogMSwKICAgICAgICAgIGZyYW1lOiBmdW5jdGlvbih2KSB7CgogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhhdCwgY29ybmVyKTsKCiAgICAgICAgICB9LAogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAKICAgICAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCB0cnVlXSk7CgogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiB0dXJuRGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgdHVybmluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgICAgZGF0YS5jb3JuZXIgPSBudWxsOwogIH0sCgogIG1vdmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuICdlZmZlY3QnIGluIHRoaXMuZGF0YSgpOwogIAogIH0sCgogIGlzVHVybmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZmxpcCgnbW92aW5nJykgJiYgdGhpcy5kYXRhKCkuZWZmZWN0LnR1cm5pbmc7CiAgCiAgfSwKCiAgY29ybmVyOiBmdW5jdGlvbigpIHsKICAgIAogICAgcmV0dXJuIHRoaXMuZGF0YSgpLmYuY29ybmVyOwogICAgICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwoKICAgIGlmICghZGF0YS5jb3JuZXIgJiYgIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykgJiYKICAgICAgZGF0YS5vcHRzLnBhZ2U9PXR1cm4uZGF0YSgpLnBhZ2VQbGFjZVtkYXRhLm9wdHMucGFnZV0pCiAgICB7CgogICAgICBkYXRhLmNvcm5lciA9IGZsaXBNZXRob2RzLl9pc0lBcmVhLmNhbGwodGhpcywgZSk7CgogICAgICBpZiAoZGF0YS5jb3JuZXIgJiYgZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcykpIHsKCiAgICAgICAgdGhpcy50cmlnZ2VyKCdwcmVzc2VkJywgW2RhdGEucG9pbnRdKTsKICAgICAgICBmbGlwTWV0aG9kcy5fc2hvd0ZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcik7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CgogICAgICBpZiAoZGF0YS5jb3JuZXIpIHsKCiAgICAgICAgdmFyIHBvcyA9IGRhdGEucGFyZW50Lm9mZnNldCgpOwogICAgICAgIGRhdGEuY29ybmVyLnggPSBlWzBdLnBhZ2VYLXBvcy5sZWZ0OwogICAgICAgIGRhdGEuY29ybmVyLnkgPSBlWzBdLnBhZ2VZLXBvcy50b3A7CiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywgZGF0YS5jb3JuZXIpOwoKICAgICAgfSBlbHNlIGlmIChkYXRhLmhvdmVyICYmICF0aGlzLmRhdGEoKS5lZmZlY3QgJiYgdGhpcy5pcygnOnZpc2libGUnKSkgewoKICAgICAgICB2YXIgcG9pbnQgPSBmbGlwTWV0aG9kcy5faXNJQXJlYS5jYWxsKHRoaXMsIGVbMF0pOwoKICAgICAgICBpZiAocG9pbnQpIHsKCiAgICAgICAgICBpZiAoKGRhdGEuZWZmZWN0PT0nc2hlZXQnICYmIHBvaW50LmNvcm5lci5sZW5ndGg9PTIpICB8fCBkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAgICAgICAgIGRhdGEuc3RhdHVzID0gJ2hvdmVyJzsKICAgICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgcG9pbnQuY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAgICAgcG9pbnQueCA9IG9yaWdpbi54OwogICAgICAgICAgICBwb2ludC55ID0gb3JpZ2luLnk7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIHBvaW50LCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBpZiAoZGF0YS5zdGF0dXM9PSdob3ZlcicpIHsKICAgICAgICAgICAgZGF0YS5zdGF0dXMgPSAnJzsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgX2V2ZW50RW5kOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIGNvcm5lciA9IGRhdGEuY29ybmVyOwoKICAgIGlmICghZGF0YS5kaXNhYmxlZCAmJiBjb3JuZXIpIHsKICAgICAgaWYgKHRyaWdnZXIoJ3JlbGVhc2VkJywgdGhpcywgW2RhdGEucG9pbnQgfHwgY29ybmVyXSkhPSdwcmV2ZW50ZWQnKSB7CiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgfQogICAgfQoKICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgfSwKCiAgZGlzYWJsZTogZnVuY3Rpb24oZGlzYWJsZSkgewoKICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCB7J2Rpc2FibGVkJzogZGlzYWJsZX0pOwogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIGhvdmVyOiBmdW5jdGlvbihob3ZlcikgewogICAgCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydob3Zlcic6IGhvdmVyfSk7CiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgcGVlbDogZnVuY3Rpb24gKGNvcm5lciwgYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoY29ybmVyKSB7CgogICAgICBpZiAoJC5pbkFycmF5KGNvcm5lciwgY29ybmVycy5hbGwpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJ0Nvcm5lciAnK2Nvcm5lcisnIGlzIG5vdCBwZXJtaXR0ZWQnKTsKCiAgICAgIGlmICgkLmluQXJyYXkoY29ybmVyLCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKSkhPS0xKSB7CgogICAgICAgIHZhciBwb2ludCA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAKICAgICAgICBkYXRhLnN0YXR1cyA9ICdwZWVsJzsKCiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywKICAgICAgICB7CiAgICAgICAgICBjb3JuZXI6IGNvcm5lciwKICAgICAgICAgIHg6IHBvaW50LngsCiAgICAgICAgICB5OiBwb2ludC55CiAgICAgICAgfSwgYW5pbWF0ZSk7CgogICAgICB9CgoKICAgIH0gZWxzZSB7CgogICAgICBkYXRhLnN0YXR1cyA9ICcnOwoKICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBhbmltYXRlKTsKICAgICAgCiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfQp9OwoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWModGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBub3QgYSBtZXRob2Qgb3IgcHJvcGVydHknKTsKCn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgIHRvcDogdG9wLAogICAgbGVmdDogbGVmdCwKICAgICdvdmVyZmxvdyc6IG92ZXJmIHx8ICdoaWRkZW4nLAogICAgekluZGV4OiB6SW5kZXggfHwgJ2F1dG8nCiAgfQp9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQogIAovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucwoKZnVuY3Rpb24gcmFkKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gZGVncmVlcy8xODAqUEk7Cgp9CgovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcwoKZnVuY3Rpb24gZGVnKHJhZGlhbnMpIHsKICAKICByZXR1cm4gcmFkaWFucy9QSSoxODA7Cgp9CgovLyBHZXRzIGEgMkQgcG9pbnQKCmZ1bmN0aW9uIHBvaW50MkQoeCwgeSkgewogIAogIHJldHVybiB7eDogeCwgeTogeX07Cgp9CgovLyBXZWJraXQgNTM0LjMgb24gQW5kcm9pZCB3cm9uZ2x5IHJlcGFpbnRzIGVsZW1lbnRzIHRoYXQgdXNlIG92ZXJmbG93OmhpZGRlbiArIHJvdGF0aW9uCgpmdW5jdGlvbiByb3RhdGlvbkF2YWlsYWJsZSgpIHsKICB2YXIgcGFydHM7CgogIGlmICgocGFydHMgPSAvQXBwbGVXZWJraXRcLyhbMC05XC5dKykvaS5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpKSkgewogICAgdmFyIHdlYmtpdFZlcnNpb24gPSBwYXJzZUZsb2F0KHBhcnRzWzFdKTsKICAgIHJldHVybiAod2Via2l0VmVyc2lvbj41MzQuMyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8gUmV0dXJucyB0aGUgdHJhc2xhdGUgdmFsdWUKCmZ1bmN0aW9uIHRyYW5zbGF0ZSh4LCB5LCB1c2UzZCkgewogIAogIHJldHVybiAoaGFzM2QgJiYgdXNlM2QpID8gJyB0cmFuc2xhdGUzZCgnICsgeCArICdweCwnICsgeSArICdweCwgMHB4KSAnCiAgOiAnIHRyYW5zbGF0ZSgnICsgeCArICdweCwgJyArIHkgKyAncHgpICc7Cgp9CgovLyBSZXR1cm5zIHRoZSByb3RhdGlvbiB2YWx1ZQoKZnVuY3Rpb24gcm90YXRlKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gJyByb3RhdGUoJyArIGRlZ3JlZXMgKyAnZGVnKSAnOwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gRGV0ZWN0cyB0aGUgdHJhbnNpdGlvbkVuZCBFdmVudAoKZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkVuZCgpIHsKCiAgdmFyIHQsCiAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zha2VlbGVtZW50JyksCiAgICB0cmFuc2l0aW9ucyA9IHsKICAgICAgJ3RyYW5zaXRpb24nOid0cmFuc2l0aW9uZW5kJywKICAgICAgJ09UcmFuc2l0aW9uJzonb1RyYW5zaXRpb25FbmQnLAogICAgICAnTVNUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdNb3pUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzond2Via2l0VHJhbnNpdGlvbkVuZCcKICAgIH07CgogIGZvciAodCBpbiB0cmFuc2l0aW9ucykgewogICAgaWYgKGVsLnN0eWxlW3RdICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdOwogICAgfQogIH0KfQoKLy8gR3JhZGllbnRzCgpmdW5jdGlvbiBncmFkaWVudChvYmosIHAwLCBwMSwgY29sb3JzLCBudW1Db2xvcnMpIHsKCiAgdmFyIGosIGNvbHMgPSBbXTsKCiAgaWYgKHZlbmRvcj09Jy13ZWJraXQtJykgewoKICAgIGZvciAoaiA9IDA7IGo8bnVtQ29sb3JzOyBqKyspCiAgICAgIGNvbHMucHVzaCgnY29sb3Itc3RvcCgnK2NvbG9yc1tqXVswXSsnLCAnK2NvbG9yc1tqXVsxXSsnKScpOwogICAgCiAgICBvYmouY3NzKHsnYmFja2dyb3VuZC1pbWFnZSc6CiAgICAgICAgJy13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAnKwogICAgICAgIHAwLngrJyUgJysKICAgICAgICBwMC55KyclLCcrCiAgICAgICAgcDEueCsnJSAnKwogICAgICAgIHAxLnkrJyUsICcrCiAgICAgICAgY29scy5qb2luKCcsJykgKyAnICknfSk7CiAgfSBlbHNlIHsKICAgIAogICAgcDAgPSB7eDpwMC54LzEwMCAqIG9iai53aWR0aCgpLCB5OnAwLnkvMTAwICogb2JqLmhlaWdodCgpfTsKICAgIHAxID0ge3g6cDEueC8xMDAgKiBvYmoud2lkdGgoKSwgeTpwMS55LzEwMCAqIG9iai5oZWlnaHQoKX07CgogICAgdmFyIGR4ID0gcDEueC1wMC54LAogICAgICBkeSA9IHAxLnktcDAueSwKICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCksCiAgICAgIGFuZ2xlMiA9IGFuZ2xlIC0gTWF0aC5QSS8yLAogICAgICBkaWFnb25hbCA9IE1hdGguYWJzKG9iai53aWR0aCgpKk1hdGguc2luKGFuZ2xlMikpK01hdGguYWJzKG9iai5oZWlnaHQoKSpNYXRoLmNvcyhhbmdsZTIpKSwKICAgICAgZ3JhZGllbnREaWFnb25hbCA9IE1hdGguc3FydChkeSpkeSArIGR4KmR4KSwKICAgICAgY29ybmVyID0gcG9pbnQyRCgocDEueDxwMC54KSA/IG9iai53aWR0aCgpIDogMCwgKHAxLnk8cDAueSkgPyBvYmouaGVpZ2h0KCkgOiAwKSwKICAgICAgc2xvcGUgPSBNYXRoLnRhbihhbmdsZSksCiAgICAgIGludmVyc2UgPSAtMS9zbG9wZSwKICAgICAgeCA9IChpbnZlcnNlKmNvcm5lci54IC0gY29ybmVyLnkgLSBzbG9wZSpwMC54ICsgcDAueSkvKGludmVyc2Utc2xvcGUpLAogICAgICBjID0ge3g6IHgsIHk6IGludmVyc2UqeCAtIGludmVyc2UqY29ybmVyLnggKyBjb3JuZXIueX0sCiAgICAgIHNlZ0EgPSAoTWF0aC5zcXJ0KCBNYXRoLnBvdyhjLngtcDAueCwyKSArIE1hdGgucG93KGMueS1wMC55LDIpKSk7CgogICAgICBmb3IgKGogPSAwOyBqPG51bUNvbG9yczsgaisrKQogICAgICAgIGNvbHMucHVzaCgnICcrY29sb3JzW2pdWzFdKycgJysoKHNlZ0EgKyBncmFkaWVudERpYWdvbmFsKmNvbG9yc1tqXVswXSkqMTAwL2RpYWdvbmFsKSsnJScpOwoKICAgICAgb2JqLmNzcyh7J2JhY2tncm91bmQtaW1hZ2UnOiB2ZW5kb3IrJ2xpbmVhci1ncmFkaWVudCgnICsgKC1hbmdsZSkgKyAncmFkLCcgKyBjb2xzLmpvaW4oJywnKSArICcpJ30pOwogIH0KfQoKCi8vIFRyaWdnZXJzIGFuIGV2ZW50CgpmdW5jdGlvbiB0cmlnZ2VyKGV2ZW50TmFtZSwgY29udGV4dCwgYXJncykgewoKICB2YXIgZXZlbnQgPSAkLkV2ZW50KGV2ZW50TmFtZSk7CiAgY29udGV4dC50cmlnZ2VyKGV2ZW50LCBhcmdzKTsKICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICByZXR1cm4gJ3ByZXZlbnRlZCc7CiAgZWxzZSBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgIHJldHVybiAnc3RvcHBlZCc7CiAgZWxzZQogICAgcmV0dXJuICcnOwp9CgovLyBKUyBFcnJvcnMKCmZ1bmN0aW9uIHR1cm5FcnJvcihtZXNzYWdlKSB7CgogIGZ1bmN0aW9uIFR1cm5Kc0Vycm9yKG1lc3NhZ2UpIHsKICAgIHRoaXMubmFtZSA9ICJUdXJuSnNFcnJvciI7CiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogIH0KCiAgVHVybkpzRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CiAgVHVybkpzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHVybkpzRXJyb3I7CiAgcmV0dXJuIG5ldyBUdXJuSnNFcnJvcihtZXNzYWdlKTsKCn0KCi8vIEZpbmQgdGhlIG9mZnNldCBvZiBhbiBlbGVtZW50IGlnbm9yaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKCiAgdmFyIG9mZnNldCA9IHt0b3A6IDAsIGxlZnQ6IDB9OwoKICBkb3sKICAgIG9mZnNldC5sZWZ0ICs9IG9iai5vZmZzZXRMZWZ0OwogICAgb2Zmc2V0LnRvcCArPSBvYmoub2Zmc2V0VG9wOwogIH0gd2hpbGUgKChvYmogPSBvYmoub2Zmc2V0UGFyZW50KSk7CgogIHJldHVybiBvZmZzZXQ7Cgp9CgovLyBDaGVja3MgaWYgdGhlcmUncyBoYXJkIHBhZ2UgY29tcGF0aWJpbGl0eQovLyBJRTkgaXMgdGhlIG9ubHkgYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaGFyZCBwYWdlcwoKZnVuY3Rpb24gaGFzSGFyZFBhZ2UoKSB7CiAgcmV0dXJuIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUgOS4wJyk9PS0xKTsKfQoKLy8gUmVxdWVzdCBhbiBhbmltYXRpb24KCndpbmRvdy5yZXF1ZXN0QW5pbSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7CiAgICB9OwoKfSkoKTsKCi8vIEV4dGVuZCAkLmZuCgokLmV4dGVuZCgkLmZuLCB7CgogIGZsaXA6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGRlYygkKHRoaXNbMF0pLCBmbGlwTWV0aG9kcywgYXJndW1lbnRzKTsKICB9LAoKICB0dXJuOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBkZWMoJCh0aGlzWzBdKSwgdHVybk1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHJhbnNmb3JtOiBmdW5jdGlvbih0cmFuc2Zvcm0sIG9yaWdpbikgewoKICAgIHZhciBwcm9wZXJ0aWVzID0ge307CiAgICAKICAgIGlmIChvcmlnaW4pCiAgICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSBvcmlnaW47CiAgICAKICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTsKICAKICAgIHJldHVybiB0aGlzLmNzcyhwcm9wZXJ0aWVzKTsKCiAgfSwKCiAgYW5pbWF0ZWY6IGZ1bmN0aW9uKHBvaW50KSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5lZmZlY3QpCiAgICAgIGRhdGEuZWZmZWN0LnN0b3AoKTsKCiAgICBpZiAocG9pbnQpIHsKCiAgICAgIGlmICghcG9pbnQudG8ubGVuZ3RoKSBwb2ludC50byA9IFtwb2ludC50b107CiAgICAgIGlmICghcG9pbnQuZnJvbS5sZW5ndGgpIHBvaW50LmZyb20gPSBbcG9pbnQuZnJvbV07CgogICAgICB2YXIgZGlmZiA9IFtdLAogICAgICAgIGxlbiA9IHBvaW50LnRvLmxlbmd0aCwKICAgICAgICBhbmltYXRpbmcgPSB0cnVlLAogICAgICAgIHRoYXQgPSB0aGlzLAogICAgICAgIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpLAogICAgICAgIGZyYW1lID0gZnVuY3Rpb24oKSB7CgogICAgICAgICAgaWYgKCFkYXRhLmVmZmVjdCB8fCAhYW5pbWF0aW5nKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgdmFyIHYgPSBbXSwKICAgICAgICAgICAgdGltZURpZmYgPSBNYXRoLm1pbihwb2ludC5kdXJhdGlvbiwgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHRpbWUpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgICAgIHYucHVzaChkYXRhLmVmZmVjdC5lYXNpbmcoMSwgdGltZURpZmYsIHBvaW50LmZyb21baV0sIGRpZmZbaV0sIHBvaW50LmR1cmF0aW9uKSk7CgogICAgICAgICAgcG9pbnQuZnJhbWUoKGxlbj09MSkgPyB2WzBdIDogdik7CgogICAgICAgICAgaWYgKHRpbWVEaWZmPT1wb2ludC5kdXJhdGlvbikgewogICAgICAgICAgICBkZWxldGUgZGF0YVsnZWZmZWN0J107CiAgICAgICAgICAgIHRoYXQuZGF0YShkYXRhKTsKICAgICAgICAgICAgaWYgKHBvaW50LmNvbXBsZXRlKQogICAgICAgICAgICAgIHBvaW50LmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW0oZnJhbWUpOwogICAgICAgICAgfQogICAgICAgIH07CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgIGRpZmYucHVzaChwb2ludC50b1tpXSAtIHBvaW50LmZyb21baV0pOwoKICAgICAgZGF0YS5lZmZlY3QgPSAkLmV4dGVuZCh7CiAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBhbmltYXRpbmcgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGVhc2luZzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGRhdGEpIHsKICAgICAgICAgIHJldHVybiBjICogTWF0aC5zcXJ0KDEgLSAodD10L2RhdGEtMSkqdCkgKyBiOwogICAgICAgIH0KICAgICAgfSwgcG9pbnQpOwoKICAgICAgdGhpcy5kYXRhKGRhdGEpOwoKICAgICAgZnJhbWUoKTsKCiAgICB9IGVsc2UgewogICAgICAKICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwoKICAgIH0KICB9Cn0pOwoKLy8gRXhwb3J0IHNvbWUgZ2xvYmFscwoKJC5pc1RvdWNoID0gaXNUb3VjaDsKJC5tb3VzZUV2ZW50cyA9IG1vdXNlRXZlbnRzOwokLmNzc1ByZWZpeCA9IGdldFByZWZpeDsKJC5jc3NUcmFuc2l0aW9uRW5kID0gZ2V0VHJhbnNpdGlvbkVuZDsKJC5maW5kUG9zID0gZmluZFBvczsKCn0pKGpRdWVyeSk7Cg=='></script> -->
<!--	<script src='/fb/lib/turn_html4.js'></script> -->
	<script src='data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UgSFRNTDQgdmVyc2lvbgogKiB0dXJuanMuY29tCiAqIHR1cm5qcy5jb20vbGljZW5zZS50eHQKICoKICogQ29weXJpZ2h0IChDKSAyMDEyIEVtbWFudWVsIEdhcmNpYQogKiBBbGwgcmlnaHRzIHJlc2VydmVkCiAqKi8KCihmdW5jdGlvbigkKSB7CgondXNlIHN0cmljdCc7Cgp2YXIgaGFzM2QsCgogIHZlbmRvciA9ICcnLAogIAogIHZlcnNpb24gPSAnNC4xLjAnLAoKICBpc1RvdWNoID0gZmFsc2UsCgogIG1vdXNlRXZlbnRzID0KICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnbCddLAogICAgZm9yd2FyZDogWydyJ10sCiAgICBhbGw6IFsnbCcsICdyJ10KICB9LAoKICAvLyBEaXNwbGF5IHZhbHVlcwoKICBkaXNwbGF5cyA9IFsnc2luZ2xlJywgJ2RvdWJsZSddLAoKICAvLyBEaXJlY3Rpb24gdmFsdWVzCgogIGRpcmVjdGlvbnMgPSBbJ2x0cicsICdydGwnXSwKCiAgLy8gRGVmYXVsdCBvcHRpb25zCgogIHR1cm5PcHRpb25zID0gewoKICAgIC8vIEVuYWJsZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uCgogICAgYWNjZWxlcmF0aW9uOiB0cnVlLAoKICAgIC8vIERpc3BsYXkKCiAgICBkaXNwbGF5OiAnZG91YmxlJywKCiAgICAvLyBEdXJhdGlvbiBvZiB0cmFuc2l0aW9uIGluIG1pbGxpc2Vjb25kcwoKICAgIGR1cmF0aW9uOiA2MDAsCgogICAgLy8gRmlyc3QgcGFnZQoKICAgIHBhZ2U6IDEsCiAgICAKICAgIC8vIEVuYWJsZXMgZ3JhZGllbnRzCgogICAgZ3JhZGllbnRzOiB0cnVlLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBFbmFibGVzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbgoKICAgIGFjY2VsZXJhdGlvbjogdHJ1ZSwKICAgIAogICAgLy8gQ29ybmVycwogICAgLy8gYmFja3dhcmQ6IEFjdGl2YXRlcyBib3RoIHRsIGFuZCBibCBjb3JuZXJzCiAgICAvLyBmb3J3YXJkOiBBY3RpdmF0ZXMgYm90aCB0ciBhbmQgYnIgY29ybmVycwogICAgLy8gYWxsOiBBY3RpdmF0ZXMgYWxsIHRoZSBjb3JuZXJzCgogICAgY29ybmVyczogJ2ZvcndhcmQnLAogICAgCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMCwKCgogICAgLy8gRHVyYXRpb24gb2YgdHJhbnNpdGlvbiBpbiBtaWxsaXNlY29uZHMKCiAgICBkdXJhdGlvbjogNjAwLAogICAgCiAgICAvLyBFbmFibGVzIGdyYWRpZW50cwoKICAgIGdyYWRpZW50czogdHJ1ZQoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdHMpIHsKCiAgICBpZiAodGhpcy5sZW5ndGg+MSkKICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGlzIHNlbGVjdG9yIGhhcyBtb3JlIHRoYW4gMSBlbGVtZW50Jyk7CiAgICAKICAgIC8vIERlZmluZSBjb25zdGFudHMKICAgIAogICAgdmVuZG9yID0gZ2V0UHJlZml4KCk7CgogICAgdmFyIGksIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRzID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRzKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRzOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0cy5wYWdlcyB8fCAwOwogICAgZGF0YS5kb2NFdmVudHMgPSB7CiAgICAgIG1vdXNlU3RhcnQ6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpCiAgICAgICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpICYmCiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9ldmVudFN0YXJ0LmNhbGwoZGF0YS5wYWdlc1twYWdlXSwgZSk9PT1mYWxzZSkKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0sCgogICAgICBtb3VzZU1vdmU6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpCiAgICAgICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRNb3ZlLmNhbGwoZGF0YS5wYWdlc1twYWdlXSwgZSk7CiAgICAgIH0sCgogICAgICBtb3VzZUVuZDogZnVuY3Rpb24oZSkgewogICAgICAgIGZvciAodmFyIHBhZ2UgaW4gZGF0YS5wYWdlcykKICAgICAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGUpOwogICAgICB9CiAgICB9OwoKICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnMKCiAgICBpZiAob3B0cy53aGVuKQogICAgICBmb3IgKGkgaW4gb3B0cy53aGVuKQogICAgICAgIGlmIChoYXMoaSwgb3B0cy53aGVuKSkKICAgICAgICAgIHRoaXMuYmluZChpLCBvcHRzLndoZW5baV0pOwoKICAgIC8vIFNldCB0aGUgY3NzCgogICAgdGhpcy5jc3Moe3Bvc2l0aW9uOiAncmVsYXRpdmUnLCB3aWR0aDogb3B0cy53aWR0aCwgaGVpZ2h0OiBvcHRzLmhlaWdodH0pOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBkaXNwbGF5CgogICAgdGhpcy50dXJuKCdkaXNwbGF5Jywgb3B0cy5kaXNwbGF5KTsKCiAgICAvLyBTZXQgdGhlIGRpcmVjdGlvbgoKICAgIGlmIChvcHRzLmRpcmVjdGlvbiE9PScnKQogICAgICB0aGlzLnR1cm4oJ2RpcmVjdGlvbicsIG9wdHMuZGlyZWN0aW9uKTsKCgogICAgLy8gQWRkIHBhZ2VzIGZyb20gdGhlIERPTQoKICAgIGZvciAoaSA9IDA7IGk8Y2gubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCQoY2hbaV0pLmF0dHIoJ2lnbm9yZScpIT0nMScpIHsKICAgICAgICB0aGlzLnR1cm4oJ2FkZFBhZ2UnLCBjaFtpXSwgKytwYWdlTnVtKTsKICAgICAgfQogICAgfQoKICAgIC8vIEV2ZW50IGxpc3RlbmVycwoKICAgICQodGhpcykuYmluZChtb3VzZUV2ZW50cy5kb3duLCBkYXRhLmRvY0V2ZW50cy5tb3VzZVN0YXJ0KS4KICAgICAgYmluZCgnc3RhcnQnLCB0dXJuTWV0aG9kcy5fc3RhcnQpLgogICAgICBiaW5kKCdlbmQnLCB0dXJuTWV0aG9kcy5fZW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9wcmVzc2VkKS4KICAgICAgYmluZCgncmVsZWFzZWQnLCB0dXJuTWV0aG9kcy5fcmVsZWFzZWQpLgogICAgICBiaW5kKCdmbGlwJywgdHVybk1ldGhvZHMuX2ZsaXApOwoKICAgICQoZG9jdW1lbnQpLmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5kb2NFdmVudHMubW91c2VNb3ZlKS4KICAgICAgYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5kb2NFdmVudHMubW91c2VFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0cy5wYWdlKTsKCiAgICBkYXRhLmRvbmUgPSB0cnVlOwoKICAgIHJldHVybiB0aGlzOwogIH0sCgogIC8vIEFkZHMgYSBwYWdlIGZyb20gZXh0ZXJuYWwgZGF0YQoKICBhZGRQYWdlOiBmdW5jdGlvbihlbGVtZW50LCBwYWdlKSB7CgogICAgdmFyIGN1cnJlbnRQYWdlLAogICAgICBjbGFzc05hbWUsCiAgICAgIGluY1BhZ2VzID0gZmFsc2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbGFzdFBhZ2UgPSBkYXRhLnRvdGFsUGFnZXMrMTsKCiAgICBpZiAoZGF0YS5kZXN0cm95aW5nKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgLy8gUmVhZCB0aGUgcGFnZSBudW1iZXIgZnJvbSB0aGUgY2xhc3NOYW1lIG9mIGBlbGVtZW50YCAtIGZvcm1hdDogcFswLTldKwoKICAgIGlmICgoY3VycmVudFBhZ2UgPSAvXGJwKFswLTldKylcYi8uZXhlYygkKGVsZW1lbnQpLmF0dHIoJ2NsYXNzJykpKSkKICAgICAgcGFnZSA9IHBhcnNlSW50KGN1cnJlbnRQYWdlWzFdLCAxMCk7CgogICAgaWYgKHBhZ2UpIHsKICAgICAgCiAgICAgIGlmIChwYWdlPT1sYXN0UGFnZSkKICAgICAgICBpbmNQYWdlcyA9IHRydWU7CiAgICAgIGVsc2UgaWYgKHBhZ2U+bGFzdFBhZ2UpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCdQYWdlICInK3BhZ2UrJyIgY2Fubm90IGJlIGluc2VydGVkJyk7CgogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIHBhZ2UgPSBsYXN0UGFnZTsKICAgICAgaW5jUGFnZXMgPSB0cnVlOwoKICAgIH0KCiAgICBpZiAocGFnZT49MSAmJiBwYWdlPD1sYXN0UGFnZSkgewoKICAgICAgaWYgKGRhdGEuZGlzcGxheT09J2RvdWJsZScpCiAgICAgICAgY2xhc3NOYW1lID0gKHBhZ2UlMikgPyAnIG9kZCcgOiAnIGV2ZW4nOwogICAgICBlbHNlCiAgICAgICAgY2xhc3NOYW1lID0gJyc7CgogICAgICAvLyBTdG9wIGFuaW1hdGlvbnMKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIC8vIE1vdmUgcGFnZXMgaWYgaXQncyBuZWNlc3NhcnkKICAgICAgaWYgKHBhZ2UgaW4gZGF0YS5wYWdlT2JqcykKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgMSk7CgogICAgICAvLyBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHBhZ2VzCiAgICAgIGlmIChpbmNQYWdlcykKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBsYXN0UGFnZTsKCiAgICAgIC8vIEFkZCBlbGVtZW50CiAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0gPSAkKGVsZW1lbnQpLgogICAgICAgIGNzcyh7J2Zsb2F0JzogJ2xlZnQnfSkuCiAgICAgICAgYWRkQ2xhc3MoJ3BhZ2UgcCcgKyBwYWdlICsgY2xhc3NOYW1lKTsKCiAgICAgIC8vIEFkZCBwYWdlCiAgICAgIHR1cm5NZXRob2RzLl9hZGRQYWdlLmNhbGwodGhpcywgcGFnZSk7CgoKICAgICAgLy8gVXBkYXRlIHZpZXcKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3VwZGF0ZScpOwoKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgdmFyIHByb3AgPSB0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGlzLCBwYWdlLCB0cnVlKTsKCiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKCiAgICAgICAgICAvLyBQbGFjZQogICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwoKICAgICAgICAgIC8vIFdyYXBwZXIKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0gPSAkKCc8ZGl2Lz4nLAogICAgICAgICAgICB7J2NsYXNzJzogJ3R1cm4tcGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KS4KICAgICAgICAgICAgY3NzKHByb3ApOwoKICAgICAgICAgIC8vIEFwcGVuZCB0byB0aGlzCiAgICAgICAgICB0aGlzLmFwcGVuZChkYXRhLnBhZ2VXcmFwW3BhZ2VdKTsKCiAgICAgICAgICAvLyBNb3ZlIGVsZW1lbnQgdG8gd3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXS5wcmVwZW5kKGRhdGEucGFnZU9ianNbcGFnZV0pOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBwYWdlIGlzIGluIHRoZSBjdXJyZW50IHZpZXcsIGNyZWF0ZSB0aGUgZmxpcCBlZmZlY3QKICAgICAgICBpZiAoIXBhZ2UgfHwgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKT09MSkKICAgICAgICAgIHR1cm5NZXRob2RzLl9tYWtlRmxpcC5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgIAogICAgICB9IGVsc2UgewoKICAgICAgICAvLyBQbGFjZQogICAgICAgIGRhdGEucGFnZVBsYWNlW3BhZ2VdID0gMDsKCiAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgZnJvbSB0aGUgRE9NCiAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pCiAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLnJlbW92ZSgpOwoKICAgICAgfQoKICB9LAoKICAvLyBDaGVja3MgaWYgYSBwYWdlIGlzIGluIG1lbW9yeQogIAogIGhhc1BhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICByZXR1cm4gaGFzKHBhZ2UsIHRoaXMuZGF0YSgpLnBhZ2VPYmpzKTsKICAKICB9LAoKICAvLyBDZW50ZXJzIHRoZSBmbGlwYm9vawoKICBjZW50ZXI6IGZ1bmN0aW9uKHBhZ2UpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2l6ZSA9ICQodGhpcykudHVybignc2l6ZScpLAogICAgICBsZWZ0ID0gc2l6ZS53aWR0aC8oZGF0YS56b29tKjIpIC1zaXplLndpZHRoLzI7CgogICAgaWYgKGRhdGEuZGlzcGxheT09J2RvdWJsZScpIHsKICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpIHsKICAgICAgICBpZiAoIXZpZXdbMF0pCiAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICBlbHNlIGlmICghdmlld1sxXSkKICAgICAgICAgIGxlZnQgKz0gc2l6ZS53aWR0aC80OwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghdmlld1swXSkKICAgICAgICAgIGxlZnQgKz0gc2l6ZS53aWR0aC80OwogICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgbGVmdCAtPSBzaXplLndpZHRoLzQ7CiAgICAgIH0KICAgIH0KCiAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkKHRoaXMpLnVuYmluZChtb3VzZUV2ZW50cy5kb3duKQogICAgICAudW5iaW5kKCdlbmQnKQogICAgICAudW5iaW5kKCdmaXJzdCcpCiAgICAgIC51bmJpbmQoJ2ZsaXAnKQogICAgICAudW5iaW5kKCdsYXN0JykKICAgICAgLnVuYmluZCgncHJlc3NlZCcpCiAgICAgIC51bmJpbmQoJ3JlbGVhc2VkJykKICAgICAgLnVuYmluZCgnc3RhcnQnKQogICAgICAudW5iaW5kKCd0dXJuaW5nJykKICAgICAgLnVuYmluZCgndHVybmVkJykKICAgICAgLnVuYmluZCgnem9vbWluZycpOwoKICAgICQoZG9jdW1lbnQpLnVuYmluZChtb3VzZUV2ZW50cy5tb3ZlLCBkYXRhLmRvY0V2ZW50cy5tb3VzZU1vdmUpLgogICAgICB1bmJpbmQobW91c2VFdmVudHMudXAsIGRhdGEuZG9jRXZlbnRzLm1vdXNlRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAKICAgICAgdmFyIGV2ZW50ID0gJC5FdmVudCgnem9vbWluZycpOwogICAgICB0aGlzLnRyaWdnZXIoZXZlbnQsIFtuZXdab29tLCBkYXRhLnpvb21dKTsKCiAgICAgIGlmIChldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgCiAgICAgIHZhciBzaXplID0gJCh0aGlzKS50dXJuKCdzaXplJyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KS4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7CgogICAgICBpZiAoZGF0YS5vcHRzLmF1dG9DZW50ZXIpCiAgICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKICAgICAgZWxzZQogICAgICAgICQodGhpcykuY3NzKHttYXJnaW5MZWZ0OiBzaXplLndpZHRoICogaXogLyAyIC0gbmV3V2lkdGggLyAyfSk7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CiAgCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0gZWxzZQogICAgICByZXR1cm4gZGF0YS56b29tOwoKICB9LAoKICAvLyBHZXRzIHRoZSBzaXplIG9mIGEgcGFnZQoKICBfcGFnZVNpemU6IGZ1bmN0aW9uKHBhZ2UsIHBvc2l0aW9uKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgcHJvcCA9IHt9OwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICBwcm9wLndpZHRoID0gdGhpcy53aWR0aCgpOwogICAgICBwcm9wLmhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7CgogICAgICBpZiAocG9zaXRpb24pIHsKICAgICAgICBwcm9wLnRvcCA9IDA7CiAgICAgICAgcHJvcC5sZWZ0ID0gMDsKICAgICAgICBwcm9wLnJpZ2h0ID0gJ2F1dG8nOwogICAgICB9CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBwYWdlV2lkdGggPSB0aGlzLndpZHRoKCkvMiwKICAgICAgICBwYWdlSGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdvd24tc2l6ZScpKSB7CiAgICAgICAgcHJvcC53aWR0aCA9IGRhdGEucGFnZU9ianNbcGFnZV0ud2lkdGgoKTsKICAgICAgICBwcm9wLmhlaWdodCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGVpZ2h0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHJvcC53aWR0aCA9IHBhZ2VXaWR0aDsKICAgICAgICBwcm9wLmhlaWdodCA9IHBhZ2VIZWlnaHQ7CiAgICAgIH0KCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHZhciBvZGQgPSBwYWdlJTI7CiAgICAgICAgcHJvcC50b3AgPSAocGFnZUhlaWdodC1wcm9wLmhlaWdodCkvMjsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAnbGVmdCcgOiAncmlnaHQnXSA9ICdhdXRvJzsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIAogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gcGFnZVdpZHRoLXByb3Aud2lkdGg7CiAgICAgICAgICBwcm9wWyhvZGQpID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSAnYXV0byc7CgogICAgICAgIH0KCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcHJvcDsKCiAgfSwKCiAgLy8gUHJlcGFyZXMgdGhlIGZsaXAgZWZmZWN0IGZvciBhIHBhZ2UKCiAgX21ha2VGbGlwOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoIWRhdGEucGFnZXNbcGFnZV0gJiYgZGF0YS5wYWdlUGxhY2VbcGFnZV09PXBhZ2UpIHsKICAgICAgdmFyIGNvcm5lciwKICAgICAgICBzaW5nbGUgPSBkYXRhLmRpc3BsYXk9PSdzaW5nbGUnLAogICAgICAgIG9kZCA9IHBhZ2UlMjsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0gPSBkYXRhLnBhZ2VPYmpzW3BhZ2VdLgogICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGlzLCBwYWdlKSkuCiAgICAgICAgZmxpcCh7cGFnZTogcGFnZSwKICAgICAgICAgIG5leHQ6IChvZGQgfHwgc2luZ2xlKSA/IHBhZ2UrMSA6IHBhZ2UtMSwKICAgICAgICAgIHR1cm46IHRoaXMsCiAgICAgICAgICBkdXJhdGlvbjogZGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgYWNjZWxlcmF0aW9uIDogZGF0YS5vcHRzLmFjY2VsZXJhdGlvbiwKICAgICAgICAgIGdyYWRpZW50czogZGF0YS5vcHRzLmdyYWRpZW50cwogICAgICAgICAgfSkuCiAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCk7CiAgICB9CgogICAgcmV0dXJuIGRhdGEucGFnZXNbcGFnZV07CiAgfSwKCiAgLy8gTWFrZXMgcGFnZXMgd2l0aGluIGEgcmFuZ2UKCiAgX21ha2VSYW5nZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIHJhbmdlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJyk7CgogICAgZm9yIChwYWdlID0gcmFuZ2VbMF07IHBhZ2U8PXJhbmdlWzFdOyBwYWdlKyspCiAgICAgIHR1cm5NZXRob2RzLl9hZGRQYWdlLmNhbGwodGhpcywgcGFnZSk7CgogIH0sCgogIC8vIFJldHVybnMgYSByYW5nZSBvZiBwYWdlcyB0aGF0IHNob3VsZCBiZSBpbiB0aGUgRE9NCiAgLy8gRXhhbXBsZToKICAvLyAtIHBhZ2UgaW4gdGhlIGN1cnJlbnQgdmlldywgcmV0dXJuIHRydWUKICAvLyAqIHBhZ2UgaXMgaW4gdGhlIHJhbmdlLCByZXR1cm4gdHJ1ZQogIC8vIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlCiAgLy8KICAvLyAxIDItMyA0LTUgNi03IDgtOSAxMC0xMSAxMi0xMwogIC8vICAgKiogICoqICAtLSAgICoqICAqKgoKICByYW5nZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciByZW1haW5pbmdQYWdlcywgbGVmdCwgcmlnaHQsIHZpZXcsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCgogICAgICBwYWdlID0gcGFnZSB8fCBkYXRhLnRwYWdlIHx8IGRhdGEucGFnZSB8fCAxOwogICAgICB2aWV3ID0gdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIGlmIChwYWdlPDEgfHwgcGFnZT5kYXRhLnRvdGFsUGFnZXMpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCciJytwYWdlKyciIGlzIG5vdCBhIHBhZ2UgZm9yIHJhbmdlJyk7CiAgICAKICAgICAgdmlld1sxXSA9IHZpZXdbMV0gfHwgdmlld1swXTsKICAgICAgCiAgICAgIGlmICh2aWV3WzBdPj0xICYmIHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICByZW1haW5pbmdQYWdlcyA9IE1hdGguZmxvb3IoKHBhZ2VzSW5ET00tMikvMik7CgogICAgICAgIGlmIChkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSA+IHZpZXdbMF0pIHsKICAgICAgICAgIGxlZnQgPSBNYXRoLm1pbih2aWV3WzBdLTEsIHJlbWFpbmluZ1BhZ2VzKTsKICAgICAgICAgIHJpZ2h0ID0gMipyZW1haW5pbmdQYWdlcy1sZWZ0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByaWdodCA9IE1hdGgubWluKGRhdGEudG90YWxQYWdlcy12aWV3WzFdLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICBsZWZ0ID0gMipyZW1haW5pbmdQYWdlcy1yaWdodDsKICAgICAgICB9CgogICAgICB9IGVsc2UgewogICAgICAgIGxlZnQgPSBwYWdlc0luRE9NLTE7CiAgICAgICAgcmlnaHQgPSBwYWdlc0luRE9NLTE7CiAgICAgIH0KCiAgICAgIHJldHVybiBbTWF0aC5tYXgoMSwgdmlld1swXS1sZWZ0KSwKICAgICAgICAgIE1hdGgubWluKGRhdGEudG90YWxQYWdlcywgdmlld1sxXStyaWdodCldOwoKICB9LAoKICAvLyBEZXRlY3RzIGlmIGEgcGFnZSBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGBwYWdlc0luRE9NYCBmcm9tIHRoZSBjdXJyZW50IHZpZXcKCiAgX25lY2Vzc1BhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKICAgIAogICAgaWYgKHBhZ2U9PT0wKQogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICByZXR1cm4gZGF0YS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CgogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlCgogIHJlbW92ZVBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPDEgfHwgcGFnZT5kYXRhLnRvdGFsUGFnZXMpCiAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkgewoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgICAgLy8gUmVtb3ZlIGBwYWdlYAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgfQoKICAgIC8vIE1vdmUgdGhlIHBhZ2VzIGJlaGluZCBgcGFnZWAKICAgIHR1cm5NZXRob2RzLl9tb3ZlUGFnZXMuY2FsbCh0aGlzLCBwYWdlLCAtMSk7CgogICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgIGRhdGEudG90YWxQYWdlcyA9IGRhdGEudG90YWxQYWdlcy0xOwoKICAgIC8vIENoZWNrIHRoZSBjdXJyZW50IHZpZXcKCiAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykKICAgICAgdGhpcy50dXJuKCdwYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIGVsc2UKICAgICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIHJldHVybiB0aGlzOwogIAogIH0sCgogIC8vIE1vdmVzIHBhZ2VzCgogIF9tb3ZlUGFnZXM6IGZ1bmN0aW9uKGZyb20sIGNoYW5nZSkgewoKICAgIHZhciBwYWdlLAogICAgICB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBzaW5nbGUgPSBkYXRhLmRpc3BsYXk9PSdzaW5nbGUnLAogICAgICBtb3ZlID0gZnVuY3Rpb24ocGFnZSkgewoKICAgICAgICB2YXIgbmV4dCA9IHBhZ2UgKyBjaGFuZ2UsCiAgICAgICAgICBvZGQgPSBuZXh0JTIsCiAgICAgICAgICBjbGFzc05hbWUgPSAob2RkKSA/ICcgb2RkICcgOiAnIGV2ZW4gJzsKCiAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pCiAgICAgICAgICBkYXRhLnBhZ2VPYmpzW25leHRdID0gZGF0YS5wYWdlT2Jqc1twYWdlXQogICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3AnICsgcGFnZSArICcgb2RkIGV2ZW4nKQogICAgICAgICAgICAuYWRkQ2xhc3MoJ3AnICsgbmV4dCArIGNsYXNzTmFtZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSAmJiBkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VQbGFjZVtuZXh0XSA9IG5leHQ7CiAgICAgICAgCiAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbbmV4dF0uaGFzQ2xhc3MoJ2ZpeGVkJykpCiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXQogICAgICAgICAgICAuYXR0cigncGFnZScsIG5leHQpOwogICAgICAgIGVsc2UKICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICBjc3ModHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhhdCwgbmV4dCwgdHJ1ZSkpLgogICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgICAgICBkYXRhLnBhZ2VzW25leHRdID0gZGF0YS5wYWdlc1twYWdlXQogICAgICAgICAgICAgIC5mbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgcGFnZTogbmV4dCwKICAgICAgICAgICAgICAgIG5leHQ6IChzaW5nbGUgfHwgb2RkKSA/IG5leHQrMSA6IG5leHQtMSwKICAgICAgICAgICAgICAgIGNvcm5lcnM6IChzaW5nbGUpID8gJ2FsbCcgOgogICAgICAgICAgICAgICAgICAoKG9kZCkgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnKQogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgIGlmIChjaGFuZ2UpIHsKICAgICAgICAgICAgZGVsZXRlIGRhdGEucGFnZXNbcGFnZV07CiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VXcmFwW3BhZ2VdOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgIH0KICAgICAgfQogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5KSB7CgogICAgICBpZiAoJC5pbkFycmF5KGRpc3BsYXksIGRpc3BsYXlzKT09LTEpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCciJytkaXNwbGF5ICsgJyIgaXMgbm90IGEgdmFsdWUgZm9yIGRpc3BsYXknKTsKICAgICAgCiAgICAgIGlmIChkaXNwbGF5PT0nc2luZ2xlJykgewogICAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1swXSkgewoKICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICBjc3MoeydvdmVyZmxvdyc6ICdoaWRkZW4nfSk7CgogICAgICAgICAgZGF0YS5wYWdlT2Jqc1swXSA9ICQoJzxkaXYgLz4nLAogICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICBjc3Moe3dpZHRoOiB0aGlzLndpZHRoKCksIGhlaWdodDogdGhpcy5oZWlnaHQoKX0pLgogICAgICAgICAgICBhcHBlbmRUbyh0aGlzKTsKCiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICB0aGlzLnR1cm4oJ3N0b3AnKS5jc3MoeydvdmVyZmxvdyc6ICcnfSk7CiAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbMF07CiAgICAgICAgfQogICAgICB9CgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0gZWxzZQogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CiAgCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmbGlwYm9vawoKICBkaXJlY3Rpb246IGZ1bmN0aW9uKGRpcikgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihkaXIpPT0ndW5kZWZpbmVkJykgewoKICAgICAgcmV0dXJuIGRhdGEuZGlyZWN0aW9uOwoKICAgIH0gZWxzZSB7CgogICAgICBkaXIgPSBkaXIudG9Mb3dlckNhc2UoKTsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlyLCBkaXJlY3Rpb25zKT09LTEpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCciJyArIGRpciArICciIGlzIG5vdCBhIHZhbHVlIGZvciBkaXJlY3Rpb24nKTsKCiAgICAgIGlmIChkaXI9PSdydGwnKSB7CiAgICAgICAgJCh0aGlzKS5hdHRyKCdkaXInLCAnbHRyJykuCiAgICAgICAgICBjc3Moe2RpcmVjdGlvbjogJ2x0cid9KTsKICAgICAgfQoKICAgICAgZGF0YS5kaXJlY3Rpb24gPSBkaXI7CgogICAgICBpZiAoZGF0YS5kb25lKQogICAgICAgIHRoaXMudHVybignc2l6ZScsICQodGhpcykud2lkdGgoKSwgJCh0aGlzKS5oZWlnaHQoKSk7CgogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiB0aGUgcGFnZXMgYXJlIGJlaW5nIGFuaW1hdGVkCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihib29sKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgICAgZGF0YS5kaXNhYmxlZCA9IGJvb2w9PT11bmRlZmluZWQgfHwgYm9vbD09PXRydWU7CgogICAgZm9yIChwYWdlIGluIGRhdGEucGFnZXMpCiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywgKGJvb2wpID8gJC5pbkFycmF5KHBhZ2UsIHZpZXcpIDogZmFsc2UpOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoICYmIGhlaWdodCkgewoKICAgICAgdmFyIHBhZ2UsIHByb3AsCiAgICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICAgIHBhZ2VXaWR0aCA9IChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSA/IHdpZHRoLzIgOiB3aWR0aDsKCiAgICAgIHRoaXMuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICBpZiAoZGF0YS5wYWdlT2Jqc1swXSkKICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLmNzcyh7d2lkdGg6IHBhZ2VXaWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgCiAgICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VXcmFwKSB7CiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpIGNvbnRpbnVlOwoKICAgICAgICBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CgogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIHJldHVybiB7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfTsKCiAgICB9CiAgfSwKCiAgLy8gUmVzaXplcyBlYWNoIHBhZ2UKCiAgcmVzaXplOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzWzBdKSB7CiAgICAgIGRhdGEucGFnZVdyYXBbMF0uY3NzKHtsZWZ0OiAtdGhpcy53aWR0aCgpfSk7CiAgICAgIGRhdGEucGFnZXNbMF0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CiAgICB9CgogICAgZm9yIChwYWdlID0gMTsgcGFnZSA8PSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2UrKykKICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdyZXNpemUnLCB0cnVlKTsKCgogIH0sCgogIC8vIFJlbW92ZXMgYW4gYW5pbWF0aW9uIGZyb20gdGhlIGNhY2hlCgogIF9yZW1vdmVNdjogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBpLCBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAgIAogICAgZm9yIChpPTA7IGk8ZGF0YS5wYWdlTXYubGVuZ3RoOyBpKyspCiAgICAgIGlmIChkYXRhLnBhZ2VNdltpXT09cGFnZSkgewogICAgICAgIGRhdGEucGFnZU12LnNwbGljZShpLCAxKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgIHJldHVybiBmYWxzZTsKCiAgfSwKCiAgLy8gQWRkcyBhbiBhbmltYXRpb24gdG8gdGhlIGNhY2hlCiAgCiAgX2FkZE12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKICAgIGRhdGEucGFnZU12LnB1c2gocGFnZSk7CgogIH0sCgogIC8vIEdldHMgaW5kZXhlcyBmb3IgYSB2aWV3CgogIF92aWV3OiBmdW5jdGlvbihwYWdlKSB7CiAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgCiAgICBwYWdlID0gcGFnZSB8fCBkYXRhLnBhZ2U7CgogICAgaWYgKGRhdGEuZGlzcGxheT09J2RvdWJsZScpCiAgICAgIHJldHVybiAocGFnZSUyKSA/IFtwYWdlLTEsIHBhZ2VdIDogW3BhZ2UsIHBhZ2UrMV07CiAgICBlbHNlCiAgICAgIHJldHVybiBbcGFnZV07CgogIH0sCgogIC8vIEdldHMgYSB2aWV3CgogIHZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB2aWV3ID0gdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIFsodmlld1swXT4wKSA/IHZpZXdbMF0gOiAwLAogICAgICAgICh2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1sxXSA6IDBdOwogICAgZWxzZQogICAgICByZXR1cm4gWyh2aWV3WzBdPjAgJiYgdmlld1swXTw9ZGF0YS50b3RhbFBhZ2VzKSA/IHZpZXdbMF0gOiAwXTsKCiAgfSwKCiAgLy8gU3RvcHMgYW5pbWF0aW9ucwoKICBzdG9wOiBmdW5jdGlvbihpZ25vcmUsIGFuaW1hdGUpIHsKCiAgICBpZiAodGhpcy50dXJuKCdhbmltYXRpbmcnKSkgewogICAgICB2YXIgaSwgb3B0cywgcGFnZSwKICAgICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgICAgcGFnZXMgPSBkYXRhLnBhZ2VNdjsKCiAgICAgIGRhdGEucGFnZU12ID0gW107CgogICAgICBpZiAoZGF0YS50cGFnZSkgewogICAgICAgIGRhdGEucGFnZSA9IGRhdGEudHBhZ2U7CiAgICAgICAgZGVsZXRlIGRhdGFbJ3RwYWdlJ107CiAgICAgIH0KCiAgICAgIGZvciAoaSA9IDA7IGk8cGFnZXMubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgcGFnZSA9IGRhdGEucGFnZXNbcGFnZXNbaV1dOwogICAgICAgIG9wdHMgPSBwYWdlLmRhdGEoKS5mLm9wdHM7CgogICAgICAgIHBhZ2UuZmxpcCgnaGlkZUZvbGRlZFBhZ2UnLCBmYWxzZSk7CgogICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGRhdGEucGFnZVBsYWNlW29wdHMubmV4dF0gPSBvcHRzLm5leHQ7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB0aGlzLnR1cm4oJ3VwZGF0ZScpOwoKICAgIHJldHVybiB0aGlzOwogIAogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiBwYWdlcwoKICBwYWdlczogZnVuY3Rpb24ocGFnZXMpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlcykgewogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBwYWdlcysxOyBwYWdlPD1kYXRhLnRvdGFsUGFnZXM7IHBhZ2UrKykKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgICBpZiAodGhpcy50dXJuKCdwYWdlJyk+cGFnZXMpCiAgICAgICAgICB0aGlzLnR1cm4oJ3BhZ2UnLCBwYWdlcyk7CiAgICAgIH0KCiAgICAgIGRhdGEudG90YWxQYWdlcyA9IHBhZ2VzOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBwLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScsIHBhZ2UpLAogICAgICBtaXNzaW5nID0gW107CgogICAgZm9yIChwID0gcmFuZ2VbMF07IHA8PXJhbmdlWzFdOyBwKyspIHsKICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzW3BdKQogICAgICAgIG1pc3NpbmcucHVzaChwKTsKICAgIH0KCiAgICBpZiAobWlzc2luZy5sZW5ndGg+MCkKICAgICAgdGhpcy50cmlnZ2VyKCdtaXNzaW5nJywgW21pc3NpbmddKTsKICAgIAogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwogICAgCiAgICB0dXJuTWV0aG9kcy5fbWlzc2luZy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdGhpcy50dXJuKCdzdG9wJyk7CiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlRnJvbURPTS5jYWxsKHRoaXMpOwogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwogICAgdGhpcy50cmlnZ2VyKCd0dXJuZWQnLCBbcGFnZSwgbmV3Vmlld10pOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKICAKICAvLyBUdXJucyB0byBhIHBhZ2UKCiAgX3R1cm5QYWdlOiBmdW5jdGlvbihwYWdlLCBmcm9tTW91c2VBY3Rpb24pIHsKCiAgICB2YXIgY3VycmVudCwgbmV4dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwbGFjZSA9IGRhdGEucGFnZVBsYWNlW3BhZ2VdLAogICAgICB2aWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgIG5ld1ZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAKICAgIGlmIChkYXRhLnBhZ2UhPXBhZ2UpIHsKCiAgICAgIHZhciBldmVudCA9ICQuRXZlbnQoJ3R1cm5pbmcnKTsKICAgICAgdGhpcy50cmlnZ2VyKGV2ZW50LCBbcGFnZSwgbmV3Vmlld10pOwoKICAgICAgaWYgKGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKQogICAgICAgIHJldHVybjsKCiAgICAgIGlmICgkLmluQXJyYXkoMSwgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignZmlyc3QnKTsKICAgICAgaWYgKCQuaW5BcnJheShkYXRhLnRvdGFsUGFnZXMsIG5ld1ZpZXcpIT0tMSkKICAgICAgICB0aGlzLnRyaWdnZXIoJ2xhc3QnKTsKCiAgICB9CgoKCiAgICBpZiAoZnJvbU1vdXNlQWN0aW9uKSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBwbGFjZSk7CgogICAgfSBlbHNlIHsKCiAgICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAgIAogICAgICBpZiAoIWRhdGEucGFnZU9ianNbcGFnZV0pCiAgICAgICAgcmV0dXJuOwoKICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CiAgICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgICB9CiAgICAKCiAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzBdOwogICAgfSBlbHNlIGlmICh2aWV3WzFdICYmIHBhZ2U+dmlld1sxXSkgewogICAgICBjdXJyZW50ID0gdmlld1sxXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMF0gJiYgcGFnZTx2aWV3WzBdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzBdOwogICAgICBuZXh0ID0gbmV3Vmlld1sxXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlc1tjdXJyZW50XSkgewoKICAgICAgdmFyIG9wdHMgPSBkYXRhLnBhZ2VzW2N1cnJlbnRdLmRhdGEoKS5mLm9wdHM7CiAgICAgIGRhdGEudHBhZ2UgPSBuZXh0OwogICAgICAKICAgICAgaWYgKG9wdHMubmV4dCE9bmV4dCkgewogICAgICAgIG9wdHMubmV4dCA9IG5leHQ7CiAgICAgICAgZGF0YS5wYWdlUGxhY2VbbmV4dF0gPSBvcHRzLnBhZ2U7CiAgICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpIHsKICAgICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgICAobmV3Vmlld1swXSA+IHZpZXdbMF0pID8gJ3InIDogJ2wnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAgIChuZXdWaWV3WzBdID4gdmlld1swXSkgPyAnbCcgOiAncicpOwogICAgICAgIH0KCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScpOwoKICAgICAgfQogICAgfQoKICB9LAoKICAvLyBHZXRzIGFuZCBzZXRzIGEgcGFnZQoKICBwYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcGFnZSA9IHBhcnNlSW50KHBhZ2UsIDEwKTsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPjAgJiYgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzKSB7CiAgICAgIGlmICghZGF0YS5kb25lIHx8ICQuaW5BcnJheShwYWdlLCB0aGlzLnR1cm4oJ3ZpZXcnKSkhPS0xKQogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodGhpcywgcGFnZSk7CiAgICAgIGVsc2UKICAgICAgICB0dXJuTWV0aG9kcy5fdHVyblBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEucGFnZTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgbmV4dCB2aWV3CgogIG5leHQ6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0aGlzLnR1cm4oJ3BhZ2UnLAogICAgICB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHRoaXMuZGF0YSgpLnBhZ2UpLnBvcCgpICsgMSk7CiAgCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIHByZXZpb3VzIHZpZXcKCiAgcHJldmlvdXM6IGZ1bmN0aW9uKCkgewogICAgCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5zaGlmdCgpIC0gMSk7CgogIH0sCgogIHBlZWw6IGZ1bmN0aW9uKGNvcm5lciwgYW5pbWF0ZSkgewogICAgCiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgLy8gQWRkcyBhIG1vdGlvbiB0byB0aGUgaW50ZXJuYWwgbGlzdAogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfYWRkTW90aW9uUGFnZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIG9wdHMgPSAkKHRoaXMpLmRhdGEoKS5mLm9wdHMsCiAgICAgIHR1cm4gPSBvcHRzLnR1cm4sCiAgICAgIGRkID0gdHVybi5kYXRhKCk7CgogICAgdHVybk1ldGhvZHMuX2FkZE12LmNhbGwodHVybiwgb3B0cy5wYWdlKTsKICAgIGRkLnBhZ2VQbGFjZVtvcHRzLm5leHRdID0gb3B0cy5wYWdlOwogICAgdHVybi50dXJuKCd1cGRhdGUnKTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9zdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgY29ybmVyKSB7CgogICAgICBpZiAoKGNvcm5lcj09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykKICAgICAgICB8fAogICAgICAgIChjb3JuZXI9PSdyJyAmJiBkYXRhLmRpcmVjdGlvbj09J3J0bCcpKQogICAgICB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dDxvcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlLTE7CiAgICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CgogICAgICB9IGVsc2UgewoKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0Pm9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UrMTsKCiAgICAgIH0KCiAgICB9CgogICAgdHVybk1ldGhvZHMuX2FkZE1vdGlvblBhZ2UuY2FsbChlLnRhcmdldCk7CiAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwob3B0cy50dXJuKTsKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2VuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CgogICAgdmFyIHRoYXQgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHRoYXQuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBvcHRzLnR1cm4sCiAgICAgIGRkID0gdHVybi5kYXRhKCk7CgogICAgaWYgKHR1cm5lZCB8fCBkZC50cGFnZSkgewoKICAgICAgaWYgKGRkLnRwYWdlPT1vcHRzLm5leHQgfHwgZGQudHBhZ2U9PW9wdHMucGFnZSkgewogICAgICAgIGRlbGV0ZSBkZFsndHBhZ2UnXTsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHR1cm4sIGRkLnRwYWdlIHx8IG9wdHMubmV4dCwgdHJ1ZSk7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZU12LmNhbGwodHVybiwgb3B0cy5wYWdlKTsKICAgICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHR1cm4pOwogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0KICAgIAogIH0sCiAgCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9wcmVzc2VkOiBmdW5jdGlvbihlKSB7CgogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9ICQoZS50YXJnZXQpLmRhdGEoKS5mLAogICAgICBwYWdlcyA9IGRhdGEub3B0cy50dXJuLmRhdGEoKS5wYWdlczsKCiAgICBmb3IgKHBhZ2UgaW4gcGFnZXMpCiAgICAgIGlmIChwYWdlIT1kYXRhLm9wdHMucGFnZSkKICAgICAgICBwYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywgdHJ1ZSk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX3JlbGVhc2VkOiBmdW5jdGlvbihlLCBwb2ludCkgewoKICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0ncicpID8KICAgICAgICBwb2ludC54PHBhZ2Uud2lkdGgoKS8yOgogICAgICAgIHBvaW50Lng+cGFnZS53aWR0aCgpLzI7CiAgICB9IGVsc2UgewogICAgICBvdXRBcmVhID0gcG9pbnQueDwwIHx8IHBvaW50Lng+cGFnZS53aWR0aCgpOwogICAgfQoKICAgIGlmICgobmV3IERhdGUoKSkuZ2V0VGltZSgpLWRhdGEudGltZTwyMDAgfHwgb3V0QXJlYSkgewoKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgdHVybk1ldGhvZHMuX3R1cm5QYWdlLmNhbGwoCiAgICAgICAgdHVybiwKICAgICAgICBkYXRhLm9wdHMubmV4dCwKICAgICAgICBmbGlwTWV0aG9kcy5fY29ybmVyQWN0aXZhdGVkLmNhbGwocGFnZSwgcG9pbnQsIDEpID09PSBmYWxzZQogICAgICApOwoKICAgIH0KCiAgICB0dXJuRGF0YS5tb3VzZUFjdGlvbiA9IGZhbHNlOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKICAKICBfZmxpcDogZnVuY3Rpb24oZSkgewoKICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CgogICAgdmFyIG9wdHMgPSAkKGUudGFyZ2V0KS5kYXRhKCkuZi5vcHRzOwoKICAgIG9wdHMudHVybi50cmlnZ2VyKCd0dXJuJywgW29wdHMubmV4dF0pOwoKICAgIGlmIChvcHRzLnR1cm4uZGF0YSgpLm9wdHMuYXV0b0NlbnRlcikKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CgogIH0sCgogIC8vIENhbGN1bGF0ZSB0aGUgei1pbmRleCB2YWx1ZSBmb3IgcGFnZXMgZHVyaW5nIHRoZSBhbmltYXRpb24KCiAgY2FsY3VsYXRlWjogZnVuY3Rpb24obXYpIHsKCiAgICB2YXIgaSwgcGFnZSwgbmV4dFBhZ2UsIHBsYWNlUGFnZSwgZHBhZ2UsCiAgICAgIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgY3VycmVudFBhZ2UgPSB2aWV3WzBdIHx8IHZpZXdbMV0sCiAgICAgIHIgPSB7cGFnZVo6IHt9LCBwYXJ0Wjoge30sIHBhZ2VWOiB7fX0sCgogICAgICBhZGRWaWV3ID0gZnVuY3Rpb24ocGFnZSkgewogICAgICAgIHZhciB2aWV3ID0gdGhhdC50dXJuKCd2aWV3JywgcGFnZSk7CiAgICAgICAgaWYgKHZpZXdbMF0pIHIucGFnZVZbdmlld1swXV0gPSB0cnVlOwogICAgICAgIGlmICh2aWV3WzFdKSByLnBhZ2VWW3ZpZXdbMV1dID0gdHJ1ZTsKICAgICAgfTsKICAgIAogICAgZm9yIChpID0gMDsgaTxtdi5sZW5ndGg7IGkrKykgewogICAgICBwYWdlID0gbXZbaV07CiAgICAgIG5leHRQYWdlID0gZGF0YS5wYWdlc1twYWdlXS5kYXRhKCkuZi5vcHRzLm5leHQ7CiAgICAgIHBsYWNlUGFnZSA9IGRhdGEucGFnZVBsYWNlW3BhZ2VdOwogICAgICBhZGRWaWV3KHBhZ2UpOwogICAgICBhZGRWaWV3KG5leHRQYWdlKTsKICAgICAgZHBhZ2UgPSAoZGF0YS5wYWdlUGxhY2VbbmV4dFBhZ2VdPT1uZXh0UGFnZSkgPyBuZXh0UGFnZSA6IHBhZ2U7CiAgICAgIHIucGFnZVpbZHBhZ2VdID0gZGF0YS50b3RhbFBhZ2VzIC0gTWF0aC5hYnMoY3VycmVudFBhZ2UtZHBhZ2UpOwogICAgICByLnBhcnRaW3BsYWNlUGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMqMiArIE1hdGguYWJzKGN1cnJlbnRQYWdlLWRwYWdlKTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VNdi5sZW5ndGggJiYgZGF0YS5wYWdlTXZbMF0hPT0wKSB7CgogICAgICAvLyBVcGRhdGUgbW90aW9uCgogICAgICB2YXIgcCwKICAgICAgICBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogICAgCiAgICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VXcmFwKSB7CgogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIGZpeGVkID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKTsKCiAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXS5jc3MoewogICAgICAgICAgZGlzcGxheTogKHBvcy5wYWdlVltwYWdlXSB8fCBmaXhlZCkgPyAnJyA6ICdub25lJywKICAgICAgICAgICd6LWluZGV4JzogcG9zLnBhZ2VaW3BhZ2VdIHx8ICgoZml4ZWQpID8gLTEgOiAwKQogICAgICAgIH0pOwoKICAgICAgICBpZiAoKHAgPSBkYXRhLnBhZ2VzW3BhZ2VdKSkgewogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CgogICAgICAgICAgaWYgKGRhdGEudHBhZ2UpCiAgICAgICAgICAgIHAuZmxpcCgnZGlzYWJsZScsIHRydWUpOyAvLyBkYXRhLmRpc2FibGVkIHx8IHBhZ2UhPWFwYWdlCiAgICAgICAgfQogICAgICB9CiAgCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgICAgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLmZsaXAoJ3onLCBudWxsKTsKCiAgICAgIH0KICAgIH0KICB9LAoKICAvLyBVcGRhdGVzIHRoZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0aGUgZmxpcGJvb2sncyBzaGFkb3cKCiAgX3VwZGF0ZVNoYWRvdzogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciB2aWV3LCB2aWV3Miwgc2hhZG93LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpLAogICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgPyB3aWR0aCA6IHdpZHRoLzI7CgogICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGlmICghZGF0YS5zaGFkb3cpIHsKICAgICAgZGF0YS5zaGFkb3cgPSAkKCc8ZGl2IC8+JywKICAgICAgewogICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICdjc3MnOiBkaXZBdHQoMCwgMCwgMCkuY3NzCiAgICAgIH0pLgogICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAocGFnZT09dmlld1swXSB8fCBwYWdlPT12aWV3WzFdKSB7CiAgICAgIAogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyh7ekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsIGRpc3BsYXk6ICcnfSk7CiAgICAgIHJldHVybiAxOwoKICAgIH0gZWxzZSBpZiAoKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwKICAgICAgcGFnZT09dmlld1sxXSsyKSkgewogICAgICAKICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXS5jc3Moe3pJbmRleDogZGF0YS50b3RhbFBhZ2VzLTEsIGRpc3BsYXk6ICcnfSk7CiAgICAgIHJldHVybiAyOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyh7ekluZGV4OiAwLAogICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICApOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgb3B0aW9ucwoKICBvcHRpb25zOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAKICAgIGlmIChvcHRpb25zPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gdGhpcy5kYXRhKCkub3B0czsKCiAgICB9IGVsc2UgewoKICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIC8vIFNldCBuZXcgdmFsdWVzCgogICAgICAkLmV4dGVuZChkYXRhLm9wdHMsIG9wdGlvbnMpOwogICAgICAKICAgICAgLy8gU2V0IHBhZ2VzCgogICAgICBpZiAob3B0aW9ucy5wYWdlcykKICAgICAgICB0aGlzLnR1cm4oJ3BhZ2VzJywgb3B0aW9ucy5wYWdlcyk7CgogICAgICAvLyBTZXQgcGFnZQoKICAgICAgaWYgKG9wdGlvbnMucGFnZSkKICAgICAgICB0aGlzLnR1cm4oJ3BhZ2UnLCBvcHRpb25zLnBhZ2UpOwoKICAgICAgLy8gU2V0IGRpc3BsYXkKCiAgICAgIGlmIChvcHRpb25zLmRpc3BsYXkpCiAgICAgICAgdGhpcy50dXJuKCdkaXNwbGF5Jywgb3B0aW9ucy5kaXNwbGF5KTsKICAgICAgCiAgICAgIC8vIFNldCBkaXJlY3Rpb24KCiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbikKICAgICAgICB0aGlzLnR1cm4oJ2RpcmVjdGlvbicsIG9wdGlvbnMuZGlyZWN0aW9uKTsKCiAgICAgIC8vIFNldCBzaXplCgogICAgICBpZiAob3B0aW9ucy53aWR0aCAmJiBvcHRpb25zLmhlaWdodCkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCBvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCk7CiAgICAgIAogICAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgICBpZiAob3B0aW9ucy53aGVuKQogICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBvcHRpb25zLndoZW4pCiAgICAgICAgICBpZiAoaGFzKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuKSkgewogICAgICAgICAgICB0aGlzLnVuYmluZChldmVudE5hbWUpLgogICAgICAgICAgICAgIGJpbmQoZXZlbnROYW1lLCBvcHRpb25zLndoZW5bZXZlbnROYW1lXSk7CiAgICAgICAgICB9CgogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCB2ZXJzaW9uCgogIHZlcnNpb246IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB2ZXJzaW9uOwoKICB9Cn0sCgovLyBNZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGZvciB0aGUgZmxpcCBwYWdlIGVmZmVjdAoKZmxpcE1ldGhvZHMgPSB7CgogIC8vIENvbnN0cnVjdG9yCgogIGluaXQ6IGZ1bmN0aW9uKG9wdHMpIHsKCiAgICB0aGlzLmRhdGEoe2Y6CiAgICAgIHtlZmZlY3Q6IChvcHRzLmNvcm5lcnM9PSdyJyB8fCBvcHRzLmNvcm5lcnM9PSdsJykgPyAnaGFyZCcgOiAnc2hlZXQnfX0KICAgICk7CgogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKGRhdGEuZndyYXBwZXIpIHsKICAgICAgZGF0YS5vcHRzWyd6LWluZGV4J10gPSB6OwogICAgICBkYXRhLmZ3cmFwcGVyLmNzcygKICAgICAgICB7J3otaW5kZXgnOiB6IHx8IHBhcnNlSW50KGRhdGEucGFyZW50LmNzcygnei1pbmRleCcpLCAxMCkgfHwgMH0KICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBfY0FsbG93ZWQ6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgIHBhZ2UgPSBkYXRhLm9wdHMucGFnZSwKICAgIG9kZCA9IHBhZ2UlMjsKCiAgICBpZiAodHVybkRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKICAgICAgaWYgKHBhZ2U9PTEpCiAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICBjb3JuZXJzWydmb3J3YXJkJ10gOiBjb3JuZXJzWydiYWNrd2FyZCddOwogICAgICBlbHNlIGlmIChwYWdlPT10dXJuRGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1snYmFja3dhcmQnXSA6IGNvcm5lcnNbJ2ZvcndhcmQnXTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKICAgIH0gZWxzZSB7CgogICAgICByZXR1cm4gKHR1cm5EYXRhLmRpcmVjdGlvbj09J2x0cicpID8KICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJ10KICAgICAgICA6CiAgICAgICAgY29ybmVyc1sob2RkKSA/ICdiYWNrd2FyZCcgOiAnZm9yd2FyZCddOwoKICAgIH0KCiAgfSwKCiAgX2Nvcm5lckFjdGl2YXRlZDogZnVuY3Rpb24oZSkgewogIAogIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwb3MgPSBkYXRhLnBhcmVudC5vZmZzZXQoKSwKICAgICAgd2lkdGggPSB0aGlzLndpZHRoKCksCiAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgIGMgPSB7eDogTWF0aC5tYXgoMCwgZS5wYWdlWC1wb3MubGVmdCksIHk6IE1hdGgubWF4KDAsIGUucGFnZVktcG9zLnRvcCl9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAoYy54PD0wIHx8IGMueTw9MCB8fCBjLng+PXdpZHRoIHx8IGMueT49aGVpZ2h0KQogICAgICByZXR1cm4gZmFsc2U7CgogICAgdmFyIGFsbG93ZWRDb3JuZXJzID0gZmxpcE1ldGhvZHMuX2NBbGxvd2VkLmNhbGwodGhpcyk7CgogICAgaWYgKGMueD53aWR0aC1jc3opCiAgICAgIGMuY29ybmVyID0gJ3InOwogICAgZWxzZSBpZiAoYy54PGNzeikKICAgICAgYy5jb3JuZXIgPSAnbCc7CiAgICBlbHNlCiAgICAgIHJldHVybiBmYWxzZTsKCgogICAgcmV0dXJuICgkLmluQXJyYXkoYy5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8gZmFsc2UgOiBjOwoKICB9LAoKICBfYzogZnVuY3Rpb24oY29ybmVyLCBvcHRzKSB7CgogICAgb3B0cyA9IG9wdHMgfHwgMDsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICdsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCAwKTsKICAgICAgY2FzZSAncic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpLW9wdHMsIDApOwogICAgfQoKICB9LAoKICBfYzI6IGZ1bmN0aW9uKGNvcm5lcikgewoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ2wnOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKSoyLCAwKTsKICAgICAgY2FzZSAncic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICB9CgogIH0sCgogIF9mb2xkaW5nUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBvcHRzID0gZGF0YS5vcHRzOwoKICAgIGlmIChkYXRhLmZvbGRpbmcpIHJldHVybiBkYXRhLmZvbGRpbmc7CiAgICBlbHNlIGlmKG9wdHMudHVybikgewoKICAgICAgZGF0YSA9IG9wdHMudHVybi5kYXRhKCk7CiAgICAgIGlmIChkYXRhLmRpc3BsYXkgPT0gJ3NpbmdsZScpCiAgICAgICAgcmV0dXJuIChkYXRhLnBhZ2VPYmpzW29wdHMubmV4dF0pID8gZGF0YS5wYWdlT2Jqc1swXSA6IG51bGw7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gZGF0YS5wYWdlT2Jqc1tvcHRzLm5leHRdOwogICAgfQoKICB9LAoKICBfYmFja0dyYWRpZW50OiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgZ3JhZGllbnQgPSBkYXRhLm9wdHMuZ3JhZGllbnRzICYmCiAgICAgICAgKCF0dXJuIHx8CiAgICAgICAgdHVybi5kYXRhKCkuZGlzcGxheT09J3NpbmdsZScgfHwKICAgICAgICAoZGF0YS5vcHRzLnBhZ2UhPTIgJiYgZGF0YS5vcHRzLnBhZ2UhPXR1cm4uZGF0YSgpLnRvdGFsUGFnZXMtMSkpOwoKCiAgICByZXR1cm4gZ3JhZGllbnQ7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKCiAgICBpZiAoZnVsbCkgewogICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIGRhdGEuZnBhZ2UuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50KCk7CgogICAgZGF0YS5wYXJlbnQgPSBwYXJlbnQ7CgogICAgaWYgKCFkYXRhLndyYXBwZXIpIHsKICAgICAgICAKICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKCiAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgY3NzKGNzc1Byb3BlcnRpZXMpLgogICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgIGRhdGEuZnBhZ2UgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgMSkpLgogICAgICAgIGNzcyhjc3NQcm9wZXJ0aWVzKS4KICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwoKICAgIH0KCiAgICAvLyBTZXQgc2l6ZQogICAgZmxpcE1ldGhvZHMucmVzaXplLmNhbGwodGhpcywgdHJ1ZSk7CgogIH0sCgogIC8vIFRha2VzIGEgMlAgcG9pbnQgZnJvbSB0aGUgc2NyZWVuIGFuZCBhcHBsaWVzIHRoZSB0cmFuc2Zvcm1hdGlvbgoKICBfZm9sZDogZnVuY3Rpb24ocG9pbnQpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHJlbFggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiAgcG9pbnQueCwKICAgICAgd2lkdGggPSB0aGlzLndpZHRoKCksCiAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7CgogICAgICByZWxYID0gTWF0aC5taW4od2lkdGgqMiwgTWF0aC5tYXgoMCwgcmVsWCkpOwoKCiAgICAgIHN3aXRjaChwb2ludC5jb3JuZXIpIHsKICAgICAgICBjYXNlICdyJyA6CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHsKICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KDAsIHdpZHRoLXJlbFgpCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuY3NzKHsKICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsCiAgICAgICAgICAgIGxlZnQ6IC1yZWxYCiAgICAgICAgICB9KTsKCiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7CiAgICAgICAgICAgIGxlZnQ6IC1yZWxYICsgd2lkdGgsCiAgICAgICAgICAgIHdpZHRoOiBNYXRoLm1heCgwLCByZWxYLXdpZHRoKQogICAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbCcgOgoKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3MoewogICAgICAgICAgICB3aWR0aDogd2lkdGgKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jc3MoewogICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgICAgbGVmdDogcmVsWAogICAgICAgICAgfSk7CgogICAgICAgICAgZGF0YS5mcGFnZS5jc3MoewogICAgICAgICAgICBsZWZ0OiB3aWR0aCwKICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KDAsIHJlbFgtd2lkdGgpCiAgICAgICAgICB9KTsKCiAgICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgICBkYXRhLmZvbGRpbmcuY3NzKHsKICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgICAgICBsZWZ0OiAtd2lkdGgqMiArIHJlbFgKICAgICAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGRhdGEucGFyZW50LmNzcyh7J292ZXJmbG93JzogJ3Zpc2libGUnfSk7CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKGJvb2wpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CiAgICAgIAogICAgaWYgKGJvb2wpIHsKICAgICAgCiAgICAgIHZhciBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwogICAgICAKICAgICAgaWYgKGZvbGRpbmcpIHsKCiAgICAgICAgaWYgKGRhdGEuZm9sZGluZykgewogICAgICAgICAgaWYgKGRhdGEuZm9sZGluZz09PWZvbGRpbmcpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAKICAgICAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywKICAgICAgICAgIHtiYWNrUGFyZW50OiBmb2xkaW5nLnBhcmVudCgpLAogICAgICAgICAgZm9sZGluZzogZm9sZGluZ30pOwoKICAgICAgICBkYXRhLmZwYWdlLnByZXBlbmQoZm9sZGluZyk7CgogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CiAgICAgIGlmIChkYXRhLmJhY2tQYXJlbnQpIHsKICAgICAgICBkYXRhLmJhY2tQYXJlbnQucHJlcGVuZChkYXRhLmZvbGRpbmcpOwogICAgICAgIGRlbGV0ZSBkYXRhLmJhY2tQYXJlbnQ7CiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKICAgICAgfQogICAgfQogIH0sCgogIF9zaG93Rm9sZGVkUGFnZTogZnVuY3Rpb24oYywgYW5pbWF0ZSkgewoKICAgIHZhciBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgIGRkID0gdGhpcy5kYXRhKCksCiAgICAgIGRhdGEgPSBkZC5mLAogICAgICB2aXNpYmxlID0gZGF0YS52aXNpYmxlOwoKICAgIGlmICghdmlzaWJsZSB8fCAhZGF0YS5wb2ludCB8fCBkYXRhLnBvaW50LmNvcm5lciE9Yy5jb3JuZXIpIHsKICAgICAgCiAgICAgIHZhciBtQWN0aW9uID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLm1vdXNlQWN0aW9uOwoKICAgICAgdmFyIGV2ZW50ID0gJC5FdmVudCgnc3RhcnQnKTsKICAgICAgdGhpcy50cmlnZ2VyKGV2ZW50LCBbZGF0YS5vcHRzLCBjLmNvcm5lcl0pOwogICAgICB2aXNpYmxlID0gZmFsc2U7CgogICAgICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIH0KCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKGFuaW1hdGUpIHsKICAgICAgICAKICAgICAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgICAgICBwb2ludCA9IChkYXRhLnBvaW50ICYmIGRhdGEucG9pbnQuY29ybmVyPT1jLmNvcm5lcikgPwogICAgICAgICAgZGF0YS5wb2ludCA6IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgYy5jb3JuZXIsIDEpOwogICAgICAKICAgICAgICB0aGlzLmFuaW1hdGVmKHtmcm9tOiBbcG9pbnQueCwgcG9pbnQueV0sCiAgICAgICAgICB0bzogW2MueCwgYy55XSwKICAgICAgICAgIGR1cmF0aW9uOiA1MDAsCiAgICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgICBjLnggPSBNYXRoLnJvdW5kKHZbMF0pOwogICAgICAgICAgICBjLnkgPSBNYXRoLnJvdW5kKHZbMV0pOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIGMpOwogICAgICAgICAgfX0pOwoKICAgICAgfSBlbHNlICB7CgogICAgICAgIGZsaXBNZXRob2RzLl9mb2xkLmNhbGwodGhpcywgYyk7CiAgICAgICAgaWYgKGRkLmVmZmVjdCAmJiAhZGQuZWZmZWN0LnR1cm5pbmcpCiAgICAgICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKCiAgICAgIH0KCiAgICAgIGlmICghdmlzaWJsZSkgewoKICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICBkYXRhLmZwYWdlLnNob3coKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpOwoKICAgIHRoaXMuY3NzKHsKICAgICAgcG9zaXRpb246ICcnLAogICAgICBsZWZ0OiAnYXV0bycKICAgIH0pOwoKICAgIGRhdGEud3JhcHBlci5jc3MoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpCiAgICB9KTsKCiAgICBkYXRhLmZwYWdlLmNzcyh7CiAgICAgIHdpZHRoOiB0aGlzLndpZHRoKCkKICAgIH0pOwoKICAgIGlmIChkYXRhLmZvbGRpbmcpCiAgICAgIGRhdGEuZm9sZGluZy5jc3MoewogICAgICAgIHBvc2l0aW9uOiAnJywKICAgICAgICBsZWZ0OiAnYXV0bycKICAgICAgfSk7CgogICAgZGF0YS5mcGFnZS5oaWRlKCk7CgogICAgZGF0YS52aXNpYmxlID0gZmFsc2U7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgaGlkZUZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGFuaW1hdGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLnBvaW50KSByZXR1cm47CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBwMSA9IGRhdGEucG9pbnQsCiAgICAgIGhpZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICBkYXRhLnBvaW50ID0gbnVsbDsKICAgICAgICB0aGF0LmZsaXAoJ2hpZGUnKTsKICAgICAgICB0aGF0LnRyaWdnZXIoJ2VuZCcsIFtkYXRhLm9wdHMsIGZhbHNlXSk7CiAgICAgIH07CgogICAgaWYgKGFuaW1hdGUpIHsKICAgICAgdmFyIHA0ID0gZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBwMS5jb3JuZXIpLAogICAgICAgIHRvcCA9IChwMS5jb3JuZXIuc3Vic3RyKDAsMSk9PSd0JyksCiAgICAgICAgZGVsdGEgPSAodG9wKSA/IE1hdGgubWluKDAsIHAxLnktcDQueSkvMiA6IE1hdGgubWF4KDAsIHAxLnktcDQueSkvMiwKICAgICAgICBwMiA9IHBvaW50MkQocDEueCwgcDEueStkZWx0YSksCiAgICAgICAgcDMgPSBwb2ludDJEKHA0LngsIHA0LnktZGVsdGEpOwogICAgCiAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgIGZyb206IDAsCiAgICAgICAgdG86IDEsCiAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgIHZhciBucCA9IGJlemllcihwMSwgcDIsIHAzLCBwNCwgdik7CiAgICAgICAgICBwMS54ID0gbnAueDsKICAgICAgICAgIHAxLnkgPSBucC55OwogICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBwMSk7CiAgICAgICAgfSwKICAgICAgICBjb21wbGV0ZTogaGlkZSwKICAgICAgICBkdXJhdGlvbjogODAwLAogICAgICAgIGhpZGluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwogICAgICBoaWRlKCk7CiAgICB9CiAgfSwKCiAgdHVyblBhZ2U6IGZ1bmN0aW9uKGNvcm5lcikgewoKICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLm9wdHMuZWxldmF0aW9uIDogMCksCiAgICAgIHA0ID0gZmxpcE1ldGhvZHMuX2MyLmNhbGwodGhpcywgY29ybmVyLmNvcm5lcik7CgogICAgICB0aGlzLnRyaWdnZXIoJ2ZsaXAnKS4KICAgICAgICBhbmltYXRlZih7CiAgICAgICAgICBmcm9tOiAwLAogICAgICAgICAgdG86IDEsCiAgICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKCiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoYXQsIGNvcm5lcik7CiAgICAgICAgICB9LAogICAgICAgICAgCiAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoYXQudHJpZ2dlcignZW5kJywgW2RhdGEub3B0cywgdHJ1ZV0pOwogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiBkYXRhLm9wdHMuZHVyYXRpb24sCiAgICAgICAgICB0dXJuaW5nOiB0cnVlCiAgICAgICAgfSk7CgogICAgICBkYXRhLmNvcm5lciA9IG51bGw7CiAgfSwKCiAgbW92aW5nOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gJ2VmZmVjdCcgaW4gdGhpcy5kYXRhKCk7CiAgCiAgfSwKCiAgaXNUdXJuaW5nOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy5mbGlwKCdtb3ZpbmcnKSAmJiB0aGlzLmRhdGEoKS5lZmZlY3QudHVybmluZzsKICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykpIHsKCiAgICAgIGRhdGEuY29ybmVyID0gZmxpcE1ldGhvZHMuX2Nvcm5lckFjdGl2YXRlZC5jYWxsKHRoaXMsIGUpOwogICAgCiAgICAgIGlmIChkYXRhLmNvcm5lciAmJiBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcikpIHsKICAgICAgCiAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIGRhdGEuY29ybmVyKSkKICAgICAgICAgIHRoaXMudHJpZ2dlcigncHJlc3NlZCcsIFtkYXRhLnBvaW50XSk7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CiAgICAKICAgICAgaWYgKGRhdGEuY29ybmVyKSB7CgogICAgICAgIHZhciBwb3MgPSBkYXRhLnBhcmVudC5vZmZzZXQoKTsKICAgICAgICBkYXRhLmNvcm5lci54ID0gZVswXS5wYWdlWC1wb3MubGVmdDsKICAgICAgICBkYXRhLmNvcm5lci55ID0gZVswXS5wYWdlWS1wb3MudG9wOwogICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIGRhdGEuY29ybmVyKTsKCiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGF0YSgpLmVmZmVjdCAmJiB0aGlzLmlzKCc6dmlzaWJsZScpKSB7CiAgICAKCiAgICAgICAgdmFyIGNvcm5lciA9IGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLCBlWzBdKTsKCiAgICAgICAgaWYgKGNvcm5lcikgewogICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLmNvcm5lciwgZGF0YS5vcHRzLmNvcm5lclNpemUvMik7CiAgICAgICAgICBjb3JuZXIueCA9IG9yaWdpbi54OwogICAgICAgICAgY29ybmVyLnkgPSBvcmlnaW4ueTsKICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIGNvcm5lciwgdHJ1ZSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBmbGlwTWV0aG9kcy5oaWRlRm9sZGVkUGFnZS5jYWxsKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAKCiAgICAgIH0KICAgIH0KICB9LAoKICBfZXZlbnRFbmQ6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgZGF0YS5wb2ludCkgewogICAgICB2YXIgZXZlbnQgPSAkLkV2ZW50KCdyZWxlYXNlZCcpOwogICAgICB0aGlzLnRyaWdnZXIoZXZlbnQsIFtkYXRhLnBvaW50XSk7CiAgICAgIGlmICghZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgIH0KCiAgICBkYXRhLmNvcm5lciA9IG51bGw7CgogIH0sCgogIGRpc2FibGU6IGZ1bmN0aW9uKGRpc2FibGUpIHsKCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydkaXNhYmxlZCc6IGRpc2FibGV9KTsKICAgIHJldHVybiB0aGlzOwoKICB9Cn07CgoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWNvcmF0b3IodGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBhbiBpbnZhbGlkIHZhbHVlJyk7Cn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgICAgdG9wOiB0b3AsCiAgICAgICAgbGVmdDogbGVmdCwKICAgICAgICAnb3ZlcmZsb3cnOiBvdmVyZiB8fCAnaGlkZGVuJywKICAgICAgICAnei1pbmRleCc6IHpJbmRleCB8fCAnYXV0bycKICAgICAgICB9CiAgICB9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQoKLy8gR2V0cyBhIDJEIHBvaW50CgpmdW5jdGlvbiBwb2ludDJEKHgsIHkpIHsKICAKICByZXR1cm4ge3g6IHgsIHk6IHl9OwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gSlMgRXJyb3JzCgpmdW5jdGlvbiB0dXJuRXJyb3IobWVzc2FnZSkgewoKICBmdW5jdGlvbiBUdXJuSnNFcnJvcihtZXNzYWdlKSB7CiAgICB0aGlzLm5hbWUgPSAiVHVybkpzRXJyb3IiOwogICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKICB9CgogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOwogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR1cm5Kc0Vycm9yOwoKICByZXR1cm4gbmV3IFR1cm5Kc0Vycm9yKG1lc3NhZ2UpOwp9CgovLyBGaW5kIHRoZSBvZmZzZXQgb2YgYW4gZWxlbWVudCBkaXNjYXJkaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKICB2YXIgb2Zmc2V0ID0ge3RvcDogMCwgbGVmdDogMH07CgogIGRvewogICAgb2Zmc2V0LmxlZnQgKz0gb2JqLm9mZnNldExlZnQ7CiAgICBvZmZzZXQudG9wICs9IG9iai5vZmZzZXRUb3A7CiAgfSB3aGlsZSAoKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpKTsKCiAgcmV0dXJuIG9mZnNldDsKfQoKCi8vIFJlcXVlc3QgYW4gYW5pbWF0aW9uCgp3aW5kb3cucmVxdWVzdEFuaW0gPSBmdW5jdGlvbihjYWxsYmFjaykgewogIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApOwp9CgoKZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHsKICByZXR1cm4gJyc7Cn0KCgovLyBFeHRlbmQgJC5mbgoKJC5leHRlbmQoJC5mbiwgewoKICBmbGlwOiBmdW5jdGlvbihyZXEsIG9wdHMpIHsKICAgIHJldHVybiBkZWNvcmF0b3IodGhpcywgZmxpcE1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHVybjogZnVuY3Rpb24ocmVxKSB7CiAgICByZXR1cm4gZGVjb3JhdG9yKHRoaXMsIHR1cm5NZXRob2RzLCBhcmd1bWVudHMpOwogIH0sCgogIHRyYW5zZm9ybTogZnVuY3Rpb24odHJhbnNmb3JtLCBvcmlnaW4pIHsKCiAgICB2YXIgcHJvcGVydGllcyA9IHt9OwogICAgCiAgICBpZiAob3JpZ2luKQogICAgICBwcm9wZXJ0aWVzW3ZlbmRvcisndHJhbnNmb3JtLW9yaWdpbiddID0gb3JpZ2luOwogICAgCiAgICBwcm9wZXJ0aWVzW3ZlbmRvcisndHJhbnNmb3JtJ10gPSB0cmFuc2Zvcm07CiAgCiAgICByZXR1cm4gdGhpcy5jc3MocHJvcGVydGllcyk7CgogIH0sCgogIGFuaW1hdGVmOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEuZWZmZWN0KQogICAgICBkYXRhLmVmZmVjdC5zdG9wKCk7CgogICAgaWYgKHBvaW50KSB7CgogICAgICBpZiAoIXBvaW50LnRvLmxlbmd0aCkgcG9pbnQudG8gPSBbcG9pbnQudG9dOwogICAgICBpZiAoIXBvaW50LmZyb20ubGVuZ3RoKSBwb2ludC5mcm9tID0gW3BvaW50LmZyb21dOwoKICAgICAgdmFyIGRpZmYgPSBbXSwKICAgICAgICBsZW4gPSBwb2ludC50by5sZW5ndGgsCiAgICAgICAgYW5pbWF0aW5nID0gdHJ1ZSwKICAgICAgICB0aGF0ID0gdGhpcywKICAgICAgICB0aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwKICAgICAgICBmcmFtZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICAgIGlmICghZGF0YS5lZmZlY3QgfHwgIWFuaW1hdGluZykKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgIHZhciB2ID0gW10sCiAgICAgICAgICAgIHRpbWVEaWZmID0gTWF0aC5taW4ocG9pbnQuZHVyYXRpb24sIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSB0aW1lKTsKCiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgICAgICB2LnB1c2goZGF0YS5lZmZlY3QuZWFzaW5nKDEsIHRpbWVEaWZmLCBwb2ludC5mcm9tW2ldLCBkaWZmW2ldLCBwb2ludC5kdXJhdGlvbikpOwoKICAgICAgICAgIHBvaW50LmZyYW1lKChsZW49PTEpID8gdlswXSA6IHYpOwoKICAgICAgICAgIGlmICh0aW1lRGlmZj09cG9pbnQuZHVyYXRpb24pIHsKICAgICAgICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwogICAgICAgICAgICB0aGF0LmRhdGEoZGF0YSk7CiAgICAgICAgICAgIGlmIChwb2ludC5jb21wbGV0ZSkKICAgICAgICAgICAgICBwb2ludC5jb21wbGV0ZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltKGZyYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICBkaWZmLnB1c2gocG9pbnQudG9baV0gLSBwb2ludC5mcm9tW2ldKTsKCiAgICAgIGRhdGEuZWZmZWN0ID0gJC5leHRlbmQoewogICAgICAgIHN0b3A6IGZ1bmN0aW9uKCkgewogICAgICAgICAgYW5pbWF0aW5nID0gZmFsc2U7CiAgICAgICAgfSwKICAgICAgICBlYXNpbmc6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkYXRhKSB7CiAgICAgICAgICByZXR1cm4gYyAqIE1hdGguc3FydCgxIC0gKHQ9dC9kYXRhLTEpKnQpICsgYjsKICAgICAgICB9CiAgICAgIH0sIHBvaW50KTsKCiAgICAgIHRoaXMuZGF0YShkYXRhKTsKCiAgICAgIGZyYW1lKCk7CgogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIGRlbGV0ZSBkYXRhWydlZmZlY3QnXTsKCiAgICB9CiAgfQp9KTsKCi8vIEV4cG9ydCBzb21lIGdsb2JhbHMKCiQuaXNUb3VjaCA9IGlzVG91Y2g7CiQubW91c2VFdmVudHMgPSBtb3VzZUV2ZW50czsKJC5jc3NQcmVmaXggPSBlbXB0eUZ1bmN0aW9uOwokLmNzc1RyYW5zaXRpb25FbmQgPSBlbXB0eUZ1bmN0aW9uOwokLmZpbmRQb3MgPSBmaW5kUG9zOwoKfSkoalF1ZXJ5KTs='></script>
<!--	<script src='/fb/lib/zoom.js'></script>	-->
	<script src='data:/text/plain;base64,LyoqCiAqIHpvb20uanMKICogd3d3LnR1cm5qcy5jb20KICogdHVybmpzLmNvbS9saWNlbnNlLnR4dAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMTIgRW1tYW51ZWwgR2FyY2lhCiAqKi8KCihmdW5jdGlvbigkKSB7CgondXNlIHN0cmljdCc7Cgp2YXIgaGFzM2QsCgp6b29tT3B0aW9ucyA9IHsKICBtYXg6IDIsCiAgZmxpcGJvb2s6IG51bGwsCiAgZWFzZUZ1bmN0aW9uOiAnZWFzZS1pbi1vdXQnLAogIGR1cmF0aW9uOiA1MDAsCiAgd2hlbjoge30KfSwKCnpvb21NZXRob2RzID0gewogIGluaXQ6IGZ1bmN0aW9uKG9wdHMpIHsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICBvcHRpb25zID0gJC5leHRlbmQoe30sIHpvb21PcHRpb25zLCBvcHRzKTsKCiAgICBpZiAoIW9wdGlvbnMuZmxpcGJvb2sgfHwgIW9wdGlvbnMuZmxpcGJvb2sudHVybignaXMnKSkgewogICAgICB0aHJvdyBlcnJvcignb3B0aW9ucy5mbGlwYm9vayBpcyByZXF1aXJlZCcpOwogICAgfQoKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKCiAgICBpZiAodHlwZW9mKG9wdGlvbnMubWF4KSE9J2Z1bmN0aW9uJykgewogICAgICB2YXIgbWF4ID0gb3B0aW9ucy5tYXg7CiAgICAgIG9wdGlvbnMubWF4ID0gZnVuY3Rpb24oKSB7IHJldHVybiBtYXg7IH07CiAgICB9CgogICAgZGF0YS56b29tID0gewogICAgICBvcHRzOiBvcHRpb25zLAogICAgICBheGlzOiBwb2ludDJEKDAsIDApLAogICAgICBzY3JvbGxQb3M6IHBvaW50MkQoMCwgMCksCiAgICAgIGV2ZW50UXVldWU6IFtdLAogICAgICBtb3VzZXVwRXZlbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB6b29tTWV0aG9kcy5fZU1vdXNlVXAuYXBwbHkodGhhdCwgYXJndW1lbnRzKTsKICAgICAgfSwKICAgICAgZXZlbnRUb3VjaFN0YXJ0OiBiaW5kKHpvb21NZXRob2RzLl9lVG91Y2hTdGFydCwgdGhhdCksCiAgICAgIGV2ZW50VG91Y2hNb3ZlOiBiaW5kKHpvb21NZXRob2RzLl9lVG91Y2hNb3ZlLCB0aGF0KSwKICAgICAgZXZlbnRUb3VjaEVuZDogYmluZCh6b29tTWV0aG9kcy5fZVRvdWNoRW5kLCB0aGF0KSwKICAgICAgZmxpcGJvb2tFdmVudHM6IHsKICAgICAgICB6b29taW5nOiBiaW5kKHpvb21NZXRob2RzLl9lWm9vbSwgdGhhdCksCiAgICAgICAgcHJlc3NlZDogYmluZCh6b29tTWV0aG9kcy5fZVByZXNzZWQsIHRoYXQpLAogICAgICAgIHJlbGVhc2VkOiBiaW5kKHpvb21NZXRob2RzLl9lUmVsZWFzZWQsIHRoYXQpLAogICAgICAgIHN0YXJ0OiBiaW5kKHpvb21NZXRob2RzLl9lU3RhcnQsIHRoYXQpLAogICAgICAgIHR1cm5pbmc6IGJpbmQoem9vbU1ldGhvZHMuX2VUdXJuaW5nLCB0aGF0KSwKICAgICAgICB0dXJuZWQ6IGJpbmQoem9vbU1ldGhvZHMuX2VUdXJuZWQsIHRoYXQpLAogICAgICAgIGRlc3Ryb3lpbmc6IGJpbmQoem9vbU1ldGhvZHMuX2VEZXN0cm95aW5nLCB0aGF0KQogICAgICB9CiAgICB9OwoKICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBvcHRpb25zLndoZW4pIHsKICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLndoZW4sIGV2ZW50TmFtZSkpIHsKICAgICAgICB0aGlzLmJpbmQoJ3pvb20uJytldmVudE5hbWUsIG9wdGlvbnMud2hlbltldmVudE5hbWVdKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoZXZlbnROYW1lIGluIGRhdGEuem9vbS5mbGlwYm9va0V2ZW50cykgewogICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEuem9vbS5mbGlwYm9va0V2ZW50cywgZXZlbnROYW1lKSkgewogICAgICAgIG9wdGlvbnMuZmxpcGJvb2suYmluZChldmVudE5hbWUsIGRhdGEuem9vbS5mbGlwYm9va0V2ZW50c1tldmVudE5hbWVdKTsKICAgICAgfQogICAgfQoKICAgIHRoaXMuY3NzKHsKICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsCiAgICAgIG92ZXJmbG93IDogJ2hpZGRlbicKICAgIH0pOwoKICAgIGlmICgkLmlzVG91Y2gpIHsKCiAgICAgIG9wdGlvbnMuZmxpcGJvb2suCiAgICAgICAgYmluZCgndG91Y2hzdGFydCcsIGRhdGEuem9vbS5ldmVudFRvdWNoU3RhcnQgKS4KICAgICAgICBiaW5kKCd0b3VjaG1vdmUnLCBkYXRhLnpvb20uZXZlbnRUb3VjaE1vdmUpLgogICAgICAgIGJpbmQoJ3RvdWNoZW5kJywgZGF0YS56b29tLmV2ZW50VG91Y2hFbmQpOwoKICAgICAgdGhpcy5iaW5kKCd0b3VjaHN0YXJ0Jywgem9vbU1ldGhvZHMuX3RhcCk7CgogICAgfSBlbHNlIHsKICAgICAgdGhpcy5tb3VzZWRvd24oem9vbU1ldGhvZHMuX21vdXNlZG93bikuCiAgICAgICAgY2xpY2soem9vbU1ldGhvZHMuX3RhcCk7CiAgICB9CiAgfSwKCiAgX3RhcDogZnVuY3Rpb24oZXZlbnQpIHsKICAgIAogICAgdmFyIHRoYXQgPSAkKHRoaXMpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuem9vbSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vazsKCiAgICBpZiAoZGF0YS5kcmFnZ2luZ0Nvcm5lciB8fCBkYXRhLmRyYWdnaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaXNQYWdlKCQoZXZlbnQudGFyZ2V0KSwgdGhhdCkpIHsKCiAgICAgIHpvb21NZXRob2RzLl9hZGRFdmVudC5jYWxsKHRoYXQsICd0YXAnLCBldmVudCk7CiAgICAgIAogICAgICB2YXIgc2VjdWVuY2UgPSB6b29tTWV0aG9kcy5fZXZlbnRTZXEuY2FsbCh0aGF0KTsKCiAgICAgIGlmIChzZWN1ZW5jZSkKICAgICAgICB0aGF0LnRyaWdnZXIoc2VjdWVuY2UpOwoKICAgIH0KCiAgfSwKCiAgX2FkZEV2ZW50OiBmdW5jdGlvbihldmVudE5hbWUsIGV2ZW50KSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgIGV2ZW50T2JqZWN0ID0ge25hbWU6IGV2ZW50TmFtZSwgdGltZXN0YW1wOiB0aW1lLCBldmVudDogZXZlbnR9OwoKICAgIGRhdGEuZXZlbnRRdWV1ZS5wdXNoKGV2ZW50T2JqZWN0KTsKCiAgICBpZiAoZGF0YS5ldmVudFF1ZXVlLmxlbmd0aD4xMCkKICAgICAgZGF0YS5ldmVudFF1ZXVlLnNwbGljZSgwLCAxKTsKCiAgfSwKCiAgX2V2ZW50U2VxOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGxpc3QgPSBkYXRhLmV2ZW50UXVldWUsCiAgICAgIGxhc3RFdmVudCA9IGxpc3QubGVuZ3RoLTE7CgogICAgaWYgKGxhc3RFdmVudD4wICYmCiAgICAgIGxpc3RbbGFzdEV2ZW50XS5uYW1lPT0ndGFwJyAmJgogICAgICBsaXN0W2xhc3RFdmVudC0xXS5uYW1lPT0ndGFwJyAmJgogICAgICBsaXN0W2xhc3RFdmVudF0uZXZlbnQucGFnZVggPT0gbGlzdFtsYXN0RXZlbnQtMV0uZXZlbnQucGFnZVggJiYKICAgICAgbGlzdFtsYXN0RXZlbnRdLmV2ZW50LnBhZ2VZID09IGxpc3RbbGFzdEV2ZW50LTFdLmV2ZW50LnBhZ2VZICYmCiAgICAgIGxpc3RbbGFzdEV2ZW50XS50aW1lc3RhbXAtbGlzdFtsYXN0RXZlbnQtMV0udGltZXN0YW1wIDwgMjAwICYmCiAgICAgIGxpc3RbbGFzdEV2ZW50XS50aW1lc3RhbXAtbGlzdFtsYXN0RXZlbnQtMV0udGltZXN0YW1wID4gNTApCiAgICB7CiAgCiAgICAgIHJldHVybiAkLmV4dGVuZChsaXN0W2xhc3RFdmVudF0uZXZlbnQsIHt0eXBlOiAnem9vbS5kb3VibGVUYXAnfSk7CgogICAgfSBlbHNlIGlmIChsaXN0W2xhc3RFdmVudF0ubmFtZT09J3RhcCcpIHsKICAgICAgCiAgICAgIHJldHVybiAkLmV4dGVuZChsaXN0W2xhc3RFdmVudF0uZXZlbnQsIHt0eXBlOiAnem9vbS50YXAnfSk7CgogICAgfQogICAgICAKICB9LAoKICBfcHJlcGFyZVpvb206IGZ1bmN0aW9uICgpIHsKICAgIAogICAgdmFyIGZsaXBQb3MsIG9mZnNldExlZnQgPSAwLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgaW52eiA9IDEvdGhpcy56b29tKCd2YWx1ZScpLAogICAgICBmbGlwID0gZGF0YS5vcHRzLmZsaXBib29rLAogICAgICBkaXIgPSBmbGlwLnR1cm4oJ2RpcmVjdGlvbicpLAogICAgICBmbGlwRGF0YSA9IGZsaXAuZGF0YSgpLAogICAgICBmbGlwT2Zmc2V0ID0gZmxpcC5vZmZzZXQoKSwKICAgICAgdGhpc09mZnNldCA9IHRoaXMub2Zmc2V0KCksCiAgICAgIGZsaXBTaXplID0ge2hlaWdodDogZmxpcC5oZWlnaHQoKX0sCiAgICAgIHZpZXcgPSBmbGlwLnR1cm4oJ3ZpZXcnKTsKCiAgICAgIGlmIChmbGlwLnR1cm4oJ2Rpc3BsYXknKT09J2RvdWJsZScgJiYgZmxpcC5kYXRhKCkub3B0cy5hdXRvQ2VudGVyKSB7CiAgICAgICAgaWYgKCF2aWV3WzBdKSB7CiAgICAgICAgICBmbGlwU2l6ZS53aWR0aCA9IGZsaXAud2lkdGgoKS8yOwogICAgICAgICAgb2Zmc2V0TGVmdCA9IChkaXI9PSdsdHInKSA/IGZsaXBTaXplLndpZHRoIDogMDsKICAgICAgICAgIGZsaXBQb3MgPSBwb2ludDJEKAogICAgICAgICAgICAoZGlyPT0nbHRyJykgPyBmbGlwT2Zmc2V0LmxlZnQtdGhpc09mZnNldC5sZWZ0K2ZsaXBTaXplLndpZHRoIDogZmxpcE9mZnNldC5sZWZ0LXRoaXNPZmZzZXQubGVmdCwKICAgICAgICAgICAgZmxpcE9mZnNldC50b3AtdGhpc09mZnNldC50b3AKICAgICAgICAgICk7CgogICAgICAgIH0gZWxzZSBpZiAoIXZpZXdbMV0pIHsKICAgICAgICAgIGZsaXBTaXplLndpZHRoID0gZmxpcC53aWR0aCgpLzI7CiAgICAgICAgICBvZmZzZXRMZWZ0ID0gKGRpcj09J2x0cicpID8gMCA6IGZsaXBTaXplLndpZHRoOwogICAgICAgICAgZmxpcFBvcyA9IHBvaW50MkQoCiAgICAgICAgICAgIChkaXI9PSdsdHInKSA/IGZsaXBPZmZzZXQubGVmdC10aGlzT2Zmc2V0LmxlZnQgOiBmbGlwT2Zmc2V0LmxlZnQtdGhpc09mZnNldC5sZWZ0K2ZsaXBTaXplLndpZHRoLAogICAgICAgICAgICBmbGlwT2Zmc2V0LnRvcC10aGlzT2Zmc2V0LnRvcAogICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmxpcFNpemUud2lkdGggPSBmbGlwLndpZHRoKCk7CiAgICAgICAgICBmbGlwUG9zID0gcG9pbnQyRCgKICAgICAgICAgICAgZmxpcE9mZnNldC5sZWZ0LXRoaXNPZmZzZXQubGVmdCwKICAgICAgICAgICAgZmxpcE9mZnNldC50b3AtdGhpc09mZnNldC50b3AKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZsaXBTaXplLndpZHRoID0gZmxpcC53aWR0aCgpOwogICAgICAgIGZsaXBQb3MgPSBwb2ludDJEKAogICAgICAgICAgZmxpcE9mZnNldC5sZWZ0LXRoaXNPZmZzZXQubGVmdCwKICAgICAgICAgIGZsaXBPZmZzZXQudG9wLXRoaXNPZmZzZXQudG9wCiAgICAgICAgKTsKICAgICAgfQoKICAgIGlmICghZGF0YS56b29tZXIpIHsKICAgICAgZGF0YS56b29tZXIgPSAkKCc8ZGl2IC8+JywKICAgICAgICB7J2NsYXNzJzogJ3pvb21lcicsCiAgICAgICAgICBjc3M6IHsKICAgICAgICAgICAgb3ZlcmZsb3c6J2hpZGRlbicsCiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICB6SW5kZXg6ICcxMDAwMDAwJwogICAgICAgICAgfQogICAgICAgIH0pLgogICAgICBtb3VzZWRvd24oZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KS5hcHBlbmRUbyh0aGlzKTsKICAgIH0KCgogICAgZGF0YS56b29tZXIuY3NzKHsKICAgICAgdG9wOiBmbGlwUG9zLnksCiAgICAgIGxlZnQ6IGZsaXBQb3MueCwKICAgICAgd2lkdGg6IGZsaXBTaXplLndpZHRoLAogICAgICBoZWlnaHQ6IGZsaXBTaXplLmhlaWdodAogICAgfSk7CiAgICAKICAgIHZhciB6b29tZXJWaWV3ID0gdmlldy5qb2luKCcsJyk7CgogICAgaWYgKHpvb21lclZpZXchPWRhdGEuem9vbWVyVmlldykgewoKICAgICAgZGF0YS56b29tZXJWaWV3ID0gem9vbWVyVmlldzsKICAgICAgZGF0YS56b29tZXIuZmluZCgnKicpLnJlbW92ZSgpOwoKICAgICAgZm9yICh2YXIgcCA9IDA7IHA8dmlldy5sZW5ndGg7IHArKykgewoKICAgICAgICBpZiAoIXZpZXdbcF0pCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBvcyA9IGZsaXBEYXRhLnBhZ2VPYmpzW3ZpZXdbcF1dLm9mZnNldCgpLAogICAgICAgICAgcGFnZUVsZW1lbnQgPSAkKGZsaXBEYXRhLnBhZ2VPYmpzW3ZpZXdbcF1dKTsKICAgICAgICAgIAogICAgICAgIHBhZ2VFbGVtZW50LgogICAgICAgICAgY2xvbmUoKS4KICAgICAgICAgIHRyYW5zZm9ybSgnJykuCiAgICAgICAgICBjc3MoewogICAgICAgICAgICB3aWR0aDogcGFnZUVsZW1lbnQud2lkdGgoKSppbnZ6LAogICAgICAgICAgICBoZWlnaHQ6IHBhZ2VFbGVtZW50LmhlaWdodCgpKmludnosCiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgdG9wOiAocG9zLnRvcCAtIGZsaXBPZmZzZXQudG9wKSppbnZ6LAogICAgICAgICAgICBsZWZ0OiAocG9zLmxlZnQgLSBmbGlwT2Zmc2V0LmxlZnQgLSBvZmZzZXRMZWZ0KSppbnZ6CiAgICAgICAgICB9KS4KICAgICAgICAgIGFwcGVuZFRvKGRhdGEuem9vbWVyKTsKICAgICAgfQogICAgfQogICAgCiAgICAKICAgIHJldHVybiB7cG9zOiBmbGlwUG9zLCBzaXplOiBmbGlwU2l6ZX07CgogIH0sCgogIHZhbHVlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb207CgogICAgcmV0dXJuIGRhdGEub3B0cy5mbGlwYm9vay50dXJuKCd6b29tJyk7CiAgfSwKCiAgem9vbUluOiBmdW5jdGlvbihldmVudCkgewoKICAgIHZhciBwb3MsCiAgICAgIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vaywKICAgICAgem9vbSA9IGRhdGEub3B0cy5tYXgoKSwKICAgICAgZmxpcE9mZnNldCA9IGZsaXAub2Zmc2V0KCksCiAgICAgIHRoaXNPZmZzZXQgPSB0aGlzLm9mZnNldCgpOwoKICAgIGlmIChkYXRhLnpvb21JbikKICAgICAgcmV0dXJuIHRoaXM7CgogICAgZmxpcC50dXJuKCdzdG9wJyk7CiAgICAKICAgIHZhciBldiA9ICQuRXZlbnQoJ3pvb20uY2hhbmdlJyk7CiAgICB0aGlzLnRyaWdnZXIoZXYsIFt6b29tXSk7CgogICAgaWYgKGV2LmlzRGVmYXVsdFByZXZlbnRlZCgpKQogICAgICByZXR1cm4gdGhpczsKCiAgICB2YXIgYm91bmQgPSB6b29tTWV0aG9kcy5fcHJlcGFyZVpvb20uY2FsbCh0aGlzKSwKICAgICAgZmxpcFBvcyA9IGJvdW5kLnBvcywKICAgICAgY2VudGVyID0gcG9pbnQyRChib3VuZC5zaXplLndpZHRoLzIsIGJvdW5kLnNpemUuaGVpZ2h0LzIpLAogICAgICBwcmVmaXggPSAkLmNzc1ByZWZpeCgpLAogICAgICB0cmFuc2l0aW9uRW5kID0gJC5jc3NUcmFuc2l0aW9uRW5kKCksCiAgICAgIGF1dG9DZW50ZXIgPSBmbGlwLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXI7CgogICAgZGF0YS5zY2FsZSA9IHpvb207CiAgICBmbGlwLmRhdGEoKS5ub0NlbnRlciA9IHRydWU7CgogICAgaWYgKHR5cGVvZihldmVudCkhPSd1bmRlZmluZWQnKSB7CgogICAgICBpZiAoJ3gnIGluIGV2ZW50ICYmICd5JyBpbiBldmVudCkgewogICAgICAgIAogICAgICAgIHBvcyA9IHBvaW50MkQoZXZlbnQueC1mbGlwUG9zLngsIGV2ZW50LnktZmxpcFBvcy55KTsKICAgICAgCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHBvcyA9ICgkLmlzVG91Y2gpID8KICAgICAgICAgIHBvaW50MkQoCiAgICAgICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWC1mbGlwUG9zLngtdGhpc09mZnNldC5sZWZ0LAogICAgICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVktZmxpcFBvcy55LXRoaXNPZmZzZXQudG9wCiAgICAgICAgICApCiAgICAgICAgICA6CiAgICAgICAgICBwb2ludDJEKAogICAgICAgICAgICBldmVudC5wYWdlWC1mbGlwUG9zLngtdGhpc09mZnNldC5sZWZ0LAogICAgICAgICAgICBldmVudC5wYWdlWS1mbGlwUG9zLnktdGhpc09mZnNldC50b3AKICAgICAgICAgICk7CgogICAgICB9CgogICAgfSBlbHNlIHsKICAgICAgcG9zID0gcG9pbnQyRChjZW50ZXIueCwgY2VudGVyLnkpOwogICAgfQoKCgogICAgaWYgKHBvcy54PDAgfHwgcG9zLnk8MCB8fCBwb3MueD5ib3VuZC53aWR0aCB8fCBwb3MueT5ib3VuZC5oZWlnaHQpIHsKICAgICAgcG9zLnggPSBjZW50ZXIueDsKICAgICAgcG9zLnkgPSBjZW50ZXIueTsKICAgIH0KCgogICAgdmFyIGNvbXBvc2UgPSBwb2ludDJEKAogICAgICAgIChwb3MueC1jZW50ZXIueCkqem9vbSArIGNlbnRlci54LAogICAgICAgIChwb3MueS1jZW50ZXIueSkqem9vbSArIGNlbnRlci55CiAgICAgICksCiAgICAgIG1vdmUgPSBwb2ludDJEKAogICAgICAgIChib3VuZC5zaXplLndpZHRoKnpvb20+dGhpcy53aWR0aCgpKSA/IHBvcy54LWNvbXBvc2UueCA6IDAsCiAgICAgICAgKGJvdW5kLnNpemUuaGVpZ2h0Knpvb20+dGhpcy5oZWlnaHQoKSkgPyBwb3MueS1jb21wb3NlLnkgOiAwCiAgICAgICksCiAgICAgIG1heE1vdmUgPSBwb2ludDJEKAogICAgICAgIE1hdGguYWJzKGJvdW5kLnNpemUud2lkdGgqem9vbS10aGlzLndpZHRoKCkpLAogICAgICAgIE1hdGguYWJzKGJvdW5kLnNpemUuaGVpZ2h0Knpvb20tdGhpcy5oZWlnaHQoKSkKICAgICAgKSwKICAgICAgbWluTW92ZSA9IHBvaW50MkQoCiAgICAgICAgTWF0aC5taW4oMCwgYm91bmQuc2l6ZS53aWR0aCp6b29tLXRoaXMud2lkdGgoKSksCiAgICAgICAgTWF0aC5taW4oMCwgYm91bmQuc2l6ZS5oZWlnaHQqem9vbS10aGlzLmhlaWdodCgpKQogICAgICApLAogICAgICByZWFsUG9zID0gcG9pbnQyRCgKICAgICAgICBjZW50ZXIueCp6b29tIC0gY2VudGVyLnggLSBmbGlwUG9zLnggLSBtb3ZlLngsCiAgICAgICAgY2VudGVyLnkqem9vbSAtIGNlbnRlci55IC0gZmxpcFBvcy55IC0gbW92ZS55CiAgICAgICk7CgogICAgaWYgKHJlYWxQb3MueT5tYXhNb3ZlLnkpCiAgICAgIG1vdmUueSA9IHJlYWxQb3MueSAtIG1heE1vdmUueSArICBtb3ZlLnk7CiAgICBlbHNlIGlmIChyZWFsUG9zLnk8bWluTW92ZS55KQogICAgICBtb3ZlLnkgPSByZWFsUG9zLnkgLSBtaW5Nb3ZlLnkgKyAgbW92ZS55OwoKICAgIGlmIChyZWFsUG9zLng+bWF4TW92ZS54KQogICAgICBtb3ZlLnggPSByZWFsUG9zLnggLSBtYXhNb3ZlLnggKyAgbW92ZS54OwogICAgZWxzZSBpZiAocmVhbFBvcy54PG1pbk1vdmUueCkKICAgICAgbW92ZS54ID0gcmVhbFBvcy54IC0gbWluTW92ZS54ICsgIG1vdmUueDsKCiAgICByZWFsUG9zID0gcG9pbnQyRCgKICAgICAgY2VudGVyLngqem9vbSAtIGNlbnRlci54IC0gZmxpcFBvcy54IC0gbW92ZS54LAogICAgICBjZW50ZXIueSp6b29tIC0gY2VudGVyLnkgLSBmbGlwUG9zLnkgLSBtb3ZlLnkKICAgICk7CgogICAgdmFyIGNzcyA9IHt9OwoKICAgIGNzc1twcmVmaXgrJ3RyYW5zaXRpb24nXSA9IHByZWZpeCArCiAgICAgICd0cmFuc2Zvcm0gJyArCiAgICAgIGRhdGEub3B0cy5lYXNlRnVuY3Rpb24gKwogICAgICAnICcgKwogICAgICBkYXRhLm9wdHMuZHVyYXRpb24gKwogICAgICAnbXMnOwoKICAgIHZhciB0cmFuc2l0aW9uRW5kQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKCiAgICAgIHRoYXQudHJpZ2dlcignem9vbS56b29tSW4nKTsKCiAgICAgIGRhdGEuem9vbUluID0gdHJ1ZTsKCiAgICAgIGRhdGEuZmxpcFBvc2l0aW9uID0gcG9pbnQyRChmbGlwLmNzcygnbGVmdCcpLCBmbGlwLmNzcygndG9wJykpOwoKICAgICAgZmxpcC50dXJuKCd6b29tJywgem9vbSkuY3NzKHsKICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgICAgICBtYXJnaW46ICcnLAogICAgICAgIHRvcDowLAogICAgICAgIGxlZnQ6MAogICAgICB9KTsKCiAgICAgIHZhciBmbGlwT2Zmc2V0ID0gZmxpcC5vZmZzZXQoKTsKICAgICAgCiAgICAgIGRhdGEuYXhpcyA9IHBvaW50MkQoCiAgICAgICAgZmxpcE9mZnNldC5sZWZ0IC0gdGhpc09mZnNldC5sZWZ0LAogICAgICAgIGZsaXBPZmZzZXQudG9wIC0gdGhpc09mZnNldC50b3AKICAgICAgKTsKCgogICAgICBpZiAoYXV0b0NlbnRlciAmJiBmbGlwLnR1cm4oJ2Rpc3BsYXknKT09J2RvdWJsZScpCiAgICAgICAgaWYgKChmbGlwLnR1cm4oJ2RpcmVjdGlvbicpPT0nbHRyJyAmJiAhZmxpcC50dXJuKCd2aWV3JylbMF0pIHx8CiAgICAgICAgICAoZmxpcC50dXJuKCdkaXJlY3Rpb24nKT09J3J0bCcgJiYgIWZsaXAudHVybigndmlldycpWzFdKQogICAgICAgICkKICAgICAgICAgIGRhdGEuYXhpcy54ID0gZGF0YS5heGlzLnggKyBmbGlwLndpZHRoKCkvMjsKCiAgICAgIHRoYXQuem9vbSgnc2Nyb2xsJywgcmVhbFBvcyk7CiAgICAgIHRoYXQuYmluZCgkLm1vdXNlRXZlbnRzLmRvd24sIHpvb21NZXRob2RzLl9lTW91c2VEb3duKTsKICAgICAgdGhhdC5iaW5kKCQubW91c2VFdmVudHMubW92ZSwgem9vbU1ldGhvZHMuX2VNb3VzZU1vdmUpOwogICAgICAkKGRvY3VtZW50KS5iaW5kKCQubW91c2VFdmVudHMudXAsIGRhdGEubW91c2V1cEV2ZW50KTsKICAgICAgdGhhdC5iaW5kKCdtb3VzZXdoZWVsJywgem9vbU1ldGhvZHMuX2VNb3VzZVdoZWVsKTsKCiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgZGF0YS56b29tZXIuaGlkZSgpOwogICAgICAgIGRhdGEuem9vbWVyLnJlbW92ZSgpOwogICAgICAgIGRhdGEuem9vbWVyID0gbnVsbDsKICAgICAgICBkYXRhLnpvb21lclZpZXcgPSBudWxsOwogICAgICB9LCA1MCk7CgogICAgfTsKCiAgICBkYXRhLnpvb21lci5jc3MoY3NzKS5zaG93KCk7CgogICAgaWYgKHRyYW5zaXRpb25FbmQpCiAgICAgIGRhdGEuem9vbWVyLmJpbmQodHJhbnNpdGlvbkVuZCwgZnVuY3Rpb24oKSB7CiAgICAgICAgJCh0aGlzKS51bmJpbmQodHJhbnNpdGlvbkVuZCk7CiAgICAgICAgdHJhbnNpdGlvbkVuZENhbGxiYWNrKCk7CiAgICAgIH0pOwogICAgZWxzZQogICAgICBzZXRUaW1lb3V0KHRyYW5zaXRpb25FbmRDYWxsYmFjaywgZGF0YS5vcHRzLmR1cmF0aW9uKTsKCiAgICBkYXRhLnpvb21lci50cmFuc2Zvcm0odHJhbnNsYXRlKG1vdmUueCwgbW92ZS55LCB0cnVlKSArIHNjYWxlKHpvb20sIHRydWUpKTsKICAgIAogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgem9vbU91dDogZnVuY3Rpb24oZHVyYXRpb24pIHsKCiAgICB2YXIgcG9zLCBtb3ZlLAogICAgICB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIHpvb20gPSAxLAogICAgICBzY2FsaW5nID0gem9vbS9kYXRhLnNjYWxlLAogICAgICBwcmVmaXggPSAkLmNzc1ByZWZpeCgpLAogICAgICB0cmFuc2l0aW9uRW5kID0gJC5jc3NUcmFuc2l0aW9uRW5kKCksCiAgICAgIHRoaXNPZmZzZXQgPSB0aGlzLm9mZnNldCgpOwoKICAgIGR1cmF0aW9uID0gKHR5cGVvZihkdXJhdGlvbikhPSd1bmRlZmluZWQnKSA/IGR1cmF0aW9uIDogZGF0YS5vcHRzLmR1cmF0aW9uOwoKICAgIGlmICghZGF0YS56b29tSW4pCiAgICAgIHJldHVybjsKICAgICAgCiAgICB2YXIgZXYgPSAkLkV2ZW50KCd6b29tLmNoYW5nZScpOwogICAgdGhpcy50cmlnZ2VyKGV2LCBbem9vbV0pOwoKICAgIGlmIChldi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkKICAgICAgcmV0dXJuIHRoaXM7CgogICAgZGF0YS56b29tSW4gPSBmYWxzZTsKICAgIGRhdGEuc2NhbGUgPSB6b29tOwoKICAgIGZsaXAuZGF0YSgpLm5vQ2VudGVyID0gZmFsc2U7CgogICAgdGhhdC51bmJpbmQoJC5tb3VzZUV2ZW50cy5kb3duLCB6b29tTWV0aG9kcy5fZU1vdXNlRG93bik7CiAgICB0aGF0LnVuYmluZCgkLm1vdXNlRXZlbnRzLm1vdmUsIHpvb21NZXRob2RzLl9lTW91c2VNb3ZlKTsKICAgICQoZG9jdW1lbnQpLnVuYmluZCgkLm1vdXNlRXZlbnRzLnVwLCBkYXRhLm1vdXNldXBFdmVudCk7CiAgICB0aGF0LnVuYmluZCgnbW91c2V3aGVlbCcsIHpvb21NZXRob2RzLl9lTW91c2VXaGVlbCk7CgogICAgdmFyIGNzcyA9IHt9OwoKICAgIGNzc1twcmVmaXgrJ3RyYW5zaXRpb24nXSA9IHByZWZpeCArCiAgICAgICd0cmFuc2Zvcm0gJyArCiAgICAgIGRhdGEub3B0cy5lYXNlRnVuY3Rpb24gKwogICAgICAnICcgKwogICAgICBkdXJhdGlvbiArCiAgICAgICdtcyc7CgogICAgZmxpcC5jc3MoY3NzKTsKCiAgICB2YXIgZmxpcERlc1BvcywKICAgICAgdG1wID0gJCgnPGRpdiAvPicsIHsKICAgICAgICBjc3M6IHsKICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLAogICAgICAgICAgdG9wOiBkYXRhLmZsaXBQb3NpdGlvbi55LAogICAgICAgICAgbGVmdDogZGF0YS5mbGlwUG9zaXRpb24ueCwKICAgICAgICAgIHdpZHRoOiBmbGlwLndpZHRoKCkqc2NhbGluZywKICAgICAgICAgIGhlaWdodDogZmxpcC5oZWlnaHQoKSpzY2FsaW5nLAogICAgICAgICAgYmFja2dyb3VuZDogJ2JsdWUnCiAgICAgICAgfQogICAgICB9KS5hcHBlbmRUbyhmbGlwLnBhcmVudCgpKTsKCiAgICBmbGlwRGVzUG9zID0gcG9pbnQyRCgKICAgICAgdG1wLm9mZnNldCgpLmxlZnQtdGhpc09mZnNldC5sZWZ0LAogICAgICB0bXAub2Zmc2V0KCkudG9wLXRoaXNPZmZzZXQudG9wCiAgICApOwogICAgCgogICAgdG1wLnJlbW92ZSgpOwoKICAgIHZhciBhdXRvQ2VudGVyID0gZmxpcC5kYXRhKCkub3B0cy5hdXRvQ2VudGVyOwoKICAgIGlmIChhdXRvQ2VudGVyICYmIGZsaXAudHVybignZGlzcGxheScpPT0nZG91YmxlJykgewoKICAgICAgaWYgKCFmbGlwLnR1cm4oJ3ZpZXcnKVswXSkKICAgICAgICBmbGlwRGVzUG9zLnggPSAoZmxpcC50dXJuKCdkaXJlY3Rpb24nKT09J2x0cicpID8KICAgICAgICAgIGZsaXBEZXNQb3MueC10bXAud2lkdGgoKS80IDoKICAgICAgICAgIGZsaXBEZXNQb3MueCt0bXAud2lkdGgoKS80OwogICAgICBlbHNlIGlmICghZmxpcC50dXJuKCd2aWV3JylbMV0pCiAgICAgICAgZmxpcERlc1Bvcy54ID0gKGZsaXAudHVybignZGlyZWN0aW9uJyk9PSdsdHInKSA/CiAgICAgICAgICBmbGlwRGVzUG9zLngrdG1wLndpZHRoKCkvNCA6CiAgICAgICAgICBmbGlwRGVzUG9zLngtdG1wLndpZHRoKCkvNDsKICAgIH0KCiAgICB2YXIgZmxpcFJlYWxQb3MgPSAkLmZpbmRQb3MoZmxpcFswXSk7CiAgICAgIAogICAgbW92ZSA9IHBvaW50MkQoCiAgICAgIC1mbGlwLndpZHRoKCkvMiAtIGZsaXBSZWFsUG9zLmxlZnQgKyB0bXAud2lkdGgoKS8yICsgZmxpcERlc1Bvcy54ICsgdGhpc09mZnNldC5sZWZ0LAogICAgICAtZmxpcC5oZWlnaHQoKS8yIC0gZmxpcFJlYWxQb3MudG9wICsgdG1wLmhlaWdodCgpLzIgKyBmbGlwRGVzUG9zLnkgKyB0aGlzT2Zmc2V0LnRvcCk7CgogICAgdmFyIHRyYW5zaXRpb25FbmRDYWxsYmFjayA9IGZ1bmN0aW9uKCkgewogICAgCiAgICAgIGlmIChmbGlwWzBdLnN0eWxlLnJlbW92ZVByb3BlcnR5KSB7CiAgICAgICAgCiAgICAgICAgZmxpcFswXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcmVmaXgrJ3RyYW5zaXRpb24nKTsKICAgICAgICBmbGlwLnRyYW5zZm9ybSgKICAgICAgICAgIChmbGlwLnR1cm4oJ29wdGlvbnMnKS5hY2NlbGVyYXRpb24pID8gdHJhbnNsYXRlKDAsIDAsIHRydWUpIDogJycpLnR1cm4oJ3pvb20nLCAxKTsKICAgICAgICBmbGlwWzBdLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXJnaW4nKTsKICAgICAgICBmbGlwLmNzcyh7CiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgIHRvcDogZGF0YS5mbGlwUG9zaXRpb24ueSwKICAgICAgICAgIGxlZnQ6IGRhdGEuZmxpcFBvc2l0aW9uLngKICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgZmxpcC50cmFuc2Zvcm0oJ25vbmUnKS4KICAgICAgICAgIHR1cm4oJ3pvb20nLCAxKS4KICAgICAgICAgIGNzcyh7CiAgICAgICAgICAgIG1hcmdpbjogJycsCiAgICAgICAgICAgIHRvcDogZGF0YS5mbGlwUG9zaXRpb24ueSwKICAgICAgICAgICAgbGVmdDogZGF0YS5mbGlwUG9zaXRpb24ueCwKICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScKICAgICAgICB9KTsKCiAgICAgIH0KCiAgICAgIGlmIChhdXRvQ2VudGVyKQogICAgICAgIGZsaXAudHVybignY2VudGVyJyk7CgogICAgICB0aGF0LnRyaWdnZXIoJ3pvb20uem9vbU91dCcpOwoKICAgIH07CgogICAgaWYgKGR1cmF0aW9uPT09MCkgewogIAogICAgICB0cmFuc2l0aW9uRW5kQ2FsbGJhY2soKTsKCiAgICB9IGVsc2UgaWYgKHRyYW5zaXRpb25FbmQpIHsKCiAgICAgIGZsaXAuYmluZCh0cmFuc2l0aW9uRW5kLCBmdW5jdGlvbigpIHsKCiAgICAgICAgJCh0aGlzKS51bmJpbmQodHJhbnNpdGlvbkVuZCk7CiAgICAgICAgdHJhbnNpdGlvbkVuZENhbGxiYWNrKCk7CgogICAgICB9KTsKCiAgICAgIGZsaXAudHJhbnNmb3JtKHRyYW5zbGF0ZShtb3ZlLngsIG1vdmUueSwgdHJ1ZSkgKyBzY2FsZShzY2FsaW5nLCB0cnVlKSk7CgogICAgfSBlbHNlIHsKCiAgICAgIHNldFRpbWVvdXQodHJhbnNpdGlvbkVuZENhbGxiYWNrLCBkdXJhdGlvbik7CiAgICAgIGZsaXAudHJhbnNmb3JtKHRyYW5zbGF0ZShtb3ZlLngsIG1vdmUueSwgdHJ1ZSkgKyBzY2FsZShzY2FsaW5nLCB0cnVlKSk7CgogICAgfQoKICAgIHJldHVybiB0aGlzOwogIH0sCgogIGZsaXBib29rV2lkdGg6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXBib29rID0gZGF0YS5vcHRzLmZsaXBib29rLAogICAgICB2aWV3ID0gZmxpcGJvb2sudHVybigndmlldycpOwoKICAgIHJldHVybiAoZmxpcGJvb2sudHVybignZGlzcGxheScpPT0nZG91YmxlJyAmJiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pKSA/CiAgICAgIGZsaXBib29rLndpZHRoKCkvMgogICAgICA6CiAgICAgIGZsaXBib29rLndpZHRoKCk7CgogIH0sCgogIHNjcm9sbDogZnVuY3Rpb24odG8sIHVubGltaXRlZCwgYW5pbWF0ZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIGZsaXBXaWR0aCA9IHRoaXMuem9vbSgnZmxpcGJvb2tXaWR0aCcpLAogICAgICBwcmVmaXggPSAkLmNzc1ByZWZpeCgpOwogICAgCiAgICBpZiAoaGFzM2QpIHsKCiAgICAgIHZhciBjc3MgPSB7fTsKCiAgICAgIGlmIChhbmltYXRlKSB7CiAgICAgICAgY3NzW3ByZWZpeCsndHJhbnNpdGlvbiddID0gcHJlZml4ICsgJ3RyYW5zZm9ybSAyMDBtcyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3NzW3ByZWZpeCsndHJhbnNpdGlvbiddID0gJ25vbmUnOwogICAgICB9CgogICAgICBmbGlwLmNzcyhjc3MpOwogICAgICBmbGlwLnRyYW5zZm9ybSh0cmFuc2xhdGUoLWRhdGEuYXhpcy54IC0gdG8ueCwgLWRhdGEuYXhpcy55IC0gdG8ueSwgdHJ1ZSkpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBmbGlwLmNzcyh7dG9wOiAtZGF0YS5heGlzLnkgLSB0by55LCBsZWZ0OiAtZGF0YS5heGlzLnggLSB0by54fSk7CgogICAgfQoKICAgIGlmICghdW5saW1pdGVkKSB7CgogICAgICB2YXIgb3V0LAogICAgICAgIG1pbkJvdW5kID0gcG9pbnQyRCgKICAgICAgICAgIE1hdGgubWluKDAsIChmbGlwV2lkdGgtdGhpcy53aWR0aCgpKS8yKSwKICAgICAgICAgIE1hdGgubWluKDAsIChmbGlwLmhlaWdodCgpLXRoaXMuaGVpZ2h0KCkpLzIpKSwKICAgICAgICBtYXhCb3VuZCA9IHBvaW50MkQoCiAgICAgICAgICAoZmxpcFdpZHRoPnRoaXMud2lkdGgoKSkgPyBmbGlwV2lkdGgtdGhpcy53aWR0aCgpIDogKGZsaXBXaWR0aC10aGlzLndpZHRoKCkpLzIsCiAgICAgICAgICAoZmxpcC5oZWlnaHQoKT50aGlzLmhlaWdodCgpKSA/IGZsaXAuaGVpZ2h0KCktdGhpcy5oZWlnaHQoKSA6IChmbGlwLmhlaWdodCgpLXRoaXMuaGVpZ2h0KCkpLzIKICAgICAgICApOwoKICAgICAgaWYgKHRvLnk8bWluQm91bmQueSkgewogICAgICAgIHRvLnkgPSBtaW5Cb3VuZC55OwogICAgICAgIG91dCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAodG8ueT5tYXhCb3VuZC55KSB7CiAgICAgICAgdG8ueSA9IG1heEJvdW5kLnk7CiAgICAgICAgb3V0ID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKHRvLng8bWluQm91bmQueCkgewogICAgICAgIHRvLnggPSBtaW5Cb3VuZC54OwogICAgICAgIG91dCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAodG8ueD5tYXhCb3VuZC54KSB7CiAgICAgICAgdG8ueCA9IG1heEJvdW5kLng7CiAgICAgICAgb3V0ID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKG91dCkgewogICAgICAgIHRoaXMuem9vbSgnc2Nyb2xsJywgdG8sIHRydWUsIHRydWUpOwogICAgICB9CgogICAgfQoKICAgIGRhdGEuc2Nyb2xsUG9zID0gcG9pbnQyRCh0by54LCB0by55KTsKCiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2s7CiAgICAKICAgIGlmICh0aGlzLnpvb20oJ3ZhbHVlJyk+MSkgewoKICAgICAgdmFyICBmbGlwT2Zmc2V0ID0gZmxpcC5vZmZzZXQoKSwKICAgICAgICB0aGlzT2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsKCiAgICAgIGRhdGEuYXhpcyA9ICBwb2ludDJEKAogICAgICAgIChmbGlwT2Zmc2V0LmxlZnQgLSB0aGlzT2Zmc2V0LmxlZnQpICsgKGRhdGEuYXhpcy54ICsgZGF0YS5zY3JvbGxQb3MueCksCiAgICAgICAgKGZsaXBPZmZzZXQudG9wIC0gdGhpc09mZnNldC50b3ApICsgKGRhdGEuYXhpcy55ICsgZGF0YS5zY3JvbGxQb3MueSkKICAgICAgKTsKCiAgICAgIGlmIChmbGlwLnR1cm4oJ2Rpc3BsYXknKT09J2RvdWJsZScgJiYKICAgICAgICBmbGlwLnR1cm4oJ2RpcmVjdGlvbicpPT0nbHRyJyAmJgogICAgICAgICFmbGlwLnR1cm4oJ3ZpZXcnKVswXSkKICAgICAgICAgIGRhdGEuYXhpcy54ID0gZGF0YS5heGlzLnggKyBmbGlwLndpZHRoKCkvMjsKCiAgICAgIHRoaXMuem9vbSgnc2Nyb2xsJywgZGF0YS5zY3JvbGxQb3MpOwogICAgfQoKICB9LAoKICBfZVpvb206IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZmxpcFBvcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIHZpZXcgPSBmbGlwLnR1cm4oJ3ZpZXcnKTsKCiAgICBmb3IgKHZhciBwID0gMDsgcDx2aWV3Lmxlbmd0aDsgcCsrKSB7CiAgICAgIGlmICh2aWV3W3BdKQogICAgICAgIHRoaXMudHJpZ2dlcignem9vbS5yZXNpemUnLAogICAgICAgICAgW2RhdGEuc2NhbGUsIHZpZXdbcF0sIGZsaXAuZGF0YSgpLnBhZ2VPYmpzW3ZpZXdbcF1dXQogICAgICAgICk7CiAgICB9CiAgfSwKCiAgX2VTdGFydDogZnVuY3Rpb24oZXZlbnQsIHBhZ2VPYmopIHsKCiAgICBpZiAodGhpcy56b29tKCd2YWx1ZScpIT0xKSB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9CgoKICB9LAoKICBfZVR1cm5pbmc6IGZ1bmN0aW9uKGV2ZW50LCBwYWdlLCB2aWV3KSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICB6b29tID0gdGhpcy56b29tKCd2YWx1ZScpLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vazsKCiAgICBkYXRhLnBhZ2UgPSBmbGlwLnR1cm4oJ3BhZ2UnKTsKCiAgICBpZiAoem9vbSE9MSkgewogICAgICBmb3IgKHZhciBwID0gMDsgcDx2aWV3Lmxlbmd0aDsgcCsrKSB7CiAgICAgICAgaWYgKHZpZXdbcF0pCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb20ucmVzaXplJywKICAgICAgICAgICAgW3pvb20sIHZpZXdbcF0sIGZsaXAuZGF0YSgpLnBhZ2VPYmpzW3ZpZXdbcF1dXQogICAgICAgICAgKTsKICAgICAgfQoKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICB0aGF0Lnpvb20oJ3Jlc2l6ZScpOwogICAgICB9LCAwKTsKICAgIH0KCiAgfSwKCiAgX2VUdXJuZWQ6IGZ1bmN0aW9uIChldmVudCwgcGFnZSkgewogICAgCiAgICBpZiAodGhpcy56b29tKCd2YWx1ZScpIT0xKSB7CiAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgICBmbGlwID0gZGF0YS5vcHRzLmZsaXBib29rOwoKICAgICAgaWYgKHBhZ2U+ZGF0YS5wYWdlKQogICAgICAgIHRoaXMuem9vbSgnc2Nyb2xsJywKICAgICAgICAgIHBvaW50MkQoMCwgZGF0YS5zY3JvbGxQb3MueSksIGZhbHNlLCB0cnVlKTsKICAgICAgICAKICAgICAgZWxzZSBpZiAocGFnZTxkYXRhLnBhZ2UpCiAgICAgICAgdGhpcy56b29tKCdzY3JvbGwnLAogICAgICAgICAgcG9pbnQyRChmbGlwLndpZHRoKCksIGRhdGEuc2Nyb2xsUG9zLnkpLCBmYWxzZSwgdHJ1ZSk7CiAgICAKICAgIH0KICB9LAoKICBfZVByZXNzZWQ6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb207CiAgICBkYXRhLmRyYWdnaW5nQ29ybmVyID0gdHJ1ZTsKCiAgfSwKCiAgX2VSZWxlYXNlZDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tOwoKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgIGRhdGEuZHJhZ2dpbmdDb3JuZXIgPSBmYWxzZTsKICAgIH0sIDEpOwoKICB9LAoKICBfZU1vdXNlRG93bjogZnVuY3Rpb24oZXZlbnQpIHsKICAgIAogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tOwoKICAgIGRhdGEuZHJhZ2dpbmdDdXIgPSAoJC5pc1RvdWNoKSA/CiAgICAgIHBvaW50MkQoCiAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWQogICAgICApCiAgICAgIDoKICAgICAgcG9pbnQyRChldmVudC5wYWdlWCwgZXZlbnQucGFnZVkpOwogICAgCiAgICByZXR1cm4gZmFsc2U7CiAgfSwKCiAgX2VNb3VzZU1vdmU6IGZ1bmN0aW9uKGV2ZW50KSB7CgogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tOwogICAgICAgIAogICAgaWYgKGRhdGEuZHJhZ2dpbmdDdXIpIHsKCiAgICAgIGRhdGEuZHJhZ2dpbmcgPSB0cnVlOwoKICAgICAgdmFyIGN1ciA9ICgkLmlzVG91Y2gpID8KICAgICAgICBwb2ludDJEKAogICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZCiAgICAgICAgKQogICAgICAgIDoKICAgICAgICBwb2ludDJEKGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSksCiAgICAgICAgbW90aW9uID0gcG9pbnQyRCgKICAgICAgICAgIGN1ci54LSBkYXRhLmRyYWdnaW5nQ3VyLngsCiAgICAgICAgICBjdXIueS1kYXRhLmRyYWdnaW5nQ3VyLnkKICAgICAgICApOwoKICAgICAgJCh0aGlzKS56b29tKCdzY3JvbGwnLAogICAgICAgIHBvaW50MkQoCiAgICAgICAgICBkYXRhLnNjcm9sbFBvcy54LW1vdGlvbi54LAogICAgICAgICAgZGF0YS5zY3JvbGxQb3MueS1tb3Rpb24ueQogICAgICAgICksIHRydWUKICAgICAgKTsKCiAgICAgIGRhdGEuZHJhZ2dpbmdDdXIgPSBjdXI7CgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogIH0sCgogIF9lTW91c2VVcDogZnVuY3Rpb24oZXZlbnQpIHsKCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb207CgogICAgaWYgKGRhdGEuZHJhZ2dpbmcpIHsKICAgICAgJCh0aGlzKS56b29tKCdzY3JvbGwnLCBkYXRhLnNjcm9sbFBvcyk7CiAgICB9CgogICAgZGF0YS5kcmFnZ2luZ0N1ciA9IG51bGw7CgogICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgZGF0YS5kcmFnZ2luZyA9IGZhbHNlOwogICAgfSwgMSk7CgogIH0sCgogIF9lTW91c2VXaGVlbDogZnVuY3Rpb24oZXZlbnQsIGRlbHRhLCBkZWx0YVgsIGRlbHRhWSkgewogICAgCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb20sCiAgICAgIGN1ciA9IHBvaW50MkQoCiAgICAgICAgZGF0YS5zY3JvbGxQb3MueCArIGRlbHRhWCoxMCwKICAgICAgICBkYXRhLnNjcm9sbFBvcy55IC0gZGVsdGFZKjEwCiAgICAgICk7CiAgICAKICAgICQodGhpcykuem9vbSgnc2Nyb2xsJywgY3VyLCBmYWxzZSwgdHJ1ZSk7CiAgICAKICB9LAoKICBfZVRvdWNoU3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCBwYWdlKSB7CgogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tLAogICAgICBmbGlwID0gZGF0YS5vcHRzLmZsaXBib29rLAogICAgICBmaW5nZXIgPSBwb2ludDJEKAogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWCwKICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVkKICAgICAgKTsKCiAgICBkYXRhLnRvdWNoID0ge307CiAgICBkYXRhLnRvdWNoLmluaXRpYWwgPSBmaW5nZXI7CiAgICBkYXRhLnRvdWNoLmxhc3QgPSBmaW5nZXI7CiAgICBkYXRhLnRvdWNoLnRpbWVzdGFtcCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CiAgICBkYXRhLnRvdWNoLnNwZWVkID0gcG9pbnQyRCgwLCAwKTsKCiAgfSwKCiAgX2VUb3VjaE1vdmU6IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAKICAgIHZhciBkYXRhID0gJCh0aGlzKS5kYXRhKCkuem9vbSwKICAgICAgem9vbSA9ICQodGhpcykuem9vbSgndmFsdWUnKSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vaywKICAgICAgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgIGZpbmdlciA9IHBvaW50MkQoCiAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWQogICAgICApOwogICAgCiAgICBpZiAoZGF0YS50b3VjaCAmJiB6b29tPT0xICYmICFmbGlwLmRhdGEoKS5tb3VzZUFjdGlvbikgewogICAgICBkYXRhLnRvdWNoLm1vdGlvbiA9IHBvaW50MkQoCiAgICAgICAgZmluZ2VyLngtZGF0YS50b3VjaC5sYXN0LngsCiAgICAgICAgZmluZ2VyLnktZGF0YS50b3VjaC5sYXN0LnkpOwoKICAgIAogICAgICBkYXRhLnRvdWNoLnNwZWVkLnggPSAoZGF0YS50b3VjaC5zcGVlZC54PT09MCkgPwogICAgICAgIGRhdGEudG91Y2gubW90aW9uLnggLyAodGltZS1kYXRhLnRvdWNoLnRpbWVzdGFtcCkgOgogICAgICAgIChkYXRhLnRvdWNoLnNwZWVkLnggKyAoZGF0YS50b3VjaC5tb3Rpb24ueCAvICh0aW1lLWRhdGEudG91Y2gudGltZXN0YW1wKSkpLzI7CgogICAgICBkYXRhLnRvdWNoLmxhc3QgPSBmaW5nZXI7CiAgICAgIGRhdGEudG91Y2gudGltZXN0YW1wID0gdGltZTsKICAgIH0KCiAgfSwKCiAgX2VUb3VjaEVuZDogZnVuY3Rpb24oZXZlbnQpIHsKCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb207CgogICAgaWYgKGRhdGEudG91Y2ggJiYgJCh0aGlzKS56b29tKCd2YWx1ZScpPT0xKSB7CgogICAgICB2YXIgeSA9IE1hdGguYWJzKGRhdGEudG91Y2guaW5pdGlhbC55IC0gZGF0YS50b3VjaC5sYXN0LnkpOwoKICAgICAgaWYgKHk8NTAgJiYgKGRhdGEudG91Y2guc3BlZWQueDwtMSB8fCBkYXRhLnRvdWNoLmxhc3QueC1kYXRhLnRvdWNoLmluaXRpYWwueDwtMTAwKSkgewogICAgICAgIAogICAgICAgIHRoaXMudHJpZ2dlcignem9vbS5zd2lwZUxlZnQnKTsKCiAgICAgIH0gZWxzZSBpZih5PDUwICYmIChkYXRhLnRvdWNoLnNwZWVkLng+MSB8fCBkYXRhLnRvdWNoLmxhc3QueC1kYXRhLnRvdWNoLmluaXRpYWwueD4xMDApKXsKICAgICAgICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb20uc3dpcGVSaWdodCcpOwoKICAgICAgfQoKICAgIH0KICB9LAoKICBfZURlc3Ryb3lpbmc6IGZ1bmN0aW9uKCkgewoKICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIGV2ZW50cyA9IFsKICAgICAgICAndGFwJywKICAgICAgICAnZG91YmxlVGFwJywKICAgICAgICAncmVzaXplJywKICAgICAgICAnem9vbUluJywKICAgICAgICAnem9vbU91dCcsCiAgICAgICAgJ3N3aXBlTGVmdCcsCiAgICAgICAgJ3N3aXBlUmlnaHQnCiAgICAgIF07CgogICAgdGhpcy56b29tKCd6b29tT3V0JywgMCk7CgogICAgJC5lYWNoKGV2ZW50cywgZnVuY3Rpb24oaW5kZXgsIGV2ZW50TmFtZSkgewogICAgICB0aGF0LnVuYmluZCgnem9vbS4nICsgZXZlbnROYW1lKTsKICAgIH0pOwogICAgCiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gZGF0YS5mbGlwYm9va0V2ZW50cykgewogICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEuZmxpcGJvb2tFdmVudHMsIGV2ZW50TmFtZSkpIHsKICAgICAgICBmbGlwLnVuYmluZChldmVudE5hbWUsIGRhdGEuZmxpcGJvb2tFdmVudHNbZXZlbnROYW1lXSk7CiAgICAgIH0KICAgIH0KCiAgICBmbGlwLnVuYmluZCgndG91Y2hzdGFydCcsIGRhdGEuZXZlbnRUb3VjaFN0YXJ0ICkuCiAgICAgIHVuYmluZCgndG91Y2htb3ZlJywgZGF0YS5ldmVudFRvdWNoTW92ZSkuCiAgICAgIHVuYmluZCgndG91Y2hlbmQnLCBkYXRhLmV2ZW50VG91Y2hFbmQpOwogICAgICAgIAogICAgdGhpcy51bmJpbmQoJ3RvdWNoc3RhcnQnLCB6b29tTWV0aG9kcy5fdGFwKS4KICAgICAgdW5iaW5kKCdjbGljaycsIHpvb21NZXRob2RzLl90YXApOwoKICAgIGRhdGEgPSBudWxsOwogICAgdGhpcy5kYXRhKCkuem9vbSA9IG51bGw7CgogIH0KfTsKCmZ1bmN0aW9uIGlzUGFnZShlbGVtZW50LCBsYXN0KSB7CgogIGlmIChlbGVtZW50WzBdPT1sYXN0WzBdKQogICAgcmV0dXJuIGZhbHNlOwoKICBpZiAoZWxlbWVudC5hdHRyKCdwYWdlJykpCiAgICByZXR1cm4gdHJ1ZTsKICAKICByZXR1cm4gKGVsZW1lbnQucGFyZW50KClbMF0pID8KICAgIGlzUGFnZShlbGVtZW50LnBhcmVudCgpLCBsYXN0KQogICAgOgogIGZhbHNlOwoKfQoKZnVuY3Rpb24gZXJyb3IobWVzc2FnZSkgewoKICBmdW5jdGlvbiBUdXJuSnNFcnJvcihtZXNzYWdlKSB7CiAgICB0aGlzLm5hbWUgPSAiVHVybkpzRXJyb3IiOwogICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKICB9CgogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOwogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR1cm5Kc0Vycm9yOwogIHJldHVybiBuZXcgVHVybkpzRXJyb3IobWVzc2FnZSk7Cgp9CgpmdW5jdGlvbiB0cmFuc2xhdGUoeCwgeSwgdXNlM2QpIHsKICAKICByZXR1cm4gKGhhczNkICYmIHVzZTNkKSA/ICcgdHJhbnNsYXRlM2QoJyArIHggKyAncHgsJyArIHkgKyAncHgsIDBweCkgJwogIDogJyB0cmFuc2xhdGUoJyArIHggKyAncHgsICcgKyB5ICsgJ3B4KSAnOwoKfQoKZnVuY3Rpb24gc2NhbGUodiwgdXNlM2QpIHsKICAKICByZXR1cm4gKGhhczNkICYmIHVzZTNkKSA/ICcgc2NhbGUzZCgnICsgdiArICcsICcgKyB2ICsgJywgMSkgJwogIDogJyBzY2FsZSgnICsgdiArICcpICc7Cgp9CgpmdW5jdGlvbiBwb2ludDJEKHgsIHkpIHsKICAKICByZXR1cm4ge3g6IHgsIHk6IHl9OwoKfQoKZnVuY3Rpb24gYmluZChmdW5jLCBjb250ZXh0KSB7CgogIHJldHVybiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CiAgfTsKCn0KCiQuZXh0ZW5kKCQuZm4sIHsKICB6b29tOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CgogICAgaWYgKCFhcmdzWzBdIHx8IHR5cGVvZihhcmdzWzBdKT09J29iamVjdCcpCiAgICAgIHJldHVybiB6b29tTWV0aG9kcy5pbml0LmFwcGx5KCQodGhpc1swXSksIGFyZ3MpOwogICAgZWxzZSBpZiAoem9vbU1ldGhvZHNbYXJnc1swXV0pCiAgICAgIHJldHVybiB6b29tTWV0aG9kc1thcmdzWzBdXS5hcHBseSgkKHRoaXNbMF0pLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CiAgICBlbHNlCiAgICAgIHRocm93IGVycm9yKGFyZ3NbMF0gKyAnIGlzIG5vdCBhIG1ldGhvZCcpOwoKICB9Cn0pOwoKfSkoalF1ZXJ5KTsK'></script>
<!--	<script src='fb/html/magazine/js/magazine.js'></script>	-->
<!--	<script src='data:/text/plain;base64,LyoKICogTWFnYXppbmUgc2FtcGxlCiovCgpmdW5jdGlvbiBhZGRQYWdlKHBhZ2UsIGJvb2spIHsKCgl2YXIgaWQsIHBhZ2VzID0gYm9vay50dXJuKCdwYWdlcycpOwoKCS8vIENyZWF0ZSBhIG5ldyBlbGVtZW50IGZvciB0aGlzIHBhZ2UKCXZhciBlbGVtZW50ID0gJCgnPGRpdiAvPicsIHt9KTsKCgkvLyBBZGQgdGhlIHBhZ2UgdG8gdGhlIGZsaXBib29rCglpZiAoYm9vay50dXJuKCdhZGRQYWdlJywgZWxlbWVudCwgcGFnZSkpIHsKCgkJLy8gQWRkIHRoZSBpbml0aWFsIEhUTUwKCQkvLyBJdCB3aWxsIGNvbnRhaW4gYSBsb2FkZXIgaW5kaWNhdG9yIGFuZCBhIGdyYWRpZW50CgkJZWxlbWVudC5odG1sKCc8ZGl2IGNsYXNzPSJncmFkaWVudCI+PC9kaXY+PGRpdiBjbGFzcz0ibG9hZGVyIj48L2Rpdj4nKTsKCgkJLy8gTG9hZCB0aGUgcGFnZQoJCWxvYWRQYWdlKHBhZ2UsIGVsZW1lbnQpOwoJfQoKfQoKZnVuY3Rpb24gbG9hZFBhZ2UocGFnZSwgcGFnZUVsZW1lbnQpIHsKCgkvLyBDcmVhdGUgYW4gaW1hZ2UgZWxlbWVudAoKCXZhciBpbWcgPSAkKCc8aW1nIC8+Jyk7CgoJaW1nLm1vdXNlZG93bihmdW5jdGlvbihlKSB7CgkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJfSk7CgoJaW1nLmxvYWQoZnVuY3Rpb24oKSB7CgkJCgkJLy8gU2V0IHRoZSBzaXplCgkJJCh0aGlzKS5jc3Moe3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfSk7CgoJCS8vIEFkZCB0aGUgaW1hZ2UgdG8gdGhlIHBhZ2UgYWZ0ZXIgbG9hZGVkCgoJCSQodGhpcykuYXBwZW5kVG8ocGFnZUVsZW1lbnQpOwoKCQkvLyBSZW1vdmUgdGhlIGxvYWRlciBpbmRpY2F0b3IKCQkKCQlwYWdlRWxlbWVudC5maW5kKCcubG9hZGVyJykucmVtb3ZlKCk7Cgl9KTsKCgkvLyBMb2FkIHRoZSBwYWdlCgoJaW1nLmF0dHIoJ3NyYycsICdwYWdlcy8nICsgIHBhZ2UgKyAnLmpwZycpOwoKCWxvYWRSZWdpb25zKHBhZ2UsIHBhZ2VFbGVtZW50KTsKCn0KCi8vIFpvb20gaW4gLyBab29tIG91dAoKZnVuY3Rpb24gem9vbVRvKGV2ZW50KSB7CgoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJCWlmICgkKCcubWFnYXppbmUtdmlld3BvcnQnKS5kYXRhKCkucmVnaW9uQ2xpY2tlZCkgewoJCQkJJCgnLm1hZ2F6aW5lLXZpZXdwb3J0JykuZGF0YSgpLnJlZ2lvbkNsaWNrZWQgPSBmYWxzZTsKCQkJfSBlbHNlIHsKCQkJCWlmICgkKCcubWFnYXppbmUtdmlld3BvcnQnKS56b29tKCd2YWx1ZScpPT0xKSB7CgkJCQkJJCgnLm1hZ2F6aW5lLXZpZXdwb3J0Jykuem9vbSgnem9vbUluJywgZXZlbnQpOwoJCQkJfSBlbHNlIHsKCQkJCQkkKCcubWFnYXppbmUtdmlld3BvcnQnKS56b29tKCd6b29tT3V0Jyk7CgkJCQl9CgkJCX0KCQl9LCAxKTsKCn0KCgoKLy8gTG9hZCByZWdpb25zCgpmdW5jdGlvbiBsb2FkUmVnaW9ucyhwYWdlLCBlbGVtZW50KSB7CgoJJC5nZXRKU09OKCdwYWdlcy8nK3BhZ2UrJy1yZWdpb25zLmpzb24nKS4KCQlkb25lKGZ1bmN0aW9uKGRhdGEpIHsKCgkJCSQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHJlZ2lvbikgewoJCQkJYWRkUmVnaW9uKHJlZ2lvbiwgZWxlbWVudCk7CgkJCX0pOwoJCX0pOwp9CgovLyBBZGQgcmVnaW9uCgpmdW5jdGlvbiBhZGRSZWdpb24ocmVnaW9uLCBwYWdlRWxlbWVudCkgewoJCgl2YXIgcmVnID0gJCgnPGRpdiAvPicsIHsnY2xhc3MnOiAncmVnaW9uICAnICsgcmVnaW9uWydjbGFzcyddfSksCgkJb3B0aW9ucyA9ICQoJy5tYWdhemluZScpLnR1cm4oJ29wdGlvbnMnKSwKCQlwYWdlV2lkdGggPSBvcHRpb25zLndpZHRoLzIsCgkJcGFnZUhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0OwoKCXJlZy5jc3MoewoJCXRvcDogTWF0aC5yb3VuZChyZWdpb24ueS9wYWdlSGVpZ2h0KjEwMCkrJyUnLAoJCWxlZnQ6IE1hdGgucm91bmQocmVnaW9uLngvcGFnZVdpZHRoKjEwMCkrJyUnLAoJCXdpZHRoOiBNYXRoLnJvdW5kKHJlZ2lvbi53aWR0aC9wYWdlV2lkdGgqMTAwKSsnJScsCgkJaGVpZ2h0OiBNYXRoLnJvdW5kKHJlZ2lvbi5oZWlnaHQvcGFnZUhlaWdodCoxMDApKyclJwoJfSkuYXR0cigncmVnaW9uLWRhdGEnLCAkLnBhcmFtKHJlZ2lvbi5kYXRhfHwnJykpOwoKCglyZWcuYXBwZW5kVG8ocGFnZUVsZW1lbnQpOwp9CgovLyBQcm9jZXNzIGNsaWNrIG9uIGEgcmVnaW9uCgpmdW5jdGlvbiByZWdpb25DbGljayhldmVudCkgewoKCXZhciByZWdpb24gPSAkKGV2ZW50LnRhcmdldCk7CgoJaWYgKHJlZ2lvbi5oYXNDbGFzcygncmVnaW9uJykpIHsKCgkJJCgnLm1hZ2F6aW5lLXZpZXdwb3J0JykuZGF0YSgpLnJlZ2lvbkNsaWNrZWQgPSB0cnVlOwoJCQoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJCSQoJy5tYWdhemluZS12aWV3cG9ydCcpLmRhdGEoKS5yZWdpb25DbGlja2VkID0gZmFsc2U7CgkJfSwgMTAwKTsKCQkKCQl2YXIgcmVnaW9uVHlwZSA9ICQudHJpbShyZWdpb24uYXR0cignY2xhc3MnKS5yZXBsYWNlKCdyZWdpb24nLCAnJykpOwoKCQlyZXR1cm4gcHJvY2Vzc1JlZ2lvbihyZWdpb24sIHJlZ2lvblR5cGUpOwoKCX0KCn0KCi8vIFByb2Nlc3MgdGhlIGRhdGEgb2YgZXZlcnkgcmVnaW9uCgpmdW5jdGlvbiBwcm9jZXNzUmVnaW9uKHJlZ2lvbiwgcmVnaW9uVHlwZSkgewoKCWRhdGEgPSBkZWNvZGVQYXJhbXMocmVnaW9uLmF0dHIoJ3JlZ2lvbi1kYXRhJykpOwoKCXN3aXRjaCAocmVnaW9uVHlwZSkgewoJCWNhc2UgJ2xpbmsnIDoKCgkJCXdpbmRvdy5vcGVuKGRhdGEudXJsKTsKCgkJYnJlYWs7CgkJY2FzZSAnem9vbScgOgoKCQkJdmFyIHJlZ2lvbk9mZnNldCA9IHJlZ2lvbi5vZmZzZXQoKSwKCQkJCXZpZXdwb3J0T2Zmc2V0ID0gJCgnLm1hZ2F6aW5lLXZpZXdwb3J0Jykub2Zmc2V0KCksCgkJCQlwb3MgPSB7CgkJCQkJeDogcmVnaW9uT2Zmc2V0LmxlZnQtdmlld3BvcnRPZmZzZXQubGVmdCwKCQkJCQl5OiByZWdpb25PZmZzZXQudG9wLXZpZXdwb3J0T2Zmc2V0LnRvcAoJCQkJfTsKCgkJCSQoJy5tYWdhemluZS12aWV3cG9ydCcpLnpvb20oJ3pvb21JbicsIHBvcyk7CgoJCWJyZWFrOwoJCWNhc2UgJ3RvLXBhZ2UnIDoKCgkJCSQoJy5tYWdhemluZScpLnR1cm4oJ3BhZ2UnLCBkYXRhLnBhZ2UpOwoKCQlicmVhazsKCX0KCn0KCi8vIExvYWQgbGFyZ2UgcGFnZQoKZnVuY3Rpb24gbG9hZExhcmdlUGFnZShwYWdlLCBwYWdlRWxlbWVudCkgewoJCgl2YXIgaW1nID0gJCgnPGltZyAvPicpOwoKCWltZy5sb2FkKGZ1bmN0aW9uKCkgewoKCQl2YXIgcHJldkltZyA9IHBhZ2VFbGVtZW50LmZpbmQoJ2ltZycpOwoJCSQodGhpcykuY3NzKHt3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJ30pOwoJCSQodGhpcykuYXBwZW5kVG8ocGFnZUVsZW1lbnQpOwoJCXByZXZJbWcucmVtb3ZlKCk7CgkJCgl9KTsKCgkvLyBMb2FkbmV3IHBhZ2UKCQoJaW1nLmF0dHIoJ3NyYycsICdwYWdlcy8nICsgIHBhZ2UgKyAnLWxhcmdlLmpwZycpOwp9CgovLyBMb2FkIHNtYWxsIHBhZ2UKCmZ1bmN0aW9uIGxvYWRTbWFsbFBhZ2UocGFnZSwgcGFnZUVsZW1lbnQpIHsKCQoJdmFyIGltZyA9IHBhZ2VFbGVtZW50LmZpbmQoJ2ltZycpOwoKCWltZy5jc3Moe3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfSk7CgoJaW1nLnVuYmluZCgnbG9hZCcpOwoJLy8gTG9hZG5ldyBwYWdlCgoJaW1nLmF0dHIoJ3NyYycsICdwYWdlcy8nICsgIHBhZ2UgKyAnLmpwZycpOwp9CgovLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMjg0ODgKCmZ1bmN0aW9uIGlzQ2hyb21lKCkgewoKCXJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpIT0tMTsKCn0KCmZ1bmN0aW9uIGRpc2FibGVDb250cm9scyhwYWdlKSB7CgkJaWYgKHBhZ2U9PTEpCgkJCSQoJy5wcmV2aW91cy1idXR0b24nKS5oaWRlKCk7CgkJZWxzZQoJCQkkKCcucHJldmlvdXMtYnV0dG9uJykuc2hvdygpOwoJCQkJCQoJCWlmIChwYWdlPT0kKCcubWFnYXppbmUnKS50dXJuKCdwYWdlcycpKQoJCQkkKCcubmV4dC1idXR0b24nKS5oaWRlKCk7CgkJZWxzZQoJCQkkKCcubmV4dC1idXR0b24nKS5zaG93KCk7Cn0KCi8vIFNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBmb3IgdGhlIHZpZXdwb3J0CgpmdW5jdGlvbiByZXNpemVWaWV3cG9ydCgpIHsKCgl2YXIgd2lkdGggPSAkKHdpbmRvdykud2lkdGgoKSwKCQloZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCksCgkJb3B0aW9ucyA9ICQoJy5tYWdhemluZScpLnR1cm4oJ29wdGlvbnMnKTsKCgkkKCcubWFnYXppbmUnKS5yZW1vdmVDbGFzcygnYW5pbWF0ZWQnKTsKCgkkKCcubWFnYXppbmUtdmlld3BvcnQnKS5jc3MoewoJCXdpZHRoOiB3aWR0aCwKCQloZWlnaHQ6IGhlaWdodAoJfSkuCgl6b29tKCdyZXNpemUnKTsKCgoJaWYgKCQoJy5tYWdhemluZScpLnR1cm4oJ3pvb20nKT09MSkgewoJCXZhciBib3VuZCA9IGNhbGN1bGF0ZUJvdW5kKHsKCQkJd2lkdGg6IG9wdGlvbnMud2lkdGgsCgkJCWhlaWdodDogb3B0aW9ucy5oZWlnaHQsCgkJCWJvdW5kV2lkdGg6IE1hdGgubWluKG9wdGlvbnMud2lkdGgsIHdpZHRoKSwKCQkJYm91bmRIZWlnaHQ6IE1hdGgubWluKG9wdGlvbnMuaGVpZ2h0LCBoZWlnaHQpCgkJfSk7CgoJCWlmIChib3VuZC53aWR0aCUyIT09MCkKCQkJYm91bmQud2lkdGgtPTE7CgoJCQkKCQlpZiAoYm91bmQud2lkdGghPSQoJy5tYWdhemluZScpLndpZHRoKCkgfHwgYm91bmQuaGVpZ2h0IT0kKCcubWFnYXppbmUnKS5oZWlnaHQoKSkgewoKCQkJJCgnLm1hZ2F6aW5lJykudHVybignc2l6ZScsIGJvdW5kLndpZHRoLCBib3VuZC5oZWlnaHQpOwoKCQkJaWYgKCQoJy5tYWdhemluZScpLnR1cm4oJ3BhZ2UnKT09MSkKCQkJCSQoJy5tYWdhemluZScpLnR1cm4oJ3BlZWwnLCAnYnInKTsKCgkJCSQoJy5uZXh0LWJ1dHRvbicpLmNzcyh7aGVpZ2h0OiBib3VuZC5oZWlnaHQsIGJhY2tncm91bmRQb3NpdGlvbjogJy0zOHB4ICcrKGJvdW5kLmhlaWdodC8yLTMyLzIpKydweCd9KTsKCQkJJCgnLnByZXZpb3VzLWJ1dHRvbicpLmNzcyh7aGVpZ2h0OiBib3VuZC5oZWlnaHQsIGJhY2tncm91bmRQb3NpdGlvbjogJy00cHggJysoYm91bmQuaGVpZ2h0LzItMzIvMikrJ3B4J30pOwoJCX0KCgkJJCgnLm1hZ2F6aW5lJykuY3NzKHt0b3A6IC1ib3VuZC5oZWlnaHQvMiwgbGVmdDogLWJvdW5kLndpZHRoLzJ9KTsKCX0KCgl2YXIgbWFnYXppbmVPZmZzZXQgPSAkKCcubWFnYXppbmUnKS5vZmZzZXQoKSwKCQlib3VuZEggPSBoZWlnaHQgLSBtYWdhemluZU9mZnNldC50b3AgLSAkKCcubWFnYXppbmUnKS5oZWlnaHQoKSwKCQltYXJnaW5Ub3AgPSAoYm91bmRIIC0gJCgnLnRodW1ibmFpbHMgPiBkaXYnKS5oZWlnaHQoKSkgLyAyOwoKCWlmIChtYXJnaW5Ub3A8MCkgewoJCSQoJy50aHVtYm5haWxzJykuY3NzKHtoZWlnaHQ6MX0pOwoJfSBlbHNlIHsKCQkkKCcudGh1bWJuYWlscycpLmNzcyh7aGVpZ2h0OiBib3VuZEh9KTsKCQkkKCcudGh1bWJuYWlscyA+IGRpdicpLmNzcyh7bWFyZ2luVG9wOiBtYXJnaW5Ub3B9KTsKCX0KCglpZiAobWFnYXppbmVPZmZzZXQudG9wPCQoJy5tYWRlJykuaGVpZ2h0KCkpCgkJJCgnLm1hZGUnKS5oaWRlKCk7CgllbHNlCgkJJCgnLm1hZGUnKS5zaG93KCk7CgoJJCgnLm1hZ2F6aW5lJykuYWRkQ2xhc3MoJ2FuaW1hdGVkJyk7CgkKfQoKCi8vIE51bWJlciBvZiB2aWV3cyBpbiBhIGZsaXBib29rCgpmdW5jdGlvbiBudW1iZXJPZlZpZXdzKGJvb2spIHsKCXJldHVybiBib29rLnR1cm4oJ3BhZ2VzJykgLyAyICsgMTsKfQoKLy8gQ3VycmVudCB2aWV3IGluIGEgZmxpcGJvb2sKCmZ1bmN0aW9uIGdldFZpZXdOdW1iZXIoYm9vaywgcGFnZSkgewoJcmV0dXJuIHBhcnNlSW50KChwYWdlIHx8IGJvb2sudHVybigncGFnZScpKS8yICsgMSwgMTApOwp9CgpmdW5jdGlvbiBtb3ZlQmFyKHllcykgewoJaWYgKE1vZGVybml6ciAmJiBNb2Rlcm5penIuY3NzdHJhbnNmb3JtcykgewoJCSQoJyNzbGlkZXIgLnVpLXNsaWRlci1oYW5kbGUnKS5jc3Moe3pJbmRleDogeWVzID8gLTEgOiAxMDAwMH0pOwoJfQp9CgpmdW5jdGlvbiBzZXRQcmV2aWV3KHZpZXcpIHsKCgl2YXIgcHJldmlld1dpZHRoID0gMTEyLAoJCXByZXZpZXdIZWlnaHQgPSA3MywKCQlwcmV2aWV3U3JjID0gJ3BhZ2VzL3ByZXZpZXcuanBnJywKCQlwcmV2aWV3ID0gJChfdGh1bWJQcmV2aWV3LmNoaWxkcmVuKCc6Zmlyc3QnKSksCgkJbnVtUGFnZXMgPSAodmlldz09MSB8fCB2aWV3PT0kKCcjc2xpZGVyJykuc2xpZGVyKCdvcHRpb24nLCAnbWF4JykpID8gMSA6IDIsCgkJd2lkdGggPSAobnVtUGFnZXM9PTEpID8gcHJldmlld1dpZHRoLzIgOiBwcmV2aWV3V2lkdGg7CgoJX3RodW1iUHJldmlldy4KCQlhZGRDbGFzcygnbm8tdHJhbnNpdGlvbicpLgoJCWNzcyh7d2lkdGg6IHdpZHRoICsgMTUsCgkJCWhlaWdodDogcHJldmlld0hlaWdodCArIDE1LAoJCQl0b3A6IC1wcmV2aWV3SGVpZ2h0IC0gMzAsCgkJCWxlZnQ6ICgkKCQoJyNzbGlkZXInKS5jaGlsZHJlbignOmZpcnN0JykpLndpZHRoKCkgLSB3aWR0aCAtIDE1KS8yCgkJfSk7CgoJcHJldmlldy5jc3MoewoJCXdpZHRoOiB3aWR0aCwKCQloZWlnaHQ6IHByZXZpZXdIZWlnaHQKCX0pOwoKCWlmIChwcmV2aWV3LmNzcygnYmFja2dyb3VuZC1pbWFnZScpPT09JycgfHwKCQlwcmV2aWV3LmNzcygnYmFja2dyb3VuZC1pbWFnZScpPT0nbm9uZScpIHsKCgkJcHJldmlldy5jc3Moe2JhY2tncm91bmRJbWFnZTogJ3VybCgnICsgcHJldmlld1NyYyArICcpJ30pOwoKCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CgkJCV90aHVtYlByZXZpZXcucmVtb3ZlQ2xhc3MoJ25vLXRyYW5zaXRpb24nKTsKCQl9LCAwKTsKCgl9CgoJcHJldmlldy5jc3Moe2JhY2tncm91bmRQb3NpdGlvbjoKCQknMHB4IC0nKygodmlldy0xKSpwcmV2aWV3SGVpZ2h0KSsncHgnCgl9KTsKfQoKLy8gV2lkdGggb2YgdGhlIGZsaXBib29rIHdoZW4gem9vbWVkIGluCgpmdW5jdGlvbiBsYXJnZU1hZ2F6aW5lV2lkdGgoKSB7CgkKCXJldHVybiAyMjE0OwoKfQoKLy8gZGVjb2RlIFVSTCBQYXJhbWV0ZXJzCgpmdW5jdGlvbiBkZWNvZGVQYXJhbXMoZGF0YSkgewoKCXZhciBwYXJ0cyA9IGRhdGEuc3BsaXQoJyYnKSwgZCwgb2JqID0ge307CgoJZm9yICh2YXIgaSA9MDsgaTxwYXJ0cy5sZW5ndGg7IGkrKykgewoJCWQgPSBwYXJ0c1tpXS5zcGxpdCgnPScpOwoJCW9ialtkZWNvZGVVUklDb21wb25lbnQoZFswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KGRbMV0pOwoJfQoKCXJldHVybiBvYmo7Cn0KCi8vIENhbGN1bGF0ZSB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBhIHNxdWFyZSB3aXRoaW4gYW5vdGhlciBzcXVhcmUKCmZ1bmN0aW9uIGNhbGN1bGF0ZUJvdW5kKGQpIHsKCQoJdmFyIGJvdW5kID0ge3dpZHRoOiBkLndpZHRoLCBoZWlnaHQ6IGQuaGVpZ2h0fTsKCglpZiAoYm91bmQud2lkdGg+ZC5ib3VuZFdpZHRoIHx8IGJvdW5kLmhlaWdodD5kLmJvdW5kSGVpZ2h0KSB7CgkJCgkJdmFyIHJlbCA9IGJvdW5kLndpZHRoL2JvdW5kLmhlaWdodDsKCgkJaWYgKGQuYm91bmRXaWR0aC9yZWw+ZC5ib3VuZEhlaWdodCAmJiBkLmJvdW5kSGVpZ2h0KnJlbDw9ZC5ib3VuZFdpZHRoKSB7CgkJCQoJCQlib3VuZC53aWR0aCA9IE1hdGgucm91bmQoZC5ib3VuZEhlaWdodCpyZWwpOwoJCQlib3VuZC5oZWlnaHQgPSBkLmJvdW5kSGVpZ2h0OwoKCQl9IGVsc2UgewoJCQkKCQkJYm91bmQud2lkdGggPSBkLmJvdW5kV2lkdGg7CgkJCWJvdW5kLmhlaWdodCA9IE1hdGgucm91bmQoZC5ib3VuZFdpZHRoL3JlbCk7CgkJCgkJfQoJfQoJCQoJcmV0dXJuIGJvdW5kOwp9'></script> -->

		<script src='data:/text/plain;base64,LyohCiAqIFZ1ZS5qcyB2Mi41LjE3CiAqIChjKSAyMDE0LTIwMTggRXZhbiBZb3UKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KIWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6ZS5WdWU9dCgpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB5PU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIG51bGw9PWV9ZnVuY3Rpb24gRChlKXtyZXR1cm4gbnVsbCE9ZX1mdW5jdGlvbiBTKGUpe3JldHVybiEwPT09ZX1mdW5jdGlvbiBUKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlfHwic3ltYm9sIj09dHlwZW9mIGV8fCJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gUChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX12YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1yLmNhbGwoZSl9ZnVuY3Rpb24gaShlKXt2YXIgdD1wYXJzZUZsb2F0KFN0cmluZyhlKSk7cmV0dXJuIDA8PXQmJk1hdGguZmxvb3IodCk9PT10JiZpc0Zpbml0ZShlKX1mdW5jdGlvbiB0KGUpe3JldHVybiBudWxsPT1lPyIiOiJvYmplY3QiPT10eXBlb2YgZT9KU09OLnN0cmluZ2lmeShlLG51bGwsMik6U3RyaW5nKGUpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUuc3BsaXQoIiwiKSxpPTA7aTxyLmxlbmd0aDtpKyspbltyW2ldXT0hMDtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbihlKXtyZXR1cm4gbltlXX19dmFyIGM9cygic2xvdCxjb21wb25lbnQiLCEwKSx1PXMoImtleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzIik7ZnVuY3Rpb24gZihlLHQpe2lmKGUubGVuZ3RoKXt2YXIgbj1lLmluZGV4T2YodCk7aWYoLTE8bilyZXR1cm4gZS5zcGxpY2UobiwxKX19dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBwKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfWZ1bmN0aW9uIGUodCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV18fChuW2VdPXQoZSkpfX12YXIgbz0vLShcdykvZyxnPWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShvLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dC50b1VwcGVyQ2FzZSgpOiIifSl9KSxkPWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX0pLGE9L1xCKFtBLVpdKS9nLF89ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGEsIi0kMSIpLnRvTG93ZXJDYXNlKCl9KTt2YXIgdj1GdW5jdGlvbi5wcm90b3R5cGUuYmluZD9mdW5jdGlvbihlLHQpe3JldHVybiBlLmJpbmQodCl9OmZ1bmN0aW9uKG4scil7ZnVuY3Rpb24gZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO3JldHVybiB0PzE8dD9uLmFwcGx5KHIsYXJndW1lbnRzKTpuLmNhbGwocixlKTpuLmNhbGwocil9cmV0dXJuIGUuX2xlbmd0aD1uLmxlbmd0aCxlfTtmdW5jdGlvbiBoKGUsdCl7dD10fHwwO2Zvcih2YXIgbj1lLmxlbmd0aC10LHI9bmV3IEFycmF5KG4pO24tLTspcltuXT1lW24rdF07cmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBiKGUpe2Zvcih2YXIgdD17fSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmbSh0LGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uICQoZSx0LG4pe312YXIgTz1mdW5jdGlvbihlLHQsbil7cmV0dXJuITF9LHc9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O2Z1bmN0aW9uIEModCxuKXtpZih0PT09bilyZXR1cm4hMDt2YXIgZT1QKHQpLHI9UChuKTtpZighZXx8IXIpcmV0dXJuIWUmJiFyJiZTdHJpbmcodCk9PT1TdHJpbmcobik7dHJ5e3ZhciBpPUFycmF5LmlzQXJyYXkodCksbz1BcnJheS5pc0FycmF5KG4pO2lmKGkmJm8pcmV0dXJuIHQubGVuZ3RoPT09bi5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24oZSx0KXtyZXR1cm4gQyhlLG5bdF0pfSk7aWYoaXx8bylyZXR1cm4hMTt2YXIgYT1PYmplY3Qua2V5cyh0KSxzPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PXMubGVuZ3RoJiZhLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBDKHRbZV0sbltlXSl9KX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24geChlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKEMoZVtuXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBSKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIEU9ImRhdGEtc2VydmVyLXJlbmRlcmVkIixrPVsiY29tcG9uZW50IiwiZGlyZWN0aXZlIiwiZmlsdGVyIl0sQT1bImJlZm9yZUNyZWF0ZSIsImNyZWF0ZWQiLCJiZWZvcmVNb3VudCIsIm1vdW50ZWQiLCJiZWZvcmVVcGRhdGUiLCJ1cGRhdGVkIiwiYmVmb3JlRGVzdHJveSIsImRlc3Ryb3llZCIsImFjdGl2YXRlZCIsImRlYWN0aXZhdGVkIiwiZXJyb3JDYXB0dXJlZCJdLGo9e29wdGlvbk1lcmdlU3RyYXRlZ2llczpPYmplY3QuY3JlYXRlKG51bGwpLHNpbGVudDohMSxwcm9kdWN0aW9uVGlwOiExLGRldnRvb2xzOiExLHBlcmZvcm1hbmNlOiExLGVycm9ySGFuZGxlcjpudWxsLHdhcm5IYW5kbGVyOm51bGwsaWdub3JlZEVsZW1lbnRzOltdLGtleUNvZGVzOk9iamVjdC5jcmVhdGUobnVsbCksaXNSZXNlcnZlZFRhZzpPLGlzUmVzZXJ2ZWRBdHRyOk8saXNVbmtub3duRWxlbWVudDpPLGdldFRhZ05hbWVzcGFjZTokLHBhcnNlUGxhdGZvcm1UYWdOYW1lOncsbXVzdFVzZVByb3A6TyxfbGlmZWN5Y2xlSG9va3M6QX07ZnVuY3Rpb24gTihlLHQsbixyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ISFyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfXZhciBMPS9bXlx3LiRdLzt2YXIgSSxIPSJfX3Byb3RvX18iaW57fSxCPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LFU9InVuZGVmaW5lZCIhPXR5cGVvZiBXWEVudmlyb25tZW50JiYhIVdYRW52aXJvbm1lbnQucGxhdGZvcm0sVj1VJiZXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCksej1CJiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLEs9eiYmL21zaWV8dHJpZGVudC8udGVzdCh6KSxKPXomJjA8ei5pbmRleE9mKCJtc2llIDkuMCIpLHE9eiYmMDx6LmluZGV4T2YoImVkZ2UvIiksVz0oeiYmei5pbmRleE9mKCJhbmRyb2lkIikseiYmL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KHopfHwiaW9zIj09PVYpLEc9KHomJi9jaHJvbWVcL1xkKy8udGVzdCh6KSx7fS53YXRjaCksWj0hMTtpZihCKXRyeXt2YXIgWD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe1o9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QtcGFzc2l2ZSIsbnVsbCxYKX1jYXRjaChlKXt9dmFyIFk9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09SSYmKEk9IUImJiFVJiYidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmInNlcnZlciI9PT1nbG9iYWwucHJvY2Vzcy5lbnYuVlVFX0VOViksSX0sUT1CJiZ3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztmdW5jdGlvbiBlZShlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmL25hdGl2ZSBjb2RlLy50ZXN0KGUudG9TdHJpbmcoKSl9dmFyIHRlLG5lPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlZShTeW1ib2wpJiYidW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJmVlKFJlZmxlY3Qub3duS2V5cyk7dGU9InVuZGVmaW5lZCIhPXR5cGVvZiBTZXQmJmVlKFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PXRoaXMuc2V0W2VdfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRbZV09ITB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX0sZX0oKTt2YXIgcmU9JCxpZT0wLG9lPWZ1bmN0aW9uKCl7dGhpcy5pZD1pZSsrLHRoaXMuc3Vicz1bXX07b2UucHJvdG90eXBlLmFkZFN1Yj1mdW5jdGlvbihlKXt0aGlzLnN1YnMucHVzaChlKX0sb2UucHJvdG90eXBlLnJlbW92ZVN1Yj1mdW5jdGlvbihlKXtmKHRoaXMuc3VicyxlKX0sb2UucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe29lLnRhcmdldCYmb2UudGFyZ2V0LmFkZERlcCh0aGlzKX0sb2UucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnN1YnMuc2xpY2UoKSx0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWVbdF0udXBkYXRlKCl9LG9lLnRhcmdldD1udWxsO3ZhciBhZT1bXTtmdW5jdGlvbiBzZShlKXtvZS50YXJnZXQmJmFlLnB1c2gob2UudGFyZ2V0KSxvZS50YXJnZXQ9ZX1mdW5jdGlvbiBjZSgpe29lLnRhcmdldD1hZS5wb3AoKX12YXIgbGU9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt0aGlzLnRhZz1lLHRoaXMuZGF0YT10LHRoaXMuY2hpbGRyZW49bix0aGlzLnRleHQ9cix0aGlzLmVsbT1pLHRoaXMubnM9dm9pZCAwLHRoaXMuY29udGV4dD1vLHRoaXMuZm5Db250ZXh0PXZvaWQgMCx0aGlzLmZuT3B0aW9ucz12b2lkIDAsdGhpcy5mblNjb3BlSWQ9dm9pZCAwLHRoaXMua2V5PXQmJnQua2V5LHRoaXMuY29tcG9uZW50T3B0aW9ucz1hLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9dm9pZCAwLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLnJhdz0hMSx0aGlzLmlzU3RhdGljPSExLHRoaXMuaXNSb290SW5zZXJ0PSEwLHRoaXMuaXNDb21tZW50PSExLHRoaXMuaXNDbG9uZWQ9ITEsdGhpcy5pc09uY2U9ITEsdGhpcy5hc3luY0ZhY3Rvcnk9cyx0aGlzLmFzeW5jTWV0YT12b2lkIDAsdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXI9ITF9LHVlPXtjaGlsZDp7Y29uZmlndXJhYmxlOiEwfX07dWUuY2hpbGQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxlLnByb3RvdHlwZSx1ZSk7dmFyIGZlPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgdD1uZXcgbGU7cmV0dXJuIHQudGV4dD1lLHQuaXNDb21tZW50PSEwLHR9O2Z1bmN0aW9uIHBlKGUpe3JldHVybiBuZXcgbGUodm9pZCAwLHZvaWQgMCx2b2lkIDAsU3RyaW5nKGUpKX1mdW5jdGlvbiBkZShlKXt2YXIgdD1uZXcgbGUoZS50YWcsZS5kYXRhLGUuY2hpbGRyZW4sZS50ZXh0LGUuZWxtLGUuY29udGV4dCxlLmNvbXBvbmVudE9wdGlvbnMsZS5hc3luY0ZhY3RvcnkpO3JldHVybiB0Lm5zPWUubnMsdC5pc1N0YXRpYz1lLmlzU3RhdGljLHQua2V5PWUua2V5LHQuaXNDb21tZW50PWUuaXNDb21tZW50LHQuZm5Db250ZXh0PWUuZm5Db250ZXh0LHQuZm5PcHRpb25zPWUuZm5PcHRpb25zLHQuZm5TY29wZUlkPWUuZm5TY29wZUlkLHQuaXNDbG9uZWQ9ITAsdH12YXIgdmU9QXJyYXkucHJvdG90eXBlLGhlPU9iamVjdC5jcmVhdGUodmUpO1sicHVzaCIsInBvcCIsInNoaWZ0IiwidW5zaGlmdCIsInNwbGljZSIsInNvcnQiLCJyZXZlcnNlIl0uZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgYT12ZVtvXTtOKGhlLG8sZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD1hcmd1bWVudHMubGVuZ3RoO3QtLTspZVt0XT1hcmd1bWVudHNbdF07dmFyIG4scj1hLmFwcGx5KHRoaXMsZSksaT10aGlzLl9fb2JfXztzd2l0Y2gobyl7Y2FzZSJwdXNoIjpjYXNlInVuc2hpZnQiOm49ZTticmVhaztjYXNlInNwbGljZSI6bj1lLnNsaWNlKDIpfXJldHVybiBuJiZpLm9ic2VydmVBcnJheShuKSxpLmRlcC5ub3RpZnkoKSxyfSl9KTt2YXIgbWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGUpLHllPSEwO2Z1bmN0aW9uIGdlKGUpe3llPWV9dmFyIF9lPWZ1bmN0aW9uKGUpeyh0aGlzLnZhbHVlPWUsdGhpcy5kZXA9bmV3IG9lLHRoaXMudm1Db3VudD0wLE4oZSwiX19vYl9fIix0aGlzKSxBcnJheS5pc0FycmF5KGUpKT8oKEg/YmU6JGUpKGUsaGUsbWUpLHRoaXMub2JzZXJ2ZUFycmF5KGUpKTp0aGlzLndhbGsoZSl9O2Z1bmN0aW9uIGJlKGUsdCxuKXtlLl9fcHJvdG9fXz10fWZ1bmN0aW9uICRlKGUsdCxuKXtmb3IodmFyIHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPW5bcl07TihlLG8sdFtvXSl9fWZ1bmN0aW9uIHdlKGUsdCl7dmFyIG47aWYoUChlKSYmIShlIGluc3RhbmNlb2YgbGUpKXJldHVybiBwKGUsIl9fb2JfXyIpJiZlLl9fb2JfXyBpbnN0YW5jZW9mIF9lP249ZS5fX29iX186eWUmJiFZKCkmJihBcnJheS5pc0FycmF5KGUpfHxsKGUpKSYmT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmIWUuX2lzVnVlJiYobj1uZXcgX2UoZSkpLHQmJm4mJm4udm1Db3VudCsrLG59ZnVuY3Rpb24gQ2UobixlLHIsdCxpKXt2YXIgbz1uZXcgb2UsYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSk7aWYoIWF8fCExIT09YS5jb25maWd1cmFibGUpe3ZhciBzPWEmJmEuZ2V0O3N8fDIhPT1hcmd1bWVudHMubGVuZ3RofHwocj1uW2VdKTt2YXIgYz1hJiZhLnNldCxsPSFpJiZ3ZShyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1zP3MuY2FsbChuKTpyO3JldHVybiBvZS50YXJnZXQmJihvLmRlcGVuZCgpLGwmJihsLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KGUpJiZmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj12b2lkIDAscj0wLGk9dC5sZW5ndGg7cjxpO3IrKykobj10W3JdKSYmbi5fX29iX18mJm4uX19vYl9fLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KG4pJiZlKG4pfShlKSkpLGV9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1zP3MuY2FsbChuKTpyO2U9PT10fHxlIT1lJiZ0IT10fHwoYz9jLmNhbGwobixlKTpyPWUsbD0haSYmd2UoZSksby5ub3RpZnkoKSl9fSl9fWZ1bmN0aW9uIHhlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpJiZpKHQpKXJldHVybiBlLmxlbmd0aD1NYXRoLm1heChlLmxlbmd0aCx0KSxlLnNwbGljZSh0LDEsbiksbjtpZih0IGluIGUmJiEodCBpbiBPYmplY3QucHJvdG90eXBlKSlyZXR1cm4gZVt0XT1uO3ZhciByPWUuX19vYl9fO3JldHVybiBlLl9pc1Z1ZXx8ciYmci52bUNvdW50P246cj8oQ2Uoci52YWx1ZSx0LG4pLHIuZGVwLm5vdGlmeSgpLG4pOmVbdF09bn1mdW5jdGlvbiBrZShlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkmJmkodCkpZS5zcGxpY2UodCwxKTtlbHNle3ZhciBuPWUuX19vYl9fO2UuX2lzVnVlfHxuJiZuLnZtQ291bnR8fHAoZSx0KSYmKGRlbGV0ZSBlW3RdLG4mJm4uZGVwLm5vdGlmeSgpKX19X2UucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKGUpLG49MDtuPHQubGVuZ3RoO24rKylDZShlLHRbbl0pfSxfZS5wcm90b3R5cGUub2JzZXJ2ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl3ZShlW3RdKX07dmFyIEFlPWoub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO2Z1bmN0aW9uIE9lKGUsdCl7aWYoIXQpcmV0dXJuIGU7Zm9yKHZhciBuLHIsaSxvPU9iamVjdC5rZXlzKHQpLGE9MDthPG8ubGVuZ3RoO2ErKylyPWVbbj1vW2FdXSxpPXRbbl0scChlLG4pP2wocikmJmwoaSkmJk9lKHIsaSk6eGUoZSxuLGkpO3JldHVybiBlfWZ1bmN0aW9uIFNlKG4scixpKXtyZXR1cm4gaT9mdW5jdGlvbigpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiByP3IuY2FsbChpLGkpOnIsdD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmNhbGwoaSxpKTpuO3JldHVybiBlP09lKGUsdCk6dH06cj9uP2Z1bmN0aW9uKCl7cmV0dXJuIE9lKCJmdW5jdGlvbiI9PXR5cGVvZiByP3IuY2FsbCh0aGlzLHRoaXMpOnIsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5jYWxsKHRoaXMsdGhpcyk6bil9OnI6bn1mdW5jdGlvbiBUZShlLHQpe3JldHVybiB0P2U/ZS5jb25jYXQodCk6QXJyYXkuaXNBcnJheSh0KT90Olt0XTplfWZ1bmN0aW9uIEVlKGUsdCxuLHIpe3ZhciBpPU9iamVjdC5jcmVhdGUoZXx8bnVsbCk7cmV0dXJuIHQ/bShpLHQpOml9QWUuZGF0YT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/U2UoZSx0LG4pOnQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6U2UoZSx0KX0sQS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FlW2VdPVRlfSksay5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FlW2UrInMiXT1FZX0pLEFlLndhdGNoPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9PT1HJiYoZT12b2lkIDApLHQ9PT1HJiYodD12b2lkIDApLCF0KXJldHVybiBPYmplY3QuY3JlYXRlKGV8fG51bGwpO2lmKCFlKXJldHVybiB0O3ZhciBpPXt9O2Zvcih2YXIgbyBpbiBtKGksZSksdCl7dmFyIGE9aVtvXSxzPXRbb107YSYmIUFycmF5LmlzQXJyYXkoYSkmJihhPVthXSksaVtvXT1hP2EuY29uY2F0KHMpOkFycmF5LmlzQXJyYXkocyk/czpbc119cmV0dXJuIGl9LEFlLnByb3BzPUFlLm1ldGhvZHM9QWUuaW5qZWN0PUFlLmNvbXB1dGVkPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFlKXJldHVybiB0O3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIG0oaSxlKSx0JiZtKGksdCksaX0sQWUucHJvdmlkZT1TZTt2YXIgamU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9lOnR9O2Z1bmN0aW9uIE5lKG4scixpKXsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHI9ci5vcHRpb25zKSxmdW5jdGlvbihlLHQpe3ZhciBuPWUucHJvcHM7aWYobil7dmFyIHIsaSxvPXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHI9bi5sZW5ndGg7ci0tOykic3RyaW5nIj09dHlwZW9mKGk9bltyXSkmJihvW2coaSldPXt0eXBlOm51bGx9KTtlbHNlIGlmKGwobikpZm9yKHZhciBhIGluIG4paT1uW2FdLG9bZyhhKV09bChpKT9pOnt0eXBlOml9O2UucHJvcHM9b319KHIpLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmplY3Q7aWYobil7dmFyIHI9ZS5pbmplY3Q9e307aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylyW25baV1dPXtmcm9tOm5baV19O2Vsc2UgaWYobChuKSlmb3IodmFyIG8gaW4gbil7dmFyIGE9bltvXTtyW29dPWwoYSk/bSh7ZnJvbTpvfSxhKTp7ZnJvbTphfX19fShyKSxmdW5jdGlvbihlKXt2YXIgdD1lLmRpcmVjdGl2ZXM7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHRbbl09e2JpbmQ6cix1cGRhdGU6cn0pfX0ocik7dmFyIGU9ci5leHRlbmRzO2lmKGUmJihuPU5lKG4sZSxpKSksci5taXhpbnMpZm9yKHZhciB0PTAsbz1yLm1peGlucy5sZW5ndGg7dDxvO3QrKyluPU5lKG4sci5taXhpbnNbdF0saSk7dmFyIGEscz17fTtmb3IoYSBpbiBuKWMoYSk7Zm9yKGEgaW4gcilwKG4sYSl8fGMoYSk7ZnVuY3Rpb24gYyhlKXt2YXIgdD1BZVtlXXx8amU7c1tlXT10KG5bZV0scltlXSxpLGUpfXJldHVybiBzfWZ1bmN0aW9uIExlKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGk9ZVt0XTtpZihwKGksbikpcmV0dXJuIGlbbl07dmFyIG89ZyhuKTtpZihwKGksbykpcmV0dXJuIGlbb107dmFyIGE9ZChvKTtyZXR1cm4gcChpLGEpP2lbYV06aVtuXXx8aVtvXXx8aVthXX19ZnVuY3Rpb24gSWUoZSx0LG4scil7dmFyIGk9dFtlXSxvPSFwKG4sZSksYT1uW2VdLHM9UGUoQm9vbGVhbixpLnR5cGUpO2lmKC0xPHMpaWYobyYmIXAoaSwiZGVmYXVsdCIpKWE9ITE7ZWxzZSBpZigiIj09PWF8fGE9PT1fKGUpKXt2YXIgYz1QZShTdHJpbmcsaS50eXBlKTsoYzwwfHxzPGMpJiYoYT0hMCl9aWYodm9pZCAwPT09YSl7YT1mdW5jdGlvbihlLHQsbil7aWYoIXAodCwiZGVmYXVsdCIpKXJldHVybjt2YXIgcj10LmRlZmF1bHQ7aWYoZSYmZS4kb3B0aW9ucy5wcm9wc0RhdGEmJnZvaWQgMD09PWUuJG9wdGlvbnMucHJvcHNEYXRhW25dJiZ2b2lkIDAhPT1lLl9wcm9wc1tuXSlyZXR1cm4gZS5fcHJvcHNbbl07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHImJiJGdW5jdGlvbiIhPT1NZSh0LnR5cGUpP3IuY2FsbChlKTpyfShyLGksZSk7dmFyIGw9eWU7Z2UoITApLHdlKGEpLGdlKGwpfXJldHVybiBhfWZ1bmN0aW9uIE1lKGUpe3ZhciB0PWUmJmUudG9TdHJpbmcoKS5tYXRjaCgvXlxzKmZ1bmN0aW9uIChcdyspLyk7cmV0dXJuIHQ/dFsxXToiIn1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBNZShlKT09PU1lKHQpfWZ1bmN0aW9uIFBlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIERlKHQsZSk/MDotMTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoRGUodFtuXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBGZShlLHQsbil7aWYodClmb3IodmFyIHI9dDtyPXIuJHBhcmVudDspe3ZhciBpPXIuJG9wdGlvbnMuZXJyb3JDYXB0dXJlZDtpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXRyeXtpZighMT09PWlbb10uY2FsbChyLGUsdCxuKSlyZXR1cm59Y2F0Y2goZSl7UmUoZSxyLCJlcnJvckNhcHR1cmVkIGhvb2siKX19UmUoZSx0LG4pfWZ1bmN0aW9uIFJlKGUsdCxuKXtpZihqLmVycm9ySGFuZGxlcil0cnl7cmV0dXJuIGouZXJyb3JIYW5kbGVyLmNhbGwobnVsbCxlLHQsbil9Y2F0Y2goZSl7SGUoZSxudWxsLCJjb25maWcuZXJyb3JIYW5kbGVyIil9SGUoZSx0LG4pfWZ1bmN0aW9uIEhlKGUsdCxuKXtpZighQiYmIVV8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZSl0aHJvdyBlO2NvbnNvbGUuZXJyb3IoZSl9dmFyIEJlLFVlLFZlPVtdLHplPSExO2Z1bmN0aW9uIEtlKCl7emU9ITE7Zm9yKHZhciBlPVZlLnNsaWNlKDApLHQ9VmUubGVuZ3RoPTA7dDxlLmxlbmd0aDt0KyspZVt0XSgpfXZhciBKZT0hMTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNldEltbWVkaWF0ZSYmZWUoc2V0SW1tZWRpYXRlKSlVZT1mdW5jdGlvbigpe3NldEltbWVkaWF0ZShLZSl9O2Vsc2UgaWYoInVuZGVmaW5lZCI9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbHx8IWVlKE1lc3NhZ2VDaGFubmVsKSYmIltvYmplY3QgTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl0iIT09TWVzc2FnZUNoYW5uZWwudG9TdHJpbmcoKSlVZT1mdW5jdGlvbigpe3NldFRpbWVvdXQoS2UsMCl9O2Vsc2V7dmFyIHFlPW5ldyBNZXNzYWdlQ2hhbm5lbCxXZT1xZS5wb3J0MjtxZS5wb3J0MS5vbm1lc3NhZ2U9S2UsVWU9ZnVuY3Rpb24oKXtXZS5wb3N0TWVzc2FnZSgxKX19aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiZlZShQcm9taXNlKSl7dmFyIEdlPVByb21pc2UucmVzb2x2ZSgpO0JlPWZ1bmN0aW9uKCl7R2UudGhlbihLZSksVyYmc2V0VGltZW91dCgkKX19ZWxzZSBCZT1VZTtmdW5jdGlvbiBaZShlLHQpe3ZhciBuO2lmKFZlLnB1c2goZnVuY3Rpb24oKXtpZihlKXRyeXtlLmNhbGwodCl9Y2F0Y2goZSl7RmUoZSx0LCJuZXh0VGljayIpfWVsc2UgbiYmbih0KX0pLHplfHwoemU9ITAsSmU/VWUoKTpCZSgpKSwhZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtuPWV9KX12YXIgWGU9bmV3IHRlO2Z1bmN0aW9uIFllKGUpeyFmdW5jdGlvbiBlKHQsbil7dmFyIHIsaTt2YXIgbz1BcnJheS5pc0FycmF5KHQpO2lmKCFvJiYhUCh0KXx8T2JqZWN0LmlzRnJvemVuKHQpfHx0IGluc3RhbmNlb2YgbGUpcmV0dXJuO2lmKHQuX19vYl9fKXt2YXIgYT10Ll9fb2JfXy5kZXAuaWQ7aWYobi5oYXMoYSkpcmV0dXJuO24uYWRkKGEpfWlmKG8pZm9yKHI9dC5sZW5ndGg7ci0tOyllKHRbcl0sbik7ZWxzZSBmb3IoaT1PYmplY3Qua2V5cyh0KSxyPWkubGVuZ3RoO3ItLTspZSh0W2lbcl1dLG4pfShlLFhlKSxYZS5jbGVhcigpfXZhciBRZSxldD1lKGZ1bmN0aW9uKGUpe3ZhciB0PSImIj09PWUuY2hhckF0KDApLG49In4iPT09KGU9dD9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKSxyPSIhIj09PShlPW4/ZS5zbGljZSgxKTplKS5jaGFyQXQoMCk7cmV0dXJue25hbWU6ZT1yP2Uuc2xpY2UoMSk6ZSxvbmNlOm4sY2FwdHVyZTpyLHBhc3NpdmU6dH19KTtmdW5jdGlvbiB0dChlKXtmdW5jdGlvbiBpKCl7dmFyIGU9YXJndW1lbnRzLHQ9aS5mbnM7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2Zvcih2YXIgbj10LnNsaWNlKCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl0uYXBwbHkobnVsbCxlKX1yZXR1cm4gaS5mbnM9ZSxpfWZ1bmN0aW9uIG50KGUsdCxuLHIsaSl7dmFyIG8sYSxzLGM7Zm9yKG8gaW4gZSlhPWVbb10scz10W29dLGM9ZXQobyksTShhKXx8KE0ocyk/KE0oYS5mbnMpJiYoYT1lW29dPXR0KGEpKSxuKGMubmFtZSxhLGMub25jZSxjLmNhcHR1cmUsYy5wYXNzaXZlLGMucGFyYW1zKSk6YSE9PXMmJihzLmZucz1hLGVbb109cykpO2ZvcihvIGluIHQpTShlW29dKSYmcigoYz1ldChvKSkubmFtZSx0W29dLGMuY2FwdHVyZSl9ZnVuY3Rpb24gcnQoZSx0LG4pe3ZhciByO2UgaW5zdGFuY2VvZiBsZSYmKGU9ZS5kYXRhLmhvb2t8fChlLmRhdGEuaG9vaz17fSkpO3ZhciBpPWVbdF07ZnVuY3Rpb24gbygpe24uYXBwbHkodGhpcyxhcmd1bWVudHMpLGYoci5mbnMsbyl9TShpKT9yPXR0KFtvXSk6RChpLmZucykmJlMoaS5tZXJnZWQpPyhyPWkpLmZucy5wdXNoKG8pOnI9dHQoW2ksb10pLHIubWVyZ2VkPSEwLGVbdF09cn1mdW5jdGlvbiBpdChlLHQsbixyLGkpe2lmKEQodCkpe2lmKHAodCxuKSlyZXR1cm4gZVtuXT10W25dLGl8fGRlbGV0ZSB0W25dLCEwO2lmKHAodCxyKSlyZXR1cm4gZVtuXT10W3JdLGl8fGRlbGV0ZSB0W3JdLCEwfXJldHVybiExfWZ1bmN0aW9uIG90KGUpe3JldHVybiBUKGUpP1twZShlKV06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbiBlKHQsbil7dmFyIHI9W107dmFyIGksbyxhLHM7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylNKG89dFtpXSl8fCJib29sZWFuIj09dHlwZW9mIG98fChhPXIubGVuZ3RoLTEscz1yW2FdLEFycmF5LmlzQXJyYXkobyk/MDxvLmxlbmd0aCYmKGF0KChvPWUobywobnx8IiIpKyJfIitpKSlbMF0pJiZhdChzKSYmKHJbYV09cGUocy50ZXh0K29bMF0udGV4dCksby5zaGlmdCgpKSxyLnB1c2guYXBwbHkocixvKSk6VChvKT9hdChzKT9yW2FdPXBlKHMudGV4dCtvKToiIiE9PW8mJnIucHVzaChwZShvKSk6YXQobykmJmF0KHMpP3JbYV09cGUocy50ZXh0K28udGV4dCk6KFModC5faXNWTGlzdCkmJkQoby50YWcpJiZNKG8ua2V5KSYmRChuKSYmKG8ua2V5PSJfX3ZsaXN0IituKyJfIitpKyJfXyIpLHIucHVzaChvKSkpO3JldHVybiByfShlKTp2b2lkIDB9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIEQoZSkmJkQoZS50ZXh0KSYmITE9PT1lLmlzQ29tbWVudH1mdW5jdGlvbiBzdChlLHQpe3JldHVybihlLl9fZXNNb2R1bGV8fG5lJiYiTW9kdWxlIj09PWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkmJihlPWUuZGVmYXVsdCksUChlKT90LmV4dGVuZChlKTplfWZ1bmN0aW9uIGN0KGUpe3JldHVybiBlLmlzQ29tbWVudCYmZS5hc3luY0ZhY3Rvcnl9ZnVuY3Rpb24gbHQoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTtpZihEKG4pJiYoRChuLmNvbXBvbmVudE9wdGlvbnMpfHxjdChuKSkpcmV0dXJuIG59fWZ1bmN0aW9uIHV0KGUsdCxuKXtuP1FlLiRvbmNlKGUsdCk6UWUuJG9uKGUsdCl9ZnVuY3Rpb24gZnQoZSx0KXtRZS4kb2ZmKGUsdCl9ZnVuY3Rpb24gcHQoZSx0LG4pe1FlPWUsbnQodCxufHx7fSx1dCxmdCksUWU9dm9pZCAwfWZ1bmN0aW9uIGR0KGUsdCl7dmFyIG49e307aWYoIWUpcmV0dXJuIG47Zm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lW3JdLGE9by5kYXRhO2lmKGEmJmEuYXR0cnMmJmEuYXR0cnMuc2xvdCYmZGVsZXRlIGEuYXR0cnMuc2xvdCxvLmNvbnRleHQhPT10JiZvLmZuQ29udGV4dCE9PXR8fCFhfHxudWxsPT1hLnNsb3QpKG4uZGVmYXVsdHx8KG4uZGVmYXVsdD1bXSkpLnB1c2gobyk7ZWxzZXt2YXIgcz1hLnNsb3QsYz1uW3NdfHwobltzXT1bXSk7InRlbXBsYXRlIj09PW8udGFnP2MucHVzaC5hcHBseShjLG8uY2hpbGRyZW58fFtdKTpjLnB1c2gobyl9fWZvcih2YXIgbCBpbiBuKW5bbF0uZXZlcnkodnQpJiZkZWxldGUgbltsXTtyZXR1cm4gbn1mdW5jdGlvbiB2dChlKXtyZXR1cm4gZS5pc0NvbW1lbnQmJiFlLmFzeW5jRmFjdG9yeXx8IiAiPT09ZS50ZXh0fWZ1bmN0aW9uIGh0KGUsdCl7dD10fHx7fTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylBcnJheS5pc0FycmF5KGVbbl0pP2h0KGVbbl0sdCk6dFtlW25dLmtleV09ZVtuXS5mbjtyZXR1cm4gdH12YXIgbXQ9bnVsbDtmdW5jdGlvbiB5dChlKXtmb3IoO2UmJihlPWUuJHBhcmVudCk7KWlmKGUuX2luYWN0aXZlKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGd0KGUsdCl7aWYodCl7aWYoZS5fZGlyZWN0SW5hY3RpdmU9ITEseXQoZSkpcmV0dXJufWVsc2UgaWYoZS5fZGlyZWN0SW5hY3RpdmUpcmV0dXJuO2lmKGUuX2luYWN0aXZlfHxudWxsPT09ZS5faW5hY3RpdmUpe2UuX2luYWN0aXZlPSExO2Zvcih2YXIgbj0wO248ZS4kY2hpbGRyZW4ubGVuZ3RoO24rKylndChlLiRjaGlsZHJlbltuXSk7X3QoZSwiYWN0aXZhdGVkIil9fWZ1bmN0aW9uIF90KHQsbil7c2UoKTt2YXIgZT10LiRvcHRpb25zW25dO2lmKGUpZm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXRyeXtlW3JdLmNhbGwodCl9Y2F0Y2goZSl7RmUoZSx0LG4rIiBob29rIil9dC5faGFzSG9va0V2ZW50JiZ0LiRlbWl0KCJob29rOiIrbiksY2UoKX12YXIgYnQ9W10sJHQ9W10sd3Q9e30sQ3Q9ITEseHQ9ITEsa3Q9MDtmdW5jdGlvbiBBdCgpe3ZhciBlLHQ7Zm9yKHh0PSEwLGJ0LnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pZC10LmlkfSksa3Q9MDtrdDxidC5sZW5ndGg7a3QrKyl0PShlPWJ0W2t0XSkuaWQsd3RbdF09bnVsbCxlLnJ1bigpO3ZhciBuPSR0LnNsaWNlKCkscj1idC5zbGljZSgpO2t0PWJ0Lmxlbmd0aD0kdC5sZW5ndGg9MCx3dD17fSxDdD14dD0hMSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLl9pbmFjdGl2ZT0hMCxndChlW3RdLCEwKX0obiksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7Zm9yKDt0LS07KXt2YXIgbj1lW3RdLHI9bi52bTtyLl93YXRjaGVyPT09biYmci5faXNNb3VudGVkJiZfdChyLCJ1cGRhdGVkIil9fShyKSxRJiZqLmRldnRvb2xzJiZRLmVtaXQoImZsdXNoIil9dmFyIE90PTAsU3Q9ZnVuY3Rpb24oZSx0LG4scixpKXt0aGlzLnZtPWUsaSYmKGUuX3dhdGNoZXI9dGhpcyksZS5fd2F0Y2hlcnMucHVzaCh0aGlzKSxyPyh0aGlzLmRlZXA9ISFyLmRlZXAsdGhpcy51c2VyPSEhci51c2VyLHRoaXMubGF6eT0hIXIubGF6eSx0aGlzLnN5bmM9ISFyLnN5bmMpOnRoaXMuZGVlcD10aGlzLnVzZXI9dGhpcy5sYXp5PXRoaXMuc3luYz0hMSx0aGlzLmNiPW4sdGhpcy5pZD0rK090LHRoaXMuYWN0aXZlPSEwLHRoaXMuZGlydHk9dGhpcy5sYXp5LHRoaXMuZGVwcz1bXSx0aGlzLm5ld0RlcHM9W10sdGhpcy5kZXBJZHM9bmV3IHRlLHRoaXMubmV3RGVwSWRzPW5ldyB0ZSx0aGlzLmV4cHJlc3Npb249IiIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5nZXR0ZXI9dDoodGhpcy5nZXR0ZXI9ZnVuY3Rpb24oZSl7aWYoIUwudGVzdChlKSl7dmFyIG49ZS5zcGxpdCgiLiIpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoO3QrKyl7aWYoIWUpcmV0dXJuO2U9ZVtuW3RdXX1yZXR1cm4gZX19fSh0KSx0aGlzLmdldHRlcnx8KHRoaXMuZ2V0dGVyPWZ1bmN0aW9uKCl7fSkpLHRoaXMudmFsdWU9dGhpcy5sYXp5P3ZvaWQgMDp0aGlzLmdldCgpfTtTdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU7c2UodGhpcyk7dmFyIHQ9dGhpcy52bTt0cnl7ZT10aGlzLmdldHRlci5jYWxsKHQsdCl9Y2F0Y2goZSl7aWYoIXRoaXMudXNlcil0aHJvdyBlO0ZlKGUsdCwnZ2V0dGVyIGZvciB3YXRjaGVyICInK3RoaXMuZXhwcmVzc2lvbisnIicpfWZpbmFsbHl7dGhpcy5kZWVwJiZZZShlKSxjZSgpLHRoaXMuY2xlYW51cERlcHMoKX1yZXR1cm4gZX0sU3QucHJvdG90eXBlLmFkZERlcD1mdW5jdGlvbihlKXt2YXIgdD1lLmlkO3RoaXMubmV3RGVwSWRzLmhhcyh0KXx8KHRoaXMubmV3RGVwSWRzLmFkZCh0KSx0aGlzLm5ld0RlcHMucHVzaChlKSx0aGlzLmRlcElkcy5oYXModCl8fGUuYWRkU3ViKHRoaXMpKX0sU3QucHJvdG90eXBlLmNsZWFudXBEZXBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl7dmFyIHQ9dGhpcy5kZXBzW2VdO3RoaXMubmV3RGVwSWRzLmhhcyh0LmlkKXx8dC5yZW1vdmVTdWIodGhpcyl9dmFyIG49dGhpcy5kZXBJZHM7dGhpcy5kZXBJZHM9dGhpcy5uZXdEZXBJZHMsdGhpcy5uZXdEZXBJZHM9bix0aGlzLm5ld0RlcElkcy5jbGVhcigpLG49dGhpcy5kZXBzLHRoaXMuZGVwcz10aGlzLm5ld0RlcHMsdGhpcy5uZXdEZXBzPW4sdGhpcy5uZXdEZXBzLmxlbmd0aD0wfSxTdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5sYXp5P3RoaXMuZGlydHk9ITA6dGhpcy5zeW5jP3RoaXMucnVuKCk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZDtpZihudWxsPT13dFt0XSl7aWYod3RbdF09ITAseHQpe2Zvcih2YXIgbj1idC5sZW5ndGgtMTtrdDxuJiZidFtuXS5pZD5lLmlkOyluLS07YnQuc3BsaWNlKG4rMSwwLGUpfWVsc2UgYnQucHVzaChlKTtDdHx8KEN0PSEwLFplKEF0KSl9fSh0aGlzKX0sU3QucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt2YXIgZT10aGlzLmdldCgpO2lmKGUhPT10aGlzLnZhbHVlfHxQKGUpfHx0aGlzLmRlZXApe3ZhciB0PXRoaXMudmFsdWU7aWYodGhpcy52YWx1ZT1lLHRoaXMudXNlcil0cnl7dGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX1jYXRjaChlKXtGZShlLHRoaXMudm0sJ2NhbGxiYWNrIGZvciB3YXRjaGVyICInK3RoaXMuZXhwcmVzc2lvbisnIicpfWVsc2UgdGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX19fSxTdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0eT0hMX0sU3QucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmRlcHMubGVuZ3RoO2UtLTspdGhpcy5kZXBzW2VdLmRlcGVuZCgpfSxTdC5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZHx8Zih0aGlzLnZtLl93YXRjaGVycyx0aGlzKTtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXRoaXMuZGVwc1tlXS5yZW1vdmVTdWIodGhpcyk7dGhpcy5hY3RpdmU9ITF9fTt2YXIgVHQ9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDokLHNldDokfTtmdW5jdGlvbiBFdChlLHQsbil7VHQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdF1bbl19LFR0LnNldD1mdW5jdGlvbihlKXt0aGlzW3RdW25dPWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sVHQpfWZ1bmN0aW9uIGp0KGUpe2UuX3dhdGNoZXJzPVtdO3ZhciB0PWUuJG9wdGlvbnM7dC5wcm9wcyYmZnVuY3Rpb24obixyKXt2YXIgaT1uLiRvcHRpb25zLnByb3BzRGF0YXx8e30sbz1uLl9wcm9wcz17fSxhPW4uJG9wdGlvbnMuX3Byb3BLZXlzPVtdO24uJHBhcmVudCYmZ2UoITEpO3ZhciBlPWZ1bmN0aW9uKGUpe2EucHVzaChlKTt2YXIgdD1JZShlLHIsaSxuKTtDZShvLGUsdCksZSBpbiBufHxFdChuLCJfcHJvcHMiLGUpfTtmb3IodmFyIHQgaW4gcillKHQpO2dlKCEwKX0oZSx0LnByb3BzKSx0Lm1ldGhvZHMmJmZ1bmN0aW9uKGUsdCl7ZS4kb3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gdCllW25dPW51bGw9PXRbbl0/JDp2KHRbbl0sZSl9KGUsdC5tZXRob2RzKSx0LmRhdGE/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucy5kYXRhO2wodD1lLl9kYXRhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCl7c2UoKTt0cnl7cmV0dXJuIGUuY2FsbCh0LHQpfWNhdGNoKGUpe3JldHVybiBGZShlLHQsImRhdGEoKSIpLHt9fWZpbmFsbHl7Y2UoKX19KHQsZSk6dHx8e30pfHwodD17fSk7dmFyIG49T2JqZWN0LmtleXModCkscj1lLiRvcHRpb25zLnByb3BzLGk9KGUuJG9wdGlvbnMubWV0aG9kcyxuLmxlbmd0aCk7Zm9yKDtpLS07KXt2YXIgbz1uW2ldO3ImJnAocixvKXx8KHZvaWQgMCwzNiE9PShhPShvKyIiKS5jaGFyQ29kZUF0KDApKSYmOTUhPT1hJiZFdChlLCJfZGF0YSIsbykpfXZhciBhO3dlKHQsITApfShlKTp3ZShlLl9kYXRhPXt9LCEwKSx0LmNvbXB1dGVkJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuX2NvbXB1dGVkV2F0Y2hlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSxyPVkoKTtmb3IodmFyIGkgaW4gdCl7dmFyIG89dFtpXSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBvP286by5nZXQ7cnx8KG5baV09bmV3IFN0KGUsYXx8JCwkLE50KSksaSBpbiBlfHxMdChlLGksbyl9fShlLHQuY29tcHV0ZWQpLHQud2F0Y2gmJnQud2F0Y2ghPT1HJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXt2YXIgcj10W25dO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspTXQoZSxuLHJbaV0pO2Vsc2UgTXQoZSxuLHIpfX0oZSx0LndhdGNoKX12YXIgTnQ9e2xhenk6ITB9O2Z1bmN0aW9uIEx0KGUsdCxuKXt2YXIgcj0hWSgpOyJmdW5jdGlvbiI9PXR5cGVvZiBuPyhUdC5nZXQ9cj9JdCh0KTpuLFR0LnNldD0kKTooVHQuZ2V0PW4uZ2V0P3ImJiExIT09bi5jYWNoZT9JdCh0KTpuLmdldDokLFR0LnNldD1uLnNldD9uLnNldDokKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LFR0KX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb21wdXRlZFdhdGNoZXJzJiZ0aGlzLl9jb21wdXRlZFdhdGNoZXJzW3RdO2lmKGUpcmV0dXJuIGUuZGlydHkmJmUuZXZhbHVhdGUoKSxvZS50YXJnZXQmJmUuZGVwZW5kKCksZS52YWx1ZX19ZnVuY3Rpb24gTXQoZSx0LG4scil7cmV0dXJuIGwobikmJihuPShyPW4pLmhhbmRsZXIpLCJzdHJpbmciPT10eXBlb2YgbiYmKG49ZVtuXSksZS4kd2F0Y2godCxuLHIpfWZ1bmN0aW9uIER0KHQsZSl7aWYodCl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1uZT9SZWZsZWN0Lm93bktleXModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pOk9iamVjdC5rZXlzKHQpLGk9MDtpPHIubGVuZ3RoO2krKyl7Zm9yKHZhciBvPXJbaV0sYT10W29dLmZyb20scz1lO3M7KXtpZihzLl9wcm92aWRlZCYmcChzLl9wcm92aWRlZCxhKSl7bltvXT1zLl9wcm92aWRlZFthXTticmVha31zPXMuJHBhcmVudH1pZighcyYmImRlZmF1bHQiaW4gdFtvXSl7dmFyIGM9dFtvXS5kZWZhdWx0O25bb109ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yy5jYWxsKGUpOmN9fXJldHVybiBufX1mdW5jdGlvbiBQdChlLHQpe3ZhciBuLHIsaSxvLGE7aWYoQXJyYXkuaXNBcnJheShlKXx8InN0cmluZyI9PXR5cGVvZiBlKWZvcihuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluW3JdPXQoZVtyXSxyKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobj1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspbltyXT10KHIrMSxyKTtlbHNlIGlmKFAoZSkpZm9yKG89T2JqZWN0LmtleXMoZSksbj1uZXcgQXJyYXkoby5sZW5ndGgpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspYT1vW3JdLG5bcl09dChlW2FdLGEscik7cmV0dXJuIEQobikmJihuLl9pc1ZMaXN0PSEwKSxufWZ1bmN0aW9uIEZ0KGUsdCxuLHIpe3ZhciBpLG89dGhpcy4kc2NvcGVkU2xvdHNbZV07aWYobyluPW58fHt9LHImJihuPW0obSh7fSxyKSxuKSksaT1vKG4pfHx0O2Vsc2V7dmFyIGE9dGhpcy4kc2xvdHNbZV07YSYmKGEuX3JlbmRlcmVkPSEwKSxpPWF8fHR9dmFyIHM9biYmbi5zbG90O3JldHVybiBzP3RoaXMuJGNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIix7c2xvdDpzfSxpKTppfWZ1bmN0aW9uIFJ0KGUpe3JldHVybiBMZSh0aGlzLiRvcHRpb25zLCJmaWx0ZXJzIixlKXx8d31mdW5jdGlvbiBIdChlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpPy0xPT09ZS5pbmRleE9mKHQpOmUhPT10fWZ1bmN0aW9uIEJ0KGUsdCxuLHIsaSl7dmFyIG89ai5rZXlDb2Rlc1t0XXx8bjtyZXR1cm4gaSYmciYmIWoua2V5Q29kZXNbdF0/SHQoaSxyKTpvP0h0KG8sZSk6cj9fKHIpIT09dDp2b2lkIDB9ZnVuY3Rpb24gVXQobixyLGksbyxhKXtpZihpKWlmKFAoaSkpe3ZhciBzO0FycmF5LmlzQXJyYXkoaSkmJihpPWIoaSkpO3ZhciBlPWZ1bmN0aW9uKHQpe2lmKCJjbGFzcyI9PT10fHwic3R5bGUiPT09dHx8dSh0KSlzPW47ZWxzZXt2YXIgZT1uLmF0dHJzJiZuLmF0dHJzLnR5cGU7cz1vfHxqLm11c3RVc2VQcm9wKHIsZSx0KT9uLmRvbVByb3BzfHwobi5kb21Qcm9wcz17fSk6bi5hdHRyc3x8KG4uYXR0cnM9e30pfXQgaW4gc3x8KHNbdF09aVt0XSxhJiYoKG4ub258fChuLm9uPXt9KSlbInVwZGF0ZToiK3RdPWZ1bmN0aW9uKGUpe2lbdF09ZX0pKX07Zm9yKHZhciB0IGluIGkpZSh0KX1lbHNlO3JldHVybiBufWZ1bmN0aW9uIFZ0KGUsdCl7dmFyIG49dGhpcy5fc3RhdGljVHJlZXN8fCh0aGlzLl9zdGF0aWNUcmVlcz1bXSkscj1uW2VdO3JldHVybiByJiYhdHx8S3Qocj1uW2VdPXRoaXMuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zW2VdLmNhbGwodGhpcy5fcmVuZGVyUHJveHksbnVsbCx0aGlzKSwiX19zdGF0aWNfXyIrZSwhMSkscn1mdW5jdGlvbiB6dChlLHQsbil7cmV0dXJuIEt0KGUsIl9fb25jZV9fIit0KyhuPyJfIituOiIiKSwhMCksZX1mdW5jdGlvbiBLdChlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiYic3RyaW5nIiE9dHlwZW9mIGVbcl0mJkp0KGVbcl0sdCsiXyIrcixuKTtlbHNlIEp0KGUsdCxuKX1mdW5jdGlvbiBKdChlLHQsbil7ZS5pc1N0YXRpYz0hMCxlLmtleT10LGUuaXNPbmNlPW59ZnVuY3Rpb24gcXQoZSx0KXtpZih0KWlmKGwodCkpe3ZhciBuPWUub249ZS5vbj9tKHt9LGUub24pOnt9O2Zvcih2YXIgciBpbiB0KXt2YXIgaT1uW3JdLG89dFtyXTtuW3JdPWk/W10uY29uY2F0KGksbyk6b319ZWxzZTtyZXR1cm4gZX1mdW5jdGlvbiBXdChlKXtlLl9vPXp0LGUuX249RixlLl9zPXQsZS5fbD1QdCxlLl90PUZ0LGUuX3E9QyxlLl9pPXgsZS5fbT1WdCxlLl9mPVJ0LGUuX2s9QnQsZS5fYj1VdCxlLl92PXBlLGUuX2U9ZmUsZS5fdT1odCxlLl9nPXF0fWZ1bmN0aW9uIEd0KGUsdCxuLG8scil7dmFyIGEscz1yLm9wdGlvbnM7cChvLCJfdWlkIik/KGE9T2JqZWN0LmNyZWF0ZShvKSkuX29yaWdpbmFsPW86bz0oYT1vKS5fb3JpZ2luYWw7dmFyIGk9UyhzLl9jb21waWxlZCksYz0haTt0aGlzLmRhdGE9ZSx0aGlzLnByb3BzPXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMucGFyZW50PW8sdGhpcy5saXN0ZW5lcnM9ZS5vbnx8eSx0aGlzLmluamVjdGlvbnM9RHQocy5pbmplY3QsbyksdGhpcy5zbG90cz1mdW5jdGlvbigpe3JldHVybiBkdChuLG8pfSxpJiYodGhpcy4kb3B0aW9ucz1zLHRoaXMuJHNsb3RzPXRoaXMuc2xvdHMoKSx0aGlzLiRzY29wZWRTbG90cz1lLnNjb3BlZFNsb3RzfHx5KSxzLl9zY29wZUlkP3RoaXMuX2M9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9cm4oYSxlLHQsbixyLGMpO3JldHVybiBpJiYhQXJyYXkuaXNBcnJheShpKSYmKGkuZm5TY29wZUlkPXMuX3Njb3BlSWQsaS5mbkNvbnRleHQ9byksaX06dGhpcy5fYz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcm4oYSxlLHQsbixyLGMpfX1mdW5jdGlvbiBadChlLHQsbixyKXt2YXIgaT1kZShlKTtyZXR1cm4gaS5mbkNvbnRleHQ9bixpLmZuT3B0aW9ucz1yLHQuc2xvdCYmKChpLmRhdGF8fChpLmRhdGE9e30pKS5zbG90PXQuc2xvdCksaX1mdW5jdGlvbiBYdChlLHQpe2Zvcih2YXIgbiBpbiB0KWVbZyhuKV09dFtuXX1XdChHdC5wcm90b3R5cGUpO3ZhciBZdD17aW5pdDpmdW5jdGlvbihlLHQsbixyKXtpZihlLmNvbXBvbmVudEluc3RhbmNlJiYhZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQmJmUuZGF0YS5rZWVwQWxpdmUpe3ZhciBpPWU7WXQucHJlcGF0Y2goaSxpKX1lbHNleyhlLmNvbXBvbmVudEluc3RhbmNlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXtfaXNDb21wb25lbnQ6ITAscGFyZW50OnQsX3BhcmVudFZub2RlOmUsX3BhcmVudEVsbTpufHxudWxsLF9yZWZFbG06cnx8bnVsbH0sbz1lLmRhdGEuaW5saW5lVGVtcGxhdGU7RChvKSYmKGkucmVuZGVyPW8ucmVuZGVyLGkuc3RhdGljUmVuZGVyRm5zPW8uc3RhdGljUmVuZGVyRm5zKTtyZXR1cm4gbmV3IGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKGkpfShlLG10LG4scikpLiRtb3VudCh0P2UuZWxtOnZvaWQgMCx0KX19LHByZXBhdGNoOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jb21wb25lbnRPcHRpb25zOyFmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSEhKGl8fGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVufHxyLmRhdGEuc2NvcGVkU2xvdHN8fGUuJHNjb3BlZFNsb3RzIT09eSk7aWYoZS4kb3B0aW9ucy5fcGFyZW50Vm5vZGU9cixlLiR2bm9kZT1yLGUuX3Zub2RlJiYoZS5fdm5vZGUucGFyZW50PXIpLGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuPWksZS4kYXR0cnM9ci5kYXRhLmF0dHJzfHx5LGUuJGxpc3RlbmVycz1ufHx5LHQmJmUuJG9wdGlvbnMucHJvcHMpe2dlKCExKTtmb3IodmFyIGE9ZS5fcHJvcHMscz1lLiRvcHRpb25zLl9wcm9wS2V5c3x8W10sYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgbD1zW2NdLHU9ZS4kb3B0aW9ucy5wcm9wczthW2xdPUllKGwsdSx0LGUpfWdlKCEwKSxlLiRvcHRpb25zLnByb3BzRGF0YT10fW49bnx8eTt2YXIgZj1lLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzPW4scHQoZSxuLGYpLG8mJihlLiRzbG90cz1kdChpLHIuY29udGV4dCksZS4kZm9yY2VVcGRhdGUoKSl9KHQuY29tcG9uZW50SW5zdGFuY2U9ZS5jb21wb25lbnRJbnN0YW5jZSxuLnByb3BzRGF0YSxuLmxpc3RlbmVycyx0LG4uY2hpbGRyZW4pfSxpbnNlcnQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmNvbnRleHQscj1lLmNvbXBvbmVudEluc3RhbmNlO3IuX2lzTW91bnRlZHx8KHIuX2lzTW91bnRlZD0hMCxfdChyLCJtb3VudGVkIikpLGUuZGF0YS5rZWVwQWxpdmUmJihuLl9pc01vdW50ZWQ/KCh0PXIpLl9pbmFjdGl2ZT0hMSwkdC5wdXNoKHQpKTpndChyLCEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21wb25lbnRJbnN0YW5jZTt0Ll9pc0Rlc3Ryb3llZHx8KGUuZGF0YS5rZWVwQWxpdmU/ZnVuY3Rpb24gZSh0LG4pe2lmKCEobiYmKHQuX2RpcmVjdEluYWN0aXZlPSEwLHl0KHQpKXx8dC5faW5hY3RpdmUpKXt0Ll9pbmFjdGl2ZT0hMDtmb3IodmFyIHI9MDtyPHQuJGNoaWxkcmVuLmxlbmd0aDtyKyspZSh0LiRjaGlsZHJlbltyXSk7X3QodCwiZGVhY3RpdmF0ZWQiKX19KHQsITApOnQuJGRlc3Ryb3koKSl9fSxRdD1PYmplY3Qua2V5cyhZdCk7ZnVuY3Rpb24gZW4oZSx0LG4scixpKXtpZighTShlKSl7dmFyIG89bi4kb3B0aW9ucy5fYmFzZTtpZihQKGUpJiYoZT1vLmV4dGVuZChlKSksImZ1bmN0aW9uIj09dHlwZW9mIGUpe3ZhciBhLHMsYyxsLHUsZixwO2lmKE0oZS5jaWQpJiZ2b2lkIDA9PT0oZT1mdW5jdGlvbih0LG4sZSl7aWYoUyh0LmVycm9yKSYmRCh0LmVycm9yQ29tcCkpcmV0dXJuIHQuZXJyb3JDb21wO2lmKEQodC5yZXNvbHZlZCkpcmV0dXJuIHQucmVzb2x2ZWQ7aWYoUyh0LmxvYWRpbmcpJiZEKHQubG9hZGluZ0NvbXApKXJldHVybiB0LmxvYWRpbmdDb21wO2lmKCFEKHQuY29udGV4dHMpKXt2YXIgcj10LmNvbnRleHRzPVtlXSxpPSEwLG89ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspcltlXS4kZm9yY2VVcGRhdGUoKX0sYT1SKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZWQ9c3QoZSxuKSxpfHxvKCl9KSxzPVIoZnVuY3Rpb24oZSl7RCh0LmVycm9yQ29tcCkmJih0LmVycm9yPSEwLG8oKSl9KSxjPXQoYSxzKTtyZXR1cm4gUChjKSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW4/TSh0LnJlc29sdmVkKSYmYy50aGVuKGEscyk6RChjLmNvbXBvbmVudCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbXBvbmVudC50aGVuJiYoYy5jb21wb25lbnQudGhlbihhLHMpLEQoYy5lcnJvcikmJih0LmVycm9yQ29tcD1zdChjLmVycm9yLG4pKSxEKGMubG9hZGluZykmJih0LmxvYWRpbmdDb21wPXN0KGMubG9hZGluZyxuKSwwPT09Yy5kZWxheT90LmxvYWRpbmc9ITA6c2V0VGltZW91dChmdW5jdGlvbigpe00odC5yZXNvbHZlZCkmJk0odC5lcnJvcikmJih0LmxvYWRpbmc9ITAsbygpKX0sYy5kZWxheXx8MjAwKSksRChjLnRpbWVvdXQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TSh0LnJlc29sdmVkKSYmcyhudWxsKX0sYy50aW1lb3V0KSkpLGk9ITEsdC5sb2FkaW5nP3QubG9hZGluZ0NvbXA6dC5yZXNvbHZlZH10LmNvbnRleHRzLnB1c2goZSl9KGE9ZSxvLG4pKSlyZXR1cm4gcz1hLGM9dCxsPW4sdT1yLGY9aSwocD1mZSgpKS5hc3luY0ZhY3Rvcnk9cyxwLmFzeW5jTWV0YT17ZGF0YTpjLGNvbnRleHQ6bCxjaGlsZHJlbjp1LHRhZzpmfSxwO3Q9dHx8e30sZG4oZSksRCh0Lm1vZGVsKSYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm1vZGVsJiZlLm1vZGVsLnByb3B8fCJ2YWx1ZSIscj1lLm1vZGVsJiZlLm1vZGVsLmV2ZW50fHwiaW5wdXQiOyh0LnByb3BzfHwodC5wcm9wcz17fSkpW25dPXQubW9kZWwudmFsdWU7dmFyIGk9dC5vbnx8KHQub249e30pO0QoaVtyXSk/aVtyXT1bdC5tb2RlbC5jYWxsYmFja10uY29uY2F0KGlbcl0pOmlbcl09dC5tb2RlbC5jYWxsYmFja30oZS5vcHRpb25zLHQpO3ZhciBkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Lm9wdGlvbnMucHJvcHM7aWYoIU0ocikpe3ZhciBpPXt9LG89ZS5hdHRycyxhPWUucHJvcHM7aWYoRChvKXx8RChhKSlmb3IodmFyIHMgaW4gcil7dmFyIGM9XyhzKTtpdChpLGEscyxjLCEwKXx8aXQoaSxvLHMsYywhMSl9cmV0dXJuIGl9fSh0LGUpO2lmKFMoZS5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWUub3B0aW9ucyxhPXt9LHM9by5wcm9wcztpZihEKHMpKWZvcih2YXIgYyBpbiBzKWFbY109SWUoYyxzLHR8fHkpO2Vsc2UgRChuLmF0dHJzKSYmWHQoYSxuLmF0dHJzKSxEKG4ucHJvcHMpJiZYdChhLG4ucHJvcHMpO3ZhciBsPW5ldyBHdChuLGEsaSxyLGUpLHU9by5yZW5kZXIuY2FsbChudWxsLGwuX2MsbCk7aWYodSBpbnN0YW5jZW9mIGxlKXJldHVybiBadCh1LG4sbC5wYXJlbnQsbyk7aWYoQXJyYXkuaXNBcnJheSh1KSl7Zm9yKHZhciBmPW90KHUpfHxbXSxwPW5ldyBBcnJheShmLmxlbmd0aCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXBbZF09WnQoZltkXSxuLGwucGFyZW50LG8pO3JldHVybiBwfX0oZSxkLHQsbixyKTt2YXIgdj10Lm9uO2lmKHQub249dC5uYXRpdmVPbixTKGUub3B0aW9ucy5hYnN0cmFjdCkpe3ZhciBoPXQuc2xvdDt0PXt9LGgmJih0LnNsb3Q9aCl9IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmhvb2t8fChlLmhvb2s9e30pLG49MDtuPFF0Lmxlbmd0aDtuKyspe3ZhciByPVF0W25dO3Rbcl09WXRbcl19fSh0KTt2YXIgbT1lLm9wdGlvbnMubmFtZXx8aTtyZXR1cm4gbmV3IGxlKCJ2dWUtY29tcG9uZW50LSIrZS5jaWQrKG0/Ii0iK206IiIpLHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsbix7Q3RvcjplLHByb3BzRGF0YTpkLGxpc3RlbmVyczp2LHRhZzppLGNoaWxkcmVuOnJ9LGEpfX19dmFyIHRuPTEsbm49MjtmdW5jdGlvbiBybihlLHQsbixyLGksbyl7cmV0dXJuKEFycmF5LmlzQXJyYXkobil8fFQobikpJiYoaT1yLHI9bixuPXZvaWQgMCksUyhvKSYmKGk9bm4pLGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoRChuKSYmRChuLl9fb2JfXykpcmV0dXJuIGZlKCk7RChuKSYmRChuLmlzKSYmKHQ9bi5pcyk7aWYoIXQpcmV0dXJuIGZlKCk7QXJyYXkuaXNBcnJheShyKSYmImZ1bmN0aW9uIj09dHlwZW9mIHJbMF0mJigobj1ufHx7fSkuc2NvcGVkU2xvdHM9e2RlZmF1bHQ6clswXX0sci5sZW5ndGg9MCk7aT09PW5uP3I9b3Qocik6aT09PXRuJiYocj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylpZihBcnJheS5pc0FycmF5KGVbdF0pKXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpO3JldHVybiBlfShyKSk7dmFyIG8sYTtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBzO2E9ZS4kdm5vZGUmJmUuJHZub2RlLm5zfHxqLmdldFRhZ05hbWVzcGFjZSh0KSxvPWouaXNSZXNlcnZlZFRhZyh0KT9uZXcgbGUoai5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0KSxuLHIsdm9pZCAwLHZvaWQgMCxlKTpEKHM9TGUoZS4kb3B0aW9ucywiY29tcG9uZW50cyIsdCkpP2VuKHMsbixlLHIsdCk6bmV3IGxlKHQsbixyLHZvaWQgMCx2b2lkIDAsZSl9ZWxzZSBvPWVuKHQsbixlLHIpO3JldHVybiBBcnJheS5pc0FycmF5KG8pP286RChvKT8oRChhKSYmZnVuY3Rpb24gZSh0LG4scil7dC5ucz1uOyJmb3JlaWduT2JqZWN0Ij09PXQudGFnJiYobj12b2lkIDAscj0hMCk7aWYoRCh0LmNoaWxkcmVuKSlmb3IodmFyIGk9MCxvPXQuY2hpbGRyZW4ubGVuZ3RoO2k8bztpKyspe3ZhciBhPXQuY2hpbGRyZW5baV07RChhLnRhZykmJihNKGEubnMpfHxTKHIpJiYic3ZnIiE9PWEudGFnKSYmZShhLG4scil9fShvLGEpLEQobikmJmZ1bmN0aW9uKGUpe1AoZS5zdHlsZSkmJlllKGUuc3R5bGUpO1AoZS5jbGFzcykmJlllKGUuY2xhc3MpfShuKSxvKTpmZSgpfShlLHQsbixyLGkpfXZhciBvbixhbixzbixjbixsbix1bixmbixwbj0wO2Z1bmN0aW9uIGRuKGUpe3ZhciB0PWUub3B0aW9ucztpZihlLnN1cGVyKXt2YXIgbj1kbihlLnN1cGVyKTtpZihuIT09ZS5zdXBlck9wdGlvbnMpe2Uuc3VwZXJPcHRpb25zPW47dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLm9wdGlvbnMscj1lLmV4dGVuZE9wdGlvbnMsaT1lLnNlYWxlZE9wdGlvbnM7Zm9yKHZhciBvIGluIG4pbltvXSE9PWlbb10mJih0fHwodD17fSksdFtvXT12bihuW29dLHJbb10saVtvXSkpO3JldHVybiB0fShlKTtyJiZtKGUuZXh0ZW5kT3B0aW9ucyxyKSwodD1lLm9wdGlvbnM9TmUobixlLmV4dGVuZE9wdGlvbnMpKS5uYW1lJiYodC5jb21wb25lbnRzW3QubmFtZV09ZSl9fXJldHVybiB0fWZ1bmN0aW9uIHZuKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1bXTtuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKSgwPD10LmluZGV4T2YoZVtpXSl8fG4uaW5kZXhPZihlW2ldKTwwKSYmci5wdXNoKGVbaV0pO3JldHVybiByfXJldHVybiBlfWZ1bmN0aW9uIGhuKGUpe3RoaXMuX2luaXQoZSl9ZnVuY3Rpb24gbW4oZSl7ZS5jaWQ9MDt2YXIgYT0xO2UuZXh0ZW5kPWZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIHQ9dGhpcyxuPXQuY2lkLHI9ZS5fQ3Rvcnx8KGUuX0N0b3I9e30pO2lmKHJbbl0pcmV0dXJuIHJbbl07dmFyIGk9ZS5uYW1lfHx0Lm9wdGlvbnMubmFtZSxvPWZ1bmN0aW9uKGUpe3RoaXMuX2luaXQoZSl9O3JldHVybigoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW8pLmNpZD1hKyssby5vcHRpb25zPU5lKHQub3B0aW9ucyxlKSxvLnN1cGVyPXQsby5vcHRpb25zLnByb3BzJiZmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIHQpRXQoZS5wcm90b3R5cGUsIl9wcm9wcyIsbil9KG8pLG8ub3B0aW9ucy5jb21wdXRlZCYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zLmNvbXB1dGVkO2Zvcih2YXIgbiBpbiB0KUx0KGUucHJvdG90eXBlLG4sdFtuXSl9KG8pLG8uZXh0ZW5kPXQuZXh0ZW5kLG8ubWl4aW49dC5taXhpbixvLnVzZT10LnVzZSxrLmZvckVhY2goZnVuY3Rpb24oZSl7b1tlXT10W2VdfSksaSYmKG8ub3B0aW9ucy5jb21wb25lbnRzW2ldPW8pLG8uc3VwZXJPcHRpb25zPXQub3B0aW9ucyxvLmV4dGVuZE9wdGlvbnM9ZSxvLnNlYWxlZE9wdGlvbnM9bSh7fSxvLm9wdGlvbnMpLHJbbl09b319ZnVuY3Rpb24geW4oZSl7cmV0dXJuIGUmJihlLkN0b3Iub3B0aW9ucy5uYW1lfHxlLnRhZyl9ZnVuY3Rpb24gZ24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8tMTxlLmluZGV4T2YodCk6InN0cmluZyI9PXR5cGVvZiBlPy0xPGUuc3BsaXQoIiwiKS5pbmRleE9mKHQpOihuPWUsIltvYmplY3QgUmVnRXhwXSI9PT1yLmNhbGwobikmJmUudGVzdCh0KSk7dmFyIG59ZnVuY3Rpb24gX24oZSx0KXt2YXIgbj1lLmNhY2hlLHI9ZS5rZXlzLGk9ZS5fdm5vZGU7Zm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb107aWYoYSl7dmFyIHM9eW4oYS5jb21wb25lbnRPcHRpb25zKTtzJiYhdChzKSYmYm4obixvLHIsaSl9fX1mdW5jdGlvbiBibihlLHQsbixyKXt2YXIgaT1lW3RdOyFpfHxyJiZpLnRhZz09PXIudGFnfHxpLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCksZVt0XT1udWxsLGYobix0KX1obi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbz10aGlzO28uX3VpZD1wbisrLG8uX2lzVnVlPSEwLGUmJmUuX2lzQ29tcG9uZW50P2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS4kb3B0aW9ucz1PYmplY3QuY3JlYXRlKGUuY29uc3RydWN0b3Iub3B0aW9ucykscj10Ll9wYXJlbnRWbm9kZTtuLnBhcmVudD10LnBhcmVudCxuLl9wYXJlbnRWbm9kZT1yLG4uX3BhcmVudEVsbT10Ll9wYXJlbnRFbG0sbi5fcmVmRWxtPXQuX3JlZkVsbTt2YXIgaT1yLmNvbXBvbmVudE9wdGlvbnM7bi5wcm9wc0RhdGE9aS5wcm9wc0RhdGEsbi5fcGFyZW50TGlzdGVuZXJzPWkubGlzdGVuZXJzLG4uX3JlbmRlckNoaWxkcmVuPWkuY2hpbGRyZW4sbi5fY29tcG9uZW50VGFnPWkudGFnLHQucmVuZGVyJiYobi5yZW5kZXI9dC5yZW5kZXIsbi5zdGF0aWNSZW5kZXJGbnM9dC5zdGF0aWNSZW5kZXJGbnMpfShvLGUpOm8uJG9wdGlvbnM9TmUoZG4oby5jb25zdHJ1Y3RvciksZXx8e30sbyksZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucyxuPXQucGFyZW50O2lmKG4mJiF0LmFic3RyYWN0KXtmb3IoO24uJG9wdGlvbnMuYWJzdHJhY3QmJm4uJHBhcmVudDspbj1uLiRwYXJlbnQ7bi4kY2hpbGRyZW4ucHVzaChlKX1lLiRwYXJlbnQ9bixlLiRyb290PW4/bi4kcm9vdDplLGUuJGNoaWxkcmVuPVtdLGUuJHJlZnM9e30sZS5fd2F0Y2hlcj1udWxsLGUuX2luYWN0aXZlPW51bGwsZS5fZGlyZWN0SW5hY3RpdmU9ITEsZS5faXNNb3VudGVkPSExLGUuX2lzRGVzdHJveWVkPSExLGUuX2lzQmVpbmdEZXN0cm95ZWQ9ITF9KChvLl9yZW5kZXJQcm94eT1vKS5fc2VsZj1vKSxmdW5jdGlvbihlKXtlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9oYXNIb29rRXZlbnQ9ITE7dmFyIHQ9ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO3QmJnB0KGUsdCl9KG8pLGZ1bmN0aW9uKGkpe2kuX3Zub2RlPW51bGwsaS5fc3RhdGljVHJlZXM9bnVsbDt2YXIgZT1pLiRvcHRpb25zLHQ9aS4kdm5vZGU9ZS5fcGFyZW50Vm5vZGUsbj10JiZ0LmNvbnRleHQ7aS4kc2xvdHM9ZHQoZS5fcmVuZGVyQ2hpbGRyZW4sbiksaS4kc2NvcGVkU2xvdHM9eSxpLl9jPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBybihpLGUsdCxuLHIsITEpfSxpLiRjcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBybihpLGUsdCxuLHIsITApfTt2YXIgcj10JiZ0LmRhdGE7Q2UoaSwiJGF0dHJzIixyJiZyLmF0dHJzfHx5LG51bGwsITApLENlKGksIiRsaXN0ZW5lcnMiLGUuX3BhcmVudExpc3RlbmVyc3x8eSxudWxsLCEwKX0obyksX3QobywiYmVmb3JlQ3JlYXRlIiksKG49RHQoKHQ9bykuJG9wdGlvbnMuaW5qZWN0LHQpKSYmKGdlKCExKSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0NlKHQsZSxuW2VdKX0pLGdlKCEwKSksanQobyksKGk9KHI9bykuJG9wdGlvbnMucHJvdmlkZSkmJihyLl9wcm92aWRlZD0iZnVuY3Rpb24iPT10eXBlb2YgaT9pLmNhbGwocik6aSksX3QobywiY3JlYXRlZCIpLG8uJG9wdGlvbnMuZWwmJm8uJG1vdW50KG8uJG9wdGlvbnMuZWwpfSxvbj1obixhbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGF9fSxzbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb3BzfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KG9uLnByb3RvdHlwZSwiJGRhdGEiLGFuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkob24ucHJvdG90eXBlLCIkcHJvcHMiLHNuKSxvbi5wcm90b3R5cGUuJHNldD14ZSxvbi5wcm90b3R5cGUuJGRlbGV0ZT1rZSxvbi5wcm90b3R5cGUuJHdhdGNoPWZ1bmN0aW9uKGUsdCxuKXtpZihsKHQpKXJldHVybiBNdCh0aGlzLGUsdCxuKTsobj1ufHx7fSkudXNlcj0hMDt2YXIgcj1uZXcgU3QodGhpcyxlLHQsbik7cmV0dXJuIG4uaW1tZWRpYXRlJiZ0LmNhbGwodGhpcyxyLnZhbHVlKSxmdW5jdGlvbigpe3IudGVhcmRvd24oKX19LGxuPS9eaG9vazovLChjbj1obikucHJvdG90eXBlLiRvbj1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRoaXMuJG9uKGVbbl0sdCk7ZWxzZSh0aGlzLl9ldmVudHNbZV18fCh0aGlzLl9ldmVudHNbZV09W10pKS5wdXNoKHQpLGxuLnRlc3QoZSkmJih0aGlzLl9oYXNIb29rRXZlbnQ9ITApO3JldHVybiB0aGlzfSxjbi5wcm90b3R5cGUuJG9uY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2Z1bmN0aW9uIHIoKXtuLiRvZmYoZSxyKSx0LmFwcGx5KG4sYXJndW1lbnRzKX1yZXR1cm4gci5mbj10LG4uJG9uKGUsciksbn0sY24ucHJvdG90eXBlLiRvZmY9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxuO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl0aGlzLiRvZmYoZVtyXSx0KTtyZXR1cm4gbn12YXIgbz1uLl9ldmVudHNbZV07aWYoIW8pcmV0dXJuIG47aWYoIXQpcmV0dXJuIG4uX2V2ZW50c1tlXT1udWxsLG47aWYodClmb3IodmFyIGEscz1vLmxlbmd0aDtzLS07KWlmKChhPW9bc10pPT09dHx8YS5mbj09PXQpe28uc3BsaWNlKHMsMSk7YnJlYWt9cmV0dXJuIG59LGNuLnByb3RvdHlwZS4kZW1pdD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLGU9bi5fZXZlbnRzW3RdO2lmKGUpe2U9MTxlLmxlbmd0aD9oKGUpOmU7Zm9yKHZhciByPWgoYXJndW1lbnRzLDEpLGk9MCxvPWUubGVuZ3RoO2k8bztpKyspdHJ5e2VbaV0uYXBwbHkobixyKX1jYXRjaChlKXtGZShlLG4sJ2V2ZW50IGhhbmRsZXIgZm9yICInK3QrJyInKX19cmV0dXJuIG59LCh1bj1obikucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24uX2lzTW91bnRlZCYmX3QobiwiYmVmb3JlVXBkYXRlIik7dmFyIHI9bi4kZWwsaT1uLl92bm9kZSxvPW10OyhtdD1uKS5fdm5vZGU9ZSxpP24uJGVsPW4uX19wYXRjaF9fKGksZSk6KG4uJGVsPW4uX19wYXRjaF9fKG4uJGVsLGUsdCwhMSxuLiRvcHRpb25zLl9wYXJlbnRFbG0sbi4kb3B0aW9ucy5fcmVmRWxtKSxuLiRvcHRpb25zLl9wYXJlbnRFbG09bi4kb3B0aW9ucy5fcmVmRWxtPW51bGwpLG10PW8sciYmKHIuX192dWVfXz1udWxsKSxuLiRlbCYmKG4uJGVsLl9fdnVlX189biksbi4kdm5vZGUmJm4uJHBhcmVudCYmbi4kdm5vZGU9PT1uLiRwYXJlbnQuX3Zub2RlJiYobi4kcGFyZW50LiRlbD1uLiRlbCl9LHVuLnByb3RvdHlwZS4kZm9yY2VVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl93YXRjaGVyJiZ0aGlzLl93YXRjaGVyLnVwZGF0ZSgpfSx1bi5wcm90b3R5cGUuJGRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFlLl9pc0JlaW5nRGVzdHJveWVkKXtfdChlLCJiZWZvcmVEZXN0cm95IiksZS5faXNCZWluZ0Rlc3Ryb3llZD0hMDt2YXIgdD1lLiRwYXJlbnQ7IXR8fHQuX2lzQmVpbmdEZXN0cm95ZWR8fGUuJG9wdGlvbnMuYWJzdHJhY3R8fGYodC4kY2hpbGRyZW4sZSksZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci50ZWFyZG93bigpO2Zvcih2YXIgbj1lLl93YXRjaGVycy5sZW5ndGg7bi0tOyllLl93YXRjaGVyc1tuXS50ZWFyZG93bigpO2UuX2RhdGEuX19vYl9fJiZlLl9kYXRhLl9fb2JfXy52bUNvdW50LS0sZS5faXNEZXN0cm95ZWQ9ITAsZS5fX3BhdGNoX18oZS5fdm5vZGUsbnVsbCksX3QoZSwiZGVzdHJveWVkIiksZS4kb2ZmKCksZS4kZWwmJihlLiRlbC5fX3Z1ZV9fPW51bGwpLGUuJHZub2RlJiYoZS4kdm5vZGUucGFyZW50PW51bGwpfX0sV3QoKGZuPWhuKS5wcm90b3R5cGUpLGZuLnByb3RvdHlwZS4kbmV4dFRpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIFplKGUsdGhpcyl9LGZuLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLGU9bi4kb3B0aW9ucyxyPWUucmVuZGVyLGk9ZS5fcGFyZW50Vm5vZGU7aSYmKG4uJHNjb3BlZFNsb3RzPWkuZGF0YS5zY29wZWRTbG90c3x8eSksbi4kdm5vZGU9aTt0cnl7dD1yLmNhbGwobi5fcmVuZGVyUHJveHksbi4kY3JlYXRlRWxlbWVudCl9Y2F0Y2goZSl7RmUoZSxuLCJyZW5kZXIiKSx0PW4uX3Zub2RlfXJldHVybiB0IGluc3RhbmNlb2YgbGV8fCh0PWZlKCkpLHQucGFyZW50PWksdH07dmFyICRuLHduLENuLHhuPVtTdHJpbmcsUmVnRXhwLEFycmF5XSxrbj17S2VlcEFsaXZlOntuYW1lOiJrZWVwLWFsaXZlIixhYnN0cmFjdDohMCxwcm9wczp7aW5jbHVkZTp4bixleGNsdWRlOnhuLG1heDpbU3RyaW5nLE51bWJlcl19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5rZXlzPVtdfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5jYWNoZSlibih0aGlzLmNhY2hlLGUsdGhpcy5rZXlzKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kd2F0Y2goImluY2x1ZGUiLGZ1bmN0aW9uKHQpe19uKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGduKHQsZSl9KX0pLHRoaXMuJHdhdGNoKCJleGNsdWRlIixmdW5jdGlvbih0KXtfbihlLGZ1bmN0aW9uKGUpe3JldHVybiFnbih0LGUpfSl9KX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2xvdHMuZGVmYXVsdCx0PWx0KGUpLG49dCYmdC5jb21wb25lbnRPcHRpb25zO2lmKG4pe3ZhciByPXluKG4pLGk9dGhpcy5pbmNsdWRlLG89dGhpcy5leGNsdWRlO2lmKGkmJighcnx8IWduKGkscikpfHxvJiZyJiZnbihvLHIpKXJldHVybiB0O3ZhciBhPXRoaXMuY2FjaGUscz10aGlzLmtleXMsYz1udWxsPT10LmtleT9uLkN0b3IuY2lkKyhuLnRhZz8iOjoiK24udGFnOiIiKTp0LmtleTthW2NdPyh0LmNvbXBvbmVudEluc3RhbmNlPWFbY10uY29tcG9uZW50SW5zdGFuY2UsZihzLGMpLHMucHVzaChjKSk6KGFbY109dCxzLnB1c2goYyksdGhpcy5tYXgmJnMubGVuZ3RoPnBhcnNlSW50KHRoaXMubWF4KSYmYm4oYSxzWzBdLHMsdGhpcy5fdm5vZGUpKSx0LmRhdGEua2VlcEFsaXZlPSEwfXJldHVybiB0fHxlJiZlWzBdfX19OyRuPWhuLENuPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkbiwiY29uZmlnIixDbiksJG4udXRpbD17d2FybjpyZSxleHRlbmQ6bSxtZXJnZU9wdGlvbnM6TmUsZGVmaW5lUmVhY3RpdmU6Q2V9LCRuLnNldD14ZSwkbi5kZWxldGU9a2UsJG4ubmV4dFRpY2s9WmUsJG4ub3B0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLGsuZm9yRWFjaChmdW5jdGlvbihlKXskbi5vcHRpb25zW2UrInMiXT1PYmplY3QuY3JlYXRlKG51bGwpfSksbSgoJG4ub3B0aW9ucy5fYmFzZT0kbikub3B0aW9ucy5jb21wb25lbnRzLGtuKSwkbi51c2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5zdGFsbGVkUGx1Z2luc3x8KHRoaXMuX2luc3RhbGxlZFBsdWdpbnM9W10pO2lmKC0xPHQuaW5kZXhPZihlKSlyZXR1cm4gdGhpczt2YXIgbj1oKGFyZ3VtZW50cywxKTtyZXR1cm4gbi51bnNoaWZ0KHRoaXMpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmluc3RhbGw/ZS5pbnN0YWxsLmFwcGx5KGUsbik6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYXBwbHkobnVsbCxuKSx0LnB1c2goZSksdGhpc30sJG4ubWl4aW49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9ucz1OZSh0aGlzLm9wdGlvbnMsZSksdGhpc30sbW4oJG4pLHduPSRuLGsuZm9yRWFjaChmdW5jdGlvbihuKXt3bltuXT1mdW5jdGlvbihlLHQpe3JldHVybiB0PygiY29tcG9uZW50Ij09PW4mJmwodCkmJih0Lm5hbWU9dC5uYW1lfHxlLHQ9dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZCh0KSksImRpcmVjdGl2ZSI9PT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9e2JpbmQ6dCx1cGRhdGU6dH0pLHRoaXMub3B0aW9uc1tuKyJzIl1bZV09dCk6dGhpcy5vcHRpb25zW24rInMiXVtlXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaG4ucHJvdG90eXBlLCIkaXNTZXJ2ZXIiLHtnZXQ6WX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShobi5wcm90b3R5cGUsIiRzc3JDb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShobiwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHQiLHt2YWx1ZTpHdH0pLGhuLnZlcnNpb249IjIuNS4xNyI7dmFyIEFuPXMoInN0eWxlLGNsYXNzIiksT249cygiaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzcyIpLFNuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idmFsdWUiPT09biYmT24oZSkmJiJidXR0b24iIT09dHx8InNlbGVjdGVkIj09PW4mJiJvcHRpb24iPT09ZXx8ImNoZWNrZWQiPT09biYmImlucHV0Ij09PWV8fCJtdXRlZCI9PT1uJiYidmlkZW8iPT09ZX0sVG49cygiY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrIiksRW49cygiYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSxkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRlcm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSxtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsdHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZSIpLGpuPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixObj1mdW5jdGlvbihlKXtyZXR1cm4iOiI9PT1lLmNoYXJBdCg1KSYmInhsaW5rIj09PWUuc2xpY2UoMCw1KX0sTG49ZnVuY3Rpb24oZSl7cmV0dXJuIE5uKGUpP2Uuc2xpY2UoNixlLmxlbmd0aCk6IiJ9LEluPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV9O2Z1bmN0aW9uIE1uKGUpe2Zvcih2YXIgdD1lLmRhdGEsbj1lLHI9ZTtEKHIuY29tcG9uZW50SW5zdGFuY2UpOykocj1yLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJnIuZGF0YSYmKHQ9RG4oci5kYXRhLHQpKTtmb3IoO0Qobj1uLnBhcmVudCk7KW4mJm4uZGF0YSYmKHQ9RG4odCxuLmRhdGEpKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihEKGUpfHxEKHQpKXJldHVybiBQbihlLEZuKHQpKTtyZXR1cm4iIn0odC5zdGF0aWNDbGFzcyx0LmNsYXNzKX1mdW5jdGlvbiBEbihlLHQpe3JldHVybntzdGF0aWNDbGFzczpQbihlLnN0YXRpY0NsYXNzLHQuc3RhdGljQ2xhc3MpLGNsYXNzOkQoZS5jbGFzcyk/W2UuY2xhc3MsdC5jbGFzc106dC5jbGFzc319ZnVuY3Rpb24gUG4oZSx0KXtyZXR1cm4gZT90P2UrIiAiK3Q6ZTp0fHwiIn1mdW5jdGlvbiBGbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKUQodD1GbihlW3JdKSkmJiIiIT09dCYmKG4mJihuKz0iICIpLG4rPXQpO3JldHVybiBufShlKTpQKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PSIiO2Zvcih2YXIgbiBpbiBlKWVbbl0mJih0JiYodCs9IiAiKSx0Kz1uKTtyZXR1cm4gdH0oZSk6InN0cmluZyI9PXR5cGVvZiBlP2U6IiJ9dmFyIFJuPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixtYXRoOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIn0sSG49cygiaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSxzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbyxlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucyxjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0cixidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LGNvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QiKSxCbj1zKCJzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsZm9yZWlnbk9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldyIsITApLFVuPWZ1bmN0aW9uKGUpe3JldHVybiBIbihlKXx8Qm4oZSl9O2Z1bmN0aW9uIFZuKGUpe3JldHVybiBCbihlKT8ic3ZnIjoibWF0aCI9PT1lPyJtYXRoIjp2b2lkIDB9dmFyIHpuPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIEtuPXMoInRleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsIik7ZnVuY3Rpb24gSm4oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpO3JldHVybiB0fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX1yZXR1cm4gZX12YXIgcW49T2JqZWN0LmZyZWV6ZSh7Y3JlYXRlRWxlbWVudDpmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuInNlbGVjdCIhPT1lfHx0LmRhdGEmJnQuZGF0YS5hdHRycyYmdm9pZCAwIT09dC5kYXRhLmF0dHJzLm11bHRpcGxlJiZuLnNldEF0dHJpYnV0ZSgibXVsdGlwbGUiLCJtdWx0aXBsZSIpLG59LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbihlLHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoUm5bZV0sdCl9LGNyZWF0ZVRleHROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihlLHQpe2UucmVtb3ZlQ2hpbGQodCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUsdCl7ZS5hcHBlbmRDaGlsZCh0KX0scGFyZW50Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlfSxuZXh0U2libGluZzpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXh0U2libGluZ30sdGFnTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lfSxzZXRUZXh0Q29udGVudDpmdW5jdGlvbihlLHQpe2UudGV4dENvbnRlbnQ9dH0sc2V0U3R5bGVTY29wZTpmdW5jdGlvbihlLHQpe2Uuc2V0QXR0cmlidXRlKHQsIiIpfX0pLFduPXtjcmVhdGU6ZnVuY3Rpb24oZSx0KXtHbih0KX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZS5kYXRhLnJlZiE9PXQuZGF0YS5yZWYmJihHbihlLCEwKSxHbih0KSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7R24oZSwhMCl9fTtmdW5jdGlvbiBHbihlLHQpe3ZhciBuPWUuZGF0YS5yZWY7aWYoRChuKSl7dmFyIHI9ZS5jb250ZXh0LGk9ZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5lbG0sbz1yLiRyZWZzO3Q/QXJyYXkuaXNBcnJheShvW25dKT9mKG9bbl0saSk6b1tuXT09PWkmJihvW25dPXZvaWQgMCk6ZS5kYXRhLnJlZkluRm9yP0FycmF5LmlzQXJyYXkob1tuXSk/b1tuXS5pbmRleE9mKGkpPDAmJm9bbl0ucHVzaChpKTpvW25dPVtpXTpvW25dPWl9fXZhciBabj1uZXcgbGUoIiIse30sW10pLFhuPVsiY3JlYXRlIiwiYWN0aXZhdGUiLCJ1cGRhdGUiLCJyZW1vdmUiLCJkZXN0cm95Il07ZnVuY3Rpb24gWW4oZSx0KXtyZXR1cm4gZS5rZXk9PT10LmtleSYmKGUudGFnPT09dC50YWcmJmUuaXNDb21tZW50PT09dC5pc0NvbW1lbnQmJkQoZS5kYXRhKT09PUQodC5kYXRhKSYmZnVuY3Rpb24oZSx0KXtpZigiaW5wdXQiIT09ZS50YWcpcmV0dXJuITA7dmFyIG4scj1EKG49ZS5kYXRhKSYmRChuPW4uYXR0cnMpJiZuLnR5cGUsaT1EKG49dC5kYXRhKSYmRChuPW4uYXR0cnMpJiZuLnR5cGU7cmV0dXJuIHI9PT1pfHxLbihyKSYmS24oaSl9KGUsdCl8fFMoZS5pc0FzeW5jUGxhY2Vob2xkZXIpJiZlLmFzeW5jRmFjdG9yeT09PXQuYXN5bmNGYWN0b3J5JiZNKHQuYXN5bmNGYWN0b3J5LmVycm9yKSl9ZnVuY3Rpb24gUW4oZSx0LG4pe3ZhciByLGksbz17fTtmb3Iocj10O3I8PW47KytyKUQoaT1lW3JdLmtleSkmJihvW2ldPXIpO3JldHVybiBvfXZhciBlcj17Y3JlYXRlOnRyLHVwZGF0ZTp0cixkZXN0cm95OmZ1bmN0aW9uKGUpe3RyKGUsWm4pfX07ZnVuY3Rpb24gdHIoZSx0KXsoZS5kYXRhLmRpcmVjdGl2ZXN8fHQuZGF0YS5kaXJlY3RpdmVzKSYmZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbz10PT09Wm4sYT1uPT09Wm4scz1ycih0LmRhdGEuZGlyZWN0aXZlcyx0LmNvbnRleHQpLGM9cnIobi5kYXRhLmRpcmVjdGl2ZXMsbi5jb250ZXh0KSxsPVtdLHU9W107Zm9yKGUgaW4gYylyPXNbZV0saT1jW2VdLHI/KGkub2xkVmFsdWU9ci52YWx1ZSxpcihpLCJ1cGRhdGUiLG4sdCksaS5kZWYmJmkuZGVmLmNvbXBvbmVudFVwZGF0ZWQmJnUucHVzaChpKSk6KGlyKGksImJpbmQiLG4sdCksaS5kZWYmJmkuZGVmLmluc2VydGVkJiZsLnB1c2goaSkpO2lmKGwubGVuZ3RoKXt2YXIgZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bC5sZW5ndGg7ZSsrKWlyKGxbZV0sImluc2VydGVkIixuLHQpfTtvP3J0KG4sImluc2VydCIsZik6ZigpfXUubGVuZ3RoJiZydChuLCJwb3N0cGF0Y2giLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspaXIodVtlXSwiY29tcG9uZW50VXBkYXRlZCIsbix0KX0pO2lmKCFvKWZvcihlIGluIHMpY1tlXXx8aXIoc1tlXSwidW5iaW5kIix0LHQsYSl9KGUsdCl9dmFyIG5yPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gcnIoZSx0KXt2YXIgbixyLGksbz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCFlKXJldHVybiBvO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspKHI9ZVtuXSkubW9kaWZpZXJzfHwoci5tb2RpZmllcnM9bnIpLChvWyhpPXIsaS5yYXdOYW1lfHxpLm5hbWUrIi4iK09iamVjdC5rZXlzKGkubW9kaWZpZXJzfHx7fSkuam9pbigiLiIpKV09cikuZGVmPUxlKHQuJG9wdGlvbnMsImRpcmVjdGl2ZXMiLHIubmFtZSk7cmV0dXJuIG99ZnVuY3Rpb24gaXIodCxuLHIsZSxpKXt2YXIgbz10LmRlZiYmdC5kZWZbbl07aWYobyl0cnl7byhyLmVsbSx0LHIsZSxpKX1jYXRjaChlKXtGZShlLHIuY29udGV4dCwiZGlyZWN0aXZlICIrdC5uYW1lKyIgIituKyIgaG9vayIpfX12YXIgb3I9W1duLGVyXTtmdW5jdGlvbiBhcihlLHQpe3ZhciBuPXQuY29tcG9uZW50T3B0aW9ucztpZighKEQobikmJiExPT09bi5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzfHxNKGUuZGF0YS5hdHRycykmJk0odC5kYXRhLmF0dHJzKSkpe3ZhciByLGksbz10LmVsbSxhPWUuZGF0YS5hdHRyc3x8e30scz10LmRhdGEuYXR0cnN8fHt9O2ZvcihyIGluIEQocy5fX29iX18pJiYocz10LmRhdGEuYXR0cnM9bSh7fSxzKSkscylpPXNbcl0sYVtyXSE9PWkmJnNyKG8scixpKTtmb3IociBpbihLfHxxKSYmcy52YWx1ZSE9PWEudmFsdWUmJnNyKG8sInZhbHVlIixzLnZhbHVlKSxhKU0oc1tyXSkmJihObihyKT9vLnJlbW92ZUF0dHJpYnV0ZU5TKGpuLExuKHIpKTpUbihyKXx8by5yZW1vdmVBdHRyaWJ1dGUocikpfX1mdW5jdGlvbiBzcihlLHQsbil7LTE8ZS50YWdOYW1lLmluZGV4T2YoIi0iKT9jcihlLHQsbik6RW4odCk/SW4obik/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG49ImFsbG93ZnVsbHNjcmVlbiI9PT10JiYiRU1CRUQiPT09ZS50YWdOYW1lPyJ0cnVlIjp0LGUuc2V0QXR0cmlidXRlKHQsbikpOlRuKHQpP2Uuc2V0QXR0cmlidXRlKHQsSW4obil8fCJmYWxzZSI9PT1uPyJmYWxzZSI6InRydWUiKTpObih0KT9JbihuKT9lLnJlbW92ZUF0dHJpYnV0ZU5TKGpuLExuKHQpKTplLnNldEF0dHJpYnV0ZU5TKGpuLHQsbik6Y3IoZSx0LG4pfWZ1bmN0aW9uIGNyKHQsZSxuKXtpZihJbihuKSl0LnJlbW92ZUF0dHJpYnV0ZShlKTtlbHNle2lmKEsmJiFKJiYiVEVYVEFSRUEiPT09dC50YWdOYW1lJiYicGxhY2Vob2xkZXIiPT09ZSYmIXQuX19pZXBoKXt2YXIgcj1mdW5jdGlvbihlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHIpfTt0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixyKSx0Ll9faWVwaD0hMH10LnNldEF0dHJpYnV0ZShlLG4pfX12YXIgbHI9e2NyZWF0ZTphcix1cGRhdGU6YXJ9O2Z1bmN0aW9uIHVyKGUsdCl7dmFyIG49dC5lbG0scj10LmRhdGEsaT1lLmRhdGE7aWYoIShNKHIuc3RhdGljQ2xhc3MpJiZNKHIuY2xhc3MpJiYoTShpKXx8TShpLnN0YXRpY0NsYXNzKSYmTShpLmNsYXNzKSkpKXt2YXIgbz1Nbih0KSxhPW4uX3RyYW5zaXRpb25DbGFzc2VzO0QoYSkmJihvPVBuKG8sRm4oYSkpKSxvIT09bi5fcHJldkNsYXNzJiYobi5zZXRBdHRyaWJ1dGUoImNsYXNzIixvKSxuLl9wcmV2Q2xhc3M9byl9fXZhciBmcixwcixkcix2cixocixtcix5cj17Y3JlYXRlOnVyLHVwZGF0ZTp1cn0sZ3I9L1tcdykuK1wtXyRcXV0vO2Z1bmN0aW9uIF9yKGUpe3ZhciB0LG4scixpLG8sYT0hMSxzPSExLGM9ITEsbD0hMSx1PTAsZj0wLHA9MCxkPTA7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpZihuPXQsdD1lLmNoYXJDb2RlQXQociksYSkzOT09PXQmJjkyIT09biYmKGE9ITEpO2Vsc2UgaWYocykzND09PXQmJjkyIT09biYmKHM9ITEpO2Vsc2UgaWYoYyk5Nj09PXQmJjkyIT09biYmKGM9ITEpO2Vsc2UgaWYobCk0Nz09PXQmJjkyIT09biYmKGw9ITEpO2Vsc2UgaWYoMTI0IT09dHx8MTI0PT09ZS5jaGFyQ29kZUF0KHIrMSl8fDEyND09PWUuY2hhckNvZGVBdChyLTEpfHx1fHxmfHxwKXtzd2l0Y2godCl7Y2FzZSAzNDpzPSEwO2JyZWFrO2Nhc2UgMzk6YT0hMDticmVhaztjYXNlIDk2OmM9ITA7YnJlYWs7Y2FzZSA0MDpwKys7YnJlYWs7Y2FzZSA0MTpwLS07YnJlYWs7Y2FzZSA5MTpmKys7YnJlYWs7Y2FzZSA5MzpmLS07YnJlYWs7Y2FzZSAxMjM6dSsrO2JyZWFrO2Nhc2UgMTI1OnUtLX1pZig0Nz09PXQpe2Zvcih2YXIgdj1yLTEsaD12b2lkIDA7MDw9diYmIiAiPT09KGg9ZS5jaGFyQXQodikpO3YtLSk7aCYmZ3IudGVzdChoKXx8KGw9ITApfX1lbHNlIHZvaWQgMD09PWk/KGQ9cisxLGk9ZS5zbGljZSgwLHIpLnRyaW0oKSk6bSgpO2Z1bmN0aW9uIG0oKXsob3x8KG89W10pKS5wdXNoKGUuc2xpY2UoZCxyKS50cmltKCkpLGQ9cisxfWlmKHZvaWQgMD09PWk/aT1lLnNsaWNlKDAscikudHJpbSgpOjAhPT1kJiZtKCksbylmb3Iocj0wO3I8by5sZW5ndGg7cisrKWk9YnIoaSxvW3JdKTtyZXR1cm4gaX1mdW5jdGlvbiBicihlLHQpe3ZhciBuPXQuaW5kZXhPZigiKCIpO2lmKG48MClyZXR1cm4nX2YoIicrdCsnIikoJytlKyIpIjt2YXIgcj10LnNsaWNlKDAsbiksaT10LnNsaWNlKG4rMSk7cmV0dXJuJ19mKCInK3IrJyIpKCcrZSsoIikiIT09aT8iLCIraTppKX1mdW5jdGlvbiAkcihlKXtjb25zb2xlLmVycm9yKCJbVnVlIGNvbXBpbGVyXTogIitlKX1mdW5jdGlvbiB3cihlLHQpe3JldHVybiBlP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6W119ZnVuY3Rpb24gQ3IoZSx0LG4peyhlLnByb3BzfHwoZS5wcm9wcz1bXSkpLnB1c2goe25hbWU6dCx2YWx1ZTpufSksZS5wbGFpbj0hMX1mdW5jdGlvbiB4cihlLHQsbil7KGUuYXR0cnN8fChlLmF0dHJzPVtdKSkucHVzaCh7bmFtZTp0LHZhbHVlOm59KSxlLnBsYWluPSExfWZ1bmN0aW9uIGtyKGUsdCxuKXtlLmF0dHJzTWFwW3RdPW4sZS5hdHRyc0xpc3QucHVzaCh7bmFtZTp0LHZhbHVlOm59KX1mdW5jdGlvbiBBcihlLHQsbixyLGksbyl7dmFyIGE7KHI9cnx8eSkuY2FwdHVyZSYmKGRlbGV0ZSByLmNhcHR1cmUsdD0iISIrdCksci5vbmNlJiYoZGVsZXRlIHIub25jZSx0PSJ+Iit0KSxyLnBhc3NpdmUmJihkZWxldGUgci5wYXNzaXZlLHQ9IiYiK3QpLCJjbGljayI9PT10JiYoci5yaWdodD8odD0iY29udGV4dG1lbnUiLGRlbGV0ZSByLnJpZ2h0KTpyLm1pZGRsZSYmKHQ9Im1vdXNldXAiKSksci5uYXRpdmU/KGRlbGV0ZSByLm5hdGl2ZSxhPWUubmF0aXZlRXZlbnRzfHwoZS5uYXRpdmVFdmVudHM9e30pKTphPWUuZXZlbnRzfHwoZS5ldmVudHM9e30pO3ZhciBzPXt2YWx1ZTpuLnRyaW0oKX07ciE9PXkmJihzLm1vZGlmaWVycz1yKTt2YXIgYz1hW3RdO0FycmF5LmlzQXJyYXkoYyk/aT9jLnVuc2hpZnQocyk6Yy5wdXNoKHMpOmFbdF09Yz9pP1tzLGNdOltjLHNdOnMsZS5wbGFpbj0hMX1mdW5jdGlvbiBPcihlLHQsbil7dmFyIHI9U3IoZSwiOiIrdCl8fFNyKGUsInYtYmluZDoiK3QpO2lmKG51bGwhPXIpcmV0dXJuIF9yKHIpO2lmKCExIT09bil7dmFyIGk9U3IoZSx0KTtpZihudWxsIT1pKXJldHVybiBKU09OLnN0cmluZ2lmeShpKX19ZnVuY3Rpb24gU3IoZSx0LG4pe3ZhciByO2lmKG51bGwhPShyPWUuYXR0cnNNYXBbdF0pKWZvcih2YXIgaT1lLmF0dHJzTGlzdCxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKGlbb10ubmFtZT09PXQpe2kuc3BsaWNlKG8sMSk7YnJlYWt9cmV0dXJuIG4mJmRlbGV0ZSBlLmF0dHJzTWFwW3RdLHJ9ZnVuY3Rpb24gVHIoZSx0LG4pe3ZhciByPW58fHt9LGk9ci5udW1iZXIsbz0iJCR2IixhPW87ci50cmltJiYoYT0iKHR5cGVvZiAkJHYgPT09ICdzdHJpbmcnPyAkJHYudHJpbSgpOiAkJHYpIiksaSYmKGE9Il9uKCIrYSsiKSIpO3ZhciBzPUVyKHQsYSk7ZS5tb2RlbD17dmFsdWU6IigiK3QrIikiLGV4cHJlc3Npb246JyInK3QrJyInLGNhbGxiYWNrOiJmdW5jdGlvbiAoJCR2KSB7IitzKyJ9In19ZnVuY3Rpb24gRXIoZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZihlPWUudHJpbSgpLGZyPWUubGVuZ3RoLGUuaW5kZXhPZigiWyIpPDB8fGUubGFzdEluZGV4T2YoIl0iKTxmci0xKXJldHVybi0xPCh2cj1lLmxhc3RJbmRleE9mKCIuIikpP3tleHA6ZS5zbGljZSgwLHZyKSxrZXk6JyInK2Uuc2xpY2UodnIrMSkrJyInfTp7ZXhwOmUsa2V5Om51bGx9O3ByPWUsdnI9aHI9bXI9MDtmb3IoOyFOcigpOylMcihkcj1qcigpKT9Ncihkcik6OTE9PT1kciYmSXIoZHIpO3JldHVybntleHA6ZS5zbGljZSgwLGhyKSxrZXk6ZS5zbGljZShocisxLG1yKX19KGUpO3JldHVybiBudWxsPT09bi5rZXk/ZSsiPSIrdDoiJHNldCgiK24uZXhwKyIsICIrbi5rZXkrIiwgIit0KyIpIn1mdW5jdGlvbiBqcigpe3JldHVybiBwci5jaGFyQ29kZUF0KCsrdnIpfWZ1bmN0aW9uIE5yKCl7cmV0dXJuIGZyPD12cn1mdW5jdGlvbiBMcihlKXtyZXR1cm4gMzQ9PT1lfHwzOT09PWV9ZnVuY3Rpb24gSXIoZSl7dmFyIHQ9MTtmb3IoaHI9dnI7IU5yKCk7KWlmKExyKGU9anIoKSkpTXIoZSk7ZWxzZSBpZig5MT09PWUmJnQrKyw5Mz09PWUmJnQtLSwwPT09dCl7bXI9dnI7YnJlYWt9fWZ1bmN0aW9uIE1yKGUpe2Zvcih2YXIgdD1lOyFOcigpJiYoZT1qcigpKSE9PXQ7KTt9dmFyIERyLFByPSJfX3IiLEZyPSJfX2MiO2Z1bmN0aW9uIFJyKGUsdCxuLHIsaSl7dmFyIG8sYSxzLGMsbDt0PShvPXQpLl93aXRoVGFza3x8KG8uX3dpdGhUYXNrPWZ1bmN0aW9uKCl7SmU9ITA7dmFyIGU9by5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIEplPSExLGV9KSxuJiYoYT10LHM9ZSxjPXIsbD1Ecix0PWZ1bmN0aW9uIGUoKXtudWxsIT09YS5hcHBseShudWxsLGFyZ3VtZW50cykmJkhyKHMsZSxjLGwpfSksRHIuYWRkRXZlbnRMaXN0ZW5lcihlLHQsWj97Y2FwdHVyZTpyLHBhc3NpdmU6aX06cil9ZnVuY3Rpb24gSHIoZSx0LG4scil7KHJ8fERyKS5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5fd2l0aFRhc2t8fHQsbil9ZnVuY3Rpb24gQnIoZSx0KXtpZighTShlLmRhdGEub24pfHwhTSh0LmRhdGEub24pKXt2YXIgbj10LmRhdGEub258fHt9LHI9ZS5kYXRhLm9ufHx7fTtEcj10LmVsbSxmdW5jdGlvbihlKXtpZihEKGVbUHJdKSl7dmFyIHQ9Sz8iY2hhbmdlIjoiaW5wdXQiO2VbdF09W10uY29uY2F0KGVbUHJdLGVbdF18fFtdKSxkZWxldGUgZVtQcl19RChlW0ZyXSkmJihlLmNoYW5nZT1bXS5jb25jYXQoZVtGcl0sZS5jaGFuZ2V8fFtdKSxkZWxldGUgZVtGcl0pfShuKSxudChuLHIsUnIsSHIsdC5jb250ZXh0KSxEcj12b2lkIDB9fXZhciBVcj17Y3JlYXRlOkJyLHVwZGF0ZTpCcn07ZnVuY3Rpb24gVnIoZSx0KXtpZighTShlLmRhdGEuZG9tUHJvcHMpfHwhTSh0LmRhdGEuZG9tUHJvcHMpKXt2YXIgbixyLGksbyxhPXQuZWxtLHM9ZS5kYXRhLmRvbVByb3BzfHx7fSxjPXQuZGF0YS5kb21Qcm9wc3x8e307Zm9yKG4gaW4gRChjLl9fb2JfXykmJihjPXQuZGF0YS5kb21Qcm9wcz1tKHt9LGMpKSxzKU0oY1tuXSkmJihhW25dPSIiKTtmb3IobiBpbiBjKXtpZihyPWNbbl0sInRleHRDb250ZW50Ij09PW58fCJpbm5lckhUTUwiPT09bil7aWYodC5jaGlsZHJlbiYmKHQuY2hpbGRyZW4ubGVuZ3RoPTApLHI9PT1zW25dKWNvbnRpbnVlOzE9PT1hLmNoaWxkTm9kZXMubGVuZ3RoJiZhLnJlbW92ZUNoaWxkKGEuY2hpbGROb2Rlc1swXSl9aWYoInZhbHVlIj09PW4pe3ZhciBsPU0oYS5fdmFsdWU9cik/IiI6U3RyaW5nKHIpO289bCwoaT1hKS5jb21wb3Npbmd8fCJPUFRJT04iIT09aS50YWdOYW1lJiYhZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDt0cnl7bj1kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09ZX1jYXRjaChlKXt9cmV0dXJuIG4mJmUudmFsdWUhPT10fShpLG8pJiYhZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnZhbHVlLHI9ZS5fdk1vZGlmaWVycztpZihEKHIpKXtpZihyLmxhenkpcmV0dXJuITE7aWYoci5udW1iZXIpcmV0dXJuIEYobikhPT1GKHQpO2lmKHIudHJpbSlyZXR1cm4gbi50cmltKCkhPT10LnRyaW0oKX1yZXR1cm4gbiE9PXR9KGksbyl8fChhLnZhbHVlPWwpfWVsc2UgYVtuXT1yfX19dmFyIHpyPXtjcmVhdGU6VnIsdXBkYXRlOlZyfSxLcj1lKGZ1bmN0aW9uKGUpe3ZhciBuPXt9LHI9LzooLispLztyZXR1cm4gZS5zcGxpdCgvOyg/IVteKF0qXCkpL2cpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZS5zcGxpdChyKTsxPHQubGVuZ3RoJiYoblt0WzBdLnRyaW0oKV09dFsxXS50cmltKCkpfX0pLG59KTtmdW5jdGlvbiBKcihlKXt2YXIgdD1xcihlLnN0eWxlKTtyZXR1cm4gZS5zdGF0aWNTdHlsZT9tKGUuc3RhdGljU3R5bGUsdCk6dH1mdW5jdGlvbiBxcihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9iKGUpOiJzdHJpbmciPT10eXBlb2YgZT9LcihlKTplfXZhciBXcixHcj0vXi0tLyxacj0vXHMqIWltcG9ydGFudCQvLFhyPWZ1bmN0aW9uKGUsdCxuKXtpZihHci50ZXN0KHQpKWUuc3R5bGUuc2V0UHJvcGVydHkodCxuKTtlbHNlIGlmKFpyLnRlc3QobikpZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4ucmVwbGFjZShaciwiIiksImltcG9ydGFudCIpO2Vsc2V7dmFyIHI9UXIodCk7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspZS5zdHlsZVtyXT1uW2ldO2Vsc2UgZS5zdHlsZVtyXT1ufX0sWXI9WyJXZWJraXQiLCJNb3oiLCJtcyJdLFFyPWUoZnVuY3Rpb24oZSl7aWYoV3I9V3J8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJmaWx0ZXIiIT09KGU9ZyhlKSkmJmUgaW4gV3IpcmV0dXJuIGU7Zm9yKHZhciB0PWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPTA7bjxZci5sZW5ndGg7bisrKXt2YXIgcj1ZcltuXSt0O2lmKHIgaW4gV3IpcmV0dXJuIHJ9fSk7ZnVuY3Rpb24gZWkoZSx0KXt2YXIgbj10LmRhdGEscj1lLmRhdGE7aWYoIShNKG4uc3RhdGljU3R5bGUpJiZNKG4uc3R5bGUpJiZNKHIuc3RhdGljU3R5bGUpJiZNKHIuc3R5bGUpKSl7dmFyIGksbyxhPXQuZWxtLHM9ci5zdGF0aWNTdHlsZSxjPXIubm9ybWFsaXplZFN0eWxlfHxyLnN0eWxlfHx7fSxsPXN8fGMsdT1xcih0LmRhdGEuc3R5bGUpfHx7fTt0LmRhdGEubm9ybWFsaXplZFN0eWxlPUQodS5fX29iX18pP20oe30sdSk6dTt2YXIgZj1mdW5jdGlvbihlLHQpe3ZhciBuLHI9e307aWYodClmb3IodmFyIGk9ZTtpLmNvbXBvbmVudEluc3RhbmNlOykoaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJmkuZGF0YSYmKG49SnIoaS5kYXRhKSkmJm0ocixuKTsobj1KcihlLmRhdGEpKSYmbShyLG4pO2Zvcih2YXIgbz1lO289by5wYXJlbnQ7KW8uZGF0YSYmKG49SnIoby5kYXRhKSkmJm0ocixuKTtyZXR1cm4gcn0odCwhMCk7Zm9yKG8gaW4gbClNKGZbb10pJiZYcihhLG8sIiIpO2ZvcihvIGluIGYpKGk9ZltvXSkhPT1sW29dJiZYcihhLG8sbnVsbD09aT8iIjppKX19dmFyIHRpPXtjcmVhdGU6ZWksdXBkYXRlOmVpfTtmdW5jdGlvbiBuaSh0LGUpe2lmKGUmJihlPWUudHJpbSgpKSlpZih0LmNsYXNzTGlzdCktMTxlLmluZGV4T2YoIiAiKT9lLnNwbGl0KC9ccysvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNsYXNzTGlzdC5hZGQoZSl9KTp0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj0iICIrKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIikrIiAiO24uaW5kZXhPZigiICIrZSsiICIpPDAmJnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsKG4rZSkudHJpbSgpKX19ZnVuY3Rpb24gcmkodCxlKXtpZihlJiYoZT1lLnRyaW0oKSkpaWYodC5jbGFzc0xpc3QpLTE8ZS5pbmRleE9mKCIgIik/ZS5zcGxpdCgvXHMrLykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5jbGFzc0xpc3QucmVtb3ZlKGUpfSk6dC5jbGFzc0xpc3QucmVtb3ZlKGUpLHQuY2xhc3NMaXN0Lmxlbmd0aHx8dC5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7ZWxzZXtmb3IodmFyIG49IiAiKyh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpKyIgIixyPSIgIitlKyIgIjswPD1uLmluZGV4T2Yocik7KW49bi5yZXBsYWNlKHIsIiAiKTsobj1uLnRyaW0oKSk/dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixuKTp0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKX19ZnVuY3Rpb24gaWkoZSl7aWYoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgdD17fTtyZXR1cm4hMSE9PWUuY3NzJiZtKHQsb2koZS5uYW1lfHwidiIpKSxtKHQsZSksdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/b2koZSk6dm9pZCAwfX12YXIgb2k9ZShmdW5jdGlvbihlKXtyZXR1cm57ZW50ZXJDbGFzczplKyItZW50ZXIiLGVudGVyVG9DbGFzczplKyItZW50ZXItdG8iLGVudGVyQWN0aXZlQ2xhc3M6ZSsiLWVudGVyLWFjdGl2ZSIsbGVhdmVDbGFzczplKyItbGVhdmUiLGxlYXZlVG9DbGFzczplKyItbGVhdmUtdG8iLGxlYXZlQWN0aXZlQ2xhc3M6ZSsiLWxlYXZlLWFjdGl2ZSJ9fSksYWk9QiYmIUosc2k9InRyYW5zaXRpb24iLGNpPSJhbmltYXRpb24iLGxpPSJ0cmFuc2l0aW9uIix1aT0idHJhbnNpdGlvbmVuZCIsZmk9ImFuaW1hdGlvbiIscGk9ImFuaW1hdGlvbmVuZCI7YWkmJih2b2lkIDA9PT13aW5kb3cub250cmFuc2l0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kJiYobGk9IldlYmtpdFRyYW5zaXRpb24iLHVpPSJ3ZWJraXRUcmFuc2l0aW9uRW5kIiksdm9pZCAwPT09d2luZG93Lm9uYW5pbWF0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQmJihmaT0iV2Via2l0QW5pbWF0aW9uIixwaT0id2Via2l0QW5pbWF0aW9uRW5kIikpO3ZhciBkaT1CP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6c2V0VGltZW91dDpmdW5jdGlvbihlKXtyZXR1cm4gZSgpfTtmdW5jdGlvbiB2aShlKXtkaShmdW5jdGlvbigpe2RpKGUpfSl9ZnVuY3Rpb24gaGkoZSx0KXt2YXIgbj1lLl90cmFuc2l0aW9uQ2xhc3Nlc3x8KGUuX3RyYW5zaXRpb25DbGFzc2VzPVtdKTtuLmluZGV4T2YodCk8MCYmKG4ucHVzaCh0KSxuaShlLHQpKX1mdW5jdGlvbiBtaShlLHQpe2UuX3RyYW5zaXRpb25DbGFzc2VzJiZmKGUuX3RyYW5zaXRpb25DbGFzc2VzLHQpLHJpKGUsdCl9ZnVuY3Rpb24geWkodCxlLG4pe3ZhciByPV9pKHQsZSksaT1yLnR5cGUsbz1yLnRpbWVvdXQsYT1yLnByb3BDb3VudDtpZighaSlyZXR1cm4gbigpO3ZhciBzPWk9PT1zaT91aTpwaSxjPTAsbD1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLHUpLG4oKX0sdT1mdW5jdGlvbihlKXtlLnRhcmdldD09PXQmJisrYz49YSYmbCgpfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YzxhJiZsKCl9LG8rMSksdC5hZGRFdmVudExpc3RlbmVyKHMsdSl9dmFyIGdpPS9cYih0cmFuc2Zvcm18YWxsKSgsfCQpLztmdW5jdGlvbiBfaShlLHQpe3ZhciBuLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSksaT1yW2xpKyJEZWxheSJdLnNwbGl0KCIsICIpLG89cltsaSsiRHVyYXRpb24iXS5zcGxpdCgiLCAiKSxhPWJpKGksbykscz1yW2ZpKyJEZWxheSJdLnNwbGl0KCIsICIpLGM9cltmaSsiRHVyYXRpb24iXS5zcGxpdCgiLCAiKSxsPWJpKHMsYyksdT0wLGY9MDtyZXR1cm4gdD09PXNpPzA8YSYmKG49c2ksdT1hLGY9by5sZW5ndGgpOnQ9PT1jaT8wPGwmJihuPWNpLHU9bCxmPWMubGVuZ3RoKTpmPShuPTA8KHU9TWF0aC5tYXgoYSxsKSk/bDxhP3NpOmNpOm51bGwpP249PT1zaT9vLmxlbmd0aDpjLmxlbmd0aDowLHt0eXBlOm4sdGltZW91dDp1LHByb3BDb3VudDpmLGhhc1RyYW5zZm9ybTpuPT09c2kmJmdpLnRlc3QocltsaSsiUHJvcGVydHkiXSl9fWZ1bmN0aW9uIGJpKG4sZSl7Zm9yKDtuLmxlbmd0aDxlLmxlbmd0aDspbj1uLmNvbmNhdChuKTtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCxlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiAkaShlKSskaShuW3RdKX0pKX1mdW5jdGlvbiAkaShlKXtyZXR1cm4gMWUzKk51bWJlcihlLnNsaWNlKDAsLTEpKX1mdW5jdGlvbiB3aShuLGUpe3ZhciByPW4uZWxtO0Qoci5fbGVhdmVDYikmJihyLl9sZWF2ZUNiLmNhbmNlbGxlZD0hMCxyLl9sZWF2ZUNiKCkpO3ZhciB0PWlpKG4uZGF0YS50cmFuc2l0aW9uKTtpZighTSh0KSYmIUQoci5fZW50ZXJDYikmJjE9PT1yLm5vZGVUeXBlKXtmb3IodmFyIGk9dC5jc3Msbz10LnR5cGUsYT10LmVudGVyQ2xhc3Mscz10LmVudGVyVG9DbGFzcyxjPXQuZW50ZXJBY3RpdmVDbGFzcyxsPXQuYXBwZWFyQ2xhc3MsdT10LmFwcGVhclRvQ2xhc3MsZj10LmFwcGVhckFjdGl2ZUNsYXNzLHA9dC5iZWZvcmVFbnRlcixkPXQuZW50ZXIsdj10LmFmdGVyRW50ZXIsaD10LmVudGVyQ2FuY2VsbGVkLG09dC5iZWZvcmVBcHBlYXIseT10LmFwcGVhcixnPXQuYWZ0ZXJBcHBlYXIsXz10LmFwcGVhckNhbmNlbGxlZCxiPXQuZHVyYXRpb24sJD1tdCx3PW10LiR2bm9kZTt3JiZ3LnBhcmVudDspJD0odz13LnBhcmVudCkuY29udGV4dDt2YXIgQz0hJC5faXNNb3VudGVkfHwhbi5pc1Jvb3RJbnNlcnQ7aWYoIUN8fHl8fCIiPT09eSl7dmFyIHg9QyYmbD9sOmEsaz1DJiZmP2Y6YyxBPUMmJnU/dTpzLE89QyYmbXx8cCxTPUMmJiJmdW5jdGlvbiI9PXR5cGVvZiB5P3k6ZCxUPUMmJmd8fHYsRT1DJiZffHxoLGo9RihQKGIpP2IuZW50ZXI6YiksTj0hMSE9PWkmJiFKLEw9a2koUyksST1yLl9lbnRlckNiPVIoZnVuY3Rpb24oKXtOJiYobWkocixBKSxtaShyLGspKSxJLmNhbmNlbGxlZD8oTiYmbWkocix4KSxFJiZFKHIpKTpUJiZUKHIpLHIuX2VudGVyQ2I9bnVsbH0pO24uZGF0YS5zaG93fHxydChuLCJpbnNlcnQiLGZ1bmN0aW9uKCl7dmFyIGU9ci5wYXJlbnROb2RlLHQ9ZSYmZS5fcGVuZGluZyYmZS5fcGVuZGluZ1tuLmtleV07dCYmdC50YWc9PT1uLnRhZyYmdC5lbG0uX2xlYXZlQ2ImJnQuZWxtLl9sZWF2ZUNiKCksUyYmUyhyLEkpfSksTyYmTyhyKSxOJiYoaGkocix4KSxoaShyLGspLHZpKGZ1bmN0aW9uKCl7bWkocix4KSxJLmNhbmNlbGxlZHx8KGhpKHIsQSksTHx8KHhpKGopP3NldFRpbWVvdXQoSSxqKTp5aShyLG8sSSkpKX0pKSxuLmRhdGEuc2hvdyYmKGUmJmUoKSxTJiZTKHIsSSkpLE58fEx8fEkoKX19fWZ1bmN0aW9uIENpKGUsdCl7dmFyIG49ZS5lbG07RChuLl9lbnRlckNiKSYmKG4uX2VudGVyQ2IuY2FuY2VsbGVkPSEwLG4uX2VudGVyQ2IoKSk7dmFyIHI9aWkoZS5kYXRhLnRyYW5zaXRpb24pO2lmKE0ocil8fDEhPT1uLm5vZGVUeXBlKXJldHVybiB0KCk7aWYoIUQobi5fbGVhdmVDYikpe3ZhciBpPXIuY3NzLG89ci50eXBlLGE9ci5sZWF2ZUNsYXNzLHM9ci5sZWF2ZVRvQ2xhc3MsYz1yLmxlYXZlQWN0aXZlQ2xhc3MsbD1yLmJlZm9yZUxlYXZlLHU9ci5sZWF2ZSxmPXIuYWZ0ZXJMZWF2ZSxwPXIubGVhdmVDYW5jZWxsZWQsZD1yLmRlbGF5TGVhdmUsdj1yLmR1cmF0aW9uLGg9ITEhPT1pJiYhSixtPWtpKHUpLHk9RihQKHYpP3YubGVhdmU6diksZz1uLl9sZWF2ZUNiPVIoZnVuY3Rpb24oKXtuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5fcGVuZGluZyYmKG4ucGFyZW50Tm9kZS5fcGVuZGluZ1tlLmtleV09bnVsbCksaCYmKG1pKG4scyksbWkobixjKSksZy5jYW5jZWxsZWQ/KGgmJm1pKG4sYSkscCYmcChuKSk6KHQoKSxmJiZmKG4pKSxuLl9sZWF2ZUNiPW51bGx9KTtkP2QoXyk6XygpfWZ1bmN0aW9uIF8oKXtnLmNhbmNlbGxlZHx8KGUuZGF0YS5zaG93fHwoKG4ucGFyZW50Tm9kZS5fcGVuZGluZ3x8KG4ucGFyZW50Tm9kZS5fcGVuZGluZz17fSkpW2Uua2V5XT1lKSxsJiZsKG4pLGgmJihoaShuLGEpLGhpKG4sYyksdmkoZnVuY3Rpb24oKXttaShuLGEpLGcuY2FuY2VsbGVkfHwoaGkobixzKSxtfHwoeGkoeSk/c2V0VGltZW91dChnLHkpOnlpKG4sbyxnKSkpfSkpLHUmJnUobixnKSxofHxtfHxnKCkpfX1mdW5jdGlvbiB4aShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJiFpc05hTihlKX1mdW5jdGlvbiBraShlKXtpZihNKGUpKXJldHVybiExO3ZhciB0PWUuZm5zO3JldHVybiBEKHQpP2tpKEFycmF5LmlzQXJyYXkodCk/dFswXTp0KToxPChlLl9sZW5ndGh8fGUubGVuZ3RoKX1mdW5jdGlvbiBBaShlLHQpeyEwIT09dC5kYXRhLnNob3cmJndpKHQpfXZhciBPaT1mdW5jdGlvbihlKXt2YXIgcix0LGc9e30sbj1lLm1vZHVsZXMsXz1lLm5vZGVPcHM7Zm9yKHI9MDtyPFhuLmxlbmd0aDsrK3IpZm9yKGdbWG5bcl1dPVtdLHQ9MDt0PG4ubGVuZ3RoOysrdClEKG5bdF1bWG5bcl1dKSYmZ1tYbltyXV0ucHVzaChuW3RdW1huW3JdXSk7ZnVuY3Rpb24gbyhlKXt2YXIgdD1fLnBhcmVudE5vZGUoZSk7RCh0KSYmXy5yZW1vdmVDaGlsZCh0LGUpfWZ1bmN0aW9uIGIoZSx0LG4scixpLG8sYSl7aWYoRChlLmVsbSkmJkQobykmJihlPW9bYV09ZGUoZSkpLGUuaXNSb290SW5zZXJ0PSFpLCFmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmRhdGE7aWYoRChpKSl7dmFyIG89RChlLmNvbXBvbmVudEluc3RhbmNlKSYmaS5rZWVwQWxpdmU7aWYoRChpPWkuaG9vaykmJkQoaT1pLmluaXQpJiZpKGUsITEsbixyKSxEKGUuY29tcG9uZW50SW5zdGFuY2UpKXJldHVybiBkKGUsdCksUyhvKSYmZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpLG89ZTtvLmNvbXBvbmVudEluc3RhbmNlOylpZihvPW8uY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLEQoaT1vLmRhdGEpJiZEKGk9aS50cmFuc2l0aW9uKSl7Zm9yKGk9MDtpPGcuYWN0aXZhdGUubGVuZ3RoOysraSlnLmFjdGl2YXRlW2ldKFpuLG8pO3QucHVzaChvKTticmVha311KG4sZS5lbG0scil9KGUsdCxuLHIpLCEwfX0oZSx0LG4scikpe3ZhciBzPWUuZGF0YSxjPWUuY2hpbGRyZW4sbD1lLnRhZztEKGwpPyhlLmVsbT1lLm5zP18uY3JlYXRlRWxlbWVudE5TKGUubnMsbCk6Xy5jcmVhdGVFbGVtZW50KGwsZSksZihlKSx2KGUsYyx0KSxEKHMpJiZoKGUsdCkpOlMoZS5pc0NvbW1lbnQpP2UuZWxtPV8uY3JlYXRlQ29tbWVudChlLnRleHQpOmUuZWxtPV8uY3JlYXRlVGV4dE5vZGUoZS50ZXh0KSx1KG4sZS5lbG0scil9fWZ1bmN0aW9uIGQoZSx0KXtEKGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSYmKHQucHVzaC5hcHBseSh0LGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSxlLmRhdGEucGVuZGluZ0luc2VydD1udWxsKSxlLmVsbT1lLmNvbXBvbmVudEluc3RhbmNlLiRlbCwkKGUpPyhoKGUsdCksZihlKSk6KEduKGUpLHQucHVzaChlKSl9ZnVuY3Rpb24gdShlLHQsbil7RChlKSYmKEQobik/bi5wYXJlbnROb2RlPT09ZSYmXy5pbnNlcnRCZWZvcmUoZSx0LG4pOl8uYXBwZW5kQ2hpbGQoZSx0KSl9ZnVuY3Rpb24gdihlLHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrciliKHRbcl0sbixlLmVsbSxudWxsLCEwLHQscik7ZWxzZSBUKGUudGV4dCkmJl8uYXBwZW5kQ2hpbGQoZS5lbG0sXy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoZS50ZXh0KSkpfWZ1bmN0aW9uICQoZSl7Zm9yKDtlLmNvbXBvbmVudEluc3RhbmNlOyllPWUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO3JldHVybiBEKGUudGFnKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciBuPTA7bjxnLmNyZWF0ZS5sZW5ndGg7KytuKWcuY3JlYXRlW25dKFpuLGUpO0Qocj1lLmRhdGEuaG9vaykmJihEKHIuY3JlYXRlKSYmci5jcmVhdGUoWm4sZSksRChyLmluc2VydCkmJnQucHVzaChlKSl9ZnVuY3Rpb24gZihlKXt2YXIgdDtpZihEKHQ9ZS5mblNjb3BlSWQpKV8uc2V0U3R5bGVTY29wZShlLmVsbSx0KTtlbHNlIGZvcih2YXIgbj1lO247KUQodD1uLmNvbnRleHQpJiZEKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJl8uc2V0U3R5bGVTY29wZShlLmVsbSx0KSxuPW4ucGFyZW50O0QodD1tdCkmJnQhPT1lLmNvbnRleHQmJnQhPT1lLmZuQ29udGV4dCYmRCh0PXQuJG9wdGlvbnMuX3Njb3BlSWQpJiZfLnNldFN0eWxlU2NvcGUoZS5lbG0sdCl9ZnVuY3Rpb24geShlLHQsbixyLGksbyl7Zm9yKDtyPD1pOysrciliKG5bcl0sbyxlLHQsITEsbixyKX1mdW5jdGlvbiB3KGUpe3ZhciB0LG4scj1lLmRhdGE7aWYoRChyKSlmb3IoRCh0PXIuaG9vaykmJkQodD10LmRlc3Ryb3kpJiZ0KGUpLHQ9MDt0PGcuZGVzdHJveS5sZW5ndGg7Kyt0KWcuZGVzdHJveVt0XShlKTtpZihEKHQ9ZS5jaGlsZHJlbikpZm9yKG49MDtuPGUuY2hpbGRyZW4ubGVuZ3RoOysrbil3KGUuY2hpbGRyZW5bbl0pfWZ1bmN0aW9uIEMoZSx0LG4scil7Zm9yKDtuPD1yOysrbil7dmFyIGk9dFtuXTtEKGkpJiYoRChpLnRhZyk/KGEoaSksdyhpKSk6byhpLmVsbSkpfX1mdW5jdGlvbiBhKGUsdCl7aWYoRCh0KXx8RChlLmRhdGEpKXt2YXIgbixyPWcucmVtb3ZlLmxlbmd0aCsxO2ZvcihEKHQpP3QubGlzdGVuZXJzKz1yOnQ9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7MD09LS1uLmxpc3RlbmVycyYmbyhlKX1yZXR1cm4gbi5saXN0ZW5lcnM9dCxufShlLmVsbSxyKSxEKG49ZS5jb21wb25lbnRJbnN0YW5jZSkmJkQobj1uLl92bm9kZSkmJkQobi5kYXRhKSYmYShuLHQpLG49MDtuPGcucmVtb3ZlLmxlbmd0aDsrK24pZy5yZW1vdmVbbl0oZSx0KTtEKG49ZS5kYXRhLmhvb2spJiZEKG49bi5yZW1vdmUpP24oZSx0KTp0KCl9ZWxzZSBvKGUuZWxtKX1mdW5jdGlvbiB4KGUsdCxuLHIpe2Zvcih2YXIgaT1uO2k8cjtpKyspe3ZhciBvPXRbaV07aWYoRChvKSYmWW4oZSxvKSlyZXR1cm4gaX19ZnVuY3Rpb24gayhlLHQsbixyKXtpZihlIT09dCl7dmFyIGk9dC5lbG09ZS5lbG07aWYoUyhlLmlzQXN5bmNQbGFjZWhvbGRlcikpRCh0LmFzeW5jRmFjdG9yeS5yZXNvbHZlZCk/TyhlLmVsbSx0LG4pOnQuaXNBc3luY1BsYWNlaG9sZGVyPSEwO2Vsc2UgaWYoUyh0LmlzU3RhdGljKSYmUyhlLmlzU3RhdGljKSYmdC5rZXk9PT1lLmtleSYmKFModC5pc0Nsb25lZCl8fFModC5pc09uY2UpKSl0LmNvbXBvbmVudEluc3RhbmNlPWUuY29tcG9uZW50SW5zdGFuY2U7ZWxzZXt2YXIgbyxhPXQuZGF0YTtEKGEpJiZEKG89YS5ob29rKSYmRChvPW8ucHJlcGF0Y2gpJiZvKGUsdCk7dmFyIHM9ZS5jaGlsZHJlbixjPXQuY2hpbGRyZW47aWYoRChhKSYmJCh0KSl7Zm9yKG89MDtvPGcudXBkYXRlLmxlbmd0aDsrK28pZy51cGRhdGVbb10oZSx0KTtEKG89YS5ob29rKSYmRChvPW8udXBkYXRlKSYmbyhlLHQpfU0odC50ZXh0KT9EKHMpJiZEKGMpP3MhPT1jJiZmdW5jdGlvbihlLHQsbixyLGkpe2Zvcih2YXIgbyxhLHMsYz0wLGw9MCx1PXQubGVuZ3RoLTEsZj10WzBdLHA9dFt1XSxkPW4ubGVuZ3RoLTEsdj1uWzBdLGg9bltkXSxtPSFpO2M8PXUmJmw8PWQ7KU0oZik/Zj10WysrY106TShwKT9wPXRbLS11XTpZbihmLHYpPyhrKGYsdixyKSxmPXRbKytjXSx2PW5bKytsXSk6WW4ocCxoKT8oayhwLGgscikscD10Wy0tdV0saD1uWy0tZF0pOlluKGYsaCk/KGsoZixoLHIpLG0mJl8uaW5zZXJ0QmVmb3JlKGUsZi5lbG0sXy5uZXh0U2libGluZyhwLmVsbSkpLGY9dFsrK2NdLGg9blstLWRdKTooWW4ocCx2KT8oayhwLHYsciksbSYmXy5pbnNlcnRCZWZvcmUoZSxwLmVsbSxmLmVsbSkscD10Wy0tdV0pOihNKG8pJiYobz1Rbih0LGMsdSkpLE0oYT1EKHYua2V5KT9vW3Yua2V5XTp4KHYsdCxjLHUpKT9iKHYscixlLGYuZWxtLCExLG4sbCk6WW4ocz10W2FdLHYpPyhrKHMsdixyKSx0W2FdPXZvaWQgMCxtJiZfLmluc2VydEJlZm9yZShlLHMuZWxtLGYuZWxtKSk6Yih2LHIsZSxmLmVsbSwhMSxuLGwpKSx2PW5bKytsXSk7dTxjP3koZSxNKG5bZCsxXSk/bnVsbDpuW2QrMV0uZWxtLG4sbCxkLHIpOmQ8bCYmQygwLHQsYyx1KX0oaSxzLGMsbixyKTpEKGMpPyhEKGUudGV4dCkmJl8uc2V0VGV4dENvbnRlbnQoaSwiIikseShpLG51bGwsYywwLGMubGVuZ3RoLTEsbikpOkQocyk/QygwLHMsMCxzLmxlbmd0aC0xKTpEKGUudGV4dCkmJl8uc2V0VGV4dENvbnRlbnQoaSwiIik6ZS50ZXh0IT09dC50ZXh0JiZfLnNldFRleHRDb250ZW50KGksdC50ZXh0KSxEKGEpJiZEKG89YS5ob29rKSYmRChvPW8ucG9zdHBhdGNoKSYmbyhlLHQpfX19ZnVuY3Rpb24gQShlLHQsbil7aWYoUyhuKSYmRChlLnBhcmVudCkpZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0PXQ7ZWxzZSBmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLmRhdGEuaG9vay5pbnNlcnQodFtyXSl9dmFyIG09cygiYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Iik7ZnVuY3Rpb24gTyhlLHQsbixyKXt2YXIgaSxvPXQudGFnLGE9dC5kYXRhLHM9dC5jaGlsZHJlbjtpZihyPXJ8fGEmJmEucHJlLHQuZWxtPWUsUyh0LmlzQ29tbWVudCkmJkQodC5hc3luY0ZhY3RvcnkpKXJldHVybiB0LmlzQXN5bmNQbGFjZWhvbGRlcj0hMDtpZihEKGEpJiYoRChpPWEuaG9vaykmJkQoaT1pLmluaXQpJiZpKHQsITApLEQoaT10LmNvbXBvbmVudEluc3RhbmNlKSkpcmV0dXJuIGQodCxuKSwhMDtpZihEKG8pKXtpZihEKHMpKWlmKGUuaGFzQ2hpbGROb2RlcygpKWlmKEQoaT1hKSYmRChpPWkuZG9tUHJvcHMpJiZEKGk9aS5pbm5lckhUTUwpKXtpZihpIT09ZS5pbm5lckhUTUwpcmV0dXJuITF9ZWxzZXtmb3IodmFyIGM9ITAsbD1lLmZpcnN0Q2hpbGQsdT0wO3U8cy5sZW5ndGg7dSsrKXtpZighbHx8IU8obCxzW3VdLG4scikpe2M9ITE7YnJlYWt9bD1sLm5leHRTaWJsaW5nfWlmKCFjfHxsKXJldHVybiExfWVsc2Ugdih0LHMsbik7aWYoRChhKSl7dmFyIGY9ITE7Zm9yKHZhciBwIGluIGEpaWYoIW0ocCkpe2Y9ITAsaCh0LG4pO2JyZWFrfSFmJiZhLmNsYXNzJiZZZShhLmNsYXNzKX19ZWxzZSBlLmRhdGEhPT10LnRleHQmJihlLmRhdGE9dC50ZXh0KTtyZXR1cm4hMH1yZXR1cm4gZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKCFNKHQpKXt2YXIgYSxzPSExLGM9W107aWYoTShlKSlzPSEwLGIodCxjLGksbyk7ZWxzZXt2YXIgbD1EKGUubm9kZVR5cGUpO2lmKCFsJiZZbihlLHQpKWsoZSx0LGMscik7ZWxzZXtpZihsKXtpZigxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoRSkmJihlLnJlbW92ZUF0dHJpYnV0ZShFKSxuPSEwKSxTKG4pJiZPKGUsdCxjKSlyZXR1cm4gQSh0LGMsITApLGU7YT1lLGU9bmV3IGxlKF8udGFnTmFtZShhKS50b0xvd2VyQ2FzZSgpLHt9LFtdLHZvaWQgMCxhKX12YXIgdT1lLmVsbSxmPV8ucGFyZW50Tm9kZSh1KTtpZihiKHQsYyx1Ll9sZWF2ZUNiP251bGw6ZixfLm5leHRTaWJsaW5nKHUpKSxEKHQucGFyZW50KSlmb3IodmFyIHA9dC5wYXJlbnQsZD0kKHQpO3A7KXtmb3IodmFyIHY9MDt2PGcuZGVzdHJveS5sZW5ndGg7Kyt2KWcuZGVzdHJveVt2XShwKTtpZihwLmVsbT10LmVsbSxkKXtmb3IodmFyIGg9MDtoPGcuY3JlYXRlLmxlbmd0aDsrK2gpZy5jcmVhdGVbaF0oWm4scCk7dmFyIG09cC5kYXRhLmhvb2suaW5zZXJ0O2lmKG0ubWVyZ2VkKWZvcih2YXIgeT0xO3k8bS5mbnMubGVuZ3RoO3krKyltLmZuc1t5XSgpfWVsc2UgR24ocCk7cD1wLnBhcmVudH1EKGYpP0MoMCxbZV0sMCwwKTpEKGUudGFnKSYmdyhlKX19cmV0dXJuIEEodCxjLHMpLHQuZWxtfUQoZSkmJncoZSl9fSh7bm9kZU9wczpxbixtb2R1bGVzOltscix5cixVcix6cix0aSxCP3tjcmVhdGU6QWksYWN0aXZhdGU6QWkscmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ITAhPT1lLmRhdGEuc2hvdz9DaShlLHQpOnQoKX19Ont9XS5jb25jYXQob3IpfSk7SiYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7ZSYmZS52bW9kZWwmJk1pKGUsImlucHV0Iil9KTt2YXIgU2k9e2luc2VydGVkOmZ1bmN0aW9uKGUsdCxuLHIpeyJzZWxlY3QiPT09bi50YWc/KHIuZWxtJiYhci5lbG0uX3ZPcHRpb25zP3J0KG4sInBvc3RwYXRjaCIsZnVuY3Rpb24oKXtTaS5jb21wb25lbnRVcGRhdGVkKGUsdCxuKX0pOlRpKGUsdCxuLmNvbnRleHQpLGUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxOaSkpOigidGV4dGFyZWEiPT09bi50YWd8fEtuKGUudHlwZSkpJiYoZS5fdk1vZGlmaWVycz10Lm1vZGlmaWVycyx0Lm1vZGlmaWVycy5sYXp5fHwoZS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IixMaSksZS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsSWkpLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixJaSksSiYmKGUudm1vZGVsPSEwKSkpfSxjb21wb25lbnRVcGRhdGVkOmZ1bmN0aW9uKGUsdCxuKXtpZigic2VsZWN0Ij09PW4udGFnKXtUaShlLHQsbi5jb250ZXh0KTt2YXIgcj1lLl92T3B0aW9ucyxpPWUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxOaSk7aWYoaS5zb21lKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIUMoZSxyW3RdKX0pKShlLm11bHRpcGxlP3QudmFsdWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gamkoZSxpKX0pOnQudmFsdWUhPT10Lm9sZFZhbHVlJiZqaSh0LnZhbHVlLGkpKSYmTWkoZSwiY2hhbmdlIil9fX07ZnVuY3Rpb24gVGkoZSx0LG4pe0VpKGUsdCxuKSwoS3x8cSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtFaShlLHQsbil9LDApfWZ1bmN0aW9uIEVpKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9ZS5tdWx0aXBsZTtpZighaXx8QXJyYXkuaXNBcnJheShyKSl7Zm9yKHZhciBvLGEscz0wLGM9ZS5vcHRpb25zLmxlbmd0aDtzPGM7cysrKWlmKGE9ZS5vcHRpb25zW3NdLGkpbz0tMTx4KHIsTmkoYSkpLGEuc2VsZWN0ZWQhPT1vJiYoYS5zZWxlY3RlZD1vKTtlbHNlIGlmKEMoTmkoYSkscikpcmV0dXJuIHZvaWQoZS5zZWxlY3RlZEluZGV4IT09cyYmKGUuc2VsZWN0ZWRJbmRleD1zKSk7aXx8KGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIGppKHQsZSl7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIUMoZSx0KX0pfWZ1bmN0aW9uIE5pKGUpe3JldHVybiJfdmFsdWUiaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIExpKGUpe2UudGFyZ2V0LmNvbXBvc2luZz0hMH1mdW5jdGlvbiBJaShlKXtlLnRhcmdldC5jb21wb3NpbmcmJihlLnRhcmdldC5jb21wb3Npbmc9ITEsTWkoZS50YXJnZXQsImlucHV0IikpfWZ1bmN0aW9uIE1pKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkhUTUxFdmVudHMiKTtuLmluaXRFdmVudCh0LCEwLCEwKSxlLmRpc3BhdGNoRXZlbnQobil9ZnVuY3Rpb24gRGkoZSl7cmV0dXJuIWUuY29tcG9uZW50SW5zdGFuY2V8fGUuZGF0YSYmZS5kYXRhLnRyYW5zaXRpb24/ZTpEaShlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSl9dmFyIFBpPXttb2RlbDpTaSxzaG93OntiaW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9KG49RGkobikpLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uLG89ZS5fX3ZPcmlnaW5hbERpc3BsYXk9Im5vbmUiPT09ZS5zdHlsZS5kaXNwbGF5PyIiOmUuc3R5bGUuZGlzcGxheTtyJiZpPyhuLmRhdGEuc2hvdz0hMCx3aShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PW99KSk6ZS5zdHlsZS5kaXNwbGF5PXI/bzoibm9uZSJ9LHVwZGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC52YWx1ZTshciE9IXQub2xkVmFsdWUmJigobj1EaShuKSkuZGF0YSYmbi5kYXRhLnRyYW5zaXRpb24/KG4uZGF0YS5zaG93PSEwLHI/d2kobixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1lLl9fdk9yaWdpbmFsRGlzcGxheX0pOkNpKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9Im5vbmUifSkpOmUuc3R5bGUuZGlzcGxheT1yP2UuX192T3JpZ2luYWxEaXNwbGF5OiJub25lIil9LHVuYmluZDpmdW5jdGlvbihlLHQsbixyLGkpe2l8fChlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXkpfX19LEZpPXtuYW1lOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixjc3M6Qm9vbGVhbixtb2RlOlN0cmluZyx0eXBlOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxkdXJhdGlvbjpbTnVtYmVyLFN0cmluZyxPYmplY3RdfTtmdW5jdGlvbiBSaShlKXt2YXIgdD1lJiZlLmNvbXBvbmVudE9wdGlvbnM7cmV0dXJuIHQmJnQuQ3Rvci5vcHRpb25zLmFic3RyYWN0P1JpKGx0KHQuY2hpbGRyZW4pKTplfWZ1bmN0aW9uIEhpKGUpe3ZhciB0PXt9LG49ZS4kb3B0aW9ucztmb3IodmFyIHIgaW4gbi5wcm9wc0RhdGEpdFtyXT1lW3JdO3ZhciBpPW4uX3BhcmVudExpc3RlbmVycztmb3IodmFyIG8gaW4gaSl0W2cobyldPWlbb107cmV0dXJuIHR9ZnVuY3Rpb24gQmkoZSx0KXtpZigvXGQta2VlcC1hbGl2ZSQvLnRlc3QodC50YWcpKXJldHVybiBlKCJrZWVwLWFsaXZlIix7cHJvcHM6dC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YX0pfXZhciBVaT17bmFtZToidHJhbnNpdGlvbiIscHJvcHM6RmksYWJzdHJhY3Q6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRzbG90cy5kZWZhdWx0O2lmKG4mJihuPW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ3x8Y3QoZSl9KSkubGVuZ3RoKXt2YXIgcj10aGlzLm1vZGUsaT1uWzBdO2lmKGZ1bmN0aW9uKGUpe2Zvcig7ZT1lLnBhcmVudDspaWYoZS5kYXRhLnRyYW5zaXRpb24pcmV0dXJuITB9KHRoaXMuJHZub2RlKSlyZXR1cm4gaTt2YXIgbz1SaShpKTtpZighbylyZXR1cm4gaTtpZih0aGlzLl9sZWF2aW5nKXJldHVybiBCaShlLGkpO3ZhciBhPSJfX3RyYW5zaXRpb24tIit0aGlzLl91aWQrIi0iO28ua2V5PW51bGw9PW8ua2V5P28uaXNDb21tZW50P2ErImNvbW1lbnQiOmErby50YWc6VChvLmtleSk/MD09PVN0cmluZyhvLmtleSkuaW5kZXhPZihhKT9vLmtleTphK28ua2V5Om8ua2V5O3ZhciBzLGMsbD0oby5kYXRhfHwoby5kYXRhPXt9KSkudHJhbnNpdGlvbj1IaSh0aGlzKSx1PXRoaXMuX3Zub2RlLGY9UmkodSk7aWYoby5kYXRhLmRpcmVjdGl2ZXMmJm8uZGF0YS5kaXJlY3RpdmVzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuInNob3ciPT09ZS5uYW1lfSkmJihvLmRhdGEuc2hvdz0hMCksZiYmZi5kYXRhJiYocz1vLChjPWYpLmtleSE9PXMua2V5fHxjLnRhZyE9PXMudGFnKSYmIWN0KGYpJiYoIWYuY29tcG9uZW50SW5zdGFuY2V8fCFmLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpKXt2YXIgcD1mLmRhdGEudHJhbnNpdGlvbj1tKHt9LGwpO2lmKCJvdXQtaW4iPT09cilyZXR1cm4gdGhpcy5fbGVhdmluZz0hMCxydChwLCJhZnRlckxlYXZlIixmdW5jdGlvbigpe3QuX2xlYXZpbmc9ITEsdC4kZm9yY2VVcGRhdGUoKX0pLEJpKGUsaSk7aWYoImluLW91dCI9PT1yKXtpZihjdChvKSlyZXR1cm4gdTt2YXIgZCx2PWZ1bmN0aW9uKCl7ZCgpfTtydChsLCJhZnRlckVudGVyIix2KSxydChsLCJlbnRlckNhbmNlbGxlZCIsdikscnQocCwiZGVsYXlMZWF2ZSIsZnVuY3Rpb24oZSl7ZD1lfSl9fXJldHVybiBpfX19LFZpPW0oe3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30sRmkpO2Z1bmN0aW9uIHppKGUpe2UuZWxtLl9tb3ZlQ2ImJmUuZWxtLl9tb3ZlQ2IoKSxlLmVsbS5fZW50ZXJDYiYmZS5lbG0uX2VudGVyQ2IoKX1mdW5jdGlvbiBLaShlKXtlLmRhdGEubmV3UG9zPWUuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIEppKGUpe3ZhciB0PWUuZGF0YS5wb3Msbj1lLmRhdGEubmV3UG9zLHI9dC5sZWZ0LW4ubGVmdCxpPXQudG9wLW4udG9wO2lmKHJ8fGkpe2UuZGF0YS5tb3ZlZD0hMDt2YXIgbz1lLmVsbS5zdHlsZTtvLnRyYW5zZm9ybT1vLldlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrcisicHgsIitpKyJweCkiLG8udHJhbnNpdGlvbkR1cmF0aW9uPSIwcyJ9fWRlbGV0ZSBWaS5tb2RlO3ZhciBxaT17VHJhbnNpdGlvbjpVaSxUcmFuc2l0aW9uR3JvdXA6e3Byb3BzOlZpLHJlbmRlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50YWd8fHRoaXMuJHZub2RlLmRhdGEudGFnfHwic3BhbiIsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9dGhpcy5wcmV2Q2hpbGRyZW49dGhpcy5jaGlsZHJlbixpPXRoaXMuJHNsb3RzLmRlZmF1bHR8fFtdLG89dGhpcy5jaGlsZHJlbj1bXSxhPUhpKHRoaXMpLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGM9aVtzXTtjLnRhZyYmbnVsbCE9Yy5rZXkmJjAhPT1TdHJpbmcoYy5rZXkpLmluZGV4T2YoIl9fdmxpc3QiKSYmKG8ucHVzaChjKSwoKG5bYy5rZXldPWMpLmRhdGF8fChjLmRhdGE9e30pKS50cmFuc2l0aW9uPWEpfWlmKHIpe2Zvcih2YXIgbD1bXSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIHA9cltmXTtwLmRhdGEudHJhbnNpdGlvbj1hLHAuZGF0YS5wb3M9cC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbltwLmtleV0/bC5wdXNoKHApOnUucHVzaChwKX10aGlzLmtlcHQ9ZSh0LG51bGwsbCksdGhpcy5yZW1vdmVkPXV9cmV0dXJuIGUodCxudWxsLG8pfSxiZWZvcmVVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9fcGF0Y2hfXyh0aGlzLl92bm9kZSx0aGlzLmtlcHQsITEsITApLHRoaXMuX3Zub2RlPXRoaXMua2VwdH0sdXBkYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJldkNoaWxkcmVuLHI9dGhpcy5tb3ZlQ2xhc3N8fCh0aGlzLm5hbWV8fCJ2IikrIi1tb3ZlIjtlLmxlbmd0aCYmdGhpcy5oYXNNb3ZlKGVbMF0uZWxtLHIpJiYoZS5mb3JFYWNoKHppKSxlLmZvckVhY2goS2kpLGUuZm9yRWFjaChKaSksdGhpcy5fcmVmbG93PWRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmRhdGEubW92ZWQpe3ZhciBuPWUuZWxtLHQ9bi5zdHlsZTtoaShuLHIpLHQudHJhbnNmb3JtPXQuV2Via2l0VHJhbnNmb3JtPXQudHJhbnNpdGlvbkR1cmF0aW9uPSIiLG4uYWRkRXZlbnRMaXN0ZW5lcih1aSxuLl9tb3ZlQ2I9ZnVuY3Rpb24gZSh0KXt0JiYhL3RyYW5zZm9ybSQvLnRlc3QodC5wcm9wZXJ0eU5hbWUpfHwobi5yZW1vdmVFdmVudExpc3RlbmVyKHVpLGUpLG4uX21vdmVDYj1udWxsLG1pKG4scikpfSl9fSkpfSxtZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKGUsdCl7aWYoIWFpKXJldHVybiExO2lmKHRoaXMuX2hhc01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49ZS5jbG9uZU5vZGUoKTtlLl90cmFuc2l0aW9uQ2xhc3NlcyYmZS5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyaShuLGUpfSksbmkobix0KSxuLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuJGVsLmFwcGVuZENoaWxkKG4pO3ZhciByPV9pKG4pO3JldHVybiB0aGlzLiRlbC5yZW1vdmVDaGlsZChuKSx0aGlzLl9oYXNNb3ZlPXIuaGFzVHJhbnNmb3JtfX19fTtobi5jb25maWcubXVzdFVzZVByb3A9U24saG4uY29uZmlnLmlzUmVzZXJ2ZWRUYWc9VW4saG4uY29uZmlnLmlzUmVzZXJ2ZWRBdHRyPUFuLGhuLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2U9Vm4saG4uY29uZmlnLmlzVW5rbm93bkVsZW1lbnQ9ZnVuY3Rpb24oZSl7aWYoIUIpcmV0dXJuITA7aWYoVW4oZSkpcmV0dXJuITE7aWYoZT1lLnRvTG93ZXJDYXNlKCksbnVsbCE9em5bZV0pcmV0dXJuIHpuW2VdO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuLTE8ZS5pbmRleE9mKCItIik/em5bZV09dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnR8fHQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTEVsZW1lbnQ6em5bZV09L0hUTUxVbmtub3duRWxlbWVudC8udGVzdCh0LnRvU3RyaW5nKCkpfSxtKGhuLm9wdGlvbnMuZGlyZWN0aXZlcyxQaSksbShobi5vcHRpb25zLmNvbXBvbmVudHMscWkpLGhuLnByb3RvdHlwZS5fX3BhdGNoX189Qj9PaTokLGhuLnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lJiZCP0puKGUpOnZvaWQgMCxyPWUsaT10LChuPXRoaXMpLiRlbD1yLG4uJG9wdGlvbnMucmVuZGVyfHwobi4kb3B0aW9ucy5yZW5kZXI9ZmUpLF90KG4sImJlZm9yZU1vdW50IiksbmV3IFN0KG4sZnVuY3Rpb24oKXtuLl91cGRhdGUobi5fcmVuZGVyKCksaSl9LCQsbnVsbCwhMCksaT0hMSxudWxsPT1uLiR2bm9kZSYmKG4uX2lzTW91bnRlZD0hMCxfdChuLCJtb3VudGVkIikpLG47dmFyIG4scixpfSxCJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ai5kZXZ0b29scyYmUSYmUS5lbWl0KCJpbml0Iixobil9LDApO3ZhciBXaT0vXHtceygoPzoufFxuKSs/KVx9XH0vZyxHaT0vWy0uKis/XiR7fSgpfFtcXVwvXFxdL2csWmk9ZShmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnJlcGxhY2UoR2ksIlxcJCYiKSxuPWVbMV0ucmVwbGFjZShHaSwiXFwkJiIpO3JldHVybiBuZXcgUmVnRXhwKHQrIigoPzoufFxcbikrPykiK24sImciKX0pO3ZhciBYaT17c3RhdGljS2V5czpbInN0YXRpY0NsYXNzIl0sdHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe3Qud2Fybjt2YXIgbj1TcihlLCJjbGFzcyIpO24mJihlLnN0YXRpY0NsYXNzPUpTT04uc3RyaW5naWZ5KG4pKTt2YXIgcj1PcihlLCJjbGFzcyIsITEpO3ImJihlLmNsYXNzQmluZGluZz1yKX0sZ2VuRGF0YTpmdW5jdGlvbihlKXt2YXIgdD0iIjtyZXR1cm4gZS5zdGF0aWNDbGFzcyYmKHQrPSJzdGF0aWNDbGFzczoiK2Uuc3RhdGljQ2xhc3MrIiwiKSxlLmNsYXNzQmluZGluZyYmKHQrPSJjbGFzczoiK2UuY2xhc3NCaW5kaW5nKyIsIiksdH19O3ZhciBZaSxRaT17c3RhdGljS2V5czpbInN0YXRpY1N0eWxlIl0sdHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe3Qud2Fybjt2YXIgbj1TcihlLCJzdHlsZSIpO24mJihlLnN0YXRpY1N0eWxlPUpTT04uc3RyaW5naWZ5KEtyKG4pKSk7dmFyIHI9T3IoZSwic3R5bGUiLCExKTtyJiYoZS5zdHlsZUJpbmRpbmc9cil9LGdlbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7cmV0dXJuIGUuc3RhdGljU3R5bGUmJih0Kz0ic3RhdGljU3R5bGU6IitlLnN0YXRpY1N0eWxlKyIsIiksZS5zdHlsZUJpbmRpbmcmJih0Kz0ic3R5bGU6KCIrZS5zdHlsZUJpbmRpbmcrIiksIiksdH19LGVvPWZ1bmN0aW9uKGUpe3JldHVybihZaT1ZaXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1lLFlpLnRleHRDb250ZW50fSx0bz1zKCJhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbixsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiciIpLG5vPXMoImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2UiKSxybz1zKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmFzZSxibG9ja3F1b3RlLGJvZHksY2FwdGlvbixjb2wsY29sZ3JvdXAsZGQsZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxsaSxtZW51aXRlbSxtZXRhLG9wdGdyb3VwLG9wdGlvbixwYXJhbSxycCxydCxzb3VyY2Usc3R5bGUsc3VtbWFyeSx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0aXRsZSx0cix0cmFjayIpLGlvPS9eXHMqKFteXHMiJzw+XC89XSspKD86XHMqKD0pXHMqKD86IihbXiJdKikiK3wnKFteJ10qKScrfChbXlxzIic9PD5gXSspKSk/Lyxvbz0iW2EtekEtWl9dW1xcd1xcLVxcLl0qIixhbz0iKCg/OiIrb28rIlxcOik/IitvbysiKSIsc289bmV3IFJlZ0V4cCgiXjwiK2FvKSxjbz0vXlxzKihcLz8pPi8sbG89bmV3IFJlZ0V4cCgiXjxcXC8iK2FvKyJbXj5dKj4iKSx1bz0vXjwhRE9DVFlQRSBbXj5dKz4vaSxmbz0vXjwhXC0tLyxwbz0vXjwhXFsvLHZvPSExOyJ4Ii5yZXBsYWNlKC94KC4pPy9nLGZ1bmN0aW9uKGUsdCl7dm89IiI9PT10fSk7dmFyIGhvPXMoInNjcmlwdCxzdHlsZSx0ZXh0YXJlYSIsITApLG1vPXt9LHlvPXsiJmx0OyI6IjwiLCImZ3Q7IjoiPiIsIiZxdW90OyI6JyInLCImYW1wOyI6IiYiLCImIzEwOyI6IlxuIiwiJiM5OyI6Ilx0In0sZ289LyYoPzpsdHxndHxxdW90fGFtcCk7L2csX289LyYoPzpsdHxndHxxdW90fGFtcHwjMTB8IzkpOy9nLGJvPXMoInByZSx0ZXh0YXJlYSIsITApLCRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmJvKGUpJiYiXG4iPT09dFswXX07dmFyIHdvLENvLHhvLGtvLEFvLE9vLFNvLFRvLEVvPS9eQHxedi1vbjovLGpvPS9edi18XkB8XjovLE5vPS8oW15dKj8pXHMrKD86aW58b2YpXHMrKFteXSopLyxMbz0vLChbXixcfVxdXSopKD86LChbXixcfVxdXSopKT8kLyxJbz0vXlwofFwpJC9nLE1vPS86KC4qKSQvLERvPS9eOnxedi1iaW5kOi8sUG89L1wuW14uXSsvZyxGbz1lKGVvKTtmdW5jdGlvbiBSbyhlLHQsbil7cmV0dXJue3R5cGU6MSx0YWc6ZSxhdHRyc0xpc3Q6dCxhdHRyc01hcDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9e30sbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W2Vbbl0ubmFtZV09ZVtuXS52YWx1ZTtyZXR1cm4gdH0odCkscGFyZW50Om4sY2hpbGRyZW46W119fWZ1bmN0aW9uIEhvKGUscCl7d289cC53YXJufHwkcixPbz1wLmlzUHJlVGFnfHxPLFNvPXAubXVzdFVzZVByb3B8fE8sVG89cC5nZXRUYWdOYW1lc3BhY2V8fE8seG89d3IocC5tb2R1bGVzLCJ0cmFuc2Zvcm1Ob2RlIiksa289d3IocC5tb2R1bGVzLCJwcmVUcmFuc2Zvcm1Ob2RlIiksQW89d3IocC5tb2R1bGVzLCJwb3N0VHJhbnNmb3JtTm9kZSIpLENvPXAuZGVsaW1pdGVyczt2YXIgZCx2LGg9W10saT0hMSE9PXAucHJlc2VydmVXaGl0ZXNwYWNlLG09ITEseT0hMTtmdW5jdGlvbiBnKGUpe2UucHJlJiYobT0hMSksT28oZS50YWcpJiYoeT0hMSk7Zm9yKHZhciB0PTA7dDxBby5sZW5ndGg7dCsrKUFvW3RdKGUscCl9cmV0dXJuIGZ1bmN0aW9uKGksZCl7Zm9yKHZhciBlLHYsaD1bXSxtPWQuZXhwZWN0SFRNTCx5PWQuaXNVbmFyeVRhZ3x8TyxnPWQuY2FuQmVMZWZ0T3BlblRhZ3x8TyxhPTA7aTspe2lmKGU9aSx2JiZobyh2KSl7dmFyIHI9MCxvPXYudG9Mb3dlckNhc2UoKSx0PW1vW29dfHwobW9bb109bmV3IFJlZ0V4cCgiKFtcXHNcXFNdKj8pKDwvIitvKyJbXj5dKj4pIiwiaSIpKSxuPWkucmVwbGFjZSh0LGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcj1uLmxlbmd0aCxobyhvKXx8Im5vc2NyaXB0Ij09PW98fCh0PXQucmVwbGFjZSgvPCFcLS0oW1xzXFNdKj8pLS0+L2csIiQxIikucmVwbGFjZSgvPCFcW0NEQVRBXFsoW1xzXFNdKj8pXV0+L2csIiQxIikpLCRvKG8sdCkmJih0PXQuc2xpY2UoMSkpLGQuY2hhcnMmJmQuY2hhcnModCksIiJ9KTthKz1pLmxlbmd0aC1uLmxlbmd0aCxpPW4sQShvLGEtcixhKX1lbHNle3ZhciBzPWkuaW5kZXhPZigiPCIpO2lmKDA9PT1zKXtpZihmby50ZXN0KGkpKXt2YXIgYz1pLmluZGV4T2YoIi0tXHgzZSIpO2lmKDA8PWMpe2Quc2hvdWxkS2VlcENvbW1lbnQmJmQuY29tbWVudChpLnN1YnN0cmluZyg0LGMpKSxDKGMrMyk7Y29udGludWV9fWlmKHBvLnRlc3QoaSkpe3ZhciBsPWkuaW5kZXhPZigiXT4iKTtpZigwPD1sKXtDKGwrMik7Y29udGludWV9fXZhciB1PWkubWF0Y2godW8pO2lmKHUpe0ModVswXS5sZW5ndGgpO2NvbnRpbnVlfXZhciBmPWkubWF0Y2gobG8pO2lmKGYpe3ZhciBwPWE7QyhmWzBdLmxlbmd0aCksQShmWzFdLHAsYSk7Y29udGludWV9dmFyIF89eCgpO2lmKF8pe2soXyksJG8odixpKSYmQygxKTtjb250aW51ZX19dmFyIGI9dm9pZCAwLCQ9dm9pZCAwLHc9dm9pZCAwO2lmKDA8PXMpe2ZvcigkPWkuc2xpY2Uocyk7IShsby50ZXN0KCQpfHxzby50ZXN0KCQpfHxmby50ZXN0KCQpfHxwby50ZXN0KCQpfHwodz0kLmluZGV4T2YoIjwiLDEpKTwwKTspcys9dywkPWkuc2xpY2Uocyk7Yj1pLnN1YnN0cmluZygwLHMpLEMocyl9czwwJiYoYj1pLGk9IiIpLGQuY2hhcnMmJmImJmQuY2hhcnMoYil9aWYoaT09PWUpe2QuY2hhcnMmJmQuY2hhcnMoaSk7YnJlYWt9fWZ1bmN0aW9uIEMoZSl7YSs9ZSxpPWkuc3Vic3RyaW5nKGUpfWZ1bmN0aW9uIHgoKXt2YXIgZT1pLm1hdGNoKHNvKTtpZihlKXt2YXIgdCxuLHI9e3RhZ05hbWU6ZVsxXSxhdHRyczpbXSxzdGFydDphfTtmb3IoQyhlWzBdLmxlbmd0aCk7ISh0PWkubWF0Y2goY28pKSYmKG49aS5tYXRjaChpbykpOylDKG5bMF0ubGVuZ3RoKSxyLmF0dHJzLnB1c2gobik7aWYodClyZXR1cm4gci51bmFyeVNsYXNoPXRbMV0sQyh0WzBdLmxlbmd0aCksci5lbmQ9YSxyfX1mdW5jdGlvbiBrKGUpe3ZhciB0PWUudGFnTmFtZSxuPWUudW5hcnlTbGFzaDttJiYoInAiPT09diYmcm8odCkmJkEodiksZyh0KSYmdj09PXQmJkEodCkpO2Zvcih2YXIgcixpLG8sYT15KHQpfHwhIW4scz1lLmF0dHJzLmxlbmd0aCxjPW5ldyBBcnJheShzKSxsPTA7bDxzO2wrKyl7dmFyIHU9ZS5hdHRyc1tsXTt2byYmLTE9PT11WzBdLmluZGV4T2YoJyIiJykmJigiIj09PXVbM10mJmRlbGV0ZSB1WzNdLCIiPT09dVs0XSYmZGVsZXRlIHVbNF0sIiI9PT11WzVdJiZkZWxldGUgdVs1XSk7dmFyIGY9dVszXXx8dVs0XXx8dVs1XXx8IiIscD0iYSI9PT10JiYiaHJlZiI9PT11WzFdP2Quc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOmQuc2hvdWxkRGVjb2RlTmV3bGluZXM7Y1tsXT17bmFtZTp1WzFdLHZhbHVlOihyPWYsaT1wLG89aT9fbzpnbyxyLnJlcGxhY2UobyxmdW5jdGlvbihlKXtyZXR1cm4geW9bZV19KSl9fWF8fChoLnB1c2goe3RhZzp0LGxvd2VyQ2FzZWRUYWc6dC50b0xvd2VyQ2FzZSgpLGF0dHJzOmN9KSx2PXQpLGQuc3RhcnQmJmQuc3RhcnQodCxjLGEsZS5zdGFydCxlLmVuZCl9ZnVuY3Rpb24gQShlLHQsbil7dmFyIHIsaTtpZihudWxsPT10JiYodD1hKSxudWxsPT1uJiYobj1hKSxlJiYoaT1lLnRvTG93ZXJDYXNlKCkpLGUpZm9yKHI9aC5sZW5ndGgtMTswPD1yJiZoW3JdLmxvd2VyQ2FzZWRUYWchPT1pO3ItLSk7ZWxzZSByPTA7aWYoMDw9cil7Zm9yKHZhciBvPWgubGVuZ3RoLTE7cjw9bztvLS0pZC5lbmQmJmQuZW5kKGhbb10udGFnLHQsbik7aC5sZW5ndGg9cix2PXImJmhbci0xXS50YWd9ZWxzZSJiciI9PT1pP2Quc3RhcnQmJmQuc3RhcnQoZSxbXSwhMCx0LG4pOiJwIj09PWkmJihkLnN0YXJ0JiZkLnN0YXJ0KGUsW10sITEsdCxuKSxkLmVuZCYmZC5lbmQoZSx0LG4pKX1BKCl9KGUse3dhcm46d28sZXhwZWN0SFRNTDpwLmV4cGVjdEhUTUwsaXNVbmFyeVRhZzpwLmlzVW5hcnlUYWcsY2FuQmVMZWZ0T3BlblRhZzpwLmNhbkJlTGVmdE9wZW5UYWcsc2hvdWxkRGVjb2RlTmV3bGluZXM6cC5zaG91bGREZWNvZGVOZXdsaW5lcyxzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6cC5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsc2hvdWxkS2VlcENvbW1lbnQ6cC5jb21tZW50cyxzdGFydDpmdW5jdGlvbihlLHQsbil7dmFyIHI9diYmdi5uc3x8VG8oZSk7SyYmInN2ZyI9PT1yJiYodD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO0tvLnRlc3Qoci5uYW1lKXx8KHIubmFtZT1yLm5hbWUucmVwbGFjZShKbywiIiksdC5wdXNoKHIpKX1yZXR1cm4gdH0odCkpO3ZhciBpLG8sYSxzLGMsbD1SbyhlLHQsdik7ciYmKGwubnM9ciksInN0eWxlIiE9PShpPWwpLnRhZyYmKCJzY3JpcHQiIT09aS50YWd8fGkuYXR0cnNNYXAudHlwZSYmInRleHQvamF2YXNjcmlwdCIhPT1pLmF0dHJzTWFwLnR5cGUpfHxZKCl8fChsLmZvcmJpZGRlbj0hMCk7Zm9yKHZhciB1PTA7dTxrby5sZW5ndGg7dSsrKWw9a29bdV0obCxwKXx8bDtpZihtfHwobnVsbCE9U3Iobz1sLCJ2LXByZSIpJiYoby5wcmU9ITApLGwucHJlJiYobT0hMCkpLE9vKGwudGFnKSYmKHk9ITApLG0/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyc0xpc3QubGVuZ3RoO2lmKHQpZm9yKHZhciBuPWUuYXR0cnM9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09e25hbWU6ZS5hdHRyc0xpc3Rbcl0ubmFtZSx2YWx1ZTpKU09OLnN0cmluZ2lmeShlLmF0dHJzTGlzdFtyXS52YWx1ZSl9O2Vsc2UgZS5wcmV8fChlLnBsYWluPSEwKX0obCk6bC5wcm9jZXNzZWR8fChVbyhsKSxmdW5jdGlvbihlKXt2YXIgdD1TcihlLCJ2LWlmIik7aWYodCllLmlmPXQsVm8oZSx7ZXhwOnQsYmxvY2s6ZX0pO2Vsc2V7bnVsbCE9U3IoZSwidi1lbHNlIikmJihlLmVsc2U9ITApO3ZhciBuPVNyKGUsInYtZWxzZS1pZiIpO24mJihlLmVsc2VpZj1uKX19KGwpLG51bGwhPVNyKGE9bCwidi1vbmNlIikmJihhLm9uY2U9ITApLEJvKGwscCkpLGQ/aC5sZW5ndGh8fGQuaWYmJihsLmVsc2VpZnx8bC5lbHNlKSYmVm8oZCx7ZXhwOmwuZWxzZWlmLGJsb2NrOmx9KTpkPWwsdiYmIWwuZm9yYmlkZGVuKWlmKGwuZWxzZWlmfHxsLmVsc2Upcz1sLChjPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2Zvcig7dC0tOyl7aWYoMT09PWVbdF0udHlwZSlyZXR1cm4gZVt0XTtlLnBvcCgpfX0odi5jaGlsZHJlbikpJiZjLmlmJiZWbyhjLHtleHA6cy5lbHNlaWYsYmxvY2s6c30pO2Vsc2UgaWYobC5zbG90U2NvcGUpe3YucGxhaW49ITE7dmFyIGY9bC5zbG90VGFyZ2V0fHwnImRlZmF1bHQiJzsodi5zY29wZWRTbG90c3x8KHYuc2NvcGVkU2xvdHM9e30pKVtmXT1sfWVsc2Ugdi5jaGlsZHJlbi5wdXNoKGwpLGwucGFyZW50PXY7bj9nKGwpOih2PWwsaC5wdXNoKGwpKX0sZW5kOmZ1bmN0aW9uKCl7dmFyIGU9aFtoLmxlbmd0aC0xXSx0PWUuY2hpbGRyZW5bZS5jaGlsZHJlbi5sZW5ndGgtMV07dCYmMz09PXQudHlwZSYmIiAiPT09dC50ZXh0JiYheSYmZS5jaGlsZHJlbi5wb3AoKSxoLmxlbmd0aC09MSx2PWhbaC5sZW5ndGgtMV0sZyhlKX0sY2hhcnM6ZnVuY3Rpb24oZSl7aWYodiYmKCFLfHwidGV4dGFyZWEiIT09di50YWd8fHYuYXR0cnNNYXAucGxhY2Vob2xkZXIhPT1lKSl7dmFyIHQsbixyPXYuY2hpbGRyZW47aWYoZT15fHxlLnRyaW0oKT8ic2NyaXB0Ij09PSh0PXYpLnRhZ3x8InN0eWxlIj09PXQudGFnP2U6Rm8oZSk6aSYmci5sZW5ndGg/IiAiOiIiKSFtJiYiICIhPT1lJiYobj1mdW5jdGlvbihlLHQpe3ZhciBuPXQ/WmkodCk6V2k7aWYobi50ZXN0KGUpKXtmb3IodmFyIHIsaSxvLGE9W10scz1bXSxjPW4ubGFzdEluZGV4PTA7cj1uLmV4ZWMoZSk7KXtjPChpPXIuaW5kZXgpJiYocy5wdXNoKG89ZS5zbGljZShjLGkpKSxhLnB1c2goSlNPTi5zdHJpbmdpZnkobykpKTt2YXIgbD1fcihyWzFdLnRyaW0oKSk7YS5wdXNoKCJfcygiK2wrIikiKSxzLnB1c2goeyJAYmluZGluZyI6bH0pLGM9aStyWzBdLmxlbmd0aH1yZXR1cm4gYzxlLmxlbmd0aCYmKHMucHVzaChvPWUuc2xpY2UoYykpLGEucHVzaChKU09OLnN0cmluZ2lmeShvKSkpLHtleHByZXNzaW9uOmEuam9pbigiKyIpLHRva2VuczpzfX19KGUsQ28pKT9yLnB1c2goe3R5cGU6MixleHByZXNzaW9uOm4uZXhwcmVzc2lvbix0b2tlbnM6bi50b2tlbnMsdGV4dDplfSk6IiAiPT09ZSYmci5sZW5ndGgmJiIgIj09PXJbci5sZW5ndGgtMV0udGV4dHx8ci5wdXNoKHt0eXBlOjMsdGV4dDplfSl9fSxjb21tZW50OmZ1bmN0aW9uKGUpe3YuY2hpbGRyZW4ucHVzaCh7dHlwZTozLHRleHQ6ZSxpc0NvbW1lbnQ6ITB9KX19KSxkfWZ1bmN0aW9uIEJvKGUsdCl7dmFyIG4scixpLG87KHI9T3Iobj1lLCJrZXkiKSkmJihuLmtleT1yKSxlLnBsYWluPSFlLmtleSYmIWUuYXR0cnNMaXN0Lmxlbmd0aCwobz1PcihpPWUsInJlZiIpKSYmKGkucmVmPW8saS5yZWZJbkZvcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZTt0Oyl7aWYodm9pZCAwIT09dC5mb3IpcmV0dXJuITA7dD10LnBhcmVudH1yZXR1cm4hMX0oaSkpLGZ1bmN0aW9uKGUpe2lmKCJzbG90Ij09PWUudGFnKWUuc2xvdE5hbWU9T3IoZSwibmFtZSIpO2Vsc2V7dmFyIHQ7InRlbXBsYXRlIj09PWUudGFnPyh0PVNyKGUsInNjb3BlIiksZS5zbG90U2NvcGU9dHx8U3IoZSwic2xvdC1zY29wZSIpKToodD1TcihlLCJzbG90LXNjb3BlIikpJiYoZS5zbG90U2NvcGU9dCk7dmFyIG49T3IoZSwic2xvdCIpO24mJihlLnNsb3RUYXJnZXQ9JyIiJz09PW4/JyJkZWZhdWx0Iic6biwidGVtcGxhdGUiPT09ZS50YWd8fGUuc2xvdFNjb3BlfHx4cihlLCJzbG90IixuKSl9fShlKSxmdW5jdGlvbihlKXt2YXIgdDsodD1PcihlLCJpcyIpKSYmKGUuY29tcG9uZW50PXQpO251bGwhPVNyKGUsImlubGluZS10ZW1wbGF0ZSIpJiYoZS5pbmxpbmVUZW1wbGF0ZT0hMCl9KGUpO2Zvcih2YXIgYT0wO2E8eG8ubGVuZ3RoO2ErKyllPXhvW2FdKGUsdCl8fGU7IWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLGM9ZS5hdHRyc0xpc3Q7Zm9yKHQ9MCxuPWMubGVuZ3RoO3Q8bjt0KyspaWYocj1pPWNbdF0ubmFtZSxvPWNbdF0udmFsdWUsam8udGVzdChyKSlpZihlLmhhc0JpbmRpbmdzPSEwLChhPXpvKHIpKSYmKHI9ci5yZXBsYWNlKFBvLCIiKSksRG8udGVzdChyKSlyPXIucmVwbGFjZShEbywiIiksbz1fcihvKSxzPSExLGEmJihhLnByb3AmJihzPSEwLCJpbm5lckh0bWwiPT09KHI9ZyhyKSkmJihyPSJpbm5lckhUTUwiKSksYS5jYW1lbCYmKHI9ZyhyKSksYS5zeW5jJiZBcihlLCJ1cGRhdGU6IitnKHIpLEVyKG8sIiRldmVudCIpKSksc3x8IWUuY29tcG9uZW50JiZTbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscik/Q3IoZSxyLG8pOnhyKGUscixvKTtlbHNlIGlmKEVvLnRlc3Qocikpcj1yLnJlcGxhY2UoRW8sIiIpLEFyKGUscixvLGEsITEpO2Vsc2V7dmFyIGw9KHI9ci5yZXBsYWNlKGpvLCIiKSkubWF0Y2goTW8pLHU9bCYmbFsxXTt1JiYocj1yLnNsaWNlKDAsLSh1Lmxlbmd0aCsxKSkpLHA9cixkPWksdj1vLGg9dSxtPWEsKChmPWUpLmRpcmVjdGl2ZXN8fChmLmRpcmVjdGl2ZXM9W10pKS5wdXNoKHtuYW1lOnAscmF3TmFtZTpkLHZhbHVlOnYsYXJnOmgsbW9kaWZpZXJzOm19KSxmLnBsYWluPSExfWVsc2UgeHIoZSxyLEpTT04uc3RyaW5naWZ5KG8pKSwhZS5jb21wb25lbnQmJiJtdXRlZCI9PT1yJiZTbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscikmJkNyKGUsciwidHJ1ZSIpO3ZhciBmLHAsZCx2LGgsbX0oZSl9ZnVuY3Rpb24gVW8oZSl7dmFyIHQ7aWYodD1TcihlLCJ2LWZvciIpKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKE5vKTtpZighdClyZXR1cm47dmFyIG49e307bi5mb3I9dFsyXS50cmltKCk7dmFyIHI9dFsxXS50cmltKCkucmVwbGFjZShJbywiIiksaT1yLm1hdGNoKExvKTtpPyhuLmFsaWFzPXIucmVwbGFjZShMbywiIiksbi5pdGVyYXRvcjE9aVsxXS50cmltKCksaVsyXSYmKG4uaXRlcmF0b3IyPWlbMl0udHJpbSgpKSk6bi5hbGlhcz1yO3JldHVybiBufSh0KTtuJiZtKGUsbil9fWZ1bmN0aW9uIFZvKGUsdCl7ZS5pZkNvbmRpdGlvbnN8fChlLmlmQ29uZGl0aW9ucz1bXSksZS5pZkNvbmRpdGlvbnMucHVzaCh0KX1mdW5jdGlvbiB6byhlKXt2YXIgdD1lLm1hdGNoKFBvKTtpZih0KXt2YXIgbj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZS5zbGljZSgxKV09ITB9KSxufX12YXIgS289L154bWxuczpOU1xkKy8sSm89L15OU1xkKzovO2Z1bmN0aW9uIHFvKGUpe3JldHVybiBSbyhlLnRhZyxlLmF0dHJzTGlzdC5zbGljZSgpLGUucGFyZW50KX12YXIgV289W1hpLFFpLHtwcmVUcmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7aWYoImlucHV0Ij09PWUudGFnKXt2YXIgbixyPWUuYXR0cnNNYXA7aWYoIXJbInYtbW9kZWwiXSlyZXR1cm47aWYoKHJbIjp0eXBlIl18fHJbInYtYmluZDp0eXBlIl0pJiYobj1PcihlLCJ0eXBlIikpLHIudHlwZXx8bnx8IXJbInYtYmluZCJdfHwobj0iKCIrclsidi1iaW5kIl0rIikudHlwZSIpLG4pe3ZhciBpPVNyKGUsInYtaWYiLCEwKSxvPWk/IiYmKCIraSsiKSI6IiIsYT1udWxsIT1TcihlLCJ2LWVsc2UiLCEwKSxzPVNyKGUsInYtZWxzZS1pZiIsITApLGM9cW8oZSk7VW8oYyksa3IoYywidHlwZSIsImNoZWNrYm94IiksQm8oYyx0KSxjLnByb2Nlc3NlZD0hMCxjLmlmPSIoIituKyIpPT09J2NoZWNrYm94JyIrbyxWbyhjLHtleHA6Yy5pZixibG9jazpjfSk7dmFyIGw9cW8oZSk7U3IobCwidi1mb3IiLCEwKSxrcihsLCJ0eXBlIiwicmFkaW8iKSxCbyhsLHQpLFZvKGMse2V4cDoiKCIrbisiKT09PSdyYWRpbyciK28sYmxvY2s6bH0pO3ZhciB1PXFvKGUpO3JldHVybiBTcih1LCJ2LWZvciIsITApLGtyKHUsIjp0eXBlIixuKSxCbyh1LHQpLFZvKGMse2V4cDppLGJsb2NrOnV9KSxhP2MuZWxzZT0hMDpzJiYoYy5lbHNlaWY9cyksY319fX1dO3ZhciBHbyxabyxYbyxZbz17ZXhwZWN0SFRNTDohMCxtb2R1bGVzOldvLGRpcmVjdGl2ZXM6e21vZGVsOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLGMsbCx1LGYscCxkLHYsaCxtLHksZyxfPXQudmFsdWUsYj10Lm1vZGlmaWVycywkPWUudGFnLHc9ZS5hdHRyc01hcC50eXBlO2lmKGUuY29tcG9uZW50KXJldHVybiBUcihlLF8sYiksITE7aWYoInNlbGVjdCI9PT0kKWg9ZSxtPV8sZz0oZz0ndmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSAiX3ZhbHVlIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlO3JldHVybiAnKygoeT1iKSYmeS5udW1iZXI/Il9uKHZhbCkiOiJ2YWwiKSsifSk7IikrIiAiK0VyKG0sIiRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSIpLEFyKGgsImNoYW5nZSIsZyxudWxsLCEwKTtlbHNlIGlmKCJpbnB1dCI9PT0kJiYiY2hlY2tib3giPT09dyljPWUsbD1fLGY9KHU9YikmJnUubnVtYmVyLHA9T3IoYywidmFsdWUiKXx8Im51bGwiLGQ9T3IoYywidHJ1ZS12YWx1ZSIpfHwidHJ1ZSIsdj1PcihjLCJmYWxzZS12YWx1ZSIpfHwiZmFsc2UiLENyKGMsImNoZWNrZWQiLCJBcnJheS5pc0FycmF5KCIrbCsiKT9faSgiK2wrIiwiK3ArIik+LTEiKygidHJ1ZSI9PT1kPyI6KCIrbCsiKSI6IjpfcSgiK2wrIiwiK2QrIikiKSksQXIoYywiY2hhbmdlIiwidmFyICQkYT0iK2wrIiwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQkZWwuY2hlY2tlZD8oIitkKyIpOigiK3YrIik7aWYoQXJyYXkuaXNBcnJheSgkJGEpKXt2YXIgJCR2PSIrKGY/Il9uKCIrcCsiKSI6cCkrIiwkJGk9X2koJCRhLCQkdik7aWYoJCRlbC5jaGVja2VkKXskJGk8MCYmKCIrRXIobCwiJCRhLmNvbmNhdChbJCR2XSkiKSsiKX1lbHNleyQkaT4tMSYmKCIrRXIobCwiJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSkiKSsiKX19ZWxzZXsiK0VyKGwsIiQkYyIpKyJ9IixudWxsLCEwKTtlbHNlIGlmKCJpbnB1dCI9PT0kJiYicmFkaW8iPT09dylyPWUsaT1fLGE9KG89YikmJm8ubnVtYmVyLHM9T3IociwidmFsdWUiKXx8Im51bGwiLENyKHIsImNoZWNrZWQiLCJfcSgiK2krIiwiKyhzPWE/Il9uKCIrcysiKSI6cykrIikiKSxBcihyLCJjaGFuZ2UiLEVyKGkscyksbnVsbCwhMCk7ZWxzZSBpZigiaW5wdXQiPT09JHx8InRleHRhcmVhIj09PSQpIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmF0dHJzTWFwLnR5cGUsaT1ufHx7fSxvPWkubGF6eSxhPWkubnVtYmVyLHM9aS50cmltLGM9IW8mJiJyYW5nZSIhPT1yLGw9bz8iY2hhbmdlIjoicmFuZ2UiPT09cj9QcjoiaW5wdXQiLHU9IiRldmVudC50YXJnZXQudmFsdWUiO3MmJih1PSIkZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKSIpLGEmJih1PSJfbigiK3UrIikiKTt2YXIgZj1Fcih0LHUpO2MmJihmPSJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47IitmKSxDcihlLCJ2YWx1ZSIsIigiK3QrIikiKSxBcihlLGwsZixudWxsLCEwKSwoc3x8YSkmJkFyKGUsImJsdXIiLCIkZm9yY2VVcGRhdGUoKSIpfShlLF8sYik7ZWxzZSBpZighai5pc1Jlc2VydmVkVGFnKCQpKXJldHVybiBUcihlLF8sYiksITE7cmV0dXJuITB9LHRleHQ6ZnVuY3Rpb24oZSx0KXt0LnZhbHVlJiZDcihlLCJ0ZXh0Q29udGVudCIsIl9zKCIrdC52YWx1ZSsiKSIpfSxodG1sOmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmQ3IoZSwiaW5uZXJIVE1MIiwiX3MoIit0LnZhbHVlKyIpIil9fSxpc1ByZVRhZzpmdW5jdGlvbihlKXtyZXR1cm4icHJlIj09PWV9LGlzVW5hcnlUYWc6dG8sbXVzdFVzZVByb3A6U24sY2FuQmVMZWZ0T3BlblRhZzpubyxpc1Jlc2VydmVkVGFnOlVuLGdldFRhZ05hbWVzcGFjZTpWbixzdGF0aWNLZXlzOihHbz1XbyxHby5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQodC5zdGF0aWNLZXlzfHxbXSl9LFtdKS5qb2luKCIsIikpfSxRbz1lKGZ1bmN0aW9uKGUpe3JldHVybiBzKCJ0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzIisoZT8iLCIrZToiIikpfSk7ZnVuY3Rpb24gZWEoZSx0KXtlJiYoWm89UW8odC5zdGF0aWNLZXlzfHwiIiksWG89dC5pc1Jlc2VydmVkVGFnfHxPLGZ1bmN0aW9uIGUodCl7dC5zdGF0aWM9ZnVuY3Rpb24oZSl7aWYoMj09PWUudHlwZSlyZXR1cm4hMTtpZigzPT09ZS50eXBlKXJldHVybiEwO3JldHVybiEoIWUucHJlJiYoZS5oYXNCaW5kaW5nc3x8ZS5pZnx8ZS5mb3J8fGMoZS50YWcpfHwhWG8oZS50YWcpfHxmdW5jdGlvbihlKXtmb3IoO2UucGFyZW50Oyl7aWYoInRlbXBsYXRlIiE9PShlPWUucGFyZW50KS50YWcpcmV0dXJuITE7aWYoZS5mb3IpcmV0dXJuITB9cmV0dXJuITF9KGUpfHwhT2JqZWN0LmtleXMoZSkuZXZlcnkoWm8pKSl9KHQpO2lmKDE9PT10LnR5cGUpe2lmKCFYbyh0LnRhZykmJiJzbG90IiE9PXQudGFnJiZudWxsPT10LmF0dHJzTWFwWyJpbmxpbmUtdGVtcGxhdGUiXSlyZXR1cm47Zm9yKHZhciBuPTAscj10LmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10LmNoaWxkcmVuW25dO2UoaSksaS5zdGF0aWN8fCh0LnN0YXRpYz0hMSl9aWYodC5pZkNvbmRpdGlvbnMpZm9yKHZhciBvPTEsYT10LmlmQ29uZGl0aW9ucy5sZW5ndGg7bzxhO28rKyl7dmFyIHM9dC5pZkNvbmRpdGlvbnNbb10uYmxvY2s7ZShzKSxzLnN0YXRpY3x8KHQuc3RhdGljPSExKX19fShlKSxmdW5jdGlvbiBlKHQsbil7aWYoMT09PXQudHlwZSl7aWYoKHQuc3RhdGljfHx0Lm9uY2UpJiYodC5zdGF0aWNJbkZvcj1uKSx0LnN0YXRpYyYmdC5jaGlsZHJlbi5sZW5ndGgmJigxIT09dC5jaGlsZHJlbi5sZW5ndGh8fDMhPT10LmNoaWxkcmVuWzBdLnR5cGUpKXJldHVybiB2b2lkKHQuc3RhdGljUm9vdD0hMCk7aWYodC5zdGF0aWNSb290PSExLHQuY2hpbGRyZW4pZm9yKHZhciByPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtyPGk7cisrKWUodC5jaGlsZHJlbltyXSxufHwhIXQuZm9yKTtpZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKWUodC5pZkNvbmRpdGlvbnNbb10uYmxvY2ssbil9fShlLCExKSl9dmFyIHRhPS9eKFtcdyRfXSt8XChbXildKj9cKSlccyo9PnxeZnVuY3Rpb25ccypcKC8sbmE9L15bQS1aYS16XyRdW1x3JF0qKD86XC5bQS1aYS16XyRdW1x3JF0qfFxbJ1teJ10qPyddfFxbIlteIl0qPyJdfFxbXGQrXXxcW1tBLVphLXpfJF1bXHckXSpdKSokLyxyYT17ZXNjOjI3LHRhYjo5LGVudGVyOjEzLHNwYWNlOjMyLHVwOjM4LGxlZnQ6MzcscmlnaHQ6MzksZG93bjo0MCxkZWxldGU6WzgsNDZdfSxpYT17ZXNjOiJFc2NhcGUiLHRhYjoiVGFiIixlbnRlcjoiRW50ZXIiLHNwYWNlOiIgIix1cDpbIlVwIiwiQXJyb3dVcCJdLGxlZnQ6WyJMZWZ0IiwiQXJyb3dMZWZ0Il0scmlnaHQ6WyJSaWdodCIsIkFycm93UmlnaHQiXSxkb3duOlsiRG93biIsIkFycm93RG93biJdLGRlbGV0ZTpbIkJhY2tzcGFjZSIsIkRlbGV0ZSJdfSxvYT1mdW5jdGlvbihlKXtyZXR1cm4iaWYoIitlKyIpcmV0dXJuIG51bGw7In0sYWE9e3N0b3A6IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsiLHByZXZlbnQ6IiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyIsc2VsZjpvYSgiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXQiKSxjdHJsOm9hKCIhJGV2ZW50LmN0cmxLZXkiKSxzaGlmdDpvYSgiISRldmVudC5zaGlmdEtleSIpLGFsdDpvYSgiISRldmVudC5hbHRLZXkiKSxtZXRhOm9hKCIhJGV2ZW50Lm1ldGFLZXkiKSxsZWZ0Om9hKCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMCIpLG1pZGRsZTpvYSgiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDEiKSxyaWdodDpvYSgiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDIiKX07ZnVuY3Rpb24gc2EoZSx0LG4pe3ZhciByPXQ/Im5hdGl2ZU9uOnsiOiJvbjp7Ijtmb3IodmFyIGkgaW4gZSlyKz0nIicraSsnIjonK2NhKGksZVtpXSkrIiwiO3JldHVybiByLnNsaWNlKDAsLTEpKyJ9In1mdW5jdGlvbiBjYSh0LGUpe2lmKCFlKXJldHVybiJmdW5jdGlvbigpe30iO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIlsiK2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjYSh0LGUpfSkuam9pbigiLCIpKyJdIjt2YXIgbj1uYS50ZXN0KGUudmFsdWUpLHI9dGEudGVzdChlLnZhbHVlKTtpZihlLm1vZGlmaWVycyl7dmFyIGk9IiIsbz0iIixhPVtdO2Zvcih2YXIgcyBpbiBlLm1vZGlmaWVycylpZihhYVtzXSlvKz1hYVtzXSxyYVtzXSYmYS5wdXNoKHMpO2Vsc2UgaWYoImV4YWN0Ij09PXMpe3ZhciBjPWUubW9kaWZpZXJzO28rPW9hKFsiY3RybCIsInNoaWZ0IiwiYWx0IiwibWV0YSJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hY1tlXX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iJGV2ZW50LiIrZSsiS2V5In0pLmpvaW4oInx8IikpfWVsc2UgYS5wdXNoKHMpO3JldHVybiBhLmxlbmd0aCYmKGkrPSJpZighKCdidXR0b24nIGluICRldmVudCkmJiIrYS5tYXAobGEpLmpvaW4oIiYmIikrIilyZXR1cm4gbnVsbDsiKSxvJiYoaSs9byksImZ1bmN0aW9uKCRldmVudCl7IitpKyhuPyJyZXR1cm4gIitlLnZhbHVlKyIoJGV2ZW50KSI6cj8icmV0dXJuICgiK2UudmFsdWUrIikoJGV2ZW50KSI6ZS52YWx1ZSkrIn0ifXJldHVybiBufHxyP2UudmFsdWU6ImZ1bmN0aW9uKCRldmVudCl7IitlLnZhbHVlKyJ9In1mdW5jdGlvbiBsYShlKXt2YXIgdD1wYXJzZUludChlLDEwKTtpZih0KXJldHVybiIkZXZlbnQua2V5Q29kZSE9PSIrdDt2YXIgbj1yYVtlXSxyPWlhW2VdO3JldHVybiJfaygkZXZlbnQua2V5Q29kZSwiK0pTT04uc3RyaW5naWZ5KGUpKyIsIitKU09OLnN0cmluZ2lmeShuKSsiLCRldmVudC5rZXksIitKU09OLnN0cmluZ2lmeShyKSsiKSJ9dmFyIHVhPXtvbjpmdW5jdGlvbihlLHQpe2Uud3JhcExpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4iX2coIitlKyIsIit0LnZhbHVlKyIpIn19LGJpbmQ6ZnVuY3Rpb24odCxuKXt0LndyYXBEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiJfYigiK2UrIiwnIit0LnRhZysiJywiK24udmFsdWUrIiwiKyhuLm1vZGlmaWVycyYmbi5tb2RpZmllcnMucHJvcD8idHJ1ZSI6ImZhbHNlIikrKG4ubW9kaWZpZXJzJiZuLm1vZGlmaWVycy5zeW5jPyIsdHJ1ZSI6IiIpKyIpIn19LGNsb2FrOiR9LGZhPWZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMud2Fybj1lLndhcm58fCRyLHRoaXMudHJhbnNmb3Jtcz13cihlLm1vZHVsZXMsInRyYW5zZm9ybUNvZGUiKSx0aGlzLmRhdGFHZW5GbnM9d3IoZS5tb2R1bGVzLCJnZW5EYXRhIiksdGhpcy5kaXJlY3RpdmVzPW0obSh7fSx1YSksZS5kaXJlY3RpdmVzKTt2YXIgdD1lLmlzUmVzZXJ2ZWRUYWd8fE87dGhpcy5tYXliZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4hdChlLnRhZyl9LHRoaXMub25jZUlkPTAsdGhpcy5zdGF0aWNSZW5kZXJGbnM9W119O2Z1bmN0aW9uIHBhKGUsdCl7dmFyIG49bmV3IGZhKHQpO3JldHVybntyZW5kZXI6IndpdGgodGhpcyl7cmV0dXJuICIrKGU/ZGEoZSxuKTonX2MoImRpdiIpJykrIn0iLHN0YXRpY1JlbmRlckZuczpuLnN0YXRpY1JlbmRlckZuc319ZnVuY3Rpb24gZGEoZSx0KXtpZihlLnN0YXRpY1Jvb3QmJiFlLnN0YXRpY1Byb2Nlc3NlZClyZXR1cm4gdmEoZSx0KTtpZihlLm9uY2UmJiFlLm9uY2VQcm9jZXNzZWQpcmV0dXJuIGhhKGUsdCk7aWYoZS5mb3ImJiFlLmZvclByb2Nlc3NlZClyZXR1cm4gZj10LHY9KHU9ZSkuZm9yLGg9dS5hbGlhcyxtPXUuaXRlcmF0b3IxPyIsIit1Lml0ZXJhdG9yMToiIix5PXUuaXRlcmF0b3IyPyIsIit1Lml0ZXJhdG9yMjoiIix1LmZvclByb2Nlc3NlZD0hMCwoZHx8Il9sIikrIigoIit2KyIpLGZ1bmN0aW9uKCIraCttK3krIil7cmV0dXJuICIrKHB8fGRhKSh1LGYpKyJ9KSI7aWYoZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIG1hKGUsdCk7aWYoInRlbXBsYXRlIiE9PWUudGFnfHxlLnNsb3RUYXJnZXQpe2lmKCJzbG90Ij09PWUudGFnKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2xvdE5hbWV8fCciZGVmYXVsdCInLHI9X2EoZSx0KSxpPSJfdCgiK24rKHI/IiwiK3I6IiIpLG89ZS5hdHRycyYmInsiK2UuYXR0cnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnKGUubmFtZSkrIjoiK2UudmFsdWV9KS5qb2luKCIsIikrIn0iLGE9ZS5hdHRyc01hcFsidi1iaW5kIl07IW8mJiFhfHxyfHwoaSs9IixudWxsIik7byYmKGkrPSIsIitvKTthJiYoaSs9KG8/IiI6IixudWxsIikrIiwiK2EpO3JldHVybiBpKyIpIn0oZSx0KTt2YXIgbjtpZihlLmNvbXBvbmVudClhPWUuY29tcG9uZW50LGM9dCxsPShzPWUpLmlubGluZVRlbXBsYXRlP251bGw6X2EocyxjLCEwKSxuPSJfYygiK2ErIiwiK3lhKHMsYykrKGw/IiwiK2w6IiIpKyIpIjtlbHNle3ZhciByPWUucGxhaW4/dm9pZCAwOnlhKGUsdCksaT1lLmlubGluZVRlbXBsYXRlP251bGw6X2EoZSx0LCEwKTtuPSJfYygnIitlLnRhZysiJyIrKHI/IiwiK3I6IiIpKyhpPyIsIitpOiIiKSsiKSJ9Zm9yKHZhciBvPTA7bzx0LnRyYW5zZm9ybXMubGVuZ3RoO28rKyluPXQudHJhbnNmb3Jtc1tvXShlLG4pO3JldHVybiBufXJldHVybiBfYShlLHQpfHwidm9pZCAwIjt2YXIgYSxzLGMsbCx1LGYscCxkLHYsaCxtLHl9ZnVuY3Rpb24gdmEoZSx0KXtyZXR1cm4gZS5zdGF0aWNQcm9jZXNzZWQ9ITAsdC5zdGF0aWNSZW5kZXJGbnMucHVzaCgid2l0aCh0aGlzKXtyZXR1cm4gIitkYShlLHQpKyJ9IiksIl9tKCIrKHQuc3RhdGljUmVuZGVyRm5zLmxlbmd0aC0xKSsoZS5zdGF0aWNJbkZvcj8iLHRydWUiOiIiKSsiKSJ9ZnVuY3Rpb24gaGEoZSx0KXtpZihlLm9uY2VQcm9jZXNzZWQ9ITAsZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIG1hKGUsdCk7aWYoZS5zdGF0aWNJbkZvcil7Zm9yKHZhciBuPSIiLHI9ZS5wYXJlbnQ7cjspe2lmKHIuZm9yKXtuPXIua2V5O2JyZWFrfXI9ci5wYXJlbnR9cmV0dXJuIG4/Il9vKCIrZGEoZSx0KSsiLCIrdC5vbmNlSWQrKysiLCIrbisiKSI6ZGEoZSx0KX1yZXR1cm4gdmEoZSx0KX1mdW5jdGlvbiBtYShlLHQsbixyKXtyZXR1cm4gZS5pZlByb2Nlc3NlZD0hMCxmdW5jdGlvbiBlKHQsbixyLGkpe2lmKCF0Lmxlbmd0aClyZXR1cm4gaXx8Il9lKCkiO3ZhciBvPXQuc2hpZnQoKTtyZXR1cm4gby5leHA/IigiK28uZXhwKyIpPyIrYShvLmJsb2NrKSsiOiIrZSh0LG4scixpKToiIithKG8uYmxvY2spO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIHI/cihlLG4pOmUub25jZT9oYShlLG4pOmRhKGUsbil9fShlLmlmQ29uZGl0aW9ucy5zbGljZSgpLHQsbixyKX1mdW5jdGlvbiB5YShlLHQpe3ZhciBuLHIsaT0ieyIsbz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZGlyZWN0aXZlcztpZighbilyZXR1cm47dmFyIHIsaSxvLGEscz0iZGlyZWN0aXZlczpbIixjPSExO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXtvPW5bcl0sYT0hMDt2YXIgbD10LmRpcmVjdGl2ZXNbby5uYW1lXTtsJiYoYT0hIWwoZSxvLHQud2FybikpLGEmJihjPSEwLHMrPSd7bmFtZToiJytvLm5hbWUrJyIscmF3TmFtZToiJytvLnJhd05hbWUrJyInKyhvLnZhbHVlPyIsdmFsdWU6KCIrby52YWx1ZSsiKSxleHByZXNzaW9uOiIrSlNPTi5zdHJpbmdpZnkoby52YWx1ZSk6IiIpKyhvLmFyZz8nLGFyZzoiJytvLmFyZysnIic6IiIpKyhvLm1vZGlmaWVycz8iLG1vZGlmaWVyczoiK0pTT04uc3RyaW5naWZ5KG8ubW9kaWZpZXJzKToiIikrIn0sIil9aWYoYylyZXR1cm4gcy5zbGljZSgwLC0xKSsiXSJ9KGUsdCk7byYmKGkrPW8rIiwiKSxlLmtleSYmKGkrPSJrZXk6IitlLmtleSsiLCIpLGUucmVmJiYoaSs9InJlZjoiK2UucmVmKyIsIiksZS5yZWZJbkZvciYmKGkrPSJyZWZJbkZvcjp0cnVlLCIpLGUucHJlJiYoaSs9InByZTp0cnVlLCIpLGUuY29tcG9uZW50JiYoaSs9J3RhZzoiJytlLnRhZysnIiwnKTtmb3IodmFyIGE9MDthPHQuZGF0YUdlbkZucy5sZW5ndGg7YSsrKWkrPXQuZGF0YUdlbkZuc1thXShlKTtpZihlLmF0dHJzJiYoaSs9ImF0dHJzOnsiK3dhKGUuYXR0cnMpKyJ9LCIpLGUucHJvcHMmJihpKz0iZG9tUHJvcHM6eyIrd2EoZS5wcm9wcykrIn0sIiksZS5ldmVudHMmJihpKz1zYShlLmV2ZW50cywhMSx0Lndhcm4pKyIsIiksZS5uYXRpdmVFdmVudHMmJihpKz1zYShlLm5hdGl2ZUV2ZW50cywhMCx0Lndhcm4pKyIsIiksZS5zbG90VGFyZ2V0JiYhZS5zbG90U2NvcGUmJihpKz0ic2xvdDoiK2Uuc2xvdFRhcmdldCsiLCIpLGUuc2NvcGVkU2xvdHMmJihpKz0obj1lLnNjb3BlZFNsb3RzLHI9dCwic2NvcGVkU2xvdHM6X3UoWyIrT2JqZWN0LmtleXMobikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnYShlLG5bZV0scil9KS5qb2luKCIsIikrIl0pLCIpKSxlLm1vZGVsJiYoaSs9Im1vZGVsOnt2YWx1ZToiK2UubW9kZWwudmFsdWUrIixjYWxsYmFjazoiK2UubW9kZWwuY2FsbGJhY2srIixleHByZXNzaW9uOiIrZS5tb2RlbC5leHByZXNzaW9uKyJ9LCIpLGUuaW5saW5lVGVtcGxhdGUpe3ZhciBzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGlsZHJlblswXTtpZigxPT09bi50eXBlKXt2YXIgcj1wYShuLHQub3B0aW9ucyk7cmV0dXJuImlubGluZVRlbXBsYXRlOntyZW5kZXI6ZnVuY3Rpb24oKXsiK3IucmVuZGVyKyJ9LHN0YXRpY1JlbmRlckZuczpbIityLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uKCl7IitlKyJ9In0pLmpvaW4oIiwiKSsiXX0ifX0oZSx0KTtzJiYoaSs9cysiLCIpfXJldHVybiBpPWkucmVwbGFjZSgvLCQvLCIiKSsifSIsZS53cmFwRGF0YSYmKGk9ZS53cmFwRGF0YShpKSksZS53cmFwTGlzdGVuZXJzJiYoaT1lLndyYXBMaXN0ZW5lcnMoaSkpLGl9ZnVuY3Rpb24gZ2EoZSx0LG4pe3JldHVybiB0LmZvciYmIXQuZm9yUHJvY2Vzc2VkPyhyPWUsbz1uLGE9KGk9dCkuZm9yLHM9aS5hbGlhcyxjPWkuaXRlcmF0b3IxPyIsIitpLml0ZXJhdG9yMToiIixsPWkuaXRlcmF0b3IyPyIsIitpLml0ZXJhdG9yMjoiIixpLmZvclByb2Nlc3NlZD0hMCwiX2woKCIrYSsiKSxmdW5jdGlvbigiK3MrYytsKyIpe3JldHVybiAiK2dhKHIsaSxvKSsifSkiKToie2tleToiK2UrIixmbjoiKygiZnVuY3Rpb24oIitTdHJpbmcodC5zbG90U2NvcGUpKyIpe3JldHVybiAiKygidGVtcGxhdGUiPT09dC50YWc/dC5pZj90LmlmKyI/IisoX2EodCxuKXx8InVuZGVmaW5lZCIpKyI6dW5kZWZpbmVkIjpfYSh0LG4pfHwidW5kZWZpbmVkIjpkYSh0LG4pKSsifSIpKyJ9Ijt2YXIgcixpLG8sYSxzLGMsbH1mdW5jdGlvbiBfYShlLHQsbixyLGkpe3ZhciBvPWUuY2hpbGRyZW47aWYoby5sZW5ndGgpe3ZhciBhPW9bMF07aWYoMT09PW8ubGVuZ3RoJiZhLmZvciYmInRlbXBsYXRlIiE9PWEudGFnJiYic2xvdCIhPT1hLnRhZylyZXR1cm4ocnx8ZGEpKGEsdCk7dmFyIHM9bj9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpZigxPT09aS50eXBlKXtpZihiYShpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGJhKGUuYmxvY2spfSkpe249MjticmVha30odChpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5ibG9jayl9KSkmJihuPTEpfX1yZXR1cm4gbn0obyx0Lm1heWJlQ29tcG9uZW50KTowLGM9aXx8JGE7cmV0dXJuIlsiK28ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUsdCl9KS5qb2luKCIsIikrIl0iKyhzPyIsIitzOiIiKX19ZnVuY3Rpb24gYmEoZSl7cmV0dXJuIHZvaWQgMCE9PWUuZm9yfHwidGVtcGxhdGUiPT09ZS50YWd8fCJzbG90Ij09PWUudGFnfWZ1bmN0aW9uICRhKGUsdCl7cmV0dXJuIDE9PT1lLnR5cGU/ZGEoZSx0KTozPT09ZS50eXBlJiZlLmlzQ29tbWVudD8ocj1lLCJfZSgiK0pTT04uc3RyaW5naWZ5KHIudGV4dCkrIikiKToiX3YoIisoMj09PShuPWUpLnR5cGU/bi5leHByZXNzaW9uOkNhKEpTT04uc3RyaW5naWZ5KG4udGV4dCkpKSsiKSI7dmFyIG4scn1mdW5jdGlvbiB3YShlKXtmb3IodmFyIHQ9IiIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3QrPSciJytyLm5hbWUrJyI6JytDYShyLnZhbHVlKSsiLCJ9cmV0dXJuIHQuc2xpY2UoMCwtMSl9ZnVuY3Rpb24gQ2EoZSl7cmV0dXJuIGUucmVwbGFjZSgvXHUyMDI4L2csIlxcdTIwMjgiKS5yZXBsYWNlKC9cdTIwMjkvZywiXFx1MjAyOSIpfW5ldyBSZWdFeHAoIlxcYiIrImRvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3Qsc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LGV4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHMiLnNwbGl0KCIsIikuam9pbigiXFxifFxcYiIpKyJcXGIiKSxuZXcgUmVnRXhwKCJcXGIiKyJkZWxldGUsdHlwZW9mLHZvaWQiLnNwbGl0KCIsIikuam9pbigiXFxzKlxcKFteXFwpXSpcXCl8XFxiIikrIlxccypcXChbXlxcKV0qXFwpIik7ZnVuY3Rpb24geGEodCxuKXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbih0KX1jYXRjaChlKXtyZXR1cm4gbi5wdXNoKHtlcnI6ZSxjb2RlOnR9KSwkfX12YXIga2EsQWEsT2E9KGthPWZ1bmN0aW9uKGUsdCl7dmFyIG49SG8oZS50cmltKCksdCk7ITEhPT10Lm9wdGltaXplJiZlYShuLHQpO3ZhciByPXBhKG4sdCk7cmV0dXJue2FzdDpuLHJlbmRlcjpyLnJlbmRlcixzdGF0aWNSZW5kZXJGbnM6ci5zdGF0aWNSZW5kZXJGbnN9fSxmdW5jdGlvbihzKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShzKSxyPVtdLGk9W107aWYobi53YXJuPWZ1bmN0aW9uKGUsdCl7KHQ/aTpyKS5wdXNoKGUpfSx0KWZvcih2YXIgbyBpbiB0Lm1vZHVsZXMmJihuLm1vZHVsZXM9KHMubW9kdWxlc3x8W10pLmNvbmNhdCh0Lm1vZHVsZXMpKSx0LmRpcmVjdGl2ZXMmJihuLmRpcmVjdGl2ZXM9bShPYmplY3QuY3JlYXRlKHMuZGlyZWN0aXZlc3x8bnVsbCksdC5kaXJlY3RpdmVzKSksdCkibW9kdWxlcyIhPT1vJiYiZGlyZWN0aXZlcyIhPT1vJiYobltvXT10W29dKTt2YXIgYT1rYShlLG4pO3JldHVybiBhLmVycm9ycz1yLGEudGlwcz1pLGF9cmV0dXJue2NvbXBpbGU6ZSxjb21waWxlVG9GdW5jdGlvbnM6KGM9ZSxsPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oZSx0LG4peyh0PW0oe30sdCkpLndhcm4sZGVsZXRlIHQud2Fybjt2YXIgcj10LmRlbGltaXRlcnM/U3RyaW5nKHQuZGVsaW1pdGVycykrZTplO2lmKGxbcl0pcmV0dXJuIGxbcl07dmFyIGk9YyhlLHQpLG89e30sYT1bXTtyZXR1cm4gby5yZW5kZXI9eGEoaS5yZW5kZXIsYSksby5zdGF0aWNSZW5kZXJGbnM9aS5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB4YShlLGEpfSksbFtyXT1vfSl9O3ZhciBjLGx9KShZbykuY29tcGlsZVRvRnVuY3Rpb25zO2Z1bmN0aW9uIFNhKGUpe3JldHVybihBYT1BYXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1lPyc8YSBocmVmPSJcbiIvPic6JzxkaXYgYT0iXG4iLz4nLDA8QWEuaW5uZXJIVE1MLmluZGV4T2YoIiYjMTA7Iil9dmFyIFRhPSEhQiYmU2EoITEpLEVhPSEhQiYmU2EoITApLGphPWUoZnVuY3Rpb24oZSl7dmFyIHQ9Sm4oZSk7cmV0dXJuIHQmJnQuaW5uZXJIVE1MfSksTmE9aG4ucHJvdG90eXBlLiRtb3VudDtyZXR1cm4gaG4ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe2lmKChlPWUmJkpuKGUpKT09PWRvY3VtZW50LmJvZHl8fGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy4kb3B0aW9ucztpZighbi5yZW5kZXIpe3ZhciByPW4udGVtcGxhdGU7aWYocilpZigic3RyaW5nIj09dHlwZW9mIHIpIiMiPT09ci5jaGFyQXQoMCkmJihyPWphKHIpKTtlbHNle2lmKCFyLm5vZGVUeXBlKXJldHVybiB0aGlzO3I9ci5pbm5lckhUTUx9ZWxzZSBlJiYocj1mdW5jdGlvbihlKXt7aWYoZS5vdXRlckhUTUwpcmV0dXJuIGUub3V0ZXJIVE1MO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmFwcGVuZENoaWxkKGUuY2xvbmVOb2RlKCEwKSksdC5pbm5lckhUTUx9fShlKSk7aWYocil7dmFyIGk9T2Eocix7c2hvdWxkRGVjb2RlTmV3bGluZXM6VGEsc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOkVhLGRlbGltaXRlcnM6bi5kZWxpbWl0ZXJzLGNvbW1lbnRzOm4uY29tbWVudHN9LHRoaXMpLG89aS5yZW5kZXIsYT1pLnN0YXRpY1JlbmRlckZucztuLnJlbmRlcj1vLG4uc3RhdGljUmVuZGVyRm5zPWF9fXJldHVybiBOYS5jYWxsKHRoaXMsZSx0KX0saG4uY29tcGlsZT1PYSxobn0pOw=='></script>   

		<style id="style_yokkmokk">
			@font-face {
				font-family: yokkmokkOT;
				src: url("data:font/ttf;base64,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AEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgCjAFcAWABZAJYAWgChAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwANAJwAnQCeAJ8AoAChAAAAAAAQAAAAqAkIBQABAQMCAwQFAwMEAgQCBQQCAwMDAwQDAgQCAgMEAwIGAwgFBAQEBAIEBAMGBQQEBQQCAwMEBgUEAwICAgQDBgQEAgQFAgQEAgYEAwQEBAICAwMGBQQDAwMFAgICBgYGBgYGCAgEBAQCAgIFBAQEBAQEAwMDAwMEBAQEBAQHBgQEBAICAgQDAwMDAwMDAwMDCAYCAgICAgIBAgIEAgICBgUBBQUAAAoJBQABAQMCBAUGAwMFAgQCBQUCBAMDBAUDAgQCAgMEAwMHAwkGBAQFBAIEBAMHBgUEBgQCBAQEBwUEAwICAwUDBwUEAgUGAgQEAgYFAwUFBQICAwMGBQQDAwMGAwIDBwcHBwcHCQkEBAQCAgIGBQUFBQUFBAQEBAMFBQUFBQUIBwQEBAICAgUDAwMDAwQDAwMDCAcDAwICAgIBAgIEAgICBwUBBQUAAAsKBgACAgQCBAUGAwMFAgQCBgUDBAQEBAUEAwUDAgMEAwMIAwoGBQUFBQIEBQMHBgUEBgUDBAQECAYFAwIDAwUDCAUFAwUGAgQEAgcFBAUFBQMDAwMHBgUDBAQGAwIDCAgICAgICQoFBQUCAgIGBQUFBQUFBAQEBAMFBQUFBQUJCAUFBQICAgUEBAQEBAQDAwMDCQgDAwICAwIBAgIEAgICBwYBBgYAAAwLBgACAgQDBAYHBAQGAgUDBgYDBQQEBAUEAwUDAwQFBAMIAwsHBQUFBQIFBQQIBwYFBwUDBQUFCAYFAwMDAwYDCQYFAwUHAgUFAggGBAYGBgMDBAQHBgUDBAQHAwMDCAgICAgICgsFBQUCAgIHBgYGBgYGBQUFBQMGBgYGBgYJCQUFBQICAgYEBAQEBAQEBAQECggDAwMDAwIBAwMFAwMDCAYBBgYAAA0MBwACAgQDBQYHBAQGAwUDBwYDBQQFBQYEAwYDAwQFBAMJBAwIBgYGBQMFBgQJBwYFCAUDBQUFCQcFBAMDAwYECQYGAwYIAwUFAggGBQYGBgMDBAQIBwYEBAQHAwMDCQkJCQkJCwwGBgYDAwMHBgYGBgYGBQUFBQQGBgYGBgYKCQYGBgMDAwYFBQUFBQUEBAQECwkDAwMDAwIBAwMFAwMDCQcCBwcAAA4NBwACAgUDBQcIBAQHAwUDBwcDBQUFBQYFAwYDAwQFBAQKBAwIBgYGBgMGBgQJCAcGCAYDBQUGCggGBAMDBAcECgcGAwYIAwYGAwkHBQcHBwMDBAQJBwYEBQUIBAMECgoKCgoKDA0GBgYDAwMIBwcHBwcHBQUFBQQHBwcHBwcLCgYGBgMDAwcFBQUFBQUEBAQEDAoEBAMDAwMBAwMGAwMDCQcCBwcAAA8OCAACAgUDBgcIBQUHAwYDCAcDBgUFBQcFBAcEAwUGBQQLBA0JBwcHBgMGBwUKCAcGCQYEBgYGCggGBAMEBAcECwcHBAcJAwYGAwkHBQcHBwQDBQUJCAYEBQUJBAMECwsLCwsLDQ4HBwcDAwMIBwcHBwcHBgYGBgQHBwcHBwcMCwcHBwMDAwcFBQUFBQUFBQUFDQoEBAMDBAMCAwMGAwMDCggCCAgAABAPCAACAgUEBggJBQUIAwYECAgEBgUGBgcFBAcEBAUGBQQLBQ4JBwcHBwMGBwULCQgGCQcEBgYGCwkHBAQEBAgFCwgHBAcJAwcGAwoHBggIBwQEBQUKCAcEBQUJBAMECwsLCwsLDg8HBwcDAwMJCAgICAgIBgYGBgUICAgICAgNCwcHBwMDAwcGBgYGBgYFBQUFDgsEBAQEBAMCAwMGBAQECwgCCAgAABEQCQACAgYEBggJBQUIAwcECQgEBwYGBggGBAcEBAUHBQUMBQ8KBwcIBwMHCAULCggHCgcEBgYHDAkHBQQEBAgFDAgHBAgKAwcHAwsIBggICAQEBQUKCQcFBgYKBAQFDAwMDAwMDxAHCAcDAwMKCAgICAgIBgYGBgUICAgICAgNDAcHBwMDAwgGBgYGBgYFBQUFDgwFBQQEBAMCBAQHBAQECwkCCQkAABIQCQADAwYEBwkKBgYJBAcECQkEBwYGBggGBAgEBAYHBgUNBRAKCAgICAQHCAUMCgkHCwcEBwcHDQoIBQQEBQkFDQkIBAgKBAcHAwsIBgkJCAQEBQYLCQgFBgYKBQQFDQ0NDQ0NDxAICAgEBAQKCQkJCQkJBwcHBwUJCQkJCQkODQgICAQEBAgGBgYGBgYFBQUFDwwFBQQEBAMCBAQHBAQEDAkCCQkAABMRCgADAwYEBwkLBgYJBAcECgkEBwYHBwkGBAgFBAYHBgUNBhELCAgJCAQICAYNCwkICwgEBwcIDQoIBQQFBQkFDQkIBAkLBAgIBAwJBwkJCQQEBgYMCggFBgYLBQQFDQ0NDQ0NEBEICAgEBAQLCQkJCQkJBwcHBwUJCQkJCQkPDQgICAQEBAkHBwcHBwcGBgYGEA0FBQQEBQQCBAQIBAQEDQoCCgoAABQSCgADAwcEBwoLBgYKBAgECgoFCAcHBwkHBQkFBAYIBgUOBhIMCQkJCAQICQYNCwoIDAgFCAgIDgsIBgUFBQoGDgoJBQkMBAgIBA0JBwoKCQUFBgYMCgkGBwcLBQQFDg4ODg4OERIJCQkEBAQLCgoKCgoKCAgICAYKCgoKCgoQDgkJCQQEBAkHBwcHBwcGBgYGEQ4FBQUFBQQCBAQIBQUEDgoCCgoAABUTCwADAwcFCAoMBgYKBAgFCwoFCAcHBwoHBQkFBQYIBgYPBhMMCQkJCQQJCQYODAoIDAkFCAgIDwsJBgUFBQoGDwoJBQoMBAkIBA0KBwoKCgUFBgcNCwkGBwcMBQQGDw8PDw8PEhMJCQkEBAQMCgoKCgoKCAgICAYKCgoKCgoRDwkJCQQEBAoHBwcHBwcGBgYGEg4GBgUFBQQCBAQIBQUFDgsDCwsAABYUCwADAwcFCAsMBwcLBAkFCwoFCAcICAoHBQoFBQcJBwYPBhQNCgoKCQQJCgcPDAoJDQkFCAgJDwwJBgUFBgsGEAsKBQoNBAkJBA4KCAsLCgUFBwcOCwkGBwcNBgUGDw8PDw8PExQKCgoEBAQMCgoKCgoLCAgICAYLCwsLCwsREAoKCgQEBAoICAgICAgHBwcHEw8GBgUFBQQCBQUJBQUFDwsDCwsAABcVDAADAwcFCQsNBwcLBQkFDAsFCQcICAsIBQoGBQcJBwYQBxQNCgoKCgUJCgcPDQsJDQoFCQkJEAwKBgUGBgsHEAsKBQoNBQkJBA4LCAsLCwUFBwcODAoGBwgNBgUGEBAQEBAQFBUKCgoFBQUNCwsLCwsLCQkJCQcLCwsLCwsSEAoKCgUFBQsICAgICAgHBwcHFBAGBgUFBgQCBQUJBQUFEAwDDAwAABgWDAADAwgFCQwNBwcMBQkFDAsGCQgICAsIBgoGBQcJBwYRBxUOCgoLCgUKCwcQDgsKDgoGCQkKEQ0KBwUGBgsHEQwKBgsOBQoKBA8LCAwMCwYGBwgPDAoHCAgOBgUGERERERERFRYKCwoFBQUOCwsLCwsMCQkJCQcLCwsLCwsTEQoKCgUFBQsICAgICAgHBwcHFBEGBgUFBgQCBQUKBQUFEAwDDAwAAAABAV0BkAAFAAICvAKKAAAAjwK8AooAAAHFADIBAwAAAAAEAAAAAAAAAAAAAAMAAAAAAAAAAAAAAABNQUNSAEAAICIZAyH/OQAAAyEAxwAAAAEAAAAAAAAAAQAAgAAAAACLAT8AAGAAAbQCdVlva2ttb2trICAgICAgICD/////N////llPS1IwMAAAAAAAAAABAAAAAQAAmJpL9V8PPPUAAAPoAAAAALfnFZIAAAAAt+cVkv+2/zkDawMhAAAAAwACAAEAAAAAAAEAAAMh/zkAAAOQ/7b/uANrAAEAAAAAAAAAAAAAAAAAAACkAAEAAACkAJgADQAAAAAAAgAIAEAACgAAAF0AvgABAAE=");
				}
			@font-face {
				font-family: 'yokkmokkOT_file';
				src: url('./fonts/yokkmokkOT.otf'); /* IE 5-8 */ 
				src: local('?'),             /* sneakily trick IE */
			        url('./fonts/yokkmokk.ttf') format('truetype'), /* Opera, Safari */
			        url('./fonts/yokkmokkOT.woff') format('woff'),    /* FF 3.6, Chrome 5, IE9 */
			        url('./fonts/yokkmokkOT.svg#font') format('svg'); /* iOS */
				}

			body { 
//				font-family: yokkmokkOT;
//				document.getElementById("body").style.font = "italic bold 20px arial,serif"; 
//				background: url("data:font/ttf;base64,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AEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgCjAFcAWABZAJYAWgChAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwANAJwAnQCeAJ8AoAChAAAAAAAQAAAAqAkIBQABAQMCAwQFAwMEAgQCBQQCAwMDAwQDAgQCAgMEAwIGAwgFBAQEBAIEBAMGBQQEBQQCAwMEBgUEAwICAgQDBgQEAgQFAgQEAgYEAwQEBAICAwMGBQQDAwMFAgICBgYGBgYGCAgEBAQCAgIFBAQEBAQEAwMDAwMEBAQEBAQHBgQEBAICAgQDAwMDAwMDAwMDCAYCAgICAgIBAgIEAgICBgUBBQUAAAoJBQABAQMCBAUGAwMFAgQCBQUCBAMDBAUDAgQCAgMEAwMHAwkGBAQFBAIEBAMHBgUEBgQCBAQEBwUEAwICAwUDBwUEAgUGAgQEAgYFAwUFBQICAwMGBQQDAwMGAwIDBwcHBwcHCQkEBAQCAgIGBQUFBQUFBAQEBAMFBQUFBQUIBwQEBAICAgUDAwMDAwQDAwMDCAcDAwICAgIBAgIEAgICBwUBBQUAAAsKBgACAgQCBAUGAwMFAgQCBgUDBAQEBAUEAwUDAgMEAwMIAwoGBQUFBQIEBQMHBgUEBgUDBAQECAYFAwIDAwUDCAUFAwUGAgQEAgcFBAUFBQMDAwMHBgUDBAQGAwIDCAgICAgICQoFBQUCAgIGBQUFBQUFBAQEBAMFBQUFBQUJCAUFBQICAgUEBAQEBAQDAwMDCQgDAwICAwIBAgIEAgICBwYBBgYAAAwLBgACAgQDBAYHBAQGAgUDBgYDBQQEBAUEAwUDAwQFBAMIAwsHBQUFBQIFBQQIBwYFBwUDBQUFCAYFAwMDAwYDCQYFAwUHAgUFAggGBAYGBgMDBAQHBgUDBAQHAwMDCAgICAgICgsFBQUCAgIHBgYGBgYGBQUFBQMGBgYGBgYJCQUFBQICAgYEBAQEBAQEBAQECggDAwMDAwIBAwMFAwMDCAYBBgYAAA0MBwACAgQDBQYHBAQGAwUDBwYDBQQFBQYEAwYDAwQFBAMJBAwIBgYGBQMFBgQJBwYFCAUDBQUFCQcFBAMDAwYECQYGAwYIAwUFAggGBQYGBgMDBAQIBwYEBAQHAwMDCQkJCQkJCwwGBgYDAwMHBgYGBgYGBQUFBQQGBgYGBgYKCQYGBgMDAwYFBQUFBQUEBAQECwkDAwMDAwIBAwMFAwMDCQcCBwcAAA4NBwACAgUDBQcIBAQHAwUDBwcDBQUFBQYFAwYDAwQFBAQKBAwIBgYGBgMGBgQJCAcGCAYDBQUGCggGBAMDBAcECgcGAwYIAwYGAwkHBQcHBwMDBAQJBwYEBQUIBAMECgoKCgoKDA0GBgYDAwMIBwcHBwcHBQUFBQQHBwcHBwcLCgYGBgMDAwcFBQUFBQUEBAQEDAoEBAMDAwMBAwMGAwMDCQcCBwcAAA8OCAACAgUDBgcIBQUHAwYDCAcDBgUFBQcFBAcEAwUGBQQLBA0JBwcHBgMGBwUKCAcGCQYEBgYGCggGBAMEBAcECwcHBAcJAwYGAwkHBQcHBwQDBQUJCAYEBQUJBAMECwsLCwsLDQ4HBwcDAwMIBwcHBwcHBgYGBgQHBwcHBwcMCwcHBwMDAwcFBQUFBQUFBQUFDQoEBAMDBAMCAwMGAwMDCggCCAgAABAPCAACAgUEBggJBQUIAwYECAgEBgUGBgcFBAcEBAUGBQQLBQ4JBwcHBwMGBwULCQgGCQcEBgYGCwkHBAQEBAgFCwgHBAcJAwcGAwoHBggIBwQEBQUKCAcEBQUJBAMECwsLCwsLDg8HBwcDAwMJCAgICAgIBgYGBgUICAgICAgNCwcHBwMDAwcGBgYGBgYFBQUFDgsEBAQEBAMCAwMGBAQECwgCCAgAABEQCQACAgYEBggJBQUIAwcECQgEBwYGBggGBAcEBAUHBQUMBQ8KBwcIBwMHCAULCggHCgcEBgYHDAkHBQQEBAgFDAgHBAgKAwcHAwsIBggICAQEBQUKCQcFBgYKBAQFDAwMDAwMDxAHCAcDAwMKCAgICAgIBgYGBgUICAgICAgNDAcHBwMDAwgGBgYGBgYFBQUFDgwFBQQEBAMCBAQHBAQECwkCCQkAABIQCQADAwYEBwkKBgYJBAcECQkEBwYGBggGBAgEBAYHBgUNBRAKCAgICAQHCAUMCgkHCwcEBwcHDQoIBQQEBQkFDQkIBAgKBAcHAwsIBgkJCAQEBQYLCQgFBgYKBQQFDQ0NDQ0NDxAICAgEBAQKCQkJCQkJBwcHBwUJCQkJCQkODQgICAQEBAgGBgYGBgYFBQUFDwwFBQQEBAMCBAQHBAQEDAkCCQkAABMRCgADAwYEBwkLBgYJBAcECgkEBwYHBwkGBAgFBAYHBgUNBhELCAgJCAQICAYNCwkICwgEBwcIDQoIBQQFBQkFDQkIBAkLBAgIBAwJBwkJCQQEBgYMCggFBgYLBQQFDQ0NDQ0NEBEICAgEBAQLCQkJCQkJBwcHBwUJCQkJCQkPDQgICAQEBAkHBwcHBwcGBgYGEA0FBQQEBQQCBAQIBAQEDQoCCgoAABQSCgADAwcEBwoLBgYKBAgECgoFCAcHBwkHBQkFBAYIBgUOBhIMCQkJCAQICQYNCwoIDAgFCAgIDgsIBgUFBQoGDgoJBQkMBAgIBA0JBwoKCQUFBgYMCgkGBwcLBQQFDg4ODg4OERIJCQkEBAQLCgoKCgoKCAgICAYKCgoKCgoQDgkJCQQEBAkHBwcHBwcGBgYGEQ4FBQUFBQQCBAQIBQUEDgoCCgoAABUTCwADAwcFCAoMBgYKBAgFCwoFCAcHBwoHBQkFBQYIBgYPBhMMCQkJCQQJCQYODAoIDAkFCAgIDwsJBgUFBQoGDwoJBQoMBAkIBA0KBwoKCgUFBgcNCwkGBwcMBQQGDw8PDw8PEhMJCQkEBAQMCgoKCgoKCAgICAYKCgoKCgoRDwkJCQQEBAoHBwcHBwcGBgYGEg4GBgUFBQQCBAQIBQUFDgsDCwsAABYUCwADAwcFCAsMBwcLBAkFCwoFCAcICAoHBQoFBQcJBwYPBhQNCgoKCQQJCgcPDAoJDQkFCAgJDwwJBgUFBgsGEAsKBQoNBAkJBA4KCAsLCgUFBwcOCwkGBwcNBgUGDw8PDw8PExQKCgoEBAQMCgoKCgoLCAgICAYLCwsLCwsREAoKCgQEBAoICAgICAgHBwcHEw8GBgUFBQQCBQUJBQUFDwsDCwsAABcVDAADAwcFCQsNBwcLBQkFDAsFCQcICAsIBQoGBQcJBwYQBxQNCgoKCgUJCgcPDQsJDQoFCQkJEAwKBgUGBgsHEAsKBQoNBQkJBA4LCAsLCwUFBwcODAoGBwgNBgUGEBAQEBAQFBUKCgoFBQUNCwsLCwsLCQkJCQcLCwsLCwsSEAoKCgUFBQsICAgICAgHBwcHFBAGBgUFBgQCBQUJBQUFEAwDDAwAABgWDAADAwgFCQwNBwcMBQkFDAsGCQgICAsIBgoGBQcJBwYRBxUOCgoLCgUKCwcQDgsKDgoGCQkKEQ0KBwUGBgsHEQwKBgsOBQoKBA8LCAwMCwYGBwgPDAoHCAgOBgUGERERERERFRYKCwoFBQUOCwsLCwsMCQkJCQcLCwsLCwsTEQoKCgUFBQsICAgICAgHBwcHFBEGBgUFBgQCBQUKBQUFEAwDDAwAAAABAV0BkAAFAAICvAKKAAAAjwK8AooAAAHFADIBAwAAAAAEAAAAAAAAAAAAAAMAAAAAAAAAAAAAAABNQUNSAEAAICIZAyH/OQAAAyEAxwAAAAEAAAAAAAAAAQAAgAAAAACLAT8AAGAAAbQCdVlva2ttb2trICAgICAgICD/////N////llPS1IwMAAAAAAAAAABAAAAAQAAmJpL9V8PPPUAAAPoAAAAALfnFZIAAAAAt+cVkv+2/zkDawMhAAAAAwACAAEAAAAAAAEAAAMh/zkAAAOQ/7b/uANrAAEAAAAAAAAAAAAAAAAAAACkAAEAAACkAJgADQAAAAAAAgAIAEAACgAAAF0AvgABAAE=");
//				color: black;
//				background-color: lightblue;

				url_bgimg: "/imgs/bg/bg_frax_ribbon.jpg";
				background: url(url_bgimg) darkslategrey;
				color: ivory;
//				color: white;
				font-size:62.5%; 
				font-family: yokkmokkOT;
				font-size: 32pt;
				}

//			h1 { font-size: 2.4em; } /* =24px */
//			h1 { font-size: 64pt; color: ivory; font-family: yokkmokkOT; } /* =24px */
			h1 { font-size: 32pt; color: ivory; font-family: yokkmokkOT; } /* =24px */
			h2 { font-size: 28pt; color: ivory; font-family: yokkmokkOT } /* =24px */
			h3 { font-size: 18pt; color: grey; font-family: "times new roman"; } /* =24px */
			h4 { font-size: 14pt; color: grey; font-family: "times new roman"; } /* =24px */
			p  { font-size: 10pt; } /* =14px */
			dl { font-size: 20pt; color: ivory; font-family: arial;  } /* =14px? */
			dd { font-size: 18pt; color: ivory; font-family: arial;  } /* =14px? */

			ol { font-size: 20pt; color: ivory; font-family: "times new roman";  } /* =14px? */
			li { font-size: 18pt; color: ivory; font-family: "times new roman";  } /* =14px? */



			.detail {          
				background: darkslategrey;
				width: 35%;
				padding: 20px;
				border: 1px solid black;
				font-family: yokkmokkOT;
				color: ivory;
				}

			</style>    
	










	<style id='style_magazine_css'>
		body{
			overflow:hidden;
//			background-color:#fcfcfc;
			background-color:darkslategray;
			margin:0;
			padding:0;
			}

.magazine-viewport .container{
	position:absolute;
	top:50%;
	left:50%;
	width:922px;
	height:600px;
	margin:auto;
}

.magazine-viewport .magazine{
	width:922px;
	height:600px;
	left:-461px;
	top:-300px;
}

.magazine-viewport .page{
	width:461px;
	height:600px;
	background-color:white;
	background-repeat:no-repeat;
	background-size:100% 100%;
}

.magazine-viewport .zoomer .region{
	display:none;
}

.magazine .region{
	position:absolute;
	overflow:hidden;
	background:#0066FF;
	opacity:0.2;
	-webkit-border-radius:10px;
	-moz-border-radius:10px;
	-ms-border-radius:10px;
	-o-border-radius:10px;
	border-radius:10px;
	cursor:pointer;
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
	filter: alpha(opacity=20);
}

.magazine .region:hover{
	opacity:0.5;
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
	filter: alpha(opacity=50);
}

.magazine .region.zoom{
	opacity:0.01;
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";
	filter: alpha(opacity=1);
}

.magazine .region.zoom:hover{
	opacity:0.2;
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
	filter: alpha(opacity=20);
}

.magazine .page{
	-webkit-box-shadow:0 0 20px rgba(0,0,0,0.2);
	-moz-box-shadow:0 0 20px rgba(0,0,0,0.2);
	-ms-box-shadow:0 0 20px rgba(0,0,0,0.2);
	-o-box-shadow:0 0 20px rgba(0,0,0,0.2);
	box-shadow:0 0 20px rgba(0,0,0,0.2);
}

.magazine-viewport .page img{
	-webkit-touch-callout: none;
	-webkit-user-select: none;
	-khtml-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	margin:0;
}

.magazine .even .gradient{
	position:absolute;
	top:0;
	left:0;
	width:100%;
	height:100%;

	background:-webkit-gradient(linear, left top, right top, color-stop(0.95, rgba(0,0,0,0)), color-stop(1, rgba(0,0,0,0.2)));
	background-image:-webkit-linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
	background-image:-moz-linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
	background-image:-ms-linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
	background-image:-o-linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
	background-image:linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
}

.magazine .odd .gradient{
	position:absolute;
	top:0;
	left:0;
	width:100%;
	height:100%;

	background:-webkit-gradient(linear, right top, left top, color-stop(0.95, rgba(0,0,0,0)), color-stop(1, rgba(0,0,0,0.15)));
	background-image:-webkit-linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
	background-image:-moz-linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
	background-image:-ms-linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
	background-image:-o-linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
	background-image:linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
}

.magazine-viewport .zoom-in .even .gradient,
.magazine-viewport .zoom-in .odd .gradient{

	display:none;

}

.magazine-viewport .loader{
	background-image:url(/fb/pics/loader.gif);
	width:22px;
	height:22px;
	position:absolute;
	top:280px;
	left:219px;
}

.magazine-viewport .shadow{
	-webkit-transition: -webkit-box-shadow 0.5s;
	-moz-transition: -moz-box-shadow 0.5s;
	-o-transition: -webkit-box-shadow 0.5s;
	-ms-transition: -ms-box-shadow 0.5s;

	-webkit-box-shadow:0 0 20px #ccc;
	-moz-box-shadow:0 0 20px #ccc;
	-o-box-shadow:0 0 20px #ccc;
	-ms-box-shadow:0 0 20px #ccc;
	box-shadow:0 0 20px #ccc;
}

.magazine-viewport .next-button,
.magazine-viewport .previous-button{
	width:22px;
	height:600px;
	position:absolute;
	top:0;
}

.magazine-viewport .next-button{
	right:-22px;
	-webkit-border-radius:0 15px 15px 0;
	-moz-border-radius:0 15px 15px 0;
	-ms-border-radius:0 15px 15px 0;
	-o-border-radius:0 15px 15px 0;
	border-radius:0 15px 15px 0;
}

.magazine-viewport .previous-button{
	left:-22px;
	-webkit-border-radius:15px 0 0 15px;
	-moz-border-radius:15px 0 0 15px;
	-ms-border-radius:15px 0 0 15px;
	-o-border-radius:15px 0 0 15px;
	border-radius:15px 0 0 15px;
}

.magazine-viewport .previous-button-hover,
.magazine-viewport .next-button-hover{
	background-color:rgba(0,0,0, 0.2);
}

.magazine-viewport .previous-button-hover,
.magazine-viewport .previous-button-down{
	background-image:url(../pics/arrows.png);
	background-position:-4px 284px;
	background-repeat:no-repeat;
}

.magazine-viewport .previous-button-down,
.magazine-viewport .next-button-down{
	background-color:rgba(0,0,0, 0.4);
}

.magazine-viewport .next-button-hover,
.magazine-viewport .next-button-down{
	background-image:url(../pics/arrows.png);
	background-position:-38px 284px;
	background-repeat:no-repeat;
}

.magazine-viewport .zoom-in .next-button,
.magazine-viewport .zoom-in .previous-button{
	display:none;
}

.animated{
	-webkit-transition:margin-left 0.5s;
	-moz-transition:margin-left 0.5s;
	-ms-transition:margin-left 0.5s;
	-o-transition:margin-left 0.5s;
	transition:margin-left 0.5s;
}

.thumbnails{
//	position:absolute;
	bottom:0;
	left:0;
	width:100%;
	height:140px;
	z-index:1;
}

.thumbnails > div{
	width:1050px;
	height:100px;
	margin:20px auto;
}

.thumbnails ul{
	margin:0;
	padding:0;
	text-align:center;
	-webkit-transform:scale3d(0.5, 0.5, 1);
	-moz-transform:scale3d(0.5, 0.5, 1);
	-o-transform:scale3d(0.5, 0.5, 1);
	-ms-transform:scale3d(0.5, 0.5, 1);
	transform:scale3d(0.5, 0.5, 1);
	-webkit-transition:-webkit-transform ease-in-out 100ms;
	-moz-transition:-moz-transform ease-in-out 100ms;
	-ms-transition:-ms-transform ease-in-out 100ms;
	-o-transition:-o-transform ease-in-out 100ms;
	transition:transform ease-in-out 100ms;
}

.thumbanils-touch ul{
	-webkit-transform:none;
	-moz-transform:none;
	-o-transform:none;
	-ms-transform:none;
	transform:none;
}

.thumbnails-hover ul{
	-webkit-transform:scale3d(0.6, 0.6, 1);
	-moz-transform:scale3d(0.6, 0.6, 1);
	-o-transform:scale3d(0.6, 0.6, 1);
	-ms-transform:scale3d(0.6, 0.6, 1);
	transform:scale3d(0.6, 0.6, 1);
}

.thumbnails li{
	list-style:none;
	display:inline-block;
	margin:0 5px;
	-webkit-box-shadow:0 0 10px #ccc;
	-moz-box-shadow:0 0 10px #ccc;
	-ms-box-shadow:0 0 10px #ccc;
	-o-box-shadow:0 0 10px #ccc;
	box-shadow:0 0 10px  #ccc;
	-webkit-transition:-webkit-transform 60ms;
	-moz-transition:-webkit-transform 60ms;
	-o-transition:-webkit-transform 60ms;
	-ms-transition:-webkit-transform 60ms;
	transition:-webkit-transform 60ms;
}

.thumbnails li span{
	display:none;
}

.thumbnails .current{
	-webkit-box-shadow:0 0 10px red;
	-moz-box-shadow:0 0 10px red;
	-ms-box-shadow:0 0 10px red;
	-o-box-shadow:0 0 10px red;
	box-shadow:0 0 10px red;
}

.thumbnails .thumb-hover{
	-webkit-transform:scale3d(1.3, 1.3, 1);
	-moz-transform:scale3d(1.3, 1.3, 1);
	-o-transform:scale3d(1.3, 1.3, 1);
	-ms-transform:scale3d(1.3, 1.3, 1);
	transform:scale3d(1.3, 1.3, 1);

	-webkit-box-shadow:0 0 10px #666;
	-moz-box-shadow:0 0 10px #666;
	-ms-box-shadow:0 0 10px #666;
	-o-box-shadow:0 0 10px #666;
	box-shadow:0 0 10px #666;
}

.thumbanils-touch .thumb-hover{
	-webkit-transform:none;
	-moz-transform:none;
	-o-transform:none;
	-ms-transform:none;
	transform:none;
}

.thumbnails .thumb-hover span{
	position:absolute;
	bottom:-30px;
	left:0;
	z-index:2;
	width:100%;
	height:30px;
	font:bold 15px arial;
	line-height:30px;
	color:#666;
	display:block;
	cursor:default;
}

.thumbnails img{
	float:left;
}

.exit-message{
	position: absolute;
	top:10px;
	left:0;
	width:100%;
	height:40px;
	z-index:10000;
}

.exit-message > div{
	width:140px;
	height:30px;
	margin:auto;
	background:rgba(0,0,0,0.5);
	text-align:center;
	font:12px arial;
	line-height:30px;
	color:white;
	-webkit-border-radius:10px;
	-moz-border-radius:10px;
	-ms-border-radius:10px;
	-o-border-radius:10px;
	border-radius:10px;
}

.zoom-icon{
	position:absolute;
	z-index:1000;
	width:22px;
	height:22px;
	top:10px;
	right:10px;
//	background-image:url(../pics/zoom-icons.png);
	background-image:url(fb/html/magazine/pics/zoom-icons.png);
	background-size:88px 22px;
}

.zoom-icon-in{
	background-position:0 0;
	cursor: pointer;
}

.zoom-icon-in.zoom-icon-in-hover{
	background-position:-22px 0;
	cursor: pointer;
}

.zoom-icon-out{
	background-position:-44px 0;
}

.zoom-icon-out.zoom-icon-out-hover{
	background-position:-66px 0;
	cursor: pointer;
}

.bottom{
	position:absolute;
	left:0;
	bottom:0;
	width:100%;
}
		</style>

<script id="fb_magazine_js">
/*
 * Magazine sample
*/

function addPage(page, book) {

	var id, pages = book.turn('pages');

	// Create a new element for this page
	var element = $('<div />', {});

// Add the page to the flipbook
// Add the initial HTML
// It will contain a loader indicator and a gradient
	if (book.turn('addPage', element, page)) {
		element.html('<div class="gradient"></div><div class="loader"></div>');
// Load the page
		loadPage(page, element);
		}
	}

// Create an image element
	function loadPage(page, pageElement) {
		var img = $('<img />');
		img.mousedown(function(e) {
			e.preventDefault();
			});
		img.load(function() {
		
// Set the size
// Add the image to the page after loaded
// Remove the loader indicator
			$(this).css({width: '100%', height: '100%'});
			$(this).appendTo(pageElement);
			pageElement.find('.loader').remove();
			});

// Load the page
		var pagelist = new Array();
		var pagelist_len = 0;
		var src = "";
		var ajaks = "";
		pagelist = load_pagelist();
		pagelist_len = pagelist.length;	
//		alert( "BUGS_470 pageslist="+pageslist+" page="+page+" pages_len="+pages_len );
		var splitlim = pagelist[page].split("|").length;
		src = pagelist[page].split("|")[splitlim-1];

//		src = pagelist[page].split("|")[12];
//		alert( "BUGS_490 page="+page+" pages_len="+pages_len+" src="+src );
//		img.attr('src', 'pages/' +  page + '.jpg');
		img.attr('src', src );
		loadRegions(page, pageElement);
		}

// Zoom in / Zoom out
	function zoomTo(event) {

		setTimeout(function() {
			if ($('.magazine-viewport').data().regionClicked) {
				$('.magazine-viewport').data().regionClicked = false;
			} else {
				if ($('.magazine-viewport').zoom('value')==1) {
					$('.magazine-viewport').zoom('zoomIn', event);
				} else {
					$('.magazine-viewport').zoom('zoomOut');
				}
			}
		}, 1);

}



// Load regions

	function loadRegions(page, element) {
		var fp_js = "pages/js/"+page+"-regions.json";
//		$.getJSON('pages/'+page+'-regions.json').
//		$.getJSON('pages/js/'+page+'-regions.json').
		$.getJSON(fp_js).
			done(function(data) {
				$.each(data, function(key, region) {
					addRegion(region, element);
				});
			});
		}

// Add region

function addRegion(region, pageElement) {
	
	var reg = $('<div />', {'class': 'region  ' + region['class']}),
		options = $('.magazine').turn('options'),
		pageWidth = options.width/2,
		pageHeight = options.height;

	reg.css({
		top: Math.round(region.y/pageHeight*100)+'%',
		left: Math.round(region.x/pageWidth*100)+'%',
		width: Math.round(region.width/pageWidth*100)+'%',
		height: Math.round(region.height/pageHeight*100)+'%'
	}).attr('region-data', $.param(region.data||''));


	reg.appendTo(pageElement);
}

// Process click on a region

function regionClick(event) {

	var region = $(event.target);

	if (region.hasClass('region')) {

		$('.magazine-viewport').data().regionClicked = true;
		
		setTimeout(function() {
			$('.magazine-viewport').data().regionClicked = false;
		}, 100);
		
		var regionType = $.trim(region.attr('class').replace('region', ''));

		return processRegion(region, regionType);

	}

}

// Process the data of every region

function processRegion(region, regionType) {

	data = decodeParams(region.attr('region-data'));

	switch (regionType) {
		case 'link' :

			window.open(data.url);

		break;
		case 'zoom' :

			var regionOffset = region.offset(),
				viewportOffset = $('.magazine-viewport').offset(),
				pos = {
					x: regionOffset.left-viewportOffset.left,
					y: regionOffset.top-viewportOffset.top
				};

			$('.magazine-viewport').zoom('zoomIn', pos);

		break;
		case 'to-page' :

			$('.magazine').turn('page', data.page);

		break;
	}

}

// Load large page

	function loadLargePage(page, pageElement) {
		var img = $('<img />');
		img.load(function() {
			var prevImg = pageElement.find('img');
			$(this).css({width: '100%', height: '100%'});
			$(this).appendTo(pageElement);
			prevImg.remove();
			});

// Loadnew page
		var pagelist = new Array();
		var pagelist_len = pagelist.length;
		var j=0;
		var src = "";
//		alert("BUGS_610 loadSmallPage page="+page+" pagelist="+pagelist );
		pagelist = load_pagelist();
		pagelist_len = pagelist.length;
//		src = "pages/"+page+".jpg";


		var splitlim=pagelist[page].split("|").length;
//		src = pagelist[page].split( "|" )[12];
		src = pagelist[page].split( "|" )[splitlim-1];

		var zn_src_path = execTest(src);
		var zn_src_file = splitTest(src);
		var zn_src = zn_src_path.replace( zn_src_file, "zn/zn_"+zn_src_file );
		var tn_src = zn_src_path.replace( zn_src_file, "tn/tn_"+zn_src_file ).replace(".jpg",".png");
//		var zn_src = zn_src_path + "zn/zn_"+zn_src_file;

//		alert( "BUGS_685 src="+src );
//		alert( "BUGS_687 zn_src="+zn_src );
//		alert( "BUGS_688 tn_src="+tn_src );




//		alert("BUGS_620 loadLargePage page="+page+" pages_len="+pages_len+" src="+src );
//		alert("BUGS_621 loadLargePage pages="+pages+" pages_len="+pages_len );
//		alert("BUGS_622 loadLargePage window.pages="+window.pages+" pages_len="+pages_len );
//		img.attr('src', 'pages/' +  page + '.jpg');
//		img.attr('src', 'pages/' +  page + '-large.jpg');
//		img.attr('src', 'pages/zn/zn_' +  page + '.jpg');
		img.attr('src', zn_src );
		}

// Load small page

function loadSmallPage(page, pageElement) {
	var img = pageElement.find('img');
	img.css({width: '100%', height: '100%'});
	img.unbind('load');

// Loadnew page
	var pagelist = new Array();
	var pagelist_len = pagelist.length;
	var j=0;
	var src = "";
//	alert("BUGS_610 loadSmallPage page="+page+" pagelist="+pagelist );
	pagelist = load_pagelist();
	pagelist_len = pagelist.length;
	var splitlim=pagelist[page].split("|").length;
	src = "pages/"+page+".jpg";
	src = pagelist[page].split( "|" )[splitlim-1];
//	src = pagelist[page].split( "|" )[12];
//	alert("BUGS_650 loadSmallPage page="+page+" pages_len="+pages_len+" src="+src );
//	alert("BUGS_651 loadSmallPage pages="+pages+" pages_len="+pages_len );
//	alert("BUGS_652 loadSmallPage window.pages="+window.pages+" pages_len="+pages_len );
//	img.attr('src', 'pages/' +  page + '.jpg');
	img.attr('src', src );
	}

// http://code.google.com/p/chromium/issues/detail?id=128488

	function isChrome() {
		return navigator.userAgent.indexOf('Chrome')!=-1;
		}

	function disableControls(page) {
		if (page==1)
			$('.previous-button').hide();
		else
			$('.previous-button').show();
					
		if (page==$('.magazine').turn('pages'))
			$('.next-button').hide();
		else
			$('.next-button').show();
}

// Set the width and height for the viewport

function resizeViewport() {

	var width = $(window).width(),
		height = $(window).height(),
		options = $('.magazine').turn('options');

	$('.magazine').removeClass('animated');

	$('.magazine-viewport').css({
		width: width,
		height: height
	}).
	zoom('resize');


	if ($('.magazine').turn('zoom')==1) {
		var bound = calculateBound({
			width: options.width,
			height: options.height,
			boundWidth: Math.min(options.width, width),
			boundHeight: Math.min(options.height, height)
		});

		if (bound.width%2!==0)
			bound.width-=1;

			
		if (bound.width!=$('.magazine').width() || bound.height!=$('.magazine').height()) {

			$('.magazine').turn('size', bound.width, bound.height);

			if ($('.magazine').turn('page')==1)
				$('.magazine').turn('peel', 'br');

			$('.next-button').css({height: bound.height, backgroundPosition: '-38px '+(bound.height/2-32/2)+'px'});
			$('.previous-button').css({height: bound.height, backgroundPosition: '-4px '+(bound.height/2-32/2)+'px'});
		}

		$('.magazine').css({top: -bound.height/2, left: -bound.width/2});
	}

	var magazineOffset = $('.magazine').offset(),
		boundH = height - magazineOffset.top - $('.magazine').height(),
		marginTop = (boundH - $('.thumbnails > div').height()) / 2;

	if (marginTop<0) {
		$('.thumbnails').css({height:1});
	} else {
		$('.thumbnails').css({height: boundH});
		$('.thumbnails > div').css({marginTop: marginTop});
	}

	if (magazineOffset.top<$('.made').height())
		$('.made').hide();
	else
		$('.made').show();

	$('.magazine').addClass('animated');
	
}


// Number of views in a flipbook

function numberOfViews(book) {
	return book.turn('pages') / 2 + 1;
}

// Current view in a flipbook

function getViewNumber(book, page) {
	return parseInt((page || book.turn('page'))/2 + 1, 10);
}

function moveBar(yes) {
	if (Modernizr && Modernizr.csstransforms) {
		$('#slider .ui-slider-handle').css({zIndex: yes ? -1 : 10000});
	}
}

function setPreview(view) {

	var previewWidth = 112,
		previewHeight = 73,
//		previewSrc = 'pages/preview.jpg',
		previewSrc = 'imgs/preview.jpg',
		preview = $(_thumbPreview.children(':first')),
		numPages = (view==1 || view==$('#slider').slider('option', 'max')) ? 1 : 2,
		width = (numPages==1) ? previewWidth/2 : previewWidth;

	_thumbPreview.
		addClass('no-transition').
		css({width: width + 15,
			height: previewHeight + 15,
			top: -previewHeight - 30,
			left: ($($('#slider').children(':first')).width() - width - 15)/2
		});

	preview.css({
		width: width,
		height: previewHeight
	});

	if (preview.css('background-image')==='' ||
		preview.css('background-image')=='none') {

		preview.css({backgroundImage: 'url(' + previewSrc + ')'});

		setTimeout(function(){
			_thumbPreview.removeClass('no-transition');
		}, 0);

	}

	preview.css({backgroundPosition:
		'0px -'+((view-1)*previewHeight)+'px'
	});
}

// Width of the flipbook when zoomed in

function largeMagazineWidth() {
	
	return 2214;

}

// decode URL Parameters

function decodeParams(data) {

	var parts = data.split('&'), d, obj = {};

	for (var i =0; i<parts.length; i++) {
		d = parts[i].split('=');
		obj[decodeURIComponent(d[0])] = decodeURIComponent(d[1]);
	}

	return obj;
}

// Calculate the width and height of a square within another square

function calculateBound(d) {
	
	var bound = {width: d.width, height: d.height};

	if (bound.width>d.boundWidth || bound.height>d.boundHeight) {
		
		var rel = bound.width/bound.height;

		if (d.boundWidth/rel>d.boundHeight && d.boundHeight*rel<=d.boundWidth) {
			
			bound.width = Math.round(d.boundHeight*rel);
			bound.height = d.boundHeight;

		} else {
			
			bound.width = d.boundWidth;
			bound.height = Math.round(d.boundWidth/rel);
		
		}
			}
		return bound;
		}
	</script>

	<script id="script_load_pagelist_head" >
		function load_pagelist_head() {
var pagelist_head=
`|||||||||pages/1.jpg
||||||||||pages/2.jpg
||||||||||pages/3.jpg
||||||||||pages/4.jpg
||||||||||pages/5.jpg
||||||||||pages/6.jpg
||||||||||pages/7.jpg
||||||||||pages/8.jpg
||||||||||pages/9.jpg
||||||||||pages/10.jpg
||||||||||pages/11.jpg
||||||||||pages/12.jpg
||||||||||pages/13.jpg
||||||||||pages/14.jpg
||||||||||pages/15.jpg
||||||||||pages/16.jpg
||||||||||pages/17.jpg
||||||||||pages/18.jpg
||||||||||pages/19.jpg
||||||||||pages/20.jpg
||||||||||pages/21.jpg
||||||||||pages/22.jpg
||||||||||pages/23.jpg
||||||||||pages/24.jpg
||||||||||pages/25.jpg
||||||||||pages/26.jpg
||||||||||pages/27.jpg
||||||||||pages/28.jpg
||||||||||pages/29.jpg
||||||||||pages/30.jpg
||||||||||pages/31.jpg
||||||||||pages/32.jpg
||||||||||pages/33.jpg
||||||||||pages/34.jpg
||||||||||pages/35.jpg
||||||||||pages/36.jpg`;
		return( pagelist_head.split("\n"));
		}
		</script>



	<script id="script_load_pagelist_pages" >
		function load_pagelist_pages() {
var pagelist_pages=
`pages/0.jpg
pages/1.jpg
pages/2.jpg
pages/3.jpg
pages/4.jpg
pages/5.jpg
pages/6.jpg
pages/7.jpg
pages/8.jpg
pages/9.jpg
pages/10.jpg
pages/11.jpg
pages/12.jpg
pages/13.jpg
pages/14.jpg
pages/15.jpg
pages/16.jpg
pages/17.jpg
pages/18.jpg
pages/19.jpg
pages/20.jpg
pages/21.jpg
pages/22.jpg
pages/23.jpg
pages/24.jpg
pages/25.jpg
pages/26.jpg
pages/27.jpg
pages/28.jpg
pages/29.jpg
pages/30.jpg
pages/31.jpg
pages/32.jpg
pages/33.jpg
pages/34.jpg
pages/35.jpg
pages/36.jpg
/fb/iperms/pages/1.jpg
/fb/iperms/pages/2.jpg
/fb/iperms/pages/3.jpg
/fb/iperms/pages/4.jpg
/fb/iperms/pages/5.jpg
/fb/iperms/pages/6.jpg
/us/iperms/pages/7.jpg
/us/iperms/pages/8.jpg
/us/iperms/pages/9.jpg
/fb/iperms/pages/10.jpg
/fb/iperms/pages/11.jpg
/fb/iperms/pages/12.jpg
/fb/iperms/pages/13.jpg
/fb/iperms/pages/14.jpg
/fb/iperms/pages/15.jpg
/fb/iperms/pages/16.jpg
/fb/iperms/pages/17.jpg
/fb/iperms/pages/18.jpg
/fb/iperms/pages/19.jpg
/fb/iperms/pages/20.jpg
/fb/iperms/pages/21.jpg
/fb/iperms/pages/22.jpg
/fb/iperms/pages/23.jpg
/fb/iperms/pages/24.jpg
/fb/iperms/pages/25.jpg
/fb/iperms/pages/26.jpg
/fb/iperms/pages/27.jpg
/fb/iperms/pages/28.jpg
/fb/iperms/pages/29.jpg
/fb/iperms/pages/30.jpg
/fb/iperms/pages/31.jpg
/fb/iperms/pages/32.jpg
/fb/iperms/pages/33.jpg
/fb/iperms/pages/34.jpg
/fb/iperms/pages/35.jpg
/fb/iperms/pages/36.jpg
/fb/iperms/pages/17.jpg`;
			return(pagelist_pages.split("\n"));
			}


		function load_pagelist_imgs() {
//			alert( "BUGS_1000 load_page_list_jtfdcr_imgs" );
var pagelist_imgs=`
/fb/iperms/imgs/Image31.jpg
/fb/iperms/imgs/Image31b.jpg
/fb/iperms/imgs/Image32.jpg
/fb/iperms/imgs/Image32b.jpg
/fb/iperms/imgs/Image33.jpg
/fb/iperms/imgs/Image33a.jpg
/fb/iperms/imgs/Image34.jpg
/fb/iperms/imgs/Image34a.jpg
/fb/iperms/imgs/Image35.jpg
/fb/iperms/imgs/Image35a.jpg
/fb/iperms/imgs/image17.jpg
/fb/iperms/imgs/image18.jpg
/fb/iperms/imgs/image19.jpg
/fb/iperms/imgs/image36.jpg
/fb/iperms/imgs/image36b.jpg
/fb/iperms/imgs/img021.jpg
/fb/iperms/imgs/img022.jpg
/fb/iperms/imgs/img575.jpg
/fb/iperms/imgs/iperms_page9700l.jpg
/fb/iperms/imgs/jkwii_templet.jpg
/fb/iperms/imgs/preview.jpg
/us/jtfdcr/imgs/waxpaper.jpg
/us/jtfdcr/imgs/waxpaper2.jpg
/us/jtfdcr/imgs/wood_posters.jpg
/us/iperms/imgs/IMG_6459.JPG
/us/iperms/imgs/IMG_8949.JPG
/us/iperms/imgs/IMG_8950.JPG
/us/iperms/imgs/IMG_8952.JPG
/us/iperms/imgs/IMG_8953.JPG
/us/iperms/imgs/IMG_8954.JPG
/us/iperms/imgs/IMG_8955.JPG
/us/iperms/imgs/IMG_8956.JPG
/us/iperms/imgs/IMG_8957.JPG
/us/iperms/imgs/IMG_8958.JPG
/us/iperms/imgs/IMG_8960.JPG
/us/iperms/imgs/IMG_8961.JPG
/us/iperms/imgs/IMG_8963.JPG
/us/iperms/imgs/IMG_8964.JPG
/us/iperms/imgs/IMG_8965.JPG
/us/iperms/imgs/IMG_8966.JPG
/us/iperms/imgs/IMG_8967.JPG
/us/iperms/imgs/IMG_8968.JPG
/us/iperms/imgs/IMG_8969.JPG
/us/iperms/imgs/IMG_8970.JPG
/us/iperms/imgs/IMG_8971.JPG
/us/iperms/imgs/IMG_8972.JPG
/us/iperms/imgs/IMG_8973.JPG
/us/iperms/imgs/IMG_8974.JPG
/us/iperms/imgs/IMG_8975.JPG
/us/iperms/imgs/IMG_8976.JPG
/us/iperms/imgs/IMG_8977.JPG
/us/iperms/imgs/IMG_8978.JPG
/us/iperms/imgs/IMG_8979.JPG
/us/iperms/imgs/IMG_8980.JPG
/us/iperms/imgs/IMG_8981.JPG
/us/iperms/imgs/IMG_8982.JPG
/us/iperms/imgs/IMG_8983.JPG
/us/iperms/imgs/IMG_8984.JPG
/us/iperms/imgs/IMG_8985.JPG
/us/iperms/imgs/IMG_8986.JPG
/us/iperms/imgs/IMG_8987.JPG
/us/iperms/imgs/IMG_8989.JPG
/us/iperms/imgs/IMG_8990.JPG
/us/iperms/imgs/IMG_8991.JPG
/us/iperms/imgs/IMG_8992.JPG
/us/iperms/imgs/IMG_8994.JPG
/us/iperms/imgs/IMG_8995.JPG
/us/iperms/imgs/IMG_8996.JPG
/us/iperms/imgs/IMG_8997.JPG
/us/iperms/imgs/IMG_8998.JPG
/us/iperms/imgs/IMG_8999.JPG
/us/iperms/imgs/IMG_9001.JPG
/us/iperms/imgs/IMG_9002.JPG
/us/iperms/imgs/IMG_9003.JPG
/us/iperms/imgs/IMG_9004.JPG
/us/iperms/imgs/IMG_9005.JPG
/us/iperms/imgs/IMG_9143.JPG
/us/iperms/imgs/IMG_9144.JPG
/us/iperms/imgs/IMG_9145.JPG
/us/iperms/imgs/IMG_9147.JPG
/us/iperms/imgs/IMG_9148.JPG
/us/iperms/imgs/IMG_9149.JPG
/us/iperms/imgs/IMG_9164.JPG
/us/iperms/imgs/IMG_9165.JPG
/us/iperms/imgs/IMG_9189.JPG
/us/iperms/imgs/IMG_9190.JPG
/us/iperms/imgs/IMG_9191.JPG
/us/iperms/imgs/IMG_9192.JPG
/us/iperms/imgs/IMG_9193.JPG
/us/iperms/imgs/IMG_9194.JPG
/us/iperms/imgs/IMG_9215.JPG
/us/iperms/imgs/IMG_9216.JPG
/us/iperms/imgs/IMG_9217.JPG
/us/iperms/imgs/IMG_9218.JPG
/us/iperms/imgs/IMG_9219.JPG
/us/iperms/imgs/IMG_9220.JPG
/us/iperms/imgs/IMG_9221.JPG
/us/iperms/imgs/IMG_9222.JPG
/us/iperms/imgs/IMG_9223.JPG
/us/iperms/imgs/IMG_9224.JPG
/us/iperms/imgs/IMG_9225.JPG
/us/iperms/imgs/IMG_9226.JPG
/us/iperms/imgs/IMG_9227.JPG
/us/iperms/imgs/IMG_9228.JPG
/us/iperms/imgs/IMG_9229.JPG
/us/iperms/imgs/IMG_9230.JPG
/us/iperms/imgs/IMG_9231.JPG
/us/iperms/imgs/IMG_9232.JPG
/us/iperms/imgs/IMG_9233.JPG
/us/iperms/imgs/IMG_9234.JPG
/us/iperms/imgs/IMG_9235.JPG
/us/iperms/imgs/IMG_9236.JPG
/us/iperms/imgs/IMG_9237.JPG
/us/iperms/imgs/IMG_9238.JPG
/us/iperms/imgs/IMG_9239.JPG
/us/iperms/imgs/IMG_9240.JPG
/us/iperms/imgs/IMG_9241.JPG
/us/iperms/imgs/IMG_9242.JPG
/us/iperms/imgs/IMG_9243.JPG
/us/iperms/imgs/IMG_9244.JPG
/us/iperms/imgs/IMG_9245.JPG
/us/iperms/imgs/IMG_9246.JPG
/us/iperms/imgs/IMG_9247.JPG
/us/iperms/imgs/IMG_9248.JPG
/us/iperms/imgs/IMG_9249.JPG
/us/iperms/imgs/IMG_9250.JPG
/us/iperms/imgs/IMG_9251.JPG
/us/iperms/imgs/IMG_9252.JPG
/us/iperms/imgs/IMG_9253.JPG
/us/iperms/imgs/IMG_9254.JPG
/us/iperms/imgs/IMG_9255.JPG
/us/iperms/imgs/IMG_9256.JPG
/us/iperms/imgs/IMG_9257.JPG
/us/iperms/imgs/IMG_9258.JPG
/us/iperms/imgs/IMG_9259.JPG
/us/iperms/imgs/IMG_9260.JPG
/us/iperms/imgs/IMG_9261.JPG
/us/iperms/imgs/IMG_9262.JPG
/us/iperms/imgs/IMG_9263.JPG
/us/iperms/imgs/IMG_9264.JPG
/us/iperms/imgs/IMG_9265.JPG
/us/iperms/imgs/IMG_9266.JPG
/us/iperms/imgs/IMG_9267.JPG
/us/iperms/imgs/Image31.jpg
/us/iperms/imgs/Image31b.jpg
/us/iperms/imgs/Image32.jpg
/us/iperms/imgs/Image32b.jpg
/us/iperms/imgs/Image33.jpg
/us/iperms/imgs/Image33a.jpg
/us/iperms/imgs/Image34.jpg
/us/iperms/imgs/Image34a.jpg
/us/iperms/imgs/Image35.jpg
/us/iperms/imgs/Image35a.jpg
/us/iperms/imgs/arrows.png
/us/iperms/imgs/image17.jpg
/us/iperms/imgs/image18.jpg
/us/iperms/imgs/image19.jpg
/us/iperms/imgs/image36.jpg
/us/iperms/imgs/image36b.jpg
/us/iperms/imgs/img021.jpg
/us/iperms/imgs/img022.jpg
/us/iperms/imgs/img575.jpg
/us/iperms/imgs/index_fl.png
/us/iperms/imgs/iperms_page9700l.jpg
/us/iperms/imgs/jk_Image48.png
/us/iperms/imgs/jk_Image68.png
/us/iperms/imgs/jkwii_templet.jpg
/us/iperms/imgs/loader.gif
/us/iperms/imgs/preview.jpg
/us/iperms/imgs/pspbrwse.jbf
/us/iperms/imgs/tn
/us/iperms/imgs/zoom-icons-editable.png
/us/iperms/imgs/zoom-icons.png
/us/iperms/imgs/zoom.png
`;
			return(pagelist_imgs.split("\n"));
			}
		</script>

	<script id="script load_pagelist_i" >
		function load_pagelist_i() {
var pagelist_i = `
/fb/jtfdcr/imgs/waxpaper2.jpg
/fb/jtfdcr/imgs/wood_posters.jpg
`;
			return(pagelist_i.split("\n"));
			}
		</script>



	<script id="script_load_pagelist_ajaks" >
		function load_pagelist_ajaks(ajaks) {
			alert( "BUGS_1212 load_pagelist_ajaks ajaks="+ajaks );
//			ajaks="fb_pages.txt";
			alert( "BUGS_1213 load_pagelist_ajaks ajaks="+ajaks );
			var pages = new Array();
			var pages_len=0;
			var j=0;
			var xhttp = new XMLHttpRequest();
			xhttp.onreadystatechange = function() {
				if (this.readyState == 4 && this.status == 200) {
					var ajaxtext=this.responseText;
					var j=0;
					var htmout = "";
					var pagelist = new Array();
					pagelist = ajaxtext.split("\n");
					alert( "BUGS_1710 load_ajaks() ajaks="+ajaks+" pagelist="+pagelist);
					
					var pagelist_len = pagelist.length;
//					document.getElementById("div_load_ajaks").innerHTML = this.responseText; 
					document.getElementById("div_load_ajaks").innerHTML = ajaxtext; 
//					document.getElementById("div_load_ajaks").innerHTML = pagelist; 
//					document.getElementById("div_load_ajaks").innerHTML = htmout+ajaxtext; 
//					loadApp();
					alert( "BUGS_1580 ajaxlines="+ajaxlines pagelist_len="+pagelist_len );
					return( ajaxlines );
					}
				};
			xhttp.open("GET", ajaks, true);
			xhttp.send();
			}
		</script>

	<script id="script_load_pagelist_default">
		function load_pagelist_default() {
			var pages = new Array();
			var pages_len=0;
			var j=0;

//			alert( "BUGS_1250 load_pages_default pages_len="+pages_len+" href="+href );
var pagelist_default =`
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/0.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/1.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/2.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/3.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/4.jpg
`;
			return( pagelist_default.split("\n"));
			}
			</script>



	<script id="script_load_pagelist" >
		function load_pagelist() {

			var pages = new Array();
			var pages_len=0;
			var j=0; var k=0;

			var pages_default = new Array();
			var pages_go = new Array();
			var pages_jtfdcr_pages = new Array();
			var pages_jtfdcr_imgs = new Array();

//			var ajaks = "fb_imgs.txt";	
//			pages = load_pagelist_ajaks(ajaks);
//			pages = load_pagelist_default();

//			pages= load_pagelist_head();
//			pages= load_pagelist_pages();
//			pages= load_pagelist_imgs();
//			pages= load_pagelist_i();
//			pages= load_pagelist_go();
//			pages= load_pagelist_tail();


			pagelist_head = load_pagelist_head();
			pagelist_pages = load_pagelist_pages();
			pagelist_imgs = load_pagelist_imgs();
			pagelist_i = load_pagelist_i();
			pagelist_go = load_pagelist_go();
			pagelist_tail = load_pagelist_tail();
//			var ajaks="fb.txt";
//			var pagelist_ajaks = load_pagelist_ajaks(ajaks);

			pages = pagelist_head.concat(pagelist_pages, pagelist_imgs, pagelist_i, pagelist_go,pagelist_tail );
			pages_len=pages.length;

//			alert( "BUGS_1290 pages_len="+pages_len+" pages="+pages );


//			alert( "BUGS_1180 load_pagelist_default len="+pages_len+" pages="+pages )
//			alert( "BUGS_1180 load_pagelist_go len="+pages_len+" pages="+pages )
//			alert( "BUGS_1180 load_pagelist_pages len="+pages_len+" pages="+pages )
//			alert( "BUGS_1180 load_pagelist_default len="+pages_len+" pages="+pages )


//			var htmout="";
//			for( j=0;j<pages_len;j++) {
//				htmout += "bugs_1100 j="+j+" len="+pages_len+" page="+pages[j]+"<br>\n";
//				}
//			document.write(htmout);
//			alert( "BUGS_1200 ="+htmout );

//			alert( "BUGS_1200 load_pagelist pages_len="+pages_len+" pages="+pages );
			return( pages );
			}
		</script>

	<script id="script_load_pagelist_go" >
		function load_pagelist_go() {
//			alert( "BUGS_820 load_pages jjjjjjjjjjjjjjjjjjjj" );
			var pages = new Array();
			var pages_len=0;
			var j=0;
			var href = window.location.href;
//			alert( "BUGS_825 load_pages pages_len="+pages_len+" href="+href );
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/0.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/1.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/2.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/3.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/4.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/5.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/6.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/7.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/8.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/9.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/10.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/11.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/12.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/13.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/14.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/15.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/16.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/18.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/19.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/20.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/21.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/22.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/23.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/24.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/25.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/26.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img357.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img358.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img359.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img360.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img361.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img362.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img363.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img364.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img365.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img366.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img357.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img358.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img359.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img360.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img361.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img362.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img363.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img364.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img365.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img366.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||896620|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img367.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||730786|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img368.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801242|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img369.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883588|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img370.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img371.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||784457|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img372.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||843127|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img373.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||906461|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img374.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||752928|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img375.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791260|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img376.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964508|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img377.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||828964|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img378.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873941|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img379.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||915688|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img380.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||761790|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img381.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845370|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img382.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||856490|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img383.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||671068|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img384.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||743307|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img385.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||792125|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img386.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||851995|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img387.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||817621|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img388.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||899107|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img389.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||945623|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img390.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||956754|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img391.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||995889|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img392.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||924368|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img393.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||824827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img394.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862378|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img395.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883043|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img396.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||834414|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img397.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||772918|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img398.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||699001|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img399.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862577|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img400.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||859470|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img401.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||898820|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img402.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||911795|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img403.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||682827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img404.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||748989|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img405.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756089|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img406.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||947742|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img407.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||876865|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img408.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||939929|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img409.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||857484|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img410.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||856924|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img411.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||869657|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img412.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||890809|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img413.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||881101|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img414.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||860242|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img415.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||867133|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img416.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||831861|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img417.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||825595|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img418.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||679496|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img419.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||810751|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img420.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||790732|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img421.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845998|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img422.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||745726|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img423.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||794258|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img424.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_attack_defense/pages/index.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img357.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img358.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img359.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img360.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img361.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img362.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img363.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img364.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img365.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img366.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||896620|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img367.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||730786|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img368.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801242|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img369.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883588|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img370.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img371.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||784457|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img372.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||843127|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img373.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||906461|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img374.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||752928|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img375.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791260|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img376.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964508|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img377.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||828964|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img378.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873941|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img379.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||915688|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img380.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||761790|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img381.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845370|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img382.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||856490|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img383.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||671068|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img384.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||743307|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img385.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||792125|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img386.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||851995|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img387.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||817621|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img388.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||899107|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img389.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||945623|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img390.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||956754|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img391.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||995889|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img392.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||924368|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img393.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||824827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img394.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862378|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img395.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883043|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img396.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||834414|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img397.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||772918|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img398.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||699001|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img399.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862577|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img400.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||859470|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img401.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||898820|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img402.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||911795|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img403.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||682827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img404.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||748989|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img405.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756089|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img406.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||947742|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img407.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||876865|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img408.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||939929|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img409.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||857484|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img410.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||856924|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img411.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||869657|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img412.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||890809|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img413.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||881101|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img414.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||860242|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img415.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||867133|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img416.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||831861|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img417.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||825595|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img418.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||679496|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img419.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||810751|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img420.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||790732|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img421.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845998|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img422.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||745726|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img423.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||794258|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img424.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_attack_defense/pages/tn/tn_index.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1006441|Jul|26||2013|/kb/books/go/go_basics/pages/img023.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1047128|Jul|26||2013|/kb/books/go/go_basics/pages/img024.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053967|Jul|26||2013|/kb/books/go/go_basics/pages/img025.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1014446|Jul|26||2013|/kb/books/go/go_basics/pages/img026.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1026767|Jul|26||2013|/kb/books/go/go_basics/pages/img027.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791176|Jul|26||2013|/kb/books/go/go_basics/pages/img028.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||813175|Jul|26||2013|/kb/books/go/go_basics/pages/img029.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||924714|Jul|26||2013|/kb/books/go/go_basics/pages/img030.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||905403|Jul|26||2013|/kb/books/go/go_basics/pages/img031.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||888119|Jul|26||2013|/kb/books/go/go_basics/pages/img032.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1055638|Jul|26||2013|/kb/books/go/go_basics/pages/img033.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||915998|Jul|26||2013|/kb/books/go/go_basics/pages/img034.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||837152|Jul|26||2013|/kb/books/go/go_basics/pages/img035.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||837128|Jul|26||2013|/kb/books/go/go_basics/pages/img036.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1089939|Jul|26||2013|/kb/books/go/go_basics/pages/img037.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||784389|Jul|26||2013|/kb/books/go/go_basics/pages/img038.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||889289|Jul|26||2013|/kb/books/go/go_basics/pages/img039.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||969966|Jul|26||2013|/kb/books/go/go_basics/pages/img040.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||919829|Jul|26||2013|/kb/books/go/go_basics/pages/img041.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1002672|Jul|26||2013|/kb/books/go/go_basics/pages/img042.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717797|Jul|26||2013|/kb/books/go/go_basics/pages/img043.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||768692|Jul|26||2013|/kb/books/go/go_basics/pages/img044.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||952072|Jul|26||2013|/kb/books/go/go_basics/pages/img045.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||696825|Jul|26||2013|/kb/books/go/go_basics/pages/img046.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||332310|Jul|26||2013|/kb/books/go/go_basics/pages/img047.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||445300|Jul|26||2013|/kb/books/go/go_basics/pages/img048.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_basics/pages/img049.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1006441|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img023.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1047128|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img024.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053967|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img025.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1014446|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img026.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1026767|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img027.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791176|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img028.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||813175|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img029.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||924714|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img030.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||905403|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img031.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||888119|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img032.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1055638|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img033.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||915998|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img034.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||837152|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img035.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||837128|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img036.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1089939|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img037.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||784389|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img038.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||889289|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img039.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||969966|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img040.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||919829|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img041.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1002672|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img042.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717797|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img043.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||768692|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img044.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||952072|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img045.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||696825|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img046.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||332310|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img047.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||445300|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img048.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img049.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||358516|Jul|26||2013|/kb/books/go/go_equipment/pages/img050.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||516648|Jul|26||2013|/kb/books/go/go_equipment/pages/img051.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791156|Jul|26||2013|/kb/books/go/go_equipment/pages/img052.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||486725|Jul|26||2013|/kb/books/go/go_equipment/pages/img053.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||948089|Jul|26||2013|/kb/books/go/go_equipment/pages/img054.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1033406|Jul|26||2013|/kb/books/go/go_equipment/pages/img055.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||687569|Jul|26||2013|/kb/books/go/go_equipment/pages/img056.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1065658|Jul|26||2013|/kb/books/go/go_equipment/pages/img057.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||857686|Jul|26||2013|/kb/books/go/go_equipment/pages/img058.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||603590|Apr|14||2013|/kb/books/go/go_equipment/pages/img061.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1374190|Apr|14||2013|/kb/books/go/go_equipment/pages/img062.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||976954|Apr|14||2013|/kb/books/go/go_equipment/pages/img063.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||592214|Apr|14||2013|/kb/books/go/go_equipment/pages/img064.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||390273|Apr|14||2013|/kb/books/go/go_equipment/pages/img065.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1340886|Apr|14||2013|/kb/books/go/go_equipment/pages/img066.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||807810|Apr|14||2013|/kb/books/go/go_equipment/pages/img067.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||537637|Apr|14||2013|/kb/books/go/go_equipment/pages/img068.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||358516|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img050.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||516648|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img051.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791156|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img052.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||486725|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img053.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||948089|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img054.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1033406|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img055.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||687569|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img056.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1065658|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img057.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||857686|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img058.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||603590|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img061.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1374190|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img062.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||976954|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img063.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||592214|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img064.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||390273|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img065.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1340886|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img066.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||807810|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img067.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||537637|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img068.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964295|Jul|26||2013|/kb/books/go/go_joseki/pages/img070.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||951817|Jul|26||2013|/kb/books/go/go_joseki/pages/img071.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||854354|Jul|26||2013|/kb/books/go/go_joseki/pages/img072.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904237|Jul|26||2013|/kb/books/go/go_joseki/pages/img073.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||808049|Jul|26||2013|/kb/books/go/go_joseki/pages/img074.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||899297|Jul|26||2013|/kb/books/go/go_joseki/pages/img075.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907623|Jul|26||2013|/kb/books/go/go_joseki/pages/img076.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759807|Jul|26||2013|/kb/books/go/go_joseki/pages/img077.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1058618|Jul|26||2013|/kb/books/go/go_joseki/pages/img078.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1097406|Jul|26||2013|/kb/books/go/go_joseki/pages/img079.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1071509|Jul|26||2013|/kb/books/go/go_joseki/pages/img080.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1222293|Jul|26||2013|/kb/books/go/go_joseki/pages/img081.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||809594|Jul|26||2013|/kb/books/go/go_joseki/pages/img082.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||976407|Jul|26||2013|/kb/books/go/go_joseki/pages/img083.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1107226|Jul|26||2013|/kb/books/go/go_joseki/pages/img084.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1026899|Jul|26||2013|/kb/books/go/go_joseki/pages/img085.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1024022|Jul|26||2013|/kb/books/go/go_joseki/pages/img086.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1029782|Jul|26||2013|/kb/books/go/go_joseki/pages/img087.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1051070|Jul|26||2013|/kb/books/go/go_joseki/pages/img088.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||956297|Jul|26||2013|/kb/books/go/go_joseki/pages/img089.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1037967|Jul|26||2013|/kb/books/go/go_joseki/pages/img090.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1019427|Jul|26||2013|/kb/books/go/go_joseki/pages/img091.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1106972|Jul|26||2013|/kb/books/go/go_joseki/pages/img092.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1110897|Jul|26||2013|/kb/books/go/go_joseki/pages/img093.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1073256|Jul|26||2013|/kb/books/go/go_joseki/pages/img094.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||867457|Jul|27||2013|/kb/books/go/go_joseki/pages/img095.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1093950|Jul|27||2013|/kb/books/go/go_joseki/pages/img096.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1215177|Jul|27||2013|/kb/books/go/go_joseki/pages/img097.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1126591|Jul|27||2013|/kb/books/go/go_joseki/pages/img098.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1146058|Jul|27||2013|/kb/books/go/go_joseki/pages/img099.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||998658|Jul|27||2013|/kb/books/go/go_joseki/pages/img100.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||950064|Jul|27||2013|/kb/books/go/go_joseki/pages/img101.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1113709|Jul|27||2013|/kb/books/go/go_joseki/pages/img102.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1073193|Jul|27||2013|/kb/books/go/go_joseki/pages/img103.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||965100|Jul|27||2013|/kb/books/go/go_joseki/pages/img104.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||967947|Jul|27||2013|/kb/books/go/go_joseki/pages/img105.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053408|Jul|27||2013|/kb/books/go/go_joseki/pages/img106.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1108979|Jul|27||2013|/kb/books/go/go_joseki/pages/img107.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||993497|Jul|27||2013|/kb/books/go/go_joseki/pages/img108.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||970885|Jul|27||2013|/kb/books/go/go_joseki/pages/img109.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053854|Jul|27||2013|/kb/books/go/go_joseki/pages/img110.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||984744|Jul|27||2013|/kb/books/go/go_joseki/pages/img111.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053819|Jul|27||2013|/kb/books/go/go_joseki/pages/img112.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1187421|Jul|27||2013|/kb/books/go/go_joseki/pages/img113.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964581|Jul|27||2013|/kb/books/go/go_joseki/pages/img114.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||978287|Jul|27||2013|/kb/books/go/go_joseki/pages/img115.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||917482|Jul|27||2013|/kb/books/go/go_joseki/pages/img116.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||991987|Jul|27||2013|/kb/books/go/go_joseki/pages/img117.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||898921|Jul|27||2013|/kb/books/go/go_joseki/pages/img118.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1012220|Jul|27||2013|/kb/books/go/go_joseki/pages/img119.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1072925|Jul|27||2013|/kb/books/go/go_joseki/pages/img120.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||872746|Jul|27||2013|/kb/books/go/go_joseki/pages/img121.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||866500|Jul|27||2013|/kb/books/go/go_joseki/pages/img122.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1009773|Jul|27||2013|/kb/books/go/go_joseki/pages/img123.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||968391|Jul|27||2013|/kb/books/go/go_joseki/pages/img124.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||703303|Jul|27||2013|/kb/books/go/go_joseki/pages/img125.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||950503|Jul|27||2013|/kb/books/go/go_joseki/pages/img126.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||998706|Jul|27||2013|/kb/books/go/go_joseki/pages/img127.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873116|Jul|27||2013|/kb/books/go/go_joseki/pages/img128.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||821432|Jul|27||2013|/kb/books/go/go_joseki/pages/img129.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||825088|Jul|27||2013|/kb/books/go/go_joseki/pages/img130.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||896338|Jul|27||2013|/kb/books/go/go_joseki/pages/img131.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963585|Jul|27||2013|/kb/books/go/go_joseki/pages/img132.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||983883|Jul|27||2013|/kb/books/go/go_joseki/pages/img133.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873892|Jul|27||2013|/kb/books/go/go_joseki/pages/img134.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||769739|Jul|27||2013|/kb/books/go/go_joseki/pages/img135.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||713637|Jul|27||2013|/kb/books/go/go_joseki/pages/img136.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||584476|Jul|27||2013|/kb/books/go/go_joseki/pages/img137.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||909033|Jul|27||2013|/kb/books/go/go_joseki/pages/img138.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1022877|Jul|27||2013|/kb/books/go/go_joseki/pages/img139.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||744019|Jul|27||2013|/kb/books/go/go_joseki/pages/img140.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||166301|Jul|27||2013|/kb/books/go/go_joseki/pages/img141.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||404802|Jul|27||2013|/kb/books/go/go_joseki/pages/img142.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||536562|Jul|27||2013|/kb/books/go/go_joseki/pages/img143.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964295|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img070.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||951817|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img071.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||854354|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img072.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904237|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img073.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||808049|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img074.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||899297|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img075.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907623|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img076.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759807|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img077.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1058618|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img078.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1097406|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img079.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1071509|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img080.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1222293|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img081.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||809594|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img082.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||976407|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img083.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1107226|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img084.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1026899|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img085.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1024022|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img086.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1029782|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img087.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1051070|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img088.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||956297|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img089.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1037967|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img090.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1019427|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img091.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1106972|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img092.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1110897|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img093.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1073256|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img094.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||867457|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img095.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1093950|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img096.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1215177|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img097.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1126591|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img098.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1146058|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img099.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||998658|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img100.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||950064|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img101.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1113709|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img102.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1073193|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img103.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||965100|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img104.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||967947|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img105.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053408|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img106.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1108979|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img107.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||993497|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img108.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||970885|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img109.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053854|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img110.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||984744|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img111.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053819|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img112.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1187421|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img113.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964581|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img114.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||978287|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img115.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||917482|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img116.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||991987|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img117.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||898921|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img118.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1012220|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img119.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1072925|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img120.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||872746|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img121.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||866500|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img122.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1009773|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img123.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||968391|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img124.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||703303|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img125.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||950503|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img126.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||998706|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img127.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873116|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img128.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||821432|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img129.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||825088|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img130.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||896338|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img131.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963585|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img132.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||983883|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img133.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873892|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img134.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||769739|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img135.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||713637|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img136.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||584476|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img137.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||909033|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img138.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1022877|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img139.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||744019|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img140.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||166301|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img141.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||404802|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img142.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||536562|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img143.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||437291|Jul|28||2013|/kb/books/go/go_middlegame/pages/img183.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||525694|Jul|28||2013|/kb/books/go/go_middlegame/pages/img184.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||653806|Jul|28||2013|/kb/books/go/go_middlegame/pages/img185.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||841874|Jul|28||2013|/kb/books/go/go_middlegame/pages/img186.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||783850|Jul|28||2013|/kb/books/go/go_middlegame/pages/img187.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759335|Jul|28||2013|/kb/books/go/go_middlegame/pages/img188.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||777431|Jul|28||2013|/kb/books/go/go_middlegame/pages/img189.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621857|Jul|28||2013|/kb/books/go/go_middlegame/pages/img190.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621065|Jul|28||2013|/kb/books/go/go_middlegame/pages/img213.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||660424|Jul|28||2013|/kb/books/go/go_middlegame/pages/img214.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||640766|Jul|28||2013|/kb/books/go/go_middlegame/pages/img215.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||701699|Jul|28||2013|/kb/books/go/go_middlegame/pages/img216.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||684817|Jul|28||2013|/kb/books/go/go_middlegame/pages/img217.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||693628|Jul|28||2013|/kb/books/go/go_middlegame/pages/img218.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||652074|Jul|28||2013|/kb/books/go/go_middlegame/pages/img219.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||665520|Jul|28||2013|/kb/books/go/go_middlegame/pages/img220.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||664979|Jul|28||2013|/kb/books/go/go_middlegame/pages/img221.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||420880|Jul|28||2013|/kb/books/go/go_middlegame/pages/img222.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||653179|Jul|28||2013|/kb/books/go/go_middlegame/pages/img223.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||631018|Jul|28||2013|/kb/books/go/go_middlegame/pages/img224.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||614888|Jul|28||2013|/kb/books/go/go_middlegame/pages/img225.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||635578|Jul|28||2013|/kb/books/go/go_middlegame/pages/img226.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||664987|Jul|28||2013|/kb/books/go/go_middlegame/pages/img227.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||494882|Jul|28||2013|/kb/books/go/go_middlegame/pages/img228.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||755517|Jul|28||2013|/kb/books/go/go_middlegame/pages/img229.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||746024|Jul|28||2013|/kb/books/go/go_middlegame/pages/img230.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||740563|Jul|28||2013|/kb/books/go/go_middlegame/pages/img231.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||720673|Jul|28||2013|/kb/books/go/go_middlegame/pages/img232.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||641901|Jul|28||2013|/kb/books/go/go_middlegame/pages/img233.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||681172|Jul|28||2013|/kb/books/go/go_middlegame/pages/img234.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||681621|Jul|28||2013|/kb/books/go/go_middlegame/pages/img235.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||699626|Jul|28||2013|/kb/books/go/go_middlegame/pages/img236.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||692405|Jul|28||2013|/kb/books/go/go_middlegame/pages/img237.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||675217|Jul|28||2013|/kb/books/go/go_middlegame/pages/img238.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||637166|Jul|28||2013|/kb/books/go/go_middlegame/pages/img239.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||638038|Jul|28||2013|/kb/books/go/go_middlegame/pages/img240.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||746258|Jul|28||2013|/kb/books/go/go_middlegame/pages/img241.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||697934|Jul|28||2013|/kb/books/go/go_middlegame/pages/img242.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||680670|Jul|28||2013|/kb/books/go/go_middlegame/pages/img243.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||666127|Jul|28||2013|/kb/books/go/go_middlegame/pages/img244.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||703644|Jul|28||2013|/kb/books/go/go_middlegame/pages/img245.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||674102|Jul|28||2013|/kb/books/go/go_middlegame/pages/img246.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||684526|Jul|28||2013|/kb/books/go/go_middlegame/pages/img247.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||648526|Jul|28||2013|/kb/books/go/go_middlegame/pages/img248.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||728614|Jul|28||2013|/kb/books/go/go_middlegame/pages/img249.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||663415|Jul|28||2013|/kb/books/go/go_middlegame/pages/img250.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||694657|Jul|28||2013|/kb/books/go/go_middlegame/pages/img251.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||673729|Jul|28||2013|/kb/books/go/go_middlegame/pages/img252.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||663575|Jul|28||2013|/kb/books/go/go_middlegame/pages/img253.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||464991|Jul|28||2013|/kb/books/go/go_middlegame/pages/img254.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756849|Jul|28||2013|/kb/books/go/go_middlegame/pages/img255.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||761547|Jul|28||2013|/kb/books/go/go_middlegame/pages/img256.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801070|Jul|28||2013|/kb/books/go/go_middlegame/pages/img257.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||739075|Jul|28||2013|/kb/books/go/go_middlegame/pages/img258.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||787189|Jul|28||2013|/kb/books/go/go_middlegame/pages/img259.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||729433|Jul|28||2013|/kb/books/go/go_middlegame/pages/img260.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||793385|Jul|28||2013|/kb/books/go/go_middlegame/pages/img261.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756141|Jul|28||2013|/kb/books/go/go_middlegame/pages/img262.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||779572|Jul|28||2013|/kb/books/go/go_middlegame/pages/img263.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759079|Jul|28||2013|/kb/books/go/go_middlegame/pages/img264.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||738282|Jul|28||2013|/kb/books/go/go_middlegame/pages/img265.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||814029|Jul|28||2013|/kb/books/go/go_middlegame/pages/img266.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||833386|Jul|28||2013|/kb/books/go/go_middlegame/pages/img267.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||188285|Jul|28||2013|/kb/books/go/go_middlegame/pages/img268.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||369506|Jul|28||2013|/kb/books/go/go_middlegame/pages/img269.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||384764|Jul|28||2013|/kb/books/go/go_middlegame/pages/img270.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||547382|Jul|28||2013|/kb/books/go/go_middlegame/pages/img271.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||647343|Jul|28||2013|/kb/books/go/go_middlegame/pages/img272.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1070171|Jul|28||2013|/kb/books/go/go_middlegame/pages/img273.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1188408|Jul|28||2013|/kb/books/go/go_middlegame/pages/img274.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||315266|Jul|28||2013|/kb/books/go/go_middlegame/pages/img275.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||299360|Jul|28||2013|/kb/books/go/go_middlegame/pages/img276.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||707195|Jul|28||2013|/kb/books/go/go_middlegame/pages/img277.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||872457|Jul|28||2013|/kb/books/go/go_middlegame/pages/img278.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||959051|Jul|28||2013|/kb/books/go/go_middlegame/pages/img279.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||920879|Jul|28||2013|/kb/books/go/go_middlegame/pages/img280.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||926630|Jul|28||2013|/kb/books/go/go_middlegame/pages/img281.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1034689|Jul|28||2013|/kb/books/go/go_middlegame/pages/img282.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||341434|Jul|25||2013|/kb/books/go/go_middlegame/pages/img283.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1211055|Jul|25||2013|/kb/books/go/go_middlegame/pages/img284.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||437291|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img183.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||525694|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img184.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||653806|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img185.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||841874|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img186.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||783850|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img187.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759335|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img188.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||777431|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img189.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621857|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img190.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621065|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img213.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||660424|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img214.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||640766|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img215.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||701699|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img216.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||684817|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img217.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||693628|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img218.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||652074|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img219.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||665520|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img220.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||664979|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img221.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||420880|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img222.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||653179|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img223.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||631018|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img224.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||614888|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img225.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||635578|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img226.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||664987|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img227.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||494882|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img228.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||755517|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img229.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||746024|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img230.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||740563|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img231.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||720673|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img232.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||641901|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img233.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||681172|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img234.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||681621|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img235.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||699626|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img236.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||692405|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img237.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||675217|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img238.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||637166|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img239.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||638038|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img240.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||746258|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img241.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||697934|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img242.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||680670|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img243.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||666127|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img244.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||703644|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img245.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||674102|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img246.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||684526|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img247.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||648526|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img248.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||728614|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img249.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||663415|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img250.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||694657|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img251.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||673729|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img252.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||663575|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img253.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||464991|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img254.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756849|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img255.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||761547|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img256.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801070|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img257.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||739075|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img258.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||787189|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img259.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||729433|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img260.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||793385|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img261.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756141|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img262.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||779572|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img263.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759079|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img264.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||738282|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img265.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||814029|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img266.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||833386|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img267.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||188285|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img268.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||369506|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img269.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||384764|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img270.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||547382|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img271.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||647343|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img272.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1070171|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img273.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1188408|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img274.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||315266|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img275.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||299360|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img276.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||707195|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img277.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||872457|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img278.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||959051|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img279.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||920879|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img280.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||926630|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img281.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1034689|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img282.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||341434|Jul|25||2013|/kb/books/go/go_middlegame/pages/tn/tn_img283.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1211055|Jul|25||2013|/kb/books/go/go_middlegame/pages/tn/tn_img284.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053658|Jul|25||2013|/kb/books/go/go_strategy/pages/img285.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||336909|Jul|25||2013|/kb/books/go/go_strategy/pages/img286.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||354099|Jul|25||2013|/kb/books/go/go_strategy/pages/img287.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||409400|Jul|25||2013|/kb/books/go/go_strategy/pages/img288.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||417952|Jul|25||2013|/kb/books/go/go_strategy/pages/img289.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||690620|Jul|25||2013|/kb/books/go/go_strategy/pages/img290.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845711|Jul|25||2013|/kb/books/go/go_strategy/pages/img291.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1028081|Jul|25||2013|/kb/books/go/go_strategy/pages/img292.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1126342|Jul|25||2013|/kb/books/go/go_strategy/pages/img293.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1106874|Jul|25||2013|/kb/books/go/go_strategy/pages/img294.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1054403|Jul|25||2013|/kb/books/go/go_strategy/pages/img295.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1120631|Jul|25||2013|/kb/books/go/go_strategy/pages/img296.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756489|Jul|25||2013|/kb/books/go/go_strategy/pages/img297.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1084236|Jul|25||2013|/kb/books/go/go_strategy/pages/img298.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1067948|Jul|25||2013|/kb/books/go/go_strategy/pages/img299.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||979594|Jul|25||2013|/kb/books/go/go_strategy/pages/img300.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1045182|Jul|25||2013|/kb/books/go/go_strategy/pages/img301.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||901610|Jul|25||2013|/kb/books/go/go_strategy/pages/img302.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||918985|Jul|25||2013|/kb/books/go/go_strategy/pages/img303.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862420|Jul|25||2013|/kb/books/go/go_strategy/pages/img304.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||886557|Jul|25||2013|/kb/books/go/go_strategy/pages/img305.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||787507|Jul|25||2013|/kb/books/go/go_strategy/pages/img306.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||911463|Jul|25||2013|/kb/books/go/go_strategy/pages/img307.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||965161|Jul|25||2013|/kb/books/go/go_strategy/pages/img308.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||973577|Jul|25||2013|/kb/books/go/go_strategy/pages/img309.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||888001|Jul|25||2013|/kb/books/go/go_strategy/pages/img310.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||786913|Jul|25||2013|/kb/books/go/go_strategy/pages/img311.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963093|Jul|25||2013|/kb/books/go/go_strategy/pages/img312.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1189822|Jul|25||2013|/kb/books/go/go_strategy/pages/img313.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||877732|Jul|25||2013|/kb/books/go/go_strategy/pages/img314.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||849270|Jul|25||2013|/kb/books/go/go_strategy/pages/img315.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963161|Jul|25||2013|/kb/books/go/go_strategy/pages/img316.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||507750|Jul|25||2013|/kb/books/go/go_strategy/pages/img317.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||930132|Jul|26||2013|/kb/books/go/go_strategy/pages/img318.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862631|Jul|26||2013|/kb/books/go/go_strategy/pages/img319.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||2584516|Jul|26||2013|/kb/books/go/go_strategy/pages/img319_rot.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907770|Jul|26||2013|/kb/books/go/go_strategy/pages/img320.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1074018|Jul|26||2013|/kb/books/go/go_strategy/pages/img321.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||985358|Jul|26||2013|/kb/books/go/go_strategy/pages/img322.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||955316|Jul|26||2013|/kb/books/go/go_strategy/pages/img323.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1048619|Jul|26||2013|/kb/books/go/go_strategy/pages/img324.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1013385|Jul|26||2013|/kb/books/go/go_strategy/pages/img325.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1091971|Jul|26||2013|/kb/books/go/go_strategy/pages/img326.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801231|Jul|26||2013|/kb/books/go/go_strategy/pages/img327.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845582|Jul|26||2013|/kb/books/go/go_strategy/pages/img328.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||931676|Jul|26||2013|/kb/books/go/go_strategy/pages/img329.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1068374|Jul|26||2013|/kb/books/go/go_strategy/pages/img330.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||836404|Jul|26||2013|/kb/books/go/go_strategy/pages/img331.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1002956|Jul|26||2013|/kb/books/go/go_strategy/pages/img332.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||858923|Jul|26||2013|/kb/books/go/go_strategy/pages/img333.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904910|Jul|26||2013|/kb/books/go/go_strategy/pages/img334.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||905806|Jul|28||2013|/kb/books/go/go_strategy/pages/img335.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1032145|Jul|28||2013|/kb/books/go/go_strategy/pages/img336.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||927378|Jul|28||2013|/kb/books/go/go_strategy/pages/img337.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1021816|Jul|28||2013|/kb/books/go/go_strategy/pages/img338.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1007963|Jul|28||2013|/kb/books/go/go_strategy/pages/img339.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1087169|Jul|28||2013|/kb/books/go/go_strategy/pages/img340.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907719|Jul|28||2013|/kb/books/go/go_strategy/pages/img341.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1017200|Jul|28||2013|/kb/books/go/go_strategy/pages/img342.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1008372|Jul|28||2013|/kb/books/go/go_strategy/pages/img343.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904314|Jul|28||2013|/kb/books/go/go_strategy/pages/img344.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||865407|Jul|28||2013|/kb/books/go/go_strategy/pages/img345.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||936444|Jul|28||2013|/kb/books/go/go_strategy/pages/img346.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1098851|Jul|28||2013|/kb/books/go/go_strategy/pages/img347.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1136515|Jul|28||2013|/kb/books/go/go_strategy/pages/img348.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1181254|Jul|28||2013|/kb/books/go/go_strategy/pages/img349.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||826651|Jul|28||2013|/kb/books/go/go_strategy/pages/img350.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||605881|Jul|28||2013|/kb/books/go/go_strategy/pages/img351.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||695558|Jul|28||2013|/kb/books/go/go_strategy/pages/img352.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||166542|Jul|28||2013|/kb/books/go/go_strategy/pages/img353.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||147900|Jul|28||2013|/kb/books/go/go_strategy/pages/img354.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||216814|Jul|28||2013|/kb/books/go/go_strategy/pages/img355.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||224027|Jul|28||2013|/kb/books/go/go_strategy/pages/img356.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053658|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img285.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||336909|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img286.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||354099|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img287.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||409400|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img288.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||417952|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img289.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||690620|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img290.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845711|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img291.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1028081|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img292.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1126342|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img293.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1106874|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img294.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1054403|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img295.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1120631|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img296.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756489|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img297.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1084236|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img298.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1067948|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img299.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||979594|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img300.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1045182|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img301.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||901610|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img302.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||918985|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img303.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862420|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img304.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||886557|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img305.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||787507|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img306.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||911463|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img307.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||965161|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img308.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||973577|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img309.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||888001|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img310.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||786913|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img311.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963093|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img312.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1189822|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img313.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||877732|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img314.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||849270|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img315.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963161|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img316.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||507750|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img317.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||930132|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img318.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862631|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img319.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||2584516|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img319_rot.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907770|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img320.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1074018|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img321.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||985358|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img322.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||955316|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img323.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1048619|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img324.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1013385|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img325.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1091971|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img326.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801231|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img327.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845582|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img328.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||931676|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img329.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1068374|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img330.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||836404|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img331.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1002956|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img332.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||858923|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img333.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904910|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img334.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||905806|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img335.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1032145|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img336.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||927378|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img337.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1021816|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img338.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1007963|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img339.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1087169|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img340.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907719|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img341.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1017200|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img342.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1008372|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img343.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904314|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img344.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||865407|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img345.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||936444|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img346.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1098851|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img347.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1136515|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img348.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1181254|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img349.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||826651|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img350.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||605881|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img351.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||695558|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img352.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||166542|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img353.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||147900|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img354.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||216814|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img355.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||224027|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img356.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||313740|Jul|27||2013|/kb/books/go/go_tesuji/pages/img144.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||534933|Jul|27||2013|/kb/books/go/go_tesuji/pages/img145.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||637566|Jul|27||2013|/kb/books/go/go_tesuji/pages/img146.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883337|Jul|27||2013|/kb/books/go/go_tesuji/pages/img147.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||910842|Jul|27||2013|/kb/books/go/go_tesuji/pages/img148.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||547960|Jul|27||2013|/kb/books/go/go_tesuji/pages/img149.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||511374|Jul|27||2013|/kb/books/go/go_tesuji/pages/img150.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||309376|Jul|27||2013|/kb/books/go/go_tesuji/pages/img151.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||712605|Jul|27||2013|/kb/books/go/go_tesuji/pages/img152.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||610951|Jul|27||2013|/kb/books/go/go_tesuji/pages/img153.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||579887|Apr|15||2013|/kb/books/go/go_tesuji/pages/img154.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||205822|Apr|15||2013|/kb/books/go/go_tesuji/pages/img155.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||506775|Apr|15||2013|/kb/books/go/go_tesuji/pages/img156.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||554846|Apr|15||2013|/kb/books/go/go_tesuji/pages/img157.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||267323|Apr|15||2013|/kb/books/go/go_tesuji/pages/img158.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||328954|Apr|15||2013|/kb/books/go/go_tesuji/pages/img159.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||378242|Apr|15||2013|/kb/books/go/go_tesuji/pages/img160.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||726846|Jul|27||2013|/kb/books/go/go_tesuji/pages/img161.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||725448|Jul|27||2013|/kb/books/go/go_tesuji/pages/img162.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||687696|Jul|27||2013|/kb/books/go/go_tesuji/pages/img163.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717765|Jul|27||2013|/kb/books/go/go_tesuji/pages/img164.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||527036|Jul|27||2013|/kb/books/go/go_tesuji/pages/img165.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||706619|Jul|27||2013|/kb/books/go/go_tesuji/pages/img166.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||742105|Jul|27||2013|/kb/books/go/go_tesuji/pages/img167.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||797265|Jul|27||2013|/kb/books/go/go_tesuji/pages/img168.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||760087|Jul|27||2013|/kb/books/go/go_tesuji/pages/img169.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||657636|Jul|27||2013|/kb/books/go/go_tesuji/pages/img170.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||755147|Jul|28||2013|/kb/books/go/go_tesuji/pages/img171.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||645677|Jul|28||2013|/kb/books/go/go_tesuji/pages/img172.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||696265|Jul|28||2013|/kb/books/go/go_tesuji/pages/img173.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||712791|Jul|28||2013|/kb/books/go/go_tesuji/pages/img174.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717123|Jul|28||2013|/kb/books/go/go_tesuji/pages/img175.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||652155|Jul|28||2013|/kb/books/go/go_tesuji/pages/img176.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||813062|Jul|28||2013|/kb/books/go/go_tesuji/pages/img177.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||685220|Jul|28||2013|/kb/books/go/go_tesuji/pages/img178.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||599655|Jul|28||2013|/kb/books/go/go_tesuji/pages/img179.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621916|Jul|28||2013|/kb/books/go/go_tesuji/pages/img180.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||511956|Jul|28||2013|/kb/books/go/go_tesuji/pages/img181.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||510349|Jul|28||2013|/kb/books/go/go_tesuji/pages/img182.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||313740|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img144.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||534933|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img145.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||637566|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img146.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883337|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img147.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||910842|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img148.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||547960|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img149.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||511374|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img150.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||309376|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img151.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||712605|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img152.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||610951|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img153.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||579887|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img154.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||205822|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img155.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||506775|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img156.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||554846|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img157.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||267323|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img158.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||328954|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img159.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||378242|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img160.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||726846|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img161.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||725448|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img162.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||687696|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img163.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717765|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img164.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||527036|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img165.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||706619|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img166.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||742105|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img167.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||797265|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img168.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||760087|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img169.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||657636|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img170.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||755147|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img171.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||645677|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img172.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||696265|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img173.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||712791|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img174.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717123|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img175.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||652155|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img176.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||813062|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img177.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||685220|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img178.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||599655|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img179.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621916|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img180.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||511956|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img181.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||510349|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img182.jpg";

			pages_len=pages.length;
//			alert( "BUGS_830 load_pages pages_len="+pages_len+" pages="+pages );
//			window.pages=pages;
//			alert( "BUGS_840 load_pages pages_len="+pages_len+" window.pages1="+window.pages[1] );
			return( pages );
			}
		</script>

	<script id="script_load_pagelist_tail">
		function load_pagelist_tail() {
var pagelist_tail = `
/fb/jtfdcr/pages/1.jpg
/fb/jtfdcr/pages/10.jpg
/fb/jtfdcr/pages/11.jpg
`;
			return( pagelist_tail.split("\n"));
			}
		</script>






	<script id="script_load_pages_bugs" >
		var pages = new Array();
		var window.pages = new Array();
		var pages_len = 0;
		var j=0;

		function load_pages_bugs() {
//			alert( "BUGS_850 load_pages_bugs" );
			alert( "BUGS_850 load_pages_bugs pages="+pages );
			var  pages = new Array();
			var pages_len=0;
			var j=0;


			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img357.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img358.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img359.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img360.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img361.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img362.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img363.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img364.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img365.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img366.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||896620|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img367.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||730786|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img368.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801242|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img369.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883588|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img370.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img371.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||784457|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img372.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||843127|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img373.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||906461|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img374.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||752928|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img375.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791260|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img376.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964508|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img377.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||828964|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img378.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873941|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img379.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||915688|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img380.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||761790|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img381.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845370|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img382.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||856490|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img383.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||671068|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img384.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||743307|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img385.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||792125|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img386.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||851995|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img387.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||817621|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img388.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||899107|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img389.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||945623|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img390.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||956754|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img391.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||995889|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img392.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||924368|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img393.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||824827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img394.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862378|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img395.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883043|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img396.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||834414|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img397.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||772918|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img398.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||699001|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img399.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862577|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img400.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||859470|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img401.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||898820|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img402.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||911795|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img403.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||682827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img404.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||748989|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img405.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756089|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img406.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||947742|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img407.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||876865|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img408.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||939929|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img409.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||857484|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img410.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||856924|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img411.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||869657|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img412.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||890809|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img413.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||881101|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img414.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||860242|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img415.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||867133|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img416.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||831861|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img417.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||825595|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img418.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||679496|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img419.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||810751|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img420.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||790732|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img421.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845998|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img422.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||745726|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img423.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||794258|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img424.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_attack_defense/pages/index.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img357.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img358.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img359.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img360.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img361.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img362.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img363.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img364.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img365.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img366.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||896620|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img367.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||730786|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img368.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801242|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img369.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883588|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img370.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img371.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||784457|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img372.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||843127|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img373.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||906461|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img374.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||752928|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img375.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791260|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img376.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964508|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img377.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||828964|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img378.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873941|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img379.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||915688|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img380.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||761790|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img381.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845370|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img382.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||856490|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img383.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||671068|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img384.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||743307|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img385.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||792125|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img386.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||851995|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img387.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||817621|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img388.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||899107|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img389.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||945623|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img390.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||956754|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img391.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||995889|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img392.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||924368|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img393.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||824827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img394.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862378|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img395.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883043|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img396.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||834414|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img397.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||772918|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img398.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||699001|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img399.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862577|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img400.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||859470|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img401.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||898820|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img402.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||911795|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img403.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||682827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img404.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||748989|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img405.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756089|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img406.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||947742|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img407.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||876865|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img408.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||939929|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img409.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||857484|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img410.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||856924|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img411.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||869657|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img412.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||890809|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img413.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||881101|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img414.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||860242|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img415.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||867133|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img416.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||831861|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img417.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||825595|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img418.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||679496|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img419.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||810751|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img420.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||790732|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img421.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845998|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img422.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||745726|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img423.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||794258|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img424.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_attack_defense/pages/tn/tn_index.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1006441|Jul|26||2013|/kb/books/go/go_basics/pages/img023.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1047128|Jul|26||2013|/kb/books/go/go_basics/pages/img024.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053967|Jul|26||2013|/kb/books/go/go_basics/pages/img025.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1014446|Jul|26||2013|/kb/books/go/go_basics/pages/img026.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1026767|Jul|26||2013|/kb/books/go/go_basics/pages/img027.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791176|Jul|26||2013|/kb/books/go/go_basics/pages/img028.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||813175|Jul|26||2013|/kb/books/go/go_basics/pages/img029.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||924714|Jul|26||2013|/kb/books/go/go_basics/pages/img030.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||905403|Jul|26||2013|/kb/books/go/go_basics/pages/img031.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||888119|Jul|26||2013|/kb/books/go/go_basics/pages/img032.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1055638|Jul|26||2013|/kb/books/go/go_basics/pages/img033.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||915998|Jul|26||2013|/kb/books/go/go_basics/pages/img034.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||837152|Jul|26||2013|/kb/books/go/go_basics/pages/img035.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||837128|Jul|26||2013|/kb/books/go/go_basics/pages/img036.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1089939|Jul|26||2013|/kb/books/go/go_basics/pages/img037.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||784389|Jul|26||2013|/kb/books/go/go_basics/pages/img038.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||889289|Jul|26||2013|/kb/books/go/go_basics/pages/img039.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||969966|Jul|26||2013|/kb/books/go/go_basics/pages/img040.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||919829|Jul|26||2013|/kb/books/go/go_basics/pages/img041.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1002672|Jul|26||2013|/kb/books/go/go_basics/pages/img042.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717797|Jul|26||2013|/kb/books/go/go_basics/pages/img043.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||768692|Jul|26||2013|/kb/books/go/go_basics/pages/img044.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||952072|Jul|26||2013|/kb/books/go/go_basics/pages/img045.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||696825|Jul|26||2013|/kb/books/go/go_basics/pages/img046.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||332310|Jul|26||2013|/kb/books/go/go_basics/pages/img047.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||445300|Jul|26||2013|/kb/books/go/go_basics/pages/img048.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_basics/pages/img049.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1006441|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img023.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1047128|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img024.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053967|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img025.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1014446|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img026.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1026767|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img027.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791176|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img028.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||813175|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img029.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||924714|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img030.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||905403|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img031.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||888119|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img032.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1055638|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img033.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||915998|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img034.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||837152|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img035.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||837128|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img036.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1089939|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img037.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||784389|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img038.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||889289|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img039.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||969966|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img040.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||919829|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img041.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1002672|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img042.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717797|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img043.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||768692|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img044.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||952072|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img045.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||696825|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img046.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||332310|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img047.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||445300|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img048.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img049.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||358516|Jul|26||2013|/kb/books/go/go_equipment/pages/img050.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||516648|Jul|26||2013|/kb/books/go/go_equipment/pages/img051.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791156|Jul|26||2013|/kb/books/go/go_equipment/pages/img052.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||486725|Jul|26||2013|/kb/books/go/go_equipment/pages/img053.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||948089|Jul|26||2013|/kb/books/go/go_equipment/pages/img054.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1033406|Jul|26||2013|/kb/books/go/go_equipment/pages/img055.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||687569|Jul|26||2013|/kb/books/go/go_equipment/pages/img056.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1065658|Jul|26||2013|/kb/books/go/go_equipment/pages/img057.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||857686|Jul|26||2013|/kb/books/go/go_equipment/pages/img058.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||603590|Apr|14||2013|/kb/books/go/go_equipment/pages/img061.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1374190|Apr|14||2013|/kb/books/go/go_equipment/pages/img062.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||976954|Apr|14||2013|/kb/books/go/go_equipment/pages/img063.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||592214|Apr|14||2013|/kb/books/go/go_equipment/pages/img064.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||390273|Apr|14||2013|/kb/books/go/go_equipment/pages/img065.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1340886|Apr|14||2013|/kb/books/go/go_equipment/pages/img066.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||807810|Apr|14||2013|/kb/books/go/go_equipment/pages/img067.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||537637|Apr|14||2013|/kb/books/go/go_equipment/pages/img068.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||358516|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img050.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||516648|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img051.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||791156|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img052.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||486725|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img053.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||948089|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img054.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1033406|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img055.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||687569|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img056.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1065658|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img057.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||857686|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img058.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||603590|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img061.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1374190|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img062.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||976954|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img063.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||592214|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img064.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||390273|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img065.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1340886|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img066.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||807810|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img067.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||537637|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img068.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964295|Jul|26||2013|/kb/books/go/go_joseki/pages/img070.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||951817|Jul|26||2013|/kb/books/go/go_joseki/pages/img071.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||854354|Jul|26||2013|/kb/books/go/go_joseki/pages/img072.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904237|Jul|26||2013|/kb/books/go/go_joseki/pages/img073.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||808049|Jul|26||2013|/kb/books/go/go_joseki/pages/img074.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||899297|Jul|26||2013|/kb/books/go/go_joseki/pages/img075.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907623|Jul|26||2013|/kb/books/go/go_joseki/pages/img076.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759807|Jul|26||2013|/kb/books/go/go_joseki/pages/img077.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1058618|Jul|26||2013|/kb/books/go/go_joseki/pages/img078.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1097406|Jul|26||2013|/kb/books/go/go_joseki/pages/img079.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1071509|Jul|26||2013|/kb/books/go/go_joseki/pages/img080.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1222293|Jul|26||2013|/kb/books/go/go_joseki/pages/img081.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||809594|Jul|26||2013|/kb/books/go/go_joseki/pages/img082.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||976407|Jul|26||2013|/kb/books/go/go_joseki/pages/img083.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1107226|Jul|26||2013|/kb/books/go/go_joseki/pages/img084.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1026899|Jul|26||2013|/kb/books/go/go_joseki/pages/img085.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1024022|Jul|26||2013|/kb/books/go/go_joseki/pages/img086.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1029782|Jul|26||2013|/kb/books/go/go_joseki/pages/img087.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1051070|Jul|26||2013|/kb/books/go/go_joseki/pages/img088.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||956297|Jul|26||2013|/kb/books/go/go_joseki/pages/img089.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1037967|Jul|26||2013|/kb/books/go/go_joseki/pages/img090.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1019427|Jul|26||2013|/kb/books/go/go_joseki/pages/img091.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1106972|Jul|26||2013|/kb/books/go/go_joseki/pages/img092.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1110897|Jul|26||2013|/kb/books/go/go_joseki/pages/img093.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1073256|Jul|26||2013|/kb/books/go/go_joseki/pages/img094.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||867457|Jul|27||2013|/kb/books/go/go_joseki/pages/img095.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1093950|Jul|27||2013|/kb/books/go/go_joseki/pages/img096.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1215177|Jul|27||2013|/kb/books/go/go_joseki/pages/img097.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1126591|Jul|27||2013|/kb/books/go/go_joseki/pages/img098.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1146058|Jul|27||2013|/kb/books/go/go_joseki/pages/img099.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||998658|Jul|27||2013|/kb/books/go/go_joseki/pages/img100.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||950064|Jul|27||2013|/kb/books/go/go_joseki/pages/img101.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1113709|Jul|27||2013|/kb/books/go/go_joseki/pages/img102.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1073193|Jul|27||2013|/kb/books/go/go_joseki/pages/img103.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||965100|Jul|27||2013|/kb/books/go/go_joseki/pages/img104.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||967947|Jul|27||2013|/kb/books/go/go_joseki/pages/img105.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053408|Jul|27||2013|/kb/books/go/go_joseki/pages/img106.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1108979|Jul|27||2013|/kb/books/go/go_joseki/pages/img107.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||993497|Jul|27||2013|/kb/books/go/go_joseki/pages/img108.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||970885|Jul|27||2013|/kb/books/go/go_joseki/pages/img109.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053854|Jul|27||2013|/kb/books/go/go_joseki/pages/img110.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||984744|Jul|27||2013|/kb/books/go/go_joseki/pages/img111.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053819|Jul|27||2013|/kb/books/go/go_joseki/pages/img112.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1187421|Jul|27||2013|/kb/books/go/go_joseki/pages/img113.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964581|Jul|27||2013|/kb/books/go/go_joseki/pages/img114.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||978287|Jul|27||2013|/kb/books/go/go_joseki/pages/img115.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||917482|Jul|27||2013|/kb/books/go/go_joseki/pages/img116.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||991987|Jul|27||2013|/kb/books/go/go_joseki/pages/img117.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||898921|Jul|27||2013|/kb/books/go/go_joseki/pages/img118.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1012220|Jul|27||2013|/kb/books/go/go_joseki/pages/img119.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1072925|Jul|27||2013|/kb/books/go/go_joseki/pages/img120.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||872746|Jul|27||2013|/kb/books/go/go_joseki/pages/img121.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||866500|Jul|27||2013|/kb/books/go/go_joseki/pages/img122.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1009773|Jul|27||2013|/kb/books/go/go_joseki/pages/img123.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||968391|Jul|27||2013|/kb/books/go/go_joseki/pages/img124.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||703303|Jul|27||2013|/kb/books/go/go_joseki/pages/img125.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||950503|Jul|27||2013|/kb/books/go/go_joseki/pages/img126.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||998706|Jul|27||2013|/kb/books/go/go_joseki/pages/img127.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873116|Jul|27||2013|/kb/books/go/go_joseki/pages/img128.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||821432|Jul|27||2013|/kb/books/go/go_joseki/pages/img129.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||825088|Jul|27||2013|/kb/books/go/go_joseki/pages/img130.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||896338|Jul|27||2013|/kb/books/go/go_joseki/pages/img131.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963585|Jul|27||2013|/kb/books/go/go_joseki/pages/img132.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||983883|Jul|27||2013|/kb/books/go/go_joseki/pages/img133.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873892|Jul|27||2013|/kb/books/go/go_joseki/pages/img134.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||769739|Jul|27||2013|/kb/books/go/go_joseki/pages/img135.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||713637|Jul|27||2013|/kb/books/go/go_joseki/pages/img136.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||584476|Jul|27||2013|/kb/books/go/go_joseki/pages/img137.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||909033|Jul|27||2013|/kb/books/go/go_joseki/pages/img138.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1022877|Jul|27||2013|/kb/books/go/go_joseki/pages/img139.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||744019|Jul|27||2013|/kb/books/go/go_joseki/pages/img140.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||166301|Jul|27||2013|/kb/books/go/go_joseki/pages/img141.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||404802|Jul|27||2013|/kb/books/go/go_joseki/pages/img142.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||536562|Jul|27||2013|/kb/books/go/go_joseki/pages/img143.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964295|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img070.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||951817|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img071.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||854354|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img072.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904237|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img073.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||808049|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img074.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||899297|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img075.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907623|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img076.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759807|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img077.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1058618|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img078.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1097406|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img079.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1071509|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img080.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1222293|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img081.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||809594|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img082.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||976407|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img083.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1107226|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img084.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1026899|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img085.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1024022|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img086.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1029782|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img087.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1051070|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img088.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||956297|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img089.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1037967|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img090.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1019427|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img091.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1106972|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img092.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1110897|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img093.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1073256|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img094.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||867457|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img095.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1093950|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img096.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1215177|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img097.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1126591|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img098.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1146058|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img099.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||998658|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img100.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||950064|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img101.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1113709|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img102.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1073193|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img103.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||965100|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img104.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||967947|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img105.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053408|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img106.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1108979|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img107.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||993497|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img108.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||970885|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img109.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053854|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img110.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||984744|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img111.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053819|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img112.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1187421|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img113.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||964581|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img114.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||978287|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img115.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||917482|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img116.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||991987|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img117.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||898921|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img118.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1012220|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img119.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1072925|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img120.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||872746|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img121.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||866500|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img122.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1009773|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img123.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||968391|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img124.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||703303|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img125.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||950503|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img126.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||998706|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img127.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873116|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img128.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||821432|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img129.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||825088|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img130.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||896338|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img131.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963585|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img132.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||983883|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img133.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||873892|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img134.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||769739|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img135.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||713637|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img136.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||584476|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img137.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||909033|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img138.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1022877|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img139.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||744019|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img140.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||166301|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img141.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||404802|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img142.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||536562|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img143.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||437291|Jul|28||2013|/kb/books/go/go_middlegame/pages/img183.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||525694|Jul|28||2013|/kb/books/go/go_middlegame/pages/img184.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||653806|Jul|28||2013|/kb/books/go/go_middlegame/pages/img185.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||841874|Jul|28||2013|/kb/books/go/go_middlegame/pages/img186.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||783850|Jul|28||2013|/kb/books/go/go_middlegame/pages/img187.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759335|Jul|28||2013|/kb/books/go/go_middlegame/pages/img188.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||777431|Jul|28||2013|/kb/books/go/go_middlegame/pages/img189.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621857|Jul|28||2013|/kb/books/go/go_middlegame/pages/img190.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621065|Jul|28||2013|/kb/books/go/go_middlegame/pages/img213.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||660424|Jul|28||2013|/kb/books/go/go_middlegame/pages/img214.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||640766|Jul|28||2013|/kb/books/go/go_middlegame/pages/img215.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||701699|Jul|28||2013|/kb/books/go/go_middlegame/pages/img216.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||684817|Jul|28||2013|/kb/books/go/go_middlegame/pages/img217.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||693628|Jul|28||2013|/kb/books/go/go_middlegame/pages/img218.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||652074|Jul|28||2013|/kb/books/go/go_middlegame/pages/img219.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||665520|Jul|28||2013|/kb/books/go/go_middlegame/pages/img220.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||664979|Jul|28||2013|/kb/books/go/go_middlegame/pages/img221.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||420880|Jul|28||2013|/kb/books/go/go_middlegame/pages/img222.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||653179|Jul|28||2013|/kb/books/go/go_middlegame/pages/img223.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||631018|Jul|28||2013|/kb/books/go/go_middlegame/pages/img224.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||614888|Jul|28||2013|/kb/books/go/go_middlegame/pages/img225.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||635578|Jul|28||2013|/kb/books/go/go_middlegame/pages/img226.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||664987|Jul|28||2013|/kb/books/go/go_middlegame/pages/img227.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||494882|Jul|28||2013|/kb/books/go/go_middlegame/pages/img228.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||755517|Jul|28||2013|/kb/books/go/go_middlegame/pages/img229.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||746024|Jul|28||2013|/kb/books/go/go_middlegame/pages/img230.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||740563|Jul|28||2013|/kb/books/go/go_middlegame/pages/img231.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||720673|Jul|28||2013|/kb/books/go/go_middlegame/pages/img232.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||641901|Jul|28||2013|/kb/books/go/go_middlegame/pages/img233.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||681172|Jul|28||2013|/kb/books/go/go_middlegame/pages/img234.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||681621|Jul|28||2013|/kb/books/go/go_middlegame/pages/img235.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||699626|Jul|28||2013|/kb/books/go/go_middlegame/pages/img236.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||692405|Jul|28||2013|/kb/books/go/go_middlegame/pages/img237.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||675217|Jul|28||2013|/kb/books/go/go_middlegame/pages/img238.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||637166|Jul|28||2013|/kb/books/go/go_middlegame/pages/img239.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||638038|Jul|28||2013|/kb/books/go/go_middlegame/pages/img240.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||746258|Jul|28||2013|/kb/books/go/go_middlegame/pages/img241.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||697934|Jul|28||2013|/kb/books/go/go_middlegame/pages/img242.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||680670|Jul|28||2013|/kb/books/go/go_middlegame/pages/img243.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||666127|Jul|28||2013|/kb/books/go/go_middlegame/pages/img244.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||703644|Jul|28||2013|/kb/books/go/go_middlegame/pages/img245.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||674102|Jul|28||2013|/kb/books/go/go_middlegame/pages/img246.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||684526|Jul|28||2013|/kb/books/go/go_middlegame/pages/img247.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||648526|Jul|28||2013|/kb/books/go/go_middlegame/pages/img248.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||728614|Jul|28||2013|/kb/books/go/go_middlegame/pages/img249.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||663415|Jul|28||2013|/kb/books/go/go_middlegame/pages/img250.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||694657|Jul|28||2013|/kb/books/go/go_middlegame/pages/img251.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||673729|Jul|28||2013|/kb/books/go/go_middlegame/pages/img252.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||663575|Jul|28||2013|/kb/books/go/go_middlegame/pages/img253.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||464991|Jul|28||2013|/kb/books/go/go_middlegame/pages/img254.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756849|Jul|28||2013|/kb/books/go/go_middlegame/pages/img255.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||761547|Jul|28||2013|/kb/books/go/go_middlegame/pages/img256.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801070|Jul|28||2013|/kb/books/go/go_middlegame/pages/img257.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||739075|Jul|28||2013|/kb/books/go/go_middlegame/pages/img258.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||787189|Jul|28||2013|/kb/books/go/go_middlegame/pages/img259.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||729433|Jul|28||2013|/kb/books/go/go_middlegame/pages/img260.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||793385|Jul|28||2013|/kb/books/go/go_middlegame/pages/img261.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756141|Jul|28||2013|/kb/books/go/go_middlegame/pages/img262.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||779572|Jul|28||2013|/kb/books/go/go_middlegame/pages/img263.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759079|Jul|28||2013|/kb/books/go/go_middlegame/pages/img264.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||738282|Jul|28||2013|/kb/books/go/go_middlegame/pages/img265.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||814029|Jul|28||2013|/kb/books/go/go_middlegame/pages/img266.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||833386|Jul|28||2013|/kb/books/go/go_middlegame/pages/img267.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||188285|Jul|28||2013|/kb/books/go/go_middlegame/pages/img268.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||369506|Jul|28||2013|/kb/books/go/go_middlegame/pages/img269.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||384764|Jul|28||2013|/kb/books/go/go_middlegame/pages/img270.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||547382|Jul|28||2013|/kb/books/go/go_middlegame/pages/img271.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||647343|Jul|28||2013|/kb/books/go/go_middlegame/pages/img272.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1070171|Jul|28||2013|/kb/books/go/go_middlegame/pages/img273.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1188408|Jul|28||2013|/kb/books/go/go_middlegame/pages/img274.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||315266|Jul|28||2013|/kb/books/go/go_middlegame/pages/img275.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||299360|Jul|28||2013|/kb/books/go/go_middlegame/pages/img276.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||707195|Jul|28||2013|/kb/books/go/go_middlegame/pages/img277.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||872457|Jul|28||2013|/kb/books/go/go_middlegame/pages/img278.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||959051|Jul|28||2013|/kb/books/go/go_middlegame/pages/img279.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||920879|Jul|28||2013|/kb/books/go/go_middlegame/pages/img280.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||926630|Jul|28||2013|/kb/books/go/go_middlegame/pages/img281.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1034689|Jul|28||2013|/kb/books/go/go_middlegame/pages/img282.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||341434|Jul|25||2013|/kb/books/go/go_middlegame/pages/img283.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1211055|Jul|25||2013|/kb/books/go/go_middlegame/pages/img284.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||437291|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img183.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||525694|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img184.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||653806|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img185.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||841874|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img186.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||783850|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img187.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759335|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img188.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||777431|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img189.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621857|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img190.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621065|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img213.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||660424|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img214.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||640766|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img215.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||701699|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img216.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||684817|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img217.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||693628|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img218.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||652074|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img219.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||665520|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img220.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||664979|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img221.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||420880|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img222.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||653179|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img223.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||631018|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img224.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||614888|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img225.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||635578|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img226.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||664987|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img227.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||494882|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img228.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||755517|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img229.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||746024|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img230.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||740563|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img231.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||720673|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img232.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||641901|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img233.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||681172|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img234.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||681621|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img235.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||699626|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img236.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||692405|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img237.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||675217|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img238.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||637166|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img239.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||638038|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img240.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||746258|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img241.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||697934|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img242.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||680670|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img243.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||666127|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img244.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||703644|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img245.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||674102|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img246.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||684526|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img247.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||648526|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img248.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||728614|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img249.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||663415|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img250.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||694657|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img251.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||673729|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img252.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||663575|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img253.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||464991|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img254.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756849|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img255.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||761547|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img256.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801070|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img257.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||739075|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img258.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||787189|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img259.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||729433|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img260.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||793385|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img261.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756141|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img262.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||779572|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img263.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||759079|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img264.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||738282|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img265.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||814029|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img266.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||833386|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img267.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||188285|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img268.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||369506|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img269.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||384764|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img270.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||547382|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img271.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||647343|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img272.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1070171|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img273.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1188408|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img274.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||315266|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img275.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||299360|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img276.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||707195|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img277.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||872457|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img278.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||959051|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img279.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||920879|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img280.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||926630|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img281.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1034689|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img282.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||341434|Jul|25||2013|/kb/books/go/go_middlegame/pages/tn/tn_img283.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1211055|Jul|25||2013|/kb/books/go/go_middlegame/pages/tn/tn_img284.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053658|Jul|25||2013|/kb/books/go/go_strategy/pages/img285.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||336909|Jul|25||2013|/kb/books/go/go_strategy/pages/img286.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||354099|Jul|25||2013|/kb/books/go/go_strategy/pages/img287.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||409400|Jul|25||2013|/kb/books/go/go_strategy/pages/img288.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||417952|Jul|25||2013|/kb/books/go/go_strategy/pages/img289.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||690620|Jul|25||2013|/kb/books/go/go_strategy/pages/img290.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845711|Jul|25||2013|/kb/books/go/go_strategy/pages/img291.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1028081|Jul|25||2013|/kb/books/go/go_strategy/pages/img292.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1126342|Jul|25||2013|/kb/books/go/go_strategy/pages/img293.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1106874|Jul|25||2013|/kb/books/go/go_strategy/pages/img294.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1054403|Jul|25||2013|/kb/books/go/go_strategy/pages/img295.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1120631|Jul|25||2013|/kb/books/go/go_strategy/pages/img296.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756489|Jul|25||2013|/kb/books/go/go_strategy/pages/img297.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1084236|Jul|25||2013|/kb/books/go/go_strategy/pages/img298.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1067948|Jul|25||2013|/kb/books/go/go_strategy/pages/img299.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||979594|Jul|25||2013|/kb/books/go/go_strategy/pages/img300.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1045182|Jul|25||2013|/kb/books/go/go_strategy/pages/img301.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||901610|Jul|25||2013|/kb/books/go/go_strategy/pages/img302.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||918985|Jul|25||2013|/kb/books/go/go_strategy/pages/img303.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862420|Jul|25||2013|/kb/books/go/go_strategy/pages/img304.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||886557|Jul|25||2013|/kb/books/go/go_strategy/pages/img305.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||787507|Jul|25||2013|/kb/books/go/go_strategy/pages/img306.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||911463|Jul|25||2013|/kb/books/go/go_strategy/pages/img307.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||965161|Jul|25||2013|/kb/books/go/go_strategy/pages/img308.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||973577|Jul|25||2013|/kb/books/go/go_strategy/pages/img309.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||888001|Jul|25||2013|/kb/books/go/go_strategy/pages/img310.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||786913|Jul|25||2013|/kb/books/go/go_strategy/pages/img311.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963093|Jul|25||2013|/kb/books/go/go_strategy/pages/img312.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1189822|Jul|25||2013|/kb/books/go/go_strategy/pages/img313.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||877732|Jul|25||2013|/kb/books/go/go_strategy/pages/img314.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||849270|Jul|25||2013|/kb/books/go/go_strategy/pages/img315.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963161|Jul|25||2013|/kb/books/go/go_strategy/pages/img316.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||507750|Jul|25||2013|/kb/books/go/go_strategy/pages/img317.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||930132|Jul|26||2013|/kb/books/go/go_strategy/pages/img318.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862631|Jul|26||2013|/kb/books/go/go_strategy/pages/img319.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||2584516|Jul|26||2013|/kb/books/go/go_strategy/pages/img319_rot.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907770|Jul|26||2013|/kb/books/go/go_strategy/pages/img320.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1074018|Jul|26||2013|/kb/books/go/go_strategy/pages/img321.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||985358|Jul|26||2013|/kb/books/go/go_strategy/pages/img322.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||955316|Jul|26||2013|/kb/books/go/go_strategy/pages/img323.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1048619|Jul|26||2013|/kb/books/go/go_strategy/pages/img324.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1013385|Jul|26||2013|/kb/books/go/go_strategy/pages/img325.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1091971|Jul|26||2013|/kb/books/go/go_strategy/pages/img326.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801231|Jul|26||2013|/kb/books/go/go_strategy/pages/img327.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845582|Jul|26||2013|/kb/books/go/go_strategy/pages/img328.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||931676|Jul|26||2013|/kb/books/go/go_strategy/pages/img329.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1068374|Jul|26||2013|/kb/books/go/go_strategy/pages/img330.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||836404|Jul|26||2013|/kb/books/go/go_strategy/pages/img331.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1002956|Jul|26||2013|/kb/books/go/go_strategy/pages/img332.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||858923|Jul|26||2013|/kb/books/go/go_strategy/pages/img333.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904910|Jul|26||2013|/kb/books/go/go_strategy/pages/img334.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||905806|Jul|28||2013|/kb/books/go/go_strategy/pages/img335.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1032145|Jul|28||2013|/kb/books/go/go_strategy/pages/img336.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||927378|Jul|28||2013|/kb/books/go/go_strategy/pages/img337.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1021816|Jul|28||2013|/kb/books/go/go_strategy/pages/img338.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1007963|Jul|28||2013|/kb/books/go/go_strategy/pages/img339.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1087169|Jul|28||2013|/kb/books/go/go_strategy/pages/img340.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907719|Jul|28||2013|/kb/books/go/go_strategy/pages/img341.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1017200|Jul|28||2013|/kb/books/go/go_strategy/pages/img342.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1008372|Jul|28||2013|/kb/books/go/go_strategy/pages/img343.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904314|Jul|28||2013|/kb/books/go/go_strategy/pages/img344.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||865407|Jul|28||2013|/kb/books/go/go_strategy/pages/img345.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||936444|Jul|28||2013|/kb/books/go/go_strategy/pages/img346.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1098851|Jul|28||2013|/kb/books/go/go_strategy/pages/img347.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1136515|Jul|28||2013|/kb/books/go/go_strategy/pages/img348.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1181254|Jul|28||2013|/kb/books/go/go_strategy/pages/img349.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||826651|Jul|28||2013|/kb/books/go/go_strategy/pages/img350.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||605881|Jul|28||2013|/kb/books/go/go_strategy/pages/img351.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||695558|Jul|28||2013|/kb/books/go/go_strategy/pages/img352.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||166542|Jul|28||2013|/kb/books/go/go_strategy/pages/img353.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||147900|Jul|28||2013|/kb/books/go/go_strategy/pages/img354.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||216814|Jul|28||2013|/kb/books/go/go_strategy/pages/img355.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||224027|Jul|28||2013|/kb/books/go/go_strategy/pages/img356.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1053658|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img285.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||336909|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img286.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||354099|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img287.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||409400|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img288.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||417952|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img289.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||690620|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img290.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845711|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img291.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1028081|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img292.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1126342|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img293.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1106874|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img294.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1054403|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img295.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1120631|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img296.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||756489|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img297.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1084236|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img298.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1067948|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img299.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||979594|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img300.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1045182|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img301.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||901610|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img302.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||918985|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img303.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862420|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img304.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||886557|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img305.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||787507|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img306.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||911463|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img307.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||965161|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img308.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||973577|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img309.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||888001|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img310.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||786913|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img311.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963093|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img312.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1189822|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img313.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||877732|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img314.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||849270|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img315.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||963161|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img316.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||507750|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img317.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||930132|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img318.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||862631|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img319.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||2584516|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img319_rot.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907770|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img320.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1074018|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img321.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||985358|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img322.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||955316|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img323.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1048619|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img324.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1013385|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img325.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1091971|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img326.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||801231|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img327.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||845582|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img328.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||931676|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img329.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1068374|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img330.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||836404|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img331.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1002956|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img332.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||858923|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img333.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904910|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img334.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||905806|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img335.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1032145|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img336.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||927378|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img337.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1021816|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img338.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1007963|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img339.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1087169|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img340.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||907719|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img341.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1017200|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img342.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1008372|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img343.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||904314|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img344.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||865407|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img345.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||936444|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img346.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1098851|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img347.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1136515|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img348.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||1181254|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img349.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||826651|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img350.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||605881|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img351.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||695558|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img352.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||166542|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img353.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||147900|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img354.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||216814|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img355.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||224027|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img356.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||313740|Jul|27||2013|/kb/books/go/go_tesuji/pages/img144.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||534933|Jul|27||2013|/kb/books/go/go_tesuji/pages/img145.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||637566|Jul|27||2013|/kb/books/go/go_tesuji/pages/img146.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883337|Jul|27||2013|/kb/books/go/go_tesuji/pages/img147.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||910842|Jul|27||2013|/kb/books/go/go_tesuji/pages/img148.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||547960|Jul|27||2013|/kb/books/go/go_tesuji/pages/img149.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||511374|Jul|27||2013|/kb/books/go/go_tesuji/pages/img150.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||309376|Jul|27||2013|/kb/books/go/go_tesuji/pages/img151.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||712605|Jul|27||2013|/kb/books/go/go_tesuji/pages/img152.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||610951|Jul|27||2013|/kb/books/go/go_tesuji/pages/img153.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||579887|Apr|15||2013|/kb/books/go/go_tesuji/pages/img154.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||205822|Apr|15||2013|/kb/books/go/go_tesuji/pages/img155.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||506775|Apr|15||2013|/kb/books/go/go_tesuji/pages/img156.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||554846|Apr|15||2013|/kb/books/go/go_tesuji/pages/img157.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||267323|Apr|15||2013|/kb/books/go/go_tesuji/pages/img158.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||328954|Apr|15||2013|/kb/books/go/go_tesuji/pages/img159.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||378242|Apr|15||2013|/kb/books/go/go_tesuji/pages/img160.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||726846|Jul|27||2013|/kb/books/go/go_tesuji/pages/img161.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||725448|Jul|27||2013|/kb/books/go/go_tesuji/pages/img162.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||687696|Jul|27||2013|/kb/books/go/go_tesuji/pages/img163.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717765|Jul|27||2013|/kb/books/go/go_tesuji/pages/img164.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||527036|Jul|27||2013|/kb/books/go/go_tesuji/pages/img165.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||706619|Jul|27||2013|/kb/books/go/go_tesuji/pages/img166.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||742105|Jul|27||2013|/kb/books/go/go_tesuji/pages/img167.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||797265|Jul|27||2013|/kb/books/go/go_tesuji/pages/img168.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||760087|Jul|27||2013|/kb/books/go/go_tesuji/pages/img169.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||657636|Jul|27||2013|/kb/books/go/go_tesuji/pages/img170.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||755147|Jul|28||2013|/kb/books/go/go_tesuji/pages/img171.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||645677|Jul|28||2013|/kb/books/go/go_tesuji/pages/img172.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||696265|Jul|28||2013|/kb/books/go/go_tesuji/pages/img173.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||712791|Jul|28||2013|/kb/books/go/go_tesuji/pages/img174.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717123|Jul|28||2013|/kb/books/go/go_tesuji/pages/img175.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||652155|Jul|28||2013|/kb/books/go/go_tesuji/pages/img176.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||813062|Jul|28||2013|/kb/books/go/go_tesuji/pages/img177.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||685220|Jul|28||2013|/kb/books/go/go_tesuji/pages/img178.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||599655|Jul|28||2013|/kb/books/go/go_tesuji/pages/img179.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621916|Jul|28||2013|/kb/books/go/go_tesuji/pages/img180.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||511956|Jul|28||2013|/kb/books/go/go_tesuji/pages/img181.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||510349|Jul|28||2013|/kb/books/go/go_tesuji/pages/img182.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||313740|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img144.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||534933|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img145.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||637566|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img146.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||883337|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img147.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||910842|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img148.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||547960|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img149.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||511374|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img150.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||309376|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img151.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||712605|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img152.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||610951|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img153.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||579887|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img154.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||205822|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img155.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||506775|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img156.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||554846|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img157.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||267323|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img158.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||328954|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img159.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||378242|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img160.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||726846|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img161.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||725448|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img162.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||687696|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img163.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717765|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img164.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||527036|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img165.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||706619|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img166.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||742105|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img167.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||797265|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img168.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||760087|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img169.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||657636|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img170.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||755147|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img171.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||645677|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img172.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||696265|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img173.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||712791|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img174.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||717123|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img175.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||652155|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img176.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||813062|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img177.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||685220|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img178.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||599655|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img179.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||621916|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img180.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||511956|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img181.jpg";
			pages[j++] = "-rw-r--r--||1|konet||staff||510349|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img182.jpg";

			pages_len = pages.length;
			alert( "BUGS_1611 lslat_kb_books_go.js pages="+pages+" pages_len="+pages_len );
//			alert( "BUGS_1612 lslat_kb_books_go.js window.pages="+window.pages );
			return( pages );
			}
			</script>

	<script id="script_thumbnails">
		function load_thumbnails(pages) {
			alert( "BUGS_2500 load_thumbnails" );
//			var pages = new Array();
			var pages_len = 0;
			var j = 0; var k=0;
			var htmout = "";
//			pages = load_pages();
			pages_len = pages.length;
			j=1;
			htmout += '<ul>';
			htmout += '<li class="i">';
			htmout += '	<img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-1">';
			htmout += ' <span>1</span>';
			htmout += '	</li>';

			for( j = 2; j<pages_len; j=j+2 ) {
				k=j+1;
				htmout += '<li class="d">';
				htmout += '<img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-2">';
				htmout += '<img src="pages/tn/tn_'+k+'.png" width="76" height="100" class="page-3">';
				htmout += '<span>'+j+"-"+k+'</span>';
				htmout += '</li>';
				}

			htmout += '<li class="i">';
			htmout += '	<img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-'+j+'">';
			htmout += '	<span>'+j+'</span>';
			htmout += '	</li>';
			htmout += '<ul>';
			alert( "BUGS_2432 htmout="+htmout );

			var div_thumbnails = document.getElementById('div_thumbnails');
			div_thumbnails.innerHTML = htmout;
			return(htmout);
			}
		</script>


		<script id="script_random_int" >
			function random_int(max,min) {
				min = Math.ceil(min);
				max = Math.floor(max);
				return Math.floor(Math.random() * (max - min + 1)) + min;	
				}

//			random_kolink()
			</script>

		<script id="script_random_imglnk">
			function random_imglink(){
				var myimgs=new Array()
//specify random imgs below. You can have as many as you wish
				myimgs[1]="/imgs/bg/bg_frax_ribbon.jpg"
				myimgs[2]="/imgs/bg/bg_frax_thorn.jpg"
				myimgs[3]="/imgs/bg/bg_newton05b.jpg"
				myimgs[4]="/imgs/bg/bg_frax_thorn.jpg"
				myimgs[5]="/imgs/bg/bg_frax_thorn.jpg"
				myimgs[6]="/imgs/bg/bg_newton04bw.gif"
				myimgs[7]="/imgs/bg/bg_newton05b.png"
				myimgs[8]="/imgs/bg/bg_newton05b.png"
				myimgs[9]="/imgs/bg/bg_newton05b.png"

				var ry=Math.floor(Math.random()*myimgs.length)
				if (ry==0) ry=1
				document.write('<img src="'+myimgs[ry]+'" border=0 height=200>')
				}
//			random_imglink()
//			random_imglink()
//			random_imglink()
			</script>'





	<script id="script_startup">
		var href=window.location.href;
//		alert( "BUGS_2580 script_startup href="+href );
		var host=window.location.host;
		var pathname=window.location.pathname;
		var search=window.location.search;
		url_default="fb.json";
//		alert( "BUGS_2591 url_default="+url_default );

//		var replaced =  pathname.replace(/(^\.+|\.+$)/mg, '');

		if( pathname.endsWith(".htm")) {
			url_default=pathname.replace(".html",".json" );
//			alert( "BUGS_2595 url_default="+url_default );
			}
		else {
			url_default=pathname.replace(".html",".php" );
//			alert( "BUGS_2596 url_default="+url_default );
			}
		url=url_default;
		if( search.search("?")) {
			url=search.replace("?","");
			}

//		alert( "BUGS_2600 href="+href+" url="+url );
		

		var pagelist = new Array();
		var pagelist_len = 0;
		var ajaks = "";
		var j = 0;

		var pagelist_default = new Array();
		var pagelist_head = new Array();
		var pagelist_pages = new Array();
		var pagelist_imgs = new Array();
		var pagelist_i = new Array();
		var pagelist_go = new Array();
		var pagelist_tail = new Array();
		var pagelist_ajax = new Array();

		var pagelist_default_len = pagelist_default.length;
		var pagelist_head_len = pagelist_head.length;
		var pagelist_pages_len =  pagelist_pages.length;
		var pagelist_imgs_len =  pagelist_imgs.length;
		var pagelist_i_len =  pagelist_i.length;
		var pagelist_go_len =  pagelist_go.length;
		var pagelist_tail_len =  pagelist_tail.length;
		var pagelist_ajaks_len =  pagelist_ajaks.length;

//		alert( "BUGS_3001 pagelist_default_len="+pagelist_default_len+" pagelist_default="+pagelist_default );
//		alert( "BUGS_3002 pagelist_head_len="+pagelist_head_len+" pagelist_head="+pagelist_head );
//		alert( "BUGS_3003 pagelist_pages_len="+pagelist_pages_len+" pagelist_pages="+pagelist_pages );
//		alert( "BUGS_3004 pagelist_imgs_len="+pagelist_imgs_len+" pagelist_imgs="+pagelist_imgs );
//		alert( "BUGS_3005 pagelist_i_len="+pagelist_i_len+" pagelist_i="+pagelist_i );
//		alert( "BUGS_3006 pagelist_go_len="+pagelist_go_len+" pagelist_go="+pagelist_go );
//		alert( "BUGS_3007 pagelist_tail_len="+pagelist_tail_len+" pagelist_tail="+pagelist_tail );
//		alert( "BUGS_3008 pagelist_ajaks_len="+pagelist_ajaks_len+" pagelist_ajaks="+pagelist_ajaks );



		function startup() {
//			alert( "BUGS_3000 startup" );
//			var href = window.location.href;
//			alert( "BUGS_2620 startup href="+href );
//			var pagelist = new Array();
//			var pagelist_len=0;
//			var ajaks = "";
			var j = 0;
			var htmout = "";


			pagelist = load_pagelist();
			pagelist_len=pagelist.length;
//			alert( "BUGS_3100 pagelist_len="+pagelist_len+" pagelist="+pagelist);

			pagelist_head = load_pagelist_head();
			pagelist_head_len = pagelist_head.length;
//			alert( "BUGS_3101 pagelist_head_len="+pagelist_head_len+" pagelist_head="+pagelist_head );

			pagelist_pages = load_pagelist_pages();
			pagelist_pages_len = pagelist_pages.length;
//			alert( "BUGS_3102 pagelist_pages_len="+pagelist_pages_len+" pagelist_pages="+pagelist_pages );

			pagelist_imgs = load_pagelist_imgs();
			pagelist_imgs_len = pagelist_imgs.length;
//			alert( "BUGS_3103 pagelist_imgs_len="+pagelist_imgs_len+" pagelist_imgs="+pagelist_imgs );

			pagelist_i = load_pagelist_i();
			pagelist_i_len = pagelist_i.length;
//			alert( "BUGS_3104 pagelist_i_len="+pagelist_i_len+" pagelist_i="+pagelist_i );

			pagelist_go = load_pagelist_go();
			pagelist_go_len = pagelist_go.length;
//			alert( "BUGS_3105 pagelist_go_len="+pagelist_go_len+" pagelist_go="+pagelist_go );

			pagelist_tail = load_pagelist_tail();
			pagelist_tail_len = pagelist_tail.length;
//			alert( "BUGS_3106 pagelist_tail_len="+pagelist_tail_len+" pagelist_tail="+pagelist_tail );

			var pagelist_ajaks = new Array();
			var pagelist_ajaks_len = 0;
			var ajaks="fb.txt";
//			alert( "BUGS_3107a ajaks="+ajaks );
//			pagelist_ajaks = load_pagelist_ajaks(ajaks);
//			alert( "BUGS_3107b ajaks="+ajaks );
//			pagelist_ajaks_len = pagelist_ajaks.length;
//			alert( "BUGS_3107c pagelist_ajaks_len="+pagelist_ajaks_len+" pagelist_ajaks="+pagelist_ajaks );

//			pagelist = pagelist.concat( pagelist_head );
//			pagelist = pagelist.concat( pagelist_pages );
//			pagelist = pagelist.concat( pagelist_imgs );
//			pagelist = pagelist.concat( pagelist_i );
//			pagelist = pagelist.concat( pagelist_go );
//			pagelist = pagelist.concat( pagelist_tail );
//			pagelist = pagelist.concat( pagelist_ajaks );
//			pagelist = pagelist_head.concat(pagelist_go, pagelist_pages,pagelist_imgs,pagelist_i,pagelist_go,pagelist_tail );
			pagelist = pagelist_go;
			pagelist = pagelist_pages;
			pagelist = pagelist_imgs;
			pagelist_len=pagelist.length;
//			alert( "BUGS_3200 pagelist_len="+pagelist_len+" pagelist="+pagelist);


//			alert( "BUGS_2577 startup pages_len="+pages_len );
//			load_thumbnails(pages);
//			html_tn(pages);
//			alert( "BUGS_2588 startup htmout="+htmout );
//			alert( "BUGS_2581 startup pages_len="+pages_len+"  pages="+pages );
//			window.pages = pages;
//			alert( "BUGS_1650 startup pages_len="+pages_len+"  window.pages="+window.pages );
			}

		function html_tn(pagelist) {
			var pagelist_len = 0;
			var j = 0; var k=0;
			var htmout = "";
//			pagelist = load_pagelist();
			pagelist_len = pagelist.length;
			j=1;
			htmout += '<ul>';
			htmout += '<li class="i">';
			htmout += '	<img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-1">';
			htmout += ' <span>1</span>';
			htmout += '	</li>';

//			for( j = 2; j<pagelist_len; j=j+2 ) {
			for( j = 2; j<600; j=j+2 ) {
				k=j+1;
				htmout += '<li class="d">';
				htmout += '<img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-2">';
				htmout += '<img src="pages/tn/tn_'+k+'.png" width="76" height="100" class="page-3">';
				htmout += '<span>'+j+"-"+k+'</span>';
				htmout += '</li>';
				}

			htmout += '<li class="i">';
			htmout += '	<img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-'+j+'">';
			htmout += '	<span>'+j+'</span>';
			htmout += '	</li>';
			htmout += '<ul>';
//			alert( "BUGS_2432 htmout="+htmout );

//			var div_tn = document.getElementById('div_tn');
//			div_tn.innerHTML = htmout;

//			alert( "BUGS_2600 html_tn pages_len="+pages_len+" htmout="+htmout );
//			var div_tn = document.getElementbyID("div_tn");
//			document.getElementById('div_tn').insertAdjacentHTML("beforebegin", htmout )
//			div_tn.insertAdjacentHTML('beforeend', htmout);
//			document.write(htmout);
			return(htmout);
			}
		</script>

	<script id="script_utils">
		var execTest = function (str) {
			return /([^\\]+)$/.exec(str)[1];
			}
		var splitTest = function (str) {
			return str.split('\\').pop().split('/').pop();
			}
		</script>




	<style id="style_body_scroll">
		body{ overflow-y:scroll; }
		</style>


	</head>



<body bgcolor="darkslategray" onload="startup();return false;" >

<hr color=yellow>
<a href=http://ko2.us/us/jtfdcr/ target=_blank><img src=http://ko2.us/fb/jtfdcr/pages/tn/tn_1.png></a>
<a href=http://ko2.us/fb/jtfdc/ target=_blank><img src=http://ko2.us/fb/jtfdc/pages/tn/tn_1.png></a>
<a href=http://ko2.us/fb/jkwii/ target=_blank><img src=http://ko2.us/fb/jkwii/pages/tn/tn_1.png></a>
<a href=http://ko2.us/fb/who2jail/ target=_blank><img src=http://ko2.us/fb/who2jail/pages/tn/tn_1.png></a>
<a href=http://ko2.us/fb/konet/ target=_blank><img src=http://ko2.us/fb/konet/pages/tn/tn_1.png></a>
<hr color=yellow>
<!--
	<h1>preview kb_books_go</h1>
	<h2>preview kb_books_go</h2>
	<h3>preview kb_books_go</h3>
	<hr color=white>
	<hr color=black>
	<hr color=black>
	<hr color=white>
	-->
<div id="canvas">
	<div class="zoom-icon zoom-icon-in"></div>
	<div class="magazine-viewport">
		<div class="container">
			<div class="magazine">
				<!-- Next button -->
				<div ignore="1" class="next-button"></div>
				<!-- Previous button -->
				<div ignore="1" class="previous-button"></div>
				</div>
			</div>
		</div>

<!-- Thumbnails -->
<!--	<div id="div_tn"></div>
 -->

	<div class="thumbnails">
		<div>
			<ul>
			<li class="i">
				<img src="pages/tn/tn_1.png" width="76" height="100" class="page-1">
				<span>1</span>
				</li>

			<li class="d">
				<img src="pages/tn/tn_2.png" width="76" height="100" class="page-2">
				<img src="pages/tn/tn_3.png" width="76" height="100" class="page-3">
				<span>2-3</span>
				</li>
			<li class="d">
				<img src="pages/tn/tn_4.png" width="76" height="100" class="page-4">
				<img src="pages/tn/tn_5.png" width="76" height="100" class="page-5">
				<span>4-5</span>
				</li>
			<li class="d">
				<img src="pages/tn/tn_6.png" width="76" height="100" class="page-6">
				<img src="pages/tn/tn_7.png" width="76" height="100" class="page-7">
				<span>6-7</span>
				</li>
			<li class="d">
				<img src="pages/tn/tn_8.png" width="76" height="100" class="page-8">
				<img src="pages/tn/tn_9.png" width="76" height="100" class="page-9">
				<span>8-9</span>
				</li>
			<li class="d">
				<img src="pages/tn/tn_10.png" width="76" height="100" class="page-10">
				<img src="pages/tn/tn_11.png" width="76" height="100" class="page-11">
				<span>10-11</span>
				</li>
			<li class="d">
				<img src="pages/tn/tn_12.png" width="76" height="100" class="page-12">
				<img src="pages/tn/tn_13.png" width="76" height="100" class="page-13">
				<span>12-13</span>
				</li>
			<li class="d">
				<img src="pages/tn/tn_14.png" width="76" height="100" class="page-14">
				<img src="pages/tn/tn_15.png" width="76" height="100" class="page-15">
				<span>14-15</span>
				</li>
			<li class="d">
				<img src="pages/tn/tn_16.png" width="76" height="100" class="page-14">
				<img src="pages/tn/tn_17.png" width="76" height="100" class="page-15">
				<span>16-17</span>
				</li>

			<li class="i">
				<img src="pages/tn/tn_18.png" width="76" height="100" class="page-16">
				<span>18</span>
				</li>
			<ul>
			<div>	</div>
		</div>

	<script type="text/javascript">
		function loadApp() {
 			$('#canvas').fadeIn(1000);
 			var flipbook = $('.magazine');

// Check if the CSS was already loaded
	
	if (flipbook.width()==0 || flipbook.height()==0) {
		setTimeout(loadApp, 10);
		return;
	}
	
// Create the flipbook
	flipbook.turn({
// Magazine width
// Magazine height
// Duration in millisecond
// Hardware acceleration
// Enables gradients
// Auto center this flipbook
// Elevation from the edge of the flipbook when turning a page
			width: 922,
			height: 600,
			duration: 1000,
			acceleration: !isChrome(),
			gradients: true,
			autoCenter: true,
			elevation: 50,

// The number of pages
//			pages: 12,
//			pages: 16,
			pages: 758,

// Events

			
			when: {
				turning: function(event, page, view) {
					
					var book = $(this),
					currentPage = book.turn('page'),
					pages = book.turn('pages');
			
					// Update the current URI

					Hash.go('page/' + page).update();

					// Show and hide navigation buttons

					disableControls(page);
					

					$('.thumbnails .page-'+currentPage).
						parent().
						removeClass('current');

					$('.thumbnails .page-'+page).
						parent().
						addClass('current');



				},

				turned: function(event, page, view) {

					disableControls(page);

					$(this).turn('center');

					if (page==1) { 
						$(this).turn('peel', 'br');
					}

				},

				missing: function (event, pages) {

					// Add pages that aren't in the magazine

					for (var i = 0; i < pages.length; i++)
						addPage(pages[i], $(this));

				}
			}

	});

	// Zoom.js

	$('.magazine-viewport').zoom({
		flipbook: $('.magazine'),

		max: function() { 
			
			return largeMagazineWidth()/$('.magazine').width();

		}, 

		when: {

			swipeLeft: function() {

				$(this).zoom('flipbook').turn('next');

			},

			swipeRight: function() {
				
				$(this).zoom('flipbook').turn('previous');

			},

			resize: function(event, scale, page, pageElement) {

				if (scale==1)
					loadSmallPage(page, pageElement);
				else
					loadLargePage(page, pageElement);

			},

			zoomIn: function () {

				$('.thumbnails').hide();
				$('.made').hide();
				$('.magazine').removeClass('animated').addClass('zoom-in');
				$('.zoom-icon').removeClass('zoom-icon-in').addClass('zoom-icon-out');
				
				if (!window.escTip && !$.isTouch) {
					escTip = true;

					$('<div />', {'class': 'exit-message'}).
						html('<div>Press ESC to exit</div>').
							appendTo($('body')).
							delay(2000).
							animate({opacity:0}, 500, function() {
								$(this).remove();
							});
				}
			},

			zoomOut: function () {

				$('.exit-message').hide();
				$('.thumbnails').fadeIn();
				$('.made').fadeIn();
				$('.zoom-icon').removeClass('zoom-icon-out').addClass('zoom-icon-in');

				setTimeout(function(){
					$('.magazine').addClass('animated').removeClass('zoom-in');
					resizeViewport();
				}, 0);

			}
		}
	});

	// Zoom event

	if ($.isTouch)
		$('.magazine-viewport').bind('zoom.doubleTap', zoomTo);
	else
		$('.magazine-viewport').bind('zoom.tap', zoomTo);


	// Using arrow keys to turn the page

	$(document).keydown(function(e){

		var previous = 37, next = 39, esc = 27;

		switch (e.keyCode) {
			case previous:

				// left arrow
				$('.magazine').turn('previous');
				e.preventDefault();

			break;
			case next:

				//right arrow
				$('.magazine').turn('next');
				e.preventDefault();

			break;
			case esc:
				
				$('.magazine-viewport').zoom('zoomOut');	
				e.preventDefault();

			break;
		}
	});

	// URIs - Format #/page/1 

	Hash.on('^page\/([0-9]*)$', {
		yep: function(path, parts) {
			var page = parts[1];

			if (page!==undefined) {
				if ($('.magazine').turn('is'))
					$('.magazine').turn('page', page);
			}

		},
		nop: function(path) {

			if ($('.magazine').turn('is'))
				$('.magazine').turn('page', 1);
		}
	});


	$(window).resize(function() {
		resizeViewport();
	}).bind('orientationchange', function() {
		resizeViewport();
	});

	// Events for thumbnails

	$('.thumbnails').click(function(event) {
		
		var page;

		if (event.target && (page=/page-([0-9]+)/.exec($(event.target).attr('class'))) ) {
		
			$('.magazine').turn('page', page[1]);
		}
	});

	$('.thumbnails li').
		bind($.mouseEvents.over, function() {
			
			$(this).addClass('thumb-hover');

		}).bind($.mouseEvents.out, function() {
			
			$(this).removeClass('thumb-hover');

		});

	if ($.isTouch) {
	
		$('.thumbnails').
			addClass('thumbanils-touch').
			bind($.mouseEvents.move, function(event) {
				event.preventDefault();
			});

	} else {

		$('.thumbnails ul').mouseover(function() {

			$('.thumbnails').addClass('thumbnails-hover');

		}).mousedown(function() {

			return false;

		}).mouseout(function() {

			$('.thumbnails').removeClass('thumbnails-hover');

		});

	}


	// Regions

	if ($.isTouch) {
		$('.magazine').bind('touchstart', regionClick);
	} else {
		$('.magazine').click(regionClick);
	}

	// Events for the next button

	$('.next-button').bind($.mouseEvents.over, function() {
		
		$(this).addClass('next-button-hover');

	}).bind($.mouseEvents.out, function() {
		
		$(this).removeClass('next-button-hover');

	}).bind($.mouseEvents.down, function() {
		
		$(this).addClass('next-button-down');

	}).bind($.mouseEvents.up, function() {
		
		$(this).removeClass('next-button-down');

	}).click(function() {
		
		$('.magazine').turn('next');

	});

	// Events for the next button
	
	$('.previous-button').bind($.mouseEvents.over, function() {
		
		$(this).addClass('previous-button-hover');

	}).bind($.mouseEvents.out, function() {
		
		$(this).removeClass('previous-button-hover');

	}).bind($.mouseEvents.down, function() {
		
		$(this).addClass('previous-button-down');

	}).bind($.mouseEvents.up, function() {
		
		$(this).removeClass('previous-button-down');

	}).click(function() {
		
		$('.magazine').turn('previous');

	});


	resizeViewport();

	$('.magazine').addClass('animated');

}

// Zoom icon

 $('.zoom-icon').bind('mouseover', function() { 
 	
 	if ($(this).hasClass('zoom-icon-in'))
 		$(this).addClass('zoom-icon-in-hover');

 	if ($(this).hasClass('zoom-icon-out'))
 		$(this).addClass('zoom-icon-out-hover');
 
 }).bind('mouseout', function() { 
 	
 	 if ($(this).hasClass('zoom-icon-in'))
 		$(this).removeClass('zoom-icon-in-hover');
 	
 	if ($(this).hasClass('zoom-icon-out'))
 		$(this).removeClass('zoom-icon-out-hover');

 }).bind('click', function() {

 	if ($(this).hasClass('zoom-icon-in'))
 		$('.magazine-viewport').zoom('zoomIn');
 	else if ($(this).hasClass('zoom-icon-out'))	
		$('.magazine-viewport').zoom('zoomOut');

 });

 $('#canvas').hide();


// Load the HTML4 version if there's not CSS transform

 yepnope({
//	test : Modernizr.csstransforms,
//	yep: ['../../lib/turn.js'],
//	yep: ['data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UKICogdHVybmpzLmNvbQogKiB0dXJuanMuY29tL2xpY2Vuc2UudHh0CiAqCiAqIENvcHlyaWdodCAoQykgMjAxMiBFbW1hbnVlbCBHYXJjaWEKICogQWxsIHJpZ2h0cyByZXNlcnZlZAogKiovCgooZnVuY3Rpb24oJCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhczNkLAogIAogIGhhc1JvdCwKCiAgdmVuZG9yID0gJycsCiAgCiAgdmVyc2lvbiA9ICc0LjEuMCcsCgogIFBJID0gTWF0aC5QSSwKCiAgQTkwID0gUEkvMiwKCiAgaXNUb3VjaCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdywKCiAgbW91c2VFdmVudHMgPSAoaXNUb3VjaCkgPwogICAgewogICAgICBkb3duOiAndG91Y2hzdGFydCcsCiAgICAgIG1vdmU6ICd0b3VjaG1vdmUnLAogICAgICB1cDogJ3RvdWNoZW5kJywKICAgICAgb3ZlcjogJ3RvdWNoc3RhcnQnLAogICAgICBvdXQ6ICd0b3VjaGVuZCcKICAgIH0KICAgIDoKICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICAvLyBDb250YW5zdHMgdXNlZCBmb3IgZWFjaCBjb3JuZXIKICAvLyAgIHwgdGwgKiB0ciB8CiAgLy8gbCB8ICogICAgICogfCByCiAgLy8gICB8IGJsICogYnIgfAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnYmwnLCAndGwnXSwKICAgIGZvcndhcmQ6IFsnYnInLCAndHInXSwKICAgIGFsbDogWyd0bCcsICdibCcsICd0cicsICdicicsICdsJywgJ3InXQogIH0sCgogIC8vIERpc3BsYXkgdmFsdWVzCgogIGRpc3BsYXlzID0gWydzaW5nbGUnLCAnZG91YmxlJ10sCgogIC8vIERpcmVjdGlvbiB2YWx1ZXMKCiAgZGlyZWN0aW9ucyA9IFsnbHRyJywgJ3J0bCddLAoKICAvLyBEZWZhdWx0IG9wdGlvbnMKCiAgdHVybk9wdGlvbnMgPSB7CgogICAgLy8gRW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KCiAgICBhY2NlbGVyYXRpb246IHRydWUsCgogICAgLy8gRGlzcGxheQoKICAgIGRpc3BsYXk6ICdkb3VibGUnLAoKICAgIC8vIER1cmF0aW9uIG9mIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzCgogICAgZHVyYXRpb246IDYwMCwKCiAgICAvLyBGaXJzdCBwYWdlCgogICAgcGFnZTogMSwKICAgIAogICAgLy8gRW5hYmxlcyBncmFkaWVudHMKCiAgICBncmFkaWVudHM6IHRydWUsCgogICAgLy8gQ29ybmVycyB1c2VkIHdoZW4gdHVybmluZyB0aGUgcGFnZQoKICAgIHR1cm5Db3JuZXJzOiAnYmwsYnInLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMAoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCiAgICAvLyBEZWZpbmUgY29uc3RhbnRzCiAgICAKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKICAgIGhhc1JvdCA9IHJvdGF0aW9uQXZhaWxhYmxlKCk7CiAgICB2ZW5kb3IgPSBnZXRQcmVmaXgoKTsKCiAgICB2YXIgaSwgdGhhdCA9IHRoaXMsIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRpb25zID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRpb25zKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRpb25zOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlWm9vbSA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0aW9ucy5wYWdlcyB8fCAwOwogICAgZGF0YS5ldmVudEhhbmRsZXJzID0gewogICAgICB0b3VjaFN0YXJ0OiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaFN0YXJ0LCB0aGlzKSwKICAgICAgdG91Y2hNb3ZlOiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaE1vdmUsIHRoaXMpLAogICAgICB0b3VjaEVuZDogJC5wcm94eSh0dXJuTWV0aG9kcy5fdG91Y2hFbmQsIHRoaXMpLAogICAgICBzdGFydDogJC5wcm94eSh0dXJuTWV0aG9kcy5fZXZlbnRTdGFydCwgdGhpcykKICAgIH07CgoKCiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgZm9yIChpIGluIG9wdGlvbnMud2hlbikKICAgICAgICBpZiAoaGFzKGksIG9wdGlvbnMud2hlbikpCiAgICAgICAgICB0aGlzLmJpbmQoaSwgb3B0aW9ucy53aGVuW2ldKTsKCiAgICAvLyBTZXQgdGhlIGNzcwoKICAgIHRoaXMuY3NzKHtwb3NpdGlvbjogJ3JlbGF0aXZlJywgd2lkdGg6IG9wdGlvbnMud2lkdGgsIGhlaWdodDogb3B0aW9ucy5oZWlnaHR9KTsKCiAgICAvLyBTZXQgdGhlIGluaXRpYWwgZGlzcGxheQoKICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CgogICAgLy8gU2V0IHRoZSBkaXJlY3Rpb24KCiAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24hPT0nJykKICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CiAgICAKICAgIC8vIFByZXZlbnQgYmx1ZSBzY3JlZW4gcHJvYmxlbXMgb2Ygc3dpdGNoaW5nIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtb2RlCiAgICAvLyBCeSBmb3JjaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgZXZlcgoKICAgIGlmIChoYXMzZCAmJiAhaXNUb3VjaCAmJiBvcHRpb25zLmFjY2VsZXJhdGlvbikKICAgICAgdGhpcy50cmFuc2Zvcm0odHJhbnNsYXRlKDAsIDAsIHRydWUpKTsKCiAgICAvLyBBZGQgcGFnZXMgZnJvbSB0aGUgRE9NCgogICAgZm9yIChpID0gMDsgaTxjaC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoJChjaFtpXSkuYXR0cignaWdub3JlJykhPScxJykgewogICAgICAgIHRoaXMudHVybignYWRkUGFnZScsIGNoW2ldLCArK3BhZ2VOdW0pOwogICAgICB9CiAgICB9CgogICAgLy8gRXZlbnQgbGlzdGVuZXJzCgogICAgJCh0aGlzKS5iaW5kKG1vdXNlRXZlbnRzLmRvd24sIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaFN0YXJ0KS4KICAgICAgYmluZCgnZW5kJywgdHVybk1ldGhvZHMuX2V2ZW50RW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9ldmVudFByZXNzZWQpLgogICAgICBiaW5kKCdyZWxlYXNlZCcsIHR1cm5NZXRob2RzLl9ldmVudFJlbGVhc2VkKS4KICAgICAgYmluZCgnZmxpcCcsIHR1cm5NZXRob2RzLl9mbGlwKTsKCiAgICAkKHRoaXMpLnBhcmVudCgpLmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS5iaW5kKG1vdXNlRXZlbnRzLm1vdmUsIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaE1vdmUpLgogICAgICBiaW5kKG1vdXNlRXZlbnRzLnVwLCBkYXRhLmV2ZW50SGFuZGxlcnMudG91Y2hFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAvLyBUaGlzIGZsaXBib29rIGlzIHJlYWR5CgogICAgZGF0YS5kb25lID0gdHJ1ZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZSBmcm9tIGV4dGVybmFsIGRhdGEKCiAgYWRkUGFnZTogZnVuY3Rpb24oZWxlbWVudCwgcGFnZSkgewoKICAgIHZhciBjdXJyZW50UGFnZSwKICAgICAgY2xhc3NOYW1lLAogICAgICBpbmNQYWdlcyA9IGZhbHNlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGxhc3RQYWdlID0gZGF0YS50b3RhbFBhZ2VzKzE7CgogICAgaWYgKGRhdGEuZGVzdHJveWluZykKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFJlYWQgdGhlIHBhZ2UgbnVtYmVyIGZyb20gdGhlIGNsYXNzTmFtZSBvZiBgZWxlbWVudGAgLSBmb3JtYXQ6IHBbMC05XSsKCiAgICBpZiAoKGN1cnJlbnRQYWdlID0gL1xicChbMC05XSspXGIvLmV4ZWMoJChlbGVtZW50KS5hdHRyKCdjbGFzcycpKSkpCiAgICAgIHBhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZVsxXSwgMTApOwoKICAgIGlmIChwYWdlKSB7CiAgICAgIAogICAgICBpZiAocGFnZT09bGFzdFBhZ2UpCiAgICAgICAgaW5jUGFnZXMgPSB0cnVlOwogICAgICBlbHNlIGlmIChwYWdlPmxhc3RQYWdlKQogICAgICAgIHRocm93IHR1cm5FcnJvcignUGFnZSAiJytwYWdlKyciIGNhbm5vdCBiZSBpbnNlcnRlZCcpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBwYWdlID0gbGFzdFBhZ2U7CiAgICAgIGluY1BhZ2VzID0gdHJ1ZTsKCiAgICB9CgogICAgaWYgKHBhZ2U+PTEgJiYgcGFnZTw9bGFzdFBhZ2UpIHsKCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICAgIGNsYXNzTmFtZSA9IChwYWdlJTIpID8gJyBvZGQnIDogJyBldmVuJzsKICAgICAgZWxzZQogICAgICAgIGNsYXNzTmFtZSA9ICcnOwoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIGlmIChkYXRhLmRvbmUpCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAvLyBNb3ZlIHBhZ2VzIGlmIGl0J3MgbmVjZXNzYXJ5CiAgICAgIGlmIChwYWdlIGluIGRhdGEucGFnZU9ianMpCiAgICAgICAgdHVybk1ldGhvZHMuX21vdmVQYWdlcy5jYWxsKHRoaXMsIHBhZ2UsIDEpOwoKICAgICAgLy8gSW5jcmVhc2UgdGhlIG51bWJlciBvZiBwYWdlcwogICAgICBpZiAoaW5jUGFnZXMpCiAgICAgICAgZGF0YS50b3RhbFBhZ2VzID0gbGFzdFBhZ2U7CgogICAgICAvLyBBZGQgZWxlbWVudAogICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdID0gJChlbGVtZW50KS4KICAgICAgICBjc3MoeydmbG9hdCc6ICdsZWZ0J30pLgogICAgICAgIGFkZENsYXNzKCdwYWdlIHAnICsgcGFnZSArIGNsYXNzTmFtZSk7CgogICAgICBpZiAoIWhhc0hhcmRQYWdlKCkgJiYgIGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2hhcmQnKSkgewogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0ucmVtb3ZlQ2xhc3MoJ2hhcmQnKTsKICAgICAgfQoKICAgICAgLy8gQWRkIHBhZ2UKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgLy8gV3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXSA9ICQoJzxkaXYvPicsCiAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KTsKCiAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhpcyBmbGlwYm9vawogICAgICAgICAgdGhpcy5hcHBlbmQoZGF0YS5wYWdlV3JhcFtwYWdlXSk7CgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VQbGFjZVtwYWdlXSkgewogICAgICAgICAgICAKICAgICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwogICAgICAgICAgICAvLyBNb3ZlIGBwYWdlT2Jqc1twYWdlXWAgdG8gd3JhcHBlcgogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmFwcGVuZFRvKGRhdGEucGFnZVdyYXBbcGFnZV0pOwogICAgICAgICAgCiAgICAgICAgIH0KCiAgICAgICAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIHBhZ2UKICAgICAgICAgIHZhciBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICB9CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9PSBwYWdlKSB7CgogICAgICAgICAvLyBJZiB0aGUgcGFnZSBpc24ndCBpbiBhbm90aGVyIHBsYWNlLCBjcmVhdGUgdGhlIGZsaXAgZWZmZWN0CiAgICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZUZsaXAuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIH0KICAgICAgICAKICAgICAgfSBlbHNlIHsKCiAgICAgICAgLy8gUGxhY2UKICAgICAgICBkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9IDA7CgogICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IGZyb20gdGhlIERPTQogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICAgIH0KCiAgfSwKCiAgLy8gQ2hlY2tzIGlmIGEgcGFnZSBpcyBpbiBtZW1vcnkKICAKICBoYXNQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcmV0dXJuIGhhcyhwYWdlLCB0aGlzLmRhdGEoKS5wYWdlT2Jqcyk7CiAgCiAgfSwKCiAgLy8gQ2VudGVycyB0aGUgZmxpcGJvb2sKCiAgY2VudGVyOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHNpemUgPSAkKHRoaXMpLnR1cm4oJ3NpemUnKSwKICAgICAgbGVmdCA9IDA7CgogICAgaWYgKCFkYXRhLm5vQ2VudGVyKSB7CiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICB9CiAgICAgIAogICAgICB9CgogICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBmbGlwYm9vayA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgZXZlbnRzID0gWwogICAgICAgICdlbmQnLCAnZmlyc3QnLCAnZmxpcCcsICdsYXN0JywgJ3ByZXNzZWQnLAogICAgICAgICdyZWxlYXNlZCcsICdzdGFydCcsICd0dXJuaW5nJywgJ3R1cm5lZCcsCiAgICAgICAgJ3pvb21pbmcnLCAnbWlzc2luZyddOwoKICAgIGlmICh0cmlnZ2VyKCdkZXN0cm95aW5nJywgdGhpcyk9PSdwcmV2ZW50ZWQnKQogICAgICByZXR1cm47CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkLmVhY2goZXZlbnRzLCBmdW5jdGlvbihpbmRleCwgZXZlbnROYW1lKSB7CiAgICAgIGZsaXBib29rLnVuYmluZChldmVudE5hbWUpOwogICAgfSk7CgogICAgdGhpcy5wYXJlbnQoKS51bmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS51bmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoTW92ZSkuCiAgICAgIHVuYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAgIAogICAgICBpZiAodHJpZ2dlcignem9vbWluZycsIHRoaXMsIFtuZXdab29tLCBkYXRhLnpvb21dKT09J3ByZXZlbnRlZCcpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIAogICAgICB2YXIgc2l6ZSA9IHRoaXMudHVybignc2l6ZScpLAogICAgICAgIGN1cnJlbnRWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICAgICAvKi4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7Ki8KCiAgICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwogICAgICAvKmVsc2UKICAgICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogc2l6ZS53aWR0aCAqIGl6IC8gMiAtIG5ld1dpZHRoIC8gMn0pOyovCgogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaTxjdXJyZW50Vmlldy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjdXJyZW50Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSE9ZGF0YS56b29tKSB7CiAgCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgICBjdXJyZW50Vmlld1tpXSwKICAgICAgICAgICAgY3VycmVudFZpZXcsCiAgICAgICAgICAgIGRhdGEucGFnZVpvb21bY3VycmVudFZpZXdbaV1dLAogICAgICAgICAgICBkYXRhLnpvb21dKTsKCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSA9IGRhdGEuem9vbTsKICAgICAgfQogICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLnpvb207CgogIH0sCgogIC8vIEdldHMgdGhlIHNpemUgb2YgYSBwYWdlCgogIF9wYWdlU2l6ZTogZnVuY3Rpb24ocGFnZSwgcG9zaXRpb24pIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwcm9wID0ge307CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKCiAgICAgIHByb3Aud2lkdGggPSB0aGlzLndpZHRoKCk7CiAgICAgIHByb3AuaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHByb3AudG9wID0gMDsKICAgICAgICBwcm9wLmxlZnQgPSAwOwogICAgICAgIHByb3AucmlnaHQgPSAnYXV0byc7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdmFyIHBhZ2VXaWR0aCA9IHRoaXMud2lkdGgoKS8yLAogICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ293bi1zaXplJykpIHsKICAgICAgICBwcm9wLndpZHRoID0gZGF0YS5wYWdlT2Jqc1twYWdlXS53aWR0aCgpOwogICAgICAgIHByb3AuaGVpZ2h0ID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oZWlnaHQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcm9wLndpZHRoID0gcGFnZVdpZHRoOwogICAgICAgIHByb3AuaGVpZ2h0ID0gcGFnZUhlaWdodDsKICAgICAgfQogICAgICAKICAgICAgaWYgKHBvc2l0aW9uKSB7CiAgICAgICAgdmFyIG9kZCA9IHBhZ2UlMjsKICAgICAgICBwcm9wLnRvcCA9IChwYWdlSGVpZ2h0LXByb3AuaGVpZ2h0KS8yOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9IHBhZ2VXaWR0aC1wcm9wLndpZHRoOwogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gJ2F1dG8nOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9ICdhdXRvJzsKCiAgICAgICAgfQogICAgICAKICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcm9wOwoKICB9LAoKICAvLyBQcmVwYXJlcyB0aGUgZmxpcCBlZmZlY3QgZm9yIGEgcGFnZQoKICBfbWFrZUZsaXA6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICghZGF0YS5wYWdlc1twYWdlXSAmJiBkYXRhLnBhZ2VQbGFjZVtwYWdlXT09cGFnZSkgewogICAgICAKICAgICAgdmFyIHNpbmdsZSA9IGRhdGEuZGlzcGxheT09J3NpbmdsZScsCiAgICAgICAgb2RkID0gcGFnZSUyOwoKICAgICAgZGF0YS5wYWdlc1twYWdlXSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgY3NzKHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UpKS4KICAgICAgICBmbGlwKHsKICAgICAgICAgIHBhZ2U6IHBhZ2UsCiAgICAgICAgICBuZXh0OiAob2RkIHx8IHNpbmdsZSkgPyBwYWdlKzEgOiBwYWdlLTEsCiAgICAgICAgICB0dXJuOiB0aGlzCiAgICAgICAgfSkuCiAgICAgICAgZmxpcCgnZGlzYWJsZScsIGRhdGEuZGlzYWJsZWQpOwoKICAgICAgICAvLyBJc3N1ZSBhYm91dCB6LWluZGV4CiAgICAgICAgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGF0YS5wYWdlWm9vbVtwYWdlXSA9IGRhdGEuem9vbTsKICAgICAgICAKICAgIH0KCiAgICByZXR1cm4gZGF0YS5wYWdlc1twYWdlXTsKICB9LAoKICAvLyBNYWtlcyBwYWdlcyB3aXRoaW4gYSByYW5nZQoKICBfbWFrZVJhbmdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgcmFuZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS50b3RhbFBhZ2VzPDEpCiAgICAgIHJldHVybjsKCiAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICBmb3IgKHBhZ2UgPSByYW5nZVswXTsgcGFnZTw9cmFuZ2VbMV07IHBhZ2UrKykKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgfSwKCiAgLy8gUmV0dXJucyBhIHJhbmdlIG9mIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBET00KICAvLyBFeGFtcGxlOgogIC8vIC0gcGFnZSBpbiB0aGUgY3VycmVudCB2aWV3LCByZXR1cm4gdHJ1ZQogIC8vICogcGFnZSBpcyBpbiB0aGUgcmFuZ2UsIHJldHVybiB0cnVlCiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UKICAvLwogIC8vIDEgMi0zIDQtNSA2LTcgOC05IDEwLTExIDEyLTEzCiAgLy8gICAqKiAgKiogIC0tICAgKiogICoqCgogIHJhbmdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIHJlbWFpbmluZ1BhZ2VzLCBsZWZ0LCByaWdodCwgdmlldywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgICAgcGFnZSA9IHBhZ2UgfHwgZGF0YS50cGFnZSB8fCBkYXRhLnBhZ2UgfHwgMTsKICAgICAgdmlldyA9IHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgcGFnZSk7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicrcGFnZSsnIiBpcyBub3QgYSB2YWxpZCBwYWdlJyk7CgogICAgCiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdIHx8IHZpZXdbMF07CiAgICAgIAogICAgICBpZiAodmlld1swXT49MSAmJiB2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpIHsKCiAgICAgICAgcmVtYWluaW5nUGFnZXMgPSBNYXRoLmZsb29yKChwYWdlc0luRE9NLTIpLzIpOwoKICAgICAgICBpZiAoZGF0YS50b3RhbFBhZ2VzLXZpZXdbMV0gPiB2aWV3WzBdKSB7CiAgICAgICAgICBsZWZ0ID0gTWF0aC5taW4odmlld1swXS0xLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICByaWdodCA9IDIqcmVtYWluaW5nUGFnZXMtbGVmdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmlnaHQgPSBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSwgcmVtYWluaW5nUGFnZXMpOwogICAgICAgICAgbGVmdCA9IDIqcmVtYWluaW5nUGFnZXMtcmlnaHQ7CiAgICAgICAgfQoKICAgICAgfSBlbHNlIHsKICAgICAgICBsZWZ0ID0gcGFnZXNJbkRPTS0xOwogICAgICAgIHJpZ2h0ID0gcGFnZXNJbkRPTS0xOwogICAgICB9CgogICAgICByZXR1cm4gW01hdGgubWF4KDEsIHZpZXdbMF0tbGVmdCksCiAgICAgICAgICBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMsIHZpZXdbMV0rcmlnaHQpXTsKCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiBhIHBhZ2UgaXMgd2l0aGluIHRoZSByYW5nZSBvZiBgcGFnZXNJbkRPTWAgZnJvbSB0aGUgY3VycmVudCB2aWV3CgogIF9uZWNlc3NQYWdlOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIGlmIChwYWdlPT09MCkKICAgICAgcmV0dXJuIHRydWU7CgogICAgdmFyIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScpOwoKICAgIHJldHVybiB0aGlzLmRhdGEoKS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhIHBhZ2UKCiAgcmVtb3ZlUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgLy8gRGVsZXRlIGFsbCB0aGUgcGFnZXMKICAgIGlmIChwYWdlPT0nKicpIHsKICAgICAgCiAgICAgIHdoaWxlIChkYXRhLnRvdGFsUGFnZXMhPT0wKSB7CiAgICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgICAKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pIHsKCiAgICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAgIC8vIFJlbW92ZSBgcGFnZWAKICAgICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgICB9CgogICAgICAvLyBNb3ZlIHRoZSBwYWdlcwogICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgLTEpOwoKICAgICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgICAgZGF0YS50b3RhbFBhZ2VzID0gZGF0YS50b3RhbFBhZ2VzLTE7CgogICAgICAvLyBDaGVjayB0aGUgY3VycmVudCB2aWV3CgogICAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykgewoKICAgICAgIGRhdGEucGFnZSA9IG51bGw7CiAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEudG90YWxQYWdlcyk7CgogICAgICB9IGVsc2UgewoKICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICAKICB9LAoKICAvLyBNb3ZlcyBwYWdlcwoKICBfbW92ZVBhZ2VzOiBmdW5jdGlvbihmcm9tLCBjaGFuZ2UpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2luZ2xlID0gZGF0YS5kaXNwbGF5PT0nc2luZ2xlJywKICAgICAgbW92ZSA9IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICAgICAgdmFyIG5leHQgPSBwYWdlICsgY2hhbmdlLAogICAgICAgICAgb2RkID0gbmV4dCUyLAogICAgICAgICAgY2xhc3NOYW1lID0gKG9kZCkgPyAnIG9kZCAnIDogJyBldmVuICc7CgogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1tuZXh0XSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgICAgIHJlbW92ZUNsYXNzKCdwJyArIHBhZ2UgKyAnIG9kZCBldmVuJykuCiAgICAgICAgICAgIGFkZENsYXNzKCdwJyArIG5leHQgKyBjbGFzc05hbWUpOwoKICAgICAgICBpZiAoZGF0YS5wYWdlUGxhY2VbcGFnZV0gJiYgZGF0YS5wYWdlV3JhcFtwYWdlXSkgewoKICAgICAgICAgIGRhdGEucGFnZVBsYWNlW25leHRdID0gbmV4dDsKICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW25leHRdLmhhc0NsYXNzKCdmaXhlZCcpKQogICAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXS4KICAgICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGF0LCBuZXh0LCB0cnVlKSkuCiAgICAgICAgICAgICAgYXR0cigncGFnZScsIG5leHQpOwogICAgICAKICAgICAgICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgICAgICAgZGF0YS5wYWdlc1tuZXh0XSA9IGRhdGEucGFnZXNbcGFnZV0uCiAgICAgICAgICAgICAgICBmbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgICBwYWdlOiBuZXh0LAogICAgICAgICAgICAgICAgICBuZXh0OiAoc2luZ2xlIHx8IG9kZCkgPyBuZXh0KzEgOiBuZXh0LTEKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGNoYW5nZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VzW3BhZ2VdOwogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5PT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CgogICAgfSBlbHNlIHsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlzcGxheSwgZGlzcGxheXMpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJyInK2Rpc3BsYXkgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlzcGxheScpOwogICAgICAKICAgICAgc3dpdGNoKGRpc3BsYXkpIHsKICAgICAgICBjYXNlICdzaW5nbGUnOgoKICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFsIHBhZ2UgdG8gdXNlIGFzIGZvbGRlZCBwYWdlCgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICAgIGNzcyh7J292ZXJmbG93JzogJ2hpZGRlbid9KTsKCiAgICAgICAgICAgIGRhdGEucGFnZU9ianNbMF0gPSAkKCc8ZGl2IC8+JywKICAgICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICAgIGNzcyh7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgICAgICAgYXBwZW5kVG8odGhpcyk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hZGRDbGFzcygnc2hhZG93Jyk7CgogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RvdWJsZSc6CgogICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhbCBwYWdlCgogICAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pIHsKICAgICAgICAgICAgdGhpcy50dXJuKCdzdG9wJykuY3NzKHsnb3ZlcmZsb3cnOiAnJ30pOwogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1swXTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdzaGFkb3cnKTsKCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgCgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0KICAKICB9LAogIAogIC8vIEdldHMgYW5kIHNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpcGJvb2sKCiAgZGlyZWN0aW9uOiBmdW5jdGlvbihkaXIpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkaXI9PT11bmRlZmluZWQpIHsKCiAgICAgIHJldHVybiBkYXRhLmRpcmVjdGlvbjsKCiAgICB9IGVsc2UgewoKICAgICAgZGlyID0gZGlyLnRvTG93ZXJDYXNlKCk7CgogICAgICBpZiAoJC5pbkFycmF5KGRpciwgZGlyZWN0aW9ucyk9PS0xKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicgKyBkaXIgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlyZWN0aW9uJyk7CgogICAgICBpZiAoZGlyPT0ncnRsJykgewogICAgICAgICQodGhpcykuYXR0cignZGlyJywgJ2x0cicpLgogICAgICAgICAgY3NzKHtkaXJlY3Rpb246ICdsdHInfSk7CiAgICAgIH0KCiAgICAgIGRhdGEuZGlyZWN0aW9uID0gZGlyOwoKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCAkKHRoaXMpLndpZHRoKCksICQodGhpcykuaGVpZ2h0KCkpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIERldGVjdHMgYW5pbWF0aW9uCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCBhY3RpdmF0ZWQgY29ybmVyCgogIGNvcm5lcjogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciBjb3JuZXIsCiAgICAgIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlcykgewogICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgIGlmICgoY29ybmVyID0gZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdjb3JuZXInKSkpIHsKICAgICAgICAgIHJldHVybiBjb3JuZXI7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9LAoKICAvLyBHZXRzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgZmxpcGJvb2sKCiAgZGF0YTogZnVuY3Rpb24oKSB7CiAgICAKICAgIHJldHVybiB0aGlzLmRhdGEoKTsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGRhdGEuZGlzYWJsZWQgPSBkaXNhYmxlPT09dW5kZWZpbmVkIHx8IGRpc2FibGU9PT10cnVlOwoKICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgIChkYXRhLmRpc2FibGVkKSA/IHRydWUgOiAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCB2aWV3KT09LTEpOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoPT09dW5kZWZpbmVkIHx8IGhlaWdodD09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHt3aWR0aDogdGhpcy53aWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCl9OwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIHZhciBwYWdlLCBwcm9wLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykgPyB3aWR0aC8yIDogd2lkdGg7CgogICAgICB0aGlzLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pCiAgICAgICAgZGF0YS5wYWdlT2Jqc1swXS5jc3Moe3dpZHRoOiBwYWdlV2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKSBjb250aW51ZTsKCiAgICAgICAgcHJvcCA9IHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UsIHRydWUpOwoKICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyhwcm9wKTsKICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfQogIH0sCgogIC8vIFJlc2l6ZXMgZWFjaCBwYWdlCgogIHJlc2l6ZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5wYWdlc1swXSkgewogICAgICBkYXRhLnBhZ2VXcmFwWzBdLmNzcyh7bGVmdDogLXRoaXMud2lkdGgoKX0pOwogICAgICBkYXRhLnBhZ2VzWzBdLmZsaXAoJ3Jlc2l6ZScsIHRydWUpOwogICAgfQoKICAgIGZvciAocGFnZSA9IDE7IHBhZ2UgPD0gZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CgogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhbiBhbmltYXRpb24gZnJvbSB0aGUgY2FjaGUKCiAgX3JlbW92ZU12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGksIGRhdGEgPSB0aGlzLmRhdGEoKTsKICAgICAgCiAgICBmb3IgKGk9MDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykKICAgICAgaWYgKGRhdGEucGFnZU12W2ldPT1wYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlTXYuc3BsaWNlKGksIDEpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgcmV0dXJuIGZhbHNlOwoKICB9LAoKICAvLyBBZGRzIGFuIGFuaW1hdGlvbiB0byB0aGUgY2FjaGUKICAKICBfYWRkTXY6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9yZW1vdmVNdi5jYWxsKHRoaXMsIHBhZ2UpOwogICAgZGF0YS5wYWdlTXYucHVzaChwYWdlKTsKCiAgfSwKCiAgLy8gR2V0cyBpbmRleGVzIGZvciBhIHZpZXcKCiAgX3ZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAKICAgIHBhZ2UgPSBwYWdlIHx8IGRhdGEucGFnZTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIChwYWdlJTIpID8gW3BhZ2UtMSwgcGFnZV0gOiBbcGFnZSwgcGFnZSsxXTsKICAgIGVsc2UKICAgICAgcmV0dXJuIFtwYWdlXTsKCiAgfSwKCiAgLy8gR2V0cyBhIHZpZXcKCiAgdmlldzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICByZXR1cm4gWyh2aWV3WzBdPjApID8gdmlld1swXSA6IDAsCiAgICAgICAgKHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgPyB2aWV3WzFdIDogMF07CiAgICBlbHNlCiAgICAgIHJldHVybiBbKHZpZXdbMF0+MCAmJiB2aWV3WzBdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1swXSA6IDBdOwoKICB9LAoKICAvLyBTdG9wcyBhbmltYXRpb25zCgogIHN0b3A6IGZ1bmN0aW9uKGlnbm9yZSwgYW5pbWF0ZSkgewoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpKSB7CiAgCiAgICAgIHZhciBpLCBvcHRzLCBwYWdlLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIGlmIChkYXRhLnRwYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlID0gZGF0YS50cGFnZTsKICAgICAgICBkZWxldGUgZGF0YVsndHBhZ2UnXTsKICAgICAgfQoKICAgICAgZm9yIChpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewoKICAgICAgICBpZiAoIWRhdGEucGFnZU12W2ldIHx8IGRhdGEucGFnZU12W2ldPT09aWdub3JlKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIHBhZ2UgPSBkYXRhLnBhZ2VzW2RhdGEucGFnZU12W2ldXTsKICAgICAgICBvcHRzID0gcGFnZS5kYXRhKCkuZi5vcHRzOwoKICAgICAgICBwYWdlLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgYW5pbWF0ZSk7CgogICAgICAgIGlmICghYW5pbWF0ZSkKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CgogICAgICB9CiAgICB9CiAgICAKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzCgogIHBhZ2VzOiBmdW5jdGlvbihwYWdlcykgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHBhZ2VzKSB7CgogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2U+cGFnZXM7IHBhZ2UtLSkKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgfQoKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBwYWdlczsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEucGFnZSk7CgogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgdmFyIHAsCiAgICAgICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJywgcGFnZSksCiAgICAgICAgbWlzc2luZyA9IFtdOwoKICAgIGZvciAocCA9IHJhbmdlWzBdOyBwPD1yYW5nZVsxXTsgcCsrKSB7CiAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1twXSkKICAgICAgICBtaXNzaW5nLnB1c2gocCk7CiAgICB9CgogICAgaWYgKG1pc3NpbmcubGVuZ3RoPjApCiAgICAgIHRoaXMudHJpZ2dlcignbWlzc2luZycsIFttaXNzaW5nXSk7CgogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgCiAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaTxuZXdWaWV3Lmxlbmd0aDsgaSsrKSB7CgogICAgICBpZiAobmV3Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dIT1kYXRhLnpvb20pIHsKICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgbmV3Vmlld1tpXSwKICAgICAgICAgIG5ld1ZpZXcsCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dLAogICAgICAgICAgZGF0YS56b29tXSk7CgogICAgICAgIGRhdGEucGFnZVpvb21bbmV3Vmlld1tpXV0gPSBkYXRhLnpvb207CgogICAgICB9CiAgICB9CgogICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl9tYWtlUmFuZ2UuY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbCh0aGlzKTsKICAgIHRoaXMudHJpZ2dlcigndHVybmVkJywgW3BhZ2UsIG5ld1ZpZXddKTsKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgaWYgKGRhdGEub3B0cy5hdXRvQ2VudGVyKQogICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwoKICB9LAogIAogIC8vIFR1cm5zIHRoZSBwYWdlCgogIF90dXJuUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBjdXJyZW50LAogICAgICBuZXh0LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHBsYWNlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV0sCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKCiAgICBpZiAoZGF0YS5wYWdlIT1wYWdlKSB7CgogICAgICB2YXIgY3VycmVudFBhZ2UgPSBkYXRhLnBhZ2U7CgogICAgICBpZiAodHJpZ2dlcigndHVybmluZycsIHRoaXMsIFtwYWdlLCBuZXdWaWV3XSk9PSdwcmV2ZW50ZWQnKSB7CgogICAgICAgIGlmIChjdXJyZW50UGFnZT09ZGF0YS5wYWdlICYmICQuaW5BcnJheShwbGFjZSwgZGF0YS5wYWdlTXYpIT0tMSkKICAgICAgICAgIGRhdGEucGFnZXNbcGxhY2VdLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuOwoKICAgICAgfQoKICAgICAgaWYgKCQuaW5BcnJheSgxLCBuZXdWaWV3KSE9LTEpCiAgICAgICAgdGhpcy50cmlnZ2VyKCdmaXJzdCcpOwogICAgICBpZiAoJC5pbkFycmF5KGRhdGEudG90YWxQYWdlcywgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignbGFzdCcpOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgewogICAgICBjdXJyZW50ID0gdmlld1swXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMV0gJiYgcGFnZT52aWV3WzFdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzFdOwogICAgICBuZXh0ID0gbmV3Vmlld1swXTsKICAgIH0gZWxzZSBpZiAodmlld1swXSAmJiBwYWdlPHZpZXdbMF0pIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzFdOwogICAgfQoKICAgIHZhciBvcHRzQ29ybmVycyA9IGRhdGEub3B0cy50dXJuQ29ybmVycy5zcGxpdCgnLCcpLAogICAgICBmbGlwRGF0YSA9IGRhdGEucGFnZXNbY3VycmVudF0uZGF0YSgpLmYsCiAgICAgIG9wdHMgPSBmbGlwRGF0YS5vcHRzLAogICAgICBhY3R1YWxQb2ludCA9IGZsaXBEYXRhLnBvaW50OwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIGRhdGEudHBhZ2UgPSBuZXh0OwoKICAgIGlmIChvcHRzLm5leHQhPW5leHQpIHsKICAgICAgb3B0cy5uZXh0ID0gbmV4dDsKICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICB9CgogICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICBmbGlwRGF0YS5wb2ludCA9IGFjdHVhbFBvaW50OwogICAgCiAgICBpZiAoZmxpcERhdGEuZWZmZWN0PT0naGFyZCcpCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAocGFnZT5jdXJyZW50KSA/ICdyJyA6ICdsJyk7CiAgICAgIGVsc2UKICAgICAgICBkYXRhLnBhZ2VzW2N1cnJlbnRdLmZsaXAoJ3R1cm5QYWdlJywKICAgICAgICAgIChwYWdlPmN1cnJlbnQpID8gJ2wnIDogJ3InKTsKICAgIGVsc2UgewogICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKQogICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgb3B0c0Nvcm5lcnNbKHBhZ2U+Y3VycmVudCkgPyAxIDogMF0pOwogICAgICBlbHNlCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICBvcHRzQ29ybmVyc1socGFnZT5jdXJyZW50KSA/IDAgOiAxXSk7CiAgICB9CgogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgYSBwYWdlCgogIHBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gZGF0YS5wYWdlOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIWRhdGEuZGVzdHJveWluZykgewoKICAgICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSwgMTApOwoKICAgICAgICBpZiAocGFnZT4wICYmIHBhZ2U8PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICAgIGlmIChwYWdlIT1kYXRhLnBhZ2UpIHsKICAgICAgICAgICAgaWYgKCFkYXRhLmRvbmUgfHwgJC5pbkFycmF5KHBhZ2UsIHRoaXMudHVybigndmlldycpKSE9LTEpCiAgICAgICAgICAgICAgdHVybk1ldGhvZHMuX2ZpdFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgICAgfQogICAgICAKICAgICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGUgcGFnZSAnICsgcGFnZSArICcgZG9lcyBub3QgZXhpc3QnKTsKCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIG5leHQgdmlldwoKICBuZXh0OiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywgTWF0aC5taW4odGhpcy5kYXRhKCkudG90YWxQYWdlcywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5wb3AoKSArIDEpKTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgcHJldmlvdXMgdmlldwoKICBwcmV2aW91czogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMudHVybigncGFnZScsIE1hdGgubWF4KDEsCiAgICAgIHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgdGhpcy5kYXRhKCkucGFnZSkuc2hpZnQoKSAtIDEpKTsKCiAgfSwKCiAgLy8gU2hvd3MgYSBwZWVsaW5nIGNvcm5lcgoKICBwZWVsOiBmdW5jdGlvbihjb3JuZXIsIGFuaW1hdGUpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGFuaW1hdGUgPSAoYW5pbWF0ZT09PXVuZGVmaW5lZCkgPyB0cnVlIDogYW5pbWF0ZT09PXRydWU7CgogICAgaWYgKGNvcm5lcj09PWZhbHNlKSB7CiAgICAgIAogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBudWxsLCBhbmltYXRlKTsKCiAgICB9IGVsc2UgewogICAgCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGRhdGEucGFnZXNbZGF0YS5wYWdlXS5mbGlwKCdwZWVsJywgY29ybmVyLCBhbmltYXRlKTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHZhciBwYWdlOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1swXSA6IHZpZXdbMV07CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1sxXSA6IHZpZXdbMF07CgogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncGVlbCcsIGNvcm5lciwgYW5pbWF0ZSk7CgogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIC8vIEFkZHMgYSBtb3Rpb24gdG8gdGhlIGludGVybmFsIGxpc3QKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2FkZE1vdGlvblBhZ2U6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBvcHRzID0gJCh0aGlzKS5kYXRhKCkuZi5vcHRzLAogICAgICB0dXJuID0gb3B0cy50dXJuLAogICAgICBkZCA9IHR1cm4uZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9hZGRNdi5jYWxsKHR1cm4sIG9wdHMucGFnZSk7CgogIH0sCgogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpLAogICAgICBhY3R1YWxab29tID0gZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGFjdHVhbFpvb20gJiYgYWN0dWFsWm9vbSE9ZGF0YS56b29tKSB7CiAgICAgIAogICAgICBvcHRzLnR1cm4udHJpZ2dlcignem9vbWVkJyxbCiAgICAgICAgb3B0cy5wYWdlLAogICAgICAgIG9wdHMudHVybi50dXJuKCd2aWV3Jywgb3B0cy5wYWdlKSwKICAgICAgICBhY3R1YWxab29tLAogICAgICAgIGRhdGEuem9vbV0pOwoKICAgICAgZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdID0gZGF0YS56b29tOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJyAmJiBjb3JuZXIpIHsKCiAgICAgIGlmICgoY29ybmVyLmNoYXJBdCgxKT09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgfHwKICAgICAgICAoY29ybmVyLmNoYXJBdCgxKT09J3InICYmIGRhdGEuZGlyZWN0aW9uPT0ncnRsJykpCiAgICAgIHsKICAgICAgICAKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0PG9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UtMTsKICAgICAgICBvcHRzLmZvcmNlID0gdHJ1ZTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dD5vcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlKzE7CgogICAgICB9CgogICAgfQoKICAgIHR1cm5NZXRob2RzLl9hZGRNb3Rpb25QYWdlLmNhbGwoZS50YXJnZXQpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKG9wdHMudHVybik7CiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9ldmVudEVuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CiAgCiAgICB2YXIgdGhhdCA9ICQoZS50YXJnZXQpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuZiwKICAgICAgdHVybiA9IG9wdHMudHVybiwKICAgICAgZGQgPSB0dXJuLmRhdGEoKTsKCiAgICBpZiAodHVybmVkKSB7CgogICAgICB2YXIgdHBhZ2UgPSBkZC50cGFnZSB8fCBkZC5wYWdlOwogICAgCiAgICAgIGlmICh0cGFnZT09b3B0cy5uZXh0IHx8IHRwYWdlPT1vcHRzLnBhZ2UpIHsKICAgICAgICBkZWxldGUgZGQudHBhZ2U7CgogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodHVybiwgdHBhZ2UgfHwgb3B0cy5uZXh0LCB0cnVlKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0dXJuLCBvcHRzLnBhZ2UpOwogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodHVybik7CiAgICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgfQogICAgCiAgfSwKICAKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UHJlc3NlZDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gJChlLnRhcmdldCkuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGFnZXMgPSB0dXJuRGF0YS5wYWdlczsKICAgIAogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSB0cnVlOwoKICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UmVsZWFzZWQ6IGZ1bmN0aW9uKGUsIHBvaW50KSB7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0nYnInIHx8IHBvaW50LmNvcm5lcj09J3RyJykgPwogICAgICAgIHBvaW50Lng8cGFnZS53aWR0aCgpLzI6CiAgICAgICAgcG9pbnQueD5wYWdlLndpZHRoKCkvMjsKICAgIH0gZWxzZSB7CiAgICAgIG91dEFyZWEgPSBwb2ludC54PDAgfHwgcG9pbnQueD5wYWdlLndpZHRoKCk7CiAgICB9CgogICAgaWYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCktZGF0YS50aW1lPDIwMCB8fCBvdXRBcmVhKSB7CgogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHR1cm4sIGRhdGEub3B0cy5uZXh0KTsKCiAgICB9CgogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSBmYWxzZTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCiAgCiAgX2ZsaXA6IGZ1bmN0aW9uKGUpIHsKCiAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwoKICAgIHZhciBvcHRzID0gJChlLnRhcmdldCkuZGF0YSgpLmYub3B0czsKCiAgICBvcHRzLnR1cm4udHJpZ2dlcigndHVybicsIFtvcHRzLm5leHRdKTsKCiAgICBpZiAob3B0cy50dXJuLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXIpIHsKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CiAgICB9CgogIH0sCgogLy8KICBfdG91Y2hTdGFydDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgZm9yICh2YXIgcGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykgJiYKICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRTdGFydC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpPT09ZmFsc2UpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0sCiAgCiAgLy8KICBfdG91Y2hNb3ZlOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudE1vdmUuYXBwbHkoZGF0YS5wYWdlc1twYWdlXSwgYXJndW1lbnRzKTsKICAgICAgfQogICAgfQogIH0sCgogIC8vCiAgX3RvdWNoRW5kOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgfSwKCiAgLy8gQ2FsY3VsYXRlIHRoZSB6LWluZGV4IHZhbHVlIGZvciBwYWdlcyBkdXJpbmcgdGhlIGFuaW1hdGlvbgoKICBjYWxjdWxhdGVaOiBmdW5jdGlvbihtdikgewoKICAgIHZhciBpLCBwYWdlLCBuZXh0UGFnZSwgcGxhY2VQYWdlLCBkcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpLAogICAgICBjdXJyZW50UGFnZSA9IHZpZXdbMF0gfHwgdmlld1sxXSwKICAgICAgdG90YWwgPSBtdi5sZW5ndGgtMSwKICAgICAgciA9IHtwYWdlWjoge30sIHBhcnRaOiB7fSwgcGFnZVY6IHt9fSwKCiAgICAgIGFkZFZpZXcgPSBmdW5jdGlvbihwYWdlKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGF0LnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAgICAgICBpZiAodmlld1swXSkgci5wYWdlVlt2aWV3WzBdXSA9IHRydWU7CiAgICAgICAgaWYgKHZpZXdbMV0pIHIucGFnZVZbdmlld1sxXV0gPSB0cnVlOwogICAgICB9OwogICAgCiAgICBmb3IgKGkgPSAwOyBpPD10b3RhbDsgaSsrKSB7CiAgICAgIHBhZ2UgPSBtdltpXTsKICAgICAgbmV4dFBhZ2UgPSBkYXRhLnBhZ2VzW3BhZ2VdLmRhdGEoKS5mLm9wdHMubmV4dDsKICAgICAgcGxhY2VQYWdlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICAgIGFkZFZpZXcocGFnZSk7CiAgICAgIGFkZFZpZXcobmV4dFBhZ2UpOwogICAgICBkcGFnZSA9IChkYXRhLnBhZ2VQbGFjZVtuZXh0UGFnZV09PW5leHRQYWdlKSA/IG5leHRQYWdlIDogcGFnZTsKICAgICAgci5wYWdlWltkcGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMgLSBNYXRoLmFicyhjdXJyZW50UGFnZS1kcGFnZSk7CiAgICAgIHIucGFydFpbcGxhY2VQYWdlXSA9IGRhdGEudG90YWxQYWdlcyoyIC0gIHRvdGFsICsgaTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpICYmIGRhdGEucGFnZU12WzBdIT09MCkgewoKICAgICAgLy8gVXBkYXRlIG1vdGlvbgoKICAgICAgdmFyIHAsIGFwYWdlLCBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgY29ybmVyID0gdGhpcy50dXJuKCdjb3JuZXInKSwKICAgICAgICBhY3R1YWxWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewoKICAgICAgICBpZiAoIWhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSkKICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBmaXhlZCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2ZpeGVkJyk7CgogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHsKICAgICAgICAgIGRpc3BsYXk6IChwb3MucGFnZVZbcGFnZV0gfHwgZml4ZWQpID8gJycgOiAnbm9uZScsCiAgICAgICAgICB6SW5kZXg6CiAgICAgICAgICAgIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdoYXJkJykgPwogICAgICAgICAgICAgIHBvcy5wYXJ0WltwYWdlXQogICAgICAgICAgICAgIDoKICAgICAgICAgICAgICBwb3MucGFnZVpbcGFnZV0KICAgICAgICAgICAgKSB8fCAoZml4ZWQgPyAtMSA6IDApCiAgICAgICAgfSk7CgogICAgICAgIGlmICgocCA9IGRhdGEucGFnZXNbcGFnZV0pKSB7CgogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CiAgICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnRwYWdlKSB7IC8vIElzIGl0IHR1cm5pbmcgdGhlIHBhZ2UgdG8gYHRwYWdlYD8KCiAgICAgICAgICAgIHAuZmxpcCgnaG92ZXInLCBmYWxzZSkuCiAgICAgICAgICAgICAgZmxpcCgnZGlzYWJsZScsCiAgICAgICAgICAgICAgICAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCBkYXRhLnBhZ2VNdik9PS0xICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzBdICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzFdKTsKCiAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgcC5mbGlwKCdob3ZlcicsIGNvcm5lcj09PWZhbHNlKS4KICAgICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgcGFnZSE9YWN0dWFsVmlld1swXSAmJiBwYWdlIT1hY3R1YWxWaWV3WzFdKTsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VzW3BhZ2VdLgogICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLgogICAgICAgICAgICBmbGlwKCdob3ZlcicsIHRydWUpLgogICAgICAgICAgICBmbGlwKCd6JywgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gVXBkYXRlcyB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIGZsaXBib29rJ3Mgc2hhZG93CgogIF91cGRhdGVTaGFkb3c6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgdmlldywgdmlldzIsIHNoYWRvdywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcGFnZVdpZHRoID0gKGRhdGEuZGlzcGxheT09J3NpbmdsZScpID8gd2lkdGggOiB3aWR0aC8yOwoKICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAoIWRhdGEuc2hhZG93KSB7CiAgICAgIGRhdGEuc2hhZG93ID0gJCgnPGRpdiAvPicsIHsKICAgICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICAgJ2Nzcyc6IGRpdkF0dCgwLCAwLCAwKS5jc3MKICAgICAgICB9KS4KICAgICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbG9jID0gMDsKCiAgICAKICAgIGlmIChwYWdlPT12aWV3WzBdIHx8IHBhZ2U9PXZpZXdbMV0pCiAgICAgIGxvYyA9IDE7CiAgICBlbHNlIGlmICgKICAgICAgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwgcGFnZT09dmlld1sxXSsyKQogICAgKQogICAgICBsb2MgPSAyOwoKICAgIGlmICghdGhpcy50dXJuKCdhbmltYXRpbmcnKSkKICAgICAgc3dpdGNoIChsb2MpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsCiAgICAgICAgICAgIGRpc3BsYXk6ICcnCiAgICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMtMSwKICAgICAgICAgICAgZGlzcGxheTogJycKICAgICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMDoKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKAogICAgICAgICAgewogICAgICAgICAgICB6SW5kZXg6IDAsCiAgICAgICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICAgICAgKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgCiAgICByZXR1cm4gbG9jOwogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG9wdGlvbnMKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykgewogICAgCiAgICBpZiAob3B0aW9ucz09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm9wdHM7CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgICAvLyBTZXQgbmV3IHZhbHVlcwoKICAgICAgJC5leHRlbmQoZGF0YS5vcHRzLCBvcHRpb25zKTsKICAgICAgCiAgICAgIC8vIFNldCBwYWdlcwoKICAgICAgaWYgKG9wdGlvbnMucGFnZXMpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlcycsIG9wdGlvbnMucGFnZXMpOwoKICAgICAgLy8gU2V0IHBhZ2UKCiAgICAgIGlmIChvcHRpb25zLnBhZ2UpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAgIC8vIFNldCBkaXNwbGF5CgogICAgICBpZiAob3B0aW9ucy5kaXNwbGF5KQogICAgICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CiAgICAgIAogICAgICAvLyBTZXQgZGlyZWN0aW9uCgogICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24pCiAgICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CgogICAgICAvLyBTZXQgc2l6ZQoKICAgICAgaWYgKG9wdGlvbnMud2lkdGggJiYgb3B0aW9ucy5oZWlnaHQpCiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQpOwogICAgICAKICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycwoKICAgICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gb3B0aW9ucy53aGVuKQogICAgICAgICAgaWYgKGhhcyhldmVudE5hbWUsIG9wdGlvbnMud2hlbikpIHsKICAgICAgICAgICAgdGhpcy51bmJpbmQoZXZlbnROYW1lKS4KICAgICAgICAgICAgICBiaW5kKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuW2V2ZW50TmFtZV0pOwogICAgICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIEdldHMgdGhlIGN1cnJlbnQgdmVyc2lvbgoKICB2ZXJzaW9uOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdmVyc2lvbjsKCiAgfQp9LAoKLy8gTWV0aG9kcyBhbmQgcHJvcGVydGllcyBmb3IgdGhlIGZsaXAgcGFnZSBlZmZlY3QKCmZsaXBNZXRob2RzID0gewoKICAvLyBDb25zdHJ1Y3RvcgoKICBpbml0OiBmdW5jdGlvbihvcHRzKSB7CgogICAgdGhpcy5kYXRhKHtmOiB7CiAgICAgIGRpc2FibGVkOiBmYWxzZSwKICAgICAgaG92ZXI6IGZhbHNlLAogICAgICBlZmZlY3Q6ICh0aGlzLmhhc0NsYXNzKCdoYXJkJykpID8gJ2hhcmQnIDogJ3NoZWV0JwogICAgfX0pOwogIAogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mOwoKICAgIGRhdGEub3B0c1snei1pbmRleCddID0gejsKCiAgICBpZiAoZGF0YS5md3JhcHBlcikKICAgICAgZGF0YS5md3JhcHBlci5jc3MoewogICAgICAgIHpJbmRleDogeiB8fCBwYXJzZUludChkYXRhLnBhcmVudC5jc3MoJ3otaW5kZXgnKSwgMTApIHx8IDAKICAgICAgfSk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgX2NBbGxvd2VkOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwYWdlID0gZGF0YS5vcHRzLnBhZ2UsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBvZGQgPSBwYWdlJTI7CiAgICAKICAgIGlmIChkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAKICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgWyhvZGQpID8gJ3InIDogJ2wnXSA6CiAgICAgICAgWyhvZGQpID8gJ2wnIDogJ3InXTsKCiAgICB9IGVsc2UgewoKICAgICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChwYWdlPT0xKQogICAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICAgIGNvcm5lcnNbJ2ZvcndhcmQnXSA6IGNvcm5lcnNbJ2JhY2t3YXJkJ107CiAgICAgICAgZWxzZSBpZiAocGFnZT09dHVybkRhdGEudG90YWxQYWdlcykKICAgICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgICBjb3JuZXJzWydiYWNrd2FyZCddIDogY29ybmVyc1snZm9yd2FyZCddOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1sob2RkKSA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCddCiAgICAgICAgICA6CiAgICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJ107CgogICAgICB9CgogICAgfQoKICB9LAoKICBfY29ybmVyQWN0aXZhdGVkOiBmdW5jdGlvbihwKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcG9pbnQgPSB7eDogcC54LCB5OiBwLnksIGNvcm5lcjogJyd9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAocG9pbnQueDw9MCB8fCBwb2ludC55PD0wIHx8IHBvaW50Lng+PXdpZHRoIHx8IHBvaW50Lnk+PWhlaWdodCkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIHZhciBhbGxvd2VkQ29ybmVycyA9IGZsaXBNZXRob2RzLl9jQWxsb3dlZC5jYWxsKHRoaXMpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lng+d2lkdGgtY3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ3InOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lng8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ2wnOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdzaGVldCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lnk8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyKz0gJ3QnOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lnk+PWhlaWdodC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAnYic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgCiAgICAgICAgaWYgKHBvaW50Lng8PWNzeikKICAgICAgICAgIHBvaW50LmNvcm5lcis9ICdsJzsKICAgICAgICBlbHNlIGlmIChwb2ludC54Pj13aWR0aC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAncic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgcmV0dXJuICghcG9pbnQuY29ybmVyIHx8ICQuaW5BcnJheShwb2ludC5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8KICAgICAgZmFsc2UgOiBwb2ludDsKCiAgfSwKCiAgX2lzSUFyZWE6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgcG9zID0gdGhpcy5kYXRhKCkuZi5wYXJlbnQub2Zmc2V0KCk7CgogICAgZSA9IChpc1RvdWNoICYmIGUub3JpZ2luYWxFdmVudCkgPyBlLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXSA6IGU7CgogICAgcmV0dXJuIGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLAogICAgICB7CiAgICAgICAgeDogZS5wYWdlWC1wb3MubGVmdCwKICAgICAgICB5OiBlLnBhZ2VZLXBvcy50b3AKICAgICAgfSk7CgogIH0sCgogIF9jOiBmdW5jdGlvbihjb3JuZXIsIG9wdHMpIHsKCiAgICBvcHRzID0gb3B0cyB8fCAwOwoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ3RsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCBvcHRzKTsKICAgICAgY2FzZSAndHInOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCBvcHRzKTsKICAgICAgY2FzZSAnYmwnOgogICAgICAgIHJldHVybiBwb2ludDJEKG9wdHMsIHRoaXMuaGVpZ2h0KCktb3B0cyk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCktb3B0cywgdGhpcy5oZWlnaHQoKS1vcHRzKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQob3B0cywgMCk7CiAgICAgIGNhc2UgJ3InOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCAwKTsKICAgIH0KCiAgfSwKCiAgX2MyOiBmdW5jdGlvbihjb3JuZXIpIHsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICd0bCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICd0cic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICAgIGNhc2UgJ2JsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCkqMiwgdGhpcy5oZWlnaHQoKSk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICdyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCAwKTsKICAgIH0KCiAgfSwKCiAgX2ZvbGRpbmdQYWdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIG9wdHMgPSBkYXRhLm9wdHM7CgogICAgaWYgKG9wdHMudHVybikgewogICAgICBkYXRhID0gb3B0cy50dXJuLmRhdGEoKTsKICAgICAgaWYgKGRhdGEuZGlzcGxheSA9PSAnc2luZ2xlJykKICAgICAgICByZXR1cm4gKG9wdHMubmV4dD4xIHx8IG9wdHMucGFnZT4xKSA/IGRhdGEucGFnZU9ianNbMF0gOiBudWxsOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGRhdGEucGFnZU9ianNbb3B0cy5uZXh0XTsKICAgIH0KCiAgfSwKCiAgX2JhY2tHcmFkaWVudDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgICAgZ3JhZGllbnQgPSAgdHVybkRhdGEub3B0cy5ncmFkaWVudHMgJiYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnIHx8CiAgICAgICAgIChkYXRhLm9wdHMucGFnZSE9MiAmJiBkYXRhLm9wdHMucGFnZSE9dHVybkRhdGEudG90YWxQYWdlcy0xKSk7CgogICAgaWYgKGdyYWRpZW50ICYmICFkYXRhLmJzaGFkb3cpCiAgICAgIGRhdGEuYnNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgY3NzKHsncG9zaXRpb24nOiAnJywgd2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgYXBwZW5kVG8oZGF0YS5wYXJlbnQpOwoKICAgIHJldHVybiBncmFkaWVudDsKCiAgfSwKCiAgdHlwZTogZnVuY3Rpb24gKCkgewogICAgCiAgICByZXR1cm4gdGhpcy5kYXRhKCkuZi5lZmZlY3Q7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICBpZiAoZnVsbCkgewogICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgIGlmIChmdWxsKSB7CiAgICAgICAgdmFyIHNpemUgPSBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyh3aWR0aCwgMikrTWF0aC5wb3coaGVpZ2h0LCAyKSkpOwoKICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfSk7CiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9KS4KICAgICAgICAgIGNoaWxkcmVuKCc6Zmlyc3QtY2hpbGQnKS4KICAgICAgICAgIGNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBpZiAodHVybkRhdGEub3B0cy5ncmFkaWVudHMpCiAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhpcykpCiAgICAgICAgICBkYXRhLmJzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLnBhcmVudC5pcygnOnZpc2libGUnKSkgewogICAgICAgIHZhciBvZmZzZXQgPSBmaW5kUG9zKGRhdGEucGFyZW50WzBdKTsKCiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3RvcDogb2Zmc2V0LnRvcCwKICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0fSk7CgogICAgICAgIC8vaWYgKGRhdGEub3B0cy50dXJuKSB7CiAgICAgICAgIG9mZnNldCA9IGZpbmRQb3MoZGF0YS5vcHRzLnR1cm5bMF0pOwogICAgICAgICBkYXRhLmZwYXJlbnQuY3NzKHt0b3A6IC1vZmZzZXQudG9wLCBsZWZ0OiAtb2Zmc2V0LmxlZnR9KTsKICAgICAgICAvL30KICAgICAgfQoKICAgICAgdGhpcy5mbGlwKCd6JywgZGF0YS5vcHRzWyd6LWluZGV4J10pOwoKICAgICAgYnJlYWs7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOwoKICAgIGRhdGEucGFyZW50ID0gcGFyZW50OwoKICBpZiAoIWRhdGEud3JhcHBlcikKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKICAgICAgICBjc3NQcm9wZXJ0aWVzW3ZlbmRvciArICd0cmFuc2Zvcm0tc3R5bGUnXSA9ICdwcmVzZXJ2ZS0zZCc7CiAgICAgICAgY3NzUHJvcGVydGllc1t2ZW5kb3IgKyAnYmFja2ZhY2UtdmlzaWJpbGl0eSddID0gJ2hpZGRlbic7CgogICAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpLgogICAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgICAgZGF0YS5mcGFnZSA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93ID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsICAwKSkuCiAgICAgICAgICAgIGhpZGUoKS4KICAgICAgICAgICAgYXBwZW5kVG8ocGFyZW50KTsKCiAgICAgICAgICBkYXRhLmJzaGFkb3cgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgIDApKTsKICAgICAgICB9CgogICAgICBicmVhazsKICAgICAgY2FzZSAnc2hlZXQnOgogICAgICAgIAogICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgICAgICBzaXplID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3cod2lkdGgsIDIpK01hdGgucG93KGhlaWdodCwgMikpKTsKICAgICAgICAKICAgICAgICBkYXRhLmZwYXJlbnQgPSBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudDsKCiAgICAgICAgaWYgKCFkYXRhLmZwYXJlbnQpIHsKICAgICAgICAgIHZhciBmcGFyZW50ID0gJCgnPGRpdi8+Jywge2Nzczogeydwb2ludGVyLWV2ZW50cyc6ICdub25lJ319KS5oaWRlKCk7CiAgICAgICAgICAgIGZwYXJlbnQuZGF0YSgpLmZsaXBzID0gMDsKICAgICAgICAgICAgZnBhcmVudC5jc3MoZGl2QXR0KDAsIDAsICdhdXRvJywgJ3Zpc2libGUnKS5jc3MpLgogICAgICAgICAgICBhcHBlbmRUbyhkYXRhLm9wdHMudHVybik7CiAgICAgICAgICAgIAogICAgICAgICAgICBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAnYXV0bycsIHJpZ2h0OiAnYXV0byd9KTsKCiAgICAgICAgZGF0YS53cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIHRoaXMuY3NzKCd6LWluZGV4JykpKS4KICAgICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgICBwcmVwZW5kKHRoaXMpOwoKICAgICAgICBkYXRhLmZ3cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KHBhcmVudC5vZmZzZXQoKS50b3AsIHBhcmVudC5vZmZzZXQoKS5sZWZ0KSkuCiAgICAgICAgICBoaWRlKCkuCiAgICAgICAgICBhcHBlbmRUbyhkYXRhLmZwYXJlbnQpOwoKICAgICAgICBkYXRhLmZwYWdlID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIDAsICd2aXNpYmxlJykpLgogICAgICAgICAgY3NzKHtjdXJzb3I6ICdkZWZhdWx0J30pLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5md3JhcHBlcik7CgogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykKICAgICAgICAgIGRhdGEuYXNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAgMSkpLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5mcGFnZSk7CgogICAgICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCBkYXRhKTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFNldCBzaXplCiAgICBmbGlwTWV0aG9kcy5yZXNpemUuY2FsbCh0aGlzLCB0cnVlKTsKCiAgfSwKCiAgLy8gVGFrZXMgYSAyUCBwb2ludCBmcm9tIHRoZSBzY3JlZW4gYW5kIGFwcGxpZXMgdGhlIHRyYW5zZm9ybWF0aW9uCgogIF9mb2xkOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKCiAgICAgIGNhc2UgJ2hhcmQnOgoKICAgICAgICBpZiAocG9pbnQuY29ybmVyPT0nbCcpCiAgICAgICAgICBwb2ludC54ID0gTWF0aC5taW4oTWF0aC5tYXgocG9pbnQueCwgMCksIHdpZHRoKjIpOwogICAgICAgIGVsc2UKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChNYXRoLm1pbihwb2ludC54LCB3aWR0aCksIC13aWR0aCk7CgogICAgICAgIHZhciBsZWZ0UG9zLAogICAgICAgICAgc2hhZG93LAogICAgICAgICAgZ3JhZGllbnRYLAogICAgICAgICAgZnBhZ2VPcmlnaW4sCiAgICAgICAgICBwYXJlbnRPcmlnaW4sCiAgICAgICAgICB0b3RhbFBhZ2VzID0gdHVybkRhdGEudG90YWxQYWdlcywKICAgICAgICAgIHpJbmRleCA9IGRhdGEub3B0c1snei1pbmRleCddIHx8IHRvdGFsUGFnZXMsCiAgICAgICAgICBwYXJlbnRDc3MgPSB7J292ZXJmbG93JzogJ3Zpc2libGUnfSwKICAgICAgICAgIHJlbFggPSAoby54KSA/IChvLnggLSBwb2ludC54KS93aWR0aCA6IHBvaW50Lngvd2lkdGgsCiAgICAgICAgICBhbmdsZSA9IHJlbFggKiA5MCwKICAgICAgICAgIGhhbGYgPSBhbmdsZTw5MDsKCiAgICAgICAgc3dpdGNoIChwb2ludC5jb3JuZXIpIHsKICAgICAgICAgIGNhc2UgJ2wnOgoKICAgICAgICAgICAgZnBhZ2VPcmlnaW4gPSAgJzAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMTAwJSA1MCUnOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dC0xPjA7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJzEwMCUnOwogICAgICAgICAgICAgIHNoYWRvdyA9IGRhdGEub3B0cy5wYWdlKzE8dG90YWxQYWdlczsKICAgICAgICAgICAgICBncmFkaWVudFggPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdyJzoKCiAgICAgICAgICAgIGZwYWdlT3JpZ2luID0gICcxMDAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMCUgNTAlJzsKICAgICAgICAgICAgYW5nbGUgPSAtYW5nbGU7CiAgICAgICAgICAgIHdpZHRoID0gLXdpZHRoOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dCsxPHRvdGFsUGFnZXM7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJy0xMDAlJzsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMucGFnZSE9MTsKICAgICAgICAgICAgICBncmFkaWVudFggPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnRDc3NbdmVuZG9yKydwZXJzcGVjdGl2ZS1vcmlnaW4nXSA9IHBhcmVudE9yaWdpbjsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgncm90YXRlWSgnK2FuZ2xlKydkZWcpJyArCiAgICAgICAgICAndHJhbnNsYXRlM2QoMHB4LCAwcHgsICcrKHRoaXMuYXR0cignZGVwdGgnKXx8MCkrJ3B4KScsIHBhcmVudE9yaWdpbik7CgogICAgICAgIGRhdGEuZnBhZ2UudHJhbnNmb3JtKCd0cmFuc2xhdGVYKCcrd2lkdGgrJ3B4KSByb3RhdGVZKCcrKDE4MCthbmdsZSkrJ2RlZyknLCBmcGFnZU9yaWdpbik7CgogICAgICAgIGRhdGEucGFyZW50LmNzcyhwYXJlbnRDc3MpOwoKICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgcmVsWCA9IC1yZWxYKzE7CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt6SW5kZXg6IHpJbmRleCsxfSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXh9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVsWCA9IHJlbFgtMTsKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3pJbmRleDogekluZGV4fSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXgrMX0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CiAgICAgICAgICBpZiAoc2hhZG93KQogICAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHsKICAgICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgICBsZWZ0OiBsZWZ0UG9zLAogICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsJysoMC41KnJlbFgpKycpJwogICAgICAgICAgICB9KS4KICAgICAgICAgICAgdHJhbnNmb3JtKCdyb3RhdGVZKDBkZWcpJyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CgogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7b3BhY2l0eTotcmVsWCArIDF9KTsKCiAgICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgICBpZiAoZGF0YS5ic2hhZG93LnBhcmVudCgpWzBdIT1kYXRhLndyYXBwZXJbMF0pIHsKICAgICAgICAgICAgICBkYXRhLmJzaGFkb3cuYXBwZW5kVG8oZGF0YS53cmFwcGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGRhdGEuYnNoYWRvdy5wYXJlbnQoKVswXSE9ZGF0YS5mcGFnZVswXSkgewogICAgICAgICAgICAgIGRhdGEuYnNoYWRvdy5hcHBlbmRUbyhkYXRhLmZwYWdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLypkYXRhLmJzaGFkb3cuY3NzKHsKICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwnKygwLjEpKycpJwogICAgICAgICAgfSkqLwogICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LCBwb2ludDJEKGdyYWRpZW50WCAqIDEwMCwgMCksIHBvaW50MkQoKC1ncmFkaWVudFggKyAxKSoxMDAsIDApLAogICAgICAgICAgICBbWzAsICdyZ2JhKDAsMCwwLDAuMyknXSxbMSwgJ3JnYmEoMCwwLDAsMCknXV0sMik7CiAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIGEgPSAwLAogICAgICAgICAgYWxwaGEgPSAwLAogICAgICAgICAgYmV0YSwKICAgICAgICAgIHB4LAogICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEsCiAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiwKICAgICAgICAgIGdyYWRpZW50U3RhcnRWYWwsCiAgICAgICAgICBncmFkaWVudFNpemUsCiAgICAgICAgICBncmFkaWVudE9wYWNpdHksCiAgICAgICAgICBzaGFkb3dWYWwsCiAgICAgICAgICBtdiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBkZiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICB0ciA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgICB0YW4gPSBNYXRoLnRhbihhbHBoYSksCiAgICAgICAgICBhYyA9IHR1cm5EYXRhLm9wdHMuYWNjZWxlcmF0aW9uLAogICAgICAgICAgaCA9IGRhdGEud3JhcHBlci5oZWlnaHQoKSwKICAgICAgICAgIHRvcCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMCwgMSkgPT0gJ3QnLAogICAgICAgICAgbGVmdCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMSwgMSkgPT0gJ2wnLAoKICAgICAgY29tcHV0ZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmVsID0gcG9pbnQyRCgwLCAwKTsKICAgICAgICB2YXIgbWlkZGxlID0gcG9pbnQyRCgwLCAwKTsKCiAgICAgICAgcmVsLnggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiBwb2ludC54OwoKICAgICAgICBpZiAoIWhhc1JvdCkgewogICAgICAgICAgcmVsLnkgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWwueSA9IChvLnkpID8gby55IC0gcG9pbnQueSA6IHBvaW50Lnk7CiAgICAgICAgfQoKICAgICAgICBtaWRkbGUueCA9IChsZWZ0KT8gd2lkdGggLSByZWwueC8yIDogcG9pbnQueCArIHJlbC54LzI7CiAgICAgICAgbWlkZGxlLnkgPSByZWwueS8yOwogICAgICAgIAogICAgICAgIHZhciBhbHBoYSA9ICBBOTAtTWF0aC5hdGFuMihyZWwueSwgcmVsLngpLAogICAgICAgICAgZ2FtbWEgPSBhbHBoYSAtIE1hdGguYXRhbjIobWlkZGxlLnksIG1pZGRsZS54KSwKICAgICAgICAgIGRpc3RhbmNlID0gIE1hdGgubWF4KDAsIE1hdGguc2luKGdhbW1hKSAqIE1hdGguc3FydChNYXRoLnBvdyhtaWRkbGUueCwgMikgKyBNYXRoLnBvdyhtaWRkbGUueSwgMikpKTsKICAgICAgICAgIAogICAgICAgICAgYSA9IGRlZyhhbHBoYSk7CgogICAgICAgICAgdHIgPSBwb2ludDJEKGRpc3RhbmNlICogTWF0aC5zaW4oYWxwaGEpLCBkaXN0YW5jZSAqIE1hdGguY29zKGFscGhhKSk7CgogICAgICAgICAgaWYgKGFscGhhID4gQTkwKSB7CiAgICAgICAgICAgIHRyLnggPSB0ci54ICsgTWF0aC5hYnModHIueSAqIHJlbC55L3JlbC54KTsKICAgICAgICAgICAgdHIueSA9IDA7CiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHRyLngqTWF0aC50YW4oUEktYWxwaGEpKSA8IGhlaWdodCkgewogICAgICAgICAgICAgIHBvaW50LnkgPSBNYXRoLnNxcnQoTWF0aC5wb3coaGVpZ2h0LCAyKSsyICogbWlkZGxlLnggKiByZWwueCk7CiAgICAgICAgICAgICAgaWYgKHRvcCkgcG9pbnQueSA9ICBoZWlnaHQgLSBwb2ludC55OwogICAgICAgICAgICAgIHJldHVybiBjb21wdXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICBpZiAoYWxwaGE+QTkwKSB7CiAgICAgICAgICAgIHZhciBiZXRhID0gUEktYWxwaGEsIGRkID0gaCAtIGhlaWdodC9NYXRoLnNpbihiZXRhKTsKICAgICAgICAgICAgbXYgPSBwb2ludDJEKE1hdGgucm91bmQoZGQqTWF0aC5jb3MoYmV0YSkpLCBNYXRoLnJvdW5kKGRkKk1hdGguc2luKGJldGEpKSk7CiAgICAgICAgICAgIGlmIChsZWZ0KSBtdi54ID0gLSBtdi54OwogICAgICAgICAgICBpZiAodG9wKSBtdi55ID0gLSBtdi55OwogICAgICAgICAgfQoKICAgICAgICAgIHB4ID0gTWF0aC5yb3VuZCh0ci55L01hdGgudGFuKGFscGhhKSArIHRyLngpOwogICAgICAKICAgICAgICAgIHZhciBzaWRlID0gd2lkdGggLSBweCwKICAgICAgICAgICAgc2lkZVggPSBzaWRlKk1hdGguY29zKGFscGhhKjIpLAogICAgICAgICAgICBzaWRlWSA9IHNpZGUqTWF0aC5zaW4oYWxwaGEqMik7CiAgICAgICAgICAgIGRmID0gcG9pbnQyRCgKICAgICAgICAgICAgICBNYXRoLnJvdW5kKChsZWZ0ID8gc2lkZSAtc2lkZVggOiBweCtzaWRlWCkpLAogICAgICAgICAgICAgIE1hdGgucm91bmQoKHRvcCkgPyBzaWRlWSA6IGhlaWdodCAtIHNpZGVZKSk7CiAgICAgICAgICAKICAgICAgICAvLyBHcmFkaWVudHMKICAgICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewoKICAgICAgICAgICAgZ3JhZGllbnRTaXplID0gc2lkZSpNYXRoLnNpbihhbHBoYSk7CgogICAgICAgICAgICB2YXIgZW5kaW5nUG9pbnQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGF0LCBwb2ludC5jb3JuZXIpLAogICAgICAgICAgICAgZmFyID0gTWF0aC5zcXJ0KE1hdGgucG93KGVuZGluZ1BvaW50LngtcG9pbnQueCwgMikrTWF0aC5wb3coZW5kaW5nUG9pbnQueS1wb2ludC55LCAyKSkvd2lkdGg7CgogICAgICAgICAgICBzaGFkb3dWYWwgPSBNYXRoLnNpbihBOTAqKChmYXI+MSkgPyAyIC0gZmFyIDogZmFyKSk7CgogICAgICAgICAgICBncmFkaWVudE9wYWNpdHkgPSBNYXRoLm1pbihmYXIsIDEpOwoKICAgICAgICAgICAKICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0VmFsID0gZ3JhZGllbnRTaXplPjEwMCA/IChncmFkaWVudFNpemUtMTAwKS9ncmFkaWVudFNpemUgOiAwOwoKICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QSA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICBncmFkaWVudFNpemUqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSpNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CiAgICAgICAgICAgCgogICAgICAgICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhhdCkpIHsKCiAgICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSoxLjIqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTaXplKjEuMipNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CgogICAgICAgICAgICAgICAgaWYgKCFsZWZ0KSBncmFkaWVudEVuZFBvaW50Qi54ID0gMTAwLWdyYWRpZW50RW5kUG9pbnRCLng7CiAgICAgICAgICAgICAgICBpZiAoIXRvcCkgZ3JhZGllbnRFbmRQb2ludEIueSA9IDEwMC1ncmFkaWVudEVuZFBvaW50Qi55OwoKICAgICAgICAgICAgICB9CgogICAgICAgICAgfQoKICAgICAgICAgIHRyLnggPSBNYXRoLnJvdW5kKHRyLngpOwogICAgICAgICAgdHIueSA9IE1hdGgucm91bmQodHIueSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAoKICAgICAgdHJhbnNmb3JtID0gZnVuY3Rpb24odHIsIGMsIHgsIGEpIHsKICAgICAgCiAgICAgICAgdmFyIGYgPSBbJzAnLCAnYXV0byddLCBtdlcgPSAod2lkdGgtaCkqeFswXS8xMDAsIG12SCA9IChoZWlnaHQtaCkqeFsxXS8xMDAsCiAgICAgICAgICBjc3NBID0ge2xlZnQ6IGZbY1swXV0sIHRvcDogZltjWzFdXSwgcmlnaHQ6IGZbY1syXV0sIGJvdHRvbTogZltjWzNdXX0sCiAgICAgICAgICBjc3NCID0ge30sCiAgICAgICAgICBhbGlhc2luZ0ZrID0gKGEhPTkwICYmIGEhPS05MCkgPyAobGVmdCA/IC0xIDogMSkgOiAwLAogICAgICAgICAgb3JpZ2luID0geFswXSArICclICcgKyB4WzFdICsgJyUnOwoKICAgICAgICB0aGF0LmNzcyhjc3NBKS4KICAgICAgICAgIHRyYW5zZm9ybShyb3RhdGUoYSkgKyB0cmFuc2xhdGUodHIueCArIGFsaWFzaW5nRmssIHRyLnksIGFjKSwgb3JpZ2luKTsKCiAgICAgICAgZGF0YS5mcGFnZS5jc3MoY3NzQSkudHJhbnNmb3JtKAogICAgICAgICAgcm90YXRlKGEpICsKICAgICAgICAgIHRyYW5zbGF0ZSh0ci54ICsgZGYueCAtIG12LnggLSB3aWR0aCp4WzBdLzEwMCwgdHIueSArIGRmLnkgLSBtdi55IC0gaGVpZ2h0KnhbMV0vMTAwLCBhYykgKwogICAgICAgICAgcm90YXRlKCgxODAvYSAtIDIpKmEpLAogICAgICAgICAgb3JpZ2luKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSh0cmFuc2xhdGUoLXRyLnggKyBtdlctYWxpYXNpbmdGaywgLXRyLnkgKyBtdkgsIGFjKSArIHJvdGF0ZSgtYSksIG9yaWdpbik7CgogICAgICAgIGRhdGEuZndyYXBwZXIudHJhbnNmb3JtKHRyYW5zbGF0ZSgtdHIueCArIG12LnggKyBtdlcsIC10ci55ICsgbXYueSArIG12SCwgYWMpICsgcm90YXRlKC1hKSwgb3JpZ2luKTsKICAgICAgCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CgogICAgICAgICAgaWYgKHhbMF0pCiAgICAgICAgICAgIGdyYWRpZW50RW5kUG9pbnRBLnggPSAxMDAtZ3JhZGllbnRFbmRQb2ludEEueDsKCiAgICAgICAgICBpZiAoeFsxXSkKICAgICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEueSA9ICgxMDAtZ3JhZGllbnRFbmRQb2ludEEueSk7CgogICAgICAgICAgY3NzQlsnYm94LXNoYWRvdyddID0gJzAgMCAyMHB4IHJnYmEoMCwwLDAsJysoMC41KnNoYWRvd1ZhbCkrJyknOwogICAgICAgICAgZm9sZGluZy5jc3MoY3NzQik7CgogICAgICAgICAgZ3JhZGllbnQoZGF0YS5hc2hhZG93LAogICAgICAgICAgICAgIHBvaW50MkQobGVmdD8xMDA6MCwgdG9wPzA6MTAwKSwKICAgICAgICAgICAgICBwb2ludDJEKGdyYWRpZW50RW5kUG9pbnRBLngsIGdyYWRpZW50RW5kUG9pbnRBLnkpLAogICAgICAgICAgICAgIFtbZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsMCknXSwKICAgICAgICAgICAgICBbKCgxLWdyYWRpZW50U3RhcnRWYWwpKjAuOCkrZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICBbMSwgJ3JnYmEoMjU1LDI1NSwyNTUsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXV0sCiAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICBhbHBoYSk7CgogICAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9iYWNrR3JhZGllbnQuY2FsbCh0aGF0KSkKICAgICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LAogICAgICAgICAgICAgICAgcG9pbnQyRChsZWZ0PzA6MTAwLCB0b3A/MDoxMDApLAogICAgICAgICAgICAgICAgcG9pbnQyRChncmFkaWVudEVuZFBvaW50Qi54LCBncmFkaWVudEVuZFBvaW50Qi55KSwKICAgICAgICAgICAgICAgIFtbMC42LCAncmdiYSgwLDAsMCwwKSddLAogICAgICAgICAgICAgICAgWzAuOCwgJ3JnYmEoMCwwLDAsJysoMC4zKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICAgIFsxLCAncmdiYSgwLDAsMCwwKSddCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMyk7CiAgICAgICAgfQoKICAgICAgfTsKCiAgICAgIHN3aXRjaCAocG9pbnQuY29ybmVyKSB7CiAgICAgICAgY2FzZSAnbCcgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncicgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndGwnIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChwb2ludC54LCAxKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybSh0ciwgWzEsMCwwLDFdLCBbMTAwLCAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndHInIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1pbihwb2ludC54LCB3aWR0aC0xKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybShwb2ludDJEKC10ci54LCB0ci55KSwgWzAsMCwwLDFdLCBbMCwgMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdibCcgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWF4KHBvaW50LngsIDEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQodHIueCwgLXRyLnkpLCBbMSwxLDAsMF0sIFsxMDAsIDEwMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdicicgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWluKHBvaW50LngsIHdpZHRoLTEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQoLXRyLngsIC10ci55KSwgWzAsMSwxLDBdLCBbMCwgMTAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICBicmVhazsKICB9CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKG1vdmUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGxhY2UgPSB0dXJuRGF0YS5wYWdlUGxhY2U7CiAgICAgIAogICAgaWYgKG1vdmUpIHsKCiAgICAgIHZhciBuZXh0UGFnZSA9IGRhdGEub3B0cy5uZXh0OwogIAogICAgICBpZiAocGxhY2VbbmV4dFBhZ2VdIT1kYXRhLm9wdHMucGFnZSkgewoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKHRoaXMsIGZhbHNlKTsKCiAgICAgICAgdmFyIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKICAgICAgICAKICAgICAgICBmb2xkaW5nLmFwcGVuZFRvKGRhdGEuZnBhZ2UpOwogICAgICAgIHBsYWNlW25leHRQYWdlXSA9IGRhdGEub3B0cy5wYWdlOwogICAgICAgIGRhdGEuZm9sZGluZyA9IG5leHRQYWdlOwogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoZGF0YS5mb2xkaW5nKSB7CgogICAgICAgIGlmICh0dXJuRGF0YS5wYWdlc1tkYXRhLmZvbGRpbmddKSB7CiAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmbGlwIGF2YWlsYWJsZQoKICAgICAgICAgIHZhciBmbGlwRGF0YSA9IHR1cm5EYXRhLnBhZ2VzW2RhdGEuZm9sZGluZ10uZGF0YSgpLmY7CiAgICAgICAgICAKICAgICAgICAgIHR1cm5EYXRhLnBhZ2VPYmpzW2RhdGEuZm9sZGluZ10uCiAgICAgICAgICAgIGFwcGVuZFRvKGZsaXBEYXRhLndyYXBwZXIpOwoKICAgICAgICB9IGVsc2UgaWYgKHR1cm5EYXRhLnBhZ2VXcmFwW2RhdGEuZm9sZGluZ10pIHsKICAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgcGFnZVdyYXBwZXIKCiAgICAgICAgICB0dXJuRGF0YS5wYWdlT2Jqc1tkYXRhLmZvbGRpbmddLgogICAgICAgICAgICBhcHBlbmRUbyh0dXJuRGF0YS5wYWdlV3JhcFtkYXRhLmZvbGRpbmddKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nIGluIHBsYWNlKSB7CiAgICAgICAgICBwbGFjZVtkYXRhLmZvbGRpbmddID0gZGF0YS5mb2xkaW5nOwogICAgICAgIH0KCiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKCiAgICAgIH0KICAgIH0KICB9LAoKICBfc2hvd0ZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGMsIGFuaW1hdGUpIHsKCiAgICB2YXIgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpLAogICAgICBkZCA9IHRoaXMuZGF0YSgpLAogICAgICBkYXRhID0gZGQuZiwKICAgICAgdmlzaWJsZSA9IGRhdGEudmlzaWJsZTsKCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKCF2aXNpYmxlIHx8ICFkYXRhLnBvaW50IHx8IGRhdGEucG9pbnQuY29ybmVyIT1jLmNvcm5lcikgewoKICAgICAgICB2YXIgY29ybmVyID0gKAogICAgICAgICAgZGF0YS5zdGF0dXM9PSdob3ZlcicgfHwKICAgICAgICAgIGRhdGEuc3RhdHVzPT0ncGVlbCcgfHwKICAgICAgICAgIGRhdGEub3B0cy50dXJuLmRhdGEoKS5tb3VzZUFjdGlvbikgPwogICAgICAgIGMuY29ybmVyIDogbnVsbDsKCiAgICAgICAgdmlzaWJsZSA9IGZhbHNlOwoKICAgICAgICBpZiAodHJpZ2dlcignc3RhcnQnLCB0aGlzLCBbZGF0YS5vcHRzLCBjb3JuZXJdKT09J3ByZXZlbnRlZCcpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICB9CgogICAgICBpZiAoYW5pbWF0ZSkgewogICAgICAgIAogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIHBvaW50ID0gKGRhdGEucG9pbnQgJiYgZGF0YS5wb2ludC5jb3JuZXI9PWMuY29ybmVyKSA/CiAgICAgICAgICBkYXRhLnBvaW50IDogZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBjLmNvcm5lciwgMSk7CiAgICAgIAogICAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgICAgZnJvbTogW3BvaW50LngsIHBvaW50LnldLAogICAgICAgICAgdG86IFtjLngsIGMueV0sCiAgICAgICAgICBkdXJhdGlvbjogNTAwLAogICAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgYy54ID0gTWF0aC5yb3VuZCh2WzBdKTsKICAgICAgICAgICAgYy55ID0gTWF0aC5yb3VuZCh2WzFdKTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBjKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSAgewoKICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoaXMsIGMpOwoKICAgICAgICBpZiAoZGQuZWZmZWN0ICYmICFkZC5lZmZlY3QudHVybmluZykKICAgICAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwoKICAgICAgfQoKICAgICAgaWYgKCF2aXNpYmxlKSB7CgogICAgICAgIHN3aXRjaChkYXRhLmVmZmVjdCkgewogICAgICAgICAgY2FzZSAnaGFyZCc6CgogICAgICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fbW92ZUZvbGRpbmdQYWdlLmNhbGwodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgIGRhdGEuZnBhZ2Uuc2hvdygpOwogICAgICAgICAgICBpZiAoZGF0YS5vcHRzLnNoYWRvd3MpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgICAgICAgIGRhdGEudmlzaWJsZSA9IHRydWU7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudC5zaG93KCkuZGF0YSgpLmZsaXBzKys7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgZGF0YS5md3JhcHBlci5zaG93KCk7CiAgICAgICAgICAgIGlmIChkYXRhLmJzaGFkb3cpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5ic2hhZG93TG9jID0gMDsKICAgICAgICAgIGRhdGEuYnNoYWRvdy5yZW1vdmUoKTsKICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CiAgICAgICAgfQoKICAgICAgICBkYXRhLndyYXBwZXIudHJhbnNmb3JtKCcnKTsKICAgICAgICBkYXRhLmZwYWdlLmhpZGUoKTsKCiAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIGlmICgoLS1kYXRhLmZwYXJlbnQuZGF0YSgpLmZsaXBzKT09PTApCiAgICAgICAgICBkYXRhLmZwYXJlbnQuaGlkZSgpOwoKICAgICAgICB0aGlzLmNzcyh7bGVmdDogMCwgdG9wOiAwLCByaWdodDogJ2F1dG8nLCBib3R0b206ICdhdXRvJ30pLgogICAgICAgICAgdHJhbnNmb3JtKCcnKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgnJyk7CgogICAgICAgIGRhdGEuZndyYXBwZXIuaGlkZSgpOwoKICAgICAgICBpZiAoZGF0YS5ic2hhZG93KQogICAgICAgICAgZGF0YS5ic2hhZG93LmhpZGUoKTsKCiAgICAgICAgZm9sZGluZy50cmFuc2Zvcm0oJycpOwoKICAgICAgYnJlYWs7CiAgICB9CgogICAgICBkYXRhLnZpc2libGUgPSBmYWxzZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBoaWRlRm9sZGVkUGFnZTogZnVuY3Rpb24oYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEucG9pbnQpIHJldHVybjsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgIHAxID0gZGF0YS5wb2ludCwKICAgICAgaGlkZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRhdGEucG9pbnQgPSBudWxsOwogICAgICAgIGRhdGEuc3RhdHVzID0gJyc7CiAgICAgICAgdGhhdC5mbGlwKCdoaWRlJyk7CiAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCBmYWxzZV0pOwogICAgICB9OwoKICAgIGlmIChhbmltYXRlKSB7CgogICAgICB2YXIgcDQgPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHAxLmNvcm5lciksCiAgICAgICAgdG9wID0gKHAxLmNvcm5lci5zdWJzdHIoMCwxKT09J3QnKSwKICAgICAgICBkZWx0YSA9ICh0b3ApID8gTWF0aC5taW4oMCwgcDEueS1wNC55KS8yIDogTWF0aC5tYXgoMCwgcDEueS1wNC55KS8yLAogICAgICAgIHAyID0gcG9pbnQyRChwMS54LCBwMS55K2RlbHRhKSwKICAgICAgICBwMyA9IHBvaW50MkQocDQueCwgcDQueS1kZWx0YSk7CiAgICAKICAgICAgdGhpcy5hbmltYXRlZih7CiAgICAgICAgZnJvbTogMCwKICAgICAgICB0bzogMSwKICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgdmFyIG5wID0gYmV6aWVyKHAxLCBwMiwgcDMsIHA0LCB2KTsKICAgICAgICAgIHAxLnggPSBucC54OwogICAgICAgICAgcDEueSA9IG5wLnk7CiAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIHAxKTsKICAgICAgICB9LAogICAgICAgIGNvbXBsZXRlOiBoaWRlLAogICAgICAgIGR1cmF0aW9uOiA4MDAsCiAgICAgICAgaGlkaW5nOiB0cnVlCiAgICAgIH0pOwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKICAgICAgaGlkZSgpOwoKICAgIH0KICB9LAoKICB0dXJuUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCk7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gdHVybkRhdGEub3B0cy5lbGV2YXRpb24gOiAwKSwKICAgICAgcDQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGlzLCBjb3JuZXIuY29ybmVyKTsKCiAgICAgIHRoaXMudHJpZ2dlcignZmxpcCcpLgogICAgICAgIGFuaW1hdGVmKHsKICAgICAgICAgIGZyb206IDAsCiAgICAgICAgICB0bzogMSwKICAgICAgICAgIGZyYW1lOiBmdW5jdGlvbih2KSB7CgogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhhdCwgY29ybmVyKTsKCiAgICAgICAgICB9LAogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAKICAgICAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCB0cnVlXSk7CgogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiB0dXJuRGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgdHVybmluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgICAgZGF0YS5jb3JuZXIgPSBudWxsOwogIH0sCgogIG1vdmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuICdlZmZlY3QnIGluIHRoaXMuZGF0YSgpOwogIAogIH0sCgogIGlzVHVybmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZmxpcCgnbW92aW5nJykgJiYgdGhpcy5kYXRhKCkuZWZmZWN0LnR1cm5pbmc7CiAgCiAgfSwKCiAgY29ybmVyOiBmdW5jdGlvbigpIHsKICAgIAogICAgcmV0dXJuIHRoaXMuZGF0YSgpLmYuY29ybmVyOwogICAgICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwoKICAgIGlmICghZGF0YS5jb3JuZXIgJiYgIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykgJiYKICAgICAgZGF0YS5vcHRzLnBhZ2U9PXR1cm4uZGF0YSgpLnBhZ2VQbGFjZVtkYXRhLm9wdHMucGFnZV0pCiAgICB7CgogICAgICBkYXRhLmNvcm5lciA9IGZsaXBNZXRob2RzLl9pc0lBcmVhLmNhbGwodGhpcywgZSk7CgogICAgICBpZiAoZGF0YS5jb3JuZXIgJiYgZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcykpIHsKCiAgICAgICAgdGhpcy50cmlnZ2VyKCdwcmVzc2VkJywgW2RhdGEucG9pbnRdKTsKICAgICAgICBmbGlwTWV0aG9kcy5fc2hvd0ZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcik7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CgogICAgICBpZiAoZGF0YS5jb3JuZXIpIHsKCiAgICAgICAgdmFyIHBvcyA9IGRhdGEucGFyZW50Lm9mZnNldCgpOwogICAgICAgIGRhdGEuY29ybmVyLnggPSBlWzBdLnBhZ2VYLXBvcy5sZWZ0OwogICAgICAgIGRhdGEuY29ybmVyLnkgPSBlWzBdLnBhZ2VZLXBvcy50b3A7CiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywgZGF0YS5jb3JuZXIpOwoKICAgICAgfSBlbHNlIGlmIChkYXRhLmhvdmVyICYmICF0aGlzLmRhdGEoKS5lZmZlY3QgJiYgdGhpcy5pcygnOnZpc2libGUnKSkgewoKICAgICAgICB2YXIgcG9pbnQgPSBmbGlwTWV0aG9kcy5faXNJQXJlYS5jYWxsKHRoaXMsIGVbMF0pOwoKICAgICAgICBpZiAocG9pbnQpIHsKCiAgICAgICAgICBpZiAoKGRhdGEuZWZmZWN0PT0nc2hlZXQnICYmIHBvaW50LmNvcm5lci5sZW5ndGg9PTIpICB8fCBkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAgICAgICAgIGRhdGEuc3RhdHVzID0gJ2hvdmVyJzsKICAgICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgcG9pbnQuY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAgICAgcG9pbnQueCA9IG9yaWdpbi54OwogICAgICAgICAgICBwb2ludC55ID0gb3JpZ2luLnk7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIHBvaW50LCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBpZiAoZGF0YS5zdGF0dXM9PSdob3ZlcicpIHsKICAgICAgICAgICAgZGF0YS5zdGF0dXMgPSAnJzsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgX2V2ZW50RW5kOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIGNvcm5lciA9IGRhdGEuY29ybmVyOwoKICAgIGlmICghZGF0YS5kaXNhYmxlZCAmJiBjb3JuZXIpIHsKICAgICAgaWYgKHRyaWdnZXIoJ3JlbGVhc2VkJywgdGhpcywgW2RhdGEucG9pbnQgfHwgY29ybmVyXSkhPSdwcmV2ZW50ZWQnKSB7CiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgfQogICAgfQoKICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgfSwKCiAgZGlzYWJsZTogZnVuY3Rpb24oZGlzYWJsZSkgewoKICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCB7J2Rpc2FibGVkJzogZGlzYWJsZX0pOwogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIGhvdmVyOiBmdW5jdGlvbihob3ZlcikgewogICAgCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydob3Zlcic6IGhvdmVyfSk7CiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgcGVlbDogZnVuY3Rpb24gKGNvcm5lciwgYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoY29ybmVyKSB7CgogICAgICBpZiAoJC5pbkFycmF5KGNvcm5lciwgY29ybmVycy5hbGwpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJ0Nvcm5lciAnK2Nvcm5lcisnIGlzIG5vdCBwZXJtaXR0ZWQnKTsKCiAgICAgIGlmICgkLmluQXJyYXkoY29ybmVyLCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKSkhPS0xKSB7CgogICAgICAgIHZhciBwb2ludCA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAKICAgICAgICBkYXRhLnN0YXR1cyA9ICdwZWVsJzsKCiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywKICAgICAgICB7CiAgICAgICAgICBjb3JuZXI6IGNvcm5lciwKICAgICAgICAgIHg6IHBvaW50LngsCiAgICAgICAgICB5OiBwb2ludC55CiAgICAgICAgfSwgYW5pbWF0ZSk7CgogICAgICB9CgoKICAgIH0gZWxzZSB7CgogICAgICBkYXRhLnN0YXR1cyA9ICcnOwoKICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBhbmltYXRlKTsKICAgICAgCiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfQp9OwoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWModGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBub3QgYSBtZXRob2Qgb3IgcHJvcGVydHknKTsKCn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgIHRvcDogdG9wLAogICAgbGVmdDogbGVmdCwKICAgICdvdmVyZmxvdyc6IG92ZXJmIHx8ICdoaWRkZW4nLAogICAgekluZGV4OiB6SW5kZXggfHwgJ2F1dG8nCiAgfQp9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQogIAovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucwoKZnVuY3Rpb24gcmFkKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gZGVncmVlcy8xODAqUEk7Cgp9CgovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcwoKZnVuY3Rpb24gZGVnKHJhZGlhbnMpIHsKICAKICByZXR1cm4gcmFkaWFucy9QSSoxODA7Cgp9CgovLyBHZXRzIGEgMkQgcG9pbnQKCmZ1bmN0aW9uIHBvaW50MkQoeCwgeSkgewogIAogIHJldHVybiB7eDogeCwgeTogeX07Cgp9CgovLyBXZWJraXQgNTM0LjMgb24gQW5kcm9pZCB3cm9uZ2x5IHJlcGFpbnRzIGVsZW1lbnRzIHRoYXQgdXNlIG92ZXJmbG93OmhpZGRlbiArIHJvdGF0aW9uCgpmdW5jdGlvbiByb3RhdGlvbkF2YWlsYWJsZSgpIHsKICB2YXIgcGFydHM7CgogIGlmICgocGFydHMgPSAvQXBwbGVXZWJraXRcLyhbMC05XC5dKykvaS5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpKSkgewogICAgdmFyIHdlYmtpdFZlcnNpb24gPSBwYXJzZUZsb2F0KHBhcnRzWzFdKTsKICAgIHJldHVybiAod2Via2l0VmVyc2lvbj41MzQuMyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8gUmV0dXJucyB0aGUgdHJhc2xhdGUgdmFsdWUKCmZ1bmN0aW9uIHRyYW5zbGF0ZSh4LCB5LCB1c2UzZCkgewogIAogIHJldHVybiAoaGFzM2QgJiYgdXNlM2QpID8gJyB0cmFuc2xhdGUzZCgnICsgeCArICdweCwnICsgeSArICdweCwgMHB4KSAnCiAgOiAnIHRyYW5zbGF0ZSgnICsgeCArICdweCwgJyArIHkgKyAncHgpICc7Cgp9CgovLyBSZXR1cm5zIHRoZSByb3RhdGlvbiB2YWx1ZQoKZnVuY3Rpb24gcm90YXRlKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gJyByb3RhdGUoJyArIGRlZ3JlZXMgKyAnZGVnKSAnOwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gRGV0ZWN0cyB0aGUgdHJhbnNpdGlvbkVuZCBFdmVudAoKZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkVuZCgpIHsKCiAgdmFyIHQsCiAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zha2VlbGVtZW50JyksCiAgICB0cmFuc2l0aW9ucyA9IHsKICAgICAgJ3RyYW5zaXRpb24nOid0cmFuc2l0aW9uZW5kJywKICAgICAgJ09UcmFuc2l0aW9uJzonb1RyYW5zaXRpb25FbmQnLAogICAgICAnTVNUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdNb3pUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzond2Via2l0VHJhbnNpdGlvbkVuZCcKICAgIH07CgogIGZvciAodCBpbiB0cmFuc2l0aW9ucykgewogICAgaWYgKGVsLnN0eWxlW3RdICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdOwogICAgfQogIH0KfQoKLy8gR3JhZGllbnRzCgpmdW5jdGlvbiBncmFkaWVudChvYmosIHAwLCBwMSwgY29sb3JzLCBudW1Db2xvcnMpIHsKCiAgdmFyIGosIGNvbHMgPSBbXTsKCiAgaWYgKHZlbmRvcj09Jy13ZWJraXQtJykgewoKICAgIGZvciAoaiA9IDA7IGo8bnVtQ29sb3JzOyBqKyspCiAgICAgIGNvbHMucHVzaCgnY29sb3Itc3RvcCgnK2NvbG9yc1tqXVswXSsnLCAnK2NvbG9yc1tqXVsxXSsnKScpOwogICAgCiAgICBvYmouY3NzKHsnYmFja2dyb3VuZC1pbWFnZSc6CiAgICAgICAgJy13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAnKwogICAgICAgIHAwLngrJyUgJysKICAgICAgICBwMC55KyclLCcrCiAgICAgICAgcDEueCsnJSAnKwogICAgICAgIHAxLnkrJyUsICcrCiAgICAgICAgY29scy5qb2luKCcsJykgKyAnICknfSk7CiAgfSBlbHNlIHsKICAgIAogICAgcDAgPSB7eDpwMC54LzEwMCAqIG9iai53aWR0aCgpLCB5OnAwLnkvMTAwICogb2JqLmhlaWdodCgpfTsKICAgIHAxID0ge3g6cDEueC8xMDAgKiBvYmoud2lkdGgoKSwgeTpwMS55LzEwMCAqIG9iai5oZWlnaHQoKX07CgogICAgdmFyIGR4ID0gcDEueC1wMC54LAogICAgICBkeSA9IHAxLnktcDAueSwKICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCksCiAgICAgIGFuZ2xlMiA9IGFuZ2xlIC0gTWF0aC5QSS8yLAogICAgICBkaWFnb25hbCA9IE1hdGguYWJzKG9iai53aWR0aCgpKk1hdGguc2luKGFuZ2xlMikpK01hdGguYWJzKG9iai5oZWlnaHQoKSpNYXRoLmNvcyhhbmdsZTIpKSwKICAgICAgZ3JhZGllbnREaWFnb25hbCA9IE1hdGguc3FydChkeSpkeSArIGR4KmR4KSwKICAgICAgY29ybmVyID0gcG9pbnQyRCgocDEueDxwMC54KSA/IG9iai53aWR0aCgpIDogMCwgKHAxLnk8cDAueSkgPyBvYmouaGVpZ2h0KCkgOiAwKSwKICAgICAgc2xvcGUgPSBNYXRoLnRhbihhbmdsZSksCiAgICAgIGludmVyc2UgPSAtMS9zbG9wZSwKICAgICAgeCA9IChpbnZlcnNlKmNvcm5lci54IC0gY29ybmVyLnkgLSBzbG9wZSpwMC54ICsgcDAueSkvKGludmVyc2Utc2xvcGUpLAogICAgICBjID0ge3g6IHgsIHk6IGludmVyc2UqeCAtIGludmVyc2UqY29ybmVyLnggKyBjb3JuZXIueX0sCiAgICAgIHNlZ0EgPSAoTWF0aC5zcXJ0KCBNYXRoLnBvdyhjLngtcDAueCwyKSArIE1hdGgucG93KGMueS1wMC55LDIpKSk7CgogICAgICBmb3IgKGogPSAwOyBqPG51bUNvbG9yczsgaisrKQogICAgICAgIGNvbHMucHVzaCgnICcrY29sb3JzW2pdWzFdKycgJysoKHNlZ0EgKyBncmFkaWVudERpYWdvbmFsKmNvbG9yc1tqXVswXSkqMTAwL2RpYWdvbmFsKSsnJScpOwoKICAgICAgb2JqLmNzcyh7J2JhY2tncm91bmQtaW1hZ2UnOiB2ZW5kb3IrJ2xpbmVhci1ncmFkaWVudCgnICsgKC1hbmdsZSkgKyAncmFkLCcgKyBjb2xzLmpvaW4oJywnKSArICcpJ30pOwogIH0KfQoKCi8vIFRyaWdnZXJzIGFuIGV2ZW50CgpmdW5jdGlvbiB0cmlnZ2VyKGV2ZW50TmFtZSwgY29udGV4dCwgYXJncykgewoKICB2YXIgZXZlbnQgPSAkLkV2ZW50KGV2ZW50TmFtZSk7CiAgY29udGV4dC50cmlnZ2VyKGV2ZW50LCBhcmdzKTsKICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICByZXR1cm4gJ3ByZXZlbnRlZCc7CiAgZWxzZSBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgIHJldHVybiAnc3RvcHBlZCc7CiAgZWxzZQogICAgcmV0dXJuICcnOwp9CgovLyBKUyBFcnJvcnMKCmZ1bmN0aW9uIHR1cm5FcnJvcihtZXNzYWdlKSB7CgogIGZ1bmN0aW9uIFR1cm5Kc0Vycm9yKG1lc3NhZ2UpIHsKICAgIHRoaXMubmFtZSA9ICJUdXJuSnNFcnJvciI7CiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogIH0KCiAgVHVybkpzRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CiAgVHVybkpzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHVybkpzRXJyb3I7CiAgcmV0dXJuIG5ldyBUdXJuSnNFcnJvcihtZXNzYWdlKTsKCn0KCi8vIEZpbmQgdGhlIG9mZnNldCBvZiBhbiBlbGVtZW50IGlnbm9yaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKCiAgdmFyIG9mZnNldCA9IHt0b3A6IDAsIGxlZnQ6IDB9OwoKICBkb3sKICAgIG9mZnNldC5sZWZ0ICs9IG9iai5vZmZzZXRMZWZ0OwogICAgb2Zmc2V0LnRvcCArPSBvYmoub2Zmc2V0VG9wOwogIH0gd2hpbGUgKChvYmogPSBvYmoub2Zmc2V0UGFyZW50KSk7CgogIHJldHVybiBvZmZzZXQ7Cgp9CgovLyBDaGVja3MgaWYgdGhlcmUncyBoYXJkIHBhZ2UgY29tcGF0aWJpbGl0eQovLyBJRTkgaXMgdGhlIG9ubHkgYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaGFyZCBwYWdlcwoKZnVuY3Rpb24gaGFzSGFyZFBhZ2UoKSB7CiAgcmV0dXJuIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUgOS4wJyk9PS0xKTsKfQoKLy8gUmVxdWVzdCBhbiBhbmltYXRpb24KCndpbmRvdy5yZXF1ZXN0QW5pbSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7CiAgICB9OwoKfSkoKTsKCi8vIEV4dGVuZCAkLmZuCgokLmV4dGVuZCgkLmZuLCB7CgogIGZsaXA6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGRlYygkKHRoaXNbMF0pLCBmbGlwTWV0aG9kcywgYXJndW1lbnRzKTsKICB9LAoKICB0dXJuOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBkZWMoJCh0aGlzWzBdKSwgdHVybk1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHJhbnNmb3JtOiBmdW5jdGlvbih0cmFuc2Zvcm0sIG9yaWdpbikgewoKICAgIHZhciBwcm9wZXJ0aWVzID0ge307CiAgICAKICAgIGlmIChvcmlnaW4pCiAgICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSBvcmlnaW47CiAgICAKICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTsKICAKICAgIHJldHVybiB0aGlzLmNzcyhwcm9wZXJ0aWVzKTsKCiAgfSwKCiAgYW5pbWF0ZWY6IGZ1bmN0aW9uKHBvaW50KSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5lZmZlY3QpCiAgICAgIGRhdGEuZWZmZWN0LnN0b3AoKTsKCiAgICBpZiAocG9pbnQpIHsKCiAgICAgIGlmICghcG9pbnQudG8ubGVuZ3RoKSBwb2ludC50byA9IFtwb2ludC50b107CiAgICAgIGlmICghcG9pbnQuZnJvbS5sZW5ndGgpIHBvaW50LmZyb20gPSBbcG9pbnQuZnJvbV07CgogICAgICB2YXIgZGlmZiA9IFtdLAogICAgICAgIGxlbiA9IHBvaW50LnRvLmxlbmd0aCwKICAgICAgICBhbmltYXRpbmcgPSB0cnVlLAogICAgICAgIHRoYXQgPSB0aGlzLAogICAgICAgIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpLAogICAgICAgIGZyYW1lID0gZnVuY3Rpb24oKSB7CgogICAgICAgICAgaWYgKCFkYXRhLmVmZmVjdCB8fCAhYW5pbWF0aW5nKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgdmFyIHYgPSBbXSwKICAgICAgICAgICAgdGltZURpZmYgPSBNYXRoLm1pbihwb2ludC5kdXJhdGlvbiwgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHRpbWUpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgICAgIHYucHVzaChkYXRhLmVmZmVjdC5lYXNpbmcoMSwgdGltZURpZmYsIHBvaW50LmZyb21baV0sIGRpZmZbaV0sIHBvaW50LmR1cmF0aW9uKSk7CgogICAgICAgICAgcG9pbnQuZnJhbWUoKGxlbj09MSkgPyB2WzBdIDogdik7CgogICAgICAgICAgaWYgKHRpbWVEaWZmPT1wb2ludC5kdXJhdGlvbikgewogICAgICAgICAgICBkZWxldGUgZGF0YVsnZWZmZWN0J107CiAgICAgICAgICAgIHRoYXQuZGF0YShkYXRhKTsKICAgICAgICAgICAgaWYgKHBvaW50LmNvbXBsZXRlKQogICAgICAgICAgICAgIHBvaW50LmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW0oZnJhbWUpOwogICAgICAgICAgfQogICAgICAgIH07CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgIGRpZmYucHVzaChwb2ludC50b1tpXSAtIHBvaW50LmZyb21baV0pOwoKICAgICAgZGF0YS5lZmZlY3QgPSAkLmV4dGVuZCh7CiAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBhbmltYXRpbmcgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGVhc2luZzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGRhdGEpIHsKICAgICAgICAgIHJldHVybiBjICogTWF0aC5zcXJ0KDEgLSAodD10L2RhdGEtMSkqdCkgKyBiOwogICAgICAgIH0KICAgICAgfSwgcG9pbnQpOwoKICAgICAgdGhpcy5kYXRhKGRhdGEpOwoKICAgICAgZnJhbWUoKTsKCiAgICB9IGVsc2UgewogICAgICAKICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwoKICAgIH0KICB9Cn0pOwoKLy8gRXhwb3J0IHNvbWUgZ2xvYmFscwoKJC5pc1RvdWNoID0gaXNUb3VjaDsKJC5tb3VzZUV2ZW50cyA9IG1vdXNlRXZlbnRzOwokLmNzc1ByZWZpeCA9IGdldFByZWZpeDsKJC5jc3NUcmFuc2l0aW9uRW5kID0gZ2V0VHJhbnNpdGlvbkVuZDsKJC5maW5kUG9zID0gZmluZFBvczsKCn0pKGpRdWVyeSk7Cg=='],
//	nope: ['../../lib/turn.html4.min.js'],
//	both: ['../../lib/zoom.min.js', 'js/magazine.js', 'css/magazine.css'],
//	both: ['../../lib/zoom.min.js', 'css/magazine.css'],
//	both: ['css/magazine.css'],
//	both: [''],
	both: ['data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UKICogdHVybmpzLmNvbQogKiB0dXJuanMuY29tL2xpY2Vuc2UudHh0CiAqCiAqIENvcHlyaWdodCAoQykgMjAxMiBFbW1hbnVlbCBHYXJjaWEKICogQWxsIHJpZ2h0cyByZXNlcnZlZAogKiovCgooZnVuY3Rpb24oJCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhczNkLAogIAogIGhhc1JvdCwKCiAgdmVuZG9yID0gJycsCiAgCiAgdmVyc2lvbiA9ICc0LjEuMCcsCgogIFBJID0gTWF0aC5QSSwKCiAgQTkwID0gUEkvMiwKCiAgaXNUb3VjaCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdywKCiAgbW91c2VFdmVudHMgPSAoaXNUb3VjaCkgPwogICAgewogICAgICBkb3duOiAndG91Y2hzdGFydCcsCiAgICAgIG1vdmU6ICd0b3VjaG1vdmUnLAogICAgICB1cDogJ3RvdWNoZW5kJywKICAgICAgb3ZlcjogJ3RvdWNoc3RhcnQnLAogICAgICBvdXQ6ICd0b3VjaGVuZCcKICAgIH0KICAgIDoKICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICAvLyBDb250YW5zdHMgdXNlZCBmb3IgZWFjaCBjb3JuZXIKICAvLyAgIHwgdGwgKiB0ciB8CiAgLy8gbCB8ICogICAgICogfCByCiAgLy8gICB8IGJsICogYnIgfAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnYmwnLCAndGwnXSwKICAgIGZvcndhcmQ6IFsnYnInLCAndHInXSwKICAgIGFsbDogWyd0bCcsICdibCcsICd0cicsICdicicsICdsJywgJ3InXQogIH0sCgogIC8vIERpc3BsYXkgdmFsdWVzCgogIGRpc3BsYXlzID0gWydzaW5nbGUnLCAnZG91YmxlJ10sCgogIC8vIERpcmVjdGlvbiB2YWx1ZXMKCiAgZGlyZWN0aW9ucyA9IFsnbHRyJywgJ3J0bCddLAoKICAvLyBEZWZhdWx0IG9wdGlvbnMKCiAgdHVybk9wdGlvbnMgPSB7CgogICAgLy8gRW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KCiAgICBhY2NlbGVyYXRpb246IHRydWUsCgogICAgLy8gRGlzcGxheQoKICAgIGRpc3BsYXk6ICdkb3VibGUnLAoKICAgIC8vIER1cmF0aW9uIG9mIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzCgogICAgZHVyYXRpb246IDYwMCwKCiAgICAvLyBGaXJzdCBwYWdlCgogICAgcGFnZTogMSwKICAgIAogICAgLy8gRW5hYmxlcyBncmFkaWVudHMKCiAgICBncmFkaWVudHM6IHRydWUsCgogICAgLy8gQ29ybmVycyB1c2VkIHdoZW4gdHVybmluZyB0aGUgcGFnZQoKICAgIHR1cm5Db3JuZXJzOiAnYmwsYnInLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMAoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCiAgICAvLyBEZWZpbmUgY29uc3RhbnRzCiAgICAKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKICAgIGhhc1JvdCA9IHJvdGF0aW9uQXZhaWxhYmxlKCk7CiAgICB2ZW5kb3IgPSBnZXRQcmVmaXgoKTsKCiAgICB2YXIgaSwgdGhhdCA9IHRoaXMsIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRpb25zID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRpb25zKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRpb25zOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlWm9vbSA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0aW9ucy5wYWdlcyB8fCAwOwogICAgZGF0YS5ldmVudEhhbmRsZXJzID0gewogICAgICB0b3VjaFN0YXJ0OiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaFN0YXJ0LCB0aGlzKSwKICAgICAgdG91Y2hNb3ZlOiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaE1vdmUsIHRoaXMpLAogICAgICB0b3VjaEVuZDogJC5wcm94eSh0dXJuTWV0aG9kcy5fdG91Y2hFbmQsIHRoaXMpLAogICAgICBzdGFydDogJC5wcm94eSh0dXJuTWV0aG9kcy5fZXZlbnRTdGFydCwgdGhpcykKICAgIH07CgoKCiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgZm9yIChpIGluIG9wdGlvbnMud2hlbikKICAgICAgICBpZiAoaGFzKGksIG9wdGlvbnMud2hlbikpCiAgICAgICAgICB0aGlzLmJpbmQoaSwgb3B0aW9ucy53aGVuW2ldKTsKCiAgICAvLyBTZXQgdGhlIGNzcwoKICAgIHRoaXMuY3NzKHtwb3NpdGlvbjogJ3JlbGF0aXZlJywgd2lkdGg6IG9wdGlvbnMud2lkdGgsIGhlaWdodDogb3B0aW9ucy5oZWlnaHR9KTsKCiAgICAvLyBTZXQgdGhlIGluaXRpYWwgZGlzcGxheQoKICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CgogICAgLy8gU2V0IHRoZSBkaXJlY3Rpb24KCiAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24hPT0nJykKICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CiAgICAKICAgIC8vIFByZXZlbnQgYmx1ZSBzY3JlZW4gcHJvYmxlbXMgb2Ygc3dpdGNoaW5nIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtb2RlCiAgICAvLyBCeSBmb3JjaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgZXZlcgoKICAgIGlmIChoYXMzZCAmJiAhaXNUb3VjaCAmJiBvcHRpb25zLmFjY2VsZXJhdGlvbikKICAgICAgdGhpcy50cmFuc2Zvcm0odHJhbnNsYXRlKDAsIDAsIHRydWUpKTsKCiAgICAvLyBBZGQgcGFnZXMgZnJvbSB0aGUgRE9NCgogICAgZm9yIChpID0gMDsgaTxjaC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoJChjaFtpXSkuYXR0cignaWdub3JlJykhPScxJykgewogICAgICAgIHRoaXMudHVybignYWRkUGFnZScsIGNoW2ldLCArK3BhZ2VOdW0pOwogICAgICB9CiAgICB9CgogICAgLy8gRXZlbnQgbGlzdGVuZXJzCgogICAgJCh0aGlzKS5iaW5kKG1vdXNlRXZlbnRzLmRvd24sIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaFN0YXJ0KS4KICAgICAgYmluZCgnZW5kJywgdHVybk1ldGhvZHMuX2V2ZW50RW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9ldmVudFByZXNzZWQpLgogICAgICBiaW5kKCdyZWxlYXNlZCcsIHR1cm5NZXRob2RzLl9ldmVudFJlbGVhc2VkKS4KICAgICAgYmluZCgnZmxpcCcsIHR1cm5NZXRob2RzLl9mbGlwKTsKCiAgICAkKHRoaXMpLnBhcmVudCgpLmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS5iaW5kKG1vdXNlRXZlbnRzLm1vdmUsIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaE1vdmUpLgogICAgICBiaW5kKG1vdXNlRXZlbnRzLnVwLCBkYXRhLmV2ZW50SGFuZGxlcnMudG91Y2hFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAvLyBUaGlzIGZsaXBib29rIGlzIHJlYWR5CgogICAgZGF0YS5kb25lID0gdHJ1ZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZSBmcm9tIGV4dGVybmFsIGRhdGEKCiAgYWRkUGFnZTogZnVuY3Rpb24oZWxlbWVudCwgcGFnZSkgewoKICAgIHZhciBjdXJyZW50UGFnZSwKICAgICAgY2xhc3NOYW1lLAogICAgICBpbmNQYWdlcyA9IGZhbHNlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGxhc3RQYWdlID0gZGF0YS50b3RhbFBhZ2VzKzE7CgogICAgaWYgKGRhdGEuZGVzdHJveWluZykKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFJlYWQgdGhlIHBhZ2UgbnVtYmVyIGZyb20gdGhlIGNsYXNzTmFtZSBvZiBgZWxlbWVudGAgLSBmb3JtYXQ6IHBbMC05XSsKCiAgICBpZiAoKGN1cnJlbnRQYWdlID0gL1xicChbMC05XSspXGIvLmV4ZWMoJChlbGVtZW50KS5hdHRyKCdjbGFzcycpKSkpCiAgICAgIHBhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZVsxXSwgMTApOwoKICAgIGlmIChwYWdlKSB7CiAgICAgIAogICAgICBpZiAocGFnZT09bGFzdFBhZ2UpCiAgICAgICAgaW5jUGFnZXMgPSB0cnVlOwogICAgICBlbHNlIGlmIChwYWdlPmxhc3RQYWdlKQogICAgICAgIHRocm93IHR1cm5FcnJvcignUGFnZSAiJytwYWdlKyciIGNhbm5vdCBiZSBpbnNlcnRlZCcpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBwYWdlID0gbGFzdFBhZ2U7CiAgICAgIGluY1BhZ2VzID0gdHJ1ZTsKCiAgICB9CgogICAgaWYgKHBhZ2U+PTEgJiYgcGFnZTw9bGFzdFBhZ2UpIHsKCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICAgIGNsYXNzTmFtZSA9IChwYWdlJTIpID8gJyBvZGQnIDogJyBldmVuJzsKICAgICAgZWxzZQogICAgICAgIGNsYXNzTmFtZSA9ICcnOwoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIGlmIChkYXRhLmRvbmUpCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAvLyBNb3ZlIHBhZ2VzIGlmIGl0J3MgbmVjZXNzYXJ5CiAgICAgIGlmIChwYWdlIGluIGRhdGEucGFnZU9ianMpCiAgICAgICAgdHVybk1ldGhvZHMuX21vdmVQYWdlcy5jYWxsKHRoaXMsIHBhZ2UsIDEpOwoKICAgICAgLy8gSW5jcmVhc2UgdGhlIG51bWJlciBvZiBwYWdlcwogICAgICBpZiAoaW5jUGFnZXMpCiAgICAgICAgZGF0YS50b3RhbFBhZ2VzID0gbGFzdFBhZ2U7CgogICAgICAvLyBBZGQgZWxlbWVudAogICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdID0gJChlbGVtZW50KS4KICAgICAgICBjc3MoeydmbG9hdCc6ICdsZWZ0J30pLgogICAgICAgIGFkZENsYXNzKCdwYWdlIHAnICsgcGFnZSArIGNsYXNzTmFtZSk7CgogICAgICBpZiAoIWhhc0hhcmRQYWdlKCkgJiYgIGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2hhcmQnKSkgewogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0ucmVtb3ZlQ2xhc3MoJ2hhcmQnKTsKICAgICAgfQoKICAgICAgLy8gQWRkIHBhZ2UKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgLy8gV3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXSA9ICQoJzxkaXYvPicsCiAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KTsKCiAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhpcyBmbGlwYm9vawogICAgICAgICAgdGhpcy5hcHBlbmQoZGF0YS5wYWdlV3JhcFtwYWdlXSk7CgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VQbGFjZVtwYWdlXSkgewogICAgICAgICAgICAKICAgICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwogICAgICAgICAgICAvLyBNb3ZlIGBwYWdlT2Jqc1twYWdlXWAgdG8gd3JhcHBlcgogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmFwcGVuZFRvKGRhdGEucGFnZVdyYXBbcGFnZV0pOwogICAgICAgICAgCiAgICAgICAgIH0KCiAgICAgICAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIHBhZ2UKICAgICAgICAgIHZhciBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICB9CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9PSBwYWdlKSB7CgogICAgICAgICAvLyBJZiB0aGUgcGFnZSBpc24ndCBpbiBhbm90aGVyIHBsYWNlLCBjcmVhdGUgdGhlIGZsaXAgZWZmZWN0CiAgICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZUZsaXAuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIH0KICAgICAgICAKICAgICAgfSBlbHNlIHsKCiAgICAgICAgLy8gUGxhY2UKICAgICAgICBkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9IDA7CgogICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IGZyb20gdGhlIERPTQogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICAgIH0KCiAgfSwKCiAgLy8gQ2hlY2tzIGlmIGEgcGFnZSBpcyBpbiBtZW1vcnkKICAKICBoYXNQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcmV0dXJuIGhhcyhwYWdlLCB0aGlzLmRhdGEoKS5wYWdlT2Jqcyk7CiAgCiAgfSwKCiAgLy8gQ2VudGVycyB0aGUgZmxpcGJvb2sKCiAgY2VudGVyOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHNpemUgPSAkKHRoaXMpLnR1cm4oJ3NpemUnKSwKICAgICAgbGVmdCA9IDA7CgogICAgaWYgKCFkYXRhLm5vQ2VudGVyKSB7CiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICB9CiAgICAgIAogICAgICB9CgogICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBmbGlwYm9vayA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgZXZlbnRzID0gWwogICAgICAgICdlbmQnLCAnZmlyc3QnLCAnZmxpcCcsICdsYXN0JywgJ3ByZXNzZWQnLAogICAgICAgICdyZWxlYXNlZCcsICdzdGFydCcsICd0dXJuaW5nJywgJ3R1cm5lZCcsCiAgICAgICAgJ3pvb21pbmcnLCAnbWlzc2luZyddOwoKICAgIGlmICh0cmlnZ2VyKCdkZXN0cm95aW5nJywgdGhpcyk9PSdwcmV2ZW50ZWQnKQogICAgICByZXR1cm47CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkLmVhY2goZXZlbnRzLCBmdW5jdGlvbihpbmRleCwgZXZlbnROYW1lKSB7CiAgICAgIGZsaXBib29rLnVuYmluZChldmVudE5hbWUpOwogICAgfSk7CgogICAgdGhpcy5wYXJlbnQoKS51bmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS51bmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoTW92ZSkuCiAgICAgIHVuYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAgIAogICAgICBpZiAodHJpZ2dlcignem9vbWluZycsIHRoaXMsIFtuZXdab29tLCBkYXRhLnpvb21dKT09J3ByZXZlbnRlZCcpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIAogICAgICB2YXIgc2l6ZSA9IHRoaXMudHVybignc2l6ZScpLAogICAgICAgIGN1cnJlbnRWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICAgICAvKi4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7Ki8KCiAgICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwogICAgICAvKmVsc2UKICAgICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogc2l6ZS53aWR0aCAqIGl6IC8gMiAtIG5ld1dpZHRoIC8gMn0pOyovCgogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaTxjdXJyZW50Vmlldy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjdXJyZW50Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSE9ZGF0YS56b29tKSB7CiAgCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgICBjdXJyZW50Vmlld1tpXSwKICAgICAgICAgICAgY3VycmVudFZpZXcsCiAgICAgICAgICAgIGRhdGEucGFnZVpvb21bY3VycmVudFZpZXdbaV1dLAogICAgICAgICAgICBkYXRhLnpvb21dKTsKCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSA9IGRhdGEuem9vbTsKICAgICAgfQogICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLnpvb207CgogIH0sCgogIC8vIEdldHMgdGhlIHNpemUgb2YgYSBwYWdlCgogIF9wYWdlU2l6ZTogZnVuY3Rpb24ocGFnZSwgcG9zaXRpb24pIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwcm9wID0ge307CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKCiAgICAgIHByb3Aud2lkdGggPSB0aGlzLndpZHRoKCk7CiAgICAgIHByb3AuaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHByb3AudG9wID0gMDsKICAgICAgICBwcm9wLmxlZnQgPSAwOwogICAgICAgIHByb3AucmlnaHQgPSAnYXV0byc7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdmFyIHBhZ2VXaWR0aCA9IHRoaXMud2lkdGgoKS8yLAogICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ293bi1zaXplJykpIHsKICAgICAgICBwcm9wLndpZHRoID0gZGF0YS5wYWdlT2Jqc1twYWdlXS53aWR0aCgpOwogICAgICAgIHByb3AuaGVpZ2h0ID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oZWlnaHQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcm9wLndpZHRoID0gcGFnZVdpZHRoOwogICAgICAgIHByb3AuaGVpZ2h0ID0gcGFnZUhlaWdodDsKICAgICAgfQogICAgICAKICAgICAgaWYgKHBvc2l0aW9uKSB7CiAgICAgICAgdmFyIG9kZCA9IHBhZ2UlMjsKICAgICAgICBwcm9wLnRvcCA9IChwYWdlSGVpZ2h0LXByb3AuaGVpZ2h0KS8yOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9IHBhZ2VXaWR0aC1wcm9wLndpZHRoOwogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gJ2F1dG8nOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9ICdhdXRvJzsKCiAgICAgICAgfQogICAgICAKICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcm9wOwoKICB9LAoKICAvLyBQcmVwYXJlcyB0aGUgZmxpcCBlZmZlY3QgZm9yIGEgcGFnZQoKICBfbWFrZUZsaXA6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICghZGF0YS5wYWdlc1twYWdlXSAmJiBkYXRhLnBhZ2VQbGFjZVtwYWdlXT09cGFnZSkgewogICAgICAKICAgICAgdmFyIHNpbmdsZSA9IGRhdGEuZGlzcGxheT09J3NpbmdsZScsCiAgICAgICAgb2RkID0gcGFnZSUyOwoKICAgICAgZGF0YS5wYWdlc1twYWdlXSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgY3NzKHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UpKS4KICAgICAgICBmbGlwKHsKICAgICAgICAgIHBhZ2U6IHBhZ2UsCiAgICAgICAgICBuZXh0OiAob2RkIHx8IHNpbmdsZSkgPyBwYWdlKzEgOiBwYWdlLTEsCiAgICAgICAgICB0dXJuOiB0aGlzCiAgICAgICAgfSkuCiAgICAgICAgZmxpcCgnZGlzYWJsZScsIGRhdGEuZGlzYWJsZWQpOwoKICAgICAgICAvLyBJc3N1ZSBhYm91dCB6LWluZGV4CiAgICAgICAgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGF0YS5wYWdlWm9vbVtwYWdlXSA9IGRhdGEuem9vbTsKICAgICAgICAKICAgIH0KCiAgICByZXR1cm4gZGF0YS5wYWdlc1twYWdlXTsKICB9LAoKICAvLyBNYWtlcyBwYWdlcyB3aXRoaW4gYSByYW5nZQoKICBfbWFrZVJhbmdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgcmFuZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS50b3RhbFBhZ2VzPDEpCiAgICAgIHJldHVybjsKCiAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICBmb3IgKHBhZ2UgPSByYW5nZVswXTsgcGFnZTw9cmFuZ2VbMV07IHBhZ2UrKykKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgfSwKCiAgLy8gUmV0dXJucyBhIHJhbmdlIG9mIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBET00KICAvLyBFeGFtcGxlOgogIC8vIC0gcGFnZSBpbiB0aGUgY3VycmVudCB2aWV3LCByZXR1cm4gdHJ1ZQogIC8vICogcGFnZSBpcyBpbiB0aGUgcmFuZ2UsIHJldHVybiB0cnVlCiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UKICAvLwogIC8vIDEgMi0zIDQtNSA2LTcgOC05IDEwLTExIDEyLTEzCiAgLy8gICAqKiAgKiogIC0tICAgKiogICoqCgogIHJhbmdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIHJlbWFpbmluZ1BhZ2VzLCBsZWZ0LCByaWdodCwgdmlldywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgICAgcGFnZSA9IHBhZ2UgfHwgZGF0YS50cGFnZSB8fCBkYXRhLnBhZ2UgfHwgMTsKICAgICAgdmlldyA9IHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgcGFnZSk7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicrcGFnZSsnIiBpcyBub3QgYSB2YWxpZCBwYWdlJyk7CgogICAgCiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdIHx8IHZpZXdbMF07CiAgICAgIAogICAgICBpZiAodmlld1swXT49MSAmJiB2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpIHsKCiAgICAgICAgcmVtYWluaW5nUGFnZXMgPSBNYXRoLmZsb29yKChwYWdlc0luRE9NLTIpLzIpOwoKICAgICAgICBpZiAoZGF0YS50b3RhbFBhZ2VzLXZpZXdbMV0gPiB2aWV3WzBdKSB7CiAgICAgICAgICBsZWZ0ID0gTWF0aC5taW4odmlld1swXS0xLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICByaWdodCA9IDIqcmVtYWluaW5nUGFnZXMtbGVmdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmlnaHQgPSBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSwgcmVtYWluaW5nUGFnZXMpOwogICAgICAgICAgbGVmdCA9IDIqcmVtYWluaW5nUGFnZXMtcmlnaHQ7CiAgICAgICAgfQoKICAgICAgfSBlbHNlIHsKICAgICAgICBsZWZ0ID0gcGFnZXNJbkRPTS0xOwogICAgICAgIHJpZ2h0ID0gcGFnZXNJbkRPTS0xOwogICAgICB9CgogICAgICByZXR1cm4gW01hdGgubWF4KDEsIHZpZXdbMF0tbGVmdCksCiAgICAgICAgICBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMsIHZpZXdbMV0rcmlnaHQpXTsKCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiBhIHBhZ2UgaXMgd2l0aGluIHRoZSByYW5nZSBvZiBgcGFnZXNJbkRPTWAgZnJvbSB0aGUgY3VycmVudCB2aWV3CgogIF9uZWNlc3NQYWdlOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIGlmIChwYWdlPT09MCkKICAgICAgcmV0dXJuIHRydWU7CgogICAgdmFyIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScpOwoKICAgIHJldHVybiB0aGlzLmRhdGEoKS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhIHBhZ2UKCiAgcmVtb3ZlUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgLy8gRGVsZXRlIGFsbCB0aGUgcGFnZXMKICAgIGlmIChwYWdlPT0nKicpIHsKICAgICAgCiAgICAgIHdoaWxlIChkYXRhLnRvdGFsUGFnZXMhPT0wKSB7CiAgICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgICAKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pIHsKCiAgICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAgIC8vIFJlbW92ZSBgcGFnZWAKICAgICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgICB9CgogICAgICAvLyBNb3ZlIHRoZSBwYWdlcwogICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgLTEpOwoKICAgICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgICAgZGF0YS50b3RhbFBhZ2VzID0gZGF0YS50b3RhbFBhZ2VzLTE7CgogICAgICAvLyBDaGVjayB0aGUgY3VycmVudCB2aWV3CgogICAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykgewoKICAgICAgIGRhdGEucGFnZSA9IG51bGw7CiAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEudG90YWxQYWdlcyk7CgogICAgICB9IGVsc2UgewoKICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICAKICB9LAoKICAvLyBNb3ZlcyBwYWdlcwoKICBfbW92ZVBhZ2VzOiBmdW5jdGlvbihmcm9tLCBjaGFuZ2UpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2luZ2xlID0gZGF0YS5kaXNwbGF5PT0nc2luZ2xlJywKICAgICAgbW92ZSA9IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICAgICAgdmFyIG5leHQgPSBwYWdlICsgY2hhbmdlLAogICAgICAgICAgb2RkID0gbmV4dCUyLAogICAgICAgICAgY2xhc3NOYW1lID0gKG9kZCkgPyAnIG9kZCAnIDogJyBldmVuICc7CgogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1tuZXh0XSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgICAgIHJlbW92ZUNsYXNzKCdwJyArIHBhZ2UgKyAnIG9kZCBldmVuJykuCiAgICAgICAgICAgIGFkZENsYXNzKCdwJyArIG5leHQgKyBjbGFzc05hbWUpOwoKICAgICAgICBpZiAoZGF0YS5wYWdlUGxhY2VbcGFnZV0gJiYgZGF0YS5wYWdlV3JhcFtwYWdlXSkgewoKICAgICAgICAgIGRhdGEucGFnZVBsYWNlW25leHRdID0gbmV4dDsKICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW25leHRdLmhhc0NsYXNzKCdmaXhlZCcpKQogICAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXS4KICAgICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGF0LCBuZXh0LCB0cnVlKSkuCiAgICAgICAgICAgICAgYXR0cigncGFnZScsIG5leHQpOwogICAgICAKICAgICAgICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgICAgICAgZGF0YS5wYWdlc1tuZXh0XSA9IGRhdGEucGFnZXNbcGFnZV0uCiAgICAgICAgICAgICAgICBmbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgICBwYWdlOiBuZXh0LAogICAgICAgICAgICAgICAgICBuZXh0OiAoc2luZ2xlIHx8IG9kZCkgPyBuZXh0KzEgOiBuZXh0LTEKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGNoYW5nZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VzW3BhZ2VdOwogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5PT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CgogICAgfSBlbHNlIHsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlzcGxheSwgZGlzcGxheXMpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJyInK2Rpc3BsYXkgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlzcGxheScpOwogICAgICAKICAgICAgc3dpdGNoKGRpc3BsYXkpIHsKICAgICAgICBjYXNlICdzaW5nbGUnOgoKICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFsIHBhZ2UgdG8gdXNlIGFzIGZvbGRlZCBwYWdlCgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICAgIGNzcyh7J292ZXJmbG93JzogJ2hpZGRlbid9KTsKCiAgICAgICAgICAgIGRhdGEucGFnZU9ianNbMF0gPSAkKCc8ZGl2IC8+JywKICAgICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICAgIGNzcyh7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgICAgICAgYXBwZW5kVG8odGhpcyk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hZGRDbGFzcygnc2hhZG93Jyk7CgogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RvdWJsZSc6CgogICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhbCBwYWdlCgogICAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pIHsKICAgICAgICAgICAgdGhpcy50dXJuKCdzdG9wJykuY3NzKHsnb3ZlcmZsb3cnOiAnJ30pOwogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1swXTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdzaGFkb3cnKTsKCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgCgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0KICAKICB9LAogIAogIC8vIEdldHMgYW5kIHNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpcGJvb2sKCiAgZGlyZWN0aW9uOiBmdW5jdGlvbihkaXIpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkaXI9PT11bmRlZmluZWQpIHsKCiAgICAgIHJldHVybiBkYXRhLmRpcmVjdGlvbjsKCiAgICB9IGVsc2UgewoKICAgICAgZGlyID0gZGlyLnRvTG93ZXJDYXNlKCk7CgogICAgICBpZiAoJC5pbkFycmF5KGRpciwgZGlyZWN0aW9ucyk9PS0xKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicgKyBkaXIgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlyZWN0aW9uJyk7CgogICAgICBpZiAoZGlyPT0ncnRsJykgewogICAgICAgICQodGhpcykuYXR0cignZGlyJywgJ2x0cicpLgogICAgICAgICAgY3NzKHtkaXJlY3Rpb246ICdsdHInfSk7CiAgICAgIH0KCiAgICAgIGRhdGEuZGlyZWN0aW9uID0gZGlyOwoKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCAkKHRoaXMpLndpZHRoKCksICQodGhpcykuaGVpZ2h0KCkpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIERldGVjdHMgYW5pbWF0aW9uCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCBhY3RpdmF0ZWQgY29ybmVyCgogIGNvcm5lcjogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciBjb3JuZXIsCiAgICAgIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlcykgewogICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgIGlmICgoY29ybmVyID0gZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdjb3JuZXInKSkpIHsKICAgICAgICAgIHJldHVybiBjb3JuZXI7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9LAoKICAvLyBHZXRzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgZmxpcGJvb2sKCiAgZGF0YTogZnVuY3Rpb24oKSB7CiAgICAKICAgIHJldHVybiB0aGlzLmRhdGEoKTsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGRhdGEuZGlzYWJsZWQgPSBkaXNhYmxlPT09dW5kZWZpbmVkIHx8IGRpc2FibGU9PT10cnVlOwoKICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgIChkYXRhLmRpc2FibGVkKSA/IHRydWUgOiAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCB2aWV3KT09LTEpOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoPT09dW5kZWZpbmVkIHx8IGhlaWdodD09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHt3aWR0aDogdGhpcy53aWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCl9OwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIHZhciBwYWdlLCBwcm9wLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykgPyB3aWR0aC8yIDogd2lkdGg7CgogICAgICB0aGlzLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pCiAgICAgICAgZGF0YS5wYWdlT2Jqc1swXS5jc3Moe3dpZHRoOiBwYWdlV2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKSBjb250aW51ZTsKCiAgICAgICAgcHJvcCA9IHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UsIHRydWUpOwoKICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyhwcm9wKTsKICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfQogIH0sCgogIC8vIFJlc2l6ZXMgZWFjaCBwYWdlCgogIHJlc2l6ZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5wYWdlc1swXSkgewogICAgICBkYXRhLnBhZ2VXcmFwWzBdLmNzcyh7bGVmdDogLXRoaXMud2lkdGgoKX0pOwogICAgICBkYXRhLnBhZ2VzWzBdLmZsaXAoJ3Jlc2l6ZScsIHRydWUpOwogICAgfQoKICAgIGZvciAocGFnZSA9IDE7IHBhZ2UgPD0gZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CgogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhbiBhbmltYXRpb24gZnJvbSB0aGUgY2FjaGUKCiAgX3JlbW92ZU12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGksIGRhdGEgPSB0aGlzLmRhdGEoKTsKICAgICAgCiAgICBmb3IgKGk9MDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykKICAgICAgaWYgKGRhdGEucGFnZU12W2ldPT1wYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlTXYuc3BsaWNlKGksIDEpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgcmV0dXJuIGZhbHNlOwoKICB9LAoKICAvLyBBZGRzIGFuIGFuaW1hdGlvbiB0byB0aGUgY2FjaGUKICAKICBfYWRkTXY6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9yZW1vdmVNdi5jYWxsKHRoaXMsIHBhZ2UpOwogICAgZGF0YS5wYWdlTXYucHVzaChwYWdlKTsKCiAgfSwKCiAgLy8gR2V0cyBpbmRleGVzIGZvciBhIHZpZXcKCiAgX3ZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAKICAgIHBhZ2UgPSBwYWdlIHx8IGRhdGEucGFnZTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIChwYWdlJTIpID8gW3BhZ2UtMSwgcGFnZV0gOiBbcGFnZSwgcGFnZSsxXTsKICAgIGVsc2UKICAgICAgcmV0dXJuIFtwYWdlXTsKCiAgfSwKCiAgLy8gR2V0cyBhIHZpZXcKCiAgdmlldzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICByZXR1cm4gWyh2aWV3WzBdPjApID8gdmlld1swXSA6IDAsCiAgICAgICAgKHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgPyB2aWV3WzFdIDogMF07CiAgICBlbHNlCiAgICAgIHJldHVybiBbKHZpZXdbMF0+MCAmJiB2aWV3WzBdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1swXSA6IDBdOwoKICB9LAoKICAvLyBTdG9wcyBhbmltYXRpb25zCgogIHN0b3A6IGZ1bmN0aW9uKGlnbm9yZSwgYW5pbWF0ZSkgewoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpKSB7CiAgCiAgICAgIHZhciBpLCBvcHRzLCBwYWdlLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIGlmIChkYXRhLnRwYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlID0gZGF0YS50cGFnZTsKICAgICAgICBkZWxldGUgZGF0YVsndHBhZ2UnXTsKICAgICAgfQoKICAgICAgZm9yIChpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewoKICAgICAgICBpZiAoIWRhdGEucGFnZU12W2ldIHx8IGRhdGEucGFnZU12W2ldPT09aWdub3JlKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIHBhZ2UgPSBkYXRhLnBhZ2VzW2RhdGEucGFnZU12W2ldXTsKICAgICAgICBvcHRzID0gcGFnZS5kYXRhKCkuZi5vcHRzOwoKICAgICAgICBwYWdlLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgYW5pbWF0ZSk7CgogICAgICAgIGlmICghYW5pbWF0ZSkKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CgogICAgICB9CiAgICB9CiAgICAKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzCgogIHBhZ2VzOiBmdW5jdGlvbihwYWdlcykgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHBhZ2VzKSB7CgogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2U+cGFnZXM7IHBhZ2UtLSkKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgfQoKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBwYWdlczsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEucGFnZSk7CgogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgdmFyIHAsCiAgICAgICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJywgcGFnZSksCiAgICAgICAgbWlzc2luZyA9IFtdOwoKICAgIGZvciAocCA9IHJhbmdlWzBdOyBwPD1yYW5nZVsxXTsgcCsrKSB7CiAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1twXSkKICAgICAgICBtaXNzaW5nLnB1c2gocCk7CiAgICB9CgogICAgaWYgKG1pc3NpbmcubGVuZ3RoPjApCiAgICAgIHRoaXMudHJpZ2dlcignbWlzc2luZycsIFttaXNzaW5nXSk7CgogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgCiAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaTxuZXdWaWV3Lmxlbmd0aDsgaSsrKSB7CgogICAgICBpZiAobmV3Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dIT1kYXRhLnpvb20pIHsKICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgbmV3Vmlld1tpXSwKICAgICAgICAgIG5ld1ZpZXcsCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dLAogICAgICAgICAgZGF0YS56b29tXSk7CgogICAgICAgIGRhdGEucGFnZVpvb21bbmV3Vmlld1tpXV0gPSBkYXRhLnpvb207CgogICAgICB9CiAgICB9CgogICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl9tYWtlUmFuZ2UuY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbCh0aGlzKTsKICAgIHRoaXMudHJpZ2dlcigndHVybmVkJywgW3BhZ2UsIG5ld1ZpZXddKTsKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgaWYgKGRhdGEub3B0cy5hdXRvQ2VudGVyKQogICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwoKICB9LAogIAogIC8vIFR1cm5zIHRoZSBwYWdlCgogIF90dXJuUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBjdXJyZW50LAogICAgICBuZXh0LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHBsYWNlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV0sCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKCiAgICBpZiAoZGF0YS5wYWdlIT1wYWdlKSB7CgogICAgICB2YXIgY3VycmVudFBhZ2UgPSBkYXRhLnBhZ2U7CgogICAgICBpZiAodHJpZ2dlcigndHVybmluZycsIHRoaXMsIFtwYWdlLCBuZXdWaWV3XSk9PSdwcmV2ZW50ZWQnKSB7CgogICAgICAgIGlmIChjdXJyZW50UGFnZT09ZGF0YS5wYWdlICYmICQuaW5BcnJheShwbGFjZSwgZGF0YS5wYWdlTXYpIT0tMSkKICAgICAgICAgIGRhdGEucGFnZXNbcGxhY2VdLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuOwoKICAgICAgfQoKICAgICAgaWYgKCQuaW5BcnJheSgxLCBuZXdWaWV3KSE9LTEpCiAgICAgICAgdGhpcy50cmlnZ2VyKCdmaXJzdCcpOwogICAgICBpZiAoJC5pbkFycmF5KGRhdGEudG90YWxQYWdlcywgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignbGFzdCcpOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgewogICAgICBjdXJyZW50ID0gdmlld1swXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMV0gJiYgcGFnZT52aWV3WzFdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzFdOwogICAgICBuZXh0ID0gbmV3Vmlld1swXTsKICAgIH0gZWxzZSBpZiAodmlld1swXSAmJiBwYWdlPHZpZXdbMF0pIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzFdOwogICAgfQoKICAgIHZhciBvcHRzQ29ybmVycyA9IGRhdGEub3B0cy50dXJuQ29ybmVycy5zcGxpdCgnLCcpLAogICAgICBmbGlwRGF0YSA9IGRhdGEucGFnZXNbY3VycmVudF0uZGF0YSgpLmYsCiAgICAgIG9wdHMgPSBmbGlwRGF0YS5vcHRzLAogICAgICBhY3R1YWxQb2ludCA9IGZsaXBEYXRhLnBvaW50OwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIGRhdGEudHBhZ2UgPSBuZXh0OwoKICAgIGlmIChvcHRzLm5leHQhPW5leHQpIHsKICAgICAgb3B0cy5uZXh0ID0gbmV4dDsKICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICB9CgogICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICBmbGlwRGF0YS5wb2ludCA9IGFjdHVhbFBvaW50OwogICAgCiAgICBpZiAoZmxpcERhdGEuZWZmZWN0PT0naGFyZCcpCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAocGFnZT5jdXJyZW50KSA/ICdyJyA6ICdsJyk7CiAgICAgIGVsc2UKICAgICAgICBkYXRhLnBhZ2VzW2N1cnJlbnRdLmZsaXAoJ3R1cm5QYWdlJywKICAgICAgICAgIChwYWdlPmN1cnJlbnQpID8gJ2wnIDogJ3InKTsKICAgIGVsc2UgewogICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKQogICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgb3B0c0Nvcm5lcnNbKHBhZ2U+Y3VycmVudCkgPyAxIDogMF0pOwogICAgICBlbHNlCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICBvcHRzQ29ybmVyc1socGFnZT5jdXJyZW50KSA/IDAgOiAxXSk7CiAgICB9CgogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgYSBwYWdlCgogIHBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gZGF0YS5wYWdlOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIWRhdGEuZGVzdHJveWluZykgewoKICAgICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSwgMTApOwoKICAgICAgICBpZiAocGFnZT4wICYmIHBhZ2U8PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICAgIGlmIChwYWdlIT1kYXRhLnBhZ2UpIHsKICAgICAgICAgICAgaWYgKCFkYXRhLmRvbmUgfHwgJC5pbkFycmF5KHBhZ2UsIHRoaXMudHVybigndmlldycpKSE9LTEpCiAgICAgICAgICAgICAgdHVybk1ldGhvZHMuX2ZpdFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgICAgfQogICAgICAKICAgICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGUgcGFnZSAnICsgcGFnZSArICcgZG9lcyBub3QgZXhpc3QnKTsKCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIG5leHQgdmlldwoKICBuZXh0OiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywgTWF0aC5taW4odGhpcy5kYXRhKCkudG90YWxQYWdlcywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5wb3AoKSArIDEpKTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgcHJldmlvdXMgdmlldwoKICBwcmV2aW91czogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMudHVybigncGFnZScsIE1hdGgubWF4KDEsCiAgICAgIHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgdGhpcy5kYXRhKCkucGFnZSkuc2hpZnQoKSAtIDEpKTsKCiAgfSwKCiAgLy8gU2hvd3MgYSBwZWVsaW5nIGNvcm5lcgoKICBwZWVsOiBmdW5jdGlvbihjb3JuZXIsIGFuaW1hdGUpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGFuaW1hdGUgPSAoYW5pbWF0ZT09PXVuZGVmaW5lZCkgPyB0cnVlIDogYW5pbWF0ZT09PXRydWU7CgogICAgaWYgKGNvcm5lcj09PWZhbHNlKSB7CiAgICAgIAogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBudWxsLCBhbmltYXRlKTsKCiAgICB9IGVsc2UgewogICAgCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGRhdGEucGFnZXNbZGF0YS5wYWdlXS5mbGlwKCdwZWVsJywgY29ybmVyLCBhbmltYXRlKTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHZhciBwYWdlOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1swXSA6IHZpZXdbMV07CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1sxXSA6IHZpZXdbMF07CgogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncGVlbCcsIGNvcm5lciwgYW5pbWF0ZSk7CgogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIC8vIEFkZHMgYSBtb3Rpb24gdG8gdGhlIGludGVybmFsIGxpc3QKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2FkZE1vdGlvblBhZ2U6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBvcHRzID0gJCh0aGlzKS5kYXRhKCkuZi5vcHRzLAogICAgICB0dXJuID0gb3B0cy50dXJuLAogICAgICBkZCA9IHR1cm4uZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9hZGRNdi5jYWxsKHR1cm4sIG9wdHMucGFnZSk7CgogIH0sCgogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpLAogICAgICBhY3R1YWxab29tID0gZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGFjdHVhbFpvb20gJiYgYWN0dWFsWm9vbSE9ZGF0YS56b29tKSB7CiAgICAgIAogICAgICBvcHRzLnR1cm4udHJpZ2dlcignem9vbWVkJyxbCiAgICAgICAgb3B0cy5wYWdlLAogICAgICAgIG9wdHMudHVybi50dXJuKCd2aWV3Jywgb3B0cy5wYWdlKSwKICAgICAgICBhY3R1YWxab29tLAogICAgICAgIGRhdGEuem9vbV0pOwoKICAgICAgZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdID0gZGF0YS56b29tOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJyAmJiBjb3JuZXIpIHsKCiAgICAgIGlmICgoY29ybmVyLmNoYXJBdCgxKT09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgfHwKICAgICAgICAoY29ybmVyLmNoYXJBdCgxKT09J3InICYmIGRhdGEuZGlyZWN0aW9uPT0ncnRsJykpCiAgICAgIHsKICAgICAgICAKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0PG9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UtMTsKICAgICAgICBvcHRzLmZvcmNlID0gdHJ1ZTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dD5vcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlKzE7CgogICAgICB9CgogICAgfQoKICAgIHR1cm5NZXRob2RzLl9hZGRNb3Rpb25QYWdlLmNhbGwoZS50YXJnZXQpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKG9wdHMudHVybik7CiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9ldmVudEVuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CiAgCiAgICB2YXIgdGhhdCA9ICQoZS50YXJnZXQpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuZiwKICAgICAgdHVybiA9IG9wdHMudHVybiwKICAgICAgZGQgPSB0dXJuLmRhdGEoKTsKCiAgICBpZiAodHVybmVkKSB7CgogICAgICB2YXIgdHBhZ2UgPSBkZC50cGFnZSB8fCBkZC5wYWdlOwogICAgCiAgICAgIGlmICh0cGFnZT09b3B0cy5uZXh0IHx8IHRwYWdlPT1vcHRzLnBhZ2UpIHsKICAgICAgICBkZWxldGUgZGQudHBhZ2U7CgogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodHVybiwgdHBhZ2UgfHwgb3B0cy5uZXh0LCB0cnVlKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0dXJuLCBvcHRzLnBhZ2UpOwogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodHVybik7CiAgICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgfQogICAgCiAgfSwKICAKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UHJlc3NlZDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gJChlLnRhcmdldCkuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGFnZXMgPSB0dXJuRGF0YS5wYWdlczsKICAgIAogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSB0cnVlOwoKICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UmVsZWFzZWQ6IGZ1bmN0aW9uKGUsIHBvaW50KSB7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0nYnInIHx8IHBvaW50LmNvcm5lcj09J3RyJykgPwogICAgICAgIHBvaW50Lng8cGFnZS53aWR0aCgpLzI6CiAgICAgICAgcG9pbnQueD5wYWdlLndpZHRoKCkvMjsKICAgIH0gZWxzZSB7CiAgICAgIG91dEFyZWEgPSBwb2ludC54PDAgfHwgcG9pbnQueD5wYWdlLndpZHRoKCk7CiAgICB9CgogICAgaWYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCktZGF0YS50aW1lPDIwMCB8fCBvdXRBcmVhKSB7CgogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHR1cm4sIGRhdGEub3B0cy5uZXh0KTsKCiAgICB9CgogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSBmYWxzZTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCiAgCiAgX2ZsaXA6IGZ1bmN0aW9uKGUpIHsKCiAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwoKICAgIHZhciBvcHRzID0gJChlLnRhcmdldCkuZGF0YSgpLmYub3B0czsKCiAgICBvcHRzLnR1cm4udHJpZ2dlcigndHVybicsIFtvcHRzLm5leHRdKTsKCiAgICBpZiAob3B0cy50dXJuLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXIpIHsKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CiAgICB9CgogIH0sCgogLy8KICBfdG91Y2hTdGFydDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgZm9yICh2YXIgcGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykgJiYKICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRTdGFydC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpPT09ZmFsc2UpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0sCiAgCiAgLy8KICBfdG91Y2hNb3ZlOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudE1vdmUuYXBwbHkoZGF0YS5wYWdlc1twYWdlXSwgYXJndW1lbnRzKTsKICAgICAgfQogICAgfQogIH0sCgogIC8vCiAgX3RvdWNoRW5kOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgfSwKCiAgLy8gQ2FsY3VsYXRlIHRoZSB6LWluZGV4IHZhbHVlIGZvciBwYWdlcyBkdXJpbmcgdGhlIGFuaW1hdGlvbgoKICBjYWxjdWxhdGVaOiBmdW5jdGlvbihtdikgewoKICAgIHZhciBpLCBwYWdlLCBuZXh0UGFnZSwgcGxhY2VQYWdlLCBkcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpLAogICAgICBjdXJyZW50UGFnZSA9IHZpZXdbMF0gfHwgdmlld1sxXSwKICAgICAgdG90YWwgPSBtdi5sZW5ndGgtMSwKICAgICAgciA9IHtwYWdlWjoge30sIHBhcnRaOiB7fSwgcGFnZVY6IHt9fSwKCiAgICAgIGFkZFZpZXcgPSBmdW5jdGlvbihwYWdlKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGF0LnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAgICAgICBpZiAodmlld1swXSkgci5wYWdlVlt2aWV3WzBdXSA9IHRydWU7CiAgICAgICAgaWYgKHZpZXdbMV0pIHIucGFnZVZbdmlld1sxXV0gPSB0cnVlOwogICAgICB9OwogICAgCiAgICBmb3IgKGkgPSAwOyBpPD10b3RhbDsgaSsrKSB7CiAgICAgIHBhZ2UgPSBtdltpXTsKICAgICAgbmV4dFBhZ2UgPSBkYXRhLnBhZ2VzW3BhZ2VdLmRhdGEoKS5mLm9wdHMubmV4dDsKICAgICAgcGxhY2VQYWdlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICAgIGFkZFZpZXcocGFnZSk7CiAgICAgIGFkZFZpZXcobmV4dFBhZ2UpOwogICAgICBkcGFnZSA9IChkYXRhLnBhZ2VQbGFjZVtuZXh0UGFnZV09PW5leHRQYWdlKSA/IG5leHRQYWdlIDogcGFnZTsKICAgICAgci5wYWdlWltkcGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMgLSBNYXRoLmFicyhjdXJyZW50UGFnZS1kcGFnZSk7CiAgICAgIHIucGFydFpbcGxhY2VQYWdlXSA9IGRhdGEudG90YWxQYWdlcyoyIC0gIHRvdGFsICsgaTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpICYmIGRhdGEucGFnZU12WzBdIT09MCkgewoKICAgICAgLy8gVXBkYXRlIG1vdGlvbgoKICAgICAgdmFyIHAsIGFwYWdlLCBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgY29ybmVyID0gdGhpcy50dXJuKCdjb3JuZXInKSwKICAgICAgICBhY3R1YWxWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewoKICAgICAgICBpZiAoIWhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSkKICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBmaXhlZCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2ZpeGVkJyk7CgogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHsKICAgICAgICAgIGRpc3BsYXk6IChwb3MucGFnZVZbcGFnZV0gfHwgZml4ZWQpID8gJycgOiAnbm9uZScsCiAgICAgICAgICB6SW5kZXg6CiAgICAgICAgICAgIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdoYXJkJykgPwogICAgICAgICAgICAgIHBvcy5wYXJ0WltwYWdlXQogICAgICAgICAgICAgIDoKICAgICAgICAgICAgICBwb3MucGFnZVpbcGFnZV0KICAgICAgICAgICAgKSB8fCAoZml4ZWQgPyAtMSA6IDApCiAgICAgICAgfSk7CgogICAgICAgIGlmICgocCA9IGRhdGEucGFnZXNbcGFnZV0pKSB7CgogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CiAgICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnRwYWdlKSB7IC8vIElzIGl0IHR1cm5pbmcgdGhlIHBhZ2UgdG8gYHRwYWdlYD8KCiAgICAgICAgICAgIHAuZmxpcCgnaG92ZXInLCBmYWxzZSkuCiAgICAgICAgICAgICAgZmxpcCgnZGlzYWJsZScsCiAgICAgICAgICAgICAgICAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCBkYXRhLnBhZ2VNdik9PS0xICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzBdICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzFdKTsKCiAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgcC5mbGlwKCdob3ZlcicsIGNvcm5lcj09PWZhbHNlKS4KICAgICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgcGFnZSE9YWN0dWFsVmlld1swXSAmJiBwYWdlIT1hY3R1YWxWaWV3WzFdKTsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VzW3BhZ2VdLgogICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLgogICAgICAgICAgICBmbGlwKCdob3ZlcicsIHRydWUpLgogICAgICAgICAgICBmbGlwKCd6JywgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gVXBkYXRlcyB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIGZsaXBib29rJ3Mgc2hhZG93CgogIF91cGRhdGVTaGFkb3c6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgdmlldywgdmlldzIsIHNoYWRvdywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcGFnZVdpZHRoID0gKGRhdGEuZGlzcGxheT09J3NpbmdsZScpID8gd2lkdGggOiB3aWR0aC8yOwoKICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAoIWRhdGEuc2hhZG93KSB7CiAgICAgIGRhdGEuc2hhZG93ID0gJCgnPGRpdiAvPicsIHsKICAgICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICAgJ2Nzcyc6IGRpdkF0dCgwLCAwLCAwKS5jc3MKICAgICAgICB9KS4KICAgICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbG9jID0gMDsKCiAgICAKICAgIGlmIChwYWdlPT12aWV3WzBdIHx8IHBhZ2U9PXZpZXdbMV0pCiAgICAgIGxvYyA9IDE7CiAgICBlbHNlIGlmICgKICAgICAgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwgcGFnZT09dmlld1sxXSsyKQogICAgKQogICAgICBsb2MgPSAyOwoKICAgIGlmICghdGhpcy50dXJuKCdhbmltYXRpbmcnKSkKICAgICAgc3dpdGNoIChsb2MpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsCiAgICAgICAgICAgIGRpc3BsYXk6ICcnCiAgICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMtMSwKICAgICAgICAgICAgZGlzcGxheTogJycKICAgICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMDoKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKAogICAgICAgICAgewogICAgICAgICAgICB6SW5kZXg6IDAsCiAgICAgICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICAgICAgKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgCiAgICByZXR1cm4gbG9jOwogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG9wdGlvbnMKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykgewogICAgCiAgICBpZiAob3B0aW9ucz09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm9wdHM7CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgICAvLyBTZXQgbmV3IHZhbHVlcwoKICAgICAgJC5leHRlbmQoZGF0YS5vcHRzLCBvcHRpb25zKTsKICAgICAgCiAgICAgIC8vIFNldCBwYWdlcwoKICAgICAgaWYgKG9wdGlvbnMucGFnZXMpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlcycsIG9wdGlvbnMucGFnZXMpOwoKICAgICAgLy8gU2V0IHBhZ2UKCiAgICAgIGlmIChvcHRpb25zLnBhZ2UpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAgIC8vIFNldCBkaXNwbGF5CgogICAgICBpZiAob3B0aW9ucy5kaXNwbGF5KQogICAgICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CiAgICAgIAogICAgICAvLyBTZXQgZGlyZWN0aW9uCgogICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24pCiAgICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CgogICAgICAvLyBTZXQgc2l6ZQoKICAgICAgaWYgKG9wdGlvbnMud2lkdGggJiYgb3B0aW9ucy5oZWlnaHQpCiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQpOwogICAgICAKICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycwoKICAgICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gb3B0aW9ucy53aGVuKQogICAgICAgICAgaWYgKGhhcyhldmVudE5hbWUsIG9wdGlvbnMud2hlbikpIHsKICAgICAgICAgICAgdGhpcy51bmJpbmQoZXZlbnROYW1lKS4KICAgICAgICAgICAgICBiaW5kKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuW2V2ZW50TmFtZV0pOwogICAgICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIEdldHMgdGhlIGN1cnJlbnQgdmVyc2lvbgoKICB2ZXJzaW9uOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdmVyc2lvbjsKCiAgfQp9LAoKLy8gTWV0aG9kcyBhbmQgcHJvcGVydGllcyBmb3IgdGhlIGZsaXAgcGFnZSBlZmZlY3QKCmZsaXBNZXRob2RzID0gewoKICAvLyBDb25zdHJ1Y3RvcgoKICBpbml0OiBmdW5jdGlvbihvcHRzKSB7CgogICAgdGhpcy5kYXRhKHtmOiB7CiAgICAgIGRpc2FibGVkOiBmYWxzZSwKICAgICAgaG92ZXI6IGZhbHNlLAogICAgICBlZmZlY3Q6ICh0aGlzLmhhc0NsYXNzKCdoYXJkJykpID8gJ2hhcmQnIDogJ3NoZWV0JwogICAgfX0pOwogIAogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mOwoKICAgIGRhdGEub3B0c1snei1pbmRleCddID0gejsKCiAgICBpZiAoZGF0YS5md3JhcHBlcikKICAgICAgZGF0YS5md3JhcHBlci5jc3MoewogICAgICAgIHpJbmRleDogeiB8fCBwYXJzZUludChkYXRhLnBhcmVudC5jc3MoJ3otaW5kZXgnKSwgMTApIHx8IDAKICAgICAgfSk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgX2NBbGxvd2VkOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwYWdlID0gZGF0YS5vcHRzLnBhZ2UsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBvZGQgPSBwYWdlJTI7CiAgICAKICAgIGlmIChkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAKICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgWyhvZGQpID8gJ3InIDogJ2wnXSA6CiAgICAgICAgWyhvZGQpID8gJ2wnIDogJ3InXTsKCiAgICB9IGVsc2UgewoKICAgICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChwYWdlPT0xKQogICAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICAgIGNvcm5lcnNbJ2ZvcndhcmQnXSA6IGNvcm5lcnNbJ2JhY2t3YXJkJ107CiAgICAgICAgZWxzZSBpZiAocGFnZT09dHVybkRhdGEudG90YWxQYWdlcykKICAgICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgICBjb3JuZXJzWydiYWNrd2FyZCddIDogY29ybmVyc1snZm9yd2FyZCddOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1sob2RkKSA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCddCiAgICAgICAgICA6CiAgICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJ107CgogICAgICB9CgogICAgfQoKICB9LAoKICBfY29ybmVyQWN0aXZhdGVkOiBmdW5jdGlvbihwKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcG9pbnQgPSB7eDogcC54LCB5OiBwLnksIGNvcm5lcjogJyd9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAocG9pbnQueDw9MCB8fCBwb2ludC55PD0wIHx8IHBvaW50Lng+PXdpZHRoIHx8IHBvaW50Lnk+PWhlaWdodCkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIHZhciBhbGxvd2VkQ29ybmVycyA9IGZsaXBNZXRob2RzLl9jQWxsb3dlZC5jYWxsKHRoaXMpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lng+d2lkdGgtY3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ3InOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lng8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ2wnOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdzaGVldCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lnk8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyKz0gJ3QnOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lnk+PWhlaWdodC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAnYic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgCiAgICAgICAgaWYgKHBvaW50Lng8PWNzeikKICAgICAgICAgIHBvaW50LmNvcm5lcis9ICdsJzsKICAgICAgICBlbHNlIGlmIChwb2ludC54Pj13aWR0aC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAncic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgcmV0dXJuICghcG9pbnQuY29ybmVyIHx8ICQuaW5BcnJheShwb2ludC5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8KICAgICAgZmFsc2UgOiBwb2ludDsKCiAgfSwKCiAgX2lzSUFyZWE6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgcG9zID0gdGhpcy5kYXRhKCkuZi5wYXJlbnQub2Zmc2V0KCk7CgogICAgZSA9IChpc1RvdWNoICYmIGUub3JpZ2luYWxFdmVudCkgPyBlLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXSA6IGU7CgogICAgcmV0dXJuIGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLAogICAgICB7CiAgICAgICAgeDogZS5wYWdlWC1wb3MubGVmdCwKICAgICAgICB5OiBlLnBhZ2VZLXBvcy50b3AKICAgICAgfSk7CgogIH0sCgogIF9jOiBmdW5jdGlvbihjb3JuZXIsIG9wdHMpIHsKCiAgICBvcHRzID0gb3B0cyB8fCAwOwoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ3RsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCBvcHRzKTsKICAgICAgY2FzZSAndHInOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCBvcHRzKTsKICAgICAgY2FzZSAnYmwnOgogICAgICAgIHJldHVybiBwb2ludDJEKG9wdHMsIHRoaXMuaGVpZ2h0KCktb3B0cyk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCktb3B0cywgdGhpcy5oZWlnaHQoKS1vcHRzKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQob3B0cywgMCk7CiAgICAgIGNhc2UgJ3InOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCAwKTsKICAgIH0KCiAgfSwKCiAgX2MyOiBmdW5jdGlvbihjb3JuZXIpIHsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICd0bCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICd0cic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICAgIGNhc2UgJ2JsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCkqMiwgdGhpcy5oZWlnaHQoKSk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICdyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCAwKTsKICAgIH0KCiAgfSwKCiAgX2ZvbGRpbmdQYWdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIG9wdHMgPSBkYXRhLm9wdHM7CgogICAgaWYgKG9wdHMudHVybikgewogICAgICBkYXRhID0gb3B0cy50dXJuLmRhdGEoKTsKICAgICAgaWYgKGRhdGEuZGlzcGxheSA9PSAnc2luZ2xlJykKICAgICAgICByZXR1cm4gKG9wdHMubmV4dD4xIHx8IG9wdHMucGFnZT4xKSA/IGRhdGEucGFnZU9ianNbMF0gOiBudWxsOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGRhdGEucGFnZU9ianNbb3B0cy5uZXh0XTsKICAgIH0KCiAgfSwKCiAgX2JhY2tHcmFkaWVudDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgICAgZ3JhZGllbnQgPSAgdHVybkRhdGEub3B0cy5ncmFkaWVudHMgJiYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnIHx8CiAgICAgICAgIChkYXRhLm9wdHMucGFnZSE9MiAmJiBkYXRhLm9wdHMucGFnZSE9dHVybkRhdGEudG90YWxQYWdlcy0xKSk7CgogICAgaWYgKGdyYWRpZW50ICYmICFkYXRhLmJzaGFkb3cpCiAgICAgIGRhdGEuYnNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgY3NzKHsncG9zaXRpb24nOiAnJywgd2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgYXBwZW5kVG8oZGF0YS5wYXJlbnQpOwoKICAgIHJldHVybiBncmFkaWVudDsKCiAgfSwKCiAgdHlwZTogZnVuY3Rpb24gKCkgewogICAgCiAgICByZXR1cm4gdGhpcy5kYXRhKCkuZi5lZmZlY3Q7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICBpZiAoZnVsbCkgewogICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgIGlmIChmdWxsKSB7CiAgICAgICAgdmFyIHNpemUgPSBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyh3aWR0aCwgMikrTWF0aC5wb3coaGVpZ2h0LCAyKSkpOwoKICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfSk7CiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9KS4KICAgICAgICAgIGNoaWxkcmVuKCc6Zmlyc3QtY2hpbGQnKS4KICAgICAgICAgIGNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBpZiAodHVybkRhdGEub3B0cy5ncmFkaWVudHMpCiAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhpcykpCiAgICAgICAgICBkYXRhLmJzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLnBhcmVudC5pcygnOnZpc2libGUnKSkgewogICAgICAgIHZhciBvZmZzZXQgPSBmaW5kUG9zKGRhdGEucGFyZW50WzBdKTsKCiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3RvcDogb2Zmc2V0LnRvcCwKICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0fSk7CgogICAgICAgIC8vaWYgKGRhdGEub3B0cy50dXJuKSB7CiAgICAgICAgIG9mZnNldCA9IGZpbmRQb3MoZGF0YS5vcHRzLnR1cm5bMF0pOwogICAgICAgICBkYXRhLmZwYXJlbnQuY3NzKHt0b3A6IC1vZmZzZXQudG9wLCBsZWZ0OiAtb2Zmc2V0LmxlZnR9KTsKICAgICAgICAvL30KICAgICAgfQoKICAgICAgdGhpcy5mbGlwKCd6JywgZGF0YS5vcHRzWyd6LWluZGV4J10pOwoKICAgICAgYnJlYWs7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOwoKICAgIGRhdGEucGFyZW50ID0gcGFyZW50OwoKICBpZiAoIWRhdGEud3JhcHBlcikKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKICAgICAgICBjc3NQcm9wZXJ0aWVzW3ZlbmRvciArICd0cmFuc2Zvcm0tc3R5bGUnXSA9ICdwcmVzZXJ2ZS0zZCc7CiAgICAgICAgY3NzUHJvcGVydGllc1t2ZW5kb3IgKyAnYmFja2ZhY2UtdmlzaWJpbGl0eSddID0gJ2hpZGRlbic7CgogICAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpLgogICAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgICAgZGF0YS5mcGFnZSA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93ID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsICAwKSkuCiAgICAgICAgICAgIGhpZGUoKS4KICAgICAgICAgICAgYXBwZW5kVG8ocGFyZW50KTsKCiAgICAgICAgICBkYXRhLmJzaGFkb3cgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgIDApKTsKICAgICAgICB9CgogICAgICBicmVhazsKICAgICAgY2FzZSAnc2hlZXQnOgogICAgICAgIAogICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgICAgICBzaXplID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3cod2lkdGgsIDIpK01hdGgucG93KGhlaWdodCwgMikpKTsKICAgICAgICAKICAgICAgICBkYXRhLmZwYXJlbnQgPSBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudDsKCiAgICAgICAgaWYgKCFkYXRhLmZwYXJlbnQpIHsKICAgICAgICAgIHZhciBmcGFyZW50ID0gJCgnPGRpdi8+Jywge2Nzczogeydwb2ludGVyLWV2ZW50cyc6ICdub25lJ319KS5oaWRlKCk7CiAgICAgICAgICAgIGZwYXJlbnQuZGF0YSgpLmZsaXBzID0gMDsKICAgICAgICAgICAgZnBhcmVudC5jc3MoZGl2QXR0KDAsIDAsICdhdXRvJywgJ3Zpc2libGUnKS5jc3MpLgogICAgICAgICAgICBhcHBlbmRUbyhkYXRhLm9wdHMudHVybik7CiAgICAgICAgICAgIAogICAgICAgICAgICBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAnYXV0bycsIHJpZ2h0OiAnYXV0byd9KTsKCiAgICAgICAgZGF0YS53cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIHRoaXMuY3NzKCd6LWluZGV4JykpKS4KICAgICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgICBwcmVwZW5kKHRoaXMpOwoKICAgICAgICBkYXRhLmZ3cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KHBhcmVudC5vZmZzZXQoKS50b3AsIHBhcmVudC5vZmZzZXQoKS5sZWZ0KSkuCiAgICAgICAgICBoaWRlKCkuCiAgICAgICAgICBhcHBlbmRUbyhkYXRhLmZwYXJlbnQpOwoKICAgICAgICBkYXRhLmZwYWdlID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIDAsICd2aXNpYmxlJykpLgogICAgICAgICAgY3NzKHtjdXJzb3I6ICdkZWZhdWx0J30pLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5md3JhcHBlcik7CgogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykKICAgICAgICAgIGRhdGEuYXNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAgMSkpLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5mcGFnZSk7CgogICAgICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCBkYXRhKTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFNldCBzaXplCiAgICBmbGlwTWV0aG9kcy5yZXNpemUuY2FsbCh0aGlzLCB0cnVlKTsKCiAgfSwKCiAgLy8gVGFrZXMgYSAyUCBwb2ludCBmcm9tIHRoZSBzY3JlZW4gYW5kIGFwcGxpZXMgdGhlIHRyYW5zZm9ybWF0aW9uCgogIF9mb2xkOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKCiAgICAgIGNhc2UgJ2hhcmQnOgoKICAgICAgICBpZiAocG9pbnQuY29ybmVyPT0nbCcpCiAgICAgICAgICBwb2ludC54ID0gTWF0aC5taW4oTWF0aC5tYXgocG9pbnQueCwgMCksIHdpZHRoKjIpOwogICAgICAgIGVsc2UKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChNYXRoLm1pbihwb2ludC54LCB3aWR0aCksIC13aWR0aCk7CgogICAgICAgIHZhciBsZWZ0UG9zLAogICAgICAgICAgc2hhZG93LAogICAgICAgICAgZ3JhZGllbnRYLAogICAgICAgICAgZnBhZ2VPcmlnaW4sCiAgICAgICAgICBwYXJlbnRPcmlnaW4sCiAgICAgICAgICB0b3RhbFBhZ2VzID0gdHVybkRhdGEudG90YWxQYWdlcywKICAgICAgICAgIHpJbmRleCA9IGRhdGEub3B0c1snei1pbmRleCddIHx8IHRvdGFsUGFnZXMsCiAgICAgICAgICBwYXJlbnRDc3MgPSB7J292ZXJmbG93JzogJ3Zpc2libGUnfSwKICAgICAgICAgIHJlbFggPSAoby54KSA/IChvLnggLSBwb2ludC54KS93aWR0aCA6IHBvaW50Lngvd2lkdGgsCiAgICAgICAgICBhbmdsZSA9IHJlbFggKiA5MCwKICAgICAgICAgIGhhbGYgPSBhbmdsZTw5MDsKCiAgICAgICAgc3dpdGNoIChwb2ludC5jb3JuZXIpIHsKICAgICAgICAgIGNhc2UgJ2wnOgoKICAgICAgICAgICAgZnBhZ2VPcmlnaW4gPSAgJzAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMTAwJSA1MCUnOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dC0xPjA7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJzEwMCUnOwogICAgICAgICAgICAgIHNoYWRvdyA9IGRhdGEub3B0cy5wYWdlKzE8dG90YWxQYWdlczsKICAgICAgICAgICAgICBncmFkaWVudFggPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdyJzoKCiAgICAgICAgICAgIGZwYWdlT3JpZ2luID0gICcxMDAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMCUgNTAlJzsKICAgICAgICAgICAgYW5nbGUgPSAtYW5nbGU7CiAgICAgICAgICAgIHdpZHRoID0gLXdpZHRoOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dCsxPHRvdGFsUGFnZXM7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJy0xMDAlJzsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMucGFnZSE9MTsKICAgICAgICAgICAgICBncmFkaWVudFggPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnRDc3NbdmVuZG9yKydwZXJzcGVjdGl2ZS1vcmlnaW4nXSA9IHBhcmVudE9yaWdpbjsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgncm90YXRlWSgnK2FuZ2xlKydkZWcpJyArCiAgICAgICAgICAndHJhbnNsYXRlM2QoMHB4LCAwcHgsICcrKHRoaXMuYXR0cignZGVwdGgnKXx8MCkrJ3B4KScsIHBhcmVudE9yaWdpbik7CgogICAgICAgIGRhdGEuZnBhZ2UudHJhbnNmb3JtKCd0cmFuc2xhdGVYKCcrd2lkdGgrJ3B4KSByb3RhdGVZKCcrKDE4MCthbmdsZSkrJ2RlZyknLCBmcGFnZU9yaWdpbik7CgogICAgICAgIGRhdGEucGFyZW50LmNzcyhwYXJlbnRDc3MpOwoKICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgcmVsWCA9IC1yZWxYKzE7CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt6SW5kZXg6IHpJbmRleCsxfSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXh9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVsWCA9IHJlbFgtMTsKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3pJbmRleDogekluZGV4fSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXgrMX0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CiAgICAgICAgICBpZiAoc2hhZG93KQogICAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHsKICAgICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgICBsZWZ0OiBsZWZ0UG9zLAogICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsJysoMC41KnJlbFgpKycpJwogICAgICAgICAgICB9KS4KICAgICAgICAgICAgdHJhbnNmb3JtKCdyb3RhdGVZKDBkZWcpJyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CgogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7b3BhY2l0eTotcmVsWCArIDF9KTsKCiAgICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgICBpZiAoZGF0YS5ic2hhZG93LnBhcmVudCgpWzBdIT1kYXRhLndyYXBwZXJbMF0pIHsKICAgICAgICAgICAgICBkYXRhLmJzaGFkb3cuYXBwZW5kVG8oZGF0YS53cmFwcGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGRhdGEuYnNoYWRvdy5wYXJlbnQoKVswXSE9ZGF0YS5mcGFnZVswXSkgewogICAgICAgICAgICAgIGRhdGEuYnNoYWRvdy5hcHBlbmRUbyhkYXRhLmZwYWdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLypkYXRhLmJzaGFkb3cuY3NzKHsKICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwnKygwLjEpKycpJwogICAgICAgICAgfSkqLwogICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LCBwb2ludDJEKGdyYWRpZW50WCAqIDEwMCwgMCksIHBvaW50MkQoKC1ncmFkaWVudFggKyAxKSoxMDAsIDApLAogICAgICAgICAgICBbWzAsICdyZ2JhKDAsMCwwLDAuMyknXSxbMSwgJ3JnYmEoMCwwLDAsMCknXV0sMik7CiAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIGEgPSAwLAogICAgICAgICAgYWxwaGEgPSAwLAogICAgICAgICAgYmV0YSwKICAgICAgICAgIHB4LAogICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEsCiAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiwKICAgICAgICAgIGdyYWRpZW50U3RhcnRWYWwsCiAgICAgICAgICBncmFkaWVudFNpemUsCiAgICAgICAgICBncmFkaWVudE9wYWNpdHksCiAgICAgICAgICBzaGFkb3dWYWwsCiAgICAgICAgICBtdiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBkZiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICB0ciA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgICB0YW4gPSBNYXRoLnRhbihhbHBoYSksCiAgICAgICAgICBhYyA9IHR1cm5EYXRhLm9wdHMuYWNjZWxlcmF0aW9uLAogICAgICAgICAgaCA9IGRhdGEud3JhcHBlci5oZWlnaHQoKSwKICAgICAgICAgIHRvcCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMCwgMSkgPT0gJ3QnLAogICAgICAgICAgbGVmdCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMSwgMSkgPT0gJ2wnLAoKICAgICAgY29tcHV0ZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmVsID0gcG9pbnQyRCgwLCAwKTsKICAgICAgICB2YXIgbWlkZGxlID0gcG9pbnQyRCgwLCAwKTsKCiAgICAgICAgcmVsLnggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiBwb2ludC54OwoKICAgICAgICBpZiAoIWhhc1JvdCkgewogICAgICAgICAgcmVsLnkgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWwueSA9IChvLnkpID8gby55IC0gcG9pbnQueSA6IHBvaW50Lnk7CiAgICAgICAgfQoKICAgICAgICBtaWRkbGUueCA9IChsZWZ0KT8gd2lkdGggLSByZWwueC8yIDogcG9pbnQueCArIHJlbC54LzI7CiAgICAgICAgbWlkZGxlLnkgPSByZWwueS8yOwogICAgICAgIAogICAgICAgIHZhciBhbHBoYSA9ICBBOTAtTWF0aC5hdGFuMihyZWwueSwgcmVsLngpLAogICAgICAgICAgZ2FtbWEgPSBhbHBoYSAtIE1hdGguYXRhbjIobWlkZGxlLnksIG1pZGRsZS54KSwKICAgICAgICAgIGRpc3RhbmNlID0gIE1hdGgubWF4KDAsIE1hdGguc2luKGdhbW1hKSAqIE1hdGguc3FydChNYXRoLnBvdyhtaWRkbGUueCwgMikgKyBNYXRoLnBvdyhtaWRkbGUueSwgMikpKTsKICAgICAgICAgIAogICAgICAgICAgYSA9IGRlZyhhbHBoYSk7CgogICAgICAgICAgdHIgPSBwb2ludDJEKGRpc3RhbmNlICogTWF0aC5zaW4oYWxwaGEpLCBkaXN0YW5jZSAqIE1hdGguY29zKGFscGhhKSk7CgogICAgICAgICAgaWYgKGFscGhhID4gQTkwKSB7CiAgICAgICAgICAgIHRyLnggPSB0ci54ICsgTWF0aC5hYnModHIueSAqIHJlbC55L3JlbC54KTsKICAgICAgICAgICAgdHIueSA9IDA7CiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHRyLngqTWF0aC50YW4oUEktYWxwaGEpKSA8IGhlaWdodCkgewogICAgICAgICAgICAgIHBvaW50LnkgPSBNYXRoLnNxcnQoTWF0aC5wb3coaGVpZ2h0LCAyKSsyICogbWlkZGxlLnggKiByZWwueCk7CiAgICAgICAgICAgICAgaWYgKHRvcCkgcG9pbnQueSA9ICBoZWlnaHQgLSBwb2ludC55OwogICAgICAgICAgICAgIHJldHVybiBjb21wdXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICBpZiAoYWxwaGE+QTkwKSB7CiAgICAgICAgICAgIHZhciBiZXRhID0gUEktYWxwaGEsIGRkID0gaCAtIGhlaWdodC9NYXRoLnNpbihiZXRhKTsKICAgICAgICAgICAgbXYgPSBwb2ludDJEKE1hdGgucm91bmQoZGQqTWF0aC5jb3MoYmV0YSkpLCBNYXRoLnJvdW5kKGRkKk1hdGguc2luKGJldGEpKSk7CiAgICAgICAgICAgIGlmIChsZWZ0KSBtdi54ID0gLSBtdi54OwogICAgICAgICAgICBpZiAodG9wKSBtdi55ID0gLSBtdi55OwogICAgICAgICAgfQoKICAgICAgICAgIHB4ID0gTWF0aC5yb3VuZCh0ci55L01hdGgudGFuKGFscGhhKSArIHRyLngpOwogICAgICAKICAgICAgICAgIHZhciBzaWRlID0gd2lkdGggLSBweCwKICAgICAgICAgICAgc2lkZVggPSBzaWRlKk1hdGguY29zKGFscGhhKjIpLAogICAgICAgICAgICBzaWRlWSA9IHNpZGUqTWF0aC5zaW4oYWxwaGEqMik7CiAgICAgICAgICAgIGRmID0gcG9pbnQyRCgKICAgICAgICAgICAgICBNYXRoLnJvdW5kKChsZWZ0ID8gc2lkZSAtc2lkZVggOiBweCtzaWRlWCkpLAogICAgICAgICAgICAgIE1hdGgucm91bmQoKHRvcCkgPyBzaWRlWSA6IGhlaWdodCAtIHNpZGVZKSk7CiAgICAgICAgICAKICAgICAgICAvLyBHcmFkaWVudHMKICAgICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewoKICAgICAgICAgICAgZ3JhZGllbnRTaXplID0gc2lkZSpNYXRoLnNpbihhbHBoYSk7CgogICAgICAgICAgICB2YXIgZW5kaW5nUG9pbnQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGF0LCBwb2ludC5jb3JuZXIpLAogICAgICAgICAgICAgZmFyID0gTWF0aC5zcXJ0KE1hdGgucG93KGVuZGluZ1BvaW50LngtcG9pbnQueCwgMikrTWF0aC5wb3coZW5kaW5nUG9pbnQueS1wb2ludC55LCAyKSkvd2lkdGg7CgogICAgICAgICAgICBzaGFkb3dWYWwgPSBNYXRoLnNpbihBOTAqKChmYXI+MSkgPyAyIC0gZmFyIDogZmFyKSk7CgogICAgICAgICAgICBncmFkaWVudE9wYWNpdHkgPSBNYXRoLm1pbihmYXIsIDEpOwoKICAgICAgICAgICAKICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0VmFsID0gZ3JhZGllbnRTaXplPjEwMCA/IChncmFkaWVudFNpemUtMTAwKS9ncmFkaWVudFNpemUgOiAwOwoKICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QSA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICBncmFkaWVudFNpemUqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSpNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CiAgICAgICAgICAgCgogICAgICAgICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhhdCkpIHsKCiAgICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSoxLjIqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTaXplKjEuMipNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CgogICAgICAgICAgICAgICAgaWYgKCFsZWZ0KSBncmFkaWVudEVuZFBvaW50Qi54ID0gMTAwLWdyYWRpZW50RW5kUG9pbnRCLng7CiAgICAgICAgICAgICAgICBpZiAoIXRvcCkgZ3JhZGllbnRFbmRQb2ludEIueSA9IDEwMC1ncmFkaWVudEVuZFBvaW50Qi55OwoKICAgICAgICAgICAgICB9CgogICAgICAgICAgfQoKICAgICAgICAgIHRyLnggPSBNYXRoLnJvdW5kKHRyLngpOwogICAgICAgICAgdHIueSA9IE1hdGgucm91bmQodHIueSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAoKICAgICAgdHJhbnNmb3JtID0gZnVuY3Rpb24odHIsIGMsIHgsIGEpIHsKICAgICAgCiAgICAgICAgdmFyIGYgPSBbJzAnLCAnYXV0byddLCBtdlcgPSAod2lkdGgtaCkqeFswXS8xMDAsIG12SCA9IChoZWlnaHQtaCkqeFsxXS8xMDAsCiAgICAgICAgICBjc3NBID0ge2xlZnQ6IGZbY1swXV0sIHRvcDogZltjWzFdXSwgcmlnaHQ6IGZbY1syXV0sIGJvdHRvbTogZltjWzNdXX0sCiAgICAgICAgICBjc3NCID0ge30sCiAgICAgICAgICBhbGlhc2luZ0ZrID0gKGEhPTkwICYmIGEhPS05MCkgPyAobGVmdCA/IC0xIDogMSkgOiAwLAogICAgICAgICAgb3JpZ2luID0geFswXSArICclICcgKyB4WzFdICsgJyUnOwoKICAgICAgICB0aGF0LmNzcyhjc3NBKS4KICAgICAgICAgIHRyYW5zZm9ybShyb3RhdGUoYSkgKyB0cmFuc2xhdGUodHIueCArIGFsaWFzaW5nRmssIHRyLnksIGFjKSwgb3JpZ2luKTsKCiAgICAgICAgZGF0YS5mcGFnZS5jc3MoY3NzQSkudHJhbnNmb3JtKAogICAgICAgICAgcm90YXRlKGEpICsKICAgICAgICAgIHRyYW5zbGF0ZSh0ci54ICsgZGYueCAtIG12LnggLSB3aWR0aCp4WzBdLzEwMCwgdHIueSArIGRmLnkgLSBtdi55IC0gaGVpZ2h0KnhbMV0vMTAwLCBhYykgKwogICAgICAgICAgcm90YXRlKCgxODAvYSAtIDIpKmEpLAogICAgICAgICAgb3JpZ2luKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSh0cmFuc2xhdGUoLXRyLnggKyBtdlctYWxpYXNpbmdGaywgLXRyLnkgKyBtdkgsIGFjKSArIHJvdGF0ZSgtYSksIG9yaWdpbik7CgogICAgICAgIGRhdGEuZndyYXBwZXIudHJhbnNmb3JtKHRyYW5zbGF0ZSgtdHIueCArIG12LnggKyBtdlcsIC10ci55ICsgbXYueSArIG12SCwgYWMpICsgcm90YXRlKC1hKSwgb3JpZ2luKTsKICAgICAgCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CgogICAgICAgICAgaWYgKHhbMF0pCiAgICAgICAgICAgIGdyYWRpZW50RW5kUG9pbnRBLnggPSAxMDAtZ3JhZGllbnRFbmRQb2ludEEueDsKCiAgICAgICAgICBpZiAoeFsxXSkKICAgICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEueSA9ICgxMDAtZ3JhZGllbnRFbmRQb2ludEEueSk7CgogICAgICAgICAgY3NzQlsnYm94LXNoYWRvdyddID0gJzAgMCAyMHB4IHJnYmEoMCwwLDAsJysoMC41KnNoYWRvd1ZhbCkrJyknOwogICAgICAgICAgZm9sZGluZy5jc3MoY3NzQik7CgogICAgICAgICAgZ3JhZGllbnQoZGF0YS5hc2hhZG93LAogICAgICAgICAgICAgIHBvaW50MkQobGVmdD8xMDA6MCwgdG9wPzA6MTAwKSwKICAgICAgICAgICAgICBwb2ludDJEKGdyYWRpZW50RW5kUG9pbnRBLngsIGdyYWRpZW50RW5kUG9pbnRBLnkpLAogICAgICAgICAgICAgIFtbZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsMCknXSwKICAgICAgICAgICAgICBbKCgxLWdyYWRpZW50U3RhcnRWYWwpKjAuOCkrZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICBbMSwgJ3JnYmEoMjU1LDI1NSwyNTUsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXV0sCiAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICBhbHBoYSk7CgogICAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9iYWNrR3JhZGllbnQuY2FsbCh0aGF0KSkKICAgICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LAogICAgICAgICAgICAgICAgcG9pbnQyRChsZWZ0PzA6MTAwLCB0b3A/MDoxMDApLAogICAgICAgICAgICAgICAgcG9pbnQyRChncmFkaWVudEVuZFBvaW50Qi54LCBncmFkaWVudEVuZFBvaW50Qi55KSwKICAgICAgICAgICAgICAgIFtbMC42LCAncmdiYSgwLDAsMCwwKSddLAogICAgICAgICAgICAgICAgWzAuOCwgJ3JnYmEoMCwwLDAsJysoMC4zKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICAgIFsxLCAncmdiYSgwLDAsMCwwKSddCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMyk7CiAgICAgICAgfQoKICAgICAgfTsKCiAgICAgIHN3aXRjaCAocG9pbnQuY29ybmVyKSB7CiAgICAgICAgY2FzZSAnbCcgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncicgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndGwnIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChwb2ludC54LCAxKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybSh0ciwgWzEsMCwwLDFdLCBbMTAwLCAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndHInIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1pbihwb2ludC54LCB3aWR0aC0xKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybShwb2ludDJEKC10ci54LCB0ci55KSwgWzAsMCwwLDFdLCBbMCwgMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdibCcgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWF4KHBvaW50LngsIDEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQodHIueCwgLXRyLnkpLCBbMSwxLDAsMF0sIFsxMDAsIDEwMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdicicgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWluKHBvaW50LngsIHdpZHRoLTEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQoLXRyLngsIC10ci55KSwgWzAsMSwxLDBdLCBbMCwgMTAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICBicmVhazsKICB9CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKG1vdmUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGxhY2UgPSB0dXJuRGF0YS5wYWdlUGxhY2U7CiAgICAgIAogICAgaWYgKG1vdmUpIHsKCiAgICAgIHZhciBuZXh0UGFnZSA9IGRhdGEub3B0cy5uZXh0OwogIAogICAgICBpZiAocGxhY2VbbmV4dFBhZ2VdIT1kYXRhLm9wdHMucGFnZSkgewoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKHRoaXMsIGZhbHNlKTsKCiAgICAgICAgdmFyIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKICAgICAgICAKICAgICAgICBmb2xkaW5nLmFwcGVuZFRvKGRhdGEuZnBhZ2UpOwogICAgICAgIHBsYWNlW25leHRQYWdlXSA9IGRhdGEub3B0cy5wYWdlOwogICAgICAgIGRhdGEuZm9sZGluZyA9IG5leHRQYWdlOwogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoZGF0YS5mb2xkaW5nKSB7CgogICAgICAgIGlmICh0dXJuRGF0YS5wYWdlc1tkYXRhLmZvbGRpbmddKSB7CiAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmbGlwIGF2YWlsYWJsZQoKICAgICAgICAgIHZhciBmbGlwRGF0YSA9IHR1cm5EYXRhLnBhZ2VzW2RhdGEuZm9sZGluZ10uZGF0YSgpLmY7CiAgICAgICAgICAKICAgICAgICAgIHR1cm5EYXRhLnBhZ2VPYmpzW2RhdGEuZm9sZGluZ10uCiAgICAgICAgICAgIGFwcGVuZFRvKGZsaXBEYXRhLndyYXBwZXIpOwoKICAgICAgICB9IGVsc2UgaWYgKHR1cm5EYXRhLnBhZ2VXcmFwW2RhdGEuZm9sZGluZ10pIHsKICAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgcGFnZVdyYXBwZXIKCiAgICAgICAgICB0dXJuRGF0YS5wYWdlT2Jqc1tkYXRhLmZvbGRpbmddLgogICAgICAgICAgICBhcHBlbmRUbyh0dXJuRGF0YS5wYWdlV3JhcFtkYXRhLmZvbGRpbmddKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nIGluIHBsYWNlKSB7CiAgICAgICAgICBwbGFjZVtkYXRhLmZvbGRpbmddID0gZGF0YS5mb2xkaW5nOwogICAgICAgIH0KCiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKCiAgICAgIH0KICAgIH0KICB9LAoKICBfc2hvd0ZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGMsIGFuaW1hdGUpIHsKCiAgICB2YXIgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpLAogICAgICBkZCA9IHRoaXMuZGF0YSgpLAogICAgICBkYXRhID0gZGQuZiwKICAgICAgdmlzaWJsZSA9IGRhdGEudmlzaWJsZTsKCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKCF2aXNpYmxlIHx8ICFkYXRhLnBvaW50IHx8IGRhdGEucG9pbnQuY29ybmVyIT1jLmNvcm5lcikgewoKICAgICAgICB2YXIgY29ybmVyID0gKAogICAgICAgICAgZGF0YS5zdGF0dXM9PSdob3ZlcicgfHwKICAgICAgICAgIGRhdGEuc3RhdHVzPT0ncGVlbCcgfHwKICAgICAgICAgIGRhdGEub3B0cy50dXJuLmRhdGEoKS5tb3VzZUFjdGlvbikgPwogICAgICAgIGMuY29ybmVyIDogbnVsbDsKCiAgICAgICAgdmlzaWJsZSA9IGZhbHNlOwoKICAgICAgICBpZiAodHJpZ2dlcignc3RhcnQnLCB0aGlzLCBbZGF0YS5vcHRzLCBjb3JuZXJdKT09J3ByZXZlbnRlZCcpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICB9CgogICAgICBpZiAoYW5pbWF0ZSkgewogICAgICAgIAogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIHBvaW50ID0gKGRhdGEucG9pbnQgJiYgZGF0YS5wb2ludC5jb3JuZXI9PWMuY29ybmVyKSA/CiAgICAgICAgICBkYXRhLnBvaW50IDogZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBjLmNvcm5lciwgMSk7CiAgICAgIAogICAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgICAgZnJvbTogW3BvaW50LngsIHBvaW50LnldLAogICAgICAgICAgdG86IFtjLngsIGMueV0sCiAgICAgICAgICBkdXJhdGlvbjogNTAwLAogICAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgYy54ID0gTWF0aC5yb3VuZCh2WzBdKTsKICAgICAgICAgICAgYy55ID0gTWF0aC5yb3VuZCh2WzFdKTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBjKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSAgewoKICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoaXMsIGMpOwoKICAgICAgICBpZiAoZGQuZWZmZWN0ICYmICFkZC5lZmZlY3QudHVybmluZykKICAgICAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwoKICAgICAgfQoKICAgICAgaWYgKCF2aXNpYmxlKSB7CgogICAgICAgIHN3aXRjaChkYXRhLmVmZmVjdCkgewogICAgICAgICAgY2FzZSAnaGFyZCc6CgogICAgICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fbW92ZUZvbGRpbmdQYWdlLmNhbGwodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgIGRhdGEuZnBhZ2Uuc2hvdygpOwogICAgICAgICAgICBpZiAoZGF0YS5vcHRzLnNoYWRvd3MpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgICAgICAgIGRhdGEudmlzaWJsZSA9IHRydWU7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudC5zaG93KCkuZGF0YSgpLmZsaXBzKys7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgZGF0YS5md3JhcHBlci5zaG93KCk7CiAgICAgICAgICAgIGlmIChkYXRhLmJzaGFkb3cpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5ic2hhZG93TG9jID0gMDsKICAgICAgICAgIGRhdGEuYnNoYWRvdy5yZW1vdmUoKTsKICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CiAgICAgICAgfQoKICAgICAgICBkYXRhLndyYXBwZXIudHJhbnNmb3JtKCcnKTsKICAgICAgICBkYXRhLmZwYWdlLmhpZGUoKTsKCiAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIGlmICgoLS1kYXRhLmZwYXJlbnQuZGF0YSgpLmZsaXBzKT09PTApCiAgICAgICAgICBkYXRhLmZwYXJlbnQuaGlkZSgpOwoKICAgICAgICB0aGlzLmNzcyh7bGVmdDogMCwgdG9wOiAwLCByaWdodDogJ2F1dG8nLCBib3R0b206ICdhdXRvJ30pLgogICAgICAgICAgdHJhbnNmb3JtKCcnKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgnJyk7CgogICAgICAgIGRhdGEuZndyYXBwZXIuaGlkZSgpOwoKICAgICAgICBpZiAoZGF0YS5ic2hhZG93KQogICAgICAgICAgZGF0YS5ic2hhZG93LmhpZGUoKTsKCiAgICAgICAgZm9sZGluZy50cmFuc2Zvcm0oJycpOwoKICAgICAgYnJlYWs7CiAgICB9CgogICAgICBkYXRhLnZpc2libGUgPSBmYWxzZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBoaWRlRm9sZGVkUGFnZTogZnVuY3Rpb24oYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEucG9pbnQpIHJldHVybjsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgIHAxID0gZGF0YS5wb2ludCwKICAgICAgaGlkZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRhdGEucG9pbnQgPSBudWxsOwogICAgICAgIGRhdGEuc3RhdHVzID0gJyc7CiAgICAgICAgdGhhdC5mbGlwKCdoaWRlJyk7CiAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCBmYWxzZV0pOwogICAgICB9OwoKICAgIGlmIChhbmltYXRlKSB7CgogICAgICB2YXIgcDQgPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHAxLmNvcm5lciksCiAgICAgICAgdG9wID0gKHAxLmNvcm5lci5zdWJzdHIoMCwxKT09J3QnKSwKICAgICAgICBkZWx0YSA9ICh0b3ApID8gTWF0aC5taW4oMCwgcDEueS1wNC55KS8yIDogTWF0aC5tYXgoMCwgcDEueS1wNC55KS8yLAogICAgICAgIHAyID0gcG9pbnQyRChwMS54LCBwMS55K2RlbHRhKSwKICAgICAgICBwMyA9IHBvaW50MkQocDQueCwgcDQueS1kZWx0YSk7CiAgICAKICAgICAgdGhpcy5hbmltYXRlZih7CiAgICAgICAgZnJvbTogMCwKICAgICAgICB0bzogMSwKICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgdmFyIG5wID0gYmV6aWVyKHAxLCBwMiwgcDMsIHA0LCB2KTsKICAgICAgICAgIHAxLnggPSBucC54OwogICAgICAgICAgcDEueSA9IG5wLnk7CiAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIHAxKTsKICAgICAgICB9LAogICAgICAgIGNvbXBsZXRlOiBoaWRlLAogICAgICAgIGR1cmF0aW9uOiA4MDAsCiAgICAgICAgaGlkaW5nOiB0cnVlCiAgICAgIH0pOwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKICAgICAgaGlkZSgpOwoKICAgIH0KICB9LAoKICB0dXJuUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCk7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gdHVybkRhdGEub3B0cy5lbGV2YXRpb24gOiAwKSwKICAgICAgcDQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGlzLCBjb3JuZXIuY29ybmVyKTsKCiAgICAgIHRoaXMudHJpZ2dlcignZmxpcCcpLgogICAgICAgIGFuaW1hdGVmKHsKICAgICAgICAgIGZyb206IDAsCiAgICAgICAgICB0bzogMSwKICAgICAgICAgIGZyYW1lOiBmdW5jdGlvbih2KSB7CgogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhhdCwgY29ybmVyKTsKCiAgICAgICAgICB9LAogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAKICAgICAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCB0cnVlXSk7CgogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiB0dXJuRGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgdHVybmluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgICAgZGF0YS5jb3JuZXIgPSBudWxsOwogIH0sCgogIG1vdmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuICdlZmZlY3QnIGluIHRoaXMuZGF0YSgpOwogIAogIH0sCgogIGlzVHVybmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZmxpcCgnbW92aW5nJykgJiYgdGhpcy5kYXRhKCkuZWZmZWN0LnR1cm5pbmc7CiAgCiAgfSwKCiAgY29ybmVyOiBmdW5jdGlvbigpIHsKICAgIAogICAgcmV0dXJuIHRoaXMuZGF0YSgpLmYuY29ybmVyOwogICAgICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwoKICAgIGlmICghZGF0YS5jb3JuZXIgJiYgIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykgJiYKICAgICAgZGF0YS5vcHRzLnBhZ2U9PXR1cm4uZGF0YSgpLnBhZ2VQbGFjZVtkYXRhLm9wdHMucGFnZV0pCiAgICB7CgogICAgICBkYXRhLmNvcm5lciA9IGZsaXBNZXRob2RzLl9pc0lBcmVhLmNhbGwodGhpcywgZSk7CgogICAgICBpZiAoZGF0YS5jb3JuZXIgJiYgZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcykpIHsKCiAgICAgICAgdGhpcy50cmlnZ2VyKCdwcmVzc2VkJywgW2RhdGEucG9pbnRdKTsKICAgICAgICBmbGlwTWV0aG9kcy5fc2hvd0ZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcik7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CgogICAgICBpZiAoZGF0YS5jb3JuZXIpIHsKCiAgICAgICAgdmFyIHBvcyA9IGRhdGEucGFyZW50Lm9mZnNldCgpOwogICAgICAgIGRhdGEuY29ybmVyLnggPSBlWzBdLnBhZ2VYLXBvcy5sZWZ0OwogICAgICAgIGRhdGEuY29ybmVyLnkgPSBlWzBdLnBhZ2VZLXBvcy50b3A7CiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywgZGF0YS5jb3JuZXIpOwoKICAgICAgfSBlbHNlIGlmIChkYXRhLmhvdmVyICYmICF0aGlzLmRhdGEoKS5lZmZlY3QgJiYgdGhpcy5pcygnOnZpc2libGUnKSkgewoKICAgICAgICB2YXIgcG9pbnQgPSBmbGlwTWV0aG9kcy5faXNJQXJlYS5jYWxsKHRoaXMsIGVbMF0pOwoKICAgICAgICBpZiAocG9pbnQpIHsKCiAgICAgICAgICBpZiAoKGRhdGEuZWZmZWN0PT0nc2hlZXQnICYmIHBvaW50LmNvcm5lci5sZW5ndGg9PTIpICB8fCBkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAgICAgICAgIGRhdGEuc3RhdHVzID0gJ2hvdmVyJzsKICAgICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgcG9pbnQuY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAgICAgcG9pbnQueCA9IG9yaWdpbi54OwogICAgICAgICAgICBwb2ludC55ID0gb3JpZ2luLnk7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIHBvaW50LCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBpZiAoZGF0YS5zdGF0dXM9PSdob3ZlcicpIHsKICAgICAgICAgICAgZGF0YS5zdGF0dXMgPSAnJzsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgX2V2ZW50RW5kOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIGNvcm5lciA9IGRhdGEuY29ybmVyOwoKICAgIGlmICghZGF0YS5kaXNhYmxlZCAmJiBjb3JuZXIpIHsKICAgICAgaWYgKHRyaWdnZXIoJ3JlbGVhc2VkJywgdGhpcywgW2RhdGEucG9pbnQgfHwgY29ybmVyXSkhPSdwcmV2ZW50ZWQnKSB7CiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgfQogICAgfQoKICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgfSwKCiAgZGlzYWJsZTogZnVuY3Rpb24oZGlzYWJsZSkgewoKICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCB7J2Rpc2FibGVkJzogZGlzYWJsZX0pOwogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIGhvdmVyOiBmdW5jdGlvbihob3ZlcikgewogICAgCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydob3Zlcic6IGhvdmVyfSk7CiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgcGVlbDogZnVuY3Rpb24gKGNvcm5lciwgYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoY29ybmVyKSB7CgogICAgICBpZiAoJC5pbkFycmF5KGNvcm5lciwgY29ybmVycy5hbGwpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJ0Nvcm5lciAnK2Nvcm5lcisnIGlzIG5vdCBwZXJtaXR0ZWQnKTsKCiAgICAgIGlmICgkLmluQXJyYXkoY29ybmVyLCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKSkhPS0xKSB7CgogICAgICAgIHZhciBwb2ludCA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAKICAgICAgICBkYXRhLnN0YXR1cyA9ICdwZWVsJzsKCiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywKICAgICAgICB7CiAgICAgICAgICBjb3JuZXI6IGNvcm5lciwKICAgICAgICAgIHg6IHBvaW50LngsCiAgICAgICAgICB5OiBwb2ludC55CiAgICAgICAgfSwgYW5pbWF0ZSk7CgogICAgICB9CgoKICAgIH0gZWxzZSB7CgogICAgICBkYXRhLnN0YXR1cyA9ICcnOwoKICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBhbmltYXRlKTsKICAgICAgCiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfQp9OwoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWModGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBub3QgYSBtZXRob2Qgb3IgcHJvcGVydHknKTsKCn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgIHRvcDogdG9wLAogICAgbGVmdDogbGVmdCwKICAgICdvdmVyZmxvdyc6IG92ZXJmIHx8ICdoaWRkZW4nLAogICAgekluZGV4OiB6SW5kZXggfHwgJ2F1dG8nCiAgfQp9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQogIAovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucwoKZnVuY3Rpb24gcmFkKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gZGVncmVlcy8xODAqUEk7Cgp9CgovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcwoKZnVuY3Rpb24gZGVnKHJhZGlhbnMpIHsKICAKICByZXR1cm4gcmFkaWFucy9QSSoxODA7Cgp9CgovLyBHZXRzIGEgMkQgcG9pbnQKCmZ1bmN0aW9uIHBvaW50MkQoeCwgeSkgewogIAogIHJldHVybiB7eDogeCwgeTogeX07Cgp9CgovLyBXZWJraXQgNTM0LjMgb24gQW5kcm9pZCB3cm9uZ2x5IHJlcGFpbnRzIGVsZW1lbnRzIHRoYXQgdXNlIG92ZXJmbG93OmhpZGRlbiArIHJvdGF0aW9uCgpmdW5jdGlvbiByb3RhdGlvbkF2YWlsYWJsZSgpIHsKICB2YXIgcGFydHM7CgogIGlmICgocGFydHMgPSAvQXBwbGVXZWJraXRcLyhbMC05XC5dKykvaS5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpKSkgewogICAgdmFyIHdlYmtpdFZlcnNpb24gPSBwYXJzZUZsb2F0KHBhcnRzWzFdKTsKICAgIHJldHVybiAod2Via2l0VmVyc2lvbj41MzQuMyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8gUmV0dXJucyB0aGUgdHJhc2xhdGUgdmFsdWUKCmZ1bmN0aW9uIHRyYW5zbGF0ZSh4LCB5LCB1c2UzZCkgewogIAogIHJldHVybiAoaGFzM2QgJiYgdXNlM2QpID8gJyB0cmFuc2xhdGUzZCgnICsgeCArICdweCwnICsgeSArICdweCwgMHB4KSAnCiAgOiAnIHRyYW5zbGF0ZSgnICsgeCArICdweCwgJyArIHkgKyAncHgpICc7Cgp9CgovLyBSZXR1cm5zIHRoZSByb3RhdGlvbiB2YWx1ZQoKZnVuY3Rpb24gcm90YXRlKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gJyByb3RhdGUoJyArIGRlZ3JlZXMgKyAnZGVnKSAnOwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gRGV0ZWN0cyB0aGUgdHJhbnNpdGlvbkVuZCBFdmVudAoKZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkVuZCgpIHsKCiAgdmFyIHQsCiAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zha2VlbGVtZW50JyksCiAgICB0cmFuc2l0aW9ucyA9IHsKICAgICAgJ3RyYW5zaXRpb24nOid0cmFuc2l0aW9uZW5kJywKICAgICAgJ09UcmFuc2l0aW9uJzonb1RyYW5zaXRpb25FbmQnLAogICAgICAnTVNUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdNb3pUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzond2Via2l0VHJhbnNpdGlvbkVuZCcKICAgIH07CgogIGZvciAodCBpbiB0cmFuc2l0aW9ucykgewogICAgaWYgKGVsLnN0eWxlW3RdICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdOwogICAgfQogIH0KfQoKLy8gR3JhZGllbnRzCgpmdW5jdGlvbiBncmFkaWVudChvYmosIHAwLCBwMSwgY29sb3JzLCBudW1Db2xvcnMpIHsKCiAgdmFyIGosIGNvbHMgPSBbXTsKCiAgaWYgKHZlbmRvcj09Jy13ZWJraXQtJykgewoKICAgIGZvciAoaiA9IDA7IGo8bnVtQ29sb3JzOyBqKyspCiAgICAgIGNvbHMucHVzaCgnY29sb3Itc3RvcCgnK2NvbG9yc1tqXVswXSsnLCAnK2NvbG9yc1tqXVsxXSsnKScpOwogICAgCiAgICBvYmouY3NzKHsnYmFja2dyb3VuZC1pbWFnZSc6CiAgICAgICAgJy13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAnKwogICAgICAgIHAwLngrJyUgJysKICAgICAgICBwMC55KyclLCcrCiAgICAgICAgcDEueCsnJSAnKwogICAgICAgIHAxLnkrJyUsICcrCiAgICAgICAgY29scy5qb2luKCcsJykgKyAnICknfSk7CiAgfSBlbHNlIHsKICAgIAogICAgcDAgPSB7eDpwMC54LzEwMCAqIG9iai53aWR0aCgpLCB5OnAwLnkvMTAwICogb2JqLmhlaWdodCgpfTsKICAgIHAxID0ge3g6cDEueC8xMDAgKiBvYmoud2lkdGgoKSwgeTpwMS55LzEwMCAqIG9iai5oZWlnaHQoKX07CgogICAgdmFyIGR4ID0gcDEueC1wMC54LAogICAgICBkeSA9IHAxLnktcDAueSwKICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCksCiAgICAgIGFuZ2xlMiA9IGFuZ2xlIC0gTWF0aC5QSS8yLAogICAgICBkaWFnb25hbCA9IE1hdGguYWJzKG9iai53aWR0aCgpKk1hdGguc2luKGFuZ2xlMikpK01hdGguYWJzKG9iai5oZWlnaHQoKSpNYXRoLmNvcyhhbmdsZTIpKSwKICAgICAgZ3JhZGllbnREaWFnb25hbCA9IE1hdGguc3FydChkeSpkeSArIGR4KmR4KSwKICAgICAgY29ybmVyID0gcG9pbnQyRCgocDEueDxwMC54KSA/IG9iai53aWR0aCgpIDogMCwgKHAxLnk8cDAueSkgPyBvYmouaGVpZ2h0KCkgOiAwKSwKICAgICAgc2xvcGUgPSBNYXRoLnRhbihhbmdsZSksCiAgICAgIGludmVyc2UgPSAtMS9zbG9wZSwKICAgICAgeCA9IChpbnZlcnNlKmNvcm5lci54IC0gY29ybmVyLnkgLSBzbG9wZSpwMC54ICsgcDAueSkvKGludmVyc2Utc2xvcGUpLAogICAgICBjID0ge3g6IHgsIHk6IGludmVyc2UqeCAtIGludmVyc2UqY29ybmVyLnggKyBjb3JuZXIueX0sCiAgICAgIHNlZ0EgPSAoTWF0aC5zcXJ0KCBNYXRoLnBvdyhjLngtcDAueCwyKSArIE1hdGgucG93KGMueS1wMC55LDIpKSk7CgogICAgICBmb3IgKGogPSAwOyBqPG51bUNvbG9yczsgaisrKQogICAgICAgIGNvbHMucHVzaCgnICcrY29sb3JzW2pdWzFdKycgJysoKHNlZ0EgKyBncmFkaWVudERpYWdvbmFsKmNvbG9yc1tqXVswXSkqMTAwL2RpYWdvbmFsKSsnJScpOwoKICAgICAgb2JqLmNzcyh7J2JhY2tncm91bmQtaW1hZ2UnOiB2ZW5kb3IrJ2xpbmVhci1ncmFkaWVudCgnICsgKC1hbmdsZSkgKyAncmFkLCcgKyBjb2xzLmpvaW4oJywnKSArICcpJ30pOwogIH0KfQoKCi8vIFRyaWdnZXJzIGFuIGV2ZW50CgpmdW5jdGlvbiB0cmlnZ2VyKGV2ZW50TmFtZSwgY29udGV4dCwgYXJncykgewoKICB2YXIgZXZlbnQgPSAkLkV2ZW50KGV2ZW50TmFtZSk7CiAgY29udGV4dC50cmlnZ2VyKGV2ZW50LCBhcmdzKTsKICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICByZXR1cm4gJ3ByZXZlbnRlZCc7CiAgZWxzZSBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgIHJldHVybiAnc3RvcHBlZCc7CiAgZWxzZQogICAgcmV0dXJuICcnOwp9CgovLyBKUyBFcnJvcnMKCmZ1bmN0aW9uIHR1cm5FcnJvcihtZXNzYWdlKSB7CgogIGZ1bmN0aW9uIFR1cm5Kc0Vycm9yKG1lc3NhZ2UpIHsKICAgIHRoaXMubmFtZSA9ICJUdXJuSnNFcnJvciI7CiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogIH0KCiAgVHVybkpzRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CiAgVHVybkpzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHVybkpzRXJyb3I7CiAgcmV0dXJuIG5ldyBUdXJuSnNFcnJvcihtZXNzYWdlKTsKCn0KCi8vIEZpbmQgdGhlIG9mZnNldCBvZiBhbiBlbGVtZW50IGlnbm9yaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKCiAgdmFyIG9mZnNldCA9IHt0b3A6IDAsIGxlZnQ6IDB9OwoKICBkb3sKICAgIG9mZnNldC5sZWZ0ICs9IG9iai5vZmZzZXRMZWZ0OwogICAgb2Zmc2V0LnRvcCArPSBvYmoub2Zmc2V0VG9wOwogIH0gd2hpbGUgKChvYmogPSBvYmoub2Zmc2V0UGFyZW50KSk7CgogIHJldHVybiBvZmZzZXQ7Cgp9CgovLyBDaGVja3MgaWYgdGhlcmUncyBoYXJkIHBhZ2UgY29tcGF0aWJpbGl0eQovLyBJRTkgaXMgdGhlIG9ubHkgYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaGFyZCBwYWdlcwoKZnVuY3Rpb24gaGFzSGFyZFBhZ2UoKSB7CiAgcmV0dXJuIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUgOS4wJyk9PS0xKTsKfQoKLy8gUmVxdWVzdCBhbiBhbmltYXRpb24KCndpbmRvdy5yZXF1ZXN0QW5pbSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7CiAgICB9OwoKfSkoKTsKCi8vIEV4dGVuZCAkLmZuCgokLmV4dGVuZCgkLmZuLCB7CgogIGZsaXA6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGRlYygkKHRoaXNbMF0pLCBmbGlwTWV0aG9kcywgYXJndW1lbnRzKTsKICB9LAoKICB0dXJuOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBkZWMoJCh0aGlzWzBdKSwgdHVybk1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHJhbnNmb3JtOiBmdW5jdGlvbih0cmFuc2Zvcm0sIG9yaWdpbikgewoKICAgIHZhciBwcm9wZXJ0aWVzID0ge307CiAgICAKICAgIGlmIChvcmlnaW4pCiAgICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSBvcmlnaW47CiAgICAKICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTsKICAKICAgIHJldHVybiB0aGlzLmNzcyhwcm9wZXJ0aWVzKTsKCiAgfSwKCiAgYW5pbWF0ZWY6IGZ1bmN0aW9uKHBvaW50KSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5lZmZlY3QpCiAgICAgIGRhdGEuZWZmZWN0LnN0b3AoKTsKCiAgICBpZiAocG9pbnQpIHsKCiAgICAgIGlmICghcG9pbnQudG8ubGVuZ3RoKSBwb2ludC50byA9IFtwb2ludC50b107CiAgICAgIGlmICghcG9pbnQuZnJvbS5sZW5ndGgpIHBvaW50LmZyb20gPSBbcG9pbnQuZnJvbV07CgogICAgICB2YXIgZGlmZiA9IFtdLAogICAgICAgIGxlbiA9IHBvaW50LnRvLmxlbmd0aCwKICAgICAgICBhbmltYXRpbmcgPSB0cnVlLAogICAgICAgIHRoYXQgPSB0aGlzLAogICAgICAgIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpLAogICAgICAgIGZyYW1lID0gZnVuY3Rpb24oKSB7CgogICAgICAgICAgaWYgKCFkYXRhLmVmZmVjdCB8fCAhYW5pbWF0aW5nKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgdmFyIHYgPSBbXSwKICAgICAgICAgICAgdGltZURpZmYgPSBNYXRoLm1pbihwb2ludC5kdXJhdGlvbiwgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHRpbWUpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgICAgIHYucHVzaChkYXRhLmVmZmVjdC5lYXNpbmcoMSwgdGltZURpZmYsIHBvaW50LmZyb21baV0sIGRpZmZbaV0sIHBvaW50LmR1cmF0aW9uKSk7CgogICAgICAgICAgcG9pbnQuZnJhbWUoKGxlbj09MSkgPyB2WzBdIDogdik7CgogICAgICAgICAgaWYgKHRpbWVEaWZmPT1wb2ludC5kdXJhdGlvbikgewogICAgICAgICAgICBkZWxldGUgZGF0YVsnZWZmZWN0J107CiAgICAgICAgICAgIHRoYXQuZGF0YShkYXRhKTsKICAgICAgICAgICAgaWYgKHBvaW50LmNvbXBsZXRlKQogICAgICAgICAgICAgIHBvaW50LmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW0oZnJhbWUpOwogICAgICAgICAgfQogICAgICAgIH07CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgIGRpZmYucHVzaChwb2ludC50b1tpXSAtIHBvaW50LmZyb21baV0pOwoKICAgICAgZGF0YS5lZmZlY3QgPSAkLmV4dGVuZCh7CiAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBhbmltYXRpbmcgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGVhc2luZzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGRhdGEpIHsKICAgICAgICAgIHJldHVybiBjICogTWF0aC5zcXJ0KDEgLSAodD10L2RhdGEtMSkqdCkgKyBiOwogICAgICAgIH0KICAgICAgfSwgcG9pbnQpOwoKICAgICAgdGhpcy5kYXRhKGRhdGEpOwoKICAgICAgZnJhbWUoKTsKCiAgICB9IGVsc2UgewogICAgICAKICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwoKICAgIH0KICB9Cn0pOwoKLy8gRXhwb3J0IHNvbWUgZ2xvYmFscwoKJC5pc1RvdWNoID0gaXNUb3VjaDsKJC5tb3VzZUV2ZW50cyA9IG1vdXNlRXZlbnRzOwokLmNzc1ByZWZpeCA9IGdldFByZWZpeDsKJC5jc3NUcmFuc2l0aW9uRW5kID0gZ2V0VHJhbnNpdGlvbkVuZDsKJC5maW5kUG9zID0gZmluZFBvczsKCn0pKGpRdWVyeSk7Cg=='],
	complete: loadApp
});

	</script>



<!--
<div id="loadfile">
	<h1>The XMLHttpRequest Object</h1>
	<button type="button" onclick="loadfile()">loadfile</button>
	</div>
	-->

<!--
<script id="script_loadfile">
	function loadfile() {
		var xhttp = new XMLHttpRequest();
		xhttp.onreadystatechange = function() {
			if (this.readyState == 4 && this.status == 200) {
				document.getElementById("loadfile").innerHTML =
				this.responseText;
				}
			};
		xhttp.open("GET", "index_fb_mag.psv", true);
		xhttp.send();
		}
	</script>
	-->


<!--
	<script id="ajaxrequest" > 
		function ajaxRequest(){
			var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; //activeX versions to check for in IE
			if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
				for (var i=0; i<activexmodes.length; i++){
					try{
						return new ActiveXObject(activexmodes[i]);
						}
					catch(e){
//suppress error
						}
					}
				}
			else if (window.XMLHttpRequest) // if Mozilla, Safari etc
				return new XMLHttpRequest();
			else
				return false;
				}
 
	function ajaxpost(){
		var mypostrequest=new ajaxRequest();
		mypostrequest.onreadystatechange=function(){
			if (mypostrequest.readyState==4){
				if (mypostrequest.status==200 || window.location.href.indexOf("http")==-1){
					document.getElementById("result").innerHTML = mypostrequest.responseText;
					}
				else{
					alert("An error has occured making the request");
					}
				}
			}
    
		var userId = encodeURIComponent(document.getElementById("userId").value);
		var password = encodeURIComponent(document.getElementById("password").value);
		var parameters="userId="+userId+"&password="+password;
		mypostrequest.open("POST", "http://localhost:8080/AjaxTest/Login", true);
		mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		mypostrequest.send(parameters);
		}
	</script>
	-->
 
<!--
<hr color=black>
<hr color=white>
<a href=index_fb_mag.html ><img src="ko.png" height=25></a>
<br><br>
<hr color=white>
<hr color=black>
	-->


<!--
	<form method="get" action="">
        <table>
            <tr>
                <td>User Id:</td>
                <td><input type="text" id="userId" name="userId" size="30" />
                </td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type="password" id="password" name="password"
                    size="30" />
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><input type="button" value="submit" onClick="ajaxpost()" />
                </td>
            </tr>
		</table>
		</form>
 
	<div id="result"></div>
	-->

</body>
</html>
//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer