footer.footer{margin-top:0;font-size:.9375rem}footer.footer .inner-footer{max-width:75rem;margin:0 auto;padding-top:2.5rem;padding-bottom:2.5rem}footer.footer .inner-footer h3{font-size:1.5rem}footer.footer .inner-footer .footer-logo{display:block;padding-bottom:1.25rem}footer.footer .inner-footer .footer-logo img{max-width:17.5rem;max-height:5rem}footer.footer .inner-footer .footer-copyright{margin-bottom:1.25rem}footer.footer .inner-footer .footer-copyright p{margin-bottom:0}footer.footer .inner-footer .footer-menu ul{display:block;margin-top:.625rem}footer.footer .inner-footer .footer-menu ul li a{padding-top:.625rem;padding-bottom:.625rem;padding-left:0}footer.footer .inner-footer .footer-menu .menu .active>a,footer.footer .inner-footer .footer-menu .menu .is-active>a{background:unset}.page-navigation ul.pagination li span.current{line-height:1;text-decoration:none;display:block;padding:.3125rem .625rem;font-size:1.125rem;width:28px;height:28px}.pagination{margin-bottom:2.5rem;text-align:center;display:block}.pagination li{margin-right:.625rem;overflow:hidden;display:inline-block}.pagination li a{padding:.3125rem .625rem;font-size:1.125rem;width:28px;height:28px}.pagination li a:hover{border-bottom:0;text-decoration:none}.article-footer .navigation{margin-top:2.5rem;margin-bottom:2.5rem}.sidebar{color:#2a3060}.sidebar h4{padding-bottom:.625rem;font-size:1.4375rem}.sidebar h5{font-size:1.3125rem;font-weight:700}.sidebar a{color:#2a3060}.menu-sidebar-menu-container .menu li{width:100%;padding:.625rem .625rem .625rem 0}.menu-sidebar-menu-container .menu li a{padding-left:.3125rem;text-transform:uppercase}.menu-sidebar-menu-container .menu li a img{margin-right:1.25rem}.contact-container{background:#ededed;margin-top:2.5rem}.contact-details{padding-top:1.875rem;padding-bottom:1.875rem;position:relative;top:50%;transform:translateY(-50%)}.contact-details h4{margin-bottom:0}.contact-details i{font-size:2.5rem;margin-top:.625rem}.contact-details .email,.contact-details .telephone{margin-bottom:1.25rem}.contact-details .telephone p{margin-bottom:.3125rem}.contact-details .address,.contact-details .fax{margin-bottom:1.25rem}.contact-details .button{margin-top:1.25rem}.contact-details .contact-info p{margin-bottom:0}.contact-form-container{padding:2.5rem}@media screen and (max-width:39.99875em){.contact-form-container{padding:2.5rem 1.25rem}}.contact-form-container .contact-form{margin-top:2.5rem;margin-left:auto;margin-right:auto;max-width:52.5rem}.contact-form-container .contact-form h2{padding-bottom:.9375rem;margin-top:0;margin-bottom:1.875rem}@media screen and (max-width:39.99875em){.contact-form-container .contact-form h2{text-align:center}}.contact-form-container .contact-form ::-webkit-input-placeholder{opacity:1}.contact-form-container .contact-form :-moz-placeholder,.contact-form-container .contact-form ::-moz-placeholder{opacity:1}.contact-form-container .contact-form :-ms-input-placeholder{opacity:1}.contact-form-container .contact-form [type=checkbox]{margin-bottom:.3125rem}.contact-form-container .contact-form select{border-radius:.8125rem;margin-top:.625rem;border-color:#979797}.contact-form-container .contact-form textarea{height:6.875rem}.contact-form-container .contact-form [type=email],.contact-form-container .contact-form [type=tel],.contact-form-container .contact-form [type=text],.contact-form-container .contact-form [type=week],.contact-form-container .contact-form textarea{margin-top:.25rem;margin-bottom:1.25rem;border-color:#979797;box-shadow:none}.wpcf7 a,.wpcf7 label{color:#000}.wpcf7 p{margin-bottom:.3125rem}.wpcf7 .wpcf7-list-item.first{margin-top:.625rem}.wpcf7 .wpcf7-response-output{clear:both}.wpcf7 .button{border:0;margin-top:1.875rem;font-size:1.125rem;max-width:11.25rem;width:100%;padding:1.25rem .625rem;display:block;border-radius:.25rem;box-shadow:0 2px 4px 0 #858585}.grecaptcha-badge{display:none}.benefits-container{padding-left:0;padding-right:0}.benefits-container .benefits-hero{padding-left:0;padding-right:0;overflow:hidden}.benefits-container .benefits-hero img{transition:transform .5s ease;object-fit:cover;height:100%;width:100%}.benefits-container .benefits-hero img:hover{transform:scale(1.1)}.benefits-container .benefits-content{padding:1.875rem 1.25rem;position:relative;top:50%;transform:translateY(-50%)}@media print,screen and (min-width:64em){.benefits-container .benefits-content.full-width-container{padding-left:1.5rem;padding-right:8.5rem}}.benefits-container .benefits-content .benefits{margin-bottom:2.5rem}.benefits-container .benefits-content .benefits .benefit{margin-top:.625rem}.benefits-container .benefits-content .benefits .benefit i{font-size:1.25rem}.benefits-container .benefits-content .benefits .benefit p{margin-bottom:0}@media screen and (max-width:39.99875em){.benefits-container .benefits-content .button{margin-top:1.25rem}}.parallax-window{min-height:28.125rem;background:transparent;position:relative;overflow:hidden;margin-top:5rem;margin-bottom:5rem}.parallax-window .parallax-content{max-width:53.125rem;position:absolute;top:50%;left:0;right:0;margin-left:auto;margin-right:auto;transform:translateY(-50%);padding-right:1.25rem;padding-left:1.25rem}.parallax-window .parallax-content h2{text-shadow:0 1px 3px #454545}@media print,screen and (min-width:64em){.parallax-window .parallax-content h2{font-size:2.375rem}}.parallax-window .parallax-content .content{text-shadow:0 1px 3px #454545}.parallax-window .parallax-content .button{margin-top:1.25rem;padding:1.125rem .625rem;width:11.25rem}#latest-news{margin-top:3.75rem;margin-bottom:3.75rem}#latest-news .latest-news .article{margin-bottom:1.25rem;padding-left:1.25rem;padding-right:1.25rem;text-align:center;position:relative}#latest-news .latest-news .article .image{overflow:hidden;margin-bottom:1.875rem}#latest-news .latest-news .article .content,#latest-news .latest-news .article h4{min-height:6.25rem}#latest-news .latest-news .article .button{left:0;right:0;bottom:.625rem;margin-left:auto;margin-right:auto;width:11.25rem;padding:.75rem .625rem}#latest-news .button-solid{max-width:18.75rem;width:100%;padding:.9375rem .625rem;box-shadow:0 2px 4px 0 #858585}#testimonials{margin-top:2.5rem;margin-bottom:2.5rem;text-align:center}#testimonials h2{margin-bottom:1.25rem}#testimonials .testimonials .testimonial{position:relative;margin-bottom:2.5rem;margin-left:1.25rem;margin-right:1.25rem;padding-bottom:2.5rem}#testimonials .testimonials .testimonial a:hover{text-decoration:none}#testimonials .testimonials .testimonial .image{padding:1.25rem}#testimonials .testimonials .testimonial .image img{max-height:9.375rem;width:auto;margin-left:auto;margin-right:auto}#testimonials .testimonials .testimonial .content{box-shadow:0 2px 10px 0 #858585;padding:1.875rem 1.5625rem 5.625rem;height:21.875rem;overflow:hidden;position:relative}@media print,screen and (min-width:40em){#testimonials .testimonials .testimonial .content{height:25.625rem}}#testimonials .testimonials .testimonial .content .excerpt-wrapper{position:relative;top:50%;transform:translateY(-50%)}#testimonials .testimonials .testimonial .content .name-organisation-wrapper{position:absolute;left:0;right:0;bottom:1.25rem;margin-left:auto;margin-right:auto}#testimonials .testimonials .testimonial .content .name-organisation-wrapper .name{margin-top:1.25rem;margin-bottom:0}#testimonials .testimonials .testimonial .content .name-organisation-wrapper .organisation{margin-bottom:0}.features-container{padding-left:0;padding-right:0}.features-container .features{margin-top:2.5rem}.features-container .features .feature .content{padding:3.125rem 1.25rem 1.875rem}.features-container .features .feature .content .featured-content{position:relative;top:50%;transform:translateY(-50%)}@media print,screen and (min-width:40em){.features-container .features .feature .content{padding-left:2.5rem;padding-right:2.5rem}}@media print,screen and (min-width:64em){.features-container .features .feature .content{padding-left:3.75rem;padding-right:3.75rem}.features-container .features .feature .content .full-width-container{padding-left:8.5rem;padding-right:1.5rem}}.features-container .features .feature .content h2{margin-left:auto;margin-right:auto;margin-bottom:1.875rem}.features-container .features .feature .image{overflow:hidden}.features-container .features .feature .image img{transition:transform .5s ease;object-fit:cover;height:100%;width:100%}.features-container .features .feature .image img:hover{transform:scale(1.1)}.features-container .features .feature:nth-of-type(2n) .image{-ms-flex-order:1;order:1}.features-container .features .feature:nth-of-type(2n) .content{-ms-flex-order:2;order:2}@media print,screen and (min-width:64em){.features-container .features .feature:nth-of-type(2n) .content .full-width-container{padding-left:1.5rem;padding-right:8.5rem}}@media screen and (max-width:39.99875em){.features-container .features .feature:nth-of-type(odd) .image{-ms-flex-order:1;order:1}.features-container .features .feature:nth-of-type(odd) .content{-ms-flex-order:2;order:2}}.faq-container{margin-top:2.5rem;margin-bottom:2.5rem}.faq-container h2{margin-left:auto;margin-right:auto;margin-bottom:1.875rem}.faq-container li{margin-bottom:.625rem;border:1px solid #979797}.faq-container li .accordion-title:focus,.faq-container li .accordion-title:hover{background-color:unset}.faq-container li .accordion-title:before{color:#000;font-size:1rem;font-weight:700;margin-top:-.5625rem}.faq-container li a{padding-right:2.5rem}.faq-container li i{margin-right:.625rem}.video-container{margin-top:2.5rem;margin-bottom:2.5rem}.video-container h2{margin-left:auto;margin-right:auto;margin-bottom:1.875rem}.video-container .button{padding:1.25rem 1.875rem;margin-top:2.5rem;margin-left:auto;margin-right:auto;max-width:15rem;display:block;position:relative;border-radius:.5rem;box-shadow:0 2px 4px 0 #a1a1a1}#logo-carousel{margin-top:1.25rem;margin-bottom:1.25rem}#logo-carousel h2{text-align:center;width:100%;margin-bottom:2.5rem}#logo-carousel .logo-carousel .logo img{max-width:225px;max-height:125px;margin-left:auto;margin-right:auto;width:100%;height:auto;object-fit:contain;filter:gray;filter:grayscale(1);transition:all .5s ease;opacity:.6}#logo-carousel .logo-carousel .logo img:hover{filter:none;opacity:1}#logo-carousel .slick-track{display:-ms-flexbox;display:flex}#logo-carousel .slick-track .slick-slide{display:-ms-flexbox;display:flex;height:auto;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.social-container .social{margin-right:.9375rem;float:left}.social-container .social a i{font-size:1.875rem}
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vbi1jcml0aWNhbC9sYXlvdXQvX2Zvb3Rlci5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy91dGlsL191bml0LnNjc3MiLCJub24tY3JpdGljYWwvcGFnZS10ZW1wbGF0ZXMvX2Jsb2cuc2NzcyIsIm5vbi1jcml0aWNhbC9wYXJ0cy9fc2lkZWJhci5zY3NzIiwiY3JpdGljYWwvY29tbW9uL19jb2xvdXJzLnNjc3MiLCJub24tY3JpdGljYWwvcGFydHMvX2NvbnRhY3QtY29udGFpbmVyLnNjc3MiLCJub24tY3JpdGljYWwvcGFydHMvX2NvbnRhY3QtZGV0YWlscy5zY3NzIiwibm9uLWNyaXRpY2FsL3BhcnRzL19jb250YWN0LWZvcm0uc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fYnJlYWtwb2ludC5zY3NzIiwibm9uLWNyaXRpY2FsL3BhcnRzL19jb250ZW50LWJlbmVmaXRzLnNjc3MiLCJub24tY3JpdGljYWwvcGFydHMvX3BhcmFsbGF4LnNjc3MiLCJub24tY3JpdGljYWwvcGFydHMvX2xhdGVzdC1uZXdzLnNjc3MiLCJub24tY3JpdGljYWwvcGFydHMvX3Rlc3RpbW9uaWFscy5zY3NzIiwibm9uLWNyaXRpY2FsL3BhcnRzL19mZWF0dXJlcy5zY3NzIiwibm9uLWNyaXRpY2FsL3BhcnRzL19mYXFzLnNjc3MiLCJub24tY3JpdGljYWwvcGFydHMvX3ZpZGVvLnNjc3MiLCJub24tY3JpdGljYWwvcGFydHMvX2xvZ29fY2Fyb3VzZWwuc2NzcyIsIm5vbi1jcml0aWNhbC9wYXJ0cy9fY29udGVudC1zb2NpYWwuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxjQUVJLGFBQWEsQUFDYixrQkNtRnFELENEakJ4RCxBQXJFRCw0QkFLUSxnQkNpRmlELEFEaEZqRCxjQUFjLEFBQ2QsbUJDK0VpRCxBRDlFakQscUJDOEVpRCxDRGxCcEQsQUFwRUwsK0JBWVksZ0JDMEU2QyxDRHpFaEQsQUFiVCx5Q0FnQlksY0FBYyxBQUVkLHNCQ29FNkMsQ0QvRGhELEFBdkJULDZDQW9CZ0Isa0JDa0V5QyxBRGpFekMsZUNpRXlDLENEaEU1QyxBQUlMLDhDQUdJLHFCQ3lENkMsQ0RsRGhELEFBcENULGdEQWtDZ0IsZUFBZ0IsQ0FDbkIsQUFuQ2IsNENBeUNnQixjQUFjLEFBQ2Qsa0JDNEN5QyxDRHBDNUMsQUFsRGIsaURBNkN3QixvQkN5Q2lDLEFEeENqQyx1QkN3Q2lDLEFEdkNqQyxjQUFlLENBQ2xCLEFBSVQscUhBQ0ksZ0JBQWlCLENBQ3BCLEFFdERiLCtDQUlnQixjQUFjLEFBQ2QscUJBQXFCLEFBQ3JCLGNBQWMsQUFDZCx5QkQrRXlDLEFDOUV6QyxtQkQ4RXlDLEFDN0V6QyxXQUFXLEFBQ1gsV0FBWSxDQUNmLEFBUWIsWUFDSSxxQkRrRXFELEFDakVyRCxrQkFBa0IsQUFDbEIsYUFBYyxDQTRCYixBQS9CTCxlQVFRLHFCRDJEaUQsQUMxRGpELGdCQUFnQixBQUNoQixvQkFBcUIsQ0FvQnBCLEFBZkQsaUJBRUkseUJEa0Q2QyxBQ2pEN0MsbUJEaUQ2QyxBQ2hEN0MsV0FBVyxBQUNYLFdBQVksQ0FNZixBQTFCVCx1QkFzQmdCLGdCQUFnQixBQUVoQixvQkFBcUIsQ0FDeEIsQUFTVCw0QkFDSSxrQkRnQ2lELEFDL0JqRCxvQkQrQmlELENDOUJwRCxBQ3hETCxTQUVJLGFDd0J3QixDRFgzQixBQWZELFlBSUssdUJGa0ZvRCxBRWpGakQsbUJGaUZpRCxDRWhGcEQsQUFOTCxZQVFRLG9CRjhFaUQsQUU3RWpELGVBQWdCLENBQ25CLEFBVkwsV0FhSyxhQ2F1QixDRFp2QixBQUlMLHNDQUdZLFdBQVcsQUFDWCxpQ0ZxRUMsQ0U3REosQUFQSSx3Q0FDRyxzQkY4RHlDLEFFN0R6Qyx3QkFBeUIsQ0FJNUIsQUFIRyw0Q0FDSSxvQkYyRHFDLENFMUR4QyxBRTVCakIsbUJBQ0ksbUJEU3dCLEFDUnhCLGlCSm9GcUQsQ0lsRnhELEFDSkQsaUJBQ0MscUJMcUZ3RCxBS3BGeEQsd0JMb0Z3RCxBS25GeEQsa0JBQWtCLEFBQ2hCLFFBQVEsQUFDUiwwQkFBMkIsQ0EyQzdCLEFBaERELG9CQVFJLGVBQWdCLENBQ2hCLEFBTUEsbUJBQ0MsaUJMc0VvRCxBS3JFcEQsa0JMcUVvRCxDS3BFcEQsQUFNQSxvREFDQSxxQkw2RG9ELENLekRwRCxBQTdCTCw4QkEyQk0sc0JMMkRtRCxDSzFEbkQsQUE1Qk4sZ0RBb0NLLHFCTGtEb0QsQ0tqRHBELEFBQ0QseUJBQ0Usa0JMK0NtRCxDSzlDcEQsQUF4Q0wsaUNBNENNLGVMK0NPLENLOUNQLEFDN0NOLHdCQUVJLGNOb0ZxRCxDTWZ4RCxBQ2tHSyx5Q0R6S04sd0JBS1Msc0JOaUZnRCxDTWZ4RCxDQUFBLEFBdkVELHNDQVVRLGtCTjRFaUQsQU0zRWpELGlCQUFpQixBQUNqQixrQkFBa0IsQUFDbEIsaUJOeUVpRCxDTWhCcEQsQUF0REcseUNBRUksd0JOb0U2QyxBTW5FN0MsYU53RUMsQU12RUQsc0JOa0U2QyxDTTlEaEQsQUNpSkgseUNEektOLHlDQXNCZ0IsaUJBQWtCLENBRXpCLENBQUEsQUFLRCxrRUFFSSxTQUFVLENBQ2IsQUFoQ1QsaUhBdUNZLFNBQVUsQ0FDYixBQXhDVCw2REEyQ1ksU0FBVSxDQUNiLEFBNUNULHNEQStDWSxzQk51QzZDLENNdENoRCxBQUVELDZDQUVJLHVCTmtDNkMsQU1qQzdDLG1CTmlDNkMsQU1oQzdDLG9CSDNDa0IsQ0c0Q3JCLEFBdkRULCtDQXlEWSxlTjZCNkMsQ001QmhELEFBMURULHVQQTZEWSxrQk55QjZDLEFNeEI3QyxzQk53QjZDLEFNdEI3QyxxQkhyRGtCLEFHdURsQixlQUFnQixDQUNuQixBQWNELHNCQUNJLFVIM0VHLENHNEVOLEFBVFQsU0FXWSxzQk5DNkMsQ01BaEQsQUFaVCw4QkFnQlEsa0JOSmlELENNS3BELEFBakJMLDhCQW1CUSxVQUFXLENBQ2QsQUFDRCxlQUVJLFNBQVMsQUFDVCxvQk5aaUQsQU1jakQsbUJOZGlELEFNZWpELG1CTmZpRCxBTWdCakQsV0FBVyxBQUNYLHdCTmpCaUQsQU1rQmpELGNBQWMsQUFFZCxxQk5wQmlELEFNc0JqRCw4QkFBK0IsQ0FLbEMsQUFNTCxrQkFDSSxZQUFhLENBQ2hCLEFFeEhELG9CQUlJLGVBQWUsQUFDZixlQUFnQixDQStFbkIsQUF6RUcsbUNBRUksZUFBZSxBQUNmLGdCQUFnQixBQUNoQixlQUFnQixDQWlCbkIsQUFURyx1Q0FDSSw4QkFBOEIsQUFDOUIsaUJBQWlCLEFBQ2pCLFlBQVksQUFDWixVQUFXLENBSWQsQUFIRyw2Q0FDSSxvQkFBcUIsQ0FDeEIsQUE5QmIsc0NBbUNLLHlCUmtEb0QsQVEvQ2pELGtCQUFrQixBQUNsQixRQUFRLEFBQ1IsMEJBQTJCLENBMkM5QixBRGdGQyx5Q0N0SE0sMkRBQ0ksb0JSdUN5QyxBUXRDekMsb0JSc0N5QyxDUXJDNUMsQ0FBQSxBQWhEYixnREE4RFksb0JSdUI2QyxDUVhoRCxBQVhHLHlEQUNJLGtCUnFCeUMsQ1FaNUMsQUF6RWIsMkRBb0VvQixpQlJpQnFDLENRaEJ4QyxBQXJFakIsMkRBdUVvQixlQUFnQixDQUNuQixBRGdHWCx5Q0MzRkUsOENBRVEsa0JSTXlDLENRSmhELENBQUEsQUNsRlQsaUJBQ0kscUJUcUZxRCxBU3BGckQsdUJBQXVCLEFBQ3ZCLGtCQUFrQixBQUNsQixnQkFBZ0IsQUFDaEIsZ0JUaUZxRCxBU2hGckQsa0JUZ0ZxRCxDUzlDeEQsQUF4Q0QsbUNBU0Usb0JUNkV1RCxBUzVFdkQsa0JBQWtCLEFBQ1osUUFBUSxBQUNSLE9BQU8sQUFDYixRQUFRLEFBQ1IsaUJBQWlCLEFBQ2pCLGtCQUFrQixBQUNmLDJCQUEyQixBQUMzQixzQlRxRW9ELEFTcEVwRCxvQlRvRW9ELENTaER2RCxBQXRDRixzQ0FxQk0sNkJBQThCLENBSTlCLEFGMklBLHlDRWhKRCxzQ0FHRSxrQlQrRGtELENTN0RuRCxDQUFBLEFBRUosNENBQ0MsNkJBQThCLENBQzlCLEFBN0JILDJDQWdDRyxtQlRzRHNELEFTckR0RCx5QlRxRHNELEFTcER0RCxjVG9Ec0QsQ1NsRHRELEFDcENILGFBRUMsbUJWb0Z3RCxBVW5GeEQscUJWbUZ3RCxDVXhCeEQsQUE5REQsbUNBa0JHLHNCVm9Fc0QsQVVuRXRELHFCVm1Fc0QsQVVsRXRELHNCVmtFc0QsQVVqRXRELGtCQUFrQixBQUNsQixpQkFBa0IsQ0EyQmYsQUFqRE4sMENBMEJJLGdCQUFnQixBQUNoQixzQlYyRHFELENVekRyRCxBQTdCSixrRkFtQ0ksa0JWbURxRCxDVWxEckQsQUFwQ0osMkNBdUNLLE9BQU8sQUFDUCxRQUFRLEFBQ1IsZVY2Q29ELEFVNUNwRCxpQkFBaUIsQUFDakIsa0JBQWtCLEFBQ2xCLGVWMENvRCxBVXpDcEQsc0JWeUNvRCxDVXhDckQsQUE5Q0osMkJBdURFLG1CVitCdUQsQVU5QnZELFdBQVcsQUFDWCx5QlY2QnVELEFVM0JqRCw4QkFBK0IsQ0FDckMsQUMzREYsY0FHQyxrQlhrRndELEFXakZ4RCxxQlhpRndELEFXaEZ4RCxpQkFBa0IsQ0E0RmxCLEFBakdELGlCQVFFLHFCWDZFdUQsQ1cxRXZELEFBTUEseUNBQ0Msa0JBQWtCLEFBQ2xCLHFCWGtFc0QsQVdqRXRELG9CWGlFc0QsQVdoRXRELHFCWGdFc0QsQVcvRHRELHFCWCtEc0QsQ1dRdEQsQUE3RkgsaURBeUJLLG9CQUFxQixDQUNyQixBQUVGLGdEQUlDLGVYcURxRCxDVzNDckQsQUExQ0osb0RBbUNLLG9CWGtEb0QsQVdqRHBELFdBQVcsQUFDWCxpQkFBaUIsQUFDakIsaUJBQWtCLENBR2xCLEFBekNMLGtEQTZDSSxnQ0FBZ0MsQUFDaEMsb0NYdUNxRCxBV3JDckQsaUJYcUNxRCxBV3BDckQsZ0JBQWdCLEFBQ2hCLGlCQUFrQixDQW9DbEIsQUo2RUUseUNJbktOLGtEQXNESyxnQlgrQm9ELENXQ3JELENBQUEsQUF0RkosbUVBOERLLGtCQUFrQixBQUNaLFFBQVEsQUFDUiwwQkFBMkIsQ0FFakMsQUFsRUwsNkVBc0VLLGtCQUFrQixBQUNsQixPQUFPLEFBQ1AsUUFBUSxBQUNSLGVYWW9ELEFXWHBELGlCQUFpQixBQUNqQixpQkFBa0IsQ0FTbEIsQUFwRkwsbUZBOEVNLG1CWE9tRCxBV05uRCxlQUFnQixDQUNoQixBQUNELDJGQUNDLGVBQWdCLENBQ2hCLEFDcEZOLG9CQUNDLGVBQWUsQUFDZixlQUFnQixDQStGaEIsQUFqR0QsOEJBSUMsaUJaa0Z3RCxDWVN2RCxBQS9GRixnREFpQkksaUNacUVxRCxDWXRDckQsQUE1QkEsa0VBQ0Msa0JBQWtCLEFBQ2xCLFFBQVEsQUFDUiwwQkFBMkIsQ0FDM0IsQUw0SUMseUNLcEtOLGdEQTRCSyxvQlowRG9ELEFZekRwRCxvQlp5RG9ELENZdENyRCxDQUFBLEFMb0hFLHlDS3RKSCxnREFtQkUscUJacURvRCxBWXBEcEQscUJab0RvRCxDWXRDckQsQUFoREosc0VBcUNNLG9CWmlEbUQsQVloRG5ELG9CWmdEbUQsQ1kvQ25ELENBQUEsQUFHRixtREFDQyxpQkFBaUIsQUFDakIsa0JBQWtCLEFBQ2xCLHNCWnlDb0QsQ1l4Q3BELEFBSUYsOENBQ0MsZUFBZ0IsQ0FVaEIsQUE3REosa0RBcURLLDhCQUE4QixBQUM5QixpQkFBaUIsQUFDUixZQUFZLEFBQ1osVUFBVyxDQUlwQixBQUhBLHdEQUNDLG9CQUFxQixDQUNyQixBQTNETiw4REFpRUssaUJBQVEsQUFBUixPQUFRLENBQ1IsQUFDRCxnRUFDQyxpQkFBUSxBQUFSLE9BQVEsQ0FXUixBTHFGQyx5Q0s1RkEsc0ZBQ0Msb0JaYWtELEFZWmxELG9CWllrRCxDWVhsRCxDQUFBLEFMOEZELHlDS3JGRCwrREFDQyxpQkFBUSxBQUFSLE9BQVEsQ0FDUixBQXRGTixpRUF3Rk0saUJBQVEsQUFBUixPQUFRLENBQ1IsQ0FBQSxBQ3hGTixlQUNDLGtCYm9Gd0QsQWFuRnhELG9CYm1Gd0QsQ2E1Q3hELEFBckNBLGtCQUNDLGlCQUFpQixBQUNqQixrQkFBa0IsQUFDbEIsc0JiOEV1RCxDYTdFdkQsQUFSRixrQkFXRSxzQmIwRXVELEFhekV2RCx3QlZGNEIsQ1U0QjVCLEFBdENGLGtGQW1CSSxzQkFBdUIsQ0FDdkIsQUFwQkosMENBd0JHLFdWbEJZLEFVbUJaLGViNERzRCxBYTNEdEQsZ0JBQWlCLEFBQ2pCLG9CYjBEc0QsQ2F6RHRELEFBQ0Qsb0JBRUMsb0Jic0RzRCxDYXJEdEQsQUFDRCxvQkFDQyxvQmJtRHNELENhaER0RCxBQ3JDSCxpQkFDQyxrQmRvRndELEFjbkZ4RCxvQmRtRndELENjdkR4RCxBQTlCRCxvQkFLRSxpQkFBaUIsQUFDakIsa0JBQWtCLEFBQ2xCLHNCZDhFdUQsQ2M3RXZELEFBUkYseUJBV0UseUJkMEV1RCxBY3pFdkQsa0JkeUV1RCxBY3hFdkQsaUJBQWlCLEFBQ2pCLGtCQUFrQixBQUNsQixnQmRzRXVELEFjckV2RCxjQUFjLEFBQ2Qsa0JBQWtCLEFBRWxCLG9CZGtFdUQsQWNoRXZELDhCQUErQixDQUkvQixBQzFCRixlQUNDLG1CZnFGd0QsQWVwRnhELHFCZm9Gd0QsQ2VsQ3hELEFBcERELGtCQU9FLGtCQUFrQixBQUNsQixXQUFXLEFBQ1gsb0JmNkV1RCxDZTVFdkQsQUFWRix3Q0FtQkksZ0JBQWdCLEFBQ2hCLGlCQUFpQixBQUNqQixpQkFBaUIsQUFDakIsa0JBQWtCLEFBQ2xCLFdBQVcsQUFDWCxZQUFZLEFBQ1osbUJBQW1CLEFBRW5CLFlBQVksQUFFWixvQkFBb0IsQUFDcEIsd0JBQXdCLEFBQ3hCLFVBQVksQ0FNWixBQXJDSiw4Q0FrQ0ssWUFBWSxBQUNaLFNBQVUsQ0FDVixBQU1KLDRCQUNDLG9CQUFhLEFBQWIsWUFBYSxDQUNkLEFBNUNELHlDQThDRSxvQkFBYSxBQUFiLGFBQWEsQUFDYixZQUFZLEFBQ1osc0JBQW1CLEFBQW5CLG1CQUFtQixBQUNuQixxQkFBdUIsQUFBdkIsc0JBQXVCLENBQ3hCLEFDakRHLDBCQUNJLHNCaEJvRmlELEFnQm5GakQsVUFBVyxDQU1kLEFBSk0sOEJBQ0Msa0JoQmdGNkMsQ2dCL0U3QyIsImZpbGUiOiJzdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb290ZXJcblxuZm9vdGVyLmZvb3RlciB7XG4gICAgLy9iYWNrZ3JvdW5kOiAkY29sb3ItYmFja2ctcHJpbWFyeTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIGZvbnQtc2l6ZTogcmVtLWNhbGMoMTUpO1xuICAgIC5pbm5lci1mb290ZXIge1xuICAgICAgICBtYXgtd2lkdGg6IHJlbS1jYWxjKDEyMDApO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgcGFkZGluZy10b3A6IHJlbS1jYWxjKDQwKTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IHJlbS1jYWxjKDQwKTtcblxuICAgICAgICBoMyB7XG4gICAgICAgICAgICAvL2NvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgICBmb250LXNpemU6IHJlbS1jYWxjKDI0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb290ZXItbG9nbyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIC8vcGFkZGluZy10b3A6IHJlbS1jYWxjKDQwKTtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiByZW0tY2FsYygyMCk7XG4gICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogcmVtLWNhbGMoMjgwKTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiByZW0tY2FsYyg4MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIC5mb290ZXItY29weXJpZ2h0IHtcbiAgICAgICAgICAgIC8vY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgICAgIC8vbWFyZ2luLXRvcDogcmVtLWNhbGMoMjApO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogcmVtLWNhbGMoMjApO1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgLy9jb2xvcjogJHdoaXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICBcbiAgICAgICAgLmZvb3Rlci1tZW51IHtcbiAgICAgICAgICBcbiAgICAgICAgICAgIHVsIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYygxMCk7XG4gICAgICAgICAgICAgICAgbGkge1xuICAgICAgICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiByZW0tY2FsYygxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogcmVtLWNhbGMoMTApOyAgXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7IFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVudSAuYWN0aXZlPmEsIC5tZW51IC5pcy1hY3RpdmU+YSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdW5zZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyLXNvY2lhbCB7XG4gICAgICAgICAgICAuc29jaWFsLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgLnNvY2lhbCB7XG4gICAgICAgICAgICAgICAgICAgIC8vZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgLy9mb250LXNpemU6IHJlbS1jYWxjKDI2KTsgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgIFxuICAgIH1cbn1cblxuXG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuJGdsb2JhbC1mb250LXNpemU6IDEwMCUgIWRlZmF1bHQ7XG5cbi8vLyBSZW1vdmVzIHRoZSB1bml0IChlLmcuIHB4LCBlbSwgcmVtKSBmcm9tIGEgdmFsdWUsIHJldHVybmluZyB0aGUgbnVtYmVyIG9ubHkuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJG51bSAtIE51bWJlciB0byBzdHJpcCB1bml0IGZyb20uXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgc2FtZSBudW1iZXIsIHNhbnMgdW5pdC5cbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW0pIHtcbiAgQHJldHVybiAkbnVtIC8gKCRudW0gKiAwICsgMSk7XG59XG5cbi8vLyBDb252ZXJ0cyBvbmUgb3IgbW9yZSBwaXhlbCB2YWx1ZXMgaW50byBtYXRjaGluZyByZW0gdmFsdWVzLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TGlzdH0gJHZhbHVlcyAtIE9uZSBvciBtb3JlIHZhbHVlcyB0byBjb252ZXJ0LiBCZSBzdXJlIHRvIHNlcGFyYXRlIHRoZW0gd2l0aCBzcGFjZXMgYW5kIG5vdCBjb21tYXMuIElmIHlvdSBuZWVkIHRvIGNvbnZlcnQgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgd3JhcCB0aGUgbGlzdCBpbiBwYXJlbnRoZXNlcy5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgW251bGxdIC0gVGhlIGJhc2UgdmFsdWUgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGByZW1gLiBJZiB5b3UncmUgdXNpbmcgRm91bmRhdGlvbiBvdXQgb2YgdGhlIGJveCwgdGhpcyBpcyAxNnB4LiBJZiB0aGlzIHBhcmFtZXRlciBpcyBgbnVsbGAsIHRoZSBmdW5jdGlvbiB3aWxsIHJlZmVyZW5jZSB0aGUgYCRnbG9iYWwtZm9udC1zaXplYCB2YXJpYWJsZSBhcyB0aGUgYmFzZS5cbi8vL1xuLy8vIEByZXR1cm5zIHtMaXN0fSBBIGxpc3Qgb2YgY29udmVydGVkIHZhbHVlcy5cbkBmdW5jdGlvbiByZW0tY2FsYygkdmFsdWVzLCAkYmFzZTogbnVsbCkge1xuICAkcmVtLXZhbHVlczogKCk7XG4gICRjb3VudDogbGVuZ3RoKCR2YWx1ZXMpO1xuXG4gIC8vIElmIG5vIGJhc2UgaXMgZGVmaW5lZCwgZGVmZXIgdG8gdGhlIGdsb2JhbCBmb250IHNpemVcbiAgQGlmICRiYXNlID09IG51bGwge1xuICAgICRiYXNlOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIElmIHRoZSBiYXNlIGZvbnQgc2l6ZSBpcyBhICUsIHRoZW4gbXVsdGlwbHkgaXQgYnkgMTZweFxuICAvLyBUaGlzIGlzIGJlY2F1c2UgMTAwJSBmb250IHNpemUgPSAxNnB4IGluIG1vc3QgYWxsIGJyb3dzZXJzXG4gIEBpZiB1bml0KCRiYXNlKSA9PSAnJScge1xuICAgICRiYXNlOiAoJGJhc2UgLyAxMDAlKSAqIDE2cHg7XG4gIH1cblxuICAvLyBVc2luZyByZW0gYXMgYmFzZSBhbGxvd3MgY29ycmVjdCBzY2FsaW5nXG4gIEBpZiB1bml0KCRiYXNlKSA9PSAncmVtJyB7XG4gICAgJGJhc2U6IHN0cmlwLXVuaXQoJGJhc2UpICogMTZweDtcbiAgfVxuXG4gIEBpZiAkY291bnQgPT0gMSB7XG4gICAgQHJldHVybiAtemYtdG8tcmVtKCR2YWx1ZXMsICRiYXNlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGNvdW50IHtcbiAgICAkcmVtLXZhbHVlczogYXBwZW5kKCRyZW0tdmFsdWVzLCAtemYtdG8tcmVtKG50aCgkdmFsdWVzLCAkaSksICRiYXNlKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZW0tdmFsdWVzO1xufVxuXG4vLyBDb252ZXJ0cyBhIHVuaXRsZXNzLCBwaXhlbCwgb3IgcmVtIHZhbHVlIHRvIGVtLCBmb3IgdXNlIGluIGJyZWFrcG9pbnRzLlxuQGZ1bmN0aW9uIC16Zi1icC10by1lbSgkdmFsdWUpIHtcbiAgLy8gUGl4ZWwgYW5kIHVuaXRsZXNzIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIHJlbXNcbiAgQGlmIHVuaXQoJHZhbHVlKSA9PSAncHgnIG9yIHVuaXRsZXNzKCR2YWx1ZSkge1xuICAgICR2YWx1ZTogcmVtLWNhbGMoJHZhbHVlLCAkYmFzZTogMTZweCk7XG4gIH1cblxuICAvLyBUaGVuIHRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgdG8gZW1zXG4gIEByZXR1cm4gc3RyaXAtdW5pdCgkdmFsdWUpICogMWVtO1xufVxuXG4vLy8gQ29udmVydHMgYSBwaXhlbCB2YWx1ZSB0byBtYXRjaGluZyByZW0gdmFsdWUuICpBbnkqIHZhbHVlIHBhc3NlZCwgcmVnYXJkbGVzcyBvZiB1bml0LCBpcyBhc3N1bWVkIHRvIGJlIGEgcGl4ZWwgdmFsdWUuIEJ5IGRlZmF1bHQsIHRoZSBiYXNlIHBpeGVsIHZhbHVlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSByZW0gdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgYCRnbG9iYWwtZm9udC1zaXplYCB2YXJpYWJsZS5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkdmFsdWUgLSBQaXhlbCB2YWx1ZSB0byBjb252ZXJ0LlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkYmFzZSBbbnVsbF0gLSBCYXNlIGZvciBwaXhlbCBjb252ZXJzaW9uLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcn0gQSBudW1iZXIgaW4gcmVtcywgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHRoZSBiYXNlIHBpeGVsIHZhbHVlLiByZW0gdmFsdWVzIGFyZSBwYXNzZWQgdGhyb3VnaCBhcyBpcy5cbkBmdW5jdGlvbiAtemYtdG8tcmVtKCR2YWx1ZSwgJGJhc2U6IG51bGwpIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIGEgbnVtYmVyXG4gIEBpZiB0eXBlLW9mKCR2YWx1ZSkgIT0gJ251bWJlcicge1xuICAgIEB3YXJuIGluc3BlY3QoJHZhbHVlKSArICcgd2FzIHBhc3NlZCB0byByZW0tY2FsYygpLCB3aGljaCBpcyBub3QgYSBudW1iZXIuJztcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuXG4gIC8vIFRyYW5zZm9ybSBlbSBpbnRvIHJlbSBpZiBzb21lb25lIGhhbmRzIG92ZXIgJ2VtJ3NcbiAgQGlmIHVuaXQoJHZhbHVlKSA9PSAnZW0nIHtcbiAgICAkdmFsdWU6IHN0cmlwLXVuaXQoJHZhbHVlKSAqIDFyZW07XG4gIH1cblxuICAvLyBDYWxjdWxhdGUgcmVtIGlmIHVuaXRzIGZvciAkdmFsdWUgaXMgbm90IHJlbSBvciBlbVxuICBAaWYgdW5pdCgkdmFsdWUpICE9ICdyZW0nIHtcbiAgICAkdmFsdWU6IHN0cmlwLXVuaXQoJHZhbHVlKSAvIHN0cmlwLXVuaXQoJGJhc2UpICogMXJlbTtcbiAgfVxuXG4gIC8vIFR1cm4gMHJlbSBpbnRvIDBcbiAgQGlmICR2YWx1ZSA9PSAwcmVtIHtcbiAgICAkdmFsdWU6IDA7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZTtcbn1cblxuLy8vIENvbnZlcnRzIGEgcGl4ZWwsIHBlcmNlbnRhZ2UsIHJlbSBvciBlbSB2YWx1ZSB0byBhIHVuaXRsZXNzIHZhbHVlIGJhc2VkIG9uIGEgZ2l2ZW4gZm9udCBzaXplLiBJZGVhbCBmb3Igd29ya2luZyBvdXQgdW5pdGxlc3MgbGluZSBoZWlnaHRzLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR2YWx1ZSAtIFZhbHVlIHRvIGNvbnZlcnQgdG8gYSB1bml0bGVzcyBsaW5lIGhlaWdodFxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkYmFzZSAtIFRoZSBmb250IHNpemUgdG8gdXNlIHRvIHdvcmsgb3V0IHRoZSBsaW5lIGhlaWdodCAtIGRlZmF1bHRzIHRvICRnbG9iYWwtZm9udC1zaXplXG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gVW5pdGxlc3MgbnVtYmVyXG5AZnVuY3Rpb24gdW5pdGxlc3MtY2FsYygkdmFsdWUsICRiYXNlOiBudWxsKSB7XG5cbiAgLy8gSWYgbm8gYmFzZSBpcyBkZWZpbmVkLCBkZWZlciB0byB0aGUgZ2xvYmFsIGZvbnQgc2l6ZVxuICBAaWYgJGJhc2UgPT0gbnVsbCB7XG4gICAgJGJhc2U6ICRnbG9iYWwtZm9udC1zaXplO1xuICB9XG5cbiAgLy8gRmlyc3QsIGxldHMgY29udmVydCBvdXIgJGJhc2UgdG8gcGl4ZWxzXG5cbiAgLy8gSWYgdGhlIGJhc2UgZm9udCBzaXplIGlzIGEgJSwgdGhlbiBtdWx0aXBseSBpdCBieSAxNnB4XG4gIEBpZiB1bml0KCRiYXNlKSA9PSAnJScge1xuICAgICRiYXNlOiAoJGJhc2UgLyAxMDAlKSAqIDE2cHg7XG4gIH1cblxuICBAaWYgdW5pdCgkYmFzZSkgPT0gJ3JlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICBAaWYgdW5pdCgkYmFzZSkgPT0gJ2VtJyB7XG4gICAgJGJhc2U6IHN0cmlwLXVuaXQoJGJhc2UpICogMTZweDtcbiAgfVxuXG4gIC8vIE5vdyBsZXQncyBjb252ZXJ0IG91ciB2YWx1ZSB0byBwaXhlbHMgdG9vXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJyUnIHtcbiAgICAkdmFsdWU6ICgkdmFsdWUgLyAxMDAlKSAqICRiYXNlO1xuICB9XG5cbiAgQGlmIHVuaXQoJHZhbHVlKSA9PSAncmVtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgKiAkYmFzZTtcbiAgfVxuXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ2VtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgKiAkYmFzZTtcbiAgfVxuXG4gIC8vICdweCdcbiAgQGlmIHVuaXQoJHZhbHVlKSA9PSAncHgnIHtcbiAgICBAcmV0dXJuIHN0cmlwLXVuaXQoJHZhbHVlKSAvIHN0cmlwLXVuaXQoJGJhc2UpO1xuICB9XG5cbiAgLy8gYXNzdW1lIHRoYXQgbGluZS1oZWlnaHRzIGdyZWF0ZXIgdGhhbiAxMCBhcmUgbWVhbnQgdG8gYmUgYWJzb2x1dGUgaW4gJ3B4J1xuICBAaWYgdW5pdGxlc3MoJHZhbHVlKSBhbmQgKCR2YWx1ZSA+IDEwKSB7XG4gICAgQHJldHVybiAkdmFsdWUgLyBzdHJpcC11bml0KCRiYXNlKTtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlO1xufVxuIiwiLy8gQmxvZyBTdHlsZXMgbm9uZSBjcml0aWNhbFxuXG4ucGFnZS1uYXZpZ2F0aW9uIHtcbiAgICB1bC5wYWdpbmF0aW9uIHtcbiAgICAgICAgbGkge1xuICAgICAgICAgICAgc3Bhbi5jdXJyZW50IHtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogcmVtLWNhbGMoNSAxMCk7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiByZW0tY2FsYygxOCk7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDI4cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyOHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cblxuXG4ucGFnaW5hdGlvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogcmVtLWNhbGMoNDApO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsaSB7XG4gICAgICAgIC8vYm9yZGVyOiAycHggc29saWQgJGNvbG9yLW1haW4tc2Vjb25kYXJ5O1xuICAgICAgICAvLy13ZWJraXQtYm9yZGVyLXJhZGl1czogcmVtLWNhbGMoMjUpO1xuICAgICAgICAvL2JvcmRlci1yYWRpdXM6IHJlbS1jYWxjKDI1KTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiByZW0tY2FsYygxMCk7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLmN1cnJlbnQge1xuICAgICAgICAgICAgLy9iYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItbWFpbi1zZWNvbmRhcnk7XG4gICAgICAgICAgICAvL2NvbG9yOiAkY29sb3ItbWFpbi1zZWNvbmRhcnk7XG4gICAgICAgIH1cbiAgICAgICAgYSB7XG4gICAgICAgICAgICAvL2NvbG9yOiAkY29sb3ItbWFpbi1zZWNvbmRhcnk7XG4gICAgICAgICAgICBwYWRkaW5nOiByZW0tY2FsYyg1IDEwKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogcmVtLWNhbGMoMTgpO1xuICAgICAgICAgICAgd2lkdGg6IDI4cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDI4cHg7XG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgIC8vY29sb3I6ICRjb2xvci1tYWluLXNlY29uZGFyeTtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIC8vYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbi5hcnRpY2xlLWZvb3RlciB7XG4gICAgLm5hdmlnYXRpb24ge1xuICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYyg0MCk7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDQwKTtcbiAgICB9XG59XG4iLCIvLyBzaWRlYmFyXG5cbi5zaWRlYmFyIHtcbiAgICAvL2JhY2tncm91bmQ6ICRjb2xvci1tYWluLXByaW1hcnk7XG4gICAgY29sb3I6ICRjb2xvci1tYWluLXByaW1hcnk7XG4gICAgaDQge1xuICAgIFx0cGFkZGluZy1ib3R0b206IHJlbS1jYWxjKDEwKTtcbiAgICAgICAgZm9udC1zaXplOiByZW0tY2FsYygyMyk7XG4gICAgfVxuICAgIGg1IHtcbiAgICAgICAgZm9udC1zaXplOiByZW0tY2FsYygyMSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgXHRjb2xvcjogJGNvbG9yLW1haW4tcHJpbWFyeTtcbiAgICB9XG59XG5cblxuLm1lbnUtc2lkZWJhci1tZW51LWNvbnRhaW5lciB7XG4gICAgLm1lbnUge1xuICAgICAgICBsaSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIHBhZGRpbmc6IHJlbS1jYWxjKDEwIDEwIDEwIDApO1xuICAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogcmVtLWNhbGMoNSk7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IHJlbS1jYWxjKDIwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICBcbiAgICB9XG59IiwiLy8gQ29sb3Vyc1xuXG4vLyRjb2xvci1tYWluLXByaW1hcnk6IHJnYigwLCA2MSwgODEpO1xuLy8kY29sb3ItbWFpbi1zZWNvbmRhcnk6IHJnYigyNTUsIDIxNywgMCk7XG4vLyRjb2xvci1tYWluLXRlcnRpYXJ5OiByZ2IoMTg3LCAxODcsIDE4Nyk7XG5cblxuXG4kd2hpdGU6ICNGRkZGRkY7XG4kYmxhY2s6ICMwMDAwMDA7XG5cblxuJGNvbG9yLWJhc2UtcHJpbWFyeTogI0VERURFRDsgLy8gbGlnaHQgZ3JleVxuJGNvbG9yLWJhc2Utc2Vjb25kYXJ5OiAjOTc5Nzk3OyAvLyAgZGFyayBncmV5XG4kY29sb3ItYmFzZS10ZXJ0aWFyeTogIzI4MjgyODsgLy8gIGRhcmtlc3QgZ3JleVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4kY29sb3ItbWFpbi1wcmltYXJ5OiAjMmEzMDYwOyAvLyBwdXJwbGVcbiRjb2xvci1tYWluLXNlY29uZGFyeTogI2Y1YTYyMzsgLy8gb3JhbmdlXG4kY29sb3ItbWFpbi10ZXJ0aWFyeTogIzJhMzA2MDsgLy8gcHVycGxlXG4kY29sb3ItbWFpbi1xdWF0ZXJuYXJ5OiAjY2NjY2NjOyAvLyBsaWdodCBncmV5XG5cblxuXG5cblxuXG4kY29sb3ItZm9udC10ZXJ0aWFyeTogIzk3OTc5NztcblxuJGNvbG9yLWJvcmRlci10ZXJ0aWFyeTogIzk3OTc5NztcblxuJGNvbG9yLWJvcmRlci1xdWF0ZXJuYXJ5OiAjOTc5Nzk3O1xuXG5cblxuXG5cbi8qXG4kY29sb3ItYmFzZS1wcmltYXJ5OiAjRjFGMUYxO1xuJGNvbG9yLWJhc2Utc2Vjb25kYXJ5OiAjRjFGMUYxO1xuJGNvbG9yLWJhc2UtdGVydGlhcnk6ICNGMUYxRjE7XG5cbiovIiwiLy8gY29udGFjdFxuXG4uY29udGFjdC1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1iYXNlLXByaW1hcnk7IFxuICAgIG1hcmdpbi10b3A6IHJlbS1jYWxjKDQwKTtcbiAgICBcbn1cblxuIiwiLy8gY29udGFjdCBkZXRhaWxzXG5cbi5jb250YWN0LWRldGFpbHMge1xuXHRwYWRkaW5nLXRvcDogcmVtLWNhbGMoMzApO1xuXHRwYWRkaW5nLWJvdHRvbTogcmVtLWNhbGMoMzApO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG4gIFx0dG9wOiA1MCU7XG4gIFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuXG4gIFx0aDQge1xuICBcdFx0bWFyZ2luLWJvdHRvbTogMDtcbiAgXHR9XG5cbiAgICBwIHtcbiAgICAgICAgLy9jb2xvcjogJHdoaXRlO1xuICAgIH1cblxuICAgIGkge1xuICAgIFx0Zm9udC1zaXplOiByZW0tY2FsYyg0MCk7XG4gICAgXHRtYXJnaW4tdG9wOiByZW0tY2FsYygxMCk7XG4gICAgfVxuXG4gICAgLmVtYWlsIHtcbiAgICBcdG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDIwKTtcbiAgICB9XG5cbiAgICAgLnRlbGVwaG9uZSB7XG4gICAgXHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYygyMCk7XG4gICAgXHRwIHtcbiAgICBcdFx0bWFyZ2luLWJvdHRvbTogcmVtLWNhbGMoNSk7XG4gICAgXHR9XG4gICAgfVxuXG4gICAgIC5mYXgge1xuICAgIFx0bWFyZ2luLWJvdHRvbTogcmVtLWNhbGMoMjApO1xuICAgIH1cblxuICAgICAuYWRkcmVzcyB7XG4gICAgXHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYygyMCk7XG4gICAgfVxuICAgIC5idXR0b24ge1xuICAgICAgbWFyZ2luLXRvcDogcmVtLWNhbGMoMjApO1xuICAgIH1cblxuXHQuY29udGFjdC1pbmZvIHtcblx0XHRwIHtcbiAgICBcdFx0bWFyZ2luLWJvdHRvbTogcmVtLWNhbGMoMCk7XG4gICAgXHR9XG5cdH1cblxufSIsIi8vIGNvbnRhY3QgZm9ybVxuXG4uY29udGFjdC1mb3JtLWNvbnRhaW5lciB7XG4gICAgLy9iYWNrZ3JvdW5kOiAkY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeTsgXG4gICAgcGFkZGluZzogcmVtLWNhbGMoNDAgNDApO1xuICAgXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBvbmx5KSB7XG4gICAgICAgICBwYWRkaW5nOiByZW0tY2FsYyg0MCAyMCk7XG4gICAgfVxuXG5cbiAgICAuY29udGFjdC1mb3JtIHtcbiAgICAgICAgbWFyZ2luLXRvcDogcmVtLWNhbGMoNDApO1xuICAgICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgICAgICBtYXgtd2lkdGg6IHJlbS1jYWxjKDg0MCk7XG4gICAgICAgIFxuXG4gICAgICAgIGgyIHtcbiAgICAgICAgICAgIC8vdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IHJlbS1jYWxjKDE1KTsgXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYygwKTsgXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYygzMCk7IFxuICAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgb25seSkge1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgXG5cblxuXG4gICAgICAgIDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7IC8qIFdlYktpdCBicm93c2VycyAqL1xuICAgICAgICAgICAgLy9jb2xvcjogJGNvbG9yLWZvbnQtdGVydGlhcnkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgOi1tb3otcGxhY2Vob2xkZXIgeyAvKiBNb3ppbGxhIEZpcmVmb3ggNCB0byAxOCAqL1xuICAgICAgICAgICAgLy9jb2xvcjogJGNvbG9yLWZvbnQtdGVydGlhcnkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgOjotbW96LXBsYWNlaG9sZGVyIHsgLyogTW96aWxsYSBGaXJlZm94IDE5KyAqL1xuICAgICAgICAgICAgLy9jb2xvcjogJGNvbG9yLWZvbnQtdGVydGlhcnkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7IC8qIEludGVybmV0IEV4cGxvcmVyIDEwKyAqL1xuICAgICAgICAgICAgLy9jb2xvcjogJGNvbG9yLWZvbnQtdGVydGlhcnkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFt0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYyg1KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdCB7XG4gICAgICAgICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IHJlbS1jYWxjKDEzKTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHJlbS1jYWxjKDEzKTtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IHJlbS1jYWxjKDEwKTtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWJhc2Utc2Vjb25kYXJ5O1xuICAgICAgICB9XG4gICAgICAgIHRleHRhcmVhIHtcbiAgICAgICAgICAgIGhlaWdodDogcmVtLWNhbGMoMTEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFt0eXBlPWVtYWlsXSwgW3R5cGU9dGVsXSwgW3R5cGU9dGV4dF0sIFt0eXBlPXdlZWtdLCB0ZXh0YXJlYSB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYyg0KTtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDIwKTtcbiAgICAgICAgICAgIC8vYmFja2dyb3VuZDogJGNvbG9yLWJhY2tncm91bmQtdGVydGlhcnk7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1iYXNlLXNlY29uZGFyeTtcbiAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgIH1cblxuXG4gICAgfVxufVxuXG5cbi53cGNmNyB7XG4gICBcbiAgICAgICAgbGFiZWwge1xuICAgICAgICAgICAgY29sb3I6ICRibGFjazsgIFxuICAgICAgICAgICAgLy9mb250LXdlaWdodDogNjAwO1xuICAgICAgICAgICAgLy9mb250LXNpemU6IHJlbS1jYWxjKDE0KTtcbiAgICAgICAgfVxuICAgICAgICBhIHtcbiAgICAgICAgICAgIGNvbG9yOiAkYmxhY2s7ICBcbiAgICAgICAgfVxuICAgICAgICBwIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDUpO1xuICAgICAgICB9XG4gIFxuXG4gICAgLndwY2Y3LWxpc3QtaXRlbS5maXJzdCB7XG4gICAgICAgIG1hcmdpbi10b3A6IHJlbS1jYWxjKDEwKTtcbiAgICB9XG4gICAgLndwY2Y3LXJlc3BvbnNlLW91dHB1dCB7XG4gICAgICAgIGNsZWFyOiBib3RoO1xuICAgIH1cbiAgICAuYnV0dG9uIHtcbiAgICAgICAgLy9mbG9hdDogcmlnaHQ7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogcmVtLWNhbGMoMzApO1xuICAgICAgICAvL2JhY2tncm91bmQtY29sb3I6ICRjb2xvci1tYWluLXByaW1hcnk7XG4gICAgICAgIGZvbnQtc2l6ZTogcmVtLWNhbGMoMTgpO1xuICAgICAgICBtYXgtd2lkdGg6IHJlbS1jYWxjKDE4MCk7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiByZW0tY2FsYygyMCAxMCAyMCAxMCk7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiByZW0tY2FsYyg0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogcmVtLWNhbGMoNCk7XG4gICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAycHggNHB4IDAgIzg1ODU4NTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IDAgIzg1ODU4NTtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAvL2JhY2tncm91bmQtY29sb3I6ICRjb2xvci1tYWluLXByaW1hcnk7XG4gICAgICAgICAgICAvL2NvbG9yOiAkd2hpdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG5cbi5ncmVjYXB0Y2hhLWJhZGdlIHtcbiAgICBkaXNwbGF5OiBub25lO1xufSIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGJyZWFrcG9pbnRzXG4vLy8vXG5cbi8vLyBBIGxpc3Qgb2YgbmFtZWQgYnJlYWtwb2ludHMuIFlvdSBjYW4gdXNlIHRoZXNlIHdpdGggdGhlIGBicmVha3BvaW50KClgIG1peGluIHRvIHF1aWNrbHkgY3JlYXRlIG1lZGlhIHF1ZXJpZXMuXG4vLy8gQHR5cGUgTWFwXG4kYnJlYWtwb2ludHM6IChcbiAgc21hbGw6IDAsXG4gIG1lZGl1bTogNjQwcHgsXG4gIGxhcmdlOiAxMDI0cHgsXG4gIHhsYXJnZTogMTIwMHB4LFxuICB4eGxhcmdlOiAxNDQwcHgsXG4pICFkZWZhdWx0O1xuXG4vLy8gVGhlIGxhcmdlc3QgbmFtZWQgYnJlYWtwb2ludCBpbiB3aGljaCB0byBpbmNsdWRlIHByaW50IGFzIGEgbWVkaWEgdHlwZVxuLy8vIEB0eXBlIEtleXdvcmRcbiRwcmludC1icmVha3BvaW50OiBsYXJnZSAhZGVmYXVsdDtcblxuJC16Zi16ZXJvLWJyZWFrcG9pbnQ6IHNtYWxsICFkZWZhdWx0O1xuXG4kLXpmLWJyZWFrcG9pbnRzLWtleXM6IG1hcC10by1saXN0KCRicmVha3BvaW50cywgJ2tleXMnKTtcblxuQGlmIG50aChtYXAtdmFsdWVzKCRicmVha3BvaW50cyksIDEpICE9IDAge1xuICBAZXJyb3IgJ1RoZSBmaXJzdCBrZXkgaW4gdGhlICRicmVha3BvaW50cyBtYXAgbXVzdCBoYXZlIGEgdmFsdWUgb2YgXCIwXCIuJztcbn1cbkBlbHNlIHtcbiAgJC16Zi16ZXJvLWJyZWFrcG9pbnQ6IG50aChtYXAta2V5cygkYnJlYWtwb2ludHMpLCAxKTtcbn1cblxuLy8vIEFsbCBvZiB0aGUgbmFtZXMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgb3V0cHV0IGFzIGNsYXNzZXMgaW4geW91ciBDU1MsIGxpa2UgYC5zbWFsbC0xMmAsIGAubWVkaXVtLTZgLCBhbmQgc28gb24uIEVhY2ggdmFsdWUgaW4gdGhpcyBsaXN0IG11c3QgYWxzbyBiZSBpbiB0aGUgYCRicmVha3BvaW50c2AgbWFwLlxuLy8vIEB0eXBlIExpc3RcbiRicmVha3BvaW50LWNsYXNzZXM6IChzbWFsbCBtZWRpdW0gbGFyZ2UpICFkZWZhdWx0O1xuXG4vLy8gR2VuZXJhdGVzIGEgbWVkaWEgcXVlcnkgc3RyaW5nIG1hdGNoaW5nIHRoZSBpbnB1dCB2YWx1ZS4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0byBzZWUgd2hhdCB0aGUgcG9zc2libGUgaW5wdXRzIGFyZS5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICR2YWwgW3NtYWxsXSAtIEJyZWFrcG9pbnQgbmFtZSwgb3IgcHgsIHJlbSwgb3IgZW0gdmFsdWUgdG8gcHJvY2Vzcy5cbkBmdW5jdGlvbiBicmVha3BvaW50KCR2YWw6ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gIC8vIFNpemUgb3Iga2V5d29yZFxuICAkYnA6IG50aCgkdmFsLCAxKTtcbiAgLy8gVmFsdWUgZm9yIG1heC13aWR0aCBtZWRpYSBxdWVyaWVzXG4gICRicC1tYXg6IDA7XG4gIC8vIERpcmVjdGlvbiBvZiBtZWRpYSBxdWVyeSAodXAsIGRvd24sIG9yIG9ubHkpXG4gICRkaXI6IGlmKGxlbmd0aCgkdmFsKSA+IDEsIG50aCgkdmFsLCAyKSwgdXApO1xuICAvLyBFdmVudHVhbCBvdXRwdXRcbiAgJHN0cjogJyc7XG4gIC8vIElzIGl0IGEgbmFtZWQgbWVkaWEgcXVlcnk/XG4gICRuYW1lZDogZmFsc2U7XG5cbiAgLy8gT3JpZW50YXRpb24gbWVkaWEgcXVlcmllcyBoYXZlIGEgdW5pcXVlIHN5bnRheFxuICBAaWYgJGJwID09ICdsYW5kc2NhcGUnIG9yICRicCA9PSAncG9ydHJhaXQnIHtcbiAgICBAcmV0dXJuICcob3JpZW50YXRpb246ICN7JGJwfSknO1xuICB9XG4gIEBlbHNlIGlmICRicCA9PSAncmV0aW5hJyB7XG4gICAgQHJldHVybiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSc7XG4gIH1cblxuICAvLyBUcnkgdG8gcHVsbCBhIG5hbWVkIGJyZWFrcG9pbnQgb3V0IG9mIHRoZSAkYnJlYWtwb2ludHMgbWFwXG4gIEBpZiB0eXBlLW9mKCRicCkgPT0gJ3N0cmluZycge1xuICAgIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICRicCkge1xuICAgICAgQGlmICRkaXIgPT0gJ29ubHknIG9yICRkaXIgPT0gJ2Rvd24nIHtcbiAgICAgICAgJGJwLW1heDogLXpmLW1hcC1uZXh0KCRicmVha3BvaW50cywgJGJwKTtcbiAgICAgIH1cblxuICAgICAgJGJwOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJGJwKTtcbiAgICAgICRuYW1lZDogdHJ1ZTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgJGJwOiAwO1xuICAgICAgQHdhcm4gJ2JyZWFrcG9pbnQoKTogXCIjeyR2YWx9XCIgaXMgbm90IGRlZmluZWQgaW4geW91ciAkYnJlYWtwb2ludHMgc2V0dGluZy4nO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbnZlcnQgYW55IHBpeGVsLCByZW0sIG9yIHVuaXRsZXNzIHZhbHVlIHRvIGVtXG4gICRicDogLXpmLWJwLXRvLWVtKCRicCk7XG4gIC8vIE1heCB2YWx1ZSBpcyAwLjJweCB1bmRlciB0aGUgbmV4dCBicmVha3BvaW50ICgwLjAyIC8gMTYgPSAwLjAwMTI1KS5cbiAgLy8gVXNlIGEgcHJlY2lzaW9uIHVuZGVyIDFweCB0byBzdXBwb3J0IGJyb3dzZXIgem9vbSwgYnV0IG5vdCB0byBsb3cgdG8gYXZvaWQgcm91bmRpbmcuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20venVyYi9mb3VuZGF0aW9uLXNpdGVzL2lzc3Vlcy8xMTMxM1xuICBAaWYgJGJwLW1heCB7XG4gICAgJGJwLW1heDogLXpmLWJwLXRvLWVtKCRicC1tYXgpIC0gLjAwMTI1O1xuICB9XG5cbiAgLy8gQ29uZGl0aW9ucyB0byBza2lwIG1lZGlhIHF1ZXJ5IGNyZWF0aW9uXG4gIC8vIC0gSXQncyBhIG5hbWVkIGJyZWFrcG9pbnQgdGhhdCByZXNvbHZlZCB0byBcIjAgZG93blwiIG9yIFwiMCB1cFwiXG4gIC8vIC0gSXQncyBhIG51bWVyaWMgYnJlYWtwb2ludCB0aGF0IHJlc29sdmVkIHRvIFwiMCBcIiArIGFueXRoaW5nXG4gIEBpZiAkYnAgPiAwZW0gb3IgJGRpciA9PSAnb25seScgb3IgJGRpciA9PSAnZG93bicge1xuICAgIC8vIGBvbmx5YCByYW5nZXMgdXNlIHRoZSBmb3JtYXQgYChtaW4td2lkdGg6IG4pIGFuZCAobWF4LXdpZHRoOiBuKWBcbiAgICBAaWYgJGRpciA9PSAnb25seScge1xuICAgICAgLy8gT25seSBuYW1lZCBtZWRpYSBxdWVyaWVzIGNhbiBoYXZlIGFuIFwib25seVwiIHJhbmdlXG4gICAgICBAaWYgJG5hbWVkID09IHRydWUge1xuICAgICAgICAvLyBPbmx5IHVzZSBcIm1pbi13aWR0aFwiIGlmIHRoZSBmbG9vciBpcyBncmVhdGVyIHRoYW4gMFxuICAgICAgICBAaWYgJGJwID4gMGVtIHtcbiAgICAgICAgICAkc3RyOiAkc3RyICsgJyhtaW4td2lkdGg6ICN7JGJwfSknO1xuXG4gICAgICAgICAgLy8gT25seSBhZGQgXCJhbmRcIiB0byB0aGUgbWVkaWEgcXVlcnkgaWYgdGhlcmUncyBhIGNlaWxpbmdcbiAgICAgICAgICBAaWYgJGJwLW1heCAhPSBudWxsIHtcbiAgICAgICAgICAgICRzdHI6ICRzdHIgKyAnIGFuZCAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgdXNlIFwibWF4LXdpZHRoXCIgaWYgdGhlcmUncyBhIGNlaWxpbmdcbiAgICAgICAgQGlmICRicC1tYXggIT0gbnVsbCB7XG4gICAgICAgICAgJHN0cjogJHN0ciArICcobWF4LXdpZHRoOiAjeyRicC1tYXh9KSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgQHdhcm4gJ2JyZWFrcG9pbnQoKTogT25seSBuYW1lZCBtZWRpYSBxdWVyaWVzIGNhbiBoYXZlIGFuIGBvbmx5YCByYW5nZS4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGBkb3duYCByYW5nZXMgdXNlIHRoZSBmb3JtYXQgYChtYXgtd2lkdGg6IG4pYFxuICAgIEBlbHNlIGlmICRkaXIgPT0gJ2Rvd24nIHtcbiAgICAgICRtYXg6IGlmKCRuYW1lZCwgJGJwLW1heCwgJGJwKTtcblxuICAgICAgLy8gU2tpcCBtZWRpYSBxdWVyeSBjcmVhdGlvbiBpZiBpbnB1dCB2YWx1ZSBpcyBleGFjdGx5IFwiMCBkb3duXCIsXG4gICAgICAvLyB1bmxlc3MgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgYXMgXCJzbWFsbCBkb3duXCIsIGluIHdoaWNoIGNhc2UgaXQncyBqdXN0IFwic21hbGwgb25seVwiXG4gICAgICBAaWYgJG5hbWVkIG9yICRicCA+IDBlbSB7XG4gICAgICAgIEBpZiAkbWF4ICE9IG51bGwge1xuICAgICAgICAgICRzdHI6ICRzdHIgKyAnKG1heC13aWR0aDogI3skbWF4fSknO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYHVwYCByYW5nZXMgdXNlIHRoZSBmb3JtYXQgYChtaW4td2lkdGg6IG4pYFxuICAgIEBlbHNlIGlmICRicCA+IDBlbSB7XG4gICAgICAkc3RyOiAkc3RyICsgJyhtaW4td2lkdGg6ICN7JGJwfSknO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJHN0cjtcbn1cblxuLy8vIFdyYXBzIGEgbWVkaWEgcXVlcnkgYXJvdW5kIHRoZSBjb250ZW50IHlvdSBwdXQgaW5zaWRlIHRoZSBtaXhpbi4gVGhpcyBtaXhpbiBhY2NlcHRzIGEgbnVtYmVyIG9mIHZhbHVlczpcbi8vLyAgLSBJZiBhIHN0cmluZyBpcyBwYXNzZWQsIHRoZSBtaXhpbiB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBgJGJyZWFrcG9pbnRzYCBtYXAsIGFuZCB1c2UgYSBtZWRpYSBxdWVyeSB0aGVyZS5cbi8vLyAgLSBJZiBhIHBpeGVsIHZhbHVlIGlzIHBhc3NlZCwgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYW4gZW0gdmFsdWUgdXNpbmcgYCRnbG9iYWwtZm9udC1zaXplYCBhcyB0aGUgYmFzZS5cbi8vLyAgLSBJZiBhIHJlbSB2YWx1ZSBpcyBwYXNzZWQsIHRoZSB1bml0IHdpbGwgYmUgY2hhbmdlZCB0byBlbS5cbi8vLyAgLSBJZiBhbiBlbSB2YWx1ZSBpcyBwYXNzZWQsIHRoZSB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMtaXMuXG4vLy9cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkdmFsdWUgLSBCcmVha3BvaW50IG5hbWUsIG9yIHB4LCByZW0sIG9yIGVtIHZhbHVlIHRvIHByb2Nlc3MuXG4vLy9cbi8vLyBAb3V0cHV0IElmIHRoZSBicmVha3BvaW50IGlzIFwiMHB4IGFuZCBsYXJnZXJcIiwgb3V0cHV0cyB0aGUgY29udGVudCBhcy1pcy4gT3RoZXJ3aXNlLCBvdXRwdXRzIHRoZSBjb250ZW50IHdyYXBwZWQgaW4gYSBtZWRpYSBxdWVyeS5cbkBtaXhpbiBicmVha3BvaW50KCR2YWx1ZSkge1xuICAkc3RyOiBicmVha3BvaW50KCR2YWx1ZSk7XG4gICRicDogaW5kZXgoJC16Zi1icmVha3BvaW50cy1rZXlzLCAkdmFsdWUpO1xuICAkcGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsICRwcmludC1icmVha3BvaW50KTtcblxuICAkb2xkLXpmLXNpemU6IG51bGw7XG5cbiAgLy8gTWFrZSBicmVha3BvaW50IHNpemUgYXZhaWxhYmxlIGFzIGEgdmFyaWFibGVcbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoLXpmLXNpemUpIHtcbiAgICAkb2xkLXpmLXNpemU6ICQtemYtc2l6ZTtcbiAgfVxuICAkLXpmLXNpemU6IG50aCgkdmFsdWUsIDEpICFnbG9iYWw7IC8vIGdldCB0aGUgZmlyc3QgdmFsdWUgdG8gYWNjb3VudCBmb3IgYG9ubHlgIGFuZCBgZG93bmAga2V5d29yZHNcblxuICAvLyBJZiAkc3RyIGlzIHN0aWxsIGFuIGVtcHR5IHN0cmluZywgbm8gbWVkaWEgcXVlcnkgaXMgbmVlZGVkXG4gIEBpZiAkc3RyID09ICcnIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgd3JhcCB0aGUgY29udGVudCBpbiBhIG1lZGlhIHF1ZXJ5XG4gIEBlbHNlIHtcbiAgICAvLyBGb3IgbmFtZWQgYnJlYWtwb2ludHMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICRwcmludC1icmVha3BvaW50LCBhZGQgcHJpbnQgdG8gdGhlIG1lZGlhIHR5cGVzXG4gICAgQGlmICRicCAhPSBudWxsIGFuZCAkYnAgPD0gJHBicCB7XG4gICAgICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICQtemYtc2l6ZTogJG9sZC16Zi1zaXplICFnbG9iYWw7XG59XG5cbi8vLyBDb252ZXJ0cyB0aGUgYnJlYWtwb2ludHMgbWFwIHRvIGEgVVJMLWVuY29kZWQgc3RyaW5nLCBsaWtlIHRoaXM6IGBrZXkxPXZhbHVlMSZrZXkyPXZhbHVlMmAuIFRoZSB2YWx1ZSBpcyB0aGVuIGRyb3BwZWQgaW50byB0aGUgQ1NTIGZvciBhIHNwZWNpYWwgYDxtZXRhPmAgdGFnLCB3aGljaCBpcyByZWFkIGJ5IHRoZSBGb3VuZGF0aW9uIEphdmFTY3JpcHQuIFRoaXMgaXMgaG93IHdlIHRyYW5zZmVyIHZhbHVlcyBmcm9tIFNhc3MgdG8gSmF2YVNjcmlwdCwgc28gdGhleSBjYW4gYmUgZGVmaW5lZCBpbiBvbmUgcGxhY2UuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byBjb252ZXJ0LlxuLy8vXG4vLy8gQHJldHVybnMge1N0cmluZ30gQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbWFwJ3MgY29udGVudHMuXG5AZnVuY3Rpb24gLXpmLWJwLXNlcmlhbGl6ZSgkbWFwKSB7XG4gICRzdHI6ICcnO1xuICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJG1hcCB7XG4gICAgJHN0cjogJHN0ciArICRrZXkgKyAnPScgKyAtemYtYnAtdG8tZW0oJHZhbHVlKSArICcmJztcbiAgfVxuICAkc3RyOiBzdHItc2xpY2UoJHN0ciwgMSwgLTIpO1xuXG4gIEByZXR1cm4gJHN0cjtcbn1cblxuLy8vIEZpbmQgdGhlIG5leHQga2V5IGluIGEgbWFwLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICRtYXAgLSBNYXAgdG8gdHJhdmVyc2UuXG4vLy8gQHBhcmFtIHtNaXhlZH0gJGtleSAtIEtleSB0byB1c2UgYXMgYSBzdGFydGluZyBwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtNaXhlZH0gVGhlIHZhbHVlIGZvciB0aGUga2V5IGFmdGVyIGAka2V5YCwgaWYgYCRrZXlgIHdhcyBmb3VuZC4gSWYgYCRrZXlgIHdhcyBub3QgZm91bmQsIG9yIGAka2V5YCB3YXMgdGhlIGxhc3QgdmFsdWUgaW4gdGhlIG1hcCwgcmV0dXJucyBgbnVsbGAuXG5AZnVuY3Rpb24gLXpmLW1hcC1uZXh0KCRtYXAsICRrZXkpIHtcblxuICAvLyBTdG9yZSB0aGUga2V5cyBvZiB0aGUgbWFwIGFzIGEgbGlzdFxuICAkdmFsdWVzOiBtYXAta2V5cygkbWFwKTtcblxuICAkaTogMDtcblxuICAvLyBJZiB0aGUgS2V5IEV4aXN0cywgR2V0IHRoZSBpbmRleCBvZiB0aGUga2V5IHdpdGhpbiB0aGUgbWFwIGFuZCBhZGQgMSB0byBpdCBmb3IgdGhlIG5leHQgYnJlYWtwb2ludCBpbiB0aGUgbWFwXG4gIEBpZiAobWFwLWhhcy1rZXkoJG1hcCwgJGtleSkpIHtcbiAgICAkaTogaW5kZXgoJHZhbHVlcywgJGtleSkgKyAxO1xuICB9XG5cbiAgLy8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0LCBvciBpdCdzIHRoZSBsYXN0IGtleSBpbiB0aGUgbWFwLCByZXR1cm4gbnVsbFxuICBAaWYgKCRpID4gbGVuZ3RoKCRtYXApIG9yICRpID09IDApIHtcbiAgICBAcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHZhbHVlXG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgbnRoKCR2YWx1ZXMsICRpKSk7XG4gIH1cblxufVxuXG4vLy8gUmV0dXJuIGEgbGlzdCBvZiBvdXIgbmFtZWQgYnJlYWtwb2ludHMgbGVzcyB0aGFuICRrZXkuIFVzZWZ1bCBmb3IgZGVhbGluZyB3aXRoXG4vLy8gcmVzcG9uc2l2ZSBndXR0ZXJzIGZvciB0aGUgZ3JpZC5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAka2V5IC0gS2V5IHRvIHVzZSBhcyBsYXN0IGJyZWFrcG9pbnQuXG4vLy9cbi8vLyBAcmV0dXJucyB7QXJyYXl9IFRoZSBsaXN0IG9mIGJyZWFrcG9pbnRzIHVwIHRvIGFuZC4gSWYgJGtleSBpcyBhdXRvLCByZXR1cm5zIGJyZWFrcG9pbnRzIGFib3ZlIHRoZSB6ZXJvXG5AZnVuY3Rpb24gLXpmLWJyZWFrcG9pbnRzLWxlc3MtdGhhbigka2V5KSB7XG4gICRsaXN0OiAoKTtcbiAgJGZvdW5kX2tleTogZmFsc2U7XG5cbiAgQGVhY2ggJG5hbWUgaW4gJC16Zi1icmVha3BvaW50cy1rZXlzIHtcbiAgICBAaWYgKCRuYW1lID09ICRrZXkpIHtcbiAgICAgICRmb3VuZF9rZXk6IHRydWU7XG4gICAgfVxuICAgIEBpZiBub3QgJGZvdW5kX2tleSB7XG4gICAgICAkbGlzdDogYXBwZW5kKCRsaXN0LCAkbmFtZSk7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJGxpc3Q7XG59XG5cbi8vLyBSZXR1cm4gYSBsaXN0IG9mIG91ciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gJGtleS4gVXNlZnVsIGZvciBkZWFsaW5nIHdpdGhcbi8vLyByZXNwb25zaXZlIGd1dHRlcnMgZm9yIHRoZSBncmlkLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IC0gYSBuYW1lZCBvciBub24tbmFtZWQgYnJlYWtwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtBcnJheX0gVGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgdXAgdG8gYW5kLiBJZiAka2V5IGlzIGF1dG8sIHJldHVybnMgYnJlYWtwb2ludHMgYWJvdmUgdGhlIHplcm9cbkBmdW5jdGlvbiAtemYtY2xvc2VzdC1uYW1lZC1icmVha3BvaW50KCRicmVha3BvaW50KSB7XG4gICRsYXN0OiAkLXpmLXplcm8tYnJlYWtwb2ludDtcbiAgJGZvdW5kOiBmYWxzZTtcblxuICAkdmFsdWU6IHVuaXRsZXNzLWNhbGMoJGJyZWFrcG9pbnQsIDFweCk7XG4gIEBlYWNoICRrZXksICR2YWwgaW4gJGJyZWFrcG9pbnRzIHtcbiAgICBAaWYgbm90ICRmb3VuZCB7XG4gICAgICBAaWYgdW5pdGxlc3MtY2FsYygkdmFsKSA+ICR2YWx1ZSB7XG4gICAgICAgICRmb3VuZDogdHJ1ZTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbGFzdDogJGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRsYXN0O1xufVxuXG4vLy8gR2V0IGEgdmFsdWUgZm9yIGEgYnJlYWtwb2ludCBmcm9tIGEgcmVzcG9uc2l2ZSBjb25maWcgbWFwIG9yIHNpbmdsZSB2YWx1ZS5cbi8vLyAtIElmIHRoZSBjb25maWcgaXMgYSBzaW5nbGUgdmFsdWUsIHJldHVybiBpdCByZWdhcmRsZXNzIG9mIGAkdmFsdWVgLlxuLy8vIC0gSWYgdGhlIGNvbmZpZyBpcyBhIG1hcCBhbmQgaGFzIHRoZSBrZXkgYCR2YWx1ZWAsIHRoZSBleGFjdCBicmVha3BvaW50IHZhbHVlIGlzIHJldHVybmVkLlxuLy8vIC0gSWYgdGhlIGNvbmZpZyBpcyBhIG1hcCBhbmQgZG9lcyAqbm90KiBoYXZlIHRoZSBicmVha3BvaW50LCB0aGUgdmFsdWUgbWF0Y2hpbmcgdGhlIG5leHQgbG93ZXN0IGJyZWFrcG9pbnQgaW4gdGhlIGNvbmZpZyBtYXAgaXMgcmV0dXJuZWQuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRtYXAgLSBSZXNwb25zaXZlIGNvbmZpZyBtYXAgb3Igc2luZ2xlIHZhbHVlLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHZhbHVlIC0gQnJlYWtwb2ludCBuYW1lIHRvIHVzZS5cbi8vL1xuLy8vIEByZXR1cm4ge01peGVkfSBUaGUgY29ycmVzcG9uZGluZyBicmVha3BvaW50IHZhbHVlLlxuQGZ1bmN0aW9uIC16Zi1nZXQtYnAtdmFsKCRtYXAsICR2YWx1ZSkge1xuICAvLyBJZiB0aGUgZ2l2ZW4gbWFwIGlzIGEgc2luZ2xlIHZhbHVlLCByZXR1cm4gaXRcbiAgQGlmIHR5cGUtb2YoJG1hcCkgPT0gJ251bWJlcicge1xuICAgIEByZXR1cm4gJG1hcDtcbiAgfVxuXG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGJyZWFrcG9pbnQgbmFtZSBleGlzdHMgZ2xvYmFsbHlcbiAgQGlmIG5vdCBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICR2YWx1ZSkge1xuICAgIEBpZiB0eXBlLW9mKCR2YWx1ZSkgPT0gJ251bWJlcicge1xuICAgICAgJHZhbHVlOiAtemYtY2xvc2VzdC1uYW1lZC1icmVha3BvaW50KCR2YWx1ZSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICBAcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGlmIHRoZSBicmVha3BvaW50IG5hbWUgZXhpc3RzIGluIHRoZSBsb2NhbCBjb25maWcgbWFwXG4gIEBlbHNlIGlmIG1hcC1oYXMta2V5KCRtYXAsICR2YWx1ZSkge1xuICAgIC8vIElmIGl0IGRvZXMsIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZVxuICAgIEByZXR1cm4gbWFwLWdldCgkbWFwLCAkdmFsdWUpO1xuICB9XG4gIC8vIE90aGVyd2lzZSwgZmluZCB0aGUgbmV4dCBsb3dlc3QgYnJlYWtwb2ludCBhbmQgcmV0dXJuIHRoYXQgdmFsdWVcbiAgQGVsc2Uge1xuICAgICRhbmNob3I6IG51bGw7XG4gICAgJGZvdW5kOiBmYWxzZTtcblxuICAgIEBlYWNoICRrZXksICR2YWwgaW4gJGJyZWFrcG9pbnRzIHtcbiAgICAgIEBpZiBub3QgJGZvdW5kIHtcbiAgICAgICAgQGlmIG1hcC1oYXMta2V5KCRtYXAsICRrZXkpIHtcbiAgICAgICAgICAkYW5jaG9yOiAka2V5O1xuICAgICAgICB9XG4gICAgICAgIEBpZiAka2V5ID09ICR2YWx1ZSB7XG4gICAgICAgICAgJGZvdW5kOiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQHJldHVybiBtYXAtZ2V0KCRtYXAsICRhbmNob3IpO1xuICB9XG59XG5cbiRzbWFsbC11cDogJyc7XG4kc21hbGwtb25seTogJyc7XG5cbkBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsIHNtYWxsKSB7XG4gICRzbWFsbC11cDogc2NyZWVuO1xuICAkc21hbGwtb25seTogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoc21hbGwgb25seSl9Jyk7XG59XG5cbiRtZWRpdW0tdXA6ICcnO1xuJG1lZGl1bS1vbmx5OiAnJztcblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgbWVkaXVtKSB7XG4gICRtZWRpdW0tdXA6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KG1lZGl1bSl9Jyk7XG4gICRtZWRpdW0tb25seTogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQobWVkaXVtIG9ubHkpfScpO1xufVxuXG4kbGFyZ2UtdXA6ICcnO1xuJGxhcmdlLW9ubHk6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCBsYXJnZSkge1xuICAkbGFyZ2UtdXA6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KGxhcmdlKX0nKTtcbiAgJGxhcmdlLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KGxhcmdlIG9ubHkpfScpO1xufVxuXG4keGxhcmdlLXVwOiAnJztcbiR4bGFyZ2Utb25seTogJyc7XG5cbkBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsIHhsYXJnZSkge1xuICAkeGxhcmdlLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludCh4bGFyZ2UpfScpO1xuICAkeGxhcmdlLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KHhsYXJnZSBvbmx5KX0nKTtcbn1cblxuJHh4bGFyZ2UtdXA6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCB4eGxhcmdlKSB7XG4gICR4eGxhcmdlLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludCh4eGxhcmdlKX0nKTtcbn1cbiIsIi8vIGJlbmVmaXRzXG5cblxuLmJlbmVmaXRzLWNvbnRhaW5lciB7XG5cbiAgICAvL21heC13aWR0aDogODcuNXJlbTtcbiAgICAvL21hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChsYXJnZSkge1xuICAgICAgICAvKnBhZGRpbmctcmlnaHQ6IC45Mzc1cmVtO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IC45Mzc1cmVtOyovXG4gICAgfVxuICAgIC5iZW5lZml0cy1oZXJvIHtcbiAgICAgICAgLy9wYWRkaW5nLWJvdHRvbTogcmVtLWNhbGMoMjApO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChsYXJnZSkge1xuICAgICAgICAgICAgLy9wYWRkaW5nLWJvdHRvbTogcmVtLWNhbGMoMCk7XG4gICAgICAgICAgICAvL3BhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgICAgICAvL3BhZGRpbmctbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGltZyB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjVzIGVhc2U7XG4gICAgICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmJlbmVmaXRzLWNvbnRlbnQge1xuICAgIFx0cGFkZGluZzogcmVtLWNhbGMoMzAgMjAgMzAgMjApO1xuICAgICAgICAvL3BhZGRpbmctbGVmdDogcmVtLWNhbGMoMjApO1xuICAgICAgICAvL3BhZGRpbmctcmlnaHQ6IHJlbS1jYWxjKDIwKTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuXG5cblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7IFxuICAgICAgICAgICAgJi5mdWxsLXdpZHRoLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiByZW0tY2FsYygyNCk7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogcmVtLWNhbGMoMTM2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cblxuICAgICAgICAuYmVuZWZpdHMtaW50cm8ge1xuICAgICAgICAgICAgLy9tYXJnaW4tdG9wOiByZW0tY2FsYyg1MCk7XG4gICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gXG5cbiAgICAgICAgLmJlbmVmaXRzIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDQwKTtcbiAgICAgICAgICAgIC5iZW5lZml0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYygxMCk7XG4gICAgICAgICAgICAgICAgLy9tYXJnaW4tYm90dG9tOiByZW0tY2FsYygxMCk7XG4gICAgICAgICAgICAgICAgaSB7XG4gICAgICAgICAgICAgICAgICAgIC8vY29sb3I6ICRjb2xvci1mb250LXNlY29uZGFyeTtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiByZW0tY2FsYygyMCk7XG4gICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIC5idXR0b24ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBvbmx5KSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogcmVtLWNhbGMoMjApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG59XG5cblxuXG5cbiIsIi8vIHBhcmFsbGF4XG5cbi5wYXJhbGxheC13aW5kb3cge1xuICAgIG1pbi1oZWlnaHQ6IHJlbS1jYWxjKDQ1MCk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWFyZ2luLXRvcDogcmVtLWNhbGMoODApO1xuICAgIG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDgwKTtcblxuXHQucGFyYWxsYXgtY29udGVudCB7XG5cdFx0bWF4LXdpZHRoOiByZW0tY2FsYyg4NTApO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDA7XG5cdFx0cmlnaHQ6IDA7XG5cdFx0bWFyZ2luLWxlZnQ6IGF1dG87XG5cdFx0bWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIFx0cGFkZGluZy1yaWdodDogcmVtLWNhbGMoMjApO1xuICAgIFx0cGFkZGluZy1sZWZ0OiByZW0tY2FsYygyMCk7XG5cbiAgICBcdGgyIHtcbiAgICBcdFx0dGV4dC1zaGFkb3c6IDAgMXB4IDNweCAjNDU0NTQ1O1xuICAgIFx0XHRAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7IFxuICAgIFx0XHRcdGZvbnQtc2l6ZTogcmVtLWNhbGMoMzgpO1xuICAgIFx0XHR9XG4gICAgXHR9XG5cblx0XHQuY29udGVudCB7XG5cdFx0XHR0ZXh0LXNoYWRvdzogMCAxcHggM3B4ICM0NTQ1NDU7XHRcdFxuXHRcdH1cblxuXHRcdC5idXR0b24ge1xuXHRcdFx0bWFyZ2luLXRvcDogcmVtLWNhbGMoMjApO1xuXHRcdFx0cGFkZGluZzogcmVtLWNhbGMoMTggMTApO1xuXHRcdFx0d2lkdGg6IHJlbS1jYWxjKDE4MCk7IFxuXHRcdFx0XG5cdFx0fVxuXG5cdH1cblxufSIsIi8vIHJlY2VudCBhcnRpY2xlc1xuXG4jbGF0ZXN0LW5ld3Mge1xuXG5cdG1hcmdpbi10b3A6IHJlbS1jYWxjKDYwKTtcblx0bWFyZ2luLWJvdHRvbTogcmVtLWNhbGMoNjApO1xuXG5cdGgyIHtcblx0XHQvL2ZvbnQtc2l6ZTogcmVtLWNhbGMoMzYpO1xuXHRcdEBpbmNsdWRlIGJyZWFrcG9pbnQobGFyZ2UpIHtcblx0XHRcdC8vZm9udC1zaXplOiByZW0tY2FsYyg0NCk7XG5cdFx0fVxuXHR9XG5cdFxuXG5cdC5sYXRlc3QtbmV3cyB7XG5cdFx0Ly9ib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwO1xuXG5cdCAgICAuYXJ0aWNsZSB7XG5cdFx0XHQvL2JvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYygyMCk7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IHJlbS1jYWxjKDIwKTtcblx0XHRcdHBhZGRpbmctcmlnaHQ6IHJlbS1jYWxjKDIwKTtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdC8vaGVpZ2h0OiByZW0tY2FsYygzNTApO1xuXG5cdFx0XHQuaW1hZ2Uge1xuXHRcdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYygzMCk7XG5cblx0XHRcdH1cblxuXHRcdFx0aDQge1xuXHRcdFx0XHRtaW4taGVpZ2h0OiByZW0tY2FsYygxMDApO1xuXHRcdFx0fVxuXHRcdFx0LmNvbnRlbnQge1xuXHRcdFx0XHRtaW4taGVpZ2h0OiByZW0tY2FsYygxMDApO1xuXHRcdFx0fVxuXHRcdFx0LmJ1dHRvbiB7XG5cdFx0XHRcdFx0Ly9wb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0bGVmdDogMDsgXG5cdFx0XHRcdFx0cmlnaHQ6IDA7IFxuXHRcdFx0XHRcdGJvdHRvbTogcmVtLWNhbGMoMTApO1xuXHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiBhdXRvOyBcblx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IGF1dG87XG5cdFx0XHRcdFx0d2lkdGg6IHJlbS1jYWxjKDE4MCk7IFxuXHRcdFx0XHRcdHBhZGRpbmc6IHJlbS1jYWxjKDEyIDEwKTtcblx0XHRcdH1cblxuXG5cdCAgICB9XG5cblx0fVxuXG5cblx0LmJ1dHRvbi1zb2xpZCB7XG5cdFx0bWF4LXdpZHRoOiByZW0tY2FsYygzMDApO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdHBhZGRpbmc6IHJlbS1jYWxjKDE1IDEwKTtcblx0XHQtd2Via2l0LWJveC1zaGFkb3c6IDAgMnB4IDRweCAwICM4NTg1ODU7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwICM4NTg1ODU7XG5cdH1cblxufVxuXG4iLCIvLyBUZXN0aW1vbmlhbHMgUGFydGlhbFxuXG5cbiN0ZXN0aW1vbmlhbHMge1xuXHQvL3BhZGRpbmctdG9wOiByZW0tY2FsYygzMCk7XG5cdC8vcGFkZGluZy1ib3R0b206IHJlbS1jYWxjKDMwKTtcblx0bWFyZ2luLXRvcDogcmVtLWNhbGMoNDApO1xuXHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYyg0MCk7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XG5cdGgyIHtcblx0XHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYygyMCk7XG5cdFx0Ly9jb2xvcjogJGNvbG9yLWJhc2Utc2Vjb25kYXJ5O1xuXHRcdFxuXHR9XG5cblx0LnRlc3RpbW9uaWFscyB7XG5cdFx0Ly9tYXgtd2lkdGg6IHJlbS1jYWxjKDEwMDApO1xuXHRcdC8vbWFyZ2luLWxlZnQ6IGF1dG87XG5cdFx0Ly9tYXJnaW4tcmlnaHQ6IGF1dG87XG5cdFx0LnRlc3RpbW9uaWFsIHtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDQwKTtcblx0XHRcdG1hcmdpbi1sZWZ0OiByZW0tY2FsYygyMCk7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IHJlbS1jYWxjKDIwKTtcblx0XHRcdHBhZGRpbmctYm90dG9tOiByZW0tY2FsYyg0MCk7XG5cdFx0XHRhIHtcblx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lOyBcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0LmltYWdlIHtcblx0XHRcdFx0Ly9ib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuXHRcdFx0XHQvKm1heC1oZWlnaHQ6IDY0MHB4O1xuXHRcdFx0XHRtYXgtd2lkdGg6IDY0MHB4OyovXG5cdFx0XHRcdHBhZGRpbmc6IHJlbS1jYWxjKDIwIDIwKTtcblx0XHRcblx0XHRcdFx0aW1nIHtcblx0XHRcdFx0XHRtYXgtaGVpZ2h0OiByZW0tY2FsYygxNTApO1xuXHRcdFx0XHRcdHdpZHRoOiBhdXRvO1xuXHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRcdFx0XHRcdG1hcmdpbi1yaWdodDogYXV0bztcblx0XHRcdFx0XHQvKmhlaWdodDogNjQwcHg7XG5cdFx0XHRcdFx0d2lkdGg6IDY0MHB4OyovXHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0LmNvbnRlbnQge1xuXHRcdFx0XHQtd2Via2l0LWJveC1zaGFkb3c6IDAgMnB4IDEwcHggMCAjODU4NTg1O1xuXHRcdFx0XHRib3gtc2hhZG93OiAwIDJweCAxMHB4IDAgIzg1ODU4NTtcblx0XHRcdFx0cGFkZGluZzogcmVtLWNhbGMoMzAgMjUgOTAgMjUpO1xuXHRcdFx0XHQgXG5cdFx0XHRcdGhlaWdodDogcmVtLWNhbGMoMzUwKTtcblx0XHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cblx0XHRcdFx0QGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHsgXG5cdFx0XHRcdFx0aGVpZ2h0OiByZW0tY2FsYyg0MTApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0XG5cblx0XHRcdFx0LmV4Y2VycHQtd3JhcHBlciB7XG5cdFx0XHRcdFx0Ly9tYXgtaGVpZ2h0OiByZW0tY2FsYygyNTApO1xuXHRcdFx0XHRcdC8vb3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIFx0XHRcdHRvcDogNTAlO1xuICAgICAgICBcdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG5cblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0Lm5hbWUtb3JnYW5pc2F0aW9uLXdyYXBwZXIge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRsZWZ0OiAwOyBcblx0XHRcdFx0XHRyaWdodDogMDsgXG5cdFx0XHRcdFx0Ym90dG9tOiByZW0tY2FsYygyMCk7XG5cdFx0XHRcdFx0bWFyZ2luLWxlZnQ6IGF1dG87IFxuXHRcdFx0XHRcdG1hcmdpbi1yaWdodDogYXV0bzsgXG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Lm5hbWUge1xuXHRcdFx0XHRcdFx0bWFyZ2luLXRvcDogcmVtLWNhbGMoMjApO1xuXHRcdFx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Lm9yZ2FuaXNhdGlvbiB7XG5cdFx0XHRcdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XG5cdFx0XHR9XG5cblx0XHRcblx0XHRcblxuXHRcdFxuXG5cdFx0fVxuXG5cdH1cblx0XHRcbn1cblxuXG5cblxuIiwiLy8gZmVhdHVyZXNcblxuLmZlYXR1cmVzLWNvbnRhaW5lciB7XG5cdHBhZGRpbmctbGVmdDogMDtcblx0cGFkZGluZy1yaWdodDogMDtcbi5mZWF0dXJlcyB7XG5cdG1hcmdpbi10b3A6IHJlbS1jYWxjKDQwKTtcblx0Ly9tYXJnaW4tYm90dG9tOiByZW0tY2FsYyg0MCk7XG5cblx0XHQuZmVhdHVyZSB7XG5cblx0XHRcdEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7IFxuXHRcdFx0XHQvL21heC1oZWlnaHQ6IHJlbS1jYWxjKDkwMCk7XG5cdFx0XHR9XG5cblx0XHRcblx0XHRcdC5jb250ZW50IHtcblx0XHRcdFx0cGFkZGluZy10b3A6IHJlbS1jYWxjKDUwKTtcblx0XHRcdFx0cGFkZGluZy1ib3R0b206IHJlbS1jYWxjKDMwKTtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiByZW0tY2FsYygyMCk7XG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IHJlbS1jYWxjKDIwKTtcblxuXHRcdFx0XHQuZmVhdHVyZWQtY29udGVudCB7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdHRvcDogNTAlO1xuXHRcdFx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0QGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHsgXG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiByZW0tY2FsYyg0MCk7XG5cdFx0XHRcdFx0cGFkZGluZy1yaWdodDogcmVtLWNhbGMoNDApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0QGluY2x1ZGUgYnJlYWtwb2ludChsYXJnZSkgeyBcblx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6IHJlbS1jYWxjKDYwKTtcblx0XHRcdFx0XHRwYWRkaW5nLXJpZ2h0OiByZW0tY2FsYyg2MCk7XG5cblx0XHRcdFx0XHQuZnVsbC13aWR0aC1jb250YWluZXIge1xuXHRcdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiByZW0tY2FsYygxMzYpO1xuXHRcdFx0XHRcdFx0cGFkZGluZy1yaWdodDogcmVtLWNhbGMoMjQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGgyIHtcblx0XHRcdFx0XHRtYXJnaW4tbGVmdDogYXV0bztcblx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IGF1dG87XG5cdFx0XHRcdFx0bWFyZ2luLWJvdHRvbTogcmVtLWNhbGMoMzApO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0LmltYWdlIHtcblx0XHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdFx0aW1nIHtcblx0XHRcdFx0XHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjVzIGVhc2U7XG5cdFx0XHRcdFx0b2JqZWN0LWZpdDogY292ZXI7XG5cdFx0ICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuXHRcdCAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdFx0dHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQmOm50aC1vZi10eXBlKGV2ZW4pIHtcblx0XHRcdFx0LmltYWdlIHtcblx0XHRcdFx0XHRvcmRlcjogMTtcblx0XHRcdFx0fVxuXHRcdFx0XHQuY29udGVudCB7IFxuXHRcdFx0XHRcdG9yZGVyOiAyO1xuXG5cblx0XHRcdFx0XHRAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7IFxuXHRcdFx0XHRcdFx0LmZ1bGwtd2lkdGgtY29udGFpbmVyIHtcblx0XHRcdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiByZW0tY2FsYygyNCk7XG5cdFx0XHRcdFx0XHRcdHBhZGRpbmctcmlnaHQ6IHJlbS1jYWxjKDEzNik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIG9ubHkpIHtcblx0XHRcdFx0JjpudGgtb2YtdHlwZShvZGQpIHtcblx0XHRcdFx0XHQuaW1hZ2Uge1xuXHRcdFx0XHRcdFx0b3JkZXI6IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5jb250ZW50IHsgXG5cdFx0XHRcdFx0XHRvcmRlcjogMjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXG5cdFx0fVxuXHR9XG5cdFx0XG59XG5cblxuIiwiLy8gZmFxc1xuXG5cbi5mYXEtY29udGFpbmVyIHtcblx0bWFyZ2luLXRvcDogcmVtLWNhbGMoNDApO1xuXHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYyg0MCk7XG5cblx0aDIge1xuXHRcdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRcdG1hcmdpbi1yaWdodDogYXV0bztcblx0XHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYygzMCk7XG5cdH1cblxuXHRsaSB7XG5cdFx0bWFyZ2luLWJvdHRvbTogcmVtLWNhbGMoMTApO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICRjb2xvci1iYXNlLXNlY29uZGFyeTtcblxuXHRcdC5hY2NvcmRpb24tdGl0bGUge1xuXHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6IHVuc2V0O1xuXHRcdFx0fVxuXHRcdFx0Jjpmb2N1cyB7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6IHVuc2V0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5hY2NvcmRpb24tdGl0bGU6YmVmb3JlIHtcblx0XHRcdGNvbG9yOiAkYmxhY2s7XG5cdFx0XHRmb250LXNpemU6IHJlbS1jYWxjKDE2KTtcblx0XHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRcdFx0bWFyZ2luLXRvcDogcmVtLWNhbGMoLTkpO1xuXHRcdH1cblx0XHRhIHtcblx0XHRcdC8vZm9udC1zaXplOiByZW0tY2FsYygxNik7XG5cdFx0XHRwYWRkaW5nLXJpZ2h0OiByZW0tY2FsYyg0MCk7XG5cdFx0fVxuXHRcdGkge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiByZW0tY2FsYygxMCk7XG5cdFx0XHQvL21hcmdpbi1ib3R0b206IHJlbS1jYWxjKDM1KTtcblx0XHRcdC8vZmxvYXQ6IGxlZnQ7XG5cdFx0fVxuXHR9XG5cblx0XHRcbn1cblxuXG5cblxuIiwiLy8gdmlkZW9cblxuXG4udmlkZW8tY29udGFpbmVyIHtcblx0bWFyZ2luLXRvcDogcmVtLWNhbGMoNDApO1xuXHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYyg0MCk7XG5cblx0aDIge1xuXHRcdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRcdG1hcmdpbi1yaWdodDogYXV0bztcblx0XHRtYXJnaW4tYm90dG9tOiByZW0tY2FsYygzMCk7XG5cdH1cblxuXHQuYnV0dG9uIHtcblx0XHRwYWRkaW5nOiByZW0tY2FsYygyMCAzMCk7XG5cdFx0bWFyZ2luLXRvcDogcmVtLWNhbGMoNDApO1xuXHRcdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRcdG1hcmdpbi1yaWdodDogYXV0bztcblx0XHRtYXgtd2lkdGg6IHJlbS1jYWxjKDI0MCk7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdC13ZWJraXQtYm9yZGVyLXJhZGl1czogcmVtLWNhbGMoOCk7XG5cdFx0Ym9yZGVyLXJhZGl1czogcmVtLWNhbGMoOCk7XG5cdFx0LXdlYmtpdC1ib3gtc2hhZG93OiAwIDJweCA0cHggMCAjQTFBMUExO1xuXHRcdGJveC1zaGFkb3c6IDAgMnB4IDRweCAwICNBMUExQTE7XG5cdFx0Jjpob3ZlciB7XG5cblx0XHR9XG5cdH1cblxuXG5cblx0XHRcbn1cblxuXG5cblxuIiwiLy8gZmVhdHVyZXNcblxuI2xvZ28tY2Fyb3VzZWwge1xuXHRtYXJnaW4tdG9wOiByZW0tY2FsYygyMCk7XG5cdG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDIwKTtcblx0Ly9wYWRkaW5nLWxlZnQ6IDA7XG5cdC8vcGFkZGluZy1yaWdodDogMDtcblxuXHRoMiB7XG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDQwKTtcblx0fVxuXG5cdC5sb2dvLWNhcm91c2VsIHtcblx0XHRcdC8vYm9yZGVyOiAxcHggc29saWQgYmx1ZTtcblx0XHQubG9nbyB7XG5cdFx0XHQvL2JvcmRlcjogMXB4IHNvbGlkIHJlZDtcblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0Ly9tYXgtaGVpZ2h0OiAxMjVweDtcblx0XHRcdFx0bWF4LXdpZHRoOiAyMjVweDtcblx0XHRcdFx0bWF4LWhlaWdodDogMTI1cHg7XG5cdFx0XHRcdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6IGF1dG87XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRoZWlnaHQ6IGF1dG87XG5cdFx0XHRcdG9iamVjdC1maXQ6IGNvbnRhaW47XG5cdFx0XHRcdC8vd2lkdGg6IDEwMCU7XG5cdFx0XHRcdGZpbHRlcjogZ3JheTsgLyogSUU2LTkgKi9cblx0XHRcdFx0LXdlYmtpdC1maWx0ZXI6IGdyYXlzY2FsZSgxKTsgLyogR29vZ2xlIENocm9tZSwgU2FmYXJpIDYrICYgT3BlcmEgMTUrICovXG5cdFx0XHRcdGZpbHRlcjogZ3JheXNjYWxlKDEpOyAvKiBNaWNyb3NvZnQgRWRnZSBhbmQgRmlyZWZveCAzNSsgKi9cblx0XHRcdFx0dHJhbnNpdGlvbjogYWxsIC41cyBlYXNlO1xuXHRcdFx0XHRvcGFjaXR5OiAwLjY7XG5cdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoMCk7XG5cdFx0XHRcdFx0ZmlsdGVyOiBub25lO1xuXHRcdFx0XHRcdG9wYWNpdHk6IDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0fVxuXG5cdC5zbGljay10cmFjayB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uc2xpY2stdHJhY2sgLnNsaWNrLXNsaWRlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblx0XHRcbn1cblxuIiwiLy8gU29jaWFsXG5cbi5zb2NpYWwtY29udGFpbmVyIHtcbiAgICAuc29jaWFsIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiByZW0tY2FsYygxNSk7ICBcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIGEge1xuICAgICAgICAgICBpIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogcmVtLWNhbGMoMzApOyBcbiAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSJdfQ== */
