Coast Jr Free Time V2 Assets Data LIVE (do not delete – used by the live free time page)

eyJjc3MiOiAiLypcbiAgQ29hc3QgSnVuaW9yIFdlZWsgRnJlZSBUaW1lIFJvdGF0aW9uIC0gdjIgd2lkZ2V0IENTUyAoMjAyNi0wNy0xNSlcbiAgU2FtZSB2aXN1YWwgc3lzdGVtIGFzIGNvYXN0LXBhaWQtYWN0aXZpdGllcy12Mi5jc3M6IFNlYWZvYW0gYmFja2dyb3VuZCxcbiAgd2hpdGUgcm91bmRlZCBjYXJkLCBsaXN0IC0+IGRldGFpbCBuYXZpZ2F0aW9uLiBTZWUgb3BzIGRvYzpcbiAgcHJvamVjdHMvY2FtcHMvdGhlLWNvYXN0L29wcy9jb2FzdC1qci1mcmVldGltZS13ZWJzaXRlLm1kXG4qL1xuI2pmci1hcHAge1xuICBiYWNrZ3JvdW5kOiAjMmZiOWFjO1xuICBwYWRkaW5nOiAyOHB4IDE2cHg7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGNvbG9yOiAjMWExYTFhO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuI2pmci1hcHAgKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cblxuI2pmci1jYXJkIHtcbiAgbWF4LXdpZHRoOiA0ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgcGFkZGluZzogMjRweCAyMHB4O1xufVxuXG4jamZyLXRpdGxlIHtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDI2cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbiNqZnItdXBkYXRlZCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICM3Njc2NzY7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbWFyZ2luOiA0cHggMCAyMHB4IDA7XG59XG5cbiNqZnItc3RhdHVzIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgYmFja2dyb3VuZDogI2ZmZjhlMTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2YwZDg3ODtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gIG1hcmdpbi1ib3R0b206IDEycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cblxuI2pmci1saXN0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuLmpmci1saXN0LXJvdyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1xufVxuLmpmci1zdGFyIHtcbiAgZmxleDogMCAwIGF1dG87XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiAjY2NjO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmc6IDA7XG59XG4uamZyLXN0YXIuaXMtZmF2b3JpdGVkIHsgY29sb3I6ICMyZmI5YWM7IH1cbi5qZnItbGlzdC1pdGVtIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgcGFkZGluZzogMTRweCAxMnB4IDE0cHggNHB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGJvcmRlcjogbm9uZTtcbiAgbWluLWhlaWdodDogNDhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmpmci1saXN0LWl0ZW06YWN0aXZlIHsgYmFja2dyb3VuZDogI2YwZjBmMDsgfVxuLmpmci1zZWN0aW9uLWxhYmVsIHtcbiAgcGFkZGluZzogMTJweCAxMnB4IDRweCAxMnB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gIGNvbG9yOiAjODg4O1xufVxuLmpmci1lbXB0eSB7IHBhZGRpbmc6IDE0cHggMTJweDsgY29sb3I6ICM4ODg7IGZvbnQtc2l6ZTogMTRweDsgfVxuXG4jamZyLWNvbWluZy1zb29uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwYWRkaW5nOiAzMnB4IDEycHg7XG4gIGNvbG9yOiAjNDQ0O1xufVxuI2pmci1jb21pbmctc29vbiAuamZyLWNvbWluZy1zb29uLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG4jamZyLWNvbWluZy1zb29uIC5qZnItY29taW5nLXNvb24tYm9keSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG5cbiNqZnItcGF1c2VkLW5vdGljZSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHBhZGRpbmc6IDI0cHggMTJweCA4cHg7XG4gIGNvbG9yOiAjMzMzO1xufVxuI2pmci1wYXVzZWQtbm90aWNlIC5qZnItcGF1c2VkLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4jamZyLXBhdXNlZC1ub3RpY2UgLmpmci1wYXVzZWQtYm9keSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM1NTU7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIG1hcmdpbi1ib3R0b206IDEycHg7XG59XG4jamZyLXBhdXNlZC1ub3RpY2UgLmpmci1wYXVzZWQtYm9keSBhIHsgY29sb3I6ICMxYTVmYjQ7IH1cbiNqZnItcGF1c2VkLW5vdGljZSAuamZyLXBhdXNlZC1zdGVwcy10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA2cHg7XG4gIGNvbG9yOiAjNDQ0O1xufVxuI2pmci1wYXVzZWQtbm90aWNlIC5qZnItcGF1c2VkLXN0ZXBzIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjb2xvcjogIzU1NTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICBtYXJnaW46IDA7XG59XG4jamZyLXBhdXNlZC1ub3RpY2UgLmpmci1wYXVzZWQtc3RlcHMgY29kZSB7XG4gIGJhY2tncm91bmQ6ICNmMGYwZjA7XG4gIHBhZGRpbmc6IDFweCA1cHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxuXG4jamZyLWRldGFpbCB7IHBhZGRpbmctdG9wOiA0cHg7IH1cbiNqZnItYmFjayB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6ICMwMDRmNjg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgcGFkZGluZzogOHB4IDA7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBtaW4taGVpZ2h0OiA0NHB4O1xufVxuI2pmci1kZXRhaWwtdGl0bGUge1xuICBmb250LXNpemU6IDIwcHg7XG4gIG1hcmdpbjogMCAwIDEycHggMDtcbn1cbi5qZnItZGF5LWNhcmQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTVlNWU1O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uamZyLWRheS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgZ2FwOiA4cHg7XG4gIHBhZGRpbmc6IDE0cHggMTJweDtcbiAgYmFja2dyb3VuZDogI2Y3ZjdmNztcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG1pbi1oZWlnaHQ6IDQ4cHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uamZyLWRheS1oZWFkZXI6YWN0aXZlIHsgYmFja2dyb3VuZDogI2VlZTsgfVxuLmpmci1kYXktbmFtZSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIGZsZXg6IDEgMSBhdXRvO1xufVxuLmpmci1kYXktaGVhZGVyLmlzLXRvZGF5IC5qZnItZGF5LW5hbWUgeyBjb2xvcjogIzAwNGY2ODsgfVxuLmpmci1kYXktaGVhZGVyLmlzLXRvZGF5IC5qZnItZGF5LW5hbWU6OmFmdGVyIHtcbiAgY29udGVudDogXCJUb2RheVwiO1xuICBtYXJnaW4tbGVmdDogOHB4O1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAzZW07XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kOiAjMmZiOWFjO1xuICBwYWRkaW5nOiAycHggNnB4O1xuICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5qZnItZGF5LWNvdW50IHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogIzg4ODtcbiAgZmxleDogMCAwIGF1dG87XG59XG4uamZyLWRheS1jaGV2cm9uIHtcbiAgZmxleDogMCAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGNvbG9yOiAjNjY2O1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXMgZWFzZTtcbn1cbi5qZnItZGF5LWhlYWRlclthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSAuamZyLWRheS1jaGV2cm9uIHsgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsgfVxuLmpmci1kYXktYm9keVtoaWRkZW5dIHsgZGlzcGxheTogbm9uZTsgfVxuLmpmci1lbnRyeS1saXN0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwIDRweDtcbn1cbi5qZnItZW50cnktbGlzdCBsaSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDEycHggNHB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuLmpmci10aW1lIHtcbiAgZmxleDogMCAwIDY0cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6ICMwMDRmNjg7XG59XG4uamZyLWFjdGl2aXR5IHtcbiAgZmxleDogMSAxIGF1dG87XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHBhZGRpbmc6IDAgOHB4O1xufVxuXG4vKiAtLS0tIFBhc3Njb2RlIGdhdGUgKGFkZGVkIDIwMjYtMDctMTcpIC0tLS0gKi9cbiNqZnItZ2F0ZS1hcHAge1xuICBiYWNrZ3JvdW5kOiAjMmZiOWFjO1xuICBwYWRkaW5nOiAyOHB4IDE2cHg7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4jamZyLWdhdGUtYXBwICogeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4uamZyLWdhdGUtY2FyZCB7XG4gIG1heC13aWR0aDogNDAwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBib3gtc2hhZG93OiAwIDJweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gIHBhZGRpbmc6IDMycHggMjRweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmpmci1nYXRlLWNhcmQgaDEge1xuICBtYXJnaW46IDAgMCA4cHggMDtcbiAgZm9udC1zaXplOiAyMnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogIzFhMWExYTtcbn1cbi5qZnItZ2F0ZS1zdWIge1xuICBtYXJnaW46IDAgMCAyNHB4IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM3Njc2NzY7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4jamZyLWdhdGUtaW5wdXQge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMTRweDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsZXR0ZXItc3BhY2luZzogMC4xNWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cbiNqZnItZ2F0ZS1pbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogIzJmYjlhYztcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoNDcsIDE4NSwgMTcyLCAwLjI1KTtcbn1cbiNqZnItZ2F0ZS1pbnB1dC5qZnItZ2F0ZS1lcnJvciB7XG4gIGJvcmRlci1jb2xvcjogI2MwMzkyYjtcbiAgYW5pbWF0aW9uOiBqZnItZ2F0ZS1zaGFrZSAwLjNzO1xufVxuQGtleWZyYW1lcyBqZnItZ2F0ZS1zaGFrZSB7XG4gIDI1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNHB4KTsgfVxuICA3NSUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNHB4KTsgfVxufVxuI2pmci1nYXRlLXN1Ym1pdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAxMnB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kOiAjMmZiOWFjO1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBtaW4taGVpZ2h0OiA0NHB4O1xufVxuI2pmci1nYXRlLXN1Ym1pdDphY3RpdmUgeyBiYWNrZ3JvdW5kOiAjMjc5ZTkzOyB9XG4jamZyLWdhdGUtZXJyb3ItbXNnIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjb2xvcjogI2MwMzkyYjtcbn1cbiNqZnItZ2F0ZS1lcnJvci1tc2dbaGlkZGVuXSB7IGRpc3BsYXk6IG5vbmU7IH1cbiIsICJqcyI6ICIvKlxuICBDb2FzdCBKdW5pb3IgV2VlayBGcmVlIFRpbWUgUm90YXRpb24gLSB2MiB3aWRnZXQgSlMgKDIwMjYtMDctMTUpXG4gIEJ1aWxkcyB0aGUgd2lkZ2V0J3Mgb3duIEhUTUwgc2tlbGV0b24gYW5kIGJlaGF2aW9yOyBpbmplY3RlZCBhdCBydW50aW1lIGJ5XG4gIGNvYXN0LWpyLWZyZWV0aW1lLXYyLXN0dWIuaHRtbC4gU2VlIG9wcyBkb2M6XG4gIHByb2plY3RzL2NhbXBzL3RoZS1jb2FzdC9vcHMvY29hc3QtanItZnJlZXRpbWUtd2Vic2l0ZS5tZFxuXG4gIERhdGEgc291cmNlOiBjb2FzdF9qcl9mcmVldGltZV9zeW5jLnB5IHB1Ymxpc2hlcyBiYXNlNjQtZW5jb2RlZCBKU09OXG4gIChjYWJpbnMgLT4gZGF5IC0+IFt7dGltZV9zbG90LCBhY3Rpdml0eX1dKSB0byBhIFdvcmRQcmVzcyBkYXRhIHBhZ2UsIHNhbWVcbiAgZW5jb2RpbmcgdHJpY2sgYXMgdGhlIHBhaWQgYWN0aXZpdGllcyBwaXBlbGluZSAod3BhdXRvcC93cHRleHR1cml6ZSB3b3VsZFxuICBvdGhlcndpc2UgY29ycnVwdCByYXcgSlNPTiBvbiBzYXZlKS5cblxuICBEaWZmZXJlbmNlcyBmcm9tIGNvYXN0LXBhaWQtYWN0aXZpdGllcy12Mi5qcywgcGVyIER5bGFuJ3Mgc3BlYyAoMjAyNi0wNy0xNSk6XG4gICAgLSBObyBcIkJ5IENhYmluIC8gQnkgR3JvdXBcIiB0YWIgc3dpdGNoZXIgLSBjYWJpbnMgb25seSwgb25lIGxpc3QuXG4gICAgLSBObyBjYW1wZXIgbmFtZXMgLSBlYWNoIGRheSBjYXJkIGlzIGp1c3QgVGltZSArIEFjdGl2aXR5LlxuICAgIC0gTm8gc2VhcmNoIGJhciAoZHJvcHBlZCBwZXIgRHlsYW4ncyByZXZpZXcpIC0gZmF2b3JpdGVzL3N0YXIga2VwdC5cblxuICBQQVNTQ09ERSBHQVRFIChhZGRlZCAyMDI2LTA3LTE3KTogYSBwYXNzY29kZSBzY3JlZW4gcmVuZGVycyBpbnRvICNqZnItcm9vdFxuICBiZWZvcmUgdGhlIHJlYWwgd2lkZ2V0IGRvZXMsIGFuZCBvbmx5IGJ1aWxkcyB0aGUgd2lkZ2V0IGFmdGVyIGEgdmFsaWRcbiAgY29kZS4gVGhpcyBpcyBUSEUgZXN0YWJsaXNoZWQgcGF0dGVybiBnb2luZyBmb3J3YXJkIGZvciBzaGlwcGluZyB0aGUgZ2F0ZVxuICB0byBlaXRoZXIgY2FtcHMud29sLm9yZyB3aWRnZXQgLSBpdCBsaXZlcyBlbnRpcmVseSBpbiB0aGlzIFJFU1QtcHVibGlzaGVkXG4gIEpTL0NTUywgbm90IGluIHRoZSBDb3JuZXJzdG9uZS1wYXN0ZWQgc3R1Yiwgc28gaXQgc2hpcHMgdGhlIHNhbWUgd2F5IGFzXG4gIGV2ZXJ5IG90aGVyIHVwZGF0ZTogZWRpdCB0aGlzIGZpbGUsIHJ1blxuICBjb2FzdF9qcl9mcmVldGltZV92Ml9wdWJsaXNoLnB5IC0tcHVibGlzaC4gTm8gQ29ybmVyc3RvbmUgcGFzdGUgbmVlZGVkLlxuICBNaXJyb3JzIGNvYXN0LXBhaWQtYWN0aXZpdGllcy12Mi5qcydzIGdhdGUgZXhhY3RseSwgc2FtZSBhY2NlcHRlZCBjb2Rlcy5cbiAgU2VlIHByb2plY3RzL2NhbXBzL3RoZS1jb2FzdC9vcHMvY29hc3QtcGFpZC1hY3Rpdml0aWVzLXdlYnNpdGUubWQgZm9yIHRoZVxuICBmdWxsIGhpc3RvcnkgYW5kIHRoZSBvbmUgaG9uZXN0IGNhdmVhdCAoY2xpZW50LXNpZGUgZ2F0ZSA9IG5vdCByZWFsXG4gIHNlY3VyaXR5KS5cbiovXG4oZnVuY3Rpb24gKCkge1xuICAvLyBTRVJWSUNFIFBBVVNFRCAoMjAyNi0wNy0yNik6IHRoZSBtb25kYXkuY29tIHN5bmMgYmVoaW5kIHRoaXMgcGFnZSBpc1xuICAvLyB0dXJuZWQgb2ZmIChjb2FzdF9qcl9mcmVldGltZV9jb25maWcuanNvbiBcImVuYWJsZWRcIjogZmFsc2UpIC0gc2hvd2luZyBhXG4gIC8vIHN0YXRpYyBub3RpY2UgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIHBpY2tlci9nYXRlIHVudGlsIGl0J3MgdHVybmVkIGJhY2tcbiAgLy8gb24uIFNlZSBwcm9qZWN0cy9jYW1wcy90aGUtY29hc3Qvb3BzL2NvYXN0LWpyLWZyZWV0aW1lLXdlYnNpdGUubWQuXG4gIHZhciBTRVJWSUNFX1BBVVNFRCA9IHRydWU7XG4gIHZhciBQQVVTRURfQ09OVEFDVF9FTUFJTCA9IFwiZG1mcmFua2xpbkB3b2wub3JnXCI7XG5cbiAgdmFyIERBVEFfVVJMID0gXCJodHRwczovL2NhbXBzLndvbC5vcmcvd3AtanNvbi93cC92Mi9wYWdlcy8xMDIzM1wiO1xuICB2YXIgUkVGUkVTSF9NUyA9IDEwICogNjAgKiAxMDAwOyAvLyAxMCBtaW51dGVzXG4gIHZhciBEQVlfT1JERVIgPSBbXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIl07XG4gIHZhciBTVE9SQUdFX0tFWSA9IFwiamZyX2xhc3RfZ29vZF9kYXRhXCI7XG4gIHZhciBGQVZPUklURVNfS0VZID0gXCJqZnJfZmF2b3JpdGVzXCI7XG4gIHZhciBXRUVLREFZX05BTUVTID0gW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl07XG5cbiAgLy8gLS0tLSBQYXNzY29kZSBnYXRlIGNvbmZpZyAoc2FtZSBjb2RlcyBhcyB0aGUgcGFpZCBhY3Rpdml0aWVzIHdpZGdldCkgLS0tLVxuICB2YXIgR0FURV9VTkxPQ0tfS0VZID0gXCJqZnJfZ2F0ZV91bmxvY2tlZFwiO1xuICB2YXIgR0FURV9IQVNIRVMgPSBbXG4gICAgXCI0ZTQ2MmUyZmE2OGFmYjU1Nzg0OTZlOTY0YmZlZDNhZDNjNDdhZmZmMWQ4NDI0OGM3OGFmOGNjOWMzMThkZGIzXCIsIC8vIFdFRUs3XG4gICAgXCI3ZWJlZDE3NGRlNDNmMWExMjRmYzMzNjE4MTI5NGYxZWRhODc5OGY4NmU2OTMwNGQ4ZmM3ZGY3OWI3MjI0ZDdhXCIgIC8vIFdFRUs4XG4gIF07XG5cbiAgdmFyIFNUQVJfRklMTEVEID0gJzxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48cGF0aCBkPVwiTTEyIDJsMi45IDYuOSA3LjEuNi01LjQgNC43IDEuNiA3LjFMMTIgMTcuMyA1LjggMjEuM2wxLjYtNy4xTDIgOS41bDcuMS0uNnpcIi8+PC9zdmc+JztcbiAgdmFyIFNUQVJfT1VUTElORSA9ICc8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiPjxwYXRoIGQ9XCJNMTIgMmwyLjkgNi45IDcuMS42LTUuNCA0LjcgMS42IDcuMUwxMiAxNy4zIDUuOCAyMS4zbDEuNi03LjFMMiA5LjVsNy4xLS42elwiLz48L3N2Zz4nO1xuICB2YXIgQ0hFVlJPTl9JQ09OID0gJzxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiPjxwYXRoIGQ9XCJNNiA5bDYgNiA2LTZcIi8+PC9zdmc+JztcblxuICB2YXIgc3RhdGUgPSB7IGRhdGE6IG51bGwsIGN1cnJlbnROYW1lOiBudWxsIH07XG4gIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJqZnItcm9vdFwiKTtcblxuICAvLyAtLS0tIEJ1aWxkIHRoZSB3aWRnZXQgc2tlbGV0b24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBmdW5jdGlvbiBidWlsZFNrZWxldG9uKCkge1xuICAgIHJvb3QuaW5uZXJIVE1MID1cbiAgICAgICc8ZGl2IGlkPVwiamZyLWFwcFwiPicgK1xuICAgICAgICAnPGRpdiBpZD1cImpmci1jYXJkXCI+JyArXG4gICAgICAgICAgJzxoMSBpZD1cImpmci10aXRsZVwiPkp1bmlvciBXZWVrIEZyZWUgVGltZSBSb3RhdGlvbjwvaDE+JyArXG4gICAgICAgICAgJzxkaXYgaWQ9XCJqZnItdXBkYXRlZFwiPjwvZGl2PicgK1xuICAgICAgICAgICc8ZGl2IGlkPVwiamZyLXN0YXR1c1wiPjwvZGl2PicgK1xuICAgICAgICAgICc8ZGl2IGlkPVwiamZyLWNvbWluZy1zb29uXCIgaGlkZGVuPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJqZnItY29taW5nLXNvb24tdGl0bGVcIj5Db21pbmcgU29vbjwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJqZnItY29taW5nLXNvb24tYm9keVwiPlRoZSBmcmVlIHRpbWUgcm90YXRpb24gaXNuXFwndCBwb3N0ZWQgeWV0LiBDaGVjayBiYWNrIHNob3J0bHkuPC9kaXY+JyArXG4gICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICc8ZGl2IGlkPVwiamZyLXBpY2tlclwiPjx1bCBpZD1cImpmci1saXN0XCI+PC91bD48L2Rpdj4nICtcbiAgICAgICAgICAnPGRpdiBpZD1cImpmci1kZXRhaWxcIiBoaWRkZW4+JyArXG4gICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJqZnItYmFja1wiPiZsYXJyOyBCYWNrPC9idXR0b24+JyArXG4gICAgICAgICAgICAnPGgyIGlkPVwiamZyLWRldGFpbC10aXRsZVwiPjwvaDI+JyArXG4gICAgICAgICAgICAnPGRpdiBpZD1cImpmci1kZXRhaWwtY29udGVudFwiPjwvZGl2PicgK1xuICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgJzwvZGl2PicgK1xuICAgICAgJzwvZGl2Pic7XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpmci1iYWNrXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpmci1kZXRhaWxcIikuaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiamZyLXBpY2tlclwiKS5oaWRkZW4gPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0gRmF2b3JpdGVzIChsb2NhbFN0b3JhZ2UsIHBlci1icm93c2VyL3Blci1kZXZpY2UsIG5vdCBzeW5jZWQpIC0tLS0tLS1cbiAgZnVuY3Rpb24gZ2V0RmF2b3JpdGVzKCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgcGFyc2VkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShGQVZPUklURVNfS0VZKSB8fCBcIltdXCIpO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZCA6IFtdO1xuICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFtdOyB9XG4gIH1cblxuICBmdW5jdGlvbiBpc0Zhdm9yaXRlZChuYW1lKSB7IHJldHVybiBnZXRGYXZvcml0ZXMoKS5pbmRleE9mKG5hbWUpICE9PSAtMTsgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZUZhdm9yaXRlKG5hbWUpIHtcbiAgICB2YXIgZmF2cyA9IGdldEZhdm9yaXRlcygpO1xuICAgIHZhciBpZHggPSBmYXZzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGlkeCA9PT0gLTEpIGZhdnMucHVzaChuYW1lKTsgZWxzZSBmYXZzLnNwbGljZShpZHgsIDEpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKEZBVk9SSVRFU19LRVksIEpTT04uc3RyaW5naWZ5KGZhdnMpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZVBheWxvYWQoYm9keSkge1xuICAgIHZhciByYXcgPSAoYm9keS5jb250ZW50ICYmIGJvZHkuY29udGVudC5yZW5kZXJlZCkgfHwgXCJcIjtcbiAgICB2YXIgc3RyaXBwZWQgPSByYXcucmVwbGFjZSgvPFtePl0rPi9nLCBcIlwiKS50cmltKCk7XG4gICAgdmFyIHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xuICAgIHRhLmlubmVySFRNTCA9IHN0cmlwcGVkO1xuICAgIHZhciBiNjQgPSB0YS52YWx1ZS50cmltKCk7XG4gICAgdmFyIGJpbmFyeSA9IGF0b2IoYjY0KTtcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpbmFyeS5sZW5ndGg7IGkrKykgYnl0ZXNbaV0gPSBiaW5hcnkuY2hhckNvZGVBdChpKTtcbiAgICB2YXIganNvblRleHQgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKS5kZWNvZGUoYnl0ZXMpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25UZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcbiAgICB2YXIgdXJsID0gREFUQV9VUkwgKyBcIj9fPVwiICsgRGF0ZS5ub3coKTsgLy8gY2FjaGUtYnVzdCAtIHRoZSBXUCBob3N0IGNhY2hlcyBSRVNUIHJlc3BvbnNlc1xuICAgIHJldHVybiBmZXRjaCh1cmwpXG4gICAgICAudGhlbihmdW5jdGlvbiAocikge1xuICAgICAgICBpZiAoIXIub2spIHRocm93IG5ldyBFcnJvcihcIkhUVFAgXCIgKyByLnN0YXR1cyk7XG4gICAgICAgIHJldHVybiByLmpzb24oKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihkZWNvZGVQYXlsb2FkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFN0YXR1cyhtc2cpIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpmci1zdGF0dXNcIik7XG4gICAgZWwudGV4dENvbnRlbnQgPSBtc2c7XG4gICAgZWwuc3R5bGUuZGlzcGxheSA9IG1zZyA/IFwiYmxvY2tcIiA6IFwibm9uZVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VXBkYXRlZChpc28pIHtcbiAgICBpZiAoIWlzbykgcmV0dXJuIFwiXCI7XG4gICAgdmFyIGQgPSBuZXcgRGF0ZShpc28pO1xuICAgIHJldHVybiBcIkxhc3QgdXBkYXRlZCBcIiArIGQudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgICBtb250aDogXCJzaG9ydFwiLCBkYXk6IFwibnVtZXJpY1wiLCBob3VyOiBcIm51bWVyaWNcIiwgbWludXRlOiBcIjItZGlnaXRcIlxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZERhdGEoaXNJbml0aWFsKSB7XG4gICAgaWYgKGlzSW5pdGlhbCkge1xuICAgICAgdmFyIGNhY2hlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzdGF0ZS5kYXRhID0gSlNPTi5wYXJzZShjYWNoZWQpO1xuICAgICAgICAgIHJlbmRlckNvbWluZ1Nvb25Pckxpc3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgY29ycnVwdCBjYWNoZSAqLyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hEYXRhKClcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHN0YXRlLmRhdGEgPSBkYXRhO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICBzZXRTdGF0dXMoXCJcIik7XG4gICAgICAgIHJlbmRlckNvbWluZ1Nvb25Pckxpc3QoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ29hc3QgSnIgRnJlZSBUaW1lOiBmZXRjaCBmYWlsZWRcIiwgZXJyKTtcbiAgICAgICAgaWYgKHN0YXRlLmRhdGEpIHtcbiAgICAgICAgICBzZXRTdGF0dXMoXCJDb3VsZG4ndCByZWZyZXNoIGp1c3Qgbm93IC0gc2hvd2luZyB0aGUgbGFzdCBzYXZlZCBzY2hlZHVsZS5cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0U3RhdHVzKFwiVW5hYmxlIHRvIGxvYWQgdGhlIHNjaGVkdWxlIHJpZ2h0IG5vdy4gUGxlYXNlIHRyeSBhZ2FpbiBzaG9ydGx5LlwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRTZWN0aW9uTGFiZWwobGlzdEVsLCB0ZXh0KSB7XG4gICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xuICAgIGxpLmNsYXNzTmFtZSA9IFwiamZyLXNlY3Rpb24tbGFiZWxcIjtcbiAgICBsaS50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgbGlzdEVsLmFwcGVuZENoaWxkKGxpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGVuZExpc3RSb3cobGlzdEVsLCBuYW1lKSB7XG4gICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xuICAgIGxpLmNsYXNzTmFtZSA9IFwiamZyLWxpc3Qtcm93XCI7XG5cbiAgICB2YXIgZmF2b3JpdGVkID0gaXNGYXZvcml0ZWQobmFtZSk7XG4gICAgdmFyIHN0YXJCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgIHN0YXJCdG4udHlwZSA9IFwiYnV0dG9uXCI7XG4gICAgc3RhckJ0bi5jbGFzc05hbWUgPSBcImpmci1zdGFyXCIgKyAoZmF2b3JpdGVkID8gXCIgaXMtZmF2b3JpdGVkXCIgOiBcIlwiKTtcbiAgICBzdGFyQnRuLmlubmVySFRNTCA9IGZhdm9yaXRlZCA/IFNUQVJfRklMTEVEIDogU1RBUl9PVVRMSU5FO1xuICAgIHN0YXJCdG4uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBmYXZvcml0ZWQgPyBcIlJlbW92ZSBcIiArIG5hbWUgKyBcIiBmcm9tIGZhdm9yaXRlc1wiIDogXCJBZGQgXCIgKyBuYW1lICsgXCIgdG8gZmF2b3JpdGVzXCIpO1xuICAgIHN0YXJCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdG9nZ2xlRmF2b3JpdGUobmFtZSk7XG4gICAgICByZW5kZXJMaXN0KCk7XG4gICAgfSk7XG5cbiAgICB2YXIgbmFtZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgbmFtZUJ0bi50eXBlID0gXCJidXR0b25cIjtcbiAgICBuYW1lQnRuLmNsYXNzTmFtZSA9IFwiamZyLWxpc3QtaXRlbVwiO1xuICAgIG5hbWVCdG4udGV4dENvbnRlbnQgPSBuYW1lO1xuICAgIG5hbWVCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHsgc2hvd0RldGFpbChuYW1lKTsgfSk7XG5cbiAgICBsaS5hcHBlbmRDaGlsZChzdGFyQnRuKTtcbiAgICBsaS5hcHBlbmRDaGlsZChuYW1lQnRuKTtcbiAgICBsaXN0RWwuYXBwZW5kQ2hpbGQobGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyQ29taW5nU29vbk9yTGlzdCgpIHtcbiAgICB2YXIgY29taW5nU29vbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJqZnItY29taW5nLXNvb25cIik7XG4gICAgdmFyIHBpY2tlckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJqZnItcGlja2VyXCIpO1xuICAgIHZhciBkZXRhaWxFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiamZyLWRldGFpbFwiKTtcbiAgICB2YXIgaXNFbXB0eSA9ICEhKHN0YXRlLmRhdGEgJiYgc3RhdGUuZGF0YS5yZWNvcmRfY291bnQgPT09IDApO1xuXG4gICAgY29taW5nU29vbkVsLmhpZGRlbiA9ICFpc0VtcHR5O1xuICAgIHBpY2tlckVsLmhpZGRlbiA9IGlzRW1wdHk7XG4gICAgaWYgKGlzRW1wdHkpIGRldGFpbEVsLmhpZGRlbiA9IHRydWU7XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpmci11cGRhdGVkXCIpLnRleHRDb250ZW50ID0gZm9ybWF0VXBkYXRlZChzdGF0ZS5kYXRhICYmIHN0YXRlLmRhdGEuZ2VuZXJhdGVkX2F0KTtcblxuICAgIGlmICghaXNFbXB0eSkgcmVuZGVyTGlzdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyTGlzdCgpIHtcbiAgICB2YXIgbGlzdEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJqZnItbGlzdFwiKTtcbiAgICBsaXN0RWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICBpZiAoIXN0YXRlLmRhdGEpIHJldHVybjtcblxuICAgIHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGEuY2FiaW5zKS5zb3J0KCk7XG5cbiAgICBpZiAoIW5hbWVzLmxlbmd0aCkge1xuICAgICAgdmFyIGVtcHR5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xuICAgICAgZW1wdHkuY2xhc3NOYW1lID0gXCJqZnItZW1wdHlcIjtcbiAgICAgIGVtcHR5LnRleHRDb250ZW50ID0gXCJObyBtYXRjaGVzLlwiO1xuICAgICAgbGlzdEVsLmFwcGVuZENoaWxkKGVtcHR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZhdlNldCA9IGdldEZhdm9yaXRlcygpO1xuICAgICAgdmFyIGZhdm9yaXRlTmFtZXMgPSBuYW1lcy5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIGZhdlNldC5pbmRleE9mKG4pICE9PSAtMTsgfSk7XG4gICAgICB2YXIgb3RoZXJOYW1lcyA9IG5hbWVzLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gZmF2U2V0LmluZGV4T2YobikgPT09IC0xOyB9KTtcblxuICAgICAgaWYgKGZhdm9yaXRlTmFtZXMubGVuZ3RoKSB7XG4gICAgICAgIGFwcGVuZFNlY3Rpb25MYWJlbChsaXN0RWwsIFwiRmF2b3JpdGVzXCIpO1xuICAgICAgICBmYXZvcml0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsgYXBwZW5kTGlzdFJvdyhsaXN0RWwsIG5hbWUpOyB9KTtcbiAgICAgICAgaWYgKG90aGVyTmFtZXMubGVuZ3RoKSBhcHBlbmRTZWN0aW9uTGFiZWwobGlzdEVsLCBcIkFsbFwiKTtcbiAgICAgIH1cbiAgICAgIG90aGVyTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgeyBhcHBlbmRMaXN0Um93KGxpc3RFbCwgbmFtZSk7IH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3dEZXRhaWwobmFtZSkge1xuICAgIHN0YXRlLmN1cnJlbnROYW1lID0gbmFtZTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmRhdGEuY2FiaW5zW25hbWVdIHx8IFtdO1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJqZnItZGV0YWlsLXRpdGxlXCIpLnRleHRDb250ZW50ID0gbmFtZTtcbiAgICB2YXIgY29udGVudEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJqZnItZGV0YWlsLWNvbnRlbnRcIik7XG4gICAgY29udGVudEVsLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICB2YXIgYnlEYXkgPSB7fTtcbiAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIChieURheVtlLmRheV0gPSBieURheVtlLmRheV0gfHwgW10pLnB1c2goZSk7XG4gICAgfSk7XG5cbiAgICB2YXIgdG9kYXlOYW1lID0gV0VFS0RBWV9OQU1FU1tuZXcgRGF0ZSgpLmdldERheSgpXTtcbiAgICB2YXIgZGVmYXVsdEV4cGFuZERheSA9IGJ5RGF5W3RvZGF5TmFtZV0gPyB0b2RheU5hbWUgOiAoREFZX09SREVSLmZpbHRlcihmdW5jdGlvbiAoZCkgeyByZXR1cm4gYnlEYXlbZF07IH0pWzBdIHx8IG51bGwpO1xuXG4gICAgdmFyIGFueVJlbmRlcmVkID0gZmFsc2U7XG4gICAgREFZX09SREVSLmZvckVhY2goZnVuY3Rpb24gKGRheSkge1xuICAgICAgaWYgKCFieURheVtkYXldKSByZXR1cm47XG4gICAgICBhbnlSZW5kZXJlZCA9IHRydWU7XG4gICAgICB2YXIgaXNFeHBhbmRlZCA9IGRheSA9PT0gZGVmYXVsdEV4cGFuZERheTtcblxuICAgICAgdmFyIGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY2FyZC5jbGFzc05hbWUgPSBcImpmci1kYXktY2FyZFwiO1xuXG4gICAgICB2YXIgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICAgIGhlYWRlci50eXBlID0gXCJidXR0b25cIjtcbiAgICAgIGhlYWRlci5jbGFzc05hbWUgPSBcImpmci1kYXktaGVhZGVyXCIgKyAoZGF5ID09PSB0b2RheU5hbWUgPyBcIiBpcy10b2RheVwiIDogXCJcIik7XG4gICAgICBoZWFkZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBpc0V4cGFuZGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIpO1xuXG4gICAgICB2YXIgbmFtZVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIG5hbWVTcGFuLmNsYXNzTmFtZSA9IFwiamZyLWRheS1uYW1lXCI7XG4gICAgICBuYW1lU3Bhbi50ZXh0Q29udGVudCA9IGRheTtcblxuICAgICAgdmFyIGNvdW50U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgY291bnRTcGFuLmNsYXNzTmFtZSA9IFwiamZyLWRheS1jb3VudFwiO1xuICAgICAgY291bnRTcGFuLnRleHRDb250ZW50ID0gYnlEYXlbZGF5XS5sZW5ndGggKyAoYnlEYXlbZGF5XS5sZW5ndGggPT09IDEgPyBcIiBzbG90XCIgOiBcIiBzbG90c1wiKTtcblxuICAgICAgdmFyIGNoZXZyb25TcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBjaGV2cm9uU3Bhbi5jbGFzc05hbWUgPSBcImpmci1kYXktY2hldnJvblwiO1xuICAgICAgY2hldnJvblNwYW4uaW5uZXJIVE1MID0gQ0hFVlJPTl9JQ09OO1xuXG4gICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQobmFtZVNwYW4pO1xuICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNvdW50U3Bhbik7XG4gICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoY2hldnJvblNwYW4pO1xuXG4gICAgICB2YXIgdWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XG4gICAgICB1bC5jbGFzc05hbWUgPSBcImpmci1lbnRyeS1saXN0IGpmci1kYXktYm9keVwiO1xuICAgICAgdWwuaGlkZGVuID0gIWlzRXhwYW5kZWQ7XG5cbiAgICAgIGJ5RGF5W2RheV0uZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG5cbiAgICAgICAgdmFyIHRpbWVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgIHRpbWVTcGFuLmNsYXNzTmFtZSA9IFwiamZyLXRpbWVcIjtcbiAgICAgICAgdGltZVNwYW4udGV4dENvbnRlbnQgPSBlLnRpbWVfc2xvdCB8fCBcIlwiO1xuXG4gICAgICAgIHZhciBhY3Rpdml0eVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgICAgYWN0aXZpdHlTcGFuLmNsYXNzTmFtZSA9IFwiamZyLWFjdGl2aXR5XCI7XG4gICAgICAgIGFjdGl2aXR5U3Bhbi50ZXh0Q29udGVudCA9IGUuYWN0aXZpdHkgfHwgXCJcIjtcblxuICAgICAgICBsaS5hcHBlbmRDaGlsZCh0aW1lU3Bhbik7XG4gICAgICAgIGxpLmFwcGVuZENoaWxkKGFjdGl2aXR5U3Bhbik7XG4gICAgICAgIHVsLmFwcGVuZENoaWxkKGxpKTtcbiAgICAgIH0pO1xuXG4gICAgICBoZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGV4cGFuZGVkID0gaGVhZGVyLmdldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIikgPT09IFwidHJ1ZVwiO1xuICAgICAgICBoZWFkZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBleHBhbmRlZCA/IFwiZmFsc2VcIiA6IFwidHJ1ZVwiKTtcbiAgICAgICAgdWwuaGlkZGVuID0gZXhwYW5kZWQ7XG4gICAgICB9KTtcblxuICAgICAgY2FyZC5hcHBlbmRDaGlsZChoZWFkZXIpO1xuICAgICAgY2FyZC5hcHBlbmRDaGlsZCh1bCk7XG4gICAgICBjb250ZW50RWwuYXBwZW5kQ2hpbGQoY2FyZCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWFueVJlbmRlcmVkKSB7XG4gICAgICB2YXIgbm9uZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICAgICAgbm9uZS50ZXh0Q29udGVudCA9IFwiTm8gYWN0aXZpdGllcyBmb3VuZCBmb3IgdGhpcyBjYWJpbi5cIjtcbiAgICAgIGNvbnRlbnRFbC5hcHBlbmRDaGlsZChub25lKTtcbiAgICB9XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpmci1waWNrZXJcIikuaGlkZGVuID0gdHJ1ZTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpmci1kZXRhaWxcIikuaGlkZGVuID0gZmFsc2U7XG4gIH1cblxuICAvLyAtLS0tIFBhc3Njb2RlIGdhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZnVuY3Rpb24gc2hhMjU2SGV4KHRleHQpIHtcbiAgICB2YXIgZW5jID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHRleHQpO1xuICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRpZ2VzdChcIlNIQS0yNTZcIiwgZW5jKS50aGVuKGZ1bmN0aW9uIChoYXNoQnVmZmVyKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgIHJldHVybiBieXRlcy5tYXAoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKTsgfSkuam9pbihcIlwiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJvb3RXaWRnZXQoKSB7XG4gICAgYnVpbGRTa2VsZXRvbigpO1xuICAgIGxvYWREYXRhKHRydWUpO1xuICAgIHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsgbG9hZERhdGEoZmFsc2UpOyB9LCBSRUZSRVNIX01TKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3dHYXRlKCkge1xuICAgIHJvb3QuaW5uZXJIVE1MID1cbiAgICAgICc8ZGl2IGlkPVwiamZyLWdhdGUtYXBwXCI+JyArXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiamZyLWdhdGUtY2FyZFwiPicgK1xuICAgICAgICAgICc8aDE+SnVuaW9yIFdlZWsgRnJlZSBUaW1lIFJvdGF0aW9uPC9oMT4nICtcbiAgICAgICAgICAnPHAgY2xhc3M9XCJqZnItZ2F0ZS1zdWJcIj5FbnRlciBwYXNzY29kZSB0byBhY2Nlc3MgdGhpcyBzaXRlPC9wPicgK1xuICAgICAgICAgICc8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImpmci1nYXRlLWlucHV0XCIgbWF4bGVuZ3RoPVwiNVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGF1dG9jYXBpdGFsaXplPVwiY2hhcmFjdGVyc1wiIHBsYWNlaG9sZGVyPVwiQ09ERVwiPicgK1xuICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImpmci1nYXRlLXN1Ym1pdFwiPlVubG9jazwvYnV0dG9uPicgK1xuICAgICAgICAgICc8ZGl2IGlkPVwiamZyLWdhdGUtZXJyb3ItbXNnXCIgaGlkZGVuPkluY29ycmVjdCBjb2RlLiBQbGVhc2UgdHJ5IGFnYWluLjwvZGl2PicgK1xuICAgICAgICAnPC9kaXY+JyArXG4gICAgICAnPC9kaXY+JztcblxuICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiamZyLWdhdGUtaW5wdXRcIik7XG4gICAgdmFyIGVycm9yTXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJqZnItZ2F0ZS1lcnJvci1tc2dcIik7XG5cbiAgICBmdW5jdGlvbiBzaG93RXJyb3IoKSB7XG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKFwiamZyLWdhdGUtZXJyb3JcIik7XG4gICAgICBlcnJvck1zZy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiamZyLWdhdGUtZXJyb3JcIik7XG4gICAgICAgIGlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgIH0sIDM1MCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJ5VW5sb2NrKCkge1xuICAgICAgdmFyIGNvZGUgPSBpbnB1dC52YWx1ZS50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICAgIGlmIChjb2RlLmxlbmd0aCAhPT0gNSkgeyBzaG93RXJyb3IoKTsgcmV0dXJuOyB9XG4gICAgICBzaGEyNTZIZXgoY29kZSkudGhlbihmdW5jdGlvbiAoaGFzaCkge1xuICAgICAgICBpZiAoR0FURV9IQVNIRVMuaW5kZXhPZihoYXNoKSAhPT0gLTEpIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShHQVRFX1VOTE9DS19LRVksIFwiMVwiKTtcbiAgICAgICAgICBib290V2lkZ2V0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvd0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBmdW5jdGlvbiAoKSB7IGlucHV0LnZhbHVlID0gaW5wdXQudmFsdWUudG9VcHBlckNhc2UoKTsgfSk7XG4gICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgZnVuY3Rpb24gKGUpIHsgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHRyeVVubG9jaygpOyB9KTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpmci1nYXRlLXN1Ym1pdFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdHJ5VW5sb2NrKTtcbiAgICBpbnB1dC5mb2N1cygpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvd1BhdXNlZE5vdGljZSgpIHtcbiAgICByb290LmlubmVySFRNTCA9XG4gICAgICAnPGRpdiBpZD1cImpmci1hcHBcIj4nICtcbiAgICAgICAgJzxkaXYgaWQ9XCJqZnItY2FyZFwiPicgK1xuICAgICAgICAgICc8aDEgaWQ9XCJqZnItdGl0bGVcIj5KdW5pb3IgV2VlayBGcmVlIFRpbWUgUm90YXRpb248L2gxPicgK1xuICAgICAgICAgICc8ZGl2IGlkPVwiamZyLXBhdXNlZC1ub3RpY2VcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiamZyLXBhdXNlZC10aXRsZVwiPlRoaXMgc2NoZWR1bGUgaXMgdGVtcG9yYXJpbHkgcGF1c2VkPC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cImpmci1wYXVzZWQtYm9keVwiPicgK1xuICAgICAgICAgICAgICAnVGhpcyBwYWdlIG5vcm1hbGx5IHNob3dzIGVhY2ggY2FiaW5cXCdzIGp1bmlvciB3ZWVrIGZyZWUtdGltZSByb3RhdGlvbiAnICtcbiAgICAgICAgICAgICAgJyhjYWJpbiwgZGF5LCBhbmQgdGltZSBzbG90LCB3aXRoIHRoYXQgc2xvdFxcJ3MgYWN0aXZpdHkpLCBzeW5jZWQgYXV0b21hdGljYWxseSBmcm9tIG91ciBzY2hlZHVsaW5nIGJvYXJkLiAnICtcbiAgICAgICAgICAgICAgJ1RoYXQgYXV0b21hdGljIHN5bmMgaXMgc3dpdGNoZWQgb2ZmIHJpZ2h0IG5vdywgc28gdGhlIHNjaGVkdWxlIHNob3duIGhlcmUgbWF5IGJlIG91dCBvZiBkYXRlLicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJqZnItcGF1c2VkLWJvZHlcIj4nICtcbiAgICAgICAgICAgICAgJ1F1ZXN0aW9ucywgb3IgbmVlZCB0aGlzIGJhY2sgdXAgYW5kIHJ1bm5pbmc/IENvbnRhY3QgRHlsYW4gRnJhbmtsaW4gYXQgJyArXG4gICAgICAgICAgICAgICc8YSBocmVmPVwibWFpbHRvOicgKyBQQVVTRURfQ09OVEFDVF9FTUFJTCArICdcIj4nICsgUEFVU0VEX0NPTlRBQ1RfRU1BSUwgKyAnPC9hPi4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiamZyLXBhdXNlZC1zdGVwcy10aXRsZVwiPlRvIHR1cm4gaXQgYmFjayBvbjo8L2Rpdj4nICtcbiAgICAgICAgICAgICc8b2wgY2xhc3M9XCJqZnItcGF1c2VkLXN0ZXBzXCI+JyArXG4gICAgICAgICAgICAgICc8bGk+T3BlbiA8Y29kZT5jb2FzdF9qcl9mcmVldGltZV9jb25maWcuanNvbjwvY29kZT4gYW5kIHNldCA8Y29kZT5cImVuYWJsZWRcIjwvY29kZT4gYmFjayB0byA8Y29kZT50cnVlPC9jb2RlPi48L2xpPicgK1xuICAgICAgICAgICAgICAnPGxpPk9wZW4gPGNvZGU+Y29hc3QtanItZnJlZXRpbWUtdjIuanM8L2NvZGU+IGFuZCBzZXQgPGNvZGU+U0VSVklDRV9QQVVTRUQ8L2NvZGU+IGJhY2sgdG8gPGNvZGU+ZmFsc2U8L2NvZGU+LjwvbGk+JyArXG4gICAgICAgICAgICAgICc8bGk+UnVuIDxjb2RlPmNvYXN0X2pyX2ZyZWV0aW1lX3YyX3B1Ymxpc2gucHkgLS1wdWJsaXNoIGxpdmU8L2NvZGU+IHRvIHB1c2ggdGhpcyBwYWdlIGxpdmUgYWdhaW4uPC9saT4nICtcbiAgICAgICAgICAgICAgJzxsaT5UaGUgYXV0b21hdGljIHN5bmMgcmVzdW1lcyBvbiBpdHMgbm9ybWFsIHNjaGVkdWxlIChldmVyeSAxNSBtaW51dGVzKSBvbmNlIHJlLWVuYWJsZWQuPC9saT4nICtcbiAgICAgICAgICAgICc8L29sPicgK1xuICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgJzwvZGl2PicgK1xuICAgICAgJzwvZGl2Pic7XG4gIH1cblxuICAvLyAtLS0tIEluaXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGlmIChTRVJWSUNFX1BBVVNFRCkge1xuICAgIHNob3dQYXVzZWROb3RpY2UoKTtcbiAgfSBlbHNlIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShHQVRFX1VOTE9DS19LRVkpID09PSBcIjFcIikge1xuICAgIGJvb3RXaWRnZXQoKTtcbiAgfSBlbHNlIHtcbiAgICBzaG93R2F0ZSgpO1xuICB9XG59KSgpO1xuIn0=