IyBNYWtlZmlsZSBmb3IgUE8gZGlyZWN0b3JpZXMuCiMgRnJhbudvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTguCgpBVVRPTUFLRV9PUFRJT05TID0gZ25pdHMKCmxvY2FsZWRpciA9ICQocHJlZml4KS9zaGFyZS9sb2NhbGUKCkFMTF9QT0ZJTEVTID0gQEFMTF9QT0ZJTEVTQApBTExfTU9GSUxFUyA9IEBBTExfTU9GSUxFU0AKTU9GSUxFUyA9IEBNT0ZJTEVTQAoKRVhUUkFfRElTVCA9ICQoUEFDS0FHRSkucG90ICQoQUxMX1BPRklMRVMpICQoQUxMX01PRklMRVMpCgpNU0dGTVQgPSBtc2dmbXQKTVNHTUVSR0UgPSBtc2dtZXJnZQpYR0VUVEVYVCA9IHhnZXR0ZXh0CgpTVUZGSVhFUyA9IC5wbyAucG94IC5tbwoKLnBvLnBveDoKCSQoTUFLRSkgJChQQUNLQUdFKS5wb3QKCSQoTVNHTUVSR0UpICQ8ICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnBvdCAtbyAkKi5wb3gKCi5wby5tbzoKCWZpbGU9JChzcmNkaXIpL2BlY2hvICQqIHwgc2VkICdzLC4qLywsJ2AubW8gXAoJICAmJiBybSAtZiAkJGZpbGUgJiYgJChNU0dGTVQpIC1vICQkZmlsZSAkPAoKYWxsOiAkKEFMTF9NT0ZJTEVTKQoKaW5zdGFsbC1kYXRhLWxvY2FsOiAkKE1PRklMRVMpCmlmIFVTRV9OTFMKCWZpbGVzPSckKE1PRklMRVMpJzsgXAoJZm9yIGZpbGUgaW4gJCRmaWxlczsgZG8gXAoJICBiYXNlPWBiYXNlbmFtZSAkJGZpbGVgOyBcCgkgIGxhbmdkaXI9JChERVNURElSKSQobG9jYWxlZGlyKS9gZWNobyAkJGJhc2UgfCBzZWQgJ3MvXC5tbyQkLy8nYC9MQ19NRVNTQUdFUzsgXAoJICAkKG1raW5zdGFsbGRpcnMpICQkbGFuZ2RpcjsgXAoJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgJCRsYW5nZGlyLyQoUEFDS0FHRSkubW8iOyBcCgkgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlICQkbGFuZ2Rpci8kKFBBQ0tBR0UpLm1vOyBcCglkb25lCmVuZGlmCgp1bmluc3RhbGwtbG9jYWw6CmlmIFVTRV9OTFMKCWZpbGVzPSckKE1PRklMRVMpJzsgXAoJZm9yIGZpbGUgaW4gJCRmaWxlczsgZG8gXAoJICBiYXNlPWBiYXNlbmFtZSAkJGZpbGVgOyBcCgkgIGxhbmdkaXI9JChERVNURElSKSQobG9jYWxlZGlyKS9gZWNobyAkJGJhc2UgfCBzZWQgJ3MvXC5tbyQkLy8nYC9MQ19NRVNTQUdFUzsgXAoJICBybSAtZiAkJGxhbmdkaXIvJChQQUNLQUdFKS5tbzsgXAoJZG9uZQplbmRpZgoKTUFJTlRBSU5FUl9DTEVBTiA9ICQoUEFDS0FHRSkucG90ICQoTU9GSUxFUykKCiQoc3JjZGlyKS8kKFBBQ0tBR0UpLnBvdDogJCh0b3Bfc3JjZGlyKS9zdGFtcC1wb3QKCSQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChQQUNLQUdFKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKCSAgLS1hZGQtY29tbWVudHMgLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fIGBjYXQgJCh0b3Bfc3JjZGlyKS9zdGFtcC1wb3RgCgl0ZXN0ICEgLWYgJChQQUNLQUdFKS5wbyB8fCAoIHJtIC1mICRAICYmIG12ICQoUEFDS0FHRSkucG8gJEAgKQoKdXBkYXRlLXBvOiBNYWtlZmlsZQoJJChNQUtFKSAkKFBBQ0tBR0UpLnBvdAoJZmlsZXM9JyQoQUxMX01PRklMRVMpJzsgXAoJZm9yIGZpbGUgaW4gJCRmaWxlczsgZG8gXAoJICBiYXNlPWBiYXNlbmFtZSAkJGZpbGVgOyBcCgkgIGxhbmc9YGVjaG8gJCRiYXNlIHwgc2VkICdzL1wubW8kJC8vJ2A7IFwKCSAgbXYgJChzcmNkaXIpLyQkbGFuZy5wbyAkKHNyY2RpcikvJCRsYW5nLm9sZC5wbzsgXAoJICBlY2hvICIkJGxhbmc6IjsgXAoJICBjZCAkKHNyY2RpcikgXAoJICAgICYmIGlmICQoTVNHTUVSR0UpICQkbGFuZy5vbGQucG8gJChQQUNLQUdFKS5wb3QgLW8gJCRsYW5nLnBvOyB0aGVuIFwKCSAgICAgIHJtIC1mICQkbGFuZy5vbGQucG87IFwKCSAgICBlbHNlIFwKCSAgICAgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGZpbGUgZmFpbGVkISI7IFwKCSAgICAgIHJtIC1mICQkbGFuZy5wbzsgXAoJICAgICAgbXYgJCRsYW5nLm9sZC5wbyAkJGxhbmcucG87IFwKCSAgICBmaTsgXAoJZG9uZQo=