IiBWaW0gc3ludGF4IGZpbGUKIiBMYW5ndWFnZToJUGFzY2FsCiIgVmVyc2lvbjogMi44CiIgTGFzdCBDaGFuZ2U6CTIwMDQvMTAvMTcgMTc6NDc6MzAKIiBNYWludGFpbmVyOiAgWGF2aWVyIENy6Wd1dCA8eGF2aWVyLmNyZWd1dEBlbnNlZWlodC5mcj4KIiBQcmV2aW91cyBNYWludGFpbmVyOglNYXJpbyBFdXNlYmlvIDxiaW9AZHEuZmN0LnVubC5wdD4KCiIgQ29udHJpYnV0b3JzOiBUaW0gQ2hhc2UgPHRjaGFzZUBjc2MuY29tPiwKIglTdGFzIEdyYWJvaXMgPHN0c2lAdnRyYWlscy5jb20+LAoiCU1hemVuIE5FSUZFUiA8bWF6ZW4ubmVpZmVyLjIwMDFAc3VwYWVyby5mcj4sCiIJS2xhdXMgSGFzdCA8S2xhdXMuSGFzdEBhcmNvci5uZXQ+LAoiCUF1c3RpbiBaaWVnbGVyIDxhdXN0aW5AaGFsb3N0YXR1ZS5jYT4sCiIJTWFya3VzIEtvZW5pZyA8bWFya3VzQHN0YmVyLWtvZW5pZy5kZT4KCiIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCiIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKaWYgdmVyc2lvbiA8IDYwMAogIHN5bnRheCBjbGVhcgplbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKICBmaW5pc2gKZW5kaWYKCgpzeW4gY2FzZSBpZ25vcmUKc3luIHN5bmMgbGluZXM9MjUwCgpzeW4ga2V5d29yZCBwYXNjYWxCb29sZWFuCXRydWUgZmFsc2UKc3luIGtleXdvcmQgcGFzY2FsQ29uZGl0aW9uYWwJaWYgZWxzZSB0aGVuCnN5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50CW5pbCBtYXhpbnQKc3luIGtleXdvcmQgcGFzY2FsTGFiZWwJCWNhc2UgZ290byBsYWJlbApzeW4ga2V5d29yZCBwYXNjYWxPcGVyYXRvcglhbmQgZGl2IGRvd250byBpbiBtb2Qgbm90IG9mIG9yIHBhY2tlZCB3aXRoCnN5biBrZXl3b3JkIHBhc2NhbFJlcGVhdAlkbyBmb3IgZG8gcmVwZWF0IHdoaWxlIHRvIHVudGlsCnN5biBrZXl3b3JkIHBhc2NhbFN0YXRlbWVudAlwcm9jZWR1cmUgZnVuY3Rpb24Kc3luIGtleXdvcmQgcGFzY2FsU3RhdGVtZW50CXByb2dyYW0gYmVnaW4gZW5kIGNvbnN0IHZhciB0eXBlCnN5biBrZXl3b3JkIHBhc2NhbFN0cnVjdAlyZWNvcmQKc3luIGtleXdvcmQgcGFzY2FsVHlwZQkJYXJyYXkgYm9vbGVhbiBjaGFyIGludGVnZXIgZmlsZSBwb2ludGVyIHJlYWwgc2V0CnN5biBrZXl3b3JkIHBhc2NhbFR5cGUJCXN0cmluZyB0ZXh0IHZhcmlhbnQKCgogICAgIiAyMDAxMTIyMmF6OiBBZGRlZCBuZXcgaXRlbXMuCnN5biBrZXl3b3JkIHBhc2NhbFRvZG8gY29udGFpbmVkCVRPRE8gRklYTUUgWFhYIERFQlVHIE5PVEUKCiAgICAiIDIwMDEwNzIzYXo6IFdoZW4gd2FudGVkLCBoaWdobGlnaHQgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2UgLS0gdGhpcyBpcwogICAgIiBiYXNlZCBvbiBjX3NwYWNlX2Vycm9yczsgdG8gZW5hYmxlLCB1c2UgInBhc2NhbF9zcGFjZV9lcnJvcnMiLgppZiBleGlzdHMoInBhc2NhbF9zcGFjZV9lcnJvcnMiKQogICAgaWYgIWV4aXN0cygicGFzY2FsX25vX3RyYWlsX3NwYWNlX2Vycm9yIikKICAgICAgICBzeW4gbWF0Y2ggcGFzY2FsU3BhY2VFcnJvciAiXHNcKyQiCiAgICBlbmRpZgogICAgaWYgIWV4aXN0cygicGFzY2FsX25vX3RhYl9zcGFjZV9lcnJvciIpCiAgICAgICAgc3luIG1hdGNoIHBhc2NhbFNwYWNlRXJyb3IgIiBcK1x0Im1lPWUtMQogICAgZW5kaWYKZW5kaWYKCgoKIiBTdHJpbmcKaWYgIWV4aXN0cygicGFzY2FsX29uZV9saW5lX3N0cmluZyIpCiAgc3luIHJlZ2lvbiAgcGFzY2FsU3RyaW5nIG1hdGNoZ3JvdXA9cGFzY2FsU3RyaW5nIHN0YXJ0PSsnKyBlbmQ9KycrIGNvbnRhaW5zPXBhc2NhbFN0cmluZ0VzY2FwZQogIGlmIGV4aXN0cygicGFzY2FsX2dwYyIpCiAgICBzeW4gcmVnaW9uICBwYXNjYWxTdHJpbmcgbWF0Y2hncm91cD1wYXNjYWxTdHJpbmcgc3RhcnQ9KyIrIGVuZD0rIisgY29udGFpbnM9cGFzY2FsU3RyaW5nRXNjYXBlR1BDCiAgZWxzZQogICAgc3luIHJlZ2lvbiAgcGFzY2FsU3RyaW5nRXJyb3IgbWF0Y2hncm91cD1wYXNjYWxTdHJpbmdFcnJvciBzdGFydD0rIisgZW5kPSsiKyBjb250YWlucz1wYXNjYWxTdHJpbmdFc2NhcGUKICBlbmRpZgplbHNlCiAgIndyb25nIHN0cmluZ3MKICBzeW4gcmVnaW9uICBwYXNjYWxTdHJpbmdFcnJvciBtYXRjaGdyb3VwPXBhc2NhbFN0cmluZ0Vycm9yIHN0YXJ0PSsnKyBlbmQ9KycrIGVuZD0rJCsgY29udGFpbnM9cGFzY2FsU3RyaW5nRXNjYXBlCiAgaWYgZXhpc3RzKCJwYXNjYWxfZ3BjIikKICAgIHN5biByZWdpb24gIHBhc2NhbFN0cmluZ0Vycm9yIG1hdGNoZ3JvdXA9cGFzY2FsU3RyaW5nRXJyb3Igc3RhcnQ9KyIrIGVuZD0rIisgZW5kPSskKyBjb250YWlucz1wYXNjYWxTdHJpbmdFc2NhcGVHUEMKICBlbHNlCiAgICBzeW4gcmVnaW9uICBwYXNjYWxTdHJpbmdFcnJvciBtYXRjaGdyb3VwPXBhc2NhbFN0cmluZ0Vycm9yIHN0YXJ0PSsiKyBlbmQ9KyIrIGVuZD0rJCsgY29udGFpbnM9cGFzY2FsU3RyaW5nRXNjYXBlCiAgZW5kaWYKCiAgInJpZ2h0IHN0cmluZ3MKICBzeW4gcmVnaW9uICBwYXNjYWxTdHJpbmcgbWF0Y2hncm91cD1wYXNjYWxTdHJpbmcgc3RhcnQ9KycrIGVuZD0rJysgb25lbGluZSBjb250YWlucz1wYXNjYWxTdHJpbmdFc2NhcGUKICAiIFRvIHNlZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiBzdHJpbmdzOgogICIgc3luIHJlZ2lvbiAgcGFzY2FsU3RyaW5nIG1hdGNoZ3JvdXA9cGFzY2FsU3RyaW5nRXJyb3Igc3RhcnQ9KycrIGVuZD0rJysgb25lbGluZSBjb250YWlucz1wYXNjYWxTdHJpbmdFc2NhcGUKICBpZiBleGlzdHMoInBhc2NhbF9ncGMiKQogICAgc3luIHJlZ2lvbiAgcGFzY2FsU3RyaW5nIG1hdGNoZ3JvdXA9cGFzY2FsU3RyaW5nIHN0YXJ0PSsiKyBlbmQ9KyIrIG9uZWxpbmUgY29udGFpbnM9cGFzY2FsU3RyaW5nRXNjYXBlR1BDCiAgZWxzZQogICAgc3luIHJlZ2lvbiAgcGFzY2FsU3RyaW5nRXJyb3IgbWF0Y2hncm91cD1wYXNjYWxTdHJpbmdFcnJvciBzdGFydD0rIisgZW5kPSsiKyBvbmVsaW5lIGNvbnRhaW5zPXBhc2NhbFN0cmluZ0VzY2FwZQogIGVuZGlmCmVuZApzeW4gbWF0Y2ggICBwYXNjYWxTdHJpbmdFc2NhcGUJCWNvbnRhaW5lZCAiJyciCnN5biBtYXRjaCAgIHBhc2NhbFN0cmluZ0VzY2FwZUdQQwljb250YWluZWQgJyIiJwoKCiIgc3luIG1hdGNoICAgcGFzY2FsSWRlbnRpZmllcgkJIlw8W2EtekEtWl9dW2EtekEtWjAtOV9dKlw+IgoKCmlmIGV4aXN0cygicGFzY2FsX3N5bWJvbF9vcGVyYXRvciIpCiAgc3luIG1hdGNoICAgcGFzY2FsU3ltYm9sT3BlcmF0b3IgICAgICAiWytcLS8qPV0iCiAgc3luIG1hdGNoICAgcGFzY2FsU3ltYm9sT3BlcmF0b3IgICAgICAiWzw+XT1cPSIKICBzeW4gbWF0Y2ggICBwYXNjYWxTeW1ib2xPcGVyYXRvciAgICAgICI8PiIKICBzeW4gbWF0Y2ggICBwYXNjYWxTeW1ib2xPcGVyYXRvciAgICAgICI6PSIKICBzeW4gbWF0Y2ggICBwYXNjYWxTeW1ib2xPcGVyYXRvciAgICAgICJbKCldIgogIHN5biBtYXRjaCAgIHBhc2NhbFN5bWJvbE9wZXJhdG9yICAgICAgIlwuXC4iCiAgc3luIG1hdGNoICAgcGFzY2FsU3ltYm9sT3BlcmF0b3IgICAgICAgIltcXi5dIgogIHN5biBtYXRjaCAgIHBhc2NhbE1hdHJpeERlbGltaXRlcgkiW11bXSIKICAiaWYgeW91IHByZWZlciB5b3UgY2FuIGhpZ2hsaWdodCB0aGUgcmFuZ2UKICAic3luIG1hdGNoICBwYXNjYWxNYXRyaXhEZWxpbWl0ZXIJIltcZFwrXC5cLlxkXCtdIgplbmRpZgoKc3luIG1hdGNoICBwYXNjYWxOdW1iZXIJCSItXD1cPFxkXCtcPiIKc3luIG1hdGNoICBwYXNjYWxGbG9hdAkJIi1cPVw8XGRcK1wuXGRcK1w+IgpzeW4gbWF0Y2ggIHBhc2NhbEZsb2F0CQkiLVw9XDxcZFwrXC5cZFwrW2VFXS1cPVxkXCtcPiIKc3luIG1hdGNoICBwYXNjYWxIZXhOdW1iZXIJIlwkWzAtOWEtZkEtRl1cK1w+IgoKaWYgZXhpc3RzKCJwYXNjYWxfbm9fdGFicyIpCiAgc3luIG1hdGNoIHBhc2NhbFNob3dUYWIgIlx0IgplbmRpZgoKc3luIHJlZ2lvbiBwYXNjYWxDb21tZW50CXN0YXJ0PSIoXCpcfHsiICBlbmQ9IlwqKVx8fSIgY29udGFpbnM9cGFzY2FsVG9kbyxwYXNjYWxTcGFjZUVycm9yCgoKaWYgIWV4aXN0cygicGFzY2FsX25vX2Z1bmN0aW9ucyIpCiAgIiBhcnJheSBmdW5jdGlvbnMKICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglwYWNrIHVucGFjawoKICAiIG1lbW9yeSBmdW5jdGlvbgogIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCURpc3Bvc2UgTmV3CgogICIgbWF0aCBmdW5jdGlvbnMKICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglBYnMgQXJjdGFuIENvcyBFeHAgTG4gU2luIFNxciBTcXJ0CgogICIgZmlsZSBmdW5jdGlvbnMKICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglFb2YgRW9sbiBXcml0ZSBXcml0ZWxuCiAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZAlJbnB1dCBPdXRwdXQKCiAgaWYgZXhpc3RzKCJwYXNjYWxfdHJhZGl0aW9uYWwiKQogICAgIiBUaGVzZSBmdW5jdGlvbnMgZG8gbm90IHNlZW0gdG8gYmUgZGVmaW5lZCBpbiBUdXJibyBQYXNjYWwKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldCBQYWdlIFB1dCAKICBlbmRpZgoKICAiIG9yZGluYWwgZnVuY3Rpb25zCiAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JT2RkIFByZWQgU3VjYwoKICAiIHRyYW5zZmVydCBmdW5jdGlvbnMKICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglDaHIgT3JkIFJvdW5kIFRydW5jCmVuZGlmCgoKaWYgIWV4aXN0cygicGFzY2FsX3RyYWRpdGlvbmFsIikKCiAgc3luIGtleXdvcmQgcGFzY2FsU3RhdGVtZW50CWNvbnN0cnVjdG9yIGRlc3RydWN0b3IgaW1wbGVtZW50YXRpb24gaW5oZXJpdGVkCiAgc3luIGtleXdvcmQgcGFzY2FsU3RhdGVtZW50CWludGVyZmFjZSB1bml0IHVzZXMKICBzeW4ga2V5d29yZCBwYXNjYWxNb2RpZmllcglhYnNvbHV0ZSBhc3NlbWJsZXIgZXh0ZXJuYWwgZmFyIGZvcndhcmQgaW5saW5lCiAgc3luIGtleXdvcmQgcGFzY2FsTW9kaWZpZXIJaW50ZXJydXB0IG5lYXIgdmlydHVhbCAKICBzeW4ga2V5d29yZCBwYXNjYWxBY2Nlcwlwcml2YXRlIHB1YmxpYyAKICBzeW4ga2V5d29yZCBwYXNjYWxTdHJ1Y3QJb2JqZWN0IAogIHN5biBrZXl3b3JkIHBhc2NhbE9wZXJhdG9yCXNobCBzaHIgeG9yCgogIHN5biByZWdpb24gcGFzY2FsUHJlUHJvYwlzdGFydD0iKFwqXCQiICBlbmQ9IlwqKSIgY29udGFpbnM9cGFzY2FsVG9kbwogIHN5biByZWdpb24gcGFzY2FsUHJlUHJvYwlzdGFydD0ie1wkIiAgZW5kPSJ9IgoKICBzeW4gcmVnaW9uICBwYXNjYWxBc20JCW1hdGNoZ3JvdXA9cGFzY2FsQXNtS2V5IHN0YXJ0PSJcPGFzbVw+IiBlbmQ9Ilw8ZW5kXD4iIGNvbnRhaW5zPXBhc2NhbENvbW1lbnQscGFzY2FsUHJlUHJvYwoKICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVNob3J0SW50IExvbmdJbnQgQnl0ZSBXb3JkCiAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlCeXRlQm9vbCBXb3JkQm9vbCBMb25nQm9vbAogIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJQ2FyZGluYWwgTG9uZ1dvcmQKICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVNpbmdsZSBEb3VibGUgRXh0ZW5kZWQgQ29tcAogIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJUENoYXIKCgogIGlmICFleGlzdHMgKCJwYXNjYWxfZnBjIikKICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQJUmVzdWx0CiAgZW5kaWYKCiAgaWYgZXhpc3RzKCJwYXNjYWxfZnBjIikKICAgIHN5biByZWdpb24gcGFzY2FsQ29tbWVudCAgICAgICAgc3RhcnQ9Ii8vIiBlbmQ9IiQiIGNvbnRhaW5zPXBhc2NhbFRvZG8scGFzY2FsU3BhY2VFcnJvcgogICAgc3luIGtleXdvcmQgcGFzY2FsU3RhdGVtZW50CWZhaWwgb3RoZXJ3aXNlIG9wZXJhdG9yCiAgICBzeW4ga2V5d29yZCBwYXNjYWxEaXJlY3RpdmUJcG9wc3RhY2sKICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQgc2VsZgogICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlTaG9ydFN0cmluZyBBbnNpU3RyaW5nIFdpZGVTdHJpbmcKICBlbmRpZgoKICBpZiBleGlzdHMoInBhc2NhbF9ncGMiKQogICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlTbWFsbEludAogICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlBbnNpQ2hhcgogICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlQQW5zaUNoYXIKICBlbmRpZgoKICBpZiBleGlzdHMoInBhc2NhbF9kZWxwaGkiKQogICAgc3luIHJlZ2lvbiBwYXNjYWxDb21tZW50CXN0YXJ0PSIvLyIgIGVuZD0iJCIgY29udGFpbnM9cGFzY2FsVG9kbyxwYXNjYWxTcGFjZUVycm9yCiAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVNtYWxsSW50IEludDY0CiAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCVJlYWw0OCBDdXJyZW5jeQogICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlBbnNpQ2hhciBXaWRlQ2hhcgogICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlTaG9ydFN0cmluZyBBbnNpU3RyaW5nIFdpZGVTdHJpbmcKICAgIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJUEFuc2lDaGFyIFBXaWRlQ2hhcgogICAgc3luIG1hdGNoICBwYXNjYWxGbG9hdAkiLVw9XDxcZFwrXC5cZFwrW2REXS1cPVxkXCtcPiIKICAgIHN5biBtYXRjaCAgcGFzY2FsU3RyaW5nRXNjYXBlCWNvbnRhaW5lZCAiI1sxMl1bMC05XVw9WzAtOV1cPSIKICAgIHN5biBrZXl3b3JkIHBhc2NhbFN0cnVjdAljbGFzcyBkaXNwaW50ZXJmYWNlCiAgICBzeW4ga2V5d29yZCBwYXNjYWxFeGNlcHRpb24JdHJ5IGV4Y2VwdCByYWlzZSBhdCBvbiBmaW5hbGx5CiAgICBzeW4ga2V5d29yZCBwYXNjYWxTdGF0ZW1lbnQJb3V0CiAgICBzeW4ga2V5d29yZCBwYXNjYWxTdGF0ZW1lbnQJbGlicmFyeSBwYWNrYWdlIAogICAgc3luIGtleXdvcmQgcGFzY2FsU3RhdGVtZW50CWluaXRpYWxpemF0aW9uIGZpbmFsaXphdGlvbiB1c2VzIGV4cG9ydHMKICAgIHN5biBrZXl3b3JkIHBhc2NhbFN0YXRlbWVudAlwcm9wZXJ0eSBvdXQgcmVzb3VyY2VzdHJpbmcgdGhyZWFkdmFyCiAgICBzeW4ga2V5d29yZCBwYXNjYWxNb2RpZmllcgljb250YWlucwogICAgc3luIGtleXdvcmQgcGFzY2FsTW9kaWZpZXIJb3ZlcnJpZGRlbiByZWludHJvZHVjZSBhYnN0cmFjdAogICAgc3luIGtleXdvcmQgcGFzY2FsTW9kaWZpZXIJb3ZlcnJpZGUgZXhwb3J0IGR5bmFtaWMgbmFtZSBtZXNzYWdlCiAgICBzeW4ga2V5d29yZCBwYXNjYWxNb2RpZmllcglkaXNwaWQgaW5kZXggc3RvcmVkIGRlZmF1bHQgbm9kZWZhdWx0IHJlYWRvbmx5CiAgICBzeW4ga2V5d29yZCBwYXNjYWxNb2RpZmllcgl3cml0ZW9ubHkgaW1wbGVtZW50cyBvdmVybG9hZCByZXF1aXJlcyByZXNpZGVudAogICAgc3luIGtleXdvcmQgcGFzY2FsQWNjZXMJcHJvdGVjdGVkIHB1Ymxpc2hlZCBhdXRvbWF0ZWQKICAgIHN5biBrZXl3b3JkIHBhc2NhbERpcmVjdGl2ZQlyZWdpc3RlciBwYXNjYWwgY3ZhciBjZGVjbCBzdGRjYWxsIHNhZmVjYWxsCiAgICBzeW4ga2V5d29yZCBwYXNjYWxPcGVyYXRvcglhcyBpcwogIGVuZGlmCgogIGlmIGV4aXN0cygicGFzY2FsX25vX2Z1bmN0aW9ucyIpCiAgICAic3luIGtleXdvcmQgcGFzY2FsTW9kaWZpZXIJcmVhZCB3cml0ZQogICAgIm1heSBjb25mdXNlIHdpdGggUmVhZCBhbmQgV3JpdGUgZnVuY3Rpb25zLiAgTm90IGVhc3kgdG8gaGFuZGxlLgogIGVsc2UKICAgICIgY29udHJvbCBmbG93IGZ1bmN0aW9ucwogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JQnJlYWsgQ29udGludWUgRXhpdCBIYWx0IFJ1bkVycm9yCgogICAgIiBvcmRpbmFsIGZ1bmN0aW9ucwogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JRGVjIEluYyBIaWdoIExvdwoKICAgICIgbWF0aCBmdW5jdGlvbnMKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUZyYWMgSW50IFBpCgogICAgIiBzdHJpbmcgZnVuY3Rpb25zCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglDb25jYXQgQ29weSBEZWxldGUgSW5zZXJ0IExlbmd0aCBQb3MgU3RyIFZhbAoKICAgICIgbWVtb3J5IGZ1bmN0aW9uCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglGcmVlTWVtIEdldE1lbSBNYXhBdmFpbCBNZW1BdmFpbAoKICAgICIgcG9pbnRlciBhbmQgYWRkcmVzcyBmdW5jdGlvbnMKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUFkZHIgQXNzaWduZWQgQ1NlZyBEU2VnIE9mcyBQdHIgU2VnIFNQdHIgU1NlZwoKICAgICIgbWlzYyBmdW5jdGlvbnMKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUV4Y2x1ZGUgRmlsbENoYXIgSGkgSW5jbHVkZSBMbyBNb3ZlIFBhcmFtQ291bnQKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVBhcmFtU3RyIFJhbmRvbSBSYW5kb21pemUgU2l6ZU9mIFN3YXAgVHlwZU9mCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglVcENhc2UKCiAgICAiIHByZWRlZmluZWQgdmFyaWFibGVzCiAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIEVycm9yQWRkciBFeGl0Q29kZSBFeGl0UHJvYyBGaWxlTW9kZSBGcmVlTGlzdAogICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBGcmVlWmVybyBIZWFwRW5kIEhlYXBFcnJvciBIZWFwT3JnIEhlYXBQdHIKICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQgSW5PdXRSZXMgT3ZyQ29kZUxpc3QgT3ZyRGVidWdQdHIgT3ZyRG9zSGFuZGxlCiAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIE92ckVtc0hhbmRsZSBPdnJIZWFwRW5kIE92ckhlYXBPcmcgT3ZySGVhcFB0cgogICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBPdnJIZWFwU2l6ZSBPdnJMb2FkTGlzdCBQcmVmaXhTZWcgUmFuZFNlZWQKICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQgU2F2ZUludDAwIFNhdmVJbnQwMiBTYXZlSW50MUIgU2F2ZUludDIxCiAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIFNhdmVJbnQyMyBTYXZlSW50MjQgU2F2ZUludDM0IFNhdmVJbnQzNQogICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBTYXZlSW50MzYgU2F2ZUludDM3IFNhdmVJbnQzOCBTYXZlSW50MzkKICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQgU2F2ZUludDNBIFNhdmVJbnQzQiBTYXZlSW50M0MgU2F2ZUludDNECiAgICBzeW4ga2V5d29yZCBwYXNjYWxQcmVkZWZpbmVkIFNhdmVJbnQzRSBTYXZlSW50M0YgU2F2ZUludDc1IFNlZ0EwMDAgU2VnQjAwMAogICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBTZWdCODAwIFNlbGVjdG9ySW5jIFN0YWNrTGltaXQgVGVzdDgwODcKCiAgICAiIGZpbGUgZnVuY3Rpb25zCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglBcHBlbmQgQXNzaWduIEJsb2NrUmVhZCBCbG9ja1dyaXRlIENoRGlyIENsb3NlCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglFcmFzZSBGaWxlUG9zIEZpbGVTaXplIEZsdXNoIEdldERpciBJT1Jlc3VsdAogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JTWtEaXIgUmVhZCBSZWFkbG4gUmVuYW1lIFJlc2V0IFJld3JpdGUgUm1EaXIKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVNlZWsgU2Vla0VvZiBTZWVrRW9sbiBTZXRUZXh0QnVmIFRydW5jYXRlCgogICAgIiBjcnQgdW5pdAogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JQXNzaWduQ3J0IENsckVvbCBDbHJTY3IgRGVsYXkgRGVsTGluZSBHb3RvWFkKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUhpZ2hWaWRlbyBJbnNMaW5lIEtleVByZXNzZWQgTG93VmlkZW8gTm9ybVZpZGVvCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglOb1NvdW5kIFJlYWRLZXkgU291bmQgVGV4dEJhY2tncm91bmQgVGV4dENvbG9yCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglUZXh0TW9kZSBXaGVyZVggV2hlcmVZIFdpbmRvdwogICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBDaGVja0JyZWFrIENoZWNrRU9GIENoZWNrU25vdyBEaXJlY3RWaWRlbwogICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBMYXN0TW9kZSBUZXh0QXR0ciBXaW5kTWluIFdpbmRNYXgKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uIEJpZ0N1cnNvciBDdXJzb3JPZmYgQ3Vyc29yT24KICAgIHN5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50IEJsYWNrIEJsdWUgR3JlZW4gQ3lhbiBSZWQgTWFnZW50YSBCcm93bgogICAgc3luIGtleXdvcmQgcGFzY2FsQ29uc3RhbnQgTGlnaHRHcmF5IERhcmtHcmF5IExpZ2h0Qmx1ZSBMaWdodEdyZWVuCiAgICBzeW4ga2V5d29yZCBwYXNjYWxDb25zdGFudCBMaWdodEN5YW4gTGlnaHRSZWQgTGlnaHRNYWdlbnRhIFllbGxvdyBXaGl0ZQogICAgc3luIGtleXdvcmQgcGFzY2FsQ29uc3RhbnQgQmxpbmsgU2NyZWVuV2lkdGggU2NyZWVuSGVpZ2h0IGJ3NDAKICAgIHN5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50IGNvNDAgYnc4MCBjbzgwIG1vbm8KICAgIHN5biBrZXl3b3JkIHBhc2NhbFByZWRlZmluZWQgVGV4dENoYXIgCgogICAgIiBET1MgdW5pdAogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JQWRkRGlzayBEaXNrRnJlZSBEaXNrU2l6ZSBEb3NFeGl0Q29kZSBEb3NWZXJzaW9uCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglFbnZDb3VudCBFbnZTdHIgRXhlYyBFeHBhbmQgRmluZENsb3NlIEZpbmRGaXJzdAogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JRmluZE5leHQgRlNlYXJjaCBGU3BsaXQgR2V0Q0JyZWFrIEdldERhdGUKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldEVudiBHZXRGQXR0ciBHZXRGVGltZSBHZXRJbnRWZWMgR2V0VGltZQogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JR2V0VmVyaWZ5IEludHIgS2VlcCBNU0RvcyBQYWNrVGltZSBTZXRDQnJlYWsKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVNldERhdGUgU2V0RkF0dHIgU2V0RlRpbWUgU2V0SW50VmVjIFNldFRpbWUKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVNldFZlcmlmeSBTd2FwVmVjdG9ycyBVblBhY2tUaW1lCiAgICBzeW4ga2V5d29yZCBwYXNjYWxDb25zdGFudAlGQ2FycnkgRlBhcml0eSBGQXV4aWxpYXJ5IEZaZXJvIEZTaWduIEZPdmVyZmxvdwogICAgc3luIGtleXdvcmQgcGFzY2FsQ29uc3RhbnQJSGlkZGVuIFN5c2ZpbGUgVm9sdW1lSWQgRGlyZWN0b3J5IEFyY2hpdmUKICAgIHN5biBrZXl3b3JkIHBhc2NhbENvbnN0YW50CUFueUZpbGUgZm1DbG9zZWQgZm1JbnB1dCBmbU91dHB1dCBmbUlub3V0CiAgICBzeW4ga2V5d29yZCBwYXNjYWxDb25zdGFudAlUZXh0UmVjTmFtZUxlbmd0aCBUZXh0UmVjQnVmU2l6ZQogICAgc3luIGtleXdvcmQgcGFzY2FsVHlwZQlDb21TdHIgUGF0aFN0ciBEaXJTdHIgTmFtZVN0ciBFeHRTdHIgU2VhcmNoUmVjCiAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCUZpbGVSZWMgVGV4dEJ1ZiBUZXh0UmVjIFJlZ2lzdGVycyBEYXRlVGltZQogICAgc3luIGtleXdvcmQgcGFzY2FsUHJlZGVmaW5lZCBEb3NFcnJvcgoKICAgICJHcmFwaCBVbml0CiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglBcmMgQmFyIEJhcjNEIENpcmNsZSBDbGVhckRldmljZSBDbGVhclZpZXdQb3J0CiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglDbG9zZUdyYXBoIERldGVjdEdyYXBoIERyYXdQb2x5IEVsbGlwc2UKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUZpbGxFbGxpcHNlIEZpbGxQb2x5IEZsb29kRmlsbCBHZXRBcmNDb29yZHMKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldEFzcGVjdFJhdGlvIEdldEJrQ29sb3IgR2V0Q29sb3IKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldERlZmF1bHRQYWxldHRlIEdldERyaXZlck5hbWUgR2V0RmlsbFBhdHRlcm4KICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldEZpbGxTZXR0aW5ncyBHZXRHcmFwaE1vZGUgR2V0SW1hZ2UKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldExpbmVTZXR0aW5ncyBHZXRNYXhDb2xvciBHZXRNYXhNb2RlIEdldE1heFgKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldE1heFkgR2V0TW9kZU5hbWUgR2V0TW9kZVJhbmdlIEdldFBhbGV0dGUKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUdldFBhbGV0dGVTaXplIEdldFBpeGVsIEdldFRleHRTZXR0aW5ncwogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JR2V0Vmlld1NldHRpbmdzIEdldFggR2V0WSBHcmFwaERlZmF1bHRzCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglHcmFwaEVycm9yTXNnIEdyYXBoUmVzdWx0IEltYWdlU2l6ZSBJbml0R3JhcGgKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUluc3RhbGxVc2VyRHJpdmVyIEluc3RhbGxVc2VyRm9udCBMaW5lIExpbmVSZWwKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCUxpbmVUbyBNb3ZlUmVsIE1vdmVUbyBPdXRUZXh0IE91dFRleHRYWQogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JUGllU2xpY2UgUHV0SW1hZ2UgUHV0UGl4ZWwgUmVjdGFuZ2xlCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglSZWdpc3RlckJHSURyaXZlciBSZWdpc3RlckJHSUZvbnQKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVJlc3RvcmVDUlRNb2RlIFNlY3RvciBTZXRBY3RpdmVQYWdlCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTZXRBbGxQYWxsZXR0ZSBTZXRBc3BlY3RSYXRpbyBTZXRCa0NvbG9yCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTZXRDb2xvciBTZXRGaWxsUGF0dGVybiBTZXRGaWxsU3R5bGUKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVNldEdyYXBoQnVmU2l6ZSBTZXRHcmFwaE1vZGUgU2V0TGluZVN0eWxlCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTZXRQYWxldHRlIFNldFJHQlBhbGV0dGUgU2V0VGV4dEp1c3RpZnkKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVNldFRleHRTdHlsZSBTZXRVc2VyQ2hhclNpemUgU2V0Vmlld1BvcnQKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVNldFZpc3VhbFBhZ2UgU2V0V3JpdGVNb2RlIFRleHRIZWlnaHQgVGV4dFdpZHRoCiAgICBzeW4ga2V5d29yZCBwYXNjYWxUeXBlCUFyY0Nvb3Jkc1R5cGUgRmlsbFBhdHRlcm5UeXBlIEZpbGxTZXR0aW5nc1R5cGUKICAgIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJTGluZVNldHRpbmdzVHlwZSBQYWxldHRlVHlwZSBQb2ludFR5cGUKICAgIHN5biBrZXl3b3JkIHBhc2NhbFR5cGUJVGV4dFNldHRpbmdzVHlwZSBWaWV3UG9ydFR5cGUKCiAgICAiIHN0cmluZyBmdW5jdGlvbnMKICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVN0ckFsbG9jIFN0ckJ1ZlNpemUgU3RyQ2F0IFN0ckNvbXAgU3RyQ29weQogICAgc3luIGtleXdvcmQgcGFzY2FsRnVuY3Rpb24JU3RyRGlzcG9zZSBTdHJFQ29weSBTdHJFbmQgU3RyRm10IFN0cklDb21wCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTdHJMQ2F0IFN0ckxDb21wIFN0ckxDb3B5IFN0ckxlbiBTdHJMRm10CiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTdHJMSUNvbXAgU3RyTG93ZXIgU3RyTW92ZSBTdHJOZXcgU3RyUGFzCiAgICBzeW4ga2V5d29yZCBwYXNjYWxGdW5jdGlvbglTdHJQQ29weSBTdHJQTENvcHkgU3RyUG9zIFN0clJTY2FuIFN0clNjYW4KICAgIHN5biBrZXl3b3JkIHBhc2NhbEZ1bmN0aW9uCVN0clVwcGVyCiAgZW5kaWYKCmVuZGlmCgoiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCiIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQoiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CmlmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9wYXNjYWxfc3luX2luaXRzIikKICBpZiB2ZXJzaW9uIDwgNTA4CiAgICBsZXQgZGlkX3Bhc2NhbF9zeW5faW5pdHMgPSAxCiAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgogIGVsc2UKICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgogIGVuZGlmCgogIEhpTGluayBwYXNjYWxBY2NlcwkJcGFzY2FsU3RhdGVtZW50CiAgSGlMaW5rIHBhc2NhbEJvb2xlYW4JCUJvb2xlYW4KICBIaUxpbmsgcGFzY2FsQ29tbWVudAkJQ29tbWVudAogIEhpTGluayBwYXNjYWxDb25kaXRpb25hbAlDb25kaXRpb25hbAogIEhpTGluayBwYXNjYWxDb25zdGFudAkJQ29uc3RhbnQKICBIaUxpbmsgcGFzY2FsRGVsaW1pdGVyCUlkZW50aWZpZXIKICBIaUxpbmsgcGFzY2FsRGlyZWN0aXZlCXBhc2NhbFN0YXRlbWVudAogIEhpTGluayBwYXNjYWxFeGNlcHRpb24JRXhjZXB0aW9uCiAgSGlMaW5rIHBhc2NhbEZsb2F0CQlGbG9hdAogIEhpTGluayBwYXNjYWxGdW5jdGlvbgkJRnVuY3Rpb24KICBIaUxpbmsgcGFzY2FsTGFiZWwJCUxhYmVsCiAgSGlMaW5rIHBhc2NhbE1hdHJpeERlbGltaXRlcglJZGVudGlmaWVyCiAgSGlMaW5rIHBhc2NhbE1vZGlmaWVyCQlUeXBlCiAgSGlMaW5rIHBhc2NhbE51bWJlcgkJTnVtYmVyCiAgSGlMaW5rIHBhc2NhbE9wZXJhdG9yCQlPcGVyYXRvcgogIEhpTGluayBwYXNjYWxQcmVkZWZpbmVkCXBhc2NhbFN0YXRlbWVudAogIEhpTGluayBwYXNjYWxQcmVQcm9jCQlQcmVQcm9jCiAgSGlMaW5rIHBhc2NhbFJlcGVhdAkJUmVwZWF0CiAgSGlMaW5rIHBhc2NhbFNwYWNlRXJyb3IJRXJyb3IKICBIaUxpbmsgcGFzY2FsU3RhdGVtZW50CVN0YXRlbWVudAogIEhpTGluayBwYXNjYWxTdHJpbmcJCVN0cmluZwogIEhpTGluayBwYXNjYWxTdHJpbmdFc2NhcGUJU3BlY2lhbAogIEhpTGluayBwYXNjYWxTdHJpbmdFc2NhcGVHUEMJU3BlY2lhbAogIEhpTGluayBwYXNjYWxTdHJpbmdFcnJvcglFcnJvcgogIEhpTGluayBwYXNjYWxTdHJ1Y3QJCXBhc2NhbFN0YXRlbWVudAogIEhpTGluayBwYXNjYWxTeW1ib2xPcGVyYXRvcglwYXNjYWxPcGVyYXRvcgogIEhpTGluayBwYXNjYWxUb2RvCQlUb2RvCiAgSGlMaW5rIHBhc2NhbFR5cGUJCVR5cGUKICBIaUxpbmsgcGFzY2FsVW5jbGFzc2lmaWVkCXBhc2NhbFN0YXRlbWVudAogICIgIEhpTGluayBwYXNjYWxBc20JCUFzc2VtYmxlcgogIEhpTGluayBwYXNjYWxFcnJvcgkJRXJyb3IKICBIaUxpbmsgcGFzY2FsQXNtS2V5CQlwYXNjYWxTdGF0ZW1lbnQKICBIaUxpbmsgcGFzY2FsU2hvd1RhYgkJRXJyb3IKCiAgZGVsY29tbWFuZCBIaUxpbmsKZW5kaWYKCgpsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJwYXNjYWwiCgoiIHZpbTogdHM9OCBzdz0yCg==