{"js":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8IS0tIFNVQkRPTUFJTjogYWlieXRlcy5icmFuZGhhbmRzaGFrZS5jb20gLS0+CiAgICA8IS0tIFBJT05FRVI6IERhdmlzIEx1YmVnYSAtLT4KICAgIDwhLS0gQ09NUEFOWTogTmV4dHdhdmUgRGlnaXRhbCAtLT4KICAgIDwhLS0gRlJPTlQgRE9PUiBQQUdFIC0gMiBQQVRIIFNZU1RFTSAtLT4KICAgIDwhLS0gRk9STSBTVUJNSVNTSU9OUyBUTzogc2hvcGxvY2FsYnVzaW5lc3NhZ2VuY3lAZ21haWwuY29tIC0tPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPkFJIEJ5dGVzIERpZ2l0YWwgfCBEYXZpcyBMdWJlZ2EgfCBZb3VyIERpZ2l0YWwgQnVzaW5lc3MgQ2FyZCBBd2FpdHM8L3RpdGxlPgogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdldCB5b3VyIHByZW1pdW0gZGlnaXRhbCBidXNpbmVzcyBjYXJkIGZyb20gRGF2aXMgTHViZWdhIC0gU29mdHdhcmUgRGV2ZWxvcGVyICYgRm91bmRlciBvZiBOZXh0d2F2ZSBEaWdpdGFsLiBTdGFuZCBvdXQuIEdldCBub3RpY2VkLiBHZXQgY29ubmVjdGVkLiI+CiAgICA8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9ImluZGV4LCBmb2xsb3ciPgogICAgPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vYWlieXRlcy5icmFuZGhhbmRzaGFrZS5jb20iPgogICAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1QbGF5ZmFpcitEaXNwbGF5OndnaHRANDAwOzUwMDs2MDA7NzAwOzgwMCZmYW1pbHk9Q29ybW9yYW50K0dhcmFtb25kOml0YWwsd2dodEAwLDQwMDswLDUwMDswLDYwMDsxLDQwMCZmYW1pbHk9TnVuaXRvOndnaHRAMzAwOzQwMDs1MDA7NjAwOzcwMCZkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI+CiAgICA8c3R5bGU+CiAgICAgICAgOnJvb3QgewogICAgICAgICAgICAtLW5hdnk6ICMwRDFCMkE7CiAgICAgICAgICAgIC0taW5kaWdvOiAjMUMxRjRBOwogICAgICAgICAgICAtLWdvbGQ6ICNENEFGMzc7CiAgICAgICAgICAgIC0taXZvcnk6ICNGOEY0RUM7CiAgICAgICAgICAgIC0tZGVlcGdvbGQ6ICNCODk3MkU7CiAgICAgICAgICAgIC0tY2hhcmNvYWw6ICMwYTBhMTI7CiAgICAgICAgICAgIC0tYmx1ZTogIzI1NjNlYjsKICAgICAgICAgICAgLS1ibHVlLWxpZ2h0OiAjM2I4MmY2OwogICAgICAgICAgICAtLWN5YW46ICMwNmI2ZDQ7CiAgICAgICAgICAgIC0tZWxlY3RyaWM6ICM4MThjZjg7CiAgICAgICAgICAgIC0tZ3JlZW46ICMxMGI5ODE7CiAgICAgICAgICAgIC0tcHVycGxlOiAjOGI1Y2Y2OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9CiAgICAgICAgaHRtbCB7IHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOyB9CiAgICAgICAgCiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnTnVuaXRvJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2hhcmNvYWwpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0taXZvcnkpOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS43OwogICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEFOSU1BVEVEIEJBQ0tHUk9VTkQgKi8KICAgICAgICAuYmctbWFzdGVyIHsKICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgICB0b3A6IDA7IGxlZnQ6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyB6LWluZGV4OiAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAKICAgICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChlbGxpcHNlIGF0IDIwJSAxMCUsIHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjMpIDAlLCB0cmFuc3BhcmVudCA1MCUpLAogICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGVsbGlwc2UgYXQgODAlIDkwJSwgcmdiYSg2LCAxODIsIDIxMiwgMC4yNSkgMCUsIHRyYW5zcGFyZW50IDQwJSksCiAgICAgICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoZWxsaXBzZSBhdCA1MCUgNTAlLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjIpIDAlLCB0cmFuc3BhcmVudCA2MCUpLAogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgdmFyKC0tY2hhcmNvYWwpIDAlLCB2YXIoLS1uYXZ5KSA1MCUsIHZhcigtLWluZGlnbykgMTAwJSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEZMT0FUSU5HIE9SQlMgKi8KICAgICAgICAub3JiIHsKICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICAgIGZpbHRlcjogYmx1cig2MHB4KTsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgICAgIGFuaW1hdGlvbjogZmxvYXRPcmIgMTVzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgIH0KICAgICAgICAub3JiLTEgeyB3aWR0aDogMzAwcHg7IGhlaWdodDogMzAwcHg7IGJhY2tncm91bmQ6IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjMpOyB0b3A6IDEwJTsgbGVmdDogLTUlOyBhbmltYXRpb24tZGVsYXk6IDBzOyB9CiAgICAgICAgLm9yYi0yIHsgd2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDI1MHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDYsIDE4MiwgMjEyLCAwLjI1KTsgdG9wOiA2MCU7IHJpZ2h0OiAtNSU7IGFuaW1hdGlvbi1kZWxheTogNXM7IH0KICAgICAgICAub3JiLTMgeyB3aWR0aDogMjAwcHg7IGhlaWdodDogMjAwcHg7IGJhY2tncm91bmQ6IHJnYmEoMjEyLCAxNzUsIDU1LCAwLjIpOyBib3R0b206IDEwJTsgbGVmdDogMzAlOyBhbmltYXRpb24tZGVsYXk6IDEwczsgfQogICAgICAgIEBrZXlmcmFtZXMgZmxvYXRPcmIgewogICAgICAgICAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApIHNjYWxlKDEpOyB9CiAgICAgICAgICAgIDI1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDMwcHgsIC0zMHB4KSBzY2FsZSgxLjEpOyB9CiAgICAgICAgICAgIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC0yMHB4LCAyMHB4KSBzY2FsZSgwLjkpOyB9CiAgICAgICAgICAgIDc1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDIwcHgsIDMwcHgpIHNjYWxlKDEuMDUpOyB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wYWdlLWNvbnRhaW5lciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMTA7IG1pbi1oZWlnaHQ6IDEwMHZoOyB9CiAgICAgICAgCiAgICAgICAgLyogPT09PT09PT09PSBGUk9OVCBET09SIEhFUk8gPT09PT09PT09PSAqLwogICAgICAgIC5mcm9udC1kb29yIHsKICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBwYWRkaW5nOiA0MHB4IDIwcHg7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogQlJBTkQgQkFER0UgKi8KICAgICAgICAuYnJhbmQtYmFkZ2UgewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgOTIsIDI0NiwgMC4yKTsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcHVycGxlKTsKICAgICAgICAgICAgcGFkZGluZzogMTJweCAzMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDNweDsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWVsZWN0cmljKTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsKICAgICAgICAgICAgYW5pbWF0aW9uOiBiYWRnZUZsb2F0IDNzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgIH0KICAgICAgICBAa2V5ZnJhbWVzIGJhZGdlRmxvYXQgewogICAgICAgICAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfQogICAgICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLThweCk7IH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogQVZBVEFSIENBUkQgKi8KICAgICAgICAuYXZhdGFyLXNob3djYXNlIHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgICAgIH0KICAgICAgICAuYXZhdGFyLWdsb3cgewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHRvcDogNTAlOwogICAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjQpLCB0cmFuc3BhcmVudCA3MCUpOwogICAgICAgICAgICBhbmltYXRpb246IGdsb3dQdWxzZSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIH0KICAgICAgICBAa2V5ZnJhbWVzIGdsb3dQdWxzZSB7CiAgICAgICAgICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMSk7IG9wYWNpdHk6IDAuNTsgfQogICAgICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxLjMpOyBvcGFjaXR5OiAwLjg7IH0KICAgICAgICB9CiAgICAgICAgLmF2YXRhci1jaXJjbGUgewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICAgICAgaGVpZ2h0OiAxNTBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgdmFyKC0tY3lhbiksIHZhcigtLWVsZWN0cmljKSk7CiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAyMDAlOwogICAgICAgICAgICBhbmltYXRpb246IGF2YXRhckdyYWRpZW50IDRzIGVhc2UgaW5maW5pdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIGJvcmRlcjogNnB4IHNvbGlkIHZhcigtLWdvbGQpOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDI1cHggNjBweCByZ2JhKDEzOSwgOTIsIDI0NiwgMC41KTsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIEBrZXlmcmFtZXMgYXZhdGFyR3JhZGllbnQgewogICAgICAgICAgICAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAlIDUwJTsgfQogICAgICAgICAgICA1MCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDUwJTsgfQogICAgICAgICAgICAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgNTAlOyB9CiAgICAgICAgfQogICAgICAgIC5hdmF0YXItaWNvbiB7IGZvbnQtc2l6ZTogNHJlbTsgfQogICAgICAgIAogICAgICAgIC8qIE5BTUUgJiBJTlRSTyAqLwogICAgICAgIC5pbnRyby1uYW1lIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdQbGF5ZmFpciBEaXNwbGF5Jywgc2VyaWY7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMi41cmVtLCA2dncsIDRyZW0pOwogICAgICAgICAgICBmb250LXdlaWdodDogODAwOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1pdm9yeSksIHZhcigtLWdvbGQpLCB2YXIoLS1pdm9yeSkpOwogICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgYXV0bzsKICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICAgICAgYW5pbWF0aW9uOiBzaGltbWVyVGV4dCAzcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgfQogICAgICAgIEBrZXlmcmFtZXMgc2hpbW1lclRleHQgewogICAgICAgICAgICAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAlIGNlbnRlcjsgfQogICAgICAgICAgICAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMjAwJSBjZW50ZXI7IH0KICAgICAgICB9CiAgICAgICAgLmludHJvLWNvbXBhbnkgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW07CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1jeWFuKTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogVEFHTElORSAqLwogICAgICAgIC5pbnRyby10YWdsaW5lIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdDb3Jtb3JhbnQgR2FyYW1vbmQnLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjJyZW0sIDN2dywgMS42cmVtKTsKICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDgsIDI0NCwgMjM2LCAwLjg1KTsKICAgICAgICAgICAgbWF4LXdpZHRoOiA2MDBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG8gMTVweDsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICB9CiAgICAgICAgLmludHJvLXN1YnRleHQgewogICAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0OCwgMjQ0LCAyMzYsIDAuNik7CiAgICAgICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvIDQwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIFRXTy1QQVRIIEJVVFRPTlMgKi8KICAgICAgICAucGF0aC1idXR0b25zIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZ2FwOiAyMHB4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1MHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucGF0aC1idG4gewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgICBwYWRkaW5nOiAyMHB4IDQwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgfQogICAgICAgIC5wYXRoLWJ0bjo6YmVmb3JlIHsKICAgICAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAwOyBsZWZ0OiAtMTAwJTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSgyNTUsMjU1LDI1NSwwLjMpLCB0cmFuc3BhcmVudCk7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGxlZnQgMC41cyBlYXNlOwogICAgICAgIH0KICAgICAgICAucGF0aC1idG46aG92ZXI6OmJlZm9yZSB7IGxlZnQ6IDEwMCU7IH0KICAgICAgICAKICAgICAgICAvKiBDVVJJT1VTIEJVVFRPTiAtIFNvZnRlciwgaW52aXRpbmcgKi8KICAgICAgICAucGF0aC1idG4uY3VyaW91cyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjIpOwogICAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1wdXJwbGUpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0taXZvcnkpOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4yKTsKICAgICAgICB9CiAgICAgICAgLnBhdGgtYnRuLmN1cmlvdXM6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgOTIsIDI0NiwgMC40KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpIHNjYWxlKDEuMDMpOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDIwcHggNTBweCByZ2JhKDEzOSwgOTIsIDI0NiwgMC40KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogU0VSSU9VUyBCVVRUT04gLSBCb2xkLCBhY3Rpb24gKi8KICAgICAgICAucGF0aC1idG4uc2VyaW91cyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWdvbGQpLCB2YXIoLS1kZWVwZ29sZCkpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tbmF2eSk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTVweCA0MHB4IHJnYmEoMjEyLCAxNzUsIDU1LCAwLjQpOwogICAgICAgIH0KICAgICAgICAucGF0aC1idG4uc2VyaW91czpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KSBzY2FsZSgxLjA1KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAyNXB4IDYwcHggcmdiYSgyMTIsIDE3NSwgNTUsIDAuNik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5idG4taWNvbiB7IGZvbnQtc2l6ZTogMS4zcmVtOyB9CiAgICAgICAgCiAgICAgICAgLyogUVIgQ09ERSBTRUNUSU9OIC0gVE9QICovCiAgICAgICAgLnFyLXRvcC1zZWN0aW9uIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsKICAgICAgICB9CiAgICAgICAgLnFyLXRvcC1hcnJvd3MgewogICAgICAgICAgICBmb250LXNpemU6IDIuNXJlbTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWdvbGQpOwogICAgICAgICAgICBhbmltYXRpb246IGFycm93Qm91bmNlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMTVweDsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyBhcnJvd0JvdW5jZSB7CiAgICAgICAgICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9CiAgICAgICAgICAgIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCk7IH0KICAgICAgICB9CiAgICAgICAgLnFyLXRvcC1sYWJlbCB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tZ29sZCk7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAycHg7CiAgICAgICAgICAgIGFuaW1hdGlvbjogbGFiZWxQdWxzZSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyBsYWJlbFB1bHNlIHsKICAgICAgICAgICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAwLjg7IH0KICAgICAgICAgICAgNTAlIHsgb3BhY2l0eTogMTsgdGV4dC1zaGFkb3c6IDAgMCAyMHB4IHJnYmEoMjEyLCAxNzUsIDU1LCAwLjUpOyB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIAogICAgICAgIC8qID09PT09PT09PT0gQ1VSSU9VUyBTRUNUSU9OIChNb3JlIEluZm8gKyBMZWFkIENhcHR1cmUpID09PT09PT09PT0gKi8KICAgICAgICAuY3VyaW91cy1zZWN0aW9uIHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICAgICAgcGFkZGluZzogODBweCAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4xKSwgdHJhbnNwYXJlbnQpOwogICAgICAgIH0KICAgICAgICAuY3VyaW91cy1zZWN0aW9uLmFjdGl2ZSB7IGRpc3BsYXk6IGJsb2NrOyB9CiAgICAgICAgCiAgICAgICAgLmN1cmlvdXMtY29udGFpbmVyIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiA3MDBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmN1cmlvdXMtaGVhZGVyIGgyIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdQbGF5ZmFpciBEaXNwbGF5Jywgc2VyaWY7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS44cmVtLCA0dncsIDIuNXJlbSk7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgfQogICAgICAgIC5jdXJpb3VzLWhlYWRlciBoMiAuaGlnaGxpZ2h0IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgdmFyKC0tY3lhbikpOwogICAgICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIH0KICAgICAgICAuY3VyaW91cy1oZWFkZXIgcCB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDgsIDI0NCwgMjM2LCAwLjgpOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBWQUxVRSBDQVJEUyAqLwogICAgICAgIC52YWx1ZS1ncmlkIHsKICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNTBweDsKICAgICAgICB9CiAgICAgICAgLnZhbHVlLWNhcmQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgOTIsIDI0NiwgMC4xKTsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgcmdiYSgxMzksIDkyLCAyNDYsIDAuMyk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDMwcHggMjBweDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgICAgICB9CiAgICAgICAgLnZhbHVlLWNhcmQ6aG92ZXIgewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY3lhbik7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNiwgMTgyLCAyMTIsIDAuMSk7CiAgICAgICAgfQogICAgICAgIC52YWx1ZS1pY29uIHsgZm9udC1zaXplOiAyLjVyZW07IG1hcmdpbi1ib3R0b206IDE1cHg7IH0KICAgICAgICAudmFsdWUtdGl0bGUgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1nb2xkKTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIH0KICAgICAgICAudmFsdWUtZGVzYyB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDgsIDI0NCwgMjM2LCAwLjcpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBMRUFEIENBUFRVUkUgRk9STSAqLwogICAgICAgIC5sZWFkLWNhcHR1cmUgewogICAgICAgICAgICBtYXgtd2lkdGg6IDQ1MHB4OwogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE0NWRlZywgcmdiYSgyOCwgMzEsIDc0LCAwLjgpLCByZ2JhKDEzLCAyNywgNDIsIDAuOTUpKTsKICAgICAgICAgICAgYm9yZGVyOiAzcHggc29saWQ7CiAgICAgICAgICAgIGJvcmRlci1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgdmFyKC0tY3lhbikpIDE7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7CiAgICAgICAgfQogICAgICAgIC5sZWFkLWNhcHR1cmUgaDMgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjRyZW07CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1nb2xkKTsKICAgICAgICB9CiAgICAgICAgLmxlYWQtY2FwdHVyZSBwIHsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0OCwgMjQ0LCAyMzYsIDAuNyk7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgICAgfQogICAgICAgIC5mb3JtLWdyb3VwIHsgbWFyZ2luLWJvdHRvbTogMThweDsgfQogICAgICAgIC5mb3JtLWdyb3VwIGxhYmVsIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDEuNXB4OwogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDgsIDI0NCwgMjM2LCAwLjYpOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgfQogICAgICAgIC5mb3JtLWdyb3VwIGlucHV0IHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDE0cHggMThweDsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgcmdiYSgxMzksIDkyLCAyNDYsIDAuMyk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWl2b3J5KTsKICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICAgIH0KICAgICAgICAuZm9ybS1ncm91cCBpbnB1dDpmb2N1cyB7CiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY3lhbik7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAyMHB4IHJnYmEoNiwgMTgyLCAyMTIsIDAuMik7CiAgICAgICAgfQogICAgICAgIC5sZWFkLWJ0biB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1jeWFuKSk7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgxMzksIDkyLCAyNDYsIDAuMyk7CiAgICAgICAgfQogICAgICAgIC5sZWFkLWJ0bjpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxNXB4IDQwcHggcmdiYSgxMzksIDkyLCAyNDYsIDAuNSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5iYWNrLXRvLXRvcCB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgY29sb3I6IHJnYmEoMjQ4LCAyNDQsIDIzNiwgMC42KTsKICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4zczsKICAgICAgICB9CiAgICAgICAgLmJhY2stdG8tdG9wOmhvdmVyIHsgY29sb3I6IHZhcigtLWdvbGQpOyB9CiAgICAgICAgCiAgICAgICAgLyogPT09PT09PT09PSBTRVJJT1VTIFNFQ1RJT04gKFByaWNpbmcpID09PT09PT09PT0gKi8KICAgICAgICAuc2VyaW91cy1zZWN0aW9uIHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICAgICAgcGFkZGluZzogODBweCAyMHB4OwogICAgICAgIH0KICAgICAgICAuc2VyaW91cy1zZWN0aW9uLmFjdGl2ZSB7IGRpc3BsYXk6IGJsb2NrOyB9CiAgICAgICAgCiAgICAgICAgLnByaWNpbmctY29udGFpbmVyIHsgbWF4LXdpZHRoOiA5NTBweDsgbWFyZ2luOiAwIGF1dG87IH0KICAgICAgICAucHJpY2luZy1oZWFkZXIgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi1ib3R0b206IDQwcHg7IH0KICAgICAgICAucHJpY2luZy1oZWFkZXIgaDIgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjhyZW0sIDR2dywgMi41cmVtKTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgICB9CiAgICAgICAgLnByaWNpbmctaGVhZGVyIGgyIC5oaWdobGlnaHQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1nb2xkKSwgdmFyKC0tY3lhbikpOwogICAgICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBDVVJSRU5DWSBUT0dHTEUgKi8KICAgICAgICAuY3VycmVuY3ktdG9nZ2xlcyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7CiAgICAgICAgfQogICAgICAgIC5jdXJyZW5jeS10b2dnbGUgewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDkyLCAyNDYsIDAuMik7CiAgICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXB1cnBsZSk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1pdm9yeSk7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44NXJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICAgIH0KICAgICAgICAuY3VycmVuY3ktdG9nZ2xlOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDkyLCAyNDYsIDAuNCk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICAgICAgfQogICAgICAgIC5jdXJyZW5jeS10b2dnbGUuYWN0aXZlIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZ29sZCksIHZhcigtLWRlZXBnb2xkKSk7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZ29sZCk7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1uYXZ5KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnByaWNpbmctZ3JpZCB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7IGdhcDogMjBweDsgfQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA4MDBweCkgeyAucHJpY2luZy1ncmlkIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IG1heC13aWR0aDogMzUwcHg7IG1hcmdpbjogMCBhdXRvOyB9IH0KICAgICAgICAKICAgICAgICAucHJpY2luZy1jYXJkIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE0NWRlZywgcmdiYSgyOCwgMzEsIDc0LCAwLjcpLCByZ2JhKDEzLCAyNywgNDIsIDAuOTUpKTsKICAgICAgICAgICAgYm9yZGVyOiAzcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgIGJvcmRlci1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgdmFyKC0tY3lhbikpIDE7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDMwcHggMjBweDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC41cyBlYXNlOwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQogICAgICAgIC5wcmljaW5nLWNhcmQ6aG92ZXIgewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpIHNjYWxlKDEuMDIpOwogICAgICAgICAgICBib3JkZXItaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWN5YW4pLCB2YXIoLS1nb2xkKSwgdmFyKC0tcHVycGxlKSkgMTsKICAgICAgICB9CiAgICAgICAgLnByaWNpbmctY2FyZC5mZWF0dXJlZCB7CiAgICAgICAgICAgIGJvcmRlci1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZ29sZCksIHZhcigtLWN5YW4pLCB2YXIoLS1nb2xkKSkgMTsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE0NWRlZywgcmdiYSg2LCAxODIsIDIxMiwgMC4yKSwgcmdiYSgxMywgMjcsIDQyLCAwLjk4KSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICAgICAgfQogICAgICAgIC5wcmljaW5nLWNhcmQuZmVhdHVyZWQ6aG92ZXIgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpIHRyYW5zbGF0ZVkoLTEwcHgpOyB9CiAgICAgICAgCiAgICAgICAgLnByaWNpbmctaWNvbiB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi44cmVtOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgICAgICBhbmltYXRpb246IGljb25GbG9hdCAzcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyBpY29uRmxvYXQgewogICAgICAgICAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfQogICAgICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOyB9CiAgICAgICAgfQogICAgICAgIC5wcmljaW5nLW5hbWUgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1jeWFuKTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIH0KICAgICAgICAucHJpY2luZy1mb3IgeyBmb250LXNpemU6IDAuNzVyZW07IGNvbG9yOiByZ2JhKDI0OCwgMjQ0LCAyMzYsIDAuNSk7IG1hcmdpbi1ib3R0b206IDEycHg7IH0KICAgICAgICAucHJpY2luZy1wcmljZSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IDIuOHJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0taXZvcnkpLCB2YXIoLS1nb2xkKSk7CiAgICAgICAgICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OwogICAgICAgICAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICAgIC5wcmljaW5nLXByaWNlIC5jdXJyZW5jeS1zeW1ib2wgeyBmb250LXNpemU6IDEuM3JlbTsgdmVydGljYWwtYWxpZ246IHN1cGVyOyB9CiAgICAgICAgLnByaWNpbmctcHJpY2UudWd4IHsgZm9udC1zaXplOiAxLjhyZW07IH0KICAgICAgICAucHJpY2luZy1wcmljZS51Z3ggLmN1cnJlbmN5LXN5bWJvbCB7IGZvbnQtc2l6ZTogMC45cmVtOyB9CiAgICAgICAgLnByaWNpbmctZmVhdHVyZXMgeyBsaXN0LXN0eWxlOiBub25lOyB0ZXh0LWFsaWduOiBsZWZ0OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBmb250LXNpemU6IDAuODVyZW07IH0KICAgICAgICAucHJpY2luZy1mZWF0dXJlcyBsaSB7CiAgICAgICAgICAgIHBhZGRpbmc6IDZweCAwOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjEpOwogICAgICAgIH0KICAgICAgICAucHJpY2luZy1mZWF0dXJlcyBsaTpsYXN0LWNoaWxkIHsgYm9yZGVyLWJvdHRvbTogbm9uZTsgfQogICAgICAgIC5wcmljaW5nLWZlYXR1cmVzIC5jaGVjayB7IGNvbG9yOiB2YXIoLS1ncmVlbik7IGZvbnQtc2l6ZTogMXJlbTsgfQogICAgICAgIAogICAgICAgIC5wcmljaW5nLWJ0biB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogMTRweCAyMHB4OwogICAgICAgICAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1jeWFuKSk7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgxMzksIDkyLCAyNDYsIDAuMyk7CiAgICAgICAgfQogICAgICAgIC5wcmljaW5nLWJ0bjpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxNXB4IDM1cHggcmdiYSgxMzksIDkyLCAyNDYsIDAuNSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIFBBWU1FTlQgU0VDVElPTiAqLwogICAgICAgIC5wYXltZW50LXNlY3Rpb24gewogICAgICAgICAgICBtYXJnaW4tdG9wOiA2MHB4OwogICAgICAgICAgICBwYWRkaW5nOiA1MHB4IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4xKSwgdHJhbnNwYXJlbnQpOwogICAgICAgIH0KICAgICAgICAucGF5bWVudC1ib3ggewogICAgICAgICAgICBtYXgtd2lkdGg6IDUwMHB4OwogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICAgICAgcGFkZGluZzogNnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1nb2xkKSwgdmFyKC0tY3lhbikpOwogICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgMjAwJTsKICAgICAgICAgICAgYW5pbWF0aW9uOiBib3JkZXJHbG93IDRzIGVhc2UgaW5maW5pdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7CiAgICAgICAgfQogICAgICAgIEBrZXlmcmFtZXMgYm9yZGVyR2xvdyB7CiAgICAgICAgICAgIDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgNTAlOyB9CiAgICAgICAgICAgIDUwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgNTAlOyB9CiAgICAgICAgICAgIDEwMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7IH0KICAgICAgICB9CiAgICAgICAgLnBheW1lbnQtYm94LWlubmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE0NWRlZywgcmdiYSgxMzksIDkyLCAyNDYsIDAuMTUpLCByZ2JhKDEzLCAyNywgNDIsIDAuOTgpKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjVweDsKICAgICAgICAgICAgcGFkZGluZzogNDVweCAzNXB4OwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgIC5wYXltZW50LWJveCBoMyB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IDEuNHJlbTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWdvbGQpOwogICAgICAgIH0KICAgICAgICAucGF5bWVudC1udW1iZXIgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAyLjVyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1pdm9yeSk7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDNweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgICAgICBwYWRkaW5nOiAyMHB4IDMwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgYm9yZGVyOiAzcHggc29saWQ7CiAgICAgICAgICAgIGJvcmRlci1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgdmFyKC0tY3lhbikpIDE7CiAgICAgICAgfQogICAgICAgIC5wYXltZW50LW5hbWUgewogICAgICAgICAgICBmb250LXNpemU6IDEuMXJlbTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWN5YW4pOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIH0KICAgICAgICAucGF5bWVudC1zdGVwcyB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgICAgICAgICAgcGFkZGluZzogMjVweDsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgcmdiYSgxMzksIDkyLCAyNDYsIDAuMik7CiAgICAgICAgfQogICAgICAgIC5wYXltZW50LXN0ZXBzIGg0IHsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICAgICAgICBjb2xvcjogdmFyKC0tZ29sZCk7CiAgICAgICAgfQogICAgICAgIC5wYXltZW50LXN0ZXBzIG9sIHsgbWFyZ2luLWxlZnQ6IDIwcHg7IGZvbnQtc2l6ZTogMC45cmVtOyBjb2xvcjogcmdiYSgyNDgsIDI0NCwgMjM2LCAwLjkpOyB9CiAgICAgICAgLnBheW1lbnQtc3RlcHMgbGkgeyBtYXJnaW4tYm90dG9tOiAxMnB4OyB9CiAgICAgICAgLnBheW1lbnQtc3RlcHMgc3Ryb25nIHsgY29sb3I6IHZhcigtLWN5YW4pOyB9CiAgICAgICAgCiAgICAgICAgLyogT1JERVIgRk9STSAqLwogICAgICAgIC5vcmRlci1zZWN0aW9uIHsgcGFkZGluZzogNTBweCAyMHB4OyB9CiAgICAgICAgLm9yZGVyLWJveCB7CiAgICAgICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZSksIHZhcigtLWN5YW4pLCB2YXIoLS1wdXJwbGUpKTsKICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDIwMCU7CiAgICAgICAgICAgIGFuaW1hdGlvbjogYm9yZGVyR2xvdyA1cyBlYXNlIGluZmluaXRlOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzMHB4OwogICAgICAgIH0KICAgICAgICAub3JkZXItYm94LWlubmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE0NWRlZywgcmdiYSgyOCwgMzEsIDc0LCAwLjgpLCByZ2JhKDEzLCAyNywgNDIsIDAuOTgpKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjZweDsKICAgICAgICAgICAgcGFkZGluZzogNDBweCAzMHB4OwogICAgICAgIH0KICAgICAgICAub3JkZXItYm94IGgzIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdQbGF5ZmFpciBEaXNwbGF5Jywgc2VyaWY7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS40cmVtOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWdvbGQpLCB2YXIoLS1jeWFuKSk7CiAgICAgICAgICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OwogICAgICAgICAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICAgIC5mb3JtLXJvdyB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiAxNXB4OyB9CiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7IC5mb3JtLXJvdyB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9IH0KICAgICAgICAuZm9ybS1ncm91cCBzZWxlY3QgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogMTRweCAxOHB4OwogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4zKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0taXZvcnkpOwogICAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInJTNFJTNDcGF0aCBmaWxsPSclMjMwNmI2ZDQnIGQ9J002IDhMMSAzaDEweicvJTNFJTNDL3N2ZyUzRSIpOwogICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAxNXB4IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgLmZvcm0tZ3JvdXAgc2VsZWN0OmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jeWFuKTsKICAgICAgICB9CiAgICAgICAgLnN1Ym1pdC1idG4gewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogMThweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDM1cHg7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1nb2xkKSwgdmFyKC0tZGVlcGdvbGQpKTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLW5hdnkpOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDE1cHggNDBweCByZ2JhKDIxMiwgMTc1LCA1NSwgMC4zKTsKICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDJweDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICB9CiAgICAgICAgLnN1Ym1pdC1idG46aG92ZXIgewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCkgc2NhbGUoMS4wMik7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMjBweCA1MHB4IHJnYmEoMjEyLCAxNzUsIDU1LCAwLjUpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBGT09URVIgKi8KICAgICAgICAuZm9vdGVyIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBwYWRkaW5nOiA0MHB4IDIwcHg7CiAgICAgICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4yKTsKICAgICAgICB9CiAgICAgICAgLmZvb3Rlci1icmFuZCB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IDEuM3JlbTsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZ29sZCksIHZhcigtLWN5YW4pKTsKICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB9CiAgICAgICAgLmZvb3RlciBwIHsgZm9udC1zaXplOiAwLjhyZW07IGNvbG9yOiByZ2JhKDI0OCwgMjQ0LCAyMzYsIDAuNSk7IH0KICAgICAgICAuZm9vdGVyLWxpbmtzIHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CiAgICAgICAgLmZvb3Rlci1saW5rcyBhIHsKICAgICAgICAgICAgY29sb3I6IHJnYmEoMjQ4LCAyNDQsIDIzNiwgMC42KTsKICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4zczsKICAgICAgICB9CiAgICAgICAgLmZvb3Rlci1saW5rcyBhOmhvdmVyIHsgY29sb3I6IHZhcigtLWdvbGQpOyB9CiAgICAgICAgCiAgICAgICAgLyogUkVTUE9OU0lWRSAqLwogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgICAgICAucGF0aC1idG4geyB3aWR0aDogMTAwJTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IHBhZGRpbmc6IDE4cHggMzBweDsgfQogICAgICAgICAgICAuaW50cm8tbmFtZSB7IGZvbnQtc2l6ZTogMnJlbTsgfQogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJiZy1tYXN0ZXIiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ib3JiIG9yYi0xIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im9yYiBvcmItMiI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJvcmIgb3JiLTMiPjwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJwYWdlLWNvbnRhaW5lciI+CiAgICAgICAgPCEtLSA9PT09PT09PT09IEZST05UIERPT1IgPT09PT09PT09PSAtLT4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iZnJvbnQtZG9vciIgaWQ9ImhvbWUiPgogICAgICAgICAgICA8IS0tIFFSIEFSUk9XUyBBVCBUT1AgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InFyLXRvcC1zZWN0aW9uIj4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJxci10b3AtbGFiZWwiPvCfkYYgU2NhbiBRUiBDb2RlIEFib3ZlIPCfkYY8L3A+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJxci10b3AtYXJyb3dzIj7irIbvuI8g4qyG77iPIOKshu+4jyDirIbvuI8g4qyG77iPPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnJhbmQtYmFkZ2UiPgogICAgICAgICAgICAgICAgPHNwYW4+8J+knTwvc3Bhbj4gQnJhbmRIYW5kc2hha2UgQW1iYXNzYWRvcgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF2YXRhci1zaG93Y2FzZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdmF0YXItZ2xvdyI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdmF0YXItY2lyY2xlIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXZhdGFyLWljb24iPvCfkrs8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8aDEgY2xhc3M9ImludHJvLW5hbWUiPkRhdmlzIEx1YmVnYTwvaDE+CiAgICAgICAgICAgIDxwIGNsYXNzPSJpbnRyby1jb21wYW55Ij7wn5qAIE5leHR3YXZlIERpZ2l0YWw8L3A+CiAgICAgICAgICAgIAogICAgICAgICAgICA8cCBjbGFzcz0iaW50cm8tdGFnbGluZSI+CiAgICAgICAgICAgICAgICAiQnVpbGRpbmcgYXBwbGljYXRpb25zIHRoYXQgc29sdmUgcHJvYmxlbXMsIGVuaGFuY2UgZXhwZXJpZW5jZXMsIGFuZCBicmluZyBpZGVhcyB0byBsaWZlIHRocm91Z2ggY2xlYW4sIGVmZmljaWVudCBjb2RlLiIKICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8cCBjbGFzcz0iaW50cm8tc3VidGV4dCI+CiAgICAgICAgICAgICAgICBTb2Z0d2FyZSBEZXZlbG9wZXIg4oCiIEFuZHJvaWQgJiBXZWIgRGV2ZWxvcG1lbnQgUGlvbmVlciDigKIgQ29tcHV0ZXIgU2NpZW5jZSBTdHVkZW50CiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhdGgtYnV0dG9ucyI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwYXRoLWJ0biBjdXJpb3VzIiBvbmNsaWNrPSJzaG93Q3VyaW91cygpIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnRuLWljb24iPvCfpJQ8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgSSdtIEN1cmlvdXMg4oCUIFRlbGwgTWUgTW9yZQogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwYXRoLWJ0biBzZXJpb3VzIiBvbmNsaWNrPSJzaG93U2VyaW91cygpIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnRuLWljb24iPvCflKU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgSSdtIFJlYWR5IOKAlCBTaG93IE1lIFByaWNpbmcKICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAKICAgICAgICA8IS0tID09PT09PT09PT0gQ1VSSU9VUyBTRUNUSU9OID09PT09PT09PT0gLS0+CiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImN1cmlvdXMtc2VjdGlvbiIgaWQ9ImN1cmlvdXMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjdXJpb3VzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjdXJpb3VzLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPldoYXQgSXMgQSA8c3BhbiBjbGFzcz0iaGlnaGxpZ2h0Ij5EaWdpdGFsIEJ1c2luZXNzIENhcmQ/PC9zcGFuPjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPHA+WW91ciBwcm9mZXNzaW9uYWwgaWRlbnRpdHksIGFsd2F5cyBpbiB5b3VyIHBvY2tldC4gT25lIHNjYW4sIGluc3RhbnQgY29ubmVjdGlvbi4gTm8gcGFwZXIuIE5vIHdhc3RlLiBKdXN0IGltcGFjdC48L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtZ3JpZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLWljb24iPvCfk7E8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtdGl0bGUiPkFsd2F5cyBXaXRoIFlvdTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1kZXNjIj5TaGFyZSB2aWEgUVIgY29kZSwgbGluaywgb3IgTkZDLiBOZXZlciBydW4gb3V0IG9mIGNhcmRzIGFnYWluLjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1pY29uIj7inKg8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtdGl0bGUiPlN0YW5kIE91dDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1kZXNjIj5Qcm9mZXNzaW9uYWwsIGFuaW1hdGVkLCBtZW1vcmFibGUuIEZpcnN0IGltcHJlc3Npb25zIHRoYXQgbGFzdC48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtaWNvbiI+8J+UhDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS10aXRsZSI+QWx3YXlzIFVwZGF0ZWQ8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtZGVzYyI+Q2hhbmdlIGpvYnM/IE5ldyBudW1iZXI/IFVwZGF0ZSBpbnN0YW50bHkuIE9sZCBjYXJkcyBzdGF5IGN1cnJlbnQuPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLWljb24iPvCfkrA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtdGl0bGUiPlNhdmUgTW9uZXk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtZGVzYyI+T25lLXRpbWUgaW52ZXN0bWVudC4gTm8gbW9yZSByZXByaW50aW5nLiBFY28tZnJpZW5kbHkgdG9vLjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlYWQtY2FwdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgPGgzPvCfjoEgV2FudCBNb3JlIEluZm8gRmlyc3Q/PC9oMz4KICAgICAgICAgICAgICAgICAgICA8cD5Ecm9wIHlvdXIgZGV0YWlscyBhbmQgSSdsbCBzZW5kIHlvdSBhIGZyZWUgZ3VpZGUgb24gZGlnaXRhbCBidXNpbmVzcyBjYXJkcyArIGV4Y2x1c2l2ZSBlYXJseS1iaXJkIG9mZmVycy48L3A+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJodHRwczovL2Zvcm1zdWJtaXQuY28vc2hvcGxvY2FsYnVzaW5lc3NhZ2VuY3lAZ21haWwuY29tIiBtZXRob2Q9IlBPU1QiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJfc3ViamVjdCIgdmFsdWU9IvCfpJQgQ1VSSU9VUyBMZWFkIGZyb20gQUkgQnl0ZXMgLSBEYXZpcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Il90ZW1wbGF0ZSIgdmFsdWU9InRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iX2NhcHRjaGEiIHZhbHVlPSJmYWxzZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkxlYWQgVHlwZSIgdmFsdWU9IkN1cmlvdXMgLSBXYW50cyBNb3JlIEluZm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBbWJhc3NhZG9yIiB2YWx1ZT0iRGF2aXMgTHViZWdhIC0gQUkgQnl0ZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WW91ciBOYW1lPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiByZXF1aXJlZCBwbGFjZWhvbGRlcj0iV2hhdCBzaG91bGQgSSBjYWxsIHlvdT8iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+RW1haWwgb3IgV2hhdHNBcHA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNvbnRhY3QiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPSJIb3cgY2FuIEkgcmVhY2ggeW91PyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImxlYWQtYnRuIj5TZW5kIE1lIFRoZSBJbmZvIPCfk6k8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hvbWUiIGNsYXNzPSJiYWNrLXRvLXRvcCIgb25jbGljaz0iaGlkZUFsbCgpIj7ihpAgQmFjayB0byBtYWluPC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgICAgCiAgICAgICAgPCEtLSA9PT09PT09PT09IFNFUklPVVMgU0VDVElPTiAoUHJpY2luZyArIE9yZGVyKSA9PT09PT09PT09IC0tPgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJzZXJpb3VzLXNlY3Rpb24iIGlkPSJzZXJpb3VzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5DaG9vc2UgWW91ciA8c3BhbiBjbGFzcz0iaGlnaGxpZ2h0Ij5DYXJkIFBhY2thZ2U8L3NwYW4+PC9oMj4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjdXJyZW5jeS10b2dnbGVzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3VycmVuY3ktdG9nZ2xlIGFjdGl2ZSIgaWQ9InVzZFRvZ2dsZSIgb25jbGljaz0ic2hvd1VTRCgpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPvCfh7rwn4e4PC9zcGFuPiBVU0QKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN1cnJlbmN5LXRvZ2dsZSIgaWQ9InVneFRvZ2dsZSIgb25jbGljaz0ic2hvd1VHWCgpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPvCfh7rwn4esPC9zcGFuPiBVR1gKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1ncmlkIj4KICAgICAgICAgICAgICAgICAgICA8IS0tIFNUQVJURVIgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1pY29uIj7wn46vPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctbmFtZSI+U3RhcnRlcjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLWZvciI+UGVyZmVjdCBmb3IgU3R1ZGVudHM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1wcmljZSB1c2QiIGRhdGEtdXNkPSIxMCIgZGF0YS11Z3g9IjM3LDAwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVuY3ktc3ltYm9sIj4kPC9zcGFuPjEwCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InByaWNpbmctZmVhdHVyZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBQcm9mZXNzaW9uYWwgRGlnaXRhbCBDYXJkPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gQ29udGFjdCBJbmZvICYgUGhvdG88L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiAzIFNvY2lhbCBNZWRpYSBMaW5rczwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IFFSIENvZGU8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiA0OGhyIERlbGl2ZXJ5PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icHJpY2luZy1idG4iIG9uY2xpY2s9InNlbGVjdFBsYW4oJ1N0YXJ0ZXInLCAxMCkiPkdldCBTdGFydGVkPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPCEtLSBQUk9GRVNTSU9OQUwgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1jYXJkIGZlYXR1cmVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1pY29uIj7irZA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1uYW1lIj5Qcm9mZXNzaW9uYWw8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1mb3IiPk1vc3QgUG9wdWxhcjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLXByaWNlIHVzZCIgZGF0YS11c2Q9IjI1IiBkYXRhLXVneD0iOTIsNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW5jeS1zeW1ib2wiPiQ8L3NwYW4+MjUKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0icHJpY2luZy1mZWF0dXJlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IEV2ZXJ5dGhpbmcgaW4gU3RhcnRlcjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IEN1c3RvbSBDb2xvcnM8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiA2IFNvY2lhbCBNZWRpYSBMaW5rczwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IFNlcnZpY2VzIFNlY3Rpb248L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBCb29raW5nIENhbGVuZGFyPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gUHJpb3JpdHkgU3VwcG9ydDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InByaWNpbmctYnRuIiBvbmNsaWNrPSJzZWxlY3RQbGFuKCdQcm9mZXNzaW9uYWwnLCAyNSkiPkdldCBQcm9mZXNzaW9uYWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8IS0tIEVYRUNVVElWRSAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLWljb24iPvCfkZE8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1uYW1lIj5FeGVjdXRpdmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1mb3IiPkZvciBMZWFkZXJzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctcHJpY2UgdXNkIiBkYXRhLXVzZD0iNTAiIGRhdGEtdWd4PSIxODUsMDAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW5jeS1zeW1ib2wiPiQ8L3NwYW4+NTAKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0icHJpY2luZy1mZWF0dXJlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IEV2ZXJ5dGhpbmcgaW4gUHJvZmVzc2lvbmFsPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gVmlkZW8gRW1iZWQ8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBMZWFkIENhcHR1cmUgRm9ybTwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IEFuYWx5dGljcyBEYXNoYm9hcmQ8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBDdXN0b20gRG9tYWluIE9wdGlvbjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IFZJUCBTdXBwb3J0PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icHJpY2luZy1idG4iIG9uY2xpY2s9InNlbGVjdFBsYW4oJ0V4ZWN1dGl2ZScsIDUwKSI+R28gRXhlY3V0aXZlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8IS0tIFBBWU1FTlQgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBheW1lbnQtc2VjdGlvbiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXltZW50LWJveCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGF5bWVudC1ib3gtaW5uZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+8J+TsSBQYXkgdmlhIE1vYmlsZSBNb25leTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBheW1lbnQtbnVtYmVyIj4wNzA1IDk1NSA2MDg8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InBheW1lbnQtbmFtZSI+RGF2aXMgTHViZWdhPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGF5bWVudC1zdGVwcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+8J+TiyBIb3cgVG8gUGF5OjwvaDQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPk9wZW4geW91ciA8c3Ryb25nPk1UTiBNb01vPC9zdHJvbmc+IG9yIDxzdHJvbmc+QWlydGVsIE1vbmV5PC9zdHJvbmc+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+U2VsZWN0IDxzdHJvbmc+IlNlbmQgTW9uZXkiPC9zdHJvbmc+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+RW50ZXIgbnVtYmVyOiA8c3Ryb25nPjA3MDUgOTU1IDYwODwvc3Ryb25nPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPkVudGVyIHRoZSBhbW91bnQgZm9yIHlvdXIgY2hvc2VuIHBhY2thZ2U8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5GaWxsIG91dCB0aGUgb3JkZXIgZm9ybSBiZWxvdzwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPldlJ2xsIGNvbnRhY3QgeW91IHdpdGhpbiA8c3Ryb25nPjI0IGhvdXJzPC9zdHJvbmc+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb2w+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPCEtLSBPUkRFUiBGT1JNIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcmRlci1zZWN0aW9uIiBpZD0ib3JkZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3JkZXItYm94Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcmRlci1ib3gtaW5uZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+8J+TnSBPcmRlciBZb3VyIENhcmQ8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249Imh0dHBzOi8vZm9ybXN1Ym1pdC5jby9zaG9wbG9jYWxidXNpbmVzc2FnZW5jeUBnbWFpbC5jb20iIG1ldGhvZD0iUE9TVCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJfc3ViamVjdCIgdmFsdWU9IvCflKUgU0VSSU9VUyBPcmRlciBmcm9tIEFJIEJ5dGVzIC0gRGF2aXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iX3RlbXBsYXRlIiB2YWx1ZT0idGFibGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iX2NhcHRjaGEiIHZhbHVlPSJmYWxzZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMZWFkIFR5cGUiIHZhbHVlPSJTZXJpb3VzIC0gUmVhZHkgdG8gT3JkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQW1iYXNzYWRvciIgdmFsdWU9IkRhdmlzIEx1YmVnYSAtIEFJIEJ5dGVzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkZ1bGwgTmFtZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkZ1bGwgTmFtZSIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9IllvdXIgZnVsbCBuYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5FbWFpbDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJlbWFpbCIgbmFtZT0iRW1haWwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPSJ5b3VyQGVtYWlsLmNvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5QaG9uZS9XaGF0c0FwcDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZWwiIG5hbWU9IlBob25lIiByZXF1aXJlZCBwbGFjZWhvbGRlcj0iKzI1Ni4uLiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlBhY2thZ2UgU2VsZWN0ZWQ8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iUGFja2FnZSIgaWQ9InBhY2thZ2VTZWxlY3QiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCB5b3VyIHBhY2thZ2U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iU3RhcnRlciAtICQxMCI+U3RhcnRlciAtICQxMCAvIFVHWCAzNywwMDA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iUHJvZmVzc2lvbmFsIC0gJDI1Ij5Qcm9mZXNzaW9uYWwgLSAkMjUgLyBVR1ggOTIsNTAwPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkV4ZWN1dGl2ZSAtICQ1MCI+RXhlY3V0aXZlIC0gJDUwIC8gVUdYIDE4NSwwMDA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WW91ciBQcm9mZXNzaW9uL1RpdGxlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iUHJvZmVzc2lvbiIgcGxhY2Vob2xkZXI9ImUuZy4sIFNvZnR3YXJlIERldmVsb3BlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlRyYW5zYWN0aW9uIFJlZmVyZW5jZSAoQWZ0ZXIgUGF5bWVudCk8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJUcmFuc2FjdGlvbiBSZWYiIHBsYWNlaG9sZGVyPSJNb01vIGNvbmZpcm1hdGlvbiBjb2RlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9InN1Ym1pdC1idG4iPlN1Ym1pdCBPcmRlciDwn5qAPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDogMzBweDsiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hvbWUiIGNsYXNzPSJiYWNrLXRvLXRvcCIgb25jbGljaz0iaGlkZUFsbCgpIj7ihpAgQmFjayB0byBtYWluPC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgICAgCiAgICAgICAgPCEtLSBGT09URVIgLS0+CiAgICAgICAgPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyLWJyYW5kIj7wn6SdIEJyYW5kSGFuZHNoYWtlPC9kaXY+CiAgICAgICAgICAgIDxwPkRpZ2l0YWwgQnVzaW5lc3MgQ2FyZHMgZm9yIHRoZSBNb2Rlcm4gUHJvZmVzc2lvbmFsPC9wPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXItbGlua3MiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9icmFuZGhhbmRzaGFrZS5jb20iPk1haW4gU2l0ZTwvYT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd2EubWUvMjU2NzA1OTU1NjA4Ij5Db250YWN0IERhdmlzPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9saW5rZWRpbi5jb20vaW4vbHViZWdhLWRhdmlzIj5MaW5rZWRJbjwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxNXB4OyI+wqkgMjAyNiBOZXh0d2F2ZSBEaWdpdGFsLiBBbWJhc3NhZG9yIG9mIEJyYW5kSGFuZHNoYWtlLjwvcD4KICAgICAgICA8L2Zvb3Rlcj4KICAgIDwvZGl2PgogICAgCiAgICA8c2NyaXB0PgogICAgICAgIGZ1bmN0aW9uIHNob3dDdXJpb3VzKCkgewogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY3VyaW91cy1zZWN0aW9uJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZXJpb3VzLXNlY3Rpb24nKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1cmlvdXMnKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gc2hvd1NlcmlvdXMoKSB7CiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZXJpb3VzLXNlY3Rpb24nKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmN1cmlvdXMtc2VjdGlvbicpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VyaW91cycpLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmdW5jdGlvbiBoaWRlQWxsKCkgewogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY3VyaW91cy1zZWN0aW9uJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZXJpb3VzLXNlY3Rpb24nKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gQ3VycmVuY3kgdG9nZ2xlCiAgICAgICAgZnVuY3Rpb24gc2hvd1VTRCgpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZFRvZ2dsZScpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndWd4VG9nZ2xlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wcmljaW5nLXByaWNlJykuZm9yRWFjaChlbCA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCB1c2QgPSBlbC5kYXRhc2V0LnVzZDsKICAgICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0iY3VycmVuY3ktc3ltYm9sIj4kPC9zcGFuPiR7dXNkfWA7CiAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCd1Z3gnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIHNob3dVR1goKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1Z3hUb2dnbGUnKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZFRvZ2dsZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucHJpY2luZy1wcmljZScpLmZvckVhY2goZWwgPT4gewogICAgICAgICAgICAgICAgY29uc3QgdWd4ID0gZWwuZGF0YXNldC51Z3g7CiAgICAgICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImN1cnJlbmN5LXN5bWJvbCI+VUdYPC9zcGFuPiAke3VneH1gOwogICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgndWd4Jyk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmdW5jdGlvbiBzZWxlY3RQbGFuKHBsYW4sIHByaWNlKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWNrYWdlU2VsZWN0JykudmFsdWUgPSBgJHtwbGFufSAtICQke3ByaWNlfWA7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcmRlcicpLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOwogICAgICAgIH0KICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=","embed":""}
π Scan QR Code Above π
β¬οΈ β¬οΈ β¬οΈ β¬οΈ β¬οΈ
π€ BrandHandshake Ambassador
π»
Davis Lubega
π Nextwave Digital
"Building applications that solve problems, enhance experiences, and bring ideas to life through clean, efficient code."
Software Developer β’ Android & Web Development Pioneer β’ Computer Science Student
What Is A Digital Business Card?
Your professional identity, always in your pocket. One scan, instant connection. No paper. No waste. Just impact.
π±
Always With You
Share via QR code, link, or NFC. Never run out of cards again.
β¨
Stand Out
Professional, animated, memorable. First impressions that last.
π
Always Updated
Change jobs? New number? Update instantly. Old cards stay current.
π°
Save Money
One-time investment. No more reprinting. Eco-friendly too.
π Want More Info First?
Drop your details and I'll send you a free guide on digital business cards + exclusive early-bird offers.
Choose Your Card Package
π―
Starter
Perfect for Students
$10
- β Professional Digital Card
- β Contact Info & Photo
- β 3 Social Media Links
- β QR Code
- β 48hr Delivery
β
Professional
Most Popular
$25
- β Everything in Starter
- β Custom Colors
- β 6 Social Media Links
- β Services Section
- β Booking Calendar
- β Priority Support
π
Executive
For Leaders
$50
- β Everything in Professional
- β Video Embed
- β Lead Capture Form
- β Analytics Dashboard
- β Custom Domain Option
- β VIP Support
π± Pay via Mobile Money
0705 955 608
Davis Lubega
π How To Pay:
- Open your MTN MoMo or Airtel Money
- Select "Send Money"
- Enter number: 0705 955 608
- Enter the amount for your chosen package
- Fill out the order form below
- We'll contact you within 24 hours