{"data":"77u/PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InB0LUJSIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+RXN0w7pkaW8gUGludGVyZXN0IOKAoiBNZXNxdWl0YSBHZXN0w6NvIGRlIEJvbMO1ZXM8L3RpdGxlPgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iUGFpbmVsIGludGVybm86IHB1YmxpcXVlIGltYWdlbnMgZSB2w61kZW9zIG5vIFBpbnRlcmVzdCBkbyBNZXNxdWl0YSBHZXN0w6NvIGRlIEJvbMO1ZXMuIj4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1GcmF1bmNlczpvcHN6LHdnaHRAOS4uMTQ0LDUwMDs5Li4xNDQsNjAwJmZhbWlseT1JbnRlcjp3Z2h0QDQwMDs1MDA7NjAwOzcwMCZkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI+CjxzdHlsZT4KICA6cm9vdHsKICAgIC0tYmc6IzBiMGIwZTsgLS1zdXJmYWNlOiMxNDE0MTk7IC0tbGluZTpyZ2JhKDI1NSwyNTUsMjU1LC4wOCk7CiAgICAtLWdvbGQ6I2M4YTI0YjsgLS1nb2xkLXNvZnQ6I2U4Y2Y4ZjsgLS10eHQ6I2YyZWRlMzsgLS1tdXQ6I2EzOWU5MzsKICAgIC0tb2s6IzNhYTc2ZDsgLS1lcnI6I2MwMzkyYjsKICB9CiAgKntib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowfQogIGJvZHl7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tdHh0KTtmb250LWZhbWlseTonSW50ZXInLEFyaWFsLHNhbnMtc2VyaWY7CiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO3BhZGRpbmc6MjhweCAxOHB4IDYwcHh9CiAgLndyYXB7bWF4LXdpZHRoOjcyMHB4O21hcmdpbjowIGF1dG99CiAgLmJyYW5ke3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MjZweH0KICAuYnJhbmQgLm92ZXJ7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2xldHRlci1zcGFjaW5nOi4zZW07Y29sb3I6dmFyKC0tZ29sZCl9CiAgLmJyYW5kIGgxe2ZvbnQtZmFtaWx5OidGcmF1bmNlcycsc2VyaWY7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZTpjbGFtcCgyOHB4LDV2dyw0MHB4KTttYXJnaW4tdG9wOjhweH0KICAuYnJhbmQgcHtjb2xvcjp2YXIoLS1tdXQpO2ZvbnQtc2l6ZToxMy41cHg7bWFyZ2luLXRvcDo4cHh9CiAgLmNhcmR7YmFja2dyb3VuZDp2YXIoLS1zdXJmYWNlKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6NHB4OwogICAgcGFkZGluZzoyNnB4O21hcmdpbi1ib3R0b206MTZweH0KICAuY2FyZCBoMntmb250LWZhbWlseTonRnJhdW5jZXMnLHNlcmlmO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXNpemU6MjBweDttYXJnaW4tYm90dG9tOjRweH0KICAuY2FyZCAuZGVzY3tjb2xvcjp2YXIoLS1tdXQpO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi1ib3R0b206MTRweH0KICBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtsZXR0ZXItc3BhY2luZzouMTJlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7CiAgICBjb2xvcjp2YXIoLS1tdXQpO21hcmdpbjoxNHB4IDAgNnB4fQogIGlucHV0W3R5cGU9dGV4dF0sdGV4dGFyZWF7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMwYjBiMGU7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsKICAgIGNvbG9yOnZhcigtLXR4dCk7Ym9yZGVyLXJhZGl1czoycHg7cGFkZGluZzoxMXB4IDEzcHg7Zm9udC1zaXplOjE0cHg7Zm9udC1mYW1pbHk6aW5oZXJpdH0KICBpbnB1dDpmb2N1cyx0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOm5vbmU7Ym9yZGVyLWNvbG9yOnJnYmEoMjAwLDE2Miw3NSwuNil9CiAgdGV4dGFyZWF7bWluLWhlaWdodDoxMjBweDtyZXNpemU6dmVydGljYWw7bGluZS1oZWlnaHQ6MS42fQogIC5maXhlZC1saW5re2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7YmFja2dyb3VuZDojMGIwYjBlO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7CiAgICBib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjExcHggMTNweDtmb250LXNpemU6MTMuNXB4O2NvbG9yOnZhcigtLWdvbGQtc29mdCk7d29yZC1icmVhazpicmVhay1hbGx9CiAgLmZpeGVkLWxpbmsgc3Zne3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7c3Ryb2tlOnZhcigtLWdvbGQpO2ZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MjtmbGV4Om5vbmV9CiAgI2Ryb3B7Ym9yZGVyOjFweCBkYXNoZWQgcmdiYSgyNTUsMjU1LDI1NSwuMjUpO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MzRweCAyMHB4O3RleHQtYWxpZ246Y2VudGVyOwogICAgY3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzfQogICNkcm9wOmhvdmVyLCNkcm9wLm92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWdvbGQpfQogICNkcm9wIHN2Z3t3aWR0aDozNHB4O2hlaWdodDozNHB4O3N0cm9rZTp2YXIoLS1nb2xkKTtmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNTsKICAgIHN0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZH0KICAjZHJvcCAudHtmb250LXNpemU6MTRweDttYXJnaW4tdG9wOjEwcHh9CiAgI2Ryb3AgLnN7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tbXV0KTttYXJnaW4tdG9wOjRweH0KICAjcHJldkltZywjcHJldlZpZGVve21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MzQwcHg7Ym9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDoxNHB4O2Rpc3BsYXk6bm9uZX0KICAuZmlsZWluZm97ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLW11dCk7bWFyZ2luLXRvcDoxMHB4fQogIC50YWd7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjE0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOwogICAgYm9yZGVyOjFweCBzb2xpZCByZ2JhKDIwMCwxNjIsNzUsLjUpO2NvbG9yOnZhcigtLWdvbGQtc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCAxMnB4fQogIGJ1dHRvbnt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MTVweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7CiAgICBsZXR0ZXItc3BhY2luZzouMDZlbTtjdXJzb3I6cG9pbnRlcjttYXJnaW4tdG9wOjE0cHg7dHJhbnNpdGlvbjpmaWx0ZXIgLjJzfQogIGJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpub3QtYWxsb3dlZH0KICAjYnRuUHJldntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMyk7Y29sb3I6dmFyKC0tdHh0KX0KICAjYnRuUHJldjpob3Zlcjpub3QoOmRpc2FibGVkKXtib3JkZXItY29sb3I6dmFyKC0tZ29sZCk7Y29sb3I6dmFyKC0tZ29sZC1zb2Z0KX0KICAjYnRuUHVie2JhY2tncm91bmQ6dmFyKC0tZ29sZCk7Y29sb3I6IzE0MTMxMH0KICAjYnRuUHViOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2ZpbHRlcjpicmlnaHRuZXNzKDEuMSl9CiAgLmNvdW50e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLW11dCk7dGV4dC1hbGlnbjpyaWdodDttYXJnaW4tdG9wOjRweH0KICAuY291bnQuYmFke2NvbG9yOnZhcigtLWVycil9CiAgI3N0YXR1c3tmb250LXNpemU6MTNweDttaW4taGVpZ2h0OjIwcHg7bWFyZ2luLXRvcDoxMHB4O2NvbG9yOnZhcigtLW11dCl9CiAgI3Jlc3VsdHtkaXNwbGF5Om5vbmU7bWFyZ2luLXRvcDoxMnB4O3BhZGRpbmc6MTRweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjd9CiAgI3Jlc3VsdC5va3tkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6cmdiYSg1OCwxNjcsMTA5LC4xKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW9rKX0KICAjcmVzdWx0LmVycntkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6cmdiYSgxOTIsNTcsNDMsLjEpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZXJyKX0KICAjcmVzdWx0IGF7Y29sb3I6dmFyKC0tZ29sZC1zb2Z0KTtmb250LXdlaWdodDo2MDB9CiAgLmhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tbXV0KTtsaW5lLWhlaWdodDoxLjZ9CiAgLnN0ZXB7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWdvbGQpO2NvbG9yOnZhcigtLWdvbGQpOwogICAgYm9yZGVyLXJhZGl1czo1MCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MjJweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bWFyZ2luLXJpZ2h0OjhweH0KICBAbWVkaWEobWF4LXdpZHRoOjU2MHB4KXsgYm9keXtwYWRkaW5nOjIwcHggMTJweCA1MHB4fSAuY2FyZHtwYWRkaW5nOjIwcHh9IH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGRpdiBjbGFzcz0id3JhcCI+CiAgPGRpdiBjbGFzcz0iYnJhbmQiPgogICAgPGRpdiBjbGFzcz0ib3ZlciI+TWVzcXVpdGEgR2VzdMOjbyBkZSBCb2zDtWVzPC9kaXY+CiAgICA8aDE+RXN0w7pkaW8gUGludGVyZXN0PC9oMT4KICAgIDxwPlN1YmEgaW1hZ2VtIG91IHbDrWRlbywgcmV2aXNlIG8gdGV4dG8gZGEgSUEgZSBwdWJsaXF1ZSBkaXJldG8gbm8gUGludGVyZXN0LjwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICA8aDI+Q29uZXjDo288L2gyPgogICAgPGRpdiBjbGFzcz0iZGVzYyI+TyB3b3JrZmxvdyBwcmVjaXNhIGVzdGFyIGF0aXZvIG5vIG44bi4gTyBib2FyZCBmaWNhIHNhbHZvIG5lc3RlIG5hdmVnYWRvci48L2Rpdj4KICAgIDxsYWJlbD5VUkwgZG8gd2ViaG9vazwvbGFiZWw+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IndlYmhvb2siIHZhbHVlPSJodHRwczovL244bi1uOG4uc2JsMHdxLmVhc3lwYW5lbC5ob3N0L3dlYmhvb2svbWVzcXVpdGEtcGludGVyZXN0Ij4KICAgIDxsYWJlbD5JRCBkbyBib2FyZDwvbGFiZWw+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImJvYXJkIiBwbGFjZWhvbGRlcj0iRXguOiAxMjM0NTY3ODkwMTIzNDU2NzgiPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxoMj5EZXN0aW5vIGRvIHBvc3Q8L2gyPgogICAgPGRpdiBjbGFzcz0iZGVzYyI+TGluayBmaXhvIGF0csOhcyBkZSB0b2RvcyBvcyBQaW5zLjwvZGl2PgogICAgPGRpdiBjbGFzcz0iZml4ZWQtbGluayI+CiAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTAgMTRhNSA1IDAgMDA3LjUuNWwzLTNhNSA1IDAgMDAtNy03bC0xLjcgMS43TTE0IDEwYTUgNSAwIDAwLTcuNS0uNWwtMyAzYTUgNSAwIDAwNyA3bDEuNy0xLjciLz48L3N2Zz4KICAgICAgPHNwYW4+aHR0cHM6Ly9tZXNxdWl0YS1nZXN0YW8tYm9sb2VzLnZlcmNlbC5hcHA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxsYWJlbD5PYnNlcnZhw6fDo28gcGFyYSBhIElBIChvcGNpb25hbCk8L2xhYmVsPgogICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJvYnMiIHBsYWNlaG9sZGVyPSJFeC46IGNvbmN1cnNvIDI4OTAsIHByw6ptaW8gUiQgNTAgbWlsaMO1ZXMiPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxoMj48c3BhbiBjbGFzcz0ic3RlcCI+MTwvc3Bhbj5Nw61kaWEgZG8gUGluPC9oMj4KICAgIDxkaXYgY2xhc3M9ImRlc2MiPkltYWdlbSAoSlBHL1BORyBhdMOpIDE1IE1CKSBvdSB2w61kZW8gKE1QNC9NT1YgYXTDqSA1MCBNQiwgbmEgdmVydGljYWwpLjwvZGl2PgogICAgPGRpdiBpZD0iZHJvcCI+CiAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgMTZWNG0wIDBMNyA5bTUtNWw1IDVNNCAyMGgxNiIvPjwvc3ZnPgogICAgICA8ZGl2IGNsYXNzPSJ0Ij5DbGlxdWUgb3UgYXJyYXN0ZSBvIGFycXVpdm8gYXF1aTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzIj5JbWFnZW0gb3UgdsOtZGVvPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iZmlsZSIgYWNjZXB0PSJpbWFnZS8qLHZpZGVvLyoiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgPGltZyBpZD0icHJldkltZyIgYWx0PSJQcsOpdmlhIGRhIGltYWdlbSI+CiAgICA8dmlkZW8gaWQ9InByZXZWaWRlbyIgY29udHJvbHMgcGxheXNpbmxpbmU+PC92aWRlbz4KICAgIDxkaXYgY2xhc3M9ImZpbGVpbmZvIj48c3BhbiBjbGFzcz0idGFnIiBpZD0ibWVkaWF0YWciIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvc3Bhbj48c3BhbiBpZD0iZmlsZWluZm8iPjwvc3Bhbj48L2Rpdj4KICAgIDxidXR0b24gaWQ9ImJ0blByZXYiPkdlcmFyIHByw6l2aWEgY29tIElBPC9idXR0b24+CiAgICA8ZGl2IGlkPSJzdGF0dXMiPjwvZGl2PgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJjYXJkIiBpZD0icHJldmlld0NhcmQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgPGgyPjxzcGFuIGNsYXNzPSJzdGVwIj4yPC9zcGFuPlJldmlzZSBlIHB1YmxpcXVlPC9oMj4KICAgIDxkaXYgY2xhc3M9ImRlc2MiIGlkPSJwcmV2TWV0YSI+PC9kaXY+CiAgICA8bGFiZWw+VMOtdHVsbyBkbyBQaW48L2xhYmVsPgogICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0X3RpdHVsbyIgbWF4bGVuZ3RoPSIxMjAiPgogICAgPGRpdiBjbGFzcz0iY291bnQiIGlkPSJjX3RpdHVsbyI+MCAvIDEwMDwvZGl2PgogICAgPGxhYmVsPkRlc2NyacOnw6NvPC9sYWJlbD4KICAgIDx0ZXh0YXJlYSBpZD0idF9kZXNjIiBtYXhsZW5ndGg9IjkwMCI+PC90ZXh0YXJlYT4KICAgIDxkaXYgY2xhc3M9ImNvdW50IiBpZD0iY19kZXNjIj4wIC8gODAwPC9kaXY+CiAgICA8bGFiZWw+SGFzaHRhZ3M8L2xhYmVsPgogICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0X3RhZ3MiPgogICAgPGxhYmVsPlRleHRvIGFsdGVybmF0aXZvPC9sYWJlbD4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idF9hbHQiPgogICAgPGJ1dHRvbiBpZD0iYnRuUHViIj5QdWJsaWNhciBubyBQaW50ZXJlc3Q8L2J1dHRvbj4KICAgIDxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+CiAgICA8cCBjbGFzcz0iaGludCIgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+VsOtZGVvcyBsZXZhbSBkZSAxIGEgMiBtaW51dG9zICh1cGxvYWQgKyBwcm9jZXNzYW1lbnRvKS4gTsOjbyBmZWNoZSBhIGFiYS48L3A+CiAgPC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KY29uc3QgJCA9IGlkID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKY29uc3QgTElOS19GSVhPID0gJ2h0dHBzOi8vbWVzcXVpdGEtZ2VzdGFvLWJvbG9lcy52ZXJjZWwuYXBwJzsKY29uc3QgTFMgPSB7IHdoOidwaW5fcGFpbmVsX3doJywgYm9hcmQ6J3Bpbl9wYWluZWxfYm9hcmQnIH07CmlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMUy53aCkpICQoJ3dlYmhvb2snKS52YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKExTLndoKTsKaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExTLmJvYXJkKSkgJCgnYm9hcmQnKS52YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKExTLmJvYXJkKTsKJCgnd2ViaG9vaycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGUgPT4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFMud2gsIGUudGFyZ2V0LnZhbHVlLnRyaW0oKSkpOwokKCdib2FyZCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGUgPT4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFMuYm9hcmQsIGUudGFyZ2V0LnZhbHVlLnRyaW0oKSkpOwoKbGV0IGN1cnJlbnRGaWxlID0gbnVsbCwgY3VycmVudEtpbmQgPSAnJzsKCmNvbnN0IGRyb3AgPSAkKCdkcm9wJyksIGZpbGVJbiA9ICQoJ2ZpbGUnKTsKZHJvcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGZpbGVJbi5jbGljaygpKTsKWydkcmFnb3ZlcicsJ2RyYWdlbnRlciddLmZvckVhY2goZXYgPT4gZHJvcC5hZGRFdmVudExpc3RlbmVyKGV2LCBlID0+IHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBkcm9wLmNsYXNzTGlzdC5hZGQoJ292ZXInKTsgfSkpOwpbJ2RyYWdsZWF2ZScsJ2Ryb3AnXS5mb3JFYWNoKGV2ID0+IGRyb3AuYWRkRXZlbnRMaXN0ZW5lcihldiwgZSA9PiB7IGUucHJldmVudERlZmF1bHQoKTsgZHJvcC5jbGFzc0xpc3QucmVtb3ZlKCdvdmVyJyk7IH0pKTsKZHJvcC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZSA9PiB7IGlmIChlLmRhdGFUcmFuc2Zlci5maWxlc1swXSkgc2V0RmlsZShlLmRhdGFUcmFuc2Zlci5maWxlc1swXSk7IH0pOwpmaWxlSW4uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4geyBpZiAoZmlsZUluLmZpbGVzWzBdKSBzZXRGaWxlKGZpbGVJbi5maWxlc1swXSk7IH0pOwoKZnVuY3Rpb24gc2V0RmlsZShmKSB7CiAgY29uc3QgaXNJbWcgPSBmLnR5cGUuaW5kZXhPZignaW1hZ2UvJykgPT09IDAsIGlzVmlkID0gZi50eXBlLmluZGV4T2YoJ3ZpZGVvLycpID09PSAwOwogIGlmICghaXNJbWcgJiYgIWlzVmlkKSByZXR1cm4gc2V0U3RhdHVzKCdPIGFycXVpdm8gcHJlY2lzYSBzZXIgaW1hZ2VtIG91IHbDrWRlby4nLCB0cnVlKTsKICBjb25zdCBjYXAgPSBpc0ltZyA/IDE1ICogMTAyNCAqIDEwMjQgOiA1MCAqIDEwMjQgKiAxMDI0OwogIGlmIChmLnNpemUgPiBjYXApIHJldHVybiBzZXRTdGF0dXMoJ0FycXVpdm8gYWNpbWEgZG8gbGltaXRlICgnICsgKGlzSW1nID8gJzE1IE1CJyA6ICc1MCBNQicpICsgJykuIENvbXByaW1hIGFudGVzIGRlIHN1YmlyLicsIHRydWUpOwogIGN1cnJlbnRGaWxlID0gZjsgY3VycmVudEtpbmQgPSBpc0ltZyA/ICdpbWFnZW0nIDogJ3bDrWRlbyc7CiAgJCgncHJldkltZycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7ICQoJ3ByZXZWaWRlbycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgaWYgKGlzSW1nKSB7ICQoJ3ByZXZJbWcnKS5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGYpOyAkKCdwcmV2SW1nJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KICBlbHNlIHsgJCgncHJldlZpZGVvJykuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmKTsgJCgncHJldlZpZGVvJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KICAkKCdtZWRpYXRhZycpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsKICAkKCdtZWRpYXRhZycpLnRleHRDb250ZW50ID0gY3VycmVudEtpbmQ7CiAgJCgnZmlsZWluZm8nKS50ZXh0Q29udGVudCA9IGYubmFtZSArICcg4oCiICcgKyAoZi5zaXplIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMikgKyAnIE1CJzsKICAkKCdwcmV2aWV3Q2FyZCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgc2V0U3RhdHVzKCcnKTsKfQoKZnVuY3Rpb24gc2V0U3RhdHVzKG1zZywgaXNFcnIpIHsKICBjb25zdCBzID0gJCgnc3RhdHVzJyk7IHMudGV4dENvbnRlbnQgPSBtc2cgfHwgJyc7CiAgcy5zdHlsZS5jb2xvciA9IGlzRXJyID8gJyNlODgnIDogJ3ZhcigtLW11dCknOwp9CmZ1bmN0aW9uIHNob3dSZXN1bHQob2ssIGh0bWwpIHsKICBjb25zdCByID0gJCgncmVzdWx0Jyk7IHIuY2xhc3NOYW1lID0gb2sgPyAnb2snIDogJ2Vycic7IHIuaW5uZXJIVE1MID0gaHRtbDsKICByLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0pOwp9CmZ1bmN0aW9uIGNvdW50ZXJzKCkgewogIGNvbnN0IHQgPSAkKCd0X3RpdHVsbycpLnZhbHVlLmxlbmd0aCwgZCA9ICQoJ3RfZGVzYycpLnZhbHVlLmxlbmd0aDsKICAkKCdjX3RpdHVsbycpLnRleHRDb250ZW50ID0gdCArICcgLyAxMDAnOyAkKCdjX3RpdHVsbycpLmNsYXNzTmFtZSA9ICdjb3VudCcgKyAodCA+IDEwMCA/ICcgYmFkJyA6ICcnKTsKICAkKCdjX2Rlc2MnKS50ZXh0Q29udGVudCA9IGQgKyAnIC8gODAwJzsgJCgnY19kZXNjJykuY2xhc3NOYW1lID0gJ2NvdW50JyArIChkID4gODAwID8gJyBiYWQnIDogJycpOwp9ClsndF90aXR1bG8nLCd0X2Rlc2MnXS5mb3JFYWNoKGlkID0+ICQoaWQpLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgY291bnRlcnMpKTsKCiQoJ2J0blByZXYnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHsKICBpZiAoIWN1cnJlbnRGaWxlKSByZXR1cm4gc2V0U3RhdHVzKCdFc2NvbGhhIGEgaW1hZ2VtIG91IG8gdsOtZGVvIHByaW1laXJvLicsIHRydWUpOwogIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgZmQuYXBwZW5kKCdtb2RlJywgJ3ByZXZpZXcnKTsKICBmZC5hcHBlbmQoJ2xpbmsnLCBMSU5LX0ZJWE8pOwogIGZkLmFwcGVuZCgnYm9hcmRfaWQnLCAkKCdib2FyZCcpLnZhbHVlLnRyaW0oKSk7CiAgZmQuYXBwZW5kKCdvYnNlcnZhY2FvJywgJCgnb2JzJykudmFsdWUudHJpbSgpICsgJyBbbcOtZGlhOiAnICsgY3VycmVudEtpbmQgKyAnXScpOwogIGZkLmFwcGVuZCgnaW1hZ2VtJywgY3VycmVudEZpbGUpOwogIGNvbnN0IGJ0biA9ICQoJ2J0blByZXYnKTsgYnRuLmRpc2FibGVkID0gdHJ1ZTsgYnRuLnRleHRDb250ZW50ID0gJ0dlcmFuZG8uLi4nOwogIHNldFN0YXR1cygnQSBJQSBlc3TDoSBlc2NyZXZlbmRvIHTDrXR1bG8sIGRlc2NyacOnw6NvIGUgaGFzaHRhZ3MuLi4nKTsKICB0cnkgewogICAgY29uc3QgciA9IGF3YWl0IGZldGNoKCQoJ3dlYmhvb2snKS52YWx1ZS50cmltKCksIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHk6IGZkIH0pOwogICAgY29uc3QgdHh0ID0gYXdhaXQgci50ZXh0KCk7CiAgICBpZiAoIXIub2spIHRocm93IG5ldyBFcnJvcignSFRUUCAnICsgci5zdGF0dXMgKyAnIOKAlCAnICsgdHh0LnNsaWNlKDAsIDIwMCkpOwogICAgaWYgKCF0eHQudHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoJ1Jlc3Bvc3RhIHZhemlhLiBWZWphICJFeGVjdXRpb25zIiBubyBuOG4uJyk7CiAgICBjb25zdCBkID0gSlNPTi5wYXJzZSh0eHQpOwogICAgJCgndF90aXR1bG8nKS52YWx1ZSA9IGQudGl0dWxvIHx8ICcnOwogICAgJCgndF9kZXNjJykudmFsdWUgPSBkLmRlc2NyaWNhbyB8fCAnJzsKICAgICQoJ3RfdGFncycpLnZhbHVlID0gKGQuaGFzaHRhZ3MgfHwgW10pLmpvaW4oJyAnKTsKICAgICQoJ3RfYWx0JykudmFsdWUgPSBkLmFsdF90ZXh0IHx8ICcnOwogICAgJCgncHJldk1ldGEnKS50ZXh0Q29udGVudCA9ICdQcsOpdmlhIHBhcmEgJyArIGN1cnJlbnRLaW5kICsgJyDigKIgZGVzdGlubyBmaXhvIGFwbGljYWRvIG5hIHB1YmxpY2HDp8Ojby4nOwogICAgY291bnRlcnMoKTsKICAgICQoJ3ByZXZpZXdDYXJkJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAkKCdwcmV2aWV3Q2FyZCcpLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOwogICAgc2V0U3RhdHVzKCdQcsOpdmlhIHByb250YS4gUmV2aXNlIGUgcHVibGlxdWUuJyk7CiAgfSBjYXRjaCAoZSkgewogICAgc2V0U3RhdHVzKCcnLCBmYWxzZSk7CiAgICBzaG93UmVzdWx0KGZhbHNlLCAnPGI+RmFsaGEgbmEgcHLDqXZpYTo8L2I+ICcgKyBlLm1lc3NhZ2UgKwogICAgICAnPGJyPjxzcGFuIGNsYXNzPSJoaW50Ij5Db25maXJhOiAxKSB3b3JrZmxvdyBhdGl2byBubyBuOG47IDIpIFVSTCBkbyB3ZWJob29rOyAzKSBpbnRlcm5ldC48L3NwYW4+Jyk7CiAgfSBmaW5hbGx5IHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi50ZXh0Q29udGVudCA9ICdHZXJhciBwcsOpdmlhIGNvbSBJQSc7IH0KfSk7CgokKCdidG5QdWInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHsKICBpZiAoIWN1cnJlbnRGaWxlKSByZXR1cm47CiAgaWYgKCEkKCdib2FyZCcpLnZhbHVlLnRyaW0oKSkgeyBzaG93UmVzdWx0KGZhbHNlLCAnPGI+RmFsdGEgbyBJRCBkbyBib2FyZC48L2I+IFByZWVuY2hhIG5vIHRvcG8gKGZpY2Egc2Fsdm8pLicpOyByZXR1cm47IH0KICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpOwogIGZkLmFwcGVuZCgnbW9kZScsICdwdWJsaXNoJyk7CiAgZmQuYXBwZW5kKCdsaW5rJywgTElOS19GSVhPKTsKICBmZC5hcHBlbmQoJ2JvYXJkX2lkJywgJCgnYm9hcmQnKS52YWx1ZS50cmltKCkpOwogIGZkLmFwcGVuZCgndGl0dWxvJywgJCgndF90aXR1bG8nKS52YWx1ZS50cmltKCkpOwogIGZkLmFwcGVuZCgnZGVzY3JpY2FvJywgJCgndF9kZXNjJykudmFsdWUudHJpbSgpKTsKICBmZC5hcHBlbmQoJ2hhc2h0YWdzJywgJCgndF90YWdzJykudmFsdWUudHJpbSgpKTsKICBmZC5hcHBlbmQoJ2FsdF90ZXh0JywgJCgndF9hbHQnKS52YWx1ZS50cmltKCkpOwogIGZkLmFwcGVuZCgnaW1hZ2VtJywgY3VycmVudEZpbGUpOwogIGNvbnN0IGJ0biA9ICQoJ2J0blB1YicpOyBidG4uZGlzYWJsZWQgPSB0cnVlOyBidG4udGV4dENvbnRlbnQgPSAnUHVibGljYW5kby4uLic7CiAgdHJ5IHsKICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCgkKCd3ZWJob29rJykudmFsdWUudHJpbSgpLCB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiBmZCB9KTsKICAgIGNvbnN0IHR4dCA9IGF3YWl0IHIudGV4dCgpOwogICAgaWYgKCFyLm9rKSB0aHJvdyBuZXcgRXJyb3IoJ0hUVFAgJyArIHIuc3RhdHVzICsgJyDigJQgJyArIHR4dC5zbGljZSgwLCAzMDApKTsKICAgIGlmICghdHh0LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCdSZXNwb3N0YSB2YXppYS4gVmVqYSAiRXhlY3V0aW9ucyIgbm8gbjhuLicpOwogICAgY29uc3QgZCA9IEpTT04ucGFyc2UodHh0KTsKICAgIGlmIChkLm9rICYmIGQucGluX3VybCkgc2hvd1Jlc3VsdCh0cnVlLCAnPGI+UHVibGljYWRvICgnICsgKGQudGlwbyB8fCAnbcOtZGlhJykgKyAnKS48L2I+PGJyPjxhIGhyZWY9IicgKyBkLnBpbl91cmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+QWJyaXIgUGluIG5vIFBpbnRlcmVzdDwvYT48YnI+PHNwYW4gY2xhc3M9ImhpbnQiPicgKyAoZC50aXR1bG8gfHwgJycpICsgJzwvc3Bhbj4nKTsKICAgIGVsc2Ugc2hvd1Jlc3VsdCh0cnVlLCAnUmVzcG9zdGE6ICcgKyB0eHQuc2xpY2UoMCwgMzAwKSk7CiAgfSBjYXRjaCAoZSkgewogICAgc2hvd1Jlc3VsdChmYWxzZSwgJzxiPkZhbGhhIGFvIHB1YmxpY2FyOjwvYj4gJyArIGUubWVzc2FnZSk7CiAgfSBmaW5hbGx5IHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi50ZXh0Q29udGVudCA9ICdQdWJsaWNhciBubyBQaW50ZXJlc3QnOyB9Cn0pOwo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+DQo="}