ZGlmZiAtLWdpdCAiYS9kb2MvXDM1MFwyMTNcMjQ1XDM0NFwyNzZcMjM1XDM0N1wyMTZcMjU3XDM0NVwyNDJcMjAzXDM0NFwyNzVcMjc3XDM0N1wyMjRcMjUwXDM0NlwyMTFcMjEzXDM0NVwyMDZcMjE0LmRvY3giICJiL2RvYy9cMzUwXDIxM1wyNDVcMzQ0XDI3NlwyMzVcMzQ3XDIxNlwyNTdcMzQ1XDI0MlwyMDNcMzQ0XDI3NVwyNzdcMzQ3XDIyNFwyNTBcMzQ2XDIxMVwyMTNcMzQ1XDIwNlwyMTQuZG9jeCIKaW5kZXggOWU0ZGFlZi4uZTY5ZGUyOSAxMDA2NDQKLS0tICJhL2RvYy9cMzUwXDIxM1wyNDVcMzQ0XDI3NlwyMzVcMzQ3XDIxNlwyNTdcMzQ1XDI0MlwyMDNcMzQ0XDI3NVwyNzdcMzQ3XDIyNFwyNTBcMzQ2XDIxMVwyMTNcMzQ1XDIwNlwyMTQuZG9jeCIKKysrICJiL2RvYy9cMzUwXDIxM1wyNDVcMzQ0XDI3NlwyMzVcMzQ3XDIxNlwyNTdcMzQ1XDI0MlwyMDNcMzQ0XDI3NVwyNzdcMzQ3XDIyNFwyNTBcMzQ2XDIxMVwyMTNcMzQ1XDIwNlwyMTQuZG9jeCIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcmVhY3QtdWkvY29uZmlnL3JvdXRlcy50cyBiL3JlYWN0LXVpL2NvbmZpZy9yb3V0ZXMudHMKaW5kZXggOTJmNDViMy4uOTE5YWUzYiAxMDA2NDQKLS0tIGEvcmVhY3QtdWkvY29uZmlnL3JvdXRlcy50cworKysgYi9yZWFjdC11aS9jb25maWcvcm91dGVzLnRzCkBAIC03NSwxMCArNzUsNiBAQAogICB9LAogCiAgIHsKLSAgICBwYXRoOiAnL3RvcnJlbnQvY29tbWVudHMvOnRvcnJlbnRJZCcsCi0gICAgY29tcG9uZW50OiAnLi9Ub3JyZW50L0NvbW1lbnRzJywKLSAgfSwKLSAgewogICAgIG5hbWU6ICd0b29sJywKICAgICBwYXRoOiAnL3Rvb2wnLAogICAgIHJvdXRlczogWwpkaWZmIC0tZ2l0IGEvcmVhY3QtdWkvcHVibGljL2Zhdmljb24uaWNvIGIvcmVhY3QtdWkvcHVibGljL2Zhdmljb24uaWNvCmluZGV4IGUyZTkzMjUuLmU2OWRlMjkgMTAwNjQ0Ci0tLSBhL3JlYWN0LXVpL3B1YmxpYy9mYXZpY29uLmljbworKysgYi9yZWFjdC11aS9wdWJsaWMvZmF2aWNvbi5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcmVhY3QtdWkvcHVibGljL2ljb25zL2ljb24tMTI4eDEyOC5wbmcgYi9yZWFjdC11aS9wdWJsaWMvaWNvbnMvaWNvbi0xMjh4MTI4LnBuZwppbmRleCA0OGQwZTIzLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9yZWFjdC11aS9wdWJsaWMvaWNvbnMvaWNvbi0xMjh4MTI4LnBuZworKysgYi9yZWFjdC11aS9wdWJsaWMvaWNvbnMvaWNvbi0xMjh4MTI4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9yZWFjdC11aS9wdWJsaWMvaWNvbnMvaWNvbi0xOTJ4MTkyLnBuZyBiL3JlYWN0LXVpL3B1YmxpYy9pY29ucy9pY29uLTE5MngxOTIucG5nCmluZGV4IDkzOGU5YjUuLmU2OWRlMjkgMTAwNjQ0Ci0tLSBhL3JlYWN0LXVpL3B1YmxpYy9pY29ucy9pY29uLTE5MngxOTIucG5nCisrKyBiL3JlYWN0LXVpL3B1YmxpYy9pY29ucy9pY29uLTE5MngxOTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JlYWN0LXVpL3B1YmxpYy9pY29ucy9pY29uLTUxMng1MTIucG5nIGIvcmVhY3QtdWkvcHVibGljL2ljb25zL2ljb24tNTEyeDUxMi5wbmcKaW5kZXggMjFmYzEwOC4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvcmVhY3QtdWkvcHVibGljL2ljb25zL2ljb24tNTEyeDUxMi5wbmcKKysrIGIvcmVhY3QtdWkvcHVibGljL2ljb25zL2ljb24tNTEyeDUxMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcmVhY3QtdWkvc3JjL3BhZ2VzL1BlZXIvZGF0YS5kLnRzIGIvcmVhY3QtdWkvc3JjL3BhZ2VzL1BlZXIvZGF0YS5kLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjcxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWFjdC11aS9zcmMvcGFnZXMvUGVlci9kYXRhLmQudHMKQEAgLTAsMCArMSwxNyBAQAorLyoqIFBlZXIg5L+h5oGvICovCitleHBvcnQgaW50ZXJmYWNlIEJ0VG9ycmVudFBlZXIgeworICAvKiogUGVlciBLZXkgKi8KKyAgcGVlcktleTogc3RyaW5nOworICAvKiogSVAg5Zyw5Z2AICovCisgIGlwOiBzdHJpbmc7CisgIC8qKiDnq6/lj6Plj7cgKi8KKyAgcG9ydDogc3RyaW5nOworICAvKiog5bey5LiK5Lyg6YePICovCisgIHVwbG9hZGVkOiBzdHJpbmc7CisgIC8qKiDlt7LkuIvovb3ph48gKi8KKyAgZG93bmxvYWRlZDogc3RyaW5nOworICAvKiog5Ymp5L2Z6YePICovCisgIGxlZnQ6IHN0cmluZzsKKyAgLyoqIOacgOWQjua0u+i3g+aXtumXtOaIsyAqLworICBsYXN0U2Vlbjogc3RyaW5nOworfQpkaWZmIC0tZ2l0IGEvcmVhY3QtdWkvc3JjL3BhZ2VzL1BlZXIvaW5kZXgudHN4IGIvcmVhY3QtdWkvc3JjL3BhZ2VzL1BlZXIvaW5kZXgudHN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzA2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9yZWFjdC11aS9zcmMvcGFnZXMvUGVlci9pbmRleC50c3gKQEAgLTAsMCArMSw2MCBAQAoraW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7CitpbXBvcnQgeyBUYWJsZSwgU3BpbiwgQWxlcnQgfSBmcm9tICdhbnRkJzsKK2ltcG9ydCB7bGlzdEJ0VG9ycmVudFBlZXJzfSBmcm9tICJAL3BhZ2VzL1BlZXIvc2VydmljZSI7CitpbXBvcnQge0J0VG9ycmVudFBlZXJ9IGZyb20gIkAvcGFnZXMvUGVlci9kYXRhIjsKKworCitpbnRlcmZhY2UgUGVlclRhYmxlUHJvcHMgeworICB0b3JyZW50SWQ6IG51bWJlcjsKK30KKworY29uc3QgUGVlclRhYmxlOiBSZWFjdC5GQzxQZWVyVGFibGVQcm9wcz4gPSAoeyB0b3JyZW50SWQgfSkgPT4geworICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7CisgIGNvbnN0IFtwZWVycywgc2V0UGVlcnNdID0gdXNlU3RhdGU8QnRUb3JyZW50UGVlcltdPihbXSk7CisgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7CisKKyAgdXNlRWZmZWN0KCgpID0+IHsKKyAgICBjb25zdCBmZXRjaFBlZXJzID0gYXN5bmMgKCkgPT4geworICAgICAgc2V0TG9hZGluZyh0cnVlKTsKKyAgICAgIHRyeSB7CisgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBsaXN0QnRUb3JyZW50UGVlcnMoKTsKKworICAgICAgICBzZXRQZWVycyhkYXRhLnJvd3MpOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHNldEVycm9yKCdGYWlsZWQgdG8gbG9hZCBwZWVyIGRhdGEuJyk7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgZmV0Y2hQZWVycygpOworICB9LCBbdG9ycmVudElkXSk7CisKKyAgY29uc3QgY29sdW1ucyA9IFsKKyAgICB7IHRpdGxlOiAnUGVlciBLZXknLCBkYXRhSW5kZXg6ICdwZWVyS2V5Jywga2V5OiAncGVlcktleScgfSwKKyAgICB7IHRpdGxlOiAnSVAgQWRkcmVzcycsIGRhdGFJbmRleDogJ2lwJywga2V5OiAnaXAnIH0sCisgICAgeyB0aXRsZTogJ1BvcnQnLCBkYXRhSW5kZXg6ICdwb3J0Jywga2V5OiAncG9ydCcgfSwKKyAgICB7IHRpdGxlOiAnVXBsb2FkZWQnLCBkYXRhSW5kZXg6ICd1cGxvYWRlZCcsIGtleTogJ3VwbG9hZGVkJyB9LAorICAgIHsgdGl0bGU6ICdEb3dubG9hZGVkJywgZGF0YUluZGV4OiAnZG93bmxvYWRlZCcsIGtleTogJ2Rvd25sb2FkZWQnIH0sCisgICAgeyB0aXRsZTogJ0xlZnQnLCBkYXRhSW5kZXg6ICdsZWZ0Jywga2V5OiAnbGVmdCcgfSwKKyAgICB7IHRpdGxlOiAnTGFzdCBTZWVuJywgZGF0YUluZGV4OiAnbGFzdFNlZW4nLCBrZXk6ICdsYXN0U2VlbicgfSwKKyAgXTsKKworICByZXR1cm4gKAorICAgIDxkaXY+CisgICAgICB7ZXJyb3IgJiYgPEFsZXJ0IG1lc3NhZ2U9e2Vycm9yfSB0eXBlPSJlcnJvciIgLz59CisgICAgICB7bG9hZGluZyA/ICgKKyAgICAgICAgPFNwaW4gc2l6ZT0ibGFyZ2UiIC8+CisgICAgICApIDogKAorICAgICAgICA8VGFibGU8QnRUb3JyZW50UGVlcj4KKyAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfQorICAgICAgICAgIGRhdGFTb3VyY2U9e3BlZXJzfQorICAgICAgICAgIHJvd0tleT0icGVlcktleSIKKyAgICAgICAgICBwYWdpbmF0aW9uPXtmYWxzZX0KKyAgICAgICAgLz4KKyAgICAgICl9CisgICAgPC9kaXY+CisgICk7Cit9OworCitleHBvcnQgZGVmYXVsdCBQZWVyVGFibGU7CmRpZmYgLS1naXQgYS9yZWFjdC11aS9zcmMvcGFnZXMvUGVlci9zZXJ2aWNlLnRzIGIvcmVhY3QtdWkvc3JjL3BhZ2VzL1BlZXIvc2VydmljZS50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2YwOWEzCi0tLSAvZGV2L251bGwKKysrIGIvcmVhY3QtdWkvc3JjL3BhZ2VzL1BlZXIvc2VydmljZS50cwpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCB7QnRUb3JyZW50UGVlcn0gZnJvbSAiQC9wYWdlcy9QZWVyL2RhdGEiOworaW1wb3J0IHtyZXF1ZXN0fSBmcm9tICJAdW1panMvbWF4IjsKKworLyoqIOafpeivouenjeWtkOeahCBQZWVyIOWIl+ihqCAqLworZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RCdFRvcnJlbnRQZWVycygpIHsKKyAgcmV0dXJuIHJlcXVlc3Q8QnRUb3JyZW50UGVlcltdPihgL2FwaS9wZWVyc2AsIHsKKyAgICBtZXRob2Q6ICdnZXQnLAorICB9KTsKK30KZGlmZiAtLWdpdCBhL3JlYWN0LXVpL3NyYy9wYWdlcy9Ub3JyZW50L2luZGV4LnRzeCBiL3JlYWN0LXVpL3NyYy9wYWdlcy9Ub3JyZW50L2luZGV4LnRzeAppbmRleCA1NTJhNTNjLi45NjQ3NWYyIDEwMDY0NAotLS0gYS9yZWFjdC11aS9zcmMvcGFnZXMvVG9ycmVudC9pbmRleC50c3gKKysrIGIvcmVhY3QtdWkvc3JjL3BhZ2VzL1RvcnJlbnQvaW5kZXgudHN4CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgICAgICAgIGxpbmsuaHJlZiA9IHVybDsKLSAgICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSBgJHtyZWNvcmQubmFtZX0udG9ycmVudGA7CisgICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gYCR7cmVjb3JkLm5hbWV9YDsKICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7CiAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7CiAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspOwpAQCAtNDkyLDQgKzQ5Miw0IEBACiAgICk7CiB9OwogCi1leHBvcnQgZGVmYXVsdCBCdFRvcnJlbnRQYWdlOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2V4cG9ydCBkZWZhdWx0IEJ0VG9ycmVudFBhZ2U7CmRpZmYgLS1naXQgYS9yZWFjdC11aS9zcmMvcGFnZXMvVXNlci9DZW50ZXIvY29tcG9uZW50cy9BdmF0YXJDcm9wcGVyL2ltYWdlcy9iZy5wbmcgYi9yZWFjdC11aS9zcmMvcGFnZXMvVXNlci9DZW50ZXIvY29tcG9uZW50cy9BdmF0YXJDcm9wcGVyL2ltYWdlcy9iZy5wbmcKaW5kZXggM2M3MDU2Yi4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvcmVhY3QtdWkvc3JjL3BhZ2VzL1VzZXIvQ2VudGVyL2NvbXBvbmVudHMvQXZhdGFyQ3JvcHBlci9pbWFnZXMvYmcucG5nCisrKyBiL3JlYWN0LXVpL3NyYy9wYWdlcy9Vc2VyL0NlbnRlci9jb21wb25lbnRzL0F2YXRhckNyb3BwZXIvaW1hZ2VzL2JnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9yZWNvbW1lbmQvZGVtby5weSBiL3JlY29tbWVuZC9kZW1vLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NGVjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNvbW1lbmQvZGVtby5weQpAQCAtMCwwICsxLDE0OSBAQAoraW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IGppZWJhCitpbXBvcnQgZmFzdHRleHQKK2Zyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCByZXF1ZXN0LCBqc29uaWZ5CitpbXBvcnQgbXlzcWwuY29ubmVjdG9yCisKKyMg4pyFIOWIneWni+WMluaVsOaNruW6k+i/nuaOpQoraW1wb3J0IG15c3FsLmNvbm5lY3RvcgorZnJvbSBza2xlYXJuLm1ldHJpY3MucGFpcndpc2UgaW1wb3J0IGNvc2luZV9zaW1pbGFyaXR5CitpbXBvcnQgbnVtcHkgYXMgbnAKKworZGVmIGNvbXB1dGVfc2ltaWxhcml0eSh2ZWMxLCB2ZWMyKToKKyAgICAiIiLorqHnrpfkuKTkuKror43lkJHph4/kuYvpl7TnmoTkvZnlvKbnm7jkvLzluqYiIiIKKyAgICAjIOS9v+eUqCBjb3NpbmVfc2ltaWxhcml0eSDorqHnrpfnm7jkvLzluqYKKyAgICByZXR1cm4gY29zaW5lX3NpbWlsYXJpdHkoW3ZlYzFdLCBbdmVjMl0pWzBdWzBdCisKK2RiID0gbXlzcWwuY29ubmVjdG9yLmNvbm5lY3QoCisgICAgaG9zdD0iNDkuMjMzLjIxNS4xNDQiLAorICAgIHBvcnQ9MzMwNiwKKyAgICB1c2VyPSJzeSIsCisgICAgcGFzc3dvcmQ9InN5X3Bhc3N3b3JkIiwKKyAgICBkYXRhYmFzZT0icHRfc3RhdGlvbiIKKykKKworY3Vyc29yID0gZGIuY3Vyc29yKCkKKworCithcHAgPSBGbGFzayhfX25hbWVfXykKKworIyDinIUg5Yqg6L29IGZhc3RUZXh0IOaooeWeiworZmFzdHRleHRfbW9kZWxfcGF0aCA9ICcuL21vZGVscy9jYy56aC4zMDAuYmluJworaWYgbm90IG9zLnBhdGguZXhpc3RzKGZhc3R0ZXh0X21vZGVsX3BhdGgpOgorICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKCJmYXN0VGV4dCDmqKHlnovmlofku7bkuI3lrZjlnKjvvIzor7fmo4Dmn6Xot6/lvoTjgIIiKQorCitwcmludCgi5Yqg6L29IGZhc3RUZXh0IOaooeWei+S4rS4uLiIpCitmdF9tb2RlbCA9IGZhc3R0ZXh0LmxvYWRfbW9kZWwoZmFzdHRleHRfbW9kZWxfcGF0aCkKK3ByaW50KCLmqKHlnovliqDovb3lrozmiJAg4pyFIikKK2Zhc3R0ZXh0X3ZvY2FiID0gc2V0KGZ0X21vZGVsLndvcmRzKQorCisjIOKchSDlhajlsYDmoIfnrb7nvJPlrZjvvIjnlKjkuo7pgb/lhY3popHnuYHmn6Xor6LvvIkKK2V4aXN0aW5nX3RhZ3MgPSBzZXQoKQorCitkZWYgcmVmcmVzaF9leGlzdGluZ190YWdzKCk6CisgICAgIiIi5Yi35paw5pWw5o2u5bqT5Lit5bey5a2Y5Zyo55qE5qCH562+6ZuG5ZCIIiIiCisgICAgZ2xvYmFsIGV4aXN0aW5nX3RhZ3MKKyAgICBjdXJzb3IuZXhlY3V0ZSgiU0VMRUNUIERJU1RJTkNUIHRhZyBGUk9NIHVzZXJfdGFnX3Njb3JlcyIpCisgICAgZXhpc3RpbmdfdGFncyA9IHNldCh0YWdbMF0gZm9yIHRhZyBpbiBjdXJzb3IuZmV0Y2hhbGwoKSkKKyAgICBwcmludChmIuW3suWKoOi9veagh+etvuaVsDoge2xlbihleGlzdGluZ190YWdzKX0iKQorCisjIOKchSDlkK/liqjml7bliJ3lp4vljJbmoIfnrb7nvJPlrZgKK3JlZnJlc2hfZXhpc3RpbmdfdGFncygpCisKKyMg4pyFIOaJqeWxleWHveaVsO+8muS7heS/neeVmeaVsOaNruW6k+W3suacieagh+etvgorZGVmIGV4cGFuZF90YWdzX2Zyb21faW5wdXQoaW5wdXRfdGFncywgdG9wbj01LCBzaW1pbGFyaXR5X3RocmVzaG9sZD0wLjcpOgorICAgICIiIgorICAgIOaJqeWxlei+k+WFpeagh+etvuWIl+ihqO+8jOafpeaJvuS4juS5i+ivreS5ieebuOS8vOeahOagh+etvu+8jOi/lOWbnuebuOS8vOW6puWkp+S6jumYiOWAvOaIluacgOebuOS8vOeahOWJjSBuIOS4quagh+etvuOAggorICAgIAorICAgIDpwYXJhbSBpbnB1dF90YWdzOiDovpPlhaXmoIfnrb7nmoTliJfooajvvIzkvovlpoIgWyfnlLXlvbEnLCAn5Yqo5ryrJywgJ+a4uOaIjycsICcxMDgwcCddCisgICAgOnBhcmFtIHRvcG46IOi/lOWbnueahOacgOebuOS8vOagh+etvueahOaVsOmHj++8jOm7mOiupOS4uiA1CisgICAgOnBhcmFtIHNpbWlsYXJpdHlfdGhyZXNob2xkOiDnm7jkvLzluqbpmIjlgLzvvIzpu5jorqTkuLogMC43CisgICAgOnJldHVybjog6L+U5Zue5LiO6L6T5YWl5qCH562+55u45YWz55qE5omp5bGV5qCH562+5YiX6KGoCisgICAgIiIiCisgICAgIyDnlKjkuo7lrZjlgqjmiYDmnInmianlsZXmoIfnrb7lj4rlhbbnm7jkvLzluqYKKyAgICB0YWdfc2NvcmVzID0ge30KKworICAgIGZvciB0YWcgaW4gaW5wdXRfdGFnczoKKyAgICAgICAgIyDojrflj5blvZPliY3moIfnrb7nmoTor43lkJHph48KKyAgICAgICAgdGFnX3ZlY3RvciA9IGZ0X21vZGVsLmdldF93b3JkX3ZlY3Rvcih0YWcpCisgICAgICAgIAorICAgICAgICAjIOmBjeWOhuagh+etvuW6k+S4reeahOaJgOacieagh+etvuW5tuiuoeeul+ebuOS8vOW6pgorICAgICAgICBmb3IgZGJfdGFnIGluIGV4aXN0aW5nX3RhZ3M6CisgICAgICAgICAgICBkYl90YWdfdmVjdG9yID0gZnRfbW9kZWwuZ2V0X3dvcmRfdmVjdG9yKGRiX3RhZykKKyAgICAgICAgICAgIHNpbWlsYXJpdHkgPSBjb21wdXRlX3NpbWlsYXJpdHkodGFnX3ZlY3RvciwgZGJfdGFnX3ZlY3RvcikKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgc2ltaWxhcml0eSA+PSBzaW1pbGFyaXR5X3RocmVzaG9sZDoKKyAgICAgICAgICAgICAgICBpZiBkYl90YWcgbm90IGluIHRhZ19zY29yZXM6CisgICAgICAgICAgICAgICAgICAgIHRhZ19zY29yZXNbZGJfdGFnXSA9IHNpbWlsYXJpdHkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0YWdfc2NvcmVzW2RiX3RhZ10gPSBtYXgodGFnX3Njb3Jlc1tkYl90YWddLCBzaW1pbGFyaXR5KQorICAgIAorICAgICMg5qC55o2u55u45Ly85bqm5o6S5bqP5bm26L+U5Zue5YmNIG4g5Liq5qCH562+CisgICAgc29ydGVkX3RhZ3MgPSBzb3J0ZWQodGFnX3Njb3Jlcy5pdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMV0sIHJldmVyc2U9VHJ1ZSkKKyAgICB0b3BfdGFncyA9IFt0YWcgZm9yIHRhZywgXyBpbiBzb3J0ZWRfdGFnc1s6dG9wbl1dCisKKyAgICByZXR1cm4gdG9wX3RhZ3MKKworCisjIOKchSDmjqXlj6Pot6/nlLEKK0BhcHAucm91dGUoIi9leHBhbmRfdGFncyIsIG1ldGhvZHM9WyJQT1NUIl0pCitkZWYgZXhwYW5kX3RhZ3MoKToKKyAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKworICAgICMg5LuO6K+35rGC5Lit6I635Y+W5pWw5o2uCisgICAgZGF0YSA9IHJlcXVlc3QuZ2V0X2pzb24oKQorICAgIGlucHV0X3RhZ3MgPSBkYXRhLmdldCgidGFncyIsIFtdKQorICAgIHVzZXJfaWQgPSBkYXRhLmdldCgidXNlcl9pZCIpCisgICAgdG9wbiA9IGRhdGEuZ2V0KCJ0b3BuIiwgMTApICAjIOm7mOiupOS4uiA1CisgICAgc2ltaWxhcml0eV90aHJlc2hvbGQgPSAgMC40ICAjIOm7mOiupOmYiOWAvOS4uiAwLjcKKworICAgIGlmIG5vdCBpbnB1dF90YWdzIG9yIG5vdCB1c2VyX2lkOgorICAgICAgICByZXR1cm4ganNvbmlmeSh7ImVycm9yIjogIue8uuWwkeWPguaVsCB0YWdzIOaIliB1c2VyX2lkIn0pLCA0MDAKKworICAgICMg6I635Y+W5LiO6L6T5YWl5qCH562+5pyA55u45YWz55qE5qCH562+CisgICAgZXhwYW5kZWRfdGFncyA9IGV4cGFuZF90YWdzX2Zyb21faW5wdXQoaW5wdXRfdGFncywgdG9wbj10b3BuLCBzaW1pbGFyaXR5X3RocmVzaG9sZD1zaW1pbGFyaXR5X3RocmVzaG9sZCkKKworICAgICMg5omT5Y2w5pel5b+XCisgICAgcHJpbnQoZiJb55So5oi3IHt1c2VyX2lkfV0g6L6T5YWl5qCH562+OiB7aW5wdXRfdGFnc30iKQorICAgIHByaW50KGYiW+eUqOaItyB7dXNlcl9pZH1dIOWMuemFjeaJqeWxleagh+etvjoge2V4cGFuZGVkX3RhZ3N9IikKKworICAgICMg5pWw5o2u5YaZ5YWl5omT5YiG6YC76L6RCisgICAgdG9rZW5fc2V0ID0gc2V0KGlucHV0X3RhZ3MpICAjIOeUqOS6juehruWumuWTquS6m+agh+etvuaYr+eUqOaIt+i+k+WFpeeahOagh+etvgorICAgIGZvciB0YWcgaW4gZXhwYW5kZWRfdGFnczoKKyAgICAgICAgc2NvcmUgPSAyLjAgaWYgdGFnIGluIHRva2VuX3NldCBlbHNlIDEuMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiIiIKKyAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB1c2VyX3RhZ19zY29yZXMgKHVzZXJfaWQsIHRhZywgc2NvcmUpCisgICAgICAgICAgICAgICAgVkFMVUVTICglcywgJXMsICVzKQorICAgICAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIHNjb3JlID0gc2NvcmUgKyBWQUxVRVMoc2NvcmUpCisgICAgICAgICAgICAiIiIsICh1c2VyX2lkLCB0YWcsIHNjb3JlKSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoZiLmj5LlhaXlpLHotKUgW3t0YWd9XToiLCBlKQorICAgIGRiLmNvbW1pdCgpCisgICAgIyDij7Mg5o+S5YWl5ZCO56uL5Y2z5p+l6K+i6K+l55So5oi355qE5omA5pyJ5qCH562+5ZKM6K+E5YiGCisgICAgdHJ5OgorICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiIiIKKyAgICAgICAgICAgIFNFTEVDVCB0YWcsIHNjb3JlIEZST00gdXNlcl90YWdfc2NvcmVzIFdIRVJFIHVzZXJfaWQgPSAlcworICAgICAgICAiIiIsICh1c2VyX2lkLCkpCisgICAgICAgIHVzZXJfc2NvcmVzID0gW3sidGFnIjogdGFnLCAic2NvcmUiOiBmbG9hdChzY29yZSl9IGZvciB0YWcsIHNjb3JlIGluIGN1cnNvci5mZXRjaGFsbCgpXQorICAgICAgICBwcmludCh1c2VyX3Njb3JlcykKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHByaW50KGYi5p+l6K+i55So5oi36K+E5YiG5aSx6LSlOiB7ZX0iKQorCisgICAgZHVyYXRpb24gPSByb3VuZCh0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUsIDMpCisgICAgcmV0dXJuIGpzb25pZnkoeworICAgICAgICAiZXhwYW5kZWRfdGFncyI6IGV4cGFuZGVkX3RhZ3MsCisgICAgfSkKKworCisjIOKchSDop6blj5HmoIfnrb7nvJPlrZjliLfmlrDvvIjlj6/pgInvvJrmiYvliqgv5o6l5Y+jL+WumuaXtuS7u+WKoeiwg+eUqO+8iQorQGFwcC5yb3V0ZSgiL3JlZnJlc2hfdGFncyIsIG1ldGhvZHM9WyJQT1NUIl0pCitkZWYgcmVmcmVzaF90YWdzKCk6CisgICAgcmVmcmVzaF9leGlzdGluZ190YWdzKCkKKyAgICByZXR1cm4ganNvbmlmeSh7InN0YXR1cyI6ICLmoIfnrb7nvJPlrZjlt7LliLfmlrAiLCAiY291bnQiOiBsZW4oZXhpc3RpbmdfdGFncyl9KQorCisjIOKchSDlkK/liqjmnI3liqEKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgZnJvbSB3YWl0cmVzcyBpbXBvcnQgc2VydmUKKyAgICBzZXJ2ZShhcHAsIGhvc3Q9IjAuMC4wLjAiLCBwb3J0PTUwMDAsIHRocmVhZHM9MTYpCmRpZmYgLS1naXQgYS9yZWNvbW1lbmQvZG93bmxvYWRfbW9kZWwucHkgYi9yZWNvbW1lbmQvZG93bmxvYWRfbW9kZWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiMGM1MAotLS0gL2Rldi9udWxsCisrKyBiL3JlY29tbWVuZC9kb3dubG9hZF9tb2RlbC5weQpAQCAtMCwwICsxLDMyIEBACitpbXBvcnQgb3MKK2ltcG9ydCB1cmxsaWIucmVxdWVzdAorZnJvbSByZWNvbW1lbmQgaW1wb3J0IHRyYWluX2FuZF9zYXZlX2l0ZW1jZgorTU9ERUxfVVJMID0gImh0dHBzOi8vZGwuZmJhaXB1YmxpY2ZpbGVzLmNvbS9mYXN0dGV4dC92ZWN0b3JzLWNyYXdsL2NjLnpoLjMwMC5iaW4uZ3oiCitNT0RFTF9ESVIgPSAiLi9tb2RlbHMiCitNT0RFTF9QQVRIID0gb3MucGF0aC5qb2luKE1PREVMX0RJUiwgImNjLnpoLjMwMC5iaW4iKQorQ09NUFJFU1NFRF9QQVRIID0gTU9ERUxfUEFUSCArICIuZ3oiCisKK2RlZiBkb3dubG9hZF9tb2RlbCgpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhNT0RFTF9ESVIpOgorICAgICAgICBvcy5tYWtlZGlycyhNT0RFTF9ESVIpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhNT0RFTF9QQVRIKToKKyAgICAgICAgcHJpbnQoIuKchSDmqKHlnovlt7LlrZjlnKjvvIzot7Pov4fkuIvovb3jgIIiKQorICAgICAgICByZXR1cm4KKworICAgIHByaW50KCLij6wg5LiL6L29IGZhc3RUZXh0IOS4reaWh+aooeWeiy4uLiIpCisgICAgdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUoTU9ERUxfVVJMLCBDT01QUkVTU0VEX1BBVEgpCisKKyAgICBwcmludCgi8J+TpiDop6PljovmqKHlnovmlofku7YuLi4iKQorICAgIGltcG9ydCBnemlwCisgICAgaW1wb3J0IHNodXRpbAorICAgIHdpdGggZ3ppcC5vcGVuKENPTVBSRVNTRURfUEFUSCwgJ3JiJykgYXMgZl9pbjoKKyAgICAgICAgd2l0aCBvcGVuKE1PREVMX1BBVEgsICd3YicpIGFzIGZfb3V0OgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKGZfaW4sIGZfb3V0KQorCisgICAgb3MucmVtb3ZlKENPTVBSRVNTRURfUEFUSCkKKyAgICBwcmludCgi4pyFIOaooeWei+S4i+i9veW5tuino+WOi+WujOaIkO+8gSIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJhaW5fYW5kX3NhdmVfaXRlbWNmKCkKKyAgICBkb3dubG9hZF9tb2RlbCgpCmRpZmYgLS1naXQgYS9yZWNvbW1lbmQvcmVjb21tZW5kLnB5IGIvcmVjb21tZW5kL3JlY29tbWVuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTAzMmEwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjb21tZW5kL3JlY29tbWVuZC5weQpAQCAtMCwwICsxLDI1MCBAQAoraW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IGppZWJhCitpbXBvcnQgZmFzdHRleHQKK2ltcG9ydCBwYW5kYXMgYXMgcGQKK2Zyb20gZmxhc2sgaW1wb3J0IEZsYXNrLCByZXF1ZXN0LCBqc29uaWZ5Citmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGNyZWF0ZV9lbmdpbmUKK2Zyb20gc2NpcHkuc3BhcnNlIGltcG9ydCBjb29fbWF0cml4Citmcm9tIHNrbGVhcm4ubWV0cmljcy5wYWlyd2lzZSBpbXBvcnQgY29zaW5lX3NpbWlsYXJpdHkKK2ltcG9ydCBwaWNrbGUKKworYXBwID0gRmxhc2soX19uYW1lX18pCisKKyMgPT09IOKchSBTUUxBbGNoZW15IOaVsOaNruW6k+i/nuaOpSA9PT0KK2VuZ2luZSA9IGNyZWF0ZV9lbmdpbmUoIm15c3FsK3B5bXlzcWw6Ly9zeTpzeV9wYXNzd29yZEA0OS4yMzMuMjE1LjE0NDozMzA2L3B0X3N0YXRpb24iKQorCisjID09PSDinIUg5Yqg6L29IGZhc3RUZXh0IOaooeWeiyA9PT0KK2Zhc3R0ZXh0X21vZGVsX3BhdGggPSAnRTpcXGNvdXJzZVxccHRcXHJlY29tbWVuZFxcbW9kZWxzXFxjYy56aC4zMDAuYmluJworaWYgbm90IG9zLnBhdGguZXhpc3RzKGZhc3R0ZXh0X21vZGVsX3BhdGgpOgorICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKCJmYXN0VGV4dCDmqKHlnovmlofku7bkuI3lrZjlnKjvvIzor7fmo4Dmn6Xot6/lvoTjgIIiKQorcHJpbnQoIuWKoOi9vSBmYXN0VGV4dCDmqKHlnovkuK0uLi4iKQorZnRfbW9kZWwgPSBmYXN0dGV4dC5sb2FkX21vZGVsKGZhc3R0ZXh0X21vZGVsX3BhdGgpCitwcmludCgi5qih5Z6L5Yqg6L295a6M5oiQIOKchSIpCisKKyMgPT09IOKchSDnlKjmiLfmoIfnrb7ooYzkuLrnn6npmLXmnoTlu7ogPT09CitkZWYgZ2V0X3VzZXJfdGFnX21hdHJpeCgpOgorICAgIGRmID0gcGQucmVhZF9zcWwoIlNFTEVDVCB1c2VyX2lkLCB0YWcsIHNjb3JlIEZST00gdXNlcl90YWdfc2NvcmVzIiwgZW5naW5lKQorICAgIHByaW50KGRmKQorICAgIGRmWyd1c2VyX2lkJ10gPSBkZlsndXNlcl9pZCddLmFzdHlwZShzdHIpCisgICAgdXNlcl9tYXAgPSB7dTogaSBmb3IgaSwgdSBpbiBlbnVtZXJhdGUoZGZbJ3VzZXJfaWQnXS51bmlxdWUoKSl9CisgICAgdGFnX21hcCA9IHt0OiBpIGZvciBpLCB0IGluIGVudW1lcmF0ZShkZlsndGFnJ10udW5pcXVlKCkpfQorICAgIGRmWyd1c2VyX2luZGV4J10gPSBkZlsndXNlcl9pZCddLm1hcCh1c2VyX21hcCkKKyAgICBkZlsndGFnX2luZGV4J10gPSBkZlsndGFnJ10ubWFwKHRhZ19tYXApCisgICAgbWF0cml4ID0gZGYucGl2b3RfdGFibGUoaW5kZXg9J3VzZXJfaWQnLCBjb2x1bW5zPSd0YWcnLCB2YWx1ZXM9J3Njb3JlJywgZmlsbF92YWx1ZT0wKQorICAgIHNwYXJzZV9tYXRyaXggPSBjb29fbWF0cml4KChkZlsnc2NvcmUnXSwgKGRmWyd0YWdfaW5kZXgnXSwgZGZbJ3VzZXJfaW5kZXgnXSkpKQorICAgIHJldHVybiBkZiwgbWF0cml4LCBzcGFyc2VfbWF0cml4LCB1c2VyX21hcCwgdGFnX21hcAorCisjID09PSDinIUg5Z+65LqOIGZhc3RUZXh0IOeahOivreS5ieebuOS8vOaOqOiNkOaWueazlSA9PT0KK2RlZiBzZW1hbnRpY19yZWNvbW1lbmQodXNlcl9pZCwgdG9wbj01KToKKyAgICBwcmludChmIuato+WcqOS4uueUqOaItyB7dXNlcl9pZH0g55Sf5oiQ5o6o6I2QLi4uIikKKworICAgICMg6K+75Y+W5pWw5o2u5bqT5Lit55qE55So5oi35qCH562+5pWw5o2uCisgICAgZGYgPSBwZC5yZWFkX3NxbCgiU0VMRUNUIHVzZXJfaWQsIHRhZywgc2NvcmUgRlJPTSB1c2VyX3RhZ19zY29yZXMiLCBlbmdpbmUpCisgICAgcHJpbnQoZiLmgLvorrDlvZXmlbA6IHtsZW4oZGYpfSIpCisgICAgcHJpbnQoZiLmlbDmja7npLrkvos6XG57ZGYuaGVhZCgpfSIpCisgICAgcHJpbnQoZGYuZHR5cGVzKQorICAgIHVzZXJfaWQgPSBzdHIodXNlcl9pZCkgICMg56Gu5L+d5Yy56YWNCisKKyAgICAjIOiOt+WPluivpeeUqOaIt+eahOaJgOacieagh+etvu+8iOaMieWIhuaVsOS7jumrmOWIsOS9juaOkuW6j++8iQorICAgIHVzZXJfdGFncyA9IGRmW2RmWyd1c2VyX2lkJ10gPT0gdXNlcl9pZF0uc29ydF92YWx1ZXMoYnk9InNjb3JlIiwgYXNjZW5kaW5nPUZhbHNlKVsndGFnJ10udG9saXN0KCkKKyAgICBwcmludChmIueUqOaItyB7dXNlcl9pZH0g55qE5qCH562+77yI5oyJ5YiG5pWw5o6S5bqP77yJOiB7dXNlcl90YWdzfSIpCisKKyAgICBpZiBub3QgdXNlcl90YWdzOgorICAgICAgICBwcmludChmIueUqOaItyB7dXNlcl9pZH0g5rKh5pyJ5qCH562+6K6w5b2V77yM6L+U5Zue56m65o6o6I2Q57uT5p6c44CCIikKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICAjIOaIquWPluWJjSAzIOS4quagh+etvuS9nOS4uuKAnOWFtOi2o+agh+etvuKAnQorICAgIHVzZXJfdGFncyA9IHVzZXJfdGFnc1s6M10KKyAgICBwcmludChmIueUqOaItyB7dXNlcl9pZH0g55qEIFRvcCAzIOagh+etvjoge3VzZXJfdGFnc30iKQorCisgICAgIyDmnoTpgKDmiYDmnInmoIfnrb7nmoTor43lkJHph48KKyAgICBhbGxfdGFncyA9IGRmWyd0YWcnXS51bmlxdWUoKQorICAgIHByaW50KGYi5omA5pyJ5ZSv5LiA5qCH562+5pWw6YePOiB7bGVuKGFsbF90YWdzKX0iKQorCisgICAgdGFnX3ZlY3RvcnMgPSB7fQorICAgIGZvciB0YWcgaW4gYWxsX3RhZ3M6CisgICAgICAgIHZlYyA9IGZ0X21vZGVsLmdldF93b3JkX3ZlY3Rvcih0YWcpCisgICAgICAgIHRhZ192ZWN0b3JzW3RhZ10gPSB2ZWMKKworICAgICMg6K6h566X5pyq5Ye6546w6L+H5qCH562+55qE55u45Ly85bqm5b6X5YiGCisgICAgc2NvcmVzID0ge30KKyAgICBmb3IgdGFnIGluIGFsbF90YWdzOgorICAgICAgICBpZiB0YWcgaW4gdXNlcl90YWdzOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdmVjID0gdGFnX3ZlY3RvcnNbdGFnXQorICAgICAgICBzaW1fdG90YWwgPSAwLjAKKyAgICAgICAgZm9yIHQgaW4gdXNlcl90YWdzOgorICAgICAgICAgICAgc2ltID0gY29zaW5lX3NpbWlsYXJpdHkoW3ZlY10sIFtmdF9tb2RlbC5nZXRfd29yZF92ZWN0b3IodCldKVswXVswXQorICAgICAgICAgICAgcHJpbnQoZiLmoIfnrb4gW3t0YWd9XSDkuI7nlKjmiLfmoIfnrb4gW3t0fV0g55qE55u45Ly85bqmOiB7c2ltOi40Zn0iKQorICAgICAgICAgICAgc2ltX3RvdGFsICs9IHNpbQorICAgICAgICBhdmdfc2NvcmUgPSBzaW1fdG90YWwgLyBsZW4odXNlcl90YWdzKQorICAgICAgICBzY29yZXNbdGFnXSA9IGF2Z19zY29yZQorICAgICAgICBwcmludChmIuagh+etviBbe3RhZ31dIOeahOW5s+Wdh+ebuOS8vOW6puW+l+WIhjoge2F2Z19zY29yZTouNGZ9IikKKworICAgICMg5o6S5bqP5bm26L+U5ZueIHRvcE4g5qCH562+CisgICAgc29ydGVkX3RhZ3MgPSBzb3J0ZWQoc2NvcmVzLml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFsxXSwgcmV2ZXJzZT1UcnVlKVs6dG9wbl0KKyAgICBwcmludChmIlxu5pyA57uI5o6o6I2Q5qCH562+77yI5YmNIHt0b3Bufe+8iToiKQorICAgIGZvciB0YWcsIHNjb3JlIGluIHNvcnRlZF90YWdzOgorICAgICAgICBwcmludChmInt0YWd9OiB7c2NvcmU6LjRmfSIpCisKKyAgICByZXR1cm4gW3RhZyBmb3IgdGFnLCBfIGluIHNvcnRlZF90YWdzXQorCisjID09PSDinIUgSXRlbUNGIOaOqOiNkOaWueazlSA9PT0KK2ltcG9ydCBvcworaW1wb3J0IHBpY2tsZQorCitkZWYgaXRlbWNmX3JlY29tbWVuZCh1c2VyX2lkLCBtYXRyaXgsIHNpbV9wYXRoPSIuL21vZGVscy9pdGVtY2Zfc2ltLnBrbCIsIHRvcG49NSk6CisgICAgdXNlcl9pZCA9IHN0cih1c2VyX2lkKSAgIyDnoa7kv50gdXNlcl9pZCDnsbvlnovkuIDoh7QKKyAgICBwcmludChtYXRyaXguaW5kZXguZHR5cGUpCisgICAgcHJpbnQodHlwZSh1c2VyX2lkKSkgICMg5bqU6K+l5pivIHN0cgorCisgICAgaWYgdXNlcl9pZCBub3QgaW4gbWF0cml4LmluZGV4OgorICAgICAgICBwcmludChmIuKaoO+4jyDnlKjmiLcge3VzZXJfaWR9IOS4jeWcqOivhOWIhuefqemYteS4reOAgiIpCisgICAgICAgIHJldHVybiBbXQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNpbV9wYXRoKToKKyAgICAgICAgcHJpbnQoZiLimqDvuI8g55So5oi3IHt1c2VyX2lkfSDkuI3lnKjor4TliIbnn6npmLXkuK3jgIIiKQorICAgICAgICB0cmFpbl9hbmRfc2F2ZV9pdGVtY2YoKQorCisgICAgd2l0aCBvcGVuKHNpbV9wYXRoLCAicmIiKSBhcyBmOgorICAgICAgICBzaW1fZGYgPSBwaWNrbGUubG9hZChmKQorCisgICAgdXNlcl9yb3cgPSBtYXRyaXgubG9jW3VzZXJfaWRdCisgICAgdXNlcl90YWdzID0gdXNlcl9yb3dbdXNlcl9yb3cgPiAwXQorCisgICAgaWYgdXNlcl90YWdzLmVtcHR5OgorICAgICAgICBwcmludChmIuKaoO+4jyDnlKjmiLcge3VzZXJfaWR9IOayoeacieS7u+S9leagh+etvuivhOWIhuiusOW9leOAgiIpCisgICAgICAgIHJldHVybiBbXQorCisgICAgcHJpbnQoZiLnlKjmiLcge3VzZXJfaWR9IOeahOagh+etvuivhOWIhjpcbnt1c2VyX3RhZ3N9IikKKworICAgIHNjb3JlcyA9IHt9CisgICAgZm9yIHRhZywgdmFsIGluIHVzZXJfdGFncy5pdGVtcygpOgorICAgICAgICBpZiB0YWcgbm90IGluIHNpbV9kZjoKKyAgICAgICAgICAgIHByaW50KGYi5qCH562+IHt0YWd9IOWcqOebuOS8vOW6puefqemYteS4reS4jeWtmOWcqO+8jOi3s+i/h+OAgiIpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBzaW1zID0gc2ltX2RmW3RhZ10uZHJvcChpbmRleD11c2VyX3RhZ3MuaW5kZXgsIGVycm9ycz0iaWdub3JlIikKKyAgICAgICAgZm9yIHNpbV90YWcsIHNpbV9zY29yZSBpbiBzaW1zLml0ZW1zKCk6CisgICAgICAgICAgICBzY29yZXNbc2ltX3RhZ10gPSBzY29yZXMuZ2V0KHNpbV90YWcsIDApICsgc2ltX3Njb3JlICogdmFsCisKKyAgICBpZiBub3Qgc2NvcmVzOgorICAgICAgICBwcmludChmIuKaoO+4jyDnlKjmiLcge3VzZXJfaWR9IOaXoOazleeUn+aIkOaOqOiNkO+8jOWPr+iDveaYr+agh+etvuebuOS8vOW6puS4jei2s+OAgiIpCisgICAgICAgIHJldHVybiBbXQorCisgICAgc29ydGVkX3RhZ3MgPSBzb3J0ZWQoc2NvcmVzLml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFsxXSwgcmV2ZXJzZT1UcnVlKQorICAgIHByaW50KGYi5o6o6I2Q5b6X5YiG77yI5YmNe3RvcG5977yJOlxuIiwgc29ydGVkX3RhZ3NbOnRvcG5dKQorCisgICAgcmV0dXJuIFt0YWcgZm9yIHRhZywgXyBpbiBzb3J0ZWRfdGFnc1s6dG9wbl1dCisKKworIyA9PT0g4pyFIEl0ZW1DRiDnm7jkvLzluqborq3nu4MgPT09CitkZWYgdHJhaW5fYW5kX3NhdmVfaXRlbWNmKHBhdGg9Ii4vbW9kZWxzL2l0ZW1jZl9zaW0ucGtsIik6CisgICAgXywgbWF0cml4LCBfLCBfLCBfID0gZ2V0X3VzZXJfdGFnX21hdHJpeCgpCisgICAgdGFnX3NpbSA9IGNvc2luZV9zaW1pbGFyaXR5KG1hdHJpeC5UKQorICAgIHNpbV9kZiA9IHBkLkRhdGFGcmFtZSh0YWdfc2ltLCBpbmRleD1tYXRyaXguY29sdW1ucywgY29sdW1ucz1tYXRyaXguY29sdW1ucykKKyAgICB3aXRoIG9wZW4ocGF0aCwgIndiIikgYXMgZjoKKyAgICAgICAgcGlja2xlLmR1bXAoc2ltX2RmLCBmKQorICAgIHByaW50KCJJdGVtQ0Yg55u45Ly85bqm55+p6Zi15bey5L+d5a2YIOKchSIpCisKKyMgPT09IOKchSBGbGFzayDmjqjojZDmjqXlj6MgPT09CitpbXBvcnQgcmFuZG9tCisKK0BhcHAucm91dGUoIi9yZWNvbW1lbmRfdG9ycmVudHMiLCBtZXRob2RzPVsiUE9TVCJdKQorZGVmIHJlY29tbWVuZF90b3JyZW50cygpOgorICAgIGRhdGEgPSByZXF1ZXN0LmdldF9qc29uKCkKKyAgICB1c2VyX2lkID0gZGF0YS5nZXQoInVzZXJfaWQiKQorCisgICAgaWYgbm90IHVzZXJfaWQ6CisgICAgICAgIHJldHVybiBqc29uaWZ5KHsiZXJyb3IiOiAi57y65bCRIHVzZXJfaWQifSksIDQwMAorCisgICAgZGYsIG1hdHJpeCwgXywgXywgXyA9IGdldF91c2VyX3RhZ19tYXRyaXgoKQorCisgICAgIyDojrflj5bmjqjojZDmoIfnrb4KKyAgICBpdGVtY2ZfcmVzdWx0ID0gaXRlbWNmX3JlY29tbWVuZCh1c2VyX2lkLCBtYXRyaXgpCisgICAgc2VtYW50aWNfcmVzdWx0ID0gc2VtYW50aWNfcmVjb21tZW5kKHVzZXJfaWQpCisKKworICAgIHByaW50KGYiSXRlbUNGIOaOqOiNkOagh+etvjoge2l0ZW1jZl9yZXN1bHR9IikKKyAgICBwcmludChmIlNlbWFudGljIOaOqOiNkOagh+etvjoge3NlbWFudGljX3Jlc3VsdH0iKQorCisgICAgYWxsX3RhZ3MgPSBkZlsndGFnJ10udW5pcXVlKCkudG9saXN0KCkKKworICAgICMg5a2Y5YKo5qCH562+5Y+K5YW25o6o6I2Q5b6X5YiGCisgICAgY29tYmluZWQgPSBbXQorICAgIHVzZWRfdGFncyA9IHNldCgpCisKKyAgICBkZWYgYWRkX3VuaXF1ZV90YWdzKHRhZ3MsIG1ldGhvZF9uYW1lKToKKyAgICAgICAgZm9yIHRhZyBpbiB0YWdzOgorICAgICAgICAgICAgaWYgdGFnIG5vdCBpbiB1c2VkX3RhZ3M6CisgICAgICAgICAgICAgICAgcmFuZG9tX3ByaW9yaXR5ID0gcmFuZG9tLnVuaWZvcm0oMCwgMSkKKyAgICAgICAgICAgICAgICBpZiBtZXRob2RfbmFtZSA9PSAnSXRlbUNGJzoKKyAgICAgICAgICAgICAgICAgICAgY29tYmluZWQuYXBwZW5kKCh0YWcsICdJdGVtQ0YnLCByYW5kb21fcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIGVsaWYgbWV0aG9kX25hbWUgPT0gJ1NlbWFudGljJzoKKyAgICAgICAgICAgICAgICAgICAgY29tYmluZWQuYXBwZW5kKCh0YWcsICdTZW1hbnRpYycsIHJhbmRvbV9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgdXNlZF90YWdzLmFkZCh0YWcpCisKKyAgICAjIOa3u+WKoCBJdGVtQ0Yg5ZKMIFNlbWFudGljIOaOqOiNkAorICAgIGFkZF91bmlxdWVfdGFncyhpdGVtY2ZfcmVzdWx0LCAnSXRlbUNGJykKKyAgICBhZGRfdW5pcXVlX3RhZ3Moc2VtYW50aWNfcmVzdWx0LCAnU2VtYW50aWMnKQorCisgICAgIyDmt7vliqDpmo/mnLrmoIfnrb4KKyAgICByYW5kb20uc2h1ZmZsZShhbGxfdGFncykKKyAgICBhZGRfdW5pcXVlX3RhZ3MoYWxsX3RhZ3MsICdSYW5kb20nKQorCisgICAgIyDmjpLluo/vvJrmjInmjqjojZDlvpfliIbmjpLluo/vvIzliqDlhaXnmoTpmo/mnLrlgLzkuZ/kvJrlvbHlk43mjpLluo8KKyAgICBjb21iaW5lZC5zb3J0KGtleT1sYW1iZGEgeDogeFsyXSwgcmV2ZXJzZT1UcnVlKQorCisgICAgIyDmoLnmja7moIfnrb7ojrflj5bnp43lrZAgSUQKKyAgICBmaW5hbF90YWdzID0gW3RhZyBmb3IgdGFnLCBfLCBfIGluIGNvbWJpbmVkXQorICAgIHByaW50KGYi5pyA57uI5o6o6I2Q5qCH562+OiB7ZmluYWxfdGFnc30iKQorICAgIHRvcnJlbnRfaWRzID0gZ2V0X3RvcnJlbnRfaWRzX2J5X3RhZ3MoZmluYWxfdGFncykKKworICAgIHJldHVybiBqc29uaWZ5KHsidG9ycmVudF9pZHMiOiB0b3JyZW50X2lkc30pCisKKworCitmcm9tIHNxbGFsY2hlbXkuc3FsIGltcG9ydCB0ZXh0CisKK2ltcG9ydCByYW5kb20KK2Zyb20gc3FsYWxjaGVteSBpbXBvcnQgdGV4dAorCitkZWYgZ2V0X3RvcnJlbnRfaWRzX2J5X3RhZ3ModGFncywgbGltaXRfcGVyX3RhZz0xMCk6CisgICAgaWYgbm90IHRhZ3M6CisgICAgICAgIHRhZ3MgPSBbXQorCisgICAgcmVjb21tZW5kZWRfaWRzID0gc2V0KCkKKyAgICB3aXRoIGVuZ2luZS5jb25uZWN0KCkgYXMgY29ubjoKKyAgICAgICAgZm9yIHRhZyBpbiB0YWdzOgorICAgICAgICAgICAgcXVlcnkgPSB0ZXh0KCIiIgorICAgICAgICAgICAgICAgIFNFTEVDVCB0b3JyZW50X2lkCisgICAgICAgICAgICAgICAgRlJPTSBidF90b3JyZW50X3RhZ3MgCisgICAgICAgICAgICAgICAgV0hFUkUgdGFnID0gOnRhZyAKKyAgICAgICAgICAgICAgICBMSU1JVCA6bGltaXQKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbm4uZXhlY3V0ZShxdWVyeSwgeyJ0YWciOiB0YWcsICJsaW1pdCI6IGxpbWl0X3Blcl90YWd9KQorICAgICAgICAgICAgZm9yIHJvdyBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgcmVjb21tZW5kZWRfaWRzLmFkZChyb3dbMF0pCisKKyAgICAgICAgIyDojrflj5bmlbDmja7lupPkuK3miYDmnIkgdG9ycmVudF9pZAorICAgICAgICBhbGxfcXVlcnkgPSB0ZXh0KCJTRUxFQ1QgRElTVElOQ1QgdG9ycmVudF9pZCBGUk9NIGJ0X3RvcnJlbnRfdGFncyIpCisgICAgICAgIGFsbF9yZXN1bHQgPSBjb25uLmV4ZWN1dGUoYWxsX3F1ZXJ5KQorICAgICAgICBhbGxfaWRzID0gc2V0KHJvd1swXSBmb3Igcm93IGluIGFsbF9yZXN1bHQpCisKKyAgICAjIOWJqeS4i+eahO+8iOmdnuaOqOiNkO+8ieenjeWtkCBJRAorICAgIHJlbWFpbmluZ19pZHMgPSBhbGxfaWRzIC0gcmVjb21tZW5kZWRfaWRzCisKKyAgICAjIOmaj+acuuaJk+S5seaOqOiNkOWSjOWJqeS4i+eahCBJRAorICAgIHJlY29tbWVuZGVkX2xpc3QgPSBsaXN0KHJlY29tbWVuZGVkX2lkcykKKyAgICByZW1haW5pbmdfbGlzdCA9IGxpc3QocmVtYWluaW5nX2lkcykKKyAgICByYW5kb20uc2h1ZmZsZShyZWNvbW1lbmRlZF9saXN0KQorICAgIHJhbmRvbS5zaHVmZmxlKHJlbWFpbmluZ19saXN0KQorCisgICAgcmV0dXJuIHJlY29tbWVuZGVkX2xpc3QgKyByZW1haW5pbmdfbGlzdAorCisKKyMgPT09IOKchSDlkK/liqjmnI3liqEgPT09CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRyYWluX2FuZF9zYXZlX2l0ZW1jZigpCisgICAgZnJvbSB3YWl0cmVzcyBpbXBvcnQgc2VydmUKKyAgICBzZXJ2ZShhcHAsIGhvc3Q9IjAuMC4wLjAiLCBwb3J0PTUwMDAsIHRocmVhZHM9MTYpCmRpZmYgLS1naXQgYS9yZWNvbW1lbmQvcmVxdWlyZW1lbnRzLnR4dCBiL3JlY29tbWVuZC9yZXF1aXJlbWVudHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZmU0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNvbW1lbmQvcmVxdWlyZW1lbnRzLnR4dApAQCAtMCwwICsxLDE4IEBACitmYXN0dGV4dF93aGVlbD09MC45LjIKK0ZsYXNrPT0zLjEuMQoraHVnZ2luZ2ZhY2VfaHViPT0wLjMxLjIKK2ppZWJhPT0wLjQyLjEKK215c3FsX2Nvbm5lY3Rvcl9yZXBhY2thZ2VkPT0wLjMuMQorbnVtcHk9PTIuMi42CitwYW5kYXM9PTIuMi4zCitzY2lraXRfbGVhcm49PTEuNi4xCitzY2lraXRfc3VycHJpc2U9PTEuMS40CitzY2lweT09MS4xNS4zCitzZW50ZW5jZV90cmFuc2Zvcm1lcnM9PTQuMS4wCitTUUxBbGNoZW15PT0yLjAuNDEKK3N1cnByaXNlPT0wLjEKK3RlbnNvcmZsb3c9PTIuMTkuMAordGVuc29yZmxvd19odWI9PTAuMTYuMQordG9yY2g9PTIuNy4wCit0cmFuc2Zvcm1lcnM9PTQuNTEuMword2FpdHJlc3M9PTMuMC4yCmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9wb20ueG1sIGIvcnVveWktYWRtaW4vcG9tLnhtbAppbmRleCAwZjdmYTQyLi4xZmJlOWQ2IDEwMDY0NAotLS0gYS9ydW95aS1hZG1pbi9wb20ueG1sCisrKyBiL3J1b3lpLWFkbWluL3BvbS54bWwKQEAgLTIyLDggKzIyLDExIEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKLQotCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmFsaXl1bi5vc3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hbGl5dW4tc2RrLW9zczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMTguMjwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgogCiAKIApkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYW5ub3VuY2UvY29udHJvbGxlci9Bbm5vdW5jZUNvbnRyb2xsZXIuamF2YSBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2Fubm91bmNlL2NvbnRyb2xsZXIvQW5ub3VuY2VDb250cm9sbGVyLmphdmEKaW5kZXggZjNiZDYyNC4uOTNjM2Y1MCAxMDA2NDQKLS0tIGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYW5ub3VuY2UvY29udHJvbGxlci9Bbm5vdW5jZUNvbnRyb2xsZXIuamF2YQorKysgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hbm5vdW5jZS9jb250cm9sbGVyL0Fubm91bmNlQ29udHJvbGxlci5qYXZhCkBAIC0xLDggKzEsMTcgQEAKIHBhY2thZ2UgY29tLnJ1b3lpLmFubm91bmNlLmNvbnRyb2xsZXI7CiAKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOworaW1wb3J0IGNvbS5ydW95aS5hbm5vdW5jZS51dGlsLkJlbmNvZGVFbmNvZGVyOworaW1wb3J0IGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5kb21haW4uU3lzVXNlclBhc3NrZXk7CitpbXBvcnQgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLnNlcnZpY2UuSVN5c1VzZXJQYXNza2V5U2VydmljZTsKIGltcG9ydCBjb20ucnVveWkuY29tbW9uLmNvcmUuY29udHJvbGxlci5CYXNlQ29udHJvbGxlcjsKIGltcG9ydCBjb20ucnVveWkuYW5ub3VuY2Uuc2VydmljZS5JQW5ub3VuY2VTZXJ2aWNlOworaW1wb3J0IGNvbS5ydW95aS5jb21tb24uY29yZS5wYWdlLlRhYmxlRGF0YUluZm87CitpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi51dGlscy5TZWN1cml0eVV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5EZWNvZGVyRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5uZXQuVVJMQ29kZWM7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uR2V0TWFwcGluZzsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdFBhcmFtOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXN0Q29udHJvbGxlcjsKQEAgLTEwLDUyICsxOSwxODIgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKIAoraW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLm5ldC5VUkxEZWNvZGVyOwogaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5CYXNlNjQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CiAKIEBSZXN0Q29udHJvbGxlcgogcHVibGljIGNsYXNzIEFubm91bmNlQ29udHJvbGxlciBleHRlbmRzIEJhc2VDb250cm9sbGVyIHsKKyAgICAvLyDlnKjkvaDnmoQgQ29udHJvbGxlciDkuK3vvJoKIAogICAgIEBBdXRvd2lyZWQKICAgICBwcml2YXRlIElBbm5vdW5jZVNlcnZpY2UgYW5ub3VuY2VTZXJ2aWNlOwogCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgQmVuY29kZUVuY29kZXIgYmVuY29kZUVuY29kZXI7CisKKworCisKKworCisgICAgcHJpdmF0ZSBieXRlW10gZGVjb2RlSW5mb0hhc2hBbmRQZWVySWQoU3RyaW5nIHBhcmFtKSB7CisgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW0ubGVuZ3RoKCk7ICkgeworICAgICAgICAgICAgY2hhciBjID0gcGFyYW0uY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGMgPT0gJyUnICYmIGkgKyAyIDwgcGFyYW0ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGhpID0gcGFyYW0uY2hhckF0KGkgKyAxKTsKKyAgICAgICAgICAgICAgICBjaGFyIGxvID0gcGFyYW0uY2hhckF0KGkgKyAyKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNIZXhEaWdpdChoaSkgJiYgaXNIZXhEaWdpdChsbykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gQ2hhcmFjdGVyLmRpZ2l0KGhpLCAxNikgPDwgNCB8IENoYXJhY3Rlci5kaWdpdChsbywgMTYpOworICAgICAgICAgICAgICAgICAgICBib3Mud3JpdGUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIOS4jeaYr+WQiOazleeahCAleHjvvIznm7TmjqXot7Pov4fmiJblpITnkIbkuLrlvILluLjlrZfnrKYKKyAgICAgICAgICAgIGJvcy53cml0ZSgoYnl0ZSkgYyk7IC8vIOaIluiAhSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKC4uLikKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYm9zLnRvQnl0ZUFycmF5KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzSGV4RGlnaXQoY2hhciBjKSB7CisgICAgICAgIHJldHVybiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8CisgICAgICAgICAgICAgICAgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKSB8fAorICAgICAgICAgICAgICAgIChjID49ICdhJyAmJiBjIDw9ICdmJyk7CisgICAgfQorCisKKworCiAgICAgLyoqCiAgICAgICogQlQgVHJhY2tlciAvYW5ub3VuY2Ug5o6l5Y+jCiAgICAgICog5o6l5pS25a6i5oi356uv77yIcUJpdHRvcnJlbnQg562J77yJ5Y+R5p2l55qEIGFubm91bmNlIOivt+axgu+8jOi/lOWbniBiZW5jb2RlZCBwZWVycyDliJfooagKICAgICAgKi8KLSAgICBAR2V0TWFwcGluZyh2YWx1ZSA9ICIvYW5ub3VuY2UiLCBwcm9kdWNlcyA9ICJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiKQotICAgIHB1YmxpYyB2b2lkIGFubm91bmNlKAotICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCi0gICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgiaW5mb19oYXNoIikgU3RyaW5nIGluZm9IYXNoUGFyYW0sCi0gICAgICAgICAgICBAUmVxdWVzdFBhcmFtKCJwZWVyX2lkIikgICBTdHJpbmcgcGVlcklkUGFyYW0sCi0gICAgICAgICAgICBAUmVxdWVzdFBhcmFtKCJwb3J0IikgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0oInVwbG9hZGVkIikgIGxvbmcgdXBsb2FkZWQsCi0gICAgICAgICAgICBAUmVxdWVzdFBhcmFtKCJkb3dubG9hZGVkIikgbG9uZyBkb3dubG9hZGVkLAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgibGVmdCIpICAgICAgbG9uZyBsZWZ0LAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSh2YWx1ZSA9ICJldmVudCIsICAgIHJlcXVpcmVkID0gZmFsc2UpIFN0cmluZyBldmVudCwKLSAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0oInBhc3NrZXkiKSAgIFN0cmluZyBwYXNza2V5Ci0gICAgKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gMS4gVVJMIERlY29kZSDlvpfliLDljp/lp4vkuozov5vliLYKLSAgICAgICAgYnl0ZVtdIGluZm9IYXNoID0gVVJMRGVjb2Rlci5kZWNvZGUoaW5mb0hhc2hQYXJhbSwgU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xLm5hbWUoKSkKLSAgICAgICAgICAgICAgICAuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKTsKLSAgICAgICAgYnl0ZVtdIHBlZXJJZCAgID0gVVJMRGVjb2Rlci5kZWNvZGUocGVlcklkUGFyYW0sICAgU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xLm5hbWUoKSkKLSAgICAgICAgICAgICAgICAuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKTsKIAotICAgICAgICAvLyAyLiDlpITnkIYgYW5ub3VuY2Ug6K+35rGC77yI6aqM6K+BIHBhc3NrZXnvvIzmm7TmlrAgcGVlciDliJfooajvvIzojrflj5YgcGVlcnMg5L+h5oGv77yJCisgICAgQEdldE1hcHBpbmcodmFsdWUgPSAiL2Fubm91bmNlIiwgcHJvZHVjZXMgPSAiYXBwbGljYXRpb24veC1iaXR0b3JyZW50IikKKyAgICBwdWJsaWMgdm9pZCBhbm5vdW5jZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIOKAlOKAlCDmiZPljbDmiYDmnInlj4LmlbAg4oCU4oCUCisgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZ1tdPiBwYXJhbWV0ZXJNYXAgPSByZXF1ZXN0LmdldFBhcmFtZXRlck1hcCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIuKAlOKAlCDor7fmsYLlj4LmlbDliJfooagg4oCU4oCUIik7CisgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nW10+IGVudHJ5IDogcGFyYW1ldGVyTWFwLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBwYXJhbU5hbWUgPSBlbnRyeS5nZXRLZXkoKTsKKyAgICAgICAgICAgIFN0cmluZ1tdIHBhcmFtVmFsdWVzID0gZW50cnkuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbU5hbWUgKyAiID0gIiArIEFycmF5cy50b1N0cmluZyhwYXJhbVZhbHVlcykpOworICAgICAgICB9CisKKworICAgICAgICAvLyDigJTigJQgNC4g6I635Y+W5Y+C5pWw77yI5LiN5L2/55SoIEBSZXF1ZXN0UGFyYW3vvIkg4oCU4oCUCisgICAgICAgIFN0cmluZyBpbmZvSGFzaFBhcmFtID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImluZm9faGFzaCIpOworICAgICAgICBTdHJpbmcgcGVlcklkUGFyYW0gICA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwZWVyX2lkIik7CisgICAgICAgIFN0cmluZyBwb3J0U3RyICAgICAgID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInBvcnQiKTsKKyAgICAgICAgU3RyaW5nIHVwbG9hZGVkU3RyICAgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidXBsb2FkZWQiKTsKKyAgICAgICAgU3RyaW5nIGRvd25sb2FkZWRTdHIgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiZG93bmxvYWRlZCIpOworICAgICAgICBTdHJpbmcgbGVmdFN0ciAgICAgICA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJsZWZ0Iik7CisgICAgICAgIFN0cmluZyBldmVudCAgICAgICAgID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImV2ZW50Iik7CisgICAgICAgIFN0cmluZyBwYXNza2V5ICAgICAgID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInBhc3NrZXkiKTsKKyAgICAgICAgU3RyaW5nIGlwICAgICAgICAgICAgPSByZXF1ZXN0LmdldFJlbW90ZUFkZHIoKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIHJlcXVlc3Qgd2l0aCBwYXJhbWV0ZXJzOiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluZm9faGFzaDogIiArIGluZm9IYXNoUGFyYW0pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBlZXJfaWQ6ICIgKyBwZWVySWRQYXJhbSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG9ydDogIiArIHBvcnRTdHIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInVwbG9hZGVkOiAiICsgdXBsb2FkZWRTdHIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvd25sb2FkZWQ6ICIgKyBkb3dubG9hZGVkU3RyKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsZWZ0OiAiICsgbGVmdFN0cik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXZlbnQ6ICIgKyBldmVudCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzc2tleTogIiArIHBhc3NrZXkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNsaWVudCBJUDogIiArIGlwKTsKKworCisKKworCisKKworCisgICAgICAgIGlmICgoaW5mb0hhc2hQYXJhbSA9PSBudWxsICYmIHBlZXJJZFBhcmFtID09IG51bGwgJiYgcG9ydFN0ciA9PSBudWxsICYmCisgICAgICAgICAgICAgICAgdXBsb2FkZWRTdHIgPT0gbnVsbCAmJiBkb3dubG9hZGVkU3RyID09IG51bGwgJiYgbGVmdFN0ciA9PSBudWxsKSkgeworCisgICAgICAgICAgICAvLyDlj6ropoEgcGFzc2tleSDlkowgaXAg5LiN5Li656m677yM5YiZ6K6k5Li65pivIGhlYXJ0YmVhdAorICAgICAgICAgICAgaWYgKHBhc3NrZXkgIT0gbnVsbCAmJiBpcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8g5aSE55CG5Li65b+D6Lez6K+35rGCCisgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXBseSA9IGFubm91bmNlU2VydmljZS5oYW5kbGVIZWFydGJlYXQoaXApOworICAgICAgICAgICAgICAgIGJ5dGVbXSBiZW5jb2RlUmVwbHkgPSBiZW5jb2RlRW5jb2Rlci5lbmNvZGVCZW5jb2RlKHJlcGx5KTsKKworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L3BsYWluIik7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkud3JpdGUoYmVuY29kZVJlcGx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIOWmguaenOS4jeaYr+W/g+i3s++8jOWwseaYr+mUmeivr+ivt+axggorICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfQkFEX1JFUVVFU1QpOworICAgICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvcGxhaW4iKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJNaXNzaW5nIHJlcXVpcmVkIGFubm91bmNlIHBhcmFtZXRlcnMuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyDigJTigJQgNS4g6L2s5o2i5Y+C5pWw57G75Z6LIOKAlOKAlAorICAgICAgICBhc3NlcnQgcG9ydFN0ciAhPSBudWxsOworICAgICAgICBpbnQgcG9ydCA9IEludGVnZXIucGFyc2VJbnQocG9ydFN0cik7CisgICAgICAgIGxvbmcgdXBsb2FkZWQgPSBMb25nLnBhcnNlTG9uZyh1cGxvYWRlZFN0cik7CisgICAgICAgIGxvbmcgZG93bmxvYWRlZCA9IExvbmcucGFyc2VMb25nKGRvd25sb2FkZWRTdHIpOworICAgICAgICBsb25nIGxlZnQgPSBMb25nLnBhcnNlTG9uZyhsZWZ0U3RyKTsKKworICAgICAgICAvLyDnoa7kv50gVVJMIOino+eggeS4jeS8muWksei0pe+8jOS9v+eUqOabtOWBpeWjrueahOaWueazlQorICAgICAgICBhc3NlcnQgaW5mb0hhc2hQYXJhbSAhPSBudWxsOworICAgICAgICBieXRlW10gaW5mb0hhc2ggPSBkZWNvZGVJbmZvSGFzaEFuZFBlZXJJZChpbmZvSGFzaFBhcmFtKTsKKyAgICAgICAgYnl0ZVtdIHBlZXJJZCAgID0gZGVjb2RlSW5mb0hhc2hBbmRQZWVySWQocGVlcklkUGFyYW0pOworCisgICAgICAgIC8vIOKAlOKAlCA3LiDosIPnlKjkuJrliqHpgLvovpHlpITnkIYg4oCU4oCUCiAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVwbHkgPSBhbm5vdW5jZVNlcnZpY2UuaGFuZGxlQW5ub3VuY2UoCiAgICAgICAgICAgICAgICAgaW5mb0hhc2gsIHBlZXJJZCwgcG9ydCwgdXBsb2FkZWQsIGRvd25sb2FkZWQsIGxlZnQsIGV2ZW50LCBwYXNza2V5LAogICAgICAgICAgICAgICAgIHJlcXVlc3QuZ2V0UmVtb3RlQWRkcigpCiAgICAgICAgICk7CiAKLSAgICAgICAgLy8gMy4gYmVuY29kZSDnvJbnoIHlubbov5Tlm57nu5nlrqLmiLfnq68KKyAgICAgICAgLy8g4oCU4oCUIDguIOi/lOWbniBCZW5jb2RlIOe8lueggeeahCB0cmFja2VyIOWTjeW6lCDigJTigJQKICAgICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfT0spOwogICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiKTsKICAgICAgICAgdHJ5ICh2YXIgb3V0ID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkpIHsKLSAgICAgICAgICAgIGJ5dGVbXSBiZW5jb2RlZCA9IGFubm91bmNlU2VydmljZS5lbmNvZGVCZW5jb2RlKHJlcGx5KTsKKyAgICAgICAgICAgIGJ5dGVbXSBiZW5jb2RlZCA9IGJlbmNvZGVFbmNvZGVyLmVuY29kZUJlbmNvZGUocmVwbHkpOworCiAgICAgICAgICAgICBvdXQud3JpdGUoYmVuY29kZWQpOwogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgIH0KICAgICB9CisgICAgLy8gU2NyYXBlIOaOpeWPoworICAgIEBHZXRNYXBwaW5nKHZhbHVlID0gIi9zY3JhcGUiLCBwcm9kdWNlcyA9ICJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiKQorICAgIHB1YmxpYyB2b2lkIHNjcmFwZShAUmVxdWVzdFBhcmFtKCJpbmZvX2hhc2giKSBTdHJpbmdbXSBpbmZvSGFzaGVzLCBIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICAgICAgLy8g5pS26ZuG5omA5pyJIGluZm9faGFzaCDlr7nlupTnmoTnu5/orqHmlbDmja4KKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBzY3JhcGVTdGF0cyA9IGFubm91bmNlU2VydmljZS5oYW5kbGVTY3JhcGUoaW5mb0hhc2hlcyk7CisKKyAgICAgICAgLy8g5bCG57uf6K6h5pWw5o2u6L2s5o2i5Li6IEJlbmNvZGUg5qC85byP5bm26L+U5ZueCisgICAgICAgIGJ5dGVbXSBiZW5jb2RlZFJlcGx5ID0gYmVuY29kZUVuY29kZXIuZW5jb2RlQmVuY29kZShzY3JhcGVTdGF0cyk7CisKKyAgICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfT0spOworICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiKTsKKyAgICAgICAgdHJ5ICh2YXIgb3V0ID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkpIHsKKyAgICAgICAgICAgIG91dC53cml0ZShiZW5jb2RlZFJlcGx5KTsKKyAgICAgICAgICAgIG91dC5mbHVzaCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICog5p+l6K+i5b2T5YmN5omA5pyJ5rS76LeD55qEIFBlZXIg6IqC54K5CisgICAgICovCisgICAgQEdldE1hcHBpbmcodmFsdWUgPSAiL3BlZXJzIiwgcHJvZHVjZXMgPSAiYXBwbGljYXRpb24vanNvbiIpCisgICAgcHVibGljIFRhYmxlRGF0YUluZm8gZ2V0QWxsUGVlcnMoKSB7CisgICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gcGVlcnMgPSBhbm5vdW5jZVNlcnZpY2UuZ2V0QWxsUGVlcnMoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBlZXJzKTsKKyAgICAgICAgcmV0dXJuIGdldERhdGFUYWJsZShwZWVycyk7CisgICAgfQogfQorCmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hbm5vdW5jZS9zZXJ2aWNlL0lBbm5vdW5jZVNlcnZpY2UuamF2YSBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2Fubm91bmNlL3NlcnZpY2UvSUFubm91bmNlU2VydmljZS5qYXZhCmluZGV4IGU2ZTdhYTcuLmMwMDVjYzggMTAwNjQ0Ci0tLSBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2Fubm91bmNlL3NlcnZpY2UvSUFubm91bmNlU2VydmljZS5qYXZhCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2Fubm91bmNlL3NlcnZpY2UvSUFubm91bmNlU2VydmljZS5qYXZhCkBAIC0xLDYgKzEsNyBAQAogcGFja2FnZSBjb20ucnVveWkuYW5ub3VuY2Uuc2VydmljZTsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAogLyoqCkBAIC0zOCw5ICszOSwxMSBAQAogICAgICAgICAgICAgU3RyaW5nIHBhc3NrZXksCiAgICAgICAgICAgICBTdHJpbmcgaXAKICAgICApIHRocm93cyBFeGNlcHRpb247CisgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRBbGxQZWVycygpOwogCi0gICAgLyoqCi0gICAgICog5bCG5LiA5LiqIE1hcDxTdHJpbmcsT2JqZWN0PiDnvJbnoIHmiJAgYmVuY29kZSDkuozov5vliLYKLSAgICAgKi8KLSAgICBieXRlW10gZW5jb2RlQmVuY29kZShNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcGx5KSB0aHJvd3MgSU9FeGNlcHRpb247CisgICAgLy8g5aSE55CGIHNjcmFwZSDor7fmsYIKKyAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGhhbmRsZVNjcmFwZShTdHJpbmdbXSBpbmZvSGFzaGVzKTsKKworICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gaGFuZGxlSGVhcnRiZWF0KFN0cmluZyBpcCkgdGhyb3dzIElPRXhjZXB0aW9uOworCiB9CmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hbm5vdW5jZS9zZXJ2aWNlL2ltcGwvQW5ub3VuY2VTZXJ2aWNlSW1wbC5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYW5ub3VuY2Uvc2VydmljZS9pbXBsL0Fubm91bmNlU2VydmljZUltcGwuamF2YQppbmRleCBmODAwNTBmLi5lOWNkY2U4IDEwMDY0NAotLS0gYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hbm5vdW5jZS9zZXJ2aWNlL2ltcGwvQW5ub3VuY2VTZXJ2aWNlSW1wbC5qYXZhCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2Fubm91bmNlL3NlcnZpY2UvaW1wbC9Bbm5vdW5jZVNlcnZpY2VJbXBsLmphdmEKQEAgLTEsMTMyICsxLDMzMiBAQAogcGFja2FnZSBjb20ucnVveWkuYW5ub3VuY2Uuc2VydmljZS5pbXBsOwogCiBpbXBvcnQgY29tLnJ1b3lpLmFubm91bmNlLnNlcnZpY2UuSUFubm91bmNlU2VydmljZTsKLWltcG9ydCBjb20ucnVveWkuYW5ub3VuY2UudXRpbC5CZW5jb2RlRW5jb2RlcjsKK2ltcG9ydCBjb20ucnVveWkuYXV0aGVudGljYXRpb24uZG9tYWluLlN5c1VzZXJQYXNza2V5OworaW1wb3J0IGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5kb21haW4uVXNlclNjb3JlOworaW1wb3J0IGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLklTeXNVc2VyUGFzc2tleVNlcnZpY2U7CitpbXBvcnQgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLnNlcnZpY2UuSVVzZXJTY29yZVNlcnZpY2U7CiBpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi5jb3JlLnJlZGlzLlJlZGlzQ2FjaGU7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOwogCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKIGltcG9ydCBqYXZhLnV0aWwuKjsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKIAoraW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTG9uZy5wYXJzZUxvbmc7CisKIEBTZXJ2aWNlCiBwdWJsaWMgY2xhc3MgQW5ub3VuY2VTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIElBbm5vdW5jZVNlcnZpY2UgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFOTk9VTkNFX0lOVEVSVkFMID0gMTgwMDsgLy8g56eSCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFOTk9VTkNFX0lOVEVSVkFMID0gMTgwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUEVFUl9DQUNIRV9EVVJBVElPTl9NSU4gPSA2MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1NFRURFUlMgPSAyNTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xFRUNIRVJTID0gNTA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFVQTE9BRF9XRUlHSFQgPSA3MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRE9XTkxPQURfV0VJR0hUID0gMzA7CiAKICAgICBAQXV0b3dpcmVkCiAgICAgcHJpdmF0ZSBSZWRpc0NhY2hlIHJlZGlzQ2FjaGU7CisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgSVN5c1VzZXJQYXNza2V5U2VydmljZSBwYXNza2V5U2VydmljZTsKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBJVXNlclNjb3JlU2VydmljZSB1c2VyU2NvcmVTZXJ2aWNlOwogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gaGFuZGxlQW5ub3VuY2UoCi0gICAgICAgICAgICBieXRlW10gaW5mb0hhc2gsCi0gICAgICAgICAgICBieXRlW10gcGVlcklkLAotICAgICAgICAgICAgaW50IHBvcnQsCi0gICAgICAgICAgICBsb25nIHVwbG9hZGVkLAotICAgICAgICAgICAgbG9uZyBkb3dubG9hZGVkLAotICAgICAgICAgICAgbG9uZyBsZWZ0LAotICAgICAgICAgICAgU3RyaW5nIGV2ZW50LAotICAgICAgICAgICAgU3RyaW5nIHBhc3NrZXksCi0gICAgICAgICAgICBTdHJpbmcgaXAKLSAgICApIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyAxLiDovawgaGV4IOS9nOS4uiBSZWRpcyBrZXkg5YmN57yACi0gICAgICAgIFN0cmluZyBpbmZvSGFzaEhleCA9IGJ5dGVzVG9IZXgoaW5mb0hhc2gpOwotICAgICAgICBTdHJpbmcgcGVlcklkU3RyICAgPSBuZXcgU3RyaW5nKHBlZXJJZCwgU3RhbmRhcmRDaGFyc2V0cy5JU09fODg1OV8xKTsKLQotICAgICAgICAvLyAyLiDmoKHpqowgcGFzc2tlee+8iOWPr+agueaNruS4muWKoeWIsCBNeVNRTCDmn6UgdXNlcklk77yM5q2k5aSE55Wl6L+H77yJCi0KLSAgICAgICAgLy8gMy4g5ZyoIFJlZGlzIOS4reiusOW9lS/liLfmlrDmraQgcGVlciDnmoTkv6Hmga8KLSAgICAgICAgLy8gICAg5L2/55SoIEhhc2gg5a2Y5YKo6K+m5oOF77yMVFRMIDEyMCDnp5IKLSAgICAgICAgU3RyaW5nIHBlZXJLZXkgPSAicGVlcjoiICsgaW5mb0hhc2hIZXggKyAiOiIgKyBwZWVySWRTdHI7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcGVlckRhdGEgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHBlZXJEYXRhLnB1dCgiaXAiLCAgICAgICAgIGlwKTsKLSAgICAgICAgcGVlckRhdGEucHV0KCJwb3J0IiwgICAgICAgcG9ydCk7Ci0gICAgICAgIHBlZXJEYXRhLnB1dCgidXBsb2FkZWQiLCAgIHVwbG9hZGVkKTsKLSAgICAgICAgcGVlckRhdGEucHV0KCJkb3dubG9hZGVkIiwgZG93bmxvYWRlZCk7Ci0gICAgICAgIHBlZXJEYXRhLnB1dCgibGVmdCIsICAgICAgIGxlZnQpOwotICAgICAgICBwZWVyRGF0YS5wdXQoImxhc3RTZWVuIiwgICBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7Ci0gICAgICAgIHJlZGlzQ2FjaGUuc2V0Q2FjaGVNYXAocGVlcktleSwgcGVlckRhdGEpOwotICAgICAgICByZWRpc0NhY2hlLmV4cGlyZShwZWVyS2V5LCAxMjAsIFRpbWVVbml0LlNFQ09ORFMpOwotCi0gICAgICAgIC8vIDQuIOS7jiBSZWRpcyDkuK3miavmj4/miYDmnInlkIwgaW5mb19oYXNoIOeahCBwZWVyCi0gICAgICAgIENvbGxlY3Rpb248U3RyaW5nPiBrZXlzID0gcmVkaXNDYWNoZS5rZXlzKCJwZWVyOiIgKyBpbmZvSGFzaEhleCArICI6KiIpOwotICAgICAgICBMaXN0PGJ5dGVbXT4gcGVlcnNCaW4gPSBuZXcgQXJyYXlMaXN0PD4oa2V5cy5zaXplKCkpOwotICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZGF0YSA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KSByZWRpc0NhY2hlLmdldENhY2hlTWFwKGtleSk7Ci0gICAgICAgICAgICBTdHJpbmcgcGVlcklwID0gKFN0cmluZykgZGF0YS5nZXQoImlwIik7Ci0gICAgICAgICAgICBpbnQgICAgcGVlclBvcnQgPSAoKE51bWJlcikgZGF0YS5nZXQoInBvcnQiKSkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIHBlZXJzQmluLmFkZChlbmNvZGVQZWVyKHBlZXJJcCwgcGVlclBvcnQpKTsKLSAgICAgICAgICAgIGlmIChwZWVyc0Jpbi5zaXplKCkgPj0gNTApIGJyZWFrOyAgLy8g5pyA5aSa6L+U5ZueIDUwIOS4qiBwZWVycworICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGhhbmRsZUFubm91bmNlKGJ5dGVbXSBpbmZvSGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gcGVlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXBsb2FkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3dubG9hZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhc3NrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGlwKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAocGFzc2tleSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlNYXAoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIDUuIOaehOmAoOi/lOWbnuaVsOaNriBNYXDvvIjmnInluo/vvIkKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXBseSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVwbHkucHV0KCJpbnRlcnZhbCIsIEFOTk9VTkNFX0lOVEVSVkFMKTsKLSAgICAgICAgcmVwbHkucHV0KCJtaW4gaW50ZXJ2YWwiLCBBTk5PVU5DRV9JTlRFUlZBTCAvIDIpOwotICAgICAgICByZXBseS5wdXQoImNvbXBsZXRlIiwgICBjb3VudFNlZWRlcnMoaW5mb0hhc2hIZXgpKTsKLSAgICAgICAgcmVwbHkucHV0KCJpbmNvbXBsZXRlIiwgY291bnRMZWVjaGVycyhpbmZvSGFzaEhleCkpOwotICAgICAgICByZXBseS5wdXQoInBlZXJzIiwgICAgICBwZWVyc0Jpbik7CisgICAgICAgIFN0cmluZyBpbmZvSGFzaEhleCA9IHRvSGV4KGluZm9IYXNoKTsKKyAgICAgICAgU3RyaW5nIHBlZXJLZXkgPSBidWlsZFBlZXJLZXkocGVlcklkKTsKKyAgICAgICAgU3RyaW5nIHNlZWRlclNldCA9IGJ1aWxkWlNldEtleShpbmZvSGFzaEhleCwgInNlZWRlcnMiKTsKKyAgICAgICAgU3RyaW5nIGxlZWNoZXJTZXQgPSBidWlsZFpTZXRLZXkoaW5mb0hhc2hIZXgsICJsZWVjaGVycyIpOwogCi0gICAgICAgIHJldHVybiByZXBseTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYnl0ZVtdIGVuY29kZUJlbmNvZGUoTWFwPFN0cmluZywgT2JqZWN0PiByZXBseSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgQmVuY29kZUVuY29kZXIgZW5jb2RlciA9IG5ldyBCZW5jb2RlRW5jb2RlcigpOwotICAgICAgICByZXR1cm4gZW5jb2Rlci5lbmNvZGVCZW5jb2RlKHJlcGx5KTsKLSAgICB9Ci0KLSAgICAvLyDigJTigJQg6L6F5Yqp5pa55rOVIOKAlOKAlCAvLwotCi0gICAgLyoqIOe7n+iuoSBsZWZ0ID09IDAg55qEIFNlZWRlciDmlbAgKi8KLSAgICBwcml2YXRlIGludCBjb3VudFNlZWRlcnMoU3RyaW5nIGluZm9IYXNoSGV4KSB7Ci0gICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAoU3RyaW5nIGtleSA6IHJlZGlzQ2FjaGUua2V5cygicGVlcjoiICsgaW5mb0hhc2hIZXggKyAiOioiKSkgewotICAgICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGRhdGEgPSAoTWFwPFN0cmluZywgT2JqZWN0PikgcmVkaXNDYWNoZS5nZXRDYWNoZU1hcChrZXkpOwotICAgICAgICAgICAgbG9uZyBsZWZ0ID0gKChOdW1iZXIpIGRhdGEuZ2V0KCJsZWZ0IikpLmxvbmdWYWx1ZSgpOwotICAgICAgICAgICAgaWYgKGxlZnQgPT0gMCkgY291bnQrKzsKKyAgICAgICAgaWYgKCJzdG9wcGVkIi5lcXVhbHMoZXZlbnQpKSB7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RvcEV2ZW50KHBlZXJLZXksIHNlZWRlclNldCwgbGVlY2hlclNldCwgcGFzc2tleSwgdXBsb2FkZWQsIGRvd25sb2FkZWQpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjb3VudDsKKworICAgICAgICBjYWNoZVBlZXJTdGF0ZShwZWVyS2V5LCB1cGxvYWRlZCwgZG93bmxvYWRlZCwgbGVmdCwgaXAsIHBvcnQpOworICAgICAgICB1cGRhdGVQZWVyUmFua2luZyhzZWVkZXJTZXQsIGxlZWNoZXJTZXQsIHBlZXJLZXksIGxlZnQgPT0gMCk7CisKKyAgICAgICAgTGlzdDxieXRlW10+IHBlZXJMaXN0ID0gc2VsZWN0UGVlcnMoc2VlZGVyU2V0LCBsZWVjaGVyU2V0LCBwZWVyS2V5LCBsZWZ0ID09IDApOworICAgICAgICBieXRlW10gcGVlcnNCaW5hcnkgPSBmbGF0dGVuUGVlcnMocGVlckxpc3QpOworCisgICAgICAgIHJldHVybiBidWlsZFJlc3BvbnNlKHNlZWRlclNldCwgbGVlY2hlclNldCwgcGVlcnNCaW5hcnkpOwogICAgIH0KIAotICAgIC8qKiDnu5/orqEgbGVmdCA+IDAg55qEIExlZWNoZXIg5pWwICovCi0gICAgcHJpdmF0ZSBpbnQgY291bnRMZWVjaGVycyhTdHJpbmcgaW5mb0hhc2hIZXgpIHsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgZm9yIChTdHJpbmcga2V5IDogcmVkaXNDYWNoZS5rZXlzKCJwZWVyOiIgKyBpbmZvSGFzaEhleCArICI6KiIpKSB7Ci0gICAgICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZGF0YSA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KSByZWRpc0NhY2hlLmdldENhY2hlTWFwKGtleSk7Ci0gICAgICAgICAgICBsb25nIGxlZnQgPSAoKE51bWJlcikgZGF0YS5nZXQoImxlZnQiKSkubG9uZ1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAobGVmdCA+IDApIGNvdW50Kys7CisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBPYmplY3Q+IGhhbmRsZVN0b3BFdmVudChTdHJpbmcgcGVlcktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzZWVkZXJTZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGVlY2hlclNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXNza2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1cGxvYWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG93bmxvYWRlZCkgeworICAgICAgICByZWRpc0NhY2hlLmRlbGV0ZU9iamVjdChwZWVyS2V5KTsKKyAgICAgICAgcmVkaXNDYWNoZS56UmVtb3ZlKHNlZWRlclNldCwgcGVlcktleSk7CisgICAgICAgIHJlZGlzQ2FjaGUuelJlbW92ZShsZWVjaGVyU2V0LCBwZWVyS2V5KTsKKworICAgICAgICBPcHRpb25hbDxMb25nPiB1c2VySWQgPSByZXNvbHZlVXNlcklkKHBhc3NrZXkpOworICAgICAgICB1c2VySWQuaWZQcmVzZW50KGlkIC0+IHVwZGF0ZVVzZXJTY29yZShpZCwgdXBsb2FkZWQsIGRvd25sb2FkZWQpKTsKKyAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNhY2hlUGVlclN0YXRlKFN0cmluZyBwZWVyS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVwbG9hZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRvd25sb2FkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCkgeworICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGRhdGEgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIGRhdGEucHV0KCJpcCIsIGlwKTsKKyAgICAgICAgZGF0YS5wdXQoInBvcnQiLCBTdHJpbmcudmFsdWVPZihwb3J0KSk7CisgICAgICAgIGRhdGEucHV0KCJ1cGxvYWRlZCIsIFN0cmluZy52YWx1ZU9mKHVwbG9hZGVkKSk7CisgICAgICAgIGRhdGEucHV0KCJkb3dubG9hZGVkIiwgU3RyaW5nLnZhbHVlT2YoZG93bmxvYWRlZCkpOworICAgICAgICBkYXRhLnB1dCgibGVmdCIsIFN0cmluZy52YWx1ZU9mKGxlZnQpKTsKKyAgICAgICAgZGF0YS5wdXQoImxhc3RTZWVuIiwgU3RyaW5nLnZhbHVlT2YoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpKTsKKworICAgICAgICByZWRpc0NhY2hlLnNldENhY2hlTWFwKHBlZXJLZXksIGRhdGEpOworICAgICAgICByZWRpc0NhY2hlLmV4cGlyZShwZWVyS2V5LCBQRUVSX0NBQ0hFX0RVUkFUSU9OX01JTiwgVGltZVVuaXQuTUlOVVRFUyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVBlZXJSYW5raW5nKFN0cmluZyBzZWVkZXJTZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsZWVjaGVyU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGVlcktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc1NlZWRlcikgeworICAgICAgICBTdHJpbmcgc291cmNlU2V0ID0gaXNTZWVkZXIgPyBsZWVjaGVyU2V0IDogc2VlZGVyU2V0OworICAgICAgICBTdHJpbmcgdGFyZ2V0U2V0ID0gaXNTZWVkZXIgPyBzZWVkZXJTZXQgOiBsZWVjaGVyU2V0OworCisgICAgICAgIHJlZGlzQ2FjaGUuelJlbW92ZShzb3VyY2VTZXQsIHBlZXJLZXkpOworICAgICAgICByZWRpc0NhY2hlLnpBZGQodGFyZ2V0U2V0LCBwZWVyS2V5LCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBMaXN0PGJ5dGVbXT4gc2VsZWN0UGVlcnMoU3RyaW5nIHNlZWRlclNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGVlY2hlclNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2VsZktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzU2VlZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBTZXQ8U3RyaW5nPiBjYW5kaWRhdGVzID0gbmV3IExpbmtlZEhhc2hTZXQ8PigpOworICAgICAgICBpZiAoaXNTZWVkZXIpIHsKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMuYWRkQWxsKHJlZGlzQ2FjaGUuelJhbmdlKGxlZWNoZXJTZXQsIDAsIE1BWF9MRUVDSEVSUykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2FuZGlkYXRlcy5hZGRBbGwoT3B0aW9uYWwub2ZOdWxsYWJsZShyZWRpc0NhY2hlLnpSYW5nZShzZWVkZXJTZXQsIDAsIE1BWF9TRUVERVJTKSkub3JFbHNlKENvbGxlY3Rpb25zLmVtcHR5U2V0KCkpKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMuYWRkQWxsKE9wdGlvbmFsLm9mTnVsbGFibGUocmVkaXNDYWNoZS56UmFuZ2UobGVlY2hlclNldCwgMCwgTUFYX0xFRUNIRVJTKSkub3JFbHNlKENvbGxlY3Rpb25zLmVtcHR5U2V0KCkpKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gY291bnQ7CisKKyAgICAgICAgTGlzdDxieXRlW10+IHBlZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGZvciAoU3RyaW5nIGNhbmRpZGF0ZUtleSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVLZXkuZXF1YWxzKHNlbGZLZXkpKSBjb250aW51ZTsKKyAgICAgICAgICAgIGNhY2hlUGVlckxldmVsOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gaW5mbyA9IHJlZGlzQ2FjaGUuZ2V0Q2FjaGVNYXAoY2FuZGlkYXRlS2V5KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGVlcklwID0gaW5mby5nZXQoImlwIik7CisgICAgICAgICAgICAgICAgU3RyaW5nIHBvcnRTdHIgPSBpbmZvLmdldCgicG9ydCIpOworICAgICAgICAgICAgICAgIGlmIChwZWVySXAgPT0gbnVsbCB8fCBwZWVySXAuY29udGFpbnMoIjoiKSB8fCBwb3J0U3RyID09IG51bGwpIGJyZWFrIGNhY2hlUGVlckxldmVsOworICAgICAgICAgICAgICAgIHBlZXJzLmFkZChlbmNvZGVQZWVyKHBlZXJJcCwgSW50ZWdlci5wYXJzZUludChwb3J0U3RyKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwZWVyczsKICAgICB9CiAKLSAgICAvKiog5bCGIElQdjQgKyBwb3J0IOe8lueggeaIkCA2IOWtl+iKgu+8mjQg5a2X6IqCIElQICsgMiDlrZfoioIgcG9ydCAqLwotICAgIHByaXZhdGUgYnl0ZVtdIGVuY29kZVBlZXIoU3RyaW5nIGlwLCBpbnQgcG9ydCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHJpdmF0ZSBieXRlW10gZmxhdHRlblBlZXJzKExpc3Q8Ynl0ZVtdPiBwZWVyTGlzdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IChCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpKSB7CisgICAgICAgICAgICBmb3IgKGJ5dGVbXSBwZWVyIDogcGVlckxpc3QpIHsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUocGVlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb3V0LnRvQnl0ZUFycmF5KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIE1hcDxTdHJpbmcsIE9iamVjdD4gYnVpbGRSZXNwb25zZShTdHJpbmcgc2VlZGVyU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsZWVjaGVyU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBwZWVyc0JpbmFyeSkgeworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoImludGVydmFsIiwgQU5OT1VOQ0VfSU5URVJWQUwpOworICAgICAgICByZXNwb25zZS5wdXQoIm1pbiBpbnRlcnZhbCIsIEFOTk9VTkNFX0lOVEVSVkFMIC8gMik7CisgICAgICAgIHJlc3BvbnNlLnB1dCgiY29tcGxldGUiLCBPcHRpb25hbC5vZk51bGxhYmxlKHJlZGlzQ2FjaGUuekNhcmQoc2VlZGVyU2V0KSkub3JFbHNlKDBMKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJpbmNvbXBsZXRlIiwgT3B0aW9uYWwub2ZOdWxsYWJsZShyZWRpc0NhY2hlLnpDYXJkKGxlZWNoZXJTZXQpKS5vckVsc2UoMEwpLmludFZhbHVlKCkpOworICAgICAgICByZXNwb25zZS5wdXQoInBlZXJzIiwgcGVlcnNCaW5hcnkpOworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgfQorCisgICAgcHJpdmF0ZSBPcHRpb25hbDxMb25nPiByZXNvbHZlVXNlcklkKFN0cmluZyBwYXNza2V5KSB7CisgICAgICAgIFN5c1VzZXJQYXNza2V5IGNyaXRlcmlhID0gbmV3IFN5c1VzZXJQYXNza2V5KHBhc3NrZXkpOworICAgICAgICBMaXN0PFN5c1VzZXJQYXNza2V5PiByZWNvcmRzID0gcGFzc2tleVNlcnZpY2Uuc2VsZWN0U3lzVXNlclBhc3NrZXlMaXN0KGNyaXRlcmlhKTsKKyAgICAgICAgcmV0dXJuIHJlY29yZHMuaXNFbXB0eSgpID8gT3B0aW9uYWwuZW1wdHkoKSA6IE9wdGlvbmFsLm9mKHJlY29yZHMuZ2V0KDApLmdldFVzZXJJZCgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlVXNlclNjb3JlKExvbmcgdXNlcklkLCBsb25nIHVwbG9hZGVkLCBsb25nIGRvd25sb2FkZWQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFVzZXJTY29yZSBleGlzdGluZyA9IHVzZXJTY29yZVNlcnZpY2Uuc2VsZWN0VXNlclNjb3JlQnlVc2VySWQodXNlcklkKTsKKyAgICAgICAgICAgIGJvb2xlYW4gaXNOZXcgPSBleGlzdGluZy5nZXRVc2VySWQoKSA9PSBudWxsOworICAgICAgICAgICAgbG9uZyB0b3RhbFVwbG9hZGVkID0gaXNOZXcgPyB1cGxvYWRlZCA6IHBhcnNlTG9uZyhleGlzdGluZy5nZXRVcGxvYWRlZCgpKSArIHVwbG9hZGVkOworICAgICAgICAgICAgbG9uZyB0b3RhbERvd25sb2FkZWQgPSBpc05ldyA/IGRvd25sb2FkZWQgOiBwYXJzZUxvbmcoZXhpc3RpbmcuZ2V0RG93bmxvYWRlZCgpKSArIGRvd25sb2FkZWQ7CisgICAgICAgICAgICBsb25nIGNvbWJpbmVkU2NvcmUgPSBjYWxjdWxhdGVXZWlnaHRlZFNjb3JlKHRvdGFsVXBsb2FkZWQsIHRvdGFsRG93bmxvYWRlZCk7CisKKyAgICAgICAgICAgIGV4aXN0aW5nLnNldFVzZXJJZCh1c2VySWQpOworICAgICAgICAgICAgZXhpc3Rpbmcuc2V0VXBsb2FkZWQoU3RyaW5nLnZhbHVlT2YodG90YWxVcGxvYWRlZCkpOworICAgICAgICAgICAgZXhpc3Rpbmcuc2V0RG93bmxvYWRlZChTdHJpbmcudmFsdWVPZih0b3RhbERvd25sb2FkZWQpKTsKKyAgICAgICAgICAgIGV4aXN0aW5nLnNldFNjb3JlKGNvbWJpbmVkU2NvcmUpOworICAgICAgICAgICAgZXhpc3Rpbmcuc2V0VXBkYXRlZEF0KG5ldyBEYXRlKCkpOworCisgICAgICAgICAgICBpZiAoaXNOZXcpIHsKKyAgICAgICAgICAgICAgICB1c2VyU2NvcmVTZXJ2aWNlLmluc2VydFVzZXJTY29yZShleGlzdGluZyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVzZXJTY29yZVNlcnZpY2UudXBkYXRlVXNlclNjb3JlKGV4aXN0aW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIExvZyBleGNlcHRpb24gcHJvcGVybHkgaW4gcHJvZHVjdGlvbiBjb2RlCisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkZhaWxlZCB0byB1cGRhdGUgdXNlciBzY29yZTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgbG9uZyBjYWxjdWxhdGVXZWlnaHRlZFNjb3JlKGxvbmcgdXBsb2FkZWQsIGxvbmcgZG93bmxvYWRlZCkgeworICAgICAgICByZXR1cm4gKHVwbG9hZGVkICogVVBMT0FEX1dFSUdIVCArIGRvd25sb2FkZWQgKiBET1dOTE9BRF9XRUlHSFQpIC8gKFVQTE9BRF9XRUlHSFQgKyBET1dOTE9BRF9XRUlHSFQpOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGJ1aWxkUGVlcktleShieXRlW10gcGVlcklkKSB7CisgICAgICAgIHJldHVybiAicGVlcjoiICsgbmV3IFN0cmluZyhwZWVySWQsIFN0YW5kYXJkQ2hhcnNldHMuSVNPXzg4NTlfMSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgYnVpbGRaU2V0S2V5KFN0cmluZyBpbmZvSGFzaEhleCwgU3RyaW5nIHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoInRvcnJlbnQ6JXM6JXMiLCBpbmZvSGFzaEhleCwgdHlwZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgdG9IZXgoYnl0ZVtdIGRhdGEpIHsKKyAgICAgICAgY2hhcltdIGhleCA9ICIwMTIzNDU2Nzg5YWJjZGVmIi50b0NoYXJBcnJheSgpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoZGF0YS5sZW5ndGggKiAyKTsKKyAgICAgICAgZm9yIChieXRlIGIgOiBkYXRhKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoaGV4WyhiID4+IDQpICYgMHhGXSkuYXBwZW5kKGhleFtiICYgMHhGXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5jb2RlIHBlZXIgYWRkcmVzcyBpbnRvIDYtYnl0ZSBjb21wYWN0IHJlcHJlc2VudGF0aW9uIGFzIHBlciBCRVAgMjMKKyAgICAgKi8KKyAgICBwcml2YXRlIGJ5dGVbXSBlbmNvZGVQZWVyKFN0cmluZyBpcCwgaW50IHBvcnQpIHsKICAgICAgICAgU3RyaW5nW10gcGFydHMgPSBpcC5zcGxpdCgiXFwuIik7Ci0gICAgICAgIEJ5dGVCdWZmZXIgYnVmID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZSg2KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgICAgICAgIGJ1Zi5wdXQoKGJ5dGUpIEludGVnZXIucGFyc2VJbnQocGFydHNbaV0pKTsKKyAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPSA0KSByZXR1cm4gbnVsbDsKKyAgICAgICAgQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKDYpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZm9yIChTdHJpbmcgcGFydCA6IHBhcnRzKSB7CisgICAgICAgICAgICAgICAgaW50IHNlZ21lbnQgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnQpOworICAgICAgICAgICAgICAgIGlmIChzZWdtZW50IDwgMCB8fCBzZWdtZW50ID4gMjU1KSByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICBidWZmZXIucHV0KChieXRlKSBzZWdtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlci5wdXRTaG9ydCgoc2hvcnQpIHBvcnQpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5hcnJheSgpOworICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgYnVmLnB1dFNob3J0KChzaG9ydCkgcG9ydCk7Ci0gICAgICAgIHJldHVybiBidWYuYXJyYXkoKTsKICAgICB9CiAKLSAgICAvKiog5bCG5a2X6IqC5pWw57uE6L2s5oiQ5Y2B5YWt6L+b5Yi25a2X56ym5LiyICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIEhFWCA9ICIwMTIzNDU2Nzg5YWJjZGVmIi50b0NoYXJBcnJheSgpOwotICAgIHByaXZhdGUgU3RyaW5nIGJ5dGVzVG9IZXgoYnl0ZVtdIGJ5dGVzKSB7Ci0gICAgICAgIGNoYXJbXSBjcyA9IG5ldyBjaGFyW2J5dGVzLmxlbmd0aCAqIDJdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgdiA9IGJ5dGVzW2ldICYgMHhGRjsKLSAgICAgICAgICAgIGNzW2kgKiAyXSAgICAgPSBIRVhbdiA+Pj4gNF07Ci0gICAgICAgICAgICBjc1tpICogMiArIDFdID0gSEVYW3YgJiAweDBGXTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBoYW5kbGVTY3JhcGUoU3RyaW5nW10gaW5mb0hhc2hlcykgeworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHN0YXRzID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBmb3IgKFN0cmluZyBoYXNoIDogaW5mb0hhc2hlcykgeworICAgICAgICAgICAgU3RyaW5nIGtleSA9IGhhc2gudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IGNvdW50TWFwID0gTWFwLm9mKAorICAgICAgICAgICAgICAgICAgICAiY29tcGxldGUiLCBnZXRaQ2FyZEFzSW50KGJ1aWxkWlNldEtleShrZXksICJzZWVkZXJzIikpLAorICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSIsIGdldFpDYXJkQXNJbnQoYnVpbGRaU2V0S2V5KGtleSwgImxlZWNoZXJzIikpLAorICAgICAgICAgICAgICAgICAgICAiZG93bmxvYWRlZCIsIDAKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBzdGF0cy5wdXQoaGFzaCwgY291bnRNYXApOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGNzKTsKKyAgICAgICAgcmV0dXJuIHN0YXRzOwogICAgIH0KLX0KKworICAgIC8qKgorICAgICAqIOafpeivouW9k+WJjeaJgOaciea0u+i3g+eahCBQZWVyIOiKgueCue+8jOWMheWQq+ivpue7huWtl+autQorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGhhbmRsZUhlYXJ0YmVhdCggU3RyaW5nIGlwKSB7CisgICAgICAgIC8vIOW7tumVv+ivpSBJUCDkuIvmiYDmnIkgcGVlciDnmoTnvJPlrZjmnInmlYjmnJ8KKyAgICAgICAgQ29sbGVjdGlvbjxTdHJpbmc+IGtleXMgPSByZWRpc0NhY2hlLmtleXMoInBlZXI6KiIpOworICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGRhdGEgPSByZWRpc0NhY2hlLmdldENhY2hlTWFwKGtleSk7CisgICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSBjb250aW51ZTsKKyAgICAgICAgICAgIFN0cmluZyBwZWVySXAgPSBkYXRhLmdldCgiaXAiKTsKKyAgICAgICAgICAgIGlmIChpcC5lcXVhbHMocGVlcklwKSkgeworICAgICAgICAgICAgICAgIHJlZGlzQ2FjaGUuZXhwaXJlKGtleSwgUEVFUl9DQUNIRV9EVVJBVElPTl9NSU4sIFRpbWVVbml0Lk1JTlVURVMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g5p6E6YCg5Z+65pys5ZON5bqU77yI5Y+v5qC55o2u6ZyA6KaB5omp5bGV77yJCisgICAgICAgIHJldHVybiBNYXAub2YoCisgICAgICAgICAgICAgICAgImludGVydmFsIiwgQU5OT1VOQ0VfSU5URVJWQUwsCisgICAgICAgICAgICAgICAgIm1pbiBpbnRlcnZhbCIsIEFOTk9VTkNFX0lOVEVSVkFMIC8gMiwKKyAgICAgICAgICAgICAgICAiY29tcGxldGUiLCBPcHRpb25hbC5vZk51bGxhYmxlKHJlZGlzQ2FjaGUuekNhcmQoInNvbWU6ZGVmYXVsdDp0b3JyZW50OnNlZWRlcnMiKSkub3JFbHNlKDBMKS5pbnRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIiwgT3B0aW9uYWwub2ZOdWxsYWJsZShyZWRpc0NhY2hlLnpDYXJkKCJzb21lOmRlZmF1bHQ6dG9ycmVudDpsZWVjaGVycyIpKS5vckVsc2UoMEwpLmludFZhbHVlKCksCisgICAgICAgICAgICAgICAgInBlZXJzIiwgbmV3IGJ5dGVbMF0KKyAgICAgICAgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDmn6Xor6LlvZPliY3miYDmnInmtLvot4PnmoQgUGVlciDoioLngrnvvIzljIXlkKvor6bnu4blrZfmrrUKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRBbGxQZWVycygpIHsKKyAgICAgICAgLy8gUmVkaXNDYWNoZS5rZXlzIOi/lOWbniBDb2xsZWN0aW9uPFN0cmluZz4KKyAgICAgICAgQ29sbGVjdGlvbjxTdHJpbmc+IGtleXMgPSByZWRpc0NhY2hlLmtleXMoInBlZXI6KiIpOworICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHBlZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGZvciAoU3RyaW5nIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZGF0YSA9IHJlZGlzQ2FjaGUuZ2V0Q2FjaGVNYXAoa2V5KTsKKyAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwgfHwgZGF0YS5pc0VtcHR5KCkpIGNvbnRpbnVlOworICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBpbmZvID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICAgICAgaW5mby5wdXQoInBlZXJLZXkiLCBrZXkpOworICAgICAgICAgICAgaW5mby5wdXQoImlwIiwgZGF0YS5nZXQoImlwIikpOworICAgICAgICAgICAgaW5mby5wdXQoInBvcnQiLCBkYXRhLmdldCgicG9ydCIpKTsKKyAgICAgICAgICAgIGluZm8ucHV0KCJ1cGxvYWRlZCIsIGRhdGEuZ2V0KCJ1cGxvYWRlZCIpKTsKKyAgICAgICAgICAgIGluZm8ucHV0KCJkb3dubG9hZGVkIiwgZGF0YS5nZXQoImRvd25sb2FkZWQiKSk7CisgICAgICAgICAgICBpbmZvLnB1dCgibGVmdCIsIGRhdGEuZ2V0KCJsZWZ0IikpOworICAgICAgICAgICAgaW5mby5wdXQoImxhc3RTZWVuIiwgZGF0YS5nZXQoImxhc3RTZWVuIikpOworICAgICAgICAgICAgcGVlcnMuYWRkKGluZm8pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwZWVyczsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVmcmVzaFBlZXJzRm9ySXAoU3RyaW5nIGlwKSB7CisgICAgICAgIHJlZGlzQ2FjaGUua2V5cygicGVlcjoqIikuc3RyZWFtKCkKKyAgICAgICAgICAgICAgICAuZmlsdGVyKGtleSAtPiBpcC5lcXVhbHMocmVkaXNDYWNoZS5nZXRDYWNoZU1hcChrZXkpLmdldCgiaXAiKSkpCisgICAgICAgICAgICAgICAgLmZvckVhY2goa2V5IC0+IHJlZGlzQ2FjaGUuZXhwaXJlKGtleSwgUEVFUl9DQUNIRV9EVVJBVElPTl9NSU4sIFRpbWVVbml0Lk1JTlVURVMpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIExpc3Q8Ynl0ZVtdPiBzZWxlY3RQZWVyQnl0ZXMoU2V0PFN0cmluZz4gcGVlcnMpIHsKKyAgICAgICAgTGlzdDxieXRlW10+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgZm9yIChTdHJpbmcgcGVlcklkIDogcGVlcnMpIHsKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZGF0YSA9IHJlZGlzQ2FjaGUuZ2V0Q2FjaGVNYXAoInBlZXI6IiArIHBlZXJJZCk7CisgICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSBjb250aW51ZTsKKyAgICAgICAgICAgIFN0cmluZyBpcCA9IGRhdGEuZ2V0KCJpcCIpOworICAgICAgICAgICAgU3RyaW5nIHBvcnQgPSBkYXRhLmdldCgicG9ydCIpOworICAgICAgICAgICAgaWYgKGlwID09IG51bGwgfHwgaXAuY29udGFpbnMoIjoiKSkgY29udGludWU7CisgICAgICAgICAgICBsaXN0LmFkZChlbmNvZGVQZWVyKGlwLCBJbnRlZ2VyLnBhcnNlSW50KHBvcnQpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBPYmplY3Q+IGJ1aWxkUmVzcG9uc2UoaW50IGluY29tcGxldGUsIGJ5dGVbXSBwZWVycykgeworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworICAgICAgICByZXNwb25zZS5wdXQoImludGVydmFsIiwgQU5OT1VOQ0VfSU5URVJWQUwpOworICAgICAgICByZXNwb25zZS5wdXQoIm1pbiBpbnRlcnZhbCIsIEFOTk9VTkNFX0lOVEVSVkFMIC8gMik7CisgICAgICAgIHJlc3BvbnNlLnB1dCgiY29tcGxldGUiLCAwKTsKKyAgICAgICAgcmVzcG9uc2UucHV0KCJpbmNvbXBsZXRlIiwgaW5jb21wbGV0ZSk7CisgICAgICAgIHJlc3BvbnNlLnB1dCgicGVlcnMiLCBwZWVycyk7CisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBnZXRaQ2FyZEFzSW50KFN0cmluZyB6c2V0S2V5KSB7CisgICAgICAgIExvbmcgY291bnQgPSByZWRpc0NhY2hlLnpDYXJkKHpzZXRLZXkpOworICAgICAgICByZXR1cm4gT3B0aW9uYWwub2ZOdWxsYWJsZShjb3VudCkub3JFbHNlKDBMKS5pbnRWYWx1ZSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hbm5vdW5jZS91dGlsL0JlbmNvZGVFbmNvZGVyLmphdmEgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hbm5vdW5jZS91dGlsL0JlbmNvZGVFbmNvZGVyLmphdmEKaW5kZXggYTJjZGIzMC4uNDRkY2Y2YSAxMDA2NDQKLS0tIGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYW5ub3VuY2UvdXRpbC9CZW5jb2RlRW5jb2Rlci5qYXZhCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2Fubm91bmNlL3V0aWwvQmVuY29kZUVuY29kZXIuamF2YQpAQCAtMSw5ICsxLDEyIEBACiBwYWNrYWdlIGNvbS5ydW95aS5hbm5vdW5jZS51dGlsOwogCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7CisKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwotCitAU2VydmljZQogcHVibGljIGNsYXNzIEJlbmNvZGVFbmNvZGVyIHsKIAogICAgIHB1YmxpYyBieXRlW10gZW5jb2RlQmVuY29kZShNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcGx5KSB0aHJvd3MgSU9FeGNlcHRpb24gewpAQCAtMzIsMTEgKzM1LDIwIEBACiAgICAgICAgICAgICBlbmNvZGVNYXAoKE1hcDxTdHJpbmcsIE9iamVjdD4pIG9iaiwgb3V0cHV0U3RyZWFtKTsKICAgICAgICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJdGVyYWJsZSkgewogICAgICAgICAgICAgZW5jb2RlTGlzdCgoSXRlcmFibGU8T2JqZWN0Pikgb2JqLCBvdXRwdXRTdHJlYW0pOworICAgICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIGJ5dGVbXSkgeworICAgICAgICAgICAgZW5jb2RlQnl0ZUFycmF5KChieXRlW10pIG9iaiwgb3V0cHV0U3RyZWFtKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3VwcG9ydGVkIG9iamVjdCB0eXBlOiAiICsgb2JqLmdldENsYXNzKCkpOwogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIGVuY29kZUJ5dGVBcnJheShieXRlW10gYnl0ZXMsIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZShJbnRlZ2VyLnRvU3RyaW5nKGJ5dGVzLmxlbmd0aCkuZ2V0Qnl0ZXMoKSk7CisgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZSgnOicpOworICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoYnl0ZXMpOworICAgIH0KKworCiAgICAgcHJpdmF0ZSB2b2lkIGVuY29kZUludGVnZXIoSW50ZWdlciB2YWx1ZSwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKCdpJyk7CiAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZSh2YWx1ZS50b1N0cmluZygpLmdldEJ5dGVzKCkpOwpAQCAtNDQsMTEgKzU2LDEzIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGVuY29kZVN0cmluZyhTdHJpbmcgdmFsdWUsIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIG91dHB1dFN0cmVhbS53cml0ZShJbnRlZ2VyLnRvU3RyaW5nKHZhbHVlLmxlbmd0aCgpKS5nZXRCeXRlcygpKTsKKyAgICAgICAgYnl0ZVtdIGJ5dGVzID0gdmFsdWUuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCk7IC8vIEFzc3VtaW5nIFVURi04IGVuY29kaW5nCisgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZShJbnRlZ2VyLnRvU3RyaW5nKGJ5dGVzLmxlbmd0aCkuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZSgnOicpOwotICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUodmFsdWUuZ2V0Qnl0ZXMoKSk7CisgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZShieXRlcyk7CiAgICAgfQogCisKICAgICBwcml2YXRlIHZvaWQgZW5jb2RlTGlzdChJdGVyYWJsZTxPYmplY3Q+IGxpc3QsIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZSgnbCcpOyAvLyBTdGFydCBvZiBhIGxpc3QKIApkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vY29udHJvbGxlci9TeXNVc2VyUGFzc2tleUNvbnRyb2xsZXIuamF2YSBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL2NvbnRyb2xsZXIvU3lzVXNlclBhc3NrZXlDb250cm9sbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlYTQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL2NvbnRyb2xsZXIvU3lzVXNlclBhc3NrZXlDb250cm9sbGVyLmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2UgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLmNvbnRyb2xsZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5kb21haW4uU3lzVXNlclBhc3NrZXk7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmFjY2Vzcy5wcmVwb3N0LlByZUF1dGhvcml6ZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLkdldE1hcHBpbmc7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlBvc3RNYXBwaW5nOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5QdXRNYXBwaW5nOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5EZWxldGVNYXBwaW5nOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5QYXRoVmFyaWFibGU7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RCb2R5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXF1ZXN0TWFwcGluZzsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVzdENvbnRyb2xsZXI7CitpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi5hbm5vdGF0aW9uLkxvZzsKK2ltcG9ydCBjb20ucnVveWkuY29tbW9uLmNvcmUuY29udHJvbGxlci5CYXNlQ29udHJvbGxlcjsKK2ltcG9ydCBjb20ucnVveWkuY29tbW9uLmNvcmUuZG9tYWluLkFqYXhSZXN1bHQ7CitpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi5lbnVtcy5CdXNpbmVzc1R5cGU7CitpbXBvcnQgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLnNlcnZpY2UuSVN5c1VzZXJQYXNza2V5U2VydmljZTsKK2ltcG9ydCBjb20ucnVveWkuY29tbW9uLnV0aWxzLnBvaS5FeGNlbFV0aWw7CitpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi5jb3JlLnBhZ2UuVGFibGVEYXRhSW5mbzsKKworLyoqCisgKiDjgJDor7floavlhpnlip/og73lkI3np7DjgJFDb250cm9sbGVyCisgKiAKKyAqIEBhdXRob3IgcnVveWkKKyAqIEBkYXRlIDIwMjUtMDQtMjUKKyAqLworQFJlc3RDb250cm9sbGVyCitAUmVxdWVzdE1hcHBpbmcoIi9zeXN0ZW0vcGFzc2tleSIpCitwdWJsaWMgY2xhc3MgU3lzVXNlclBhc3NrZXlDb250cm9sbGVyIGV4dGVuZHMgQmFzZUNvbnRyb2xsZXIKK3sKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBJU3lzVXNlclBhc3NrZXlTZXJ2aWNlIHN5c1VzZXJQYXNza2V5U2VydmljZTsKKworICAgIC8qKgorICAgICAqIOafpeivouOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeWIl+ihqAorICAgICAqLworICAgIEBQcmVBdXRob3JpemUoIkBzcy5oYXNQZXJtaSgnc3lzdGVtOnBhc3NrZXk6bGlzdCcpIikKKyAgICBAR2V0TWFwcGluZygiL2xpc3QiKQorICAgIHB1YmxpYyBUYWJsZURhdGFJbmZvIGxpc3QoU3lzVXNlclBhc3NrZXkgc3lzVXNlclBhc3NrZXkpCisgICAgeworICAgICAgICBzdGFydFBhZ2UoKTsKKyAgICAgICAgTGlzdDxTeXNVc2VyUGFzc2tleT4gbGlzdCA9IHN5c1VzZXJQYXNza2V5U2VydmljZS5zZWxlY3RTeXNVc2VyUGFzc2tleUxpc3Qoc3lzVXNlclBhc3NrZXkpOworICAgICAgICByZXR1cm4gZ2V0RGF0YVRhYmxlKGxpc3QpOworICAgIH0KKworICAgIC8qKgorICAgICAqIOWvvOWHuuOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeWIl+ihqAorICAgICAqLworICAgIEBQcmVBdXRob3JpemUoIkBzcy5oYXNQZXJtaSgnc3lzdGVtOnBhc3NrZXk6ZXhwb3J0JykiKQorICAgIEBMb2codGl0bGUgPSAi44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRIiwgYnVzaW5lc3NUeXBlID0gQnVzaW5lc3NUeXBlLkVYUE9SVCkKKyAgICBAUG9zdE1hcHBpbmcoIi9leHBvcnQiKQorICAgIHB1YmxpYyB2b2lkIGV4cG9ydChIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBTeXNVc2VyUGFzc2tleSBzeXNVc2VyUGFzc2tleSkKKyAgICB7CisgICAgICAgIExpc3Q8U3lzVXNlclBhc3NrZXk+IGxpc3QgPSBzeXNVc2VyUGFzc2tleVNlcnZpY2Uuc2VsZWN0U3lzVXNlclBhc3NrZXlMaXN0KHN5c1VzZXJQYXNza2V5KTsKKyAgICAgICAgRXhjZWxVdGlsPFN5c1VzZXJQYXNza2V5PiB1dGlsID0gbmV3IEV4Y2VsVXRpbDxTeXNVc2VyUGFzc2tleT4oU3lzVXNlclBhc3NrZXkuY2xhc3MpOworICAgICAgICB1dGlsLmV4cG9ydEV4Y2VsKHJlc3BvbnNlLCBsaXN0LCAi44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5pWw5o2uIik7CisgICAgfQorCisgICAgLyoqCisgICAgICog6I635Y+W44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR6K+m57uG5L+h5oGvCisgICAgICovCisgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06cGFzc2tleTpxdWVyeScpIikKKyAgICBAR2V0TWFwcGluZyh2YWx1ZSA9ICIve3VzZXJJZH0iKQorICAgIHB1YmxpYyBBamF4UmVzdWx0IGdldEluZm8oQFBhdGhWYXJpYWJsZSgidXNlcklkIikgTG9uZyB1c2VySWQpCisgICAgeworICAgICAgICByZXR1cm4gc3VjY2VzcyhzeXNVc2VyUGFzc2tleVNlcnZpY2Uuc2VsZWN0U3lzVXNlclBhc3NrZXlCeVVzZXJJZCh1c2VySWQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDmlrDlop7jgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKi8KKyAgICBAUHJlQXV0aG9yaXplKCJAc3MuaGFzUGVybWkoJ3N5c3RlbTpwYXNza2V5OmFkZCcpIikKKyAgICBATG9nKHRpdGxlID0gIuOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkSIsIGJ1c2luZXNzVHlwZSA9IEJ1c2luZXNzVHlwZS5JTlNFUlQpCisgICAgQFBvc3RNYXBwaW5nCisgICAgcHVibGljIEFqYXhSZXN1bHQgYWRkKEBSZXF1ZXN0Qm9keSBTeXNVc2VyUGFzc2tleSBzeXNVc2VyUGFzc2tleSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0FqYXgoc3lzVXNlclBhc3NrZXlTZXJ2aWNlLmluc2VydFN5c1VzZXJQYXNza2V5KHN5c1VzZXJQYXNza2V5KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog5L+u5pS544CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICovCisgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06cGFzc2tleTplZGl0JykiKQorICAgIEBMb2codGl0bGUgPSAi44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRIiwgYnVzaW5lc3NUeXBlID0gQnVzaW5lc3NUeXBlLlVQREFURSkKKyAgICBAUHV0TWFwcGluZworICAgIHB1YmxpYyBBamF4UmVzdWx0IGVkaXQoQFJlcXVlc3RCb2R5IFN5c1VzZXJQYXNza2V5IHN5c1VzZXJQYXNza2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvQWpheChzeXNVc2VyUGFzc2tleVNlcnZpY2UudXBkYXRlU3lzVXNlclBhc3NrZXkoc3lzVXNlclBhc3NrZXkpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDliKDpmaTjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKi8KKyAgICBAUHJlQXV0aG9yaXplKCJAc3MuaGFzUGVybWkoJ3N5c3RlbTpwYXNza2V5OnJlbW92ZScpIikKKyAgICBATG9nKHRpdGxlID0gIuOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkSIsIGJ1c2luZXNzVHlwZSA9IEJ1c2luZXNzVHlwZS5ERUxFVEUpCisJQERlbGV0ZU1hcHBpbmcoIi97dXNlcklkc30iKQorICAgIHB1YmxpYyBBamF4UmVzdWx0IHJlbW92ZShAUGF0aFZhcmlhYmxlIExvbmdbXSB1c2VySWRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvQWpheChzeXNVc2VyUGFzc2tleVNlcnZpY2UuZGVsZXRlU3lzVXNlclBhc3NrZXlCeVVzZXJJZHModXNlcklkcykpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL2NvbnRyb2xsZXIvVXNlclNjb3JlQ29udHJvbGxlci5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vY29udHJvbGxlci9Vc2VyU2NvcmVDb250cm9sbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiOTExOQotLS0gL2Rldi9udWxsCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL2NvbnRyb2xsZXIvVXNlclNjb3JlQ29udHJvbGxlci5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5jb250cm9sbGVyOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBjb20ucnVveWkuYXV0aGVudGljYXRpb24uZG9tYWluLlVzZXJTY29yZTsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuYWNjZXNzLnByZXBvc3QuUHJlQXV0aG9yaXplOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uR2V0TWFwcGluZzsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUG9zdE1hcHBpbmc7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlB1dE1hcHBpbmc7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLkRlbGV0ZU1hcHBpbmc7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlBhdGhWYXJpYWJsZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdEJvZHk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNYXBwaW5nOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXN0Q29udHJvbGxlcjsKK2ltcG9ydCBjb20ucnVveWkuY29tbW9uLmFubm90YXRpb24uTG9nOworaW1wb3J0IGNvbS5ydW95aS5jb21tb24uY29yZS5jb250cm9sbGVyLkJhc2VDb250cm9sbGVyOworaW1wb3J0IGNvbS5ydW95aS5jb21tb24uY29yZS5kb21haW4uQWpheFJlc3VsdDsKK2ltcG9ydCBjb20ucnVveWkuY29tbW9uLmVudW1zLkJ1c2luZXNzVHlwZTsKK2ltcG9ydCBjb20ucnVveWkuYXV0aGVudGljYXRpb24uc2VydmljZS5JVXNlclNjb3JlU2VydmljZTsKK2ltcG9ydCBjb20ucnVveWkuY29tbW9uLnV0aWxzLnBvaS5FeGNlbFV0aWw7CitpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi5jb3JlLnBhZ2UuVGFibGVEYXRhSW5mbzsKKworLyoqCisgKiDjgJDor7floavlhpnlip/og73lkI3np7DjgJFDb250cm9sbGVyCisgKiAKKyAqIEBhdXRob3IgcnVveWkKKyAqIEBkYXRlIDIwMjUtMDQtMjUKKyAqLworQFJlc3RDb250cm9sbGVyCitAUmVxdWVzdE1hcHBpbmcoIi9zeXN0ZW0vc2NvcmUiKQorcHVibGljIGNsYXNzIFVzZXJTY29yZUNvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlQ29udHJvbGxlcgoreworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIElVc2VyU2NvcmVTZXJ2aWNlIHVzZXJTY29yZVNlcnZpY2U7CisKKyAgICAvKioKKyAgICAgKiDmn6Xor6LjgJDor7floavlhpnlip/og73lkI3np7DjgJHliJfooagKKyAgICAgKi8KKyAgICBAUHJlQXV0aG9yaXplKCJAc3MuaGFzUGVybWkoJ3N5c3RlbTpzY29yZTpsaXN0JykiKQorICAgIEBHZXRNYXBwaW5nKCIvbGlzdCIpCisgICAgcHVibGljIFRhYmxlRGF0YUluZm8gbGlzdChVc2VyU2NvcmUgdXNlclNjb3JlKQorICAgIHsKKyAgICAgICAgc3RhcnRQYWdlKCk7CisgICAgICAgIExpc3Q8VXNlclNjb3JlPiBsaXN0ID0gdXNlclNjb3JlU2VydmljZS5zZWxlY3RVc2VyU2NvcmVMaXN0KHVzZXJTY29yZSk7CisgICAgICAgIHJldHVybiBnZXREYXRhVGFibGUobGlzdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICog5a+85Ye644CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5YiX6KGoCisgICAgICovCisgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06c2NvcmU6ZXhwb3J0JykiKQorICAgIEBMb2codGl0bGUgPSAi44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRIiwgYnVzaW5lc3NUeXBlID0gQnVzaW5lc3NUeXBlLkVYUE9SVCkKKyAgICBAUG9zdE1hcHBpbmcoIi9leHBvcnQiKQorICAgIHB1YmxpYyB2b2lkIGV4cG9ydChIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBVc2VyU2NvcmUgdXNlclNjb3JlKQorICAgIHsKKyAgICAgICAgTGlzdDxVc2VyU2NvcmU+IGxpc3QgPSB1c2VyU2NvcmVTZXJ2aWNlLnNlbGVjdFVzZXJTY29yZUxpc3QodXNlclNjb3JlKTsKKyAgICAgICAgRXhjZWxVdGlsPFVzZXJTY29yZT4gdXRpbCA9IG5ldyBFeGNlbFV0aWw8VXNlclNjb3JlPihVc2VyU2NvcmUuY2xhc3MpOworICAgICAgICB1dGlsLmV4cG9ydEV4Y2VsKHJlc3BvbnNlLCBsaXN0LCAi44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5pWw5o2uIik7CisgICAgfQorCisgICAgLyoqCisgICAgICog6I635Y+W44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR6K+m57uG5L+h5oGvCisgICAgICovCisgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06c2NvcmU6cXVlcnknKSIpCisgICAgQEdldE1hcHBpbmcodmFsdWUgPSAiL3t1c2VySWR9IikKKyAgICBwdWJsaWMgQWpheFJlc3VsdCBnZXRJbmZvKEBQYXRoVmFyaWFibGUoInVzZXJJZCIpIExvbmcgdXNlcklkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3ModXNlclNjb3JlU2VydmljZS5zZWxlY3RVc2VyU2NvcmVCeVVzZXJJZCh1c2VySWQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDmlrDlop7jgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKi8KKyAgICBAUHJlQXV0aG9yaXplKCJAc3MuaGFzUGVybWkoJ3N5c3RlbTpzY29yZTphZGQnKSIpCisgICAgQExvZyh0aXRsZSA9ICLjgJDor7floavlhpnlip/og73lkI3np7DjgJEiLCBidXNpbmVzc1R5cGUgPSBCdXNpbmVzc1R5cGUuSU5TRVJUKQorICAgIEBQb3N0TWFwcGluZworICAgIHB1YmxpYyBBamF4UmVzdWx0IGFkZChAUmVxdWVzdEJvZHkgVXNlclNjb3JlIHVzZXJTY29yZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0FqYXgodXNlclNjb3JlU2VydmljZS5pbnNlcnRVc2VyU2NvcmUodXNlclNjb3JlKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog5L+u5pS544CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICovCisgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06c2NvcmU6ZWRpdCcpIikKKyAgICBATG9nKHRpdGxlID0gIuOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkSIsIGJ1c2luZXNzVHlwZSA9IEJ1c2luZXNzVHlwZS5VUERBVEUpCisgICAgQFB1dE1hcHBpbmcKKyAgICBwdWJsaWMgQWpheFJlc3VsdCBlZGl0KEBSZXF1ZXN0Qm9keSBVc2VyU2NvcmUgdXNlclNjb3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvQWpheCh1c2VyU2NvcmVTZXJ2aWNlLnVwZGF0ZVVzZXJTY29yZSh1c2VyU2NvcmUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDliKDpmaTjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKi8KKyAgICBAUHJlQXV0aG9yaXplKCJAc3MuaGFzUGVybWkoJ3N5c3RlbTpzY29yZTpyZW1vdmUnKSIpCisgICAgQExvZyh0aXRsZSA9ICLjgJDor7floavlhpnlip/og73lkI3np7DjgJEiLCBidXNpbmVzc1R5cGUgPSBCdXNpbmVzc1R5cGUuREVMRVRFKQorCUBEZWxldGVNYXBwaW5nKCIve3VzZXJJZHN9IikKKyAgICBwdWJsaWMgQWpheFJlc3VsdCByZW1vdmUoQFBhdGhWYXJpYWJsZSBMb25nW10gdXNlcklkcykKKyAgICB7CisgICAgICAgIHJldHVybiB0b0FqYXgodXNlclNjb3JlU2VydmljZS5kZWxldGVVc2VyU2NvcmVCeVVzZXJJZHModXNlcklkcykpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL2RvbWFpbi9TeXNVc2VyUGFzc2tleS5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vZG9tYWluL1N5c1VzZXJQYXNza2V5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3MGM3NwotLS0gL2Rldi9udWxsCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL2RvbWFpbi9TeXNVc2VyUGFzc2tleS5qYXZhCkBAIC0wLDAgKzEsNzEgQEAKK3BhY2thZ2UgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLmRvbWFpbjsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25Gb3JtYXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmJ1aWxkZXIuVG9TdHJpbmdCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5idWlsZGVyLlRvU3RyaW5nU3R5bGU7CitpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi5hbm5vdGF0aW9uLkV4Y2VsOworaW1wb3J0IGNvbS5ydW95aS5jb21tb24uY29yZS5kb21haW4uQmFzZUVudGl0eTsKKworLyoqCisgKiDjgJDor7floavlhpnlip/og73lkI3np7DjgJHlr7nosaEgc3lzX3VzZXJfcGFzc2tleQorICogCisgKiBAYXV0aG9yIHJ1b3lpCisgKiBAZGF0ZSAyMDI1LTA0LTI1CisgKi8KK3B1YmxpYyBjbGFzcyBTeXNVc2VyUGFzc2tleSBleHRlbmRzIEJhc2VFbnRpdHkKK3sKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKworICAgIHB1YmxpYyBTeXNVc2VyUGFzc2tleShTdHJpbmcgcGFzc2tleSl7CisgICAgICAgIHRoaXMucGFzc2tleSA9IHBhc3NrZXk7CisgICAgfQorCisgICAgLyoqICRjb2x1bW4uY29sdW1uQ29tbWVudCAqLworICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7CisKKyAgICAvKiogJGNvbHVtbi5jb2x1bW5Db21tZW50ICovCisgICAgQEV4Y2VsKG5hbWUgPSAiJHtjb21tZW50fSIsIHJlYWRDb252ZXJ0ZXJFeHAgPSAiJGNvbHVtbi5yZWFkQ29udmVydGVyRXhwKCkiKQorICAgIHByaXZhdGUgU3RyaW5nIHBhc3NrZXk7CisKKyAgICAvKiogJGNvbHVtbi5jb2x1bW5Db21tZW50ICovCisgICAgQEV4Y2VsKG5hbWUgPSAiJHtjb21tZW50fSIsIHJlYWRDb252ZXJ0ZXJFeHAgPSAiJGNvbHVtbi5yZWFkQ29udmVydGVyRXhwKCkiKQorICAgIHByaXZhdGUgRGF0ZSBjcmVhdGVkQXQ7CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIAorICAgIHsKKyAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7CisgICAgfQorCisgICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgCisgICAgeworICAgICAgICByZXR1cm4gdXNlcklkOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRQYXNza2V5KFN0cmluZyBwYXNza2V5KSAKKyAgICB7CisgICAgICAgIHRoaXMucGFzc2tleSA9IHBhc3NrZXk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRQYXNza2V5KCkgCisgICAgeworICAgICAgICByZXR1cm4gcGFzc2tleTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0Q3JlYXRlZEF0KERhdGUgY3JlYXRlZEF0KSAKKyAgICB7CisgICAgICAgIHRoaXMuY3JlYXRlZEF0ID0gY3JlYXRlZEF0OworICAgIH0KKworICAgIHB1YmxpYyBEYXRlIGdldENyZWF0ZWRBdCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZWRBdDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gbmV3IFRvU3RyaW5nQnVpbGRlcih0aGlzLFRvU3RyaW5nU3R5bGUuTVVMVElfTElORV9TVFlMRSkKKyAgICAgICAgICAgIC5hcHBlbmQoInVzZXJJZCIsIGdldFVzZXJJZCgpKQorICAgICAgICAgICAgLmFwcGVuZCgicGFzc2tleSIsIGdldFBhc3NrZXkoKSkKKyAgICAgICAgICAgIC5hcHBlbmQoImNyZWF0ZWRBdCIsIGdldENyZWF0ZWRBdCgpKQorICAgICAgICAgICAgLnRvU3RyaW5nKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vZG9tYWluL1VzZXJTY29yZS5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vZG9tYWluL1VzZXJTY29yZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDQ5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hdXRoZW50aWNhdGlvbi9kb21haW4vVXNlclNjb3JlLmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3BhY2thZ2UgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLmRvbWFpbjsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25Gb3JtYXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmJ1aWxkZXIuVG9TdHJpbmdCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5idWlsZGVyLlRvU3RyaW5nU3R5bGU7CitpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi5hbm5vdGF0aW9uLkV4Y2VsOworaW1wb3J0IGNvbS5ydW95aS5jb21tb24uY29yZS5kb21haW4uQmFzZUVudGl0eTsKKworLyoqCisgKiDjgJDor7floavlhpnlip/og73lkI3np7DjgJHlr7nosaEgdXNlcl9zY29yZQorICogCisgKiBAYXV0aG9yIHJ1b3lpCisgKiBAZGF0ZSAyMDI1LTA0LTI1CisgKi8KK3B1YmxpYyBjbGFzcyBVc2VyU2NvcmUgZXh0ZW5kcyBCYXNlRW50aXR5Cit7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisKKyAgICAvKiogJGNvbHVtbi5jb2x1bW5Db21tZW50ICovCisgICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKKworICAgIC8qKiAkY29sdW1uLmNvbHVtbkNvbW1lbnQgKi8KKyAgICBARXhjZWwobmFtZSA9ICIke2NvbW1lbnR9IiwgcmVhZENvbnZlcnRlckV4cCA9ICIkY29sdW1uLnJlYWRDb252ZXJ0ZXJFeHAoKSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgdXBsb2FkZWQ7CisKKyAgICAvKiogJGNvbHVtbi5jb2x1bW5Db21tZW50ICovCisgICAgQEV4Y2VsKG5hbWUgPSAiJHtjb21tZW50fSIsIHJlYWRDb252ZXJ0ZXJFeHAgPSAiJGNvbHVtbi5yZWFkQ29udmVydGVyRXhwKCkiKQorICAgIHByaXZhdGUgU3RyaW5nIGRvd25sb2FkZWQ7CisKKyAgICAvKiogJGNvbHVtbi5jb2x1bW5Db21tZW50ICovCisgICAgQEV4Y2VsKG5hbWUgPSAiJHtjb21tZW50fSIsIHJlYWRDb252ZXJ0ZXJFeHAgPSAiJGNvbHVtbi5yZWFkQ29udmVydGVyRXhwKCkiKQorICAgIHByaXZhdGUgTG9uZyBib251czsKKworICAgIC8qKiAkY29sdW1uLmNvbHVtbkNvbW1lbnQgKi8KKyAgICBARXhjZWwobmFtZSA9ICIke2NvbW1lbnR9IiwgcmVhZENvbnZlcnRlckV4cCA9ICIkY29sdW1uLnJlYWRDb252ZXJ0ZXJFeHAoKSIpCisgICAgcHJpdmF0ZSBMb25nIHNjb3JlOworCisgICAgLyoqICRjb2x1bW4uY29sdW1uQ29tbWVudCAqLworICAgIEBFeGNlbChuYW1lID0gIiR7Y29tbWVudH0iLCByZWFkQ29udmVydGVyRXhwID0gIiRjb2x1bW4ucmVhZENvbnZlcnRlckV4cCgpIikKKyAgICBwcml2YXRlIERhdGUgdXBkYXRlZEF0OworCisgICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSAKKyAgICB7CisgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgIH0KKworICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIHVzZXJJZDsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0VXBsb2FkZWQoU3RyaW5nIHVwbG9hZGVkKSAKKyAgICB7CisgICAgICAgIHRoaXMudXBsb2FkZWQgPSB1cGxvYWRlZDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFVwbG9hZGVkKCkgCisgICAgeworICAgICAgICByZXR1cm4gdXBsb2FkZWQ7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldERvd25sb2FkZWQoU3RyaW5nIGRvd25sb2FkZWQpIAorICAgIHsKKyAgICAgICAgdGhpcy5kb3dubG9hZGVkID0gZG93bmxvYWRlZDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldERvd25sb2FkZWQoKSAKKyAgICB7CisgICAgICAgIHJldHVybiBkb3dubG9hZGVkOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRCb251cyhMb25nIGJvbnVzKSAKKyAgICB7CisgICAgICAgIHRoaXMuYm9udXMgPSBib251czsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRCb251cygpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJvbnVzOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRTY29yZShMb25nIHNjb3JlKSAKKyAgICB7CisgICAgICAgIHRoaXMuc2NvcmUgPSBzY29yZTsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRTY29yZSgpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNjb3JlOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRVcGRhdGVkQXQoRGF0ZSB1cGRhdGVkQXQpIAorICAgIHsKKyAgICAgICAgdGhpcy51cGRhdGVkQXQgPSB1cGRhdGVkQXQ7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0VXBkYXRlZEF0KCkgCisgICAgeworICAgICAgICByZXR1cm4gdXBkYXRlZEF0OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBuZXcgVG9TdHJpbmdCdWlsZGVyKHRoaXMsVG9TdHJpbmdTdHlsZS5NVUxUSV9MSU5FX1NUWUxFKQorICAgICAgICAgICAgLmFwcGVuZCgidXNlcklkIiwgZ2V0VXNlcklkKCkpCisgICAgICAgICAgICAuYXBwZW5kKCJ1cGxvYWRlZCIsIGdldFVwbG9hZGVkKCkpCisgICAgICAgICAgICAuYXBwZW5kKCJkb3dubG9hZGVkIiwgZ2V0RG93bmxvYWRlZCgpKQorICAgICAgICAgICAgLmFwcGVuZCgiYm9udXMiLCBnZXRCb251cygpKQorICAgICAgICAgICAgLmFwcGVuZCgic2NvcmUiLCBnZXRTY29yZSgpKQorICAgICAgICAgICAgLmFwcGVuZCgidXBkYXRlZEF0IiwgZ2V0VXBkYXRlZEF0KCkpCisgICAgICAgICAgICAudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hdXRoZW50aWNhdGlvbi9tYXBwZXIvU3lzVXNlclBhc3NrZXlNYXBwZXIuamF2YSBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL21hcHBlci9TeXNVc2VyUGFzc2tleU1hcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDdjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hdXRoZW50aWNhdGlvbi9tYXBwZXIvU3lzVXNlclBhc3NrZXlNYXBwZXIuamF2YQpAQCAtMCwwICsxLDYxIEBACitwYWNrYWdlIGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5tYXBwZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBjb20ucnVveWkuYXV0aGVudGljYXRpb24uZG9tYWluLlN5c1VzZXJQYXNza2V5OworCisvKioKKyAqIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkU1hcHBlcuaOpeWPoworICogCisgKiBAYXV0aG9yIHJ1b3lpCisgKiBAZGF0ZSAyMDI1LTA0LTI1CisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3lzVXNlclBhc3NrZXlNYXBwZXIgCit7CisgICAgLyoqCisgICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqLworICAgIHB1YmxpYyBTeXNVc2VyUGFzc2tleSBzZWxlY3RTeXNVc2VyUGFzc2tleUJ5VXNlcklkKExvbmcgdXNlcklkKTsKKworICAgIC8qKgorICAgICAqIOafpeivouOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeWIl+ihqAorICAgICAqIAorICAgICAqIEBwYXJhbSBzeXNVc2VyUGFzc2tleSDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkembhuWQiAorICAgICAqLworICAgIHB1YmxpYyBMaXN0PFN5c1VzZXJQYXNza2V5PiBzZWxlY3RTeXNVc2VyUGFzc2tleUxpc3QoU3lzVXNlclBhc3NrZXkgc3lzVXNlclBhc3NrZXkpOworCisgICAgLyoqCisgICAgICog5paw5aKe44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogCisgICAgICogQHBhcmFtIHN5c1VzZXJQYXNza2V5IOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIEByZXR1cm4g57uT5p6cCisgICAgICovCisgICAgcHVibGljIGludCBpbnNlcnRTeXNVc2VyUGFzc2tleShTeXNVc2VyUGFzc2tleSBzeXNVc2VyUGFzc2tleSk7CisKKyAgICAvKioKKyAgICAgKiDkv67mlLnjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gc3lzVXNlclBhc3NrZXkg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHVwZGF0ZVN5c1VzZXJQYXNza2V5KFN5c1VzZXJQYXNza2V5IHN5c1VzZXJQYXNza2V5KTsKKworICAgIC8qKgorICAgICAqIOWIoOmZpOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIAorICAgICAqIEBwYXJhbSB1c2VySWQg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5Li76ZSuCisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGRlbGV0ZVN5c1VzZXJQYXNza2V5QnlVc2VySWQoTG9uZyB1c2VySWQpOworCisgICAgLyoqCisgICAgICog5om56YeP5Yig6Zmk44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJJZHMg6ZyA6KaB5Yig6Zmk55qE5pWw5o2u5Li76ZSu6ZuG5ZCICisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGRlbGV0ZVN5c1VzZXJQYXNza2V5QnlVc2VySWRzKExvbmdbXSB1c2VySWRzKTsKK30KZGlmZiAtLWdpdCBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL21hcHBlci9Vc2VyU2NvcmVNYXBwZXIuamF2YSBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL21hcHBlci9Vc2VyU2NvcmVNYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE1ZTVlCi0tLSAvZGV2L251bGwKKysrIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vbWFwcGVyL1VzZXJTY29yZU1hcHBlci5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2UgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLm1hcHBlcjsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5kb21haW4uVXNlclNjb3JlOworCisvKioKKyAqIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkU1hcHBlcuaOpeWPoworICogCisgKiBAYXV0aG9yIHJ1b3lpCisgKiBAZGF0ZSAyMDI1LTA0LTI1CisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVXNlclNjb3JlTWFwcGVyIAoreworICAgIC8qKgorICAgICAqIOafpeivouOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIAorICAgICAqIEBwYXJhbSB1c2VySWQg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5Li76ZSuCisgICAgICogQHJldHVybiDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKi8KKyAgICBwdWJsaWMgVXNlclNjb3JlIHNlbGVjdFVzZXJTY29yZUJ5VXNlcklkKExvbmcgdXNlcklkKTsKKworICAgIC8qKgorICAgICAqIOafpeivouOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeWIl+ihqAorICAgICAqIAorICAgICAqIEBwYXJhbSB1c2VyU2NvcmUg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogQHJldHVybiDjgJDor7floavlhpnlip/og73lkI3np7DjgJHpm4blkIgKKyAgICAgKi8KKyAgICBwdWJsaWMgTGlzdDxVc2VyU2NvcmU+IHNlbGVjdFVzZXJTY29yZUxpc3QoVXNlclNjb3JlIHVzZXJTY29yZSk7CisKKyAgICAvKioKKyAgICAgKiDmlrDlop7jgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdXNlclNjb3JlIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIEByZXR1cm4g57uT5p6cCisgICAgICovCisgICAgcHVibGljIGludCBpbnNlcnRVc2VyU2NvcmUoVXNlclNjb3JlIHVzZXJTY29yZSk7CisKKyAgICAvKioKKyAgICAgKiDkv67mlLnjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdXNlclNjb3JlIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIEByZXR1cm4g57uT5p6cCisgICAgICovCisgICAgcHVibGljIGludCB1cGRhdGVVc2VyU2NvcmUoVXNlclNjb3JlIHVzZXJTY29yZSk7CisKKyAgICAvKioKKyAgICAgKiDliKDpmaTjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdXNlcklkIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS4u+mUrgorICAgICAqIEByZXR1cm4g57uT5p6cCisgICAgICovCisgICAgcHVibGljIGludCBkZWxldGVVc2VyU2NvcmVCeVVzZXJJZChMb25nIHVzZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiDmibnph4/liKDpmaTjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdXNlcklkcyDpnIDopoHliKDpmaTnmoTmlbDmja7kuLvplK7pm4blkIgKKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZGVsZXRlVXNlclNjb3JlQnlVc2VySWRzKExvbmdbXSB1c2VySWRzKTsKK30KZGlmZiAtLWdpdCBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL3NlcnZpY2UvSVN5c1VzZXJQYXNza2V5U2VydmljZS5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vc2VydmljZS9JU3lzVXNlclBhc3NrZXlTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlMGVjNgotLS0gL2Rldi9udWxsCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL3NlcnZpY2UvSVN5c1VzZXJQYXNza2V5U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKK3BhY2thZ2UgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLnNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5kb21haW4uU3lzVXNlclBhc3NrZXk7CisKKy8qKgorICog44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRU2VydmljZeaOpeWPoworICogCisgKiBAYXV0aG9yIHJ1b3lpCisgKiBAZGF0ZSAyMDI1LTA0LTI1CisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVN5c1VzZXJQYXNza2V5U2VydmljZSAKK3sKKyAgICAvKioKKyAgICAgKiDmn6Xor6LjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdXNlcklkIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS4u+mUrgorICAgICAqIEByZXR1cm4g44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICovCisgICAgcHVibGljIFN5c1VzZXJQYXNza2V5IHNlbGVjdFN5c1VzZXJQYXNza2V5QnlVc2VySWQoTG9uZyB1c2VySWQpOworCisgICAgLyoqCisgICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5YiX6KGoCisgICAgICogCisgICAgICogQHBhcmFtIHN5c1VzZXJQYXNza2V5IOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIEByZXR1cm4g44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR6ZuG5ZCICisgICAgICovCisgICAgcHVibGljIExpc3Q8U3lzVXNlclBhc3NrZXk+IHNlbGVjdFN5c1VzZXJQYXNza2V5TGlzdChTeXNVc2VyUGFzc2tleSBzeXNVc2VyUGFzc2tleSk7CisKKyAgICAvKioKKyAgICAgKiDmlrDlop7jgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gc3lzVXNlclBhc3NrZXkg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGluc2VydFN5c1VzZXJQYXNza2V5KFN5c1VzZXJQYXNza2V5IHN5c1VzZXJQYXNza2V5KTsKKworICAgIC8qKgorICAgICAqIOS/ruaUueOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIAorICAgICAqIEBwYXJhbSBzeXNVc2VyUGFzc2tleSDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIHB1YmxpYyBpbnQgdXBkYXRlU3lzVXNlclBhc3NrZXkoU3lzVXNlclBhc3NrZXkgc3lzVXNlclBhc3NrZXkpOworCisgICAgLyoqCisgICAgICog5om56YeP5Yig6Zmk44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJJZHMg6ZyA6KaB5Yig6Zmk55qE44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5Li76ZSu6ZuG5ZCICisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGRlbGV0ZVN5c1VzZXJQYXNza2V5QnlVc2VySWRzKExvbmdbXSB1c2VySWRzKTsKKworICAgIC8qKgorICAgICAqIOWIoOmZpOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS/oeaBrworICAgICAqIAorICAgICAqIEBwYXJhbSB1c2VySWQg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5Li76ZSuCisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGRlbGV0ZVN5c1VzZXJQYXNza2V5QnlVc2VySWQoTG9uZyB1c2VySWQpOworfQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vc2VydmljZS9JVXNlclNjb3JlU2VydmljZS5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vc2VydmljZS9JVXNlclNjb3JlU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2U0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hdXRoZW50aWNhdGlvbi9zZXJ2aWNlL0lVc2VyU2NvcmVTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBjb20ucnVveWkuYXV0aGVudGljYXRpb24uc2VydmljZTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLmRvbWFpbi5Vc2VyU2NvcmU7CisKKy8qKgorICog44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRU2VydmljZeaOpeWPoworICogCisgKiBAYXV0aG9yIHJ1b3lpCisgKiBAZGF0ZSAyMDI1LTA0LTI1CisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVVzZXJTY29yZVNlcnZpY2UgCit7CisgICAgLyoqCisgICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqLworICAgIHB1YmxpYyBVc2VyU2NvcmUgc2VsZWN0VXNlclNjb3JlQnlVc2VySWQoTG9uZyB1c2VySWQpOworCisgICAgLyoqCisgICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5YiX6KGoCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJTY29yZSDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkembhuWQiAorICAgICAqLworICAgIHB1YmxpYyBMaXN0PFVzZXJTY29yZT4gc2VsZWN0VXNlclNjb3JlTGlzdChVc2VyU2NvcmUgdXNlclNjb3JlKTsKKworICAgIC8qKgorICAgICAqIOaWsOWinuOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIAorICAgICAqIEBwYXJhbSB1c2VyU2NvcmUg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGluc2VydFVzZXJTY29yZShVc2VyU2NvcmUgdXNlclNjb3JlKTsKKworICAgIC8qKgorICAgICAqIOS/ruaUueOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIAorICAgICAqIEBwYXJhbSB1c2VyU2NvcmUg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHVwZGF0ZVVzZXJTY29yZShVc2VyU2NvcmUgdXNlclNjb3JlKTsKKworICAgIC8qKgorICAgICAqIOaJuemHj+WIoOmZpOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIAorICAgICAqIEBwYXJhbSB1c2VySWRzIOmcgOimgeWIoOmZpOeahOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS4u+mUrumbhuWQiAorICAgICAqIEByZXR1cm4g57uT5p6cCisgICAgICovCisgICAgcHVibGljIGludCBkZWxldGVVc2VyU2NvcmVCeVVzZXJJZHMoTG9uZ1tdIHVzZXJJZHMpOworCisgICAgLyoqCisgICAgICog5Yig6Zmk44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5L+h5oGvCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZGVsZXRlVXNlclNjb3JlQnlVc2VySWQoTG9uZyB1c2VySWQpOworfQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vc2VydmljZS9pbXBsL1N5c1VzZXJQYXNza2V5U2VydmljZUltcGwuamF2YSBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL3NlcnZpY2UvaW1wbC9TeXNVc2VyUGFzc2tleVNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwOTFlNQotLS0gL2Rldi9udWxsCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2F1dGhlbnRpY2F0aW9uL3NlcnZpY2UvaW1wbC9TeXNVc2VyUGFzc2tleVNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSw5NCBAQAorcGFja2FnZSBjb20ucnVveWkuYXV0aGVudGljYXRpb24uc2VydmljZS5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBjb20ucnVveWkuYXV0aGVudGljYXRpb24uZG9tYWluLlN5c1VzZXJQYXNza2V5OworaW1wb3J0IGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5tYXBwZXIuU3lzVXNlclBhc3NrZXlNYXBwZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworaW1wb3J0IGNvbS5ydW95aS5hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLklTeXNVc2VyUGFzc2tleVNlcnZpY2U7CisKKy8qKgorICog44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRU2VydmljZeS4muWKoeWxguWkhOeQhgorICogCisgKiBAYXV0aG9yIHJ1b3lpCisgKiBAZGF0ZSAyMDI1LTA0LTI1CisgKi8KK0BTZXJ2aWNlCitwdWJsaWMgY2xhc3MgU3lzVXNlclBhc3NrZXlTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIElTeXNVc2VyUGFzc2tleVNlcnZpY2UgCit7CisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgU3lzVXNlclBhc3NrZXlNYXBwZXIgc3lzVXNlclBhc3NrZXlNYXBwZXI7CisKKyAgICAvKioKKyAgICAgKiDmn6Xor6LjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdXNlcklkIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS4u+mUrgorICAgICAqIEByZXR1cm4g44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN5c1VzZXJQYXNza2V5IHNlbGVjdFN5c1VzZXJQYXNza2V5QnlVc2VySWQoTG9uZyB1c2VySWQpCisgICAgeworICAgICAgICByZXR1cm4gc3lzVXNlclBhc3NrZXlNYXBwZXIuc2VsZWN0U3lzVXNlclBhc3NrZXlCeVVzZXJJZCh1c2VySWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIOafpeivouOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeWIl+ihqAorICAgICAqIAorICAgICAqIEBwYXJhbSBzeXNVc2VyUGFzc2tleSDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBMaXN0PFN5c1VzZXJQYXNza2V5PiBzZWxlY3RTeXNVc2VyUGFzc2tleUxpc3QoU3lzVXNlclBhc3NrZXkgc3lzVXNlclBhc3NrZXkpCisgICAgeworICAgICAgICByZXR1cm4gc3lzVXNlclBhc3NrZXlNYXBwZXIuc2VsZWN0U3lzVXNlclBhc3NrZXlMaXN0KHN5c1VzZXJQYXNza2V5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDmlrDlop7jgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gc3lzVXNlclBhc3NrZXkg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGluc2VydFN5c1VzZXJQYXNza2V5KFN5c1VzZXJQYXNza2V5IHN5c1VzZXJQYXNza2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN5c1VzZXJQYXNza2V5TWFwcGVyLmluc2VydFN5c1VzZXJQYXNza2V5KHN5c1VzZXJQYXNza2V5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDkv67mlLnjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gc3lzVXNlclBhc3NrZXkg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IHVwZGF0ZVN5c1VzZXJQYXNza2V5KFN5c1VzZXJQYXNza2V5IHN5c1VzZXJQYXNza2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN5c1VzZXJQYXNza2V5TWFwcGVyLnVwZGF0ZVN5c1VzZXJQYXNza2V5KHN5c1VzZXJQYXNza2V5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDmibnph4/liKDpmaTjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdXNlcklkcyDpnIDopoHliKDpmaTnmoTjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZGVsZXRlU3lzVXNlclBhc3NrZXlCeVVzZXJJZHMoTG9uZ1tdIHVzZXJJZHMpCisgICAgeworICAgICAgICByZXR1cm4gc3lzVXNlclBhc3NrZXlNYXBwZXIuZGVsZXRlU3lzVXNlclBhc3NrZXlCeVVzZXJJZHModXNlcklkcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICog5Yig6Zmk44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5L+h5oGvCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZGVsZXRlU3lzVXNlclBhc3NrZXlCeVVzZXJJZChMb25nIHVzZXJJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBzeXNVc2VyUGFzc2tleU1hcHBlci5kZWxldGVTeXNVc2VyUGFzc2tleUJ5VXNlcklkKHVzZXJJZCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vc2VydmljZS9pbXBsL1VzZXJTY29yZVNlcnZpY2VJbXBsLmphdmEgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9hdXRoZW50aWNhdGlvbi9zZXJ2aWNlL2ltcGwvVXNlclNjb3JlU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTQxOTIzCi0tLSAvZGV2L251bGwKKysrIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvYXV0aGVudGljYXRpb24vc2VydmljZS9pbXBsL1VzZXJTY29yZVNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSw5NCBAQAorcGFja2FnZSBjb20ucnVveWkuYXV0aGVudGljYXRpb24uc2VydmljZS5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBjb20ucnVveWkuYXV0aGVudGljYXRpb24uZG9tYWluLlVzZXJTY29yZTsKK2ltcG9ydCBjb20ucnVveWkuYXV0aGVudGljYXRpb24ubWFwcGVyLlVzZXJTY29yZU1hcHBlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7CitpbXBvcnQgY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLnNlcnZpY2UuSVVzZXJTY29yZVNlcnZpY2U7CisKKy8qKgorICog44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRU2VydmljZeS4muWKoeWxguWkhOeQhgorICogCisgKiBAYXV0aG9yIHJ1b3lpCisgKiBAZGF0ZSAyMDI1LTA0LTI1CisgKi8KK0BTZXJ2aWNlCitwdWJsaWMgY2xhc3MgVXNlclNjb3JlU2VydmljZUltcGwgaW1wbGVtZW50cyBJVXNlclNjb3JlU2VydmljZSAKK3sKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyU2NvcmVNYXBwZXIgdXNlclNjb3JlTWFwcGVyOworCisgICAgLyoqCisgICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBVc2VyU2NvcmUgc2VsZWN0VXNlclNjb3JlQnlVc2VySWQoTG9uZyB1c2VySWQpCisgICAgeworICAgICAgICByZXR1cm4gdXNlclNjb3JlTWFwcGVyLnNlbGVjdFVzZXJTY29yZUJ5VXNlcklkKHVzZXJJZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5YiX6KGoCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJTY29yZSDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBMaXN0PFVzZXJTY29yZT4gc2VsZWN0VXNlclNjb3JlTGlzdChVc2VyU2NvcmUgdXNlclNjb3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVzZXJTY29yZU1hcHBlci5zZWxlY3RVc2VyU2NvcmVMaXN0KHVzZXJTY29yZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog5paw5aKe44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJTY29yZSDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgaW5zZXJ0VXNlclNjb3JlKFVzZXJTY29yZSB1c2VyU2NvcmUpCisgICAgeworICAgICAgICByZXR1cm4gdXNlclNjb3JlTWFwcGVyLmluc2VydFVzZXJTY29yZSh1c2VyU2NvcmUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIOS/ruaUueOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIAorICAgICAqIEBwYXJhbSB1c2VyU2NvcmUg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICogQHJldHVybiDnu5PmnpwKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IHVwZGF0ZVVzZXJTY29yZShVc2VyU2NvcmUgdXNlclNjb3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVzZXJTY29yZU1hcHBlci51cGRhdGVVc2VyU2NvcmUodXNlclNjb3JlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDmibnph4/liKDpmaTjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdXNlcklkcyDpnIDopoHliKDpmaTnmoTjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZGVsZXRlVXNlclNjb3JlQnlVc2VySWRzKExvbmdbXSB1c2VySWRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVzZXJTY29yZU1hcHBlci5kZWxldGVVc2VyU2NvcmVCeVVzZXJJZHModXNlcklkcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICog5Yig6Zmk44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5L+h5oGvCisgICAgICogCisgICAgICogQHBhcmFtIHVzZXJJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZGVsZXRlVXNlclNjb3JlQnlVc2VySWQoTG9uZyB1c2VySWQpCisgICAgeworICAgICAgICByZXR1cm4gdXNlclNjb3JlTWFwcGVyLmRlbGV0ZVVzZXJTY29yZUJ5VXNlcklkKHVzZXJJZCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvcmV3YXJkL2NvbnRyb2xsZXIvUmV3YXJkVGFza3NDb250cm9sbGVyLmphdmEgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvY29udHJvbGxlci9SZXdhcmRUYXNrc0NvbnRyb2xsZXIuamF2YQppbmRleCBiYWU0OTlhLi41MjYzMzA5IDEwMDY0NAotLS0gYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvY29udHJvbGxlci9SZXdhcmRUYXNrc0NvbnRyb2xsZXIuamF2YQorKysgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvY29udHJvbGxlci9SZXdhcmRUYXNrc0NvbnRyb2xsZXIuamF2YQpAQCAtMSw5ICsxLDE0IEBACiBwYWNrYWdlIGNvbS5ydW95aS5yZXdhcmQuY29udHJvbGxlcjsKIAoraW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5VVUlEOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hY2Nlc3MucHJlcG9zdC5QcmVBdXRob3JpemU7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsudHJhbnNhY3Rpb24uYW5ub3RhdGlvbi5UcmFuc2FjdGlvbmFsOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5HZXRNYXBwaW5nOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5Qb3N0TWFwcGluZzsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUHV0TWFwcGluZzsKQEAgLTEyLDE4ICsxNywzNCBAQAogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXF1ZXN0Qm9keTsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdE1hcHBpbmc7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlc3RDb250cm9sbGVyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXF1ZXN0UGFyYW07CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7CiBpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi5hbm5vdGF0aW9uLkxvZzsKIGltcG9ydCBjb20ucnVveWkuY29tbW9uLmNvcmUuY29udHJvbGxlci5CYXNlQ29udHJvbGxlcjsKIGltcG9ydCBjb20ucnVveWkuY29tbW9uLmNvcmUuZG9tYWluLkFqYXhSZXN1bHQ7CiBpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi5lbnVtcy5CdXNpbmVzc1R5cGU7CiBpbXBvcnQgY29tLnJ1b3lpLnJld2FyZC5kb21haW4uUmV3YXJkVGFza3M7CiBpbXBvcnQgY29tLnJ1b3lpLnJld2FyZC5zZXJ2aWNlLklSZXdhcmRUYXNrc1NlcnZpY2U7CitpbXBvcnQgY29tLnJ1b3lpLnRvcnJlbnQuZG9tYWluLkJ0VG9ycmVudDsKK2ltcG9ydCBjb20ucnVveWkudG9ycmVudC5kb21haW4uQnRUb3JyZW50QW5ub3VuY2U7CitpbXBvcnQgY29tLnJ1b3lpLnRvcnJlbnQuZG9tYWluLkJ0VG9ycmVudEZpbGU7CitpbXBvcnQgY29tLnJ1b3lpLnRvcnJlbnQuc2VydmljZS5JQnRUb3JyZW50U2VydmljZTsKK2ltcG9ydCBjb20ucnVveWkudG9ycmVudC5zZXJ2aWNlLklCdFRvcnJlbnRGaWxlU2VydmljZTsKK2ltcG9ydCBjb20ucnVveWkudG9ycmVudC5zZXJ2aWNlLklCdFRvcnJlbnRBbm5vdW5jZVNlcnZpY2U7CitpbXBvcnQgY29tLnJ1b3lpLnRvcnJlbnQudXRpbC5Ub3JyZW50RmlsZVV0aWw7CitpbXBvcnQgY29tLnJ1b3lpLmNvbW1vbi51dGlscy5TZWN1cml0eVV0aWxzOwogaW1wb3J0IGNvbS5ydW95aS5jb21tb24udXRpbHMucG9pLkV4Y2VsVXRpbDsKIGltcG9ydCBjb20ucnVveWkuY29tbW9uLmNvcmUucGFnZS5UYWJsZURhdGFJbmZvOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLnR5cGUuVHlwZVJlZmVyZW5jZTsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOworaW1wb3J0IGphdmEubmV0LlVSTDsKIAogLyoqCi0gKiDjgJDor7floavlhpnlip/og73lkI3np7DjgJFDb250cm9sbGVyCi0gKiAKKyAqIOaCrOi1j+S7u+WKoeaOp+WItuWZqAorICoKICAqIEBhdXRob3IgcnVveWkKICAqIEBkYXRlIDIwMjUtMDUtMTcKICAqLwpAQCAtMzQsOCArNTUsMjEgQEAKICAgICBAQXV0b3dpcmVkCiAgICAgcHJpdmF0ZSBJUmV3YXJkVGFza3NTZXJ2aWNlIHJld2FyZFRhc2tzU2VydmljZTsKIAorICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIElCdFRvcnJlbnRTZXJ2aWNlIGJ0VG9ycmVudFNlcnZpY2U7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBJQnRUb3JyZW50RmlsZVNlcnZpY2UgYnRUb3JyZW50RmlsZVNlcnZpY2U7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBJQnRUb3JyZW50QW5ub3VuY2VTZXJ2aWNlIGJ0VG9ycmVudEFubm91bmNlU2VydmljZTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGTEFTS19VUkwgPSAiaHR0cDovLzQ5LjIzMy4yMTUuMTQ0OjUwMDAvcGFyc2VfdG9ycmVudCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPUlJFTlRfUEFUSCA9ICJ0b3JyZW50cyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJPVU5EQVJZID0gIi0tLS1XZWJLaXRGb3JtQm91bmRhcnkiICsgVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKS5yZXBsYWNlKCItIiwgIiIpOworCiAgICAgLyoqCi0gICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5YiX6KGoCisgICAgICog5p+l6K+i5oKs6LWP5Lu75Yqh5YiX6KGoCiAgICAgICovCiAgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06dGFza3M6bGlzdCcpIikKICAgICBAR2V0TWFwcGluZygiL2xpc3QiKQpAQCAtNDcsMjAgKzgxLDIwIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICog5a+85Ye644CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5YiX6KGoCisgICAgICog5a+85Ye65oKs6LWP5Lu75Yqh5YiX6KGoCiAgICAgICovCiAgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06dGFza3M6ZXhwb3J0JykiKQotICAgIEBMb2codGl0bGUgPSAi44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRIiwgYnVzaW5lc3NUeXBlID0gQnVzaW5lc3NUeXBlLkVYUE9SVCkKKyAgICBATG9nKHRpdGxlID0gIuaCrOi1j+S7u+WKoSIsIGJ1c2luZXNzVHlwZSA9IEJ1c2luZXNzVHlwZS5FWFBPUlQpCiAgICAgQFBvc3RNYXBwaW5nKCIvZXhwb3J0IikKICAgICBwdWJsaWMgdm9pZCBleHBvcnQoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgUmV3YXJkVGFza3MgcmV3YXJkVGFza3MpCiAgICAgewogICAgICAgICBMaXN0PFJld2FyZFRhc2tzPiBsaXN0ID0gcmV3YXJkVGFza3NTZXJ2aWNlLnNlbGVjdFJld2FyZFRhc2tzTGlzdChyZXdhcmRUYXNrcyk7CiAgICAgICAgIEV4Y2VsVXRpbDxSZXdhcmRUYXNrcz4gdXRpbCA9IG5ldyBFeGNlbFV0aWw8UmV3YXJkVGFza3M+KFJld2FyZFRhc2tzLmNsYXNzKTsKLSAgICAgICAgdXRpbC5leHBvcnRFeGNlbChyZXNwb25zZSwgbGlzdCwgIuOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeaVsOaNriIpOworICAgICAgICB1dGlsLmV4cG9ydEV4Y2VsKHJlc3BvbnNlLCBsaXN0LCAi5oKs6LWP5Lu75Yqh5pWw5o2uIik7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICog6I635Y+W44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR6K+m57uG5L+h5oGvCisgICAgICog6I635Y+W5oKs6LWP5Lu75Yqh6K+m57uG5L+h5oGvCiAgICAgICovCiAgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06dGFza3M6cXVlcnknKSIpCiAgICAgQEdldE1hcHBpbmcodmFsdWUgPSAiL3tyZXdhcmRJZH0iKQpAQCAtNzAsMTAgKzEwNCwxMCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIOaWsOWinuOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIOaWsOWinuaCrOi1j+S7u+WKoQogICAgICAqLwogICAgIEBQcmVBdXRob3JpemUoIkBzcy5oYXNQZXJtaSgnc3lzdGVtOnRhc2tzOmFkZCcpIikKLSAgICBATG9nKHRpdGxlID0gIuOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkSIsIGJ1c2luZXNzVHlwZSA9IEJ1c2luZXNzVHlwZS5JTlNFUlQpCisgICAgQExvZyh0aXRsZSA9ICLmgqzotY/ku7vliqEiLCBidXNpbmVzc1R5cGUgPSBCdXNpbmVzc1R5cGUuSU5TRVJUKQogICAgIEBQb3N0TWFwcGluZwogICAgIHB1YmxpYyBBamF4UmVzdWx0IGFkZChAUmVxdWVzdEJvZHkgUmV3YXJkVGFza3MgcmV3YXJkVGFza3MpCiAgICAgewpAQCAtODEsMTAgKzExNSwxMCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIOS/ruaUueOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIOS/ruaUueaCrOi1j+S7u+WKoQogICAgICAqLwogICAgIEBQcmVBdXRob3JpemUoIkBzcy5oYXNQZXJtaSgnc3lzdGVtOnRhc2tzOmVkaXQnKSIpCi0gICAgQExvZyh0aXRsZSA9ICLjgJDor7floavlhpnlip/og73lkI3np7DjgJEiLCBidXNpbmVzc1R5cGUgPSBCdXNpbmVzc1R5cGUuVVBEQVRFKQorICAgIEBMb2codGl0bGUgPSAi5oKs6LWP5Lu75YqhIiwgYnVzaW5lc3NUeXBlID0gQnVzaW5lc3NUeXBlLlVQREFURSkKICAgICBAUHV0TWFwcGluZwogICAgIHB1YmxpYyBBamF4UmVzdWx0IGVkaXQoQFJlcXVlc3RCb2R5IFJld2FyZFRhc2tzIHJld2FyZFRhc2tzKQogICAgIHsKQEAgLTkyLDEzICsxMjYsMTU0IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICog5Yig6Zmk44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICog5Yig6Zmk5oKs6LWP5Lu75YqhCiAgICAgICovCiAgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06dGFza3M6cmVtb3ZlJykiKQotICAgIEBMb2codGl0bGUgPSAi44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRIiwgYnVzaW5lc3NUeXBlID0gQnVzaW5lc3NUeXBlLkRFTEVURSkKLQlARGVsZXRlTWFwcGluZygiL3tyZXdhcmRJZHN9IikKKyAgICBATG9nKHRpdGxlID0gIuaCrOi1j+S7u+WKoSIsIGJ1c2luZXNzVHlwZSA9IEJ1c2luZXNzVHlwZS5ERUxFVEUpCisgICAgQERlbGV0ZU1hcHBpbmcoIi97cmV3YXJkSWRzfSIpCiAgICAgcHVibGljIEFqYXhSZXN1bHQgcmVtb3ZlKEBQYXRoVmFyaWFibGUgTG9uZ1tdIHJld2FyZElkcykKICAgICB7CiAgICAgICAgIHJldHVybiB0b0FqYXgocmV3YXJkVGFza3NTZXJ2aWNlLmRlbGV0ZVJld2FyZFRhc2tzQnlSZXdhcmRJZHMocmV3YXJkSWRzKSk7CiAgICAgfQotfQorCisgICAgLyoqCisgICAgICog5qC55o2u5oKs6LWPSUTojrflj5ZUb3JyZW50IElECisgICAgICovCisgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06dGFza3M6cXVlcnknKSIpCisgICAgQEdldE1hcHBpbmcoIi9idC97cmV3YXJkSWR9IikKKyAgICBwdWJsaWMgQWpheFJlc3VsdCBnZXRSZXdhcmRCdChAUGF0aFZhcmlhYmxlKCJyZXdhcmRJZCIpIEludGVnZXIgcmV3YXJkSWQpCisgICAgeworICAgICAgICBJbnRlZ2VyIHJld2FyZEJ0ID0gcmV3YXJkVGFza3NTZXJ2aWNlLnNlbGVjdFJld2FyZEJ0QnlSZXdhcmRJZChyZXdhcmRJZCk7CisgICAgICAgIGlmIChyZXdhcmRCdCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoIuacquaJvuWIsOWvueW6lOeahCB0b3JyZW50IElEIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MocmV3YXJkQnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIOS4iuS8oOenjeWtkOaWh+S7tuW5tuWFs+iBlOaCrOi1j+S7u+WKoQorICAgICAqLworICAgIEBQcmVBdXRob3JpemUoIkBzcy5oYXNQZXJtaSgnc3lzdGVtOnRhc2tzOmVkaXQnKSIpCisgICAgQExvZyh0aXRsZSA9ICLmgqzotY/ku7vliqHnp43lrZDkuIrkvKAiLCBidXNpbmVzc1R5cGUgPSBCdXNpbmVzc1R5cGUuSU5TRVJUKQorICAgIEBQb3N0TWFwcGluZygiL3VwbG9hZFRvcnJlbnQiKQorICAgIEBUcmFuc2FjdGlvbmFsCisgICAgcHVibGljIEFqYXhSZXN1bHQgdXBsb2FkVG9ycmVudChAUmVxdWVzdFBhcmFtKCJmaWxlIikgTXVsdGlwYXJ0RmlsZSBmaWxlLCBAUmVxdWVzdFBhcmFtKCJyZXdhcmRfaWQiKSBJbnRlZ2VyIHJld2FyZElkKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIOmqjOivgeaWh+S7tuexu+WeiworICAgICAgICAgICAgaWYgKCFmaWxlLmdldE9yaWdpbmFsRmlsZW5hbWUoKS5lbmRzV2l0aCgiLnRvcnJlbnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBBamF4UmVzdWx0LmVycm9yKCLku4XmlK/mjIEgLnRvcnJlbnQg5paH5Lu2Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIOmqjOivgSByZXdhcmRfaWQKKyAgICAgICAgICAgIFJld2FyZFRhc2tzIHRhc2sgPSByZXdhcmRUYXNrc1NlcnZpY2Uuc2VsZWN0UmV3YXJkVGFza3NCeVJld2FyZElkKHJld2FyZElkLmxvbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgIGlmICh0YXNrID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQWpheFJlc3VsdC5lcnJvcigi5peg5pWI55qE5oKs6LWP5Lu75YqhSUQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghIjIiLmVxdWFscyh0YXNrLmdldFN0YXR1cygpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBBamF4UmVzdWx0LmVycm9yKCLmgqzotY/ku7vliqHmnKrlrozmiJDvvIzml6Dms5XkuIrkvKDnp43lrZDmlofku7YiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGFzay5nZXRBY2NlcHRlcklkKCkuZXF1YWxzKFNlY3VyaXR5VXRpbHMuZ2V0VXNlcklkKCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFqYXhSZXN1bHQuZXJyb3IoIuWPquacieS7u+WKoeaOpeWPl+iAheWPr+S7peS4iuS8oOenjeWtkOaWh+S7tiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKblt7LlhbPogZQgdG9ycmVudAorICAgICAgICAgICAgSW50ZWdlciBleGlzdGluZ0J0ID0gcmV3YXJkVGFza3NTZXJ2aWNlLnNlbGVjdFJld2FyZEJ0QnlSZXdhcmRJZChyZXdhcmRJZCk7CisgICAgICAgICAgICBpZiAoZXhpc3RpbmdCdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFqYXhSZXN1bHQuZXJyb3IoIuivpeaCrOi1j+S7u+WKoeW3suWFs+iBlOenjeWtkOaWh+S7tiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyDosIPnlKggRmxhc2sg5pyN5Yqh6Kej5p6Q56eN5a2Q5paH5Lu2CisgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKSBuZXcgVVJMKEZMQVNLX1VSTCkub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdE1ldGhvZCgiUE9TVCIpOworICAgICAgICAgICAgY29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0Q29ubmVjdFRpbWVvdXQoNTAwMCk7CisgICAgICAgICAgICBjb25uZWN0aW9uLnNldFJlYWRUaW1lb3V0KDUwMDApOworICAgICAgICAgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtVHlwZSIsICJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iICsgQk9VTkRBUlkpOworCisgICAgICAgICAgICAvLyDlhpnlhaXmlofku7bmlbDmja4KKyAgICAgICAgICAgIHRyeSAoT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IGNvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCkpIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoKCItLSIgKyBCT1VOREFSWSArICJcclxuIikuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpOworICAgICAgICAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZSgoIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cInRvcnJlbnRcIjsgZmlsZW5hbWU9XCIiICsgZmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCkgKyAiXCJcclxuIikuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpOworICAgICAgICAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZSgoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXHJcblxyXG4iKS5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CisgICAgICAgICAgICAgICAgZmlsZS5nZXRJbnB1dFN0cmVhbSgpLnRyYW5zZmVyVG8ob3V0cHV0U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoIlxyXG4iLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoKCItLSIgKyBCT1VOREFSWSArICItLVxyXG4iKS5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CisKKyAgICAgICAgICAgICAgICAvLyDlpITnkIYgRmxhc2sg5ZON5bqUCisgICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFqYXhSZXN1bHQuZXJyb3IoIuS4jkZsYXNr5pyN5Yqh6YCa5L+h5aSx6LSl77yM5ZON5bqU56CBOiAiICsgcmVzcG9uc2VDb2RlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyDkv53lrZjmlofku7bliLDmnI3liqHlmagKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZVBhdGggPSBUT1JSRU5UX1BBVEggKyAiLyIgKyBTZWN1cml0eVV0aWxzLmdldFVzZXJJZCgpICsgIi8iICsgZmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKGZpbGVQYXRoLmNvbnRhaW5zKCIuLiIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBamF4UmVzdWx0LmVycm9yKCLml6DmlYjnmoTmlofku7bot6/lvoQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVG9ycmVudEZpbGVVdGlsLnVwbG9hZEZpbGUoZmlsZSwgZmlsZVBhdGgpOworCisgICAgICAgICAgICAgICAgLy8g6Kej5p6Q5ZON5bqU5bm25a2Y5YKo5Yiw5pWw5o2u5bqTCisgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3BvbnNlQm9keSA9IG5ldyBTdHJpbmcoY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpLnJlYWRBbGxCeXRlcygpLCBTdGFuZGFyZENoYXJzZXRzLlVURl84KTsKKyAgICAgICAgICAgICAgICBMb25nIHRvcnJlbnRJZCA9IHBhcnNlVG9ycmVudERhdGEocmVzcG9uc2VCb2R5LCBmaWxlUGF0aCk7CisKKyAgICAgICAgICAgICAgICAvLyDmj5LlhaUgcmV3YXJkX2J0IOiusOW9lQorICAgICAgICAgICAgICAgIHJld2FyZFRhc2tzU2VydmljZS5pbnNlcnRSZXdhcmRCdChyZXdhcmRJZCwgdG9ycmVudElkLmludFZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIEFqYXhSZXN1bHQuc3VjY2Vzcygi56eN5a2Q5paH5Lu25LiK5Lyg5bm25aSE55CG5oiQ5Yqf77yMdG9ycmVudF9pZDogIiArIHRvcnJlbnRJZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigi5paH5Lu25LiK5Lyg5oiW5LiORmxhc2vmnI3liqHpgJrkv6HlpLHotKU6IHt9IiwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgcmV0dXJuIEFqYXhSZXN1bHQuZXJyb3IoIuaWh+S7tuS4iuS8oOaIluS4jkZsYXNr5pyN5Yqh6YCa5L+h5aSx6LSlOiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICog6Kej5p6Q56eN5a2Q5pWw5o2u5bm25a2Y5YKo5Yiw5pWw5o2u5bqTCisgICAgICovCisgICAgcHJpdmF0ZSBMb25nIHBhcnNlVG9ycmVudERhdGEoU3RyaW5nIHJlc3BvbnNlRGF0YSwgU3RyaW5nIGZpbGVQYXRoKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdE1hcHBlciBvYmplY3RNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisgICAgICAgICAgICBKc29uTm9kZSBqc29uTm9kZSA9IG9iamVjdE1hcHBlci5yZWFkVHJlZShyZXNwb25zZURhdGEpOworICAgICAgICAgICAgSnNvbk5vZGUgYnRUb3JyZW50Tm9kZSA9IGpzb25Ob2RlLmdldCgiYnRUb3JyZW50Iik7CisgICAgICAgICAgICBKc29uTm9kZSBidFRvcnJlbnRBbm5vdW5jZU5vZGUgPSBqc29uTm9kZS5nZXQoImJ0VG9ycmVudEFubm91bmNlIik7CisgICAgICAgICAgICBKc29uTm9kZSBidFRvcnJlbnRGaWxlc05vZGUgPSBqc29uTm9kZS5nZXQoImJ0VG9ycmVudEZpbGVzIik7CisKKyAgICAgICAgICAgIC8vIOWtmOWCqCBidF90b3JyZW50CisgICAgICAgICAgICBCdFRvcnJlbnQgYnRUb3JyZW50ID0gb2JqZWN0TWFwcGVyLnJlYWRWYWx1ZShidFRvcnJlbnROb2RlLnRvU3RyaW5nKCksIEJ0VG9ycmVudC5jbGFzcyk7CisgICAgICAgICAgICBidFRvcnJlbnQuc2V0Q3JlYXRlZEJ5KFNlY3VyaXR5VXRpbHMuZ2V0VXNlcm5hbWUoKSk7CisgICAgICAgICAgICBidFRvcnJlbnQuc2V0VXBsb2FkZXJJZChTZWN1cml0eVV0aWxzLmdldFVzZXJJZCgpKTsKKyAgICAgICAgICAgIGJ0VG9ycmVudC5zZXRGaWxlUGF0aChmaWxlUGF0aCk7CisgICAgICAgICAgICBidFRvcnJlbnRTZXJ2aWNlLmluc2VydEJ0VG9ycmVudChidFRvcnJlbnQpOworICAgICAgICAgICAgTG9uZyB0b3JyZW50SWQgPSBidFRvcnJlbnQuZ2V0VG9ycmVudElkKCk7CisKKyAgICAgICAgICAgIC8vIOWtmOWCqCBidF90b3JyZW50X2ZpbGUKKyAgICAgICAgICAgIExpc3Q8QnRUb3JyZW50RmlsZT4gYnRUb3JyZW50RmlsZXMgPSBvYmplY3RNYXBwZXIucmVhZFZhbHVlKAorICAgICAgICAgICAgICAgICAgICBidFRvcnJlbnRGaWxlc05vZGUudG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFR5cGVSZWZlcmVuY2U8TGlzdDxCdFRvcnJlbnRGaWxlPj4oKSB7fSk7CisgICAgICAgICAgICBidFRvcnJlbnRGaWxlcy5mb3JFYWNoKGJ0RmlsZSAtPiB7CisgICAgICAgICAgICAgICAgYnRGaWxlLnNldFRvcnJlbnRJZCh0b3JyZW50SWQpOworICAgICAgICAgICAgICAgIGJ0VG9ycmVudEZpbGVTZXJ2aWNlLmluc2VydEJ0VG9ycmVudEZpbGUoYnRGaWxlKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyDlrZjlgqggYnRfdG9ycmVudF9hbm5vdW5jZQorICAgICAgICAgICAgTGlzdDxCdFRvcnJlbnRBbm5vdW5jZT4gYnRUb3JyZW50QW5ub3VuY2VMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgICAgICBpZiAoYnRUb3JyZW50QW5ub3VuY2VOb2RlLmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGZvciAoSnNvbk5vZGUgYW5ub3VuY2VOb2RlIDogYnRUb3JyZW50QW5ub3VuY2VOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIEJ0VG9ycmVudEFubm91bmNlIGFubm91bmNlID0gb2JqZWN0TWFwcGVyLnJlYWRWYWx1ZShhbm5vdW5jZU5vZGUudG9TdHJpbmcoKSwgQnRUb3JyZW50QW5ub3VuY2UuY2xhc3MpOworICAgICAgICAgICAgICAgICAgICBidFRvcnJlbnRBbm5vdW5jZUxpc3QuYWRkKGFubm91bmNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidFRvcnJlbnRBbm5vdW5jZUxpc3QuZm9yRWFjaChidFRvcnJlbnRBbm5vdW5jZSAtPiB7CisgICAgICAgICAgICAgICAgYnRUb3JyZW50QW5ub3VuY2Uuc2V0VG9ycmVudElkKHRvcnJlbnRJZCk7CisgICAgICAgICAgICAgICAgYnRUb3JyZW50QW5ub3VuY2VTZXJ2aWNlLmluc2VydEJ0VG9ycmVudEFubm91bmNlKGJ0VG9ycmVudEFubm91bmNlKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICByZXR1cm4gdG9ycmVudElkOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCLop6PmnpDnp43lrZDmlbDmja7lpLHotKU6IHt9IiwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIuino+aekOenjeWtkOaVsOaNruWksei0pTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvZG9tYWluL1Jld2FyZFRhc2tzLmphdmEgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvZG9tYWluL1Jld2FyZFRhc2tzLmphdmEKaW5kZXggNTBlNWM4Zi4uNDE4NmYxMyAxMDA2NDQKLS0tIGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvcmV3YXJkL2RvbWFpbi9SZXdhcmRUYXNrcy5qYXZhCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3Jld2FyZC9kb21haW4vUmV3YXJkVGFza3MuamF2YQpAQCAtNyw4ICs3LDggQEAKIGltcG9ydCBjb20ucnVveWkuY29tbW9uLmNvcmUuZG9tYWluLkJhc2VFbnRpdHk7CiAKIC8qKgotICog44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5a+56LGhIHJld2FyZF90YXNrcwotICogCisgKiDmgqzotY/ku7vliqHlr7nosaEgcmV3YXJkX3Rhc2tzCisgKgogICogQGF1dGhvciBydW95aQogICogQGRhdGUgMjAyNS0wNS0xNwogICovCkBAIC0xNiwxMTAgKzE2LDExNiBAQAogewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwogCi0gICAgLyoqICRjb2x1bW4uY29sdW1uQ29tbWVudCAqLworICAgIC8qKiDmgqzotY/ku7vliqFJRCAqLwogICAgIHByaXZhdGUgTG9uZyByZXdhcmRJZDsKIAotICAgIC8qKiAkY29sdW1uLmNvbHVtbkNvbW1lbnQgKi8KLSAgICBARXhjZWwobmFtZSA9ICIke2NvbW1lbnR9IiwgcmVhZENvbnZlcnRlckV4cCA9ICIkY29sdW1uLnJlYWRDb252ZXJ0ZXJFeHAoKSIpCisgICAgLyoqIOS7u+WKoeagh+mimCAqLworICAgIEBFeGNlbChuYW1lID0gIuS7u+WKoeagh+mimCIpCiAgICAgcHJpdmF0ZSBTdHJpbmcgdGl0bGU7CiAKLSAgICAvKiogJGNvbHVtbi5jb2x1bW5Db21tZW50ICovCi0gICAgQEV4Y2VsKG5hbWUgPSAiJHtjb21tZW50fSIsIHJlYWRDb252ZXJ0ZXJFeHAgPSAiJGNvbHVtbi5yZWFkQ29udmVydGVyRXhwKCkiKQorICAgIC8qKiDku7vliqHmj4/ov7AgKi8KKyAgICBARXhjZWwobmFtZSA9ICLku7vliqHmj4/ov7AiKQogICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogCi0gICAgLyoqICRjb2x1bW4uY29sdW1uQ29tbWVudCAqLwotICAgIEBFeGNlbChuYW1lID0gIiR7Y29tbWVudH0iLCByZWFkQ29udmVydGVyRXhwID0gIiRjb2x1bW4ucmVhZENvbnZlcnRlckV4cCgpIikKKyAgICAvKiog5aWW5Yqx6YeR6aKdICovCisgICAgQEV4Y2VsKG5hbWUgPSAi5aWW5Yqx6YeR6aKdIikKICAgICBwcml2YXRlIEJpZ0RlY2ltYWwgYW1vdW50OwogCi0gICAgLyoqICRjb2x1bW4uY29sdW1uQ29tbWVudCAqLwotICAgIEBFeGNlbChuYW1lID0gIiR7Y29tbWVudH0iLCByZWFkQ29udmVydGVyRXhwID0gIiRjb2x1bW4ucmVhZENvbnZlcnRlckV4cCgpIikKKyAgICAvKiog5Lu75Yqh54q25oCBICgw5byA5pS+IDHlt7LmjqXlj5cgMuW3suWujOaIkCkgKi8KKyAgICBARXhjZWwobmFtZSA9ICLku7vliqHnirbmgIEiLCByZWFkQ29udmVydGVyRXhwID0gIjA95byA5pS+LDE95bey5o6l5Y+XLDI95bey5a6M5oiQIikKICAgICBwcml2YXRlIFN0cmluZyBzdGF0dXM7CiAKLSAgICAvKiogJGNvbHVtbi5jb2x1bW5Db21tZW50ICovCi0gICAgQEV4Y2VsKG5hbWUgPSAiJHtjb21tZW50fSIsIHJlYWRDb252ZXJ0ZXJFeHAgPSAiJGNvbHVtbi5yZWFkQ29udmVydGVyRXhwKCkiKQorICAgIC8qKiDlj5HluIPogIVJRCAqLworICAgIEBFeGNlbChuYW1lID0gIuWPkeW4g+iAhUlEIikKICAgICBwcml2YXRlIExvbmcgcHVibGlzaGVySWQ7CiAKLSAgICAvKiogJGNvbHVtbi5jb2x1bW5Db21tZW50ICovCi0gICAgQEV4Y2VsKG5hbWUgPSAiJHtjb21tZW50fSIsIHJlYWRDb252ZXJ0ZXJFeHAgPSAiJGNvbHVtbi5yZWFkQ29udmVydGVyRXhwKCkiKQorICAgIC8qKiDmjqXlj5fogIVJRCAqLworICAgIEBFeGNlbChuYW1lID0gIuaOpeWPl+iAhUlEIikKICAgICBwcml2YXRlIExvbmcgYWNjZXB0ZXJJZDsKIAotICAgIHB1YmxpYyB2b2lkIHNldFJld2FyZElkKExvbmcgcmV3YXJkSWQpIAorICAgIHB1YmxpYyB2b2lkIHNldFJld2FyZElkKExvbmcgcmV3YXJkSWQpCiAgICAgewogICAgICAgICB0aGlzLnJld2FyZElkID0gcmV3YXJkSWQ7CiAgICAgfQogCi0gICAgcHVibGljIExvbmcgZ2V0UmV3YXJkSWQoKSAKKyAgICBwdWJsaWMgTG9uZyBnZXRSZXdhcmRJZCgpCiAgICAgewogICAgICAgICByZXR1cm4gcmV3YXJkSWQ7CiAgICAgfQotICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlKFN0cmluZyB0aXRsZSkgCisKKyAgICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpCiAgICAgewogICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7CiAgICAgfQogCi0gICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRpdGxlOwogICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIAorCisgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKQogICAgIHsKICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwogICAgIH0KIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSAKKyAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgcHVibGljIHZvaWQgc2V0QW1vdW50KEJpZ0RlY2ltYWwgYW1vdW50KSAKKworICAgIHB1YmxpYyB2b2lkIHNldEFtb3VudChCaWdEZWNpbWFsIGFtb3VudCkKICAgICB7CiAgICAgICAgIHRoaXMuYW1vdW50ID0gYW1vdW50OwogICAgIH0KIAotICAgIHB1YmxpYyBCaWdEZWNpbWFsIGdldEFtb3VudCgpIAorICAgIHB1YmxpYyBCaWdEZWNpbWFsIGdldEFtb3VudCgpCiAgICAgewogICAgICAgICByZXR1cm4gYW1vdW50OwogICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRTdGF0dXMoU3RyaW5nIHN0YXR1cykgCisKKyAgICBwdWJsaWMgdm9pZCBzZXRTdGF0dXMoU3RyaW5nIHN0YXR1cykKICAgICB7CiAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwogICAgIH0KIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCkgCisgICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9Ci0gICAgcHVibGljIHZvaWQgc2V0UHVibGlzaGVySWQoTG9uZyBwdWJsaXNoZXJJZCkgCisKKyAgICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoZXJJZChMb25nIHB1Ymxpc2hlcklkKQogICAgIHsKICAgICAgICAgdGhpcy5wdWJsaXNoZXJJZCA9IHB1Ymxpc2hlcklkOwogICAgIH0KIAotICAgIHB1YmxpYyBMb25nIGdldFB1Ymxpc2hlcklkKCkgCisgICAgcHVibGljIExvbmcgZ2V0UHVibGlzaGVySWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHB1Ymxpc2hlcklkOwogICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRBY2NlcHRlcklkKExvbmcgYWNjZXB0ZXJJZCkgCisKKyAgICBwdWJsaWMgdm9pZCBzZXRBY2NlcHRlcklkKExvbmcgYWNjZXB0ZXJJZCkKICAgICB7CiAgICAgICAgIHRoaXMuYWNjZXB0ZXJJZCA9IGFjY2VwdGVySWQ7CiAgICAgfQogCi0gICAgcHVibGljIExvbmcgZ2V0QWNjZXB0ZXJJZCgpIAorICAgIHB1YmxpYyBMb25nIGdldEFjY2VwdGVySWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFjY2VwdGVySWQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUb1N0cmluZ0J1aWxkZXIodGhpcyxUb1N0cmluZ1N0eWxlLk1VTFRJX0xJTkVfU1RZTEUpCi0gICAgICAgICAgICAuYXBwZW5kKCJyZXdhcmRJZCIsIGdldFJld2FyZElkKCkpCi0gICAgICAgICAgICAuYXBwZW5kKCJ0aXRsZSIsIGdldFRpdGxlKCkpCi0gICAgICAgICAgICAuYXBwZW5kKCJkZXNjcmlwdGlvbiIsIGdldERlc2NyaXB0aW9uKCkpCi0gICAgICAgICAgICAuYXBwZW5kKCJhbW91bnQiLCBnZXRBbW91bnQoKSkKLSAgICAgICAgICAgIC5hcHBlbmQoInN0YXR1cyIsIGdldFN0YXR1cygpKQotICAgICAgICAgICAgLmFwcGVuZCgicHVibGlzaGVySWQiLCBnZXRQdWJsaXNoZXJJZCgpKQotICAgICAgICAgICAgLmFwcGVuZCgiYWNjZXB0ZXJJZCIsIGdldEFjY2VwdGVySWQoKSkKLSAgICAgICAgICAgIC5hcHBlbmQoImNyZWF0ZVRpbWUiLCBnZXRDcmVhdGVUaW1lKCkpCi0gICAgICAgICAgICAuYXBwZW5kKCJ1cGRhdGVUaW1lIiwgZ2V0VXBkYXRlVGltZSgpKQotICAgICAgICAgICAgLmFwcGVuZCgicmVtYXJrIiwgZ2V0UmVtYXJrKCkpCi0gICAgICAgICAgICAudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBUb1N0cmluZ0J1aWxkZXIodGhpcywgVG9TdHJpbmdTdHlsZS5NVUxUSV9MSU5FX1NUWUxFKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoInJld2FyZElkIiwgZ2V0UmV3YXJkSWQoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCJ0aXRsZSIsIGdldFRpdGxlKCkpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiZGVzY3JpcHRpb24iLCBnZXREZXNjcmlwdGlvbigpKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoImFtb3VudCIsIGdldEFtb3VudCgpKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoInN0YXR1cyIsIGdldFN0YXR1cygpKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoInB1Ymxpc2hlcklkIiwgZ2V0UHVibGlzaGVySWQoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCJhY2NlcHRlcklkIiwgZ2V0QWNjZXB0ZXJJZCgpKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoImNyZWF0ZVRpbWUiLCBnZXRDcmVhdGVUaW1lKCkpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgidXBkYXRlVGltZSIsIGdldFVwZGF0ZVRpbWUoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCJyZW1hcmsiLCBnZXRSZW1hcmsoKSkKKyAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTsKICAgICB9Ci19Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvcmV3YXJkL21hcHBlci9SZXdhcmRUYXNrc01hcHBlci5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvcmV3YXJkL21hcHBlci9SZXdhcmRUYXNrc01hcHBlci5qYXZhCmluZGV4IDkyNTIwYjguLjRiYThiNWEgMTAwNjQ0Ci0tLSBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3Jld2FyZC9tYXBwZXIvUmV3YXJkVGFza3NNYXBwZXIuamF2YQorKysgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvbWFwcGVyL1Jld2FyZFRhc2tzTWFwcGVyLmphdmEKQEAgLTIsNjAgKzIsNzkgQEAKIAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGNvbS5ydW95aS5yZXdhcmQuZG9tYWluLlJld2FyZFRhc2tzOworaW1wb3J0IG9yZy5hcGFjaGUuaWJhdGlzLmFubm90YXRpb25zLk1hcHBlcjsKIAogLyoqCi0gKiDjgJDor7floavlhpnlip/og73lkI3np7DjgJFNYXBwZXLmjqXlj6MKLSAqIAorICog5oKs6LWP5Lu75YqhTWFwcGVy5o6l5Y+jCisgKgogICogQGF1dGhvciBydW95aQogICogQGRhdGUgMjAyNS0wNS0xNwogICovCi1wdWJsaWMgaW50ZXJmYWNlIFJld2FyZFRhc2tzTWFwcGVyIAorQE1hcHBlcgorcHVibGljIGludGVyZmFjZSBSZXdhcmRUYXNrc01hcHBlcgogewogICAgIC8qKgotICAgICAqIOafpeivouOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQotICAgICAqIAotICAgICAqIEBwYXJhbSByZXdhcmRJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KLSAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIOafpeivouaCrOi1j+S7u+WKoQorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZElkIOaCrOi1j+S7u+WKoeS4u+mUrgorICAgICAqIEByZXR1cm4g5oKs6LWP5Lu75YqhCiAgICAgICovCiAgICAgcHVibGljIFJld2FyZFRhc2tzIHNlbGVjdFJld2FyZFRhc2tzQnlSZXdhcmRJZChMb25nIHJld2FyZElkKTsKIAogICAgIC8qKgotICAgICAqIOafpeivouOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeWIl+ihqAotICAgICAqIAotICAgICAqIEBwYXJhbSByZXdhcmRUYXNrcyDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKLSAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkembhuWQiAorICAgICAqIOafpeivouaCrOi1j+S7u+WKoeWIl+ihqAorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZFRhc2tzIOaCrOi1j+S7u+WKoQorICAgICAqIEByZXR1cm4g5oKs6LWP5Lu75Yqh6ZuG5ZCICiAgICAgICovCiAgICAgcHVibGljIExpc3Q8UmV3YXJkVGFza3M+IHNlbGVjdFJld2FyZFRhc2tzTGlzdChSZXdhcmRUYXNrcyByZXdhcmRUYXNrcyk7CiAKICAgICAvKioKLSAgICAgKiDmlrDlop7jgJDor7floavlhpnlip/og73lkI3np7DjgJEKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gcmV3YXJkVGFza3Mg44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICog5paw5aKe5oKs6LWP5Lu75YqhCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmV3YXJkVGFza3Mg5oKs6LWP5Lu75YqhCiAgICAgICogQHJldHVybiDnu5PmnpwKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGluc2VydFJld2FyZFRhc2tzKFJld2FyZFRhc2tzIHJld2FyZFRhc2tzKTsKIAogICAgIC8qKgotICAgICAqIOS/ruaUueOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQotICAgICAqIAotICAgICAqIEBwYXJhbSByZXdhcmRUYXNrcyDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiDkv67mlLnmgqzotY/ku7vliqEKKyAgICAgKgorICAgICAqIEBwYXJhbSByZXdhcmRUYXNrcyDmgqzotY/ku7vliqEKICAgICAgKiBAcmV0dXJuIOe7k+aenAogICAgICAqLwogICAgIHB1YmxpYyBpbnQgdXBkYXRlUmV3YXJkVGFza3MoUmV3YXJkVGFza3MgcmV3YXJkVGFza3MpOwogCiAgICAgLyoqCi0gICAgICog5Yig6Zmk44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCi0gICAgICogCi0gICAgICogQHBhcmFtIHJld2FyZElkIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS4u+mUrgorICAgICAqIOWIoOmZpOaCrOi1j+S7u+WKoQorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZElkIOaCrOi1j+S7u+WKoeS4u+mUrgogICAgICAqIEByZXR1cm4g57uT5p6cCiAgICAgICovCiAgICAgcHVibGljIGludCBkZWxldGVSZXdhcmRUYXNrc0J5UmV3YXJkSWQoTG9uZyByZXdhcmRJZCk7CiAKICAgICAvKioKLSAgICAgKiDmibnph4/liKDpmaTjgJDor7floavlhpnlip/og73lkI3np7DjgJEKLSAgICAgKiAKKyAgICAgKiDmibnph4/liKDpmaTmgqzotY/ku7vliqEKKyAgICAgKgogICAgICAqIEBwYXJhbSByZXdhcmRJZHMg6ZyA6KaB5Yig6Zmk55qE5pWw5o2u5Li76ZSu6ZuG5ZCICiAgICAgICogQHJldHVybiDnu5PmnpwKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGRlbGV0ZVJld2FyZFRhc2tzQnlSZXdhcmRJZHMoTG9uZ1tdIHJld2FyZElkcyk7Ci19CisKKyAgICAvKioKKyAgICAgKiDmoLnmja7mgqzotY9JROafpeivouaCrOi1j0JUCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmV3YXJkSWQg5oKs6LWP5Lu75YqhSUQKKyAgICAgKiBAcmV0dXJuIOaCrOi1j0JU55qEdG9ycmVudF9pZAorICAgICAqLworICAgIHB1YmxpYyBJbnRlZ2VyIHNlbGVjdFJld2FyZEJ0QnlSZXdhcmRJZChJbnRlZ2VyIHJld2FyZElkKTsKKworICAgIC8qKgorICAgICAqIOaWsOWinuaCrOi1j0JUCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmV3YXJkSWQg5oKs6LWP5Lu75YqhSUQKKyAgICAgKiBAcGFyYW0gcmV3YXJkQnQgVG9ycmVudCBJRAorICAgICAqIEByZXR1cm4g57uT5p6cCisgICAgICovCisgICAgcHVibGljIGludCBpbnNlcnRSZXdhcmRCdChJbnRlZ2VyIHJld2FyZElkLCBJbnRlZ2VyIHJld2FyZEJ0KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvc2VydmljZS9JUmV3YXJkVGFza3NTZXJ2aWNlLmphdmEgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvc2VydmljZS9JUmV3YXJkVGFza3NTZXJ2aWNlLmphdmEKaW5kZXggNWI4YmQxMy4uN2VkNmQ1OSAxMDA2NDQKLS0tIGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvcmV3YXJkL3NlcnZpY2UvSVJld2FyZFRhc2tzU2VydmljZS5qYXZhCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3Jld2FyZC9zZXJ2aWNlL0lSZXdhcmRUYXNrc1NlcnZpY2UuamF2YQpAQCAtNCw1OCArNCw3NSBAQAogaW1wb3J0IGNvbS5ydW95aS5yZXdhcmQuZG9tYWluLlJld2FyZFRhc2tzOwogCiAvKioKLSAqIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkVNlcnZpY2XmjqXlj6MKLSAqIAorICog5oKs6LWP5Lu75YqhU2VydmljZeaOpeWPoworICoKICAqIEBhdXRob3IgcnVveWkKICAqIEBkYXRlIDIwMjUtMDUtMTcKICAqLwotcHVibGljIGludGVyZmFjZSBJUmV3YXJkVGFza3NTZXJ2aWNlIAorcHVibGljIGludGVyZmFjZSBJUmV3YXJkVGFza3NTZXJ2aWNlCiB7CiAgICAgLyoqCi0gICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCi0gICAgICogCi0gICAgICogQHBhcmFtIHJld2FyZElkIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS4u+mUrgotICAgICAqIEByZXR1cm4g44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICog5p+l6K+i5oKs6LWP5Lu75YqhCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmV3YXJkSWQg5oKs6LWP5Lu75Yqh5Li76ZSuCisgICAgICogQHJldHVybiDmgqzotY/ku7vliqEKICAgICAgKi8KICAgICBwdWJsaWMgUmV3YXJkVGFza3Mgc2VsZWN0UmV3YXJkVGFza3NCeVJld2FyZElkKExvbmcgcmV3YXJkSWQpOwogCiAgICAgLyoqCi0gICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5YiX6KGoCi0gICAgICogCi0gICAgICogQHBhcmFtIHJld2FyZFRhc2tzIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQotICAgICAqIEByZXR1cm4g44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR6ZuG5ZCICisgICAgICog5p+l6K+i5oKs6LWP5Lu75Yqh5YiX6KGoCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmV3YXJkVGFza3Mg5oKs6LWP5Lu75YqhCisgICAgICogQHJldHVybiDmgqzotY/ku7vliqHpm4blkIgKICAgICAgKi8KICAgICBwdWJsaWMgTGlzdDxSZXdhcmRUYXNrcz4gc2VsZWN0UmV3YXJkVGFza3NMaXN0KFJld2FyZFRhc2tzIHJld2FyZFRhc2tzKTsKIAogICAgIC8qKgotICAgICAqIOaWsOWinuOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQotICAgICAqIAotICAgICAqIEBwYXJhbSByZXdhcmRUYXNrcyDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiDmlrDlop7mgqzotY/ku7vliqEKKyAgICAgKgorICAgICAqIEBwYXJhbSByZXdhcmRUYXNrcyDmgqzotY/ku7vliqEKICAgICAgKiBAcmV0dXJuIOe7k+aenAogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaW5zZXJ0UmV3YXJkVGFza3MoUmV3YXJkVGFza3MgcmV3YXJkVGFza3MpOwogCiAgICAgLyoqCi0gICAgICog5L+u5pS544CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCi0gICAgICogCi0gICAgICogQHBhcmFtIHJld2FyZFRhc2tzIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIOS/ruaUueaCrOi1j+S7u+WKoQorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZFRhc2tzIOaCrOi1j+S7u+WKoQogICAgICAqIEByZXR1cm4g57uT5p6cCiAgICAgICovCiAgICAgcHVibGljIGludCB1cGRhdGVSZXdhcmRUYXNrcyhSZXdhcmRUYXNrcyByZXdhcmRUYXNrcyk7CiAKICAgICAvKioKLSAgICAgKiDmibnph4/liKDpmaTjgJDor7floavlhpnlip/og73lkI3np7DjgJEKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gcmV3YXJkSWRzIOmcgOimgeWIoOmZpOeahOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS4u+mUrumbhuWQiAorICAgICAqIOaJuemHj+WIoOmZpOaCrOi1j+S7u+WKoQorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZElkcyDpnIDopoHliKDpmaTnmoTmgqzotY/ku7vliqHkuLvplK7pm4blkIgKICAgICAgKiBAcmV0dXJuIOe7k+aenAogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZGVsZXRlUmV3YXJkVGFza3NCeVJld2FyZElkcyhMb25nW10gcmV3YXJkSWRzKTsKIAogICAgIC8qKgotICAgICAqIOWIoOmZpOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS/oeaBrwotICAgICAqIAotICAgICAqIEBwYXJhbSByZXdhcmRJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiDliKDpmaTmgqzotY/ku7vliqHkv6Hmga8KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXdhcmRJZCDmgqzotY/ku7vliqHkuLvplK4KICAgICAgKiBAcmV0dXJuIOe7k+aenAogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZGVsZXRlUmV3YXJkVGFza3NCeVJld2FyZElkKExvbmcgcmV3YXJkSWQpOwotfQorCisgICAgLyoqCisgICAgICog5qC55o2u5oKs6LWPSUTmn6Xor6LmgqzotY9CVAorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZElkIOaCrOi1j+S7u+WKoUlECisgICAgICogQHJldHVybiDmgqzotY9CVOeahHRvcnJlbnRfaWQKKyAgICAgKi8KKyAgICBwdWJsaWMgSW50ZWdlciBzZWxlY3RSZXdhcmRCdEJ5UmV3YXJkSWQoSW50ZWdlciByZXdhcmRJZCk7CisKKyAgICAvKioKKyAgICAgKiDmlrDlop7mgqzotY9CVAorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZElkIOaCrOi1j+S7u+WKoUlECisgICAgICogQHBhcmFtIHJld2FyZEJ0IFRvcnJlbnQgSUQKKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIHB1YmxpYyBpbnQgaW5zZXJ0UmV3YXJkQnQoSW50ZWdlciByZXdhcmRJZCwgSW50ZWdlciByZXdhcmRCdCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvcmV3YXJkL3NlcnZpY2UvaW1wbC9SZXdhcmRUYXNrc1NlcnZpY2VJbXBsLmphdmEgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvc2VydmljZS9pbXBsL1Jld2FyZFRhc2tzU2VydmljZUltcGwuamF2YQppbmRleCBiODBmM2YzLi45YzM4NTgwIDEwMDY0NAotLS0gYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvc2VydmljZS9pbXBsL1Jld2FyZFRhc2tzU2VydmljZUltcGwuamF2YQorKysgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9yZXdhcmQvc2VydmljZS9pbXBsL1Jld2FyZFRhc2tzU2VydmljZUltcGwuamF2YQpAQCAtMSwzMCArMSwzMSBAQAogcGFja2FnZSBjb20ucnVveWkucmV3YXJkLnNlcnZpY2UuaW1wbDsKIAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGNvbS5ydW95aS5jb21tb24udXRpbHMuRGF0ZVV0aWxzOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnRyYW5zYWN0aW9uLmFubm90YXRpb24uVHJhbnNhY3Rpb25hbDsKK2ltcG9ydCBjb20ucnVveWkuY29tbW9uLnV0aWxzLkRhdGVVdGlsczsKIGltcG9ydCBjb20ucnVveWkucmV3YXJkLm1hcHBlci5SZXdhcmRUYXNrc01hcHBlcjsKIGltcG9ydCBjb20ucnVveWkucmV3YXJkLmRvbWFpbi5SZXdhcmRUYXNrczsKIGltcG9ydCBjb20ucnVveWkucmV3YXJkLnNlcnZpY2UuSVJld2FyZFRhc2tzU2VydmljZTsKIAogLyoqCi0gKiDjgJDor7floavlhpnlip/og73lkI3np7DjgJFTZXJ2aWNl5Lia5Yqh5bGC5aSE55CGCi0gKiAKKyAqIOaCrOi1j+S7u+WKoVNlcnZpY2XkuJrliqHlsYLlpITnkIYKKyAqCiAgKiBAYXV0aG9yIHJ1b3lpCiAgKiBAZGF0ZSAyMDI1LTA1LTE3CiAgKi8KIEBTZXJ2aWNlCi1wdWJsaWMgY2xhc3MgUmV3YXJkVGFza3NTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIElSZXdhcmRUYXNrc1NlcnZpY2UgCitwdWJsaWMgY2xhc3MgUmV3YXJkVGFza3NTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIElSZXdhcmRUYXNrc1NlcnZpY2UKIHsKICAgICBAQXV0b3dpcmVkCiAgICAgcHJpdmF0ZSBSZXdhcmRUYXNrc01hcHBlciByZXdhcmRUYXNrc01hcHBlcjsKIAogICAgIC8qKgotICAgICAqIOafpeivouOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQotICAgICAqIAotICAgICAqIEBwYXJhbSByZXdhcmRJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KLSAgICAgKiBAcmV0dXJuIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIOafpeivouaCrOi1j+S7u+WKoQorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZElkIOaCrOi1j+S7u+WKoeS4u+mUrgorICAgICAqIEByZXR1cm4g5oKs6LWP5Lu75YqhCiAgICAgICovCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFJld2FyZFRhc2tzIHNlbGVjdFJld2FyZFRhc2tzQnlSZXdhcmRJZChMb25nIHJld2FyZElkKQpAQCAtMzMsMTAgKzM0LDEwIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICog5p+l6K+i44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CR5YiX6KGoCi0gICAgICogCi0gICAgICogQHBhcmFtIHJld2FyZFRhc2tzIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQotICAgICAqIEByZXR1cm4g44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCisgICAgICog5p+l6K+i5oKs6LWP5Lu75Yqh5YiX6KGoCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmV3YXJkVGFza3Mg5oKs6LWP5Lu75YqhCisgICAgICogQHJldHVybiDmgqzotY/ku7vliqEKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgTGlzdDxSZXdhcmRUYXNrcz4gc2VsZWN0UmV3YXJkVGFza3NMaXN0KFJld2FyZFRhc2tzIHJld2FyZFRhc2tzKQpAQCAtNDUsMTIgKzQ2LDEzIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICog5paw5aKe44CQ6K+35aGr5YaZ5Yqf6IO95ZCN56ew44CRCi0gICAgICogCi0gICAgICogQHBhcmFtIHJld2FyZFRhc2tzIOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQorICAgICAqIOaWsOWinuaCrOi1j+S7u+WKoQorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZFRhc2tzIOaCrOi1j+S7u+WKoQogICAgICAqIEByZXR1cm4g57uT5p6cCiAgICAgICovCiAgICAgQE92ZXJyaWRlCisgICAgQFRyYW5zYWN0aW9uYWwKICAgICBwdWJsaWMgaW50IGluc2VydFJld2FyZFRhc2tzKFJld2FyZFRhc2tzIHJld2FyZFRhc2tzKQogICAgIHsKICAgICAgICAgcmV3YXJkVGFza3Muc2V0Q3JlYXRlVGltZShEYXRlVXRpbHMuZ2V0Tm93RGF0ZSgpKTsKQEAgLTU4LDEyICs2MCwxMyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIOS/ruaUueOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkQotICAgICAqIAotICAgICAqIEBwYXJhbSByZXdhcmRUYXNrcyDjgJDor7floavlhpnlip/og73lkI3np7DjgJEKKyAgICAgKiDkv67mlLnmgqzotY/ku7vliqEKKyAgICAgKgorICAgICAqIEBwYXJhbSByZXdhcmRUYXNrcyDmgqzotY/ku7vliqEKICAgICAgKiBAcmV0dXJuIOe7k+aenAogICAgICAqLwogICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCiAgICAgcHVibGljIGludCB1cGRhdGVSZXdhcmRUYXNrcyhSZXdhcmRUYXNrcyByZXdhcmRUYXNrcykKICAgICB7CiAgICAgICAgIHJld2FyZFRhc2tzLnNldFVwZGF0ZVRpbWUoRGF0ZVV0aWxzLmdldE5vd0RhdGUoKSk7CkBAIC03MSwyNiArNzQsNTQgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiDmibnph4/liKDpmaTjgJDor7floavlhpnlip/og73lkI3np7DjgJEKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gcmV3YXJkSWRzIOmcgOimgeWIoOmZpOeahOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS4u+mUrgorICAgICAqIOaJuemHj+WIoOmZpOaCrOi1j+S7u+WKoQorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZElkcyDpnIDopoHliKDpmaTnmoTmgqzotY/ku7vliqHkuLvplK4KICAgICAgKiBAcmV0dXJuIOe7k+aenAogICAgICAqLwogICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCiAgICAgcHVibGljIGludCBkZWxldGVSZXdhcmRUYXNrc0J5UmV3YXJkSWRzKExvbmdbXSByZXdhcmRJZHMpCiAgICAgewogICAgICAgICByZXR1cm4gcmV3YXJkVGFza3NNYXBwZXIuZGVsZXRlUmV3YXJkVGFza3NCeVJld2FyZElkcyhyZXdhcmRJZHMpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIOWIoOmZpOOAkOivt+Whq+WGmeWKn+iDveWQjeensOOAkeS/oeaBrwotICAgICAqIAotICAgICAqIEBwYXJhbSByZXdhcmRJZCDjgJDor7floavlhpnlip/og73lkI3np7DjgJHkuLvplK4KKyAgICAgKiDliKDpmaTmgqzotY/ku7vliqHkv6Hmga8KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXdhcmRJZCDmgqzotY/ku7vliqHkuLvplK4KICAgICAgKiBAcmV0dXJuIOe7k+aenAogICAgICAqLwogICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCiAgICAgcHVibGljIGludCBkZWxldGVSZXdhcmRUYXNrc0J5UmV3YXJkSWQoTG9uZyByZXdhcmRJZCkKICAgICB7CiAgICAgICAgIHJldHVybiByZXdhcmRUYXNrc01hcHBlci5kZWxldGVSZXdhcmRUYXNrc0J5UmV3YXJkSWQocmV3YXJkSWQpOwogICAgIH0KLX0KKworICAgIC8qKgorICAgICAqIOagueaNruaCrOi1j0lE5p+l6K+i5oKs6LWPQlQKKyAgICAgKgorICAgICAqIEBwYXJhbSByZXdhcmRJZCDmgqzotY/ku7vliqFJRAorICAgICAqIEByZXR1cm4g5oKs6LWPQlTnmoR0b3JyZW50X2lkCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEludGVnZXIgc2VsZWN0UmV3YXJkQnRCeVJld2FyZElkKEludGVnZXIgcmV3YXJkSWQpCisgICAgeworICAgICAgICByZXR1cm4gcmV3YXJkVGFza3NNYXBwZXIuc2VsZWN0UmV3YXJkQnRCeVJld2FyZElkKHJld2FyZElkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDmlrDlop7mgqzotY9CVAorICAgICAqCisgICAgICogQHBhcmFtIHJld2FyZElkIOaCrOi1j+S7u+WKoUlECisgICAgICogQHBhcmFtIHJld2FyZEJ0IFRvcnJlbnQgSUQKKyAgICAgKiBAcmV0dXJuIOe7k+aenAorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIEBUcmFuc2FjdGlvbmFsCisgICAgcHVibGljIGludCBpbnNlcnRSZXdhcmRCdChJbnRlZ2VyIHJld2FyZElkLCBJbnRlZ2VyIHJld2FyZEJ0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJld2FyZFRhc2tzTWFwcGVyLmluc2VydFJld2FyZEJ0KHJld2FyZElkLCByZXdhcmRCdCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3RvcnJlbnQvY29udHJvbGxlci9CdFRvcnJlbnRDb250cm9sbGVyLmphdmEgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS90b3JyZW50L2NvbnRyb2xsZXIvQnRUb3JyZW50Q29udHJvbGxlci5qYXZhCmluZGV4IDQ2MzQ1YzcuLjE1ZGM5ZjMgMTAwNjQ0Ci0tLSBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3RvcnJlbnQvY29udHJvbGxlci9CdFRvcnJlbnRDb250cm9sbGVyLmphdmEKKysrIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvdG9ycmVudC9jb250cm9sbGVyL0J0VG9ycmVudENvbnRyb2xsZXIuamF2YQpAQCAtMSwxMiArMSwxMiBAQAogcGFja2FnZSBjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyOwogCitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKIAoraW1wb3J0IGNvbS5ydW95aS5jb21tb24udXRpbHMuaHR0cC5IdHRwVXRpbHM7CiBpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmUudHlwZS5UeXBlUmVmZXJlbmNlOwogaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKIGltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwpAQCAtMTYsNiArMTYsNyBAQAogaW1wb3J0IGNvbS5ydW95aS50b3JyZW50LnNlcnZpY2UuSUJ0VG9ycmVudEFubm91bmNlU2VydmljZTsKIGltcG9ydCBjb20ucnVveWkudG9ycmVudC5zZXJ2aWNlLklCdFRvcnJlbnRGaWxlU2VydmljZTsKIGltcG9ydCBjb20ucnVveWkudG9ycmVudC5zZXJ2aWNlLklCdFRvcnJlbnRTZXJ2aWNlOworaW1wb3J0IGNvbS5ydW95aS50b3JyZW50LnV0aWwuVG9ycmVudEZpbGVVdGlsOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hY2Nlc3MucHJlcG9zdC5QcmVBdXRob3JpemU7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwpAQCAtNDEsNyArNDIsNiBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247CiBpbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwogCiAvKioKICAqIOenjeWtkOS4u0NvbnRyb2xsZXIKQEAgLTYwLDYgKzYwLDEwIEBACiAgICAgcHJpdmF0ZSBJQnRUb3JyZW50RmlsZVNlcnZpY2UgYnRUb3JyZW50RmlsZVNlcnZpY2U7CiAgICAgQEF1dG93aXJlZAogICAgIHByaXZhdGUgSUJ0VG9ycmVudEFubm91bmNlU2VydmljZSBidFRvcnJlbnRBbm5vdW5jZVNlcnZpY2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFQ09NTUVORF9BUEkgPSAiaHR0cDovLzEyNy4wLjAuMTo1MDAwL3JlY29tbWVuZF90b3JyZW50cyI7CisKKyAgICBwcml2YXRlIFN0cmluZyB0b3JyZW50UGF0aD0gInRvcnJlbnRzIjsKKwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGJvdW5kYXJ5ID0gIi0tLS1XZWJLaXRGb3JtQm91bmRhcnkiICsgVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKS5yZXBsYWNlKCItIiwgIiIpOwogCkBAIC02OCw4ICs3Miw5IEBACiAgICAgQFBvc3RNYXBwaW5nKCIvdXBsb2FkVG9ycmVudCIpCiAgICAgcHVibGljIEFqYXhSZXN1bHQgdXBsb2FkVG9ycmVudChAUmVxdWVzdFBhcmFtKCJmaWxlIikgTXVsdGlwYXJ0RmlsZSBmaWxlKSB7CiAgICAgICAgIHRyeSB7CisKICAgICAgICAgICAgIC8vIENyZWF0ZSBVUkwgY29ubmVjdGlvbiB0byBGbGFzayBzZXJ2ZXIKLSAgICAgICAgICAgIFN0cmluZyBmbGFza1VybCA9ICJodHRwOi8vbG9jYWxob3N0OjUwMDAvcGFyc2VfdG9ycmVudCI7IC8vIEZsYXNrIHNlcnZlciBVUkwKKyAgICAgICAgICAgIFN0cmluZyBmbGFza1VybCA9ICJodHRwOi8vNDkuMjMzLjIxNS4xNDQ6NTAwMC9wYXJzZV90b3JyZW50IjsgLy8gRmxhc2sgc2VydmVyIFVSTAogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbikgbmV3IFVSTChmbGFza1VybCkub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdE1ldGhvZCgiUE9TVCIpOwogICAgICAgICAgICAgY29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKQEAgLTg1LDYgKzkwLDEwIEBACiAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFqYXhSZXN1bHQuZXJyb3IoIkZhaWxlZCB0byBjb21tdW5pY2F0ZSB3aXRoIEZsYXNrIHNlcnZlciwgcmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRvcnJlbnRGaWxlVXRpbC51cGxvYWRGaWxlKGZpbGUsdG9ycmVudFBhdGgrIi8iK1NlY3VyaXR5VXRpbHMuZ2V0VXNlcklkKCkpOworCisKKwogCiAgICAgICAgICAgICAgICAgLy8gQXNzdW1pbmcgdGhlIEZsYXNrIHNlcnZlciByZXNwb25kcyB3aXRoIEpTT04sIHBhcnNlIHRoZSByZXNwb25zZQogICAgICAgICAgICAgICAgIFN0cmluZyByZXNwb25zZUJvZHkgPSBuZXcgU3RyaW5nKGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKS5yZWFkQWxsQnl0ZXMoKSwgU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCk7CkBAIC0xMzIsOSArMTQxLDExIEBACiAgICAgICAgICAgICBCdFRvcnJlbnQgYnRUb3JyZW50ID0gb2JqZWN0TWFwcGVyLnJlYWRWYWx1ZShidFRvcnJlbnROb2RlLnRvU3RyaW5nKCksIEJ0VG9ycmVudC5jbGFzcyk7CiAgICAgICAgICAgICBidFRvcnJlbnQuc2V0Q3JlYXRlZEJ5KFNlY3VyaXR5VXRpbHMuZ2V0VXNlcm5hbWUoKSk7CiAgICAgICAgICAgICBidFRvcnJlbnQuc2V0VXBsb2FkZXJJZChTZWN1cml0eVV0aWxzLmdldFVzZXJJZCgpKTsKKyAgICAgICAgICAgIGJ0VG9ycmVudC5zZXRGaWxlUGF0aCh0b3JyZW50UGF0aCsiLyIrU2VjdXJpdHlVdGlscy5nZXRVc2VySWQoKSsiLyIrYnRUb3JyZW50LmdldE5hbWUoKSk7CiAgICAgICAgICAgICBidFRvcnJlbnRTZXJ2aWNlLmluc2VydEJ0VG9ycmVudChidFRvcnJlbnQpOwogICAgICAgICAgICAgTG9uZyB0b3JyZW50SWQ9YnRUb3JyZW50LmdldFRvcnJlbnRJZCgpOwogCisKICAgICAgICAgICAgIC8vIENvbnZlcnQgYnRUb3JyZW50RmlsZXNOb2RlIHRvIExpc3Q8QnRUb3JyZW50RmlsZT4gdXNpbmcgVHlwZVJlZmVyZW5jZQogICAgICAgICAgICAgTGlzdDxCdFRvcnJlbnRGaWxlPiBidFRvcnJlbnRGaWxlcyA9IG9iamVjdE1hcHBlci5yZWFkVmFsdWUoCiAgICAgICAgICAgICAgICAgICAgIGJ0VG9ycmVudEZpbGVzTm9kZS50b1N0cmluZygpLApAQCAtMTc0LDYgKzE4NSwzMSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQEdldE1hcHBpbmcoIi9kb3dubG9hZC97aWR9IikKKyAgICBwdWJsaWMgdm9pZCBkb3dubG9hZFRvcnJlbnQoQFBhdGhWYXJpYWJsZSgiaWQiKSBMb25nIGlkLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyAxLiDosIPnlKggZ2V0VG9ycmVudEluZm8oaWQpIOiOt+WPluaWh+S7tui3r+W+hAorICAgICAgICAgICAgQnRUb3JyZW50IGJ0VG9ycmVudD0gYnRUb3JyZW50U2VydmljZS5zZWxlY3RCdFRvcnJlbnRCeVRvcnJlbnRJZChpZCk7CisgICAgICAgICAgICBTdHJpbmcgZmlsZVBhdGg9YnRUb3JyZW50LmdldEZpbGVQYXRoKCk7CisgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWU9YnRUb3JyZW50LmdldE5hbWUoKTsKKworICAgICAgICAgICAgLy8gMi4g5L2/55So5bel5YW35pa55rOV5LiL6L295paH5Lu277yI5LiN5Yig6Zmk5rqQ5paH5Lu277yJCisgICAgICAgICAgICBUb3JyZW50RmlsZVV0aWwuZG93bmxvYWRGaWxlKHJlc3BvbnNlLCBmaWxlUGF0aCwgZmlsZU5hbWUsIGZhbHNlKTsKKworICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCisgICAgICAgICAgICByZXNwb25zZS5zZXRTdGF0dXMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19OT1RfRk9VTkQpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCisgICAgICAgICAgICByZXNwb25zZS5zZXRTdGF0dXMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKworICAgICAgICB9CisKKyAgICB9CisKICAgICAvKioKICAgICAgKiDmn6Xor6Lnp43lrZDkuLvliJfooagKICAgICAgKi8KQEAgLTE4Nyw2ICsyMjMsNDMgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiDmn6Xor6Lnp43lrZDkuLvliJfooagKKyAgICAgKi8KKyAgICBAUHJlQXV0aG9yaXplKCJAc3MuaGFzUGVybWkoJ3N5c3RlbTp0b3JyZW50Omxpc3QnKSIpCisgICAgQFBvc3RNYXBwaW5nKCIvcmVjb21tZW5kIikKKyAgICBwdWJsaWMgVGFibGVEYXRhSW5mbyByZWNvbW1lbmRUb3JyZW50cyhAUmVxdWVzdFBhcmFtKCJ1c2VyX2lkIikgU3RyaW5nIHVzZXJJZCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gMS4g5p6E6YCgIEpTT04g6K+35rGC5L2TCisgICAgICAgICAgICBTdHJpbmcganNvblJlcXVlc3QgPSAie1widXNlcl9pZFwiOiBcIiIgKyB1c2VySWQgKyAiXCJ9IjsKKworICAgICAgICAgICAgLy8gMi4g5ZCRIEZsYXNrIOacjeWKoeWPkSBQT1NUIOivt+axgu+8jOi/lOWbniBKU09OIOaVsOe7hAorICAgICAgICAgICAgU3RyaW5nIGpzb25SZXNwb25zZSA9IEh0dHBVdGlscy5zZW5kUG9zdChSRUNPTU1FTkRfQVBJLCBqc29uUmVxdWVzdCk7CisKKyAgICAgICAgICAgIC8vIDMuIOS9v+eUqCBKYWNrc29uIOino+aekCBKU09OIOaVsOe7hOS4uiBMaXN0PExvbmc+CisgICAgICAgICAgICBPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOworICAgICAgICAgICAgTGlzdDxMb25nPiBpZExpc3QgPSBtYXBwZXIucmVhZFZhbHVlKGpzb25SZXNwb25zZSwgbmV3IFR5cGVSZWZlcmVuY2U8TGlzdDxMb25nPj4oKSB7fSk7CisKKyAgICAgICAgICAgIC8vIDQuIOagueaNriBJRCDmn6Xor6LlrozmlbTnp43lrZDkv6Hmga/vvIzlubbkv53mjIHmjqjojZDpobrluo8KKyAgICAgICAgICAgIExpc3Q8QnRUb3JyZW50PiByZXN1bHRMaXN0ID0gYnRUb3JyZW50U2VydmljZS5zZWxlY3RCdFRvcnJlbnRzQnlJZHNPcmRlcmVkKGlkTGlzdCk7CisKKyAgICAgICAgICAgIC8vIDUuIOWwgeijheaIkCBUYWJsZURhdGFJbmZvIOi/lOWbngorICAgICAgICAgICAgVGFibGVEYXRhSW5mbyByc3AgPSBuZXcgVGFibGVEYXRhSW5mbygpOworICAgICAgICAgICAgcnNwLnNldENvZGUoMjAwKTsKKyAgICAgICAgICAgIHJzcC5zZXRNc2coIuaOqOiNkOaIkOWKnyIpOworICAgICAgICAgICAgcnNwLnNldFJvd3MocmVzdWx0TGlzdCk7CisgICAgICAgICAgICByc3Auc2V0VG90YWwocmVzdWx0TGlzdC5zaXplKCkpOworICAgICAgICAgICAgcmV0dXJuIHJzcDsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIFRhYmxlRGF0YUluZm8gZXJyb3IgPSBuZXcgVGFibGVEYXRhSW5mbygpOworICAgICAgICAgICAgZXJyb3Iuc2V0Q29kZSg1MDApOworICAgICAgICAgICAgZXJyb3Iuc2V0TXNnKCLmjqjojZDlpLHotKXvvJoiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICog5a+85Ye656eN5a2Q5Li75YiX6KGoCiAgICAgICovCiAgICAgQFByZUF1dGhvcml6ZSgiQHNzLmhhc1Blcm1pKCdzeXN0ZW06dG9ycmVudDpleHBvcnQnKSIpCkBAIC0yMzksNiArMzEyLDEwIEBACiAJQERlbGV0ZU1hcHBpbmcoIi97dG9ycmVudElkc30iKQogICAgIHB1YmxpYyBBamF4UmVzdWx0IHJlbW92ZShAUGF0aFZhcmlhYmxlIExvbmdbXSB0b3JyZW50SWRzKQogICAgIHsKKyAgICAgICAgZm9yIChMb25nIHRvcnJlbnRJZCA6IHRvcnJlbnRJZHMpeworICAgICAgICAgICAgU3RyaW5nIGZpbGVQYXRoID0gYnRUb3JyZW50U2VydmljZS5zZWxlY3RCdFRvcnJlbnRCeVRvcnJlbnRJZCh0b3JyZW50SWQpLmdldEZpbGVQYXRoKCk7CisgICAgICAgICAgICBUb3JyZW50RmlsZVV0aWwuZGVsZXRlRmlsZU9yRm9sZGVyKGZpbGVQYXRoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gdG9BamF4KGJ0VG9ycmVudFNlcnZpY2UuZGVsZXRlQnRUb3JyZW50QnlUb3JyZW50SWRzKHRvcnJlbnRJZHMpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS90b3JyZW50L21hcHBlci9CdFRvcnJlbnRNYXBwZXIuamF2YSBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3RvcnJlbnQvbWFwcGVyL0J0VG9ycmVudE1hcHBlci5qYXZhCmluZGV4IDE4MGYwNTIuLjUyOTA0M2MgMTAwNjQ0Ci0tLSBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3RvcnJlbnQvbWFwcGVyL0J0VG9ycmVudE1hcHBlci5qYXZhCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3RvcnJlbnQvbWFwcGVyL0J0VG9ycmVudE1hcHBlci5qYXZhCkBAIC0yLDYgKzIsOCBAQAogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgY29tLnJ1b3lpLnRvcnJlbnQuZG9tYWluLkJ0VG9ycmVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLmliYXRpcy5hbm5vdGF0aW9ucy5NYXBwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5pYmF0aXMuYW5ub3RhdGlvbnMuUGFyYW07CiAKIC8qKgogICog56eN5a2Q5Li7TWFwcGVy5o6l5Y+jCkBAIC05LDYgKzExLDcgQEAKICAqIEBhdXRob3IgcnVveWkKICAqIEBkYXRlIDIwMjUtMDQtMjEKICAqLworQE1hcHBlcgogcHVibGljIGludGVyZmFjZSBCdFRvcnJlbnRNYXBwZXIgCiB7CiAgICAgLyoqCkBAIC01OCw0ICs2MSwxMiBAQAogICAgICAqIEByZXR1cm4g57uT5p6cCiAgICAgICovCiAgICAgcHVibGljIGludCBkZWxldGVCdFRvcnJlbnRCeVRvcnJlbnRJZHMoTG9uZ1tdIHRvcnJlbnRJZHMpOworCisgICAgLyoqCisgICAgICog5qC55o2uSUTliJfooajmn6Xor6Lnp43lrZDkv6Hmga/vvIjkv53mjIHpobrluo/vvIkKKyAgICAgKgorICAgICAqIEBwYXJhbSBpZHMg56eN5a2QSUTliJfooagKKyAgICAgKiBAcmV0dXJuIOenjeWtkOWIl+ihqAorICAgICAqLworICAgIExpc3Q8QnRUb3JyZW50PiBzZWxlY3RCdFRvcnJlbnRzQnlJZHNPcmRlcmVkKEBQYXJhbSgibGlzdCIpIExpc3Q8TG9uZz4gaWRzKTsKIH0KZGlmZiAtLWdpdCBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3RvcnJlbnQvc2VydmljZS9JQnRUb3JyZW50U2VydmljZS5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvdG9ycmVudC9zZXJ2aWNlL0lCdFRvcnJlbnRTZXJ2aWNlLmphdmEKaW5kZXggZTc0MTcxMS4uZjM4MzVjZiAxMDA2NDQKLS0tIGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvdG9ycmVudC9zZXJ2aWNlL0lCdFRvcnJlbnRTZXJ2aWNlLmphdmEKKysrIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvdG9ycmVudC9zZXJ2aWNlL0lCdFRvcnJlbnRTZXJ2aWNlLmphdmEKQEAgLTU4LDQgKzU4LDEyIEBACiAgICAgICogQHJldHVybiDnu5PmnpwKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGRlbGV0ZUJ0VG9ycmVudEJ5VG9ycmVudElkKExvbmcgdG9ycmVudElkKTsKKworICAgIC8qKgorICAgICAqIOagueaNruaOqOiNkElE5YiX6KGo5p+l6K+i56eN5a2Q5L+h5oGv77yI5L+d5oyB5o6o6I2Q6aG65bqP77yJCisgICAgICoKKyAgICAgKiBAcGFyYW0gaWRzIOaOqOiNkOeahOenjeWtkElE5YiX6KGoCisgICAgICogQHJldHVybiDmjInnhafmjqjojZDpobrluo/mjpLliJfnmoTnp43lrZDliJfooagKKyAgICAgKi8KKyAgICBMaXN0PEJ0VG9ycmVudD4gc2VsZWN0QnRUb3JyZW50c0J5SWRzT3JkZXJlZChMaXN0PExvbmc+IGlkcyk7CiB9CmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS90b3JyZW50L3NlcnZpY2UvaW1wbC9CdFRvcnJlbnRTZXJ2aWNlSW1wbC5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvdG9ycmVudC9zZXJ2aWNlL2ltcGwvQnRUb3JyZW50U2VydmljZUltcGwuamF2YQppbmRleCAzYjcxNGYyLi4yMDRlYWZmIDEwMDY0NAotLS0gYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS90b3JyZW50L3NlcnZpY2UvaW1wbC9CdFRvcnJlbnRTZXJ2aWNlSW1wbC5qYXZhCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3RvcnJlbnQvc2VydmljZS9pbXBsL0J0VG9ycmVudFNlcnZpY2VJbXBsLmphdmEKQEAgLTYsNiArNiw5IEBACiBpbXBvcnQgY29tLnJ1b3lpLnRvcnJlbnQubWFwcGVyLkJ0VG9ycmVudE1hcHBlcjsKIGltcG9ydCBjb20ucnVveWkudG9ycmVudC5kb21haW4uQnRUb3JyZW50OwogaW1wb3J0IGNvbS5ydW95aS50b3JyZW50LnNlcnZpY2UuSUJ0VG9ycmVudFNlcnZpY2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIAogLyoqCiAgKiDnp43lrZDkuLtTZXJ2aWNl5Lia5Yqh5bGC5aSE55CGCkBAIC05MCw0ICs5MywxNSBAQAogICAgIHsKICAgICAgICAgcmV0dXJuIGJ0VG9ycmVudE1hcHBlci5kZWxldGVCdFRvcnJlbnRCeVRvcnJlbnRJZCh0b3JyZW50SWQpOwogICAgIH0KKworICAgIC8qKgorICAgICAqIOagueaNruaOqOiNkElE5YiX6KGo5p+l6K+i56eN5a2Q5L+h5oGv77yI5L+d5oyB5o6o6I2Q6aG65bqP77yJCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIExpc3Q8QnRUb3JyZW50PiBzZWxlY3RCdFRvcnJlbnRzQnlJZHNPcmRlcmVkKExpc3Q8TG9uZz4gaWRzKSB7CisgICAgICAgIGlmIChpZHMgPT0gbnVsbCB8fCBpZHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ0VG9ycmVudE1hcHBlci5zZWxlY3RCdFRvcnJlbnRzQnlJZHNPcmRlcmVkKGlkcyk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvdG9ycmVudC91dGlsL09zc011bHRpcGFydFVwbG9hZGVyLmphdmEgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS90b3JyZW50L3V0aWwvT3NzTXVsdGlwYXJ0VXBsb2FkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTAzMjNmCi0tLSAvZGV2L251bGwKKysrIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvdG9ycmVudC91dGlsL09zc011bHRpcGFydFVwbG9hZGVyLmphdmEKQEAgLTAsMCArMSw5NiBAQAorcGFja2FnZSBjb20ucnVveWkudG9ycmVudC51dGlsOworCitpbXBvcnQgY29tLmFsaXl1bi5vc3MuKjsKK2ltcG9ydCBjb20uYWxpeXVuLm9zcy5jb21tb24uYXV0aC5DcmVkZW50aWFsc1Byb3ZpZGVyRmFjdG9yeTsKK2ltcG9ydCBjb20uYWxpeXVuLm9zcy5jb21tb24uYXV0aC5FbnZpcm9ubWVudFZhcmlhYmxlQ3JlZGVudGlhbHNQcm92aWRlcjsKK2ltcG9ydCBjb20uYWxpeXVuLm9zcy5jb21tb24uY29tbS5TaWduVmVyc2lvbjsKK2ltcG9ydCBjb20uYWxpeXVuLm9zcy5pbnRlcm5hbC5NaW1ldHlwZXM7CitpbXBvcnQgY29tLmFsaXl1bi5vc3MubW9kZWwuKjsKK2ltcG9ydCBjb20uYWxpeXVuY3MuZXhjZXB0aW9ucy5DbGllbnRFeGNlcHRpb247CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgT3NzTXVsdGlwYXJ0VXBsb2FkZXIgeworCisgICAgcHJpdmF0ZSBmaW5hbCBPU1Mgb3NzQ2xpZW50OworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGJ1Y2tldE5hbWU7CisKKyAgICBwdWJsaWMgT3NzTXVsdGlwYXJ0VXBsb2FkZXIoU3RyaW5nIGVuZHBvaW50LCBTdHJpbmcgcmVnaW9uLCBTdHJpbmcgYnVja2V0TmFtZSkgdGhyb3dzIENsaWVudEV4Y2VwdGlvbiB7CisgICAgICAgIEVudmlyb25tZW50VmFyaWFibGVDcmVkZW50aWFsc1Byb3ZpZGVyIGNyZWRlbnRpYWxzUHJvdmlkZXIgPQorICAgICAgICAgICAgICAgIENyZWRlbnRpYWxzUHJvdmlkZXJGYWN0b3J5Lm5ld0Vudmlyb25tZW50VmFyaWFibGVDcmVkZW50aWFsc1Byb3ZpZGVyKCk7CisgICAgICAgIENsaWVudEJ1aWxkZXJDb25maWd1cmF0aW9uIGNvbmZpZyA9IG5ldyBDbGllbnRCdWlsZGVyQ29uZmlndXJhdGlvbigpOworICAgICAgICBjb25maWcuc2V0U2lnbmF0dXJlVmVyc2lvbihTaWduVmVyc2lvbi5WNCk7CisKKyAgICAgICAgdGhpcy5vc3NDbGllbnQgPSBPU1NDbGllbnRCdWlsZGVyLmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgLmVuZHBvaW50KGVuZHBvaW50KQorICAgICAgICAgICAgICAgIC5yZWdpb24ocmVnaW9uKQorICAgICAgICAgICAgICAgIC5jcmVkZW50aWFsc1Byb3ZpZGVyKGNyZWRlbnRpYWxzUHJvdmlkZXIpCisgICAgICAgICAgICAgICAgLmNsaWVudENvbmZpZ3VyYXRpb24oY29uZmlnKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworCisgICAgICAgIHRoaXMuYnVja2V0TmFtZSA9IGJ1Y2tldE5hbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdXBsb2FkRmlsZShTdHJpbmcgb2JqZWN0TmFtZSwgU3RyaW5nIGZpbGVQYXRoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZVBhdGgpOworICAgICAgICBsb25nIHBhcnRTaXplID0gMSAqIDEwMjQgKiAxMDI0TDsgLy8gMU1CCisgICAgICAgIGxvbmcgZmlsZUxlbmd0aCA9IGZpbGUubGVuZ3RoKCk7CisgICAgICAgIGludCBwYXJ0Q291bnQgPSAoaW50KSAoZmlsZUxlbmd0aCAvIHBhcnRTaXplKTsKKyAgICAgICAgaWYgKGZpbGVMZW5ndGggJSBwYXJ0U2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBwYXJ0Q291bnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIOiuvue9ruWFg+aVsOaNru+8iOWmgiBjb250ZW50LXR5cGXvvIkKKyAgICAgICAgT2JqZWN0TWV0YWRhdGEgbWV0YWRhdGEgPSBuZXcgT2JqZWN0TWV0YWRhdGEoKTsKKyAgICAgICAgbWV0YWRhdGEuc2V0Q29udGVudFR5cGUoTWltZXR5cGVzLmdldEluc3RhbmNlKCkuZ2V0TWltZXR5cGUoZmlsZSwgb2JqZWN0TmFtZSkpOworCisgICAgICAgIEluaXRpYXRlTXVsdGlwYXJ0VXBsb2FkUmVxdWVzdCBpbml0aWF0ZVJlcXVlc3QgPSBuZXcgSW5pdGlhdGVNdWx0aXBhcnRVcGxvYWRSZXF1ZXN0KGJ1Y2tldE5hbWUsIG9iamVjdE5hbWUpOworICAgICAgICBpbml0aWF0ZVJlcXVlc3Quc2V0T2JqZWN0TWV0YWRhdGEobWV0YWRhdGEpOworICAgICAgICBJbml0aWF0ZU11bHRpcGFydFVwbG9hZFJlc3VsdCBpbml0UmVzdWx0ID0gb3NzQ2xpZW50LmluaXRpYXRlTXVsdGlwYXJ0VXBsb2FkKGluaXRpYXRlUmVxdWVzdCk7CisgICAgICAgIFN0cmluZyB1cGxvYWRJZCA9IGluaXRSZXN1bHQuZ2V0VXBsb2FkSWQoKTsKKworICAgICAgICBMaXN0PFBhcnRFVGFnPiBwYXJ0RVRhZ3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0Q291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGxvbmcgc3RhcnRQb3MgPSBpICogcGFydFNpemU7CisgICAgICAgICAgICAgICAgbG9uZyBjdXJQYXJ0U2l6ZSA9IChpICsgMSA9PSBwYXJ0Q291bnQpID8gKGZpbGVMZW5ndGggLSBzdGFydFBvcykgOiBwYXJ0U2l6ZTsKKworICAgICAgICAgICAgICAgIHRyeSAoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlucHV0U3RyZWFtLnNraXAoc3RhcnRQb3MpOworCisgICAgICAgICAgICAgICAgICAgIFVwbG9hZFBhcnRSZXF1ZXN0IHVwbG9hZFBhcnRSZXF1ZXN0ID0gbmV3IFVwbG9hZFBhcnRSZXF1ZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHVwbG9hZFBhcnRSZXF1ZXN0LnNldEJ1Y2tldE5hbWUoYnVja2V0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHVwbG9hZFBhcnRSZXF1ZXN0LnNldEtleShvYmplY3ROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgdXBsb2FkUGFydFJlcXVlc3Quc2V0VXBsb2FkSWQodXBsb2FkSWQpOworICAgICAgICAgICAgICAgICAgICB1cGxvYWRQYXJ0UmVxdWVzdC5zZXRJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7CisgICAgICAgICAgICAgICAgICAgIHVwbG9hZFBhcnRSZXF1ZXN0LnNldFBhcnRTaXplKGN1clBhcnRTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgdXBsb2FkUGFydFJlcXVlc3Quc2V0UGFydE51bWJlcihpICsgMSk7CisKKyAgICAgICAgICAgICAgICAgICAgVXBsb2FkUGFydFJlc3VsdCB1cGxvYWRQYXJ0UmVzdWx0ID0gb3NzQ2xpZW50LnVwbG9hZFBhcnQodXBsb2FkUGFydFJlcXVlc3QpOworICAgICAgICAgICAgICAgICAgICBwYXJ0RVRhZ3MuYWRkKHVwbG9hZFBhcnRSZXN1bHQuZ2V0UGFydEVUYWcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDb21wbGV0ZU11bHRpcGFydFVwbG9hZFJlcXVlc3QgY29tcGxldGVSZXF1ZXN0ID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkUmVxdWVzdChidWNrZXROYW1lLCBvYmplY3ROYW1lLCB1cGxvYWRJZCwgcGFydEVUYWdzKTsKKworICAgICAgICAgICAgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRSZXN1bHQgcmVzdWx0ID0gb3NzQ2xpZW50LmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkKGNvbXBsZXRlUmVxdWVzdCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIuS4iuS8oOaIkOWKn++8jEVUYWc6ICIgKyByZXN1bHQuZ2V0RVRhZygpKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgb3NzQ2xpZW50LmFib3J0TXVsdGlwYXJ0VXBsb2FkKG5ldyBBYm9ydE11bHRpcGFydFVwbG9hZFJlcXVlc3QoYnVja2V0TmFtZSwgb2JqZWN0TmFtZSwgdXBsb2FkSWQpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCLkuIrkvKDlpLHotKXvvIzlt7LkuK3mraLkuIrkvKDku7vliqEiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNodXRkb3duKCkgeworICAgICAgICBpZiAob3NzQ2xpZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG9zc0NsaWVudC5zaHV0ZG93bigpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvdG9ycmVudC91dGlsL1RvcnJlbnRGaWxlVXRpbC5qYXZhIGIvcnVveWktYWRtaW4vc3JjL21haW4vamF2YS9jb20vcnVveWkvdG9ycmVudC91dGlsL1RvcnJlbnRGaWxlVXRpbC5qYXZhCmluZGV4IGExY2Q0MjIuLjAzZjJjMTggMTAwNjQ0Ci0tLSBhL3J1b3lpLWFkbWluL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL3RvcnJlbnQvdXRpbC9Ub3JyZW50RmlsZVV0aWwuamF2YQorKysgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS90b3JyZW50L3V0aWwvVG9ycmVudEZpbGVVdGlsLmphdmEKQEAgLTUsMTAgKzUsOCBAQAogaW1wb3J0IGphdmEuaW8uKjsKIGltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwogaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKLWltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOwotaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKLWltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOwotaW1wb3J0IGphdmEubmlvLmZpbGUuU3RhbmRhcmRDb3B5T3B0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuKjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLmF0dHJpYnV0ZS5CYXNpY0ZpbGVBdHRyaWJ1dGVzOwogaW1wb3J0IGphdmEudXRpbC4qOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKIApAQCAtMzMsMjggKzMxLDMwIEBACiAgICAgICAgICAgICBGaWxlcy5jcmVhdGVEaXJlY3RvcmllcyhzYXZlRGlyKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIOiOt+WPluaWh+S7tuS/oeaBrwotICAgICAgICBTdHJpbmcgb3JpZ2luYWxGaWxlbmFtZSA9IE9iamVjdHMucmVxdWlyZU5vbk51bGwoZmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCkpOwotICAgICAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IG9yaWdpbmFsRmlsZW5hbWUuc3Vic3RyaW5nKG9yaWdpbmFsRmlsZW5hbWUubGFzdEluZGV4T2YoIi4iKSk7Ci0gICAgICAgIFN0cmluZyBzdG9yZWRGaWxlbmFtZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgIl8iICsgVVVJRC5yYW5kb21VVUlEKCkgKyBmaWxlRXh0ZW5zaW9uOworICAgICAgICAvLyDojrflj5bljp/lp4vmlofku7blkI0KKyAgICAgICAgU3RyaW5nIG9yaWdpbmFsRmlsZW5hbWUgPSBPYmplY3RzLnJlcXVpcmVOb25OdWxsKGZpbGUuZ2V0T3JpZ2luYWxGaWxlbmFtZSgpKS50cmltKCk7CiAgICAgICAgIGxvbmcgZmlsZVNpemUgPSBmaWxlLmdldFNpemUoKTsKKyAgICAgICAgU3RyaW5nIGZpbGVFeHRlbnNpb24gPSBvcmlnaW5hbEZpbGVuYW1lLmNvbnRhaW5zKCIuIikgPworICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsZW5hbWUuc3Vic3RyaW5nKG9yaWdpbmFsRmlsZW5hbWUubGFzdEluZGV4T2YoIi4iKSkgOiAiIjsKIAotICAgICAgICAvLyDkv53lrZjmlofku7YKLSAgICAgICAgUGF0aCB0YXJnZXRQYXRoID0gc2F2ZURpci5yZXNvbHZlKHN0b3JlZEZpbGVuYW1lKTsKKyAgICAgICAgLy8g5L2/55So5Y6f5aeL5paH5Lu25ZCN5L+d5a2Y77yI6Ziy5q2i6Lev5b6E56m/6LaK5ryP5rSe77yJCisgICAgICAgIFN0cmluZyBzYWZlRmlsZU5hbWUgPSBvcmlnaW5hbEZpbGVuYW1lLnJlcGxhY2VBbGwoIltcXFxcLzoqP1wiPD58XSIsICJfIik7CisgICAgICAgIFBhdGggdGFyZ2V0UGF0aCA9IHNhdmVEaXIucmVzb2x2ZShzYWZlRmlsZU5hbWUpOwogICAgICAgICBGaWxlcy5jb3B5KGZpbGUuZ2V0SW5wdXRTdHJlYW0oKSwgdGFyZ2V0UGF0aCwgU3RhbmRhcmRDb3B5T3B0aW9uLlJFUExBQ0VfRVhJU1RJTkcpOwogCiAgICAgICAgIC8vIOi/lOWbnuaWh+S7tuS/oeaBrwogICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGZpbGVJbmZvID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgICBmaWxlSW5mby5wdXQoIm9yaWdpbmFsTmFtZSIsIG9yaWdpbmFsRmlsZW5hbWUpOwotICAgICAgICBmaWxlSW5mby5wdXQoInN0b3JlZE5hbWUiLCBzdG9yZWRGaWxlbmFtZSk7CisgICAgICAgIGZpbGVJbmZvLnB1dCgic3RvcmVkTmFtZSIsIHNhZmVGaWxlTmFtZSk7CiAgICAgICAgIGZpbGVJbmZvLnB1dCgiZmlsZVBhdGgiLCB0YXJnZXRQYXRoLnRvU3RyaW5nKCkpOwogICAgICAgICBmaWxlSW5mby5wdXQoImZpbGVTaXplIiwgZmlsZVNpemUpOwotICAgICAgICBmaWxlSW5mby5wdXQoImZpbGVUeXBlIiwgZmlsZUV4dGVuc2lvbi5zdWJzdHJpbmcoMSkpOworICAgICAgICBmaWxlSW5mby5wdXQoImZpbGVUeXBlIiwgZmlsZUV4dGVuc2lvbi5pc0VtcHR5KCkgPyAidW5rbm93biIgOiBmaWxlRXh0ZW5zaW9uLnN1YnN0cmluZygxKSk7CiAgICAgICAgIGZpbGVJbmZvLnB1dCgidXBsb2FkVGltZSIsIG5ldyBEYXRlKCkpOwogCiAgICAgICAgIHJldHVybiBmaWxlSW5mbzsKICAgICB9CiAKKwogICAgIC8qKgogICAgICAqIOaWh+S7tuS4i+i9veW3peWFt+aWueazlQogICAgICAqCkBAIC0xMTQsNiArMTE0LDQwIEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgLyoqCisgICAgICog5Yig6Zmk5paH5Lu25oiW5paH5Lu25aS5CisgICAgICoKKyAgICAgKiBAcGFyYW0gcGF0aCDmlofku7bmiJbmlofku7blpLnot6/lvoQKKyAgICAgKiBAcmV0dXJuIOaYr+WQpuWIoOmZpOaIkOWKnworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWxldGVGaWxlT3JGb2xkZXIoU3RyaW5nIHBhdGgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFBhdGggZmlsZVBhdGggPSBQYXRocy5nZXQocGF0aCk7CisgICAgICAgICAgICBpZiAoRmlsZXMuaXNEaXJlY3RvcnkoZmlsZVBhdGgpKSB7CisgICAgICAgICAgICAgICAgLy8g5aaC5p6c5piv5paH5Lu25aS577yM6YCS5b2S5Yig6Zmk5paH5Lu25aS55Lit55qE5YaF5a65CisgICAgICAgICAgICAgICAgRmlsZXMud2Fsa0ZpbGVUcmVlKGZpbGVQYXRoLCBuZXcgU2ltcGxlRmlsZVZpc2l0b3I8UGF0aD4oKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgRmlsZVZpc2l0UmVzdWx0IHZpc2l0RmlsZShQYXRoIGZpbGUsIEJhc2ljRmlsZUF0dHJpYnV0ZXMgYXR0cnMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgICAgICBGaWxlcy5kZWxldGUoZmlsZSk7IC8vIOWIoOmZpOaWh+S7tgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbGVWaXNpdFJlc3VsdC5DT05USU5VRTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgRmlsZVZpc2l0UmVzdWx0IHBvc3RWaXNpdERpcmVjdG9yeShQYXRoIGRpciwgSU9FeGNlcHRpb24gZXhjKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICAgICAgRmlsZXMuZGVsZXRlKGRpcik7IC8vIOWIoOmZpOaWh+S7tuWkuQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbGVWaXNpdFJlc3VsdC5DT05USU5VRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyDlpoLmnpzmmK/mlofku7bvvIznm7TmjqXliKDpmaQKKyAgICAgICAgICAgICAgICBGaWxlcy5kZWxldGVJZkV4aXN0cyhmaWxlUGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIOmHjeWRveWQjeaWh+S7tgpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLWRydWlkLnltbCBiL3J1b3lpLWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi1kcnVpZC55bWwKaW5kZXggMTJlZDRkNC4uY2ExZmNlOSAxMDA2NDQKLS0tIGEvcnVveWktYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLWRydWlkLnltbAorKysgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24tZHJ1aWQueW1sCkBAIC03LDggKzcsOCBAQAogICAgICAgICAgICAgIyDkuLvlupPmlbDmja7mupAKICAgICAgICAgICAgIG1hc3RlcjoKICAgICAgICAgICAgICAgICB1cmw6IGpkYmM6bXlzcWw6Ly80OS4yMzMuMjE1LjE0NDozMzA2L3B0X3N0YXRpb24/dXNlVW5pY29kZT10cnVlJmNoYXJhY3RlckVuY29kaW5nPXV0ZjgmemVyb0RhdGVUaW1lQmVoYXZpb3I9Y29udmVydFRvTnVsbCZ1c2VTU0w9dHJ1ZSZzZXJ2ZXJUaW1lem9uZT1HTVQlMkI4Ci0gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHN5Ci0gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHN5X3Bhc3N3b3JkCisgICAgICAgICAgICAgICAgdXNlcm5hbWU6IHJvb3QKKyAgICAgICAgICAgICAgICBwYXNzd29yZDogMjIzMDEwNThac3kqCiAgICAgICAgICAgICAjIOS7juW6k+aVsOaNrua6kAogICAgICAgICAgICAgc2xhdmU6CiAgICAgICAgICAgICAgICAgIyDku47mlbDmja7mupDlvIDlhbMv6buY6K6k5YWz6ZetCmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sIGIvcnVveWktYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbAppbmRleCBjYjFhODdjLi4wMWI3MWZlIDEwMDY0NAotLS0gYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKQEAgLTksNyArOSw3IEBACiAgICMg5paH5Lu26Lev5b6EIOekuuS+i++8iCBXaW5kb3dz6YWN572uRDovcnVveWkvdXBsb2FkUGF0aO+8jExpbnV46YWN572uIC9ob21lL3J1b3lpL3VwbG9hZFBhdGjvvIkKICAgcHJvZmlsZTogRDovcnVveWkvdXBsb2FkUGF0aAogICAjIOiOt+WPlmlw5Zyw5Z2A5byA5YWzCi0gIGFkZHJlc3NFbmFibGVkOiBmYWxzZQorICBhZGRyZXNzRW5hYmxlZDogdHJ1ZQogICAjIOmqjOivgeeggeexu+WeiyBtYXRoIOaVsOWtl+iuoeeulyBjaGFyIOWtl+espumqjOivgQogICBjYXB0Y2hhVHlwZTogbWF0aAogCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAjIOaVsOaNruW6k+e0ouW8lQogICAgICAgZGF0YWJhc2U6IDAKICAgICAgICMg5a+G56CBCi0gICAgICBwYXNzd29yZDoKKyAgICAgIHBhc3N3b3JkOiAyMjMwMTA1OFpzeSoKICAgICAgICMg6L+e5o6l6LaF5pe25pe26Ze0CiAgICAgICB0aW1lb3V0OiAxMHMKICAgICAgIGxldHR1Y2U6CmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL3N5c3RlbS9CdFRvcnJlbnRNYXBwZXIueG1sIGIvcnVveWktYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9zeXN0ZW0vQnRUb3JyZW50TWFwcGVyLnhtbAppbmRleCBlMTkxMjhhLi40ZjVjZjNmIDEwMDY0NAotLS0gYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL3N5c3RlbS9CdFRvcnJlbnRNYXBwZXIueG1sCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvc3lzdGVtL0J0VG9ycmVudE1hcHBlci54bWwKQEAgLTQ1LDYgKzQ1LDE5IEBACiAgICAgICAgIHdoZXJlIHRvcnJlbnRfaWQgPSAje3RvcnJlbnRJZH0KICAgICA8L3NlbGVjdD4KIAorICAgIDxzZWxlY3QgaWQ9InNlbGVjdEJ0VG9ycmVudHNCeUlkc09yZGVyZWQiIHJlc3VsdFR5cGU9IkJ0VG9ycmVudCI+CisgICAgICAgIFNFTEVDVCAqIEZST00gYnRfdG9ycmVudAorICAgICAgICBXSEVSRSBpZCBJTgorICAgICAgICA8Zm9yZWFjaCBjb2xsZWN0aW9uPSJsaXN0IiBpdGVtPSJpZCIgb3Blbj0iKCIgc2VwYXJhdG9yPSIsIiBjbG9zZT0iKSI+CisgICAgICAgICAgICAje2lkfQorICAgICAgICA8L2ZvcmVhY2g+CisgICAgICAgIE9SREVSIEJZIEZJRUxEKGlkCisgICAgICAgIDxmb3JlYWNoIGNvbGxlY3Rpb249Imxpc3QiIGl0ZW09ImlkIiBzZXBhcmF0b3I9IiwiPgorICAgICAgICAgICAgI3tpZH0KKyAgICAgICAgPC9mb3JlYWNoPgorICAgICAgICApCisgICAgPC9zZWxlY3Q+CisKICAgICA8aW5zZXJ0IGlkPSJpbnNlcnRCdFRvcnJlbnQiIHBhcmFtZXRlclR5cGU9IkJ0VG9ycmVudCIgdXNlR2VuZXJhdGVkS2V5cz0idHJ1ZSIga2V5UHJvcGVydHk9InRvcnJlbnRJZCI+CiAgICAgICAgIGluc2VydCBpbnRvIGJ0X3RvcnJlbnQKICAgICAgICAgPHRyaW0gcHJlZml4PSIoIiBzdWZmaXg9IikiIHN1ZmZpeE92ZXJyaWRlcz0iLCI+CmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL3N5c3RlbS9SZXdhcmRUYXNrc01hcHBlci54bWwgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL3N5c3RlbS9SZXdhcmRUYXNrc01hcHBlci54bWwKaW5kZXggYmFlODE4NS4uNDAxOTQ3MyAxMDA2NDQKLS0tIGEvcnVveWktYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9zeXN0ZW0vUmV3YXJkVGFza3NNYXBwZXIueG1sCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvc3lzdGVtL1Jld2FyZFRhc2tzTWFwcGVyLnhtbApAQCAtMSw0NSArMSw0NyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CiA8IURPQ1RZUEUgbWFwcGVyCi1QVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCi0iaHR0cDovL215YmF0aXMub3JnL2R0ZC9teWJhdGlzLTMtbWFwcGVyLmR0ZCI+CisgICAgICAgIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgogPG1hcHBlciBuYW1lc3BhY2U9ImNvbS5ydW95aS5yZXdhcmQubWFwcGVyLlJld2FyZFRhc2tzTWFwcGVyIj4KLSAgICAKKwogICAgIDxyZXN1bHRNYXAgdHlwZT0iUmV3YXJkVGFza3MiIGlkPSJSZXdhcmRUYXNrc1Jlc3VsdCI+Ci0gICAgICAgIDxyZXN1bHQgcHJvcGVydHk9InJld2FyZElkIiAgICBjb2x1bW49InJld2FyZF9pZCIgICAgLz4KLSAgICAgICAgPHJlc3VsdCBwcm9wZXJ0eT0idGl0bGUiICAgIGNvbHVtbj0idGl0bGUiICAgIC8+Ci0gICAgICAgIDxyZXN1bHQgcHJvcGVydHk9ImRlc2NyaXB0aW9uIiAgICBjb2x1bW49ImRlc2NyaXB0aW9uIiAgICAvPgotICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJhbW91bnQiICAgIGNvbHVtbj0iYW1vdW50IiAgICAvPgotICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJzdGF0dXMiICAgIGNvbHVtbj0ic3RhdHVzIiAgICAvPgotICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJwdWJsaXNoZXJJZCIgICAgY29sdW1uPSJwdWJsaXNoZXJfaWQiICAgIC8+Ci0gICAgICAgIDxyZXN1bHQgcHJvcGVydHk9ImFjY2VwdGVySWQiICAgIGNvbHVtbj0iYWNjZXB0ZXJfaWQiICAgIC8+Ci0gICAgICAgIDxyZXN1bHQgcHJvcGVydHk9ImNyZWF0ZVRpbWUiICAgIGNvbHVtbj0iY3JlYXRlX3RpbWUiICAgIC8+Ci0gICAgICAgIDxyZXN1bHQgcHJvcGVydHk9InVwZGF0ZVRpbWUiICAgIGNvbHVtbj0idXBkYXRlX3RpbWUiICAgIC8+Ci0gICAgICAgIDxyZXN1bHQgcHJvcGVydHk9InJlbWFyayIgICAgY29sdW1uPSJyZW1hcmsiICAgIC8+CisgICAgICAgIDxyZXN1bHQgcHJvcGVydHk9InJld2FyZElkIiBjb2x1bW49InJld2FyZF9pZCIgLz4KKyAgICAgICAgPHJlc3VsdCBwcm9wZXJ0eT0idGl0bGUiIGNvbHVtbj0idGl0bGUiIC8+CisgICAgICAgIDxyZXN1bHQgcHJvcGVydHk9ImRlc2NyaXB0aW9uIiBjb2x1bW49ImRlc2NyaXB0aW9uIiAvPgorICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJhbW91bnQiIGNvbHVtbj0iYW1vdW50IiAvPgorICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJzdGF0dXMiIGNvbHVtbj0ic3RhdHVzIiAvPgorICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJwdWJsaXNoZXJJZCIgY29sdW1uPSJwdWJsaXNoZXJfaWQiIC8+CisgICAgICAgIDxyZXN1bHQgcHJvcGVydHk9ImFjY2VwdGVySWQiIGNvbHVtbj0iYWNjZXB0ZXJfaWQiIC8+CisgICAgICAgIDxyZXN1bHQgcHJvcGVydHk9ImNyZWF0ZVRpbWUiIGNvbHVtbj0iY3JlYXRlX3RpbWUiIC8+CisgICAgICAgIDxyZXN1bHQgcHJvcGVydHk9InVwZGF0ZVRpbWUiIGNvbHVtbj0idXBkYXRlX3RpbWUiIC8+CisgICAgICAgIDxyZXN1bHQgcHJvcGVydHk9InJlbWFyayIgY29sdW1uPSJyZW1hcmsiIC8+CiAgICAgPC9yZXN1bHRNYXA+CiAKICAgICA8c3FsIGlkPSJzZWxlY3RSZXdhcmRUYXNrc1ZvIj4KLSAgICAgICAgc2VsZWN0IHJld2FyZF9pZCwgdGl0bGUsIGRlc2NyaXB0aW9uLCBhbW91bnQsIHN0YXR1cywgcHVibGlzaGVyX2lkLCBhY2NlcHRlcl9pZCwgY3JlYXRlX3RpbWUsIHVwZGF0ZV90aW1lLCByZW1hcmsgZnJvbSByZXdhcmRfdGFza3MKKyAgICAgICAgU0VMRUNUIHJld2FyZF9pZCwgdGl0bGUsIGRlc2NyaXB0aW9uLCBhbW91bnQsIHN0YXR1cywgcHVibGlzaGVyX2lkLCBhY2NlcHRlcl9pZCwgY3JlYXRlX3RpbWUsIHVwZGF0ZV90aW1lLCByZW1hcmsKKyAgICAgICAgRlJPTSByZXdhcmRfdGFza3MKKyAgICAgICAgT1JERVIgQlkgY3JlYXRlX3RpbWUgREVTQwogICAgIDwvc3FsPgogCiAgICAgPHNlbGVjdCBpZD0ic2VsZWN0UmV3YXJkVGFza3NMaXN0IiBwYXJhbWV0ZXJUeXBlPSJSZXdhcmRUYXNrcyIgcmVzdWx0TWFwPSJSZXdhcmRUYXNrc1Jlc3VsdCI+CiAgICAgICAgIDxpbmNsdWRlIHJlZmlkPSJzZWxlY3RSZXdhcmRUYXNrc1ZvIi8+Ci0gICAgICAgIDx3aGVyZT4gIAotICAgICAgICAgICAgPGlmIHRlc3Q9InRpdGxlICE9IG51bGwgIGFuZCB0aXRsZSAhPSAnJyI+IGFuZCB0aXRsZSA9ICN7dGl0bGV9PC9pZj4KLSAgICAgICAgICAgIDxpZiB0ZXN0PSJkZXNjcmlwdGlvbiAhPSBudWxsICBhbmQgZGVzY3JpcHRpb24gIT0gJyciPiBhbmQgZGVzY3JpcHRpb24gPSAje2Rlc2NyaXB0aW9ufTwvaWY+Ci0gICAgICAgICAgICA8aWYgdGVzdD0iYW1vdW50ICE9IG51bGwgIj4gYW5kIGFtb3VudCA9ICN7YW1vdW50fTwvaWY+Ci0gICAgICAgICAgICA8aWYgdGVzdD0ic3RhdHVzICE9IG51bGwgIGFuZCBzdGF0dXMgIT0gJyciPiBhbmQgc3RhdHVzID0gI3tzdGF0dXN9PC9pZj4KLSAgICAgICAgICAgIDxpZiB0ZXN0PSJwdWJsaXNoZXJJZCAhPSBudWxsICI+IGFuZCBwdWJsaXNoZXJfaWQgPSAje3B1Ymxpc2hlcklkfTwvaWY+Ci0gICAgICAgICAgICA8aWYgdGVzdD0iYWNjZXB0ZXJJZCAhPSBudWxsICI+IGFuZCBhY2NlcHRlcl9pZCA9ICN7YWNjZXB0ZXJJZH08L2lmPgorICAgICAgICA8d2hlcmU+CisgICAgICAgICAgICA8aWYgdGVzdD0idGl0bGUgIT0gbnVsbCBhbmQgdGl0bGUgIT0gJyciPiBBTkQgdGl0bGUgPSAje3RpdGxlfTwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0iZGVzY3JpcHRpb24gIT0gbnVsbCBhbmQgZGVzY3JpcHRpb24gIT0gJyciPiBBTkQgZGVzY3JpcHRpb24gPSAje2Rlc2NyaXB0aW9ufTwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0iYW1vdW50ICE9IG51bGwiPiBBTkQgYW1vdW50ID0gI3thbW91bnR9PC9pZj4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJzdGF0dXMgIT0gbnVsbCBhbmQgc3RhdHVzICE9ICcnIj4gQU5EIHN0YXR1cyA9ICN7c3RhdHVzfTwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0icHVibGlzaGVySWQgIT0gbnVsbCI+IEFORCBwdWJsaXNoZXJfaWQgPSAje3B1Ymxpc2hlcklkfTwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0iYWNjZXB0ZXJJZCAhPSBudWxsIj4gQU5EIGFjY2VwdGVyX2lkID0gI3thY2NlcHRlcklkfTwvaWY+CiAgICAgICAgIDwvd2hlcmU+CiAgICAgPC9zZWxlY3Q+Ci0gICAgCisKICAgICA8c2VsZWN0IGlkPSJzZWxlY3RSZXdhcmRUYXNrc0J5UmV3YXJkSWQiIHBhcmFtZXRlclR5cGU9IkxvbmciIHJlc3VsdE1hcD0iUmV3YXJkVGFza3NSZXN1bHQiPgogICAgICAgICA8aW5jbHVkZSByZWZpZD0ic2VsZWN0UmV3YXJkVGFza3NWbyIvPgotICAgICAgICB3aGVyZSByZXdhcmRfaWQgPSAje3Jld2FyZElkfQorICAgICAgICBXSEVSRSByZXdhcmRfaWQgPSAje3Jld2FyZElkfQogICAgIDwvc2VsZWN0PgogCiAgICAgPGluc2VydCBpZD0iaW5zZXJ0UmV3YXJkVGFza3MiIHBhcmFtZXRlclR5cGU9IlJld2FyZFRhc2tzIiB1c2VHZW5lcmF0ZWRLZXlzPSJ0cnVlIiBrZXlQcm9wZXJ0eT0icmV3YXJkSWQiPgotICAgICAgICBpbnNlcnQgaW50byByZXdhcmRfdGFza3MKKyAgICAgICAgSU5TRVJUIElOVE8gcmV3YXJkX3Rhc2tzCiAgICAgICAgIDx0cmltIHByZWZpeD0iKCIgc3VmZml4PSIpIiBzdWZmaXhPdmVycmlkZXM9IiwiPgogICAgICAgICAgICAgPGlmIHRlc3Q9InRpdGxlICE9IG51bGwgYW5kIHRpdGxlICE9ICcnIj50aXRsZSw8L2lmPgogICAgICAgICAgICAgPGlmIHRlc3Q9ImRlc2NyaXB0aW9uICE9IG51bGwgYW5kIGRlc2NyaXB0aW9uICE9ICcnIj5kZXNjcmlwdGlvbiw8L2lmPgpAQCAtNTAsOCArNTIsOCBAQAogICAgICAgICAgICAgPGlmIHRlc3Q9ImNyZWF0ZVRpbWUgIT0gbnVsbCI+Y3JlYXRlX3RpbWUsPC9pZj4KICAgICAgICAgICAgIDxpZiB0ZXN0PSJ1cGRhdGVUaW1lICE9IG51bGwiPnVwZGF0ZV90aW1lLDwvaWY+CiAgICAgICAgICAgICA8aWYgdGVzdD0icmVtYXJrICE9IG51bGwiPnJlbWFyayw8L2lmPgotICAgICAgICAgPC90cmltPgotICAgICAgICA8dHJpbSBwcmVmaXg9InZhbHVlcyAoIiBzdWZmaXg9IikiIHN1ZmZpeE92ZXJyaWRlcz0iLCI+CisgICAgICAgIDwvdHJpbT4KKyAgICAgICAgPHRyaW0gcHJlZml4PSJWQUxVRVMgKCIgc3VmZml4PSIpIiBzdWZmaXhPdmVycmlkZXM9IiwiPgogICAgICAgICAgICAgPGlmIHRlc3Q9InRpdGxlICE9IG51bGwgYW5kIHRpdGxlICE9ICcnIj4je3RpdGxlfSw8L2lmPgogICAgICAgICAgICAgPGlmIHRlc3Q9ImRlc2NyaXB0aW9uICE9IG51bGwgYW5kIGRlc2NyaXB0aW9uICE9ICcnIj4je2Rlc2NyaXB0aW9ufSw8L2lmPgogICAgICAgICAgICAgPGlmIHRlc3Q9ImFtb3VudCAhPSBudWxsIj4je2Ftb3VudH0sPC9pZj4KQEAgLTYxLDExICs2MywxMSBAQAogICAgICAgICAgICAgPGlmIHRlc3Q9ImNyZWF0ZVRpbWUgIT0gbnVsbCI+I3tjcmVhdGVUaW1lfSw8L2lmPgogICAgICAgICAgICAgPGlmIHRlc3Q9InVwZGF0ZVRpbWUgIT0gbnVsbCI+I3t1cGRhdGVUaW1lfSw8L2lmPgogICAgICAgICAgICAgPGlmIHRlc3Q9InJlbWFyayAhPSBudWxsIj4je3JlbWFya30sPC9pZj4KLSAgICAgICAgIDwvdHJpbT4KKyAgICAgICAgPC90cmltPgogICAgIDwvaW5zZXJ0PgogCiAgICAgPHVwZGF0ZSBpZD0idXBkYXRlUmV3YXJkVGFza3MiIHBhcmFtZXRlclR5cGU9IlJld2FyZFRhc2tzIj4KLSAgICAgICAgdXBkYXRlIHJld2FyZF90YXNrcworICAgICAgICBVUERBVEUgcmV3YXJkX3Rhc2tzCiAgICAgICAgIDx0cmltIHByZWZpeD0iU0VUIiBzdWZmaXhPdmVycmlkZXM9IiwiPgogICAgICAgICAgICAgPGlmIHRlc3Q9InRpdGxlICE9IG51bGwgYW5kIHRpdGxlICE9ICcnIj50aXRsZSA9ICN7dGl0bGV9LDwvaWY+CiAgICAgICAgICAgICA8aWYgdGVzdD0iZGVzY3JpcHRpb24gIT0gbnVsbCBhbmQgZGVzY3JpcHRpb24gIT0gJyciPmRlc2NyaXB0aW9uID0gI3tkZXNjcmlwdGlvbn0sPC9pZj4KQEAgLTc3LDE3ICs3OSwyNiBAQAogICAgICAgICAgICAgPGlmIHRlc3Q9InVwZGF0ZVRpbWUgIT0gbnVsbCI+dXBkYXRlX3RpbWUgPSAje3VwZGF0ZVRpbWV9LDwvaWY+CiAgICAgICAgICAgICA8aWYgdGVzdD0icmVtYXJrICE9IG51bGwiPnJlbWFyayA9ICN7cmVtYXJrfSw8L2lmPgogICAgICAgICA8L3RyaW0+Ci0gICAgICAgIHdoZXJlIHJld2FyZF9pZCA9ICN7cmV3YXJkSWR9CisgICAgICAgIFdIRVJFIHJld2FyZF9pZCA9ICN7cmV3YXJkSWR9CiAgICAgPC91cGRhdGU+CiAKICAgICA8ZGVsZXRlIGlkPSJkZWxldGVSZXdhcmRUYXNrc0J5UmV3YXJkSWQiIHBhcmFtZXRlclR5cGU9IkxvbmciPgotICAgICAgICBkZWxldGUgZnJvbSByZXdhcmRfdGFza3Mgd2hlcmUgcmV3YXJkX2lkID0gI3tyZXdhcmRJZH0KKyAgICAgICAgREVMRVRFIEZST00gcmV3YXJkX3Rhc2tzIFdIRVJFIHJld2FyZF9pZCA9ICN7cmV3YXJkSWR9CiAgICAgPC9kZWxldGU+CiAKLSAgICA8ZGVsZXRlIGlkPSJkZWxldGVSZXdhcmRUYXNrc0J5UmV3YXJkSWRzIiBwYXJhbWV0ZXJUeXBlPSJTdHJpbmciPgotICAgICAgICBkZWxldGUgZnJvbSByZXdhcmRfdGFza3Mgd2hlcmUgcmV3YXJkX2lkIGluIAorICAgIDxkZWxldGUgaWQ9ImRlbGV0ZVJld2FyZFRhc2tzQnlSZXdhcmRJZHMiIHBhcmFtZXRlclR5cGU9IkxvbmciPgorICAgICAgICBERUxFVEUgRlJPTSByZXdhcmRfdGFza3MgV0hFUkUgcmV3YXJkX2lkIElOCiAgICAgICAgIDxmb3JlYWNoIGl0ZW09InJld2FyZElkIiBjb2xsZWN0aW9uPSJhcnJheSIgb3Blbj0iKCIgc2VwYXJhdG9yPSIsIiBjbG9zZT0iKSI+CiAgICAgICAgICAgICAje3Jld2FyZElkfQogICAgICAgICA8L2ZvcmVhY2g+CiAgICAgPC9kZWxldGU+CisKKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RSZXdhcmRCdEJ5UmV3YXJkSWQiIHBhcmFtZXRlclR5cGU9IkludGVnZXIiIHJlc3VsdFR5cGU9IkludGVnZXIiPgorICAgICAgICBTRUxFQ1QgcmV3YXJkX2J0IEZST00gcmV3YXJkX2J0IFdIRVJFIHJld2FyZF9pZCA9ICN7cmV3YXJkSWR9CisgICAgPC9zZWxlY3Q+CisKKyAgICA8aW5zZXJ0IGlkPSJpbnNlcnRSZXdhcmRCdCIgcGFyYW1ldGVyVHlwZT0ibWFwIj4KKyAgICAgICAgSU5TRVJUIElOVE8gcmV3YXJkX2J0IChyZXdhcmRfaWQsIHJld2FyZF9idCkKKyAgICAgICAgVkFMVUVTICgje3Jld2FyZElkfSwgI3tyZXdhcmRCdH0pCisgICAgPC9pbnNlcnQ+CiA8L21hcHBlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ydW95aS1hZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL3N5c3RlbS9TeXNVc2VyUGFzc2tleU1hcHBlci54bWwgYi9ydW95aS1hZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL3N5c3RlbS9TeXNVc2VyUGFzc2tleU1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ5YWM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvc3lzdGVtL1N5c1VzZXJQYXNza2V5TWFwcGVyLnhtbApAQCAtMCwwICsxLDYyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhRE9DVFlQRSBtYXBwZXIKK1BVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKzxtYXBwZXIgbmFtZXNwYWNlPSJjb20ucnVveWkuYXV0aGVudGljYXRpb24ubWFwcGVyLlN5c1VzZXJQYXNza2V5TWFwcGVyIj4KKyAgICAKKyAgICA8cmVzdWx0TWFwIHR5cGU9IlN5c1VzZXJQYXNza2V5IiBpZD0iU3lzVXNlclBhc3NrZXlSZXN1bHQiPgorICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJ1c2VySWQiICAgIGNvbHVtbj0idXNlcl9pZCIgICAgLz4KKyAgICAgICAgPHJlc3VsdCBwcm9wZXJ0eT0icGFzc2tleSIgICAgY29sdW1uPSJwYXNza2V5IiAgICAvPgorICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJjcmVhdGVkQXQiICAgIGNvbHVtbj0iY3JlYXRlZF9hdCIgICAgLz4KKyAgICA8L3Jlc3VsdE1hcD4KKworICAgIDxzcWwgaWQ9InNlbGVjdFN5c1VzZXJQYXNza2V5Vm8iPgorICAgICAgICBzZWxlY3QgdXNlcl9pZCwgcGFzc2tleSwgY3JlYXRlZF9hdCBmcm9tIHN5c191c2VyX3Bhc3NrZXkKKyAgICA8L3NxbD4KKworICAgIDxzZWxlY3QgaWQ9InNlbGVjdFN5c1VzZXJQYXNza2V5TGlzdCIgcGFyYW1ldGVyVHlwZT0iU3lzVXNlclBhc3NrZXkiIHJlc3VsdE1hcD0iU3lzVXNlclBhc3NrZXlSZXN1bHQiPgorICAgICAgICA8aW5jbHVkZSByZWZpZD0ic2VsZWN0U3lzVXNlclBhc3NrZXlWbyIvPgorICAgICAgICA8d2hlcmU+ICAKKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXNza2V5ICE9IG51bGwgIGFuZCBwYXNza2V5ICE9ICcnIj4gYW5kIHBhc3NrZXkgPSAje3Bhc3NrZXl9PC9pZj4KKyAgICAgICAgPC93aGVyZT4KKyAgICA8L3NlbGVjdD4KKyAgICAKKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RTeXNVc2VyUGFzc2tleUJ5VXNlcklkIiBwYXJhbWV0ZXJUeXBlPSJMb25nIiByZXN1bHRNYXA9IlN5c1VzZXJQYXNza2V5UmVzdWx0Ij4KKyAgICAgICAgPGluY2x1ZGUgcmVmaWQ9InNlbGVjdFN5c1VzZXJQYXNza2V5Vm8iLz4KKyAgICAgICAgd2hlcmUgdXNlcl9pZCA9ICN7dXNlcklkfQorICAgIDwvc2VsZWN0PgorCisgICAgPGluc2VydCBpZD0iaW5zZXJ0U3lzVXNlclBhc3NrZXkiIHBhcmFtZXRlclR5cGU9IlN5c1VzZXJQYXNza2V5Ij4KKyAgICAgICAgaW5zZXJ0IGludG8gc3lzX3VzZXJfcGFzc2tleQorICAgICAgICA8dHJpbSBwcmVmaXg9IigiIHN1ZmZpeD0iKSIgc3VmZml4T3ZlcnJpZGVzPSIsIj4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJ1c2VySWQgIT0gbnVsbCI+dXNlcl9pZCw8L2lmPgorICAgICAgICAgICAgPGlmIHRlc3Q9InBhc3NrZXkgIT0gbnVsbCBhbmQgcGFzc2tleSAhPSAnJyI+cGFzc2tleSw8L2lmPgorICAgICAgICAgICAgPGlmIHRlc3Q9ImNyZWF0ZWRBdCAhPSBudWxsIj5jcmVhdGVkX2F0LDwvaWY+CisgICAgICAgICA8L3RyaW0+CisgICAgICAgIDx0cmltIHByZWZpeD0idmFsdWVzICgiIHN1ZmZpeD0iKSIgc3VmZml4T3ZlcnJpZGVzPSIsIj4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJ1c2VySWQgIT0gbnVsbCI+I3t1c2VySWR9LDwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0icGFzc2tleSAhPSBudWxsIGFuZCBwYXNza2V5ICE9ICcnIj4je3Bhc3NrZXl9LDwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0iY3JlYXRlZEF0ICE9IG51bGwiPiN7Y3JlYXRlZEF0fSw8L2lmPgorICAgICAgICAgPC90cmltPgorICAgIDwvaW5zZXJ0PgorCisgICAgPHVwZGF0ZSBpZD0idXBkYXRlU3lzVXNlclBhc3NrZXkiIHBhcmFtZXRlclR5cGU9IlN5c1VzZXJQYXNza2V5Ij4KKyAgICAgICAgdXBkYXRlIHN5c191c2VyX3Bhc3NrZXkKKyAgICAgICAgPHRyaW0gcHJlZml4PSJTRVQiIHN1ZmZpeE92ZXJyaWRlcz0iLCI+CisgICAgICAgICAgICA8aWYgdGVzdD0icGFzc2tleSAhPSBudWxsIGFuZCBwYXNza2V5ICE9ICcnIj5wYXNza2V5ID0gI3twYXNza2V5fSw8L2lmPgorICAgICAgICAgICAgPGlmIHRlc3Q9ImNyZWF0ZWRBdCAhPSBudWxsIj5jcmVhdGVkX2F0ID0gI3tjcmVhdGVkQXR9LDwvaWY+CisgICAgICAgIDwvdHJpbT4KKyAgICAgICAgd2hlcmUgdXNlcl9pZCA9ICN7dXNlcklkfQorICAgIDwvdXBkYXRlPgorCisgICAgPGRlbGV0ZSBpZD0iZGVsZXRlU3lzVXNlclBhc3NrZXlCeVVzZXJJZCIgcGFyYW1ldGVyVHlwZT0iTG9uZyI+CisgICAgICAgIGRlbGV0ZSBmcm9tIHN5c191c2VyX3Bhc3NrZXkgd2hlcmUgdXNlcl9pZCA9ICN7dXNlcklkfQorICAgIDwvZGVsZXRlPgorCisgICAgPGRlbGV0ZSBpZD0iZGVsZXRlU3lzVXNlclBhc3NrZXlCeVVzZXJJZHMiIHBhcmFtZXRlclR5cGU9IlN0cmluZyI+CisgICAgICAgIGRlbGV0ZSBmcm9tIHN5c191c2VyX3Bhc3NrZXkgd2hlcmUgdXNlcl9pZCBpbiAKKyAgICAgICAgPGZvcmVhY2ggaXRlbT0idXNlcklkIiBjb2xsZWN0aW9uPSJhcnJheSIgb3Blbj0iKCIgc2VwYXJhdG9yPSIsIiBjbG9zZT0iKSI+CisgICAgICAgICAgICAje3VzZXJJZH0KKyAgICAgICAgPC9mb3JlYWNoPgorICAgIDwvZGVsZXRlPgorPC9tYXBwZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcnVveWktYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL21hcHBlci9zeXN0ZW0vVXNlclNjb3JlTWFwcGVyLnhtbCBiL3J1b3lpLWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvc3lzdGVtL1VzZXJTY29yZU1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwZjdmYwotLS0gL2Rldi9udWxsCisrKyBiL3J1b3lpLWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9tYXBwZXIvc3lzdGVtL1VzZXJTY29yZU1hcHBlci54bWwKQEAgLTAsMCArMSw3OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IURPQ1RZUEUgbWFwcGVyCitQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisiaHR0cDovL215YmF0aXMub3JnL2R0ZC9teWJhdGlzLTMtbWFwcGVyLmR0ZCI+Cis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLnJ1b3lpLmF1dGhlbnRpY2F0aW9uLm1hcHBlci5Vc2VyU2NvcmVNYXBwZXIiPgorICAgIAorICAgIDxyZXN1bHRNYXAgdHlwZT0iVXNlclNjb3JlIiBpZD0iVXNlclNjb3JlUmVzdWx0Ij4KKyAgICAgICAgPHJlc3VsdCBwcm9wZXJ0eT0idXNlcklkIiAgICBjb2x1bW49InVzZXJfaWQiICAgIC8+CisgICAgICAgIDxyZXN1bHQgcHJvcGVydHk9InVwbG9hZGVkIiAgICBjb2x1bW49InVwbG9hZGVkIiAgICAvPgorICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJkb3dubG9hZGVkIiAgICBjb2x1bW49ImRvd25sb2FkZWQiICAgIC8+CisgICAgICAgIDxyZXN1bHQgcHJvcGVydHk9ImJvbnVzIiAgICBjb2x1bW49ImJvbnVzIiAgICAvPgorICAgICAgICA8cmVzdWx0IHByb3BlcnR5PSJzY29yZSIgICAgY29sdW1uPSJzY29yZSIgICAgLz4KKyAgICAgICAgPHJlc3VsdCBwcm9wZXJ0eT0idXBkYXRlZEF0IiAgICBjb2x1bW49InVwZGF0ZWRfYXQiICAgIC8+CisgICAgPC9yZXN1bHRNYXA+CisKKyAgICA8c3FsIGlkPSJzZWxlY3RVc2VyU2NvcmVWbyI+CisgICAgICAgIHNlbGVjdCB1c2VyX2lkLCB1cGxvYWRlZCwgZG93bmxvYWRlZCwgYm9udXMsIHNjb3JlLCB1cGRhdGVkX2F0IGZyb20gdXNlcl9zY29yZQorICAgIDwvc3FsPgorCisgICAgPHNlbGVjdCBpZD0ic2VsZWN0VXNlclNjb3JlTGlzdCIgcGFyYW1ldGVyVHlwZT0iVXNlclNjb3JlIiByZXN1bHRNYXA9IlVzZXJTY29yZVJlc3VsdCI+CisgICAgICAgIDxpbmNsdWRlIHJlZmlkPSJzZWxlY3RVc2VyU2NvcmVWbyIvPgorICAgICAgICA8d2hlcmU+ICAKKyAgICAgICAgICAgIDxpZiB0ZXN0PSJ1cGxvYWRlZCAhPSBudWxsICBhbmQgdXBsb2FkZWQgIT0gJyciPiBhbmQgdXBsb2FkZWQgPSAje3VwbG9hZGVkfTwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0iZG93bmxvYWRlZCAhPSBudWxsICBhbmQgZG93bmxvYWRlZCAhPSAnJyI+IGFuZCBkb3dubG9hZGVkID0gI3tkb3dubG9hZGVkfTwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0iYm9udXMgIT0gbnVsbCAiPiBhbmQgYm9udXMgPSAje2JvbnVzfTwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0ic2NvcmUgIT0gbnVsbCAiPiBhbmQgc2NvcmUgPSAje3Njb3JlfTwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0idXBkYXRlZEF0ICE9IG51bGwgIj4gYW5kIHVwZGF0ZWRfYXQgPSAje3VwZGF0ZWRBdH08L2lmPgorICAgICAgICA8L3doZXJlPgorICAgIDwvc2VsZWN0PgorICAgIAorICAgIDxzZWxlY3QgaWQ9InNlbGVjdFVzZXJTY29yZUJ5VXNlcklkIiBwYXJhbWV0ZXJUeXBlPSJMb25nIiByZXN1bHRNYXA9IlVzZXJTY29yZVJlc3VsdCI+CisgICAgICAgIDxpbmNsdWRlIHJlZmlkPSJzZWxlY3RVc2VyU2NvcmVWbyIvPgorICAgICAgICB3aGVyZSB1c2VyX2lkID0gI3t1c2VySWR9CisgICAgPC9zZWxlY3Q+CisKKyAgICA8aW5zZXJ0IGlkPSJpbnNlcnRVc2VyU2NvcmUiIHBhcmFtZXRlclR5cGU9IlVzZXJTY29yZSI+CisgICAgICAgIGluc2VydCBpbnRvIHVzZXJfc2NvcmUKKyAgICAgICAgPHRyaW0gcHJlZml4PSIoIiBzdWZmaXg9IikiIHN1ZmZpeE92ZXJyaWRlcz0iLCI+CisgICAgICAgICAgICA8aWYgdGVzdD0idXNlcklkICE9IG51bGwiPnVzZXJfaWQsPC9pZj4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJ1cGxvYWRlZCAhPSBudWxsIj51cGxvYWRlZCw8L2lmPgorICAgICAgICAgICAgPGlmIHRlc3Q9ImRvd25sb2FkZWQgIT0gbnVsbCI+ZG93bmxvYWRlZCw8L2lmPgorICAgICAgICAgICAgPGlmIHRlc3Q9ImJvbnVzICE9IG51bGwiPmJvbnVzLDwvaWY+CisKKyAgICAgICAgICAgIDxpZiB0ZXN0PSJ1cGRhdGVkQXQgIT0gbnVsbCI+dXBkYXRlZF9hdCw8L2lmPgorICAgICAgICAgPC90cmltPgorICAgICAgICA8dHJpbSBwcmVmaXg9InZhbHVlcyAoIiBzdWZmaXg9IikiIHN1ZmZpeE92ZXJyaWRlcz0iLCI+CisgICAgICAgICAgICA8aWYgdGVzdD0idXNlcklkICE9IG51bGwiPiN7dXNlcklkfSw8L2lmPgorICAgICAgICAgICAgPGlmIHRlc3Q9InVwbG9hZGVkICE9IG51bGwiPiN7dXBsb2FkZWR9LDwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0iZG93bmxvYWRlZCAhPSBudWxsIj4je2Rvd25sb2FkZWR9LDwvaWY+CisgICAgICAgICAgICA8aWYgdGVzdD0iYm9udXMgIT0gbnVsbCI+I3tib251c30sPC9pZj4KKworICAgICAgICAgICAgPGlmIHRlc3Q9InVwZGF0ZWRBdCAhPSBudWxsIj4je3VwZGF0ZWRBdH0sPC9pZj4KKyAgICAgICAgIDwvdHJpbT4KKyAgICA8L2luc2VydD4KKworICAgIDx1cGRhdGUgaWQ9InVwZGF0ZVVzZXJTY29yZSIgcGFyYW1ldGVyVHlwZT0iVXNlclNjb3JlIj4KKyAgICAgICAgdXBkYXRlIHVzZXJfc2NvcmUKKyAgICAgICAgPHRyaW0gcHJlZml4PSJTRVQiIHN1ZmZpeE92ZXJyaWRlcz0iLCI+CisgICAgICAgICAgICA8aWYgdGVzdD0idXBsb2FkZWQgIT0gbnVsbCI+dXBsb2FkZWQgPSAje3VwbG9hZGVkfSw8L2lmPgorICAgICAgICAgICAgPGlmIHRlc3Q9ImRvd25sb2FkZWQgIT0gbnVsbCI+ZG93bmxvYWRlZCA9ICN7ZG93bmxvYWRlZH0sPC9pZj4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJib251cyAhPSBudWxsIj5ib251cyA9ICN7Ym9udXN9LDwvaWY+CisKKyAgICAgICAgICAgIDxpZiB0ZXN0PSJ1cGRhdGVkQXQgIT0gbnVsbCI+dXBkYXRlZF9hdCA9ICN7dXBkYXRlZEF0fSw8L2lmPgorICAgICAgICA8L3RyaW0+CisgICAgICAgIHdoZXJlIHVzZXJfaWQgPSAje3VzZXJJZH0KKyAgICA8L3VwZGF0ZT4KKworICAgIDxkZWxldGUgaWQ9ImRlbGV0ZVVzZXJTY29yZUJ5VXNlcklkIiBwYXJhbWV0ZXJUeXBlPSJMb25nIj4KKyAgICAgICAgZGVsZXRlIGZyb20gdXNlcl9zY29yZSB3aGVyZSB1c2VyX2lkID0gI3t1c2VySWR9CisgICAgPC9kZWxldGU+CisKKyAgICA8ZGVsZXRlIGlkPSJkZWxldGVVc2VyU2NvcmVCeVVzZXJJZHMiIHBhcmFtZXRlclR5cGU9IlN0cmluZyI+CisgICAgICAgIGRlbGV0ZSBmcm9tIHVzZXJfc2NvcmUgd2hlcmUgdXNlcl9pZCBpbiAKKyAgICAgICAgPGZvcmVhY2ggaXRlbT0idXNlcklkIiBjb2xsZWN0aW9uPSJhcnJheSIgb3Blbj0iKCIgc2VwYXJhdG9yPSIsIiBjbG9zZT0iKSI+CisgICAgICAgICAgICAje3VzZXJJZH0KKyAgICAgICAgPC9mb3JlYWNoPgorICAgIDwvZGVsZXRlPgorPC9tYXBwZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcnVveWktY29tbW9uL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2NvbW1vbi9jb25maWcvUnVvWWlDb25maWcuamF2YSBiL3J1b3lpLWNvbW1vbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9jb21tb24vY29uZmlnL1J1b1lpQ29uZmlnLmphdmEKaW5kZXggMjkyODFjZi4uODBjMGUyZSAxMDA2NDQKLS0tIGEvcnVveWktY29tbW9uL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2NvbW1vbi9jb25maWcvUnVvWWlDb25maWcuamF2YQorKysgYi9ydW95aS1jb21tb24vc3JjL21haW4vamF2YS9jb20vcnVveWkvY29tbW9uL2NvbmZpZy9SdW9ZaUNvbmZpZy5qYXZhCkBAIC0xLDYgKzEsOCBAQAogcGFja2FnZSBjb20ucnVveWkuY29tbW9uLmNvbmZpZzsKIAoraW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5uZXQuVVJMQ29kZWM7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LmNvbnRleHQucHJvcGVydGllcy5Db25maWd1cmF0aW9uUHJvcGVydGllczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuYW5ub3RhdGlvbi5CZWFuOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5Db21wb25lbnQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvcnVveWktY29tbW9uL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2NvbW1vbi9jb3JlL3JlZGlzL1JlZGlzQ2FjaGUuamF2YSBiL3J1b3lpLWNvbW1vbi9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9jb21tb24vY29yZS9yZWRpcy9SZWRpc0NhY2hlLmphdmEKaW5kZXggNDRlODBkOC4uZTU0YTFkNyAxMDA2NDQKLS0tIGEvcnVveWktY29tbW9uL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2NvbW1vbi9jb3JlL3JlZGlzL1JlZGlzQ2FjaGUuamF2YQorKysgYi9ydW95aS1jb21tb24vc3JjL21haW4vamF2YS9jb20vcnVveWkvY29tbW9uL2NvcmUvcmVkaXMvUmVkaXNDYWNoZS5qYXZhCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXhwaXJlKGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIGxvbmcgdGltZW91dCwgZmluYWwgVGltZVVuaXQgdW5pdCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWRpc1RlbXBsYXRlLmV4cGlyZShrZXksIHRpbWVvdXQsIHVuaXQpOworICAgICAgICByZXR1cm4gQm9vbGVhbi5UUlVFLmVxdWFscyhyZWRpc1RlbXBsYXRlLmV4cGlyZShrZXksIHRpbWVvdXQsIHVuaXQpKTsKICAgICB9CiAKICAgICAvKioKQEAgLTI2NSw0ICsyNjUsMzcgQEAKICAgICB7CiAgICAgICAgIHJldHVybiByZWRpc1RlbXBsYXRlLmtleXMocGF0dGVybik7CiAgICAgfQorCisgICAgLyoqCisgICAgICog5ZCRWlNldOa3u+WKoOaIkOWRmAorICAgICAqLworICAgIHB1YmxpYyBCb29sZWFuIHpBZGQoZmluYWwgU3RyaW5nIGtleSwgZmluYWwgU3RyaW5nIHZhbHVlLCBmaW5hbCBkb3VibGUgc2NvcmUpIHsKKyAgICAgICAgcmV0dXJuIHJlZGlzVGVtcGxhdGUub3BzRm9yWlNldCgpLmFkZChrZXksIHZhbHVlLCBzY29yZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog6I635Y+WWlNldOiMg+WbtAorICAgICAqLworICAgIHB1YmxpYyBTZXQ8U3RyaW5nPiB6UmFuZ2UoZmluYWwgU3RyaW5nIGtleSwgbG9uZyBzdGFydCwgbG9uZyBlbmQpIHsKKyAgICAgICAgcmV0dXJuIHJlZGlzVGVtcGxhdGUub3BzRm9yWlNldCgpLnJhbmdlKGtleSwgc3RhcnQsIGVuZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICog56e76ZmkWlNldOaIkOWRmAorICAgICAqLworICAgIHB1YmxpYyBMb25nIHpSZW1vdmUoZmluYWwgU3RyaW5nIGtleSwgT2JqZWN0Li4uIHZhbHVlcykgeworICAgICAgICByZXR1cm4gcmVkaXNUZW1wbGF0ZS5vcHNGb3JaU2V0KCkucmVtb3ZlKGtleSwgdmFsdWVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiDojrflj5ZaU2V05aSn5bCPCisgICAgICovCisgICAgcHVibGljIExvbmcgekNhcmQoZmluYWwgU3RyaW5nIGtleSkgeworICAgICAgICByZXR1cm4gcmVkaXNUZW1wbGF0ZS5vcHNGb3JaU2V0KCkuekNhcmQoa2V5KTsKKyAgICB9CisKKworCisKKwogfQpkaWZmIC0tZ2l0IGEvcnVveWktZnJhbWV3b3JrL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2ZyYW1ld29yay9jb25maWcvU2VjdXJpdHlDb25maWcuamF2YSBiL3J1b3lpLWZyYW1ld29yay9zcmMvbWFpbi9qYXZhL2NvbS9ydW95aS9mcmFtZXdvcmsvY29uZmlnL1NlY3VyaXR5Q29uZmlnLmphdmEKaW5kZXggMzMwMDM5Zi4uMzc4YzhlYiAxMDA2NDQKLS0tIGEvcnVveWktZnJhbWV3b3JrL3NyYy9tYWluL2phdmEvY29tL3J1b3lpL2ZyYW1ld29yay9jb25maWcvU2VjdXJpdHlDb25maWcuamF2YQorKysgYi9ydW95aS1mcmFtZXdvcmsvc3JjL21haW4vamF2YS9jb20vcnVveWkvZnJhbWV3b3JrL2NvbmZpZy9TZWN1cml0eUNvbmZpZy5qYXZhCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgIC5hdXRob3JpemVIdHRwUmVxdWVzdHMoKHJlcXVlc3RzKSAtPiB7CiAgICAgICAgICAgICAgICAgcGVybWl0QWxsVXJsLmdldFVybHMoKS5mb3JFYWNoKHVybCAtPiByZXF1ZXN0cy5yZXF1ZXN0TWF0Y2hlcnModXJsKS5wZXJtaXRBbGwoKSk7CiAgICAgICAgICAgICAgICAgLy8g5a+55LqO55m75b2VbG9naW4g5rOo5YaMcmVnaXN0ZXIg6aqM6K+B56CBY2FwdGNoYUltYWdlIOWFgeiuuOWMv+WQjeiuv+mXrgotICAgICAgICAgICAgICAgIHJlcXVlc3RzLnJlcXVlc3RNYXRjaGVycygiL2xvZ2luIiwgIi9yZWdpc3RlciIsICIvY2FwdGNoYUltYWdlIikucGVybWl0QWxsKCkKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy5yZXF1ZXN0TWF0Y2hlcnMoIi9sb2dpbiIsICIvcmVnaXN0ZXIiLCAiL2NhcHRjaGFJbWFnZSIsIi9hbm5vdW5jZSIpLnBlcm1pdEFsbCgpCiAgICAgICAgICAgICAgICAgICAgIC8vIOmdmeaAgei1hOa6kO+8jOWPr+WMv+WQjeiuv+mXrgogICAgICAgICAgICAgICAgICAgICAucmVxdWVzdE1hdGNoZXJzKEh0dHBNZXRob2QuR0VULCAiLyIsICIvKi5odG1sIiwgIi8qKi5odG1sIiwgIi8qKi5jc3MiLCAiLyoqLmpzIiwgIi9wcm9maWxlLyoqIikucGVybWl0QWxsKCkKICAgICAgICAgICAgICAgICAgICAgLnJlcXVlc3RNYXRjaGVycygiL3N3YWdnZXItdWkuaHRtbCIsICIvdjMvYXBpLWRvY3MvKioiLCAiL3N3YWdnZXItdWkvKioiLCAiL2RydWlkLyoqIikucGVybWl0QWxsKCkKZGlmZiAtLWdpdCBhL3J1b3lpLXN5c3RlbS9wb20ueG1sIGIvcnVveWktc3lzdGVtL3BvbS54bWwKaW5kZXggYzY4ODk5My4uYTEwYmExNiAxMDA2NDQKLS0tIGEvcnVveWktc3lzdGVtL3BvbS54bWwKKysrIGIvcnVveWktc3lzdGVtL3BvbS54bWwKQEAgLTQxLDYgKzQxLDExIEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1zdGFydGVyLXRlc3Q8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcucHJvamVjdGxvbWJvazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmxvbWJvazwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgIDwvZGVwZW5kZW5jaWVzPgogCmRpZmYgLS1naXQgYS9zcWwvcHRfc3RhdGlvbi5zcWwgYi9zcWwvcHRfc3RhdGlvbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0YTU0YgotLS0gL2Rldi9udWxsCisrKyBiL3NxbC9wdF9zdGF0aW9uLnNxbApAQCAtMCwwICsxLDEyODkgQEAKKy8qCisgTmF2aWNhdCBQcmVtaXVtIER1bXAgU1FMCisKKyBTb3VyY2UgU2VydmVyICAgICAgICAgOiBwdF9zdGF0aW9uCisgU291cmNlIFNlcnZlciBUeXBlICAgIDogTXlTUUwKKyBTb3VyY2UgU2VydmVyIFZlcnNpb24gOiA4MDA0MSAoOC4wLjQxLTB1YnVudHUwLjIyLjA0LjEpCisgU291cmNlIEhvc3QgICAgICAgICAgIDogNDkuMjMzLjIxNS4xNDQ6MzMwNgorIFNvdXJjZSBTY2hlbWEgICAgICAgICA6IHB0X3N0YXRpb24KKworIFRhcmdldCBTZXJ2ZXIgVHlwZSAgICA6IE15U1FMCisgVGFyZ2V0IFNlcnZlciBWZXJzaW9uIDogODAwNDEgKDguMC40MS0wdWJ1bnR1MC4yMi4wNC4xKQorIEZpbGUgRW5jb2RpbmcgICAgICAgICA6IDY1MDAxCisKKyBEYXRlOiAyMS8wNC8yMDI1IDIxOjE4OjU1CisqLworCitTRVQgTkFNRVMgdXRmOG1iNDsKK1NFVCBGT1JFSUdOX0tFWV9DSEVDS1MgPSAwOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIFFSVFpfQkxPQl9UUklHR0VSUworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYFFSVFpfQkxPQl9UUklHR0VSU2A7CitDUkVBVEUgVEFCTEUgYFFSVFpfQkxPQl9UUklHR0VSU2AgICgKKyAgYHNjaGVkX25hbWVgIHZhcmNoYXIoMTIwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn6LCD5bqm5ZCN56ewJywKKyAgYHRyaWdnZXJfbmFtZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICdxcnR6X3RyaWdnZXJz6KGodHJpZ2dlcl9uYW1l55qE5aSW6ZSuJywKKyAgYHRyaWdnZXJfZ3JvdXBgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAncXJ0el90cmlnZ2Vyc+ihqHRyaWdnZXJfZ3JvdXDnmoTlpJbplK4nLAorICBgYmxvYl9kYXRhYCBibG9iIE5VTEwgQ09NTUVOVCAn5a2Y5pS+5oyB5LmF5YyWVHJpZ2dlcuWvueixoScsCisgIFBSSU1BUlkgS0VZIChgc2NoZWRfbmFtZWAsIGB0cmlnZ2VyX25hbWVgLCBgdHJpZ2dlcl9ncm91cGApIFVTSU5HIEJUUkVFLAorICBDT05TVFJBSU5UIGBRUlRaX0JMT0JfVFJJR0dFUlNfaWJma18xYCBGT1JFSUdOIEtFWSAoYHNjaGVkX25hbWVgLCBgdHJpZ2dlcl9uYW1lYCwgYHRyaWdnZXJfZ3JvdXBgKSBSRUZFUkVOQ0VTIGBRUlRaX1RSSUdHRVJTYCAoYHNjaGVkX25hbWVgLCBgdHJpZ2dlcl9uYW1lYCwgYHRyaWdnZXJfZ3JvdXBgKSBPTiBERUxFVEUgUkVTVFJJQ1QgT04gVVBEQVRFIFJFU1RSSUNUCispIEVOR0lORSA9IElubm9EQiBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAnQmxvYuexu+Wei+eahOinpuWPkeWZqOihqCcgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2YgUVJUWl9CTE9CX1RSSUdHRVJTCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgUVJUWl9DQUxFTkRBUlMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGBRUlRaX0NBTEVOREFSU2A7CitDUkVBVEUgVEFCTEUgYFFSVFpfQ0FMRU5EQVJTYCAgKAorICBgc2NoZWRfbmFtZWAgdmFyY2hhcigxMjApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfosIPluqblkI3np7AnLAorICBgY2FsZW5kYXJfbmFtZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfml6XljoblkI3np7AnLAorICBgY2FsZW5kYXJgIGJsb2IgTk9UIE5VTEwgQ09NTUVOVCAn5a2Y5pS+5oyB5LmF5YyWY2FsZW5kYXLlr7nosaEnLAorICBQUklNQVJZIEtFWSAoYHNjaGVkX25hbWVgLCBgY2FsZW5kYXJfbmFtZWApIFVTSU5HIEJUUkVFCispIEVOR0lORSA9IElubm9EQiBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn5pel5Y6G5L+h5oGv6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBRUlRaX0NBTEVOREFSUworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIFFSVFpfQ1JPTl9UUklHR0VSUworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYFFSVFpfQ1JPTl9UUklHR0VSU2A7CitDUkVBVEUgVEFCTEUgYFFSVFpfQ1JPTl9UUklHR0VSU2AgICgKKyAgYHNjaGVkX25hbWVgIHZhcmNoYXIoMTIwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn6LCD5bqm5ZCN56ewJywKKyAgYHRyaWdnZXJfbmFtZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICdxcnR6X3RyaWdnZXJz6KGodHJpZ2dlcl9uYW1l55qE5aSW6ZSuJywKKyAgYHRyaWdnZXJfZ3JvdXBgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAncXJ0el90cmlnZ2Vyc+ihqHRyaWdnZXJfZ3JvdXDnmoTlpJbplK4nLAorICBgY3Jvbl9leHByZXNzaW9uYCB2YXJjaGFyKDIwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ2Nyb27ooajovr7lvI8nLAorICBgdGltZV96b25lX2lkYCB2YXJjaGFyKDgwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5pe25Yy6JywKKyAgUFJJTUFSWSBLRVkgKGBzY2hlZF9uYW1lYCwgYHRyaWdnZXJfbmFtZWAsIGB0cmlnZ2VyX2dyb3VwYCkgVVNJTkcgQlRSRUUsCisgIENPTlNUUkFJTlQgYFFSVFpfQ1JPTl9UUklHR0VSU19pYmZrXzFgIEZPUkVJR04gS0VZIChgc2NoZWRfbmFtZWAsIGB0cmlnZ2VyX25hbWVgLCBgdHJpZ2dlcl9ncm91cGApIFJFRkVSRU5DRVMgYFFSVFpfVFJJR0dFUlNgIChgc2NoZWRfbmFtZWAsIGB0cmlnZ2VyX25hbWVgLCBgdHJpZ2dlcl9ncm91cGApIE9OIERFTEVURSBSRVNUUklDVCBPTiBVUERBVEUgUkVTVFJJQ1QKKykgRU5HSU5FID0gSW5ub0RCIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICdDcm9u57G75Z6L55qE6Kem5Y+R5Zmo6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBRUlRaX0NST05fVFJJR0dFUlMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBRUlRaX0ZJUkVEX1RSSUdHRVJTCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgUVJUWl9GSVJFRF9UUklHR0VSU2A7CitDUkVBVEUgVEFCTEUgYFFSVFpfRklSRURfVFJJR0dFUlNgICAoCisgIGBzY2hlZF9uYW1lYCB2YXJjaGFyKDEyMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+iwg+W6puWQjeensCcsCisgIGBlbnRyeV9pZGAgdmFyY2hhcig5NSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+iwg+W6puWZqOWunuS+i2lkJywKKyAgYHRyaWdnZXJfbmFtZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICdxcnR6X3RyaWdnZXJz6KGodHJpZ2dlcl9uYW1l55qE5aSW6ZSuJywKKyAgYHRyaWdnZXJfZ3JvdXBgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAncXJ0el90cmlnZ2Vyc+ihqHRyaWdnZXJfZ3JvdXDnmoTlpJbplK4nLAorICBgaW5zdGFuY2VfbmFtZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfosIPluqblmajlrp7kvovlkI0nLAorICBgZmlyZWRfdGltZWAgYmlnaW50IE5PVCBOVUxMIENPTU1FTlQgJ+inpuWPkeeahOaXtumXtCcsCisgIGBzY2hlZF90aW1lYCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn5a6a5pe25Zmo5Yi25a6a55qE5pe26Ze0JywKKyAgYHByaW9yaXR5YCBpbnQgTk9UIE5VTEwgQ09NTUVOVCAn5LyY5YWI57qnJywKKyAgYHN0YXRlYCB2YXJjaGFyKDE2KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn54q25oCBJywKKyAgYGpvYl9uYW1lYCB2YXJjaGFyKDIwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+S7u+WKoeWQjeensCcsCisgIGBqb2JfZ3JvdXBgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5Lu75Yqh57uE5ZCNJywKKyAgYGlzX25vbmNvbmN1cnJlbnRgIHZhcmNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+aYr+WQpuW5tuWPkScsCisgIGByZXF1ZXN0c19yZWNvdmVyeWAgdmFyY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5piv5ZCm5o6l5Y+X5oGi5aSN5omn6KGMJywKKyAgUFJJTUFSWSBLRVkgKGBzY2hlZF9uYW1lYCwgYGVudHJ5X2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICflt7Lop6blj5HnmoTop6blj5HlmajooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIFFSVFpfRklSRURfVFJJR0dFUlMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBRUlRaX0pPQl9ERVRBSUxTCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgUVJUWl9KT0JfREVUQUlMU2A7CitDUkVBVEUgVEFCTEUgYFFSVFpfSk9CX0RFVEFJTFNgICAoCisgIGBzY2hlZF9uYW1lYCB2YXJjaGFyKDEyMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+iwg+W6puWQjeensCcsCisgIGBqb2JfbmFtZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfku7vliqHlkI3np7AnLAorICBgam9iX2dyb3VwYCB2YXJjaGFyKDIwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+S7u+WKoee7hOWQjScsCisgIGBkZXNjcmlwdGlvbmAgdmFyY2hhcigyNTApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfnm7jlhbPku4vnu40nLAorICBgam9iX2NsYXNzX25hbWVgIHZhcmNoYXIoMjUwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn5omn6KGM5Lu75Yqh57G75ZCN56ewJywKKyAgYGlzX2R1cmFibGVgIHZhcmNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+aYr+WQpuaMgeS5heWMlicsCisgIGBpc19ub25jb25jdXJyZW50YCB2YXJjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfmmK/lkKblubblj5EnLAorICBgaXNfdXBkYXRlX2RhdGFgIHZhcmNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+aYr+WQpuabtOaWsOaVsOaNricsCisgIGByZXF1ZXN0c19yZWNvdmVyeWAgdmFyY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn5piv5ZCm5o6l5Y+X5oGi5aSN5omn6KGMJywKKyAgYGpvYl9kYXRhYCBibG9iIE5VTEwgQ09NTUVOVCAn5a2Y5pS+5oyB5LmF5YyWam9i5a+56LGhJywKKyAgUFJJTUFSWSBLRVkgKGBzY2hlZF9uYW1lYCwgYGpvYl9uYW1lYCwgYGpvYl9ncm91cGApIFVTSU5HIEJUUkVFCispIEVOR0lORSA9IElubm9EQiBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn5Lu75Yqh6K+m57uG5L+h5oGv6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBRUlRaX0pPQl9ERVRBSUxTCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgUVJUWl9MT0NLUworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYFFSVFpfTE9DS1NgOworQ1JFQVRFIFRBQkxFIGBRUlRaX0xPQ0tTYCAgKAorICBgc2NoZWRfbmFtZWAgdmFyY2hhcigxMjApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfosIPluqblkI3np7AnLAorICBgbG9ja19uYW1lYCB2YXJjaGFyKDQwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn5oKy6KeC6ZSB5ZCN56ewJywKKyAgUFJJTUFSWSBLRVkgKGBzY2hlZF9uYW1lYCwgYGxvY2tfbmFtZWApIFVTSU5HIEJUUkVFCispIEVOR0lORSA9IElubm9EQiBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn5a2Y5YKo55qE5oKy6KeC6ZSB5L+h5oGv6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBRUlRaX0xPQ0tTCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgUVJUWl9QQVVTRURfVFJJR0dFUl9HUlBTCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgUVJUWl9QQVVTRURfVFJJR0dFUl9HUlBTYDsKK0NSRUFURSBUQUJMRSBgUVJUWl9QQVVTRURfVFJJR0dFUl9HUlBTYCAgKAorICBgc2NoZWRfbmFtZWAgdmFyY2hhcigxMjApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfosIPluqblkI3np7AnLAorICBgdHJpZ2dlcl9ncm91cGAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICdxcnR6X3RyaWdnZXJz6KGodHJpZ2dlcl9ncm91cOeahOWklumUricsCisgIFBSSU1BUlkgS0VZIChgc2NoZWRfbmFtZWAsIGB0cmlnZ2VyX2dyb3VwYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfmmoLlgZznmoTop6blj5HlmajooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIFFSVFpfUEFVU0VEX1RSSUdHRVJfR1JQUworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIFFSVFpfU0NIRURVTEVSX1NUQVRFCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgUVJUWl9TQ0hFRFVMRVJfU1RBVEVgOworQ1JFQVRFIFRBQkxFIGBRUlRaX1NDSEVEVUxFUl9TVEFURWAgICgKKyAgYHNjaGVkX25hbWVgIHZhcmNoYXIoMTIwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn6LCD5bqm5ZCN56ewJywKKyAgYGluc3RhbmNlX25hbWVgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn5a6e5L6L5ZCN56ewJywKKyAgYGxhc3RfY2hlY2tpbl90aW1lYCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn5LiK5qyh5qOA5p+l5pe26Ze0JywKKyAgYGNoZWNraW5faW50ZXJ2YWxgIGJpZ2ludCBOT1QgTlVMTCBDT01NRU5UICfmo4Dmn6Xpl7TpmpTml7bpl7QnLAorICBQUklNQVJZIEtFWSAoYHNjaGVkX25hbWVgLCBgaW5zdGFuY2VfbmFtZWApIFVTSU5HIEJUUkVFCispIEVOR0lORSA9IElubm9EQiBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn6LCD5bqm5Zmo54q25oCB6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBRUlRaX1NDSEVEVUxFUl9TVEFURQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIFFSVFpfU0lNUExFX1RSSUdHRVJTCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgUVJUWl9TSU1QTEVfVFJJR0dFUlNgOworQ1JFQVRFIFRBQkxFIGBRUlRaX1NJTVBMRV9UUklHR0VSU2AgICgKKyAgYHNjaGVkX25hbWVgIHZhcmNoYXIoMTIwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn6LCD5bqm5ZCN56ewJywKKyAgYHRyaWdnZXJfbmFtZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICdxcnR6X3RyaWdnZXJz6KGodHJpZ2dlcl9uYW1l55qE5aSW6ZSuJywKKyAgYHRyaWdnZXJfZ3JvdXBgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAncXJ0el90cmlnZ2Vyc+ihqHRyaWdnZXJfZ3JvdXDnmoTlpJbplK4nLAorICBgcmVwZWF0X2NvdW50YCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn6YeN5aSN55qE5qyh5pWw57uf6K6hJywKKyAgYHJlcGVhdF9pbnRlcnZhbGAgYmlnaW50IE5PVCBOVUxMIENPTU1FTlQgJ+mHjeWkjeeahOmXtOmalOaXtumXtCcsCisgIGB0aW1lc190cmlnZ2VyZWRgIGJpZ2ludCBOT1QgTlVMTCBDT01NRU5UICflt7Lnu4/op6blj5HnmoTmrKHmlbAnLAorICBQUklNQVJZIEtFWSAoYHNjaGVkX25hbWVgLCBgdHJpZ2dlcl9uYW1lYCwgYHRyaWdnZXJfZ3JvdXBgKSBVU0lORyBCVFJFRSwKKyAgQ09OU1RSQUlOVCBgUVJUWl9TSU1QTEVfVFJJR0dFUlNfaWJma18xYCBGT1JFSUdOIEtFWSAoYHNjaGVkX25hbWVgLCBgdHJpZ2dlcl9uYW1lYCwgYHRyaWdnZXJfZ3JvdXBgKSBSRUZFUkVOQ0VTIGBRUlRaX1RSSUdHRVJTYCAoYHNjaGVkX25hbWVgLCBgdHJpZ2dlcl9uYW1lYCwgYHRyaWdnZXJfZ3JvdXBgKSBPTiBERUxFVEUgUkVTVFJJQ1QgT04gVVBEQVRFIFJFU1RSSUNUCispIEVOR0lORSA9IElubm9EQiBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn566A5Y2V6Kem5Y+R5Zmo55qE5L+h5oGv6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBRUlRaX1NJTVBMRV9UUklHR0VSUworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIFFSVFpfU0lNUFJPUF9UUklHR0VSUworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYFFSVFpfU0lNUFJPUF9UUklHR0VSU2A7CitDUkVBVEUgVEFCTEUgYFFSVFpfU0lNUFJPUF9UUklHR0VSU2AgICgKKyAgYHNjaGVkX25hbWVgIHZhcmNoYXIoMTIwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn6LCD5bqm5ZCN56ewJywKKyAgYHRyaWdnZXJfbmFtZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICdxcnR6X3RyaWdnZXJz6KGodHJpZ2dlcl9uYW1l55qE5aSW6ZSuJywKKyAgYHRyaWdnZXJfZ3JvdXBgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAncXJ0el90cmlnZ2Vyc+ihqHRyaWdnZXJfZ3JvdXDnmoTlpJbplK4nLAorICBgc3RyX3Byb3BfMWAgdmFyY2hhcig1MTIpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICdTdHJpbmfnsbvlnovnmoR0cmlnZ2Vy55qE56ys5LiA5Liq5Y+C5pWwJywKKyAgYHN0cl9wcm9wXzJgIHZhcmNoYXIoNTEyKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAnU3RyaW5n57G75Z6L55qEdHJpZ2dlcueahOesrOS6jOS4quWPguaVsCcsCisgIGBzdHJfcHJvcF8zYCB2YXJjaGFyKDUxMikgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ1N0cmluZ+exu+Wei+eahHRyaWdnZXLnmoTnrKzkuInkuKrlj4LmlbAnLAorICBgaW50X3Byb3BfMWAgaW50IE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ2ludOexu+Wei+eahHRyaWdnZXLnmoTnrKzkuIDkuKrlj4LmlbAnLAorICBgaW50X3Byb3BfMmAgaW50IE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ2ludOexu+Wei+eahHRyaWdnZXLnmoTnrKzkuozkuKrlj4LmlbAnLAorICBgbG9uZ19wcm9wXzFgIGJpZ2ludCBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICdsb25n57G75Z6L55qEdHJpZ2dlcueahOesrOS4gOS4quWPguaVsCcsCisgIGBsb25nX3Byb3BfMmAgYmlnaW50IE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ2xvbmfnsbvlnovnmoR0cmlnZ2Vy55qE56ys5LqM5Liq5Y+C5pWwJywKKyAgYGRlY19wcm9wXzFgIGRlY2ltYWwoMTMsIDQpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ2RlY2ltYWznsbvlnovnmoR0cmlnZ2Vy55qE56ys5LiA5Liq5Y+C5pWwJywKKyAgYGRlY19wcm9wXzJgIGRlY2ltYWwoMTMsIDQpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ2RlY2ltYWznsbvlnovnmoR0cmlnZ2Vy55qE56ys5LqM5Liq5Y+C5pWwJywKKyAgYGJvb2xfcHJvcF8xYCB2YXJjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICdCb29sZWFu57G75Z6L55qEdHJpZ2dlcueahOesrOS4gOS4quWPguaVsCcsCisgIGBib29sX3Byb3BfMmAgdmFyY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAnQm9vbGVhbuexu+Wei+eahHRyaWdnZXLnmoTnrKzkuozkuKrlj4LmlbAnLAorICBQUklNQVJZIEtFWSAoYHNjaGVkX25hbWVgLCBgdHJpZ2dlcl9uYW1lYCwgYHRyaWdnZXJfZ3JvdXBgKSBVU0lORyBCVFJFRSwKKyAgQ09OU1RSQUlOVCBgUVJUWl9TSU1QUk9QX1RSSUdHRVJTX2liZmtfMWAgRk9SRUlHTiBLRVkgKGBzY2hlZF9uYW1lYCwgYHRyaWdnZXJfbmFtZWAsIGB0cmlnZ2VyX2dyb3VwYCkgUkVGRVJFTkNFUyBgUVJUWl9UUklHR0VSU2AgKGBzY2hlZF9uYW1lYCwgYHRyaWdnZXJfbmFtZWAsIGB0cmlnZ2VyX2dyb3VwYCkgT04gREVMRVRFIFJFU1RSSUNUIE9OIFVQREFURSBSRVNUUklDVAorKSBFTkdJTkUgPSBJbm5vREIgQ0hBUkFDVEVSIFNFVCA9IHV0ZjhtYjQgQ09MTEFURSA9IHV0ZjhtYjRfMDkwMF9haV9jaSBDT01NRU5UID0gJ+WQjOatpeacuuWItueahOihjOmUgeihqCcgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2YgUVJUWl9TSU1QUk9QX1RSSUdHRVJTCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgUVJUWl9UUklHR0VSUworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYFFSVFpfVFJJR0dFUlNgOworQ1JFQVRFIFRBQkxFIGBRUlRaX1RSSUdHRVJTYCAgKAorICBgc2NoZWRfbmFtZWAgdmFyY2hhcigxMjApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfosIPluqblkI3np7AnLAorICBgdHJpZ2dlcl9uYW1lYCB2YXJjaGFyKDIwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+inpuWPkeWZqOeahOWQjeWtlycsCisgIGB0cmlnZ2VyX2dyb3VwYCB2YXJjaGFyKDIwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+inpuWPkeWZqOaJgOWxnue7hOeahOWQjeWtlycsCisgIGBqb2JfbmFtZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICdxcnR6X2pvYl9kZXRhaWxz6KGoam9iX25hbWXnmoTlpJbplK4nLAorICBgam9iX2dyb3VwYCB2YXJjaGFyKDIwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ3FydHpfam9iX2RldGFpbHPooahqb2JfZ3JvdXDnmoTlpJbplK4nLAorICBgZGVzY3JpcHRpb25gIHZhcmNoYXIoMjUwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn55u45YWz5LuL57uNJywKKyAgYG5leHRfZmlyZV90aW1lYCBiaWdpbnQgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5LiK5LiA5qyh6Kem5Y+R5pe26Ze077yI5q+r56eS77yJJywKKyAgYHByZXZfZmlyZV90aW1lYCBiaWdpbnQgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5LiL5LiA5qyh6Kem5Y+R5pe26Ze077yI6buY6K6k5Li6LTHooajnpLrkuI3op6blj5HvvIknLAorICBgcHJpb3JpdHlgIGludCBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfkvJjlhYjnuqcnLAorICBgdHJpZ2dlcl9zdGF0ZWAgdmFyY2hhcigxNikgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+inpuWPkeWZqOeKtuaAgScsCisgIGB0cmlnZ2VyX3R5cGVgIHZhcmNoYXIoOCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+inpuWPkeWZqOeahOexu+WeiycsCisgIGBzdGFydF90aW1lYCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn5byA5aeL5pe26Ze0JywKKyAgYGVuZF90aW1lYCBiaWdpbnQgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn57uT5p2f5pe26Ze0JywKKyAgYGNhbGVuZGFyX25hbWVgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5pel56iL6KGo5ZCN56ewJywKKyAgYG1pc2ZpcmVfaW5zdHJgIHNtYWxsaW50IE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+ihpeWBv+aJp+ihjOeahOetlueVpScsCisgIGBqb2JfZGF0YWAgYmxvYiBOVUxMIENPTU1FTlQgJ+WtmOaUvuaMgeS5heWMlmpvYuWvueixoScsCisgIFBSSU1BUlkgS0VZIChgc2NoZWRfbmFtZWAsIGB0cmlnZ2VyX25hbWVgLCBgdHJpZ2dlcl9ncm91cGApIFVTSU5HIEJUUkVFLAorICBJTkRFWCBgc2NoZWRfbmFtZWAoYHNjaGVkX25hbWVgIEFTQywgYGpvYl9uYW1lYCBBU0MsIGBqb2JfZ3JvdXBgIEFTQykgVVNJTkcgQlRSRUUsCisgIENPTlNUUkFJTlQgYFFSVFpfVFJJR0dFUlNfaWJma18xYCBGT1JFSUdOIEtFWSAoYHNjaGVkX25hbWVgLCBgam9iX25hbWVgLCBgam9iX2dyb3VwYCkgUkVGRVJFTkNFUyBgUVJUWl9KT0JfREVUQUlMU2AgKGBzY2hlZF9uYW1lYCwgYGpvYl9uYW1lYCwgYGpvYl9ncm91cGApIE9OIERFTEVURSBSRVNUUklDVCBPTiBVUERBVEUgUkVTVFJJQ1QKKykgRU5HSU5FID0gSW5ub0RCIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfop6blj5Hlmajor6bnu4bkv6Hmga/ooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIFFSVFpfVFJJR0dFUlMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBidF90b3JyZW50CistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgYnRfdG9ycmVudGA7CitDUkVBVEUgVEFCTEUgYGJ0X3RvcnJlbnRgICAoCisgIGB0b3JyZW50X2lkYCBiaWdpbnQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQgQ09NTUVOVCAn56eN5a2QSUQnLAorICBgaW5mb19oYXNoYCBjaGFyKDQwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAnSW5mb0hhc2gnLAorICBgbmFtZWAgdmFyY2hhcigyNTUpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfnp43lrZDlkI3np7AnLAorICBgbGVuZ3RoYCBiaWdpbnQgTlVMTCBERUZBVUxUIDAgQ09NTUVOVCAn5oC75aSn5bCP77yI5a2X6IqC77yJJywKKyAgYHBpZWNlX2xlbmd0aGAgaW50IE5VTEwgREVGQVVMVCAwIENPTU1FTlQgJ+avj+S4qiBwaWVjZSDnmoTplb/luqYnLAorICBgcGllY2VzX2NvdW50YCBpbnQgTlVMTCBERUZBVUxUIDAgQ09NTUVOVCAncGllY2Ug5oC75pWwJywKKyAgYGNyZWF0ZWRfYnlgIHZhcmNoYXIoMTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WIm+W7uuW3peWFtycsCisgIGB0b3JyZW50X2NyZWF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfnp43lrZDlhoXorrDlvZXnmoTliJvlu7rml7bpl7QnLAorICBgdXBsb2FkZXJfaWRgIGJpZ2ludCBOT1QgTlVMTCBDT01NRU5UICfkuIrkvKDnlKjmiLdJRO+8iOWFs+iBlCBzeXNfdXNlci51c2VyX2lk77yJJywKKyAgYHVwbG9hZF90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgQ09NTUVOVCAn5LiK5Lyg5pe26Ze0JywKKyAgYGZpbGVfcGF0aGAgdmFyY2hhcigyNTUpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn56eN5a2Q5paH5Lu25Zyo5pyN5Yqh5Zmo55qE5a2Y5YKo6Lev5b6EJywKKyAgUFJJTUFSWSBLRVkgKGB0b3JyZW50X2lkYCkgVVNJTkcgQlRSRUUsCisgIFVOSVFVRSBJTkRFWCBgaW5mb19oYXNoYChgaW5mb19oYXNoYCBBU0MpIFVTSU5HIEJUUkVFLAorICBVTklRVUUgSU5ERVggYHVrX2luZm9faGFzaGAoYGluZm9faGFzaGAgQVNDKSBVU0lORyBCVFJFRSwKKyAgSU5ERVggYGlkeF91cGxvYWRlcl9pZGAoYHVwbG9hZGVyX2lkYCBBU0MpIFVTSU5HIEJUUkVFLAorICBDT05TVFJBSU5UIGBma19idF90b3JyZW50X3VzZXJgIEZPUkVJR04gS0VZIChgdXBsb2FkZXJfaWRgKSBSRUZFUkVOQ0VTIGBzeXNfdXNlcmAgKGB1c2VyX2lkYCkgT04gREVMRVRFIFJFU1RSSUNUIE9OIFVQREFURSBSRVNUUklDVAorKSBFTkdJTkUgPSBJbm5vREIgQVVUT19JTkNSRU1FTlQgPSA0NiBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn56eN5a2Q5Li76KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBidF90b3JyZW50CistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudGAgVkFMVUVTICg0MiwgJ2FiNTcwY2RkNWExN2VhMWI2MWU5NzBiYjcyMDQ3ZGUxNDFiY2UxNzMnLCAndGVzdC50b3JyZW50JywgMzA3OTQ5LCAzMjc2OCwgMTAsICdhZG1pbicsICcyMDA3LTAxLTIyIDA4OjAwOjAwJywgMSwgJzIwMjUtMDQtMjEgMDg6MDA6MDAnLCAnJyk7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudGAgVkFMVUVTICg0MywgJzYwZDVkODIzMjhiNDU0NzUxMWZkZWFjOWJmNGQwMTEyZGFhMGNlMDAnLCAndWJ1bnR1LTkuMDQtZGVza3RvcC1pMzg2Lmlzby50b3JyZW50JywgNzMyOTA5NTY4LCA1MjQyODgsIDEzOTgsICdhZG1pbicsICcyMDA5LTA0LTIzIDA4OjAwOjAwJywgMSwgJzIwMjUtMDQtMjEgMDg6MDA6MDAnLCAnJyk7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudGAgVkFMVUVTICg0NCwgJzMzNmM4NzEzOTEyNjU0MzI3YjI4NzFmZTIwMjEzZWJmZWMwYjEyZDQnLCAndW5pY29kZV9maWxlbmFtZXMudG9ycmVudCcsIDQ0MzcyMTc2MCwgMjYyMTQ0LCAxNjkzLCAnYWRtaW4nLCAnMjAxMy0wMS0wMSAwODowMDowMCcsIDEsICcyMDI1LTA0LTIxIDA4OjAwOjAwJywgJycpOworSU5TRVJUIElOVE8gYGJ0X3RvcnJlbnRgIFZBTFVFUyAoNDUsICczODk5NzI2MzQ1YzM5MGE4YzdmOTgyNmI1NjhjY2QwNzAxZDgzNTI0JywgJ3YyX2h5YnJpZC50b3JyZW50JywgMzI3NjgsIDE2Mzg0LCAyLCAnYWRtaW4nLCBOVUxMLCAxLCAnMjAyNS0wNC0yMSAwODowMDowMCcsICcnKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBidF90b3JyZW50X2Fubm91bmNlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgYnRfdG9ycmVudF9hbm5vdW5jZWA7CitDUkVBVEUgVEFCTEUgYGJ0X3RvcnJlbnRfYW5ub3VuY2VgICAoCisgIGBpZGAgYmlnaW50IE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5UIENPTU1FTlQgJ+S4u+mUricsCisgIGB0b3JyZW50X2lkYCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn56eN5a2QSUQnLAorICBgYW5ub3VuY2VfdXJsYCB0ZXh0IENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICdUcmFja2VyIGFubm91bmNlIFVSTCcsCisgIFBSSU1BUlkgS0VZIChgaWRgKSBVU0lORyBCVFJFRSwKKyAgSU5ERVggYGlkeF90b3JyZW50X2lkYChgdG9ycmVudF9pZGAgQVNDKSBVU0lORyBCVFJFRSwKKyAgQ09OU1RSQUlOVCBgZmtfYnRfYW5ub3VuY2VfdG9ycmVudGAgRk9SRUlHTiBLRVkgKGB0b3JyZW50X2lkYCkgUkVGRVJFTkNFUyBgYnRfdG9ycmVudGAgKGB0b3JyZW50X2lkYCkgT04gREVMRVRFIENBU0NBREUgT04gVVBEQVRFIFJFU1RSSUNUCispIEVOR0lORSA9IElubm9EQiBBVVRPX0lOQ1JFTUVOVCA9IDExIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfnp43lrZDnmoQgVHJhY2tlciDliJfooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIGJ0X3RvcnJlbnRfYW5ub3VuY2UKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOU0VSVCBJTlRPIGBidF90b3JyZW50X2Fubm91bmNlYCBWQUxVRVMgKDYsIDQyLCAnaHR0cDovL3RyYWNrZXIuYWVsaXRpcy5jb206Njk2OS9hbm5vdW5jZScpOworSU5TRVJUIElOVE8gYGJ0X3RvcnJlbnRfYW5ub3VuY2VgIFZBTFVFUyAoNywgNDIsICdodHRwOi8vdHJhY2tlci5hZWxpdGlzLmNvbTo2OTY5L2Fubm91bmNlJyk7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudF9hbm5vdW5jZWAgVkFMVUVTICg4LCA0MiwgJ2h0dHA6Ly90cmFja2VyLmFlbGl0aXMuY29tOjE2OTY5L2Fubm91bmNlJyk7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudF9hbm5vdW5jZWAgVkFMVUVTICg5LCA0MywgJ2h0dHA6Ly90b3JyZW50LnVidW50dS5jb206Njk2OS9hbm5vdW5jZScpOworSU5TRVJUIElOVE8gYGJ0X3RvcnJlbnRfYW5ub3VuY2VgIFZBTFVFUyAoMTAsIDQ1LCAnaHR0cDovL2V4YW1wbGUuY29tL2Fubm91bmNlJyk7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgYnRfdG9ycmVudF9maWxlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgYnRfdG9ycmVudF9maWxlYDsKK0NSRUFURSBUQUJMRSBgYnRfdG9ycmVudF9maWxlYCAgKAorICBgaWRgIGJpZ2ludCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCBDT01NRU5UICfkuLvplK4nLAorICBgdG9ycmVudF9pZGAgYmlnaW50IE5PVCBOVUxMIENPTU1FTlQgJ+enjeWtkElE77yI5YWz6IGUIGJ0X3RvcnJlbnTvvIknLAorICBgZmlsZV9wYXRoYCB0ZXh0IENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfmlofku7bot6/lvoQnLAorICBgZmlsZV9zaXplYCBiaWdpbnQgTlVMTCBERUZBVUxUIDAgQ09NTUVOVCAn5paH5Lu25aSn5bCP77yI5a2X6IqC77yJJywKKyAgUFJJTUFSWSBLRVkgKGBpZGApIFVTSU5HIEJUUkVFLAorICBJTkRFWCBgaWR4X3RvcnJlbnRfaWRgKGB0b3JyZW50X2lkYCBBU0MpIFVTSU5HIEJUUkVFLAorICBDT05TVFJBSU5UIGBma19idF9maWxlX3RvcnJlbnRgIEZPUkVJR04gS0VZIChgdG9ycmVudF9pZGApIFJFRkVSRU5DRVMgYGJ0X3RvcnJlbnRgIChgdG9ycmVudF9pZGApIE9OIERFTEVURSBDQVNDQURFIE9OIFVQREFURSBSRVNUUklDVAorKSBFTkdJTkUgPSBJbm5vREIgQVVUT19JTkNSRU1FTlQgPSAzMSBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn56eN5a2Q5YyF5ZCr55qE5paH5Lu25YiX6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBidF90b3JyZW50X2ZpbGUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOU0VSVCBJTlRPIGBidF90b3JyZW50X2ZpbGVgIFZBTFVFUyAoMjAsIDQyLCAnYXpjdnN1cGRhdGVyXzIuNi4yLmphcicsIDMwNzk0OSk7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudF9maWxlYCBWQUxVRVMgKDIxLCA0MywgJ3VidW50dS05LjA0LWRlc2t0b3AtaTM4Ni5pc28nLCA3MzI5MDk1NjgpOworSU5TRVJUIElOVE8gYGJ0X3RvcnJlbnRfZmlsZWAgVkFMVUVTICgyMiwgNDQsICdBbGlzaGVyIGlibiBHXCdpeW9zaWRkaW4gTmF2b2l5Lm1rdicsIDEyNjE1ODY1OCk7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudF9maWxlYCBWQUxVRVMgKDIzLCA0NCwgJ0FzY2lpIHRpdGxlLm1rdicsIDE4OTMyMTM2Myk7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudF9maWxlYCBWQUxVRVMgKDI0LCA0NCwgJ9Cc0LjRhdCw0LjQuyDQk9C+0YDQsdCw0YfRkdCyLm1rdicsIDEwNjY0OTY5OSk7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudF9maWxlYCBWQUxVRVMgKDI1LCA0NCwgJ+CmuOCngeCmleCngeCmruCmvuCmsCDgprDgpr7gp58ubWt2JywgMjE1OTAyNjkpOworSU5TRVJUIElOVE8gYGJ0X3RvcnJlbnRfZmlsZWAgVkFMVUVTICgyNiwgNDQsICfjg4bjgq/jgrnjg7vjg4bjgq/jgrXjg7MubWt2JywgMTc3MSk7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudF9maWxlYCBWQUxVRVMgKDI3LCA0NSwgJ3NtYWxsLnR4dCcsIDIyKTsKK0lOU0VSVCBJTlRPIGBidF90b3JyZW50X2ZpbGVgIFZBTFVFUyAoMjgsIDQ1LCAnLnBhZC8xNjM2MicsIDE2MzYyKTsKK0lOU0VSVCBJTlRPIGBidF90b3JyZW50X2ZpbGVgIFZBTFVFUyAoMjksIDQ1LCAn6YKE5Zyo5LiA5YCL5Lq654Sh6IGK5ZeOfumChOS4jei2lee3iuS4iuS+huiBiuWkqee+ji50eHQnLCAzMik7CitJTlNFUlQgSU5UTyBgYnRfdG9ycmVudF9maWxlYCBWQUxVRVMgKDMwLCA0NSwgJy5wYWQvMTYzNTInLCAxNjM1Mik7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgYnRfdG9ycmVudF90YWdzCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgYnRfdG9ycmVudF90YWdzYDsKK0NSRUFURSBUQUJMRSBgYnRfdG9ycmVudF90YWdzYCAgKAorICBgaWRgIGJpZ2ludCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwKKyAgYHRvcnJlbnRfaWRgIGJpZ2ludCBOT1QgTlVMTCwKKyAgYHRhZ2AgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMLAorICBQUklNQVJZIEtFWSAoYGlkYCkgVVNJTkcgQlRSRUUsCisgIElOREVYIGBpZHhfdGFnYChgdGFnYCBBU0MpIFVTSU5HIEJUUkVFLAorICBJTkRFWCBgZmtfYnRfdGFnX3RvcnJlbnRgKGB0b3JyZW50X2lkYCBBU0MpIFVTSU5HIEJUUkVFLAorICBDT05TVFJBSU5UIGBma19idF90YWdfdG9ycmVudGAgRk9SRUlHTiBLRVkgKGB0b3JyZW50X2lkYCkgUkVGRVJFTkNFUyBgYnRfdG9ycmVudGAgKGB0b3JyZW50X2lkYCkgT04gREVMRVRFIENBU0NBREUgT04gVVBEQVRFIFJFU1RSSUNUCispIEVOR0lORSA9IElubm9EQiBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn56eN5a2Q5qCH562+JyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBidF90b3JyZW50X3RhZ3MKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBnZW5fdGFibGUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGBnZW5fdGFibGVgOworQ1JFQVRFIFRBQkxFIGBnZW5fdGFibGVgICAoCisgIGB0YWJsZV9pZGAgYmlnaW50IE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5UIENPTU1FTlQgJ+e8luWPtycsCisgIGB0YWJsZV9uYW1lYCB2YXJjaGFyKDIwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfooajlkI3np7AnLAorICBgdGFibGVfY29tbWVudGAgdmFyY2hhcig1MDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn6KGo5o+P6L+wJywKKyAgYHN1Yl90YWJsZV9uYW1lYCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5YWz6IGU5a2Q6KGo55qE6KGo5ZCNJywKKyAgYHN1Yl90YWJsZV9ma19uYW1lYCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5a2Q6KGo5YWz6IGU55qE5aSW6ZSu5ZCNJywKKyAgYGNsYXNzX25hbWVgIHZhcmNoYXIoMTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WunuS9k+exu+WQjeensCcsCisgIGB0cGxfY2F0ZWdvcnlgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICdjcnVkJyBDT01NRU5UICfkvb/nlKjnmoTmqKHmnb/vvIhjcnVk5Y2V6KGo5pON5L2cIHRyZWXmoJHooajmk43kvZzvvIknLAorICBgdHBsX3dlYl90eXBlYCB2YXJjaGFyKDMwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WJjeerr+aooeadv+exu+Wei++8iGVsZW1lbnQtdWnmqKHniYggZWxlbWVudC1wbHVz5qih54mI77yJJywKKyAgYHBhY2thZ2VfbmFtZWAgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfnlJ/miJDljIXot6/lvoQnLAorICBgbW9kdWxlX25hbWVgIHZhcmNoYXIoMzApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfnlJ/miJDmqKHlnZflkI0nLAorICBgYnVzaW5lc3NfbmFtZWAgdmFyY2hhcigzMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+eUn+aIkOS4muWKoeWQjScsCisgIGBmdW5jdGlvbl9uYW1lYCB2YXJjaGFyKDUwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn55Sf5oiQ5Yqf6IO95ZCNJywKKyAgYGZ1bmN0aW9uX2F1dGhvcmAgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+eUn+aIkOWKn+iDveS9nOiAhScsCisgIGBnZW5fdHlwZWAgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcwJyBDT01NRU5UICfnlJ/miJDku6PnoIHmlrnlvI/vvIgwemlw5Y6L57yp5YyFIDHoh6rlrprkuYnot6/lvoTvvIknLAorICBgZ2VuX3BhdGhgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcvJyBDT01NRU5UICfnlJ/miJDot6/lvoTvvIjkuI3loavpu5jorqTpobnnm67ot6/lvoTvvIknLAorICBgb3B0aW9uc2AgdmFyY2hhcigxMDAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5YW25a6D55Sf5oiQ6YCJ6aG5JywKKyAgYGNyZWF0ZV9ieWAgdmFyY2hhcig2NCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfliJvlu7rogIUnLAorICBgY3JlYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+WIm+W7uuaXtumXtCcsCisgIGB1cGRhdGVfYnlgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5pu05paw6ICFJywKKyAgYHVwZGF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmm7TmlrDml7bpl7QnLAorICBgcmVtYXJrYCB2YXJjaGFyKDUwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+Wkh+azqCcsCisgIFBSSU1BUlkgS0VZIChgdGFibGVfaWRgKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQVVUT19JTkNSRU1FTlQgPSA5IENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfku6PnoIHnlJ/miJDkuJrliqHooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIGdlbl90YWJsZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TRVJUIElOVE8gYGdlbl90YWJsZWAgVkFMVUVTICgxLCAndHJhY2tlcl9wcm9qZWN0JywgJ+mhueebruihqCcsIE5VTEwsIE5VTEwsICdUcmFja2VyUHJvamVjdCcsICdjcnVkJywgJycsICdjb20ucnVveWkuc3lzdGVtJywgJ3N5c3RlbScsICdwcm9qZWN0JywgJ+mhueebricsICdydW95aScsICcwJywgJy8nLCBOVUxMLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNScsICcnLCBOVUxMLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVgIFZBTFVFUyAoMiwgJ3RyYWNrZXJfcHJvamVjdF91c2VyJywgJ+mhueebruS4jueUqOaIt+WFs+iBlOihqCcsIE5VTEwsIE5VTEwsICdUcmFja2VyUHJvamVjdFVzZXInLCAnY3J1ZCcsICcnLCAnY29tLnJ1b3lpLnN5c3RlbScsICdzeXN0ZW0nLCAndXNlcicsICfpobnnm67kuI7nlKjmiLflhbPogZQnLCAncnVveWknLCAnMCcsICcvJywgTlVMTCwgJ2FkbWluJywgJzIwMjUtMDQtMjAgMjA6MzM6MjYnLCAnJywgTlVMTCwgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlYCBWQUxVRVMgKDMsICd0cmFja2VyX3Rhc2snLCAn5Lu75Yqh6KGoJywgTlVMTCwgTlVMTCwgJ1RyYWNrZXJUYXNrJywgJ2NydWQnLCAnJywgJ2NvbS5ydW95aS5zeXN0ZW0nLCAnc3lzdGVtJywgJ3Rhc2snLCAn5Lu75YqhJywgJ3J1b3lpJywgJzAnLCAnLycsIE5VTEwsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI2JywgJycsIE5VTEwsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZWAgVkFMVUVTICg0LCAndHJhY2tlcl90YXNrX2xvZycsICfku7vliqHml6Xlv5fooagnLCBOVUxMLCBOVUxMLCAnVHJhY2tlclRhc2tMb2cnLCAnY3J1ZCcsICcnLCAnY29tLnJ1b3lpLnN5c3RlbScsICdzeXN0ZW0nLCAnbG9nJywgJ+S7u+WKoeaXpeW/lycsICdydW95aScsICcwJywgJy8nLCBOVUxMLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNycsICcnLCBOVUxMLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVgIFZBTFVFUyAoNSwgJ2J0X3RvcnJlbnQnLCAn56eN5a2Q5Li76KGoJywgTlVMTCwgTlVMTCwgJ0J0VG9ycmVudCcsICdjcnVkJywgJycsICdjb20ucnVveWkuc3lzdGVtJywgJ3N5c3RlbScsICd0b3JyZW50JywgJ+enjeWtkOS4uycsICdydW95aScsICcwJywgJy8nLCBOVUxMLCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVgIFZBTFVFUyAoNiwgJ2J0X3RvcnJlbnRfYW5ub3VuY2UnLCAn56eN5a2Q55qEIFRyYWNrZXIg5YiX6KGoJywgTlVMTCwgTlVMTCwgJ0J0VG9ycmVudEFubm91bmNlJywgJ2NydWQnLCAnJywgJ2NvbS5ydW95aS5zeXN0ZW0nLCAnc3lzdGVtJywgJ2Fubm91bmNlJywgJ+enjeWtkOeahCBUcmFja2VyIOWIlycsICdydW95aScsICcwJywgJy8nLCBOVUxMLCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVgIFZBTFVFUyAoNywgJ2J0X3RvcnJlbnRfZmlsZScsICfnp43lrZDljIXlkKvnmoTmlofku7bliJfooagnLCBOVUxMLCBOVUxMLCAnQnRUb3JyZW50RmlsZScsICdjcnVkJywgJycsICdjb20ucnVveWkuc3lzdGVtJywgJ3N5c3RlbScsICdmaWxlJywgJ+enjeWtkOWMheWQq+eahOaWh+S7tuWIlycsICdydW95aScsICcwJywgJy8nLCBOVUxMLCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVgIFZBTFVFUyAoOCwgJ2J0X3RvcnJlbnRfdGFncycsICfnp43lrZDmoIfnrb4nLCBOVUxMLCBOVUxMLCAnQnRUb3JyZW50VGFncycsICdjcnVkJywgJycsICdjb20ucnVveWkuc3lzdGVtJywgJ3N5c3RlbScsICd0YWdzJywgJ+enjeWtkOagh+etvicsICdydW95aScsICcwJywgJy8nLCBOVUxMLCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNycsICcnLCBOVUxMLCBOVUxMKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBnZW5fdGFibGVfY29sdW1uCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgZ2VuX3RhYmxlX2NvbHVtbmA7CitDUkVBVEUgVEFCTEUgYGdlbl90YWJsZV9jb2x1bW5gICAoCisgIGBjb2x1bW5faWRgIGJpZ2ludCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCBDT01NRU5UICfnvJblj7cnLAorICBgdGFibGVfaWRgIGJpZ2ludCBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICflvZLlsZ7ooajnvJblj7cnLAorICBgY29sdW1uX25hbWVgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5YiX5ZCN56ewJywKKyAgYGNvbHVtbl9jb21tZW50YCB2YXJjaGFyKDUwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+WIl+aPj+i/sCcsCisgIGBjb2x1bW5fdHlwZWAgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfliJfnsbvlnosnLAorICBgamF2YV90eXBlYCB2YXJjaGFyKDUwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ0pBVkHnsbvlnosnLAorICBgamF2YV9maWVsZGAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICdKQVZB5a2X5q615ZCNJywKKyAgYGlzX3BrYCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmmK/lkKbkuLvplK7vvIgx5piv77yJJywKKyAgYGlzX2luY3JlbWVudGAgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5piv5ZCm6Ieq5aKe77yIMeaYr++8iScsCisgIGBpc19yZXF1aXJlZGAgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5piv5ZCm5b+F5aGr77yIMeaYr++8iScsCisgIGBpc19pbnNlcnRgIGNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+aYr+WQpuS4uuaPkuWFpeWtl+aute+8iDHmmK/vvIknLAorICBgaXNfZWRpdGAgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5piv5ZCm57yW6L6R5a2X5q6177yIMeaYr++8iScsCisgIGBpc19saXN0YCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmmK/lkKbliJfooajlrZfmrrXvvIgx5piv77yJJywKKyAgYGlzX3F1ZXJ5YCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmmK/lkKbmn6Xor6LlrZfmrrXvvIgx5piv77yJJywKKyAgYHF1ZXJ5X3R5cGVgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICdFUScgQ09NTUVOVCAn5p+l6K+i5pa55byP77yI562J5LqO44CB5LiN562J5LqO44CB5aSn5LqO44CB5bCP5LqO44CB6IyD5Zu077yJJywKKyAgYGh0bWxfdHlwZWAgdmFyY2hhcigyMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmmL7npLrnsbvlnovvvIjmlofmnKzmoYbjgIHmlofmnKzln5/jgIHkuIvmi4nmoYbjgIHlpI3pgInmoYbjgIHljZXpgInmoYbjgIHml6XmnJ/mjqfku7bvvIknLAorICBgZGljdF90eXBlYCB2YXJjaGFyKDIwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICflrZflhbjnsbvlnosnLAorICBgc29ydGAgaW50IE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+aOkuW6jycsCisgIGBjcmVhdGVfYnlgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5Yib5bu66ICFJywKKyAgYGNyZWF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfliJvlu7rml7bpl7QnLAorICBgdXBkYXRlX2J5YCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+abtOaWsOiAhScsCisgIGB1cGRhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5pu05paw5pe26Ze0JywKKyAgUFJJTUFSWSBLRVkgKGBjb2x1bW5faWRgKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQVVUT19JTkNSRU1FTlQgPSA0OSBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn5Luj56CB55Sf5oiQ5Lia5Yqh6KGo5a2X5q61JyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBnZW5fdGFibGVfY29sdW1uCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICgxLCAxLCAncHJvamVjdF9pZCcsICfpobnnm65JRCcsICdiaWdpbnQnLCAnTG9uZycsICdwcm9qZWN0SWQnLCAnMScsICcxJywgJzAnLCAnMScsIE5VTEwsIE5VTEwsIE5VTEwsICdFUScsICdpbnB1dCcsICcnLCAxLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNScsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDIsIDEsICdwcm9qZWN0X25hbWUnLCAn6aG555uu5ZCN56ewJywgJ3ZhcmNoYXIoMTAwKScsICdTdHJpbmcnLCAncHJvamVjdE5hbWUnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICdMSUtFJywgJ2lucHV0JywgJycsIDIsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI1JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMywgMSwgJ2Rlc2NyaXB0aW9uJywgJ+mhueebruaPj+i/sCcsICd2YXJjaGFyKDI1NSknLCAnU3RyaW5nJywgJ2Rlc2NyaXB0aW9uJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnRVEnLCAnaW5wdXQnLCAnJywgMywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMjA6MzM6MjUnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICg0LCAxLCAnc3RhdHVzJywgJ+mhueebrueKtuaAge+8iGFjdGl2ZTog5r+A5rS7LCBpbmFjdGl2ZTog5LiN5rS76LeD77yJJywgJ3ZhcmNoYXIoNTApJywgJ1N0cmluZycsICdzdGF0dXMnLCAnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICdyYWRpbycsICcnLCA0LCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNScsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDUsIDEsICdjcmVhdGVfYnknLCAn5Yib5bu66ICFJywgJ3ZhcmNoYXIoNjQpJywgJ1N0cmluZycsICdjcmVhdGVCeScsICcwJywgJzAnLCAnMCcsICcxJywgTlVMTCwgTlVMTCwgTlVMTCwgJ0VRJywgJ2lucHV0JywgJycsIDUsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI1JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoNiwgMSwgJ2NyZWF0ZV90aW1lJywgJ+WIm+W7uuaXtumXtCcsICdkYXRldGltZScsICdEYXRlJywgJ2NyZWF0ZVRpbWUnLCAnMCcsICcwJywgJzAnLCAnMScsIE5VTEwsIE5VTEwsIE5VTEwsICdFUScsICdkYXRldGltZScsICcnLCA2LCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNScsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDcsIDEsICd1cGRhdGVfYnknLCAn5pu05paw6ICFJywgJ3ZhcmNoYXIoNjQpJywgJ1N0cmluZycsICd1cGRhdGVCeScsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCBOVUxMLCBOVUxMLCAnRVEnLCAnaW5wdXQnLCAnJywgNywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMjA6MzM6MjUnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICg4LCAxLCAndXBkYXRlX3RpbWUnLCAn5pu05paw5pe26Ze0JywgJ2RhdGV0aW1lJywgJ0RhdGUnLCAndXBkYXRlVGltZScsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCBOVUxMLCBOVUxMLCAnRVEnLCAnZGF0ZXRpbWUnLCAnJywgOCwgJ2FkbWluJywgJzIwMjUtMDQtMjAgMjA6MzM6MjUnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICg5LCAyLCAncHJvamVjdF9pZCcsICfpobnnm65JRCcsICdiaWdpbnQnLCAnTG9uZycsICdwcm9qZWN0SWQnLCAnMScsICcwJywgJzAnLCAnMScsIE5VTEwsIE5VTEwsIE5VTEwsICdFUScsICdpbnB1dCcsICcnLCAxLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDEwLCAyLCAndXNlcl9pZCcsICfnlKjmiLdJRCcsICdiaWdpbnQnLCAnTG9uZycsICd1c2VySWQnLCAnMScsICcwJywgJzAnLCAnMScsIE5VTEwsIE5VTEwsIE5VTEwsICdFUScsICdpbnB1dCcsICcnLCAyLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDExLCAyLCAncm9sZScsICfop5LoibLvvIjnrqHnkIblkZjjgIHmiJDlkZjnrYnvvIknLCAndmFyY2hhcig1MCknLCAnU3RyaW5nJywgJ3JvbGUnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICdpbnB1dCcsICcnLCAzLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDEyLCAyLCAnY3JlYXRlX3RpbWUnLCAn5Yqg5YWl5pe26Ze0JywgJ2RhdGV0aW1lJywgJ0RhdGUnLCAnY3JlYXRlVGltZScsICcwJywgJzAnLCAnMScsICcxJywgTlVMTCwgTlVMTCwgTlVMTCwgJ0VRJywgJ2RhdGV0aW1lJywgJycsIDQsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI2JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMTMsIDMsICd0YXNrX2lkJywgJ+S7u+WKoUlEJywgJ2JpZ2ludCcsICdMb25nJywgJ3Rhc2tJZCcsICcxJywgJzEnLCAnMCcsICcxJywgTlVMTCwgTlVMTCwgTlVMTCwgJ0VRJywgJ2lucHV0JywgJycsIDEsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI2JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMTQsIDMsICdwcm9qZWN0X2lkJywgJ+aJgOWxnumhueebrklEJywgJ2JpZ2ludCcsICdMb25nJywgJ3Byb2plY3RJZCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJ0VRJywgJ2lucHV0JywgJycsIDIsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI2JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMTUsIDMsICd0YXNrX25hbWUnLCAn5Lu75Yqh5ZCN56ewJywgJ3ZhcmNoYXIoMTAwKScsICdTdHJpbmcnLCAndGFza05hbWUnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICdMSUtFJywgJ2lucHV0JywgJycsIDMsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI2JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMTYsIDMsICdkZXNjcmlwdGlvbicsICfku7vliqHmj4/ov7AnLCAndmFyY2hhcigyNTUpJywgJ1N0cmluZycsICdkZXNjcmlwdGlvbicsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJ0VRJywgJ2lucHV0JywgJycsIDQsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI2JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMTcsIDMsICdhc3NpZ25lZF90bycsICfliIbphY3nu5nnmoTnlKjmiLdJRCcsICdiaWdpbnQnLCAnTG9uZycsICdhc3NpZ25lZFRvJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnRVEnLCAnaW5wdXQnLCAnJywgNSwgJ2FkbWluJywgJzIwMjUtMDQtMjAgMjA6MzM6MjYnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICgxOCwgMywgJ3N0YXR1cycsICfku7vliqHnirbmgIHvvIhvcGVuOiDlvoXlip4sIGluX3Byb2dyZXNzOiDov5vooYzkuK0sIGNsb3NlZDog5a6M5oiQ77yJJywgJ3ZhcmNoYXIoNTApJywgJ1N0cmluZycsICdzdGF0dXMnLCAnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICdyYWRpbycsICcnLCA2LCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNycsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDE5LCAzLCAncHJpb3JpdHknLCAn5Lu75Yqh5LyY5YWI57qn77yIbG93LCBtZWRpdW0sIGhpZ2jvvIknLCAndmFyY2hhcigyMCknLCAnU3RyaW5nJywgJ3ByaW9yaXR5JywgJzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnRVEnLCAnaW5wdXQnLCAnJywgNywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMjA6MzM6MjcnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICgyMCwgMywgJ2NyZWF0ZV90aW1lJywgJ+WIm+W7uuaXtumXtCcsICdkYXRldGltZScsICdEYXRlJywgJ2NyZWF0ZVRpbWUnLCAnMCcsICcwJywgJzAnLCAnMScsIE5VTEwsIE5VTEwsIE5VTEwsICdFUScsICdkYXRldGltZScsICcnLCA4LCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNycsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDIxLCAzLCAndXBkYXRlX3RpbWUnLCAn5pu05paw5pe26Ze0JywgJ2RhdGV0aW1lJywgJ0RhdGUnLCAndXBkYXRlVGltZScsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCBOVUxMLCBOVUxMLCAnRVEnLCAnZGF0ZXRpbWUnLCAnJywgOSwgJ2FkbWluJywgJzIwMjUtMDQtMjAgMjA6MzM6MjcnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICgyMiwgNCwgJ2xvZ19pZCcsICfml6Xlv5dJRCcsICdiaWdpbnQnLCAnTG9uZycsICdsb2dJZCcsICcxJywgJzEnLCAnMCcsICcxJywgTlVMTCwgTlVMTCwgTlVMTCwgJ0VRJywgJ2lucHV0JywgJycsIDEsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI3JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMjMsIDQsICd0YXNrX2lkJywgJ+S7u+WKoUlEJywgJ2JpZ2ludCcsICdMb25nJywgJ3Rhc2tJZCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJ0VRJywgJ2lucHV0JywgJycsIDIsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI3JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMjQsIDQsICd1c2VyX2lkJywgJ+aTjeS9nOeUqOaIt0lEJywgJ2JpZ2ludCcsICdMb25nJywgJ3VzZXJJZCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJ0VRJywgJ2lucHV0JywgJycsIDMsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI3JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMjUsIDQsICdhY3Rpb24nLCAn5pON5L2c57G75Z6L77yI5Yib5bu644CB5pu05paw44CB5Yig6Zmk77yJJywgJ3ZhcmNoYXIoNTApJywgJ1N0cmluZycsICdhY3Rpb24nLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICdpbnB1dCcsICcnLCA0LCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNycsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDI2LCA0LCAnZGVzY3JpcHRpb24nLCAn5pON5L2c5o+P6L+wJywgJ3ZhcmNoYXIoMjU1KScsICdTdHJpbmcnLCAnZGVzY3JpcHRpb24nLCAnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICdpbnB1dCcsICcnLCA1LCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAyMDozMzoyNycsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDI3LCA0LCAnY3JlYXRlX3RpbWUnLCAn5Yib5bu65pe26Ze0JywgJ2RhdGV0aW1lJywgJ0RhdGUnLCAnY3JlYXRlVGltZScsICcwJywgJzAnLCAnMCcsICcxJywgTlVMTCwgTlVMTCwgTlVMTCwgJ0VRJywgJ2RhdGV0aW1lJywgJycsIDYsICdhZG1pbicsICcyMDI1LTA0LTIwIDIwOjMzOjI3JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMjgsIDUsICd0b3JyZW50X2lkJywgJ+enjeWtkElEJywgJ2JpZ2ludCcsICdMb25nJywgJ3RvcnJlbnRJZCcsICcxJywgJzEnLCAnMCcsICcxJywgTlVMTCwgTlVMTCwgTlVMTCwgJ0VRJywgJ2lucHV0JywgJycsIDEsICdhZG1pbicsICcyMDI1LTA0LTIxIDEwOjAwOjI2JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMjksIDUsICdpbmZvX2hhc2gnLCAnSW5mb0hhc2gnLCAnY2hhcig0MCknLCAnU3RyaW5nJywgJ2luZm9IYXNoJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnRVEnLCAnaW5wdXQnLCAnJywgMiwgJ2FkbWluJywgJzIwMjUtMDQtMjEgMTA6MDA6MjYnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICgzMCwgNSwgJ25hbWUnLCAn56eN5a2Q5ZCN56ewJywgJ3ZhcmNoYXIoMjU1KScsICdTdHJpbmcnLCAnbmFtZScsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJ0xJS0UnLCAnaW5wdXQnLCAnJywgMywgJ2FkbWluJywgJzIwMjUtMDQtMjEgMTA6MDA6MjYnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICgzMSwgNSwgJ2xlbmd0aCcsICfmgLvlpKflsI/vvIjlrZfoioLvvIknLCAnYmlnaW50JywgJ0xvbmcnLCAnbGVuZ3RoJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnRVEnLCAnaW5wdXQnLCAnJywgNCwgJ2FkbWluJywgJzIwMjUtMDQtMjEgMTA6MDA6MjYnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICgzMiwgNSwgJ3BpZWNlX2xlbmd0aCcsICfmr4/kuKogcGllY2Ug55qE6ZW/5bqmJywgJ2ludCcsICdMb25nJywgJ3BpZWNlTGVuZ3RoJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnRVEnLCAnaW5wdXQnLCAnJywgNSwgJ2FkbWluJywgJzIwMjUtMDQtMjEgMTA6MDA6MjYnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICgzMywgNSwgJ3BpZWNlc19jb3VudCcsICdwaWVjZSDmgLvmlbAnLCAnaW50JywgJ0xvbmcnLCAncGllY2VzQ291bnQnLCAnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICdpbnB1dCcsICcnLCA2LCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDM0LCA1LCAnY3JlYXRlZF9ieScsICfliJvlu7rlt6XlhbcnLCAndmFyY2hhcigxMDApJywgJ1N0cmluZycsICdjcmVhdGVkQnknLCAnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICdpbnB1dCcsICcnLCA3LCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDM1LCA1LCAndG9ycmVudF9jcmVhdGVfdGltZScsICfnp43lrZDlhoXorrDlvZXnmoTliJvlu7rml7bpl7QnLCAnZGF0ZXRpbWUnLCAnRGF0ZScsICd0b3JyZW50Q3JlYXRlVGltZScsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJ0VRJywgJ2RhdGV0aW1lJywgJycsIDgsICdhZG1pbicsICcyMDI1LTA0LTIxIDEwOjAwOjI2JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMzYsIDUsICd1cGxvYWRlcl9pZCcsICfkuIrkvKDnlKjmiLdJRO+8iOWFs+iBlCBzeXNfdXNlci51c2VyX2lk77yJJywgJ2JpZ2ludCcsICdMb25nJywgJ3VwbG9hZGVySWQnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICdpbnB1dCcsICcnLCA5LCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDM3LCA1LCAndXBsb2FkX3RpbWUnLCAn5LiK5Lyg5pe26Ze0JywgJ2RhdGV0aW1lJywgJ0RhdGUnLCAndXBsb2FkVGltZScsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJ0VRJywgJ2RhdGV0aW1lJywgJycsIDEwLCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDM4LCA1LCAnZmlsZV9wYXRoJywgJ+enjeWtkOaWh+S7tuWcqOacjeWKoeWZqOeahOWtmOWCqOi3r+W+hCcsICd2YXJjaGFyKDI1NSknLCAnU3RyaW5nJywgJ2ZpbGVQYXRoJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnRVEnLCAnaW5wdXQnLCAnJywgMTEsICdhZG1pbicsICcyMDI1LTA0LTIxIDEwOjAwOjI2JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoMzksIDYsICdpZCcsICfkuLvplK4nLCAnYmlnaW50JywgJ0xvbmcnLCAnaWQnLCAnMScsICcxJywgJzAnLCAnMScsIE5VTEwsIE5VTEwsIE5VTEwsICdFUScsICdpbnB1dCcsICcnLCAxLCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDQwLCA2LCAndG9ycmVudF9pZCcsICfnp43lrZBJRCcsICdiaWdpbnQnLCAnTG9uZycsICd0b3JyZW50SWQnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICdpbnB1dCcsICcnLCAyLCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDQxLCA2LCAnYW5ub3VuY2VfdXJsJywgJ1RyYWNrZXIgYW5ub3VuY2UgVVJMJywgJ3RleHQnLCAnU3RyaW5nJywgJ2Fubm91bmNlVXJsJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnRVEnLCAndGV4dGFyZWEnLCAnJywgMywgJ2FkbWluJywgJzIwMjUtMDQtMjEgMTA6MDA6MjYnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICg0MiwgNywgJ2lkJywgJ+S4u+mUricsICdiaWdpbnQnLCAnTG9uZycsICdpZCcsICcxJywgJzEnLCAnMCcsICcxJywgTlVMTCwgTlVMTCwgTlVMTCwgJ0VRJywgJ2lucHV0JywgJycsIDEsICdhZG1pbicsICcyMDI1LTA0LTIxIDEwOjAwOjI2JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoNDMsIDcsICd0b3JyZW50X2lkJywgJ+enjeWtkElE77yI5YWz6IGUIGJ0X3RvcnJlbnTvvIknLCAnYmlnaW50JywgJ0xvbmcnLCAndG9ycmVudElkJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnRVEnLCAnaW5wdXQnLCAnJywgMiwgJ2FkbWluJywgJzIwMjUtMDQtMjEgMTA6MDA6MjYnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgZ2VuX3RhYmxlX2NvbHVtbmAgVkFMVUVTICg0NCwgNywgJ2ZpbGVfcGF0aCcsICfmlofku7bot6/lvoQnLCAndGV4dCcsICdTdHJpbmcnLCAnZmlsZVBhdGgnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICdFUScsICd0ZXh0YXJlYScsICcnLCAzLCAnYWRtaW4nLCAnMjAyNS0wNC0yMSAxMDowMDoyNicsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBnZW5fdGFibGVfY29sdW1uYCBWQUxVRVMgKDQ1LCA3LCAnZmlsZV9zaXplJywgJ+aWh+S7tuWkp+Wwj++8iOWtl+iKgu+8iScsICdiaWdpbnQnLCAnTG9uZycsICdmaWxlU2l6ZScsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJ0VRJywgJ2lucHV0JywgJycsIDQsICdhZG1pbicsICcyMDI1LTA0LTIxIDEwOjAwOjI3JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoNDYsIDgsICdpZCcsIE5VTEwsICdiaWdpbnQnLCAnTG9uZycsICdpZCcsICcxJywgJzEnLCAnMCcsICcxJywgTlVMTCwgTlVMTCwgTlVMTCwgJ0VRJywgJ2lucHV0JywgJycsIDEsICdhZG1pbicsICcyMDI1LTA0LTIxIDEwOjAwOjI3JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoNDcsIDgsICd0b3JyZW50X2lkJywgTlVMTCwgJ2JpZ2ludCcsICdMb25nJywgJ3RvcnJlbnRJZCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJ0VRJywgJ2lucHV0JywgJycsIDIsICdhZG1pbicsICcyMDI1LTA0LTIxIDEwOjAwOjI3JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYGdlbl90YWJsZV9jb2x1bW5gIFZBTFVFUyAoNDgsIDgsICd0YWcnLCBOVUxMLCAndmFyY2hhcig1MCknLCAnU3RyaW5nJywgJ3RhZycsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJ0VRJywgJ2lucHV0JywgJycsIDMsICdhZG1pbicsICcyMDI1LTA0LTIxIDEwOjAwOjI3JywgJycsIE5VTEwpOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIHN5c19jb25maWcKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGBzeXNfY29uZmlnYDsKK0NSRUFURSBUQUJMRSBgc3lzX2NvbmZpZ2AgICgKKyAgYGNvbmZpZ19pZGAgaW50IE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5UIENPTU1FTlQgJ+WPguaVsOS4u+mUricsCisgIGBjb25maWdfbmFtZWAgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5Y+C5pWw5ZCN56ewJywKKyAgYGNvbmZpZ19rZXlgIHZhcmNoYXIoMTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WPguaVsOmUruWQjScsCisgIGBjb25maWdfdmFsdWVgIHZhcmNoYXIoNTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WPguaVsOmUruWAvCcsCisgIGBjb25maWdfdHlwZWAgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICdOJyBDT01NRU5UICfns7vnu5/lhoXnva7vvIhZ5pivIE7lkKbvvIknLAorICBgY3JlYXRlX2J5YCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WIm+W7uuiAhScsCisgIGBjcmVhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5Yib5bu65pe26Ze0JywKKyAgYHVwZGF0ZV9ieWAgdmFyY2hhcig2NCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfmm7TmlrDogIUnLAorICBgdXBkYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+abtOaWsOaXtumXtCcsCisgIGByZW1hcmtgIHZhcmNoYXIoNTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5aSH5rOoJywKKyAgUFJJTUFSWSBLRVkgKGBjb25maWdfaWRgKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQVVUT19JTkNSRU1FTlQgPSAxMDAgQ0hBUkFDVEVSIFNFVCA9IHV0ZjhtYjQgQ09MTEFURSA9IHV0ZjhtYjRfMDkwMF9haV9jaSBDT01NRU5UID0gJ+WPguaVsOmFjee9ruihqCcgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2Ygc3lzX2NvbmZpZworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TRVJUIElOVE8gYHN5c19jb25maWdgIFZBTFVFUyAoMSwgJ+S4u+ahhuaetumhtS3pu5jorqTnmq7ogqTmoLflvI/lkI3np7AnLCAnc3lzLmluZGV4LnNraW5OYW1lJywgJ3NraW4tYmx1ZScsICdZJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+iTneiJsiBza2luLWJsdWXjgIHnu7/oibIgc2tpbi1ncmVlbuOAgee0q+iJsiBza2luLXB1cnBsZeOAgee6ouiJsiBza2luLXJlZOOAgem7hOiJsiBza2luLXllbGxvdycpOworSU5TRVJUIElOVE8gYHN5c19jb25maWdgIFZBTFVFUyAoMiwgJ+eUqOaIt+euoeeQhi3otKblj7fliJ3lp4vlr4bnoIEnLCAnc3lzLnVzZXIuaW5pdFBhc3N3b3JkJywgJzEyMzQ1NicsICdZJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+WIneWni+WMluWvhueggSAxMjM0NTYnKTsKK0lOU0VSVCBJTlRPIGBzeXNfY29uZmlnYCBWQUxVRVMgKDMsICfkuLvmoYbmnrbpobUt5L6n6L655qCP5Li76aKYJywgJ3N5cy5pbmRleC5zaWRlVGhlbWUnLCAndGhlbWUtZGFyaycsICdZJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+a3seiJsuS4u+mimHRoZW1lLWRhcmvvvIzmtYXoibLkuLvpoph0aGVtZS1saWdodCcpOworSU5TRVJUIElOVE8gYHN5c19jb25maWdgIFZBTFVFUyAoNCwgJ+i0puWPt+iHquWKqS3pqozor4HnoIHlvIDlhbMnLCAnc3lzLmFjY291bnQuY2FwdGNoYUVuYWJsZWQnLCAndHJ1ZScsICdZJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+aYr+WQpuW8gOWQr+mqjOivgeeggeWKn+iDve+8iHRydWXlvIDlkK/vvIxmYWxzZeWFs+mXre+8iScpOworSU5TRVJUIElOVE8gYHN5c19jb25maWdgIFZBTFVFUyAoNSwgJ+i0puWPt+iHquWKqS3mmK/lkKblvIDlkK/nlKjmiLfms6jlhozlip/og70nLCAnc3lzLmFjY291bnQucmVnaXN0ZXJVc2VyJywgJ2ZhbHNlJywgJ1knLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5piv5ZCm5byA5ZCv5rOo5YaM55So5oi35Yqf6IO977yIdHJ1ZeW8gOWQr++8jGZhbHNl5YWz6Zet77yJJyk7CitJTlNFUlQgSU5UTyBgc3lzX2NvbmZpZ2AgVkFMVUVTICg2LCAn55So5oi355m75b2VLem7keWQjeWNleWIl+ihqCcsICdzeXMubG9naW4uYmxhY2tJUExpc3QnLCAnJywgJ1knLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn6K6+572u55m75b2VSVDpu5HlkI3ljZXpmZDliLbvvIzlpJrkuKrljLnphY3pobnku6U75YiG6ZqU77yM5pSv5oyB5Yy56YWN77yIKumAmumFjeOAgee9keaute+8iScpOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIHN5c19kZXB0CistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgc3lzX2RlcHRgOworQ1JFQVRFIFRBQkxFIGBzeXNfZGVwdGAgICgKKyAgYGRlcHRfaWRgIGJpZ2ludCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCBDT01NRU5UICfpg6jpl6hpZCcsCisgIGBwYXJlbnRfaWRgIGJpZ2ludCBOVUxMIERFRkFVTFQgMCBDT01NRU5UICfniLbpg6jpl6hpZCcsCisgIGBhbmNlc3RvcnNgIHZhcmNoYXIoNTApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn56WW57qn5YiX6KGoJywKKyAgYGRlcHRfbmFtZWAgdmFyY2hhcigzMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfpg6jpl6jlkI3np7AnLAorICBgb3JkZXJfbnVtYCBpbnQgTlVMTCBERUZBVUxUIDAgQ09NTUVOVCAn5pi+56S66aG65bqPJywKKyAgYGxlYWRlcmAgdmFyY2hhcigyMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+i0n+i0o+S6uicsCisgIGBwaG9uZWAgdmFyY2hhcigxMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+iBlOezu+eUteivnScsCisgIGBlbWFpbGAgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+mCrueusScsCisgIGBzdGF0dXNgIGNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnMCcgQ09NTUVOVCAn6YOo6Zeo54q25oCB77yIMOato+W4uCAx5YGc55So77yJJywKKyAgYGRlbF9mbGFnYCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJzAnIENPTU1FTlQgJ+WIoOmZpOagh+W/l++8iDDku6PooajlrZjlnKggMuS7o+ihqOWIoOmZpO+8iScsCisgIGBjcmVhdGVfYnlgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5Yib5bu66ICFJywKKyAgYGNyZWF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfliJvlu7rml7bpl7QnLAorICBgdXBkYXRlX2J5YCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+abtOaWsOiAhScsCisgIGB1cGRhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5pu05paw5pe26Ze0JywKKyAgUFJJTUFSWSBLRVkgKGBkZXB0X2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIEFVVE9fSU5DUkVNRU5UID0gMjAwIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfpg6jpl6jooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIHN5c19kZXB0CistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNFUlQgSU5UTyBgc3lzX2RlcHRgIFZBTFVFUyAoMTAwLCAwLCAnMCcsICfoi6Xkvp3np5HmioAnLCAwLCAn6Iul5L6dJywgJzE1ODg4ODg4ODg4JywgJ3J5QHFxLmNvbScsICcwJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGVwdGAgVkFMVUVTICgxMDEsIDEwMCwgJzAsMTAwJywgJ+a3seWcs+aAu+WFrOWPuCcsIDEsICfoi6Xkvp0nLCAnMTU4ODg4ODg4ODgnLCAncnlAcXEuY29tJywgJzAnLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwpOworSU5TRVJUIElOVE8gYHN5c19kZXB0YCBWQUxVRVMgKDEwMiwgMTAwLCAnMCwxMDAnLCAn6ZW/5rKZ5YiG5YWs5Y+4JywgMiwgJ+iLpeS+nScsICcxNTg4ODg4ODg4OCcsICdyeUBxcS5jb20nLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgc3lzX2RlcHRgIFZBTFVFUyAoMTAzLCAxMDEsICcwLDEwMCwxMDEnLCAn56CU5Y+R6YOo6ZeoJywgMSwgJ+iLpeS+nScsICcxNTg4ODg4ODg4OCcsICdyeUBxcS5jb20nLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgc3lzX2RlcHRgIFZBTFVFUyAoMTA0LCAxMDEsICcwLDEwMCwxMDEnLCAn5biC5Zy66YOo6ZeoJywgMiwgJ+iLpeS+nScsICcxNTg4ODg4ODg4OCcsICdyeUBxcS5jb20nLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgc3lzX2RlcHRgIFZBTFVFUyAoMTA1LCAxMDEsICcwLDEwMCwxMDEnLCAn5rWL6K+V6YOo6ZeoJywgMywgJ+iLpeS+nScsICcxNTg4ODg4ODg4OCcsICdyeUBxcS5jb20nLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgc3lzX2RlcHRgIFZBTFVFUyAoMTA2LCAxMDEsICcwLDEwMCwxMDEnLCAn6LSi5Yqh6YOo6ZeoJywgNCwgJ+iLpeS+nScsICcxNTg4ODg4ODg4OCcsICdyeUBxcS5jb20nLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgc3lzX2RlcHRgIFZBTFVFUyAoMTA3LCAxMDEsICcwLDEwMCwxMDEnLCAn6L+Q57u06YOo6ZeoJywgNSwgJ+iLpeS+nScsICcxNTg4ODg4ODg4OCcsICdyeUBxcS5jb20nLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgc3lzX2RlcHRgIFZBTFVFUyAoMTA4LCAxMDIsICcwLDEwMCwxMDInLCAn5biC5Zy66YOo6ZeoJywgMSwgJ+iLpeS+nScsICcxNTg4ODg4ODg4OCcsICdyeUBxcS5jb20nLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgc3lzX2RlcHRgIFZBTFVFUyAoMTA5LCAxMDIsICcwLDEwMCwxMDInLCAn6LSi5Yqh6YOo6ZeoJywgMiwgJ+iLpeS+nScsICcxNTg4ODg4ODg4OCcsICdyeUBxcS5jb20nLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCk7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3Igc3lzX2RpY3RfZGF0YQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYHN5c19kaWN0X2RhdGFgOworQ1JFQVRFIFRBQkxFIGBzeXNfZGljdF9kYXRhYCAgKAorICBgZGljdF9jb2RlYCBiaWdpbnQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQgQ09NTUVOVCAn5a2X5YW457yW56CBJywKKyAgYGRpY3Rfc29ydGAgaW50IE5VTEwgREVGQVVMVCAwIENPTU1FTlQgJ+Wtl+WFuOaOkuW6jycsCisgIGBkaWN0X2xhYmVsYCB2YXJjaGFyKDEwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICflrZflhbjmoIfnrb4nLAorICBgZGljdF92YWx1ZWAgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5a2X5YW46ZSu5YC8JywKKyAgYGRpY3RfdHlwZWAgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5a2X5YW457G75Z6LJywKKyAgYGNzc19jbGFzc2AgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmoLflvI/lsZ7mgKfvvIjlhbbku5bmoLflvI/mianlsZXvvIknLAorICBgbGlzdF9jbGFzc2AgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfooajmoLzlm57mmL7moLflvI8nLAorICBgaXNfZGVmYXVsdGAgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICdOJyBDT01NRU5UICfmmK/lkKbpu5jorqTvvIhZ5pivIE7lkKbvvIknLAorICBgc3RhdHVzYCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJzAnIENPTU1FTlQgJ+eKtuaAge+8iDDmraPluLggMeWBnOeUqO+8iScsCisgIGBjcmVhdGVfYnlgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5Yib5bu66ICFJywKKyAgYGNyZWF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfliJvlu7rml7bpl7QnLAorICBgdXBkYXRlX2J5YCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+abtOaWsOiAhScsCisgIGB1cGRhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5pu05paw5pe26Ze0JywKKyAgYHJlbWFya2AgdmFyY2hhcig1MDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICflpIfms6gnLAorICBQUklNQVJZIEtFWSAoYGRpY3RfY29kZWApIFVTSU5HIEJUUkVFCispIEVOR0lORSA9IElubm9EQiBBVVRPX0lOQ1JFTUVOVCA9IDEwMCBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn5a2X5YW45pWw5o2u6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBzeXNfZGljdF9kYXRhCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgxLCAxLCAn55S3JywgJzAnLCAnc3lzX3VzZXJfc2V4JywgJycsICcnLCAnWScsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+aAp+WIq+eUtycpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X2RhdGFgIFZBTFVFUyAoMiwgMiwgJ+WlsycsICcxJywgJ3N5c191c2VyX3NleCcsICcnLCAnJywgJ04nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfmgKfliKvlpbMnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF9kYXRhYCBWQUxVRVMgKDMsIDMsICfmnKrnn6UnLCAnMicsICdzeXNfdXNlcl9zZXgnLCAnJywgJycsICdOJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5oCn5Yir5pyq55+lJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICg0LCAxLCAn5pi+56S6JywgJzAnLCAnc3lzX3Nob3dfaGlkZScsICcnLCAncHJpbWFyeScsICdZJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5pi+56S66I+c5Y2VJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICg1LCAyLCAn6ZqQ6JePJywgJzEnLCAnc3lzX3Nob3dfaGlkZScsICcnLCAnZGFuZ2VyJywgJ04nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfpmpDol4/oj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF9kYXRhYCBWQUxVRVMgKDYsIDEsICfmraPluLgnLCAnMCcsICdzeXNfbm9ybWFsX2Rpc2FibGUnLCAnJywgJ3ByaW1hcnknLCAnWScsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+ato+W4uOeKtuaAgScpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X2RhdGFgIFZBTFVFUyAoNywgMiwgJ+WBnOeUqCcsICcxJywgJ3N5c19ub3JtYWxfZGlzYWJsZScsICcnLCAnZGFuZ2VyJywgJ04nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICflgZznlKjnirbmgIEnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF9kYXRhYCBWQUxVRVMgKDgsIDEsICfmraPluLgnLCAnMCcsICdzeXNfam9iX3N0YXR1cycsICcnLCAncHJpbWFyeScsICdZJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5q2j5bi454q25oCBJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICg5LCAyLCAn5pqC5YGcJywgJzEnLCAnc3lzX2pvYl9zdGF0dXMnLCAnJywgJ2RhbmdlcicsICdOJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5YGc55So54q25oCBJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgxMCwgMSwgJ+m7mOiupCcsICdERUZBVUxUJywgJ3N5c19qb2JfZ3JvdXAnLCAnJywgJycsICdZJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn6buY6K6k5YiG57uEJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgxMSwgMiwgJ+ezu+e7nycsICdTWVNURU0nLCAnc3lzX2pvYl9ncm91cCcsICcnLCAnJywgJ04nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfns7vnu5/liIbnu4QnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF9kYXRhYCBWQUxVRVMgKDEyLCAxLCAn5pivJywgJ1knLCAnc3lzX3llc19ubycsICcnLCAncHJpbWFyeScsICdZJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn57O757uf6buY6K6k5pivJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgxMywgMiwgJ+WQpicsICdOJywgJ3N5c195ZXNfbm8nLCAnJywgJ2RhbmdlcicsICdOJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn57O757uf6buY6K6k5ZCmJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgxNCwgMSwgJ+mAmuefpScsICcxJywgJ3N5c19ub3RpY2VfdHlwZScsICcnLCAnd2FybmluZycsICdZJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn6YCa55+lJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgxNSwgMiwgJ+WFrOWRiicsICcyJywgJ3N5c19ub3RpY2VfdHlwZScsICcnLCAnc3VjY2VzcycsICdOJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5YWs5ZGKJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgxNiwgMSwgJ+ato+W4uCcsICcwJywgJ3N5c19ub3RpY2Vfc3RhdHVzJywgJycsICdwcmltYXJ5JywgJ1knLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfmraPluLjnirbmgIEnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF9kYXRhYCBWQUxVRVMgKDE3LCAyLCAn5YWz6ZetJywgJzEnLCAnc3lzX25vdGljZV9zdGF0dXMnLCAnJywgJ2RhbmdlcicsICdOJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5YWz6Zet54q25oCBJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgxOCwgOTksICflhbbku5YnLCAnMCcsICdzeXNfb3Blcl90eXBlJywgJycsICdpbmZvJywgJ04nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICflhbbku5bmk43kvZwnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF9kYXRhYCBWQUxVRVMgKDE5LCAxLCAn5paw5aKeJywgJzEnLCAnc3lzX29wZXJfdHlwZScsICcnLCAnaW5mbycsICdOJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5paw5aKe5pON5L2cJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgyMCwgMiwgJ+S/ruaUuScsICcyJywgJ3N5c19vcGVyX3R5cGUnLCAnJywgJ2luZm8nLCAnTicsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+S/ruaUueaTjeS9nCcpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X2RhdGFgIFZBTFVFUyAoMjEsIDMsICfliKDpmaQnLCAnMycsICdzeXNfb3Blcl90eXBlJywgJycsICdkYW5nZXInLCAnTicsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+WIoOmZpOaTjeS9nCcpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X2RhdGFgIFZBTFVFUyAoMjIsIDQsICfmjojmnYMnLCAnNCcsICdzeXNfb3Blcl90eXBlJywgJycsICdwcmltYXJ5JywgJ04nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfmjojmnYPmk43kvZwnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF9kYXRhYCBWQUxVRVMgKDIzLCA1LCAn5a+85Ye6JywgJzUnLCAnc3lzX29wZXJfdHlwZScsICcnLCAnd2FybmluZycsICdOJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5a+85Ye65pON5L2cJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfZGF0YWAgVkFMVUVTICgyNCwgNiwgJ+WvvOWFpScsICc2JywgJ3N5c19vcGVyX3R5cGUnLCAnJywgJ3dhcm5pbmcnLCAnTicsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+WvvOWFpeaTjeS9nCcpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X2RhdGFgIFZBTFVFUyAoMjUsIDcsICflvLrpgIAnLCAnNycsICdzeXNfb3Blcl90eXBlJywgJycsICdkYW5nZXInLCAnTicsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+W8uumAgOaTjeS9nCcpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X2RhdGFgIFZBTFVFUyAoMjYsIDgsICfnlJ/miJDku6PnoIEnLCAnOCcsICdzeXNfb3Blcl90eXBlJywgJycsICd3YXJuaW5nJywgJ04nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfnlJ/miJDmk43kvZwnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF9kYXRhYCBWQUxVRVMgKDI3LCA5LCAn5riF56m65pWw5o2uJywgJzknLCAnc3lzX29wZXJfdHlwZScsICcnLCAnZGFuZ2VyJywgJ04nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfmuIXnqbrmk43kvZwnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF9kYXRhYCBWQUxVRVMgKDI4LCAxLCAn5oiQ5YqfJywgJzAnLCAnc3lzX2NvbW1vbl9zdGF0dXMnLCAnJywgJ3ByaW1hcnknLCAnTicsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+ato+W4uOeKtuaAgScpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X2RhdGFgIFZBTFVFUyAoMjksIDIsICflpLHotKUnLCAnMScsICdzeXNfY29tbW9uX3N0YXR1cycsICcnLCAnZGFuZ2VyJywgJ04nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICflgZznlKjnirbmgIEnKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBzeXNfZGljdF90eXBlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgc3lzX2RpY3RfdHlwZWA7CitDUkVBVEUgVEFCTEUgYHN5c19kaWN0X3R5cGVgICAoCisgIGBkaWN0X2lkYCBiaWdpbnQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQgQ09NTUVOVCAn5a2X5YW45Li76ZSuJywKKyAgYGRpY3RfbmFtZWAgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5a2X5YW45ZCN56ewJywKKyAgYGRpY3RfdHlwZWAgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5a2X5YW457G75Z6LJywKKyAgYHN0YXR1c2AgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcwJyBDT01NRU5UICfnirbmgIHvvIgw5q2j5bi4IDHlgZznlKjvvIknLAorICBgY3JlYXRlX2J5YCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WIm+W7uuiAhScsCisgIGBjcmVhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5Yib5bu65pe26Ze0JywKKyAgYHVwZGF0ZV9ieWAgdmFyY2hhcig2NCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfmm7TmlrDogIUnLAorICBgdXBkYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+abtOaWsOaXtumXtCcsCisgIGByZW1hcmtgIHZhcmNoYXIoNTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5aSH5rOoJywKKyAgUFJJTUFSWSBLRVkgKGBkaWN0X2lkYCkgVVNJTkcgQlRSRUUsCisgIFVOSVFVRSBJTkRFWCBgZGljdF90eXBlYChgZGljdF90eXBlYCBBU0MpIFVTSU5HIEJUUkVFCispIEVOR0lORSA9IElubm9EQiBBVVRPX0lOQ1JFTUVOVCA9IDEwMCBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn5a2X5YW457G75Z6L6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBzeXNfZGljdF90eXBlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfdHlwZWAgVkFMVUVTICgxLCAn55So5oi35oCn5YirJywgJ3N5c191c2VyX3NleCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+eUqOaIt+aAp+WIq+WIl+ihqCcpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X3R5cGVgIFZBTFVFUyAoMiwgJ+iPnOWNleeKtuaAgScsICdzeXNfc2hvd19oaWRlJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn6I+c5Y2V54q25oCB5YiX6KGoJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfdHlwZWAgVkFMVUVTICgzLCAn57O757uf5byA5YWzJywgJ3N5c19ub3JtYWxfZGlzYWJsZScsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+ezu+e7n+W8gOWFs+WIl+ihqCcpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X3R5cGVgIFZBTFVFUyAoNCwgJ+S7u+WKoeeKtuaAgScsICdzeXNfam9iX3N0YXR1cycsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+S7u+WKoeeKtuaAgeWIl+ihqCcpOworSU5TRVJUIElOVE8gYHN5c19kaWN0X3R5cGVgIFZBTFVFUyAoNSwgJ+S7u+WKoeWIhue7hCcsICdzeXNfam9iX2dyb3VwJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5Lu75Yqh5YiG57uE5YiX6KGoJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfdHlwZWAgVkFMVUVTICg2LCAn57O757uf5piv5ZCmJywgJ3N5c195ZXNfbm8nLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfns7vnu5/mmK/lkKbliJfooagnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF90eXBlYCBWQUxVRVMgKDcsICfpgJrnn6XnsbvlnosnLCAnc3lzX25vdGljZV90eXBlJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn6YCa55+l57G75Z6L5YiX6KGoJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfdHlwZWAgVkFMVUVTICg4LCAn6YCa55+l54q25oCBJywgJ3N5c19ub3RpY2Vfc3RhdHVzJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn6YCa55+l54q25oCB5YiX6KGoJyk7CitJTlNFUlQgSU5UTyBgc3lzX2RpY3RfdHlwZWAgVkFMVUVTICg5LCAn5pON5L2c57G75Z6LJywgJ3N5c19vcGVyX3R5cGUnLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfmk43kvZznsbvlnovliJfooagnKTsKK0lOU0VSVCBJTlRPIGBzeXNfZGljdF90eXBlYCBWQUxVRVMgKDEwLCAn57O757uf54q25oCBJywgJ3N5c19jb21tb25fc3RhdHVzJywgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn55m75b2V54q25oCB5YiX6KGoJyk7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3Igc3lzX2pvYgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYHN5c19qb2JgOworQ1JFQVRFIFRBQkxFIGBzeXNfam9iYCAgKAorICBgam9iX2lkYCBiaWdpbnQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQgQ09NTUVOVCAn5Lu75YqhSUQnLAorICBgam9iX25hbWVgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+S7u+WKoeWQjeensCcsCisgIGBqb2JfZ3JvdXBgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBERUZBVUxUICdERUZBVUxUJyBDT01NRU5UICfku7vliqHnu4TlkI0nLAorICBgaW52b2tlX3RhcmdldGAgdmFyY2hhcig1MDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfosIPnlKjnm67moIflrZfnrKbkuLInLAorICBgY3Jvbl9leHByZXNzaW9uYCB2YXJjaGFyKDI1NSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICdjcm9u5omn6KGM6KGo6L6+5byPJywKKyAgYG1pc2ZpcmVfcG9saWN5YCB2YXJjaGFyKDIwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICczJyBDT01NRU5UICforqHliJLmiafooYzplJnor6/nrZbnlaXvvIgx56uL5Y2z5omn6KGMIDLmiafooYzkuIDmrKEgM+aUvuW8g+aJp+ihjO+8iScsCisgIGBjb25jdXJyZW50YCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJzEnIENPTU1FTlQgJ+aYr+WQpuW5tuWPkeaJp+ihjO+8iDDlhYHorrggMeemgeatou+8iScsCisgIGBzdGF0dXNgIGNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnMCcgQ09NTUVOVCAn54q25oCB77yIMOato+W4uCAx5pqC5YGc77yJJywKKyAgYGNyZWF0ZV9ieWAgdmFyY2hhcig2NCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfliJvlu7rogIUnLAorICBgY3JlYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+WIm+W7uuaXtumXtCcsCisgIGB1cGRhdGVfYnlgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5pu05paw6ICFJywKKyAgYHVwZGF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmm7TmlrDml7bpl7QnLAorICBgcmVtYXJrYCB2YXJjaGFyKDUwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICflpIfms6jkv6Hmga8nLAorICBQUklNQVJZIEtFWSAoYGpvYl9pZGAsIGBqb2JfbmFtZWAsIGBqb2JfZ3JvdXBgKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQVVUT19JTkNSRU1FTlQgPSAxMDAgQ0hBUkFDVEVSIFNFVCA9IHV0ZjhtYjQgQ09MTEFURSA9IHV0ZjhtYjRfMDkwMF9haV9jaSBDT01NRU5UID0gJ+WumuaXtuS7u+WKoeiwg+W6puihqCcgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2Ygc3lzX2pvYgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TRVJUIElOVE8gYHN5c19qb2JgIFZBTFVFUyAoMSwgJ+ezu+e7n+m7mOiupO+8iOaXoOWPgu+8iScsICdERUZBVUxUJywgJ3J5VGFzay5yeU5vUGFyYW1zJywgJzAvMTAgKiAqICogKiA/JywgJzMnLCAnMScsICcxJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19qb2JgIFZBTFVFUyAoMiwgJ+ezu+e7n+m7mOiupO+8iOacieWPgu+8iScsICdERUZBVUxUJywgJ3J5VGFzay5yeVBhcmFtcyhcJ3J5XCcpJywgJzAvMTUgKiAqICogKiA/JywgJzMnLCAnMScsICcxJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19qb2JgIFZBTFVFUyAoMywgJ+ezu+e7n+m7mOiupO+8iOWkmuWPgu+8iScsICdERUZBVUxUJywgJ3J5VGFzay5yeU11bHRpcGxlUGFyYW1zKFwncnlcJywgdHJ1ZSwgMjAwMEwsIDMxNi41MEQsIDEwMCknLCAnMC8yMCAqICogKiAqID8nLCAnMycsICcxJywgJzEnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3Igc3lzX2pvYl9sb2cKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGBzeXNfam9iX2xvZ2A7CitDUkVBVEUgVEFCTEUgYHN5c19qb2JfbG9nYCAgKAorICBgam9iX2xvZ19pZGAgYmlnaW50IE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5UIENPTU1FTlQgJ+S7u+WKoeaXpeW/l0lEJywKKyAgYGpvYl9uYW1lYCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn5Lu75Yqh5ZCN56ewJywKKyAgYGpvYl9ncm91cGAgdmFyY2hhcig2NCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+S7u+WKoee7hOWQjScsCisgIGBpbnZva2VfdGFyZ2V0YCB2YXJjaGFyKDUwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+iwg+eUqOebruagh+Wtl+espuS4sicsCisgIGBqb2JfbWVzc2FnZWAgdmFyY2hhcig1MDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfml6Xlv5fkv6Hmga8nLAorICBgc3RhdHVzYCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJzAnIENPTU1FTlQgJ+aJp+ihjOeKtuaAge+8iDDmraPluLggMeWksei0pe+8iScsCisgIGBleGNlcHRpb25faW5mb2AgdmFyY2hhcigyMDAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+W8guW4uOS/oeaBrycsCisgIGBjcmVhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5Yib5bu65pe26Ze0JywKKyAgUFJJTUFSWSBLRVkgKGBqb2JfbG9nX2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIEFVVE9fSU5DUkVNRU5UID0gMSBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn5a6a5pe25Lu75Yqh6LCD5bqm5pel5b+X6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBzeXNfam9iX2xvZworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIHN5c19sb2dpbmluZm9yCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgc3lzX2xvZ2luaW5mb3JgOworQ1JFQVRFIFRBQkxFIGBzeXNfbG9naW5pbmZvcmAgICgKKyAgYGluZm9faWRgIGJpZ2ludCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCBDT01NRU5UICforr/pl65JRCcsCisgIGB1c2VyX25hbWVgIHZhcmNoYXIoNTApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn55So5oi36LSm5Y+3JywKKyAgYGlwYWRkcmAgdmFyY2hhcigxMjgpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn55m75b2VSVDlnLDlnYAnLAorICBgbG9naW5fbG9jYXRpb25gIHZhcmNoYXIoMjU1KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+eZu+W9leWcsOeCuScsCisgIGBicm93c2VyYCB2YXJjaGFyKDUwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+a1j+iniOWZqOexu+WeiycsCisgIGBvc2AgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfmk43kvZzns7vnu58nLAorICBgc3RhdHVzYCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJzAnIENPTU1FTlQgJ+eZu+W9leeKtuaAge+8iDDmiJDlip8gMeWksei0pe+8iScsCisgIGBtc2dgIHZhcmNoYXIoMjU1KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+aPkOekuua2iOaBrycsCisgIGBsb2dpbl90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICforr/pl67ml7bpl7QnLAorICBQUklNQVJZIEtFWSAoYGluZm9faWRgKSBVU0lORyBCVFJFRSwKKyAgSU5ERVggYGlkeF9zeXNfbG9naW5pbmZvcl9zYChgc3RhdHVzYCBBU0MpIFVTSU5HIEJUUkVFLAorICBJTkRFWCBgaWR4X3N5c19sb2dpbmluZm9yX2x0YChgbG9naW5fdGltZWAgQVNDKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQVVUT19JTkNSRU1FTlQgPSAxMDcgQ0hBUkFDVEVSIFNFVCA9IHV0ZjhtYjQgQ09MTEFURSA9IHV0ZjhtYjRfMDkwMF9haV9jaSBDT01NRU5UID0gJ+ezu+e7n+iuv+mXruiusOW9lScgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2Ygc3lzX2xvZ2luaW5mb3IKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOU0VSVCBJTlRPIGBzeXNfbG9naW5pbmZvcmAgVkFMVUVTICgxMDAsICdhZG1pbicsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnQ2hyb21lIDEzJywgJ1dpbmRvd3MgMTAnLCAnMCcsICfnmbvlvZXmiJDlip8nLCAnMjAyNS0wNC0yMCAxNzoxODo0NicpOworSU5TRVJUIElOVE8gYHN5c19sb2dpbmluZm9yYCBWQUxVRVMgKDEwMSwgJ2FkbWluJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICdDaHJvbWUgMTMnLCAnV2luZG93cyAxMCcsICcwJywgJ+eZu+W9leaIkOWKnycsICcyMDI1LTA0LTIwIDIxOjE2OjU3Jyk7CitJTlNFUlQgSU5UTyBgc3lzX2xvZ2luaW5mb3JgIFZBTFVFUyAoMTAyLCAnYWRtaW4nLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ0Nocm9tZSAxMycsICdXaW5kb3dzIDEwJywgJzAnLCAn55m75b2V5oiQ5YqfJywgJzIwMjUtMDQtMjEgMDg6MjU6MjMnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbG9naW5pbmZvcmAgVkFMVUVTICgxMDMsICdhZG1pbicsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnQ2hyb21lIDEzJywgJ1dpbmRvd3MgMTAnLCAnMCcsICfnmbvlvZXmiJDlip8nLCAnMjAyNS0wNC0yMSAxMzo0MzozOScpOworSU5TRVJUIElOVE8gYHN5c19sb2dpbmluZm9yYCBWQUxVRVMgKDEwNCwgJ2FkbWluJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICdDaHJvbWUgMTMnLCAnV2luZG93cyAxMCcsICcwJywgJ+eZu+W9leaIkOWKnycsICcyMDI1LTA0LTIxIDE2OjMyOjM1Jyk7CitJTlNFUlQgSU5UTyBgc3lzX2xvZ2luaW5mb3JgIFZBTFVFUyAoMTA1LCAnYWRtaW4nLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ0Nocm9tZSAxMycsICdXaW5kb3dzIDEwJywgJzAnLCAn55m75b2V5oiQ5YqfJywgJzIwMjUtMDQtMjEgMTc6MjM6MzQnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbG9naW5pbmZvcmAgVkFMVUVTICgxMDYsICdhZG1pbicsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnQ2hyb21lIDEzJywgJ1dpbmRvd3MgMTAnLCAnMCcsICfnmbvlvZXmiJDlip8nLCAnMjAyNS0wNC0yMSAxOTozODoyMCcpOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIHN5c19tZW51CistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgc3lzX21lbnVgOworQ1JFQVRFIFRBQkxFIGBzeXNfbWVudWAgICgKKyAgYG1lbnVfaWRgIGJpZ2ludCBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCBDT01NRU5UICfoj5zljZVJRCcsCisgIGBtZW51X25hbWVgIHZhcmNoYXIoNTApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfoj5zljZXlkI3np7AnLAorICBgcGFyZW50X2lkYCBiaWdpbnQgTlVMTCBERUZBVUxUIDAgQ09NTUVOVCAn54i26I+c5Y2VSUQnLAorICBgb3JkZXJfbnVtYCBpbnQgTlVMTCBERUZBVUxUIDAgQ09NTUVOVCAn5pi+56S66aG65bqPJywKKyAgYHBhdGhgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+i3r+eUseWcsOWdgCcsCisgIGBjb21wb25lbnRgIHZhcmNoYXIoMjU1KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn57uE5Lu26Lev5b6EJywKKyAgYHF1ZXJ5YCB2YXJjaGFyKDI1NSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+i3r+eUseWPguaVsCcsCisgIGByb3V0ZV9uYW1lYCB2YXJjaGFyKDUwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+i3r+eUseWQjeensCcsCisgIGBpc19mcmFtZWAgaW50IE5VTEwgREVGQVVMVCAxIENPTU1FTlQgJ+aYr+WQpuS4uuWklumTvu+8iDDmmK8gMeWQpu+8iScsCisgIGBpc19jYWNoZWAgaW50IE5VTEwgREVGQVVMVCAwIENPTU1FTlQgJ+aYr+WQpue8k+WtmO+8iDDnvJPlrZggMeS4jee8k+WtmO+8iScsCisgIGBtZW51X3R5cGVgIGNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfoj5zljZXnsbvlnovvvIhN55uu5b2VIEPoj5zljZUgRuaMiemSru+8iScsCisgIGB2aXNpYmxlYCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJzAnIENPTU1FTlQgJ+iPnOWNleeKtuaAge+8iDDmmL7npLogMemakOiXj++8iScsCisgIGBzdGF0dXNgIGNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnMCcgQ09NTUVOVCAn6I+c5Y2V54q25oCB77yIMOato+W4uCAx5YGc55So77yJJywKKyAgYHBlcm1zYCB2YXJjaGFyKDEwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+adg+mZkOagh+ivhicsCisgIGBpY29uYCB2YXJjaGFyKDEwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnIycgQ09NTUVOVCAn6I+c5Y2V5Zu+5qCHJywKKyAgYGNyZWF0ZV9ieWAgdmFyY2hhcig2NCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfliJvlu7rogIUnLAorICBgY3JlYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+WIm+W7uuaXtumXtCcsCisgIGB1cGRhdGVfYnlgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5pu05paw6ICFJywKKyAgYHVwZGF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmm7TmlrDml7bpl7QnLAorICBgcmVtYXJrYCB2YXJjaGFyKDUwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICflpIfms6gnLAorICBQUklNQVJZIEtFWSAoYG1lbnVfaWRgKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQVVUT19JTkNSRU1FTlQgPSAyMDAwIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfoj5zljZXmnYPpmZDooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIHN5c19tZW51CistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMSwgJ+ezu+e7n+euoeeQhicsIDAsIDEsICdzeXN0ZW0nLCBOVUxMLCAnJywgJycsIDEsIDAsICdNJywgJzAnLCAnMCcsICcnLCAnU2V0dGluZ091dGxpbmVkJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+ezu+e7n+euoeeQhuebruW9lScpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDIsICfns7vnu5/nm5HmjqcnLCAwLCAyLCAnbW9uaXRvcicsIE5VTEwsICcnLCAnJywgMSwgMCwgJ00nLCAnMCcsICcwJywgJycsICdEYXNoYm9hcmRPdXRsaW5lZCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfns7vnu5/nm5Hmjqfnm67lvZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgzLCAn57O757uf5bel5YW3JywgMCwgMywgJ3Rvb2wnLCBOVUxMLCAnJywgJycsIDEsIDAsICdNJywgJzAnLCAnMCcsICcnLCAnVG9vbE91dGxpbmVkJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+ezu+e7n+W3peWFt+ebruW9lScpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDUsICfmjqfliLblj7AnLCAwLCAwLCAnZGFzaGJvYXJkJywgTlVMTCwgJycsICcnLCAxLCAwLCAnTScsICcxJywgJzAnLCAnJywgJ0FwcHN0b3JlT3V0bGluZWQnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5o6n5Yi25Y+wJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoNiwgJ+S4quS6uicsIDAsIDAsICdhY2NvdW50JywgTlVMTCwgJycsICcnLCAxLCAwLCAnTScsICcxJywgJzAnLCAnJywgJ1Byb2ZpbGVPdXRsaW5lZCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfkuKrkuronKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICg3LCAnVHJhY2tlcumhueebricsIDAsIDQsICd0cmFja2VyJywgJ3RyYWNrZXIvcHJvamVjdHMvaW5kZXgnLCBOVUxMLCAnJywgMSwgMCwgJ00nLCAnMCcsICcwJywgTlVMTCwgJ1Byb2plY3RPdXRsaW5lZCcsICdhZG1pbicsICcyMDI1LTA0LTIxIDA5OjQzOjExJywgJycsIE5VTEwsICfkuIrkvKDotYTmupAnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICg4LCAnVG9ycmVudOenjeWtkCcsIDAsIDUsICd0b3JyZW50JywgJ3RvcnJlbnQvaW5kZXgnLCBOVUxMLCAnJywgMSwgMCwgJ00nLCAnMCcsICcwJywgTlVMTCwgJ0Nsb3VkU3luY091dGxpbmVkJywgJ2FkbWluJywgJzIwMjUtMDQtMjEgMTA6MTQ6MDInLCAnJywgTlVMTCwgJ1RvcnJlbnTnp43lrZAnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDAsICfnlKjmiLfnrqHnkIYnLCAxLCAxLCAndXNlcicsICdzeXN0ZW0vdXNlci9pbmRleCcsICcnLCAnJywgMSwgMSwgJ0MnLCAnMCcsICcwJywgJ3N5c3RlbTp1c2VyOmxpc3QnLCAndXNlcicsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfnlKjmiLfnrqHnkIboj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDEsICfop5LoibLnrqHnkIYnLCAxLCAyLCAncm9sZScsICdzeXN0ZW0vcm9sZS9pbmRleCcsICcnLCAnJywgMSwgMCwgJ0MnLCAnMCcsICcwJywgJ3N5c3RlbTpyb2xlOmxpc3QnLCAncGVvcGxlcycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfop5LoibLnrqHnkIboj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDIsICfoj5zljZXnrqHnkIYnLCAxLCAzLCAnbWVudScsICdzeXN0ZW0vbWVudS9pbmRleCcsICcnLCAnJywgMSwgMCwgJ0MnLCAnMCcsICcwJywgJ3N5c3RlbTptZW51Omxpc3QnLCAndHJlZS10YWJsZScsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfoj5zljZXnrqHnkIboj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDMsICfpg6jpl6jnrqHnkIYnLCAxLCA0LCAnZGVwdCcsICdzeXN0ZW0vZGVwdC9pbmRleCcsICcnLCAnJywgMSwgMCwgJ0MnLCAnMCcsICcwJywgJ3N5c3RlbTpkZXB0Omxpc3QnLCAndHJlZScsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfpg6jpl6jnrqHnkIboj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDQsICflspfkvY3nrqHnkIYnLCAxLCA1LCAncG9zdCcsICdzeXN0ZW0vcG9zdC9pbmRleCcsICcnLCAnJywgMSwgMCwgJ0MnLCAnMCcsICcwJywgJ3N5c3RlbTpwb3N0Omxpc3QnLCAncG9zdCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICflspfkvY3nrqHnkIboj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDUsICflrZflhbjnrqHnkIYnLCAxLCA2LCAnZGljdCcsICdzeXN0ZW0vZGljdC9pbmRleCcsICcnLCAnJywgMSwgMCwgJ0MnLCAnMCcsICcwJywgJ3N5c3RlbTpkaWN0Omxpc3QnLCAnZGljdCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICflrZflhbjnrqHnkIboj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDYsICflj4LmlbDorr7nva4nLCAxLCA3LCAnY29uZmlnJywgJ3N5c3RlbS9jb25maWcvaW5kZXgnLCAnJywgJycsIDEsIDAsICdDJywgJzAnLCAnMCcsICdzeXN0ZW06Y29uZmlnOmxpc3QnLCAnZWRpdCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICflj4LmlbDorr7nva7oj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDcsICfpgJrnn6XlhazlkYonLCAxLCA4LCAnbm90aWNlJywgJ3N5c3RlbS9ub3RpY2UvaW5kZXgnLCAnJywgJycsIDEsIDAsICdDJywgJzAnLCAnMCcsICdzeXN0ZW06bm90aWNlOmxpc3QnLCAnbWVzc2FnZScsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfpgJrnn6XlhazlkYroj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDgsICfml6Xlv5fnrqHnkIYnLCAxLCA5LCAnbG9nJywgJycsICcnLCAnJywgMSwgMCwgJ00nLCAnMCcsICcwJywgJycsICdsb2cnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5pel5b+X566h55CG6I+c5Y2VJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTA5LCAn5Zyo57q/55So5oi3JywgMiwgMSwgJ29ubGluZScsICdtb25pdG9yL29ubGluZS9pbmRleCcsICcnLCAnJywgMSwgMCwgJ0MnLCAnMCcsICcwJywgJ21vbml0b3I6b25saW5lOmxpc3QnLCAnb25saW5lJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+WcqOe6v+eUqOaIt+iPnOWNlScpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDExMCwgJ+WumuaXtuS7u+WKoScsIDIsIDIsICdqb2InLCAnbW9uaXRvci9qb2IvaW5kZXgnLCAnJywgJycsIDEsIDAsICdDJywgJzAnLCAnMCcsICdtb25pdG9yOmpvYjpsaXN0JywgJ2pvYicsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICflrprml7bku7vliqHoj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMTEsICfmlbDmja7nm5HmjqcnLCAyLCAzLCAnZHJ1aWQnLCAnbW9uaXRvci9kcnVpZC9pbmRleCcsICcnLCAnJywgMSwgMCwgJ0MnLCAnMCcsICcwJywgJ21vbml0b3I6ZHJ1aWQ6bGlzdCcsICdkcnVpZCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfmlbDmja7nm5Hmjqfoj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMTIsICfmnI3liqHnm5HmjqcnLCAyLCA0LCAnc2VydmVyJywgJ21vbml0b3Ivc2VydmVyL2luZGV4JywgJycsICcnLCAxLCAwLCAnQycsICcwJywgJzAnLCAnbW9uaXRvcjpzZXJ2ZXI6bGlzdCcsICdzZXJ2ZXInLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn5pyN5Yqh55uR5o6n6I+c5Y2VJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTEzLCAn57yT5a2Y55uR5o6nJywgMiwgNSwgJ2NhY2hlJywgJ21vbml0b3IvY2FjaGUvaW5kZXgnLCAnJywgJycsIDEsIDAsICdDJywgJzAnLCAnMCcsICdtb25pdG9yOmNhY2hlOmxpc3QnLCAncmVkaXMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn57yT5a2Y55uR5o6n6I+c5Y2VJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTE0LCAn57yT5a2Y5YiX6KGoJywgMiwgNiwgJ2NhY2hlTGlzdCcsICdtb25pdG9yL2NhY2hlL2xpc3QnLCAnJywgJycsIDEsIDAsICdDJywgJzAnLCAnMCcsICdtb25pdG9yOmNhY2hlOmxpc3QnLCAncmVkaXMtbGlzdCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfnvJPlrZjliJfooajoj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMTYsICfku6PnoIHnlJ/miJAnLCAzLCAyLCAnZ2VuJywgJ3Rvb2wvZ2VuL2luZGV4JywgJycsICcnLCAxLCAwLCAnQycsICcwJywgJzAnLCAndG9vbDpnZW46bGlzdCcsICdjb2RlJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+S7o+eggeeUn+aIkOiPnOWNlScpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDExNywgJ+ezu+e7n+aOpeWPoycsIDMsIDMsICdzd2FnZ2VyJywgJ3Rvb2wvc3dhZ2dlci9pbmRleCcsICcnLCAnJywgMSwgMCwgJ0MnLCAnMCcsICcwJywgJ3Rvb2w6c3dhZ2dlcjpsaXN0JywgJ3N3YWdnZXInLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn57O757uf5o6l5Y+j6I+c5Y2VJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoNTAwLCAn5pON5L2c5pel5b+XJywgMTA4LCAxLCAnb3BlcmxvZycsICdtb25pdG9yL29wZXJsb2cvaW5kZXgnLCAnJywgJycsIDEsIDAsICdDJywgJzAnLCAnMCcsICdtb25pdG9yOm9wZXJsb2c6bGlzdCcsICdmb3JtJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+aTjeS9nOaXpeW/l+iPnOWNlScpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDUwMSwgJ+eZu+W9leaXpeW/lycsIDEwOCwgMiwgJ2xvZ2luaW5mb3InLCAnbW9uaXRvci9sb2dpbmluZm9yL2luZGV4JywgJycsICcnLCAxLCAwLCAnQycsICcwJywgJzAnLCAnbW9uaXRvcjpsb2dpbmluZm9yOmxpc3QnLCAnbG9naW5pbmZvcicsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfnmbvlvZXml6Xlv5foj5zljZUnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDAwLCAn55So5oi35p+l6K+iJywgMTAwLCAxLCAnJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTp1c2VyOnF1ZXJ5JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAwMSwgJ+eUqOaIt+aWsOWinicsIDEwMCwgMiwgJycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06dXNlcjphZGQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDAyLCAn55So5oi35L+u5pS5JywgMTAwLCAzLCAnJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTp1c2VyOmVkaXQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDAzLCAn55So5oi35Yig6ZmkJywgMTAwLCA0LCAnJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTp1c2VyOnJlbW92ZScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMDQsICfnlKjmiLflr7zlh7onLCAxMDAsIDUsICcnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOnVzZXI6ZXhwb3J0JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAwNSwgJ+eUqOaIt+WvvOWFpScsIDEwMCwgNiwgJycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06dXNlcjppbXBvcnQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDA2LCAn6YeN572u5a+G56CBJywgMTAwLCA3LCAnJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTp1c2VyOnJlc2V0UHdkJywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAwNywgJ+inkuiJsuafpeivoicsIDEwMSwgMSwgJycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06cm9sZTpxdWVyeScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMDgsICfop5LoibLmlrDlop4nLCAxMDEsIDIsICcnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOnJvbGU6YWRkJywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAwOSwgJ+inkuiJsuS/ruaUuScsIDEwMSwgMywgJycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06cm9sZTplZGl0JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAxMCwgJ+inkuiJsuWIoOmZpCcsIDEwMSwgNCwgJycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06cm9sZTpyZW1vdmUnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDExLCAn6KeS6Imy5a+85Ye6JywgMTAxLCA1LCAnJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTpyb2xlOmV4cG9ydCcsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMTIsICfoj5zljZXmn6Xor6InLCAxMDIsIDEsICcnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOm1lbnU6cXVlcnknLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDEzLCAn6I+c5Y2V5paw5aKeJywgMTAyLCAyLCAnJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTptZW51OmFkZCcsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMTQsICfoj5zljZXkv67mlLknLCAxMDIsIDMsICcnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOm1lbnU6ZWRpdCcsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMTUsICfoj5zljZXliKDpmaQnLCAxMDIsIDQsICcnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOm1lbnU6cmVtb3ZlJywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAxNiwgJ+mDqOmXqOafpeivoicsIDEwMywgMSwgJycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06ZGVwdDpxdWVyeScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMTcsICfpg6jpl6jmlrDlop4nLCAxMDMsIDIsICcnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOmRlcHQ6YWRkJywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAxOCwgJ+mDqOmXqOS/ruaUuScsIDEwMywgMywgJycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06ZGVwdDplZGl0JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAxOSwgJ+mDqOmXqOWIoOmZpCcsIDEwMywgNCwgJycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06ZGVwdDpyZW1vdmUnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDIwLCAn5bKX5L2N5p+l6K+iJywgMTA0LCAxLCAnJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTpwb3N0OnF1ZXJ5JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAyMSwgJ+Wyl+S9jeaWsOWinicsIDEwNCwgMiwgJycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06cG9zdDphZGQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDIyLCAn5bKX5L2N5L+u5pS5JywgMTA0LCAzLCAnJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTpwb3N0OmVkaXQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDIzLCAn5bKX5L2N5Yig6ZmkJywgMTA0LCA0LCAnJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTpwb3N0OnJlbW92ZScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMjQsICflspfkvY3lr7zlh7onLCAxMDQsIDUsICcnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOnBvc3Q6ZXhwb3J0JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAyNSwgJ+Wtl+WFuOafpeivoicsIDEwNSwgMSwgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOmRpY3Q6cXVlcnknLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDI2LCAn5a2X5YW45paw5aKeJywgMTA1LCAyLCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06ZGljdDphZGQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDI3LCAn5a2X5YW45L+u5pS5JywgMTA1LCAzLCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06ZGljdDplZGl0JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAyOCwgJ+Wtl+WFuOWIoOmZpCcsIDEwNSwgNCwgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOmRpY3Q6cmVtb3ZlJywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAyOSwgJ+Wtl+WFuOWvvOWHuicsIDEwNSwgNSwgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOmRpY3Q6ZXhwb3J0JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAzMCwgJ+WPguaVsOafpeivoicsIDEwNiwgMSwgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOmNvbmZpZzpxdWVyeScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMzEsICflj4LmlbDmlrDlop4nLCAxMDYsIDIsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTpjb25maWc6YWRkJywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAzMiwgJ+WPguaVsOS/ruaUuScsIDEwNiwgMywgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOmNvbmZpZzplZGl0JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAzMywgJ+WPguaVsOWIoOmZpCcsIDEwNiwgNCwgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnc3lzdGVtOmNvbmZpZzpyZW1vdmUnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDM0LCAn5Y+C5pWw5a+85Ye6JywgMTA2LCA1LCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06Y29uZmlnOmV4cG9ydCcsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMzUsICflhazlkYrmn6Xor6InLCAxMDcsIDEsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTpub3RpY2U6cXVlcnknLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDM2LCAn5YWs5ZGK5paw5aKeJywgMTA3LCAyLCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdzeXN0ZW06bm90aWNlOmFkZCcsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMzcsICflhazlkYrkv67mlLknLCAxMDcsIDMsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTpub3RpY2U6ZWRpdCcsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwMzgsICflhazlkYrliKDpmaQnLCAxMDcsIDQsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3N5c3RlbTpub3RpY2U6cmVtb3ZlJywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTAzOSwgJ+aTjeS9nOafpeivoicsIDUwMCwgMSwgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnbW9uaXRvcjpvcGVybG9nOnF1ZXJ5JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTA0MCwgJ+aTjeS9nOWIoOmZpCcsIDUwMCwgMiwgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnbW9uaXRvcjpvcGVybG9nOnJlbW92ZScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwNDEsICfml6Xlv5flr7zlh7onLCA1MDAsIDMsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ21vbml0b3I6b3BlcmxvZzpleHBvcnQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDQyLCAn55m75b2V5p+l6K+iJywgNTAxLCAxLCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdtb25pdG9yOmxvZ2luaW5mb3I6cXVlcnknLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDQzLCAn55m75b2V5Yig6ZmkJywgNTAxLCAyLCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdtb25pdG9yOmxvZ2luaW5mb3I6cmVtb3ZlJywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTA0NCwgJ+aXpeW/l+WvvOWHuicsIDUwMSwgMywgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnbW9uaXRvcjpsb2dpbmluZm9yOmV4cG9ydCcsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwNDUsICfotKbmiLfop6PplIEnLCA1MDEsIDQsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ21vbml0b3I6bG9naW5pbmZvcjp1bmxvY2snLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDQ2LCAn5Zyo57q/5p+l6K+iJywgMTA5LCAxLCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdtb25pdG9yOm9ubGluZTpxdWVyeScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwNDcsICfmibnph4/lvLrpgIAnLCAxMDksIDIsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ21vbml0b3I6b25saW5lOmJhdGNoTG9nb3V0JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTA0OCwgJ+WNleadoeW8uumAgCcsIDEwOSwgMywgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAnbW9uaXRvcjpvbmxpbmU6Zm9yY2VMb2dvdXQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDQ5LCAn5Lu75Yqh5p+l6K+iJywgMTEwLCAxLCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdtb25pdG9yOmpvYjpxdWVyeScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwNTAsICfku7vliqHmlrDlop4nLCAxMTAsIDIsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ21vbml0b3I6am9iOmFkZCcsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwNTEsICfku7vliqHkv67mlLknLCAxMTAsIDMsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ21vbml0b3I6am9iOmVkaXQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDUyLCAn5Lu75Yqh5Yig6ZmkJywgMTEwLCA0LCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdtb25pdG9yOmpvYjpyZW1vdmUnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDUzLCAn54q25oCB5L+u5pS5JywgMTEwLCA1LCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdtb25pdG9yOmpvYjpjaGFuZ2VTdGF0dXMnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDU0LCAn5Lu75Yqh5a+85Ye6JywgMTEwLCA2LCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICdtb25pdG9yOmpvYjpleHBvcnQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDU1LCAn55Sf5oiQ5p+l6K+iJywgMTE2LCAxLCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICd0b29sOmdlbjpxdWVyeScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19tZW51YCBWQUxVRVMgKDEwNTYsICfnlJ/miJDkv67mlLknLCAxMTYsIDIsICcjJywgJycsICcnLCAnJywgMSwgMCwgJ0YnLCAnMCcsICcwJywgJ3Rvb2w6Z2VuOmVkaXQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDU3LCAn55Sf5oiQ5Yig6ZmkJywgMTE2LCAzLCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICd0b29sOmdlbjpyZW1vdmUnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDU4LCAn5a+85YWl5Luj56CBJywgMTE2LCA0LCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICd0b29sOmdlbjppbXBvcnQnLCAnIycsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfbWVudWAgVkFMVUVTICgxMDU5LCAn6aKE6KeI5Luj56CBJywgMTE2LCA1LCAnIycsICcnLCAnJywgJycsIDEsIDAsICdGJywgJzAnLCAnMCcsICd0b29sOmdlbjpwcmV2aWV3JywgJyMnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX21lbnVgIFZBTFVFUyAoMTA2MCwgJ+eUn+aIkOS7o+eggScsIDExNiwgNiwgJyMnLCAnJywgJycsICcnLCAxLCAwLCAnRicsICcwJywgJzAnLCAndG9vbDpnZW46Y29kZScsICcjJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIHN5c19ub3RpY2UKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGBzeXNfbm90aWNlYDsKK0NSRUFURSBUQUJMRSBgc3lzX25vdGljZWAgICgKKyAgYG5vdGljZV9pZGAgaW50IE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5UIENPTU1FTlQgJ+WFrOWRiklEJywKKyAgYG5vdGljZV90aXRsZWAgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+WFrOWRiuagh+mimCcsCisgIGBub3RpY2VfdHlwZWAgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn5YWs5ZGK57G75Z6L77yIMemAmuefpSAy5YWs5ZGK77yJJywKKyAgYG5vdGljZV9jb250ZW50YCBsb25nYmxvYiBOVUxMIENPTU1FTlQgJ+WFrOWRiuWGheWuuScsCisgIGBzdGF0dXNgIGNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnMCcgQ09NTUVOVCAn5YWs5ZGK54q25oCB77yIMOato+W4uCAx5YWz6Zet77yJJywKKyAgYGNyZWF0ZV9ieWAgdmFyY2hhcig2NCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfliJvlu7rogIUnLAorICBgY3JlYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+WIm+W7uuaXtumXtCcsCisgIGB1cGRhdGVfYnlgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5pu05paw6ICFJywKKyAgYHVwZGF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmm7TmlrDml7bpl7QnLAorICBgcmVtYXJrYCB2YXJjaGFyKDI1NSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+Wkh+azqCcsCisgIFBSSU1BUlkgS0VZIChgbm90aWNlX2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIEFVVE9fSU5DUkVNRU5UID0gMTAgQ0hBUkFDVEVSIFNFVCA9IHV0ZjhtYjQgQ09MTEFURSA9IHV0ZjhtYjRfMDkwMF9haV9jaSBDT01NRU5UID0gJ+mAmuefpeWFrOWRiuihqCcgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2Ygc3lzX25vdGljZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TRVJUIElOVE8gYHN5c19ub3RpY2VgIFZBTFVFUyAoMSwgJ+a4qemmqOaPkOmGku+8mjIwMTgtMDctMDEg6Iul5L6d5paw54mI5pys5Y+R5biD5ZWmJywgJzInLCAweEU2OTZCMEU3ODk4OEU2OUNBQ0U1ODY4NUU1QUVCOSwgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAn566h55CG5ZGYJyk7CitJTlNFUlQgSU5UTyBgc3lzX25vdGljZWAgVkFMVUVTICgyLCAn57u05oqk6YCa55+l77yaMjAxOC0wNy0wMSDoi6Xkvp3ns7vnu5/lh4zmmajnu7TmiqQnLCAnMScsIDB4RTdCQkI0RTY4QUE0RTU4Njg1RTVBRUI5LCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfnrqHnkIblkZgnKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBzeXNfb3Blcl9sb2cKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGBzeXNfb3Blcl9sb2dgOworQ1JFQVRFIFRBQkxFIGBzeXNfb3Blcl9sb2dgICAoCisgIGBvcGVyX2lkYCBiaWdpbnQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQgQ09NTUVOVCAn5pel5b+X5Li76ZSuJywKKyAgYHRpdGxlYCB2YXJjaGFyKDUwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+aooeWdl+agh+mimCcsCisgIGBidXNpbmVzc190eXBlYCBpbnQgTlVMTCBERUZBVUxUIDAgQ09NTUVOVCAn5Lia5Yqh57G75Z6L77yIMOWFtuWugyAx5paw5aKeIDLkv67mlLkgM+WIoOmZpO+8iScsCisgIGBtZXRob2RgIHZhcmNoYXIoMjAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+aWueazleWQjeensCcsCisgIGByZXF1ZXN0X21ldGhvZGAgdmFyY2hhcigxMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfor7fmsYLmlrnlvI8nLAorICBgb3BlcmF0b3JfdHlwZWAgaW50IE5VTEwgREVGQVVMVCAwIENPTU1FTlQgJ+aTjeS9nOexu+WIq++8iDDlhbblroMgMeWQjuWPsOeUqOaItyAy5omL5py656uv55So5oi377yJJywKKyAgYG9wZXJfbmFtZWAgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfmk43kvZzkurrlkZgnLAorICBgZGVwdF9uYW1lYCB2YXJjaGFyKDUwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+mDqOmXqOWQjeensCcsCisgIGBvcGVyX3VybGAgdmFyY2hhcigyNTUpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn6K+35rGCVVJMJywKKyAgYG9wZXJfaXBgIHZhcmNoYXIoMTI4KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+S4u+acuuWcsOWdgCcsCisgIGBvcGVyX2xvY2F0aW9uYCB2YXJjaGFyKDI1NSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfmk43kvZzlnLDngrknLAorICBgb3Blcl9wYXJhbWAgdmFyY2hhcigyMDAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+ivt+axguWPguaVsCcsCisgIGBqc29uX3Jlc3VsdGAgdmFyY2hhcigyMDAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+i/lOWbnuWPguaVsCcsCisgIGBzdGF0dXNgIGludCBOVUxMIERFRkFVTFQgMCBDT01NRU5UICfmk43kvZznirbmgIHvvIgw5q2j5bi4IDHlvILluLjvvIknLAorICBgZXJyb3JfbXNnYCB2YXJjaGFyKDIwMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn6ZSZ6K+v5raI5oGvJywKKyAgYG9wZXJfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5pON5L2c5pe26Ze0JywKKyAgYGNvc3RfdGltZWAgYmlnaW50IE5VTEwgREVGQVVMVCAwIENPTU1FTlQgJ+a2iOiAl+aXtumXtCcsCisgIFBSSU1BUlkgS0VZIChgb3Blcl9pZGApIFVTSU5HIEJUUkVFLAorICBJTkRFWCBgaWR4X3N5c19vcGVyX2xvZ19idGAoYGJ1c2luZXNzX3R5cGVgIEFTQykgVVNJTkcgQlRSRUUsCisgIElOREVYIGBpZHhfc3lzX29wZXJfbG9nX3NgKGBzdGF0dXNgIEFTQykgVVNJTkcgQlRSRUUsCisgIElOREVYIGBpZHhfc3lzX29wZXJfbG9nX290YChgb3Blcl90aW1lYCBBU0MpIFVTSU5HIEJUUkVFCispIEVOR0lORSA9IElubm9EQiBBVVRPX0lOQ1JFTUVOVCA9IDIxMCBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn5pON5L2c5pel5b+X6K6w5b2VJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBzeXNfb3Blcl9sb2cKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTAwLCAn5Luj56CB55Sf5oiQJywgNiwgJ2NvbS5ydW95aS5nZW5lcmF0b3IuY29udHJvbGxlci5HZW5Db250cm9sbGVyLmltcG9ydFRhYmxlU2F2ZSgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9jb2RlL2dlbi9pbXBvcnRUYWJsZScsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne1widGFibGVzXCI6XCJ0cmFja2VyX3Rhc2tfbG9nLHRyYWNrZXJfcHJvamVjdF91c2VyLHRyYWNrZXJfdGFzayx0cmFja2VyX3Byb2plY3RcIn0nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjAgMjA6MzM6MjgnLCAzMzQwKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTAxLCAn5Luj56CB55Sf5oiQJywgOCwgJ2NvbS5ydW95aS5nZW5lcmF0b3IuY29udHJvbGxlci5HZW5Db250cm9sbGVyLmJhdGNoR2VuQ29kZSgpJywgJ0dFVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL2NvZGUvZ2VuL2JhdGNoR2VuQ29kZScsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne1widGFibGVzXCI6XCJ0cmFja2VyX3Byb2plY3QsdHJhY2tlcl9wcm9qZWN0X3VzZXIsdHJhY2tlcl90YXNrLHRyYWNrZXJfdGFza19sb2dcIn0nLCBOVUxMLCAwLCBOVUxMLCAnMjAyNS0wNC0yMCAyMDozMzozNScsIDUwNCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEwMiwgJ+S7o+eggeeUn+aIkCcsIDgsICdjb20ucnVveWkuZ2VuZXJhdG9yLmNvbnRyb2xsZXIuR2VuQ29udHJvbGxlci5iYXRjaEdlbkNvZGUoKScsICdHRVQnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9jb2RlL2dlbi9iYXRjaEdlbkNvZGUnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3tcInRhYmxlc1wiOlwidHJhY2tlcl9wcm9qZWN0XCJ9JywgTlVMTCwgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMDg6NDM6MzInLCAxNjUpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxMDMsICfku6PnoIHnlJ/miJAnLCA2LCAnY29tLnJ1b3lpLmdlbmVyYXRvci5jb250cm9sbGVyLkdlbkNvbnRyb2xsZXIuaW1wb3J0VGFibGVTYXZlKCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL2NvZGUvZ2VuL2ltcG9ydFRhYmxlJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7XCJ0YWJsZXNcIjpcImJ0X3RvcnJlbnRfdGFncyxidF90b3JyZW50X2Fubm91bmNlLGJ0X3RvcnJlbnRfZmlsZSxidF90b3JyZW50XCJ9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDEwOjAwOjI3JywgMTIzNyk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEwNCwgJ+S7o+eggeeUn+aIkCcsIDgsICdjb20ucnVveWkuZ2VuZXJhdG9yLmNvbnRyb2xsZXIuR2VuQ29udHJvbGxlci5iYXRjaEdlbkNvZGUoKScsICdHRVQnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9jb2RlL2dlbi9iYXRjaEdlbkNvZGUnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3tcInRhYmxlc1wiOlwiYnRfdG9ycmVudCxidF90b3JyZW50X2Fubm91bmNlLGJ0X3RvcnJlbnRfZmlsZSxidF90b3JyZW50X3RhZ3NcIn0nLCBOVUxMLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxMDowMDozOCcsIDI1Nyk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEwNSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBGbGFzayBzZXJ2ZXJcIixcImNvZGVcIjo1MDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTQ6MDY6NTInLCA1Myk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEwNiwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBGbGFzayBzZXJ2ZXJcIixcImNvZGVcIjo1MDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTQ6MTA6MzYnLCAxNSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEwNywgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBGbGFzayBzZXJ2ZXJcIixcImNvZGVcIjo1MDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTQ6MTI6NDAnLCAxMyk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEwOCwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBGbGFzayBzZXJ2ZXJcIixcImNvZGVcIjo1MDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTQ6MTI6NTAnLCAxNCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEwOSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBGbGFzayBzZXJ2ZXJcIixcImNvZGVcIjo1MDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTQ6MTY6MDEnLCAyNyk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDExMCwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBGbGFzayBzZXJ2ZXJcIixcImNvZGVcIjo1MDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTQ6MTc6MjEnLCAxNSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDExMSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBGbGFzayBzZXJ2ZXJcIixcImNvZGVcIjo1MDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTQ6MTc6NTgnLCAxNSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDExMiwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBGbGFzayBzZXJ2ZXJcIixcImNvZGVcIjo1MDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTQ6MjA6MTYnLCAyMyk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDExMywgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCBOVUxMLCAxLCAnXHJcbiMjIyBFcnJvciB1cGRhdGluZyBkYXRhYmFzZS4gIENhdXNlOiBqYXZhLnNxbC5TUUxFeGNlcHRpb246IEZpZWxkIFwnaW5mb19oYXNoXCcgZG9lc25cJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWVcclxuIyMjIFRoZSBlcnJvciBtYXkgZXhpc3QgaW4gZmlsZSBbRTpcXElkZWFQcm9qZWN0c1xccnVveWktcmVhY3QtbWFzdGVyXFxydW95aS1hZG1pblxcdGFyZ2V0XFxjbGFzc2VzXFxtYXBwZXJcXHN5c3RlbVxcQnRUb3JyZW50TWFwcGVyLnhtbF1cclxuIyMjIFRoZSBlcnJvciBtYXkgaW52b2x2ZSBjb20ucnVveWkudG9ycmVudC5tYXBwZXIuQnRUb3JyZW50TWFwcGVyLmluc2VydEJ0VG9ycmVudC1JbmxpbmVcclxuIyMjIFRoZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZXR0aW5nIHBhcmFtZXRlcnNcclxuIyMjIFNRTDogaW5zZXJ0IGludG8gYnRfdG9ycmVudCAgICAgICAgICAoIG5hbWUsICAgICAgICAgICAgIGxlbmd0aCwgICAgICAgICAgICAgcGllY2VfbGVuZ3RoLCAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZF9ieSApICAgICAgICAgICB2YWx1ZXMgKCA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICAgICAgICAgICAgICAgPyApXHJcbiMjIyBDYXVzZTogamF2YS5zcWwuU1FMRXhjZXB0aW9uOiBGaWVsZCBcJ2luZm9faGFzaFwnIGRvZXNuXCd0IGhhdmUgYSBkZWZhdWx0IHZhbHVlXG47IEZpZWxkIFwnaW5mb19oYXNoXCcgZG9lc25cJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUnLCAnMjAyNS0wNC0yMSAxNDoyMjoyMycsIDM1MCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDExNCwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCBOVUxMLCAxLCAnXHJcbiMjIyBFcnJvciB1cGRhdGluZyBkYXRhYmFzZS4gIENhdXNlOiBqYXZhLnNxbC5TUUxFeGNlcHRpb246IEZpZWxkIFwnaW5mb19oYXNoXCcgZG9lc25cJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWVcclxuIyMjIFRoZSBlcnJvciBtYXkgZXhpc3QgaW4gZmlsZSBbRTpcXElkZWFQcm9qZWN0c1xccnVveWktcmVhY3QtbWFzdGVyXFxydW95aS1hZG1pblxcdGFyZ2V0XFxjbGFzc2VzXFxtYXBwZXJcXHN5c3RlbVxcQnRUb3JyZW50TWFwcGVyLnhtbF1cclxuIyMjIFRoZSBlcnJvciBtYXkgaW52b2x2ZSBjb20ucnVveWkudG9ycmVudC5tYXBwZXIuQnRUb3JyZW50TWFwcGVyLmluc2VydEJ0VG9ycmVudC1JbmxpbmVcclxuIyMjIFRoZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZXR0aW5nIHBhcmFtZXRlcnNcclxuIyMjIFNRTDogaW5zZXJ0IGludG8gYnRfdG9ycmVudCAgICAgICAgICAoIG5hbWUsICAgICAgICAgICAgIGxlbmd0aCwgICAgICAgICAgICAgcGllY2VfbGVuZ3RoLCAgICAgICAgICAgICBwaWVjZXNfY291bnQsICAgICAgICAgICAgIGNyZWF0ZWRfYnkgKSAgICAgICAgICAgdmFsdWVzICggPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPyApXHJcbiMjIyBDYXVzZTogamF2YS5zcWwuU1FMRXhjZXB0aW9uOiBGaWVsZCBcJ2luZm9faGFzaFwnIGRvZXNuXCd0IGhhdmUgYSBkZWZhdWx0IHZhbHVlXG47IEZpZWxkIFwnaW5mb19oYXNoXCcgZG9lc25cJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUnLCAnMjAyNS0wNC0yMSAxNDoyMzoxNCcsIDQ4KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTE1LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsIE5VTEwsIDEsICdcclxuIyMjIEVycm9yIHVwZGF0aW5nIGRhdGFiYXNlLiAgQ2F1c2U6IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjogRmllbGQgXCdpbmZvX2hhc2hcJyBkb2VzblwndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVxyXG4jIyMgVGhlIGVycm9yIG1heSBleGlzdCBpbiBmaWxlIFtFOlxcSWRlYVByb2plY3RzXFxydW95aS1yZWFjdC1tYXN0ZXJcXHJ1b3lpLWFkbWluXFx0YXJnZXRcXGNsYXNzZXNcXG1hcHBlclxcc3lzdGVtXFxCdFRvcnJlbnRNYXBwZXIueG1sXVxyXG4jIyMgVGhlIGVycm9yIG1heSBpbnZvbHZlIGNvbS5ydW95aS50b3JyZW50Lm1hcHBlci5CdFRvcnJlbnRNYXBwZXIuaW5zZXJ0QnRUb3JyZW50LUlubGluZVxyXG4jIyMgVGhlIGVycm9yIG9jY3VycmVkIHdoaWxlIHNldHRpbmcgcGFyYW1ldGVyc1xyXG4jIyMgU1FMOiBpbnNlcnQgaW50byBidF90b3JyZW50ICAgICAgICAgICggbmFtZSwgICAgICAgICAgICAgbGVuZ3RoLCAgICAgICAgICAgICBwaWVjZV9sZW5ndGgsICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkX2J5ICkgICAgICAgICAgIHZhbHVlcyAoID8sICAgICAgICAgICAgID8sICAgICAgICAgICAgID8sICAgICAgICAgICAgICAgICAgICAgICAgICA/IClcclxuIyMjIENhdXNlOiBqYXZhLnNxbC5TUUxFeGNlcHRpb246IEZpZWxkIFwnaW5mb19oYXNoXCcgZG9lc25cJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWVcbjsgRmllbGQgXCdpbmZvX2hhc2hcJyBkb2VzblwndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZScsICcyMDI1LTA0LTIxIDE0OjIzOjU4JywgMzM0KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTE2LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsIE5VTEwsIDEsICdcclxuIyMjIEVycm9yIHVwZGF0aW5nIGRhdGFiYXNlLiAgQ2F1c2U6IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjogRmllbGQgXCdpbmZvX2hhc2hcJyBkb2VzblwndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVxyXG4jIyMgVGhlIGVycm9yIG1heSBleGlzdCBpbiBmaWxlIFtFOlxcSWRlYVByb2plY3RzXFxydW95aS1yZWFjdC1tYXN0ZXJcXHJ1b3lpLWFkbWluXFx0YXJnZXRcXGNsYXNzZXNcXG1hcHBlclxcc3lzdGVtXFxCdFRvcnJlbnRNYXBwZXIueG1sXVxyXG4jIyMgVGhlIGVycm9yIG1heSBpbnZvbHZlIGNvbS5ydW95aS50b3JyZW50Lm1hcHBlci5CdFRvcnJlbnRNYXBwZXIuaW5zZXJ0QnRUb3JyZW50LUlubGluZVxyXG4jIyMgVGhlIGVycm9yIG9jY3VycmVkIHdoaWxlIHNldHRpbmcgcGFyYW1ldGVyc1xyXG4jIyMgU1FMOiBpbnNlcnQgaW50byBidF90b3JyZW50ICAgICAgICAgICggbmFtZSwgICAgICAgICAgICAgbGVuZ3RoLCAgICAgICAgICAgICBwaWVjZV9sZW5ndGgsICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkX2J5ICkgICAgICAgICAgIHZhbHVlcyAoID8sICAgICAgICAgICAgID8sICAgICAgICAgICAgID8sICAgICAgICAgICAgICAgICAgICAgICAgICA/IClcclxuIyMjIENhdXNlOiBqYXZhLnNxbC5TUUxFeGNlcHRpb246IEZpZWxkIFwnaW5mb19oYXNoXCcgZG9lc25cJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWVcbjsgRmllbGQgXCdpbmZvX2hhc2hcJyBkb2VzblwndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZScsICcyMDI1LTA0LTIxIDE0OjI4OjIwJywgMzM1KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTE3LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsIE5VTEwsIDEsICdcclxuIyMjIEVycm9yIHVwZGF0aW5nIGRhdGFiYXNlLiAgQ2F1c2U6IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjogRmllbGQgXCd1cGxvYWRlcl9pZFwnIGRvZXNuXCd0IGhhdmUgYSBkZWZhdWx0IHZhbHVlXHJcbiMjIyBUaGUgZXJyb3IgbWF5IGV4aXN0IGluIGZpbGUgW0U6XFxJZGVhUHJvamVjdHNcXHJ1b3lpLXJlYWN0LW1hc3RlclxccnVveWktYWRtaW5cXHRhcmdldFxcY2xhc3Nlc1xcbWFwcGVyXFxzeXN0ZW1cXEJ0VG9ycmVudE1hcHBlci54bWxdXHJcbiMjIyBUaGUgZXJyb3IgbWF5IGludm9sdmUgY29tLnJ1b3lpLnRvcnJlbnQubWFwcGVyLkJ0VG9ycmVudE1hcHBlci5pbnNlcnRCdFRvcnJlbnQtSW5saW5lXHJcbiMjIyBUaGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2V0dGluZyBwYXJhbWV0ZXJzXHJcbiMjIyBTUUw6IGluc2VydCBpbnRvIGJ0X3RvcnJlbnQgICAgICAgICAgKCBpbmZvX2hhc2gsICAgICAgICAgICAgIG5hbWUsICAgICAgICAgICAgIGxlbmd0aCwgICAgICAgICAgICAgcGllY2VfbGVuZ3RoLCAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZF9ieSApICAgICAgICAgICB2YWx1ZXMgKCA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICAgICAgICAgICAgICAgPyApXHJcbiMjIyBDYXVzZTogamF2YS5zcWwuU1FMRXhjZXB0aW9uOiBGaWVsZCBcJ3VwbG9hZGVyX2lkXCcgZG9lc25cJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWVcbjsgRmllbGQgXCd1cGxvYWRlcl9pZFwnIGRvZXNuXCd0IGhhdmUgYSBkZWZhdWx0IHZhbHVlJywgJzIwMjUtMDQtMjEgMTQ6Mjk6MzUnLCAyOTIpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxMTgsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNDozNjozOCcsIDE4Nik7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDExOSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE0OjM3OjE2JywgNTYpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxMjAsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgTlVMTCwgMSwgJ1xyXG4jIyMgRXJyb3IgdXBkYXRpbmcgZGF0YWJhc2UuICBDYXVzZTogamF2YS5zcWwuU1FMU3ludGF4RXJyb3JFeGNlcHRpb246IFlvdSBoYXZlIGFuIGVycm9yIGluIHlvdXIgU1FMIHN5bnRheDsgY2hlY2sgdGhlIG1hbnVhbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHlvdXIgTXlTUUwgc2VydmVyIHZlcnNpb24gZm9yIHRoZSByaWdodCBzeW50YXggdG8gdXNlIG5lYXIgXCdcJyBhdCBsaW5lIDFcclxuIyMjIFRoZSBlcnJvciBtYXkgZXhpc3QgaW4gZmlsZSBbRTpcXElkZWFQcm9qZWN0c1xccnVveWktcmVhY3QtbWFzdGVyXFxydW95aS1hZG1pblxcdGFyZ2V0XFxjbGFzc2VzXFxtYXBwZXJcXHN5c3RlbVxcQnRUb3JyZW50TWFwcGVyLnhtbF1cclxuIyMjIFRoZSBlcnJvciBtYXkgaW52b2x2ZSBjb20ucnVveWkudG9ycmVudC5tYXBwZXIuQnRUb3JyZW50TWFwcGVyLmluc2VydEJ0VG9ycmVudC1JbmxpbmVcclxuIyMjIFRoZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZXR0aW5nIHBhcmFtZXRlcnNcclxuIyMjIFNRTDogaW5zZXJ0IGludG8gYnRfdG9ycmVudFxyXG4jIyMgQ2F1c2U6IGphdmEuc3FsLlNRTFN5bnRheEVycm9yRXhjZXB0aW9uOiBZb3UgaGF2ZSBhbiBlcnJvciBpbiB5b3VyIFNRTCBzeW50YXg7IGNoZWNrIHRoZSBtYW51YWwgdGhhdCBjb3JyZXNwb25kcyB0byB5b3VyIE15U1FMIHNlcnZlciB2ZXJzaW9uIGZvciB0aGUgcmlnaHQgc3ludGF4IHRvIHVzZSBuZWFyIFwnXCcgYXQgbGluZSAxXG47IGJhZCBTUUwgZ3JhbW1hciBbXScsICcyMDI1LTA0LTIxIDE0OjM3OjMxJywgMTkxKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTIxLCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTU6MDA6NDInLCAyNTcpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxMjIsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgTlVMTCwgMSwgJ1xyXG4jIyMgRXJyb3IgdXBkYXRpbmcgZGF0YWJhc2UuICBDYXVzZTogamF2YS5zcWwuU1FMSW50ZWdyaXR5Q29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbjogRHVwbGljYXRlIGVudHJ5IFwnMzM2Yzg3MTM5MTI2NTQzMjdiMjg3MWZlMjAyMTNlYmZlYzBiMTJkNFwnIGZvciBrZXkgXCdidF90b3JyZW50LmluZm9faGFzaFwnXHJcbiMjIyBUaGUgZXJyb3IgbWF5IGV4aXN0IGluIGZpbGUgW0U6XFxJZGVhUHJvamVjdHNcXHJ1b3lpLXJlYWN0LW1hc3RlclxccnVveWktYWRtaW5cXHRhcmdldFxcY2xhc3Nlc1xcbWFwcGVyXFxzeXN0ZW1cXEJ0VG9ycmVudE1hcHBlci54bWxdXHJcbiMjIyBUaGUgZXJyb3IgbWF5IGludm9sdmUgY29tLnJ1b3lpLnRvcnJlbnQubWFwcGVyLkJ0VG9ycmVudE1hcHBlci5pbnNlcnRCdFRvcnJlbnQtSW5saW5lXHJcbiMjIyBUaGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2V0dGluZyBwYXJhbWV0ZXJzXHJcbiMjIyBTUUw6IGluc2VydCBpbnRvIGJ0X3RvcnJlbnQgICAgICAgICAgKCBpbmZvX2hhc2gsICAgICAgICAgICAgIG5hbWUsICAgICAgICAgICAgIGxlbmd0aCwgICAgICAgICAgICAgcGllY2VfbGVuZ3RoLCAgICAgICAgICAgICBwaWVjZXNfY291bnQsICAgICAgICAgICAgIGNyZWF0ZWRfYnksICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9pZCApICAgICAgICAgICB2YWx1ZXMgKCA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICAgICAgICAgICAgICAgPyApXHJcbiMjIyBDYXVzZTogamF2YS5zcWwuU1FMSW50ZWdyaXR5Q29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbjogRHVwbGljYXRlIGVudHJ5IFwnMzM2Yzg3MTM5MTI2NTQzMjdiMjg3MWZlMjAyMTNlYmZlYzBiMTJkNFwnIGZvciBrZXkgXCdidF90b3JyZW50LmluZm9faGFzaFwnXG47IER1cGxpY2F0ZSBlbnRyeSBcJzMzNmM4NzEzOTEyNjU0MzI3YjI4NzFmZTIwMjEzZWJmZWMwYjEyZDRcJyBmb3Iga2V5IFwnYnRfdG9ycmVudC5pbmZvX2hhc2hcJycsICcyMDI1LTA0LTIxIDE1OjAwOjU0JywgNTUpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxMjMsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNTowMToyNScsIDQ5KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTI0LCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8xJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNTowMjozNScsIDYyKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTI1LCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8yJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNTowMjozNycsIDM4KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTI2LCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8zJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNTowMjozOCcsIDM0KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTI3LCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC81JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNTowMjo0MCcsIDM2KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTI4LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTU6MDI6NDUnLCA0Nyk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEyOSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCBOVUxMLCAxLCAnXHJcbiMjIyBFcnJvciB1cGRhdGluZyBkYXRhYmFzZS4gIENhdXNlOiBqYXZhLnNxbC5TUUxTeW50YXhFcnJvckV4Y2VwdGlvbjogWW91IGhhdmUgYW4gZXJyb3IgaW4geW91ciBTUUwgc3ludGF4OyBjaGVjayB0aGUgbWFudWFsIHRoYXQgY29ycmVzcG9uZHMgdG8geW91ciBNeVNRTCBzZXJ2ZXIgdmVyc2lvbiBmb3IgdGhlIHJpZ2h0IHN5bnRheCB0byB1c2UgbmVhciBcJ1wnIGF0IGxpbmUgMVxyXG4jIyMgVGhlIGVycm9yIG1heSBleGlzdCBpbiBmaWxlIFtFOlxcSWRlYVByb2plY3RzXFxydW95aS1yZWFjdC1tYXN0ZXJcXHJ1b3lpLWFkbWluXFx0YXJnZXRcXGNsYXNzZXNcXG1hcHBlclxcc3lzdGVtXFxCdFRvcnJlbnRNYXBwZXIueG1sXVxyXG4jIyMgVGhlIGVycm9yIG1heSBpbnZvbHZlIGNvbS5ydW95aS50b3JyZW50Lm1hcHBlci5CdFRvcnJlbnRNYXBwZXIuaW5zZXJ0QnRUb3JyZW50LUlubGluZVxyXG4jIyMgVGhlIGVycm9yIG9jY3VycmVkIHdoaWxlIHNldHRpbmcgcGFyYW1ldGVyc1xyXG4jIyMgU1FMOiBpbnNlcnQgaW50byBidF90b3JyZW50XHJcbiMjIyBDYXVzZTogamF2YS5zcWwuU1FMU3ludGF4RXJyb3JFeGNlcHRpb246IFlvdSBoYXZlIGFuIGVycm9yIGluIHlvdXIgU1FMIHN5bnRheDsgY2hlY2sgdGhlIG1hbnVhbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHlvdXIgTXlTUUwgc2VydmVyIHZlcnNpb24gZm9yIHRoZSByaWdodCBzeW50YXggdG8gdXNlIG5lYXIgXCdcJyBhdCBsaW5lIDFcbjsgYmFkIFNRTCBncmFtbWFyIFtdJywgJzIwMjUtMDQtMjEgMTU6MDM6MDEnLCAyOCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEzMCwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjAzOjE1JywgNTIpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxMzEsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgTlVMTCwgMSwgJ1xyXG4jIyMgRXJyb3IgdXBkYXRpbmcgZGF0YWJhc2UuICBDYXVzZTogamF2YS5zcWwuU1FMSW50ZWdyaXR5Q29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbjogRHVwbGljYXRlIGVudHJ5IFwnMzg5OTcyNjM0NWMzOTBhOGM3Zjk4MjZiNTY4Y2NkMDcwMWQ4MzUyNFwnIGZvciBrZXkgXCdidF90b3JyZW50LmluZm9faGFzaFwnXHJcbiMjIyBUaGUgZXJyb3IgbWF5IGV4aXN0IGluIGZpbGUgW0U6XFxJZGVhUHJvamVjdHNcXHJ1b3lpLXJlYWN0LW1hc3RlclxccnVveWktYWRtaW5cXHRhcmdldFxcY2xhc3Nlc1xcbWFwcGVyXFxzeXN0ZW1cXEJ0VG9ycmVudE1hcHBlci54bWxdXHJcbiMjIyBUaGUgZXJyb3IgbWF5IGludm9sdmUgY29tLnJ1b3lpLnRvcnJlbnQubWFwcGVyLkJ0VG9ycmVudE1hcHBlci5pbnNlcnRCdFRvcnJlbnQtSW5saW5lXHJcbiMjIyBUaGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2V0dGluZyBwYXJhbWV0ZXJzXHJcbiMjIyBTUUw6IGluc2VydCBpbnRvIGJ0X3RvcnJlbnQgICAgICAgICAgKCBpbmZvX2hhc2gsICAgICAgICAgICAgIG5hbWUsICAgICAgICAgICAgIGxlbmd0aCwgICAgICAgICAgICAgcGllY2VfbGVuZ3RoLCAgICAgICAgICAgICBwaWVjZXNfY291bnQsICAgICAgICAgICAgIGNyZWF0ZWRfYnksICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9pZCApICAgICAgICAgICB2YWx1ZXMgKCA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICA/LCAgICAgICAgICAgICAgICAgICAgICAgICAgPyApXHJcbiMjIyBDYXVzZTogamF2YS5zcWwuU1FMSW50ZWdyaXR5Q29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbjogRHVwbGljYXRlIGVudHJ5IFwnMzg5OTcyNjM0NWMzOTBhOGM3Zjk4MjZiNTY4Y2NkMDcwMWQ4MzUyNFwnIGZvciBrZXkgXCdidF90b3JyZW50LmluZm9faGFzaFwnXG47IER1cGxpY2F0ZSBlbnRyeSBcJzM4OTk3MjYzNDVjMzkwYThjN2Y5ODI2YjU2OGNjZDA3MDFkODM1MjRcJyBmb3Iga2V5IFwnYnRfdG9ycmVudC5pbmZvX2hhc2hcJycsICcyMDI1LTA0LTIxIDE1OjAzOjI0JywgMzYpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxMzIsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzYnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjAzOjQyJywgMzkpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxMzMsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzcnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjAzOjQ0JywgMzQpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxMzQsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNTowNDowMScsIDU5KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTM1LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsIE5VTEwsIDEsICdcclxuIyMjIEVycm9yIHVwZGF0aW5nIGRhdGFiYXNlLiAgQ2F1c2U6IGphdmEuc3FsLlNRTEludGVncml0eUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb246IER1cGxpY2F0ZSBlbnRyeSBcJzMzNmM4NzEzOTEyNjU0MzI3YjI4NzFmZTIwMjEzZWJmZWMwYjEyZDRcJyBmb3Iga2V5IFwnYnRfdG9ycmVudC5pbmZvX2hhc2hcJ1xyXG4jIyMgVGhlIGVycm9yIG1heSBleGlzdCBpbiBmaWxlIFtFOlxcSWRlYVByb2plY3RzXFxydW95aS1yZWFjdC1tYXN0ZXJcXHJ1b3lpLWFkbWluXFx0YXJnZXRcXGNsYXNzZXNcXG1hcHBlclxcc3lzdGVtXFxCdFRvcnJlbnRNYXBwZXIueG1sXVxyXG4jIyMgVGhlIGVycm9yIG1heSBpbnZvbHZlIGNvbS5ydW95aS50b3JyZW50Lm1hcHBlci5CdFRvcnJlbnRNYXBwZXIuaW5zZXJ0QnRUb3JyZW50LUlubGluZVxyXG4jIyMgVGhlIGVycm9yIG9jY3VycmVkIHdoaWxlIHNldHRpbmcgcGFyYW1ldGVyc1xyXG4jIyMgU1FMOiBpbnNlcnQgaW50byBidF90b3JyZW50ICAgICAgICAgICggaW5mb19oYXNoLCAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAgICBsZW5ndGgsICAgICAgICAgICAgIHBpZWNlX2xlbmd0aCwgICAgICAgICAgICAgcGllY2VzX2NvdW50LCAgICAgICAgICAgICBjcmVhdGVkX2J5LCAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfaWQgKSAgICAgICAgICAgdmFsdWVzICggPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgICAgICAgICAgICAgID8gKVxyXG4jIyMgQ2F1c2U6IGphdmEuc3FsLlNRTEludGVncml0eUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb246IER1cGxpY2F0ZSBlbnRyeSBcJzMzNmM4NzEzOTEyNjU0MzI3YjI4NzFmZTIwMjEzZWJmZWMwYjEyZDRcJyBmb3Iga2V5IFwnYnRfdG9ycmVudC5pbmZvX2hhc2hcJ1xuOyBEdXBsaWNhdGUgZW50cnkgXCczMzZjODcxMzkxMjY1NDMyN2IyODcxZmUyMDIxM2ViZmVjMGIxMmQ0XCcgZm9yIGtleSBcJ2J0X3RvcnJlbnQuaW5mb19oYXNoXCcnLCAnMjAyNS0wNC0yMSAxNTowNDoxMicsIDUyKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTM2LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsIE5VTEwsIDEsICdcclxuIyMjIEVycm9yIHVwZGF0aW5nIGRhdGFiYXNlLiAgQ2F1c2U6IGphdmEuc3FsLlNRTFN5bnRheEVycm9yRXhjZXB0aW9uOiBZb3UgaGF2ZSBhbiBlcnJvciBpbiB5b3VyIFNRTCBzeW50YXg7IGNoZWNrIHRoZSBtYW51YWwgdGhhdCBjb3JyZXNwb25kcyB0byB5b3VyIE15U1FMIHNlcnZlciB2ZXJzaW9uIGZvciB0aGUgcmlnaHQgc3ludGF4IHRvIHVzZSBuZWFyIFwnXCcgYXQgbGluZSAxXHJcbiMjIyBUaGUgZXJyb3IgbWF5IGV4aXN0IGluIGZpbGUgW0U6XFxJZGVhUHJvamVjdHNcXHJ1b3lpLXJlYWN0LW1hc3RlclxccnVveWktYWRtaW5cXHRhcmdldFxcY2xhc3Nlc1xcbWFwcGVyXFxzeXN0ZW1cXEJ0VG9ycmVudE1hcHBlci54bWxdXHJcbiMjIyBUaGUgZXJyb3IgbWF5IGludm9sdmUgY29tLnJ1b3lpLnRvcnJlbnQubWFwcGVyLkJ0VG9ycmVudE1hcHBlci5pbnNlcnRCdFRvcnJlbnQtSW5saW5lXHJcbiMjIyBUaGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2V0dGluZyBwYXJhbWV0ZXJzXHJcbiMjIyBTUUw6IGluc2VydCBpbnRvIGJ0X3RvcnJlbnRcclxuIyMjIENhdXNlOiBqYXZhLnNxbC5TUUxTeW50YXhFcnJvckV4Y2VwdGlvbjogWW91IGhhdmUgYW4gZXJyb3IgaW4geW91ciBTUUwgc3ludGF4OyBjaGVjayB0aGUgbWFudWFsIHRoYXQgY29ycmVzcG9uZHMgdG8geW91ciBNeVNRTCBzZXJ2ZXIgdmVyc2lvbiBmb3IgdGhlIHJpZ2h0IHN5bnRheCB0byB1c2UgbmVhciBcJ1wnIGF0IGxpbmUgMVxuOyBiYWQgU1FMIGdyYW1tYXIgW10nLCAnMjAyNS0wNC0yMSAxNTowNDozMycsIDQwKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTM3LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTU6MDc6MjAnLCA3NCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEzOCwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCBOVUxMLCAxLCAnXHJcbiMjIyBFcnJvciB1cGRhdGluZyBkYXRhYmFzZS4gIENhdXNlOiBqYXZhLnNxbC5TUUxJbnRlZ3JpdHlDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uOiBEdXBsaWNhdGUgZW50cnkgXCdmOTM2NWM3NGNhY2YzMzVjMzUzYTQzZjU3MTliZDk0MTNiNjAyNGVlXCcgZm9yIGtleSBcJ2J0X3RvcnJlbnQuaW5mb19oYXNoXCdcclxuIyMjIFRoZSBlcnJvciBtYXkgZXhpc3QgaW4gZmlsZSBbRTpcXElkZWFQcm9qZWN0c1xccnVveWktcmVhY3QtbWFzdGVyXFxydW95aS1hZG1pblxcdGFyZ2V0XFxjbGFzc2VzXFxtYXBwZXJcXHN5c3RlbVxcQnRUb3JyZW50TWFwcGVyLnhtbF1cclxuIyMjIFRoZSBlcnJvciBtYXkgaW52b2x2ZSBjb20ucnVveWkudG9ycmVudC5tYXBwZXIuQnRUb3JyZW50TWFwcGVyLmluc2VydEJ0VG9ycmVudC1JbmxpbmVcclxuIyMjIFRoZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZXR0aW5nIHBhcmFtZXRlcnNcclxuIyMjIFNRTDogaW5zZXJ0IGludG8gYnRfdG9ycmVudCAgICAgICAgICAoIGluZm9faGFzaCwgICAgICAgICAgICAgbmFtZSwgICAgICAgICAgICAgbGVuZ3RoLCAgICAgICAgICAgICBwaWVjZV9sZW5ndGgsICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkX2J5LCAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfaWQgKSAgICAgICAgICAgdmFsdWVzICggPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgICAgICAgICAgICAgID8sICAgICAgICAgICAgICAgICAgICAgICAgICA/IClcclxuIyMjIENhdXNlOiBqYXZhLnNxbC5TUUxJbnRlZ3JpdHlDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uOiBEdXBsaWNhdGUgZW50cnkgXCdmOTM2NWM3NGNhY2YzMzVjMzUzYTQzZjU3MTliZDk0MTNiNjAyNGVlXCcgZm9yIGtleSBcJ2J0X3RvcnJlbnQuaW5mb19oYXNoXCdcbjsgRHVwbGljYXRlIGVudHJ5IFwnZjkzNjVjNzRjYWNmMzM1YzM1M2E0M2Y1NzE5YmQ5NDEzYjYwMjRlZVwnIGZvciBrZXkgXCdidF90b3JyZW50LmluZm9faGFzaFwnJywgJzIwMjUtMDQtMjEgMTU6MDc6NDMnLCA0MCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDEzOSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjA3OjUyJywgNTApOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNDAsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzEzJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNToxMDo1OCcsIDQ2KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTQxLCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8xMScsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne30nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTU6MTE6MDAnLCAzNCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE0MiwgJ+enjeWtkOS4uycsIDMsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIucmVtb3ZlKCknLCAnREVMRVRFJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvOScsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne30nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTU6MTE6MDInLCA0MCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE0MywgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjExOjEyJywgNzYpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNDQsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNToxMjozMScsIDg1KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTQ1LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsIE5VTEwsIDEsICdcclxuIyMjIEVycm9yIHVwZGF0aW5nIGRhdGFiYXNlLiAgQ2F1c2U6IGphdmEuc3FsLlNRTEludGVncml0eUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb246IER1cGxpY2F0ZSBlbnRyeSBcJzNhZDA0Nzg1ODdmNzhjMTViMmE4MjIyMGNmOTljNDlhMmZlODBlZWFcJyBmb3Iga2V5IFwnYnRfdG9ycmVudC5pbmZvX2hhc2hcJ1xyXG4jIyMgVGhlIGVycm9yIG1heSBleGlzdCBpbiBmaWxlIFtFOlxcSWRlYVByb2plY3RzXFxydW95aS1yZWFjdC1tYXN0ZXJcXHJ1b3lpLWFkbWluXFx0YXJnZXRcXGNsYXNzZXNcXG1hcHBlclxcc3lzdGVtXFxCdFRvcnJlbnRNYXBwZXIueG1sXVxyXG4jIyMgVGhlIGVycm9yIG1heSBpbnZvbHZlIGNvbS5ydW95aS50b3JyZW50Lm1hcHBlci5CdFRvcnJlbnRNYXBwZXIuaW5zZXJ0QnRUb3JyZW50LUlubGluZVxyXG4jIyMgVGhlIGVycm9yIG9jY3VycmVkIHdoaWxlIHNldHRpbmcgcGFyYW1ldGVyc1xyXG4jIyMgU1FMOiBpbnNlcnQgaW50byBidF90b3JyZW50ICAgICAgICAgICggaW5mb19oYXNoLCAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAgICBsZW5ndGgsICAgICAgICAgICAgIHBpZWNlX2xlbmd0aCwgICAgICAgICAgICAgcGllY2VzX2NvdW50LCAgICAgICAgICAgICBjcmVhdGVkX2J5LCAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfaWQgKSAgICAgICAgICAgdmFsdWVzICggPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgICAgICAgICAgICAgID8gKVxyXG4jIyMgQ2F1c2U6IGphdmEuc3FsLlNRTEludGVncml0eUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb246IER1cGxpY2F0ZSBlbnRyeSBcJzNhZDA0Nzg1ODdmNzhjMTViMmE4MjIyMGNmOTljNDlhMmZlODBlZWFcJyBmb3Iga2V5IFwnYnRfdG9ycmVudC5pbmZvX2hhc2hcJ1xuOyBEdXBsaWNhdGUgZW50cnkgXCczYWQwNDc4NTg3Zjc4YzE1YjJhODIyMjBjZjk5YzQ5YTJmZTgwZWVhXCcgZm9yIGtleSBcJ2J0X3RvcnJlbnQuaW5mb19oYXNoXCcnLCAnMjAyNS0wNC0yMSAxNToxMjo1MCcsIDE4Myk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE0NiwgJ+enjeWtkOS4uycsIDMsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIucmVtb3ZlKCknLCAnREVMRVRFJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvMTQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjEzOjI0JywgMzApOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNDcsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzE1JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNToxMzoyNicsIDM5KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTQ4LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTU6MTM6MzcnLCA0NCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE0OSwgJ+enjeWtkOS4uycsIDMsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIucmVtb3ZlKCknLCAnREVMRVRFJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvMTcnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjE0OjE5JywgMzYpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNTAsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNToyMDoxOCcsIDU0KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTUxLCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8xOCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne30nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTU6MjE6NTMnLCA1Nik7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE1MiwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjIxOjU4JywgNTcpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNTMsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgTlVMTCwgMSwgJ1xyXG4jIyMgRXJyb3IgdXBkYXRpbmcgZGF0YWJhc2UuICBDYXVzZTogamF2YS5zcWwuU1FMU3ludGF4RXJyb3JFeGNlcHRpb246IFlvdSBoYXZlIGFuIGVycm9yIGluIHlvdXIgU1FMIHN5bnRheDsgY2hlY2sgdGhlIG1hbnVhbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHlvdXIgTXlTUUwgc2VydmVyIHZlcnNpb24gZm9yIHRoZSByaWdodCBzeW50YXggdG8gdXNlIG5lYXIgXCdcJyBhdCBsaW5lIDFcclxuIyMjIFRoZSBlcnJvciBtYXkgZXhpc3QgaW4gZmlsZSBbRTpcXElkZWFQcm9qZWN0c1xccnVveWktcmVhY3QtbWFzdGVyXFxydW95aS1hZG1pblxcdGFyZ2V0XFxjbGFzc2VzXFxtYXBwZXJcXHN5c3RlbVxcQnRUb3JyZW50TWFwcGVyLnhtbF1cclxuIyMjIFRoZSBlcnJvciBtYXkgaW52b2x2ZSBjb20ucnVveWkudG9ycmVudC5tYXBwZXIuQnRUb3JyZW50TWFwcGVyLmluc2VydEJ0VG9ycmVudC1JbmxpbmVcclxuIyMjIFRoZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZXR0aW5nIHBhcmFtZXRlcnNcclxuIyMjIFNRTDogaW5zZXJ0IGludG8gYnRfdG9ycmVudFxyXG4jIyMgQ2F1c2U6IGphdmEuc3FsLlNRTFN5bnRheEVycm9yRXhjZXB0aW9uOiBZb3UgaGF2ZSBhbiBlcnJvciBpbiB5b3VyIFNRTCBzeW50YXg7IGNoZWNrIHRoZSBtYW51YWwgdGhhdCBjb3JyZXNwb25kcyB0byB5b3VyIE15U1FMIHNlcnZlciB2ZXJzaW9uIGZvciB0aGUgcmlnaHQgc3ludGF4IHRvIHVzZSBuZWFyIFwnXCcgYXQgbGluZSAxXG47IGJhZCBTUUwgZ3JhbW1hciBbXScsICcyMDI1LTA0LTIxIDE1OjIyOjA0JywgMzkpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNTQsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzE5JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNToyNTozNScsIDUyKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTU1LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTU6MjU6NDAnLCA3Nyk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE1NiwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjI1OjQ1JywgNDQpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNTcsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNToyNjoxMycsIDU2KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTU4LCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8yMScsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne30nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTU6MjY6MTYnLCAzOSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE1OSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE1OjUwOjIwJywgMzUpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNjAsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNTo1MzoxOCcsIDUpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNjEsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNjozMjo0NycsIDIzMSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE2MiwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE3OjMxOjM0JywgMjEyKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTYzLCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTc6MzE6NDcnLCA1NSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE2NCwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE3OjMxOjU5JywgNTkpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNjUsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzIzJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNzozNToxNycsIDc3KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTY2LCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8yMicsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne30nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTc6MzU6MTknLCAzNSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE2NywgJ+enjeWtkOS4uycsIDMsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIucmVtb3ZlKCknLCAnREVMRVRFJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvMjAnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE3OjM1OjIxJywgNDQpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNjgsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxNzozOToyMicsIDYzKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTY5LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTc6NTE6MDknLCA1OCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE3MCwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCBOVUxMLCAxLCAnXHJcbiMjIyBFcnJvciB1cGRhdGluZyBkYXRhYmFzZS4gIENhdXNlOiBqYXZhLnNxbC5TUUxJbnRlZ3JpdHlDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uOiBEdXBsaWNhdGUgZW50cnkgXCdVbmtub3duIEhhc2hcJyBmb3Iga2V5IFwnYnRfdG9ycmVudC5pbmZvX2hhc2hcJ1xyXG4jIyMgVGhlIGVycm9yIG1heSBleGlzdCBpbiBmaWxlIFtFOlxcSWRlYVByb2plY3RzXFxydW95aS1yZWFjdC1tYXN0ZXJcXHJ1b3lpLWFkbWluXFx0YXJnZXRcXGNsYXNzZXNcXG1hcHBlclxcc3lzdGVtXFxCdFRvcnJlbnRNYXBwZXIueG1sXVxyXG4jIyMgVGhlIGVycm9yIG1heSBpbnZvbHZlIGNvbS5ydW95aS50b3JyZW50Lm1hcHBlci5CdFRvcnJlbnRNYXBwZXIuaW5zZXJ0QnRUb3JyZW50LUlubGluZVxyXG4jIyMgVGhlIGVycm9yIG9jY3VycmVkIHdoaWxlIHNldHRpbmcgcGFyYW1ldGVyc1xyXG4jIyMgU1FMOiBpbnNlcnQgaW50byBidF90b3JyZW50ICAgICAgICAgICggaW5mb19oYXNoLCAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAgICBsZW5ndGgsICAgICAgICAgICAgIHBpZWNlX2xlbmd0aCwgICAgICAgICAgICAgcGllY2VzX2NvdW50LCAgICAgICAgICAgICBjcmVhdGVkX2J5LCAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfaWQgKSAgICAgICAgICAgdmFsdWVzICggPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgICAgICAgICAgICAgID8gKVxyXG4jIyMgQ2F1c2U6IGphdmEuc3FsLlNRTEludGVncml0eUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb246IER1cGxpY2F0ZSBlbnRyeSBcJ1Vua25vd24gSGFzaFwnIGZvciBrZXkgXCdidF90b3JyZW50LmluZm9faGFzaFwnXG47IER1cGxpY2F0ZSBlbnRyeSBcJ1Vua25vd24gSGFzaFwnIGZvciBrZXkgXCdidF90b3JyZW50LmluZm9faGFzaFwnJywgJzIwMjUtMDQtMjEgMTc6NTE6MjYnLCAzODU5MCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE3MSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCBOVUxMLCAxLCAnXHJcbiMjIyBFcnJvciB1cGRhdGluZyBkYXRhYmFzZS4gIENhdXNlOiBqYXZhLnNxbC5TUUxJbnRlZ3JpdHlDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uOiBEdXBsaWNhdGUgZW50cnkgXCdVbmtub3duIEhhc2hcJyBmb3Iga2V5IFwnYnRfdG9ycmVudC5pbmZvX2hhc2hcJ1xyXG4jIyMgVGhlIGVycm9yIG1heSBleGlzdCBpbiBmaWxlIFtFOlxcSWRlYVByb2plY3RzXFxydW95aS1yZWFjdC1tYXN0ZXJcXHJ1b3lpLWFkbWluXFx0YXJnZXRcXGNsYXNzZXNcXG1hcHBlclxcc3lzdGVtXFxCdFRvcnJlbnRNYXBwZXIueG1sXVxyXG4jIyMgVGhlIGVycm9yIG1heSBpbnZvbHZlIGNvbS5ydW95aS50b3JyZW50Lm1hcHBlci5CdFRvcnJlbnRNYXBwZXIuaW5zZXJ0QnRUb3JyZW50LUlubGluZVxyXG4jIyMgVGhlIGVycm9yIG9jY3VycmVkIHdoaWxlIHNldHRpbmcgcGFyYW1ldGVyc1xyXG4jIyMgU1FMOiBpbnNlcnQgaW50byBidF90b3JyZW50ICAgICAgICAgICggaW5mb19oYXNoLCAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAgICBsZW5ndGgsICAgICAgICAgICAgIHBpZWNlX2xlbmd0aCwgICAgICAgICAgICAgcGllY2VzX2NvdW50LCAgICAgICAgICAgICBjcmVhdGVkX2J5LCAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfaWQgKSAgICAgICAgICAgdmFsdWVzICggPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgPywgICAgICAgICAgICAgICAgICAgICAgICAgID8gKVxyXG4jIyMgQ2F1c2U6IGphdmEuc3FsLlNRTEludGVncml0eUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb246IER1cGxpY2F0ZSBlbnRyeSBcJ1Vua25vd24gSGFzaFwnIGZvciBrZXkgXCdidF90b3JyZW50LmluZm9faGFzaFwnXG47IER1cGxpY2F0ZSBlbnRyeSBcJ1Vua25vd24gSGFzaFwnIGZvciBrZXkgXCdidF90b3JyZW50LmluZm9faGFzaFwnJywgJzIwMjUtMDQtMjEgMTc6NTE6MzgnLCA1NSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE3MiwgJ+enjeWtkOS4uycsIDMsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIucmVtb3ZlKCknLCAnREVMRVRFJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvMjcnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE5OjM4OjM4JywgNDgpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNzMsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxOTozODo1NicsIDY1KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTc0LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTk6NDE6MjInLCAxNSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE3NSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDE5OjUyOjAwJywgODYpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNzYsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAxOTo1NDoyNScsIDc3KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTc3LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMTk6NTc6NDQnLCAxMDApOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxNzgsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDoxMDo0MicsIDI4KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTc5LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6MTM6MDAnLCAyMSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE4MCwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjE0OjE0JywgMjIpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxODEsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDoyNjoyMCcsIDQxOSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE4MiwgJ+enjeWtkOS4uycsIDMsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIucmVtb3ZlKCknLCAnREVMRVRFJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvMjYnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjI2OjQ2JywgNDYpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxODMsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzI1JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDoyNjo0OCcsIDQyKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTg0LCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8yNCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne30nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6MjY6NDknLCA0NSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE4NSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjI2OjU5JywgMTA0KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTg2LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6Mjg6NTInLCA0NDUpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxODcsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDozOTo1NCcsIDM0NSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE4OCwgJ+enjeWtkOS4uycsIDMsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIucmVtb3ZlKCknLCAnREVMRVRFJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvMzEnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjQwOjQ4JywgNDQpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxODksICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzMyJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDo0MDo1MCcsIDYxKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTkwLCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8zMycsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne30nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6NDA6NTEnLCA0MCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE5MSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjQyOjQ4JywgMTcyKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTkyLCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6NTE6MTYnLCAxOTQxMSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE5MywgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjUxOjI5JywgMzg1ODUpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxOTQsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzM1JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDo1MTozMScsIDU3KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTk1LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6NTE6NDAnLCAxOTcpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxOTYsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDo1MjowNicsIDMzMyk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDE5NywgJ+enjeWtkOS4uycsIDMsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIucmVtb3ZlKCknLCAnREVMRVRFJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvMzcnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjUyOjE3JywgODQpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgxOTgsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzM4JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDo1MjoxOScsIDQ2KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMTk5LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6NTI6MjYnLCAxMjEpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgyMDAsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDo1MjozNycsIDEwMSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDIwMSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjUyOjQ0JywgMzIxKTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMjAyLCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8zOScsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne30nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6NTM6NTInLCA1OCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDIwMywgJ+enjeWtkOS4uycsIDMsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIucmVtb3ZlKCknLCAnREVMRVRFJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvNDAnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJ3t9JywgJ3tcIm1zZ1wiOlwi5pON5L2c5oiQ5YqfXCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjUzOjU0JywgMzgpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgyMDQsICfnp43lrZDkuLsnLCAzLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnJlbW92ZSgpJywgJ0RFTEVURScsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50LzQxJywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICd7fScsICd7XCJtc2dcIjpcIuaTjeS9nOaIkOWKn1wiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDo1Mzo1NicsIDQ4KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMjA1LCAn56eN5a2Q5Li7JywgMywgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci5yZW1vdmUoKScsICdERUxFVEUnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC8zNCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAne30nLCAne1wibXNnXCI6XCLmk43kvZzmiJDlip9cIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6NTM6NTknLCA0MSk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDIwNiwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIwOjU0OjA2JywgMzM3KTsKK0lOU0VSVCBJTlRPIGBzeXNfb3Blcl9sb2dgIFZBTFVFUyAoMjA3LCAn56eN5a2Q5Li7JywgMSwgJ2NvbS5ydW95aS50b3JyZW50LmNvbnRyb2xsZXIuQnRUb3JyZW50Q29udHJvbGxlci51cGxvYWRUb3JyZW50KCknLCAnUE9TVCcsIDEsICdhZG1pbicsICfnoJTlj5Hpg6jpl6gnLCAnL3N5c3RlbS90b3JyZW50L3VwbG9hZFRvcnJlbnQnLCAnMTI3LjAuMC4xJywgJ+WGhee9kUlQJywgJycsICd7XCJtc2dcIjpcIlRvcnJlbnQgdXBsb2FkZWQgYW5kIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIixcImNvZGVcIjoyMDB9JywgMCwgTlVMTCwgJzIwMjUtMDQtMjEgMjA6NTQ6MTAnLCAxMzYpOworSU5TRVJUIElOVE8gYHN5c19vcGVyX2xvZ2AgVkFMVUVTICgyMDgsICfnp43lrZDkuLsnLCAxLCAnY29tLnJ1b3lpLnRvcnJlbnQuY29udHJvbGxlci5CdFRvcnJlbnRDb250cm9sbGVyLnVwbG9hZFRvcnJlbnQoKScsICdQT1NUJywgMSwgJ2FkbWluJywgJ+eglOWPkemDqOmXqCcsICcvc3lzdGVtL3RvcnJlbnQvdXBsb2FkVG9ycmVudCcsICcxMjcuMC4wLjEnLCAn5YaF572RSVAnLCAnJywgJ3tcIm1zZ1wiOlwiVG9ycmVudCB1cGxvYWRlZCBhbmQgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseVwiLFwiY29kZVwiOjIwMH0nLCAwLCBOVUxMLCAnMjAyNS0wNC0yMSAyMDo1NDoxNScsIDMyMCk7CitJTlNFUlQgSU5UTyBgc3lzX29wZXJfbG9nYCBWQUxVRVMgKDIwOSwgJ+enjeWtkOS4uycsIDEsICdjb20ucnVveWkudG9ycmVudC5jb250cm9sbGVyLkJ0VG9ycmVudENvbnRyb2xsZXIudXBsb2FkVG9ycmVudCgpJywgJ1BPU1QnLCAxLCAnYWRtaW4nLCAn56CU5Y+R6YOo6ZeoJywgJy9zeXN0ZW0vdG9ycmVudC91cGxvYWRUb3JyZW50JywgJzEyNy4wLjAuMScsICflhoXnvZFJUCcsICcnLCAne1wibXNnXCI6XCJUb3JyZW50IHVwbG9hZGVkIGFuZCBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIsXCJjb2RlXCI6MjAwfScsIDAsIE5VTEwsICcyMDI1LTA0LTIxIDIxOjAwOjE2JywgMjUwKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBzeXNfcG9zdAorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYHN5c19wb3N0YDsKK0NSRUFURSBUQUJMRSBgc3lzX3Bvc3RgICAoCisgIGBwb3N0X2lkYCBiaWdpbnQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQgQ09NTUVOVCAn5bKX5L2NSUQnLAorICBgcG9zdF9jb2RlYCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn5bKX5L2N57yW56CBJywKKyAgYHBvc3RfbmFtZWAgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+Wyl+S9jeWQjeensCcsCisgIGBwb3N0X3NvcnRgIGludCBOT1QgTlVMTCBDT01NRU5UICfmmL7npLrpobrluo8nLAorICBgc3RhdHVzYCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfnirbmgIHvvIgw5q2j5bi4IDHlgZznlKjvvIknLAorICBgY3JlYXRlX2J5YCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WIm+W7uuiAhScsCisgIGBjcmVhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5Yib5bu65pe26Ze0JywKKyAgYHVwZGF0ZV9ieWAgdmFyY2hhcig2NCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfmm7TmlrDogIUnLAorICBgdXBkYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+abtOaWsOaXtumXtCcsCisgIGByZW1hcmtgIHZhcmNoYXIoNTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5aSH5rOoJywKKyAgUFJJTUFSWSBLRVkgKGBwb3N0X2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIEFVVE9fSU5DUkVNRU5UID0gNSBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn5bKX5L2N5L+h5oGv6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBzeXNfcG9zdAorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TRVJUIElOVE8gYHN5c19wb3N0YCBWQUxVRVMgKDEsICdjZW8nLCAn6JGj5LqL6ZW/JywgMSwgJzAnLCAnYWRtaW4nLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICcnLCBOVUxMLCAnJyk7CitJTlNFUlQgSU5UTyBgc3lzX3Bvc3RgIFZBTFVFUyAoMiwgJ3NlJywgJ+mhueebrue7j+eQhicsIDIsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJycpOworSU5TRVJUIElOVE8gYHN5c19wb3N0YCBWQUxVRVMgKDMsICdocicsICfkurrlipvotYTmupAnLCAzLCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKK0lOU0VSVCBJTlRPIGBzeXNfcG9zdGAgVkFMVUVTICg0LCAndXNlcicsICfmma7pgJrlkZjlt6UnLCA0LCAnMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICcnKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBzeXNfcm9sZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYHN5c19yb2xlYDsKK0NSRUFURSBUQUJMRSBgc3lzX3JvbGVgICAoCisgIGByb2xlX2lkYCBiaWdpbnQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQgQ09NTUVOVCAn6KeS6ImySUQnLAorICBgcm9sZV9uYW1lYCB2YXJjaGFyKDMwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn6KeS6Imy5ZCN56ewJywKKyAgYHJvbGVfa2V5YCB2YXJjaGFyKDEwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+inkuiJsuadg+mZkOWtl+espuS4sicsCisgIGByb2xlX3NvcnRgIGludCBOT1QgTlVMTCBDT01NRU5UICfmmL7npLrpobrluo8nLAorICBgZGF0YV9zY29wZWAgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcxJyBDT01NRU5UICfmlbDmja7ojIPlm7TvvIgx77ya5YWo6YOo5pWw5o2u5p2D6ZmQIDLvvJroh6rlrprmlbDmja7mnYPpmZAgM++8muacrOmDqOmXqOaVsOaNruadg+mZkCA077ya5pys6YOo6Zeo5Y+K5Lul5LiL5pWw5o2u5p2D6ZmQ77yJJywKKyAgYG1lbnVfY2hlY2tfc3RyaWN0bHlgIHRpbnlpbnQoMSkgTlVMTCBERUZBVUxUIDEgQ09NTUVOVCAn6I+c5Y2V5qCR6YCJ5oup6aG55piv5ZCm5YWz6IGU5pi+56S6JywKKyAgYGRlcHRfY2hlY2tfc3RyaWN0bHlgIHRpbnlpbnQoMSkgTlVMTCBERUZBVUxUIDEgQ09NTUVOVCAn6YOo6Zeo5qCR6YCJ5oup6aG55piv5ZCm5YWz6IGU5pi+56S6JywKKyAgYHN0YXR1c2AgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn6KeS6Imy54q25oCB77yIMOato+W4uCAx5YGc55So77yJJywKKyAgYGRlbF9mbGFnYCBjaGFyKDEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJzAnIENPTU1FTlQgJ+WIoOmZpOagh+W/l++8iDDku6PooajlrZjlnKggMuS7o+ihqOWIoOmZpO+8iScsCisgIGBjcmVhdGVfYnlgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5Yib5bu66ICFJywKKyAgYGNyZWF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfliJvlu7rml7bpl7QnLAorICBgdXBkYXRlX2J5YCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+abtOaWsOiAhScsCisgIGB1cGRhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5pu05paw5pe26Ze0JywKKyAgYHJlbWFya2AgdmFyY2hhcig1MDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICflpIfms6gnLAorICBQUklNQVJZIEtFWSAoYHJvbGVfaWRgKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQVVUT19JTkNSRU1FTlQgPSAxMDAgQ0hBUkFDVEVSIFNFVCA9IHV0ZjhtYjQgQ09MTEFURSA9IHV0ZjhtYjRfMDkwMF9haV9jaSBDT01NRU5UID0gJ+inkuiJsuS/oeaBr+ihqCcgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2Ygc3lzX3JvbGUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOU0VSVCBJTlRPIGBzeXNfcm9sZWAgVkFMVUVTICgxLCAn6LaF57qn566h55CG5ZGYJywgJ2FkbWluJywgMSwgJzEnLCAxLCAxLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+i2hee6p+euoeeQhuWRmCcpOworSU5TRVJUIElOVE8gYHN5c19yb2xlYCBWQUxVRVMgKDIsICfmma7pgJrop5LoibInLCAnY29tbW9uJywgMiwgJzInLCAxLCAxLCAnMCcsICcwJywgJ2FkbWluJywgJzIwMjUtMDQtMjAgMTY6Mjk6NTQnLCAnJywgTlVMTCwgJ+aZrumAmuinkuiJsicpOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIHN5c19yb2xlX2RlcHQKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGBzeXNfcm9sZV9kZXB0YDsKK0NSRUFURSBUQUJMRSBgc3lzX3JvbGVfZGVwdGAgICgKKyAgYHJvbGVfaWRgIGJpZ2ludCBOT1QgTlVMTCBDT01NRU5UICfop5LoibJJRCcsCisgIGBkZXB0X2lkYCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn6YOo6ZeoSUQnLAorICBQUklNQVJZIEtFWSAoYHJvbGVfaWRgLCBgZGVwdF9pZGApIFVTSU5HIEJUUkVFCispIEVOR0lORSA9IElubm9EQiBDSEFSQUNURVIgU0VUID0gdXRmOG1iNCBDT0xMQVRFID0gdXRmOG1iNF8wOTAwX2FpX2NpIENPTU1FTlQgPSAn6KeS6Imy5ZKM6YOo6Zeo5YWz6IGU6KGoJyBST1dfRk9STUFUID0gRHluYW1pYzsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUmVjb3JkcyBvZiBzeXNfcm9sZV9kZXB0CistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfZGVwdGAgVkFMVUVTICgyLCAxMDApOworSU5TRVJUIElOVE8gYHN5c19yb2xlX2RlcHRgIFZBTFVFUyAoMiwgMTAxKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9kZXB0YCBWQUxVRVMgKDIsIDEwNSk7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3Igc3lzX3JvbGVfbWVudQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYHN5c19yb2xlX21lbnVgOworQ1JFQVRFIFRBQkxFIGBzeXNfcm9sZV9tZW51YCAgKAorICBgcm9sZV9pZGAgYmlnaW50IE5PVCBOVUxMIENPTU1FTlQgJ+inkuiJsklEJywKKyAgYG1lbnVfaWRgIGJpZ2ludCBOT1QgTlVMTCBDT01NRU5UICfoj5zljZVJRCcsCisgIFBSSU1BUlkgS0VZIChgcm9sZV9pZGAsIGBtZW51X2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfop5LoibLlkozoj5zljZXlhbPogZTooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIHN5c19yb2xlX21lbnUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMik7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAzKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDQpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAwKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMSk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDIpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAzKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwNCk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDUpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTA2KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwNyk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDgpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTA5KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDExMCk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMTEpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTEyKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDExMyk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMTQpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTE1KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDExNik7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMTcpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgNTAwKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDUwMSk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDAwKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMDEpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAwMik7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDAzKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMDQpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAwNSk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDA2KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMDcpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAwOCk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDA5KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMTApOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAxMSk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDEyKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMTMpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAxNCk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDE1KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMTYpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAxNyk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDE4KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMTkpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAyMCk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDIxKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMjIpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAyMyk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDI0KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMjUpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAyNik7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDI3KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMjgpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAyOSk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDMwKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMzEpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAzMik7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDMzKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMzQpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAzNSk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDM2KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwMzcpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTAzOCk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDM5KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwNDApOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTA0MSk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDQyKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwNDMpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTA0NCk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDQ1KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwNDYpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTA0Nyk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDQ4KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwNDkpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTA1MCk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDUxKTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwNTIpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTA1Myk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDU0KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwNTUpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTA1Nik7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDU3KTsKK0lOU0VSVCBJTlRPIGBzeXNfcm9sZV9tZW51YCBWQUxVRVMgKDIsIDEwNTgpOworSU5TRVJUIElOVE8gYHN5c19yb2xlX21lbnVgIFZBTFVFUyAoMiwgMTA1OSk7CitJTlNFUlQgSU5UTyBgc3lzX3JvbGVfbWVudWAgVkFMVUVTICgyLCAxMDYwKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBzeXNfdXNlcgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgYHN5c191c2VyYDsKK0NSRUFURSBUQUJMRSBgc3lzX3VzZXJgICAoCisgIGB1c2VyX2lkYCBiaWdpbnQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQgQ09NTUVOVCAn55So5oi3SUQnLAorICBgZGVwdF9pZGAgYmlnaW50IE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+mDqOmXqElEJywKKyAgYHVzZXJfbmFtZWAgdmFyY2hhcigzMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+eUqOaIt+i0puWPtycsCisgIGBuaWNrX25hbWVgIHZhcmNoYXIoMzApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOT1QgTlVMTCBDT01NRU5UICfnlKjmiLfmmLXnp7AnLAorICBgdXNlcl90eXBlYCB2YXJjaGFyKDIpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJzAwJyBDT01NRU5UICfnlKjmiLfnsbvlnovvvIgwMOezu+e7n+eUqOaIt++8iScsCisgIGBlbWFpbGAgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfnlKjmiLfpgq7nrrEnLAorICBgcGhvbmVudW1iZXJgIHZhcmNoYXIoMTEpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5omL5py65Y+356CBJywKKyAgYHNleGAgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcwJyBDT01NRU5UICfnlKjmiLfmgKfliKvvvIgw55S3IDHlpbMgMuacquefpe+8iScsCisgIGBhdmF0YXJgIHZhcmNoYXIoMTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WktOWDj+WcsOWdgCcsCisgIGBwYXNzd29yZGAgdmFyY2hhcigxMDApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5a+G56CBJywKKyAgYHN0YXR1c2AgY2hhcigxKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcwJyBDT01NRU5UICfluJDlj7fnirbmgIHvvIgw5q2j5bi4IDHlgZznlKjvvIknLAorICBgZGVsX2ZsYWdgIGNoYXIoMSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnMCcgQ09NTUVOVCAn5Yig6Zmk5qCH5b+X77yIMOS7o+ihqOWtmOWcqCAy5Luj6KGo5Yig6Zmk77yJJywKKyAgYGxvZ2luX2lwYCB2YXJjaGFyKDEyOCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfmnIDlkI7nmbvlvZVJUCcsCisgIGBsb2dpbl9kYXRlYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfmnIDlkI7nmbvlvZXml7bpl7QnLAorICBgY3JlYXRlX2J5YCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+WIm+W7uuiAhScsCisgIGBjcmVhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5Yib5bu65pe26Ze0JywKKyAgYHVwZGF0ZV9ieWAgdmFyY2hhcig2NCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfmm7TmlrDogIUnLAorICBgdXBkYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+abtOaWsOaXtumXtCcsCisgIGByZW1hcmtgIHZhcmNoYXIoNTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5aSH5rOoJywKKyAgUFJJTUFSWSBLRVkgKGB1c2VyX2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIEFVVE9fSU5DUkVNRU5UID0gMTAwIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfnlKjmiLfkv6Hmga/ooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIHN5c191c2VyCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNFUlQgSU5UTyBgc3lzX3VzZXJgIFZBTFVFUyAoMSwgMTAzLCAnYWRtaW4nLCAn6Iul5L6dJywgJzAwJywgJ3J5QDE2My5jb20nLCAnMTU4ODg4ODg4ODgnLCAnMScsICcnLCAnJDJhJDEwJDdKQjcyMHl1YlZTWnZVSTByRXFLLy5WcUdPWlRILnVsdTMzZEhPaUJFOEJ5T2hKSXJkQXUyJywgJzAnLCAnMCcsICcxMjcuMC4wLjEnLCAnMjAyNS0wNC0yMSAxOTozODoyMCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsICcyMDI1LTA0LTIxIDE5OjM4OjIwJywgJ+euoeeQhuWRmCcpOworSU5TRVJUIElOVE8gYHN5c191c2VyYCBWQUxVRVMgKDIsIDEwNSwgJ3J5JywgJ+iLpeS+nScsICcwMCcsICdyeUBxcS5jb20nLCAnMTU2NjY2NjY2NjYnLCAnMScsICcnLCAnJDJhJDEwJDdKQjcyMHl1YlZTWnZVSTByRXFLLy5WcUdPWlRILnVsdTMzZEhPaUJFOEJ5T2hKSXJkQXUyJywgJzAnLCAnMCcsICcxMjcuMC4wLjEnLCAnMjAyNS0wNC0yMCAxNjoyOTo1NCcsICdhZG1pbicsICcyMDI1LTA0LTIwIDE2OjI5OjU0JywgJycsIE5VTEwsICfmtYvor5XlkZgnKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBzeXNfdXNlcl9wb3N0CistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgc3lzX3VzZXJfcG9zdGA7CitDUkVBVEUgVEFCTEUgYHN5c191c2VyX3Bvc3RgICAoCisgIGB1c2VyX2lkYCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn55So5oi3SUQnLAorICBgcG9zdF9pZGAgYmlnaW50IE5PVCBOVUxMIENPTU1FTlQgJ+Wyl+S9jUlEJywKKyAgUFJJTUFSWSBLRVkgKGB1c2VyX2lkYCwgYHBvc3RfaWRgKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQ0hBUkFDVEVSIFNFVCA9IHV0ZjhtYjQgQ09MTEFURSA9IHV0ZjhtYjRfMDkwMF9haV9jaSBDT01NRU5UID0gJ+eUqOaIt+S4juWyl+S9jeWFs+iBlOihqCcgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2Ygc3lzX3VzZXJfcG9zdAorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TRVJUIElOVE8gYHN5c191c2VyX3Bvc3RgIFZBTFVFUyAoMSwgMSk7CitJTlNFUlQgSU5UTyBgc3lzX3VzZXJfcG9zdGAgVkFMVUVTICgyLCAyKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciBzeXNfdXNlcl9yb2xlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgc3lzX3VzZXJfcm9sZWA7CitDUkVBVEUgVEFCTEUgYHN5c191c2VyX3JvbGVgICAoCisgIGB1c2VyX2lkYCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn55So5oi3SUQnLAorICBgcm9sZV9pZGAgYmlnaW50IE5PVCBOVUxMIENPTU1FTlQgJ+inkuiJsklEJywKKyAgUFJJTUFSWSBLRVkgKGB1c2VyX2lkYCwgYHJvbGVfaWRgKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQ0hBUkFDVEVSIFNFVCA9IHV0ZjhtYjQgQ09MTEFURSA9IHV0ZjhtYjRfMDkwMF9haV9jaSBDT01NRU5UID0gJ+eUqOaIt+WSjOinkuiJsuWFs+iBlOihqCcgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2Ygc3lzX3VzZXJfcm9sZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TRVJUIElOVE8gYHN5c191c2VyX3JvbGVgIFZBTFVFUyAoMSwgMSk7CitJTlNFUlQgSU5UTyBgc3lzX3VzZXJfcm9sZWAgVkFMVUVTICgyLCAyKTsKKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGFibGUgc3RydWN0dXJlIGZvciB0cmFja2VyX3Byb2plY3QKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGB0cmFja2VyX3Byb2plY3RgOworQ1JFQVRFIFRBQkxFIGB0cmFja2VyX3Byb2plY3RgICAoCisgIGBwcm9qZWN0X2lkYCBiaWdpbnQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQgQ09NTUVOVCAn6aG555uuSUQnLAorICBgcHJvamVjdF9uYW1lYCB2YXJjaGFyKDEwMCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+mhueebruWQjeensCcsCisgIGBkZXNjcmlwdGlvbmAgdmFyY2hhcigyNTUpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn6aG555uu5o+P6L+wJywKKyAgYHN0YXR1c2AgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnYWN0aXZlJyBDT01NRU5UICfpobnnm67nirbmgIHvvIhhY3RpdmU6IOa/gOa0uywgaW5hY3RpdmU6IOS4jea0u+i3g++8iScsCisgIGBjcmVhdGVfYnlgIHZhcmNoYXIoNjQpIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJycgQ09NTUVOVCAn5Yib5bu66ICFJywKKyAgYGNyZWF0ZV90aW1lYCBkYXRldGltZSBOVUxMIERFRkFVTFQgTlVMTCBDT01NRU5UICfliJvlu7rml7bpl7QnLAorICBgdXBkYXRlX2J5YCB2YXJjaGFyKDY0KSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTlVMTCBERUZBVUxUICcnIENPTU1FTlQgJ+abtOaWsOiAhScsCisgIGB1cGRhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5pu05paw5pe26Ze0JywKKyAgUFJJTUFSWSBLRVkgKGBwcm9qZWN0X2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIEFVVE9fSU5DUkVNRU5UID0gMTAyIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfpobnnm67ooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIHRyYWNrZXJfcHJvamVjdAorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TRVJUIElOVE8gYHRyYWNrZXJfcHJvamVjdGAgVkFMVUVTICgxLCAncHJvamVjdF90ZXN0MScsICd0ZXN0JywgJ2FjdGl2ZScsICcnLCBOVUxMLCAnJywgTlVMTCk7CitJTlNFUlQgSU5UTyBgdHJhY2tlcl9wcm9qZWN0YCBWQUxVRVMgKDEwMSwgJ3Byb2plY3QyJywgJycsICdhY3RpdmUnLCAnJywgTlVMTCwgJycsIE5VTEwpOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIHRyYWNrZXJfcHJvamVjdF91c2VyCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgdHJhY2tlcl9wcm9qZWN0X3VzZXJgOworQ1JFQVRFIFRBQkxFIGB0cmFja2VyX3Byb2plY3RfdXNlcmAgICgKKyAgYHByb2plY3RfaWRgIGJpZ2ludCBOT1QgTlVMTCBDT01NRU5UICfpobnnm65JRCcsCisgIGB1c2VyX2lkYCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn55So5oi3SUQnLAorICBgcm9sZWAgdmFyY2hhcig1MCkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5PVCBOVUxMIENPTU1FTlQgJ+inkuiJsu+8iOeuoeeQhuWRmOOAgeaIkOWRmOetie+8iScsCisgIGBjcmVhdGVfdGltZWAgZGF0ZXRpbWUgTk9UIE5VTEwgQ09NTUVOVCAn5Yqg5YWl5pe26Ze0JywKKyAgUFJJTUFSWSBLRVkgKGBwcm9qZWN0X2lkYCwgYHVzZXJfaWRgKSBVU0lORyBCVFJFRQorKSBFTkdJTkUgPSBJbm5vREIgQ0hBUkFDVEVSIFNFVCA9IHV0ZjhtYjQgQ09MTEFURSA9IHV0ZjhtYjRfMDkwMF9haV9jaSBDT01NRU5UID0gJ+mhueebruS4jueUqOaIt+WFs+iBlOihqCcgUk9XX0ZPUk1BVCA9IER5bmFtaWM7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFJlY29yZHMgb2YgdHJhY2tlcl9wcm9qZWN0X3VzZXIKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOU0VSVCBJTlRPIGB0cmFja2VyX3Byb2plY3RfdXNlcmAgVkFMVUVTICgxMDEsIDEsICdhZG1pbicsICcyMDI1LTA0LTIwIDIxOjU4OjUzJyk7CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRhYmxlIHN0cnVjdHVyZSBmb3IgdHJhY2tlcl90YXNrCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBgdHJhY2tlcl90YXNrYDsKK0NSRUFURSBUQUJMRSBgdHJhY2tlcl90YXNrYCAgKAorICBgdGFza19pZGAgYmlnaW50IE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5UIENPTU1FTlQgJ+S7u+WKoUlEJywKKyAgYHByb2plY3RfaWRgIGJpZ2ludCBOT1QgTlVMTCBDT01NRU5UICfmiYDlsZ7pobnnm65JRCcsCisgIGB0YXNrX25hbWVgIHZhcmNoYXIoMTAwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn5Lu75Yqh5ZCN56ewJywKKyAgYGRlc2NyaXB0aW9uYCB2YXJjaGFyKDI1NSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfku7vliqHmj4/ov7AnLAorICBgYXNzaWduZWRfdG9gIGJpZ2ludCBOT1QgTlVMTCBDT01NRU5UICfliIbphY3nu5nnmoTnlKjmiLdJRCcsCisgIGBzdGF0dXNgIHZhcmNoYXIoNTApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJ29wZW4nIENPTU1FTlQgJ+S7u+WKoeeKtuaAge+8iG9wZW46IOW+heWKniwgaW5fcHJvZ3Jlc3M6IOi/m+ihjOS4rSwgY2xvc2VkOiDlrozmiJDvvIknLAorICBgcHJpb3JpdHlgIHZhcmNoYXIoMjApIENIQVJBQ1RFUiBTRVQgdXRmOG1iNCBDT0xMQVRFIHV0ZjhtYjRfMDkwMF9haV9jaSBOVUxMIERFRkFVTFQgJ21lZGl1bScgQ09NTUVOVCAn5Lu75Yqh5LyY5YWI57qn77yIbG93LCBtZWRpdW0sIGhpZ2jvvIknLAorICBgY3JlYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+WIm+W7uuaXtumXtCcsCisgIGB1cGRhdGVfdGltZWAgZGF0ZXRpbWUgTlVMTCBERUZBVUxUIE5VTEwgQ09NTUVOVCAn5pu05paw5pe26Ze0JywKKyAgUFJJTUFSWSBLRVkgKGB0YXNrX2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIEFVVE9fSU5DUkVNRU5UID0gMTAwIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfku7vliqHooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIHRyYWNrZXJfdGFzaworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TRVJUIElOVE8gYHRyYWNrZXJfdGFza2AgVkFMVUVTICgxLCAxLCAndGFza18xJywgJycsIDIsICdvcGVuJywgJ21lZGl1bScsIE5VTEwsIE5VTEwpOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBzdHJ1Y3R1cmUgZm9yIHRyYWNrZXJfdGFza19sb2cKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGB0cmFja2VyX3Rhc2tfbG9nYDsKK0NSRUFURSBUQUJMRSBgdHJhY2tlcl90YXNrX2xvZ2AgICgKKyAgYGxvZ19pZGAgYmlnaW50IE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5UIENPTU1FTlQgJ+aXpeW/l0lEJywKKyAgYHRhc2tfaWRgIGJpZ2ludCBOT1QgTlVMTCBDT01NRU5UICfku7vliqFJRCcsCisgIGB1c2VyX2lkYCBiaWdpbnQgTk9UIE5VTEwgQ09NTUVOVCAn5pON5L2c55So5oi3SUQnLAorICBgYWN0aW9uYCB2YXJjaGFyKDUwKSBDSEFSQUNURVIgU0VUIHV0ZjhtYjQgQ09MTEFURSB1dGY4bWI0XzA5MDBfYWlfY2kgTk9UIE5VTEwgQ09NTUVOVCAn5pON5L2c57G75Z6L77yI5Yib5bu644CB5pu05paw44CB5Yig6Zmk77yJJywKKyAgYGRlc2NyaXB0aW9uYCB2YXJjaGFyKDI1NSkgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF8wOTAwX2FpX2NpIE5VTEwgREVGQVVMVCAnJyBDT01NRU5UICfmk43kvZzmj4/ov7AnLAorICBgY3JlYXRlX3RpbWVgIGRhdGV0aW1lIE5VTEwgREVGQVVMVCBOVUxMIENPTU1FTlQgJ+WIm+W7uuaXtumXtCcsCisgIFBSSU1BUlkgS0VZIChgbG9nX2lkYCkgVVNJTkcgQlRSRUUKKykgRU5HSU5FID0gSW5ub0RCIEFVVE9fSU5DUkVNRU5UID0gMTAwIENIQVJBQ1RFUiBTRVQgPSB1dGY4bWI0IENPTExBVEUgPSB1dGY4bWI0XzA5MDBfYWlfY2kgQ09NTUVOVCA9ICfku7vliqHml6Xlv5fooagnIFJPV19GT1JNQVQgPSBEeW5hbWljOworCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBSZWNvcmRzIG9mIHRyYWNrZXJfdGFza19sb2cKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lOU0VSVCBJTlRPIGB0cmFja2VyX3Rhc2tfbG9nYCBWQUxVRVMgKDEsIDEsIDEsICd0ZXN0JywgJycsICcyMDI1LTA0LTIwIDIyOjAyOjQ3Jyk7CisKK1NFVCBGT1JFSUdOX0tFWV9DSEVDS1MgPSAxOwpkaWZmIC0tZ2l0ICJhL3RvcnJlbnRzLzEvXDM1MVwyMzFcMjAwXDM1MVwyNDNcMjM2XDM1MFwyNzVcMjU2Lm1wMy50b3JyZW50IiAiYi90b3JyZW50cy8xL1wzNTFcMjMxXDIwMFwzNTFcMjQzXDIzNlwzNTBcMjc1XDI1Ni5tcDMudG9ycmVudCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjY2RhYgotLS0gL2Rldi9udWxsCisrKyAiYi90b3JyZW50cy8xL1wzNTFcMjMxXDIwMFwzNTFcMjQzXDIzNlwzNTBcMjc1XDI1Ni5tcDMudG9ycmVudCIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3RvcnJlbnRzLzEvXDM1MVwyNzBcMjQyXDM0NVwyNjBcMjc2XDM1MFwyMTJcMjYxXDM0NVwyNTZcMjM2XDM1MVwyNTJcMjE0LnBkZi50b3JyZW50IiAiYi90b3JyZW50cy8xL1wzNTFcMjcwXDI0MlwzNDVcMjYwXDI3NlwzNTBcMjEyXDI2MVwzNDVcMjU2XDIzNlwzNTFcMjUyXDIxNC5wZGYudG9ycmVudCIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwM2NjMwotLS0gL2Rldi9udWxsCisrKyAiYi90b3JyZW50cy8xL1wzNTFcMjcwXDI0MlwzNDVcMjYwXDI3NlwzNTBcMjEyXDI2MVwzNDVcMjU2XDIzNlwzNTFcMjUyXDIxNC5wZGYudG9ycmVudCIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3RvcnJlbnRzLzEvXDM2MFwyMzdcMjMyXDI1NC5wbmcudG9ycmVudCIgImIvdG9ycmVudHMvMS9cMzYwXDIzN1wyMzJcMjU0LnBuZy50b3JyZW50IgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTk1YmY4Ci0tLSAvZGV2L251bGwKKysrICJiL3RvcnJlbnRzLzEvXDM2MFwyMzdcMjMyXDI1NC5wbmcudG9ycmVudCIKQEAgLTAsMCArMSBAQAorZDEwOmNyZWF0ZWQgYnkyMTpxQml0dG9ycmVudCB2NS4wLjQuMTAxMzpjcmVhdGlvbiBkYXRlaTE3NDUzMjgyMjhlNDppbmZvZDY6bGVuZ3RoaTg5NGU0Om5hbWU4OvCfmqwucG5nMTI6cGllY2UgbGVuZ3RoaTE2Mzg0ZTY6cGllY2VzMjA6VG+zSpn9zXsi1AU59C8z9pyPw89lZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK