Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CjxtZXRhIG5hbWU9IkF1dGhvciIgY29udGVudD0iVmVyb25pa2EgSXJ2aW5lIj4KPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNaWNyb3NvZnQgRnJvbnRQYWdlIDQuMCI+CjxtZXRhIG5hbWU9IlByb2dJZCIgY29udGVudD0iRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudCI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZGVmYXVsdF9zdHlsZS5jc3MiID4KPHRpdGxlPkRORCBpbiBTV1Q8L3RpdGxlPgo8L2hlYWQ+Cgo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgbGFuZz0iRU4tVVMiIGxpbms9ImJsdWUiIHZsaW5rPSJwdXJwbGUiIHN0eWxlPSJ0YWItaW50ZXJ2YWw6LjVpbiI+Cgo8ZGl2IGFsaWduPSJyaWdodCI+PGZvbnQgc2l6ZT0iLTIiPkNvcHlyaWdodCAmY29weTsgMjAwMyBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIAogIENvcnAuPC9mb250PiAKICA8dGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIHdpZHRoPSIxMDAlIj4KICAgIDx0cj4gCiAgICAgIDx0ZCBhbGlnbj1MRUZUIHZhbGlnbj1UT1AgY29sc3Bhbj0iMiIgYmdjb2xvcj0iIzAwODBDMCI+PGI+PGZvbnQgZmFjZT0iQXJpYWwsSGVsdmV0aWNhIiBjb2xvcj0iI0ZGRkZGRiI+Jm5ic3A7RWNsaXBzZSAKICAgICAgICBDb3JuZXIgQXJ0aWNsZTwvZm9udD48L2I+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KPC9kaXY+CjxoMT4gPGltZyBzcmM9ImltYWdlcy9pZGVhLmpwZyIgYWxpZ249Q0VOVEVSPjwvaDE+CiAgPGgxIGFsaWduPSJjZW50ZXIiPkRyYWcgYW5kIERyb3A8L2gxPgogIDxoMyBhbGlnbj0iY2VudGVyIj5BZGRpbmcgRHJhZyBhbmQgRHJvcCB0byBhbiBTV1QgQXBwbGljYXRpb248L2gzPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij48Yj5TdW1tYXJ5PC9iPjxicj4KICBEcmFnIGFuZCBkcm9wIHByb3ZpZGVzIGEgcXVpY2sgYW5kIGVhc3kgbWVjaGFuaXNtIGZvciB1c2VycyB0byByZS1vcmRlciBhbmQKICB0cmFuc2ZlciBkYXRhIHdpdGhpbiBhbiBhcHBsaWNhdGlvbiBhbmQgYmV0d2VlbiBhcHBsaWNhdGlvbnMuIFRoaXMgYXJ0aWNsZSBpcwogIGFuIG92ZXJ2aWV3IG9mIGhvdyB0byBpbXBsZW1lbnQgRHJhZyBhbmQgRHJvcCBhbmQgQ2xpcGJvYXJkIGRhdGEgdHJhbnNmZXJzCiAgd2l0aGluIGFuIFNXVCBhcHBsaWNhdGlvbi48L3A+CiAgPHA+PGI+QnkgVmVyb25pa2EgSXJ2aW5lLCBJQk0gT1RJIExhYnM8L2I+PGJyPgogIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0Ij5BdWd1c3QgMjUsIDIwMDMgKHJldmlzZWQgTm92ZW1iZXIgMiwgMjAwNSk8L3NwYW4+PC9wPgogIDxkaXYgYWxpZ249ImNlbnRlciIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj4KICAgIDxociBzaXplPSIyIiB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+CiAgPC9kaXY+CiAgPGgyPkRyYWcgYW5kIERyb3AgT3ZlcnZpZXc8L2gyPgogIDxwPkNvbnNpZGVyIHRoZSBzaW1wbGUgZXhhbXBsZSBvZiBkcmFnZ2luZyBhbiBpdGVtIGZyb20gb25lIHRhYmxlIHRvIGFub3RoZXIKICBhcyBzaG93biBpbiBGaWd1cmUgMTo8L3A+CiAgPHAgYWxpZ249ImNlbnRlciI+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1hZ2VzL2ltYWdlMDAyLmpwZyI+PGJyPgogIEZpZ3VyZSAxOiBTaG9wcGluZyBDYXJ0IGV4YW1wbGU8L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPk9uIHRoZSByaWdodCB0aGVyZSBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBJIGNhbiBwdXJjaGFzZQogIGFuZCBvbiB0aGUgbGVmdCBpcyBteSBzaG9wcGluZyBjYXJ0LiBUbyBidXkgc29tZXRoaW5nLCBJIHNlbGVjdCBpdCBmcm9tIHRoZQogIGxpc3Qgb24gdGhlIHJpZ2h0IChJIGhhdmUgc2VsZWN0ZWQgk1RydWZmbGUgQXNzb3J0bWVudJQgaW4gRmlndXJlIDEpLCBkcmFnCiAgaXQgb3ZlciB0byBteSBzaG9wcGluZyBjYXJ0IGFuZCBkcm9wIGl0LiBXaGVuIEkgbGV0IGdvIG9mIHRoZSBtb3VzZSBvdmVyIG15CiAgc2hvcHBpbmcgY2FydCwgdGhlIGl0ZW0gd2lsbCBiZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBpdGVtcyBJIHdpc2ggdG8gcHVyY2hhc2UuCiAgSW4gdGhpcyBkYXRhIHRyYW5zZmVyLCB0aGUgbGlzdCBvZiBhc3NvcnRlZCBjaG9jb2xhdGVzIG9uIHRoZSByaWdodCBpcyB0aGUKICBkcmFnIHNvdXJjZSBhbmQgbXkgc2hvcHBpbmcgY2FydCBpcyB0aGUgZHJvcCB0YXJnZXQuIEEgZHJhZyBzb3VyY2UgaXMgdGhlCiAgc291cmNlIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zZmVycmVkIGFuZCBhIGRyb3AgdGFyZ2V0IGlzIHRoZSByZWNlaXZlci4gQXMgSQogIGRyYWcgdGhlIG1vdXNlIG92ZXIgYSBkcm9wIHRhcmdldCwgSSBnZXQgZmVlZGJhY2sgaW4gdmFyaW91cyBmb3Jtcy4gRmlyc3QsIHRoZQogIGN1cnNvciBjaGFuZ2VzIHRvIGxldCBtZSBrbm93IHRoYXQgSSBhbSBvdmVyIGEgdmFsaWQgZHJvcCB0YXJnZXQgYnkgY2hhbmdpbmcKICBmcm9tIGEgk2RvIG5vdCBlbnRlcpQgc2lnbiB0byBhbiBhcnJvdyAodGhpcyBpcyBjYWxsZWQgYSCTZHJhZyBvdmVyCiAgZWZmZWN0lCkuIFRoZSBjdXJzb3IgYWxzbyB0ZWxscyBtZSB3aGF0IGtpbmQgb2Ygb3BlcmF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkCiAgd2hlbiB0aGUgZGF0YSBpcyB0cmFuc2ZlcnJlZCCWIHRoZSBkYXRhIG1heSBiZSBjb3BpZWQgb3IgbW92ZWQgb3IgYSBsaW5rIG1heQogIGJlIG1hZGUgdG8gdGhlIGRhdGEuIFNlY29uZGx5LCBpZiBJIGFtIGRyYWdnaW5nIG92ZXIgYSB3aWRnZXQgdGhhdCBoYXMKICBzdWItaXRlbXMgbGlrZSBhIHRyZWUgb3IgdGFibGUsIHRoZSBzdWItaXRlbSBtYXkgYmUgaGlnaGxpZ2h0ZWQgdG8gaW5kaWNhdGUKICB0aGF0IHRoZSBkYXRhIHdpbGwgYmUgZHJvcHBlZCBvbiBhIHNwZWNpZmljIHN1Yi1pdGVtICh0aGlzIGlzIGNhbGxlZCBhIJNkcmFnCiAgdW5kZXIgZWZmZWN0lCkuIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGFyZSBvcmdhbml6aW5nIGRhdGEgaW50byBmb2xkZXJzIG9yCiAgcmVhcnJhbmdpbmcgaXRlbXMuIEluIHRoaXMgYXJ0aWNsZSwgSSB3aWxsIGV4cGxhaW4gaW4gbW9yZSBkZXRhaWwgdGhlIHRlcm1zIEkKICBoYXZlIGludHJvZHVjZWQgYWJvdmUgYW5kIGhvdyBTV1QgYWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIGRlZmluZSBhbmQKICBtYW5pcHVsYXRlIHRoZXNlIGNvbXBvbmVudHMuPC9wPgogIDx1bD4KICAgIDxsaT48YSBocmVmPSIjX0RyYWdfU291cmNlIj5EcmFnU291cmNlPC9hPjwvbGk+CiAgICA8bGk+PGEgaHJlZj0iI19Ecm9wX1RhcmdldCI+RHJvcFRhcmdldDwvYT48L2xpPgogICAgPGxpPjxhIGhyZWY9IiNfVXNpbmdfdGhlX0NsaXBib2FyZCI+Q2xpcGJvYXJkPC9hPjwvbGk+CiAgICA8bGk+PGEgaHJlZj0iI19UcmFuc2ZlciI+VHJhbnNmZXI8L2E+PC9saT4KICA8L3VsPgogIDxoMj48YSBuYW1lPSJfRHJhZ19Tb3VyY2UiPjwvYT5EcmFnIFNvdXJjZTwvaDI+CiAgPHAgYWxpZ249Imp1c3RpZnkiPkEgZHJhZyBzb3VyY2UgaXMgdGhlIHByb3ZpZGVyIG9mIGRhdGEgaW4gYSBEcmFnIGFuZCBEcm9wCiAgZGF0YSB0cmFuc2ZlciBhcyB3ZWxsIGFzIHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBEcmFnIGFuZCBEcm9wIG9wZXJhdGlvbi4gVGhlCiAgZGF0YSBwcm92aWRlZCBieSB0aGUgZHJhZyBzb3VyY2UgbWF5IGJlIHRyYW5zZmVycmVkIHRvIGFub3RoZXIgbG9jYXRpb24gaW4gdGhlCiAgc2FtZSB3aWRnZXQsIHRvIGEgZGlmZmVyZW50IHdpZGdldCB3aXRoaW4gdGhlIHNhbWUgYXBwbGljYXRpb24sIG9yIHRvIGEKICBkaWZmZXJlbnQgYXBwbGljYXRpb24gYWx0b2dldGhlci4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gZHJhZyB0ZXh0IGZyb20geW91cgogIGFwcGxpY2F0aW9uIGFuZCBkcm9wIGl0IG9uIGFuIGVtYWlsIGFwcGxpY2F0aW9uLCBvciB5b3UgY291bGQgZHJhZyBhbiBpdGVtIGluCiAgYSB0cmVlIGFuZCBkcm9wIGl0IGJlbG93IGEgZGlmZmVyZW50IG5vZGUgaW4gdGhlIHNhbWUgdHJlZS48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPkxldCB1cyB3YWxrIHRocm91Z2ggYSBzaW1wbGUgZXhhbXBsZSBzaG93aW5nIGhvdyB0byBkZWZpbmUKICBhIGRyYWcgc291cmNlLiBUaGUgZXhhbXBsZSBpbiBMaXN0aW5nIDEgc2hvd3MgaG93IHRvIGRyYWcgdGV4dCBmcm9tIGEgbGFiZWwKICB3aWRnZXQuPC9wPgogIDx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9IndpZHRoOjY1MCI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyLXRvcDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgYm9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0O2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItcmlnaHQ6bm9uZTsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kczFDIiBocmVmPSIjX2RzMUQiPjE8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6Nzg4O2JvcmRlci10b3A6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIGJvcmRlci1sZWZ0Om1lZGl1bSBub25lO2JvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT5pbXBvcnQKICAgICAgICBvcmcuZWNsaXBzZS5zd3QuZG5kLio7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjI8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6Nzg4O2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+PC9jb2RlPiZuYnNwOzwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kczRDIiBocmVmPSIjX2RzNEQiPjM8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPjxmb250IGNvbG9yPSIjMDA4MEMwIj4vLwogICAgICAgIEVuYWJsZSBhIGxhYmVsIGFzIGEgRHJhZyBTb3VyY2U8L2ZvbnQ+PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHM0RCI+NDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6Nzg4O2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+ZmluYWwKICAgICAgICBMYWJlbCBkcmFnTGFiZWwgPSBuZXcgTGFiZWwoc2hlbGwsIFNXVC5CT1JERVIpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSI0MyIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDouNDVpbjtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2RzNEQiPjU8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPmRyYWdMYWJlbC5zZXRUZXh0KCZxdW90O3RleHQKICAgICAgICB0byBiZSB0cmFuc2ZlcnJlZCZxdW90Oyk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjY8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6Nzg4O2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+PC9jb2RlPiZuYnNwOzwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kczhDIiBocmVmPSIjX2RzOEQiPjc8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPjxmb250IGNvbG9yPSIjMDA4MEMwIj4vLwogICAgICAgIEFsbG93IGRhdGEgdG8gYmUgY29waWVkIG9yIG1vdmVkIGZyb20gdGhlIGRyYWcgc291cmNlPC9mb250PjwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSI0MyIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDouNDVpbjtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2RzOEQiPjg8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPmludAogICAgICAgIG9wZXJhdGlvbnMgPSBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfQ09QWTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kczhEIj45PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT5EcmFnU291cmNlCiAgICAgICAgc291cmNlID0gbmV3IERyYWdTb3VyY2UoZHJhZ0xhYmVsLCBvcGVyYXRpb25zKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+MTA8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6Nzg4O2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+PC9jb2RlPiZuYnNwOzwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kczEyQyIgaHJlZj0iI19kczEyRCI+MTE8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPjxmb250IGNvbG9yPSIjMDA4MEMwIj4vLwogICAgICAgIFByb3ZpZGUgZGF0YSBpbiBUZXh0IGZvcm1hdDwvZm9udD48L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kczEyRCI+MTI8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPlRyYW5zZmVyW10KICAgICAgICB0eXBlcyA9IG5ldyBUcmFuc2ZlcltdIHtUZXh0VHJhbnNmZXIuZ2V0SW5zdGFuY2UoKX07PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHMxMkQiPjEzPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT5zb3VyY2Uuc2V0VHJhbnNmZXIodHlwZXMpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSI0MyIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDouNDVpbjtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij4xNDwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT48L2NvZGU+Jm5ic3A7PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgbmFtZT0iX2RzMTVDIiBocmVmPSIjX2RzMTVEIj4xNTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6Nzg4O2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+c291cmNlLmFkZERyYWdMaXN0ZW5lcihuZXcKICAgICAgICBEcmFnU291cmNlTGlzdGVuZXIoKSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kczE2QyIgaHJlZj0iI19kczE2RCI+MTY8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOwogICAgICAgIHB1YmxpYyB2b2lkIGRyYWdTdGFydChEcmFnU291cmNlRXZlbnQgZXZlbnQpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kczE2RCI+MTc8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIDxmb250IGNvbG9yPSIjMDA4MEMwIj4vLyBPbmx5IHN0YXJ0IHRoZSBkcmFnIGlmIHRoZXJlIGlzIGFjdHVhbGx5IHRleHQKICAgICAgICBpbiB0aGU8L2ZvbnQ+PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHMxNkQiPjE4PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAJCTxmb250IGNvbG9yPSIjMDA4MEMwIj4vLyBsYWJlbCAtIHRoaXMgdGV4dCB3aWxsIGJlIHdoYXQgaXMgZHJvcHBlZCBvbiB0aGUgdGFyZ2V0LjwvZm9udD48L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kczE2RCI+MTk8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2lmCiAgICAgICAgKGRyYWdMYWJlbC5nZXRUZXh0KCkubGVuZ3RoKCkgPT0gMCkgezwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSI0MyIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDouNDVpbjtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2RzMTZEIj4yMDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6Nzg4O2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ZXZlbnQuZG9pdAogICAgICAgID0gZmFsc2U7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHMxNkQiPjIxPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHMxNkQiPjIyPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsKICAgICAgICB9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kczIzQyIgaHJlZj0iI19kczIzRCI+MjM8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOwogICAgICAgIHB1YmxpYyB2b2lkIGRyYWdTZXREYXRhKERyYWdTb3VyY2VFdmVudCBldmVudCkgezwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSI0MyIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDouNDVpbjtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2RzMjNEIj4yNDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6Nzg4O2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+PGZvbnQgY29sb3I9IiMwMDgwQzAiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIC8vIFByb3ZpZGUgdGhlIGRhdGEgb2YgdGhlIHJlcXVlc3RlZCB0eXBlLjwvZm9udD48L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kczIzRCI+MjU8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2lmCiAgICAgICAgKFRleHRUcmFuc2Zlci5nZXRJbnN0YW5jZSgpLmlzU3VwcG9ydGVkVHlwZShldmVudC5kYXRhVHlwZSkpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kczIzRCI+MjY8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2V2ZW50LmRhdGEKICAgICAgICA9IGRyYWdMYWJlbC5nZXRUZXh0KCk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHMyM0QiPjI3PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHMyM0QiPjI4PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsKICAgICAgICB9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kczI5QyIgaHJlZj0iI19kczI5RCI+Mjk8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOwogICAgICAgIHB1YmxpYyB2b2lkIGRyYWdGaW5pc2hlZChEcmFnU291cmNlRXZlbnQgZXZlbnQpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kczI5RCI+MzA8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxmb250IGNvbG9yPSIjMDA4MEMwIj4vLwogICAgICAgIElmIGEgbW92ZSBvcGVyYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkLCByZW1vdmUgdGhlIGRhdGE8L2ZvbnQ+PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHMyOUQiPjMxPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Zm9udCBjb2xvcj0iIzAwODBDMCI+Ly8KICAgICAgICBmcm9tIHRoZSBzb3VyY2U8L2ZvbnQ+PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHMyOUQiPjMyPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtpZgogICAgICAgIChldmVudC5kZXRhaWwgPT0gRE5ELkRST1BfTU9WRSk8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kczI5RCI+MzM8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2RyYWdMYWJlbC5zZXRUZXh0KCZxdW90OyZxdW90Oyk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHMyOUQiPjM0PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo3ODg7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAmbmJzcDt9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjQzIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOi40NWluO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjM1PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjc4ODtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOwogICAgICAgIH08L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iNDMiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6LjQ1aW47Ym9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBib3JkZXItYm90dG9tOnNvbGlkIHdpbmRvd3RleHQgLjVwdDtib3JkZXItcmlnaHQ6bm9uZTtwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjM2PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6Nzg4O2JvcmRlci10b3A6bWVkaXVtIG5vbmU7Ym9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7CiAgYm9yZGVyLWJvdHRvbTouNXB0IHNvbGlkIHdpbmRvd3RleHQ7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT59KTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8cCBhbGlnbj0ibGVmdCI+TGlzdGluZyAxOiBEcmFnZ2luZyB0ZXh0IGZyb20gYSBMYWJlbCB3aWRnZXQuCiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9kczFEIiBocmVmPSIjX2RzMUMiPjxiPkxpbmUgMTo8L2I+PC9hPjxicj4KICBBbGwgdGhlIFNXVCBkcmFnIGFuZCBkcm9wIGNsYXNzZXMgYXJlIGRlZmluZWQgaW4gdGhlIHBhY2thZ2UKICBvcmcuZWNsaXBzZS5zd3QuZG5kLjwvcD4KICA8cCBhbGlnbj0ianVzdGlmeSI+PGEgbmFtZT0iX2RzNEQiIGhyZWY9IiNfZHM0QyI+PGI+TGluZXMgMyB0byA1OjwvYj48L2E+PGJyPgogIENyZWF0ZSBhIHdpZGdldC4gSW4gb3JkZXIgdG8gc3RhcnQgYSBkcmFnLCB0aGUgdXNlciBob2xkcyB0aGUgbW91c2UgYnV0dG9uCiAgZG93biBpbiBhIHdpZGdldCBhbmQgZHJhZ3MgdGhlIG1vdXNlLiBJbiBvdXIgZXhhbXBsZSwgdGhlIHVzZXIgc3RhcnRzIHRoZSBkcmFnCiAgaW4gdGhlIGxhYmVsLiBOb3RlIHRoYXQgeW91IGNhbm5vdCBoYXZlIG11bHRpcGxlIGRyYWcgc291cmNlcyBvbiBvbmUgd2lkZ2V0LgogIElmIHlvdSB0cnkgdG8gY3JlYXRlIGEgc2Vjb25kIGRyYWcgc291cmNlLCBhbiBTV1RFcnJvciB3aWxsIGJlIHRocm93bi48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9kczhEIiBocmVmPSIjX2RzOEMiPjxiPkxpbmVzIDcgdG8gOTo8L2I+PC9hPjxicj4KICBUbyBtYWtlIGEgd2lkZ2V0IGludG8gYSBkcmFnIHNvdXJjZSwgd2UgbXVzdCBjcmVhdGUgYW4KICBvcmcuZWNsaXBzZS5zd3QuZG5kLkRyYWdTb3VyY2Ugb2JqZWN0LiBUaGUgRHJhZ1NvdXJjZSBjb25zdHJ1Y3RvciB0YWtlcyB0d28KICBhcmd1bWVudHMsIHRoZSB3aWRnZXQgdGhhdCB3aWxsIGJlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZHJhZyBzb3VyY2UgYW5kIHRoZQogIG9wZXJhdGlvbnMgdGhhdCBhcmUgYWxsb3dlZC4gVGhlIGFsbG93ZWQgb3BlcmF0aW9ucyBkZXRlcm1pbmUgd2hhdCBraW5kIG9mCiAgYWN0aW9ucyB0aGUgZHJvcCB0YXJnZXQgY2FuIGRvIHdpdGggdGhlIGRhdGEgYmVpbmcgdHJhbnNmZXJyZWQuIFRoZSBhbGxvd2VkCiAgdmFsdWVzIGFyZSBhbnkgYml0d2lzZSBPUiBjb21iaW5hdGlvbiBvZiBETkQuRFJPUF9DT1BZLCBETkQuRFJPUF9NT1ZFIG9yCiAgRE5ELkRST1BfTElOSy4gSW4gdGhlIGV4YW1wbGUsIHdlIGFyZSBhbGxvd2luZyB0aGUgZGF0YSB0byBiZSBjb3BpZWQgb3IgbW92ZWQuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij48YSBuYW1lPSJfZHMxMkQiIGhyZWY9IiNfZHMxMkMiPjxiPkxpbmVzIDExIHRvIDEzOjwvYj48L2E+PGJyPgogIFRvIGNvbXBsZXRlIHRoZSBkZWZpbml0aW9uIG9mIGEgZHJhZyBzb3VyY2UsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHR5cGVzIG9mCiAgZGF0YSB0aGF0IGNhbiBiZSB0cmFuc2ZlcnJlZC4gQSBkYXRhIHR5cGUgaXMgZGVmaW5lZCBieSBhIHN1YmNsYXNzCiAgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlciBzdWNoIGFzIFRleHRUcmFuc2ZlciBvciBGaWxlVHJhbnNmZXIuIEZvciBhCiAgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgVHJhbnNmZXIgdHlwZXMgc2VlIDxhIGhyZWY9IiNfVHJhbnNmZXIiPlRyYW5zZmVyPC9hPi4KICBBIGRyYWcgc291cmNlIGNhbiBwcm92aWRlIG1vcmUgdGhhbiBvbmUgZm9ybWF0IG9mIHRoZSBkYXRhLCBob3dldmVyLCBpdCBpcwogIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhlIGRhdGEgaW4gYW55IG9mIHRoZSBzcGVjaWZpZWQgZm9ybWF0cyB3aGVuIHJlcXVlc3RlZC4KICBJbiB0aGlzIGV4YW1wbGUsIHRoZSB1c2VyIGNhbiBkcmFnIHRleHQgZnJvbSB0aGUgbGFiZWwuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij48YSBuYW1lPSJfZHMxNUQiIGhyZWY9IiNfZHMxNUMiPjxiPkxpbmUgMTU6PC9iPjwvYT48YnI+CiAgT25jZSB0aGUgZHJhZyBzb3VyY2UgaXMgZGVmaW5lZCwgYSBtZWNoYW5pc20gaXMgcmVxdWlyZWQgZm9yIGl0IHRvIGludGVyYWN0CiAgd2l0aCB0aGUgRHJhZyBhbmQgRHJvcCBvcGVyYXRpb24uIEFkZGluZyBhIERyYWdTb3VyY2VMaXN0ZW5lciBkb2VzIHRoaXMuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij5UaGUgZm9sbG93aW5nIGV2ZW50IHNlcXVlbmNlcyBtYXkgb2NjdXI6PC9wPgogIDxvbD4KICAgIDxsaT5kcmFnU3RhcnQ8L2xpPgogICAgPGxpPmRyYWdTdGFydCwgb25lIG9yIG1vcmUgZHJhZ1NldERhdGEsIGRyYWdGaW5pc2hlZDwvbGk+CiAgICA8bGk+ZHJhZ1N0YXJ0LCBkcmFnRmluaXNoZWQ8L2xpPgogIDwvb2w+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9kczE2RCIgaHJlZj0iI19kczE2QyI+PGI+TGluZXMgMTYgdG8gMjI6PC9iPjwvYT48YnI+CiAgVGhlIGRyYWdTdGFydCBldmVudCBzaWduYWxzIHRoYXQgdGhlIHVzZXIgaGFzIHBlcmZvcm1lZCB0aGUgYWN0aW9uIHRoYXQKICBpbml0aWF0ZXMgYSBEcmFnIGFuZCBEcm9wIG9wZXJhdGlvbi4gVGhlIGV4YWN0IGFjdGlvbiB0YWtlbiBieSB0aGUgdXNlcgogIGRlcGVuZHMgb24gdGhlIHBsYXRmb3JtIJYgb24gV2luZG93cyBmb3IgZXhhbXBsZSwgdGhlIHVzZXIgcHJlc3NlcyBkb3duIHdpdGgKICB0aGUgbGVmdCBtb3VzZSBidXR0b24gYW5kIGRyYWdzIGZvciBhIGNlcnRhaW4gbnVtYmVyIG9mIHBpeGVscyAodGhlIGV4YWN0CiAgZGlzdGFuY2UgaXMgY29uZmlndXJhYmxlIGJ5IHRoZSB1c2VyIGluIHRoZSBNb3VzZSBjb250cm9sIHBhbmVsKS4gT24gTW90aWYsCiAgdGhlIHVzZXIgcHJlc3NlcyBkb3duIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uLiBUaGUgYXBwbGljYXRpb24gZG9lcyBub3QgbmVlZAogIHRvIGJlIGNvbmNlcm5lZCBhYm91dCB0aGUgZXhhY3QgY29uZGl0aW9ucyB0aGF0IHN0YXJ0ZWQgdGhlIG9wZXJhdGlvbiBiZWNhdXNlCiAgU1dUIGhhbmRsZXMgdGhlc2UgcGxhdGZvcm0gZGlmZmVyZW5jZXMuIFdoZW4gdGhlIGRyYWdTdGFydCBldmVudCBpcyByZWNlaXZlZCwKICB0aGUgYXBwbGljYXRpb24gaGFzIHRoZSBjaG9pY2UgdG8gc3RhcnQgYSBEcmFnIGFuZCBEcm9wIG9wZXJhdGlvbiBvciBub3QuIEZvcgogIGV4YW1wbGUsIGlmIG5vIHZhbGlkIGl0ZW1zIGFyZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW4gdGhlIGRyYWcgc291cmNlIHdpZGdldCwKICB0aGUgYXBwbGljYXRpb24gbWF5IGNob29zZSB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIG9wZXJhdGlvbiBpcyBjYW5jZWxsZWQKICBieSBzZXR0aW5nIHRoZSBldmVudC5kb2l0IGZpZWxkIHRvIJFmYWxzZZIuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij5Ob3RlOiB0aGUgYXBwbGljYXRpb24gaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgdGhlIHR5cGUKICBvZiBkYXRhIHRoYXQgd2lsbCBiZSB0cmFuc2ZlcnJlZCB1bnRpbCB0aGUgZHJhZ1N0YXJ0IGV2ZW50IGhhcyBiZWVuIHJlY2VpdmVkLgogIFRoYXQgaXMsIHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVmZXIgdGhlIGNhbGwgdG8gRHJhZ1NvdXJjZS5zZXRUcmFuc2ZlciB1bnRpbAogIHRoZSBkcmFnU3RhcnQgZXZlbnQuIEhvd2V2ZXIsIG9uY2UgdGhlIGRyYWdTdGFydCBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQsIGlmCiAgbm8gdHJhbnNmZXIgdHlwZXMgaGF2ZSBiZWVuIHNwZWNpZmllZCBmb3IgdGhlIGRyYWcgc291cmNlLCB0aGUgRHJhZyBhbmQgRHJvcAogIG9wZXJhdGlvbiB3aWxsIGJlIGNhbmNlbGxlZC48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPkJ5IGFsbG93aW5nIHRoZSBEcmFnIGFuZCBEcm9wIG9wZXJhdGlvbiwgdGhlIGFwcGxpY2F0aW9uIGlzCiAgbWFraW5nIGEgcHJvbWlzZSB0byBwcm92aWRlIGRhdGEgb2YgdGhlIHNwZWNpZmllZCB0eXBlIHdoZW4gcmVxdWVzdGVkLiBGYWlsdXJlCiAgdG8gZG8gc28gaXMgYSB2aW9sYXRpb24gb2YgdGhlIERORCBjb250cmFjdCBhbmQgY291bGQgcmVzdWx0IGluIHVuZXhwZWN0ZWQKICBiZWhhdmlvci48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9kczIzRCIgaHJlZj0iI19kczIzQyI+PGI+TGluZXMgMjMgdG8gMjg6PC9iPjwvYT48YnI+CiAgVGhlIGRyYWdTZXREYXRhIGV2ZW50IGlzIGEgcmVxdWVzdCBmb3IgdGhlIGRhdGEgcHJvbWlzZWQgaW4gdGhlIGRyYWdTdGFydAogIGV2ZW50LiBUaGlzIGV2ZW50IG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZWl0aGVyIHJlcGVhdGVkbHkgZm9yIHRoZSBzYW1lCiAgZGF0YSB0eXBlIG9yIGZvciBhbnkgb2YgdGhlIGRhdGEgdHlwZXMgcHJvbWlzZWQuIE9uIHNvbWUgcGxhdGZvcm1zLCBhCiAgcG90ZW50aWFsIGRyb3AgdGFyZ2V0IGNhbiByZXF1ZXN0IGRhdGEgd2hlbiB0aGUgbW91c2UgaXMgbW92aW5nIG92ZXIgdGhlIGRyb3AKICB0YXJnZXQgKGUuZy4gV2luZG93cykgYW5kIG9uIHNvbWUgcGxhdGZvcm1zIHRoZSBkYXRhIG1heSBvbmx5IGJlIHJlcXVlc3RlZAogIHdoZW4gYSBkcm9wIGlzIHBlcmZvcm1lZCAodGhlIG1vdXNlIGlzIHJlbGVhc2VkIG92ZXIgYSB2YWxpZCBkcm9wIHNpdGUpIChlLmcuCiAgTW90aWYpLiBUaGVyZWZvcmUsIGRvIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyB0aGF0IHRoZSBkcmFnIGFuZCBkcm9wCiAgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCB3aGVuIHJlY2VpdmluZyB0aGlzIGV2ZW50LiBUaGVyZSBpcyBubyB3YXkgdG8ga25vdwogIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGRyb3BwZWQgliBpdCBjb3VsZCBiZSBkcm9wcGVkIG9uIHRoZSBzYW1lCiAgYXBwbGljYXRpb24sIGV2ZW4gb24gdGhlIHNhbWUgd2lkZ2V0IG9yIG9uIGFub3RoZXIgYXBwbGljYXRpb24uPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij5UaGUgdHlwZSBvZiBkYXRhIGJlaW5nIHJlcXVlc3RlZCBpcyBzcGVjaWZpZWQgaW4gdGhlCiAgZXZlbnQuZGF0YVR5cGUgZmllbGQuIFRoZSBldmVudC5kYXRhVHlwZSBmaWVsZCBjb250YWlucyBhIFRyYW5zZmVyRGF0YSBvYmplY3QuCiAgV2hpbGUgdGhlIGZpZWxkcyBvZiB0aGUgVHJhbnNmZXJEYXRhIG9iamVjdCBhcmUgcHVibGljLCB0aGV5IGFyZSBwbGF0Zm9ybQogIGRlcGVuZGFudC4gVGhlcmVmb3JlLCB5b3Ugc2hvdWxkIG5vdCBhY2Nlc3MgdGhlIGZpZWxkcyBkaXJlY3RseSBidXQgcmF0aGVyCiAgcGFzcyB0aGUgVHJhbnNmZXJEYXRhIHRvIGEgVHJhbnNmZXIgb2JqZWN0IHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBkYXRhLiBUaGlzCiAgaXMgZG9uZSBpbiB0aGUgZXhhbXBsZSBieSBjYWxsaW5nIFRleHRUcmFuc2Zlci5nZXRJbnN0YW5jZSgpLmlzU3VwcG9ydGVkVHlwZQogIChsaW5lIDI1KS48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPlRoZSBkcmFnIHNvdXJjZSBtdXN0IGZpbGwgaW4gdGhlIGV2ZW50LmRhdGEgZmllbGQuIFRoZQogIGV4YWN0IGZvcm0gb2YgdGhlIGRhdGEgZGVwZW5kcyBvbiB0aGUgVHJhbnNmZXIgdHlwZS4gRm9yIGV4YW1wbGUsIFRleHRUcmFuc2ZlcgogIGV4cGVjdHMgYSBTdHJpbmcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVudGlyZSB0ZXh0IHdoZXJlYXMgYSBGaWxlVHJhbnNmZXIKICBleHBlY3RzIGEgU3RyaW5nIGFycmF5IHdoZXJlIGVhY2ggZW50cnkgaW4gdGhlIGFycmF5IGlzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGEKICBGaWxlLiBUaGUgamF2YWRvYyBmb3IgZWFjaCB0cmFuc2ZlciB0eXBlIHNob3VsZCBkZXNjcmliZSB0aGUgZXhwZWN0ZWQgdmFsdWUKICBmb3IgdGhlIEphdmEgb2JqZWN0IGJlaW5nIHRyYW5zZmVycmVkLiBNb3JlIGluZm9ybWF0aW9uIG9uIFRyYW5zZmVyIGFuZAogIFRyYW5zZmVyRGF0YSBpcyBhdmFpbGFibGUgaW4gdGhlIDxhIGhyZWY9IiNfVHJhbnNmZXIiPlRyYW5zZmVyPC9hPiBzZWN0aW9uIG9mCiAgdGhpcyBkb2N1bWVudC48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9kczI5RCIgaHJlZj0iI19kczI5QyI+PGI+TGluZXMgMjkgdG8gMzQ6PC9iPjwvYT48YnI+CiAgVGhlIGRyYWdGaW5pc2hlZCBldmVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb24gaXMgY29tcGxldGUuCiAgVGhlIHVzZXIgbWF5IGhhdmUgZHJvcHBlZCB0aGUgZGF0YSBvbiBhIHZhbGlkIGxvY2F0aW9uLCBkcm9wcGVkIHRoZSBkYXRhIG9uIGFuCiAgaW52YWxpZCBsb2NhdGlvbiBvciBoaXQgRXNjYXBlLiBJZiB0aGUgdXNlciBkcm9wcGVkIHRoZSBkYXRhIG9uIGFuIGludmFsaWQKICBsb2NhdGlvbiBvciBoaXQgRXNjYXBlLCB0aGUgZXZlbnQuZG9pdCBmaWVsZCB3aWxsIGJlIGZhbHNlIGFuZCB0aGUKICBldmVudC5kZXRhaWwgZmllbGQgd2lsbCBiZSBETkQuRFJPUF9OT05FLiBJZiB0aGUgdXNlciBkcm9wcGVkIHRoZSBkYXRhIG9uIGEKICB2YWxpZCBsb2NhdGlvbiwgdGhlIGV2ZW50LmRvaXQgZmllbGQgd2lsbCBiZSB0cnVlIGFuZCB0aGUgZXZlbnQuZGV0YWlsIGZpZWxkCiAgd2lsbCBpbmRpY2F0ZSB0aGUga2luZCBvZiBvcGVyYXRpb24gcGVyZm9ybWVkIGJ5IHRoZSBkcm9wIHRhcmdldC4gVGhpcyB3aWxsIGJlCiAgb25lIG9mIHZhbHVlcyBzcGVjaWZpZWQgaW4gdGFibGUgMS48L3A+CiAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iOTAlIj4KICAgIDx0cj4KICAgICAgPHRoIHdpZHRoPSIzMCUiIHZhbGlnbj0idG9wIiBoZWlnaHQ9IjE5Ij5kcmFnRmluaXNoZWQgZXZlbnQuZGV0YWlsIHZhbHVlPC90aD4KICAgICAgPHRoIHdpZHRoPSI3MCUiIHZhbGlnbj0idG9wIiBoZWlnaHQ9IjE5Ij5EZXNjcmlwdGlvbjwvdGg+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMwJSIgdmFsaWduPSJ0b3AiIGhlaWdodD0iMTkiPkRORC5EUk9QX0NPUFk8L3RkPgogICAgICA8dGQgd2lkdGg9IjcwJSIgdmFsaWduPSJ0b3AiIGhlaWdodD0iMTkiPlRoZSBkcm9wIHRhcmdldCBtYWRlIGEgY29weSBvZgogICAgICAgIHRoZSBkYXRhLjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMwJSIgdmFsaWduPSJ0b3AiIGhlaWdodD0iMjAiPkRORC5EUk9QX0xJTks8L3RkPgogICAgICA8dGQgd2lkdGg9IjcwJSIgdmFsaWduPSJ0b3AiIGhlaWdodD0iMjAiPlRoZSBkcm9wIHRhcmdldCBtYWRlIGEgbGluayB0bwogICAgICAgIHRoZSBkYXRhIJYgdXN1YWxseSBvbmx5IHVzZWQgZm9yIGZpbGVzLjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMwJSIgdmFsaWduPSJ0b3AiIGhlaWdodD0iMzgiPkRORC5EUk9QX01PVkU8L3RkPgogICAgICA8dGQgd2lkdGg9IjcwJSIgdmFsaWduPSJ0b3AiIGhlaWdodD0iMzgiPlRoZSBkcm9wIHRhcmdldCBtYWRlIGEgY29weSBvZgogICAgICAgIHRoZSBkYXRhIGFuZCB0aGUgZHJhZyBzb3VyY2Ugc2hvdWxkIG5vdyBkZWxldGUgdGhlIG9yaWdpbmFsIGFuZCB1cGRhdGUKICAgICAgICBpdHMgZGlzcGxheS48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMCUiIHZhbGlnbj0idG9wIiBoZWlnaHQ9IjU3Ij5ETkQuRFJPUF9UQVJHRVRfTU9WRTwvdGQ+CiAgICAgIDx0ZCB3aWR0aD0iNzAlIiB2YWxpZ249InRvcCIgaGVpZ2h0PSI1NyI+VGhlIGRyb3AgdGFyZ2V0IG1vdmVkIHRoZSBkYXRhCiAgICAgICAgZnJvbSBpdHMgb3JpZ2luYWwgbG9jYXRpb24gdG8gYSBuZXcgbG9jYXRpb24uIFRoaXMgaXMgdXN1YWxseSBvbmx5IHVzZWQKICAgICAgICB3aXRoIGZpbGVzLiBJbiB0aGlzIGNhc2UsIHRoZSBkcmFnIHNvdXJjZSBkb2VzIG5vdCBuZWVkIHRvIGRlbGV0ZSB0aGUKICAgICAgICBvcmlnaW5hbDsgaXQganVzdCBuZWVkcyB0byB1cGRhdGUgaXRzIGRpc3BsYXkgaW5mb3JtYXRpb24uPC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8cCBhbGlnbj0ibGVmdCI+VGFibGUgMTogVmFsaWQgZHJhZ0ZpbmlzaGVkIGV2ZW50LmRldGFpbCB2YWx1ZXMKICA8aDI+PGEgbmFtZT0iX0Ryb3BfVGFyZ2V0Ij48L2E+RHJvcCBUYXJnZXQ8L2gyPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij5BIGRyb3AgdGFyZ2V0IHJlY2VpdmVzIGRhdGEgaW4gYSBEcmFnIGFuZCBEcm9wIG9wZXJhdGlvbi4KICBUaGUgZGF0YSByZWNlaXZlZCBieSB0aGUgZHJvcCB0YXJnZXQgbWF5IGhhdmUgY29tZSBmcm9tIHRoZSBzYW1lIHdpZGdldCwgZnJvbQogIGEgZGlmZmVyZW50IHdpZGdldCB3aXRoaW4gdGhlIHNhbWUgYXBwbGljYXRpb24sIG9yIGZyb20gYSBkaWZmZXJlbnQKICBhcHBsaWNhdGlvbiBhbHRvZ2V0aGVyLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBkcmFnIHRleHQgZnJvbSBhbiBlbWFpbAogIGFwcGxpY2F0aW9uIGFuZCBkcm9wIGl0IG9uIHlvdXIgYXBwbGljYXRpb24sIG9yIHlvdSBjb3VsZCBkcmFnIGFuIGl0ZW0gaW4gYQogIHRyZWUgYW5kIGRyb3AgaXQgYmVsb3cgYSBkaWZmZXJlbnQgbm9kZSBpbiB0aGUgc2FtZSB0cmVlLjwvcD4KICA8cCBhbGlnbj0ianVzdGlmeSI+TGV0IHVzIHdhbGsgdGhyb3VnaCBhIHNpbXBsZSBleGFtcGxlIHNob3dpbmcgaG93IHRvIGRlZmluZQogIGEgZHJvcCB0YXJnZXQuIFRoZSBleGFtcGxlIGluIExpc3RpbmcgMiBzaG93cyBob3cgdG8gZHJvcCBmaWxlcyBvciB0ZXh0IG9uIGEKICB0YWJsZSB3aWRnZXQuPC9wPgogIDx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9IndpZHRoOjY4MDsKIGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXI6bWVkaXVtIG5vbmU7Ij4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyLXRvcDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgYm9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0O2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItcmlnaHQ6bm9uZTsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kdDFDIiBocmVmPSIjX2R0MUQiPjE8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MTA2MDtib3JkZXItdG9wOi41cHQgc29saWQgd2luZG93dGV4dDsKICBib3JkZXItbGVmdDptZWRpdW0gbm9uZTtib3JkZXItYm90dG9tOm1lZGl1bSBub25lO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+aW1wb3J0CiAgICAgICAgb3JnLmVjbGlwc2Uuc3d0LmRuZC4qOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+MjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+Jm5ic3A7PC90ZD4KICAgICAgPGNvZGU+PC9jb2RlPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgbmFtZT0iX2R0M0MiIGhyZWY9IiNfZHQzRCI+MzwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPjxmb250IGNvbG9yPSIjMDA4MEMwIj4vLwogICAgICAgIEVuYWJsZSBhIHRhYmxlIGFzIGEgRHJvcCBUYXJnZXQ8L2ZvbnQ+PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0M0QiPjQ8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT5maW5hbAogICAgICAgIFRhYmxlIGRyb3BUYWJsZSA9IG5ldyBUYWJsZShzaGVsbCwgU1dULkJPUkRFUik7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0M0QiPjU8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT5mb3IKICAgICAgICAoaW50IGkgPSAwOyBpICZsdDsgMTA7IGkrKykgezwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDNEIj42PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgVGFibGVJdGVtIGl0ZW0gPSBuZXcgVGFibGVJdGVtKGRyb3BUYWJsZSwgU1dULk5PTkUpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDNEIj43PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgaXRlbS5zZXRUZXh0KCZxdW90O2l0ZW0mcXVvdDsgKyBJKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQzRCI+ODwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPn08L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjk8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPjwvY29kZT4mbmJzcDs8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgbmFtZT0iX2R0MTBDIiBocmVmPSIjX2R0MTBEIj4xMDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPjxmb250IGNvbG9yPSIjMDA4MEMwIj4vLwogICAgICAgIEFsbG93IGRhdGEgdG8gYmUgY29waWVkIG9yIG1vdmVkIHRvIHRoZSBkcm9wIHRhcmdldDwvZm9udD48L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQxMEQiPjExPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+b3BlcmF0aW9ucwogICAgICAgID0gRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9ERUZBVUxUOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDEwRCI+MTI8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT5Ecm9wVGFyZ2V0CiAgICAgICAgdGFyZ2V0ID0gbmV3IERyb3BUYXJnZXQoZHJvcFRhYmxlLCBvcGVyYXRpb25zKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjEzPC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT48L2NvZGU+Jm5ic3A7PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kdDE0QyIgaHJlZj0iI19kdDE0RCI+MTQ8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT48Zm9udCBjb2xvcj0iIzAwODBDMCI+Ly8KICAgICAgICBSZWNlaXZlIGRhdGEgaW4gVGV4dCBvciBGaWxlIGZvcm1hdDwvZm9udD48L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQxNEQiPjE1PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+ZmluYWwKICAgICAgICBUZXh0VHJhbnNmZXIgdGV4dFRyYW5zZmVyID0gVGV4dFRyYW5zZmVyLmdldEluc3RhbmNlKCk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0MTREIj4xNjwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPmZpbmFsCiAgICAgICAgRmlsZVRyYW5zZmVyIGZpbGVUcmFuc2ZlciA9IEZpbGVUcmFuc2Zlci5nZXRJbnN0YW5jZSgpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDE0RCI+MTc8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT50eXBlcwogICAgICAgID0gbmV3IFRyYW5zZmVyW10ge2ZpbGVUcmFuc2ZlciwgdGV4dFRyYW5zZmVyfTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQxNEQiPjE4PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+dGFyZ2V0LnNldFRyYW5zZmVyKHR5cGVzKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjE5PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT48L2NvZGU+Jm5ic3A7PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kdDIwQyIgaHJlZj0iI19kdDIwRCI+MjA8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT50YXJnZXQuYWRkRHJvcExpc3RlbmVyKG5ldwogICAgICAgIERyb3BUYXJnZXRMaXN0ZW5lcigpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kdDIxQyIgaHJlZj0iI19kdDIxRCI+MjE8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsKICAgICAgICBwdWJsaWMgdm9pZCBkcmFnRW50ZXIoRHJvcFRhcmdldEV2ZW50IGV2ZW50KSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBuYW1lPSJfZHQyMkMiIGhyZWY9IiNfZHQyMkQiPjIyPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA9PSBETkQuRFJPUF9ERUZBVUxUKSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0MjJEIj4yMzwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIGlmICgoZXZlbnQub3BlcmF0aW9ucyAmYW1wOyBETkQuRFJPUF9DT1BZKSAhPSAwKSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0MjJEIj4yNDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIGV2ZW50LmRldGFpbCA9IERORC5EUk9QX0NPUFk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0MjJEIj4yNTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIH0gZWxzZSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0MjJEIj4yNjwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIGV2ZW50LmRldGFpbCA9IERORC5EUk9QX05PTkU7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0MjJEIj4yNzwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwO308L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQyMkQiPjI4PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7fTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgbmFtZT0iX2R0MjlDIiBocmVmPSIjX2R0MjlEIj4yOTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPjxmb250IGNvbG9yPSIjMDA4MEMwIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAvLyB3aWxsIGFjY2VwdCB0ZXh0IGJ1dCBwcmVmZXIgdG8gaGF2ZSBmaWxlcyBkcm9wcGVkPC9mb250PjwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDI5RCI+MzA8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAmbmJzcDtmb3IgKGludCBpID0gMDsgaSAmbHQ7IGV2ZW50LmRhdGFUeXBlcy5sZW5ndGg7IGkrKykgezwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDI5RCI+MzE8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAmbmJzcDtpZiAoZmlsZVRyYW5zZmVyLmlzU3VwcG9ydGVkVHlwZShldmVudC5kYXRhVHlwZXNbaV0pKXs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQyOUQiPjMyPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7ZXZlbnQuY3VycmVudERhdGFUeXBlID0gZXZlbnQuZGF0YVR5cGVzW2ldOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDI5RCI+MzM8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAmbmJzcDs8Zm9udCBjb2xvcj0iIzAwODBDMCI+Ly8gZmlsZXMgc2hvdWxkIG9ubHkgYmUgY29waWVkPC9mb250PjwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDI5RCI+MzQ8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICBpZiAoZXZlbnQuZGV0YWlsICE9IERORC5EUk9QX0NPUFkpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQyOUQiPjM1PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgZXZlbnQuZGV0YWlsID0gRE5ELkRST1BfTk9ORTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQyOUQiPjM2PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7fTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDI5RCI+Mzc8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICBicmVhazs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQyOUQiPjM4PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgfTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDI5RCI+Mzk8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAmbmJzcDt9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij40MDwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7CiAgICAgICAgfTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgbmFtZT0iX2R0NDFDIiBocmVmPSIjX2R0NDFEIj40MTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOwogICAgICAgIHB1YmxpYyB2b2lkIGRyYWdPdmVyKERyb3BUYXJnZXRFdmVudCBldmVudCkgezwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgbmFtZT0iX2R0NDJDIiBocmVmPSIjX2R0NDJEIj40MjwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIGV2ZW50LmZlZWRiYWNrID0gRE5ELkZFRURCQUNLX1NFTEVDVCB8IERORC5GRUVEQkFDS19TQ1JPTEw7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBuYW1lPSJfZHQ0M0MiIGhyZWY9IiNfZHQ0M0QiPjQzPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7aWYKICAgICAgICAodGV4dFRyYW5zZmVyLmlzU3VwcG9ydGVkVHlwZShldmVudC5jdXJyZW50RGF0YVR5cGUpKSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NDNEIj40NDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIDxmb250IGNvbG9yPSIjMDA4MEMwIj4vLyBOT1RFOiBvbiB1bnN1cHBvcnRlZCBwbGF0Zm9ybXMgdGhpcyB3aWxsIHJldHVybiBudWxsPC9mb250PjwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDQzRCI+NDU8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICBPYmplY3QgbyA9IHRleHRUcmFuc2Zlci5uYXRpdmVUb0phdmEoZXZlbnQuY3VycmVudERhdGFUeXBlKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ0M0QiPjQ2PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgU3RyaW5nIHQgPSAoU3RyaW5nKW87PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NDNEIj40NzwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2lmICh0ICE9IG51bGwpIFN5c3RlbS5vdXQucHJpbnRsbih0KTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ0M0QiPjQ4PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7fTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+NTA8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIH08L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kdDUxQyIgaHJlZj0iI19kdDUxRCI+NTE8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICBwdWJsaWMgdm9pZCBkcmFnT3BlcmF0aW9uQ2hhbmdlZChEcm9wVGFyZ2V0RXZlbnQgZXZlbnQpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ1MUQiPjUyPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA9PSBETkQuRFJPUF9ERUZBVUxUKSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NTFEIj41MzwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIGlmICgoZXZlbnQub3BlcmF0aW9ucyAmYW1wOyBETkQuRFJPUF9DT1BZKSAhPSAwKSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NTFEIj41NDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIGV2ZW50LmRldGFpbCA9IERORC5EUk9QX0NPUFk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NTFEIj41NTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIH0gZWxzZSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NTFEIj41NjwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIGV2ZW50LmRldGFpbCA9IERORC5EUk9QX05PTkU7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NTFEIj41NzwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIH08L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ1MUQiPjU4PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgfTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDUxRCI+NTk8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Zm9udCBjb2xvcj0iIzAwODBDMCI+Ly8gYWxsb3cgdGV4dCB0byBiZSBtb3ZlZAogICAgICAgIGJ1dCBmaWxlcyBzaG91bGQgb25seSBiZSBjb3BpZWQ8L2ZvbnQ+PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NTFEIj42MDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2lmCiAgICAgICAgKGZpbGVUcmFuc2Zlci5pc1N1cHBvcnRlZFR5cGUoZXZlbnQuY3VycmVudERhdGFUeXBlKSl7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NTFEIj42MTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2lmIChldmVudC5kZXRhaWwgIT0KICAgICAgICBETkQuRFJPUF9DT1BZKSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NTFEIj42MjwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2V2ZW50LmRldGFpbAogICAgICAgID0gRE5ELkRST1BfTk9ORTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ1MUQiPjYzPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7fTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDUxRCI+NjQ8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NTFEIj42NTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIH08L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kdDY2QyIgaHJlZj0iI19kdDY2RCI+NjY8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICBwdWJsaWMgdm9pZCBkcmFnTGVhdmUoRHJvcFRhcmdldEV2ZW50IGV2ZW50KSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NjZEIj42NzwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIH08L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9kdDY4QyIgaHJlZj0iI19kdDY4RCI+Njg8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICBwdWJsaWMgdm9pZCBkcm9wQWNjZXB0KERyb3BUYXJnZXRFdmVudCBldmVudCkgezwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDY4RCI+Njk8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICB9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBuYW1lPSJfZHQ3MEMiIGhyZWY9IiNfZHQ3MEQiPjcwPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgcHVibGljIHZvaWQgZHJvcChEcm9wVGFyZ2V0RXZlbnQgZXZlbnQpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ3MEQiPjcxPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7aWYKICAgICAgICAodGV4dFRyYW5zZmVyLmlzU3VwcG9ydGVkVHlwZShldmVudC5jdXJyZW50RGF0YVR5cGUpKSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NzBEIj43MjwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1N0cmluZyB0ZXh0ID0KICAgICAgICAoU3RyaW5nKWV2ZW50LmRhdGE7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NzBEIj43MzwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RhYmxlSXRlbSBpdGVtID0gbmV3CiAgICAgICAgVGFibGVJdGVtKGRyb3BUYWJsZSwgU1dULk5PTkUpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDcwRCI+NzQ8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtpdGVtLnNldFRleHQodGV4dCk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NzBEIj43NTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO308L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ3MEQiPjc2PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7aWYKICAgICAgICAoZmlsZVRyYW5zZmVyLmlzU3VwcG9ydGVkVHlwZShldmVudC5jdXJyZW50RGF0YVR5cGUpKXs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ3MEQiPjc3PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U3RyaW5nW10gZmlsZXMgPQogICAgICAgIChTdHJpbmdbXSlldmVudC5kYXRhOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDcwRCI+Nzg8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtmb3IgKGludCBpID0gMDsgaSAmbHQ7CiAgICAgICAgZmlsZXMubGVuZ3RoOyBpKyspIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ3MEQiPjc5PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGFibGVJdGVtCiAgICAgICAgaXRlbSA9IG5ldyBUYWJsZUl0ZW0oZHJvcFRhYmxlLCBTV1QuTk9ORSk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NzBEIj44MDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2l0ZW0uc2V0VGV4dChmaWxlc1tpXSk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2R0NzBEIj44MTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6MTA2MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO308L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfZHQ3MEQiPjgyPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDoxMDYwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7fTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19kdDcwRCI+ODM8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjEwNjA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICB9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIGJvcmRlci1ib3R0b206c29saWQgd2luZG93dGV4dCAuNXB0O2JvcmRlci1yaWdodDpub25lO3BhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+ODQ8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoxMDYwO2JvcmRlci10b3A6bWVkaXVtIG5vbmU7Ym9yZGVyLWxlZnQ6CiAgbWVkaXVtIG5vbmU7Ym9yZGVyLWJvdHRvbTouNXB0IHNvbGlkIHdpbmRvd3RleHQ7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT59KTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8cCBhbGlnbj0ibGVmdCI+TGlzdGluZyAyOiBEcm9wIHRleHQgb3IgZmlsZXMgb24gYSB0YWJsZSB3aWRnZXQKICA8cCBhbGlnbj0ianVzdGlmeSI+PGEgbmFtZT0iX2R0MUQiIGhyZWY9IiNfZHQxQyI+PGI+TGluZSAxOjwvYj48L2E+PGJyPgogIEFsbCB0aGUgcmVsYXRlZCBkcmFnIGFuZCBkcm9wIGNsYXNzZXMgYXJlIGRlZmluZWQgaW4gdGhlIHBhY2thZ2UKICBvcmcuZWNsaXBzZS5zd3QuZG5kLjwvcD4KICA8cCBhbGlnbj0ianVzdGlmeSI+PGEgbmFtZT0iX2R0M0QiIGhyZWY9IiNfZHQzQyI+PGI+TGluZXMgMyB0byA4OjwvYj48L2E+PGJyPgogIENyZWF0ZSBhIHdpZGdldC4gVGhlIHVzZXIgZHJhZ3MgdGhlIGRhdGEgb3ZlciBhIHRhcmdldCwgd2hpY2ggaW4gdXNlcgogIGludGVyZmFjZSB0ZXJtcyBpcyBzb21lIHZpc2libGUgd2lkZ2V0LiBJbiBvdXIgZXhhbXBsZSwgdGhlIHVzZXIgY2FuIGRyb3AgdGhlCiAgZGF0YSBvbiBhIHRhYmxlLiBOb3RlIHRoYXQgeW91IGNhbm5vdCBoYXZlIG11bHRpcGxlIGRyb3AgdGFyZ2V0cyBvbiBvbmUKICB3aWRnZXQuIElmIHlvdSB0cnkgdG8gY3JlYXRlIGEgc2Vjb25kIGRyb3AgdGFyZ2V0LCBhbiBTV1RFcnJvciB3aWxsIGJlIHRocm93bi48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9kdDEwRCIgaHJlZj0iI19kdDEwQyI+PGI+TGluZXMgMTAgdG8gMTI6PC9iPjwvYT48YnI+CiAgRGVmaW5lIHRoZSB0eXBlcyBvZiBvcGVyYXRpb25zIHRoYXQgdGhpcyBkcm9wIHRhcmdldCBpcyBsaWtlbHkgdG8gcGVyZm9ybSBvbgogIGFueSBkYXRhIGRyb3BwZWQgb24gaXQuIFRoaXMgaXMgYSBiaXR3aXNlIE9SIGNvbWJpbmF0aW9uIG9mIGFueSBvZgogIERORC5EUk9QX0NPUFksIERORC5EUk9QX01PVkUsIG9yIERORC5EUk9QX0xJTksuIEJ5IGRlZmF1bHQsIGlmIG5vIG9wZXJhdGlvbnMKICBhcmUgZGVmaW5lZCwgdGhlIERORC5EUk9QX01PVkUgb3BlcmF0aW9uIGlzIGFzc3VtZWQuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij5UaGUgb3BlcmF0aW9uIG1heSBhbHNvIGluY2x1ZGUgRE5ELkRST1BfREVGQVVMVCAoTm90ZTogdGhlCiAgRE5ELkRST1BfREVGQVVMVCBzdHlsZSBtdXN0IGJlIGNvbWJpbmVkIHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIG90aGVyCiAgRE5ELkRST1BfKiBzdHlsZXMpLiBUaGUgRE5ELkRST1BfREVGQVVMVCBzdHlsZSBhbGxvd3MgdGhlIGRyb3AgdGFyZ2V0IHRvCiAgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IG9wZXJhdGlvbiCWIHRoZSBkZWZhdWx0IG9wZXJhdGlvbiBpcyB3aGF0IGhhcHBlbnMgd2hlbgogIG5vIG1vZGlmaWVyIGtleXMgYXJlIHByZXNzZWQuIElmIHRoZSBETkQuRFJPUF9ERUZBVUxUIHN0eWxlIGlzIE5PVCBzcGVjaWZpZWQsCiAgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIHdpbGwgYmUgRE5ELkRST1BfTU9WRS4gU2VlIGFsc28gZHJhZ0VudGVyIGFuZAogIGRyYWdPcGVyYXRpb25DaGFuZ2VkIGJlbG93LjwvcD4KICA8cCBhbGlnbj0ianVzdGlmeSI+PGEgbmFtZT0iX2R0MTREIiBocmVmPSIjX2R0MTRDIj48Yj5MaW5lcyAxNCB0byAxODo8L2I+PC9hPjxicj4KICBEZWZpbmUgdGhlIHR5cGVzIG9mIGRhdGEgdGhhdCB0aGlzIGRyb3AgdGFyZ2V0IHdpbGwgYWNjZXB0LiBBIGRhdGEgdHlwZSBpcwogIGRlZmluZWQgYnkgYSBzdWJjbGFzcyBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyIHN1Y2ggYXMgVGV4dFRyYW5zZmVyIG9yCiAgRmlsZVRyYW5zZmVyLiBGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBUcmFuc2ZlciB0eXBlcyBzZWUgPGEgaHJlZj0iI19UcmFuc2ZlciI+VHJhbnNmZXI8L2E+LgogIEEgZHJvcCB0YXJnZXQgY2FuIGJlIHJlY2VwdGl2ZSB0byBtb3JlIHRoYW4gb25lIHR5cGUgb2YgZGF0YS4gVGhlIGN1cnJlbnQgMi4xCiAgaW1wbGVtZW50YXRpb24gd2lsbCwgaG93ZXZlciwgb25seSBhbGxvdyBvbmUgZm9ybWF0IHRvIGJlIHJldHJpZXZlZCBpbiB0aGUKICBmaW5hbCBkcm9wLiBUaGF0IGlzIHRvIHNheSwgdGhlIGRyb3AgdGFyZ2V0IGNhbiBpbmRpY2F0ZSB0aGF0IGl0IGlzIGludGVyZXN0ZWQKICBpbiBib3RoIHRleHQgYW5kIFJURiB0ZXh0LCBidXQgb25seSBvbmUgb2YgdGhlc2UgaXMgcHJvdmlkZWQgaW4gdGhlIGRyb3AgZXZlbnQKICCWIGVpdGhlciB0ZXh0IG9yIFJURiB0ZXh0LiBUaGUgYWR2YW50YWdlIG9mIHJlZ2lzdGVyaW5nIGZvciBib3RoIGZvcm1hdHMgaXMKICB0aGF0IHNvbWUgYXBwbGljYXRpb25zIG1heSBvbmx5IHByb3ZpZGUgdGV4dCBhbmQgc29tZSBtYXkgb25seSBwcm92aWRlIFJURgogIHRleHQuIElmIGFuIGFwcGxpY2F0aW9uIHByb3ZpZGVzIGJvdGgsIHlvdSBjYW4gY2hvb3NlIHdoaWNoIGZvcm1hdCB5b3Ugd291bGQKICBwcmVmZXIgdG8gcmVjZWl2ZS4gU2VlIGRyYWdFbnRlciBiZWxvdy48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9kdDIwRCIgaHJlZj0iI19kdDIwQyI+PGI+TGluZSAyMDo8L2I+PC9hPjxicj4KICBPbmNlIHRoZSBkcm9wIHRhcmdldCBpcyBkZWZpbmVkLCBhIG1lY2hhbmlzbSBpcyByZXF1aXJlZCBmb3IgaXQgdG8gaW50ZXJhY3QKICB3aXRoIHRoZSBEcmFnIGFuZCBEcm9wIG9wZXJhdGlvbi4gQWRkaW5nIGEgRHJvcFRhcmdldExpc3RlbmVyIGRvZXMgdGhpcy48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPlRoZSBmb2xsb3dpbmcgZXZlbnQgc2VxdWVuY2VzIG1heSBvY2N1cjo8L3A+CiAgPHVsPgogICAgPGxpPmRyYWdFbnRlciwgZHJhZ0xlYXZlPC9saT4KICAgIDxsaT5kcmFnRW50ZXIsIG9uZSBvciBtb3JlIGRyYWdPdmVyICosIGRyYWdMZWF2ZTwvbGk+CiAgICA8bGk+ZHJhZ0VudGVyLCBvbmUgb3IgbW9yZSBkcmFnT3ZlciAqLCBkcmFnTGVhdmUsIGRyb3BBY2NlcHQ8L2xpPgogICAgPGxpPmRyYWdFbnRlciwgb25lIG9yIG1vcmUgZHJhZ092ZXIgKiwgZHJhZ0xlYXZlLCBkcm9wQWNjZXB0LCBkcm9wPC9saT4KICA8L3VsPgogIDxwPiptYXkgYmUgYSBtaXh0dXJlIG9mIGRyYWdPdmVyIGFuZCBkcmFnT3BlcmF0aW9uQ2hhbmdlZDwvcD4KICA8cCBhbGlnbj0ianVzdGlmeSI+PGEgbmFtZT0iX2R0MjFEIiBocmVmPSIjX2R0MjFDIj48Yj5MaW5lIDIxIHRvIDQwOjwvYj48L2E+PGJyPgogIFRoZSBkcmFnRW50ZXIgZXZlbnQgb2NjdXJzIHdoZW4gYSBkcmFnIGFuZCBkcm9wIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBhbmQKICB0aGUgY3Vyc29yIGVudGVycyB0aGUgYm91bmRzIG9mIHRoZSBkcm9wIHRhcmdldCB3aWRnZXQuIElmIHRoZSBjdXJzb3IgbGVhdmVzCiAgdGhlIGJvdW5kcyBvZiB0aGUgd2lkZ2V0IGFuZCByZS1lbnRlcnMsIGFub3RoZXIgZHJhZ0VudGVyIGlzIGlzc3VlZC48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9kdDIyRCIgaHJlZj0iI19kdDIyQyI+PGI+TGluZXMgMjIgdG8gMjg6PC9iPjwvYT48YnI+CiAgQSBkcmFnIG92ZXIgZWZmZWN0IGlzIGEgdmlzdWFsIGN1ZSB0byB0aGUgdXNlciBhYm91dCB3aGF0IGtpbmQgb2Ygb3BlcmF0aW9uCiAgd2lsbCBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgZHJvcCBvY2N1cnMuIFRoZSBleGFjdCBhcHBlYXJhbmNlIG9mIHRoZSB2aXN1YWwgY3VlCiAgaXMgcGxhdGZvcm0gZGVwZW5kYW50IJYgc29tZSBleGFtcGxlcyBhcmUgc2hvd24gaW4gRmlndXJlIDIuIFRoZSBkcm9wIHRhcmdldAogIGNhbiB1cGRhdGUgdGhpcyBkcmFnIG92ZXIgZWZmZWN0IGJ5IHNldHRpbmcgdGhlIGV2ZW50LmRldGFpbCBmaWVsZCB0byBvbmUgb2YKICBETkQuRFJPUF9DT1BZLCBETkQuRFJPUF9NT1ZFLCBETkQuRFJPUF9MSU5LIG9yIERORC5EUk9QX05PTkUuIFRoZSB2YWx1ZSBzZXQgaW4KICB0aGUgZXZlbnQuZGV0YWlsIGZpZWxkIG11c3QgYmUgb25lIG9mIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUKICBldmVudC5vcGVyYXRpb25zIGZpZWxkLCB3aGljaCBpcyBhIGJpdHdpc2UgT1Igb2YgdGhlIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGJ5CiAgdGhlIERyYWdTb3VyY2UuIElmIGEgdmFsdWUgaXMgY2hvc2VuIHRoYXQgaXMgbm90IGFsbG93ZWQgYnkgdGhlIERyYWdTb3VyY2UsCiAgdGhlIG9wZXJhdGlvbiB3b3VsZCBiZSBzZXQgdG8gRE5ELkRST1BfTk9ORS4gVGhlIGV2ZW50LmRldGFpbCBmaWVsZCBjYW4gYWxzbwogIGJlIHVwZGF0ZWQgaW4gdGhlIGRyYWdPdmVyLCBkcmFnT3BlcmF0aW9uQ2hhbmdlZCwgZHJvcEFjY2VwdCBhbmQgZHJvcCBldmVudHMuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij5JbiBkcmFnRW50ZXIsIHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVmaW5lIHRoZSBkZWZhdWx0CiAgb3BlcmF0aW9uLiBBcyBkaXNjdXNzZWQgYWJvdmUsIGlmIHRoZSBkcm9wIHRhcmdldCBpcyBjcmVhdGVkIHdpdGggdGhlIHN0eWxlCiAgRE5ELkRST1BfREVGQVVMVCwgaXQgd2lsbCBiZSBub3RpZmllZCB3aGVuIHRoZXJlIGFyZSBubyB1c2VyIG1vZGlmaWVyIGtleXMKICBwcmVzc2VkLiBJbiB0aGlzIGNhc2UsIHRoZSBldmVudC5kZXRhaWwgZmllbGQgaW4gdGhlIGRyYWdFbnRlciBldmVudCBpcyBzZXQgdG8KICBETkQuRFJPUF9ERUZBVUxULiBUaGUgYXBwbGljYXRpb24gY2FuIHNwZWNpZnkgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIGJ5CiAgY2hhbmdpbmcgdGhlIGV2ZW50LmRldGFpbCBmaWVsZCB0byB0aGUgZGVzaXJlZCBvcGVyYXRpb24uIElmIHRoZSBhcHBsaWNhdGlvbgogIGRvZXMgbm90IGNoYW5nZSB0aGUgZXZlbnQuZGV0YWlsIGZpZWxkIGZyb20gRE5ELkRST1BfREVGQVVMVCB0byBzb21lCiAgb3BlcmF0aW9uLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgY2hhbmdlZCB0byBETkQuRFJPUF9NT1ZFLiBUaGUKICBETkQuRFJPUF9ERUZBVUxUIHZhbHVlIGlzIGFsc28gc2V0IGluIHRoZSBkcmFnT3BlcmF0aW9uQ2hhbmdlZCBldmVudC48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPkluIG91ciBleGFtcGxlLCB3ZSBtYWtlIENvcHkgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIGlmIGl0IGlzCiAgYWxsb3dlZCBieSB0aGUgZHJhZyBzb3VyY2UuPC9wPgogIDx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsKIGJvcmRlcjpub25lOyIgd2lkdGg9IjMwJSI+CiAgICA8dHI+CiAgICAgIDx0aCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+CiAgICAgICAgPHA+T3BlcmF0aW9uPC9wPgogICAgICA8L3RoPgogICAgICA8dGggdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiPldpbjMyIGN1cnNvcjwvdGg+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGFsaWduPSJjZW50ZXIiPk1vdmU8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGFsaWduPSJjZW50ZXIiPjxpbWcgYm9yZGVyPSIwIiB3aWR0aD0iMjEiIGhlaWdodD0iMzEiIHNyYz0iaW1hZ2VzL2ltYWdlMDA0LmpwZyI+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSIgYWxpZ249ImNlbnRlciI+Q29weTwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSIgYWxpZ249ImNlbnRlciI+PGltZyBib3JkZXI9IjAiIHdpZHRoPSIyNiIgaGVpZ2h0PSIzOCIgc3JjPSJpbWFnZXMvaW1hZ2UwMDYuanBnIj48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBhbGlnbj0iY2VudGVyIj5MaW5rPC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIiBhbGlnbj0iY2VudGVyIj48aW1nIGJvcmRlcj0iMCIgd2lkdGg9IjI3IiBoZWlnaHQ9IjM4IiBzcmM9ImltYWdlcy9pbWFnZTAwOC5qcGciPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGFsaWduPSJjZW50ZXIiPk5vbmU8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiIGFsaWduPSJjZW50ZXIiPjxpbWcgYm9yZGVyPSIwIiB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHNyYz0iaW1hZ2VzL2ltYWdlMDEwLmpwZyI+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8cCBhbGlnbj0ibGVmdCI+RmlndXJlIDI6IEN1cnNvcnMgZm9yIHRoZSBhbGxvd2VkIHRyYW5zZmVyIG9wZXJhdGlvbnMKICA8cCBhbGlnbj0ianVzdGlmeSI+PGEgbmFtZT0iX2R0MjlEIiBocmVmPSIjX2R0MjlDIj48Yj5MaW5lcyAyOSB0byAzOTo8L2I+PC9hPjxicj4KICBUaGUgZHJvcCB0YXJnZXQgY2FuIGNob29zZSB3aGF0IHR5cGUgb2YgZGF0YSBpdCB3b3VsZCBwcmVmZXIgdG8gcmVjZWl2ZS4gVGhlCiAgZHJhZ0VudGVyIGV2ZW50IGhhcyB0d28gZmllbGRzIGZvciB0aGlzLCBldmVudC5jdXJyZW50VHlwZSwgd2hpY2ggaXMgdGhlIHR5cGUKICBvZiBkYXRhIHByZWZlcnJlZCBieSB0aGUgYXBwbGljYXRpb24gKHJlcHJlc2VudGVkIGJ5IGEgVHJhbnNmZXJEYXRhIG9iamVjdCksCiAgYW5kIGV2ZW50LmRhdGFUeXBlcywgd2hpY2ggaXMgdGhlIGxpc3Qgb2YgdHlwZXMgcHJvdmlkZWQgYnkgdGhlIGRyYWcgc291cmNlCiAgKHJlcHJlc2VudGVkIGJ5IGFuIGFycmF5IG9mIFRyYW5zZmVyRGF0YSBvYmplY3RzKS4gWW91IGNhbiBzZXQgdGhlCiAgZXZlbnQuY3VycmVudFR5cGUgdG8gYW55IHZhbHVlIGluIHRoZSBldmVudC5kYXRhVHlwZXMuIFRoZXNlIGZpZWxkcyBjYW4gYWxzbwogIGJlIG1vZGlmaWVkIGluIHRoZSBkcmFnT3ZlciwgZHJhZ09wZXJhdGlvbkNoYW5nZWQsIGFuZCBkcm9wQWNjZXB0IGV2ZW50cy48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPkluIHRoZSBleGFtcGxlLCB3ZSBhcmUgYWxsb3dpbmcgVGV4dCBvciBGaWxlcyB0byBiZSBkcm9wcGVkCiAgb24gdGhlIHRhYmxlLCBidXQgaWYgYm90aCBhcmUgYXZhaWxhYmxlLCB3ZSBwcmVmZXIgdG8gZ2V0IHRoZSBGaWxlcy4gSWYgYSBmaWxlCiAgaXMgYmVpbmcgdHJhbnNmZXJyZWQsIHdlIGFsc28gaGF2ZSByZXN0cmljdGVkIHRoZSBvcGVyYXRpb24gdG8gYWxsb3cgb25seSBjb3B5CiAgKHdlIGRvbpJ0IHdhbnQgeW91IHRvIGRlbGV0ZSBmaWxlcyBmcm9tIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSB3aGVuIHlvdSBwbGF5CiAgd2l0aCB0aGlzIGV4YW1wbGUgOi0pKS48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9kdDQxRCIgaHJlZj0iI19kdDQxQyI+PGI+TGluZXMgNDEgdG8gNTA6PC9iPjwvYT48YnI+CiAgVGhlIGRyYWdPdmVyIGV2ZW50IG9jY3VycyByZXBlYXRlZGx5IGFzIHRoZSB1c2VyIGRyYWdzIHRoZSBjdXJzb3Igb3ZlciB0aGUKICBkcm9wIHRhcmdldCB3aWRnZXQuIElmIHRoZSBjdXJzb3IgaXMgbW90aW9ubGVzcywgdGhlIGRyYWdPdmVyIGV2ZW50IHdpbGwKICBjb250aW51ZSB0byBiZSByZWNlaXZlZCBhdCByZWd1bGFyIGludGVydmFscy4gSW4gYWRkaXRpb24gdG8gd2hhdCBpcyBzaG93biBpbgogIHRoZSBleGFtcGxlLCB5b3UgY2FuIG1vZGlmeSB0aGUgZXZlbnQuZGV0YWlsIG9yIGV2ZW50LmN1cnJlbnRUeXBlIGZpZWxkcy4gVGhpcwogIGlzIG1vc3Qgb2Z0ZW4gZG9uZSB3aXRoIGEgdGFibGUgb3IgdHJlZSB3aGVuIHRoZSBvcGVyYXRpb24gY2hhbmdlcyBiYXNlZCBvbgogIHdoYXQgaXRlbSB5b3UgYXJlIG92ZXIuIEZvciBleGFtcGxlLCB5b3UgbWF5IGhhdmUgYSB0cmVlIHJlcHJlc2VudGluZyB0aGUgZmlsZQogIHN5c3RlbSBhbmQgeW91IG1heSBhbGxvdyBmaWxlcyB0byBiZSBkcm9wcGVkIG9uIGZvbGRlcnMgYnV0IG5vdCBvbiBvdGhlcgogIGZpbGVzLiBUaGUgZXZlbnQuaXRlbSBmaWVsZCB3aWxsIGluZGljYXRlIHdoYXQgaXRlbSB5b3UgYXJlIG92ZXIgaW4gYSB0YWJsZSBvcgogIHRyZWUuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij48YSBuYW1lPSJfZHQ0MkQiIGhyZWY9IiNfZHQ0MkMiPjxiPkxpbmUgNDI6PC9iPjwvYT48YnI+CiAgQSBkcmFnIHVuZGVyIGVmZmVjdCBpcyBzb21lIHZpc3VhbCBjdWUgb3IgYWN0aW9uIGluIHRoZSBkcm9wIHRhcmdldCB3aWRnZXQKICB0aGF0IGdpdmVzIHRoZSB1c2VyIG1vcmUgZGV0YWlsZWQgZmVlZGJhY2sgYWJvdXQgd2hlcmUgdGhlIGRyb3AgbWF5IG9jY3VyLiBUaGUKICBhcHBsaWNhdGlvbiBjYW4gY29udHJvbCB0aGUgZHJhZyB1bmRlciBlZmZlY3QgYnkgc2V0dGluZyB0aGUgZXZlbnQuZmVlZGJhY2sKICBmaWVsZCBhcyBzaG93biBpbiBUYWJsZSAyLjwvcD4KICA8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjkwJSIgY2VsbHBhZGRpbmc9IjIiPgogICAgPHRyPgogICAgICA8dGggYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPmRyYWdPdmVyIGV2ZW50LmZlZWRiYWNrIHZhbHVlczwvdGg+CiAgICAgIDx0aCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+RGVzY3JpcHRpb248L3RoPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgCiAgICA8dGQgaGVpZ2h0PSIyNCIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5ETkQuRkVFREJBQ0tfU0VMRUNUPC90ZD4KICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+VGhlIGl0ZW0gdW5kZXIgdGhlIGN1cnNvciBpcyBzZWxlY3RlZDsKICAgICAgICBhcHBsaWVzIHRvIHRhYmxlIGFuZCB0cmVlcy48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+RE5ELkZFRURCQUNLX1NDUk9MTDwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPlRoZSB3aWRnZXQgaXMgc2Nyb2xsZWQgdXAgb3IgZG93biB0byBhbGxvdwogICAgICAgIHRoZSB1c2VyIHRvIGRyb3Agb24gaXRlbXMgdGhhdCBhcmUgbm90IGN1cnJlbnRseSB2aXNpYmxlOyBhcHBsaWVzIHRvCiAgICAgICAgdGFibGVzIGFuZCB0cmVlcy48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+RE5ELkZFRURCQUNLX0VYUEFORDwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPlRoZSBpdGVtIGN1cnJlbnRseSB1bmRlciB0aGUgY3Vyc29yIGlzCiAgICAgICAgZXhwYW5kZWQgdG8gYWxsb3cgdGhlIHVzZXIgdG8gc2VsZWN0IGEgZHJvcCB0YXJnZXQgZnJvbSBhIHN1YiBpdGVtOwogICAgICAgIGFwcGxpZXMgdG8gdHJlZXMuPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPkRORC5GRUVEQkFDS19JTlNFUlRfQkVGT1JFPC90ZD4KICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+QW4gaW5zZXJ0aW9uIG1hcmsgaXMgc2hvd24gYmVmb3JlIHRoZSBpdGVtCiAgICAgICAgdW5kZXIgdGhlIGN1cnNvcjsgYXBwbGllcyB0byB0cmVlcy48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+RE5ELkZFRURCQUNLX0lOU0VSVF9BRlRFUjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPkFuIGluc2VydGlvbiBtYXJrIGlzIHNob3duIGFmdGVyIHRoZSBpdGVtCiAgICAgICAgdW5kZXIgdGhlIGN1cnNvcjsgYXBwbGllcyB0byB0cmVlcy48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+RE5ELkZFRURCQUNLX05PTkU8L3RkPgogICAgICA8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5ObyBlZmZlY3QgaXMgc2hvd24uPC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8cCBhbGlnbj0ibGVmdCI+VGFibGUgMjogZHJhZyB1bmRlciBlZmZlY3QgdHlwZXMKICA8cCBhbGlnbj0ianVzdGlmeSI+PGEgbmFtZT0iX2R0NDNEIiBocmVmPSIjX2R0NDNDIj48Yj5MaW5lcyA0MyB0byA0OTo8L2I+PC9hPjxicj4KICBXaGVuIGRyYWdnaW5nIGRhdGEgb3ZlciB0aGUgdGFyZ2V0LCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhlIGV2ZW50CiAgdGVsbHMgeW91IHdoYXQgdHlwZSBvZiBkYXRhIGlzIGJlaW5nIGRyYWdnZWQgYnV0IGRvZXMgbm90IGdpdmUgdGhlIGNvbnRlbnQgb2YKICB0aGUgZGF0YS4gRm9yIGV4YW1wbGUsIHRoZSBldmVudC5jdXJyZW50VHlwZSBtYXkgaW5kaWNhdGUgdGhhdCBhIGZpbGUgaXMgYmVpbmcKICBkcmFnZ2VkIGJ1dCB0aGUgZXZlbnQgZG9lcyBub3QgaW5kaWNhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgb3IgdGhlIGV4dGVuc2lvbgogIG9mIHRoZSBmaWxlLiBJZiB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgcGVyZm9ybSBhIGRpZmZlcmVudCBvcGVyYXRpb24gZm9yIGEgSmF2YQogIGZpbGUgdmVyc3VzIGEgdGV4dCBmaWxlLCB0aGVuIHlvdSBtaWdodCB3YW50IHRvIGdldCB0aGUgZGF0YSBpbiB0aGUgZHJhZ092ZXIKICBldmVudC4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jtcy4gQXMgb2YgMi4xLCBpdCBpcwogIG9ubHkgcG9zc2libGUgdG8gYWNjZXNzIHRoZSBkYXRhIGluIHRoZSBkcmFnT3ZlciBldmVudCBvbiBXaW5kb3dzLiBUaGUgZGF0YQogIGNhbiBiZSBhY2Nlc3NlZCBieSBwYXNzaW5nIHRoZSBldmVudC5jdXJyZW50VHlwZSBUcmFuc2ZlckRhdGEgb2JqZWN0IHRvIHRoZQogIG5hdGl2ZVRvSmF2YSBtZXRob2Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcgVHJhbnNmZXIgb2JqZWN0LiBPbiBhbGwgcGxhdGZvcm1zCiAgZXhjZXB0IFdpbmRvd3MsIHRoaXMgd2lsbCByZXR1cm4gbnVsbC4gSW4gdGhlIGZ1dHVyZSwgdGhpcyBjYXBhYmlsaXR5IG1heSBiZQogIGV4dGVuZGVkIHRvIG90aGVyIHBsYXRmb3JtcyB3aGVyZSBzdXBwb3J0ZWQuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij4oTm90ZTogaW4gMS4wIHRocm91Z2ggMi4xLCB5b3UgY2FuIG9ubHkgZ2V0IHRoZSBkYXRhIGZvcgogIGV2ZW50LmN1cnJlbnRUeXBlIGJ1dCBpbiAzLjAsIHlvdSBjYW4gZ2V0IHRoZSBkYXRhIGZvciBhbnkgdHlwZSBpbgogIGV2ZW50LmRhdGFUeXBlcykuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij48YSBuYW1lPSJfZHQ1MUQiIGhyZWY9IiNfZHQ1MUMiPjxiPkxpbmVzIDUxIHRvIDY1OjwvYj48L2E+PGJyPgogIFRoZSBkcmFnT3BlcmF0aW9uQ2hhbmdlZCBldmVudCBvY2N1cnMgd2hlbiB0aGUgdXNlciBwcmVzc2VzIG9yIHJlbGVhc2VzIGEKICBtb2RpZmllciBrZXkgKHN1Y2ggYXMgQ3RybCwgU2hpZnQsIENvbW1hbmQsIE9wdGlvbikuIFRoZSBtb2RpZmllciBrZXlzIGFyZQogIHVzZWQgdG8gc3dpdGNoIHRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkLiBGb3IgZXhhbXBsZSwgb24gV2luZG93cyB3aGVuCiAganVzdCB0aGUgQ3RybCBrZXkgaXMgZG93biwgYSBjb3B5IGlzIHJlcXVlc3RlZCwgd2hlbiB0aGUgQ3RybCBhbmQgU2hpZnQga2V5cwogIGFyZSBib3RoIGRvd24sIGEgbGluayBpcyByZXF1ZXN0ZWQgYW5kIHdoZW4ganVzdCB0aGUgU2hpZnQga2V5IGlzIGRvd24sIGEgbW92ZQogIGlzIHJlcXVlc3RlZC4gV2hlbiBubyBtb2RpZmllciBrZXlzIGFyZSBwcmVzc2VkLCB0aGUgZGVmYXVsdCBvcGVyYXRpb24gaXMKICByZXF1ZXN0ZWQuIFNlZSB0aGUgZHJhZ0VudGVyIGV2ZW50IGZvciBtb3JlIGRldGFpbHMuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij48YSBuYW1lPSJfZHQ2NkQiIGhyZWY9IiNfZHQ2NkMiPjxiPkxpbmVzIDY2IHRvIDY3OjwvYj48L2E+PGJyPgogIFRoZSBkcmFnTGVhdmUgZXZlbnQgb2NjdXJzIHdoZW4gdGhlIGN1cnNvciBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcm9wIHRhcmdldAogIHdpZGdldC4gSWYgeW91IGFsbG9jYXRlZCBhbnkgcmVzb3VyY2VzIGluIGRyYWdFbnRlciwgeW91IHNob3VsZCBmcmVlIHRoZW0gaW4KICBkcmFnTGVhdmUuIFRoZSBkcmFnTGVhdmUgZXZlbnQgYWxzbyBvY2N1cnMgaWYgdGhlIHVzZXIgY2FuY2VscyB0aGUgRHJhZyBhbmQKICBEcm9wIG9wZXJhdGlvbiBieSBoaXR0aW5nIEVzY2FwZSwgYW5kIGp1c3QgYmVmb3JlIGEgZHJvcCBpcyBwZXJmb3JtZWQuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij48YSBuYW1lPSJfZHQ2OEQiIGhyZWY9IiNfZHQ2OEMiPjxiPkxpbmVzIDY4IHRvIDY5OjwvYj48L2E+PGJyPgogIFRoZSBkcm9wQWNjZXB0IGV2ZW50IHByb3ZpZGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIG9uZSBsYXN0IGNoYW5jZSB0byBkZWZpbmUKICB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgZHJvcCBldmVudC4gVGhpcyBpcyBkb25lIGJ5CiAgc2V0dGluZyB0aGUgZXZlbnQuY3VycmVudERhdGFUeXBlIHRvIG9uZSBvZiB0aGUgdmFsdWVzIGRlZmluZWQgaW4KICBldmVudC5kYXRhVHlwZXMuPC9wPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij48YSBuYW1lPSJfZHQ3MEQiIGhyZWY9IiNfZHQ3MEMiPjxiPkxpbmVzIDcwIHRvIDgzOjwvYj48L2E+PGJyPgogIFRoZSBkcm9wIGV2ZW50IG9jY3VycyB3aGVuIHRoZSB1c2VyIHJlbGVhc2VzIHRoZSBtb3VzZSBvdmVyIHRoZSBkcm9wIHRhcmdldCBpZgogIGEgdmFsaWQgb3BlcmF0aW9uIGFuZCBjdXJyZW50RGF0YVR5cGUgd2VyZSByZXF1ZXN0ZWQgaW4gdGhlIHByZXZpb3VzIGV2ZW50cy4KICBUaGUgZXZlbnQuZGF0YSBmaWVsZCBjb250YWlucyB0aGUgZGF0YSByZXF1ZXN0ZWQuIFRoZSBvYmplY3QgdHlwZSBjb250YWluZWQgaW4KICB0aGUgZXZlbnQuZGF0YSBmaWVsZCBkZXBlbmRzIG9uIHdoYXQgVHJhbnNmZXIgdHlwZSB3YXMgcmVxdWVzdGVkLiBUaGUgZGF0YSBpcwogIG9mIHRoZSB0eXBlIGRlZmluZWQgaW4gdGhlIGV2ZW50LmN1cnJlbnREYXRhVHlwZSBmaWVsZC48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPldoZW4gdGhlIGRyb3Agb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgdXBkYXRlIHRoZQogIGV2ZW50LmRldGFpbCBmaWVsZCB3aXRoIHRoZSBvcGVyYXRpb24gcGVyZm9ybWVkLjwvcD4KICA8aDI+PGEgbmFtZT0iX1VzaW5nX3RoZV9DbGlwYm9hcmQiPjwvYT5DbGlwYm9hcmQ8L2gyPgogIDxwIGFsaWduPSJqdXN0aWZ5Ij5EcmFnIGFuZCBkcm9wIGFsbG93cyB0aGUgc2ltdWx0YW5lb3VzIHRyYW5zZmVyIG9mIGRhdGEKICBiZXR3ZWVuIGEgc291cmNlIGFuZCBhIHRhcmdldCBidXQgc29tZXRpbWVzIHRoZSB1c2VyIG1heSB3aXNoIHRvIGNvcHkgZGF0YSB0bwogIGJlIHRyYW5zZmVycmVkIGF0IGEgbGF0ZXIgcG9pbnQgaW4gdGltZS4gVGhlIENsaXBib2FyZCBhY3RzIGxpa2UgYSB0ZW1wb3JhcnkKICBob2xkZXIgZm9yIHRoZSBkYXRhLiBJbiBhZGRpdGlvbiwgdGhlIHNhbWUgZGF0YSBtYXkgYmUgY29waWVkIHRvIG11bHRpcGxlCiAgdGFyZ2V0cyB1c2luZyB0aGUgY2xpcGJvYXJkLjwvcD4KICA8cCBhbGlnbj0ianVzdGlmeSI+SW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB3ZSB3aWxsIGNvcHkgZGF0YSBpbiB0d28KICBkaWZmZXJlbnQgZm9ybWF0cyBvbnRvIHRoZSBjbGlwYm9hcmQgYW5kIHJldHJpZXZlIG9uZSBvZiB0aGUgZm9ybWF0cyBmcm9tIHRoZQogIGNsaXBib2FyZC48L3A+CiAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0id2lkdGg6NjUwIiB3aWR0aD0iNjUwIj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyLXRvcDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgYm9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0O2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItcmlnaHQ6bm9uZTsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9jYjFDIiBocmVmPSIjX2NiMUQiPjE8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6ODUwO2JvcmRlci10b3A6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIGJvcmRlci1sZWZ0Om1lZGl1bSBub25lO2JvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj48Y29kZT5pbXBvcnQKICAgICAgICBvcmcuZWNsaXBzZS5zd3QuZG5kLio7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij4yPC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAk8Y29kZT4uIC4gLjwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+MzwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjQ8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEaXNwbGF5IGRpc3BsYXkgPSBuZXcgRGlzcGxheSgpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgbmFtZT0iX2NiNUMiIGhyZWY9IiNfY2I1RCI+NTwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtmaW5hbCBDbGlwYm9hcmQgY2IgPSBuZXcgQ2xpcGJvYXJkKGRpc3BsYXkpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+NjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NoZWxsIHNoZWxsID0gbmV3IFNoZWxsKGRpc3BsYXkpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+NzwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2ZpbmFsIFRleHQgdGV4dCA9IG5ldyBUZXh0KHNoZWxsLCBTV1QuQk9SREVSIHwgU1dULk1VTFRJKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjg8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt0ZXh0LnNldEJvdW5kcygxMCwgMTAsIDMwMCwgMzAwKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjk8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULlBVU0gpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+MTA8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtidXR0b24uc2V0VGV4dCgmcXVvdDtDb3B5JnF1b3Q7KTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjExPC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7YnV0dG9uLnNldEJvdW5kcygzMjAsIDEwLCAxMDAsIDQwKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjEyPC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7YnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjEzPC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgezwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgbmFtZT0iX2NiMTRDIiBocmVmPSIjX2NiMTREIj4xNDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTdHJpbmcgdGV4dERhdGEgPSB0ZXh0LmdldFNlbGVjdGlvblRleHQoKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfY2IxNEQiPjE1PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2lmICh0ZXh0RGF0YSA9PSBudWxsKSByZXR1cm47PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2NiMTREIj4xNjwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Zm9udCBjb2xvcj0iIzAwODBDMCI+Ly8gdG8gc2hvdyB0aGUgcnRmIGZvcm1hdHRpbmcsIG1ha2UgdGhlIHRleHQgYm9sZCBhbmQgaXRhbGljPC9mb250PjwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19jYjE0RCI+MTc8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U3RyaW5nIHJ0ZkRhdGEgPSAmcXVvdDt7XFxydGYxXFxiXFxpICZxdW90OyArIHRleHREYXRhICsgJnF1b3Q7fSZxdW90Ozs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfY2IxNEQiPjE4PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RleHRUcmFuc2ZlciB0ZXh0VHJhbnNmZXIgPSBUZXh0VHJhbnNmZXIuZ2V0SW5zdGFuY2UoKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfY2IxNEQiPjE5PC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JURlRyYW5zZmVyIHJ0ZlRyYW5zZmVyID0gUlRGVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfY2IxNEQiPjIwPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RyYW5zZmVyW10gdHlwZXMgPSBuZXcgVHJhbnNmZXJbXXt0ZXh0VHJhbnNmZXIsIHJ0ZlRyYW5zZmVyfTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIGhyZWY9IiNfY2IxNEQiPjIxPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2NiLnNldENvbnRlbnRzKG5ldyBPYmplY3RbXXt0ZXh0RGF0YSwgcnRmRGF0YX0sIHR5cGVzKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjIyPC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7fTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+MjM8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDt9KTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjI0PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgoJICAJPGNvZGU+Jm5ic3A7Jm5ic3A7YnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULlBVU0gpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+MjU8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDtidXR0b24uc2V0VGV4dCgmcXVvdDtQYXN0ZSZxdW90Oyk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij4yNjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwO2J1dHRvbi5zZXRCb3VuZHMoMzIwLCA2MCwgMTAwLCA0MCk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij4yNzwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwO2J1dHRvbi5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKSB7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij4yODwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3B1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjxhIG5hbWU9Il9jYjI5QyIgaHJlZj0iI19jYjI5RCI+Mjk8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGV4dFRyYW5zZmVyIHRyYW5zZmVyID0gVGV4dFRyYW5zZmVyLmdldEluc3RhbmNlKCk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBocmVmPSIjX2NiMjlEIj4zMDwvYT48L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTdHJpbmcgZGF0YSA9IChTdHJpbmcpY2IuZ2V0Q29udGVudHModHJhbnNmZXIpOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19jYjI5RCI+MzE8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7aWYgKGRhdGEgPT0gbnVsbCkgcmV0dXJuOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+PGEgaHJlZj0iI19jYjI5RCI+MzI8L2E+PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7dGV4dC5pbnNlcnQoZGF0YSk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij4zMzwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO308L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjM0PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7fSk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij4zNTwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwO3NoZWxsLm9wZW4oKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjM2PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7d2hpbGUgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjM3PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7aWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKTwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+Mzg8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtkaXNwbGF5LnNsZWVwKCk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij4zOTwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPjwvY29kZT4mbmJzcDs8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDoyMy40cHQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIHBhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+NDA8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJib3JkZXItbGVmdDptZWRpdW0gbm9uZTsgYm9yZGVyLXRvcDptZWRpdW0gbm9uZTsgYm9yZGVyLWJvdHRvbTptZWRpdW0gbm9uZTsgd2lkdGg6ODUwO2JvcmRlci1yaWdodDouNXB0IHNvbGlkIHdpbmRvd3RleHQ7CiAgcGFkZGluZy1sZWZ0OjUuNHB0OyBwYWRkaW5nLXJpZ2h0OjUuNHB0OyBwYWRkaW5nLXRvcDowaW47IHBhZGRpbmctYm90dG9tOjBpbiI+CiAgCQk8Y29kZT4mbmJzcDsmbmJzcDt9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCB3aW5kb3d0ZXh0IC41cHQ7CiAgcGFkZGluZzowaW4gNS40cHQgMGluIDUuNHB0Ij48YSBuYW1lPSJfY2I0MUMiIGhyZWY9IiNfY2I0MUQiPjQxPC9hPjwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlci1sZWZ0Om1lZGl1bSBub25lOyBib3JkZXItdG9wOm1lZGl1bSBub25lOyBib3JkZXItYm90dG9tOm1lZGl1bSBub25lOyB3aWR0aDo4NTA7Ym9yZGVyLXJpZ2h0Oi41cHQgc29saWQgd2luZG93dGV4dDsKICBwYWRkaW5nLWxlZnQ6NS40cHQ7IHBhZGRpbmctcmlnaHQ6NS40cHQ7IHBhZGRpbmctdG9wOjBpbjsgcGFkZGluZy1ib3R0b206MGluIj4KICAJCTxjb2RlPiZuYnNwOyZuYnNwO2NiLmRpc3Bvc2UoKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6MjMuNHB0O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIHdpbmRvd3RleHQgLjVwdDsKICBwYWRkaW5nOjBpbiA1LjRwdCAwaW4gNS40cHQiPjQyPC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0iYm9yZGVyLWxlZnQ6bWVkaXVtIG5vbmU7IGJvcmRlci10b3A6bWVkaXVtIG5vbmU7IGJvcmRlci1ib3R0b206bWVkaXVtIG5vbmU7IHdpZHRoOjg1MDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+Jm5ic3A7Jm5ic3A7ZGlzcGxheS5kaXNwb3NlKCk7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjIzLjRwdDtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgd2luZG93dGV4dCAuNXB0OwogIGJvcmRlci1ib3R0b206c29saWQgd2luZG93dGV4dCAuNXB0O2JvcmRlci1yaWdodDpub25lO3BhZGRpbmc6MGluIDUuNHB0IDBpbiA1LjRwdCI+NDM8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDo4NTA7Ym9yZGVyLXRvcDptZWRpdW0gbm9uZTtib3JkZXItbGVmdDptZWRpdW0gbm9uZTsKICBib3JkZXItYm90dG9tOi41cHQgc29saWQgd2luZG93dGV4dDtib3JkZXItcmlnaHQ6LjVwdCBzb2xpZCB3aW5kb3d0ZXh0OwogIHBhZGRpbmctbGVmdDo1LjRwdDsgcGFkZGluZy1yaWdodDo1LjRwdDsgcGFkZGluZy10b3A6MGluOyBwYWRkaW5nLWJvdHRvbTowaW4iPgogIAkJPGNvZGU+fTwvY29kZT48L3RkPgogICAgPC90cj4KICA8L3RhYmxlPgogIDxwIGFsaWduPSJsZWZ0Ij5MaXN0aW5nIDM6IFVzaW5nIHRoZSBjbGlwYm9hcmQgdG8gY29weSB0ZXh0CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9jYjFEIiBocmVmPSIjX2NiMUMiPjxiPkxpbmUgMTo8L2I+PC9hPjxicj4KICBBbGwgdGhlIHJlbGF0ZWQgZHJhZyBhbmQgZHJvcCBjbGFzc2VzIGFyZSBkZWZpbmVkIGluIHRoZSBwYWNrYWdlCiAgb3JnLmVjbGlwc2Uuc3d0LmRuZC48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9jYjVEIiBocmVmPSIjX2NiNUMiPjxiPkxpbmUgNTo8L2I+PC9hPjxicj4KICBDcmVhdGUgYSBjbGlwYm9hcmQgb2JqZWN0LiBBIENsaXBib2FyZCBvYmplY3QgZ2l2ZXMgeW91IGFjY2VzcyB0byB0aGUKICBvcGVyYXRpbmcgc3lzdGVtIGNsaXBib2FyZC4gSXQgd2lsbCBhbGxvdyB5b3UgdG8gZXhjaGFuZ2UgZGF0YSB3aXRoaW4geW91cgogIGFwcGxpY2F0aW9uIG9yIHdpdGggb3RoZXIgYXBwbGljYXRpb25zLiBOb3RlOiBBIENsaXBib2FyZCBvYmplY3QgdXNlcyBzeXN0ZW0KICByZXNvdXJjZXMgYW5kIG11c3QgYmUgcmVsZWFzZWQgd2hlbiB5b3UgYXJlIGZpbmlzaGVkIChzZWUgbGluZSA0MSkuIFlvdSBjYW4KICBjaG9vc2UgdG8gY3JlYXRlIGEgbmV3IGNsaXBib2FyZCBvYmplY3QgZWFjaCB0aW1lIHlvdSB3YW50IHRvIGFjY2VzcyB0aGUgZGF0YQogIG9uIHRoZSBjbGlwYm9hcmQgb3IgeW91IGNhbiBrZWVwIGFuIGluc3RhbmNlIGFyb3VuZCBmb3IgeW91ciBhcHBsaWNhdGlvbi48L3A+CiAgPHAgYWxpZ249Imp1c3RpZnkiPjxhIG5hbWU9Il9jYjE0RCIgaHJlZj0iI19jYjE0QyI+PGI+TGluZXMgMTQgdG8gMjE6PC9iPjwvYT48YnI+CiAgQ29weSB0aGUgdGV4dCBzZWxlY3RlZCBpbiB0aGUgVGV4dCB3aWRnZXQgb250byB0aGUgY2xpcGJvYXJkLiBJZiBubyB0ZXh0IGlzCiAgc2VsZWN0ZWQsIGRvIG5vdGhpbmcuPC9wPgogIDxwPldoZW4gcGxhY2luZyBkYXRhIG9uIHRoZSBjbGlwYm9hcmQsIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgdGhlIGRhdGEKICBhdmFpbGFibGUgaW4gbW9yZSB0aGFuIG9uZSBmb3JtYXQuIEluIG91ciBleGFtcGxlLCB3ZSBhcmUgdXNpbmcgYm90aCBUZXh0IGFuZAogIFJURiBUZXh0IGZvcm1hdHMuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIG91ciBhcHBsaWNhdGlvbiB0byBpbnRlcmFjdCB3aXRoCiAgYSBsYXJnZXIgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMuIFRoYXQgaXMsIGlmIHdlIG9ubHkgcGxhY2UgUlRGIHRleHQgb24gdGhlCiAgY2xpcGJvYXJkLCB0aGVuIHdlIGNhbm5vdCBpbnRlcmFjdCB3aXRoIGFuIGFwcGxpY2F0aW9uIHN1Y2ggYXMgTm90ZXBhZCB0aGF0CiAgZG9lcyBub3QgdW5kZXJzdGFuZCBSVEYgdGV4dC4gVG8gYmV0dGVyIGludGVncmF0ZSB5b3VyIGFwcGxpY2F0aW9uIGludG8gdGhlCiAgZW52aXJvbm1lbnQsIG1ha2UgeW91ciBkYXRhIGF2YWlsYWJsZSBpbiBhcyBtYW55IHVzZWZ1bCBmb3JtcyBhcyBwb3NzaWJsZS48L3A+CiAgPHA+RWFjaCBzdWNjZXNzZnVsIGNhbGwgdG8gQ2xpcGJvYXJkLnNldENvbnRlbnRzIHdpbGwgY2xlYXIgYW55IHByZXZpb3VzCiAgY29udGVudCBmcm9tIHRoZSBjbGlwYm9hcmQuIFRoaXMgYXBwbGllcyBub3Qgb25seSB0byB0aGUgZGF0YSBmb3JtYXRzIHlvdSBhcmUKICBwbGFjaW5nIG9uIHRoZSBjbGlwYm9hcmQgYnV0IHRvIGFsbCBkYXRhIGZvcm1hdHMuIEZvciBleGFtcGxlLCBpZiB0aGUKICBjbGlwYm9hcmQgY29udGFpbnMgRmlsZSBkYXRhIHBsYWNlZCB0aGVyZSBieSBzb21lIG90aGVyIGFwcGxpY2F0aW9uIGFuZCB5b3UKICBjYWxsIENsaXBib2FyZC5zZXRDb250ZW50cyB3aXRoIFRleHQgZGF0YSwgdGhlIEZpbGUgZGF0YSB3aWxsIG5vIGxvbmdlciBiZQogIGF2YWlsYWJsZS4gSWYgeW91IHdhbnQgdG8gaGF2ZSBtdWx0aXBsZSBraW5kcyBvZiBkYXRhIGF2YWlsYWJsZSBvbiB0aGUKICBjbGlwYm9hcmQgYXQgdGhlIHNhbWUgdGltZSwgeW91IG11c3QgcGFzcyB0aGVtIHRvIHRoZSBjbGlwYm9hcmQgaW4gdGhlIHNhbWUKICBDbGlwYm9hcmQuc2V0Q29udGVudHMgY2FsbC4gVGhlIENsaXBib2FyZC5zZXRDb250ZW50cyBBUEkgdGFrZXMgYW4gYXJyYXkgb2YKICBkYXRhIG9iamVjdHMgYW5kIGFuIGFycmF5IG9mIGRhdGEgdHlwZXMuIFRoZSB2YWx1ZXMgZm9yIHRoZSBkYXRhIG9iamVjdHMgbXVzdAogIGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBkYXRhIHR5cGVzIGFuZCBtdXN0IGJlIHZhbGlkIGZvciB0aGUgY29ycmVzcG9uZGluZwogIGRhdGEgdHlwZSAodGhhdCBpcywgYSBUZXh0VHJhbnNmZXIgZXhwZWN0cyBhIFN0cmluZywgYSBGaWxlIFRyYW5zZmVyIGV4cGVjdHMgYQogIFN0cmluZ1tdIC0gdGhlIGphdmFkb2MgZm9yIGVhY2ggdHlwZSBzaG91bGQgc3BlY2lmeSB0aGUgZXhwZWN0ZWQgZm9ybWF0IG9mIHRoZQogIGRhdGEpLjwvcD4KICA8cD5UaGUgZGF0YSB0aGF0IHlvdSBwbGFjZSBvbiB0aGUgY2xpcGJvYXJkIHdpbGwgYmUgYXZhaWxhYmxlIGV2ZW4gYWZ0ZXIgeW91cgogIGFwcGxpY2F0aW9uIGlzIGNsb3NlZC4gKE5vdGU6IEdUSyBpcyBhbiBleGNlcHRpb24gdG8gdGhpcy4gQ3VycmVudGx5LCB0aGVyZSBpcwogIG5vIG1lY2hhbmlzbSBpbiBHVEsgdG8gcGVyc2lzdCB0aGUgZGF0YSBiZXlvbmQgdGhlIGxpZmUgdGltZSBvZiB0aGUKICBhcHBsaWNhdGlvbi4pPC9wPgogIDxwPk9uIHNvbWUgcGxhdGZvcm1zLCB0aGVyZSBhcmUgYWN0dWFsbHkgbXVsdGlwbGUgY2xpcGJvYXJkcyBhdmFpbGFibGUuIE9uCiAgVW5peC9MaW51eCB0aGVyZSBpcyBhIFBSSU1BUlkgY2xpcGJvYXJkIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4gdGhlIGRhdGEKICB0aGF0IHdhcyBtb3N0IHJlY2VudGx5IHNlbGVjdGVkIChpbXBsaWNpdGx5IHNldCBieSB0aGUgYWN0IG9mIHNlbGVjdGlvbikgYW5kCiAgdGhlcmUgaXMgYSBDTElQQk9BUkQgY2xpcGJvYXJkIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4gZGF0YSB0aGF0IHdhcwogIGV4cGxpY2l0bHkgc2V0IHRocm91Z2ggYSBrZXlib2FyZCBhY2NlbGVyYXRvciAoc3VjaCBhcyBDVFJMK0luc2VydCkgb3IgdGhyb3VnaAogIGEgbWVudSBpdGVtICh0aGVyZSBhcmUgYWxzbyBvdGhlciBjbGlwYm9hcmRzIGJ1dCB0aGVzZSBhcmUgdXNlZCBpbmZyZXF1ZW50bHkpLgogIE9uIEdUSyBhbmQgTW90aWYsIHlvdSBjYW4gdXNlIDxjb2RlPkRORC5DTElQQk9BUkQ8L2NvZGU+IGFuZCAKICA8Y29kZT5ETkQuU0VMRUNUSU9OX0NMSVBCT0FSRDwvY29kZT4gd2hlbiBzZXR0aW5nIGFuZCBnZXR0aW5nIGNsaXBib2FyZCBkYXRhCiAgdG8gdGFyZ2V0IGEgc3BlY2lmaWMgb25lLiAgT24gTWFjIE9TIFgsIFNXVCBzdXBwb3J0cyB0aGUgZGVmYXVsdCBTY3JhcC48L3A+CiAgPHA+PGEgbmFtZT0iX2NiMjlEIiBocmVmPSIjX2NiMjlDIj48Yj5MaW5lcyAyOSB0byAzMjo8L2I+PC9hPjxicj4KICBJZiB0aGVyZSBpcyBUZXh0IGF2YWlsYWJsZSBvbiB0aGUgY2xpcGJvYXJkLCBpbnNlcnQgaXQgaW50byB0aGUgdGV4dCB3aWRnZXQuPC9wPgogIDxwPlRvIHJlcXVlc3QgZGF0YSBvZiBhIGNlcnRhaW4gdHlwZSwgY2FsbCBDbGlwYm9hcmQuZ2V0Q29udGVudHMgd2l0aCBhCiAgVHJhbnNmZXIgc3ViY2xhc3Mgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuIEluIG91ciBleGFtcGxlLCB3ZSBhcmUgcGFzdGluZyBUZXh0CiAgYW5kIGhhdmUgdXNlZCB0aGUgVGV4dFRyYW5zZmVyIGNsYXNzLiBJZiB0aGVyZSBpcyBubyBkYXRhIG9mIHRoaXMgdHlwZQogIGF2YWlsYWJsZSwgbnVsbCB3aWxsIGJlIHJldHVybmVkLiBUaGUgdHlwZSBvZiBvYmplY3QgcmV0dXJuZWQgYnkKICBDbGlwYm9hcmQuZ2V0Q29udGVudHMgd2lsbCBkZXBlbmQgb24gdGhlIFRyYW5zZmVyIGNsYXNzIHVzZWQuIFRoZSBqYXZhZG9jIGZvcgogIHRoZSBUcmFuc2ZlciBzdWJjbGFzcyBzaG91bGQgc3BlY2lmeSB0aGUgSmF2YSBvYmplY3QgdHlwZS48L3A+CiAgPHA+PGEgbmFtZT0iX2NiNDFEIiBocmVmPSIjX2NiNDFDIj48Yj5MaW5lIDQxOjwvYj48L2E+PGJyPgogIERpc3Bvc2Ugb2YgdGhlIGNsaXBib2FyZC4gQXMgbWVudGlvbmVkIGFib3ZlLCBmYWlsdXJlIHRvIGRpc3Bvc2UgdGhlIGNsaXBib2FyZAogIHdpbGwgcmVzdWx0IGluIHN5c3RlbSByZXNvdXJjZXMgYmVpbmcgbGVha2VkLjwvcD4KICA8aDM+TkVXIGZvciAzLjAgliBIb3cgdG8gcXVlcnkgZGF0YSB0eXBlcyBvbiB0aGUgQ2xpcGJvYXJkPC9oMz4KICA8cD5JbiAyLjEgYW5kIGVhcmxpZXIgcmVsZWFzZXMgb2YgU1dULCB0aGUgb25seSBtZWNoYW5pc20gYXZhaWxhYmxlIHRvCiAgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgZGF0YSB0eXBlIGlzIGF2YWlsYWJsZSBvbiB0aGUgY2xpcGJvYXJkIGlzIHRvIHVzZQogIENsaXBib2FyZC5nZXRDb250ZW50cyBhbmQgYWN0dWFsbHkgdHJhbnNmZXIgdGhlIGRhdGEuIEluIGFkZGl0aW9uIHRvIGJlaW5nCiAgc2xvdywgdGhpcyBtZWNoYW5pc20gY2FuIGNhdXNlIHByb2JsZW1zIHdoZW4gYSAmcXVvdDtDdXQmcXVvdDsgb3BlcmF0aW9uIGlzCiAgYmVpbmcgcGVyZm9ybWVkLiBJbiBhICZxdW90O0N1dCZxdW90OyBvcGVyYXRpb24sIG9uZSBhcHBsaWNhdGlvbiBwdXRzIGRhdGEgb24KICB0aGUgY2xpcGJvYXJkIGFuZCB3aGVuIHRoYXQgZGF0YSBpcyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBjbGlwYm9hcmQsIHRoZQogIG9yaWdpbmFsIGNvcHkgb2YgdGhlIGRhdGEgaXMgZGVsZXRlZC4gSW4gMy4wLCB0aGVyZSB3aWxsIGJlIG5ldyBBUEkgdG8gcXVlcnkKICB3aGF0IHR5cGVzIG9mIGRhdGEgYXJlIG9uIHRoZSBjbGlwYm9hcmQgd2l0aG91dCBhY3R1YWxseSB0cmFuc2ZlcnJpbmcgdGhlIGRhdGEKICB0byB5b3VyIGFwcGxpY2F0aW9uLiBBbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgaXQgaXMgc2hvd24gaW4gTGlzdGluZyA0LjwvcD4KICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2NTAiPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOiAyMy40cHQ7IGJvcmRlci1sZWZ0OiAuNXB0IHNvbGlkIHdpbmRvd3RleHQ7IGJvcmRlci1yaWdodC1zdHlsZTogbm9uZTsgYm9yZGVyLXJpZ2h0LXdpZHRoOiBtZWRpdW07IGJvcmRlci10b3Atc3R5bGU6IG5vbmU7IGJvcmRlci10b3Atd2lkdGg6IG1lZGl1bTsgYm9yZGVyLWJvdHRvbTogLjVwdCBub25lIHdpbmRvd3RleHQ7IHBhZGRpbmctbGVmdDogNS40cHQ7IHBhZGRpbmctcmlnaHQ6IDUuNHB0OyBwYWRkaW5nLXRvcDogMGluOyBwYWRkaW5nLWJvdHRvbTogMGluIiBoZWlnaHQ9IjE3Ij4xPC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6IDY1ODsgYm9yZGVyLWxlZnQtc3R5bGU6IG5vbmU7IGJvcmRlci1sZWZ0LXdpZHRoOiBtZWRpdW07IGJvcmRlci1yaWdodDogLjVwdCBzb2xpZCB3aW5kb3d0ZXh0OyBib3JkZXItdG9wLXN0eWxlOiBub25lOyBib3JkZXItdG9wLXdpZHRoOiBtZWRpdW07IGJvcmRlci1ib3R0b20tc3R5bGU6IG5vbmU7IGJvcmRlci1ib3R0b20td2lkdGg6IG1lZGl1bTsgcGFkZGluZy1sZWZ0OiA1LjRwdDsgcGFkZGluZy1yaWdodDogNS40cHQ7IHBhZGRpbmctdG9wOiAwaW47IHBhZGRpbmctYm90dG9tOiAwaW4iIGhlaWdodD0iMTciPjxjb2RlPlRyYW5zZmVyRGF0YVtdCiAgICAgICAgYXZhaWxhYmxlID0gY2IuZ2V0QXZhaWxhYmxlVHlwZXMoKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6IDIzLjRwdDsgYm9yZGVyLWxlZnQ6IC41cHQgc29saWQgd2luZG93dGV4dDsgYm9yZGVyLXJpZ2h0LXN0eWxlOiBub25lOyBib3JkZXItcmlnaHQtd2lkdGg6IG1lZGl1bTsgYm9yZGVyLXRvcC1zdHlsZTogbm9uZTsgYm9yZGVyLXRvcC13aWR0aDogbWVkaXVtOyBib3JkZXItYm90dG9tOiAuNXB0IG5vbmUgd2luZG93dGV4dDsgcGFkZGluZy1sZWZ0OiA1LjRwdDsgcGFkZGluZy1yaWdodDogNS40cHQ7IHBhZGRpbmctdG9wOiAwaW47IHBhZGRpbmctYm90dG9tOiAwaW4iIGhlaWdodD0iMTciPjI8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDogNjU4OyBib3JkZXItbGVmdC1zdHlsZTogbm9uZTsgYm9yZGVyLWxlZnQtd2lkdGg6IG1lZGl1bTsgYm9yZGVyLXJpZ2h0OiAuNXB0IHNvbGlkIHdpbmRvd3RleHQ7IGJvcmRlci10b3Atc3R5bGU6IG5vbmU7IGJvcmRlci10b3Atd2lkdGg6IG1lZGl1bTsgYm9yZGVyLWJvdHRvbS1zdHlsZTogbm9uZTsgYm9yZGVyLWJvdHRvbS13aWR0aDogbWVkaXVtOyBwYWRkaW5nLWxlZnQ6IDUuNHB0OyBwYWRkaW5nLXJpZ2h0OiA1LjRwdDsgcGFkZGluZy10b3A6IDBpbjsgcGFkZGluZy1ib3R0b206IDBpbiIgaGVpZ2h0PSIxNyI+PGNvZGU+Ym9vbGVhbgogICAgICAgIGVuYWJsZWQgPSBmYWxzZTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6IDIzLjRwdDsgYm9yZGVyLWxlZnQ6IC41cHQgc29saWQgd2luZG93dGV4dDsgYm9yZGVyLXJpZ2h0LXN0eWxlOiBub25lOyBib3JkZXItcmlnaHQtd2lkdGg6IG1lZGl1bTsgYm9yZGVyLXRvcC1zdHlsZTogbm9uZTsgYm9yZGVyLXRvcC13aWR0aDogbWVkaXVtOyBib3JkZXItYm90dG9tOiAuNXB0IG5vbmUgd2luZG93dGV4dDsgcGFkZGluZy1sZWZ0OiA1LjRwdDsgcGFkZGluZy1yaWdodDogNS40cHQ7IHBhZGRpbmctdG9wOiAwaW47IHBhZGRpbmctYm90dG9tOiAwaW4iIGhlaWdodD0iMTciPjM8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDogNjU4OyBib3JkZXItbGVmdC1zdHlsZTogbm9uZTsgYm9yZGVyLWxlZnQtd2lkdGg6IG1lZGl1bTsgYm9yZGVyLXJpZ2h0OiAuNXB0IHNvbGlkIHdpbmRvd3RleHQ7IGJvcmRlci10b3Atc3R5bGU6IG5vbmU7IGJvcmRlci10b3Atd2lkdGg6IG1lZGl1bTsgYm9yZGVyLWJvdHRvbS1zdHlsZTogbm9uZTsgYm9yZGVyLWJvdHRvbS13aWR0aDogbWVkaXVtOyBwYWRkaW5nLWxlZnQ6IDUuNHB0OyBwYWRkaW5nLXJpZ2h0OiA1LjRwdDsgcGFkZGluZy10b3A6IDBpbjsgcGFkZGluZy1ib3R0b206IDBpbiIgaGVpZ2h0PSIxNyI+PGNvZGU+Zm9yCiAgICAgICAgKGludCBpID0gMDsgaSAmbHQ7IGF2YWlsYWJsZS5sZW5ndGg7IGkrKykgezwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDogMjMuNHB0OyBib3JkZXItbGVmdDogLjVwdCBzb2xpZCB3aW5kb3d0ZXh0OyBib3JkZXItcmlnaHQtc3R5bGU6IG5vbmU7IGJvcmRlci1yaWdodC13aWR0aDogbWVkaXVtOyBib3JkZXItdG9wLXN0eWxlOiBub25lOyBib3JkZXItdG9wLXdpZHRoOiBtZWRpdW07IGJvcmRlci1ib3R0b206IC41cHQgbm9uZSB3aW5kb3d0ZXh0OyBwYWRkaW5nLWxlZnQ6IDUuNHB0OyBwYWRkaW5nLXJpZ2h0OiA1LjRwdDsgcGFkZGluZy10b3A6IDBpbjsgcGFkZGluZy1ib3R0b206IDBpbiIgaGVpZ2h0PSIxNyI+NDwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOiA2NTg7IGJvcmRlci1sZWZ0LXN0eWxlOiBub25lOyBib3JkZXItbGVmdC13aWR0aDogbWVkaXVtOyBib3JkZXItcmlnaHQ6IC41cHQgc29saWQgd2luZG93dGV4dDsgYm9yZGVyLXRvcC1zdHlsZTogbm9uZTsgYm9yZGVyLXRvcC13aWR0aDogbWVkaXVtOyBib3JkZXItYm90dG9tLXN0eWxlOiBub25lOyBib3JkZXItYm90dG9tLXdpZHRoOiBtZWRpdW07IHBhZGRpbmctbGVmdDogNS40cHQ7IHBhZGRpbmctcmlnaHQ6IDUuNHB0OyBwYWRkaW5nLXRvcDogMGluOyBwYWRkaW5nLWJvdHRvbTogMGluIiBoZWlnaHQ9IjE3Ij48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICBpZiAoVGV4dFRyYW5zZmVyLmdldEluc3RhbmNlKCkuaXNTdXBwb3J0ZWRUeXBlKGF2YWlsYWJsZVtpXSkpIHs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6IDIzLjRwdDsgYm9yZGVyLWxlZnQ6IC41cHQgc29saWQgd2luZG93dGV4dDsgYm9yZGVyLXJpZ2h0LXN0eWxlOiBub25lOyBib3JkZXItcmlnaHQtd2lkdGg6IG1lZGl1bTsgYm9yZGVyLXRvcC1zdHlsZTogbm9uZTsgYm9yZGVyLXRvcC13aWR0aDogbWVkaXVtOyBib3JkZXItYm90dG9tOiAuNXB0IG5vbmUgd2luZG93dGV4dDsgcGFkZGluZy1sZWZ0OiA1LjRwdDsgcGFkZGluZy1yaWdodDogNS40cHQ7IHBhZGRpbmctdG9wOiAwaW47IHBhZGRpbmctYm90dG9tOiAwaW4iIGhlaWdodD0iMTciPjU8L3RkPgogICAgICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDogNjU4OyBib3JkZXItbGVmdC1zdHlsZTogbm9uZTsgYm9yZGVyLWxlZnQtd2lkdGg6IG1lZGl1bTsgYm9yZGVyLXJpZ2h0OiAuNXB0IHNvbGlkIHdpbmRvd3RleHQ7IGJvcmRlci10b3Atc3R5bGU6IG5vbmU7IGJvcmRlci10b3Atd2lkdGg6IG1lZGl1bTsgYm9yZGVyLWJvdHRvbS1zdHlsZTogbm9uZTsgYm9yZGVyLWJvdHRvbS13aWR0aDogbWVkaXVtOyBwYWRkaW5nLWxlZnQ6IDUuNHB0OyBwYWRkaW5nLXJpZ2h0OiA1LjRwdDsgcGFkZGluZy10b3A6IDBpbjsgcGFkZGluZy1ib3R0b206IDBpbiIgaGVpZ2h0PSIxNyI+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgICAgZW5hYmxlZCA9IHRydWU7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOiAyMy40cHQ7IGJvcmRlci1sZWZ0OiAuNXB0IHNvbGlkIHdpbmRvd3RleHQ7IGJvcmRlci1yaWdodC1zdHlsZTogbm9uZTsgYm9yZGVyLXJpZ2h0LXdpZHRoOiBtZWRpdW07IGJvcmRlci10b3Atc3R5bGU6IG5vbmU7IGJvcmRlci10b3Atd2lkdGg6IG1lZGl1bTsgYm9yZGVyLWJvdHRvbTogLjVwdCBub25lIHdpbmRvd3RleHQ7IHBhZGRpbmctbGVmdDogNS40cHQ7IHBhZGRpbmctcmlnaHQ6IDUuNHB0OyBwYWRkaW5nLXRvcDogMGluOyBwYWRkaW5nLWJvdHRvbTogMGluIiBoZWlnaHQ9IjE3Ij42PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6IDY1ODsgYm9yZGVyLWxlZnQtc3R5bGU6IG5vbmU7IGJvcmRlci1sZWZ0LXdpZHRoOiBtZWRpdW07IGJvcmRlci1yaWdodDogLjVwdCBzb2xpZCB3aW5kb3d0ZXh0OyBib3JkZXItdG9wLXN0eWxlOiBub25lOyBib3JkZXItdG9wLXdpZHRoOiBtZWRpdW07IGJvcmRlci1ib3R0b20tc3R5bGU6IG5vbmU7IGJvcmRlci1ib3R0b20td2lkdGg6IG1lZGl1bTsgcGFkZGluZy1sZWZ0OiA1LjRwdDsgcGFkZGluZy1yaWdodDogNS40cHQ7IHBhZGRpbmctdG9wOiAwaW47IHBhZGRpbmctYm90dG9tOiAwaW4iIGhlaWdodD0iMTciPjxjb2RlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgIGJyZWFrOzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDogMjMuNHB0OyBib3JkZXItbGVmdDogLjVwdCBzb2xpZCB3aW5kb3d0ZXh0OyBib3JkZXItcmlnaHQtc3R5bGU6IG5vbmU7IGJvcmRlci1yaWdodC13aWR0aDogbWVkaXVtOyBib3JkZXItdG9wLXN0eWxlOiBub25lOyBib3JkZXItdG9wLXdpZHRoOiBtZWRpdW07IGJvcmRlci1ib3R0b206IC41cHQgbm9uZSB3aW5kb3d0ZXh0OyBwYWRkaW5nLWxlZnQ6IDUuNHB0OyBwYWRkaW5nLXJpZ2h0OiA1LjRwdDsgcGFkZGluZy10b3A6IDBpbjsgcGFkZGluZy1ib3R0b206IDBpbiIgaGVpZ2h0PSIxNyI+NzwvdGQ+CiAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOiA2NTg7IGJvcmRlci1sZWZ0LXN0eWxlOiBub25lOyBib3JkZXItbGVmdC13aWR0aDogbWVkaXVtOyBib3JkZXItcmlnaHQ6IC41cHQgc29saWQgd2luZG93dGV4dDsgYm9yZGVyLXRvcC1zdHlsZTogbm9uZTsgYm9yZGVyLXRvcC13aWR0aDogbWVkaXVtOyBib3JkZXItYm90dG9tLXN0eWxlOiBub25lOyBib3JkZXItYm90dG9tLXdpZHRoOiBtZWRpdW07IHBhZGRpbmctbGVmdDogNS40cHQ7IHBhZGRpbmctcmlnaHQ6IDUuNHB0OyBwYWRkaW5nLXRvcDogMGluOyBwYWRkaW5nLWJvdHRvbTogMGluIiBoZWlnaHQ9IjE3Ij48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICB9PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjMxIiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOiAyMy40cHQ7IGJvcmRlci1sZWZ0OiAuNXB0IHNvbGlkIHdpbmRvd3RleHQ7IGJvcmRlci1yaWdodC1zdHlsZTogbm9uZTsgYm9yZGVyLXJpZ2h0LXdpZHRoOiBtZWRpdW07IGJvcmRlci10b3Atc3R5bGU6IG5vbmU7IGJvcmRlci10b3Atd2lkdGg6IG1lZGl1bTsgYm9yZGVyLWJvdHRvbTogLjVwdCBub25lIHdpbmRvd3RleHQ7IHBhZGRpbmctbGVmdDogNS40cHQ7IHBhZGRpbmctcmlnaHQ6IDUuNHB0OyBwYWRkaW5nLXRvcDogMGluOyBwYWRkaW5nLWJvdHRvbTogMGluIiBoZWlnaHQ9IjE3Ij44PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6IDY1ODsgYm9yZGVyLWxlZnQtc3R5bGU6IG5vbmU7IGJvcmRlci1sZWZ0LXdpZHRoOiBtZWRpdW07IGJvcmRlci1yaWdodDogLjVwdCBzb2xpZCB3aW5kb3d0ZXh0OyBib3JkZXItdG9wLXN0eWxlOiBub25lOyBib3JkZXItdG9wLXdpZHRoOiBtZWRpdW07IGJvcmRlci1ib3R0b20tc3R5bGU6IG5vbmU7IGJvcmRlci1ib3R0b20td2lkdGg6IG1lZGl1bTsgcGFkZGluZy1sZWZ0OiA1LjRwdDsgcGFkZGluZy1yaWdodDogNS40cHQ7IHBhZGRpbmctdG9wOiAwaW47IHBhZGRpbmctYm90dG9tOiAwaW4iIGhlaWdodD0iMTciPjxjb2RlPn08L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzEiIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6IDIzLjRwdDsgYm9yZGVyLWxlZnQ6IC41cHQgc29saWQgd2luZG93dGV4dDsgYm9yZGVyLXJpZ2h0LXN0eWxlOiBub25lOyBib3JkZXItcmlnaHQtd2lkdGg6IG1lZGl1bTsgYm9yZGVyLXRvcC1zdHlsZTogbm9uZTsgYm9yZGVyLXRvcC13aWR0aDogbWVkaXVtOyBib3JkZXItYm90dG9tOiAuNXB0IHNvbGlkIHdpbmRvd3RleHQ7IHBhZGRpbmctbGVmdDogNS40cHQ7IHBhZGRpbmctcmlnaHQ6IDUuNHB0OyBwYWRkaW5nLXRvcDogMGluOyBwYWRkaW5nLWJvdHRvbTogMGluIiBoZWlnaHQ9IjE4Ij45PC90ZD4KICAgICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6IDY1ODsgYm9yZGVyLWxlZnQtc3R5bGU6IG5vbmU7IGJvcmRlci1sZWZ0LXdpZHRoOiBtZWRpdW07IGJvcmRlci1yaWdodDogLjVwdCBzb2xpZCB3aW5kb3d0ZXh0OyBib3JkZXItdG9wLXN0eWxlOiBub25lOyBib3JkZXItdG9wLXdpZHRoOiBtZWRpdW07IGJvcmRlci1ib3R0b20tc3R5bGU6IG5vbmU7IGJvcmRlci1ib3R0b20td2lkdGg6IG1lZGl1bTsgcGFkZGluZy1sZWZ0OiA1LjRwdDsgcGFkZGluZy1yaWdodDogNS40cHQ7IHBhZGRpbmctdG9wOiAwaW47IHBhZGRpbmctYm90dG9tOiAwaW4iIGhlaWdodD0iMTgiPjxjb2RlPnBhc3RlTWVudUl0ZW0uc2V0RW5hYmxlZChlbmFibGVkKTs8L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8cCBhbGlnbj0ibGVmdCI+TGlzdGluZyA0OiBRdWVyeSB0aGUgZGF0YSB0eXBlcyBhdmFpbGFibGUgb24gdGhlIGNsaXBib2FyZC4KICA8cD5DbGlwYm9hcmQuZ2V0QXZhaWxhYmxlVHlwZXMgcmV0dXJucyBhbiBhcnJheSBvZiBUcmFuc2ZlckRhdGEgb2JqZWN0cy4gQQogIFRyYW5zZmVyRGF0YSBvYmplY3QgY29udGFpbnMgcGxhdGZvcm0gc3BlY2lmaWMgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGEKICBkYXRhIHR5cGUuIFdoaWxlIHRoZSBmaWVsZHMgb2YgdGhlIFRyYW5zZmVyRGF0YSBvYmplY3QgYXJlIHB1YmxpYywgZG8gbm90CiAgYXR0ZW1wdCB0byBpbnRlcnByZXQgdGhlbSBkaXJlY3RseS4gSW5zdGVhZCB1c2UgdGhlCiAgJnF1b3Q7aXNTdXBwb3J0ZWRUeXBlJnF1b3Q7IG1ldGhvZCBvZiBhbnkgc3ViY2xhc3Mgb2YgVHJhbnNmZXIgYXMgc2hvd24gaW4KICBsaW5lIDQuPC9wPgogIDxoMj48YSBuYW1lPSJfVHJhbnNmZXIiPjwvYT5UcmFuc2ZlcjwvaDI+CiAgPHA+VHJhbnNmZXIgaXMgYW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgY29udmVydGluZwogIGJldHdlZW4gYSBKYXZhIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgYW5kIGEgcGxhdGZvcm0gc3BlY2lmaWMgcmVwcmVzZW50YXRpb24KICBvZiBkYXRhIGFuZCB2aWNlIHZlcnNhLiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YSBpcyB0aGUgY3VycmVuY3kKICB0aGUgYXBwbGljYXRpb24gdXNlcy4gRm9yIGV4YW1wbGUsIHRleHQgaXMgcmVwcmVzZW50ZWQgYnkgYSBTdHJpbmcgb2JqZWN0LiBUaGUKICBwbGF0Zm9ybSBzcGVjaWZpYyByZXByZXNlbnRhdGlvbiBpcyB0aGUgY3VycmVuY3kgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kCiAgaXMgcmVwcmVzZW50ZWQgaW4gU1dUIGJ5IHRoZSBUcmFuc2ZlckRhdGEgb2JqZWN0LiBUYWJsZSAzIHNob3dzIHRoZSBzdWJjbGFzc2VzCiAgb2YgVHJhbnNmZXIgcHJvdmlkZWQgaW4gb3JnLmVjbGlwc2Uuc3d0LmRuZC48L3A+CiAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iOTAlIj4KICAgIDx0cj4KICAgICAgPHRoIHdpZHRoPSIxNSUiIGFsaWduPSJjZW50ZXIiPlRyYW5zZmVyPC90aD4KICAgICAgPHRoIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPkphdmEgZm9ybWF0PC90aD4KICAgICAgPHRoIHdpZHRoPSI2MCUiIGFsaWduPSJjZW50ZXIiPkV4YW1wbGU8L3RoPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIxNSUiPjxjb2RlPlRleHRUcmFuc2ZlcjwvY29kZT48L3RkPgogICAgICA8dGQgd2lkdGg9IjIwJSI+PGNvZGU+U3RyaW5nPC9jb2RlPjwvdGQ+CiAgICAgIDx0ZCB3aWR0aD0iNjAlIj48Y29kZT4mcXVvdDtoZWxsbyB3b3JsZCZxdW90OzwvY29kZT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIxNSUiPjxjb2RlPlJURlRyYW5zZmVyPC9jb2RlPjwvdGQ+CiAgICAgIDx0ZCB3aWR0aD0iMjAlIj48Y29kZT5TdHJpbmc8L2NvZGU+PC90ZD4KICAgICAgPHRkIHdpZHRoPSI2MCUiPjxjb2RlPiZxdW90O3tcXHJ0ZjFcXGJcXGkgaGVsbG8gd29ybGR9JnF1b3Q7PC9jb2RlPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgd2lkdGg9IjE1JSI+PGNvZGU+RmlsZVRyYW5zZmVyPC9jb2RlPjwvdGQ+CiAgICAgIDx0ZCB3aWR0aD0iMjAlIj48Y29kZT5TdHJpbmdbXTwvY29kZT48L3RkPgogICAgICA8dGQgd2lkdGg9IjYwJSI+PGNvZGU+bmV3IFN0cmluZ1tdIHtmaWxlMS5nZXRBYnNvbHV0ZVBhdGgoKSwKICAgICAgICBmaWxlMi5nZXRBYnNvbHV0ZVBhdGgoKX08L2NvZGU+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8cCBhbGlnbj0ibGVmdCI+VGFibGUgMzogVHJhbnNmZXIgdHlwZXMgcHJvdmlkZWQgYnkgU1dUCiAgPHA+VGhlIFRyYW5zZmVyRGF0YSBjbGFzcyBjb250YWlucyBwdWJsaWMgZmllbGRzIHRoYXQgYXJlIHBsYXRmb3JtLXNwZWNpZmljLgogIEJlY2F1c2UgdGhlIGZpZWxkcyBpbiBUcmFuc2ZlckRhdGEgdmFyeSBmcm9tIHBsYXRmb3JtIHRvIHBsYXRmb3JtLAogIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IGFjY2VzcyB0aGVtLiBUaGUgcHVycG9zZSBvZiBtYWtpbmcgdGhlIGZpZWxkcyBwdWJsaWMKICBpcyB0byBhbGxvdyBkZXZlbG9wZXJzIHRvIGV4dGVuZCB0aGUgVHJhbnNmZXIgY2xhc3MgYW5kIHByb3ZpZGUgYWRkaXRpb25hbAogIHBsYXRmb3JtIHNwZWNpZmljIHR5cGVzIGZvciBkYXRhIHRyYW5zZmVyIChlLmcuLCBiaXRtYXAgaW1hZ2VzIG9yIHdhdmUgZmlsZXMpLjwvcD4KICA8aDI+U3VtbWFyeTwvaDI+CiAgPHA+VGhpcyBhcnRpY2xlIGRlc2NyaWJlcyB0aGUgU1dUIG1lY2hhbmlzbSBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgZWl0aGVyIHZpYQogIERyYWcgYW5kIERyb3Agb3IgdXNpbmcgdGhlIENsaXBib2FyZC4gU1dUIHVzZXMgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbQogIG1lY2hhbmlzbSB3aGljaCBhbGxvd3MgZGF0YSB0cmFuc2ZlciBhY3Jvc3MgYXBwbGljYXRpb25zIGZvciBtYXhpbXVtIHN5c3RlbQogIGludGVncmF0aW9uLiBTV1QgcHJvdmlkZXMgc3RhbmRhcmQgZGF0YSB0cmFuc2ZlciB0eXBlcyBhcyB3ZWxsIGFzIGFuCiAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGRlZmluaW5nIHlvdXIgb3duIHRyYW5zZmVyIHR5cGVzIG9yIHN1cHBvcnRpbmcgYWRkaXRpb25hbAogIHBsYXRmb3JtLWRlZmluZWQgZGF0YSB0eXBlcy48L3A+CjxwPjxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFuZCBsb2dvcyBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgU3VuIApNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KPC9ib2R5Pgo=