Reviews clone
PHN0eWxlPgoKCi53cmFwcGVyewogICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6MCAyMHB4IDAgMCAyMHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi53cmFwcGVyIGl7CiAgICB3aWR0aDogMzBweDsKICAgIGNvbG9yOiMyNzQyNjk7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBmb250LXNpemU6IDI2cHg7CiAgICBwYWRkaW5nOiA1cHggMDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDYwJTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwoKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNjAlKTsKfQoKLndyYXBwZXIgaTpmaXJzdC1jaGlsZHsKICAgIGxlZnQ6IC0zMnB4OwogIAp9Cgoud3JhcHBlciBpOmxhc3QtY2hpbGR7CiAgICByaWdodDogLTMycHg7Cn0KCi53cmFwcGVyIC5jYXJvdXNlbCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjsKICAgIGdyaWQtYXV0by1jb2x1bW5zOiBjYWxjKCgxMDAlIC8gNCkgLSAtOHB4KTsKICAgIGdhcDogM3B4OwogICAgcGFkZGluZy10b3A6IDEwMHB4OwogIAkgIHdpZHRoOjEwMCU7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgc2Nyb2xsLXNuYXAtdHlwZTogeCBtYW5kYXRvcnk7CiAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsKICAgIHNjcm9sbGJhci13aWR0aDogMDsKfQoKLmNhcm91c2VsOjotd2Via2l0LXNjcm9sbGJhcnsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5jYXJvdXNlbC5uby10cmFuc2l0aW9uewogICAgc2Nyb2xsLWJlaGF2aW9yOiBhdXRvOwp9CgoKLmNhcm91c2VsLmRyYWdnaW5newogICAgc2Nyb2xsLXNuYXAtdHlwZTogbm9uZTsKICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0bzsKfQoKLmNhcm91c2VsLmRyYWdnaW5nIC5jYXJkewogICAgY3Vyc29yOiBncmFiOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5jYXJvdXNlbCAuY2FyZHsKICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDsKICAgIGhlaWdodDogMjYwcHg7CiAgICBtYXgtaGVpZ2h0OiAyNjBweDsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiAjMmU0YTZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGJvcmRlci1yYWRpdXM6MHB4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoKCi5jYXJkIC5pbWd7CiAgICB3aWR0aDogMTIwcHg7CiAgICBoZWlnaHQ6IDEyMHB4OwogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIGJvcmRlcjo1cHggc29saWQgIzJlNGE2ZTsKICAgIG1hcmdpbi10b3A6IC00MHB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouY2FyZCAuaW1nIGltZ3sKICAgIHdpZHRoOiAxMDBweDsKICAgIGhlaWdodDogMTAwcHg7CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwp9CgouY2FyZCAuY29udGVudC1jYXJkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgcGFkZGluZzogMjBweCAzMHB4Owp9CgouY2FyZCAuY29udGVudC1jYXJkIGgyewogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMDsKICAgIGZvbnQtc2l6ZToyMHB4OwogICAgZm9udC13ZWlnaHQ6NzAwOwogICAgY29sb3I6ICNkOGMyMDA7Cn0KCi5jYXJkIC5jb250ZW50LWNhcmQgcHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiAjZmZmOwogICAgZm9udC1zaXplOiAxNHB4Owp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5MDBweCl7CiAgICAud3JhcHBlciAuY2Fyb3VzZWwgewogICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiBjYWxjKCgxMDAlIC8gMikgLSAtMjRweCk7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLmNvbnRlbnQtY2Fyb3VzZWx7CiAgICAgICAgcGFkZGluZzogNjBweDsKICAgIH0KCiAgICAKfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpewogICAgLndyYXBwZXIgLmNhcm91c2VsIHsKICAgICAgICBncmlkLWF1dG8tY29sdW1uczogY2FsYygoMTAwJSAvIDEpIC0gLTQycHgpOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIC5jb250ZW50LWNhcm91c2VsewogICAgICAgIHBhZGRpbmc6IDMwcHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgfQoKICAgIC5jYXJkewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgfQogIAogICAgLmNhcmR7CiAgICAgCiAgICAgIG1hcmdpbjowIDUwcHggMCAwIDUwcHg7CgkJICAgIH0KICAKICAgIC53cmFwcGVyIGl7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgcGFkZGluZzogMXB4IDAgNnB4IDA7CiAgICAgICAgCiAgICB9CgogICAgLndyYXBwZXIgaTpmaXJzdC1jaGlsZHsKICAgICAgICBsZWZ0OiAtMzJweDsKICAgICAgICB6LWluZGV4OjEwOwoKICAgIH0KCiAgICAud3JhcHBlciBpOmxhc3QtY2hpbGR7CiAgICAgICAgcmlnaHQ6IC0zMnB4OwogICAgfQp9Cjwvc3R5bGU+CgoKICAgICAgICA8ZGl2IGNsYXNzPSJ3cmFwcGVyIj4KICAgICAgICAgICAgPGkgaWQ9ImxlZnQiIGNsYXNzPSJmYS1hbmdsZS1sZWZ0IGZhcyI+PC9pPgogICAgICAgICAgICA8dWwgY2xhc3M9ImNhcm91c2VsIj4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW1nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vdmlkYWRlbnRhbGNvcmFsZ2FibGVzLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMi8xMS9pY29uXzIucG5nIiBkcmFnZ2FibGU9ImZhbHNlIiBhbHQ9IiI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJmb250LXNpemU6MjBweDsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjojYmE5YjQ3OyBwYWRkaW5nOiAwIDAgMjBweCAwIj5UaXRsZSBDb250ZW50PC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+QXJlIHlvdSBleHBlcmllbmNpbmcgdG9vdGggcGFpbiBvciBkaXNjb21mb3J0PyBXZSBvZmZlciBlbWVyZ2VuY3kgZGVudGlzdHJ5IGZvciBwYXRpZW50cyBsb29raW5nIGZvciBhbiBlbWVyZ2VuY3kgZGVudGlzdCBpbiBDaGFybG90dGUgTkMuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW1nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vdmlkYWRlbnRhbGNvcmFsZ2FibGVzLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMi8xMS9pY29uXzIucG5nIiBkcmFnZ2FibGU9ImZhbHNlIiBhbHQ9IiI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJmb250LXNpemU6MjBweDsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjojYmE5YjQ3OyBwYWRkaW5nOiAwIDAgMjBweCAwIj5UaXRsZSBDb250ZW50PC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+QXJlIHlvdSBleHBlcmllbmNpbmcgdG9vdGggcGFpbiBvciBkaXNjb21mb3J0PyBXZSBvZmZlciBlbWVyZ2VuY3kgZGVudGlzdHJ5IGZvciBwYXRpZW50cyBsb29raW5nIGZvciBhbiBlbWVyZ2VuY3kgZGVudGlzdCBpbiBDaGFybG90dGUgTkMuPC9wPgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL3ZpZGFkZW50YWxjb3JhbGdhYmxlcy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjIvMTEvaWNvbl8yLnBuZyIgZHJhZ2dhYmxlPSJmYWxzZSIgYWx0PSIiPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBzdHlsZT0iZm9udC1zaXplOjIwcHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6I2JhOWI0NzsgcGFkZGluZzogMCAwIDIwcHggMCI+VGl0bGUgQ29udGVudDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFyZSB5b3UgZXhwZXJpZW5jaW5nIHRvb3RoIHBhaW4gb3IgZGlzY29tZm9ydD8gV2Ugb2ZmZXIgZW1lcmdlbmN5IGRlbnRpc3RyeSBmb3IgcGF0aWVudHMgbG9va2luZyBmb3IgYW4gZW1lcmdlbmN5IGRlbnRpc3QgaW4gQ2hhcmxvdHRlIE5DLjwvcD4KCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJjYXJkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWciPgogICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly92aWRhZGVudGFsY29yYWxnYWJsZXMuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIyLzExL2ljb25fMi5wbmciIGRyYWdnYWJsZT0iZmFsc2UiIGFsdD0iIj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDIgc3R5bGU9ImZvbnQtc2l6ZToyMHB4OyBmb250LXdlaWdodDo3MDA7IGNvbG9yOiNiYTliNDc7IHBhZGRpbmc6IDAgMCAyMHB4IDAiPlRpdGxlIENvbnRlbnQ8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5BcmUgeW91IGV4cGVyaWVuY2luZyB0b290aCBwYWluIG9yIGRpc2NvbWZvcnQ/IFdlIG9mZmVyIGVtZXJnZW5jeSBkZW50aXN0cnkgZm9yIHBhdGllbnRzIGxvb2tpbmcgZm9yIGFuIGVtZXJnZW5jeSBkZW50aXN0IGluIENoYXJsb3R0ZSBOQy48L3A+CgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW1nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vdmlkYWRlbnRhbGNvcmFsZ2FibGVzLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMi8xMS9pY29uXzIucG5nIiBkcmFnZ2FibGU9ImZhbHNlIiBhbHQ9IiI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJmb250LXNpemU6MjBweDsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjojYmE5YjQ3OyBwYWRkaW5nOiAwIDAgMjBweCAwIj5UaXRsZSBDb250ZW50PC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+QXJlIHlvdSBleHBlcmllbmNpbmcgdG9vdGggcGFpbiBvciBkaXNjb21mb3J0PyBXZSBvZmZlciBlbWVyZ2VuY3kgZGVudGlzdHJ5IGZvciBwYXRpZW50cyBsb29raW5nIGZvciBhbiBlbWVyZ2VuY3kgZGVudGlzdCBpbiBDaGFybG90dGUgTkMuPC9wPgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL3ZpZGFkZW50YWxjb3JhbGdhYmxlcy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjIvMTEvaWNvbl8yLnBuZyIgZHJhZ2dhYmxlPSJmYWxzZSIgYWx0PSIiPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBzdHlsZT0iZm9udC1zaXplOjIwcHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6I2JhOWI0NzsgcGFkZGluZzogMCAwIDIwcHggMCI+VGl0bGUgQ29udGVudDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFyZSB5b3UgZXhwZXJpZW5jaW5nIHRvb3RoIHBhaW4gb3IgZGlzY29tZm9ydD8gV2Ugb2ZmZXIgZW1lcmdlbmN5IGRlbnRpc3RyeSBmb3IgcGF0aWVudHMgbG9va2luZyBmb3IgYW4gZW1lcmdlbmN5IGRlbnRpc3QgaW4gQ2hhcmxvdHRlIE5DLjwvcD4KCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJjYXJkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWciPgogICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly92aWRhZGVudGFsY29yYWxnYWJsZXMuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIyLzExL2ljb25fMi5wbmciIGRyYWdnYWJsZT0iZmFsc2UiIGFsdD0iIj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDIgc3R5bGU9ImZvbnQtc2l6ZToyMHB4OyBmb250LXdlaWdodDo3MDA7IGNvbG9yOiNiYTliNDc7IHBhZGRpbmc6IDAgMCAyMHB4IDAiPlRpdGxlIENvbnRlbnQ8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5BcmUgeW91IGV4cGVyaWVuY2luZyB0b290aCBwYWluIG9yIGRpc2NvbWZvcnQ/IFdlIG9mZmVyIGVtZXJnZW5jeSBkZW50aXN0cnkgZm9yIHBhdGllbnRzIGxvb2tpbmcgZm9yIGFuIGVtZXJnZW5jeSBkZW50aXN0IGluIENoYXJsb3R0ZSBOQy48L3A+CgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEtYW5nbGUtcmlnaHQgZmFzIj48L2k+CiAgICAgICAgPC9kaXY+CgoKD4KY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53cmFwcGVyIik7CmNvbnN0IGNhcm91c2VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcm91c2VsIik7CmNvbnN0IGFycm93QnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi53cmFwcGVyIGkiKTsKY29uc3QgZmlyc3RDYXJkV2lkdGggPSBjYXJvdXNlbC5xdWVyeVNlbGVjdG9yKCIuY2FyZCIpLm9mZnNldFdpZHRoOwpjb25zdCBjYXJvdXNlbENoaWxkcmVucyA9IFsuLi5jYXJvdXNlbC5jaGlsZHJlbl07CgpsZXQgaXNEcmFnZ2luZyA9IGZhbHNlLCBpc0F1dG9QbGF5PXRydWUsIHN0YXJ0WCwgc3RhcnRTY3JvbGxMZWZ0LCB0aW1lb3V0SWQ7CgpsZXQgY2FyZFBlclZpZXcgPSBNYXRoLnJvdW5kKGNhcm91c2VsLiBvZmZzZXRXaWR0aCAvIGZpcnN0Q2FyZFdpZHRoKTsKCmNhcm91c2VsQ2hpbGRyZW5zLnNsaWNlKC1jYXJkUGVyVmlldykucmV2ZXJzZSgpLmZvckVhY2goY2FyZCA9PiB7CiAgIGNhcm91c2VsLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsIGNhcmQub3V0ZXJIVE1MKTsgCn0pOwoKY2Fyb3VzZWxDaGlsZHJlbnMuc2xpY2UoMCwgY2FyZFBlclZpZXcpLmZvckVhY2goY2FyZCA9PiB7CiAgICBjYXJvdXNlbC5pbnNlcnRBZGphY2VudEhUTUwoImJlZm9yZWVuZCIsIGNhcmQub3V0ZXJIVE1MKTsgCiB9KTsKCmFycm93QnRucy5mb3JFYWNoKGJ0biA9PiB7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgY2Fyb3VzZWwuc2Nyb2xsTGVmdCArPSBidG4uaWQgPT09ICJsZWZ0IiA/IC1maXJzdENhcmRXaWR0aCA6IGZpcnN0Q2FyZFdpZHRoOwogICAgfSk7Cn0pOwoKY29uc3QgZHJhZ1N0YXJ0ID0gKGUpID0+IHsKICAgIGlzRHJhZ2dpbmcgPSB0cnVlOwogICAgY2Fyb3VzZWwuY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKTsKICAgIHN0YXJ0WCA9IGUucGFnZVg7CiAgICBzdGFydFNjcm9sbExlZnQgPSBjYXJvdXNlbC5zY3JvbGxMZWZ0Owp9Cgpjb25zdCBkcmFnZ2luZyA9IChlKSA9PiB7CiAgICBpZiAoIWlzRHJhZ2dpbmcpIHJldHVybjsKICAgIGNhcm91c2VsLnNjcm9sbExlZnQgPSBzdGFydFNjcm9sbExlZnQgLShlLnBhZ2VYIC0gc3RhcnRYKTsKfQoKY29uc3QgZHJhZ1N0b3AgPSAoKSA9PiB7CiAgICBpc0RyYWdnaW5nID0gZmFsc2U7CiAgICBjYXJvdXNlbC5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpOwp9Cgpjb25zdCBhdXRvUGxheSA9ICgpID0+IHsKICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDgwMCB8fCAhaXNBdXRvUGxheSkgcmV0dXJuOwogICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiBjYXJvdXNlbC5zY3JvbGxMZWZ0ICs9IGZpcnN0Q2FyZFdpZHRoLCAyNTAwKTsKfQoKYXV0b1BsYXkoKTsKCmNvbnN0IGluZmluaXRlU2Nyb2xsID0gKCkgPT4gewogICAgaWYgKGNhcm91c2VsLnNjcm9sbExlZnQgPT09IDApewogICAgICAgIGNhcm91c2VsLmNsYXNzTGlzdC5hZGQoIm5vLXRyYW5zaXRpb24iKTsKICAgICAgICBjYXJvdXNlbC5zY3JvbGxMZWZ0ID0gY2Fyb3VzZWwuc2Nyb2xsV2lkdGggLSAoMiAqIGNhcm91c2VsLm9mZnNldFdpZHRoKTsKICAgICAgICBjYXJvdXNlbC5jbGFzc0xpc3QucmVtb3ZlKCJuby10cmFuc2l0aW9uIik7CiAgICB9ZWxzZSBpZihNYXRoLmNlaWwoY2Fyb3VzZWwuc2Nyb2xsTGVmdCkgPT09IGNhcm91c2VsLnNjcm9sbFdpZHRoIC0gY2Fyb3VzZWwub2Zmc2V0V2lkdGgpewogICAgICAgIGNhcm91c2VsLmNsYXNzTGlzdC5hZGQoIm5vLXRyYW5zaXRpb24iKTsKICAgICAgICBjYXJvdXNlbC5zY3JvbGxMZWZ0ID0gY2Fyb3VzZWwub2Zmc2V0V2lkdGg7CiAgICAgICAgY2Fyb3VzZWwuY2xhc3NMaXN0LnJlbW92ZSgibm8tdHJhbnNpdGlvbiIpOwogICAgfQoKICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpOwogICAgaWYgKCF3cmFwcGVyLm1hdGNoZXMoIjpob3ZlciIpKSBhdXRvUGxheSgpOwp9CgoKY2Fyb3VzZWwuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZHJhZ1N0YXJ0KTsKY2Fyb3VzZWwuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgZHJhZ2dpbmcpOwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgZHJhZ1N0b3ApOwpjYXJvdXNlbC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCBpbmZpbml0ZVNjcm9sbCk7CndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpKTsKd3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgYXV0b1BsYXkpPC9zY3JpcHQ+CiAgICAKCgoKCgo=