{"data":"77u/PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJwdC1CUiI+DQo8aGVhZD4NCjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4NCjx0aXRsZT5XaGF0c0FwcCAtIE1lc3F1aXRhIChRdWluYSk8L3RpdGxlPg0KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4NCjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEA0MDA7NTAwOzYwMCZkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI+DQo8c3R5bGU+DQogIDpyb290IHsNCiAgICAtLXdhLWdyZWVuLWRhcms6ICMwNzVlNTQ7DQogICAgLS13YS1ncmVlbjogIzEyOGM3ZTsNCiAgICAtLXdhLWdyZWVuLWxpZ2h0OiAjMjVkMzY2Ow0KICAgIC0td2EtZ3JlZW4taGVhZGVyOiAjMDc1ZTU0Ow0KICAgIC0td2EtYmc6ICNlNWRkZDU7DQogICAgLS13YS1iZy1wYXR0ZXJuOiAjZDlkMmM1Ow0KICAgIC0td2EtaW5wdXQtYmc6ICNmZmZmZmY7DQogICAgLS13YS1idWJibGUtb3V0OiAjZGNmOGM2Ow0KICAgIC0td2EtYnViYmxlLWluOiAjZmZmZmZmOw0KICAgIC0td2EtdGV4dDogIzMwMzAzMDsNCiAgICAtLXdhLXRleHQtbGlnaHQ6ICM2Njc3ODE7DQogICAgLS13YS10aW1lOiAjNjY3NzgxOw0KICAgIC0td2EtZW5jcnlwdC1iZzogI2ZkZjRjNTsNCiAgICAtLXdhLWVuY3J5cHQtdGV4dDogIzU0NjU2ZjsNCiAgICAtLXdhLWhlYWRlci1pY29uOiAjYTBiNGJjOw0KICAgIC0td2EtbWljLWJnOiAjMDBhODg0Ow0KICAgIC0td2EtYmx1ZS10aWNrOiAjNTNiZGViOw0KICB9DQoNCiAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQ0KDQogIGJvZHkgew0KICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7DQogICAgYmFja2dyb3VuZDogIzBhMGEwYTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgaGVpZ2h0OiAxMDB2aDsNCiAgICBoZWlnaHQ6IDEwMGR2aDsNCiAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgIHBvc2l0aW9uOiBmaXhlZDsNCiAgICBpbnNldDogMDsNCiAgfQ0KDQogIC5waG9uZS1mcmFtZSB7DQogICAgd2lkdGg6IDEwMCU7DQogICAgbWF4LXdpZHRoOiA0MjBweDsNCiAgICBoZWlnaHQ6IDEwMHZoOw0KICAgIGhlaWdodDogMTAwZHZoOw0KICAgIG1heC1oZWlnaHQ6IDc4MHB4Ow0KICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWJnKTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgYm94LXNoYWRvdzogMCAyMHB4IDgwcHggcmdiYSgwLDAsMCwwLjUpOw0KICB9DQoNCiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ0MHB4KSB7DQogICAgLnBob25lLWZyYW1lIHsNCiAgICAgIG1heC13aWR0aDogMTAwJTsNCiAgICAgIG1heC1oZWlnaHQ6IDEwMHZoOw0KICAgICAgbWF4LWhlaWdodDogMTAwZHZoOw0KICAgICAgYm94LXNoYWRvdzogbm9uZTsNCiAgICB9DQogIH0NCg0KICAvKiDDouKAneKCrMOi4oCd4oKsIEhFQURFUiDDouKAneKCrMOi4oCd4oKsICovDQogIC5jaGF0LWhlYWRlciB7DQogICAgYmFja2dyb3VuZDogdmFyKC0td2EtZ3JlZW4taGVhZGVyKTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgcGFkZGluZzogOHB4IDEycHg7DQogICAgZ2FwOiAxMHB4Ow0KICAgIG1pbi1oZWlnaHQ6IDU2cHg7DQogICAgZmxleC1zaHJpbms6IDA7DQogICAgei1pbmRleDogMTA7DQogIH0NCg0KICAuaGVhZGVyLWJhY2sgew0KICAgIGNvbG9yOiAjZmZmOw0KICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgcGFkZGluZzogNHB4Ow0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgfQ0KDQogIC5oZWFkZXItYXZhdGFyIHsNCiAgICB3aWR0aDogNDBweDsNCiAgICBoZWlnaHQ6IDQwcHg7DQogICAgYm9yZGVyLXJhZGl1czogNTAlOw0KICAgIGJhY2tncm91bmQ6ICNjZmQ4ZGM7DQogICAgZmxleC1zaHJpbms6IDA7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogIH0NCg0KICAuaGVhZGVyLWF2YXRhciBzdmcgew0KICAgIHdpZHRoOiAyNnB4Ow0KICAgIGhlaWdodDogMjZweDsNCiAgICBmaWxsOiAjZmZmOw0KICB9DQoNCiAgLmhlYWRlci1pbmZvIHsNCiAgICBmbGV4OiAxOw0KICAgIG1pbi13aWR0aDogMDsNCiAgfQ0KDQogIC5oZWFkZXItbmFtZSB7DQogICAgY29sb3I6ICNmZmY7DQogICAgZm9udC1zaXplOiAxNnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiA1MDA7DQogICAgbGluZS1oZWlnaHQ6IDEuMjsNCiAgfQ0KDQogIC5oZWFkZXItc3RhdHVzIHsNCiAgICBjb2xvcjogdmFyKC0td2EtaGVhZGVyLWljb24pOw0KICAgIGZvbnQtc2l6ZTogMTIuNXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxLjM7DQogIH0NCg0KICAuaGVhZGVyLWFjdGlvbnMgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZ2FwOiAxOHB4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIH0NCg0KICAuaGVhZGVyLWFjdGlvbnMgc3ZnIHsNCiAgICB3aWR0aDogMjJweDsNCiAgICBoZWlnaHQ6IDIycHg7DQogICAgZmlsbDogdmFyKC0td2EtaGVhZGVyLWljb24pOw0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICB0cmFuc2l0aW9uOiBmaWxsIDAuMTVzOw0KICB9DQoNCiAgLmhlYWRlci1hY3Rpb25zIHN2Zzpob3ZlciB7DQogICAgZmlsbDogI2ZmZjsNCiAgfQ0KDQogIC8qIMOi4oCd4oKsw6LigJ3igqwgRU5DUllQVElPTiBCQU5ORVIgw6LigJ3igqzDouKAneKCrCAqLw0KICAuZW5jcnlwdC1iYW5uZXIgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWVuY3J5cHQtYmcpOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICBwYWRkaW5nOiA4cHggNDBweDsNCiAgICBmb250LXNpemU6IDEycHg7DQogICAgY29sb3I6IHZhcigtLXdhLWVuY3J5cHQtdGV4dCk7DQogICAgbGluZS1oZWlnaHQ6IDEuNDsNCiAgICBmbGV4LXNocmluazogMDsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgZ2FwOiA1cHg7DQogIH0NCg0KICAuZW5jcnlwdC1iYW5uZXIgc3ZnIHsNCiAgICB3aWR0aDogMTNweDsNCiAgICBoZWlnaHQ6IDEzcHg7DQogICAgZmlsbDogdmFyKC0td2EtZW5jcnlwdC10ZXh0KTsNCiAgICBmbGV4LXNocmluazogMDsNCiAgfQ0KDQogIC8qIMOi4oCd4oKsw6LigJ3igqwgQ0hBVCBBUkVBIMOi4oCd4oKsw6LigJ3igqwgKi8NCiAgLmNoYXQtYXJlYSB7DQogICAgZmxleDogMTsNCiAgICBtaW4taGVpZ2h0OiAwOw0KICAgIG92ZXJmbG93LXk6IGF1dG87DQogICAgcGFkZGluZzogOHB4IDEycHg7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgIGdhcDogM3B4Ow0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgfQ0KDQogIC5jaGF0LWFyZWE6Oi13ZWJraXQtc2Nyb2xsYmFyIHsNCiAgICB3aWR0aDogNXB4Ow0KICB9DQoNCiAgLmNoYXQtYXJlYTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgew0KICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4yKTsNCiAgICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICB9DQoNCiAgLyogV2hhdHNBcHAgZG9vZGxlIGJhY2tncm91bmQgKi8NCiAgLmNoYXQtYXJlYTo6YmVmb3JlIHsNCiAgICBjb250ZW50OiAnJzsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgaW5zZXQ6IDA7DQogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzIwMCcgaGVpZ2h0PScyMDAnIHZpZXdCb3g9JzAgMCAyMDAgMjAwJyUzRSUzQ2cgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjNjOWMxYjUnIHN0cm9rZS13aWR0aD0nMC44JyBvcGFjaXR5PScwLjQ1JyUzRSUzQ3BhdGggZD0nTTMwIDIwbDUgMTAtNSAxMCcvJTNFJTNDY2lyY2xlIGN4PSc2MCcgY3k9JzMwJyByPSc4Jy8lM0UlM0NwYXRoIGQ9J005MCAxNXYxNWgxMCcvJTNFJTNDcmVjdCB4PScxMjAnIHk9JzE4JyB3aWR0aD0nMTQnIGhlaWdodD0nMTQnIHJ4PScyJy8lM0UlM0NwYXRoIGQ9J00xNjAgMjBsOCA4LTggOCcvJTNFJTNDY2lyY2xlIGN4PScyNScgY3k9JzYwJyByPSc1Jy8lM0UlM0NwYXRoIGQ9J001MCA1MGwxMCA1LTEwIDUnLyUzRSUzQ3BhdGggZD0nTTgwIDU1aDE1Jy8lM0UlM0NjaXJjbGUgY3g9JzExNScgY3k9JzU4JyByPSc3Jy8lM0UlM0NwYXRoIGQ9J00xNTAgNTBsNSAxMicvJTNFJTNDcGF0aCBkPSdNMTc1IDU1bDUtNSA1IDUnLyUzRSUzQ3BhdGggZD0nTTIwIDkwbDgtNSA4IDUnLyUzRSUzQ2NpcmNsZSBjeD0nNTUnIGN5PSc5NScgcj0nNicvJTNFJTNDcGF0aCBkPSdNODUgODh2MTQnLyUzRSUzQ3JlY3QgeD0nMTEwJyB5PSc4NScgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyByeD0nNicvJTNFJTNDcGF0aCBkPSdNMTQ1IDkwaDEyJy8lM0UlM0NwYXRoIGQ9J00xNzAgODhsNiA2LTYgNicvJTNFJTNDY2lyY2xlIGN4PSczMCcgY3k9JzEzMCcgcj0nNCcvJTNFJTNDcGF0aCBkPSdNNTUgMTIwbDEwIDEwLTEwIDEwJy8lM0UlM0NwYXRoIGQ9J005MCAxMjVoOHY4Jy8lM0UlM0NjaXJjbGUgY3g9JzEyNScgY3k9JzEzMicgcj0nNicvJTNFJTNDcGF0aCBkPSdNMTU1IDEyMmw4IDEwJy8lM0UlM0NwYXRoIGQ9J00xODAgMTI4bDUgNS01IDUnLyUzRSUzQ3BhdGggZD0nTTIwIDE2MGw2IDgtNiA4Jy8lM0UlM0NjaXJjbGUgY3g9JzU1JyBjeT0nMTY1JyByPSc1Jy8lM0UlM0NwYXRoIGQ9J004NSAxNTh2MTJoOCcvJTNFJTNDcmVjdCB4PScxMTUnIHk9JzE1NScgd2lkdGg9JzEwJyBoZWlnaHQ9JzEwJyByeD0nMicvJTNFJTNDcGF0aCBkPSdNMTUwIDE2MGw2IDYtNiA2Jy8lM0UlM0NjaXJjbGUgY3g9JzE4MCcgY3k9JzE2Micgcj0nNCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFIik7DQogICAgYmFja2dyb3VuZC1zaXplOiAyMDBweCAyMDBweDsNCiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgICB6LWluZGV4OiAwOw0KICB9DQoNCiAgLmNoYXQtYXJlYSA+ICogew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB6LWluZGV4OiAxOw0KICB9DQoNCiAgLyogw6LigJ3igqzDouKAneKCrCBCVUJCTEVTIMOi4oCd4oKsw6LigJ3igqwgKi8NCiAgLm1zZy1yb3cgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgbWF4LXdpZHRoOiA4MiU7DQogICAgYW5pbWF0aW9uOiBtc2dJbiAwLjI1cyBlYXNlLW91dDsNCiAgfQ0KDQogIEBrZXlmcmFtZXMgbXNnSW4gew0KICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KSBzY2FsZSgwLjk3KTsgfQ0KICAgIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpOyB9DQogIH0NCg0KICAubXNnLXJvdy5vdXQgew0KICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOw0KICB9DQoNCiAgLm1zZy1yb3cuaW4gew0KICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7DQogIH0NCg0KICAuYnViYmxlIHsNCiAgICBwYWRkaW5nOiA2cHggOHB4IDRweDsNCiAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgZm9udC1zaXplOiAxNC4ycHg7DQogICAgbGluZS1oZWlnaHQ6IDEuMzU7DQogICAgY29sb3I6IHZhcigtLXdhLXRleHQpOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7DQogICAgbWluLXdpZHRoOiA4MHB4Ow0KICB9DQoNCiAgLm1zZy1yb3cub3V0IC5idWJibGUgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWJ1YmJsZS1vdXQpOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOw0KICB9DQoNCiAgLm1zZy1yb3cuaW4gLmJ1YmJsZSB7DQogICAgYmFja2dyb3VuZDogdmFyKC0td2EtYnViYmxlLWluKTsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOw0KICB9DQoNCiAgLm1zZy1yb3cub3V0IC5idWJibGU6OmJlZm9yZSB7DQogICAgY29udGVudDogJyc7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMDsNCiAgICByaWdodDogLThweDsNCiAgICB3aWR0aDogMDsNCiAgICBoZWlnaHQ6IDA7DQogICAgYm9yZGVyLWxlZnQ6IDhweCBzb2xpZCB2YXIoLS13YS1idWJibGUtb3V0KTsNCiAgICBib3JkZXItYm90dG9tOiA4cHggc29saWQgdHJhbnNwYXJlbnQ7DQogIH0NCg0KICAubXNnLXJvdy5pbiAuYnViYmxlOjpiZWZvcmUgew0KICAgIGNvbnRlbnQ6ICcnOw0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB0b3A6IDA7DQogICAgbGVmdDogLThweDsNCiAgICB3aWR0aDogMDsNCiAgICBoZWlnaHQ6IDA7DQogICAgYm9yZGVyLXJpZ2h0OiA4cHggc29saWQgdmFyKC0td2EtYnViYmxlLWluKTsNCiAgICBib3JkZXItYm90dG9tOiA4cHggc29saWQgdHJhbnNwYXJlbnQ7DQogIH0NCg0KICAuYnViYmxlLXRleHQgew0KICAgIG1hcmdpbi1yaWdodDogNTJweDsNCiAgfQ0KDQogIC5idWJibGUtbWV0YSB7DQogICAgZmxvYXQ6IHJpZ2h0Ow0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IDNweDsNCiAgICBtYXJnaW4tdG9wOiAtMTJweDsNCiAgICBtYXJnaW4tbGVmdDogOHB4Ow0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB0b3A6IDZweDsNCiAgfQ0KDQogIC5idWJibGUtdGltZSB7DQogICAgZm9udC1zaXplOiAxMXB4Ow0KICAgIGNvbG9yOiB2YXIoLS13YS10aW1lKTsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICB9DQoNCiAgLmJ1YmJsZS10aWNrIHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIH0NCg0KICAuYnViYmxlLXRpY2sgc3ZnIHsNCiAgICB3aWR0aDogMTZweDsNCiAgICBoZWlnaHQ6IDExcHg7DQogIH0NCg0KICAvKiDDouKAneKCrMOi4oCd4oKsIElNQUdFIElOIEJVQkJMRSDDouKAneKCrMOi4oCd4oKsICovDQogIC5idWJibGUtaW1nIHsNCiAgICBib3JkZXItcmFkaXVzOiA2cHg7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBtYXJnaW46IC0zcHggLTRweCA0cHg7DQogIH0NCg0KICAuYnViYmxlLWltZyBpbWcgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIG1heC13aWR0aDogMjgwcHg7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgYm9yZGVyLXJhZGl1czogNnB4Ow0KICB9DQoNCiAgLyogw6LigJ3igqzDouKAneKCrCBBVURJTyBCVUJCTEUgw6LigJ3igqzDouKAneKCrCAqLw0KICAuYnViYmxlLWF1ZGlvIHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgZ2FwOiAxMHB4Ow0KICAgIG1pbi13aWR0aDogMjQwcHg7DQogICAgcGFkZGluZzogNnB4IDRweDsNCiAgfQ0KDQogIC5hdWRpby1wbGF5IHsNCiAgICB3aWR0aDogMzZweDsNCiAgICBoZWlnaHQ6IDM2cHg7DQogICAgYm9yZGVyLXJhZGl1czogNTAlOw0KICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWdyZWVuKTsNCiAgICBib3JkZXI6IG5vbmU7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgICBmbGV4LXNocmluazogMDsNCiAgfQ0KDQogIC5hdWRpby1wbGF5IHN2ZyB7DQogICAgd2lkdGg6IDE2cHg7DQogICAgaGVpZ2h0OiAxNnB4Ow0KICAgIGZpbGw6ICNmZmY7DQogICAgbWFyZ2luLWxlZnQ6IDJweDsNCiAgfQ0KDQogIC5hdWRpby13YXZlIHsNCiAgICBmbGV4OiAxOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IDJweDsNCiAgICBoZWlnaHQ6IDI4cHg7DQogIH0NCg0KICAuYXVkaW8td2F2ZSBzcGFuIHsNCiAgICB3aWR0aDogM3B4Ow0KICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWdyZWVuKTsNCiAgICBib3JkZXItcmFkaXVzOiAycHg7DQogICAgb3BhY2l0eTogMC41Ow0KICB9DQoNCiAgLmF1ZGlvLWR1cmF0aW9uIHsNCiAgICBmb250LXNpemU6IDExcHg7DQogICAgY29sb3I6IHZhcigtLXdhLXRpbWUpOw0KICAgIGZsZXgtc2hyaW5rOiAwOw0KICB9DQoNCiAgLyogw6LigJ3igqzDouKAneKCrCBEQVRFIFNFUEFSQVRPUiDDouKAneKCrMOi4oCd4oKsICovDQogIC5kYXRlLXNlcCB7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIG1hcmdpbjogOHB4IDA7DQogIH0NCg0KICAuZGF0ZS1zZXAgc3BhbiB7DQogICAgYmFja2dyb3VuZDogI2UxZjNmYjsNCiAgICBjb2xvcjogdmFyKC0td2EtdGV4dC1saWdodCk7DQogICAgZm9udC1zaXplOiAxMnB4Ow0KICAgIHBhZGRpbmc6IDVweCAxMnB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjEpOw0KICB9DQoNCiAgLyogw6LigJ3igqzDouKAneKCrCBUWVBJTkcgSU5ESUNBVE9SIMOi4oCd4oKsw6LigJ3igqwgKi8NCiAgLnR5cGluZy1pbmRpY2F0b3Igew0KICAgIGRpc3BsYXk6IG5vbmU7DQogICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsNCiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7DQogICAgYmFja2dyb3VuZDogdmFyKC0td2EtYnViYmxlLWluKTsNCiAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsNCiAgICBnYXA6IDRweDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIG1hcmdpbi1sZWZ0OiA0cHg7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICB9DQoNCiAgLnR5cGluZy1pbmRpY2F0b3I6OmJlZm9yZSB7DQogICAgY29udGVudDogJyc7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMDsNCiAgICBsZWZ0OiAtOHB4Ow0KICAgIHdpZHRoOiAwOw0KICAgIGhlaWdodDogMDsNCiAgICBib3JkZXItcmlnaHQ6IDhweCBzb2xpZCB2YXIoLS13YS1idWJibGUtaW4pOw0KICAgIGJvcmRlci1ib3R0b206IDhweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgfQ0KDQogIC50eXBpbmctaW5kaWNhdG9yLmFjdGl2ZSB7DQogICAgZGlzcGxheTogZmxleDsNCiAgfQ0KDQogIC50eXBpbmctZG90IHsNCiAgICB3aWR0aDogN3B4Ow0KICAgIGhlaWdodDogN3B4Ow0KICAgIGJhY2tncm91bmQ6ICM4Njk2YTA7DQogICAgYm9yZGVyLXJhZGl1czogNTAlOw0KICAgIGFuaW1hdGlvbjogdHlwaW5nQm91bmNlIDEuNHMgaW5maW5pdGU7DQogIH0NCg0KICAudHlwaW5nLWRvdDpudGgtY2hpbGQoMikgeyBhbmltYXRpb24tZGVsYXk6IDAuMnM7IH0NCiAgLnR5cGluZy1kb3Q6bnRoLWNoaWxkKDMpIHsgYW5pbWF0aW9uLWRlbGF5OiAwLjRzOyB9DQoNCiAgQGtleWZyYW1lcyB0eXBpbmdCb3VuY2Ugew0KICAgIDAlLCA2MCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IG9wYWNpdHk6IDAuNDsgfQ0KICAgIDMwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTsgb3BhY2l0eTogMTsgfQ0KICB9DQoNCiAgLyogw6LigJ3igqzDouKAneKCrCBJTlBVVCBCQVIgw6LigJ3igqzDouKAneKCrCAqLw0KICAuaW5wdXQtYmFyIHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsNCiAgICBwYWRkaW5nOiA2cHggNnB4Ow0KICAgIGdhcDogNnB4Ow0KICAgIGJhY2tncm91bmQ6IHZhcigtLXdhLWJnKTsNCiAgICBmbGV4LXNocmluazogMDsNCiAgfQ0KDQogIC5pbnB1dC1sZWZ0IHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGdhcDogNHB4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIH0NCg0KICAuaWNvbi1idG4gew0KICAgIHdpZHRoOiA0MHB4Ow0KICAgIGhlaWdodDogNDBweDsNCiAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgYm9yZGVyOiBub25lOw0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgZmxleC1zaHJpbms6IDA7DQogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsNCiAgfQ0KDQogIC5pY29uLWJ0bjpob3ZlciB7DQogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA2KTsNCiAgfQ0KDQogIC5pY29uLWJ0biBzdmcgew0KICAgIHdpZHRoOiAyNHB4Ow0KICAgIGhlaWdodDogMjRweDsNCiAgICBmaWxsOiAjNTQ2NTZmOw0KICB9DQoNCiAgLmlucHV0LWZpZWxkLXdyYXAgew0KICAgIGZsZXg6IDE7DQogICAgYmFja2dyb3VuZDogdmFyKC0td2EtaW5wdXQtYmcpOw0KICAgIGJvcmRlci1yYWRpdXM6IDIycHg7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7DQogICAgcGFkZGluZzogNnB4IDEycHg7DQogICAgbWluLWhlaWdodDogNDJweDsNCiAgICBtYXgtaGVpZ2h0OiAxMjBweDsNCiAgfQ0KDQogIC5pbnB1dC1maWVsZCB7DQogICAgZmxleDogMTsNCiAgICBib3JkZXI6IG5vbmU7DQogICAgb3V0bGluZTogbm9uZTsNCiAgICBmb250LWZhbWlseTogaW5oZXJpdDsNCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgY29sb3I6IHZhcigtLXdhLXRleHQpOw0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICAgIHJlc2l6ZTogbm9uZTsNCiAgICBtYXgtaGVpZ2h0OiAxMDBweDsNCiAgICBsaW5lLWhlaWdodDogMS4zNTsNCiAgICBwYWRkaW5nOiA0cHggMDsNCiAgfQ0KDQogIC5pbnB1dC1maWVsZDo6cGxhY2Vob2xkZXIgew0KICAgIGNvbG9yOiAjODY5NmEwOw0KICB9DQoNCiAgLm1pYy1idG4gew0KICAgIHdpZHRoOiA0NHB4Ow0KICAgIGhlaWdodDogNDRweDsNCiAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgYmFja2dyb3VuZDogdmFyKC0td2EtbWljLWJnKTsNCiAgICBib3JkZXI6IG5vbmU7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgICBmbGV4LXNocmluazogMDsNCiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzOw0KICB9DQoNCiAgLm1pYy1idG46aG92ZXIgew0KICAgIGJhY2tncm91bmQ6ICMwMDhmNzI7DQogIH0NCg0KICAubWljLWJ0biBzdmcgew0KICAgIHdpZHRoOiAyMnB4Ow0KICAgIGhlaWdodDogMjJweDsNCiAgICBmaWxsOiAjZmZmOw0KICB9DQoNCiAgLm1pYy1idG4ucmVjb3JkaW5nIHsNCiAgICBiYWNrZ3JvdW5kOiAjZTc0YzNjOw0KICAgIGFuaW1hdGlvbjogbWljUHVsc2UgMXMgaW5maW5pdGU7DQogIH0NCg0KICBAa2V5ZnJhbWVzIG1pY1B1bHNlIHsNCiAgICAwJSwgMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSgyMzEsNzYsNjAsMC40KTsgfQ0KICAgIDUwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgyMzEsNzYsNjAsMCk7IH0NCiAgfQ0KDQogIC5zZW5kLWJ0biB7DQogICAgZGlzcGxheTogbm9uZTsNCiAgfQ0KDQogIC5zZW5kLWJ0bi52aXNpYmxlIHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICB9DQoNCiAgLnNlbmQtYnRuIHN2ZyB7DQogICAgZmlsbDogIzU0NjU2ZjsNCiAgfQ0KDQogIC8qIMOi4oCd4oKsw6LigJ3igqwgRU1PSkkgUElDS0VSIMOi4oCd4oKsw6LigJ3igqwgKi8NCiAgLmVtb2ppLXBhbmVsIHsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIGJhY2tncm91bmQ6ICNmMGYwZjA7DQogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7DQogICAgcGFkZGluZzogOHB4Ow0KICAgIGZsZXgtc2hyaW5rOiAwOw0KICAgIG1heC1oZWlnaHQ6IDIwMHB4Ow0KICAgIG92ZXJmbG93LXk6IGF1dG87DQogIH0NCg0KICAuZW1vamktcGFuZWwub3BlbiB7DQogICAgZGlzcGxheTogYmxvY2s7DQogIH0NCg0KICAuZW1vamktZ3JpZCB7DQogICAgZGlzcGxheTogZ3JpZDsNCiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg4LCAxZnIpOw0KICAgIGdhcDogMnB4Ow0KICB9DQoNCiAgLmVtb2ppLWl0ZW0gew0KICAgIGZvbnQtc2l6ZTogMjRweDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgcGFkZGluZzogNnB4IDJweDsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgYm9yZGVyLXJhZGl1czogNnB4Ow0KICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xMnM7DQogICAgdXNlci1zZWxlY3Q6IG5vbmU7DQogIH0NCg0KICAuZW1vamktaXRlbTpob3ZlciB7DQogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA4KTsNCiAgfQ0KDQogIC8qIMOi4oCd4oKsw6LigJ3igqwgQVRUQUNITUVOVCBNRU5VIMOi4oCd4oKsw6LigJ3igqwgKi8NCiAgLmF0dGFjaC1tZW51IHsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBib3R0b206IDYwcHg7DQogICAgbGVmdDogMTBweDsNCiAgICBiYWNrZ3JvdW5kOiAjZmZmOw0KICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7DQogICAgYm94LXNoYWRvdzogMCA0cHggMjRweCByZ2JhKDAsMCwwLDAuMTgpOw0KICAgIHBhZGRpbmc6IDEwcHg7DQogICAgei1pbmRleDogMTAwOw0KICAgIG1pbi13aWR0aDogMTgwcHg7DQogIH0NCg0KICAuYXR0YWNoLW1lbnUub3BlbiB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgYW5pbWF0aW9uOiBtZW51UG9wIDAuMnMgZWFzZS1vdXQ7DQogIH0NCg0KICBAa2V5ZnJhbWVzIG1lbnVQb3Agew0KICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKDAuOSkgdHJhbnNsYXRlWSgxMHB4KTsgfQ0KICAgIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOyB9DQogIH0NCg0KICAuYXR0YWNoLWl0ZW0gew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IDEycHg7DQogICAgcGFkZGluZzogMTJweCAxNHB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xMnM7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KICAgIGNvbG9yOiB2YXIoLS13YS10ZXh0KTsNCiAgfQ0KDQogIC5hdHRhY2gtaXRlbTpob3ZlciB7DQogICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsNCiAgfQ0KDQogIC5hdHRhY2gtaWNvbiB7DQogICAgd2lkdGg6IDQwcHg7DQogICAgaGVpZ2h0OiA0MHB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogIH0NCg0KICAuYXR0YWNoLWljb24gc3ZnIHsNCiAgICB3aWR0aDogMjBweDsNCiAgICBoZWlnaHQ6IDIwcHg7DQogICAgZmlsbDogI2ZmZjsNCiAgfQ0KDQogIC5hdHRhY2gtaWNvbi5pbWcgeyBiYWNrZ3JvdW5kOiAjN2Y2NmZmOyB9DQogIC5hdHRhY2gtaWNvbi5kb2MgeyBiYWNrZ3JvdW5kOiAjNTE1N2FlOyB9DQogIC5hdHRhY2gtaWNvbi5hdWRpbyB7IGJhY2tncm91bmQ6ICNlZTU2MjM7IH0NCiAgLyogw6LigJ3igqzDouKAneKCrCBDSEFUIE1FTlUgKHRyw6pzIHBvbnRpbmhvcykgw6LigJ3igqzDouKAneKCrCAqLw0KICAuY2hhdC1tZW51IHsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB0b3A6IDUycHg7DQogICAgcmlnaHQ6IDEwcHg7DQogICAgYmFja2dyb3VuZDogI2ZmZjsNCiAgICBib3JkZXItcmFkaXVzOiAxNHB4Ow0KICAgIGJveC1zaGFkb3c6IDAgNHB4IDI0cHggcmdiYSgwLDAsMCwwLjE4KTsNCiAgICBwYWRkaW5nOiA4cHg7DQogICAgei1pbmRleDogMTEwOw0KICAgIG1pbi13aWR0aDogMjEwcHg7DQogIH0NCg0KICAuY2hhdC1tZW51Lm9wZW4gew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGFuaW1hdGlvbjogbWVudVBvcCAwLjJzIGVhc2Utb3V0Ow0KICB9DQoNCiAgLmNoYXQtbWVudS1pdGVtIHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgZ2FwOiAxMnB4Ow0KICAgIHBhZGRpbmc6IDEycHggMTRweDsNCiAgICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzOw0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICBjb2xvcjogdmFyKC0td2EtdGV4dCk7DQogIH0NCg0KICAuY2hhdC1tZW51LWl0ZW06aG92ZXIgew0KICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7DQogIH0NCg0KICAuY2hhdC1tZW51LWl0ZW0gc3ZnIHsNCiAgICB3aWR0aDogMjBweDsNCiAgICBoZWlnaHQ6IDIwcHg7DQogICAgZmlsbDogIzY2Nzc4MTsNCiAgICBmbGV4LXNocmluazogMDsNCiAgfQ0KDQoNCiAgLyogw6LigJ3igqzDouKAneKCrCBSRUNPUkRJTkcgQkFSIMOi4oCd4oKsw6LigJ3igqwgKi8NCiAgLnJlY29yZGluZy1iYXIgew0KICAgIGRpc3BsYXk6IG5vbmU7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IDEwcHg7DQogICAgcGFkZGluZzogNnB4IDZweDsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS13YS1iZyk7DQogICAgZmxleC1zaHJpbms6IDA7DQogICAgYW5pbWF0aW9uOiBtc2dJbiAwLjJzIGVhc2Utb3V0Ow0KICB9DQoNCiAgLnJlY29yZGluZy1iYXIuYWN0aXZlIHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICB9DQoNCiAgLnJlYy1kb3Qgew0KICAgIHdpZHRoOiAxMHB4Ow0KICAgIGhlaWdodDogMTBweDsNCiAgICBiYWNrZ3JvdW5kOiAjZTc0YzNjOw0KICAgIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgICBhbmltYXRpb246IHJlY0JsaW5rIDFzIGluZmluaXRlOw0KICB9DQoNCiAgQGtleWZyYW1lcyByZWNCbGluayB7DQogICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAxOyB9DQogICAgNTAlIHsgb3BhY2l0eTogMC4zOyB9DQogIH0NCg0KICAucmVjLXRpbWVyIHsNCiAgICBmb250LXNpemU6IDE0cHg7DQogICAgY29sb3I6IHZhcigtLXdhLXRleHQpOw0KICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7DQogICAgbWluLXdpZHRoOiA0MHB4Ow0KICB9DQoNCiAgLnJlYy1jYW5jZWwgew0KICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICBjb2xvcjogI2U3NGMzYzsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgfQ0KDQogIC5yZWMtc2VuZCB7DQogICAgbWFyZ2luLWxlZnQ6IGF1dG87DQogIH0NCg0KICAucmVjLXNlbmQgc3ZnIHsNCiAgICB3aWR0aDogMjRweDsNCiAgICBoZWlnaHQ6IDI0cHg7DQogICAgZmlsbDogI2ZmZjsNCiAgfQ0KDQogIC8qIEhpZGRlbiBmaWxlIGlucHV0cyAqLw0KICAuaGlkZGVuIHsgZGlzcGxheTogbm9uZTsgfQ0KDQogIC8qIMOi4oCd4oKsw6LigJ3igqwgVElDSyBTVEFURVMgw6LigJ3igqzDouKAneKCrCAqLw0KICAudGljay1zaW5nbGUgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyB9DQogIC50aWNrLXNpbmdsZSBzdmcgeyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxMXB4OyB9DQogIC50aWNrLWRvdWJsZSB7IGRpc3BsYXk6IG5vbmU7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0NCiAgLnRpY2stZG91YmxlIHN2ZyB7IHdpZHRoOiAxOHB4OyBoZWlnaHQ6IDExcHg7IG1hcmdpbi1sZWZ0OiAtNHB4OyB9DQogIC50aWNrLWRvdWJsZSAudGljay1zZWNvbmQgeyBvcGFjaXR5OiAwOyB9DQogIC50aWNrLWRlbGl2ZXJlZCAudGljay1zZWNvbmQgeyBvcGFjaXR5OiAxOyBmaWxsOiAjODY5NmEwOyB9DQogIC50aWNrLXJlYWQgLnRpY2stc2Vjb25kIHsgb3BhY2l0eTogMTsgZmlsbDogdmFyKC0td2EtYmx1ZS10aWNrKTsgfQ0KDQogIC8qIMOi4oCd4oKsw6LigJ3igqwgQ0FMTCBPVkVSTEFZIMOi4oCd4oKsw6LigJ3igqwgKi8NCiAgLmNhbGwtb3ZlcmxheSB7DQogICAgZGlzcGxheTogbm9uZTsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgaW5zZXQ6IDA7DQogICAgei1pbmRleDogMjAwOw0KICAgIGJhY2tncm91bmQ6ICMxYTJjMzQ7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICB9DQoNCiAgLmNhbGwtb3ZlcmxheS5hY3RpdmUgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogIH0NCg0KICAuY2FsbC1vdmVybGF5LWJnIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgaW5zZXQ6IDA7DQogICAgb3BhY2l0eTogMC4wODsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAwJyBoZWlnaHQ9JzIwMCcgdmlld0JveD0nMCAwIDIwMCAyMDAnJTNFJTNDZyBmaWxsPSdub25lJyBzdHJva2U9JyUyM2ZmZmZmZicgc3Ryb2tlLXdpZHRoPScwLjgnIG9wYWNpdHk9JzAuNSclM0UlM0NwYXRoIGQ9J00zMCAyMGw1IDEwLTUgMTAnLyUzRSUzQ2NpcmNsZSBjeD0nNjAnIGN5PSczMCcgcj0nOCcvJTNFJTNDcGF0aCBkPSdNOTAgMTV2MTVoMTAnLyUzRSUzQ3JlY3QgeD0nMTIwJyB5PScxOCcgd2lkdGg9JzE0JyBoZWlnaHQ9JzE0JyByeD0nMicvJTNFJTNDcGF0aCBkPSdNMTYwIDIwbDggOC04IDgnLyUzRSUzQ2NpcmNsZSBjeD0nMjUnIGN5PSc2MCcgcj0nNScvJTNFJTNDcGF0aCBkPSdNNTAgNTBsMTAgNS0xMCA1Jy8lM0UlM0NwYXRoIGQ9J004MCA1NWgxNScvJTNFJTNDY2lyY2xlIGN4PScxMTUnIGN5PSc1OCcgcj0nNycvJTNFJTNDcGF0aCBkPSdNMTUwIDUwbDUgMTInLyUzRSUzQ3BhdGggZD0nTTE3NSA1NWw1LTUgNSA1Jy8lM0UlM0NwYXRoIGQ9J00yMCA5MGw4LTUgOCA1Jy8lM0UlM0NjaXJjbGUgY3g9JzU1JyBjeT0nOTUnIHI9JzYnLyUzRSUzQ3BhdGggZD0nTTg1IDg4djE0Jy8lM0UlM0NyZWN0IHg9JzExMCcgeT0nODUnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgcng9JzYnLyUzRSUzQ3BhdGggZD0nTTE0NSA5MGgxMicvJTNFJTNDcGF0aCBkPSdNMTcwIDg4bDYgNi02IDYnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRSIpOw0KICAgIGJhY2tncm91bmQtc2l6ZTogMjAwcHggMjAwcHg7DQogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogIH0NCg0KICAuY2FsbC1oZWFkZXIgew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB0b3A6IDA7DQogICAgbGVmdDogMDsNCiAgICByaWdodDogMDsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICAgIHBhZGRpbmc6IDEycHggMTZweDsNCiAgICB6LWluZGV4OiAyOw0KICB9DQoNCiAgLmNhbGwtaGVhZGVyLWxlZnQgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IDhweDsNCiAgfQ0KDQogIC5jYWxsLWhlYWRlci1sZWZ0IHN2ZyB7DQogICAgd2lkdGg6IDIwcHg7DQogICAgaGVpZ2h0OiAyMHB4Ow0KICAgIGZpbGw6ICNmZmY7DQogIH0NCg0KICAuY2FsbC1oZWFkZXItY2VudGVyIHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgZ2FwOiA2cHg7DQogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC43KTsNCiAgICBmb250LXNpemU6IDEycHg7DQogIH0NCg0KICAuY2FsbC1oZWFkZXItcmlnaHQgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IDZweDsNCiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjcpOw0KICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgfQ0KDQogIC5jYWxsLWJvZHkgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGdhcDogMTZweDsNCiAgICB6LWluZGV4OiAyOw0KICB9DQoNCiAgLmNhbGwtbmFtZSB7DQogICAgY29sb3I6ICNmZmY7DQogICAgZm9udC1zaXplOiAyMnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiA1MDA7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICB9DQoNCiAgLmNhbGwtZW5jcnlwdCB7DQogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC41KTsNCiAgICBmb250LXNpemU6IDEzcHg7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIHBhZGRpbmc6IDAgNDBweDsNCiAgfQ0KDQogIC5jYWxsLWF2YXRhciB7DQogICAgd2lkdGg6IDE0MHB4Ow0KICAgIGhlaWdodDogMTQwcHg7DQogICAgYm9yZGVyLXJhZGl1czogNTAlOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgYm9yZGVyOiAzcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTsNCiAgICBtYXJnaW46IDIwcHggMDsNCiAgfQ0KDQogIC5jYWxsLWF2YXRhciBpbWcgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGhlaWdodDogMTAwJTsNCiAgICBvYmplY3QtZml0OiBjb3ZlcjsNCiAgfQ0KDQogIC5jYWxsLXN0YXR1cyB7DQogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTsNCiAgICBmb250LXNpemU6IDE0cHg7DQogICAgbWFyZ2luLXRvcDogOHB4Ow0KICB9DQoNCiAgLmNhbGwtc3RhdHVzLnVuYXZhaWxhYmxlIHsNCiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjgpOw0KICB9DQoNCiAgLmNhbGwtYWN0aW9ucyB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIGJvdHRvbTogNjBweDsNCiAgICBsZWZ0OiAwOw0KICAgIHJpZ2h0OiAwOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgZ2FwOiAyMHB4Ow0KICAgIHotaW5kZXg6IDI7DQogIH0NCg0KICAuY2FsbC1hY3Rpb24tYnRuIHsNCiAgICB3aWR0aDogNTJweDsNCiAgICBoZWlnaHQ6IDUycHg7DQogICAgYm9yZGVyLXJhZGl1czogNTAlOw0KICAgIGJvcmRlcjogbm9uZTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7DQogIH0NCg0KICAuY2FsbC1hY3Rpb24tYnRuOmhvdmVyIHsgb3BhY2l0eTogMC44NTsgfQ0KICAuY2FsbC1hY3Rpb24tYnRuIHN2ZyB7IHdpZHRoOiAyNHB4OyBoZWlnaHQ6IDI0cHg7IGZpbGw6ICNmZmY7IH0NCg0KICAuY2FsbC1hY3Rpb24tYnRuLm1vcmUgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOyB9DQogIC5jYWxsLWFjdGlvbi1idG4uY2FtZXJhIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTsgfQ0KICAuY2FsbC1hY3Rpb24tYnRuLnNwZWFrZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOyB9DQogIC5jYWxsLWFjdGlvbi1idG4ubXV0ZSB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7IH0NCiAgLmNhbGwtYWN0aW9uLWJ0bi5lbmQgeyBiYWNrZ3JvdW5kOiAjZTc0YzNjOyB9DQogIC5jYWxsLWFjdGlvbi1idG4uZW5kIHN2ZyB7IHdpZHRoOiAyOHB4OyBoZWlnaHQ6IDI4cHg7IH0NCg0KICAuY2FsbC1uYXYgew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBib3R0b206IDE2cHg7DQogICAgbGVmdDogNTAlOw0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGdhcDogODBweDsNCiAgICB6LWluZGV4OiAyOw0KICB9DQoNCiAgLmNhbGwtbmF2IHNwYW4gew0KICAgIHdpZHRoOiA0MHB4Ow0KICAgIGhlaWdodDogNHB4Ow0KICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4zKTsNCiAgICBib3JkZXItcmFkaXVzOiAycHg7DQogIH0NCg0KICAuY2FsbC1uYXYtZG90IHsNCiAgICB3aWR0aDogNnB4ICFpbXBvcnRhbnQ7DQogICAgaGVpZ2h0OiA2cHggIWltcG9ydGFudDsNCiAgICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDsNCiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMykgIWltcG9ydGFudDsNCiAgfQ0KPC9zdHlsZT4NCjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2hlaWMyYW55QDAuMC40L2Rpc3QvaGVpYzJhbnkubWluLmpzIj48L3NjcmlwdD4KPC9oZWFkPg0KPGJvZHk+DQoNCjxkaXYgY2xhc3M9InBob25lLWZyYW1lIj4NCiAgPCEtLSBIRUFERVIgLS0+DQogIDxkaXYgY2xhc3M9ImNoYXQtaGVhZGVyIiBkYXRhLW9kLWlkPSJjaGF0LWhlYWRlciI+DQogICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJhY2siPg0KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImhlYWRlci1hdmF0YXIiPg0KICAgICAgPGltZyBzcmM9ImltYWdlLTEucG5nIiBhbHQ9Ik1lc3F1aXRhIFF1aW5hIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NTAlIj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJoZWFkZXItaW5mbyI+DQogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItbmFtZSI+TWVzcXVpdGEgKFF1aW5hKTwvZGl2Pg0KICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLXN0YXR1cyI+b25saW5lPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaGVhZGVyLWFjdGlvbnMiPg0KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGRhdGEtb2QtaWQ9ImJ0bi12aWRlbyI+PHBhdGggZD0iTTE3IDEwLjVWN2MwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTFsLTQgNHoiLz48L3N2Zz4NCiAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBkYXRhLW9kLWlkPSJidG4tY2FsbCI+PHBhdGggZD0iTTIwLjAxIDE1LjM4Yy0xLjIzIDAtMi40Mi0uMi0zLjUzLS41Ni0uMzUtLjEyLS43NC0uMDMtMS4wMS4yNGwtMS41NyAxLjk3Yy0yLjgzLTEuMzUtNS40OC0zLjktNi44OS02LjgzbDEuOTUtMS42NmMuMjctLjI4LjM1LS42Ny4yNC0xLjAyLS4zNy0xLjExLS41Ni0yLjMtLjU2LTMuNTMgMC0uNTQtLjQ1LS45OS0uOTktLjk5SDQuMTlDMy42NSAzIDMgMy4yNCAzIDMuOTkgMyAxMy4yOCAxMC43MyAyMSAyMC4wMSAyMWMuNzEgMCAuOTktLjYzLjk5LTEuMTh2LTMuNDVjMC0uNTQtLjQ1LS45OS0uOTktLjk5eiIvPjwvc3ZnPg0KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGRhdGEtb2QtaWQ9ImJ0bi1tZW51Ij48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KDQogIDwhLS0gQ0hBVCBNRU5VIC0tPg0KICA8ZGl2IGNsYXNzPSJjaGF0LW1lbnUiIGlkPSJjaGF0TWVudSI+DQogICAgPGRpdiBjbGFzcz0iY2hhdC1tZW51LWl0ZW0iIGlkPSJtZW51Q2xlYXIiPg0KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ii8+PC9zdmc+DQogICAgICBMaW1wYXIgY29udmVyc2ENCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJjaGF0LW1lbnUtaXRlbSIgaWQ9Im1lbnVFeHBvcnQiPg0KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ii8+PC9zdmc+DQogICAgICBFeHBvcnRhciBjb252ZXJzYSAoLnR4dCkNCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDwhLS0gRU5DUllQVElPTiBCQU5ORVIgLS0+DQogIDxkaXYgY2xhc3M9ImVuY3J5cHQtYmFubmVyIiBkYXRhLW9kLWlkPSJlbmNyeXB0LWJhbm5lciI+DQogICAgPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiPjxwYXRoIGQ9Ik04IDFhNCA0IDAgMCAwLTQgNHYySDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMVY4YTEgMSAwIDAgMC0xLTFoLTFWNWE0IDQgMCAwIDAtNC00em0yIDZINlY1YTIgMiAwIDEgMSA0IDB2MnoiLz48L3N2Zz4NCiAgICBBcyBtZW5zYWdlbnMgZSBjaGFtYWRhcyBkZXN0YSBjb252ZXJzYSBlc3TDo28gYWdvcmEgc2VndXJhcyBjb20gY3JpcHRvZ3JhZmlhIGRlIHBvbnRhIGEgcG9udGEuIFRvcXVlIHBhcmEgb2J0ZXIgbWFpcyBpbmZvcm1hw6fDtWVzLg0KICA8L2Rpdj4NCg0KICA8IS0tIENIQVQgQVJFQSAtLT4NCiAgPGRpdiBjbGFzcz0iY2hhdC1hcmVhIiBpZD0iY2hhdEFyZWEiIGRhdGEtb2QtaWQ9ImNoYXQtYXJlYSI+DQogICAgPCEtLSBUeXBpbmcgaW5kaWNhdG9yIC0tPg0KICAgIDxkaXYgY2xhc3M9InR5cGluZy1pbmRpY2F0b3IiIGlkPSJ0eXBpbmdJbmRpY2F0b3IiPg0KICAgICAgPGRpdiBjbGFzcz0idHlwaW5nLWRvdCI+PC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJ0eXBpbmctZG90Ij48L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9InR5cGluZy1kb3QiPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8IS0tIEVNT0pJIFBBTkVMIC0tPg0KICA8ZGl2IGNsYXNzPSJlbW9qaS1wYW5lbCIgaWQ9ImVtb2ppUGFuZWwiPg0KICAgIDxkaXYgY2xhc3M9ImVtb2ppLWdyaWQiIGlkPSJlbW9qaUdyaWQiPjwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8IS0tIFJFQ09SRElORyBCQVIgLS0+DQogIDxkaXYgY2xhc3M9InJlY29yZGluZy1iYXIiIGlkPSJyZWNvcmRpbmdCYXIiPg0KICAgIDxkaXYgY2xhc3M9InJlYy1kb3QiPjwvZGl2Pg0KICAgIDxzcGFuIGNsYXNzPSJyZWMtdGltZXIiIGlkPSJyZWNUaW1lciI+MDowMDwvc3Bhbj4NCiAgICA8c3BhbiBjbGFzcz0icmVjLWNhbmNlbCIgaWQ9InJlY0NhbmNlbCI+Q2FuY2VsYXI8L3NwYW4+DQogICAgPGJ1dHRvbiBjbGFzcz0iaWNvbi1idG4gcmVjLXNlbmQiIGlkPSJyZWNTZW5kIiBkYXRhLW9kLWlkPSJidG4tcmVjLXNlbmQiPg0KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0yLjAxIDIxTDIzIDEyIDIuMDEgMyAyIDEwbDE1IDItMTUgMnoiLz48L3N2Zz4NCiAgICA8L2J1dHRvbj4NCiAgPC9kaXY+DQoNCiAgPCEtLSBJTlBVVCBCQVIgLS0+DQogIDxkaXYgY2xhc3M9ImlucHV0LWJhciIgaWQ9ImlucHV0QmFyIiBkYXRhLW9kLWlkPSJpbnB1dC1iYXIiPg0KICAgIDxkaXYgY2xhc3M9ImlucHV0LWxlZnQiPg0KICAgICAgPGJ1dHRvbiBjbGFzcz0iaWNvbi1idG4iIGlkPSJlbW9qaUJ0biIgZGF0YS1vZC1pZD0iYnRuLWVtb2ppIj4NCiAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bTMuNS05Yy44MyAwIDEuNS0uNjcgMS41LTEuNVMxNi4zMyA4IDE1LjUgOCAxNCA4LjY3IDE0IDkuNXMuNjcgMS41IDEuNSAxLjV6bS03IDBjLjgzIDAgMS41LS42NyAxLjUtMS41UzkuMzMgOCA4LjUgOCA3IDguNjcgNyA5LjUgNy42NyAxMSA4LjUgMTF6bTMuNSA2LjVjMi4zMyAwIDQuMzEtMS40NiA1LjExLTMuNUg2Ljg5Yy44IDIuMDQgMi43OCAzLjUgNS4xMSAzLjV6Ii8+PC9zdmc+DQogICAgICA8L2J1dHRvbj4NCiAgICAgIDxidXR0b24gY2xhc3M9Imljb24tYnRuIiBpZD0iYXR0YWNoQnRuIiBkYXRhLW9kLWlkPSJidG4tYXR0YWNoIj4NCiAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNi41IDZ2MTEuNWMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNFY1YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjV2MTAuNWMwIC41NS0uNDUgMS0xIDFzLTEtLjQ1LTEtMVY2SDEwdjkuNWMwIDEuMzggMS4xMiAyLjUgMi41IDIuNXMyLjUtMS4xMiAyLjUtMi41VjVjMC0yLjIxLTEuNzktNC00LTRTNyAyLjc5IDcgNXYxMi41YzAgMy4wNCAyLjQ2IDUuNSA1LjUgNS41czUuNS0yLjQ2IDUuNS01LjVWNmgtMS41eiIvPjwvc3ZnPg0KICAgICAgPC9idXR0b24+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5wdXQtZmllbGQtd3JhcCI+DQogICAgICA8dGV4dGFyZWEgY2xhc3M9ImlucHV0LWZpZWxkIiBpZD0iaW5wdXRGaWVsZCIgcGxhY2Vob2xkZXI9IkRpZ2l0ZSBhcXVpLi4uIiByb3dzPSIxIiBkYXRhLW9kLWlkPSJpbnB1dC1tZXNzYWdlIj48L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxidXR0b24gY2xhc3M9Imljb24tYnRuIHNlbmQtYnRuIiBpZD0ic2VuZEJ0biIgZGF0YS1vZC1pZD0iYnRuLXNlbmQiPg0KICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0yLjAxIDIxTDIzIDEyIDIuMDEgMyAyIDEwbDE1IDItMTUgMnoiLz48L3N2Zz4NCiAgICA8L2J1dHRvbj4NCiAgICA8YnV0dG9uIGNsYXNzPSJtaWMtYnRuIiBpZD0ibWljQnRuIiBkYXRhLW9kLWlkPSJidG4tbWljIj4NCiAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgMTRjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNWMwLTEuNjYtMS4zNC0zLTMtM1M5IDMuMzQgOSA1djZjMCAxLjY2IDEuMzQgMyAzIDN6bTUuMy0zYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNCA2LjcgMTFINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMWgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43eiIvPjwvc3ZnPg0KICAgIDwvYnV0dG9uPg0KICA8L2Rpdj4NCg0KICA8IS0tIEFUVEFDSE1FTlQgTUVOVSAtLT4NCiAgPGRpdiBjbGFzcz0iYXR0YWNoLW1lbnUiIGlkPSJhdHRhY2hNZW51IiBkYXRhLW9kLWlkPSJhdHRhY2gtbWVudSI+DQogICAgPGRpdiBjbGFzcz0iYXR0YWNoLWl0ZW0iIGlkPSJhdHRhY2hJbWciPg0KICAgICAgPGRpdiBjbGFzcz0iYXR0YWNoLWljb24gaW1nIj4NCiAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIvPjwvc3ZnPg0KICAgICAgPC9kaXY+DQogICAgICA8c3Bhbj5Gb3RvIG91IFbDrWRlbzwvc3Bhbj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJhdHRhY2gtaXRlbSIgaWQ9ImF0dGFjaERvYyI+DQogICAgICA8ZGl2IGNsYXNzPSJhdHRhY2gtaWNvbiBkb2MiPg0KICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNkg4di0yaDh2MnptMC00SDh2LTJoOHYyem0tMy01VjMuNUwxOC41IDlIMTN6Ii8+PC9zdmc+DQogICAgICA8L2Rpdj4NCiAgICAgIDxzcGFuPkRvY3VtZW50bzwvc3Bhbj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJhdHRhY2gtaXRlbSIgaWQ9ImF0dGFjaEF1ZGlvIj4NCiAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaC1pY29uIGF1ZGlvIj4NCiAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMiAzdjEwLjU1Yy0uNTktLjM0LTEuMjctLjU1LTItLjU1LTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNFY3aDRWM2gtNnoiLz48L3N2Zz4NCiAgICAgIDwvZGl2Pg0KICAgICAgPHNwYW4+w4F1ZGlvPC9zcGFuPg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8IS0tIEhpZGRlbiBmaWxlIGlucHV0cyAtLT4NCiAgPGlucHV0IHR5cGU9ImZpbGUiIGFjY2VwdD0iaW1hZ2UvKiwuanBnLC5qcGVnLC5wbmcsLndlYnAsLmhlaWMsLmhlaWYiIGNsYXNzPSJoaWRkZW4iIGlkPSJmaWxlSW1nIj4NCiAgPGlucHV0IHR5cGU9ImZpbGUiIGFjY2VwdD0iLnBkZiwuZG9jLC5kb2N4LC50eHQsLmpwZywuanBlZywucG5nLC53ZWJwIiBjbGFzcz0iaGlkZGVuIiBpZD0iZmlsZURvYyI+DQoNCiAgPCEtLSBDQUxMIE9WRVJMQVkgLS0+DQogIDxkaXYgY2xhc3M9ImNhbGwtb3ZlcmxheSIgaWQ9ImNhbGxPdmVybGF5Ij4NCiAgICA8ZGl2IGNsYXNzPSJjYWxsLW92ZXJsYXktYmciPjwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImNhbGwtaGVhZGVyIj4NCiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtaGVhZGVyLWxlZnQiPg0KICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE1bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ii8+PC9zdmc+DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtaGVhZGVyLWNlbnRlciI+DQogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDE2IDE2IiBzdHlsZT0id2lkdGg6MTJweDtoZWlnaHQ6MTJweCI+PHBhdGggZD0iTTggMWE0IDQgMCAwIDAtNCA0djJIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgxMGExIDEgMCAwIDAgMS0xVjhhMSAxIDAgMCAwLTEtMWgtMVY1YTQgNCAwIDAgMC00LTR6IiBmaWxsPSJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLz48L3N2Zz4NCiAgICAgICAgPHNwYW4+UHJvdGVnaWRhIGNvbSBhIGNyaXB0b2dyYWZpYTxicj5kZSBwb250YSBhIHBvbnRhPC9zcGFuPg0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJjYWxsLWhlYWRlci1yaWdodCI+DQogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweCI+PHBhdGggZD0iTTE3IDEuMDFMNyAxYy0xLjEgMC0yIC45LTIgMnYxOGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE3IDE5SDdWNWgxMHYxNHoiIGZpbGw9InJnYmEoMjU1LDI1NSwyNTUsMC41KSIvPjwvc3ZnPg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iY2FsbC1ib2R5Ij4NCiAgICAgIDxkaXYgY2xhc3M9ImNhbGwtbmFtZSIgaWQ9ImNhbGxOYW1lIj5NZXNxdWl0YSAoUXVpbmEpPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJjYWxsLWVuY3J5cHQiPlByb3RlZ2lkYSBjb20gYSBjcmlwdG9ncmFmaWE8YnI+ZGUgcG9udGEgYSBwb250YTwvZGl2Pg0KICAgICAgPGRpdiBjbGFzcz0iY2FsbC1hdmF0YXIiPg0KICAgICAgICA8aW1nIHNyYz0iaW1hZ2UtMS5wbmciIGFsdD0iTWVzcXVpdGEgUXVpbmEiPg0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJjYWxsLXN0YXR1cyIgaWQ9ImNhbGxTdGF0dXMiPkNoYW1hbmRvLi4uPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iY2FsbC1hY3Rpb25zIj4NCiAgICAgIDxidXR0b24gY2xhc3M9ImNhbGwtYWN0aW9uLWJ0biBtb3JlIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMiIvPjxjaXJjbGUgY3g9IjE5IiBjeT0iMTIiIHI9IjIiLz48L3N2Zz48L2J1dHRvbj4NCiAgICAgIDxidXR0b24gY2xhc3M9ImNhbGwtYWN0aW9uLWJ0biBjYW1lcmEiPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTcgMTAuNVY3YzAtLjU1LS40NS0xLTEtMUg0Yy0uNTUgMC0xIC40NS0xIDF2MTBjMCAuNTUuNDUgMSAxIDFoMTJjLjU1IDAgMS0uNDUgMS0xdi0zLjVsNCA0di0xMWwtNCA0eiIvPjwvc3ZnPjwvYnV0dG9uPg0KICAgICAgPGJ1dHRvbiBjbGFzcz0iY2FsbC1hY3Rpb24tYnRuIHNwZWFrZXIiPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMyA5djZoNGw1IDVWNEw3IDlIM3ptMTMuNSAzYzAtMS43Ny0xLjAyLTMuMjktMi41LTQuMDN2OC4wNWMxLjQ4LS43MyAyLjUtMi4yNSAyLjUtNC4wMnpNMTQgMy4yM3YyLjA2YzIuODkuODYgNSAzLjU0IDUgNi43MXMtMi4xMSA1Ljg1LTUgNi43MXYyLjA2YzQuMDEtLjkxIDctNC40OSA3LTguNzdzLTIuOTktNy44Ni03LTguNzd6Ii8+PC9zdmc+PC9idXR0b24+DQogICAgICA8YnV0dG9uIGNsYXNzPSJjYWxsLWFjdGlvbi1idG4gbXV0ZSI+PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSAxMWgtMS43YzAgLjc0LS4xNiAxLjQzLS40MyAyLjA1bDEuMjMgMS4yM2MuNTYtLjk4LjktMi4wOS45LTMuMjh6bS00LjAyLjE3YzAtLjA2LjAyLS4xMS4wMi0uMTdWNWMwLTEuNjYtMS4zNC0zLTMtM1M5IDMuMzQgOSA1di4xOGw1Ljk4IDUuOTl6TTQuMjcgM0wzIDQuMjdsNi4wMSA2LjAxVjExYzAgMS42NiAxLjMzIDMgMi45OSAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNjYgMS42NmMtLjcxLjMzLTEuNS41Mi0yLjMxLjUyLTIuNzYgMC01LjMtMi4xLTUuMy01LjFINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMWgydi0zLjI4Yy45MS0uMTMgMS43Ny0uNDUgMi41NC0uOUwxOS43MyAyMSAyMSAxOS43MyA0LjI3IDN6Ii8+PC9zdmc+PC9idXR0b24+DQogICAgICA8YnV0dG9uIGNsYXNzPSJjYWxsLWFjdGlvbi1idG4gZW5kIiBpZD0iY2FsbEVuZEJ0biI+PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMiA5Yy0xLjYgMC0zLjE1LjI1LTQuNi43MnYzLjFjMCAuMzktLjIzLjc0LS41Ni45LS45OC40OS0xLjg3IDEuMTItMi42NiAxLjg1LS4xOC4xOC0uNDMuMjgtLjcuMjgtLjI4IDAtLjUzLS4xMS0uNzEtLjI5TC4yOSAxMy4wOGMtLjE4LS4xNy0uMjktLjQyLS4yOS0uNyAwLS4yOC4xMS0uNTMuMjktLjcxQzMuMzQgOC43OCA3LjQ2IDcgMTIgN3M4LjY2IDEuNzggMTEuNzEgNC42N2MuMTguMTguMjkuNDMuMjkuNzEgMCAuMjgtLjExLjUzLS4yOS43MWwtMi40OCAyLjQ4Yy0uMTguMTgtLjQzLjI5LS43MS4yOS0uMjcgMC0uNTItLjExLS43LS4yOC0uNzktLjc0LTEuNjktMS4zNi0yLjY3LTEuODUtLjMzLS4xNi0uNTYtLjUtLjU2LS45di0zLjFDMTUuMTUgOS4yNSAxMy42IDkgMTIgOXoiLz48L3N2Zz48L2J1dHRvbj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJjYWxsLW5hdiI+DQogICAgICA8c3Bhbj48L3NwYW4+DQogICAgICA8c3BhbiBjbGFzcz0iY2FsbC1uYXYtZG90Ij48L3NwYW4+DQogICAgICA8c3Bhbj48L3NwYW4+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KPC9kaXY+DQoNCjxzY3JpcHQ+DQooZnVuY3Rpb24oKSB7DQogIGNvbnN0IFdFQkhPT0tfVVJMID0gJ2h0dHBzOi8vbjhuLW44bi5zYmwwd3EuZWFzeXBhbmVsLmhvc3Qvd2ViaG9vay91cGxvYWQtcXVpbmEnOw0KICBjb25zdCBjaGF0QXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0QXJlYScpOw0KICBjb25zdCBpbnB1dEZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0RmllbGQnKTsNCiAgY29uc3Qgc2VuZEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZW5kQnRuJyk7DQogIGNvbnN0IG1pY0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWNCdG4nKTsNCiAgY29uc3QgZW1vamlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1vamlCdG4nKTsNCiAgY29uc3QgZW1vamlQYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbW9qaVBhbmVsJyk7DQogIGNvbnN0IGVtb2ppR3JpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbW9qaUdyaWQnKTsNCiAgY29uc3QgYXR0YWNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0dGFjaEJ0bicpOw0KICBjb25zdCBhdHRhY2hNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0dGFjaE1lbnUnKTsNCiAgY29uc3QgYXR0YWNoSW1nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0dGFjaEltZycpOw0KICBjb25zdCBhdHRhY2hEb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXR0YWNoRG9jJyk7DQogIGNvbnN0IGF0dGFjaEF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0dGFjaEF1ZGlvJyk7DQogIGNvbnN0IGZpbGVJbWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZUltZycpOw0KICBjb25zdCBmaWxlRG9jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVEb2MnKTsNCiAgY29uc3QgcmVjb3JkaW5nQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlY29yZGluZ0JhcicpOw0KICBjb25zdCByZWNUaW1lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNUaW1lcicpOw0KICBjb25zdCByZWNDYW5jZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVjQ2FuY2VsJyk7DQogIGNvbnN0IHJlY1NlbmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVjU2VuZCcpOw0KICBjb25zdCB0eXBpbmdJbmRpY2F0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwaW5nSW5kaWNhdG9yJyk7DQogIGNvbnN0IGlucHV0QmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0QmFyJyk7DQoNCiAgY29uc3QgZW1vamlzID0gWw0KICAgICfwn5iAJywsICfwn5iCJywsICfwn5iNJywsICfwn6WwJywsICfwn5iOJywsICfwn6SpJywsICfwn5iHJywsICfwn6WzJywsICfwn5iLJywsICfwn6SUJywNCiAgICAn8J+YjycsLCAn8J+YoicsLCAn8J+YrScsLCAn8J+YpCcsLCAn8J+krycsLCAn8J+YsScsLCAn8J+roScsLCAn8J+knScsLCAn8J+SqicsLCAn8J+ZjycsDQogICAgJ+KdpO+4jycsLCAn8J+UpScsLCAn4q2QJywsICfwn5KvJywsICfwn46JJywsICfwn5GPJywsICfinIzvuI8nLCwgJ/CfpJgnLCwgJ/Cfq7YnLCwgJ+KcqCcsDQogICAgJ/CfkY0nLCwgJ/CfkY4nLCwgJ/CfkYknLCwgJ/CfkYYnLCwgJ/Cfq7AnLCwgJ/CfkqonLCwgJ/Cfp6AnLCwgJ/CfkYAnLCwgJ/CfkYQnLCwgJ/CfprYnLA0KICAgICfwn5KAJywsICfwn5G7JywsICfwn46DJywsICfwn4yIJywsICfimIDvuI8nLCwgJ/CfjJknLCwgJ+KaoScsLCAn8J+SpycsLCAn8J+NlScsLCAn8J+NlCcsDQogICAgJ+KYlScsLCAn8J+OtScsLCAn8J+TsScsLCAn8J+SuycsLCAn8J+TuCcsLCAn8J+OrCcsLCAn4pq9JywsICfwn46uJywsICfwn4+GJywsICfinIjvuI8nLA0KICAgICfwn5qXJywsICfwn4+gJywsICfwn5KwJywsICfwn46BJywsICfwn5OmJywsICfwn5uSJywsICfwn5K8JywsICfwn5OeJywsICfinInvuI8nLCwgJ/CflJEnLA0KICAgICfwn6uCJywsICfwn5i0JywsICfwn6SvJywsICfwn6SuJywsICfwn6SnJywsICfwn6W2JywsICfwn6W1JywsICfwn6SgJywsICfwn6ShJywsICfwn5G5JywNCiAgXTsNCg0KICAvLyBCdWlsZCBlbW9qaSBncmlkDQogIGVtb2ppcy5mb3JFYWNoKGUgPT4gew0KICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7DQogICAgc3Bhbi5jbGFzc05hbWUgPSAnZW1vamktaXRlbSc7DQogICAgc3Bhbi50ZXh0Q29udGVudCA9IGU7DQogICAgc3Bhbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICAgIGlucHV0RmllbGQudmFsdWUgKz0gZTsNCiAgICAgIGlucHV0RmllbGQuZm9jdXMoKTsNCiAgICAgIHVwZGF0ZVNlbmRCdG4oKTsNCiAgICB9KTsNCiAgICBlbW9qaUdyaWQuYXBwZW5kQ2hpbGQoc3Bhbik7DQogIH0pOw0KDQogIGxldCBsYXN0TWVzc2FnZURhdGUgPSAnJzsNCg0KICBmdW5jdGlvbiBkYXRlS2V5KGQpIHsNCiAgICByZXR1cm4gZC5nZXRGdWxsWWVhcigpICsgJy0nICsgKGQuZ2V0TW9udGgoKSsxKSArICctJyArIGQuZ2V0RGF0ZSgpOw0KICB9DQoNCiAgZnVuY3Rpb24gZGF0ZUxhYmVsKGQpIHsNCiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7DQogICAgY29uc3QgeWVzdGVyZGF5ID0gbmV3IERhdGUoKTsNCiAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7DQogICAgaWYgKGRhdGVLZXkoZCkgPT09IGRhdGVLZXkodG9kYXkpKSByZXR1cm4gJ0hPSkUnOw0KICAgIGlmIChkYXRlS2V5KGQpID09PSBkYXRlS2V5KHllc3RlcmRheSkpIHJldHVybiAnT05URU0nOw0KICAgIGNvbnN0IGRheXMgPSBbJ0RPTScsJ1NFRycsJ1RFUicsJ1FVQScsJ1FVSScsJ1NFWCcsJ1NBQiddOw0KICAgIGNvbnN0IG1vbnRocyA9IFsnSkFOJywnRkVWJywnTUFSJywnQUJSJywnTUFJJywnSlVOJywnSlVMJywnQUdPJywnU0VUJywnT1VUJywnTk9WJywnREVaJ107DQogICAgcmV0dXJuIGRheXNbZC5nZXREYXkoKV0gKyAnLCAnICsgZC5nZXREYXRlKCkgKyAnIGRlICcgKyBtb250aHNbZC5nZXRNb250aCgpXTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGNoZWNrRGF0ZVNlcCgpIHsNCiAgICBjb25zdCBkID0gbmV3IERhdGUoKTsNCiAgICBjb25zdCBrZXkgPSBkYXRlS2V5KGQpOw0KICAgIGlmIChrZXkgIT09IGxhc3RNZXNzYWdlRGF0ZSkgew0KICAgICAgbGFzdE1lc3NhZ2VEYXRlID0ga2V5Ow0KICAgICAgY29uc3Qgc2VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQogICAgICBzZXAuY2xhc3NOYW1lID0gJ2RhdGUtc2VwJzsNCiAgICAgIHNlcC5pbm5lckhUTUwgPSAnPHNwYW4+JyArIGRhdGVMYWJlbChkKSArICc8L3NwYW4+JzsNCiAgICAgIGNoYXRBcmVhLmluc2VydEJlZm9yZShzZXAsIHR5cGluZ0luZGljYXRvcik7DQogICAgfQ0KICB9DQoNCiAgZnVuY3Rpb24gbm93KCkgew0KICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpOw0KICAgIHJldHVybiBkLmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJykgKyAnOicgKyBkLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsJzAnKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRvdWJsZUNoZWNrU1ZHKCkgew0KICAgIHJldHVybiAnPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTEiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxMSI+PHBhdGggZD0iTTExLjA3MS42NTNhLjQ1Ny40NTcgMCAwIDAtLjMwNC0uMTAyLjQ5My40OTMgMCAwIDAtLjM4MS4xNzhsLTYuMTkgNy42MzYtMi4wMTEtMi4xNzVhLjQ2LjQ2IDAgMCAwLS4zNTMtLjE0NS40Ny40NyAwIDAgMC0uMzM1LjEzNi40NzQuNDc0IDAgMCAwLS4wMTYuNjc4bDIuMzc1IDIuNTc0YS40NDguNDQ4IDAgMCAwIC4zNDcuMTU3aC4wMTRhLjQ3Mi40NzIgMCAwIDAgLjM1Mi0uMTc0bDYuNTM2LTguMDY2YS40NDguNDQ4IDAgMCAwLS4wMzQtLjYzOHoiIGZpbGw9IiM4Njk2YTAiLz48L3N2Zz4nOw0KICB9DQoNCiAgZnVuY3Rpb24gdGlja0hUTUwoKSB7DQogICAgcmV0dXJuICc8c3BhbiBjbGFzcz0idGljay1zaW5nbGUiPicgKyBkb3VibGVDaGVja1NWRygpICsgJzwvc3Bhbj48c3BhbiBjbGFzcz0idGljay1kb3VibGUiPjxzdmcgdmlld0JveD0iMCAwIDE2IDExIj48cGF0aCBkPSJNMTEuMDcxLjY1M2EuNDU3LjQ1NyAwIDAgMC0uMzA0LS4xMDIuNDkzLjQ5MyAwIDAgMC0uMzgxLjE3OGwtNi4xOSA3LjYzNi0yLjAxMS0yLjE3NWEuNDYuNDYgMCAwIDAtLjM1My0uMTQ1LjQ3LjQ3IDAgMCAwLS4zMzUuMTM2LjQ3NC40NzQgMCAwIDAtLjAxNi42NzhsMi4zNzUgMi41NzRhLjQ0OC40NDggMCAwIDAgLjM0Ny4xNTdoLjAxNGEuNDcyLjQ3MiAwIDAgMCAuMzUyLS4xNzRsNi41MzYtOC4wNjZhLjQ0OC40NDggMCAwIDAtLjAzNC0uNjM4eiIgZmlsbD0iIzg2OTZhMCIvPjwvc3ZnPjxzdmcgY2xhc3M9InRpY2stc2Vjb25kIiB2aWV3Qm94PSIwIDAgMTYgMTEiPjxwYXRoIGQ9Ik0xMS4wNzEuNjUzYS40NTcuNDU3IDAgMCAwLS4zMDQtLjEwMi40OTMuNDkzIDAgMCAwLS4zODEuMTc4bC02LjE5IDcuNjM2LTIuMDExLTIuMTc1YS40Ni40NiAwIDAgMC0uMzUzLS4xNDUuNDcuNDcgMCAwIDAtLjMzNS4xMzYuNDc0LjQ3NCAwIDAgMC0uMDE2LjY3OGwyLjM3NSAyLjU3NGEuNDQ4LjQ0OCAwIDAgMCAuMzQ3LjE1N2guMDE0YS40NzIuNDcyIDAgMCAwIC4zNTItLjE3NGw2LjUzNi04LjA2NmEuNDQ4LjQ0OCAwIDAgMC0uMDM0LS42Mzh6IiBmaWxsPSIjODY5NmEwIi8+PC9zdmc+PC9zcGFuPic7DQogIH0NCg0KICBmdW5jdGlvbiBhbmltYXRlVGlja3Mocm93KSB7DQogICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICBjb25zdCBzaW5nbGUgPSByb3cucXVlcnlTZWxlY3RvcignLnRpY2stc2luZ2xlJyk7DQogICAgICBjb25zdCBkb3VibGUgPSByb3cucXVlcnlTZWxlY3RvcignLnRpY2stZG91YmxlJyk7DQogICAgICBpZiAoc2luZ2xlKSBzaW5nbGUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgIGlmIChkb3VibGUpIGRvdWJsZS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOw0KICAgIH0sIDgwMCk7DQogICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICBjb25zdCB3cmFwID0gcm93LnF1ZXJ5U2VsZWN0b3IoJy50aWNrLWRvdWJsZScpOw0KICAgICAgaWYgKHdyYXApIHdyYXAuY2xhc3NMaXN0LmFkZCgndGljay1kZWxpdmVyZWQnKTsNCiAgICB9LCAxODAwKTsNCiAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgIGNvbnN0IHdyYXAgPSByb3cucXVlcnlTZWxlY3RvcignLnRpY2stZG91YmxlJyk7DQogICAgICBpZiAod3JhcCkgew0KICAgICAgICB3cmFwLmNsYXNzTGlzdC5yZW1vdmUoJ3RpY2stZGVsaXZlcmVkJyk7DQogICAgICAgIHdyYXAuY2xhc3NMaXN0LmFkZCgndGljay1yZWFkJyk7DQogICAgICB9DQogICAgfSwgMzUwMCk7DQogIH0NCg0KICBmdW5jdGlvbiBhZGRNZXNzYWdlKHRleHQsIHR5cGUpIHsNCiAgICBjaGVja0RhdGVTZXAoKTsNCiAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICByb3cuY2xhc3NOYW1lID0gJ21zZy1yb3cgJyArIHR5cGU7DQogICAgY29uc3QgdGljayA9IHR5cGUgPT09ICdvdXQnID8gJzxzcGFuIGNsYXNzPSJidWJibGUtdGljayI+JyArIHRpY2tIVE1MKCkgKyAnPC9zcGFuPicgOiAnJzsNCiAgICByb3cuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImJ1YmJsZSI+PGRpdiBjbGFzcz0iYnViYmxlLXRleHQiPicgKyB0ZXh0ICsgJzwvZGl2PjxkaXYgY2xhc3M9ImJ1YmJsZS1tZXRhIj48c3BhbiBjbGFzcz0iYnViYmxlLXRpbWUiPicgKyBub3coKSArICc8L3NwYW4+JyArIHRpY2sgKyAnPC9kaXY+PC9kaXY+JzsNCiAgICBjaGF0QXJlYS5pbnNlcnRCZWZvcmUocm93LCB0eXBpbmdJbmRpY2F0b3IpOw0KICAgIGlmICh0eXBlID09PSAnb3V0JykgYW5pbWF0ZVRpY2tzKHJvdyk7DQogICAgc2Nyb2xsQm90dG9tKCk7DQogIH0NCg0KICBmdW5jdGlvbiBhZGRJbWFnZU1lc3NhZ2UoZGF0YVVybCwgc3RhdHVzRWwpIHsNCiAgICBjaGVja0RhdGVTZXAoKTsNCiAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICByb3cuY2xhc3NOYW1lID0gJ21zZy1yb3cgb3V0JzsNCiAgICByb3cuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImJ1YmJsZSI+PGRpdiBjbGFzcz0iYnViYmxlLWltZyI+PGltZyBzcmM9IicgKyBkYXRhVXJsICsgJyIgYWx0PSJJbWFnZW0gZW52aWFkYSI+PC9kaXY+PGRpdiBjbGFzcz0iYnViYmxlLW1ldGEiPjxzcGFuIGNsYXNzPSJidWJibGUtdGltZSI+JyArIG5vdygpICsgJzwvc3Bhbj48c3BhbiBjbGFzcz0iYnViYmxlLXRpY2siPicgKyB0aWNrSFRNTCgpICsgJzwvc3Bhbj48L2Rpdj48L2Rpdj4nOw0KICAgIGNoYXRBcmVhLmluc2VydEJlZm9yZShyb3csIHR5cGluZ0luZGljYXRvcik7DQogICAgaWYgKHN0YXR1c0VsKSByb3cucXVlcnlTZWxlY3RvcignLmJ1YmJsZS1tZXRhJykuYXBwZW5kQ2hpbGQoc3RhdHVzRWwpOw0KICAgIGFuaW1hdGVUaWNrcyhyb3cpOw0KICAgIHNjcm9sbEJvdHRvbSgpOw0KICAgIHJldHVybiByb3c7DQogIH0NCg0KICAgIGZ1bmN0aW9uIGFkZEF1ZGlvTWVzc2FnZSgpIHsNCiAgICBjaGVja0RhdGVTZXAoKTsNCiAgICBjb25zdCBiYXJzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiAyOH0sICgpID0+IHsNCiAgICAgIGNvbnN0IGggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxOCkgKyA0Ow0KICAgICAgcmV0dXJuICc8c3BhbiBzdHlsZT0iaGVpZ2h0OicgKyBoICsgJ3B4Ij48L3NwYW4+JzsNCiAgICB9KS5qb2luKCcnKTsNCiAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICByb3cuY2xhc3NOYW1lID0gJ21zZy1yb3cgb3V0JzsNCiAgICByb3cuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImJ1YmJsZSI+PGRpdiBjbGFzcz0iYnViYmxlLWF1ZGlvIj48YnV0dG9uIGNsYXNzPSJhdWRpby1wbGF5Ij48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTggNXYxNGwxMS03eiIvPjwvc3ZnPjwvYnV0dG9uPjxkaXYgY2xhc3M9ImF1ZGlvLXdhdmUiPicgKyBiYXJzICsgJzwvZGl2PjxzcGFuIGNsYXNzPSJhdWRpby1kdXJhdGlvbiI+MDonICsgKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyMCkrNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJykgKyAnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImJ1YmJsZS1tZXRhIj48c3BhbiBjbGFzcz0iYnViYmxlLXRpbWUiPicgKyBub3coKSArICc8L3NwYW4+PHNwYW4gY2xhc3M9ImJ1YmJsZS10aWNrIj4nICsgdGlja0hUTUwoKSArICc8L3NwYW4+PC9kaXY+PC9kaXY+JzsNCiAgICBjaGF0QXJlYS5pbnNlcnRCZWZvcmUocm93LCB0eXBpbmdJbmRpY2F0b3IpOw0KICAgIGFuaW1hdGVUaWNrcyhyb3cpOw0KICAgIHNjcm9sbEJvdHRvbSgpOw0KICB9DQoNCiAgZnVuY3Rpb24gYWRkUGRmTWVzc2FnZShmaWxlbmFtZSwgc3RhdHVzRWwsIGZpbGVVcmwpIHsNCiAgICBjaGVja0RhdGVTZXAoKTsNCiAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICByb3cuY2xhc3NOYW1lID0gJ21zZy1yb3cgb3V0JzsNCiAgICByb3cuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImJ1YmJsZSIgc3R5bGU9Im1pbi13aWR0aDoyMjBweCcgKyAoZmlsZVVybCA/ICc7Y3Vyc29yOnBvaW50ZXInIDogJycpICsgJyI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtwYWRkaW5nOjRweCAwIj48ZGl2IHN0eWxlPSJ3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6OHB4O2JhY2tncm91bmQ6IzUxNTdhZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1zaHJpbms6MCI+PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI2ZmZiI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNkg4di0yaDh2MnptMC00SDh2LTJoOHYyem0tMy01VjMuNUwxOC41IDlIMTN6Ii8+PC9zdmc+PC9kaXY+PGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo1MDA7Y29sb3I6IzMwMzAzMDt3b3JkLWJyZWFrOmJyZWFrLWFsbCI+JyArIGZpbGVuYW1lICsgJzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2Njc3ODE7bWFyZ2luLXRvcDoycHgiPicgKyAoZmlsZVVybCA/ICdQREYgLSB0b3F1ZSBwYXJhIGFicmlyJyA6ICdQREYnKSArICc8L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJidWJibGUtbWV0YSI+PHNwYW4gY2xhc3M9ImJ1YmJsZS10aW1lIj4nICsgbm93KCkgKyAnPC9zcGFuPjxzcGFuIGNsYXNzPSJidWJibGUtdGljayI+JyArIHRpY2tIVE1MKCkgKyAnPC9zcGFuPjwvZGl2PjwvZGl2Pic7DQogICAgY2hhdEFyZWEuaW5zZXJ0QmVmb3JlKHJvdywgdHlwaW5nSW5kaWNhdG9yKTsNCiAgICBpZiAoc3RhdHVzRWwpIHJvdy5xdWVyeVNlbGVjdG9yKCcuYnViYmxlLW1ldGEnKS5hcHBlbmRDaGlsZChzdGF0dXNFbCk7DQogICAgaWYgKGZpbGVVcmwpIHsNCiAgICAgIGNvbnN0IGJ1YmJsZSA9IHJvdy5xdWVyeVNlbGVjdG9yKCcuYnViYmxlJyk7DQogICAgICBidWJibGUudGl0bGUgPSAnQWJyaXIgJyArIGZpbGVuYW1lOw0KICAgICAgYnViYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gew0KICAgICAgICB3aW5kb3cub3BlbihmaWxlVXJsLCAnX2JsYW5rJyk7DQogICAgICB9KTsNCiAgICB9DQogICAgYW5pbWF0ZVRpY2tzKHJvdyk7DQogICAgc2Nyb2xsQm90dG9tKCk7DQogICAgcmV0dXJuIHJvdzsNCiAgfQ0KICBmdW5jdGlvbiBzY3JvbGxCb3R0b20oKSB7DQogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsNCiAgICAgIGNoYXRBcmVhLnNjcm9sbFRvcCA9IGNoYXRBcmVhLnNjcm9sbEhlaWdodDsNCiAgICB9KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHVwZGF0ZVNlbmRCdG4oKSB7DQogICAgY29uc3QgaGFzVGV4dCA9IGlucHV0RmllbGQudmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7DQogICAgc2VuZEJ0bi5jbGFzc0xpc3QudG9nZ2xlKCd2aXNpYmxlJywgaGFzVGV4dCk7DQogICAgbWljQnRuLnN0eWxlLmRpc3BsYXkgPSBoYXNUZXh0ID8gJ25vbmUnIDogJ2ZsZXgnOw0KICB9DQoNCmZ1bmN0aW9uIHNldFVwbG9hZFN0YXR1cyhyb3csIHR4dCwgY29sb3IpIHsKICB2YXIgc3RhdHVzID0gcm93LnF1ZXJ5U2VsZWN0b3IoIi51cGxvYWQtc3RhdHVzIik7CiAgaWYgKCFzdGF0dXMpIHsKICAgIHN0YXR1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHN0YXR1cy5jbGFzc05hbWUgPSAidXBsb2FkLXN0YXR1cyI7CiAgICBzdGF0dXMuc3R5bGUuY3NzVGV4dCA9ICJmb250LXNpemU6MTBweDtjb2xvcjojODY5NmEwO21hcmdpbi1sZWZ0OjRweCI7CiAgICByb3cucXVlcnlTZWxlY3RvcigiLmJ1YmJsZS1tZXRhIikuYXBwZW5kQ2hpbGQoc3RhdHVzKTsKICB9CiAgc3RhdHVzLnRleHRDb250ZW50ID0gdHh0OwogIGlmIChjb2xvcikgc3RhdHVzLnN0eWxlLmNvbG9yID0gY29sb3I7CiAgcmV0dXJuIHN0YXR1czsKfQoKZnVuY3Rpb24gcG9zdEZpbGUoZm9ybURhdGEpIHsKICB2YXIgY29udHJvbGxlciA9IG51bGw7CiAgdHJ5IHsKICAgIGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgfSBjYXRjaCAoZSkgewogICAgY29udHJvbGxlciA9IG51bGw7CiAgfQogIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgdHJ5IHsKICAgICAgaWYgKGNvbnRyb2xsZXIpIGNvbnRyb2xsZXIuYWJvcnQoKTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfSwgNjAwMDApOwogIHZhciBvcHRzID0geyBtZXRob2Q6ICJQT1NUIiwgYm9keTogZm9ybURhdGEgfTsKICBpZiAoY29udHJvbGxlcikgb3B0cy5zaWduYWwgPSBjb250cm9sbGVyLnNpZ25hbDsKICByZXR1cm4gZmV0Y2goV0VCSE9PS19VUkwsIG9wdHMpLnRoZW4oCiAgICBmdW5jdGlvbiAocikgewogICAgICBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICByZXR1cm4gcjsKICAgIH0sCiAgICBmdW5jdGlvbiAoZXJyKSB7CiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgIHRocm93IGVycjsKICAgIH0sCiAgKTsKfQoKZnVuY3Rpb24gYnVpbGRGb3JtKGZpbGUsIGV4dHJhKSB7CiAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKTsKICBmZC5hcHBlbmQoImZpbGUiLCBmaWxlLCBmaWxlLm5hbWUgfHwgImNvbXByb3ZhbnRlIik7CiAgZmQuYXBwZW5kKCJmaWxlbmFtZSIsIGZpbGUubmFtZSB8fCAiY29tcHJvdmFudGUiKTsKICBmZC5hcHBlbmQoIm9yaWdpbmFsTmFtZSIsIChleHRyYSAmJiBleHRyYS5vcmlnaW5hbE5hbWUpIHx8IGZpbGUubmFtZSB8fCAiIik7CiAgZmQuYXBwZW5kKCJtaW1ldHlwZSIsIGZpbGUudHlwZSB8fCAiIik7CiAgZmQuYXBwZW5kKCJ0aXBvIiwgImNvbXByb3ZhbnRlIik7CiAgaWYgKGV4dHJhKQogICAgT2JqZWN0LmtleXMoZXh0cmEpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgaWYgKGsgIT09ICJvcmlnaW5hbE5hbWUiKSBmZC5hcHBlbmQoaywgZXh0cmFba10pOwogICAgfSk7CiAgcmV0dXJuIGZkOwp9CgpmdW5jdGlvbiBpc0ltYWdlRmlsZShmaWxlKSB7CiAgY29uc3QgbmFtZSA9IGZpbGUubmFtZSB8fCAiIjsKICByZXR1cm4gKAogICAgKGZpbGUudHlwZSB8fCAiIikuaW5kZXhPZigiaW1hZ2UvIikgPT09IDAgfHwKICAgIC9cLihqcGU/Z3xwbmd8d2VicHxoZWljfGhlaWZ8Z2lmfGJtcCkkL2kudGVzdChuYW1lKQogICk7Cn0KCi8vIENvbXByaW1lIGEgaW1hZ2VtIG5vIHByw7NwcmlvIGNlbHVsYXI6IEpQRUcgbGV2ZSBxdWUgbyBwYWluZWwgc2VtcHJlIGzDqi4KZnVuY3Rpb24gY29tcHJlc3NJbWFnZShmaWxlKSB7CiAgZnVuY3Rpb24gaXNIZWljKGYpIHsKICAgIHZhciBubSA9IFN0cmluZygoZiAmJiBmLm5hbWUpIHx8ICIiKSArICIgIiArIFN0cmluZygoZiAmJiBmLnR5cGUpIHx8ICIiKTsKICAgIHJldHVybiAvaGVpY3xoZWlmL2kudGVzdChubSk7CiAgfQogIGZ1bmN0aW9uIHJ1bihmKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKICAgICAgdmFyIHVybCA9IG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHJlc29sdmUoZmlsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIE1BWCA9IDE2MDA7CiAgICAgICAgICB2YXIgdyA9IGltZy5uYXR1cmFsV2lkdGggfHwgMTIwMCwKICAgICAgICAgICAgaCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IDE2MDA7CiAgICAgICAgICB2YXIgc2NhbGUgPSBNYXRoLm1pbigxLCBNQVggLyBNYXRoLm1heCh3LCBoKSk7CiAgICAgICAgICB3ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh3ICogc2NhbGUpKTsKICAgICAgICAgIGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGggKiBzY2FsZSkpOwogICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICAgICAgY2FudmFzLndpZHRoID0gdzsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoOwogICAgICAgICAgY2FudmFzLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGltZywgMCwgMCwgdywgaCk7CiAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7CiAgICAgICAgICBpZiAoY2FudmFzLnRvQmxvYikgewogICAgICAgICAgICBjYW52YXMudG9CbG9iKAogICAgICAgICAgICAgIGZ1bmN0aW9uIChibG9iKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBpZiAoYmxvYiAmJiB0eXBlb2YgRmlsZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZSA9IChmLm5hbWUgfHwgImNvbXByb3ZhbnRlIikucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgIC9cLlthLXowLTldKyQvaSwKICAgICAgICAgICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgKICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlKFtibG9iXSwgYmFzZSArICIuanBnIiwgeyB0eXBlOiAiaW1hZ2UvanBlZyIgfSksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGUpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiaW1hZ2UvanBlZyIsCiAgICAgICAgICAgICAgMC44MiwKICAgICAgICAgICAgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc29sdmUoZmlsZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwogICAgICAgICAgfSBjYXRjaCAoZTIpIHt9CiAgICAgICAgICByZXNvbHZlKGZpbGUpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICAgIHJlc29sdmUoZmlsZSk7CiAgICAgIH07CiAgICAgIGltZy5zcmMgPSB1cmw7CiAgICB9KTsKICB9CiAgaWYgKGlzSGVpYyhmaWxlKSAmJiB0eXBlb2YgaGVpYzJhbnkgIT09ICJ1bmRlZmluZWQiICYmIGhlaWMyYW55KSB7CiAgICB0cnkgewogICAgICByZXR1cm4gaGVpYzJhbnkoeyBibG9iOiBmaWxlLCB0b1R5cGU6ICJpbWFnZS9qcGVnIiwgcXVhbGl0eTogMC44MiB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChvdXQpIHsKICAgICAgICAgIHZhciBiID0gQXJyYXkuaXNBcnJheShvdXQpID8gb3V0WzBdIDogb3V0OwogICAgICAgICAgdmFyIGJhc2UgPSBTdHJpbmcoZmlsZS5uYW1lIHx8ICJjb21wcm92YW50ZSIpLnJlcGxhY2UoCiAgICAgICAgICAgIC9cLlthLXowLTldKyQvaSwKICAgICAgICAgICAgIiIsCiAgICAgICAgICApOwogICAgICAgICAgcmV0dXJuIHJ1bihuZXcgRmlsZShbYl0sIGJhc2UgKyAiLmpwZyIsIHsgdHlwZTogImltYWdlL2pwZWciIH0pKTsKICAgICAgICB9KQogICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gcnVuKGZpbGUpOwogICAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gcnVuKGZpbGUpOwogICAgfQogIH0KICByZXR1cm4gcnVuKGZpbGUpOwp9CgovLyBTZSBvIHBhaW5lbCByZWN1c2FyIGEgaW1hZ2VtLCByZWVudmlhIGRlbnRybyBkZSB1bSBQREYgKHNlbSByZWNhZGFzdHJhciBuYWRhKS4KZnVuY3Rpb24ganBlZ1RvUGRmQmxvYihqcGVnQmxvYiwgaW1nVywgaW1nSCkgewogIHJldHVybiBqcGVnQmxvYi5hcnJheUJ1ZmZlcigpLnRoZW4oZnVuY3Rpb24gKGJ1ZikgewogICAgY29uc3QgZml0ID0gTWF0aC5taW4oMSwgNTk1IC8gaW1nVyk7CiAgICBjb25zdCBwYWdlVyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaW1nVyAqIGZpdCkpOwogICAgY29uc3QgcGFnZUggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGltZ0ggKiBmaXQpKTsKICAgIGNvbnN0IGVuYyA9IG5ldyBUZXh0RW5jb2RlcigpOwogICAgY29uc3QganBnID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTsKICAgIGNvbnN0IHBhcnRzID0gW107CiAgICBjb25zdCBvZmZzZXRzID0gWzBdOwogICAgZnVuY3Rpb24gcHVzaChiKSB7CiAgICAgIG9mZnNldHMucHVzaChvZmZzZXRzW29mZnNldHMubGVuZ3RoIC0gMV0gKyBiLmxlbmd0aCk7CiAgICAgIHBhcnRzLnB1c2goYik7CiAgICB9CiAgICBwdXNoKGVuYy5lbmNvZGUoIiVQREYtMS40XG4iKSk7CiAgICBwdXNoKGVuYy5lbmNvZGUoIjEgMCBvYmpcbjw8IC9UeXBlIC9DYXRhbG9nIC9QYWdlcyAyIDAgUiA+PlxuZW5kb2JqXG4iKSk7CiAgICBwdXNoKAogICAgICBlbmMuZW5jb2RlKAogICAgICAgICIyIDAgb2JqXG48PCAvVHlwZSAvUGFnZXMgL0tpZHMgWzMgMCBSXSAvQ291bnQgMSA+PlxuZW5kb2JqXG4iLAogICAgICApLAogICAgKTsKICAgIHB1c2goCiAgICAgIGVuYy5lbmNvZGUoCiAgICAgICAgIjMgMCBvYmpcbjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL01lZGlhQm94IFswIDAgIiArCiAgICAgICAgICBwYWdlVyArCiAgICAgICAgICAiICIgKwogICAgICAgICAgcGFnZUggKwogICAgICAgICAgIl0gL1Jlc291cmNlcyA8PCAvWE9iamVjdCA8PCAvSW0wIDQgMCBSID4+IC9Qcm9jU2V0IFsvUERGIC9JbWFnZUNdID4+IC9Db250ZW50cyA1IDAgUiA+PlxuZW5kb2JqXG4iLAogICAgICApLAogICAgKTsKICAgIHB1c2goCiAgICAgIGVuYy5lbmNvZGUoCiAgICAgICAgIjQgMCBvYmpcbjw8IC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggIiArCiAgICAgICAgICBpbWdXICsKICAgICAgICAgICIgL0hlaWdodCAiICsKICAgICAgICAgIGltZ0ggKwogICAgICAgICAgIiAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRENURGVjb2RlIC9MZW5ndGggIiArCiAgICAgICAgICBqcGcubGVuZ3RoICsKICAgICAgICAgICIgPj5cbnN0cmVhbVxuIiwKICAgICAgKSwKICAgICk7CiAgICBwdXNoKGpwZyk7CiAgICBwdXNoKGVuYy5lbmNvZGUoIlxuZW5kc3RyZWFtXG5lbmRvYmpcbiIpKTsKICAgIGNvbnN0IG9iajVwb3MgPSBvZmZzZXRzW29mZnNldHMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBjb250ZW50ID0gZW5jLmVuY29kZSgKICAgICAgInFcbiIgKyBwYWdlVyArICIgMCAwICIgKyBwYWdlSCArICIgMCAwIGNtXG4vSW0wIERvXG5RXG4iLAogICAgKTsKICAgIHB1c2goZW5jLmVuY29kZSgiNSAwIG9ialxuPDwgL0xlbmd0aCAiICsgY29udGVudC5sZW5ndGggKyAiID4+XG5zdHJlYW1cbiIpKTsKICAgIHB1c2goY29udGVudCk7CiAgICBwdXNoKGVuYy5lbmNvZGUoImVuZHN0cmVhbVxuZW5kb2JqXG4iKSk7CiAgICBjb25zdCB4cmVmUG9zID0gb2Zmc2V0c1tvZmZzZXRzLmxlbmd0aCAtIDFdOwogICAgbGV0IHhyZWYgPSAieHJlZlxuMCA2XG4wMDAwMDAwMDAwIDY1NTM1IGYgXG4iOwogICAgY29uc3Qgb2JqT2Zmc2V0cyA9IFswLCBvZmZzZXRzWzFdLCBvZmZzZXRzWzJdLCBvZmZzZXRzWzNdLCBvZmZzZXRzWzRdLCBvYmo1cG9zXTsKICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDU7IGkrKykKICAgICAgeHJlZiArPSBTdHJpbmcob2JqT2Zmc2V0c1tpXSkucGFkU3RhcnQoMTAsICIwIikgKyAiIDAwMDAwIG4gXG4iOwogICAgcHVzaCgKICAgICAgZW5jLmVuY29kZSgKICAgICAgICB4cmVmICsKICAgICAgICAgICJ0cmFpbGVyXG48PCAvU2l6ZSA2IC9Sb290IDEgMCBSID4+XG5zdGFydHhyZWZcbiIgKwogICAgICAgICAgeHJlZlBvcyArCiAgICAgICAgICAiXG4lJUVPRiIsCiAgICAgICksCiAgICApOwogICAgcmV0dXJuIG5ldyBCbG9iKHBhcnRzLCB7IHR5cGU6ICJhcHBsaWNhdGlvbi9wZGYiIH0pOwogIH0pOwp9CgpmdW5jdGlvbiByZXRyeUltYWdlQXNQZGYoanBlZ0ZpbGUsIG9yaWdpbmFsTmFtZSwgcm93KSB7CiAgc2V0VXBsb2FkU3RhdHVzKHJvdywgImNvbnZlcnRlbmRvIGVtIFBERi4uLiIpOwogIHZhciBubVRpcG8gPSBTdHJpbmcoKG9yaWdpbmFsTmFtZSB8fCAiIikgKyAiICIgKyAoanBlZ0ZpbGUudHlwZSB8fCAiIikpLnRvTG93ZXJDYXNlKCk7CiAgaWYgKG5tVGlwby5pbmRleE9mKCJoZWljIikgPiAtMSB8fCBubVRpcG8uaW5kZXhPZigiaGVpZiIpID4gLTEpIHsKICAgIHNldFVwbG9hZFN0YXR1cyhyb3csICJFUlJPIiwgIiNlZjUzNTAiKTsKICAgIGFkZE1lc3NhZ2UoIkZvdG8gZW0gZm9ybWF0byBIRUlDIChpUGhvbmUpLiBFbnZpZSBjb21vIFBERiBvdSB0aXJlIHVtIHByaW50IGRhIHRlbGEuIiwgImluIik7CiAgICBzaW11bGF0ZVJlcGx5KCk7CiAgICByZXR1cm47CiAgfQogIHRyeSB7ICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGpwZWdGaWxlKTsKICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgY29uc3QgdyA9IGltZy5uYXR1cmFsV2lkdGggfHwgMTIwMCwKICAgICAgaCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IDE2MDA7CiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7CiAgICBqcGVnVG9QZGZCbG9iKGpwZWdGaWxlLCB3LCBoKQogICAgICAudGhlbihmdW5jdGlvbiAocGRmQmxvYikgewogICAgICAgIGNvbnN0IGJhc2UgPSAob3JpZ2luYWxOYW1lIHx8ICJjb21wcm92YW50ZSIpLnJlcGxhY2UoCiAgICAgICAgICAvXC5bYS16MC05XSskL2ksCiAgICAgICAgICAiIiwKICAgICAgICApOwogICAgICAgIGNvbnN0IHBkZkZpbGUgPSBuZXcgRmlsZShbcGRmQmxvYl0sIGJhc2UgKyAiLnBkZiIsIHsKICAgICAgICAgIHR5cGU6ICJhcHBsaWNhdGlvbi9wZGYiLAogICAgICAgIH0pOwogICAgICAgIHJldHVybiBwb3N0RmlsZSgKICAgICAgICAgIGJ1aWxkRm9ybShwZGZGaWxlLCB7CiAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAogICAgICAgICAgICBjb252ZXJzYW86ICJpbWFnZW0tcGFyYS1wZGYiLAogICAgICAgICAgfSksCiAgICAgICAgKTsKICAgICAgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIyKSB7CiAgICAgICAgaWYgKHIyLm9rKSBzZXRVcGxvYWRTdGF0dXMocm93LCAiT0siLCAiIzAwYTg4NCIpOwogICAgICAgIGVsc2Ugc2V0VXBsb2FkU3RhdHVzKHJvdywgIkVSUk8iLCAiI2VmNTM1MCIpOwogICAgICAgIHNpbXVsYXRlUmVwbHkoKTsKICAgICAgfSkKICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICBzZXRVcGxvYWRTdGF0dXMocm93LCAiRVJSTyIsICIjZWY1MzUwIik7CiAgICAgICAgc2ltdWxhdGVSZXBseSgpOwogICAgICB9KTsKICB9OwogIGltZy5vbmVycm9yID0gZnVuY3Rpb24gKCkgewogICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwogICAgc2V0VXBsb2FkU3RhdHVzKHJvdywgIkVSUk8iLCAiI2VmNTM1MCIpOwogICAgc2ltdWxhdGVSZXBseSgpOwogIH07CiAgaW1nLnNyYyA9IHVybDsKICB9IGNhdGNoIChlKSB7CiAgICBzZXRVcGxvYWRTdGF0dXMocm93LCAiRVJSTyIsICIjZWY1MzUwIik7CiAgICBhZGRNZXNzYWdlKCJOYW8gZm9pIHBvc3NpdmVsIGNvbnZlcnRlciBhIGltYWdlbS4gRW52aWUgY29tbyBQREYgb3UgcHJpbnQgZGEgdGVsYS4iLCAiaW4iKTsKICAgIHNpbXVsYXRlUmVwbHkoKTsKICB9Cn0KCmZ1bmN0aW9uIHNlbmRUb044TihmaWxlLCByb3cpIHsKICBzZXRVcGxvYWRTdGF0dXMocm93LCAiZW52aWFuZG8uLi4iKTsKICBjb25zdCBvcmlnaW5hbE5hbWUgPSBmaWxlLm5hbWUgfHwgImNvbXByb3ZhbnRlIjsKICBjb25zdCBpbWFnZSA9IGlzSW1hZ2VGaWxlKGZpbGUpOwogIGNvbnN0IHJlYWR5ID0gaW1hZ2UgPyBjb21wcmVzc0ltYWdlKGZpbGUpIDogUHJvbWlzZS5yZXNvbHZlKGZpbGUpOwogIHJlYWR5CiAgICAudGhlbihmdW5jdGlvbiAodG9TZW5kKSB7CiAgICAgIHJldHVybiBwb3N0RmlsZShidWlsZEZvcm0odG9TZW5kLCB7IG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lIH0pKS50aGVuKAogICAgICAgIGZ1bmN0aW9uIChyKSB7CiAgICAgICAgICByZXR1cm4geyByOiByLCB0b1NlbmQ6IHRvU2VuZCB9OwogICAgICAgIH0sCiAgICAgICk7CiAgICB9KQogICAgLnRoZW4oZnVuY3Rpb24gKG91dCkgewogICAgICBpZiAob3V0LnIub2spIHsKICAgICAgICBzZXRVcGxvYWRTdGF0dXMocm93LCAiT0siLCAiIzAwYTg4NCIpOwogICAgICAgIHNpbXVsYXRlUmVwbHkoKTsKICAgICAgfSBlbHNlIGlmIChpbWFnZSkgewogICAgICAgIHJldHJ5SW1hZ2VBc1BkZihvdXQudG9TZW5kLCBvcmlnaW5hbE5hbWUsIHJvdyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2V0VXBsb2FkU3RhdHVzKHJvdywgIkVSUk8iLCAiI2VmNTM1MCIpOwogICAgICAgIHNpbXVsYXRlUmVwbHkoKTsKICAgICAgfQogICAgfSkKICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgIGlmIChpbWFnZSkgewogICAgICAgIGNvbXByZXNzSW1hZ2UoZmlsZSkudGhlbihmdW5jdGlvbiAodG9TZW5kKSB7CiAgICAgICAgICByZXRyeUltYWdlQXNQZGYodG9TZW5kLCBvcmlnaW5hbE5hbWUsIHJvdyk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2V0VXBsb2FkU3RhdHVzKHJvdywgIkVSUk8iLCAiI2VmNTM1MCIpOwogICAgICAgIHNpbXVsYXRlUmVwbHkoKTsKICAgICAgfQogICAgfSk7Cn0NCg0KICAvLyBBdXRvLXJlc2l6ZSB0ZXh0YXJlYQ0KICBpbnB1dEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gew0KICAgIGlucHV0RmllbGQuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nOw0KICAgIGlucHV0RmllbGQuc3R5bGUuaGVpZ2h0ID0gTWF0aC5taW4oaW5wdXRGaWVsZC5zY3JvbGxIZWlnaHQsIDEwMCkgKyAncHgnOw0KICAgIHVwZGF0ZVNlbmRCdG4oKTsNCiAgfSk7DQoNCiAgLy8gU2VuZCBtZXNzYWdlDQogIGZ1bmN0aW9uIHNlbmRNZXNzYWdlKCkgew0KICAgIGNvbnN0IHRleHQgPSBpbnB1dEZpZWxkLnZhbHVlLnRyaW0oKTsNCiAgICBpZiAoIXRleHQpIHJldHVybjsNCiAgICBhZGRNZXNzYWdlKHRleHQsICdvdXQnKTsNCiAgICBpbnB1dEZpZWxkLnZhbHVlID0gJyc7DQogICAgaW5wdXRGaWVsZC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7DQogICAgdXBkYXRlU2VuZEJ0bigpOw0KICAgIGNsb3NlUGFuZWxzKCk7DQogIH0NCg0KICBzZW5kQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2VuZE1lc3NhZ2UpOw0KDQogIGlucHV0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7DQogICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7DQogICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICBzZW5kTWVzc2FnZSgpOw0KICAgIH0NCiAgfSk7DQoNCiAgLy8gRW1vamkgcGFuZWwNCiAgZW1vamlCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gew0KICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7DQogICAgZW1vamlQYW5lbC5jbGFzc0xpc3QudG9nZ2xlKCdvcGVuJyk7DQogICAgYXR0YWNoTWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogIH0pOw0KDQogIC8vIEF0dGFjaCBtZW51DQogIGF0dGFjaEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7DQogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsNCiAgICBhdHRhY2hNZW51LmNsYXNzTGlzdC50b2dnbGUoJ29wZW4nKTsNCiAgICBlbW9qaVBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsNCiAgfSk7DQoNCiAgYXR0YWNoSW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gew0KICAgIGZpbGVJbWcuY2xpY2soKTsNCiAgICBhdHRhY2hNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsNCiAgfSk7DQoNCiAgYXR0YWNoRG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gew0KICAgIGZpbGVEb2MuY2xpY2soKTsNCiAgICBhdHRhY2hNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsNCiAgfSk7DQoNCiAgYXR0YWNoQXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgYXR0YWNoTWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogICAgYWRkQXVkaW9NZXNzYWdlKCk7DQogIH0pOw0KDQpmaWxlSW1nLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChlKSA9PiB7CiAgY29uc3QgZmlsZSA9IGUudGFyZ2V0LmZpbGVzWzBdOwogIGlmICghZmlsZSkgcmV0dXJuOwogIGlmIChmaWxlLnNpemUgPiAxNSAqIDEwMjQgKiAxMDI0KSB7CiAgICBhZGRNZXNzYWdlKCJBcnF1aXZvIG1haW9yIHF1ZSAxNU1CLiBFbnZpZSB1bWEgZm90byBtZW5vciBvdSB1bSBQREYuIiwgImluIik7CiAgICBmaWxlSW1nLnZhbHVlID0gIiI7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgcmVhZGVyLm9ubG9hZCA9IChldikgPT4gewogICAgY29uc3Qgcm93ID0gYWRkSW1hZ2VNZXNzYWdlKGV2LnRhcmdldC5yZXN1bHQpOwogICAgc2VuZFRvTjhOKGZpbGUsIHJvdyk7CiAgfTsKICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICBmaWxlSW1nLnZhbHVlID0gIiI7Cn0pOw0KDQogIGZpbGVEb2MuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGUpID0+IHsKICBjb25zdCBmaWxlID0gZS50YXJnZXQuZmlsZXNbMF07CiAgaWYgKCFmaWxlKSByZXR1cm47CiAgaWYgKHR5cGVvZiBpc0ltYWdlRmlsZSA9PT0gImZ1bmN0aW9uIiAmJiBpc0ltYWdlRmlsZShmaWxlKSkgewogICAgaWYgKGZpbGUuc2l6ZSA+IDE1ICogMTAyNCAqIDEwMjQpIHsKICAgICAgYWRkTWVzc2FnZSgKICAgICAgICAiQXJxdWl2byBtYWlvciBxdWUgMTVNQi4gRW52aWUgdW1hIGZvdG8gbWVub3Igb3UgdW0gUERGLiIsCiAgICAgICAgImluIiwKICAgICAgKTsKICAgICAgZmlsZURvYy52YWx1ZSA9ICIiOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgcmVhZGVyLm9ubG9hZCA9IChldikgPT4gewogICAgICBjb25zdCByb3cgPSBhZGRJbWFnZU1lc3NhZ2UoZXYudGFyZ2V0LnJlc3VsdCk7CiAgICAgIHNlbmRUb044TihmaWxlLCByb3cpOwogICAgfTsKICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgZmlsZURvYy52YWx1ZSA9ICIiOwogICAgcmV0dXJuOwogIH0KICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpOwogIGNvbnN0IHJvdyA9IGFkZFBkZk1lc3NhZ2UoZmlsZS5uYW1lLCBudWxsLCB1cmwpOwogIHNlbmRUb044TihmaWxlLCByb3cpOwogIGZpbGVEb2MudmFsdWUgPSAiIjsKfSk7DQoNCg0KICAvLyBDbG9zZSBwYW5lbHMgb24gb3V0c2lkZSBjbGljaw0KICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7DQogICAgaWYgKCFlbW9qaVBhbmVsLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiBlLnRhcmdldCAhPT0gZW1vamlCdG4gJiYgIWVtb2ppQnRuLmNvbnRhaW5zKGUudGFyZ2V0KSkgew0KICAgICAgZW1vamlQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogICAgfQ0KICAgIGlmICghYXR0YWNoTWVudS5jb250YWlucyhlLnRhcmdldCkgJiYgZS50YXJnZXQgIT09IGF0dGFjaEJ0biAmJiAhYXR0YWNoQnRuLmNvbnRhaW5zKGUudGFyZ2V0KSkgew0KICAgICAgYXR0YWNoTWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogICAgfQ0KICAgIGlmICghY2hhdE1lbnUuY29udGFpbnMoZS50YXJnZXQpICYmIGUudGFyZ2V0ICE9PSBidG5NZW51ICYmICFidG5NZW51LmNvbnRhaW5zKGUudGFyZ2V0KSkgew0KICAgICAgY2hhdE1lbnUuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpOw0KICAgIH0NCiAgfSk7DQoNCiAgZnVuY3Rpb24gY2xvc2VQYW5lbHMoKSB7DQogICAgZW1vamlQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogICAgYXR0YWNoTWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogIH0NCg0KICAvLyBBdWRpbyByZWNvcmRpbmcgc2ltdWxhdGlvbg0KICBsZXQgaXNSZWNvcmRpbmcgPSBmYWxzZTsNCiAgbGV0IHJlY0ludGVydmFsID0gbnVsbDsNCiAgbGV0IHJlY1NlY29uZHMgPSAwOw0KDQogIG1pY0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICBpZiAoaXNSZWNvcmRpbmcpIHsNCiAgICAgIHN0b3BSZWNvcmRpbmcoKTsNCiAgICB9IGVsc2Ugew0KICAgICAgc3RhcnRSZWNvcmRpbmcoKTsNCiAgICB9DQogIH0pOw0KDQogIGZ1bmN0aW9uIHN0YXJ0UmVjb3JkaW5nKCkgew0KICAgIGlzUmVjb3JkaW5nID0gdHJ1ZTsNCiAgICByZWNTZWNvbmRzID0gMDsNCiAgICBtaWNCdG4uY2xhc3NMaXN0LmFkZCgncmVjb3JkaW5nJyk7DQogICAgaW5wdXRCYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICByZWNvcmRpbmdCYXIuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7DQogICAgcmVjVGltZXIudGV4dENvbnRlbnQgPSAnMDowMCc7DQogICAgcmVjSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7DQogICAgICByZWNTZWNvbmRzKys7DQogICAgICBjb25zdCBtID0gTWF0aC5mbG9vcihyZWNTZWNvbmRzIC8gNjApOw0KICAgICAgY29uc3QgcyA9IHJlY1NlY29uZHMgJSA2MDsNCiAgICAgIHJlY1RpbWVyLnRleHRDb250ZW50ID0gbSArICc6JyArIHMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOw0KICAgIH0sIDEwMDApOw0KICB9DQoNCiAgZnVuY3Rpb24gc3RvcFJlY29yZGluZygpIHsNCiAgICBpc1JlY29yZGluZyA9IGZhbHNlOw0KICAgIGNsZWFySW50ZXJ2YWwocmVjSW50ZXJ2YWwpOw0KICAgIG1pY0J0bi5jbGFzc0xpc3QucmVtb3ZlKCdyZWNvcmRpbmcnKTsNCiAgICByZWNvcmRpbmdCYXIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7DQogICAgaW5wdXRCYXIuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsNCiAgICBpZiAocmVjU2Vjb25kcyA+IDApIHsNCiAgICAgIGFkZEF1ZGlvTWVzc2FnZSgpOw0KICAgIH0NCiAgfQ0KDQogIHJlY0NhbmNlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICBpc1JlY29yZGluZyA9IGZhbHNlOw0KICAgIGNsZWFySW50ZXJ2YWwocmVjSW50ZXJ2YWwpOw0KICAgIG1pY0J0bi5jbGFzc0xpc3QucmVtb3ZlKCdyZWNvcmRpbmcnKTsNCiAgICByZWNvcmRpbmdCYXIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7DQogICAgaW5wdXRCYXIuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsNCiAgfSk7DQoNCiAgcmVjU2VuZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BSZWNvcmRpbmcpOw0KDQogIC8vIFNpbXVsYXRlZCByZXBsaWVzIC0gb25seSBmb3IgaW1hZ2VzIGFuZCBQREZzCiAgZnVuY3Rpb24gc2ltdWxhdGVSZXBseSgpIHsNCiAgICB0eXBpbmdJbmRpY2F0b3IuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7DQogICAgc2Nyb2xsQm90dG9tKCk7DQogICAgY29uc3QgZGVsYXkgPSAxMjAwICsgTWF0aC5yYW5kb20oKSAqIDE4MDA7DQogICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICB0eXBpbmdJbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7DQogICAgICBhZGRNZXNzYWdlKCdFbnZpYW5kbyBwYXJhIG8gQm9sw6NvIFF1aW5hIScsICdpbicpOw0KICAgIH0sIGRlbGF5KTsNCiAgfQ0KDQogIC8vIMOi4oCd4oKsw6LigJ3igqwgQ0FMTCBPVkVSTEFZIMOi4oCd4oKsw6LigJ3igqwNCiAgY29uc3QgY2FsbE92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FsbE92ZXJsYXknKTsNCiAgY29uc3QgY2FsbFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxsU3RhdHVzJyk7DQogIGNvbnN0IGNhbGxFbmRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FsbEVuZEJ0bicpOw0KICBjb25zdCBidG5WaWRlbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW9kLWlkPSJidG4tdmlkZW8iXScpOw0KICBjb25zdCBidG5DYWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtb2QtaWQ9ImJ0bi1jYWxsIl0nKTsNCg0KICBmdW5jdGlvbiBzdGFydENhbGwoKSB7DQogICAgY2FsbE92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7DQogICAgY2FsbFN0YXR1cy50ZXh0Q29udGVudCA9ICdDaGFtYW5kby4uLic7DQogICAgY2FsbFN0YXR1cy5jbGFzc0xpc3QucmVtb3ZlKCd1bmF2YWlsYWJsZScpOw0KICAgIHNldFRpbWVvdXQoKCkgPT4gew0KICAgICAgY2FsbFN0YXR1cy50ZXh0Q29udGVudCA9ICdJbmRpc3BvbsOtdmVsIHBhcmEgbGlnYcOnw7Vlcyc7DQogICAgICBjYWxsU3RhdHVzLmNsYXNzTGlzdC5hZGQoJ3VuYXZhaWxhYmxlJyk7DQogICAgfSwgNTAwMCk7DQogIH0NCg0KICBmdW5jdGlvbiBlbmRDYWxsKCkgew0KICAgIGNhbGxPdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOw0KICB9DQoNCiAgYnRuQ2FsbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0YXJ0Q2FsbCk7DQogIGJ0blZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3RhcnRDYWxsKTsNCiAgY2FsbEVuZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGVuZENhbGwpOw0KDQogIC8vIMOi4oCd4oKsw6LigJ3igqwgQ0hBVCBNRU5VICh0csOqcyBwb250aW5ob3MpIMOi4oCd4oKsw6LigJ3igqwNCiAgY29uc3QgYnRuTWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW9kLWlkPSJidG4tbWVudSJdJyk7DQogIGNvbnN0IGNoYXRNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXRNZW51Jyk7DQogIGNvbnN0IG1lbnVDbGVhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51Q2xlYXInKTsNCiAgY29uc3QgbWVudUV4cG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51RXhwb3J0Jyk7DQoNCiAgYnRuTWVudS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7DQogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsNCiAgICBjaGF0TWVudS5jbGFzc0xpc3QudG9nZ2xlKCdvcGVuJyk7DQogICAgZW1vamlQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogICAgYXR0YWNoTWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogIH0pOw0KDQogIG1lbnVDbGVhci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICBjaGF0TWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2NoYXRBcmVhIC5tc2ctcm93JykuZm9yRWFjaCgocikgPT4gci5yZW1vdmUoKSk7DQogICAgbGFzdE1lc3NhZ2VEYXRlID0gJyc7DQogIH0pOw0KDQogIG1lbnVFeHBvcnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgY2hhdE1lbnUuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpOw0KICAgIGNvbnN0IHJvd3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjY2hhdEFyZWEgLm1zZy1yb3cnKTsNCiAgICBpZiAoIXJvd3MubGVuZ3RoKSByZXR1cm47DQogICAgY29uc3QgbGluZXMgPSBbXTsNCiAgICByb3dzLmZvckVhY2goKHIpID0+IHsNCiAgICAgIGxldCB0ZXh0ID0gJyc7DQogICAgICBjb25zdCB0ID0gci5xdWVyeVNlbGVjdG9yKCcuYnViYmxlLXRleHQnKTsNCiAgICAgIGlmICh0KSB0ZXh0ID0gdC50ZXh0Q29udGVudDsNCiAgICAgIGVsc2UgaWYgKHIucXVlcnlTZWxlY3RvcignLmJ1YmJsZS1pbWcgaW1nJykpIHRleHQgPSAnW0ltYWdlbV0nOw0KICAgICAgZWxzZSBpZiAoci5xdWVyeVNlbGVjdG9yKCcuYnViYmxlLWF1ZGlvJykpIHRleHQgPSAnW8OBdWRpb10nOw0KICAgICAgZWxzZSB0ZXh0ID0gJ1tBcnF1aXZvXSc7DQogICAgICBjb25zdCB0aW1lID0gci5xdWVyeVNlbGVjdG9yKCcuYnViYmxlLXRpbWUnKTsNCiAgICAgIGxpbmVzLnB1c2goKHRpbWUgPyB0aW1lLnRleHRDb250ZW50IDogJycpICsgJyAtICcgKyB0ZXh0KTsNCiAgICB9KTsNCiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2xpbmVzLmpvaW4oJ1xuJyldLCB7IHR5cGU6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pOw0KICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQogICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsNCiAgICBhLmRvd25sb2FkID0gJ2NvbnZlcnNhLW1lc3F1aXRhLnR4dCc7DQogICAgYS5jbGljaygpOw0KICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKTsNCiAgfSk7DQogIC8vIEluaXRpYWwgc2Nyb2xsDQogIHNjcm9sbEJvdHRvbSgpOw0KfSkoKTsNCjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg=="}