{"t":"m","c":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InB0LUJSIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+Q2VudHJvIEJyYXNpbGVpcm8gZGUgT3JnYW5pemHDp8OjbyBQYXRyaW1vbmlhbCB8IEVkdWNhw6fDo28gZSBHZXN0w6NvIEZpbmFuY2VpcmE8L3RpdGxlPgogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlBvcnRhbCBlZHVjYXRpdm8gc29icmUgZ2VzdMOjbyBmaW5hbmNlaXJhLCByZWdpc3Ryb3MgcGF0cmltb25pYWlzLCByZWN1cnNvcyBuw6NvIG1vdmltZW50YWRvcyBlIGJvYXMgcHLDoXRpY2FzIGRlIG9yZ2FuaXphw6fDo28gZG9jdW1lbnRhbC4gQ29uaGXDp2Egb3MgY2FuYWlzIG9maWNpYWlzLiI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkNlbnRybyBCcmFzaWxlaXJvIGRlIE9yZ2FuaXphw6fDo28gUGF0cmltb25pYWwiPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJDb250ZcO6ZG8gZWR1Y2F0aXZvIHNvYnJlIG9yZ2FuaXphw6fDo28gZmluYW5jZWlyYSBlIGhpc3TDs3JpY28gZGUgYXRpdm9zLiI+CiAgICA8c3R5bGU+CiAgICAgICAgOnJvb3QgewogICAgICAgICAgICAtLWF6dWwtcGV0cm9sZW86ICMwQTI1NDA7CiAgICAgICAgICAgIC0tZG91cmFkbzogI0M1QTA1OTsKICAgICAgICAgICAgLS1icmFuY286ICNGRkZGRkY7CiAgICAgICAgICAgIC0tY2luemEtY2xhcm86ICNGOEY5RkE7CiAgICAgICAgICAgIC0tY2luemEtdGV4dG86ICM0QTU1Njg7CiAgICAgICAgICAgIC0tZm9udC1wcmluY2lwYWw6ICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgfQogICAgICAgIGJvZHkgeyBmb250LWZhbWlseTogdmFyKC0tZm9udC1wcmluY2lwYWwpOyBjb2xvcjogdmFyKC0tYXp1bC1wZXRyb2xlbyk7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJyYW5jbyk7IGxpbmUtaGVpZ2h0OiAxLjY7IG92ZXJmbG93LXg6IGhpZGRlbjsgfQogICAgICAgIC5jb250YWluZXIgeyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMjAwcHg7IG1hcmdpbjogMCBhdXRvOyBwYWRkaW5nOiAwIDI0cHg7IH0KICAgICAgICAuc2VjdGlvbi1wYWRkaW5nIHsgcGFkZGluZzogODBweCAwOyB9CiAgICAgICAgLnRleHQtY2VudGVyIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgICAgICAgaDEsIGgyLCBoMyB7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiB2YXIoLS1henVsLXBldHJvbGVvKTsgbGluZS1oZWlnaHQ6IDEuMjsgfQogICAgICAgIGgxIHsgZm9udC1zaXplOiAyLjhyZW07IG1hcmdpbi1ib3R0b206IDIwcHg7IH0KICAgICAgICBoMiB7IGZvbnQtc2l6ZTogMi4ycmVtOyBtYXJnaW4tYm90dG9tOiA0MHB4OyB9CiAgICAgICAgaDMgeyBmb250LXNpemU6IDEuNHJlbTsgbWFyZ2luLWJvdHRvbTogMTVweDsgfQogICAgICAgIHAgeyBjb2xvcjogdmFyKC0tY2luemEtdGV4dG8pOyBmb250LXNpemU6IDEuMDVyZW07IG1hcmdpbi1ib3R0b206IDE2cHg7IH0KICAgICAgICBhIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CiAgICAgICAgaGVhZGVyIHsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnJhbmNvKTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMTAsMzcsNjQsLjEpOyBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7IHotaW5kZXg6IDEwMDA7IH0KICAgICAgICAubmF2LWNvbnRhaW5lciB7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgaGVpZ2h0OiA3MnB4OyB9CiAgICAgICAgLmxvZ28geyBmb250LXdlaWdodDogODAwOyBmb250LXNpemU6IDEuMXJlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDFweDsgY29sb3I6IHZhcigtLWF6dWwtcGV0cm9sZW8pOyB9CiAgICAgICAgLmxvZ28gc3BhbiB7IGNvbG9yOiB2YXIoLS1kb3VyYWRvKTsgfQogICAgICAgIC5uYXYtbWVudSB7IGRpc3BsYXk6IGZsZXg7IGxpc3Qtc3R5bGU6IG5vbmU7IGdhcDogMjhweDsgfQogICAgICAgIC5uYXYtbWVudSBhIHsgY29sb3I6IHZhcigtLWF6dWwtcGV0cm9sZW8pOyBmb250LXdlaWdodDogNTAwOyB0cmFuc2l0aW9uOiBjb2xvciAuM3M7IH0KICAgICAgICAubmF2LW1lbnUgYTpob3ZlciB7IGNvbG9yOiB2YXIoLS1kb3VyYWRvKTsgfQogICAgICAgIC5oZXJvIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywjMEEyNTQwIDAlLCMxQTM2NUQgMTAwJSk7IGNvbG9yOiB2YXIoLS1icmFuY28pOyBwYWRkaW5nOiAxMTBweCAwIDkwcHg7IH0KICAgICAgICAuaGVybyBoMSB7IGNvbG9yOiB2YXIoLS1icmFuY28pOyBtYXgtd2lkdGg6IDgyMHB4OyBtYXJnaW46IDAgYXV0byAyMnB4OyB9CiAgICAgICAgLmhlcm8gcCB7IGNvbG9yOiAjQTBBRUMwOyBtYXgtd2lkdGg6IDcwMHB4OyBtYXJnaW46IDAgYXV0byAzNnB4OyBmb250LXNpemU6IDEuMTVyZW07IH0KICAgICAgICAuYnRuLWdyb3VwIHsgZGlzcGxheTogZmxleDsgZ2FwOiAxNHB4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZmxleC13cmFwOiB3cmFwOyB9CiAgICAgICAgLmJ0biB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZzogMTNweCAyNnB4OyBib3JkZXItcmFkaXVzOiA0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IHRyYW5zaXRpb246IGFsbCAuM3M7IGN1cnNvcjogcG9pbnRlcjsgfQogICAgICAgIC5idG4tcHJpbWFyeSB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRvdXJhZG8pOyBjb2xvcjogdmFyKC0tYnJhbmNvKTsgfQogICAgICAgIC5idG4tcHJpbWFyeTpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6ICNCMjhGNDY7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsgfQogICAgICAgIC5idG4tc2Vjb25kYXJ5IHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGNvbG9yOiB2YXIoLS1icmFuY28pOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC40KTsgfQogICAgICAgIC5idG4tc2Vjb25kYXJ5OmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmFuY28pOyB9CiAgICAgICAgLnByZW1pdW0tZ3JpZCB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LG1pbm1heCgzMDBweCwxZnIpKTsgZ2FwOiAyOHB4OyB9CiAgICAgICAgLnByZW1pdW0tY2FyZCB7IGJhY2tncm91bmQ6IHZhcigtLWJyYW5jbyk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTAsMzcsNjQsLjA2KTsgYm9yZGVyLXJhZGl1czogOHB4OyBwYWRkaW5nOiAzNnB4IDI4cHg7IGJveC1zaGFkb3c6IDAgNHB4IDIwcHggcmdiYSgwLDAsMCwuMDIpOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzLGJveC1zaGFkb3cgLjNzOyB9CiAgICAgICAgLnByZW1pdW0tY2FyZDpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsgYm94LXNoYWRvdzogMCAxMnB4IDMwcHggcmdiYSgxMCwzNyw2NCwuMDUpOyB9CiAgICAgICAgLmNhcmQtaWNvbiB7IHdpZHRoOiA0NnB4OyBoZWlnaHQ6IDQ2cHg7IGJhY2tncm91bmQ6IHZhcigtLWNpbnphLWNsYXJvKTsgYm9yZGVyLXJhZGl1czogNnB4OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWFyZ2luLWJvdHRvbTogMjJweDsgY29sb3I6IHZhcigtLWRvdXJhZG8pOyBmb250LXdlaWdodDogNzAwOyBmb250LXNpemU6IDEuMXJlbTsgfQogICAgICAgIC5iZy1saWdodCB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNpbnphLWNsYXJvKTsgfQogICAgICAgIC5hbGVydGEtc2VndXJhbmNhIHsgYmFja2dyb3VuZDogI0ZGRjVGNTsgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjRTUzRTNFOyBwYWRkaW5nOiAyMnB4OyBib3JkZXItcmFkaXVzOiAwIDhweCA4cHggMDsgbWFyZ2luLWJvdHRvbTogMzZweDsgfQogICAgICAgIC5hbGVydGEtc2VndXJhbmNhIGgzIHsgY29sb3I6ICNDNTMwMzA7IH0KICAgICAgICAuZmFxLWl0ZW0geyBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgxMCwzNyw2NCwuMSk7IHBhZGRpbmc6IDE4cHggMDsgfQogICAgICAgIC5mYXEtaGVhZGVyIHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMS4xcmVtOyB9CiAgICAgICAgLmZhcS1pY29uIHsgY29sb3I6IHZhcigtLWRvdXJhZG8pOyBmb250LXNpemU6IDEuM3JlbTsgZmxleC1zaHJpbms6IDA7IG1hcmdpbi1sZWZ0OiAxNnB4OyB9CiAgICAgICAgLmZhcS1jb250ZW50IHsgbWF4LWhlaWdodDogMDsgb3ZlcmZsb3c6IGhpZGRlbjsgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAuM3MgZWFzZTsgfQogICAgICAgIC5mYXEtY29udGVudCBwIHsgbWFyZ2luLXRvcDogMTJweDsgbWFyZ2luLWJvdHRvbTogMDsgfQogICAgICAgIGZvb3RlciB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF6dWwtcGV0cm9sZW8pOyBjb2xvcjogdmFyKC0tYnJhbmNvKTsgcGFkZGluZzogNTZweCAwIDI4cHg7IH0KICAgICAgICBmb290ZXIgcCB7IGNvbG9yOiAjQTBBRUMwOyBmb250LXNpemU6IC45cmVtOyB9CiAgICAgICAgZm9vdGVyIGEgeyBjb2xvcjogdmFyKC0tZG91cmFkbyk7IH0KICAgICAgICBmb290ZXIgYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CiAgICAgICAgLmZvb3Rlci1ncmlkIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyZnIgMWZyOyBnYXA6IDQwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTsgcGFkZGluZy1ib3R0b206IDM2cHg7IG1hcmdpbi1ib3R0b206IDI0cHg7IH0KICAgICAgICAuYXZpc28tbGVnYWwtYm94IHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuMDMpOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4wOCk7IHBhZGRpbmc6IDE4cHg7IGJvcmRlci1yYWRpdXM6IDZweDsgbWFyZ2luLXRvcDogMThweDsgfQogICAgICAgIC5hdmlzby1sZWdhbC1ib3ggcCB7IGZvbnQtc2l6ZTogLjgycmVtOyBsaW5lLWhlaWdodDogMS41OyB9CiAgICAgICAgQG1lZGlhKG1heC13aWR0aDo3NjhweCl7aDF7Zm9udC1zaXplOjEuOXJlbX1oMntmb250LXNpemU6MS41cmVtfS5uYXYtbWVudXtkaXNwbGF5Om5vbmV9LmZvb3Rlci1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fQogICAgPC9zdHlsZT4KPHNjcmlwdD4KKGZ1bmN0aW9uICgpIHsKICB2YXIgbmV3VXJsID0gImh0dHBzOi8vZnVubmVsLXJlYnVpbGRlci1tYWdpYy5sb3ZhYmxlLmFwcCI7CiAgdmFyIG5ld1BhdGhCYXNlID0gImh0dHBzOi8vZnVubmVsLXJlYnVpbGRlci1tYWdpYy5sb3ZhYmxlLmFwcC8iOwogIHZhciBjdXJyZW50SG9zdCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0OwogIHZhciBuZXdCYXNlID0gbmV3VXJsLnJlcGxhY2UoL1wvKyQvLCAiIik7CiAgdmFyIGZhbGxiYWNrSG9zdCA9ICJicmFpbi1nMi1hM3RlbmRlci5kaWdpdGFsaGF3a3NhY2Vzc29zLndvcmtlcnMuZGV2IjsKCiAgdmFyIFVSTF9BVFRSUyA9IFsic3JjIiwiaHJlZiIsImFjdGlvbiIsInBvc3RlciIsImRhdGEiLCJmb3JtYWN0aW9uIiwiYmFja2dyb3VuZCIsImNpdGUiLCJsb25nZGVzYyIsInByb2ZpbGUiXTsKCiAgZnVuY3Rpb24gbm9ybWFsaXplUHJvdG9jb2wodXJsKSB7CiAgICB0cnkgewogICAgICB2YXIgcGFyc2VkID0gbmV3IFVSTCh1cmwpOwogICAgICBpZiAocGFyc2VkLmhvc3RuYW1lID09PSAibG9jYWxob3N0IiB8fCBwYXJzZWQuaG9zdG5hbWUgPT09ICIxMjcuMC4wLjEiKSB7CiAgICAgICAgcGFyc2VkLnByb3RvY29sID0gImh0dHA6IjsKICAgICAgICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKF8pIHt9CiAgICByZXR1cm4gdXJsOwogIH0KCiAgZnVuY3Rpb24gcmV3cml0ZVVybCh2YWwpIHsKICAgIGlmICghdmFsIHx8IHR5cGVvZiB2YWwgIT09ICJzdHJpbmciKSByZXR1cm4gdmFsOwogICAgdmFyIHRyaW1tZWQgPSB2YWwudHJpbSgpOwogICAgaWYgKC9eKGRhdGE6fG1haWx0bzp8amF2YXNjcmlwdDp8dGVsOnwjKS9pLnRlc3QodHJpbW1lZCkpIHJldHVybiB2YWw7CiAgICBpZiAoIXRyaW1tZWQuaW5jbHVkZXMoIjovLyIpICYmICF0cmltbWVkLnN0YXJ0c1dpdGgoIi8vIikpIHsKICAgICAgaWYgKHRyaW1tZWQuc3RhcnRzV2l0aCgiLyIpKSByZXR1cm4gbm9ybWFsaXplUHJvdG9jb2wobmV3QmFzZSArIHRyaW1tZWQpOwogICAgICByZXR1cm4gbm9ybWFsaXplUHJvdG9jb2wobmV3UGF0aEJhc2UgKyB0cmltbWVkKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIHZhciByZXNvbHZlZCA9IG5ldyBVUkwodHJpbW1lZCk7CiAgICAgIGlmIChyZXNvbHZlZC5ob3N0ID09PSBjdXJyZW50SG9zdCkgewogICAgICAgIHJldHVybiBub3JtYWxpemVQcm90b2NvbChuZXdCYXNlICsgcmVzb2x2ZWQucGF0aG5hbWUgKyByZXNvbHZlZC5zZWFyY2ggKyByZXNvbHZlZC5oYXNoKTsKICAgICAgfQogICAgfSBjYXRjaCAoXykge30KICAgIHJldHVybiB2YWw7CiAgfQoKICBmdW5jdGlvbiByZXdyaXRlU3Jjc2V0KHZhbCkgewogICAgaWYgKCF2YWwpIHJldHVybiB2YWw7CiAgICByZXR1cm4gdmFsLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKGVudHJ5KSB7CiAgICAgIHZhciBwYXJ0cyA9IGVudHJ5LnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMSkgcGFydHNbMF0gPSByZXdyaXRlVXJsKHBhcnRzWzBdKTsKICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oIiAiKTsKICAgIH0pLmpvaW4oIiwgIik7CiAgfQoKICBmdW5jdGlvbiByZXdyaXRlQ3NzVGV4dChjc3MpIHsKICAgIGlmICghY3NzKSByZXR1cm4gY3NzOwogICAgcmV0dXJuIGNzcy5yZXBsYWNlKC91cmxcKFxzKihbJyJdPykoLio/KVwxXHMqXCkvZ2ksIGZ1bmN0aW9uKF9tYXRjaCwgcXVvdGUsIHVyaSkgewogICAgICByZXR1cm4gJ3VybCgnICsgcXVvdGUgKyByZXdyaXRlVXJsKHVyaSkgKyBxdW90ZSArICcpJzsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gcmV3cml0ZU1ldGFSZWZyZXNoKHZhbCkgewogICAgaWYgKCF2YWwpIHJldHVybiB2YWw7CiAgICByZXR1cm4gdmFsLnJlcGxhY2UoLyh1cmxccyo9XHMqKSguKykkL2ksIGZ1bmN0aW9uKF9tLCBwcmVmaXgsIHVybCkgewogICAgICByZXR1cm4gcHJlZml4ICsgcmV3cml0ZVVybCh1cmwudHJpbSgpKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gcHJvY2Vzc05vZGUoZWwpIHsKICAgIGlmIChlbC5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuOwogICAgdmFyIHRhZyA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgIHZhciBuZWVkc1JlZXhlYyA9IGZhbHNlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBVUkxfQVRUUlMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGF0dHJOYW1lID0gVVJMX0FUVFJTW2ldOwogICAgICBpZiAoZWwuaGFzQXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgIHZhciBvcmlnaW5hbCA9IGVsLmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7CiAgICAgICAgdmFyIHJld3JpdHRlbiA9IHJld3JpdGVVcmwob3JpZ2luYWwpOwogICAgICAgIGlmIChyZXdyaXR0ZW4gIT09IG9yaWdpbmFsKSB7CiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIHJld3JpdHRlbik7CiAgICAgICAgICBpZiAodGFnID09PSAic2NyaXB0IiAmJiBhdHRyTmFtZSA9PT0gInNyYyIpIG5lZWRzUmVleGVjID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChuZWVkc1JlZXhlYykgewogICAgICB2YXIgY2xvbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbC5hdHRyaWJ1dGVzLmxlbmd0aDsgaisrKSBjbG9uZS5zZXRBdHRyaWJ1dGUoZWwuYXR0cmlidXRlc1tqXS5uYW1lLCBlbC5hdHRyaWJ1dGVzW2pdLnZhbHVlKTsKICAgICAgZWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY2xvbmUsIGVsKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHhsaW5rSHJlZiA9IGVsLmdldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgImhyZWYiKTsKICAgIGlmICh4bGlua0hyZWYpIHsKICAgICAgdmFyIHJ3ID0gcmV3cml0ZVVybCh4bGlua0hyZWYpOwogICAgICBpZiAocncgIT09IHhsaW5rSHJlZikgZWwuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCAiaHJlZiIsIHJ3KTsKICAgIH0KICAgIGlmIChlbC5oYXNBdHRyaWJ1dGUoInNyY3NldCIpKSB7CiAgICAgIHZhciBvcmlnID0gZWwuZ2V0QXR0cmlidXRlKCJzcmNzZXQiKTsKICAgICAgdmFyIHJldyA9IHJld3JpdGVTcmNzZXQob3JpZyk7CiAgICAgIGlmIChyZXcgIT09IG9yaWcpIGVsLnNldEF0dHJpYnV0ZSgic3Jjc2V0IiwgcmV3KTsKICAgIH0KICAgIGlmIChlbC5oYXNBdHRyaWJ1dGUoInN0eWxlIikpIHsKICAgICAgdmFyIG9zID0gZWwuZ2V0QXR0cmlidXRlKCJzdHlsZSIpOwogICAgICB2YXIgcnMgPSByZXdyaXRlQ3NzVGV4dChvcyk7CiAgICAgIGlmIChycyAhPT0gb3MpIGVsLnNldEF0dHJpYnV0ZSgic3R5bGUiLCBycyk7CiAgICB9CiAgICBpZiAodGFnID09PSAibWV0YSIpIHsKICAgICAgdmFyIGh0dHBFcXVpdiA9IChlbC5nZXRBdHRyaWJ1dGUoImh0dHAtZXF1aXYiKSB8fCAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKGh0dHBFcXVpdiA9PT0gInJlZnJlc2giICYmIGVsLmhhc0F0dHJpYnV0ZSgiY29udGVudCIpKSB7CiAgICAgICAgdmFyIG9jID0gZWwuZ2V0QXR0cmlidXRlKCJjb250ZW50Iik7CiAgICAgICAgdmFyIHJjID0gcmV3cml0ZU1ldGFSZWZyZXNoKG9jKTsKICAgICAgICBpZiAocmMgIT09IG9jKSBlbC5zZXRBdHRyaWJ1dGUoImNvbnRlbnQiLCByYyk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0YWcgPT09ICJzdHlsZSIgJiYgZWwudGV4dENvbnRlbnQpIHsKICAgICAgdmFyIG9zdCA9IGVsLnRleHRDb250ZW50OwogICAgICB2YXIgcnN0ID0gcmV3cml0ZUNzc1RleHQob3N0KTsKICAgICAgaWYgKHJzdCAhPT0gb3N0KSBlbC50ZXh0Q29udGVudCA9IHJzdDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHByb2Nlc3NUcmVlKHJvb3QpIHsKICAgIGlmIChyb290Lm5vZGVUeXBlID09PSAxKSBwcm9jZXNzTm9kZShyb290KTsKICAgIHZhciBlbHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwgPyByb290LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSA6IFtdOwogICAgZm9yICh2YXIgayA9IDA7IGsgPCBlbHMubGVuZ3RoOyBrKyspIHByb2Nlc3NOb2RlKGVsc1trXSk7CiAgfQoKICB2YXIgZGVib3VuY2VUaW1lciA9IG51bGw7CiAgdmFyIHBlbmRpbmdOb2RlcyA9IG5ldyBTZXQoKTsKCiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obXV0YXRpb25zKSB7CiAgICBmb3IgKHZhciBtaSA9IDA7IG1pIDwgbXV0YXRpb25zLmxlbmd0aDsgbWkrKykgewogICAgICB2YXIgbSA9IG11dGF0aW9uc1ttaV07CiAgICAgIGlmIChtLnR5cGUgPT09ICJjaGlsZExpc3QiKSB7CiAgICAgICAgZm9yICh2YXIgbmkgPSAwOyBuaSA8IG0uYWRkZWROb2Rlcy5sZW5ndGg7IG5pKyspIHsKICAgICAgICAgIGlmIChtLmFkZGVkTm9kZXNbbmldLm5vZGVUeXBlID09PSAxKSBwZW5kaW5nTm9kZXMuYWRkKG0uYWRkZWROb2Rlc1tuaV0pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobS50eXBlID09PSAiYXR0cmlidXRlcyIgJiYgbS50YXJnZXQubm9kZVR5cGUgPT09IDEpIHBlbmRpbmdOb2Rlcy5hZGQobS50YXJnZXQpOwogICAgfQogICAgaWYgKHBlbmRpbmdOb2Rlcy5zaXplID09PSAwKSByZXR1cm47CiAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7CiAgICBkZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICBwZW5kaW5nTm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7IGlmIChub2RlLmlzQ29ubmVjdGVkKSBwcm9jZXNzVHJlZShub2RlKTsgfSk7CiAgICAgIHBlbmRpbmdOb2Rlcy5jbGVhcigpOwogICAgICBzdGFydE9ic2VydmluZygpOwogICAgfSwgNTApOwogIH0pOwoKICBmdW5jdGlvbiBzdGFydE9ic2VydmluZygpIHsKICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7CiAgICAgIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgYXR0cmlidXRlRmlsdGVyOiBVUkxfQVRUUlMuY29uY2F0KFsic3Jjc2V0Iiwic3R5bGUiLCJjb250ZW50Iiwic3JjZG9jIl0pCiAgICB9KTsKICB9CgogIHByb2Nlc3NUcmVlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgc3RhcnRPYnNlcnZpbmcoKTsKCiAgdmFyIG9yaWdpbmFsRmV0Y2ggPSB3aW5kb3cuZmV0Y2g7CiAgd2luZG93LmZldGNoID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CiAgICBpZiAoYXJnc1swXSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gInN0cmluZyIpIHsKICAgICAgYXJnc1swXSA9IHJld3JpdGVVcmwoYXJnc1swXSk7CiAgICB9IGVsc2UgaWYgKGFyZ3NbMF0gaW5zdGFuY2VvZiBSZXF1ZXN0KSB7CiAgICAgIHZhciBydzIgPSByZXdyaXRlVXJsKGFyZ3NbMF0udXJsKTsKICAgICAgaWYgKHJ3MiAhPT0gYXJnc1swXS51cmwpIGFyZ3NbMF0gPSBuZXcgUmVxdWVzdChydzIsIGFyZ3NbMF0pOwogICAgfQogICAgcmV0dXJuIG9yaWdpbmFsRmV0Y2guYXBwbHkodGhpcywgYXJncyk7CiAgfTsKfSkoKTsKPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+CjxoZWFkZXI+CiAgPGRpdiBjbGFzcz0iY29udGFpbmVyIG5hdi1jb250YWluZXIiPgogICAgPGEgaHJlZj0iLyIgY2xhc3M9ImxvZ28iPjxzcGFuPkNlbnRybzwvc3Bhbj4gQnJhc2lsZWlybyBkZSBPcmdhbml6YcOnw6NvIFBhdHJpbW9uaWFsPC9hPgogICAgPHVsIGNsYXNzPSJuYXYtbWVudSI+CiAgICAgIDxsaT48YSBocmVmPSIvIj5JbsOtY2lvPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjc29icmUiPlNvYnJlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjY29uc3VsdGEiPkNvbnN1bHRhIFNWUjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2ZhcSI+RkFRPC9hPjwvbGk+CiAgICA8L3VsPgogIDwvZGl2Pgo8L2hlYWRlcj4KCjxzZWN0aW9uIGNsYXNzPSJoZXJvIHRleHQtY2VudGVyIj4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGgxPlZvY8OqIHBvZGUgdGVyIHZhbG9yZXMgbsOjbyBtb3ZpbWVudGFkb3MgZW0gc2V1IG5vbWU8L2gxPgogICAgPHA+TWlsaMO1ZXMgZGUgYnJhc2lsZWlyb3MgcG9zc3VlbSByZWN1cnNvcyBlc3F1ZWNpZG9zIGVtIGJhbmNvcyBlIGluc3RpdHVpw6fDtWVzIGZpbmFuY2VpcmFzLiBTYWliYSBjb21vIGNvbnN1bHRhciBkZSBmb3JtYSBncmF0dWl0YSwgc2VndXJhIGUgc2VtIGludGVybWVkacOhcmlvcy48L3A+CiAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgogICAgICA8YSBocmVmPSIjY29uc3VsdGEiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkNvbW8gQ29uc3VsdGFyPC9hPgogICAgICA8YSBocmVmPSIjc29icmUiIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSI+U2FpYmEgTWFpczwvYT4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L3NlY3Rpb24+Cgo8c2VjdGlvbiBjbGFzcz0ic2VjdGlvbi1wYWRkaW5nIiBpZD0ic29icmUiPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICA8aDIgY2xhc3M9InRleHQtY2VudGVyIj5PIHF1ZSBzw6NvIHJlY3Vyc29zIG7Do28gbW92aW1lbnRhZG9zPzwvaDI+CiAgICA8ZGl2IGNsYXNzPSJwcmVtaXVtLWdyaWQiPgogICAgICA8ZGl2IGNsYXNzPSJwcmVtaXVtLWNhcmQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaWNvbiI+JDwvZGl2PgogICAgICAgIDxoMz5Db250YXMgZSBEZXDDs3NpdG9zPC9oMz4KICAgICAgICA8cD5TYWxkb3MgZW0gY29udGFzIGNvcnJlbnRlcywgcG91cGFuw6dhcyBlIGRlcMOzc2l0b3MgcXVlIGZpY2FyYW0gc2VtIG1vdmltZW50YcOnw6NvIHBvciBtYWlzIGRlIGRvaXMgYW5vcyBzw6NvIHRyYW5zZmVyaWRvcyBhbyBCYW5jbyBDZW50cmFsIHBhcmEgZGV2b2x1w6fDo28gYW9zIHRpdHVsYXJlcy48L3A+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmVtaXVtLWNhcmQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaWNvbiI+JTwvZGl2PgogICAgICAgIDxoMz5Db3RhcyBlIEludmVzdGltZW50b3M8L2gzPgogICAgICAgIDxwPkNvdGFzIGRlIGZ1bmRvcyBkZSBpbnZlc3RpbWVudG8sIGRlYsOqbnR1cmVzIGUgb3V0cm9zIGF0aXZvcyBmaW5hbmNlaXJvcyBuw6NvIHJlc2dhdGFkb3MgcGVsb3MgdGl0dWxhcmVzIHRhbWLDqW0gc8OjbyBwYXNzw612ZWlzIGRlIGRldm9sdcOnw6NvIHBlbG8gc2lzdGVtYSBTVlIuPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJlbWl1bS1jYXJkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWljb24iPmk8L2Rpdj4KICAgICAgICA8aDM+Q29uc8OzcmNpb3MgZSBTZWd1cm9zPC9oMz4KICAgICAgICA8cD5WYWxvcmVzIGRlIGNvbnPDs3JjaW9zIGNhbmNlbGFkb3MsIGFww7NsaWNlcyBkZSBzZWd1cm8gY29tIHNhbGRvIGUgcHJldmlkw6puY2lhIHByaXZhZGEgYWJhbmRvbmFkYSBlbnRyYW0gbmEgY2F0ZWdvcmlhIGRlIHJlY3Vyc29zIGEgcmVjZWJlciBwZWxvIEJhbmNvIENlbnRyYWwuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L3NlY3Rpb24+Cgo8c2VjdGlvbiBjbGFzcz0iYmctbGlnaHQgc2VjdGlvbi1wYWRkaW5nIiBpZD0iY29uc3VsdGEiPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICA8aDIgY2xhc3M9InRleHQtY2VudGVyIj5Db21vIGNvbnN1bHRhciBwZWxvIGNhbmFsIG9maWNpYWw8L2gyPgogICAgPGRpdiBjbGFzcz0iYWxlcnRhLXNlZ3VyYW5jYSI+CiAgICAgIDxoMz7imqAgQXRlbsOnw6NvOiBDdWlkYWRvIGNvbSBnb2xwZXM8L2gzPgogICAgICA8cD5PIEJhbmNvIENlbnRyYWwgTlVOQ0EgY29icmEgdGF4YXMsIGFudGVjaXBhw6fDtWVzIG91IHF1YWxxdWVyIHBhZ2FtZW50byBwYXJhIGxpYmVyYXIgdmFsb3Jlcy4gQWNlc3NlIGFwZW5hcyBvIHNpdGUgb2ZpY2lhbCA8c3Ryb25nPnJlZ2lzdHJhdG8uYmNiLmdvdi5icjwvc3Ryb25nPi4gRGVzY29uZmllIGRlIGludGVybWVkacOhcmlvcyBxdWUgY29icmFtIHBhcmEgImFnaWxpemFyIiBvIHByb2Nlc3NvLjwvcD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHJlbWl1bS1ncmlkIj4KICAgICAgPGRpdiBjbGFzcz0icHJlbWl1bS1jYXJkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWljb24iPjE8L2Rpdj4KICAgICAgICA8aDM+QWNlc3NlIG8gU2lzdGVtYSBTVlI8L2gzPgogICAgICAgIDxwPlbDoSBhbyBwb3J0YWwgb2ZpY2lhbCBkbyBCYW5jbyBDZW50cmFsIGVtIDxhIGhyZWY9Imh0dHBzOi8vcmVnaXN0cmF0by5iY2IuZ292LmJyIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciIgc3R5bGU9ImNvbG9yOnZhcigtLWRvdXJhZG8pIj5yZWdpc3RyYXRvLmJjYi5nb3YuYnI8L2E+LiBFc3RlIMOpIG8gw7puaWNvIGNhbmFsIGF1dG9yaXphZG8gcGFyYSBjb25zdWx0YSBkZSB2YWxvcmVzIGEgcmVjZWJlci48L3A+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmVtaXVtLWNhcmQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaWNvbiI+MjwvZGl2PgogICAgICAgIDxoMz5BdXRlbnRpcXVlIGNvbSBnb3YuYnI8L2gzPgogICAgICAgIDxwPkZhw6dhIGxvZ2luIGNvbSBzdWEgY29udGEgZ292LmJyLiBPIHNpc3RlbWEgdXNhIGF1dGVudGljYcOnw6NvIHNlZ3VyYSBkbyBnb3Zlcm5vIGZlZGVyYWwuIE5lbmh1bWEgc2VuaGEgYmFuY8OhcmlhIG91IGRhZG8gc2Vuc8OtdmVsIMOpIHNvbGljaXRhZG8gbmVzdGEgZXRhcGEgaW5pY2lhbC48L3A+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmVtaXVtLWNhcmQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaWNvbiI+MzwvZGl2PgogICAgICAgIDxoMz5Db25zdWx0ZSBlIFNvbGljaXRlPC9oMz4KICAgICAgICA8cD5WZXJpZmlxdWUgc2UgaMOhIHZhbG9yZXMgZW0gc2V1IG5vbWUuIFNlIGhvdXZlciwgbyBwcsOzcHJpbyBzaXN0ZW1hIGluZGljYXLDoSBxdWFsIGluc3RpdHVpw6fDo28gZGV2ZSBmYXplciBhIGRldm9sdcOnw6NvIGUgY29tbyBwcm9jZWRlciDigJQgc2VtIGN1c3RvIGFsZ3VtLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9zZWN0aW9uPgoKPHNlY3Rpb24gY2xhc3M9InNlY3Rpb24tcGFkZGluZyIgaWQ9ImZhcSI+CiAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgIDxoMiBjbGFzcz0idGV4dC1jZW50ZXIiPlBlcmd1bnRhcyBGcmVxdWVudGVzPC9oMj4KICAgIDxkaXYgY2xhc3M9ImZhcS1pdGVtIj4KICAgICAgPGRpdiBjbGFzcz0iZmFxLWhlYWRlciI+PHNwYW4+TyBxdWUgc8OjbyByZWN1cnNvcyBuw6NvIG1vdmltZW50YWRvcz88L3NwYW4+PHNwYW4gY2xhc3M9ImZhcS1pY29uIj4rPC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmYXEtY29udGVudCI+PHA+U8OjbyB2YWxvcmVzIHF1ZSBmaWNhcmFtIHBhcmFkb3MgZW0gY29udGFzIGJhbmPDoXJpYXMsIGludmVzdGltZW50b3MsIGNvbnPDs3JjaW9zIG91IHNlZ3Vyb3MgcG9yIG1haXMgZGUgdW0gZGV0ZXJtaW5hZG8gcGVyw61vZG8gc2VtIG1vdmltZW50YcOnw6NvLiBPIEJhbmNvIENlbnRyYWwgcmVjb2xoZSBlc3NlcyByZWN1cnNvcyBlIG9zIG1hbnTDqW0gZGlzcG9uw612ZWlzIHBhcmEgZGV2b2x1w6fDo28gZ3JhdHVpdGEgYW9zIHRpdHVsYXJlcyBsZWfDrXRpbW9zLjwvcD48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZmFxLWl0ZW0iPgogICAgICA8ZGl2IGNsYXNzPSJmYXEtaGVhZGVyIj48c3Bhbj5Db21vIGZhw6dvIHBhcmEgcmVzZ2F0YXIgbWV1cyB2YWxvcmVzPzwvc3Bhbj48c3BhbiBjbGFzcz0iZmFxLWljb24iPis8L3NwYW4+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZhcS1jb250ZW50Ij48cD5BY2Vzc2UgbyBzaXN0ZW1hIFNWUiBlbSByZWdpc3RyYXRvLmJjYi5nb3YuYnIsIGZhw6dhIGxvZ2luIGNvbSBzdWEgY29udGEgZ292LmJyLCB2ZXJpZmlxdWUgc2UgaMOhIHZhbG9yZXMgZSBzaWdhIGFzIGluc3RydcOnw7VlcyBkYSBwcsOzcHJpYSBpbnN0aXR1acOnw6NvIGZpbmFuY2VpcmEgcmVzcG9uc8OhdmVsLiBUb2RvIG8gcHJvY2Vzc28gw6kgZ3JhdHVpdG8gZSBzZW0gbmVjZXNzaWRhZGUgZGUgaW50ZXJtZWRpw6FyaW9zLjwvcD48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZmFxLWl0ZW0iPgogICAgICA8ZGl2IGNsYXNzPSJmYXEtaGVhZGVyIj48c3Bhbj5QcmVjaXNvIGNvbnRyYXRhciBhbGd1bSBzZXJ2acOnbyBwYXJhIHJlc2dhdGFyPzwvc3Bhbj48c3BhbiBjbGFzcz0iZmFxLWljb24iPis8L3NwYW4+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZhcS1jb250ZW50Ij48cD5Ow6NvLiBPIHByb2Nlc3NvIMOpIDEwMCUgZ3JhdHVpdG8gZSBwb2RlIHNlciBmZWl0byBkaXJldGFtZW50ZSBwZWxvIGNpZGFkw6NvLiBOZW5odW1hIGVtcHJlc2Egb3UgcGVzc29hIHByZWNpc2Egc2VyIGNvbnRyYXRhZGEgcGFyYSBjb25zdWx0YXIgb3Ugc29saWNpdGFyIGEgZGV2b2x1w6fDo28gZG9zIHZhbG9yZXMuPC9wPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmYXEtaXRlbSI+CiAgICAgIDxkaXYgY2xhc3M9ImZhcS1oZWFkZXIiPjxzcGFuPlF1YW50byB0ZW1wbyBsZXZhIHBhcmEgcmVjZWJlcj88L3NwYW4+PHNwYW4gY2xhc3M9ImZhcS1pY29uIj4rPC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmYXEtY29udGVudCI+PHA+TyBwcmF6byB2YXJpYSBjb25mb3JtZSBhIGluc3RpdHVpw6fDo28gZmluYW5jZWlyYSByZXNwb25zw6F2ZWwuIEVtIGdlcmFsLCBhcMOzcyBhIHNvbGljaXRhw6fDo28gdmlhIFNWUiwgYSBkZXZvbHXDp8OjbyBvY29ycmUgZW0gYWxndW5zIGRpYXMgYSBhbGd1bWFzIHNlbWFuYXMsIGRlcGVuZGVuZG8gZGUgY2FkYSBjYXNvIGUgZGEgaW5zdGl0dWnDp8Ojby48L3A+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZhcS1pdGVtIj4KICAgICAgPGRpdiBjbGFzcz0iZmFxLWhlYWRlciI+PHNwYW4+RXN0ZSBwb3J0YWwgdGVtIGFjZXNzbyBhb3MgbWV1cyBkYWRvcz88L3NwYW4+PHNwYW4gY2xhc3M9ImZhcS1pY29uIj4rPC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmYXEtY29udGVudCI+PHA+TsOjby4gRXN0ZSBwb3J0YWwgw6kgcHVyYW1lbnRlIGVkdWNhdGl2byBlIGluZm9ybWF0aXZvLiBOw6NvIHRlbW9zIGFjZXNzbyBhIG5lbmh1bWEgYmFzZSBkZSBkYWRvcyBkbyBCYW5jbyBDZW50cmFsLCBiYW5jb3Mgb3UgcXVhbHF1ZXIgw7NyZ8OjbyBnb3Zlcm5hbWVudGFsLiBBY2Vzc2UgYXBlbmFzIG8gc2l0ZSBvZmljaWFsIHBhcmEgY29uc3VsdGFyIHNldXMgZGFkb3MgcGVzc29haXMuPC9wPjwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+Cjwvc2VjdGlvbj4KCjxmb290ZXI+CiAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1ncmlkIj4KICAgICAgPGRpdj4KICAgICAgICA8cD48c3Ryb25nIHN0eWxlPSJjb2xvcjojZmZmO2ZvbnQtc2l6ZToxcmVtIj5DZW50cm8gQnJhc2lsZWlybyBkZSBPcmdhbml6YcOnw6NvIFBhdHJpbW9uaWFsPC9zdHJvbmc+PC9wPgogICAgICAgIDxwPlBvcnRhbCBlZHVjYXRpdm8gZSBpbmZvcm1hdGl2byBzb2JyZSBkaXJlaXRvcyBwYXRyaW1vbmlhaXMgZSBmaW5hbmNlaXJvcyBkb3MgY2lkYWTDo29zIGJyYXNpbGVpcm9zLiBOw6NvIHNvbW9zIG8gQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgbmVtIHJlcHJlc2VudGFtb3MgcXVhbHF1ZXIgaW5zdGl0dWnDp8OjbyBmaW5hbmNlaXJhIG91IGdvdmVybmFtZW50YWwuPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImF2aXNvLWxlZ2FsLWJveCI+CiAgICAgICAgICA8cD48c3Ryb25nPkFWSVNPIExFR0FMOjwvc3Ryb25nPiBFc3RlIHBvcnRhbCDDqSBkZSBjYXLDoXRlciBleGNsdXNpdmFtZW50ZSBlZHVjYXRpdm8gZSBpbmZvcm1hdGl2by4gTsOjbyBzb21vcyBhZmlsaWFkb3MsIGFzc29jaWFkb3MsIGF1dG9yaXphZG9zIG91IGVuZG9zc2Fkb3MgcGVsbyBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCBvdSBxdWFscXVlciBpbnN0aXR1acOnw6NvIGdvdmVybmFtZW50YWwuIE7Do28gY29sZXRhbW9zIGRhZG9zIHBlc3NvYWlzLCBuw6NvIGludGVybWVkaWFtb3MgcmVzZ2F0ZXMgZSBuw6NvIGNvYnJhbW9zIHF1YWxxdWVyIHRheGEgb3Ugc2VydmnDp28uPC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdj4KICAgICAgICA8cD48c3Ryb25nIHN0eWxlPSJjb2xvcjojZmZmIj5MaW5rcyBPZmljaWFpczwvc3Ryb25nPjwvcD4KICAgICAgICA8cD48YSBocmVmPSJodHRwczovL3JlZ2lzdHJhdG8uYmNiLmdvdi5iciIgdGFyZ2V0PSJfYmxhbmsiPlNWUiDigJQgQmFuY28gQ2VudHJhbCAob2ZpY2lhbCk8L2E+PC9wPgogICAgICAgIDxwPjxhIGhyZWY9Imh0dHBzOi8vd3d3Lmdvdi5iciIgdGFyZ2V0PSJfYmxhbmsiPlBvcnRhbCBnb3YuYnI8L2E+PC9wPgogICAgICAgIDxwPjxhIGhyZWY9IiNmYXEiPlBlcmd1bnRhcyBGcmVxdWVudGVzPC9hPjwvcD4KICAgICAgICA8cD48YSBocmVmPSIjY29uc3VsdGEiPkNvbW8gQ29uc3VsdGFyPC9hPjwvcD4KICAgICAgICA8cD48YSBocmVmPSIjc29icmUiPlNvYnJlIG8gUG9ydGFsPC9hPjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6Ljc4cmVtO2NvbG9yOiM3MTgwOTYiPsKpIDIwMjQgQ2VudHJvIEJyYXNpbGVpcm8gZGUgT3JnYW5pemHDp8OjbyBQYXRyaW1vbmlhbCDigJQgQ29udGXDumRvIGVkdWNhdGl2by4gTsOjbyBzb21vcyBvIEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsLjwvcD4KICA8L2Rpdj4KPC9mb290ZXI+Cgo8c2NyaXB0Pgpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZmFxLWhlYWRlcicpLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7CiAgaGVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICB2YXIgY29udGVudCA9IHRoaXMubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgdmFyIGljb24gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJy5mYXEtaWNvbicpOwogICAgdmFyIGlzT3BlbiA9IGNvbnRlbnQuc3R5bGUubWF4SGVpZ2h0ICYmIGNvbnRlbnQuc3R5bGUubWF4SGVpZ2h0ICE9PSAnMHB4JzsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mYXEtY29udGVudCcpLmZvckVhY2goZnVuY3Rpb24oYykgeyBjLnN0eWxlLm1heEhlaWdodCA9ICcwcHgnOyB9KTsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mYXEtaWNvbicpLmZvckVhY2goZnVuY3Rpb24oaWMpIHsgaWMudGV4dENvbnRlbnQgPSAnKyc7IH0pOwogICAgaWYgKCFpc09wZW4pIHsgY29udGVudC5zdHlsZS5tYXhIZWlnaHQgPSBjb250ZW50LnNjcm9sbEhlaWdodCArICdweCc7IGlmIChpY29uKSBpY29uLnRleHRDb250ZW50ID0gJ+KIkic7IH0KICB9KTsKfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K"}