{"js":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8IS0tCiAgICDilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcKICAgIOKVkSAgQlJBTkRIQU5EU0hBS0UgT0ZGSUNJQUwgQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkQogICAg4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjCiAgICDilZEgIEZJTEU6IHRlbmRvLWFpZ2VuaXVzLWZyb250ZG9vci1TTFVHLWFpZ2VuaXVzLmJyYW5kaGFuZHNoYWtlLmNvbS1WMS5odG1sICAgICAgIOKVkQogICAg4pWRICBTTFVHOiBhaWdlbml1cy5icmFuZGhhbmRzaGFrZS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkQogICAg4pWRICBWRVJTSU9OOiBWLTEgT0ZGSUNJQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRCiAgICDilZEgIExBU1QgVVBEQVRFRDogSmFudWFyeSAyMDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEKICAgIOKVkSAgU1RBVFVTOiDinIUgTElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEKICAgIOKVoOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVowogICAg4pWRICBQSU9ORUVSOiBUZW5kbyBUYWxpcSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEKICAgIOKVkSAgQlJBTkQ6IEFJIEdlbml1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRCiAgICDilZEgIERJVklTSU9OOiBEeW5hbWljIFBhcmFkaWdtcyBJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEKICAgIOKVkSAgUEhPTkU6ICsyNTYgNzA4IDg3NSA3MzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkQogICAg4pWRICBFTUFJTCBBTEVSVFM6IHRlbmRvdGFsaXE1NUBnbWFpbC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRCiAgICDilaDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilaMKICAgIOKVkSAgwqkgMjAyNiBNdWthc2EgVmVudHVyZSBQYXJ0bmVycyBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICDilZEKICAgIOKVkSAg8J+UkCBQUk9URUNURUQgQ09ERSAtIFVuYXV0aG9yaXplZCBjb3B5aW5nIHByb2hpYml0ZWQuICAgICAgICAgICAgICAgICAgICAgICAg4pWRCiAgICDilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ0KICAgIC0tPgogICAgCiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICAKICAgIDwhLS0gPT09PT09PT09PSBTRUNVUklUWSBIRUFERVJTID09PT09PT09PT0gLS0+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLUZyYW1lLU9wdGlvbnMiIGNvbnRlbnQ9IlNBTUVPUklHSU4iPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TZWN1cml0eS1Qb2xpY3kiIGNvbnRlbnQ9ImZyYW1lLWFuY2VzdG9ycyAnc2VsZicgaHR0cHM6Ly8qLmJyYW5kaGFuZHNoYWtlLmNvbSBodHRwczovLyouaGFuZHNoYWtlLmFmcmljYSI+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLUNvbnRlbnQtVHlwZS1PcHRpb25zIiBjb250ZW50PSJub3NuaWZmIj4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtWFNTLVByb3RlY3Rpb24iIGNvbnRlbnQ9IjE7IG1vZGU9YmxvY2siPgogICAgPG1ldGEgbmFtZT0icmVmZXJyZXIiIGNvbnRlbnQ9InN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4iPgogICAgPCEtLSA9PT09PT09PT09IEVORCBTRUNVUklUWSA9PT09PT09PT09IC0tPgogICAgCiAgICA8dGl0bGU+QUkgR2VuaXVzIHwgVGVuZG8gVGFsaXEgfCBZb3VyIERpZ2l0YWwgQnVzaW5lc3MgQ2FyZCBBd2FpdHM8L3RpdGxlPgogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdldCB5b3VyIHByZW1pdW0gZGlnaXRhbCBidXNpbmVzcyBjYXJkIGZyb20gVGVuZG8gVGFsaXEgLSBBSSBHZW5pdXMgfCBEeW5hbWljIFBhcmFkaWdtcyBJTy4gU3RhbmQgb3V0LiBHZXQgbm90aWNlZC4gR2V0IGNvbm5lY3RlZC4iPgogICAgPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJpbmRleCwgZm9sbG93Ij4KICAgIDxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovL2FpZ2VuaXVzLmJyYW5kaGFuZHNoYWtlLmNvbSI+CiAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVBsYXlmYWlyK0Rpc3BsYXk6d2dodEA0MDA7NTAwOzYwMDs3MDA7ODAwJmZhbWlseT1Db3Jtb3JhbnQrR2FyYW1vbmQ6aXRhbCx3Z2h0QDAsNDAwOzAsNTAwOzAsNjAwOzEsNDAwJmZhbWlseT1OdW5pdG86d2dodEAzMDA7NDAwOzUwMDs2MDA7NzAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KICAgIDxzdHlsZT4KICAgICAgICA6cm9vdCB7CiAgICAgICAgICAgIC0tbmF2eTogIzBEMUIyQTsKICAgICAgICAgICAgLS1pbmRpZ286ICMxQzFGNEE7CiAgICAgICAgICAgIC0tZ29sZDogI0Q0QUYzNzsKICAgICAgICAgICAgLS1pdm9yeTogI0Y4RjRFQzsKICAgICAgICAgICAgLS1kZWVwZ29sZDogI0I4OTcyRTsKICAgICAgICAgICAgLS1jaGFyY29hbDogIzBhMGExMjsKICAgICAgICAgICAgLS1ibHVlOiAjMjU2M2ViOwogICAgICAgICAgICAtLWJsdWUtbGlnaHQ6ICMzYjgyZjY7CiAgICAgICAgICAgIC0tY3lhbjogIzA2YjZkNDsKICAgICAgICAgICAgLS1lbGVjdHJpYzogIzgxOGNmODsKICAgICAgICAgICAgLS1ncmVlbjogIzEwYjk4MTsKICAgICAgICAgICAgLS1wdXJwbGU6ICM4YjVjZjY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KICAgICAgICBodG1sIHsgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7IH0KICAgICAgICAKICAgICAgICBib2R5IHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdOdW5pdG8nLCBzYW5zLXNlcmlmOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGFyY29hbCk7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1pdm9yeSk7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjc7CiAgICAgICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogU0VDVVJJVFk6IEltYWdlIHByb3RlY3Rpb24gKi8KICAgICAgICBpbWcgewogICAgICAgICAgICAtd2Via2l0LXVzZXItZHJhZzogbm9uZTsKICAgICAgICAgICAgLWtodG1sLXVzZXItZHJhZzogbm9uZTsKICAgICAgICAgICAgLW1vei11c2VyLWRyYWc6IG5vbmU7CiAgICAgICAgICAgIC1vLXVzZXItZHJhZzogbm9uZTsKICAgICAgICAgICAgdXNlci1kcmFnOiBub25lOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBTRUNVUklUWTogUHJpbnQgcHJvdGVjdGlvbiAqLwogICAgICAgIEBtZWRpYSBwcmludCB7CiAgICAgICAgICAgIGJvZHkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogQU5JTUFURUQgQkFDS0dST1VORCAqLwogICAgICAgIC5iZy1tYXN0ZXIgewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHRvcDogMDsgbGVmdDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDA7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IAogICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGVsbGlwc2UgYXQgMjAlIDEwJSwgcmdiYSgxMzksIDkyLCAyNDYsIDAuMykgMCUsIHRyYW5zcGFyZW50IDUwJSksCiAgICAgICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoZWxsaXBzZSBhdCA4MCUgOTAlLCByZ2JhKDYsIDE4MiwgMjEyLCAwLjI1KSAwJSwgdHJhbnNwYXJlbnQgNDAlKSwKICAgICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChlbGxpcHNlIGF0IDUwJSA1MCUsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMikgMCUsIHRyYW5zcGFyZW50IDYwJSksCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB2YXIoLS1jaGFyY29hbCkgMCUsIHZhcigtLW5hdnkpIDUwJSwgdmFyKC0taW5kaWdvKSAxMDAlKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogRkxPQVRJTkcgT1JCUyAqLwogICAgICAgIC5vcmIgewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgICAgZmlsdGVyOiBibHVyKDYwcHgpOwogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICAgICAgei1pbmRleDogMTsKICAgICAgICAgICAgYW5pbWF0aW9uOiBmbG9hdE9yYiAxNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgICAgfQogICAgICAgIC5vcmItMSB7IHdpZHRoOiAzMDBweDsgaGVpZ2h0OiAzMDBweDsgYmFja2dyb3VuZDogcmdiYSgxMzksIDkyLCAyNDYsIDAuMyk7IHRvcDogMTAlOyBsZWZ0OiAtNSU7IGFuaW1hdGlvbi1kZWxheTogMHM7IH0KICAgICAgICAub3JiLTIgeyB3aWR0aDogMjUwcHg7IGhlaWdodDogMjUwcHg7IGJhY2tncm91bmQ6IHJnYmEoNiwgMTgyLCAyMTIsIDAuMjUpOyB0b3A6IDYwJTsgcmlnaHQ6IC01JTsgYW5pbWF0aW9uLWRlbGF5OiA1czsgfQogICAgICAgIC5vcmItMyB7IHdpZHRoOiAyMDBweDsgaGVpZ2h0OiAyMDBweDsgYmFja2dyb3VuZDogcmdiYSgyMTIsIDE3NSwgNTUsIDAuMik7IGJvdHRvbTogMTAlOyBsZWZ0OiAzMCU7IGFuaW1hdGlvbi1kZWxheTogMTBzOyB9CiAgICAgICAgQGtleWZyYW1lcyBmbG9hdE9yYiB7CiAgICAgICAgICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCkgc2NhbGUoMSk7IH0KICAgICAgICAgICAgMjUlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMzBweCwgLTMwcHgpIHNjYWxlKDEuMSk7IH0KICAgICAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTIwcHgsIDIwcHgpIHNjYWxlKDAuOSk7IH0KICAgICAgICAgICAgNzUlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjBweCwgMzBweCkgc2NhbGUoMS4wNSk7IH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnBhZ2UtY29udGFpbmVyIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxMDsgbWluLWhlaWdodDogMTAwdmg7IH0KICAgICAgICAKICAgICAgICAvKiA9PT09PT09PT09IEZST05UIERPT1IgSEVSTyA9PT09PT09PT09ICovCiAgICAgICAgLmZyb250LWRvb3IgewogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHggMjBweDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBCUkFORCBCQURHRSAqLwogICAgICAgIC5icmFuZC1iYWRnZSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjIpOwogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wdXJwbGUpOwogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDMwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogM3B4OwogICAgICAgICAgICBjb2xvcjogdmFyKC0tZWxlY3RyaWMpOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgICAgICAgICBhbmltYXRpb246IGJhZGdlRmxvYXQgM3MgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgICAgfQogICAgICAgIEBrZXlmcmFtZXMgYmFkZ2VGbG9hdCB7CiAgICAgICAgICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9CiAgICAgICAgICAgIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KTsgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBBVkFUQVIgQ0FSRCAqLwogICAgICAgIC5hdmF0YXItc2hvd2Nhc2UgewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7CiAgICAgICAgfQogICAgICAgIC5hdmF0YXItZ2xvdyB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgcmdiYSgxMzksIDkyLCAyNDYsIDAuNCksIHRyYW5zcGFyZW50IDcwJSk7CiAgICAgICAgICAgIGFuaW1hdGlvbjogZ2xvd1B1bHNlIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgfQogICAgICAgIEBrZXlmcmFtZXMgZ2xvd1B1bHNlIHsKICAgICAgICAgICAgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxKTsgb3BhY2l0eTogMC41OyB9CiAgICAgICAgICAgIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEuMyk7IG9wYWNpdHk6IDAuODsgfQogICAgICAgIH0KICAgICAgICAuYXZhdGFyLWNpcmNsZSB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgei1pbmRleDogMjsKICAgICAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgICAgICBoZWlnaHQ6IDE1MHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1jeWFuKSwgdmFyKC0tZWxlY3RyaWMpKTsKICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDIwMCU7CiAgICAgICAgICAgIGFuaW1hdGlvbjogYXZhdGFyR3JhZGllbnQgNHMgZWFzZSBpbmZpbml0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgYm9yZGVyOiA2cHggc29saWQgdmFyKC0tZ29sZCk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMjVweCA2MHB4IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjUpOwogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyBhdmF0YXJHcmFkaWVudCB7CiAgICAgICAgICAgIDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgNTAlOyB9CiAgICAgICAgICAgIDUwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgNTAlOyB9CiAgICAgICAgICAgIDEwMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7IH0KICAgICAgICB9CiAgICAgICAgLmF2YXRhci1pY29uIHsgZm9udC1zaXplOiA0cmVtOyB9CiAgICAgICAgCiAgICAgICAgLyogTkFNRSAmIElOVFJPICovCiAgICAgICAgLmludHJvLW5hbWUgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgyLjVyZW0sIDZ2dywgNHJlbSk7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWl2b3J5KSwgdmFyKC0tZ29sZCksIHZhcigtLWl2b3J5KSk7CiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSBhdXRvOwogICAgICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgICAgICBhbmltYXRpb246IHNoaW1tZXJUZXh0IDNzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyBzaGltbWVyVGV4dCB7CiAgICAgICAgICAgIDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgY2VudGVyOyB9CiAgICAgICAgICAgIDEwMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAyMDAlIGNlbnRlcjsgfQogICAgICAgIH0KICAgICAgICAuaW50cm8tY29tcGFueSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IDEuM3JlbTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWN5YW4pOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBUQUdMSU5FICovCiAgICAgICAgLmludHJvLXRhZ2xpbmUgewogICAgICAgICAgICBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCcsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuMnJlbSwgM3Z3LCAxLjZyZW0pOwogICAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0OCwgMjQ0LCAyMzYsIDAuODUpOwogICAgICAgICAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgICAgICAgICBtYXJnaW46IDAgYXV0byAxNXB4OwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIH0KICAgICAgICAuaW50cm8tc3VidGV4dCB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICAgICAgY29sb3I6IHJnYmEoMjQ4LCAyNDQsIDIzNiwgMC42KTsKICAgICAgICAgICAgbWF4LXdpZHRoOiA1MDBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG8gNDBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogVFdPLVBBVEggQlVUVE9OUyAqLwogICAgICAgIC5wYXRoLWJ1dHRvbnMgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBnYXA6IDIwcHg7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDUwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wYXRoLWJ0biB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHggNDBweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB9CiAgICAgICAgLnBhdGgtYnRuOjpiZWZvcmUgewogICAgICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICB0b3A6IDA7IGxlZnQ6IC0xMDAlOwogICAgICAgICAgICB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwyNTUsMjU1LDAuMyksIHRyYW5zcGFyZW50KTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjVzIGVhc2U7CiAgICAgICAgfQogICAgICAgIC5wYXRoLWJ0bjpob3Zlcjo6YmVmb3JlIHsgbGVmdDogMTAwJTsgfQogICAgICAgIAogICAgICAgIC8qIENVUklPVVMgQlVUVE9OIC0gU29mdGVyLCBpbnZpdGluZyAqLwogICAgICAgIC5wYXRoLWJ0bi5jdXJpb3VzIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDkyLCAyNDYsIDAuMik7CiAgICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkIHZhcigtLXB1cnBsZSk7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1pdm9yeSk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjIpOwogICAgICAgIH0KICAgICAgICAucGF0aC1idG4uY3VyaW91czpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjQpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCkgc2NhbGUoMS4wMyk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMjBweCA1MHB4IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjQpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBTRVJJT1VTIEJVVFRPTiAtIEJvbGQsIGFjdGlvbiAqLwogICAgICAgIC5wYXRoLWJ0bi5zZXJpb3VzIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZ29sZCksIHZhcigtLWRlZXBnb2xkKSk7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1uYXZ5KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxNXB4IDQwcHggcmdiYSgyMTIsIDE3NSwgNTUsIDAuNCk7CiAgICAgICAgfQogICAgICAgIC5wYXRoLWJ0bi5zZXJpb3VzOmhvdmVyIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpIHNjYWxlKDEuMDUpOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDI1cHggNjBweCByZ2JhKDIxMiwgMTc1LCA1NSwgMC42KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJ0bi1pY29uIHsgZm9udC1zaXplOiAxLjNyZW07IH0KICAgICAgICAKICAgICAgICAvKiBRUiBDT0RFIFNFQ1RJT04gLSBUT1AgKi8KICAgICAgICAucXItdG9wLXNlY3Rpb24gewogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgICAgIH0KICAgICAgICAucXItdG9wLWFycm93cyB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tZ29sZCk7CiAgICAgICAgICAgIGFuaW1hdGlvbjogYXJyb3dCb3VuY2UgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAxNXB4OwogICAgICAgIH0KICAgICAgICBAa2V5ZnJhbWVzIGFycm93Qm91bmNlIHsKICAgICAgICAgICAgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0KICAgICAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNXB4KTsgfQogICAgICAgIH0KICAgICAgICAucXItdG9wLWxhYmVsIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1nb2xkKTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDJweDsKICAgICAgICAgICAgYW5pbWF0aW9uOiBsYWJlbFB1bHNlIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgIH0KICAgICAgICBAa2V5ZnJhbWVzIGxhYmVsUHVsc2UgewogICAgICAgICAgICAwJSwgMTAwJSB7IG9wYWNpdHk6IDAuODsgfQogICAgICAgICAgICA1MCUgeyBvcGFjaXR5OiAxOyB0ZXh0LXNoYWRvdzogMCAwIDIwcHggcmdiYSgyMTIsIDE3NSwgNTUsIDAuNSk7IH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogQUNUSU9OIEJVVFRPTlMgKi8KICAgICAgICAuYWN0aW9uLWJ1dHRvbnMgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgfQogICAgICAgIC5hY3Rpb24tYnRuIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHggMjBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDkyLCAyNDYsIDAuMTUpOwogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDEzOSwgOTIsIDI0NiwgMC40KTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWl2b3J5KTsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgbWluLXdpZHRoOiA4MHB4OwogICAgICAgIH0KICAgICAgICAuYWN0aW9uLWJ0bjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjMpOwogICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXB1cnBsZSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTsKICAgICAgICB9CiAgICAgICAgLmFjdGlvbi1idG4ucmV3YXJkcyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjEyLCAxNzUsIDU1LCAwLjE1KTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxMiwgMTc1LCA1NSwgMC40KTsKICAgICAgICB9CiAgICAgICAgLmFjdGlvbi1idG4ucmV3YXJkczpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjEyLCAxNzUsIDU1LCAwLjMpOwogICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWdvbGQpOwogICAgICAgIH0KICAgICAgICAuYWN0aW9uLWljb24gewogICAgICAgICAgICBmb250LXNpemU6IDEuNXJlbTsKICAgICAgICB9CiAgICAgICAgLmFjdGlvbi1sYWJlbCB7CiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIFNIQVJFIE1PREFMICovCiAgICAgICAgLnNoYXJlLW1vZGFsLCAuc2F2ZS1tb2RhbCB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgdG9wOiAwOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICAgICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIH0KICAgICAgICAuc2hhcmUtbW9kYWwuYWN0aXZlLCAuc2F2ZS1tb2RhbC5hY3RpdmUgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIH0KICAgICAgICAuc2hhcmUtbW9kYWwtY29udGVudCwgLnNhdmUtbW9kYWwtY29udGVudCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNDVkZWcsIHZhcigtLWluZGlnbyksIHZhcigtLW5hdnkpKTsKICAgICAgICAgICAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tZ29sZCk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDM1cHg7CiAgICAgICAgICAgIG1heC13aWR0aDogNDAwcHg7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGFuaW1hdGlvbjogbW9kYWxTbGlkZSAwLjNzIGVhc2U7CiAgICAgICAgfQogICAgICAgIEBrZXlmcmFtZXMgbW9kYWxTbGlkZSB7CiAgICAgICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpOyBvcGFjaXR5OiAwOyB9CiAgICAgICAgICAgIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyBvcGFjaXR5OiAxOyB9CiAgICAgICAgfQogICAgICAgIC5tb2RhbC1jbG9zZSB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAxNXB4OwogICAgICAgICAgICByaWdodDogMTVweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBjb2xvcjogdmFyKC0taXZvcnkpOwogICAgICAgICAgICBmb250LXNpemU6IDEuNXJlbTsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zczsKICAgICAgICB9CiAgICAgICAgLm1vZGFsLWNsb3NlOmhvdmVyIHsKICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgICAgLnNoYXJlLW1vZGFsLWNvbnRlbnQgaDMsIC5zYXZlLW1vZGFsLWNvbnRlbnQgaDMgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjRyZW07CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1nb2xkKTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KICAgICAgICAuc2hhcmUtb3B0aW9ucyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICB9CiAgICAgICAgLnNoYXJlLW9wdGlvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgICAgcGFkZGluZzogMTRweCAyMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgfQogICAgICAgIC5zaGFyZS1vcHRpb24ud2hhdHNhcHAgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMjVEMzY2LCAjMTI4QzdFKTsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIH0KICAgICAgICAuc2hhcmUtb3B0aW9uLmZhY2Vib29rIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzE4NzdGMiwgIzBkNWZjOSk7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CiAgICAgICAgLnNoYXJlLW9wdGlvbi50d2l0dGVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzFEQTFGMiwgIzBkOGJkOSk7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CiAgICAgICAgLnNoYXJlLW9wdGlvbi5saW5rZWRpbiB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwQTY2QzIsICMwODRkOTQpOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgfQogICAgICAgIC5zaGFyZS1vcHRpb24uY29weSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjMpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0taXZvcnkpOwogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wdXJwbGUpOwogICAgICAgIH0KICAgICAgICAuc2hhcmUtb3B0aW9uOmhvdmVyIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDVweCk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNXB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgIH0KICAgICAgICAuY29weS1mZWVkYmFjayB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNiwgMTg1LCAxMjksIDAuMik7CiAgICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWdyZWVuKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWdyZWVuKTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB9CiAgICAgICAgLmNvcHktZmVlZGJhY2suc2hvdyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2U7CiAgICAgICAgfQogICAgICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IH0KICAgICAgICAgICAgdG8geyBvcGFjaXR5OiAxOyB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIFNBVkUgTU9EQUwgKi8KICAgICAgICAuc2F2ZS1pbnN0cnVjdGlvbnMgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDIwcHg7CiAgICAgICAgfQogICAgICAgIC5pbnN0cnVjdGlvbi1ncm91cCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICB9CiAgICAgICAgLmluc3RydWN0aW9uLWdyb3VwIGg0IHsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWN5YW4pOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgfQogICAgICAgIC5pbnN0cnVjdGlvbi1ncm91cCBvbCB7CiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OwogICAgICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKICAgICAgICAgICAgY29sb3I6IHJnYmEoMjQ4LCAyNDQsIDIzNiwgMC44NSk7CiAgICAgICAgfQogICAgICAgIC5pbnN0cnVjdGlvbi1ncm91cCBsaSB7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICB9CiAgICAgICAgLmluc3RydWN0aW9uLWdyb3VwIHN0cm9uZyB7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1nb2xkKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgLyogPT09PT09PT09PSBDVVJJT1VTIFNFQ1RJT04gKE1vcmUgSW5mbyArIExlYWQgQ2FwdHVyZSkgPT09PT09PT09PSAqLwogICAgICAgIC5jdXJpb3VzLXNlY3Rpb24gewogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgICBwYWRkaW5nOiA4MHB4IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjEpLCB0cmFuc3BhcmVudCk7CiAgICAgICAgfQogICAgICAgIC5jdXJpb3VzLXNlY3Rpb24uYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH0KICAgICAgICAKICAgICAgICAuY3VyaW91cy1jb250YWluZXIgewogICAgICAgICAgICBtYXgtd2lkdGg6IDcwMHB4OwogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY3VyaW91cy1oZWFkZXIgaDIgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjhyZW0sIDR2dywgMi41cmVtKTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICB9CiAgICAgICAgLmN1cmlvdXMtaGVhZGVyIGgyIC5oaWdobGlnaHQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1jeWFuKSk7CiAgICAgICAgICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OwogICAgICAgICAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICAgIC5jdXJpb3VzLWhlYWRlciBwIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0OCwgMjQ0LCAyMzYsIDAuOCk7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIFZBTFVFIENBUkRTICovCiAgICAgICAgLnZhbHVlLWdyaWQgewogICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICAgICAgZ2FwOiAyMHB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1MHB4OwogICAgICAgIH0KICAgICAgICAudmFsdWUtY2FyZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjEpOwogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4zKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgICAgICAgICAgcGFkZGluZzogMzBweCAyMHB4OwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICAgIH0KICAgICAgICAudmFsdWUtY2FyZDpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jeWFuKTsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg2LCAxODIsIDIxMiwgMC4xKTsKICAgICAgICB9CiAgICAgICAgLnZhbHVlLWljb24geyBmb250LXNpemU6IDIuNXJlbTsgbWFyZ2luLWJvdHRvbTogMTVweDsgfQogICAgICAgIC52YWx1ZS10aXRsZSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IDEuMXJlbTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWdvbGQpOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgfQogICAgICAgIC52YWx1ZS1kZXNjIHsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0OCwgMjQ0LCAyMzYsIDAuNyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIExFQUQgQ0FQVFVSRSBGT1JNICovCiAgICAgICAgLmxlYWQtY2FwdHVyZSB7CiAgICAgICAgICAgIG1heC13aWR0aDogNDUwcHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCByZ2JhKDI4LCAzMSwgNzQsIDAuOCksIHJnYmEoMTMsIDI3LCA0MiwgMC45NSkpOwogICAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZDsKICAgICAgICAgICAgYm9yZGVyLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1jeWFuKSkgMTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjVweDsKICAgICAgICB9CiAgICAgICAgLmxlYWQtY2FwdHVyZSBoMyB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IDEuNHJlbTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWdvbGQpOwogICAgICAgIH0KICAgICAgICAubGVhZC1jYXB0dXJlIHAgewogICAgICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKICAgICAgICAgICAgY29sb3I6IHJnYmEoMjQ4LCAyNDQsIDIzNiwgMC43KTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgICB9CiAgICAgICAgLmZvcm0tZ3JvdXAgeyBtYXJnaW4tYm90dG9tOiAxOHB4OyB9CiAgICAgICAgLmZvcm0tZ3JvdXAgbGFiZWwgewogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtOwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMS41cHg7CiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0OCwgMjQ0LCAyMzYsIDAuNik7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICB9CiAgICAgICAgLmZvcm0tZ3JvdXAgaW5wdXQgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogMTRweCAxOHB4OwogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4zKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0taXZvcnkpOwogICAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQogICAgICAgIC5mb3JtLWdyb3VwIGlucHV0OmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jeWFuKTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSg2LCAxODIsIDIxMiwgMC4yKTsKICAgICAgICB9CiAgICAgICAgLmxlYWQtYnRuIHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMzBweDsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZSksIHZhcigtLWN5YW4pKTsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4zKTsKICAgICAgICB9CiAgICAgICAgLmxlYWQtYnRuOmhvdmVyIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDE1cHggNDBweCByZ2JhKDEzOSwgOTIsIDI0NiwgMC41KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJhY2stdG8tdG9wIHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMzBweDsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDgsIDI0NCwgMjM2LCAwLjYpOwogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzOwogICAgICAgIH0KICAgICAgICAuYmFjay10by10b3A6aG92ZXIgeyBjb2xvcjogdmFyKC0tZ29sZCk7IH0KICAgICAgICAKICAgICAgICAvKiA9PT09PT09PT09IFNFUklPVVMgU0VDVElPTiAoUHJpY2luZykgPT09PT09PT09PSAqLwogICAgICAgIC5zZXJpb3VzLXNlY3Rpb24gewogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgICBwYWRkaW5nOiA4MHB4IDIwcHg7CiAgICAgICAgfQogICAgICAgIC5zZXJpb3VzLXNlY3Rpb24uYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH0KICAgICAgICAKICAgICAgICAucHJpY2luZy1jb250YWluZXIgeyBtYXgtd2lkdGg6IDk1MHB4OyBtYXJnaW46IDAgYXV0bzsgfQogICAgICAgIC5wcmljaW5nLWhlYWRlciB7IHRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLWJvdHRvbTogNDBweDsgfQogICAgICAgIC5wcmljaW5nLWhlYWRlciBoMiB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuOHJlbSwgNHZ3LCAyLjVyZW0pOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICAgIH0KICAgICAgICAucHJpY2luZy1oZWFkZXIgaDIgLmhpZ2hsaWdodCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWdvbGQpLCB2YXIoLS1jeWFuKSk7CiAgICAgICAgICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OwogICAgICAgICAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIENVUlJFTkNZIFRPR0dMRSAqLwogICAgICAgIC5jdXJyZW5jeS10b2dnbGVzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsKICAgICAgICB9CiAgICAgICAgLmN1cnJlbmN5LXRvZ2dsZSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgcGFkZGluZzogMTBweCAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgOTIsIDI0NiwgMC4yKTsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcHVycGxlKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjVweDsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWl2b3J5KTsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjg1cmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQogICAgICAgIC5jdXJyZW5jeS10b2dnbGU6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgOTIsIDI0NiwgMC40KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgICAgICB9CiAgICAgICAgLmN1cnJlbmN5LXRvZ2dsZS5hY3RpdmUgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1nb2xkKSwgdmFyKC0tZGVlcGdvbGQpKTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1nb2xkKTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLW5hdnkpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucHJpY2luZy1ncmlkIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTsgZ2FwOiAyMHB4OyB9CiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDgwMHB4KSB7IC5wcmljaW5nLWdyaWQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgbWF4LXdpZHRoOiAzNTBweDsgbWFyZ2luOiAwIGF1dG87IH0gfQogICAgICAgIAogICAgICAgIC5wcmljaW5nLWNhcmQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCByZ2JhKDI4LCAzMSwgNzQsIDAuNyksIHJnYmEoMTMsIDI3LCA0MiwgMC45NSkpOwogICAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICAgICAgYm9yZGVyLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1jeWFuKSkgMTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjVweDsKICAgICAgICAgICAgcGFkZGluZzogMzBweCAyMHB4OwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2U7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CiAgICAgICAgLnByaWNpbmctY2FyZDpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCkgc2NhbGUoMS4wMik7CiAgICAgICAgICAgIGJvcmRlci1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tY3lhbiksIHZhcigtLWdvbGQpLCB2YXIoLS1wdXJwbGUpKSAxOwogICAgICAgIH0KICAgICAgICAucHJpY2luZy1jYXJkLmZlYXR1cmVkIHsKICAgICAgICAgICAgYm9yZGVyLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1nb2xkKSwgdmFyKC0tY3lhbiksIHZhcigtLWdvbGQpKSAxOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCByZ2JhKDYsIDE4MiwgMjEyLCAwLjIpLCByZ2JhKDEzLCAyNywgNDIsIDAuOTgpKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgICAgICB9CiAgICAgICAgLnByaWNpbmctY2FyZC5mZWF0dXJlZDpob3ZlciB7IHRyYW5zZm9ybTogc2NhbGUoMS4wOCkgdHJhbnNsYXRlWSgtMTBweCk7IH0KICAgICAgICAKICAgICAgICAucHJpY2luZy1pY29uIHsKICAgICAgICAgICAgZm9udC1zaXplOiAyLjhyZW07CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgICAgIGFuaW1hdGlvbjogaWNvbkZsb2F0IDNzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgIH0KICAgICAgICBAa2V5ZnJhbWVzIGljb25GbG9hdCB7CiAgICAgICAgICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9CiAgICAgICAgICAgIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7IH0KICAgICAgICB9CiAgICAgICAgLnByaWNpbmctbmFtZSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IDEuMnJlbTsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWN5YW4pOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgfQogICAgICAgIC5wcmljaW5nLWZvciB7IGZvbnQtc2l6ZTogMC43NXJlbTsgY29sb3I6IHJnYmEoMjQ4LCAyNDQsIDIzNiwgMC41KTsgbWFyZ2luLWJvdHRvbTogMTJweDsgfQogICAgICAgIC5wcmljaW5nLXByaWNlIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdQbGF5ZmFpciBEaXNwbGF5Jywgc2VyaWY7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi44cmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1pdm9yeSksIHZhcigtLWdvbGQpKTsKICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICB9CiAgICAgICAgLnByaWNpbmctcHJpY2UgLmN1cnJlbmN5LXN5bWJvbCB7IGZvbnQtc2l6ZTogMS4zcmVtOyB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7IH0KICAgICAgICAucHJpY2luZy1wcmljZS51Z3ggeyBmb250LXNpemU6IDEuOHJlbTsgfQogICAgICAgIC5wcmljaW5nLXByaWNlLnVneCAuY3VycmVuY3ktc3ltYm9sIHsgZm9udC1zaXplOiAwLjlyZW07IH0KICAgICAgICAucHJpY2luZy1mZWF0dXJlcyB7IGxpc3Qtc3R5bGU6IG5vbmU7IHRleHQtYWxpZ246IGxlZnQ7IG1hcmdpbi1ib3R0b206IDIwcHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgfQogICAgICAgIC5wcmljaW5nLWZlYXR1cmVzIGxpIHsKICAgICAgICAgICAgcGFkZGluZzogNnB4IDA7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgxMzksIDkyLCAyNDYsIDAuMSk7CiAgICAgICAgfQogICAgICAgIC5wcmljaW5nLWZlYXR1cmVzIGxpOmxhc3QtY2hpbGQgeyBib3JkZXItYm90dG9tOiBub25lOyB9CiAgICAgICAgLnByaWNpbmctZmVhdHVyZXMgLmNoZWNrIHsgY29sb3I6IHZhcigtLWdyZWVuKTsgZm9udC1zaXplOiAxcmVtOyB9CiAgICAgICAgCiAgICAgICAgLnByaWNpbmctYnRuIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxNHB4IDIwcHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMzBweDsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZSksIHZhcigtLWN5YW4pKTsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4zKTsKICAgICAgICB9CiAgICAgICAgLnByaWNpbmctYnRuOmhvdmVyIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDE1cHggMzVweCByZ2JhKDEzOSwgOTIsIDI0NiwgMC41KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogUEFZTUVOVCBTRUNUSU9OICovCiAgICAgICAgLnBheW1lbnQtc2VjdGlvbiB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDYwcHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDUwcHggMjBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjEpLCB0cmFuc3BhcmVudCk7CiAgICAgICAgfQogICAgICAgIC5wYXltZW50LWJveCB7CiAgICAgICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgICAgICBwYWRkaW5nOiA2cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZSksIHZhcigtLWdvbGQpLCB2YXIoLS1jeWFuKSk7CiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAyMDAlOwogICAgICAgICAgICBhbmltYXRpb246IGJvcmRlckdsb3cgNHMgZWFzZSBpbmZpbml0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMzBweDsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyBib3JkZXJHbG93IHsKICAgICAgICAgICAgMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7IH0KICAgICAgICAgICAgNTAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSA1MCU7IH0KICAgICAgICAgICAgMTAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAlIDUwJTsgfQogICAgICAgIH0KICAgICAgICAucGF5bWVudC1ib3gtaW5uZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4xNSksIHJnYmEoMTMsIDI3LCA0MiwgMC45OCkpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyNXB4OwogICAgICAgICAgICBwYWRkaW5nOiA0NXB4IDM1cHg7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgLnBheW1lbnQtYm94IGgzIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdQbGF5ZmFpciBEaXNwbGF5Jywgc2VyaWY7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS40cmVtOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgICAgICBjb2xvcjogdmFyKC0tZ29sZCk7CiAgICAgICAgfQogICAgICAgIC5wYXltZW50LW51bWJlciB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmOwogICAgICAgICAgICBmb250LXNpemU6IDIuNXJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWl2b3J5KTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogM3B4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHggMzBweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZDsKICAgICAgICAgICAgYm9yZGVyLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1jeWFuKSkgMTsKICAgICAgICB9CiAgICAgICAgLnBheW1lbnQtbmFtZSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tY3lhbik7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgfQogICAgICAgIC5wYXltZW50LXN0ZXBzIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgICAgICAgICBwYWRkaW5nOiAyNXB4OwogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDEzOSwgOTIsIDI0NiwgMC4yKTsKICAgICAgICB9CiAgICAgICAgLnBheW1lbnQtc3RlcHMgaDQgewogICAgICAgICAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1nb2xkKTsKICAgICAgICB9CiAgICAgICAgLnBheW1lbnQtc3RlcHMgb2wgeyBtYXJnaW4tbGVmdDogMjBweDsgZm9udC1zaXplOiAwLjlyZW07IGNvbG9yOiByZ2JhKDI0OCwgMjQ0LCAyMzYsIDAuOSk7IH0KICAgICAgICAucGF5bWVudC1zdGVwcyBsaSB7IG1hcmdpbi1ib3R0b206IDEycHg7IH0KICAgICAgICAucGF5bWVudC1zdGVwcyBzdHJvbmcgeyBjb2xvcjogdmFyKC0tY3lhbik7IH0KICAgICAgICAKICAgICAgICAvKiBPUkRFUiBGT1JNICovCiAgICAgICAgLm9yZGVyLXNlY3Rpb24geyBwYWRkaW5nOiA1MHB4IDIwcHg7IH0KICAgICAgICAub3JkZXItYm94IHsKICAgICAgICAgICAgbWF4LXdpZHRoOiA1MDBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgdmFyKC0tY3lhbiksIHZhcigtLXB1cnBsZSkpOwogICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgMjAwJTsKICAgICAgICAgICAgYW5pbWF0aW9uOiBib3JkZXJHbG93IDVzIGVhc2UgaW5maW5pdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7CiAgICAgICAgfQogICAgICAgIC5vcmRlci1ib3gtaW5uZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCByZ2JhKDI4LCAzMSwgNzQsIDAuOCksIHJnYmEoMTMsIDI3LCA0MiwgMC45OCkpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyNnB4OwogICAgICAgICAgICBwYWRkaW5nOiA0MHB4IDMwcHg7CiAgICAgICAgfQogICAgICAgIC5vcmRlci1ib3ggaDMgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjRyZW07CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZ29sZCksIHZhcigtLWN5YW4pKTsKICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICB9CiAgICAgICAgLmZvcm0tcm93IHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDE1cHg7IH0KICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNTAwcHgpIHsgLmZvcm0tcm93IHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0gfQogICAgICAgIC5mb3JtLWdyb3VwIHNlbGVjdCB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxNHB4IDE4cHg7CiAgICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjMpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1pdm9yeSk7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBhcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTInIGhlaWdodD0nMTInIHZpZXdCb3g9JzAgMCAxMiAxMiclM0UlM0NwYXRoIGZpbGw9JyUyMzA2YjZkNCcgZD0nTTYgOEwxIDNoMTB6Jy8lM0UlM0Mvc3ZnJTNFIik7CiAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IDE1cHggY2VudGVyOwogICAgICAgIH0KICAgICAgICAuZm9ybS1ncm91cCBzZWxlY3Q6Zm9jdXMgewogICAgICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWN5YW4pOwogICAgICAgIH0KICAgICAgICAuc3VibWl0LWJ0biB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxOHB4OwogICAgICAgICAgICBmb250LXNpemU6IDEuMXJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMzVweDsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWdvbGQpLCB2YXIoLS1kZWVwZ29sZCkpOwogICAgICAgICAgICBjb2xvcjogdmFyKC0tbmF2eSk7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTVweCA0MHB4IHJnYmEoMjEyLCAxNzUsIDU1LCAwLjMpOwogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMnB4OwogICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIH0KICAgICAgICAuc3VibWl0LWJ0bjpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KSBzY2FsZSgxLjAyKTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAyMHB4IDUwcHggcmdiYSgyMTIsIDE3NSwgNTUsIDAuNSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEZPT1RFUiAqLwogICAgICAgIC5mb290ZXIgewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHggMjBweDsKICAgICAgICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHJnYmEoMTM5LCA5MiwgMjQ2LCAwLjIpOwogICAgICAgIH0KICAgICAgICAuZm9vdGVyLWJyYW5kIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdQbGF5ZmFpciBEaXNwbGF5Jywgc2VyaWY7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1nb2xkKSwgdmFyKC0tY3lhbikpOwogICAgICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIH0KICAgICAgICAuZm9vdGVyIHAgeyBmb250LXNpemU6IDAuOHJlbTsgY29sb3I6IHJnYmEoMjQ4LCAyNDQsIDIzNiwgMC41KTsgfQogICAgICAgIC5mb290ZXItbGlua3MgewogICAgICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAyMHB4OwogICAgICAgIH0KICAgICAgICAuZm9vdGVyLWxpbmtzIGEgewogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDgsIDI0NCwgMjM2LCAwLjYpOwogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzOwogICAgICAgIH0KICAgICAgICAuZm9vdGVyLWxpbmtzIGE6aG92ZXIgeyBjb2xvcjogdmFyKC0tZ29sZCk7IH0KICAgICAgICAKICAgICAgICAvKiBSRVNQT05TSVZFICovCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7CiAgICAgICAgICAgIC5wYXRoLWJ0biB7IHdpZHRoOiAxMDAlOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgcGFkZGluZzogMThweCAzMHB4OyB9CiAgICAgICAgICAgIC5pbnRyby1uYW1lIHsgZm9udC1zaXplOiAycmVtOyB9CiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImJnLW1hc3RlciI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJvcmIgb3JiLTEiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ib3JiIG9yYi0yIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im9yYiBvcmItMyI+PC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InBhZ2UtY29udGFpbmVyIj4KICAgICAgICA8IS0tID09PT09PT09PT0gRlJPTlQgRE9PUiA9PT09PT09PT09IC0tPgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmcm9udC1kb29yIiBpZD0iaG9tZSI+CiAgICAgICAgICAgIDwhLS0gUVIgQVJST1dTIEFUIFRPUCAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icXItdG9wLXNlY3Rpb24iPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9InFyLXRvcC1sYWJlbCI+8J+RhiBTY2FuIFFSIENvZGUgQWJvdmUg8J+RhjwvcD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InFyLXRvcC1hcnJvd3MiPuKshu+4jyDirIbvuI8g4qyG77iPIOKshu+4jyDirIbvuI88L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJicmFuZC1iYWRnZSI+CiAgICAgICAgICAgICAgICA8c3Bhbj7wn6SdPC9zcGFuPiBCcmFuZEhhbmRzaGFrZSBBbWJhc3NhZG9yCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXZhdGFyLXNob3djYXNlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF2YXRhci1nbG93Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF2YXRhci1jaXJjbGUiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdmF0YXItaWNvbiI+8J+Suzwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxoMSBjbGFzcz0iaW50cm8tbmFtZSI+VGVuZG8gVGFsaXE8L2gxPgogICAgICAgICAgICA8cCBjbGFzcz0iaW50cm8tY29tcGFueSI+8J+agCBEeW5hbWljIFBhcmFkaWdtcyBJTzwvcD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxwIGNsYXNzPSJpbnRyby10YWdsaW5lIj4KICAgICAgICAgICAgICAgICJCdWlsZGluZyBhcHBsaWNhdGlvbnMgdGhhdCBzb2x2ZSBwcm9ibGVtcywgZW5oYW5jZSBleHBlcmllbmNlcywgYW5kIGJyaW5nIGlkZWFzIHRvIGxpZmUgdGhyb3VnaCBjbGVhbiwgZWZmaWNpZW50IGNvZGUuIgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJpbnRyby1zdWJ0ZXh0Ij4KICAgICAgICAgICAgICAgIEFwcCBEZXZlbG9wZXIg4oCiIFRlY2ggSW5ub3ZhdG9yIOKAoiBBSSBHZW5pdXMgUGlvbmVlcgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXRoLWJ1dHRvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icGF0aC1idG4gY3VyaW91cyIgb25jbGljaz0ic2hvd0N1cmlvdXMoKSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJ0bi1pY29uIj7wn6SUPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIEknbSBDdXJpb3VzIOKAlCBUZWxsIE1lIE1vcmUKICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icGF0aC1idG4gc2VyaW91cyIgb25jbGljaz0ic2hvd1NlcmlvdXMoKSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJ0bi1pY29uIj7wn5SlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIEknbSBSZWFkeSDigJQgU2hvdyBNZSBQcmljaW5nCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8IS0tIEFDVElPTiBCVVRUT05TOiBTYXZlLCBTaGFyZSwgRG93bmxvYWQsIFJld2FyZHMgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbi1idXR0b25zIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4iIG9uY2xpY2s9ImRvd25sb2FkVkNhcmQoKSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGlvbi1pY29uIj7wn5OlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpb24tbGFiZWwiPlNhdmUgQ29udGFjdDwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ0biIgb25jbGljaz0ic2hhcmVDYXJkKCkiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpb24taWNvbiI+8J+TpDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYWN0aW9uLWxhYmVsIj5TaGFyZSBDYXJkPC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBvbmNsaWNrPSJhZGRUb0hvbWVTY3JlZW4oKSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGlvbi1pY29uIj7wn5K+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpb24tbGFiZWwiPlNhdmUgQ2FyZDwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9icmFuZGhhbmRzaGFrZS5jb20vcmVmZXJyYWwtcmV3YXJkcyIgY2xhc3M9ImFjdGlvbi1idG4gcmV3YXJkcyI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGlvbi1pY29uIj7wn46BPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpb24tbGFiZWwiPlJld2FyZHM8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPCEtLSBTaGFyZSBNb2RhbCAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhcmUtbW9kYWwiIGlkPSJzaGFyZU1vZGFsIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYXJlLW1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im1vZGFsLWNsb3NlIiBvbmNsaWNrPSJjbG9zZVNoYXJlTW9kYWwoKSI+4pyVPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGgzPvCfk6QgU2hhcmUgVGhpcyBDYXJkPC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFyZS1vcHRpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93YS5tZS8/dGV4dD1DaGVjayUyMG91dCUyMHRoaXMlMjBkaWdpdGFsJTIwYnVzaW5lc3MlMjBjYXJkJTNBJTIwaHR0cHMlM0ElMkYlMkZhaWdlbml1cy5icmFuZGhhbmRzaGFrZS5jb20iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0ic2hhcmUtb3B0aW9uIHdoYXRzYXBwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPvCfkqw8L3NwYW4+IFdoYXRzQXBwCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3NoYXJlci9zaGFyZXIucGhwP3U9aHR0cHM6Ly9haWdlbml1cy5icmFuZGhhbmRzaGFrZS5jb20iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0ic2hhcmUtb3B0aW9uIGZhY2Vib29rIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPvCfk5g8L3NwYW4+IEZhY2Vib29rCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQ/dXJsPWh0dHBzOi8vYWlnZW5pdXMuYnJhbmRoYW5kc2hha2UuY29tJnRleHQ9Q2hlY2slMjBvdXQlMjB0aGlzJTIwZGlnaXRhbCUyMGJ1c2luZXNzJTIwY2FyZCEiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0ic2hhcmUtb3B0aW9uIHR3aXR0ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+8J+Qpjwvc3Bhbj4gVHdpdHRlci9YCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3NoYXJpbmcvc2hhcmUtb2Zmc2l0ZS8/dXJsPWh0dHBzOi8vYWlnZW5pdXMuYnJhbmRoYW5kc2hha2UuY29tIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InNoYXJlLW9wdGlvbiBsaW5rZWRpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7wn5K8PC9zcGFuPiBMaW5rZWRJbgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iY29weUxpbmsoKSIgY2xhc3M9InNoYXJlLW9wdGlvbiBjb3B5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPvCflJc8L3NwYW4+IENvcHkgTGluawogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3B5LWZlZWRiYWNrIiBpZD0iY29weUZlZWRiYWNrIj7inIUgTGluayBDb3BpZWQhPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8IS0tIFNhdmUgdG8gSG9tZSBTY3JlZW4gTW9kYWwgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNhdmUtbW9kYWwiIGlkPSJzYXZlTW9kYWwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2F2ZS1tb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtb2RhbC1jbG9zZSIgb25jbGljaz0iY2xvc2VTYXZlTW9kYWwoKSI+4pyVPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGgzPvCfkr4gU2F2ZSBDYXJkIHRvIEhvbWUgU2NyZWVuPC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzYXZlLWluc3RydWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imluc3RydWN0aW9uLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND7wn5OxIGlQaG9uZS9pUGFkIChTYWZhcmkpOjwvaDQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlRhcCB0aGUgPHN0cm9uZz5TaGFyZTwvc3Ryb25nPiBidXR0b24gKHNxdWFyZSB3aXRoIGFycm93KTwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlNjcm9sbCBkb3duIGFuZCB0YXAgPHN0cm9uZz4iQWRkIHRvIEhvbWUgU2NyZWVuIjwvc3Ryb25nPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlRhcCA8c3Ryb25nPiJBZGQiPC9zdHJvbmc+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb2w+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnN0cnVjdGlvbi1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+8J+kliBBbmRyb2lkIChDaHJvbWUpOjwvaDQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlRhcCB0aGUgPHN0cm9uZz7ii64gbWVudTwvc3Ryb25nPiAoMyBkb3RzKTwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlRhcCA8c3Ryb25nPiJBZGQgdG8gSG9tZSBTY3JlZW4iPC9zdHJvbmc+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+VGFwIDxzdHJvbmc+IkFkZCI8L3N0cm9uZz48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAKICAgICAgICA8IS0tID09PT09PT09PT0gQ1VSSU9VUyBTRUNUSU9OID09PT09PT09PT0gLS0+CiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImN1cmlvdXMtc2VjdGlvbiIgaWQ9ImN1cmlvdXMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjdXJpb3VzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjdXJpb3VzLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPldoYXQgSXMgQSA8c3BhbiBjbGFzcz0iaGlnaGxpZ2h0Ij5EaWdpdGFsIEJ1c2luZXNzIENhcmQ/PC9zcGFuPjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPHA+WW91ciBwcm9mZXNzaW9uYWwgaWRlbnRpdHksIGFsd2F5cyBpbiB5b3VyIHBvY2tldC4gT25lIHNjYW4sIGluc3RhbnQgY29ubmVjdGlvbi4gTm8gcGFwZXIuIE5vIHdhc3RlLiBKdXN0IGltcGFjdC48L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtZ3JpZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLWljb24iPvCfk7E8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtdGl0bGUiPkFsd2F5cyBXaXRoIFlvdTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1kZXNjIj5TaGFyZSB2aWEgUVIgY29kZSwgbGluaywgb3IgTkZDLiBOZXZlciBydW4gb3V0IG9mIGNhcmRzIGFnYWluLjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1pY29uIj7inKg8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtdGl0bGUiPlN0YW5kIE91dDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1kZXNjIj5Qcm9mZXNzaW9uYWwsIGFuaW1hdGVkLCBtZW1vcmFibGUuIEZpcnN0IGltcHJlc3Npb25zIHRoYXQgbGFzdC48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtaWNvbiI+8J+UhDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS10aXRsZSI+QWx3YXlzIFVwZGF0ZWQ8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtZGVzYyI+Q2hhbmdlIGpvYnM/IE5ldyBudW1iZXI/IFVwZGF0ZSBpbnN0YW50bHkuIE9sZCBjYXJkcyBzdGF5IGN1cnJlbnQuPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLWljb24iPvCfkrA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtdGl0bGUiPlNhdmUgTW9uZXk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtZGVzYyI+T25lLXRpbWUgaW52ZXN0bWVudC4gTm8gbW9yZSByZXByaW50aW5nLiBFY28tZnJpZW5kbHkgdG9vLjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlYWQtY2FwdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgPGgzPvCfjoEgV2FudCBNb3JlIEluZm8gRmlyc3Q/PC9oMz4KICAgICAgICAgICAgICAgICAgICA8cD5Ecm9wIHlvdXIgZGV0YWlscyBhbmQgSSdsbCBzZW5kIHlvdSBhIGZyZWUgZ3VpZGUgb24gZGlnaXRhbCBidXNpbmVzcyBjYXJkcyArIGV4Y2x1c2l2ZSBlYXJseS1iaXJkIG9mZmVycy48L3A+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJodHRwczovL2Zvcm1zdWJtaXQuY28vc2hvcGxvY2FsYnVzaW5lc3NhZ2VuY3lAZ21haWwuY29tIiBtZXRob2Q9IlBPU1QiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJfc3ViamVjdCIgdmFsdWU9IvCfpJQgQ1VSSU9VUyBMZWFkIGZyb20gQUkgR2VuaXVzIC0gVGVuZG8iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJfdGVtcGxhdGUiIHZhbHVlPSJ0YWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Il9jYXB0Y2hhIiB2YWx1ZT0iZmFsc2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMZWFkIFR5cGUiIHZhbHVlPSJDdXJpb3VzIC0gV2FudHMgTW9yZSBJbmZvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQW1iYXNzYWRvciIgdmFsdWU9IlRlbmRvIFRhbGlxIC0gQUkgR2VuaXVzIj4KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0VDVVJJVFk6IEhvbmV5cG90IGZvciBib3QgZGV0ZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi05OTk5cHg7b3BhY2l0eTowO2hlaWdodDowO292ZXJmbG93OmhpZGRlbjsiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJfaG9uZXlwb3QiIHRhYmluZGV4PSItMSIgYXV0b2NvbXBsZXRlPSJvZmYiPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPllvdXIgTmFtZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9IldoYXQgc2hvdWxkIEkgY2FsbCB5b3U/Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkVtYWlsIG9yIFdoYXRzQXBwPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDb250YWN0IiByZXF1aXJlZCBwbGFjZWhvbGRlcj0iSG93IGNhbiBJIHJlYWNoIHlvdT8iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJsZWFkLWJ0biI+U2VuZCBNZSBUaGUgSW5mbyDwn5OpPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNob21lIiBjbGFzcz0iYmFjay10by10b3AiIG9uY2xpY2s9ImhpZGVBbGwoKSI+4oaQIEJhY2sgdG8gbWFpbjwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9zZWN0aW9uPgogICAgICAgIAogICAgICAgIDwhLS0gPT09PT09PT09PSBTRVJJT1VTIFNFQ1RJT04gKFByaWNpbmcgKyBPcmRlcikgPT09PT09PT09PSAtLT4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0ic2VyaW91cy1zZWN0aW9uIiBpZD0ic2VyaW91cyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+Q2hvb3NlIFlvdXIgPHNwYW4gY2xhc3M9ImhpZ2hsaWdodCI+Q2FyZCBQYWNrYWdlPC9zcGFuPjwvaDI+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3VycmVuY3ktdG9nZ2xlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN1cnJlbmN5LXRvZ2dsZSBhY3RpdmUiIGlkPSJ1c2RUb2dnbGUiIG9uY2xpY2s9InNob3dVU0QoKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7wn4e68J+HuDwvc3Bhbj4gVVNECiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdXJyZW5jeS10b2dnbGUiIGlkPSJ1Z3hUb2dnbGUiIG9uY2xpY2s9InNob3dVR1goKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7wn4e68J+HrDwvc3Bhbj4gVUdYCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctZ3JpZCI+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBTVEFSVEVSIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctaWNvbiI+8J+OrzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLW5hbWUiPlN0YXJ0ZXI8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1mb3IiPlBlcmZlY3QgZm9yIFN0dWRlbnRzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctcHJpY2UgdXNkIiBkYXRhLXVzZD0iMTAiIGRhdGEtdWd4PSIzNywwMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cnJlbmN5LXN5bWJvbCI+JDwvc3Bhbj4xMAogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJwcmljaW5nLWZlYXR1cmVzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gUHJvZmVzc2lvbmFsIERpZ2l0YWwgQ2FyZDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IENvbnRhY3QgSW5mbyAmIFBob3RvPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gMyBTb2NpYWwgTWVkaWEgTGlua3M8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBRUiBDb2RlPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gNDhociBEZWxpdmVyeTwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InByaWNpbmctYnRuIiBvbmNsaWNrPSJzZWxlY3RQbGFuKCdTdGFydGVyJywgMTApIj5HZXQgU3RhcnRlZDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDwhLS0gUFJPRkVTU0lPTkFMIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctY2FyZCBmZWF0dXJlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctaWNvbiI+4q2QPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctbmFtZSI+UHJvZmVzc2lvbmFsPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctZm9yIj5Nb3N0IFBvcHVsYXI8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1wcmljZSB1c2QiIGRhdGEtdXNkPSIyNSIgZGF0YS11Z3g9IjkyLDUwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVuY3ktc3ltYm9sIj4kPC9zcGFuPjI1CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InByaWNpbmctZmVhdHVyZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBFdmVyeXRoaW5nIGluIFN0YXJ0ZXI8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBDdXN0b20gQ29sb3JzPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gNiBTb2NpYWwgTWVkaWEgTGlua3M8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBTZXJ2aWNlcyBTZWN0aW9uPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gQm9va2luZyBDYWxlbmRhcjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IFByaW9yaXR5IFN1cHBvcnQ8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwcmljaW5nLWJ0biIgb25jbGljaz0ic2VsZWN0UGxhbignUHJvZmVzc2lvbmFsJywgMjUpIj5HZXQgUHJvZmVzc2lvbmFsPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPCEtLSBFWEVDVVRJVkUgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2luZy1pY29uIj7wn5GRPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctbmFtZSI+RXhlY3V0aXZlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNpbmctZm9yIj5Gb3IgTGVhZGVyczwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLXByaWNlIHVzZCIgZGF0YS11c2Q9IjUwIiBkYXRhLXVneD0iMTg1LDAwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVuY3ktc3ltYm9sIj4kPC9zcGFuPjUwCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InByaWNpbmctZmVhdHVyZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBFdmVyeXRoaW5nIGluIFByb2Zlc3Npb25hbDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gY2xhc3M9ImNoZWNrIj7inJM8L3NwYW4+IFZpZGVvIEVtYmVkPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gTGVhZCBDYXB0dXJlIEZvcm08L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBBbmFseXRpY3MgRGFzaGJvYXJkPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3BhbiBjbGFzcz0iY2hlY2siPuKckzwvc3Bhbj4gQ3VzdG9tIERvbWFpbiBPcHRpb248L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJjaGVjayI+4pyTPC9zcGFuPiBWSVAgU3VwcG9ydDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InByaWNpbmctYnRuIiBvbmNsaWNrPSJzZWxlY3RQbGFuKCdFeGVjdXRpdmUnLCA1MCkiPkdvIEV4ZWN1dGl2ZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPCEtLSBQQVlNRU5UIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXltZW50LXNlY3Rpb24iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGF5bWVudC1ib3giPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBheW1lbnQtYm94LWlubmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPvCfk7EgUGF5IHZpYSBNb2JpbGUgTW9uZXk8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXltZW50LW51bWJlciI+MDcwNSA5NTUgNjA4PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJwYXltZW50LW5hbWUiPlRlbmRvIFRhbGlxPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGF5bWVudC1zdGVwcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+8J+TiyBIb3cgVG8gUGF5OjwvaDQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPk9wZW4geW91ciA8c3Ryb25nPk1UTiBNb01vPC9zdHJvbmc+IG9yIDxzdHJvbmc+QWlydGVsIE1vbmV5PC9zdHJvbmc+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+U2VsZWN0IDxzdHJvbmc+IlNlbmQgTW9uZXkiPC9zdHJvbmc+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+RW50ZXIgbnVtYmVyOiA8c3Ryb25nPjA3MDUgOTU1IDYwODwvc3Ryb25nPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPkVudGVyIHRoZSBhbW91bnQgZm9yIHlvdXIgY2hvc2VuIHBhY2thZ2U8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5GaWxsIG91dCB0aGUgb3JkZXIgZm9ybSBiZWxvdzwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPldlJ2xsIGNvbnRhY3QgeW91IHdpdGhpbiA8c3Ryb25nPjI0IGhvdXJzPC9zdHJvbmc+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb2w+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPCEtLSBPUkRFUiBGT1JNIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcmRlci1zZWN0aW9uIiBpZD0ib3JkZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3JkZXItYm94Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcmRlci1ib3gtaW5uZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+8J+TnSBPcmRlciBZb3VyIENhcmQ8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249Imh0dHBzOi8vZm9ybXN1Ym1pdC5jby9zaG9wbG9jYWxidXNpbmVzc2FnZW5jeUBnbWFpbC5jb20iIG1ldGhvZD0iUE9TVCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJfc3ViamVjdCIgdmFsdWU9IvCflKUgU0VSSU9VUyBPcmRlciBmcm9tIEFJIEdlbml1cyAtIFRlbmRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Il90ZW1wbGF0ZSIgdmFsdWU9InRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Il9jYXB0Y2hhIiB2YWx1ZT0iZmFsc2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iX25leHQiIHZhbHVlPSJodHRwczovL2JyYW5kaGFuZHNoYWtlLmNvbS9kZXNpZ24tbmV4dHN0ZXBzP3JlZj1haWdlbml1cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMZWFkIFR5cGUiIHZhbHVlPSJTZXJpb3VzIC0gUmVhZHkgdG8gT3JkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQW1iYXNzYWRvciIgdmFsdWU9IlRlbmRvIFRhbGlxIC0gQUkgR2VuaXVzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTRUNVUklUWTogSG9uZXlwb3QgZm9yIGJvdCBkZXRlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi05OTk5cHg7b3BhY2l0eTowO2hlaWdodDowO292ZXJmbG93OmhpZGRlbjsiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iX2hvbmV5cG90IiB0YWJpbmRleD0iLTEiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+RnVsbCBOYW1lPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iRnVsbCBOYW1lIiByZXF1aXJlZCBwbGFjZWhvbGRlcj0iWW91ciBmdWxsIG5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tcm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkVtYWlsPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImVtYWlsIiBuYW1lPSJFbWFpbCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9InlvdXJAZW1haWwuY29tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlBob25lL1doYXRzQXBwPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRlbCIgbmFtZT0iUGhvbmUiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPSIrMjU2Li4uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+UGFja2FnZSBTZWxlY3RlZDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJQYWNrYWdlIiBpZD0icGFja2FnZVNlbGVjdCIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IHlvdXIgcGFja2FnZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJTdGFydGVyIC0gJDEwIj5TdGFydGVyIC0gJDEwIC8gVUdYIDM3LDAwMDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJQcm9mZXNzaW9uYWwgLSAkMjUiPlByb2Zlc3Npb25hbCAtICQyNSAvIFVHWCA5Miw1MDA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iRXhlY3V0aXZlIC0gJDUwIj5FeGVjdXRpdmUgLSAkNTAgLyBVR1ggMTg1LDAwMDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5Zb3VyIFByb2Zlc3Npb24vVGl0bGU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJQcm9mZXNzaW9uIiBwbGFjZWhvbGRlcj0iZS5nLiwgU29mdHdhcmUgRGV2ZWxvcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VHJhbnNhY3Rpb24gUmVmZXJlbmNlIChBZnRlciBQYXltZW50KTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlRyYW5zYWN0aW9uIFJlZiIgcGxhY2Vob2xkZXI9Ik1vTW8gY29uZmlybWF0aW9uIGNvZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0ic3VibWl0LWJ0biI+U3VibWl0IE9yZGVyIPCfmoA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOiAzMHB4OyI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjaG9tZSIgY2xhc3M9ImJhY2stdG8tdG9wIiBvbmNsaWNrPSJoaWRlQWxsKCkiPuKGkCBCYWNrIHRvIG1haW48L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAKICAgICAgICA8IS0tIEZPT1RFUiAtLT4KICAgICAgICA8Zm9vdGVyIGNsYXNzPSJmb290ZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXItYnJhbmQiPvCfpJ0gQnJhbmRIYW5kc2hha2U8L2Rpdj4KICAgICAgICAgICAgPHA+RGlnaXRhbCBCdXNpbmVzcyBDYXJkcyBmb3IgdGhlIE1vZGVybiBQcm9mZXNzaW9uYWw8L3A+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1saW5rcyI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2JyYW5kaGFuZHNoYWtlLmNvbSI+TWFpbiBTaXRlPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93YS5tZS8yNTY3MDg4NzU3MzgiPkNvbnRhY3QgVGVuZG88L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2xpbmtlZGluLmNvbS9pbi90ZW5kby10YWxpcSI+TGlua2VkSW48L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTVweDsiPsKpIDIwMjYgQUkgR2VuaXVzIHwgRHluYW1pYyBQYXJhZGlnbXMgSU88L3A+CiAgICAgICAgPC9mb290ZXI+CiAgICA8L2Rpdj4KICAgIAogICAgPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBzaG93Q3VyaW91cygpIHsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmN1cmlvdXMtc2VjdGlvbicpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VyaW91cy1zZWN0aW9uJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXJpb3VzJykuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIHNob3dTZXJpb3VzKCkgewogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VyaW91cy1zZWN0aW9uJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jdXJpb3VzLXNlY3Rpb24nKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlcmlvdXMnKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gaGlkZUFsbCgpIHsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmN1cmlvdXMtc2VjdGlvbicpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VyaW91cy1zZWN0aW9uJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEN1cnJlbmN5IHRvZ2dsZQogICAgICAgIGZ1bmN0aW9uIHNob3dVU0QoKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2RUb2dnbGUnKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VneFRvZ2dsZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucHJpY2luZy1wcmljZScpLmZvckVhY2goZWwgPT4gewogICAgICAgICAgICAgICAgY29uc3QgdXNkID0gZWwuZGF0YXNldC51c2Q7CiAgICAgICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImN1cnJlbmN5LXN5bWJvbCI+JDwvc3Bhbj4ke3VzZH1gOwogICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgndWd4Jyk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmdW5jdGlvbiBzaG93VUdYKCkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndWd4VG9nZ2xlJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2RUb2dnbGUnKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnByaWNpbmctcHJpY2UnKS5mb3JFYWNoKGVsID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHVneCA9IGVsLmRhdGFzZXQudWd4OwogICAgICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPSJjdXJyZW5jeS1zeW1ib2wiPlVHWDwvc3Bhbj4gJHt1Z3h9YDsKICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3VneCcpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gc2VsZWN0UGxhbihwbGFuLCBwcmljZSkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFja2FnZVNlbGVjdCcpLnZhbHVlID0gYCR7cGxhbn0gLSAkJHtwcmljZX1gOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3JkZXInKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gPT09PT09PT09PSBWQ0FSRCBET1dOTE9BRCA9PT09PT09PT09CiAgICAgICAgZnVuY3Rpb24gZG93bmxvYWRWQ2FyZCgpIHsKICAgICAgICAgICAgY29uc3QgdmNhcmQgPSBgQkVHSU46VkNBUkQKVkVSU0lPTjozLjAKRk46VGVuZG8gVGFsaXEKTjpUYWxpcTtUZW5kbzs7OwpPUkc6RHluYW1pYyBQYXJhZGlnbXMgSU8gfCBBSSBHZW5pdXMKVElUTEU6QXBwIERldmVsb3BlciAmIFRlY2ggSW5ub3ZhdG9yClRFTDtUWVBFPUNFTEw6KzI1NjcwODg3NTczOApFTUFJTDp0ZW5kb3RhbGlxNTVAZ21haWwuY29tClVSTDpodHRwczovL2FpZ2VuaXVzLmJyYW5kaGFuZHNoYWtlLmNvbQpVUkw7VFlQRT1MaW5rZWRJbjpodHRwczovL2xpbmtlZGluLmNvbS9pbi90ZW5kby10YWxpcS8KTk9URTpBcHAgRGV2ZWxvcGVyIFBpb25lZXIgfCBCcmFuZEhhbmRzaGFrZSBBbWJhc3NhZG9yCkVORDpWQ0FSRGA7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3ZjYXJkXSwgeyB0eXBlOiAndGV4dC92Y2FyZCcgfSk7CiAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICAgIGEuaHJlZiA9IHVybDsKICAgICAgICAgICAgYS5kb3dubG9hZCA9ICdUZW5kb19UYWxpcV9Db250YWN0LnZjZic7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7CiAgICAgICAgICAgIGEuY2xpY2soKTsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTsKICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyA9PT09PT09PT09IFNIQVJFIE1PREFMID09PT09PT09PT0KICAgICAgICBmdW5jdGlvbiBzaGFyZUNhcmQoKSB7CiAgICAgICAgICAgIC8vIENoZWNrIGlmIFdlYiBTaGFyZSBBUEkgaXMgYXZhaWxhYmxlIChtb2JpbGUpCiAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iuc2hhcmUpIHsKICAgICAgICAgICAgICAgIG5hdmlnYXRvci5zaGFyZSh7CiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdUZW5kbyBUYWxpcSAtIERpZ2l0YWwgQnVzaW5lc3MgQ2FyZCcsCiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ0NoZWNrIG91dCB0aGlzIHByb2Zlc3Npb25hbCBkaWdpdGFsIGJ1c2luZXNzIGNhcmQhJywKICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL2FpZ2VuaXVzLmJyYW5kaGFuZHNoYWtlLmNvbScKICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2hhcmUgZmFpbHMsIHNob3cgbW9kYWwKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hhcmVNb2RhbCcpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBEZXNrdG9wIC0gc2hvdyBtb2RhbAogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYXJlTW9kYWwnKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBmdW5jdGlvbiBjbG9zZVNoYXJlTW9kYWwoKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGFyZU1vZGFsJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIGNvcHlMaW5rKCkgewogICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgnaHR0cHM6Ly9haWdlbml1cy5icmFuZGhhbmRzaGFrZS5jb20nKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb3B5RmVlZGJhY2snKS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29weUZlZWRiYWNrJykuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpOwogICAgICAgICAgICAgICAgfSwgMjAwMCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyA9PT09PT09PT09IFNBVkUgVE8gSE9NRSBTQ1JFRU4gPT09PT09PT09PQogICAgICAgIGZ1bmN0aW9uIGFkZFRvSG9tZVNjcmVlbigpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhdmVNb2RhbCcpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmdW5jdGlvbiBjbG9zZVNhdmVNb2RhbCgpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhdmVNb2RhbCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBDbG9zZSBtb2RhbHMgb24gb3V0c2lkZSBjbGljawogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGFyZU1vZGFsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldCA9PT0gdGhpcykgY2xvc2VTaGFyZU1vZGFsKCk7CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhdmVNb2RhbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMpIGNsb3NlU2F2ZU1vZGFsKCk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgLy8gPT09PT09PT09PSBCUkFOREhBTkRTSEFLRSBTRUNVUklUWSBTVUlURSA9PT09PT09PT09CiAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAndXNlIHN0cmljdCc7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBDb25zb2xlIFdhcm5pbmcKICAgICAgICAgICAgY29uc29sZS5sb2coJyVj8J+bkSBTVE9QIScsICdjb2xvcjogcmVkOyBmb250LXNpemU6IDUwcHg7IGZvbnQtd2VpZ2h0OiBib2xkOycpOwogICAgICAgICAgICBjb25zb2xlLmxvZygnJWPimqDvuI8gVGhpcyBpcyBwcm90ZWN0ZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIE11a2FzYSBWZW50dXJlIFBhcnRuZXJzIExMQy4nLCAnY29sb3I6IG9yYW5nZTsgZm9udC1zaXplOiAxNnB4OycpOwogICAgICAgICAgICBjb25zb2xlLmxvZygnJWPwn5SQIFVuYXV0aG9yaXplZCBjb3B5aW5nIG9yIHJldmVyc2UgZW5naW5lZXJpbmcgaXMgcHJvaGliaXRlZC4nLCAnY29sb3I6IHllbGxvdzsgZm9udC1zaXplOiAxNHB4OycpOwogICAgICAgICAgICBjb25zb2xlLmxvZygnJWPCqSAyMDI2IEJyYW5kSGFuZHNoYWtlIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZCcsICdjb2xvcjogI0Q0QUYzNzsgZm9udC1zaXplOiAxMnB4OycpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gRGlzYWJsZSByaWdodC1jbGljayBvbiBpbWFnZXMKICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIERpc2FibGUgdmlldyBzb3VyY2Ugc2hvcnRjdXRzCiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5ICYmIChlLmtleSA9PT0gJ3UnIHx8IGUua2V5ID09PSAnVScgfHwgZS5rZXkgPT09ICdzJyB8fCBlLmtleSA9PT0gJ1MnKSkgewogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gU2Vzc2lvbiB0cmFja2luZwogICAgICAgICAgICBpZiAoIXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2JoX3Nlc3Npb25faWQnKSkgewogICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYmhfc2Vzc2lvbl9pZCcsICdCSC0nICsgRGF0ZS5ub3coKSArICctJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEZvcm0gdGltZXN0YW1wIGluamVjdGlvbiBmb3IgYm90IGRldGVjdGlvbgogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdmb3JtJykuZm9yRWFjaChmdW5jdGlvbihmb3JtKSB7CiAgICAgICAgICAgICAgICB2YXIgdHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgICAgICAgICAgICAgdHMudHlwZSA9ICdoaWRkZW4nOwogICAgICAgICAgICAgICAgdHMubmFtZSA9ICdfZm9ybV9sb2FkZWQnOwogICAgICAgICAgICAgICAgdHMudmFsdWUgPSBEYXRlLm5vdygpOwogICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZCh0cyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQW50aS1pZnJhbWUgZW1iZWRkaW5nIChvbmx5IGVuZm9yY2Ugb24gcHJvZHVjdGlvbiBkb21haW5zKQogICAgICAgICAgICBpZiAod2luZG93LnNlbGYgIT09IHdpbmRvdy50b3ApIHsKICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SG9zdCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTsKICAgICAgICAgICAgICAgIHZhciBpc1Byb2R1Y3Rpb24gPSBjdXJyZW50SG9zdC5pbmNsdWRlcygnYnJhbmRoYW5kc2hha2UuY29tJykgfHwgY3VycmVudEhvc3QuaW5jbHVkZXMoJ2hhbmRzaGFrZS5hZnJpY2EnKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGlzUHJvZHVjdGlvbikgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRIb3N0ID0gd2luZG93LnBhcmVudC5sb2NhdGlvbi5ob3N0bmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRIb3N0LmluY2x1ZGVzKCdicmFuZGhhbmRzaGFrZS5jb20nKSAmJiAhcGFyZW50SG9zdC5pbmNsdWRlcygnaGFuZHNoYWtlLmFmcmljYScpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICc8aDEgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NTBweDtjb2xvcjpyZWQ7Ij7imqDvuI8gVW5hdXRob3JpemVkIGVtYmVkZGluZyBkZXRlY3RlZC48L2gxPic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPGgxIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjUwcHg7Y29sb3I6cmVkOyI+4pqg77iPIFVuYXV0aG9yaXplZCBlbWJlZGRpbmcgZGV0ZWN0ZWQuPC9oMT4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pKCk7CiAgICAgICAgLy8gPT09PT09PT09PSBFTkQgU0VDVVJJVFkgPT09PT09PT09PQogICAgPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg==","embed":""}
š Scan QR Code Above š
ā¬ļø ā¬ļø ā¬ļø ā¬ļø ā¬ļø
š¤ BrandHandshake Ambassador
š»
Tendo Taliq
š Dynamic Paradigms IO
"Building applications that solve problems, enhance experiences, and bring ideas to life through clean, efficient code."
App Developer ⢠Tech Innovator ⢠AI Genius Pioneer
š¾ Save Card to Home Screen
š± iPhone/iPad (Safari):
- Tap the Share button (square with arrow)
- Scroll down and tap "Add to Home Screen"
- Tap "Add"
š¤ Android (Chrome):
- Tap the ā® menu (3 dots)
- Tap "Add to Home Screen"
- Tap "Add"
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
Tendo Taliq
š 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