murano-deployment/ExecutionPlan/SqlServerAlwaysOnAvailabili.../FailoverCluster.yaml.json

32 lines
18 KiB
JSON

{
"Commands": [
{
"Name": "New-FailoverCluster",
"Arguments": {
"UserName": "$domainAdminAccountName",
"ClusterNodes": "$clusterNodes",
"DomainName": "$domainName",
"ClusterName": "$clusterName",
"UserPassword": "$domainAdminAccountPassword",
"StaticAddress": "$clusterIP"
}
},
{
"Name": "New-FailoverClusterSharedFolder",
"Arguments": {
"ClusterName": "$clusterName",
"UserName": "$domainAdminAccountName",
"UserPassword": "$domainAdminAccountPassword",
"ShareServer": "$shareServer",
"DomainName": "$domainName"
}
}
],
"RebootOnCompletion": 0,
"Scripts": [
"SW1wb3J0LU1vZHVsZSBDb3JlRnVuY3Rpb25zIC1Gb3JjZQoKCmZ1bmN0aW9uIFNob3ctSW52b2NhdGlvbkluZm8gewogICAgcGFyYW0gKAogICAgICAgICRJbnZvY2F0aW9uLAogICAgICAgIFtTd2l0Y2hdICRFbmQKICAgICkKCiAgICBpZiAoJEVuZCkgewogICAgICAgIFdyaXRlLUxvZ0RlYnVnICI8L2Z1bmN0aW9uIG5hbWU9JyQoJEludm9jYXRpb24uTXlDb21tYW5kLk5hbWUpJz4iCiAgICB9CiAgICBlbHNlIHsKICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAiPGZ1bmN0aW9uIG5hbWU9JyQoJEludm9jYXRpb24uTXlDb21tYW5kLk5hbWUpJz4iCiAgICAgICAgV3JpdGUtTG9nRGVidWcgIjxwYXJhbT4iCiAgICAgICAgZm9yZWFjaCAoJFBhcmFtZXRlciBpbiAkSW52b2NhdGlvbi5NeUNvbW1hbmQuUGFyYW1ldGVycykgewogICAgICAgICAgICBmb3JlYWNoICgkS2V5IGluICRQYXJhbWV0ZXIuS2V5cykgewogICAgICAgICAgICAgICAgJFR5cGUgPSAkUGFyYW1ldGVyWyRLZXldLlBhcmFtZXRlclR5cGUuRnVsbE5hbWUKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRWYWx1ZSBpbiAkSW52b2NhdGlvbi5Cb3VuZFBhcmFtZXRlcnNbJEtleV0pIHsKICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAiWyRUeXBlXSAkS2V5ID0gJyRWYWx1ZSciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgV3JpdGUtTG9nRGVidWcgIjwvcGFyYW0+IgogICAgfQp9CgoKJFRyYXBIYW5kbGVyID0gewogICAgV3JpdGUtTG9nRXJyb3IgQCgiPGV4Y2VwdGlvbj4iLCAkXykgLUVudGlyZU9iamVjdAogICAgV3JpdGUtTG9nRXJyb3IgIjwvZXhjZXB0aW9uPiIKICAgIGJyZWFrCn0KCgp0cmFwIHsKICAgICYkVHJhcEhhbmRsZXIKfQoKJEVycm9yQWN0aW9uUHJlZmVyZW5jZSA9ICdTdG9wJwoKCjwjCiMgVXNhZ2UgZXhhbXBsZSBmb3IgU2hvdy1JbnZvY2F0aW9uSW5mbwoKZnVuY3Rpb24gTXlGdW5jdGlvbiB7CiAgICBwYXJhbSAoCiAgICAgICAgW1N0cmluZ10gJFZhbHVlMSwKICAgICAgICBbU3RyaW5nXSAkVmFsdWUyLAogICAgICAgIFtJbnRdICRJbnQxCiAgICApCiAgICBiZWdpbiB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uCiAgICB9CiAgICBlbmQgewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kCiAgICB9CiAgICBwcm9jZXNzIHsKICAgICAgICB0cmFwIHsKICAgICAgICAgICAgJiRUcmFwSGFuZGxlcgogICAgICAgIH0KICAgICAgICAjIE1haW4gY29kZSBoZXJlCiAgICB9Cn0KIz4K",
"CnRyYXAgewogICAgJiRUcmFwSGFuZGxlcgp9CgoKCmZ1bmN0aW9uIE5ldy1TcWxTZXJ2ZXJTeXN0ZW1BY2NvdW50IHsKICAgIHBhcmFtICgKICAgICAgICAjIChSRVFVSVJFRCkgRG9tYWluIE5hbWUKICAgICAgICBbUGFyYW1ldGVyKE1hbmRhdG9yeT0kdHJ1ZSldCiAgICAgICAgW1N0cmluZ10gJERvbWFpbk5hbWUsCgogICAgICAgICMgKFJFUVVJUkVEKSBVc2VyIG5hbWUgd2hvIGhhcyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1vZGlmeSB1c2VyUGFzc3dvcmQKICAgICAgICAjIFVzdWFsbHkgdGhpcyBpcyB0aGUgZG9tYWluIGFkbWluaXN0cmF0b3IgJyRkb21haW5OYW1lXEFkbWluaXN0cmF0b3InIGFjY291bnQKICAgICAgICBbUGFyYW1ldGVyKE1hbmRhdG9yeT0kdHJ1ZSldCiAgICAgICAgW1N0cmluZ10gJFVzZXJOYW1lLAoKICAgICAgICAjIChSRVFVSVJFRCkgUGFzc3dvcmQgZm9yIHRoYXQgdXNlcgogICAgICAgIFtQYXJhbWV0ZXIoTWFuZGF0b3J5PSR0cnVlKV0KICAgICAgICBbU3RyaW5nXSAkVXNlclBhc3N3b3JkLAoKICAgICAgICAjIChSRVFVSVJFRCkgVXNlciBuYW1lIGZvciBhIG5ldyBhY2NvdW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJ1biBTUUwgU2VydmVyCiAgICAgICAgW1BhcmFtZXRlcihNYW5kYXRvcnk9JHRydWUpXQogICAgICAgIFtTdHJpbmddICRTUUxTZXJ2aWNlVXNlck5hbWUsCgogICAgICAgICMgKFJFUVVJUkVEKSBQYXNzd29yZCBmb3IgdGhhdCB1c2VyCiAgICAgICAgW1BhcmFtZXRlcihNYW5kYXRvcnk9JHRydWUpXQogICAgICAgIFtTdHJpbmddICRTUUxTZXJ2aWNlVXNlclBhc3N3b3JkLAoKICAgICAgICBbU3RyaW5nXSAkUHJpbWFyeU5vZGUgPSAnICcKICAgICkKICAgIGJlZ2luIHsKICAgICAgICBTaG93LUludm9jYXRpb25JbmZvICRNeUludm9jYXRpb24KICAgIH0KICAgIGVuZCB7CiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uIC1FbmQKICAgIH0KICAgIHByb2Nlc3MgewogICAgICAgIHRyYXAgewogICAgICAgICAgICAmJFRyYXBIYW5kbGVyCiAgICAgICAgfQoKICAgICAgICBpZiAoJFByaW1hcnlOb2RlLlRvTG93ZXIoKSAtbmUgKCRFbnY6Q29tcHV0ZXJOYW1lKS5Ub0xvd2VyKCkpIHsKICAgICAgICAgICAgV3JpdGUtTG9nICJUSGlzIGZ1bmN0aW9uIHJ1bnMgb24gQU9BRyBwcmltYXJ5IG5vZGUgb25seS4iCiAgICAgICAgICAgIFdyaXRlLUxvZyAiRXhpdGluZy4iCiAgICAgICAgICAgIHJldHVybgogICAgICAgIH0KCiAgICAgICAgV3JpdGUtTG9nICJJbnN0YWxsaW5nICdSU0FULUFELVBvd2VyU2hlbGwnIC4uLiAiCiAgICAgICAgQWRkLVdpbmRvd3NGZWF0dXJlIFJTQVQtQUQtUG93ZXJTaGVsbAoKICAgICAgICBJbXBvcnQtTW9kdWxlIEFjdGl2ZURpcmVjdG9yeQoKICAgICAgICAkQ3JlZHMgPSBOZXctQ3JlZGVudGlhbCAtVXNlck5hbWUgIiREb21haW5OYW1lXCRVc2VyTmFtZSIgLVBhc3N3b3JkICIkVXNlclBhc3N3b3JkIgoKICAgICAgICBXcml0ZS1Mb2cgIkFkZGluZyBuZXcgdXNlciAuLi4iCiAgICAgICAgJG51bGwgPSBOZXctQURVc2VyIGAKICAgICAgICAgICAgLU5hbWUgJFNRTFNlcnZpY2VVc2VyTmFtZSBgCiAgICAgICAgICAgIC1BY2NvdW50UGFzc3dvcmQgJChDb252ZXJ0VG8tU2VjdXJlU3RyaW5nIC1TdHJpbmcgJFNRTFNlcnZpY2VVc2VyUGFzc3dvcmQgLUFzUGxhaW5UZXh0IC1Gb3JjZSkgYAogICAgICAgICAgICAtQ3JlZGVudGlhbCAkQ3JlZHMgYAogICAgICAgICAgICAtRXJyb3JBY3Rpb24gJ1N0b3AnCiAgICB9Cn0K",
"CnRyYXAgewogICAgJiRUcmFwSGFuZGxlcgp9CgoKCmZ1bmN0aW9uIFNlbGVjdC1DbGlYbWxCbG9jayB7CiAgICBwYXJhbSAoCiAgICAgICAgW1N0cmluZ10gJFBhdGgsCiAgICAgICAgW1N0cmluZ10gJE91dEZpbGUgPSBbSU8uUGF0aF06OkdldFRlbXBGaWxlTmFtZSgpCiAgICApCgogICAgJFRhZ0ZvdW5kID0gJGZhbHNlCiAgICBHZXQtQ29udGVudCAkUGF0aCB8CiAgICAgICAgRm9yRWFjaC1PYmplY3QgewogICAgICAgICAgICBpZiAoJF8gLWVxICcjPCBDTElYTUwnKSB7CiAgICAgICAgICAgICAgICAkVGFnRm91bmQgPSAkdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkVGFnRm91bmQpIHsKICAgICAgICAgICAgICAgIEFkZC1Db250ZW50IC1QYXRoICRPdXRGaWxlIC1WYWx1ZSAkXwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgJE91dEZpbGUKfQoKCgpmdW5jdGlvbiBTdGFydC1Qb3dlclNoZWxsUHJvY2VzcyB7CiAgICBwYXJhbSAoCiAgICAgICAgW1N0cmluZ10gJENvbW1hbmQsCiAgICAgICAgJENyZWRlbnRpYWwgPSAkbnVsbCwKICAgICAgICBbU3dpdGNoXSAkSWdub3JlU3RkRXJyLAogICAgICAgIFtTd2l0Y2hdICROb0Jhc2U2NAogICAgKQogICAgYmVnaW4gewogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbgogICAgfQogICAgZW5kIHsKICAgICAgICBTaG93LUludm9jYXRpb25JbmZvICRNeUludm9jYXRpb24gLUVuZAogICAgfQogICAgcHJvY2VzcyB7CiAgICAgICAgdHJhcCB7CiAgICAgICAgICAgICYkVHJhcEhhbmRsZXIKICAgICAgICB9CgogICAgICAgICRTdGRPdXQgPSBbSU8uUGF0aF06OkdldFRlbXBGaWxlTmFtZSgpCiAgICAgICAgJFN0ZEVyciA9IFtJTy5QYXRoXTo6R2V0VGVtcEZpbGVOYW1lKCkKCiAgICAgICAgJEFyZ3VtZW50TGlzdCA9IEAoJy1PdXRwdXRGb3JtYXQnLCAnWE1MJykKCiAgICAgICAgaWYgKCROb0Jhc2U2NCkgewogICAgICAgICAgICAkVG1wU2NyaXB0ID0gW0lPLlBhdGhdOjpHZXRUZW1wRmlsZU5hbWUoKQogICAgICAgICAgICBSZW5hbWUtSXRlbSAtUGF0aCAiJFRtcFNjcmlwdCIgLU5ld05hbWUgIiRUbXBTY3JpcHQucHMxIiAtRm9yY2UKICAgICAgICAgICAgJFRtcFNjcmlwdCA9ICIkVG1wU2NyaXB0LnBzMSIKCiAgICAgICAgICAgIFdyaXRlLUxvZ0RlYnVnICRUbXBTY3JpcHQKCiAgICAgICAgICAgICRDb21tYW5kIHwgT3V0LUZpbGUgJFRtcFNjcmlwdAoKICAgICAgICAgICAgJEFyZ3VtZW50TGlzdCArPSBAKCctRmlsZScsICIkVG1wU2NyaXB0IikKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRCeXRlcyA9IFtUZXh0LkVuY29kaW5nXTo6VW5pY29kZS5HZXRCeXRlcygkQ29tbWFuZCkKICAgICAgICAgICAgJEVuY29kZWRDb21tYW5kID0gW0NvbnZlcnRdOjpUb0Jhc2U2NFN0cmluZygkQnl0ZXMpCiAgICAgICAgICAgIAogICAgICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAkRW5jb2RlZENvbW1hbmQKCiAgICAgICAgICAgICRBcmd1bWVudExpc3QgKz0gQCgnLUVuY29kZWRDb21tYW5kJywgJEVuY29kZWRDb21tYW5kKQogICAgICAgIH0KCiAgICAgICAgV3JpdGUtTG9nRGVidWcgJEFyZ3VtZW50TGlzdAoKICAgICAgICBXcml0ZS1Mb2cgIlN0YXJ0aW5nIGV4dGVybmFsIFBvd2VyU2hlbGwgcHJvY2VzcyAuLi4iCgogICAgICAgIGlmICgkQ3JlZGVudGlhbCAtZXEgJG51bGwpIHsKICAgICAgICAgICAgJFByb2Nlc3MgPSBTdGFydC1Qcm9jZXNzIC1GaWxlUGF0aCAncG93ZXJzaGVsbC5leGUnIGAKICAgICAgICAgICAgICAgIC1Bcmd1bWVudExpc3QgQCgkQXJndW1lbnRMaXN0KSBgCiAgICAgICAgICAgICAgICAtUmVkaXJlY3RTdGFuZGFyZE91dHB1dCAkU3RkT3V0IGAKICAgICAgICAgICAgICAgIC1SZWRpcmVjdFN0YW5kYXJkRXJyb3IgJFN0ZEVyciBgCiAgICAgICAgICAgICAgICAtTm9OZXdXaW5kb3cgYAogICAgICAgICAgICAgICAgLVdhaXQgYAogICAgICAgICAgICAgICAgLVBhc3NUaHJ1CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUHJvY2VzcyA9IFN0YXJ0LVByb2Nlc3MgLUZpbGVQYXRoICdwb3dlcnNoZWxsLmV4ZScgYAogICAgICAgICAgICAgICAgLUFyZ3VtZW50TGlzdCBAKCRBcmd1bWVudExpc3QpIGAKICAgICAgICAgICAgICAgIC1SZWRpcmVjdFN0YW5kYXJkT3V0cHV0ICRTdGRPdXQgYAogICAgICAgICAgICAgICAgLVJlZGlyZWN0U3RhbmRhcmRFcnJvciAkU3RkRXJyIGAKICAgICAgICAgICAgICAgIC1DcmVkZW50aWFsICRDcmVkZW50aWFsIGAKICAgICAgICAgICAgICAgIC1Ob05ld1dpbmRvdyBgCiAgICAgICAgICAgICAgICAtV2FpdCBgCiAgICAgICAgICAgICAgICAtUGFzc1RocnUKICAgICAgICB9CgogICAgICAgIFdyaXRlLUxvZyAiRXh0ZXJuYWwgUG93ZXJTaGVsbCBwcm9jZXNzIGV4aXRlZCB3aXRoIGV4aXQgY29kZSAnJCgkUHJvY2Vzcy5FeGl0Q29kZSknLiIKCiAgICAgICAgI2lmICgkQXJndW1lbnRMaXN0IC1jb250YWlucyAnLUZpbGUnKSB7CiAgICAgICAgIyAgICBSZW1vdmUtSXRlbSAtUGF0aCAkVG1wU2NyaXB0IC1Gb3JjZQogICAgICAgICN9CgogICAgICAgICRFcnJvckFjdGlvblByZWZlcmVuY2VTYXZlZCA9ICRFcnJvckFjdGlvblByZWZlcmVuY2UKICAgICAgICAkRXJyb3JBY3Rpb25QcmVmZXJlbmNlID0gJ1NpbGVudGx5Q29udGludWUnCgogICAgICAgIFdyaXRlLUxvZ0RlYnVnICJTdGRPdXQgZmlsZSBpcyAnJFN0ZE91dCciCiAgICAgICAgV3JpdGUtTG9nRGVidWcgIlN0ZEVyciBmaWxlIGlzICckU3RkRXJyJyIKCiAgICAgICAgaWYgKChHZXQtSXRlbSAkU3RkT3V0KS5MZW5ndGggLWd0IDApIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0RlYnVnICJMb2FkaW5nIFN0ZE91dCBmcm9tICckU3RkT3V0JyIKICAgICAgICAgICAgICAgICRUbXBGaWxlID0gU2VsZWN0LUNsaVhtbEJsb2NrICRTdGRPdXQKICAgICAgICAgICAgICAgICRTdGRPdXRPYmplY3QgPSBJbXBvcnQtQ2xpeG1sICRUbXBGaWxlCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAiPFN0ZE91dD4iCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAoJFN0ZE91dE9iamVjdCkKICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0RlYnVnICI8L1N0ZE91dD4iCiAgICAgICAgICAgICAgICAkU3RkT3V0T2JqZWN0CiAgICAgICAgICAgICAgICAjUmVtb3ZlLUl0ZW0gLVBhdGggJFRtcEZpbGUgLUZvcmNlCiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2ggewogICAgICAgICAgICAgICAgV3JpdGUtTG9nRGVidWcgIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyBTdGRPdXQgZnJvbSAnJFRtcEZpbGUnIgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoKEdldC1JdGVtICRTdGRFcnIpLkxlbmd0aCAtZ3QgMCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgV3JpdGUtTG9nRGVidWcgIkxvYWRpbmcgU3RkRXJyIC4uLiIKICAgICAgICAgICAgICAgICRUbXBGaWxlID0gU2VsZWN0LUNsaVhtbEJsb2NrICRTdGRFcnIKICAgICAgICAgICAgICAgICRTdGRFcnJPYmplY3QgPSBJbXBvcnQtQ2xpeG1sICRUbXBGaWxlCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAiPFN0ZEVycj4iCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dEZWJ1ZyAoJFN0ZEVyck9iamVjdCkKICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0RlYnVnICI8L1N0ZEVycj4iCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkSWdub3JlU3RkRXJyKSB7CiAgICAgICAgICAgICAgICAgICAgJFN0ZEVyck9iamVjdAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgI1JlbW92ZS1JdGVtIC1QYXRoICRUbXBGaWxlIC1Gb3JjZQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIHsKICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0RlYnVnICJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGxvYWRpbmcgU3RkRXJyIGZyb20gJyRUbXBGaWxlJyIKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJEVycm9yQWN0aW9uUHJlZmVyZW5jZSA9ICRFcnJvckFjdGlvblByZWZlcmVuY2VTYXZlZAoKICAgICAgICBpZiAoJFByb2Nlc3MuRXhpdENvZGUgLW5lIDApIHsKICAgICAgICAgICAgdGhyb3coIkV4dGVybmFsIFBvd2VyU2hlbGwgcHJvY2VzcyBleGl0ZWQgd2l0aCBjb2RlICckKCRQcm9jZXNzLkV4aXRDb2RlKSciKQogICAgICAgIH0KCiAgICAgICAgI1JlbW92ZS1JdGVtICRTdGRPdXQgLUZvcmNlCiAgICAgICAgI1JlbW92ZS1JdGVtICRTdGRFcnIgLUZvcmNlCiAgICB9Cn0K",
"PCMNCi5ERVNDUklQVElPTg0KDQojIyBGYWlsb3ZlciBDbHVzdGVyIElucHV0IERhdGEgKGZyb20gdGhlIFVJKQ0KDQoqIERvbWFpbiBNZW1iZXJzaGlwDQogICAgLSBbU3RyaW5nXSAvIFtTZWxlY3QgYm94XSAkRG9tYWluTmFtZSAtIERvbWFpbiBuYW1lDQoqIERvbWFpbiBVc2VyIENyZWRlbnRpYWxzDQogICAgLSBbU3RyaW5nXSAkVXNlck5hbWUgLSBVc2VybmFtZQ0KICAgIC0gW1Bhc3N3b3JkIHN0cmluZ10gJFVzZXJQYXNzd29yZCAtIFVzZXIgcGFzc3dvcmQNCiogU2hhcmVkIEZvbGRlciBJbmZvcm1hdGlvbg0KICAgIC0gW1N0cmluZ10gJFNoYXJlU2VydmVyIC0gU2VydmVyIHdoaWNoIHdpbGwgaG9zdCB0aGUgZm9sZGVyDQogICAgLSBbU3RyaW5nXSAkU2hhcmVOYW1lIC0gU2hhcmUgbmFtZQ0KICAgIC0gW1N0cmluZ10gJFNoYXJlUGF0aCAtIFNoYXJlZCBmb2xkZXIgaW50ZXJuYWwgcGF0aA0KKiBGYWlsb3ZlciBDbHVzdGVyIE1lbWJlcnMNCiAgICAtIFtTdHJpbmddICRDbHVzdGVyTmFtZSAtIENsdXN0ZXIgbmFtZQ0KICAgIC0gW1N0cmluZ10gJENsdXN0ZXJJUCAtIFN0YXRpYyBJUCBhZGRyZXNzIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgY2x1c3Rlcg0KICAgIC0gW1N0cmluZ1tdXSAkQ2x1c3Rlck5vZGVzIC0gTGlzdCBvZiBub2RlIG5hbWVzDQoNCg0KDQojIyBGYWlsb3ZlciBDbHVzdGVyIGNyZWF0aW9uIHdvcmtmbG93DQoNCiogQ3JlYXRlIEFEIGRvbWFpbg0KKiBKb2luIGFsbCB0aGUgVk1zIHRvIHRoYXQgZG9tYWluDQoqIFByZXBhcmUgbm9kZXMNCiAgICAtIEluc3RhbGwgRmFpbG92ZXIgQ2x1c3RlciBwcmVyZXF1aXNpdGVzIG9uIGFsbCBGQyBub2Rlcw0KKiBDcmVhdGUgZmFpbG92ZXIgY2x1c3Rlcg0KICAgIC0gQ3JlYXRlIG5ldyBjbHVzdGVyDQogICAgLSBBZGQgbWVtYmVycw0KKiBDb25mdWd1cmUgRkMgcXVvcnVtDQogICAgLSBDcmVhdGUgbmV3IGZvbGRlciB0aGF0IHdpbGwgYmUgc2hhcmVkDQogICAgLSBTaGFyZSB0aGF0IGZvbGRlciB3aXRoIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zDQogICAgLSBDb25maWd1cmUgcXVvcnVtIG1vZGUNCg0KDQoNCiMjIEhlbHBmdWwgU21iU2hhcmUqIEZ1bmN0aW9ucw0KDQoqIE5ldy1TbWJTaGFyZQ0KKiBHcmFudC1TbWJTaGFyZUFjY2Vzcw0KDQojPg0KDQp0cmFwIHsNCiAgICAmJFRyYXBIYW5kbGVyDQp9DQoNCg0KDQpmdW5jdGlvbiBJbnN0YWxsLUZhaWxvdmVyQ2x1c3RlclByZXJlcXVpc2l0ZXMgew0KICAgICNJbXBvcnQtTW9kdWxlIEZhaWxvdmVyQ2x1c3RlcnMNCg0KICAgIEFkZC1XaW5kb3dzRmVhdHVyZSBGYWlsb3Zlci1DbHVzdGVyaW5nLCBSU0FULUNsdXN0ZXJpbmctUG93ZXJTaGVsbA0KfQ0KDQoNCg0KZnVuY3Rpb24gTmV3LUZhaWxvdmVyQ2x1c3RlclNoYXJlZEZvbGRlciB7DQoJcGFyYW0gKA0KICAgICAgICBbU3RyaW5nXSAkQ2x1c3Rlck5hbWUsDQogICAgICAgIFtTdHJpbmddICREb21haW5OYW1lLA0KICAgICAgICBbU3RyaW5nXSAkU2hhcmVTZXJ2ZXIsDQoJCVtTdHJpbmddICRTaGFyZVBhdGggPSAkKCRFbnY6U3lzdGVtRHJpdmUgKyAnXEZDU2hhcmUnKSwNCgkJW1N0cmluZ10gJFNoYXJlTmFtZSA9ICdGQ1NoYXJlJywNCiAgICAgICAgW1N0cmluZ10gJFVzZXJOYW1lLA0KICAgICAgICBbU3RyaW5nXSAkVXNlclBhc3N3b3JkLA0KICAgICAgICAkQ3JlZGVudGlhbCA9ICRudWxsDQoJKQ0KICAgIGJlZ2luIHsNCiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uDQogICAgfQ0KICAgIGVuZCB7DQogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kDQogICAgfQ0KICAgIHByb2Nlc3Mgew0KICAgICAgICB0cmFwIHsNCiAgICAgICAgICAgICYkVHJhcEhhbmRsZXINCiAgICAgICAgfQ0KDQogICAgICAgIFdyaXRlLUxvZyAiLS0+IE5ldy1GYWlsb3ZlckNsdXN0ZXJTaGFyZWRGb2xkZXIiDQoNCiAgICAgICAgV3JpdGUtTG9nICJDcmVhdGluZyBzaGFyZWQgZm9sZGVyIGZvciBGYWlsb3ZlciBDbHVzdGVyIC4uLiINCiAgICAgICAgDQogICAgICAgIGlmICgkQ3JlZGVudGlhbCAtZXEgJG51bGwpIHsNCiAgICAgICAgICAgICRDcmVkZW50aWFsID0gTmV3LUNyZWRlbnRpYWwgLVVzZXJOYW1lICIkRG9tYWluTmFtZVwkVXNlck5hbWUiIC1QYXNzd29yZCAiJFVzZXJQYXNzd29yZCINCiAgICAgICAgfQ0KDQogICAgICAgIGlmICgoVGVzdC1Db25uZWN0aW9uIC1Db21wdXRlck5hbWUgJFNoYXJlU2VydmVyIC1Db3VudCAxIC1RdWlldCkgLWVxICRmYWxzZSkgew0KICAgICAgICAgICAgdGhyb3coIlNlcnZlciAnJFNoYXJlU2VydmVyJyBpcyB1bnJlYWNoYWJsZSB2aWEgSUNNUC4iKQ0KICAgICAgICB9DQoNCiAgICAgICAgJFNlc3Npb24gPSBOZXctUFNTZXNzaW9uIC1Db21wdXRlck5hbWUgJFNoYXJlU2VydmVyIC1DcmVkZW50aWFsICRDcmVkZW50aWFsDQoNCiAgICAgICAgV3JpdGUtTG9nICJDcmVhdGluZyBmb2xkZXIgb24gJyRTaGFyZVNlcnZlcicgLi4uIg0KICAgICAgICBJbnZva2UtQ29tbWFuZCAtU2Vzc2lvbiAkU2Vzc2lvbiAtU2NyaXB0QmxvY2sgew0KICAgICAgICAgICAgICAgIHBhcmFtICgNCiAgICAgICAgICAgICAgICAgICAgW1N0cmluZ10gJFNoYXJlUGF0aCwNCiAgICAgICAgICAgICAgICAgICAgW1N0cmluZ10gJFNoYXJlTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgW1N0cmluZ10gJENsdXN0ZXJBY2NvdW50DQogICAgICAgICAgICAgICAgKQ0KDQogICAgICAgICAgICAgICAgUmVtb3ZlLVNtYlNoYXJlIC1OYW1lICRTaGFyZU5hbWUgLUZvcmNlIC1FcnJvckFjdGlvbiAnU2lsZW50bHlDb250aW51ZScNCiAgICAgICAgICAgICAgICBSZW1vdmUtSXRlbSAtUGF0aCAkU2hhcmVQYXRoIC1Gb3JjZSAtRXJyb3JBY3Rpb24gJ1NpbGVudGx5Q29udGludWUnDQoNCiAgICAgICAgICAgICAgICBOZXctSXRlbSAtUGF0aCAkU2hhcmVQYXRoIC1JdGVtVHlwZSBDb250YWluZXIgLUZvcmNlDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgTmV3LVNtYlNoYXJlIC1QYXRoICRTaGFyZVBhdGggYA0KICAgICAgICAgICAgICAgICAgICAtTmFtZSAkU2hhcmVOYW1lIGANCiAgICAgICAgICAgICAgICAgICAgLUZ1bGxBY2Nlc3MgIiRDbHVzdGVyQWNjb3VudCIsICdFdmVyeW9uZScgYA0KICAgICAgICAgICAgICAgICAgICAtRGVzY3JpcHRpb24gIlNoYXJlZCBmb2xkZXIgZm9yIEZhaWxvdmVyIENsdXN0ZXIuIg0KDQogICAgICAgICAgICB9IC1Bcmd1bWVudExpc3QgJFNoYXJlUGF0aCwgJFNoYXJlTmFtZSwgIiREb21haW5OYW1lXCRDbHVzdGVyTmFtZWAkIg0KDQogICAgICAgIFdyaXRlLUxvZyAiQ29uZmd1cmluZyBGYWlsb3ZlciBDbHVzdGVyIHRvIHVzZSBzaGFyZWQgZm9sZGVyIGFzIHFvdXJ1bSByZXNvdXJzZSAuLi4iDQoNCiAgICAgICAgJG51bGwgPSBTZXQtQ2x1c3RlclF1b3J1bSAtTm9kZUFuZEZpbGVTaGFyZU1ham9yaXR5ICJcXCRTaGFyZVNlcnZlclwkU2hhcmVOYW1lIg0KDQogICAgICAgIFdyaXRlLUxvZyAiPC0tIE5ldy1GYWlsb3ZlckNsdXN0ZXJTaGFyZWRGb2xkZXIiDQogICAgfQ0KfQ0KDQoNCg0KZnVuY3Rpb24gTmV3LUZhaWxvdmVyQ2x1c3RlciB7DQoJcGFyYW0gKA0KICAgICAgICBbU3RyaW5nXSAkQ2x1c3Rlck5hbWUsDQogICAgICAgIFtTdHJpbmddICRTdGF0aWNBZGRyZXNzLA0KICAgICAgICBbU3RyaW5nW11dICRDbHVzdGVyTm9kZXMsDQogICAgICAgIFtTdHJpbmddICREb21haW5OYW1lLA0KICAgICAgICBbU3RyaW5nXSAkVXNlck5hbWUsDQogICAgICAgIFtTdHJpbmddICRVc2VyUGFzc3dvcmQsDQogICAgICAgICRDcmVkZW50aWFsDQogICAgKQ0KICAgIGJlZ2luIHsNCiAgICAgICAgU2hvdy1JbnZvY2F0aW9uSW5mbyAkTXlJbnZvY2F0aW9uDQogICAgfQ0KICAgIGVuZCB7DQogICAgICAgIFNob3ctSW52b2NhdGlvbkluZm8gJE15SW52b2NhdGlvbiAtRW5kDQogICAgfQ0KICAgIHByb2Nlc3Mgew0KICAgICAgICB0cmFwIHsNCiAgICAgICAgICAgICYkVHJhcEhhbmRsZXINCiAgICAgICAgfQ0KDQogICAgICAgIFdyaXRlLUxvZyAiQ2x1c3Rlck5vZGVzOiAkKCRDbHVzdGVyTm9kZXMgLWpvaW4gJywgJykiDQoNCiAgICAgICAgaWYgKCRDcmVkZW50aWFsIC1lcSAkbnVsbCkgew0KICAgICAgICAgICAgJENyZWRlbnRpYWwgPSBOZXctQ3JlZGVudGlhbCAtVXNlck5hbWUgIiREb21haW5OYW1lXCRVc2VyTmFtZSIgLVBhc3N3b3JkICIkVXNlclBhc3N3b3JkIg0KICAgICAgICB9DQoNCiAgICAgICAgSW1wb3J0LU1vZHVsZSBGYWlsb3ZlckNsdXN0ZXJzDQoNCiAgICAJaWYgKChHZXQtQ2x1c3RlciAkQ2x1c3Rlck5hbWUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpIC1lcSAkbnVsbCkgew0KICAgICAgICAgICAgV3JpdGUtTG9nICJDcmVhdGluZyBuZXcgY2x1c3RlciAnJENsdXN0ZXJOYW1lJyAuLi4iDQogICAgICAgICAgICBTdGFydC1Qb3dlclNoZWxsUHJvY2VzcyAtQ29tbWFuZCBAIg0KSW1wb3J0LU1vZHVsZSBGYWlsb3ZlckNsdXN0ZXJzDQpOZXctQ2x1c3RlciAtTmFtZSAnJENsdXN0ZXJOYW1lJyAtU3RhdGljQWRkcmVzcyAnJFN0YXRpY0FkZHJlc3MnDQoiQCAtQ3JlZGVudGlhbCAkQ3JlZGVudGlhbCAtTm9CYXNlNjQNCiAgICAgICAgICAgIFN0YXJ0LVNsZWVwIC1TZWNvbmRzIDE1DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBXcml0ZS1Mb2cgIkNsdXN0ZXIgJyRDbHVzdGVyTmFtZScgYWxyZWFkeSBleGlzdHMuIg0KICAgICAgICB9DQoNCiAgICAgICAgZm9yZWFjaCAoJE5vZGUgaW4gJENsdXN0ZXJOb2Rlcykgew0KICAgICAgICAgICAgV3JpdGUtTG9nICJBZGRpbmcgbm9kZSAnJE5vZGUnIHRvIHRoZSBjbHVzdGVyICckQ2x1c3Rlck5hbWUnIC4uLiINCiAgICAgICAgICAgIGlmICgoR2V0LUNsdXN0ZXJOb2RlICROb2RlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlKSAtZXEgJG51bGwpIHsNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2cgIkFkZGluZyBub2RlIC4uLiINCiAgICAgICAgICAgICAgICBTdGFydC1Qb3dlclNoZWxsUHJvY2VzcyAtQ29tbWFuZCBAIg0KSW1wb3J0LU1vZHVsZSBGYWlsb3ZlckNsdXN0ZXJzDQpBZGQtQ2x1c3Rlck5vZGUgLUNsdXN0ZXIgJyRDbHVzdGVyTmFtZScgLU5hbWUgJyROb2RlJw0KIkAgLUNyZWRlbnRpYWwgJENyZWRlbnRpYWwgLU5vQmFzZTY0DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2cgIk5vZGUgJyROb2RlJyBhbHJlYWR5IGEgcGFydCBvZiB0aGUgY2x1c3RlciAnJENsdXN0ZXJOYW1lJy4iDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9DQoNCg0KDQo8Iw0KDQojIEV4YW1wbGUNCg0KJERvbWFpbk5hbWUgPSAnZmMtYWNtZS5sb2NhbCcNCiREb21haW5Vc2VyID0gJ0FkbWluaXN0cmF0b3InDQokRG9tYWluUGFzc3dvcmQgPSAnUEBzc3cwcmQnDQoNCiRDbHVzdGVyTmFtZSA9ICdmYy10ZXN0Jw0KJENsdXN0ZXJJUCA9ICcxMC4yMDAuMC42MCcNCiRDbHVzdGVyTm9kZXMgPSBAKCdmYy1ub2RlLTAxJywnZmMtbm9kZS0wMicsJ2ZjLW5vZGUtMDMnKQ0KDQokU2hhcmVTZXJ2ZXIgPSAnZmMtZGMtMDEnDQokU2hhcmVOYW1lID0gJ0ZDU2hhcmUnDQoNCiRTaGFyZVBhdGggPSAiQzpcJFNoYXJlTmFtZSINCg0KDQoNCkltcG9ydC1Nb2R1bGUgQ29yZUZ1bmN0aW9ucyAtRm9yY2UNCg0KJENyZWRzID0gTmV3LUNyZWRlbnRpYWwgYA0KICAgIC1Vc2VyTmFtZSAiJERvbWFpbk5hbWVcJERvbWFpblVzZXIiIGANCiAgICAtUGFzc3dvcmQgIiREb21haW5QYXNzd29yZCINCg0KTmV3LUZhaWxvdmVyQ2x1c3RlciBgDQogICAgLUNsdXN0ZXJOYW1lICRDbHVzdGVyTmFtZSBgDQogICAgLVN0YXRpY0FkZHJlc3MgJENsdXN0ZXJJUCBgDQogICAgLUNsdXN0ZXJOb2RlcyAkQ2x1c3Rlck5vZGVzIGANCiAgICAtQ3JlZGVudGlhbCAkQ3JlZHMNCg0KTmV3LUZhaWxvdmVyQ2x1c3RlclNoYXJlZEZvbGRlciBgDQogICAgLUNsdXN0ZXJOYW1lICRDbHVzdGVyTmFtZSBgDQogICAgLURvbWFpbk5hbWUgJERvbWFpbk5hbWUgYA0KICAgIC1TaGFyZVNlcnZlciAkU2hhcmVTZXJ2ZXIgYA0KICAgIC1TaGFyZVBhdGggIiRTaGFyZVBhdGgiIGANCiAgICAtU2hhcmVOYW1lICIkU2hhcmVOYW1lIiBgDQogICAgLUNyZWRlbnRpYWwgJENyZWRzDQoNCiM+DQo="
]
}