UEtJWDEgeyB9CkRFRklOSVRJT05TIElNUExJQ0lUIFRBR1MgOjo9CkJFR0lOCmlkLWNlIE9CSkVDVCBJREVOVElGSUVSICA6Oj0gIHtqb2ludC1pLS07Ci0tCnNvLWNjaXR0KDIpIGRzKDUpIDI5fQppZC1jZS1hdXRob3JpdHlLZXlJZGVudGlmaWVyIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAzNSB9CkF1dGhvcml0eUtleUlkZW50aWZpZXIgOjo9IFNFUVVFTkNFIHsKICAgICAga2ZpbmVkQXR0cmlidXRlIDo6PSBTRVFVRU5DRSB7CiAgIHR5cGUgUHJpbnRhYmxlU3RyaW5nIChTSVpFCiAgICAgICAgICAgICAgICAgICAgICAgICgxLi51Yi1kb21haW4tZGVmaW5lZC1hdHRyaWJ1dGUtdHlwZS1sZW5ndGgpKSwKICAgdmFsdWUgUHJpbnRhYmxlU3RyaW5nIChTaVpFCiAgICAgICAgICAgICAgICAgICAgICAgICgxLi51Yi1kb21haW4tZGVmaW5lZC1hdHRyaWJ1dGUtdmFsdWUtbGVuZ3RoKSl9CkV4dGVuc2lvbkF0dHJpYnV0ZXMgOjo9IFNFVCBTSVpFICgxLi51Yi1leHRlbnNpb24tYXR0cmlidXRlcykgT0YKICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uQXR0cmlidXRlCkV4dGVuc2lvbkF0dHJpYnV0ZSA6Oj0gIFNFUVVFTkNFIHsKICAgZXh0ZW5zaW9uLWF0dHJpYnV0ZS10eXBlIFswXSBFWFBMSUNJVCBJTlRFR0VSICgwLi51Yi1leHRlbnNpb24tYXR0cmlidXRlcyksCiAgIGV4dGVuc2lvbi1hdHRyaWJ1dGUtdmFsdWUgWzFdIEVYUExJQ0lUCiAgICAgICAgICAgICAgICAgICAgICAgIEFOWSBERUZJTkVEIEJZIGV4dGVuc2lvbi1hdHRyaWJ1dGUtdHlwZSB9CmNvbW1vbi1uYW1lIElOVEVHRVIgOjo9IDEKQ29tbW9uTmFtZSA6Oj0gUHJpbnRhYmxlU3RyaW5nIChTSVpFICgxLi51Yi1jb21tb24tbmFtZS1sZW5ndGgpKQp0ZWxldGV4LWNvbW1vbi1uYW1lIElOVEVHRVIgOjo9IDIKVGVsZXRleENvbW1vbk5hbWUgOjo9IFRlbGV0ZXhTdHJpbmcgKFNJWkUgKDEuLnViLWNvbW1vbi1uYW1lLWxlbmd0aCkpCnRlbGV0ZXgtb3JnYW5pemF0aW9uLW5hbWUgSU5URUdFUiA6Oj0gMwpUZWxldGV4T3JnYW5pemF0aW9uTmFtZSA6Oj0KICAgICAgICAgICAgICAgIFRlbGV0ZXhTdHJpbmcgKFNJWkUgKDEuLnViLW9yZ2FuaXphdGlvbi1uYW1lLWxlbmd0aCkpCnRlbGV0ZXgtcGVyc29uYWwtbmFtZSBJTlRFR0VSIDo6PSA0ClRlbGV0ZXhQZXJzb25hbE5hbWUgOjo9IFNFVCB7CiAgIHN1cm5hbWUgWzBdIEVYUExJQ0lUIFRlbGV0ZXhTdHJpbmcgKFNJWkUgKDEuLnViLXN1cm5hbWUtbGVuZ3RoKSksCiAgIGdpdmVuLW5hbWUgWzFdIEVYUExJQ0lUIFRlbGV0ZXhTdHJpbmcKICAgICAgICAgICAgICAgIChTSVpFICgxLi51Yi1naXZlbi1uYW1lLWxlbmd0aCkpIE9QVElPTkFMLAogICBpbml0aWFscyBbMl0gRVhQTElDSVQgVGVsZXRleFN0cmluZyAoU0laRSAoMS4udWItaW5pdGlhbHMtbGVuZ3RoKSkgT1BUSU9OQUwsCiAgIGdlbmVyYXRpb24tcXVhbGlmaWVyIFszXSBFWFBMSUNJVCBUZWxldGV4U3RyaW5nIChTSVpFCiAgICAgICAgICAgIOff398oMS4udWItZ2VuZXJhdGlvbi1xdWFsaWZpZXItbGVuZ3RoKSkgT1BUSU9OQUwgfQp0ZWxldGV4LW9yZ2FuaXphdGlvbmFsLXVuaXQtbmFtZXMgSU5URUdFUiA6Oj0gNQpUZWxldGV4T3JnYW5pemF0aW9uYWxVbml0TmFtZXMgOjo9IFNFUVVFTkNFIFNJWkUKICAgICAgICAoMS4udWItb3JnYW5pemF0aW9uYWwtdW5pdHMpIDQwKSB4OWFsZ29yaXRobSg0KSAzIH0KRHNzLVNpZy1WYWx1ZSA6Oj0gU0VRVUVOQ0UgewogICBybXMgIDo6PSAgU0VRVUVOQ0UgIHsKICAgICBwICAgICAgICAgICAgIElOVEVHRVIsCiAgICAgcSAgICAgICAgICAgICBJTlRFR0VSLAogICAgIGcgICAgICAgICAgICAgSU5URUdFUiAgfQpPUkFkZHJlc3MgOjo9IFNFUVVFTkNFIHsKICAgYnVpbHQtaW4tc3RhbmRhcmQtYXR0cmlidXRlcyBCdWlsdEluU3RhbmRhcmRBdHRyaWJ1dGVzLAogICBidWlsdC1pIFByaW50YWJsZVN0cmluZyAoU0laRSAoMS4udWItZG9tYWluLW5hbWUtbGVuZ3RoKSkgfQpPcmdhbml6YXRpb25OYW1lIDo6PSBQcmludGFibGVTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTSVpFICgxLi51Yi1vcmdhbml6YXRpb24tbmFtZS1sZW5ndGgpKQpOdW1lcmljVXNlcklkZW50aWZpZXIgOjo9IE51bWVyaWNTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgIGAgICAgIChTSVpFICgxLi51Yi1udW1lcmljLXVzZXItaWQtbGVuZ3RoKSktLQotLQoKUGVyc29uYWxOYW1lIDo6PSBTRVQgewogICBzdXJuYW1lIFswXSBQcmludGFibGVTdHJpbmcgKFNJWkUgKDEuLnViLXN1cm5hbWUtbGVuZ3RoKSksCiAgIGdpdmVuLW5hbWUgWzFdIFByaW50YWJsZVN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAoU0laRSAoMS4udWItZ2l2ZW4tbmFtZS1sZW5ndGgpKSBPUFRJT05BTCwKICAgaW5pdGlhbHMgWzJdIFByaW50YWJsZVN0cmluZyAoU0laRSAoMS4udWItaW5pdGlhbHMtbGVuZ3RoKSkgT1BUSU9OQUwsCiAgIGdlbmVyYXRpb24tcXVhbGlmaWVyIFszXSBQcmludGFibGVTdHJpbmcKICAgICAgICAgICAgICAgIChTSVpFICgxLi51Yi1nZW5lcmF0aW9uLXF1YWxpZmllci1sZW5ndGgpKSBPUFRJT05BTCB9Ck9yZ2FuaXphdGlvbmFsVW5pdE5hbWVzIDo6PSBTRVFVRU5DRSBTSVpFICgxLi51Yi1vcmdhbml6YXRpb25hbC11bml0cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GIE9yZ2FuaXphdGlvbmFsVW5pdE5hbWUKT3JnYW5pemF0aW9uYWxVbml0TmFtZSA6Oj0gUHJpbnRhYmxlU3RyaW5nIChTSVpFCiAgICAgICAgICAgICAgICAgICAgICAgICgxLi51Yi1vcmdhbml6YXRpb25hbC11bml0LW5hbWUtbGVuZ3RoKSkKQnVpbHRJbkRvbWFpbkRlZmluZWRBdHRyaWJ1dGVzIDo6PSBTRVFVRU5DRSBTSVpFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEuLnViLWRvbWFpbi1kZWZpbmVkLWF0dHJpYnV0ZXMpIE9GCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbHRJbkRvbWFpbkRlZmluZWRBdHRyaWJ1dGUKQnVpbHRJbkRvbWFpbkRlZmluZWRBdHRyaWJ1dGUgOjo9IFNFUVVFTkNFIHsKICAgdHlwZSBQcmludGFibGVTdHJpbmcgKFNJWkUKICAgICAgICAgICAgICAgICAgICAgICAgKDEuLnViLWRvbWFpbi1kZWZpbmVkLWF0dHJpYnV0ZS10eXBlLWxlbmd0aCkpLAogICB2YWx1ZSBQcmludGFibGVTdHJpbmcgKFNJWkUKICAgICAgICAgICAgICAgICAgICAgICAgKDEuLnViLWRvbWFpbi1kZWZpbmVkLWF0dHJpYnV0ZS12YWx1ZS1sZW5ndGgp3IL1unh0ZW5zaW9uQXR0cmlidXRlcyA6Oj0gU0VUIFNJWkUgKDEuLnViLWV4dGVuc2lvbi1hdHRyaWJ1dGVzKSBPRgogICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb25BdHRyaWJ1dGUKRXh0ZW5zaW9uQXR0cmlidXRlIDo6PSAgU0VRVUVOQ0UgewogICBleHRlbnNpb24tYXR0cmlidXRlLXR5cGUgWzBdIEVYUExJQ0lUIElOVEVHRVIgKDAuLnViLWV4dGVuc2lvbi1hdHRyaWJ1dGVzKSwKICAgZXh0ZW5zaW9uLWF0dHJpYnV0ZS12YWx1ZSApKSwKICAgZ2l2ZW4tbmFtZSBbMV0gUHJpbnRhYmxlU3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIChTSVpFICgxLi51Yi1naXZlbi1uYW1lLWxlbmd0aCkpIE9QVElPTkFMLAogICBpbml0aWFscyBbMl0gUHJpbnRhYmxlU3RyaW5nIChTSVpFICgxLi51Yi1pbml0aWFscy1sZW5ndGgpKSBPUFRJT05BTCwKICAgZ2VuZXJhdGlvbi1xdWFsaWZpZXIgWzNdIFByaW50YWJsZVN0cmluZwogICAgICAgICAgICAgICAgKFNJWkUgKDEuLnViLWdlbmVyYXRpb24tcXVhbGlmaWVyLWxlbmd0aCkpIE9QVElPTkFMIH0KT3JnYW5pemF0aW9uYWxVbml0TmFtZXMgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLnViLW9yZ2FuaXphdGlvbmFsLXVuaXRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0YgT3JnYW5pemF0aW9uYWxVbml0TmFtZQpPcmdhbml6YXRpb25hbFVuaXROYW1lIDo6PSBQcmludGFibGVTdHJpbmcgKFNJWkUKICAgICAgICAgICAgICAgICAgICAgICAgKDEuLnViLW9yZ2FuaXphdGlvbmFsLXVuaXQtbmFtZS1sZW5ndGgpKQpCdWlsdEluRG9tYWluRGVmaW5lZEF0dHJpYnV0ZXMgOjo9IFNFUVVFTkNFIFNJWkUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS4udWItZG9tYWluLWRlZmluZWQtYXB0cmlidXRlcykgT0YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsdEluRG9tYWluRGVmaW5lZEF0dHJpYnV0ZQpCdWlsdEluRG9tYWluRGVmaW5lZEF0dHJpYnV0ZSA6Oj0gU0VRVUVOQ0UgewogLS0KLSAgdHlwZSBQcmludGFibGVTdHJpbmcgKFNJWkUKICAgICAgICAgICAgICAgICAgICAgICAgKDEuLnViLWRvbWFpbi1kZWZpbmVkLWF0dHJpYnV0ZS10eXBlLWxlbmd0aCkpLAogICB2YWx1ZSBQcmludGFibGVTdHJpbmcgKFNJWkUKICAgICAgICAgICAgICAgICAgICAgICAgKDEuLnViLWRvbWFpbi1kZWZpbmVkLWF0dHJpYnV0ZS12YWx1ZS1sZW5ndGgpKX0KRXh0ZW5zaW9uQXR0LXJpYnV0ZXMgOjo9IFNFVCBTSVpFICgxLi51Yi1leHRlbnNpb24tYXR0cmlidXRlcykgT0YKICAgICAgICAgICAgICAgICAgICAgICAgRXgKLS0KdGVuc2lvbkF0dHJpYnV0ZQpFeC10ZW5zaW9uQXR0cmlidXSdIDo6PSAgU0VRVUVOQ0UgewogICBleHRlbnNpb24tYXR0cmlidXRl83QtCnlwZSBbMF0gRVhQTElDSVQgSU5URUdFUiAoMC4udWItZXh0ZW5zaW9uLWF0dHJpYnV0ZXM=