Update LoRa Cloud integration.

This commit is contained in:
Orne Brocaar 2023-03-08 17:01:11 +00:00
parent 50f8093c07
commit ef97eccf62
18 changed files with 1316 additions and 1374 deletions

View File

@ -99,267 +99,267 @@ namespace Chirpstack.Api {
"c3QSFgoOYXBwbGljYXRpb25faWQYASABKAkiegoUTG9yYUNsb3VkSW50ZWdy",
"YXRpb24SFgoOYXBwbGljYXRpb25faWQYASABKAkSSgoabW9kZW1fZ2VvbG9j",
"YXRpb25fc2VydmljZXMYAiABKAsyJi5hcGkuTG9yYUNsb3VkTW9kZW1HZW9s",
"b2NhdGlvblNlcnZpY2VzIsADCiFMb3JhQ2xvdWRNb2RlbUdlb2xvY2F0aW9u",
"b2NhdGlvblNlcnZpY2VzIrIDCiFMb3JhQ2xvdWRNb2RlbUdlb2xvY2F0aW9u",
"U2VydmljZXMSDQoFdG9rZW4YASABKAkSFQoNbW9kZW1fZW5hYmxlZBgCIAEo",
"CBISCgptb2RlbV9wb3J0GAMgASgNEhEKCWduc3NfcG9ydBgEIAEoDRIYChBn",
"bnNzX3VzZV9yeF90aW1lGAUgASgIEhEKCXBhcnNlX3RsdhgGIAEoCBIeChZn",
"ZW9sb2NhdGlvbl9idWZmZXJfdHRsGAcgASgNEiMKG2dlb2xvY2F0aW9uX21p",
"bl9idWZmZXJfc2l6ZRgIIAEoDRIYChBnZW9sb2NhdGlvbl90ZG9hGAkgASgI",
"EhgKEGdlb2xvY2F0aW9uX3Jzc2kYCiABKAgSGAoQZ2VvbG9jYXRpb25fZ25z",
"cxgLIAEoCBImCh5nZW9sb2NhdGlvbl9nbnNzX3BheWxvYWRfZmllbGQYDCAB",
"KAkSJAocZ2VvbG9jYXRpb25fZ25zc191c2VfcnhfdGltZRgNIAEoCBIYChBn",
"ZW9sb2NhdGlvbl93aWZpGA4gASgIEiYKHmdlb2xvY2F0aW9uX3dpZmlfcGF5",
"bG9hZF9maWVsZBgPIAEoCSJTCiFDcmVhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlv",
"blJlcXVlc3QSLgoLaW50ZWdyYXRpb24YASABKAsyGS5hcGkuTG9yYUNsb3Vk",
"SW50ZWdyYXRpb24iOAoeR2V0TG9yYUNsb3VkSW50ZWdyYXRpb25SZXF1ZXN0",
"EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIlEKH0dldExvcmFDbG91ZEludGVn",
"cmF0aW9uUmVzcG9uc2USLgoLaW50ZWdyYXRpb24YASABKAsyGS5hcGkuTG9y",
"YUNsb3VkSW50ZWdyYXRpb24iUwohVXBkYXRlTG9yYUNsb3VkSW50ZWdyYXRp",
"b25SZXF1ZXN0Ei4KC2ludGVncmF0aW9uGAEgASgLMhkuYXBpLkxvcmFDbG91",
"ZEludGVncmF0aW9uIjsKIURlbGV0ZUxvcmFDbG91ZEludGVncmF0aW9uUmVx",
"dWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSKRAQoUR2NwUHViU3ViSW50",
"ZWdyYXRpb24SFgoOYXBwbGljYXRpb25faWQYASABKAkSHwoIZW5jb2RpbmcY",
"AiABKA4yDS5hcGkuRW5jb2RpbmcSGAoQY3JlZGVudGlhbHNfZmlsZRgDIAEo",
"CRISCgpwcm9qZWN0X2lkGAQgASgJEhIKCnRvcGljX25hbWUYBSABKAkiUwoh",
"Q3JlYXRlR2NwUHViU3ViSW50ZWdyYXRpb25SZXF1ZXN0Ei4KC2ludGVncmF0",
"aW9uGAEgASgLMhkuYXBpLkdjcFB1YlN1YkludGVncmF0aW9uIjgKHkdldEdj",
"cFB1YlN1YkludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgB",
"IAEoCSJRCh9HZXRHY3BQdWJTdWJJbnRlZ3JhdGlvblJlc3BvbnNlEi4KC2lu",
"dGVncmF0aW9uGAEgASgLMhkuYXBpLkdjcFB1YlN1YkludGVncmF0aW9uIlMK",
"IVVwZGF0ZUdjcFB1YlN1YkludGVncmF0aW9uUmVxdWVzdBIuCgtpbnRlZ3Jh",
"dGlvbhgBIAEoCzIZLmFwaS5HY3BQdWJTdWJJbnRlZ3JhdGlvbiI7CiFEZWxl",
"dGVHY3BQdWJTdWJJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25f",
"aWQYASABKAkioQEKEUF3c1Nuc0ludGVncmF0aW9uEhYKDmFwcGxpY2F0aW9u",
"X2lkGAEgASgJEh8KCGVuY29kaW5nGAIgASgOMg0uYXBpLkVuY29kaW5nEg4K",
"BnJlZ2lvbhgDIAEoCRIVCg1hY2Nlc3Nfa2V5X2lkGAQgASgJEhkKEXNlY3Jl",
"dF9hY2Nlc3Nfa2V5GAUgASgJEhEKCXRvcGljX2FybhgGIAEoCSJNCh5DcmVh",
"dGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVlc3QSKwoLaW50ZWdyYXRpb24YASAB",
"KAsyFi5hcGkuQXdzU25zSW50ZWdyYXRpb24iNQobR2V0QXdzU25zSW50ZWdy",
"YXRpb25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIksKHEdldEF3",
"c1Nuc0ludGVncmF0aW9uUmVzcG9uc2USKwoLaW50ZWdyYXRpb24YASABKAsy",
"Fi5hcGkuQXdzU25zSW50ZWdyYXRpb24iTQoeVXBkYXRlQXdzU25zSW50ZWdy",
"CBIXCg9mb3J3YXJkX2ZfcG9ydHMYECADKA0SGAoQZ25zc191c2VfcnhfdGlt",
"ZRgFIAEoCBIRCglwYXJzZV90bHYYBiABKAgSHgoWZ2VvbG9jYXRpb25fYnVm",
"ZmVyX3R0bBgHIAEoDRIjChtnZW9sb2NhdGlvbl9taW5fYnVmZmVyX3NpemUY",
"CCABKA0SGAoQZ2VvbG9jYXRpb25fdGRvYRgJIAEoCBIYChBnZW9sb2NhdGlv",
"bl9yc3NpGAogASgIEhgKEGdlb2xvY2F0aW9uX2duc3MYCyABKAgSJgoeZ2Vv",
"bG9jYXRpb25fZ25zc19wYXlsb2FkX2ZpZWxkGAwgASgJEiQKHGdlb2xvY2F0",
"aW9uX2duc3NfdXNlX3J4X3RpbWUYDSABKAgSGAoQZ2VvbG9jYXRpb25fd2lm",
"aRgOIAEoCBImCh5nZW9sb2NhdGlvbl93aWZpX3BheWxvYWRfZmllbGQYDyAB",
"KAkiUwohQ3JlYXRlTG9yYUNsb3VkSW50ZWdyYXRpb25SZXF1ZXN0Ei4KC2lu",
"dGVncmF0aW9uGAEgASgLMhkuYXBpLkxvcmFDbG91ZEludGVncmF0aW9uIjgK",
"HkdldExvcmFDbG91ZEludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlv",
"bl9pZBgBIAEoCSJRCh9HZXRMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlc3BvbnNl",
"Ei4KC2ludGVncmF0aW9uGAEgASgLMhkuYXBpLkxvcmFDbG91ZEludGVncmF0",
"aW9uIlMKIVVwZGF0ZUxvcmFDbG91ZEludGVncmF0aW9uUmVxdWVzdBIuCgtp",
"bnRlZ3JhdGlvbhgBIAEoCzIZLmFwaS5Mb3JhQ2xvdWRJbnRlZ3JhdGlvbiI7",
"CiFEZWxldGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGlj",
"YXRpb25faWQYASABKAkikQEKFEdjcFB1YlN1YkludGVncmF0aW9uEhYKDmFw",
"cGxpY2F0aW9uX2lkGAEgASgJEh8KCGVuY29kaW5nGAIgASgOMg0uYXBpLkVu",
"Y29kaW5nEhgKEGNyZWRlbnRpYWxzX2ZpbGUYAyABKAkSEgoKcHJvamVjdF9p",
"ZBgEIAEoCRISCgp0b3BpY19uYW1lGAUgASgJIlMKIUNyZWF0ZUdjcFB1YlN1",
"YkludGVncmF0aW9uUmVxdWVzdBIuCgtpbnRlZ3JhdGlvbhgBIAEoCzIZLmFw",
"aS5HY3BQdWJTdWJJbnRlZ3JhdGlvbiI4Ch5HZXRHY3BQdWJTdWJJbnRlZ3Jh",
"dGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkiUQofR2V0R2Nw",
"UHViU3ViSW50ZWdyYXRpb25SZXNwb25zZRIuCgtpbnRlZ3JhdGlvbhgBIAEo",
"CzIZLmFwaS5HY3BQdWJTdWJJbnRlZ3JhdGlvbiJTCiFVcGRhdGVHY3BQdWJT",
"dWJJbnRlZ3JhdGlvblJlcXVlc3QSLgoLaW50ZWdyYXRpb24YASABKAsyGS5h",
"cGkuR2NwUHViU3ViSW50ZWdyYXRpb24iOwohRGVsZXRlR2NwUHViU3ViSW50",
"ZWdyYXRpb25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIqEBChFB",
"d3NTbnNJbnRlZ3JhdGlvbhIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCRIfCghl",
"bmNvZGluZxgCIAEoDjINLmFwaS5FbmNvZGluZxIOCgZyZWdpb24YAyABKAkS",
"FQoNYWNjZXNzX2tleV9pZBgEIAEoCRIZChFzZWNyZXRfYWNjZXNzX2tleRgF",
"IAEoCRIRCgl0b3BpY19hcm4YBiABKAkiTQoeQ3JlYXRlQXdzU25zSW50ZWdy",
"YXRpb25SZXF1ZXN0EisKC2ludGVncmF0aW9uGAEgASgLMhYuYXBpLkF3c1Nu",
"c0ludGVncmF0aW9uIjgKHkRlbGV0ZUF3c1Nuc0ludGVncmF0aW9uUmVxdWVz",
"dBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSKGAQoaQXp1cmVTZXJ2aWNlQnVz",
"SW50ZWdyYXRpb24SFgoOYXBwbGljYXRpb25faWQYASABKAkSHwoIZW5jb2Rp",
"bmcYAiABKA4yDS5hcGkuRW5jb2RpbmcSGQoRY29ubmVjdGlvbl9zdHJpbmcY",
"AyABKAkSFAoMcHVibGlzaF9uYW1lGAQgASgJIl8KJ0NyZWF0ZUF6dXJlU2Vy",
"dmljZUJ1c0ludGVncmF0aW9uUmVxdWVzdBI0CgtpbnRlZ3JhdGlvbhgBIAEo",
"CzIfLmFwaS5BenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbiI+CiRHZXRBenVy",
"ZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25f",
"aWQYASABKAkiXQolR2V0QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXNw",
"b25zZRI0CgtpbnRlZ3JhdGlvbhgBIAEoCzIfLmFwaS5BenVyZVNlcnZpY2VC",
"dXNJbnRlZ3JhdGlvbiJfCidVcGRhdGVBenVyZVNlcnZpY2VCdXNJbnRlZ3Jh",
"c0ludGVncmF0aW9uIjUKG0dldEF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBIW",
"Cg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJLChxHZXRBd3NTbnNJbnRlZ3JhdGlv",
"blJlc3BvbnNlEisKC2ludGVncmF0aW9uGAEgASgLMhYuYXBpLkF3c1Nuc0lu",
"dGVncmF0aW9uIk0KHlVwZGF0ZUF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBIr",
"CgtpbnRlZ3JhdGlvbhgBIAEoCzIWLmFwaS5Bd3NTbnNJbnRlZ3JhdGlvbiI4",
"Ch5EZWxldGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRp",
"b25faWQYASABKAkihgEKGkF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uEhYK",
"DmFwcGxpY2F0aW9uX2lkGAEgASgJEh8KCGVuY29kaW5nGAIgASgOMg0uYXBp",
"LkVuY29kaW5nEhkKEWNvbm5lY3Rpb25fc3RyaW5nGAMgASgJEhQKDHB1Ymxp",
"c2hfbmFtZRgEIAEoCSJfCidDcmVhdGVBenVyZVNlcnZpY2VCdXNJbnRlZ3Jh",
"dGlvblJlcXVlc3QSNAoLaW50ZWdyYXRpb24YASABKAsyHy5hcGkuQXp1cmVT",
"ZXJ2aWNlQnVzSW50ZWdyYXRpb24iQQonRGVsZXRlQXp1cmVTZXJ2aWNlQnVz",
"SW50ZWdyYXRpb25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIk8K",
"FlBpbG90VGhpbmdzSW50ZWdyYXRpb24SFgoOYXBwbGljYXRpb25faWQYASAB",
"KAkSDgoGc2VydmVyGAIgASgJEg0KBXRva2VuGAMgASgJIlcKI0NyZWF0ZVBp",
"bG90VGhpbmdzSW50ZWdyYXRpb25SZXF1ZXN0EjAKC2ludGVncmF0aW9uGAEg",
"ASgLMhsuYXBpLlBpbG90VGhpbmdzSW50ZWdyYXRpb24iOgogR2V0UGlsb3RU",
"ZXJ2aWNlQnVzSW50ZWdyYXRpb24iPgokR2V0QXp1cmVTZXJ2aWNlQnVzSW50",
"ZWdyYXRpb25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIl0KJUdl",
"dEF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uUmVzcG9uc2USNAoLaW50ZWdy",
"YXRpb24YASABKAsyHy5hcGkuQXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24i",
"XwonVXBkYXRlQXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXF1ZXN0EjQK",
"C2ludGVncmF0aW9uGAEgASgLMh8uYXBpLkF6dXJlU2VydmljZUJ1c0ludGVn",
"cmF0aW9uIkEKJ0RlbGV0ZUF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uUmVx",
"dWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJPChZQaWxvdFRoaW5nc0lu",
"dGVncmF0aW9uEhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJEg4KBnNlcnZlchgC",
"IAEoCRINCgV0b2tlbhgDIAEoCSJXCiNDcmVhdGVQaWxvdFRoaW5nc0ludGVn",
"cmF0aW9uUmVxdWVzdBIwCgtpbnRlZ3JhdGlvbhgBIAEoCzIbLmFwaS5QaWxv",
"dFRoaW5nc0ludGVncmF0aW9uIjoKIEdldFBpbG90VGhpbmdzSW50ZWdyYXRp",
"b25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIlUKIUdldFBpbG90",
"VGhpbmdzSW50ZWdyYXRpb25SZXNwb25zZRIwCgtpbnRlZ3JhdGlvbhgBIAEo",
"CzIbLmFwaS5QaWxvdFRoaW5nc0ludGVncmF0aW9uIlcKI1VwZGF0ZVBpbG90",
"VGhpbmdzSW50ZWdyYXRpb25SZXF1ZXN0EjAKC2ludGVncmF0aW9uGAEgASgL",
"MhsuYXBpLlBpbG90VGhpbmdzSW50ZWdyYXRpb24iPQojRGVsZXRlUGlsb3RU",
"aGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASAB",
"KAkiVQohR2V0UGlsb3RUaGluZ3NJbnRlZ3JhdGlvblJlc3BvbnNlEjAKC2lu",
"dGVncmF0aW9uGAEgASgLMhsuYXBpLlBpbG90VGhpbmdzSW50ZWdyYXRpb24i",
"VwojVXBkYXRlUGlsb3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QSMAoLaW50",
"ZWdyYXRpb24YASABKAsyGy5hcGkuUGlsb3RUaGluZ3NJbnRlZ3JhdGlvbiI9",
"CiNEZWxldGVQaWxvdFRoaW5nc0ludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBs",
"aWNhdGlvbl9pZBgBIAEoCSJOChBJZnR0dEludGVncmF0aW9uEhYKDmFwcGxp",
"Y2F0aW9uX2lkGAEgASgJEgsKA2tleRgCIAEoCRIVCg11cGxpbmtfdmFsdWVz",
"GAMgAygJIksKHUNyZWF0ZUlmdHR0SW50ZWdyYXRpb25SZXF1ZXN0EioKC2lu",
"dGVncmF0aW9uGAEgASgLMhUuYXBpLklmdHR0SW50ZWdyYXRpb24iNAoaR2V0",
"SWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASAB",
"KAkiSQobR2V0SWZ0dHRJbnRlZ3JhdGlvblJlc3BvbnNlEioKC2ludGVncmF0",
"aW9uGAEgASgLMhUuYXBpLklmdHR0SW50ZWdyYXRpb24iSwodVXBkYXRlSWZ0",
"dHRJbnRlZ3JhdGlvblJlcXVlc3QSKgoLaW50ZWdyYXRpb24YASABKAsyFS5h",
"cGkuSWZ0dHRJbnRlZ3JhdGlvbiI3Ch1EZWxldGVJZnR0dEludGVncmF0aW9u",
"UmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJJCi9HZW5lcmF0ZU1x",
"dHRJbnRlZ3JhdGlvbkNsaWVudENlcnRpZmljYXRlUmVxdWVzdBIWCg5hcHBs",
"aWNhdGlvbl9pZBgBIAEoCSKWAQowR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25D",
"bGllbnRDZXJ0aWZpY2F0ZVJlc3BvbnNlEhAKCHRsc19jZXJ0GAEgASgJEg8K",
"B3Rsc19rZXkYAiABKAkSDwoHY2FfY2VydBgDIAEoCRIuCgpleHBpcmVzX2F0",
"GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCoiCghFbmNvZGlu",
"ZxIICgRKU09OEAASDAoIUFJPVE9CVUYQASq/AQoPSW50ZWdyYXRpb25LaW5k",
"EggKBEhUVFAQABINCglJTkZMVVhfREIQARIQCgxUSElOR1NfQk9BUkQQAhIO",
"CgpNWV9ERVZJQ0VTEAMSDgoKTE9SQV9DTE9VRBAEEg8KC0dDUF9QVUJfU1VC",
"EAUSCwoHQVdTX1NOUxAGEhUKEUFaVVJFX1NFUlZJQ0VfQlVTEAcSEAoMUElM",
"T1RfVEhJTkdTEAgSDwoLTVFUVF9HTE9CQUwQCRIJCgVJRlRUVBAKKj8KEUlu",
"Zmx1eERiUHJlY2lzaW9uEgYKAk5TEAASBQoBVRABEgYKAk1TEAISBQoBUxAD",
"EgUKAU0QBBIFCgFIEAUqMQoPSW5mbHV4RGJWZXJzaW9uEg4KCklORkxVWERC",
"XzEQABIOCgpJTkZMVVhEQl8yEAEyuDwKEkFwcGxpY2F0aW9uU2VydmljZRJl",
"CgZDcmVhdGUSHS5hcGkuQ3JlYXRlQXBwbGljYXRpb25SZXF1ZXN0Gh4uYXBp",
"LkNyZWF0ZUFwcGxpY2F0aW9uUmVzcG9uc2UiHILT5JMCFiIRL2FwaS9hcHBs",
"aWNhdGlvbnM6ASoSXgoDR2V0EhouYXBpLkdldEFwcGxpY2F0aW9uUmVxdWVz",
"dBobLmFwaS5HZXRBcHBsaWNhdGlvblJlc3BvbnNlIh6C0+STAhgSFi9hcGkv",
"YXBwbGljYXRpb25zL3tpZH0SbgoGVXBkYXRlEh0uYXBpLlVwZGF0ZUFwcGxp",
"Y2F0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSItgtPkkwIn",
"GiIvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb24uaWR9OgEqEl8KBkRl",
"bGV0ZRIdLmFwaS5EZWxldGVBcHBsaWNhdGlvblJlcXVlc3QaFi5nb29nbGUu",
"cHJvdG9idWYuRW1wdHkiHoLT5JMCGCoWL2FwaS9hcHBsaWNhdGlvbnMve2lk",
"fRJeCgRMaXN0EhwuYXBpLkxpc3RBcHBsaWNhdGlvbnNSZXF1ZXN0Gh0uYXBp",
"Lkxpc3RBcHBsaWNhdGlvbnNSZXNwb25zZSIZgtPkkwITEhEvYXBpL2FwcGxp",
"Y2F0aW9ucxKIAQoQTGlzdEludGVncmF0aW9ucxIcLmFwaS5MaXN0SW50ZWdy",
"YXRpb25zUmVxdWVzdBodLmFwaS5MaXN0SW50ZWdyYXRpb25zUmVzcG9uc2Ui",
"N4LT5JMCMRIvL2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9p",
"bnRlZ3JhdGlvbnMSnwEKFUNyZWF0ZUh0dHBJbnRlZ3JhdGlvbhIhLmFwaS5D",
"cmVhdGVIdHRwSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVm",
"LkVtcHR5IkuC0+STAkUiQC9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlv",
"bi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2h0dHA6ASoSkwEKEkdl",
"dEh0dHBJbnRlZ3JhdGlvbhIeLmFwaS5HZXRIdHRwSW50ZWdyYXRpb25SZXF1",
"ZXN0Gh8uYXBpLkdldEh0dHBJbnRlZ3JhdGlvblJlc3BvbnNlIjyC0+STAjYS",
"NC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRp",
"b25zL2h0dHASnwEKFVVwZGF0ZUh0dHBJbnRlZ3JhdGlvbhIhLmFwaS5VcGRh",
"dGVIdHRwSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVt",
"cHR5IkuC0+STAkUaQC9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5h",
"cHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2h0dHA6ASoSkAEKFURlbGV0",
"ZUh0dHBJbnRlZ3JhdGlvbhIhLmFwaS5EZWxldGVIdHRwSW50ZWdyYXRpb25S",
"ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjyC0+STAjYqNC9hcGkv",
"YXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2h0",
"dHASqwEKGUNyZWF0ZUluZmx1eERiSW50ZWdyYXRpb24SJS5hcGkuQ3JlYXRl",
"SW5mbHV4RGJJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
"RW1wdHkiT4LT5JMCSSJEL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9u",
"LmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaW5mbHV4ZGI6ASoSowEK",
"FkdldEluZmx1eERiSW50ZWdyYXRpb24SIi5hcGkuR2V0SW5mbHV4RGJJbnRl",
"Z3JhdGlvblJlcXVlc3QaIy5hcGkuR2V0SW5mbHV4RGJJbnRlZ3JhdGlvblJl",
"c3BvbnNlIkCC0+STAjoSOC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlv",
"bl9pZH0vaW50ZWdyYXRpb25zL2luZmx1eGRiEqsBChlVcGRhdGVJbmZsdXhE",
"YkludGVncmF0aW9uEiUuYXBpLlVwZGF0ZUluZmx1eERiSW50ZWdyYXRpb25S",
"ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ik+C0+STAkkaRC9hcGkv",
"YXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50",
"ZWdyYXRpb25zL2luZmx1eGRiOgEqEpwBChlEZWxldGVJbmZsdXhEYkludGVn",
"cmF0aW9uEiUuYXBpLkRlbGV0ZUluZmx1eERiSW50ZWdyYXRpb25SZXF1ZXN0",
"GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkCC0+STAjoqOC9hcGkvYXBwbGlj",
"YXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2luZmx1eGRi",
"ErQBChxDcmVhdGVUaGluZ3NCb2FyZEludGVncmF0aW9uEiguYXBpLkNyZWF0",
"ZVRoaW5nc0JvYXJkSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv",
"YnVmLkVtcHR5IlKC0+STAkwiRy9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3Jh",
"dGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL3RoaW5nc2JvYXJk",
"OgEqEq8BChlHZXRUaGluZ3NCb2FyZEludGVncmF0aW9uEiUuYXBpLkdldFRo",
"aW5nc0JvYXJkSW50ZWdyYXRpb25SZXF1ZXN0GiYuYXBpLkdldFRoaW5nc0Jv",
"YXJkSW50ZWdyYXRpb25SZXNwb25zZSJDgtPkkwI9EjsvYXBpL2FwcGxpY2F0",
"aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy90aGluZ3Nib2Fy",
"ZBK0AQocVXBkYXRlVGhpbmdzQm9hcmRJbnRlZ3JhdGlvbhIoLmFwaS5VcGRh",
"dGVUaGluZ3NCb2FyZEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90",
"b2J1Zi5FbXB0eSJSgtPkkwJMGkcvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdy",
"YXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy90aGluZ3Nib2Fy",
"ZDoBKhKlAQocRGVsZXRlVGhpbmdzQm9hcmRJbnRlZ3JhdGlvbhIoLmFwaS5E",
"ZWxldGVUaGluZ3NCb2FyZEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5w",
"cm90b2J1Zi5FbXB0eSJDgtPkkwI9KjsvYXBpL2FwcGxpY2F0aW9ucy97YXBw",
"bGljYXRpb25faWR9L2ludGVncmF0aW9ucy90aGluZ3Nib2FyZBKuAQoaQ3Jl",
"YXRlTXlEZXZpY2VzSW50ZWdyYXRpb24SJi5hcGkuQ3JlYXRlTXlEZXZpY2Vz",
"SW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlCC",
"0+STAkoiRS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNh",
"dGlvbl9pZH0vaW50ZWdyYXRpb25zL215ZGV2aWNlczoBKhKnAQoXR2V0TXlE",
"ZXZpY2VzSW50ZWdyYXRpb24SIy5hcGkuR2V0TXlEZXZpY2VzSW50ZWdyYXRp",
"b25SZXF1ZXN0GiQuYXBpLkdldE15RGV2aWNlc0ludGVncmF0aW9uUmVzcG9u",
"c2UiQYLT5JMCOxI5L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lk",
"fS9pbnRlZ3JhdGlvbnMvbXlkZXZpY2VzEq4BChpVcGRhdGVNeURldmljZXNJ",
"bnRlZ3JhdGlvbhImLmFwaS5VcGRhdGVNeURldmljZXNJbnRlZ3JhdGlvblJl",
"cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUILT5JMCShpFL2FwaS9h",
"cHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRl",
"Z3JhdGlvbnMvbXlkZXZpY2VzOgEqEp8BChpEZWxldGVNeURldmljZXNJbnRl",
"Z3JhdGlvbhImLmFwaS5EZWxldGVNeURldmljZXNJbnRlZ3JhdGlvblJlcXVl",
"c3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiQYLT5JMCOyo5L2FwaS9hcHBs",
"aWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbXlkZXZp",
"Y2VzEq4BChpDcmVhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvbhImLmFwaS5DcmVh",
"dGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9i",
"dWYuRW1wdHkiUILT5JMCSiJFL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0",
"aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbG9yYWNsb3VkOgEq",
"EqcBChdHZXRMb3JhQ2xvdWRJbnRlZ3JhdGlvbhIjLmFwaS5HZXRMb3JhQ2xv",
"dWRJbnRlZ3JhdGlvblJlcXVlc3QaJC5hcGkuR2V0TG9yYUNsb3VkSW50ZWdy",
"YXRpb25SZXNwb25zZSJBgtPkkwI7EjkvYXBpL2FwcGxpY2F0aW9ucy97YXBw",
"bGljYXRpb25faWR9L2ludGVncmF0aW9ucy9sb3JhY2xvdWQSrgEKGlVwZGF0",
"ZUxvcmFDbG91ZEludGVncmF0aW9uEiYuYXBpLlVwZGF0ZUxvcmFDbG91ZElu",
"dGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJQgtPk",
"kwJKGkUvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRp",
"b25faWR9L2ludGVncmF0aW9ucy9sb3JhY2xvdWQ6ASoSnwEKGkRlbGV0ZUxv",
"cmFDbG91ZEludGVncmF0aW9uEiYuYXBpLkRlbGV0ZUxvcmFDbG91ZEludGVn",
"cmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJBgtPkkwI7",
"KjkvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0",
"aW9ucy9sb3JhY2xvdWQSsAEKGkNyZWF0ZUdjcFB1YlN1YkludGVncmF0aW9u",
"EiYuYXBpLkNyZWF0ZUdjcFB1YlN1YkludGVncmF0aW9uUmVxdWVzdBoWLmdv",
"b2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPkkwJMIkcvYXBpL2FwcGxpY2F0aW9u",
"cy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9n",
"Y3AtcHViLXN1YjoBKhKpAQoXR2V0R2NwUHViU3ViSW50ZWdyYXRpb24SIy5h",
"cGkuR2V0R2NwUHViU3ViSW50ZWdyYXRpb25SZXF1ZXN0GiQuYXBpLkdldEdj",
"cFB1YlN1YkludGVncmF0aW9uUmVzcG9uc2UiQ4LT5JMCPRI7L2FwaS9hcHBs",
"aWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvZ2NwLXB1",
"Yi1zdWISsAEKGlVwZGF0ZUdjcFB1YlN1YkludGVncmF0aW9uEiYuYXBpLlVw",
"ZGF0ZUdjcFB1YlN1YkludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90",
"b2J1Zi5FbXB0eSJSgtPkkwJMGkcvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdy",
"YXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9nY3AtcHViLXN1",
"YjoBKhKhAQoaRGVsZXRlR2NwUHViU3ViSW50ZWdyYXRpb24SJi5hcGkuRGVs",
"ZXRlR2NwUHViU3ViSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv",
"YnVmLkVtcHR5IkOC0+STAj0qOy9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNh",
"dGlvbl9pZH0vaW50ZWdyYXRpb25zL2djcC1wdWItc3ViEqYBChdDcmVhdGVB",
"d3NTbnNJbnRlZ3JhdGlvbhIjLmFwaS5DcmVhdGVBd3NTbnNJbnRlZ3JhdGlv",
"blJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiToLT5JMCSCJDL2Fw",
"aS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9p",
"bnRlZ3JhdGlvbnMvYXdzLXNuczoBKhKcAQoUR2V0QXdzU25zSW50ZWdyYXRp",
"b24SIC5hcGkuR2V0QXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0GiEuYXBpLkdl",
"dEF3c1Nuc0ludGVncmF0aW9uUmVzcG9uc2UiP4LT5JMCORI3L2FwaS9hcHBs",
"aWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXdzLXNu",
"cxKmAQoXVXBkYXRlQXdzU25zSW50ZWdyYXRpb24SIy5hcGkuVXBkYXRlQXdz",
"U25zSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5",
"Ik6C0+STAkgaQy9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBs",
"aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F3cy1zbnM6ASoSlwEKF0RlbGV0",
"ZUF3c1Nuc0ludGVncmF0aW9uEiMuYXBpLkRlbGV0ZUF3c1Nuc0ludGVncmF0",
"aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSI/gtPkkwI5Kjcv",
"YXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9u",
"cy9hd3Mtc25zEsIBCiBDcmVhdGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlv",
"bhIsLmFwaS5DcmVhdGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVl",
"c3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiWILT5JMCUiJNL2FwaS9hcHBs",
"aWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3Jh",
"dGlvbnMvYXp1cmUtc2VydmljZS1idXM6ASoSwQEKHUdldEF6dXJlU2Vydmlj",
"ZUJ1c0ludGVncmF0aW9uEikuYXBpLkdldEF6dXJlU2VydmljZUJ1c0ludGVn",
"cmF0aW9uUmVxdWVzdBoqLmFwaS5HZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3Jh",
"dGlvblJlc3BvbnNlIkmC0+STAkMSQS9hcGkvYXBwbGljYXRpb25zL3thcHBs",
"aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNlcnZpY2UtYnVzEsIB",
"CiBVcGRhdGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIsLmFwaS5VcGRh",
"dGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUu",
"cHJvdG9idWYuRW1wdHkiWILT5JMCUhpNL2FwaS9hcHBsaWNhdGlvbnMve2lu",
"dGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXp1cmUt",
"c2VydmljZS1idXM6ASoSswEKIERlbGV0ZUF6dXJlU2VydmljZUJ1c0ludGVn",
"cmF0aW9uEiwuYXBpLkRlbGV0ZUF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9u",
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJJgtPkkwJDKkEvYXBp",
"L2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9h",
"enVyZS1zZXJ2aWNlLWJ1cxK1AQocQ3JlYXRlUGlsb3RUaGluZ3NJbnRlZ3Jh",
"dGlvbhIoLmFwaS5DcmVhdGVQaWxvdFRoaW5nc0ludGVncmF0aW9uUmVxdWVz",
"dBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJTgtPkkwJNIkgvYXBpL2FwcGxp",
"Y2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0",
"aW9ucy9waWxvdC10aGluZ3M6ASoSsAEKGUdldFBpbG90VGhpbmdzSW50ZWdy",
"YXRpb24SJS5hcGkuR2V0UGlsb3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3Qa",
"Ji5hcGkuR2V0UGlsb3RUaGluZ3NJbnRlZ3JhdGlvblJlc3BvbnNlIkSC0+ST",
"Aj4SPC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdy",
"YXRpb25zL3BpbG90LXRoaW5ncxK1AQocVXBkYXRlUGlsb3RUaGluZ3NJbnRl",
"Z3JhdGlvbhIoLmFwaS5VcGRhdGVQaWxvdFRoaW5nc0ludGVncmF0aW9uUmVx",
"dWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJTgtPkkwJNGkgvYXBpL2Fw",
"KAkiTgoQSWZ0dHRJbnRlZ3JhdGlvbhIWCg5hcHBsaWNhdGlvbl9pZBgBIAEo",
"CRILCgNrZXkYAiABKAkSFQoNdXBsaW5rX3ZhbHVlcxgDIAMoCSJLCh1DcmVh",
"dGVJZnR0dEludGVncmF0aW9uUmVxdWVzdBIqCgtpbnRlZ3JhdGlvbhgBIAEo",
"CzIVLmFwaS5JZnR0dEludGVncmF0aW9uIjQKGkdldElmdHR0SW50ZWdyYXRp",
"b25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIkkKG0dldElmdHR0",
"SW50ZWdyYXRpb25SZXNwb25zZRIqCgtpbnRlZ3JhdGlvbhgBIAEoCzIVLmFw",
"aS5JZnR0dEludGVncmF0aW9uIksKHVVwZGF0ZUlmdHR0SW50ZWdyYXRpb25S",
"ZXF1ZXN0EioKC2ludGVncmF0aW9uGAEgASgLMhUuYXBpLklmdHR0SW50ZWdy",
"YXRpb24iNwodRGVsZXRlSWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBw",
"bGljYXRpb25faWQYASABKAkiSQovR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25D",
"bGllbnRDZXJ0aWZpY2F0ZVJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASAB",
"KAkilgEKMEdlbmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNh",
"dGVSZXNwb25zZRIQCgh0bHNfY2VydBgBIAEoCRIPCgd0bHNfa2V5GAIgASgJ",
"Eg8KB2NhX2NlcnQYAyABKAkSLgoKZXhwaXJlc19hdBgEIAEoCzIaLmdvb2ds",
"ZS5wcm90b2J1Zi5UaW1lc3RhbXAqIgoIRW5jb2RpbmcSCAoESlNPThAAEgwK",
"CFBST1RPQlVGEAEqvwEKD0ludGVncmF0aW9uS2luZBIICgRIVFRQEAASDQoJ",
"SU5GTFVYX0RCEAESEAoMVEhJTkdTX0JPQVJEEAISDgoKTVlfREVWSUNFUxAD",
"Eg4KCkxPUkFfQ0xPVUQQBBIPCgtHQ1BfUFVCX1NVQhAFEgsKB0FXU19TTlMQ",
"BhIVChFBWlVSRV9TRVJWSUNFX0JVUxAHEhAKDFBJTE9UX1RISU5HUxAIEg8K",
"C01RVFRfR0xPQkFMEAkSCQoFSUZUVFQQCio/ChFJbmZsdXhEYlByZWNpc2lv",
"bhIGCgJOUxAAEgUKAVUQARIGCgJNUxACEgUKAVMQAxIFCgFNEAQSBQoBSBAF",
"KjEKD0luZmx1eERiVmVyc2lvbhIOCgpJTkZMVVhEQl8xEAASDgoKSU5GTFVY",
"REJfMhABMrg8ChJBcHBsaWNhdGlvblNlcnZpY2USZQoGQ3JlYXRlEh0uYXBp",
"LkNyZWF0ZUFwcGxpY2F0aW9uUmVxdWVzdBoeLmFwaS5DcmVhdGVBcHBsaWNh",
"dGlvblJlc3BvbnNlIhyC0+STAhYiES9hcGkvYXBwbGljYXRpb25zOgEqEl4K",
"A0dldBIaLmFwaS5HZXRBcHBsaWNhdGlvblJlcXVlc3QaGy5hcGkuR2V0QXBw",
"bGljYXRpb25SZXNwb25zZSIegtPkkwIYEhYvYXBpL2FwcGxpY2F0aW9ucy97",
"aWR9Em4KBlVwZGF0ZRIdLmFwaS5VcGRhdGVBcHBsaWNhdGlvblJlcXVlc3Qa",
"Fi5nb29nbGUucHJvdG9idWYuRW1wdHkiLYLT5JMCJxoiL2FwaS9hcHBsaWNh",
"dGlvbnMve2FwcGxpY2F0aW9uLmlkfToBKhJfCgZEZWxldGUSHS5hcGkuRGVs",
"ZXRlQXBwbGljYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5",
"Ih6C0+STAhgqFi9hcGkvYXBwbGljYXRpb25zL3tpZH0SXgoETGlzdBIcLmFw",
"aS5MaXN0QXBwbGljYXRpb25zUmVxdWVzdBodLmFwaS5MaXN0QXBwbGljYXRp",
"b25zUmVzcG9uc2UiGYLT5JMCExIRL2FwaS9hcHBsaWNhdGlvbnMSiAEKEExp",
"c3RJbnRlZ3JhdGlvbnMSHC5hcGkuTGlzdEludGVncmF0aW9uc1JlcXVlc3Qa",
"HS5hcGkuTGlzdEludGVncmF0aW9uc1Jlc3BvbnNlIjeC0+STAjESLy9hcGkv",
"YXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zEp8B",
"ChVDcmVhdGVIdHRwSW50ZWdyYXRpb24SIS5hcGkuQ3JlYXRlSHR0cEludGVn",
"cmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJLgtPkkwJF",
"IkAvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25f",
"aWR9L2ludGVncmF0aW9ucy9odHRwOgEqEpMBChJHZXRIdHRwSW50ZWdyYXRp",
"b24SHi5hcGkuR2V0SHR0cEludGVncmF0aW9uUmVxdWVzdBofLmFwaS5HZXRI",
"dHRwSW50ZWdyYXRpb25SZXNwb25zZSI8gtPkkwI2EjQvYXBpL2FwcGxpY2F0",
"aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9odHRwEp8BChVV",
"cGRhdGVIdHRwSW50ZWdyYXRpb24SIS5hcGkuVXBkYXRlSHR0cEludGVncmF0",
"aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJLgtPkkwJFGkAv",
"YXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9",
"L2ludGVncmF0aW9ucy9odHRwOgEqEpABChVEZWxldGVIdHRwSW50ZWdyYXRp",
"b24SIS5hcGkuRGVsZXRlSHR0cEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2ds",
"ZS5wcm90b2J1Zi5FbXB0eSI8gtPkkwI2KjQvYXBpL2FwcGxpY2F0aW9ucy97",
"YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9odHRwEqsBChlDcmVhdGVJ",
"bmZsdXhEYkludGVncmF0aW9uEiUuYXBpLkNyZWF0ZUluZmx1eERiSW50ZWdy",
"YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ik+C0+STAkki",
"RC9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9p",
"ZH0vaW50ZWdyYXRpb25zL2luZmx1eGRiOgEqEqMBChZHZXRJbmZsdXhEYklu",
"dGVncmF0aW9uEiIuYXBpLkdldEluZmx1eERiSW50ZWdyYXRpb25SZXF1ZXN0",
"GiMuYXBpLkdldEluZmx1eERiSW50ZWdyYXRpb25SZXNwb25zZSJAgtPkkwI6",
"EjgvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0",
"aW9ucy9pbmZsdXhkYhKrAQoZVXBkYXRlSW5mbHV4RGJJbnRlZ3JhdGlvbhIl",
"LmFwaS5VcGRhdGVJbmZsdXhEYkludGVncmF0aW9uUmVxdWVzdBoWLmdvb2ds",
"ZS5wcm90b2J1Zi5FbXB0eSJPgtPkkwJJGkQvYXBpL2FwcGxpY2F0aW9ucy97",
"aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pbmZs",
"dXhkYjoBKhKcAQoZRGVsZXRlSW5mbHV4RGJJbnRlZ3JhdGlvbhIlLmFwaS5E",
"ZWxldGVJbmZsdXhEYkludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90",
"b2J1Zi5FbXB0eSJAgtPkkwI6KjgvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGlj",
"YXRpb25faWR9L2ludGVncmF0aW9ucy9pbmZsdXhkYhK0AQocQ3JlYXRlVGhp",
"bmdzQm9hcmRJbnRlZ3JhdGlvbhIoLmFwaS5DcmVhdGVUaGluZ3NCb2FyZElu",
"dGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPk",
"kwJMIkcvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRp",
"b25faWR9L2ludGVncmF0aW9ucy90aGluZ3Nib2FyZDoBKhKvAQoZR2V0VGhp",
"bmdzQm9hcmRJbnRlZ3JhdGlvbhIlLmFwaS5HZXRUaGluZ3NCb2FyZEludGVn",
"cmF0aW9uUmVxdWVzdBomLmFwaS5HZXRUaGluZ3NCb2FyZEludGVncmF0aW9u",
"UmVzcG9uc2UiQ4LT5JMCPRI7L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0",
"aW9uX2lkfS9pbnRlZ3JhdGlvbnMvdGhpbmdzYm9hcmQStAEKHFVwZGF0ZVRo",
"aW5nc0JvYXJkSW50ZWdyYXRpb24SKC5hcGkuVXBkYXRlVGhpbmdzQm9hcmRJ",
"bnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT",
"5JMCTBpHL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0",
"aW9uX2lkfS9pbnRlZ3JhdGlvbnMvdGhpbmdzYm9hcmQ6ASoSpQEKHERlbGV0",
"ZVRoaW5nc0JvYXJkSW50ZWdyYXRpb24SKC5hcGkuRGVsZXRlVGhpbmdzQm9h",
"cmRJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHki",
"Q4LT5JMCPSo7L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9p",
"bnRlZ3JhdGlvbnMvdGhpbmdzYm9hcmQSrgEKGkNyZWF0ZU15RGV2aWNlc0lu",
"dGVncmF0aW9uEiYuYXBpLkNyZWF0ZU15RGV2aWNlc0ludGVncmF0aW9uUmVx",
"dWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJQgtPkkwJKIkUvYXBpL2Fw",
"cGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVn",
"cmF0aW9ucy9waWxvdC10aGluZ3M6ASoSpgEKHERlbGV0ZVBpbG90VGhpbmdz",
"SW50ZWdyYXRpb24SKC5hcGkuRGVsZXRlUGlsb3RUaGluZ3NJbnRlZ3JhdGlv",
"blJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiRILT5JMCPio8L2Fw",
"aS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMv",
"cGlsb3QtdGhpbmdzEqIBChZDcmVhdGVJZnR0dEludGVncmF0aW9uEiIuYXBp",
"LkNyZWF0ZUlmdHR0SW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv",
"YnVmLkVtcHR5IkyC0+STAkYiQS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3Jh",
"dGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2lmdHR0OgEqEpcB",
"ChNHZXRJZnR0dEludGVncmF0aW9uEh8uYXBpLkdldElmdHR0SW50ZWdyYXRp",
"b25SZXF1ZXN0GiAuYXBpLkdldElmdHR0SW50ZWdyYXRpb25SZXNwb25zZSI9",
"gtPkkwI3EjUvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2lu",
"dGVncmF0aW9ucy9pZnR0dBKiAQoWVXBkYXRlSWZ0dHRJbnRlZ3JhdGlvbhIi",
"LmFwaS5VcGRhdGVJZnR0dEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5w",
"cm90b2J1Zi5FbXB0eSJMgtPkkwJGGkEvYXBpL2FwcGxpY2F0aW9ucy97aW50",
"ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pZnR0dDoB",
"KhKTAQoWRGVsZXRlSWZ0dHRJbnRlZ3JhdGlvbhIiLmFwaS5EZWxldGVJZnR0",
"dEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSI9",
"gtPkkwI3KjUvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2lu",
"dGVncmF0aW9ucy9pZnR0dBLhAQooR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25D",
"bGllbnRDZXJ0aWZpY2F0ZRI0LmFwaS5HZW5lcmF0ZU1xdHRJbnRlZ3JhdGlv",
"bkNsaWVudENlcnRpZmljYXRlUmVxdWVzdBo1LmFwaS5HZW5lcmF0ZU1xdHRJ",
"bnRlZ3JhdGlvbkNsaWVudENlcnRpZmljYXRlUmVzcG9uc2UiSILT5JMCQiJA",
"L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlv",
"bnMvbXF0dC9jZXJ0aWZpY2F0ZUJoChFpby5jaGlycHN0YWNrLmFwaUIQQXBw",
"bGljYXRpb25Qcm90b1ABWi5naXRodWIuY29tL2NoaXJwc3RhY2svY2hpcnBz",
"dGFjay9hcGkvZ28vdjQvYXBpqgIOQ2hpcnBzdGFjay5BcGliBnByb3RvMw=="));
"cmF0aW9ucy9teWRldmljZXM6ASoSpwEKF0dldE15RGV2aWNlc0ludGVncmF0",
"aW9uEiMuYXBpLkdldE15RGV2aWNlc0ludGVncmF0aW9uUmVxdWVzdBokLmFw",
"aS5HZXRNeURldmljZXNJbnRlZ3JhdGlvblJlc3BvbnNlIkGC0+STAjsSOS9h",
"cGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25z",
"L215ZGV2aWNlcxKuAQoaVXBkYXRlTXlEZXZpY2VzSW50ZWdyYXRpb24SJi5h",
"cGkuVXBkYXRlTXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xl",
"LnByb3RvYnVmLkVtcHR5IlCC0+STAkoaRS9hcGkvYXBwbGljYXRpb25zL3tp",
"bnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215ZGV2",
"aWNlczoBKhKfAQoaRGVsZXRlTXlEZXZpY2VzSW50ZWdyYXRpb24SJi5hcGku",
"RGVsZXRlTXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnBy",
"b3RvYnVmLkVtcHR5IkGC0+STAjsqOS9hcGkvYXBwbGljYXRpb25zL3thcHBs",
"aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215ZGV2aWNlcxKuAQoaQ3JlYXRl",
"TG9yYUNsb3VkSW50ZWdyYXRpb24SJi5hcGkuQ3JlYXRlTG9yYUNsb3VkSW50",
"ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlCC0+ST",
"AkoiRS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlv",
"bl9pZH0vaW50ZWdyYXRpb25zL2xvcmFjbG91ZDoBKhKnAQoXR2V0TG9yYUNs",
"b3VkSW50ZWdyYXRpb24SIy5hcGkuR2V0TG9yYUNsb3VkSW50ZWdyYXRpb25S",
"ZXF1ZXN0GiQuYXBpLkdldExvcmFDbG91ZEludGVncmF0aW9uUmVzcG9uc2Ui",
"QYLT5JMCOxI5L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9p",
"bnRlZ3JhdGlvbnMvbG9yYWNsb3VkEq4BChpVcGRhdGVMb3JhQ2xvdWRJbnRl",
"Z3JhdGlvbhImLmFwaS5VcGRhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVl",
"c3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUILT5JMCShpFL2FwaS9hcHBs",
"aWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3Jh",
"dGlvbnMvbG9yYWNsb3VkOgEqEp8BChpEZWxldGVMb3JhQ2xvdWRJbnRlZ3Jh",
"dGlvbhImLmFwaS5EZWxldGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3Qa",
"Fi5nb29nbGUucHJvdG9idWYuRW1wdHkiQYLT5JMCOyo5L2FwaS9hcHBsaWNh",
"dGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbG9yYWNsb3Vk",
"ErABChpDcmVhdGVHY3BQdWJTdWJJbnRlZ3JhdGlvbhImLmFwaS5DcmVhdGVH",
"Y3BQdWJTdWJJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
"RW1wdHkiUoLT5JMCTCJHL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9u",
"LmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWI6ASoS",
"qQEKF0dldEdjcFB1YlN1YkludGVncmF0aW9uEiMuYXBpLkdldEdjcFB1YlN1",
"YkludGVncmF0aW9uUmVxdWVzdBokLmFwaS5HZXRHY3BQdWJTdWJJbnRlZ3Jh",
"dGlvblJlc3BvbnNlIkOC0+STAj0SOy9hcGkvYXBwbGljYXRpb25zL3thcHBs",
"aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2djcC1wdWItc3ViErABChpVcGRh",
"dGVHY3BQdWJTdWJJbnRlZ3JhdGlvbhImLmFwaS5VcGRhdGVHY3BQdWJTdWJJ",
"bnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT",
"5JMCTBpHL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0",
"aW9uX2lkfS9pbnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWI6ASoSoQEKGkRlbGV0",
"ZUdjcFB1YlN1YkludGVncmF0aW9uEiYuYXBpLkRlbGV0ZUdjcFB1YlN1Yklu",
"dGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJDgtPk",
"kwI9KjsvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVn",
"cmF0aW9ucy9nY3AtcHViLXN1YhKmAQoXQ3JlYXRlQXdzU25zSW50ZWdyYXRp",
"b24SIy5hcGkuQ3JlYXRlQXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29v",
"Z2xlLnByb3RvYnVmLkVtcHR5Ik6C0+STAkgiQy9hcGkvYXBwbGljYXRpb25z",
"L3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F3",
"cy1zbnM6ASoSnAEKFEdldEF3c1Nuc0ludGVncmF0aW9uEiAuYXBpLkdldEF3",
"c1Nuc0ludGVncmF0aW9uUmVxdWVzdBohLmFwaS5HZXRBd3NTbnNJbnRlZ3Jh",
"dGlvblJlc3BvbnNlIj+C0+STAjkSNy9hcGkvYXBwbGljYXRpb25zL3thcHBs",
"aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F3cy1zbnMSpgEKF1VwZGF0ZUF3",
"c1Nuc0ludGVncmF0aW9uEiMuYXBpLlVwZGF0ZUF3c1Nuc0ludGVncmF0aW9u",
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJOgtPkkwJIGkMvYXBp",
"L2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2lu",
"dGVncmF0aW9ucy9hd3Mtc25zOgEqEpcBChdEZWxldGVBd3NTbnNJbnRlZ3Jh",
"dGlvbhIjLmFwaS5EZWxldGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVlc3QaFi5n",
"b29nbGUucHJvdG9idWYuRW1wdHkiP4LT5JMCOSo3L2FwaS9hcHBsaWNhdGlv",
"bnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXdzLXNucxLCAQog",
"Q3JlYXRlQXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24SLC5hcGkuQ3JlYXRl",
"QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnBy",
"b3RvYnVmLkVtcHR5IliC0+STAlIiTS9hcGkvYXBwbGljYXRpb25zL3tpbnRl",
"Z3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNl",
"cnZpY2UtYnVzOgEqEsEBCh1HZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlv",
"bhIpLmFwaS5HZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3Qa",
"Ki5hcGkuR2V0QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXNwb25zZSJJ",
"gtPkkwJDEkEvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2lu",
"dGVncmF0aW9ucy9henVyZS1zZXJ2aWNlLWJ1cxLCAQogVXBkYXRlQXp1cmVT",
"ZXJ2aWNlQnVzSW50ZWdyYXRpb24SLC5hcGkuVXBkYXRlQXp1cmVTZXJ2aWNl",
"QnVzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5",
"IliC0+STAlIaTS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBs",
"aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNlcnZpY2UtYnVzOgEq",
"ErMBCiBEZWxldGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIsLmFwaS5E",
"ZWxldGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29n",
"bGUucHJvdG9idWYuRW1wdHkiSYLT5JMCQypBL2FwaS9hcHBsaWNhdGlvbnMv",
"e2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXp1cmUtc2VydmljZS1i",
"dXMStQEKHENyZWF0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGkuQ3Jl",
"YXRlUGlsb3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJv",
"dG9idWYuRW1wdHkiU4LT5JMCTSJIL2FwaS9hcHBsaWNhdGlvbnMve2ludGVn",
"cmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhp",
"bmdzOgEqErABChlHZXRQaWxvdFRoaW5nc0ludGVncmF0aW9uEiUuYXBpLkdl",
"dFBpbG90VGhpbmdzSW50ZWdyYXRpb25SZXF1ZXN0GiYuYXBpLkdldFBpbG90",
"VGhpbmdzSW50ZWdyYXRpb25SZXNwb25zZSJEgtPkkwI+EjwvYXBpL2FwcGxp",
"Y2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9waWxvdC10",
"aGluZ3MStQEKHFVwZGF0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGku",
"VXBkYXRlUGlsb3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUu",
"cHJvdG9idWYuRW1wdHkiU4LT5JMCTRpIL2FwaS9hcHBsaWNhdGlvbnMve2lu",
"dGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3Qt",
"dGhpbmdzOgEqEqYBChxEZWxldGVQaWxvdFRoaW5nc0ludGVncmF0aW9uEigu",
"YXBpLkRlbGV0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29v",
"Z2xlLnByb3RvYnVmLkVtcHR5IkSC0+STAj4qPC9hcGkvYXBwbGljYXRpb25z",
"L3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL3BpbG90LXRoaW5ncxKi",
"AQoWQ3JlYXRlSWZ0dHRJbnRlZ3JhdGlvbhIiLmFwaS5DcmVhdGVJZnR0dElu",
"dGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJMgtPk",
"kwJGIkEvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRp",
"b25faWR9L2ludGVncmF0aW9ucy9pZnR0dDoBKhKXAQoTR2V0SWZ0dHRJbnRl",
"Z3JhdGlvbhIfLmFwaS5HZXRJZnR0dEludGVncmF0aW9uUmVxdWVzdBogLmFw",
"aS5HZXRJZnR0dEludGVncmF0aW9uUmVzcG9uc2UiPYLT5JMCNxI1L2FwaS9h",
"cHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaWZ0",
"dHQSogEKFlVwZGF0ZUlmdHR0SW50ZWdyYXRpb24SIi5hcGkuVXBkYXRlSWZ0",
"dHRJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHki",
"TILT5JMCRhpBL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxp",
"Y2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaWZ0dHQ6ASoSkwEKFkRlbGV0ZUlm",
"dHR0SW50ZWdyYXRpb24SIi5hcGkuRGVsZXRlSWZ0dHRJbnRlZ3JhdGlvblJl",
"cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiPYLT5JMCNyo1L2FwaS9h",
"cHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaWZ0",
"dHQS4QEKKEdlbmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNh",
"dGUSNC5hcGkuR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZp",
"Y2F0ZVJlcXVlc3QaNS5hcGkuR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGll",
"bnRDZXJ0aWZpY2F0ZVJlc3BvbnNlIkiC0+STAkIiQC9hcGkvYXBwbGljYXRp",
"b25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL21xdHQvY2VydGlm",
"aWNhdGVCaAoRaW8uY2hpcnBzdGFjay5hcGlCEEFwcGxpY2F0aW9uUHJvdG9Q",
"AVouZ2l0aHViLmNvbS9jaGlycHN0YWNrL2NoaXJwc3RhY2svYXBpL2dvL3Y0",
"L2FwaaoCDkNoaXJwc3RhY2suQXBpYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Api.Encoding), typeof(global::Chirpstack.Api.IntegrationKind), typeof(global::Chirpstack.Api.InfluxDbPrecision), typeof(global::Chirpstack.Api.InfluxDbVersion), }, null, new pbr::GeneratedClrTypeInfo[] {
@ -401,7 +401,7 @@ namespace Chirpstack.Api {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.UpdateMyDevicesIntegrationRequest), global::Chirpstack.Api.UpdateMyDevicesIntegrationRequest.Parser, new[]{ "Integration" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeleteMyDevicesIntegrationRequest), global::Chirpstack.Api.DeleteMyDevicesIntegrationRequest.Parser, new[]{ "ApplicationId" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.LoraCloudIntegration), global::Chirpstack.Api.LoraCloudIntegration.Parser, new[]{ "ApplicationId", "ModemGeolocationServices" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.LoraCloudModemGeolocationServices), global::Chirpstack.Api.LoraCloudModemGeolocationServices.Parser, new[]{ "Token", "ModemEnabled", "ModemPort", "GnssPort", "GnssUseRxTime", "ParseTlv", "GeolocationBufferTtl", "GeolocationMinBufferSize", "GeolocationTdoa", "GeolocationRssi", "GeolocationGnss", "GeolocationGnssPayloadField", "GeolocationGnssUseRxTime", "GeolocationWifi", "GeolocationWifiPayloadField" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.LoraCloudModemGeolocationServices), global::Chirpstack.Api.LoraCloudModemGeolocationServices.Parser, new[]{ "Token", "ModemEnabled", "ForwardFPorts", "GnssUseRxTime", "ParseTlv", "GeolocationBufferTtl", "GeolocationMinBufferSize", "GeolocationTdoa", "GeolocationRssi", "GeolocationGnss", "GeolocationGnssPayloadField", "GeolocationGnssUseRxTime", "GeolocationWifi", "GeolocationWifiPayloadField" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateLoraCloudIntegrationRequest), global::Chirpstack.Api.CreateLoraCloudIntegrationRequest.Parser, new[]{ "Integration" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetLoraCloudIntegrationRequest), global::Chirpstack.Api.GetLoraCloudIntegrationRequest.Parser, new[]{ "ApplicationId" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetLoraCloudIntegrationResponse), global::Chirpstack.Api.GetLoraCloudIntegrationResponse.Parser, new[]{ "Integration" }, null, null, null, null),
@ -9195,8 +9195,7 @@ namespace Chirpstack.Api {
public LoraCloudModemGeolocationServices(LoraCloudModemGeolocationServices other) : this() {
token_ = other.token_;
modemEnabled_ = other.modemEnabled_;
modemPort_ = other.modemPort_;
gnssPort_ = other.gnssPort_;
forwardFPorts_ = other.forwardFPorts_.Clone();
gnssUseRxTime_ = other.gnssUseRxTime_;
parseTlv_ = other.parseTlv_;
geolocationBufferTtl_ = other.geolocationBufferTtl_;
@ -9247,38 +9246,19 @@ namespace Chirpstack.Api {
}
}
/// <summary>Field number for the "modem_port" field.</summary>
public const int ModemPortFieldNumber = 3;
private uint modemPort_;
/// <summary>Field number for the "forward_f_ports" field.</summary>
public const int ForwardFPortsFieldNumber = 16;
private static readonly pb::FieldCodec<uint> _repeated_forwardFPorts_codec
= pb::FieldCodec.ForUInt32(130);
private readonly pbc::RepeatedField<uint> forwardFPorts_ = new pbc::RepeatedField<uint>();
/// <summary>
/// Modem port (fPort).
/// ChirpStack will only forward the FrmPayload to the MGS if the port
/// is equal to the configured value.
/// Forward FPorts.
/// Forward uplink messages matching the given FPorts to the MGS.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public uint ModemPort {
get { return modemPort_; }
set {
modemPort_ = value;
}
}
/// <summary>Field number for the "gnss_port" field.</summary>
public const int GnssPortFieldNumber = 4;
private uint gnssPort_;
/// <summary>
/// GNSS port (fPort).
/// ChirpStack will forward the FrmPayload to MGS as GNSS payload if the
/// port is equal to the configured value.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public uint GnssPort {
get { return gnssPort_; }
set {
gnssPort_ = value;
}
public pbc::RepeatedField<uint> ForwardFPorts {
get { return forwardFPorts_; }
}
/// <summary>Field number for the "gnss_use_rx_time" field.</summary>
@ -9481,8 +9461,7 @@ namespace Chirpstack.Api {
}
if (Token != other.Token) return false;
if (ModemEnabled != other.ModemEnabled) return false;
if (ModemPort != other.ModemPort) return false;
if (GnssPort != other.GnssPort) return false;
if(!forwardFPorts_.Equals(other.forwardFPorts_)) return false;
if (GnssUseRxTime != other.GnssUseRxTime) return false;
if (ParseTlv != other.ParseTlv) return false;
if (GeolocationBufferTtl != other.GeolocationBufferTtl) return false;
@ -9503,8 +9482,7 @@ namespace Chirpstack.Api {
int hash = 1;
if (Token.Length != 0) hash ^= Token.GetHashCode();
if (ModemEnabled != false) hash ^= ModemEnabled.GetHashCode();
if (ModemPort != 0) hash ^= ModemPort.GetHashCode();
if (GnssPort != 0) hash ^= GnssPort.GetHashCode();
hash ^= forwardFPorts_.GetHashCode();
if (GnssUseRxTime != false) hash ^= GnssUseRxTime.GetHashCode();
if (ParseTlv != false) hash ^= ParseTlv.GetHashCode();
if (GeolocationBufferTtl != 0) hash ^= GeolocationBufferTtl.GetHashCode();
@ -9542,14 +9520,6 @@ namespace Chirpstack.Api {
output.WriteRawTag(16);
output.WriteBool(ModemEnabled);
}
if (ModemPort != 0) {
output.WriteRawTag(24);
output.WriteUInt32(ModemPort);
}
if (GnssPort != 0) {
output.WriteRawTag(32);
output.WriteUInt32(GnssPort);
}
if (GnssUseRxTime != false) {
output.WriteRawTag(40);
output.WriteBool(GnssUseRxTime);
@ -9594,6 +9564,7 @@ namespace Chirpstack.Api {
output.WriteRawTag(122);
output.WriteString(GeolocationWifiPayloadField);
}
forwardFPorts_.WriteTo(output, _repeated_forwardFPorts_codec);
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@ -9612,14 +9583,6 @@ namespace Chirpstack.Api {
output.WriteRawTag(16);
output.WriteBool(ModemEnabled);
}
if (ModemPort != 0) {
output.WriteRawTag(24);
output.WriteUInt32(ModemPort);
}
if (GnssPort != 0) {
output.WriteRawTag(32);
output.WriteUInt32(GnssPort);
}
if (GnssUseRxTime != false) {
output.WriteRawTag(40);
output.WriteBool(GnssUseRxTime);
@ -9664,6 +9627,7 @@ namespace Chirpstack.Api {
output.WriteRawTag(122);
output.WriteString(GeolocationWifiPayloadField);
}
forwardFPorts_.WriteTo(ref output, _repeated_forwardFPorts_codec);
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@ -9680,12 +9644,7 @@ namespace Chirpstack.Api {
if (ModemEnabled != false) {
size += 1 + 1;
}
if (ModemPort != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ModemPort);
}
if (GnssPort != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(GnssPort);
}
size += forwardFPorts_.CalculateSize(_repeated_forwardFPorts_codec);
if (GnssUseRxTime != false) {
size += 1 + 1;
}
@ -9737,12 +9696,7 @@ namespace Chirpstack.Api {
if (other.ModemEnabled != false) {
ModemEnabled = other.ModemEnabled;
}
if (other.ModemPort != 0) {
ModemPort = other.ModemPort;
}
if (other.GnssPort != 0) {
GnssPort = other.GnssPort;
}
forwardFPorts_.Add(other.forwardFPorts_);
if (other.GnssUseRxTime != false) {
GnssUseRxTime = other.GnssUseRxTime;
}
@ -9799,14 +9753,6 @@ namespace Chirpstack.Api {
ModemEnabled = input.ReadBool();
break;
}
case 24: {
ModemPort = input.ReadUInt32();
break;
}
case 32: {
GnssPort = input.ReadUInt32();
break;
}
case 40: {
GnssUseRxTime = input.ReadBool();
break;
@ -9851,6 +9797,11 @@ namespace Chirpstack.Api {
GeolocationWifiPayloadField = input.ReadString();
break;
}
case 130:
case 128: {
forwardFPorts_.AddEntriesFrom(input, _repeated_forwardFPorts_codec);
break;
}
}
}
#endif
@ -9874,14 +9825,6 @@ namespace Chirpstack.Api {
ModemEnabled = input.ReadBool();
break;
}
case 24: {
ModemPort = input.ReadUInt32();
break;
}
case 32: {
GnssPort = input.ReadUInt32();
break;
}
case 40: {
GnssUseRxTime = input.ReadBool();
break;
@ -9926,6 +9869,11 @@ namespace Chirpstack.Api {
GeolocationWifiPayloadField = input.ReadString();
break;
}
case 130:
case 128: {
forwardFPorts_.AddEntriesFrom(ref input, _repeated_forwardFPorts_codec);
break;
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -866,11 +866,10 @@ export class LoraCloudModemGeolocationServices extends jspb.Message {
getModemEnabled(): boolean;
setModemEnabled(value: boolean): LoraCloudModemGeolocationServices;
getModemPort(): number;
setModemPort(value: number): LoraCloudModemGeolocationServices;
getGnssPort(): number;
setGnssPort(value: number): LoraCloudModemGeolocationServices;
getForwardFPortsList(): Array<number>;
setForwardFPortsList(value: Array<number>): LoraCloudModemGeolocationServices;
clearForwardFPortsList(): LoraCloudModemGeolocationServices;
addForwardFPorts(value: number, index?: number): LoraCloudModemGeolocationServices;
getGnssUseRxTime(): boolean;
setGnssUseRxTime(value: boolean): LoraCloudModemGeolocationServices;
@ -917,8 +916,7 @@ export namespace LoraCloudModemGeolocationServices {
export type AsObject = {
token: string,
modemEnabled: boolean,
modemPort: number,
gnssPort: number,
forwardFPortsList: Array<number>,
gnssUseRxTime: boolean,
parseTlv: boolean,
geolocationBufferTtl: number,

View File

@ -907,7 +907,7 @@ if (goog.DEBUG && !COMPILED) {
* @constructor
*/
proto.api.LoraCloudModemGeolocationServices = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
jspb.Message.initialize(this, opt_data, 0, -1, proto.api.LoraCloudModemGeolocationServices.repeatedFields_, null);
};
goog.inherits(proto.api.LoraCloudModemGeolocationServices, jspb.Message);
if (goog.DEBUG && !COMPILED) {
@ -8074,6 +8074,13 @@ proto.api.LoraCloudIntegration.prototype.hasModemGeolocationServices = function(
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
* @const
*/
proto.api.LoraCloudModemGeolocationServices.repeatedFields_ = [16];
if (jspb.Message.GENERATE_TO_OBJECT) {
@ -8107,8 +8114,7 @@ proto.api.LoraCloudModemGeolocationServices.toObject = function(includeInstance,
var f, obj = {
token: jspb.Message.getFieldWithDefault(msg, 1, ""),
modemEnabled: jspb.Message.getBooleanFieldWithDefault(msg, 2, false),
modemPort: jspb.Message.getFieldWithDefault(msg, 3, 0),
gnssPort: jspb.Message.getFieldWithDefault(msg, 4, 0),
forwardFPortsList: (f = jspb.Message.getRepeatedField(msg, 16)) == null ? undefined : f,
gnssUseRxTime: jspb.Message.getBooleanFieldWithDefault(msg, 5, false),
parseTlv: jspb.Message.getBooleanFieldWithDefault(msg, 6, false),
geolocationBufferTtl: jspb.Message.getFieldWithDefault(msg, 7, 0),
@ -8164,13 +8170,9 @@ proto.api.LoraCloudModemGeolocationServices.deserializeBinaryFromReader = functi
var value = /** @type {boolean} */ (reader.readBool());
msg.setModemEnabled(value);
break;
case 3:
var value = /** @type {number} */ (reader.readUint32());
msg.setModemPort(value);
break;
case 4:
var value = /** @type {number} */ (reader.readUint32());
msg.setGnssPort(value);
case 16:
var value = /** @type {!Array<number>} */ (reader.readPackedUint32());
msg.setForwardFPortsList(value);
break;
case 5:
var value = /** @type {boolean} */ (reader.readBool());
@ -8259,17 +8261,10 @@ proto.api.LoraCloudModemGeolocationServices.serializeBinaryToWriter = function(m
f
);
}
f = message.getModemPort();
if (f !== 0) {
writer.writeUint32(
3,
f
);
}
f = message.getGnssPort();
if (f !== 0) {
writer.writeUint32(
4,
f = message.getForwardFPortsList();
if (f.length > 0) {
writer.writePackedUint32(
16,
f
);
}
@ -8390,38 +8385,39 @@ proto.api.LoraCloudModemGeolocationServices.prototype.setModemEnabled = function
/**
* optional uint32 modem_port = 3;
* @return {number}
* repeated uint32 forward_f_ports = 16;
* @return {!Array<number>}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getModemPort = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
proto.api.LoraCloudModemGeolocationServices.prototype.getForwardFPortsList = function() {
return /** @type {!Array<number>} */ (jspb.Message.getRepeatedField(this, 16));
};
/**
* @param {!Array<number>} value
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setForwardFPortsList = function(value) {
return jspb.Message.setField(this, 16, value || []);
};
/**
* @param {number} value
* @param {number=} opt_index
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setModemPort = function(value) {
return jspb.Message.setProto3IntField(this, 3, value);
proto.api.LoraCloudModemGeolocationServices.prototype.addForwardFPorts = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 16, value, opt_index);
};
/**
* optional uint32 gnss_port = 4;
* @return {number}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getGnssPort = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
};
/**
* @param {number} value
* Clears the list making it empty but non-null.
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setGnssPort = function(value) {
return jspb.Message.setProto3IntField(this, 4, value);
proto.api.LoraCloudModemGeolocationServices.prototype.clearForwardFPortsList = function() {
return this.setForwardFPortsList([]);
};

View File

@ -942,11 +942,10 @@ export class LoraCloudModemGeolocationServices extends jspb.Message {
getModemEnabled(): boolean;
setModemEnabled(value: boolean): void;
getModemPort(): number;
setModemPort(value: number): void;
getGnssPort(): number;
setGnssPort(value: number): void;
clearForwardFPortsList(): void;
getForwardFPortsList(): Array<number>;
setForwardFPortsList(value: Array<number>): void;
addForwardFPorts(value: number, index?: number): number;
getGnssUseRxTime(): boolean;
setGnssUseRxTime(value: boolean): void;
@ -995,8 +994,7 @@ export namespace LoraCloudModemGeolocationServices {
export type AsObject = {
token: string,
modemEnabled: boolean,
modemPort: number,
gnssPort: number,
forwardFPortsList: Array<number>,
gnssUseRxTime: boolean,
parseTlv: boolean,
geolocationBufferTtl: number,

View File

@ -907,7 +907,7 @@ if (goog.DEBUG && !COMPILED) {
* @constructor
*/
proto.api.LoraCloudModemGeolocationServices = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
jspb.Message.initialize(this, opt_data, 0, -1, proto.api.LoraCloudModemGeolocationServices.repeatedFields_, null);
};
goog.inherits(proto.api.LoraCloudModemGeolocationServices, jspb.Message);
if (goog.DEBUG && !COMPILED) {
@ -8074,6 +8074,13 @@ proto.api.LoraCloudIntegration.prototype.hasModemGeolocationServices = function(
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
* @const
*/
proto.api.LoraCloudModemGeolocationServices.repeatedFields_ = [16];
if (jspb.Message.GENERATE_TO_OBJECT) {
@ -8107,8 +8114,7 @@ proto.api.LoraCloudModemGeolocationServices.toObject = function(includeInstance,
var f, obj = {
token: jspb.Message.getFieldWithDefault(msg, 1, ""),
modemEnabled: jspb.Message.getBooleanFieldWithDefault(msg, 2, false),
modemPort: jspb.Message.getFieldWithDefault(msg, 3, 0),
gnssPort: jspb.Message.getFieldWithDefault(msg, 4, 0),
forwardFPortsList: (f = jspb.Message.getRepeatedField(msg, 16)) == null ? undefined : f,
gnssUseRxTime: jspb.Message.getBooleanFieldWithDefault(msg, 5, false),
parseTlv: jspb.Message.getBooleanFieldWithDefault(msg, 6, false),
geolocationBufferTtl: jspb.Message.getFieldWithDefault(msg, 7, 0),
@ -8164,13 +8170,9 @@ proto.api.LoraCloudModemGeolocationServices.deserializeBinaryFromReader = functi
var value = /** @type {boolean} */ (reader.readBool());
msg.setModemEnabled(value);
break;
case 3:
var value = /** @type {number} */ (reader.readUint32());
msg.setModemPort(value);
break;
case 4:
var value = /** @type {number} */ (reader.readUint32());
msg.setGnssPort(value);
case 16:
var value = /** @type {!Array<number>} */ (reader.readPackedUint32());
msg.setForwardFPortsList(value);
break;
case 5:
var value = /** @type {boolean} */ (reader.readBool());
@ -8259,17 +8261,10 @@ proto.api.LoraCloudModemGeolocationServices.serializeBinaryToWriter = function(m
f
);
}
f = message.getModemPort();
if (f !== 0) {
writer.writeUint32(
3,
f
);
}
f = message.getGnssPort();
if (f !== 0) {
writer.writeUint32(
4,
f = message.getForwardFPortsList();
if (f.length > 0) {
writer.writePackedUint32(
16,
f
);
}
@ -8390,38 +8385,39 @@ proto.api.LoraCloudModemGeolocationServices.prototype.setModemEnabled = function
/**
* optional uint32 modem_port = 3;
* @return {number}
* repeated uint32 forward_f_ports = 16;
* @return {!Array<number>}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getModemPort = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
proto.api.LoraCloudModemGeolocationServices.prototype.getForwardFPortsList = function() {
return /** @type {!Array<number>} */ (jspb.Message.getRepeatedField(this, 16));
};
/**
* @param {!Array<number>} value
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setForwardFPortsList = function(value) {
return jspb.Message.setField(this, 16, value || []);
};
/**
* @param {number} value
* @param {number=} opt_index
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setModemPort = function(value) {
return jspb.Message.setProto3IntField(this, 3, value);
proto.api.LoraCloudModemGeolocationServices.prototype.addForwardFPorts = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 16, value, opt_index);
};
/**
* optional uint32 gnss_port = 4;
* @return {number}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getGnssPort = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
};
/**
* @param {number} value
* Clears the list making it empty but non-null.
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setGnssPort = function(value) {
return jspb.Message.setProto3IntField(this, 4, value);
proto.api.LoraCloudModemGeolocationServices.prototype.clearForwardFPortsList = function() {
return this.setForwardFPortsList([]);
};

3
api/md/api/api.md vendored
View File

@ -1246,8 +1246,7 @@ Note: The first value is always used for the DevEUI. |
| ----- | ---- | ----- | ----------- |
| token | [string](#string) | | API token. |
| modem_enabled | [bool](#bool) | | Device implements Modem / Modem-E stack. |
| modem_port | [uint32](#uint32) | | Modem port (fPort). ChirpStack will only forward the FrmPayload to the MGS if the port is equal to the configured value. |
| gnss_port | [uint32](#uint32) | | GNSS port (fPort). ChirpStack will forward the FrmPayload to MGS as GNSS payload if the port is equal to the configured value. |
| forward_f_ports | [uint32](#uint32) | repeated | Forward FPorts. Forward uplink messages matching the given FPorts to the MGS. |
| gnss_use_rx_time | [bool](#bool) | | Use rx time for GNSS resolving. In case this is set to true, the MGS resolver will use the RX time of the network instead of the timestamp included in the LR1110 payload. |
| parse_tlv | [bool](#bool) | | Parse TLV records. If enabled, stream records (expected in TLV format) are scanned for GNSS data (0x06 or 0x07). If found, ChirpStack will make an additional geolocation call to the MGS API for resolving the location of the detected payload. |
| geolocation_buffer_ttl | [uint32](#uint32) | | Geolocation buffer TTL (in seconds). If &gt; 0, uplink RX meta-data will be stored in a buffer so that the meta-data of multiple uplinks can be used for geolocation. |

View File

@ -695,15 +695,9 @@ message LoraCloudModemGeolocationServices {
// Device implements Modem / Modem-E stack.
bool modem_enabled = 2;
// Modem port (fPort).
// ChirpStack will only forward the FrmPayload to the MGS if the port
// is equal to the configured value.
uint32 modem_port = 3;
// GNSS port (fPort).
// ChirpStack will forward the FrmPayload to MGS as GNSS payload if the
// port is equal to the configured value.
uint32 gnss_port = 4;
// Forward FPorts.
// Forward uplink messages matching the given FPorts to the MGS.
repeated uint32 forward_f_ports = 16;
// Use rx time for GNSS resolving.
// In case this is set to true, the MGS resolver will use the RX time of the

View File

@ -695,15 +695,9 @@ message LoraCloudModemGeolocationServices {
// Device implements Modem / Modem-E stack.
bool modem_enabled = 2;
// Modem port (fPort).
// ChirpStack will only forward the FrmPayload to the MGS if the port
// is equal to the configured value.
uint32 modem_port = 3;
// GNSS port (fPort).
// ChirpStack will forward the FrmPayload to MGS as GNSS payload if the
// port is equal to the configured value.
uint32 gnss_port = 4;
// Forward FPorts.
// Forward uplink messages matching the given FPorts to the MGS.
repeated uint32 forward_f_ports = 16;
// Use rx time for GNSS resolving.
// In case this is set to true, the MGS resolver will use the RX time of the

File diff suppressed because one or more lines are too long

View File

@ -496,7 +496,8 @@ class LoraCloudIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., modem_geolocation_services: _Optional[_Union[LoraCloudModemGeolocationServices, _Mapping]] = ...) -> None: ...
class LoraCloudModemGeolocationServices(_message.Message):
__slots__ = ["geolocation_buffer_ttl", "geolocation_gnss", "geolocation_gnss_payload_field", "geolocation_gnss_use_rx_time", "geolocation_min_buffer_size", "geolocation_rssi", "geolocation_tdoa", "geolocation_wifi", "geolocation_wifi_payload_field", "gnss_port", "gnss_use_rx_time", "modem_enabled", "modem_port", "parse_tlv", "token"]
__slots__ = ["forward_f_ports", "geolocation_buffer_ttl", "geolocation_gnss", "geolocation_gnss_payload_field", "geolocation_gnss_use_rx_time", "geolocation_min_buffer_size", "geolocation_rssi", "geolocation_tdoa", "geolocation_wifi", "geolocation_wifi_payload_field", "gnss_use_rx_time", "modem_enabled", "parse_tlv", "token"]
FORWARD_F_PORTS_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_BUFFER_TTL_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_GNSS_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_GNSS_PAYLOAD_FIELD_FIELD_NUMBER: _ClassVar[int]
@ -506,12 +507,11 @@ class LoraCloudModemGeolocationServices(_message.Message):
GEOLOCATION_TDOA_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_WIFI_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_WIFI_PAYLOAD_FIELD_FIELD_NUMBER: _ClassVar[int]
GNSS_PORT_FIELD_NUMBER: _ClassVar[int]
GNSS_USE_RX_TIME_FIELD_NUMBER: _ClassVar[int]
MODEM_ENABLED_FIELD_NUMBER: _ClassVar[int]
MODEM_PORT_FIELD_NUMBER: _ClassVar[int]
PARSE_TLV_FIELD_NUMBER: _ClassVar[int]
TOKEN_FIELD_NUMBER: _ClassVar[int]
forward_f_ports: _containers.RepeatedScalarFieldContainer[int]
geolocation_buffer_ttl: int
geolocation_gnss: bool
geolocation_gnss_payload_field: str
@ -521,13 +521,11 @@ class LoraCloudModemGeolocationServices(_message.Message):
geolocation_tdoa: bool
geolocation_wifi: bool
geolocation_wifi_payload_field: str
gnss_port: int
gnss_use_rx_time: bool
modem_enabled: bool
modem_port: int
parse_tlv: bool
token: str
def __init__(self, token: _Optional[str] = ..., modem_enabled: bool = ..., modem_port: _Optional[int] = ..., gnss_port: _Optional[int] = ..., gnss_use_rx_time: bool = ..., parse_tlv: bool = ..., geolocation_buffer_ttl: _Optional[int] = ..., geolocation_min_buffer_size: _Optional[int] = ..., geolocation_tdoa: bool = ..., geolocation_rssi: bool = ..., geolocation_gnss: bool = ..., geolocation_gnss_payload_field: _Optional[str] = ..., geolocation_gnss_use_rx_time: bool = ..., geolocation_wifi: bool = ..., geolocation_wifi_payload_field: _Optional[str] = ...) -> None: ...
def __init__(self, token: _Optional[str] = ..., modem_enabled: bool = ..., forward_f_ports: _Optional[_Iterable[int]] = ..., gnss_use_rx_time: bool = ..., parse_tlv: bool = ..., geolocation_buffer_ttl: _Optional[int] = ..., geolocation_min_buffer_size: _Optional[int] = ..., geolocation_tdoa: bool = ..., geolocation_rssi: bool = ..., geolocation_gnss: bool = ..., geolocation_gnss_payload_field: _Optional[str] = ..., geolocation_gnss_use_rx_time: bool = ..., geolocation_wifi: bool = ..., geolocation_wifi_payload_field: _Optional[str] = ...) -> None: ...
class MyDevicesIntegration(_message.Message):
__slots__ = ["application_id", "endpoint"]

View File

@ -695,15 +695,9 @@ message LoraCloudModemGeolocationServices {
// Device implements Modem / Modem-E stack.
bool modem_enabled = 2;
// Modem port (fPort).
// ChirpStack will only forward the FrmPayload to the MGS if the port
// is equal to the configured value.
uint32 modem_port = 3;
// GNSS port (fPort).
// ChirpStack will forward the FrmPayload to MGS as GNSS payload if the
// port is equal to the configured value.
uint32 gnss_port = 4;
// Forward FPorts.
// Forward uplink messages matching the given FPorts to the MGS.
repeated uint32 forward_f_ports = 16;
// Use rx time for GNSS resolving.
// In case this is set to true, the MGS resolver will use the RX time of the

View File

@ -911,8 +911,7 @@ impl ApplicationService for Application {
modem_geolocation_services: application::LoraCloudModemGeolocationServices {
token: req_mgs.token.clone(),
modem_enabled: req_mgs.modem_enabled,
modem_port: req_mgs.modem_port,
gnss_port: req_mgs.gnss_port,
forward_f_ports: req_mgs.forward_f_ports.clone(),
gnss_use_rx_time: req_mgs.gnss_use_rx_time,
parse_tlv: req_mgs.parse_tlv,
geolocation_buffer_ttl: req_mgs.geolocation_buffer_ttl,
@ -928,6 +927,7 @@ impl ApplicationService for Application {
geolocation_wifi_payload_field: req_mgs
.geolocation_wifi_payload_field
.clone(),
..Default::default()
},
},
),
@ -972,8 +972,7 @@ impl ApplicationService for Application {
modem_geolocation_services: Some(api::LoraCloudModemGeolocationServices {
token: mgs.token.clone(),
modem_enabled: mgs.modem_enabled,
modem_port: mgs.modem_port,
gnss_port: mgs.gnss_port,
forward_f_ports: mgs.forward_f_ports.clone(),
gnss_use_rx_time: mgs.gnss_use_rx_time,
parse_tlv: mgs.parse_tlv,
geolocation_buffer_ttl: mgs.geolocation_buffer_ttl,
@ -1035,8 +1034,7 @@ impl ApplicationService for Application {
modem_geolocation_services: application::LoraCloudModemGeolocationServices {
token: req_mgs.token.clone(),
modem_enabled: req_mgs.modem_enabled,
modem_port: req_mgs.modem_port,
gnss_port: req_mgs.gnss_port,
forward_f_ports: req_mgs.forward_f_ports.clone(),
gnss_use_rx_time: req_mgs.gnss_use_rx_time,
parse_tlv: req_mgs.parse_tlv,
geolocation_buffer_ttl: req_mgs.geolocation_buffer_ttl,
@ -1052,6 +1050,7 @@ impl ApplicationService for Application {
geolocation_wifi_payload_field: req_mgs
.geolocation_wifi_payload_field
.clone(),
..Default::default()
},
},
),
@ -2610,8 +2609,7 @@ pub mod test {
modem_geolocation_services: Some(api::LoraCloudModemGeolocationServices {
token: "test-token".into(),
modem_enabled: true,
modem_port: 199,
gnss_port: 198,
forward_f_ports: vec![199, 198, 197, 192],
gnss_use_rx_time: true,
parse_tlv: true,
geolocation_buffer_ttl: 300,
@ -2647,8 +2645,7 @@ pub mod test {
modem_geolocation_services: Some(api::LoraCloudModemGeolocationServices {
token: "test-token".into(),
modem_enabled: true,
modem_port: 199,
gnss_port: 198,
forward_f_ports: vec![199, 198, 197, 192],
gnss_use_rx_time: true,
parse_tlv: true,
geolocation_buffer_ttl: 300,
@ -2674,8 +2671,7 @@ pub mod test {
modem_geolocation_services: Some(api::LoraCloudModemGeolocationServices {
token: "test-token-updated".into(),
modem_enabled: true,
modem_port: 199,
gnss_port: 198,
forward_f_ports: vec![199, 198, 197, 192],
gnss_use_rx_time: true,
parse_tlv: true,
geolocation_buffer_ttl: 300,
@ -2711,8 +2707,7 @@ pub mod test {
modem_geolocation_services: Some(api::LoraCloudModemGeolocationServices {
token: "test-token-updated".into(),
modem_enabled: true,
modem_port: 199,
gnss_port: 198,
forward_f_ports: vec![199, 198, 197, 192],
gnss_use_rx_time: true,
parse_tlv: true,
geolocation_buffer_ttl: 300,

View File

@ -489,7 +489,6 @@ pub struct AntennaLocation {
#[derive(Clone)]
pub enum UplinkMsg {
UpDf(UplinkMsgUpDf),
Modem(UplinkMsgModem),
Gnss(UplinkMsgGnss),
Wifi(UplinkMsgWifi),
Joining(UplinkMsgJoining),
@ -502,7 +501,6 @@ impl Serialize for UplinkMsg {
{
match self {
UplinkMsg::UpDf(v) => v.serialize(serializer),
UplinkMsg::Modem(v) => v.serialize(serializer),
UplinkMsg::Gnss(v) => v.serialize(serializer),
UplinkMsg::Wifi(v) => v.serialize(serializer),
UplinkMsg::Joining(v) => v.serialize(serializer),
@ -563,8 +561,7 @@ impl<'de> Visitor<'de> for Eui64WrapperVisitor {
}
// UplinkMsgUpDf implements the LoRa Cloud UplinkMsg object.
// The purpose of this message is to create a downlink opportunity for LoRa Cloud.
#[derive(Serialize, Clone)]
#[derive(Default, Serialize, Clone)]
pub struct UplinkMsgUpDf {
#[serde(rename = "msgtype")]
pub msg_type: String, // must be set to "updf"
@ -573,21 +570,16 @@ pub struct UplinkMsgUpDf {
pub port: u8,
pub dr: u8,
pub freq: u32,
pub timestamp: f64, // senconds since UTC
pub payload: String, // leave this blank
}
// UplinkMsgModem implements the LoRa Cloud UplinkMsg object containing a modem payload.
#[derive(Serialize, Clone)]
pub struct UplinkMsgModem {
#[serde(rename = "msgtype")]
pub msg_type: String, // must be set to "modem"
pub payload: String, // HEX format
#[serde(rename = "fcnt")]
pub f_cnt: u32,
pub timestamp: f64, // seconds since UTC
pub dr: u8,
pub freq: u32,
pub timestamp: f64, // senconds since UTC
pub payload: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub gnss_capture_time: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gnss_capture_time_accuracy: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gnss_assist_position: Option<Vec<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gnss_assist_altitude: Option<f64>,
}
// UplinkMsgGnss implements the LoRa Cloud UplinkMsg object containing a gnss payload.
@ -696,6 +688,7 @@ pub mod test {
freq: 868100000,
timestamp: 12345.0,
payload: "".into(),
..Default::default()
}),
};
let json_s = serde_json::to_string(&updf).unwrap();

View File

@ -59,31 +59,66 @@ impl Integration {
Ok(())
}
async fn modem_modem(
async fn modem_updf(
&self,
vars: &HashMap<String, String>,
pl: &integration::UplinkEvent,
) -> Result<()> {
let di = pl.device_info.as_ref().unwrap();
info!(dev_eui = %di.dev_eui, "Forwarding modem message");
info!(dev_eui = %di.dev_eui, "Forwarding updf message");
let ts: DateTime<Utc> = pl.time.as_ref().unwrap().clone().try_into()?;
let dev_eui = EUI64::from_str(&di.dev_eui)?;
let req = client::UplinkRequest {
dev_eui: client::Eui64Wrapper::new(&dev_eui),
uplink: client::UplinkMsg::Modem(client::UplinkMsgModem {
msg_type: "modem".into(),
payload: hex::encode(&pl.data),
f_cnt: pl.f_cnt,
timestamp: ts.timestamp_millis() as f64 / 1000.0,
dr: pl.dr as u8,
freq: pl.tx_info.as_ref().unwrap().frequency,
uplink: client::UplinkMsg::UpDf({
let mut msg_updf = client::UplinkMsgUpDf {
msg_type: "updf".into(),
f_cnt: pl.f_cnt,
port: pl.f_port as u8,
dr: pl.dr as u8,
freq: pl.tx_info.as_ref().unwrap().frequency,
timestamp: ts.timestamp_millis() as f64 / 1000.0,
payload: hex::encode(&pl.data),
gnss_capture_time: match self.config.modem_geolocation_services.gnss_use_rx_time
{
false => None,
true => {
let ts = match get_time_since_gps_epoch_chrono(&pl.rx_info) {
Some(v) => v,
None => Utc::now().to_gps_time(),
};
// Compensate for gnss scanning time and uplink.
let ts = ts - Duration::seconds(6);
Some(ts.num_seconds() as f64)
}
},
gnss_capture_time_accuracy: match self
.config
.modem_geolocation_services
.gnss_use_rx_time
{
false => None,
true => Some(15.0),
},
gnss_assist_position: None,
gnss_assist_altitude: None,
};
if let Some(loc) = get_start_location(&pl.rx_info) {
msg_updf.gnss_assist_position = Some(vec![loc.latitude, loc.longitude]);
msg_updf.gnss_assist_altitude = Some(loc.altitude);
}
msg_updf
}),
};
let resp = self.client.uplink_send(&req).await?;
self.handle_modem_response(vars, pl, &resp, common::LocationSource::Unknown)
self.handle_modem_response(vars, pl, &resp, common::LocationSource::GeoResolverGnss)
.await?;
Ok(())
@ -169,6 +204,7 @@ impl Integration {
freq: pl.tx_info.as_ref().unwrap().frequency,
timestamp: ts.timestamp_millis() as f64 / 1000.0,
payload: "".into(),
..Default::default()
}),
};
@ -698,12 +734,13 @@ impl IntegrationTrait for Integration {
pl: &integration::UplinkEvent,
) -> Result<()> {
if self.config.modem_geolocation_services.modem_enabled {
if pl.f_port == self.config.modem_geolocation_services.modem_port {
// Modem payloads.
self.modem_modem(vars, pl).await?;
} else if pl.f_port == self.config.modem_geolocation_services.gnss_port {
// GNSS payloads.
self.modem_gnss(vars, pl).await?;
if self
.config
.modem_geolocation_services
.forward_f_ports
.contains(&pl.f_port)
{
self.modem_updf(vars, pl).await?;
} else {
// Only forward meta-data.
self.modem_metadata(vars, pl).await?;

View File

@ -200,12 +200,13 @@ pub struct LoraCloudConfiguration {
pub modem_geolocation_services: LoraCloudModemGeolocationServices,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct LoraCloudModemGeolocationServices {
pub token: String,
pub modem_enabled: bool,
pub modem_port: u32,
pub gnss_port: u32,
pub forward_f_ports: Vec<u32>,
pub gnss_use_rx_time: bool,
pub parse_tlv: bool,
pub geolocation_buffer_ttl: u32,
@ -466,7 +467,7 @@ pub async fn get_integration(
let application_id = *application_id;
move || -> Result<Integration, Error> {
let mut c = get_db_conn()?;
let i: Integration = application_integration::dsl::application_integration
let mut i: Integration = application_integration::dsl::application_integration
.filter(
application_integration::dsl::application_id
.eq(application_id)
@ -474,6 +475,19 @@ pub async fn get_integration(
)
.first(&mut c)
.map_err(|e| Error::from_diesel(e, application_id.to_string()))?;
// For backwards compatibiliy
if let IntegrationConfiguration::LoraCloud(conf) = &mut i.configuration {
if conf.modem_geolocation_services.forward_f_ports.is_empty() {
conf.modem_geolocation_services.forward_f_ports = vec![
conf.modem_geolocation_services.modem_port,
conf.modem_geolocation_services.gnss_port,
197,
192,
];
}
}
Ok(i)
}
})

View File

@ -34,9 +34,8 @@ class CreateLoRaCloudIntegration extends Component<IProps> {
render() {
let i = new LoraCloudIntegration();
let mgs = new LoraCloudModemGeolocationServices();
mgs.setModemPort(199);
mgs.setGnssPort(198);
mgs.setModemEnabled(true);
mgs.setForwardFPortsList([192, 197, 198, 199]);
i.setModemGeolocationServices(mgs);

View File

@ -1,6 +1,7 @@
import React, { Component } from "react";
import { Form, Input, InputNumber, Switch, Button, Tabs, Collapse } from "antd";
import { MinusCircleOutlined, PlusOutlined } from "@ant-design/icons";
import {
LoraCloudIntegration,
@ -56,8 +57,7 @@ class LoRaCloudIntegrationForm extends Component<IProps, IState> {
if (mgsv !== undefined) {
mgs.setToken(mgsv.token);
mgs.setModemEnabled(mgsv.modemEnabled);
mgs.setModemPort(mgsv.modemPort);
mgs.setGnssPort(mgsv.gnssPort);
mgs.setForwardFPortsList(mgsv.forwardFPortsList);
mgs.setGnssUseRxTime(mgsv.gnssUseRxTime);
mgs.setParseTlv(mgsv.parseTlv);
mgs.setGeolocationBufferTtl(mgsv.geolocationBufferTtl);
@ -119,7 +119,7 @@ class LoRaCloudIntegrationForm extends Component<IProps, IState> {
tooltip="This token can be obtained from loracloud.com"
rules={[{ required: true, message: "Please enter a token!" }]}
>
<Input />
<Input type="password" />
</Form.Item>
<Form.Item
name={["modemGeolocationServices", "modemEnabled"]}
@ -129,24 +129,26 @@ class LoRaCloudIntegrationForm extends Component<IProps, IState> {
<Switch onChange={this.onModemEnabledChange} />
</Form.Item>
{this.state.modemEnabled && (
<Form.Item
label="GNSS port (FPort)"
name={["modemGeolocationServices", "gnssPort"]}
tooltip="ChirpStack will only forward the FRMPayload for GNSS geolocation to LoRa Cloud when the uplink matches the configured port."
rules={[{ required: true, message: "Please enter a port number!" }]}
>
<InputNumber min={0} max={255} />
</Form.Item>
)}
{this.state.modemEnabled && (
<Form.Item
label="Modem port (FPort)"
name={["modemGeolocationServices", "modemPort"]}
tooltip="ChirpStack will only forward the FRMPayload to LoRa Cloud when the uplink matches the configured port."
rules={[{ required: true, message: "Please enter a port number!" }]}
>
<InputNumber min={0} max={255} />
</Form.Item>
<Form.List name={["modemGeolocationServices", "forwardFPortsList"]}>
{(fields, { add, remove }) => (
<Form.Item label="Forward messages on these FPorts to LoRa Cloud">
{fields.map((field, index) => (
<Form.Item
{...field}
rules={[{ required: true, message: "Please a FPort value!" }]}
style={{ display: "inline-block", width: "100px", marginRight: "24px" }}
>
<InputNumber
min={1}
max={255}
addonAfter={<MinusCircleOutlined onClick={() => remove(index)} />}
/>
</Form.Item>
))}
<Button type="dashed" onClick={() => add()} icon={<PlusOutlined />} />
</Form.Item>
)}
</Form.List>
)}
{this.state.modemEnabled && (
<Form.Item