IyAkSWQkCgojIGxhbmd1YWdlCgojIHBhY2thZ2Ugb3JnLmFwYWNoZS5jYXRhbGluYS5yZWFsbQoKamFhc1JlYWxtLmFjY291bnRFeHBpcmVkPWxlIG5vbSBkJyd1dGlsaXNhdGV1ciB7MH0gTicnQSBQQVMg6XTpIGF1dGhlbnRpZmnpIGNhciBsZSBjb21wdGUgYSBleHBpcukKamFhc1JlYWxtLmF1dGhlbnRpY2F0ZVN1Y2Nlc3M9bGUgbm9tIGQnJ3V0aWxpc2F0ZXVyIHswfSBhIOl06SBhdXRoZW50aWZp6SBhdmVjIHN1Y2PocwpqYWFzUmVhbG0uY3JlZGVudGlhbEV4cGlyZWQ9bGUgbm9tIGQnJ3V0aWxpc2F0ZXVyIHswfSBOJydBIFBBUyDpdOkgYXV0aGVudGlmaekgY2FyIHNvbiBjculkaXQgYSBleHBpcukgKGV4cGlyZWQgY3JlZGVudGlhbCkKamFhc1JlYWxtLmZhaWxlZExvZ2luPWxlIG5vbSBkJyd1dGlsaXNhdGV1ciB7MH0gTicnQSBQQVMg6XTpIGF1dGhlbnRpZmnpIGNhciBzb24gY29udHL0bGUgZCcnYWNj6HMgKGxvZ2luKSBhIOljaG916QpqYWFzUmVhbG0ubG9naW5FeGNlcHRpb249RXhjZXB0aW9uIGxvcnMgZGUgbCcnYXV0aGVudGlmaWNhdGlvbiBwYXIgbG9naW4gZHUgbm9tIGQnJ3V0aWxpc2F0ZXVyIHswfQpqZGJjUmVhbG0uYXV0aGVudGljYXRlRmFpbHVyZT1sZSBub20gZCcndXRpbGlzYXRldXIgezB9IE4nJ0EgUEFTIOl06SBhdXRoZW50aWZp6QpqZGJjUmVhbG0uYXV0aGVudGljYXRlU3VjY2Vzcz1sZSBub20gZCcndXRpbGlzYXRldXIgezB9IGEg6XTpIGF1dGhlbnRpZmnpIGF2ZWMgc3VjY+hzCmpkYmNSZWFsbS5jbG9zZT1FeGNlcHRpb24gbG9ycyBkZSBsYSBmZXJtZXR1cmUgZGUgbGEgY29ubmV4aW9uIOAgbGEgYmFzZSBkZSBkb25u6WVzCmpkYmNSZWFsbS5leGNlcHRpb249RXhjZXB0aW9uIHBlbmRhbnQgbGUgdHJhaXRlbWVudCBkZSBsJydhdXRoZW50aWZpY2F0aW9uCmpkYmNSZWFsbS5vcGVuPUV4Y2VwdGlvbiBsb3JzIGRlIGwnJ291dmVydHVyZSBkZSBsYSBiYXNlIGRlIGRvbm7pZXMKam5kaVJlYWxtLmF1dGhlbnRpY2F0ZUZhaWx1cmU9TGUgbm9tIGQnJ3V0aWxpc2F0ZXVyIHswfSBOJydBIFBBUyDpdOkgYXV0aGVudGlmaekKam5kaVJlYWxtLmF1dGhlbnRpY2F0ZVN1Y2Nlc3M9TGUgbm9tIGQnJ3V0aWxpc2F0ZXVyIHswfSBhIOl06SBhdXRoZW50aWZp6SBhdmVjIHN1Y2PocwpqbmRpUmVhbG0uY2xvc2U9RXhjZXB0aW9uIGxvcnMgZGUgbGEgZmVybWV0dXJlIGRlIGxhIGNvbm5leGlvbiBhdSBzZXJ2ZXVyIGQnJ2FjY+hzIChkaXJlY3Rvcnkgc2VydmVyKQpqbmRpUmVhbG0uZXhjZXB0aW9uPUV4Y2VwdGlvbiBwZW5kYW50IGxlIHRyYWl0ZW1lbnQgZGUgbCcnYXV0aGVudGlmaWNhdGlvbgpqbmRpUmVhbG0ub3Blbj1FeGNlcHRpb24gbG9ycyBkZSBsJydvdXZlcnR1cmUgZGUgbGEgY29ubmV4aW9uIGF1IHNlcnZldXIgZCcnYWNj6HMgKGRpcmVjdG9yeSBzZXJ2ZXIpCm1lbW9yeVJlYWxtLmF1dGhlbnRpY2F0ZUZhaWx1cmU9bGUgbm9tIGQnJ3V0aWxpc2F0ZXVyIHswfSBOJydBIFBBUyDpdOkgYXV0aGVudGlmaekKbWVtb3J5UmVhbG0uYXV0aGVudGljYXRlU3VjY2Vzcz1sZSBub20gZCcndXRpbGlzYXRldXIgezB9IGEg6XTpIGF1dGhlbnRpZmnpIGF2ZWMgc3VjY+hzCm1lbW9yeVJlYWxtLmxvYWRFeGlzdD1MZSBmaWNoaWVyIGJhc2UgZGUgZG9ubullcyBt6W1vaXJlIChtZW1vcnkgZGF0YWJhc2UpIHswfSBuZSBwZXV0IOp0cmUgbHUKbWVtb3J5UmVhbG0ubG9hZFBhdGg9Q2hhcmdlbWVudCBkZXMgdXRpbGlzYXRldXJzIGRlcHVpcyBsZSBmaWNoaWVyIGJhc2UgZGUgZG9ubullcyBt6W1vaXJlIChtZW1vcnkgZGF0YWJhc2UpIHswfQptZW1vcnlSZWFsbS5yZWFkWG1sPUV4Y2VwdGlvbiBsb3JzIGRlIGxhIGxlY3R1cmUgZHUgZmljaGllciBiYXNlIGRlIGRvbm7pZXMgbeltb2lyZSAobWVtb3J5IGRhdGFiYXNlKQpyZWFsbUJhc2UuYWxnb3JpdGhtPUwnJ2FsZ29yaXRobWUgZCcnZW1wcmVpbnRlIGRlIG1lc3NhZ2UgKG1lc3NhZ2UgZGlnZXN0KSB7MH0gaW5kaXF16SBlc3QgaW52YWxpZGUKcmVhbG1CYXNlLmFscmVhZHlTdGFydGVkPUNlIHJveWF1bWUgKFJlYWxtKSBhIGTpauAg6XTpIGTpbWFycukKcmVhbG1CYXNlLmRpZ2VzdD1FcnJldXIgbG9ycyBkdSB0cmFpdGVtZW50IGRlcyBlbXByZWludGVzIChkaWdlc3QpIGRlcyBjculkaXRzIHV0aWxpc2F0ZXVyICh1c2VyIGNyZWRlbnRpYWxzKQpyZWFsbUJhc2UuZm9yYmlkZGVuPUwnJ2FjY+hzIOAgbGEgcmVzc291cmNlIGRlbWFuZOllIGEg6XTpIGludGVyZGl0CnJlYWxtQmFzZS5oYXNSb2xlRmFpbHVyZT1MZSBub20gZCcndXRpbGlzYXRldXIgezB9IE4nJ0EgUEFTIGRlIHL0bGUgezF9CnJlYWxtQmFzZS5oYXNSb2xlU3VjY2Vzcz1MZSBub20gZCcndXRpbGlzYXRldXIgezB9IGEgcG91ciBy9GxlIHsxfQpyZWFsbUJhc2Uubm90QXV0aGVudGljYXRlZD1FcnJldXIgZGUgY29uZmlndXJhdGlvbjogIEltcG9zc2libGUgZGUgY29uZHVpcmUgdW4gY29udHL0bGUgZCcnYWNj6HMgc2FucyB1biBhdXRoZW50aWZp6SBwcmluY2lwYWwgKGF1dGhlbnRpY2F0ZWQgcHJpbmNpcGFsKQpyZWFsbUJhc2Uubm90U3RhcnRlZD1DZSByb3lhdW1lIChSZWFsbSkgbicnYSBwYXMgZW5jb3JlIOl06SBk6W1hcnLpCnJlYWxtQmFzZS5hdXRoZW50aWNhdGVGYWlsdXJlPUxlIG5vbSBkJyd1dGlsaXNhdGV1ciB7MH0gTicnQSBQQVMg6XTpIGF1dGhlbnRpZmnpCnJlYWxtQmFzZS5hdXRoZW50aWNhdGVTdWNjZXNzPUxlIG5vbSBkJyd1dGlsaXNhdGV1ciB7MH0gYSDpdOkgYXV0aGVudGlmaekgYXZlYyBzdWNj6HMKdXNlckRhdGFiYXNlUmVhbG0uYXV0aGVudGljYXRlRXJyb3I9RXJyZXVyIGRlIGNvbmZpZ3VyYXRpb24gZHUgY29udHL0bGUgZCcnYWNj6HMgKGxvZ2luKSBsb3JzIGRlIGwnJ2F1dGhlbnRpZmljYXRpb24gZHUgbm9tIGQnJ3V0aWxpc2F0ZXVyIHswfQp1c2VyRGF0YWJhc2VSZWFsbS5sb29rdXA9RXhjZXB0aW9uIGxvcnMgZGUgbGEgcmVjaGVyY2hlIGRhbnMgbGEgYmFzZSBkZSBkb25u6WVzIHV0aWxpc2F0ZXVycyBhdmVjIGxhIGNsZWYgezB9CnVzZXJEYXRhYmFzZVJlYWxtLm5vRGF0YWJhc2U9QXVjdW4gY29tcG9zYW50IGJhc2UgZGUgZG9ubullcyB1dGlsaXNhdGV1cnMgdHJvdXbpIHBvdXIgbGEgY2xlZiB7MH0KdXNlckRhdGFiYXNlUmVhbG0ubm9FbmdpbmU9QXVjdW4gY29tcG9zYW50IG1vdGV1ciAoZW5naW5lIGNvbXBvbmVudCkgdHJvdXbpIGRhbnMgbGEgaGnpcmFyY2hpZSBkZXMgY29udGVuZXVycwp1c2VyRGF0YWJhc2VSZWFsbS5ub0dsb2JhbD1BdWN1bmUgcmVzc291cmNlIGdsb2JhbGUgSk5ESSB0cm91dullCg==