towns-agent 3.3.1 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +205 -742
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -613,7 +613,7 @@ var require_node = __commonJS({
|
|
|
613
613
|
var tty = require("tty");
|
|
614
614
|
var util = require("util");
|
|
615
615
|
exports2.init = init2;
|
|
616
|
-
exports2.log =
|
|
616
|
+
exports2.log = log12;
|
|
617
617
|
exports2.formatArgs = formatArgs;
|
|
618
618
|
exports2.save = save;
|
|
619
619
|
exports2.load = load;
|
|
@@ -748,7 +748,7 @@ var require_node = __commonJS({
|
|
|
748
748
|
}
|
|
749
749
|
return (/* @__PURE__ */ new Date()).toISOString() + " ";
|
|
750
750
|
}
|
|
751
|
-
function
|
|
751
|
+
function log12(...args) {
|
|
752
752
|
return process.stderr.write(util.formatWithOptions(exports2.inspectOpts, ...args) + "\n");
|
|
753
753
|
}
|
|
754
754
|
function save(namespaces) {
|
|
@@ -4198,8 +4198,8 @@ var require_dexie = __commonJS({
|
|
|
4198
4198
|
}
|
|
4199
4199
|
function createMiddlewareStack(stackImpl, middlewares) {
|
|
4200
4200
|
return middlewares.reduce(function(down, _a2) {
|
|
4201
|
-
var
|
|
4202
|
-
return __assign(__assign({}, down),
|
|
4201
|
+
var create18 = _a2.create;
|
|
4202
|
+
return __assign(__assign({}, down), create18(down));
|
|
4203
4203
|
}, stackImpl);
|
|
4204
4204
|
}
|
|
4205
4205
|
function createMiddlewareStacks(middlewares, idbdb, _a2, tmpTrans) {
|
|
@@ -6299,21 +6299,21 @@ var require_dexie = __commonJS({
|
|
|
6299
6299
|
}).then(fn);
|
|
6300
6300
|
};
|
|
6301
6301
|
Dexie3.prototype.use = function(_a2) {
|
|
6302
|
-
var stack = _a2.stack,
|
|
6302
|
+
var stack = _a2.stack, create18 = _a2.create, level = _a2.level, name = _a2.name;
|
|
6303
6303
|
if (name)
|
|
6304
6304
|
this.unuse({ stack, name });
|
|
6305
6305
|
var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);
|
|
6306
|
-
middlewares.push({ stack, create:
|
|
6306
|
+
middlewares.push({ stack, create: create18, level: level == null ? 10 : level, name });
|
|
6307
6307
|
middlewares.sort(function(a, b) {
|
|
6308
6308
|
return a.level - b.level;
|
|
6309
6309
|
});
|
|
6310
6310
|
return this;
|
|
6311
6311
|
};
|
|
6312
6312
|
Dexie3.prototype.unuse = function(_a2) {
|
|
6313
|
-
var stack = _a2.stack, name = _a2.name,
|
|
6313
|
+
var stack = _a2.stack, name = _a2.name, create18 = _a2.create;
|
|
6314
6314
|
if (stack && this._middlewares[stack]) {
|
|
6315
6315
|
this._middlewares[stack] = this._middlewares[stack].filter(function(mw) {
|
|
6316
|
-
return
|
|
6316
|
+
return create18 ? mw.create !== create18 : name ? mw.name !== name : false;
|
|
6317
6317
|
});
|
|
6318
6318
|
}
|
|
6319
6319
|
return this;
|
|
@@ -7564,7 +7564,7 @@ var import_wkt3 = require("@bufbuild/protobuf/wkt");
|
|
|
7564
7564
|
// ../proto/dist/gen/payloads_pb.js
|
|
7565
7565
|
var import_codegenv2 = require("@bufbuild/protobuf/codegenv2");
|
|
7566
7566
|
var import_wkt = require("@bufbuild/protobuf/wkt");
|
|
7567
|
-
var file_payloads = /* @__PURE__ */ (0, import_codegenv2.fileDesc)("Cg5wYXlsb2Fkcy5wcm90bxIFcml2ZXIilCQKDkNoYW5uZWxNZXNzYWdlEioKBHBvc3QYASABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0SAASMgoIcmVhY3Rpb24YAiABKAsyHi5yaXZlci5DaGFubmVsTWVzc2FnZS5SZWFjdGlvbkgAEioKBGVkaXQYAyABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5FZGl0SAASNAoJcmVkYWN0aW9uGAQgASgLMh8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUmVkYWN0aW9uSAAaMgoIUmVhY3Rpb24SFAoMcmVmX2V2ZW50X2lkGAEgASgJEhAKCHJlYWN0aW9uGAIgASgJGkYKBEVkaXQSFAoMcmVmX2V2ZW50X2lkGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0GkEKCVJlZGFjdGlvbhIUCgxyZWZfZXZlbnRfaWQYASABKAkSEwoGcmVhc29uGAIgASgJSACIAQFCCQoHX3JlYXNvbhr1IAoEUG9zdBIWCgl0aHJlYWRfaWQYASABKAlIAYgBARIbCg50aHJlYWRfcHJldmlldxgCIAEoCUgCiAEBEhUKCHJlcGx5X2lkGAMgASgJSAOIAQESGgoNcmVwbHlfcHJldmlldxgEIAEoCUgEiAEBEjcKBHRleHQYZSABKAsyJy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVGV4dEgAEjkKBWltYWdlGGYgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASMwoCZ20YZyABKAsyJS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuR01IABI0ChFjb252ZXJzYXRpb25fc2VlZBhoIAEoCzIXLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRIABJFChpjb252ZXJzYXRpb25fc2VlZF9yZXNwb25zZRhpIAEoCzIfLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRSZXNwb25zZUgAGqwBCgdNZW50aW9uEg8KB3VzZXJfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEiwKCmF0X2NoYW5uZWwYZCABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABI5CgdhdF9yb2xlGGUgASgLMiYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Sb2xlTWVudGlvbkgAQhEKD21lbnRpb25CZWhhdmlvchoeCgtSb2xlTWVudGlvbhIPCgdyb2xlX2lkGAEgASgFGtIDCgpBdHRhY2htZW50EjkKBWltYWdlGGUgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASKwoMY2h1bmtlZE1lZGlhGGcgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSAASTQoPZW1iZWRkZWRNZXNzYWdlGGggASgLMjIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkVtYmVkZGVkTWVzc2FnZUgAEkUKC3VuZnVybGVkVXJsGGkgASgLMi4ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlVuZnVybGVkVVJMSAASOwoGdGlja2VyGGogASgLMikucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlRpY2tlckgAEj0KB21pbmlhcHAYayABKAsyKi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuTWluaWFwcEgAEj8KCGluZm9DYXJkGGwgASgLMisucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkSABCCQoHY29udGVudBrvFwoHQ29udGVudBqGAQoEVGV4dBIMCgRib2R5GAEgASgJEjQKCG1lbnRpb25zGAIgAygLMiIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5NZW50aW9uEjoKC2F0dGFjaG1lbnRzGAMgAygLMiUucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5BdHRhY2htZW50GqkCCgVJbWFnZRINCgV0aXRsZRgBIAEoCRI7CgRpbmZvGAIgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm8SRQoJdGh1bWJuYWlsGAMgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm9IAIgBARp/CgRJbmZvEgsKA3VybBgBIAEoCRIQCghtaW1ldHlwZRgCIAEoCRIRCgRzaXplGAMgASgFSACIAQESEgoFd2lkdGgYBCABKAVIAYgBARITCgZoZWlnaHQYBSABKAVIAogBAUIHCgVfc2l6ZUIICgZfd2lkdGhCCQoHX2hlaWdodEIMCgpfdGh1bWJuYWlsGjQKAkdNEhAKCHR5cGVfdXJsGAEgASgJEhIKBXZhbHVlGAIgASgMSACIAQFCCAoGX3ZhbHVlGr0ECg9FbWJlZGRlZE1lc3NhZ2USCwoDdXJsGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0EkUKBGluZm8YAyABKAsyNy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuRW1iZWRkZWRNZXNzYWdlLkluZm8SUQoKc3RhdGljSW5mbxgEIAEoCzI9LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5FbWJlZGRlZE1lc3NhZ2UuU3RhdGljSW5mbxqJAQoESW5mbxIOCgZ1c2VySWQYASABKAkSGAoQY3JlYXRlZEF0RXBvY2hNcxgCIAEoAxIPCgdzcGFjZUlkGAMgASgJEhEKCWNoYW5uZWxJZBgEIAEoCRIRCgltZXNzYWdlSWQYBSABKAkSFAoHcmVwbHlJZBgGIAEoCUgAiAEBQgoKCF9yZXBseUlkGswBCgpTdGF0aWNJbmZvEhUKCHVzZXJOYW1lGAEgASgJSACIAQESGAoLZGlzcGxheU5hbWUYAiABKAlIAYgBARIYCgtjaGFubmVsTmFtZRgDIAEoCUgCiAEBEhYKCXNwYWNlTmFtZRgEIAEoCUgDiAEBEhQKB2Vuc05hbWUYBSABKAlIBIgBAUILCglfdXNlck5hbWVCDgoMX2Rpc3BsYXlOYW1lQg4KDF9jaGFubmVsTmFtZUIMCgpfc3BhY2VOYW1lQgoKCF9lbnNOYW1lGscBCgtVbmZ1cmxlZFVSTBILCgN1cmwYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDQoFdGl0bGUYAyABKAkSSAoFaW1hZ2UYBCABKAsyNC5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVW5mdXJsZWRVUkwuSW1hZ2VIAIgBARozCgVJbWFnZRIOCgZoZWlnaHQYASABKAUSDQoFd2lkdGgYAiABKAUSCwoDdXJsGAMgASgJQggKBl9pbWFnZRorCgZUaWNrZXISDwoHYWRkcmVzcxgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRoWCgdNaW5pYXBwEgsKA3VybBgBIAEoCRqpDQoISW5mb0NhcmQSQAoFdGl0bGUYASABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWwSQQoGZmllbGRzGAIgAygLMjEucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkZpZWxkGuYDCgVMYWJlbBJJCgRpY29uGAEgASgOMjYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkljb25IAIgBARIMCgR0ZXh0GAIgASgJEksKBWJhZGdlGAMgASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlSAGIAQEayAEKBUJhZGdlEgwKBHRleHQYASABKAkSVQoHdmFyaWFudBgCIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQEiTgoHVmFyaWFudBIXChNWQVJJQU5UX1VOU1BFQ0lGSUVEEAASFAoQVkFSSUFOVF9QT1NJVElWRRABEhQKEFZBUklBTlRfTkVHQVRJVkUQAkIKCghfdmFyaWFudCJZCgRJY29uEhQKEElDT05fVU5TUEVDSUZJRUQQABIOCgpJQ09OX0NIRUNLEAESCgoGSUNPTl9YEAISEAoMSUNPTl9XQVJOSU5HEAMSDQoJSUNPTl9JTkZPEARCBwoFX2ljb25CCAoGX2JhZGdlGpwDCgVGaWVsZBISCgVsYWJlbBgBIAEoCUgBiAEBEkEKBHRleHQYCiABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWxIABJDCgR1c2VyGAsgASgLMjMucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLlVzZXJSZWZIABJICgV0b2tlbhgMIAEoCzI3LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5Ub2tlbkFtb3VudEgAEksKCGNvbnRyYWN0GA0gASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkNvbnRyYWN0UmVmSAASTQoLbWFya2V0X2l0ZW0YDiABKAsyNi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTWFya2V0SXRlbUgAQgcKBXZhbHVlQggKBl9sYWJlbBoaCgdVc2VyUmVmEg8KB3VzZXJfaWQYASABKAwaQAoLVG9rZW5BbW91bnQSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRIOCgZhbW91bnQYAyABKAkaMAoLQ29udHJhY3RSZWYSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRr/AwoKTWFya2V0SXRlbRIMCgRuYW1lGAEgASgJEg0KBXByaWNlGAIgASgJEhUKCGljb25fdXJsGAMgASgJSACIAQESFQoIc3VidGl0bGUYBCABKAlIAYgBARITCgZjaGFuZ2UYBSABKAlIAogBARIXCgpjaGFuZ2VfcGN0GAYgASgJSAOIAQESVwoJZGlyZWN0aW9uGAcgASgOMj8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlLlZhcmlhbnRIBIgBARJQCghvdXRjb21lcxgIIAMoCzI+LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5NYXJrZXRJdGVtLk91dGNvbWUaigEKB091dGNvbWUSDQoFbGFiZWwYASABKAkSDQoFdmFsdWUYAiABKAkSVQoHdmFyaWFudBgDIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQFCCgoIX3ZhcmlhbnRCCwoJX2ljb25fdXJsQgsKCV9zdWJ0aXRsZUIJCgdfY2hhbmdlQg0KC19jaGFuZ2VfcGN0QgwKCl9kaXJlY3Rpb25CCQoHY29udGVudEIMCgpfdGhyZWFkX2lkQhEKD190aHJlYWRfcHJldmlld0ILCglfcmVwbHlfaWRCEAoOX3JlcGx5X3ByZXZpZXdCCQoHcGF5bG9hZCJfCh5TcGVjaWFsaXN0Q2FwYWJpbGl0eUludm9jYXRpb24SEAoIYWdlbnRfaWQYASABKAwSFwoPY2FwYWJpbGl0eV9uYW1lGAIgASgJEhIKCnBhcmFtZXRlcnMYAyABKAkiNQoSQWdlbnRQcm9wb3NhbEVycm9yEhAKCGFnZW50X2lkGAEgASgMEg0KBWVycm9yGAIgASgJIv0BCghQcm9wb3NhbBIKCgJpZBgBIAEoCRIXCg90YXJnZXRfYWdlbnRfaWQYAiABKAwSGQoRdGFyZ2V0X2FnZW50X25hbWUYAyABKAkSFwoPY2FwYWJpbGl0eV9uYW1lGAQgASgJEhIKCnBhcmFtZXRlcnMYBSABKAkSEwoLZXhwbGFuYXRpb24YBiABKAkSEgoKY29uZmlkZW5jZRgHIAEoAhIVCg1leHBpcmVzX2F0X21zGAggASgDEhAKCHdhcm5pbmdzGAkgAygJEh0KEGV4cGVjdGVkX291dGNvbWUYCiABKAlIAIgBAUITChFfZXhwZWN0ZWRfb3V0Y29tZSKnAQoWQWdlbnRQcm9wb3NhbHNSZXNwb25zZRIiCglwcm9wb3NhbHMYASADKAsyDy5yaXZlci5Qcm9wb3NhbBIpCgZlcnJvcnMYAiADKAsyGS5yaXZlci5BZ2VudFByb3Bvc2FsRXJyb3ISFwoPcmVzcG9uZGVkX2F0X21zGAMgASgDEiUKBnN0YXR1cxgEIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIusFChBDb252ZXJzYXRpb25TZWVkEgoKAmlkGAEgASgJEhUKDWNyZWF0ZWRfYXRfbXMYAiABKAMSGwoTcHJvcG9zYWxfdGltZW91dF9tcxgDIAEoAxIcChRjb25jaWVyZ2VfdGltZW91dF9tcxgEIAEoAxINCgVxdWVyeRgFIAEoCRIUCgdjb250ZXh0GAYgASgJSACIAQESGQoMZXh0ZXJuYWxfcmVmGAcgASgJSAGIAQESFAoMY29uY2llcmdlX2lkGAggASgMEhMKBnNvdXJjZRgJIAEoCUgCiAEBEjoKC2ludm9jYXRpb25zGAogAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEiEKGWludm9jYXRpb25zX3VwZGF0ZWRfYXRfbXMYCyABKAMSSQoScHJvcG9zYWxzX2J5X2FnZW50GAwgAygLMi0ucml2ZXIuQ29udmVyc2F0aW9uU2VlZC5Qcm9wb3NhbHNCeUFnZW50RW50cnkSFQoNcmVzcG9uc2VfdGV4dBgNIAEoCRIdChVzZWxlY3RlZF9wcm9wb3NhbF9pZHMYDiADKAkSHAoUY2xhcmlmeWluZ19xdWVzdGlvbnMYDyADKAkSIQoZY29uY2llcmdlX3Jlc3BvbmRlZF9hdF9tcxgQIAEoAxIWCg5zdGF0dXNfdXBkYXRlcxgRIAMoCRIiCglwcm9wb3NhbHMYEiADKAsyDy5yaXZlci5Qcm9wb3NhbBpWChVQcm9wb3NhbHNCeUFnZW50RW50cnkSCwoDa2V5GAEgASgJEiwKBXZhbHVlGAIgASgLMh0ucml2ZXIuQWdlbnRQcm9wb3NhbHNSZXNwb25zZToCOAFCCgoIX2NvbnRleHRCDwoNX2V4dGVybmFsX3JlZkIJCgdfc291cmNlUhRhZGRpdGlvbmFsX3Byb3Bvc2Fsc1IPcHJvcG9zYWxfZXJyb3JzUgpjcmVhdGVkX2F0IrIBChhDb252ZXJzYXRpb25TZWVkUmVzcG9uc2USDwoHc2VlZF9pZBgBIAEoCRIqCgRzZWVkGAIgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZEgBiAEBEiwKEXNlbGVjdGVkX3Byb3Bvc2FsGGQgASgLMg8ucml2ZXIuUHJvcG9zYWxIABIWCgx1c2VyX21lc3NhZ2UYZSABKAlIAEIKCghyZXNwb25zZUIHCgVfc2VlZCJjChFDaGFubmVsUHJvcGVydGllcxIMCgRuYW1lGAEgASgJEg0KBXRvcGljGAIgASgJEicKBWltYWdlGAMgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSACIAQFCCAoGX2ltYWdlImgKFlVzZXJNZXRhZGF0YVByb3BlcnRpZXMSFQoIdXNlcm5hbWUYASABKAlIAIgBARIZCgxkaXNwbGF5X25hbWUYAiABKAlIAYgBAUILCglfdXNlcm5hbWVCDwoNX2Rpc3BsYXlfbmFtZSKIAwoQRnVsbHlSZWFkTWFya2VycxI1CgdtYXJrZXJzGAEgAygLMiQucml2ZXIuRnVsbHlSZWFkTWFya2Vycy5NYXJrZXJzRW50cnka6wEKB0NvbnRlbnQSEgoKY2hhbm5lbF9pZBgBIAEoCRIdChB0aHJlYWRfcGFyZW50X2lkGAIgASgJSACIAQESEAoIZXZlbnRfaWQYAyABKAkSEQoJZXZlbnRfbnVtGAQgASgDEhsKE2JlZ2luX3VucmVhZF93aW5kb3cYBSABKAMSGQoRZW5kX3VucmVhZF93aW5kb3cYBiABKAMSEQoJaXNfdW5yZWFkGAcgASgIEhYKDm1hcmtlZFJlYWRBdFRzGAggASgDEhAKCG1lbnRpb25zGAkgASgFQhMKEV90aHJlYWRfcGFyZW50X2lkGk8KDE1hcmtlcnNFbnRyeRILCgNrZXkYASABKAkSLgoFdmFsdWUYAiABKAsyHy5yaXZlci5GdWxseVJlYWRNYXJrZXJzLkNvbnRlbnQ6AjgBIhsKC1Nlc3Npb25LZXlzEgwKBGtleXMYASADKAkiegoVSHlicmlkR3JvdXBTZXNzaW9uS2V5EhIKCnNlc3Npb25faWQYASABKAwSEQoJc3RyZWFtX2lkGAIgASgMEgsKA2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDEhYKDm1pbmlibG9ja19oYXNoGAUgASgMIm0KCU1lZGlhSW5mbxIQCghtaW1ldHlwZRgBIAEoCRIRCglzaXplQnl0ZXMYAiABKAMSEwoLd2lkdGhQaXhlbHMYAyABKAUSFAoMaGVpZ2h0UGl4ZWxzGAQgASgFEhAKCGZpbGVuYW1lGAUgASgJIkAKDUVtYmVkZGVkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIPCgdjb250ZW50GAIgASgMIs4BCgxDaHVua2VkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIQCghzdHJlYW1JZBgCIAEoCRInCgl0aHVtYm5haWwYAyABKAsyFC5yaXZlci5FbWJlZGRlZE1lZGlhEiwKBmFlc2djbRhlIAEoCzIaLnJpdmVyLkNodW5rZWRNZWRpYS5BRVNHQ01IABonCgZBRVNHQ00SCgoCaXYYASABKAwSEQoJc2VjcmV0S2V5GAIgASgMQgwKCmVuY3J5cHRpb24iUAoHVXNlckJpbxILCgNiaW8YASABKAkSIAoTdXBkYXRlZF9hdF9lcG9jaF9tcxgCIAEoBEgAiAEBQhYKFF91cGRhdGVkX2F0X2Vwb2NoX21zIloKC0JlYXJlclRva2VuEhwKFGRlbGVnYXRlX3ByaXZhdGVfa2V5GAEgASgJEhQKDGRlbGVnYXRlX3NpZxgCIAEoDBIXCg9leHBpcnlfZXBvY2hfbXMYAyABKAMirgMKDkV4cG9ydGVkRGV2aWNlEhEKCXBpY2tsZUtleRgBIAEoCRIWCg5waWNrbGVkQWNjb3VudBgCIAEoCRI8ChBvdXRib3VuZFNlc3Npb25zGAMgAygLMiIucml2ZXIuRXhwb3J0ZWREZXZpY2UuR3JvdXBTZXNzaW9uEjsKD2luYm91bmRTZXNzaW9ucxgEIAMoCzIiLnJpdmVyLkV4cG9ydGVkRGV2aWNlLkdyb3VwU2Vzc2lvbhJFChNoeWJyaWRHcm91cFNlc3Npb25zGAUgAygLMigucml2ZXIuRXhwb3J0ZWREZXZpY2UuSHlicmlkR3JvdXBTZXNzaW9uGkYKDEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRIPCgdzZXNzaW9uGAMgASgJGmcKEkh5YnJpZEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRITCgtzZXNzaW9uX2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDIqEBCg5BcHBQcml2YXRlRGF0YRITCgtwcml2YXRlX2tleRgBIAEoCRIwChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIVLnJpdmVyLkV4cG9ydGVkRGV2aWNlEgsKA2VudhgDIAEoCRITCgthcHBfYWRkcmVzcxgEIAEoDBIXCgpqd3Rfc2VjcmV0GAUgASgMSACIAQFCDQoLX2p3dF9zZWNyZXQqswEKFkNvbnZlcnNhdGlvblNlZWRTdGF0dXMSKAokQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX1VOU1BFQ0lGSUVEEAASJgoiQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX05PVF9SRUFEWRABEiIKHkNPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19SRUFEWRACEiMKH0NPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19GQUlMRUQQAyqoAQoOUHJvcG9zYWxTdGF0dXMSHwobUFJPUE9TQUxfU1RBVFVTX1VOU1BFQ0lGSUVEEAASGwoXUFJPUE9TQUxfU1RBVFVTX1BFTkRJTkcQARIdChlQUk9QT1NBTF9TVEFUVVNfRlVMRklMTEVEEAISGgoWUFJPUE9TQUxfU1RBVFVTX0ZBSUxFRBADEh0KGVBST1BPU0FMX1NUQVRVU19USU1FRF9PVVQQBEI0WjJnaXRodWIuY29tL3Rvd25zLXByb3RvY29sL3Rvd25zL2NvcmUvbm9kZS9wcm90b2NvbGIGcHJvdG8z", [import_wkt.file_google_protobuf_empty]);
|
|
7567
|
+
var file_payloads = /* @__PURE__ */ (0, import_codegenv2.fileDesc)("Cg5wYXlsb2Fkcy5wcm90bxIFcml2ZXIilCQKDkNoYW5uZWxNZXNzYWdlEioKBHBvc3QYASABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0SAASMgoIcmVhY3Rpb24YAiABKAsyHi5yaXZlci5DaGFubmVsTWVzc2FnZS5SZWFjdGlvbkgAEioKBGVkaXQYAyABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5FZGl0SAASNAoJcmVkYWN0aW9uGAQgASgLMh8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUmVkYWN0aW9uSAAaMgoIUmVhY3Rpb24SFAoMcmVmX2V2ZW50X2lkGAEgASgJEhAKCHJlYWN0aW9uGAIgASgJGkYKBEVkaXQSFAoMcmVmX2V2ZW50X2lkGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0GkEKCVJlZGFjdGlvbhIUCgxyZWZfZXZlbnRfaWQYASABKAkSEwoGcmVhc29uGAIgASgJSACIAQFCCQoHX3JlYXNvbhr1IAoEUG9zdBIWCgl0aHJlYWRfaWQYASABKAlIAYgBARIbCg50aHJlYWRfcHJldmlldxgCIAEoCUgCiAEBEhUKCHJlcGx5X2lkGAMgASgJSAOIAQESGgoNcmVwbHlfcHJldmlldxgEIAEoCUgEiAEBEjcKBHRleHQYZSABKAsyJy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVGV4dEgAEjkKBWltYWdlGGYgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASMwoCZ20YZyABKAsyJS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuR01IABI0ChFjb252ZXJzYXRpb25fc2VlZBhoIAEoCzIXLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRIABJFChpjb252ZXJzYXRpb25fc2VlZF9yZXNwb25zZRhpIAEoCzIfLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRSZXNwb25zZUgAGqwBCgdNZW50aW9uEg8KB3VzZXJfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEiwKCmF0X2NoYW5uZWwYZCABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABI5CgdhdF9yb2xlGGUgASgLMiYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Sb2xlTWVudGlvbkgAQhEKD21lbnRpb25CZWhhdmlvchoeCgtSb2xlTWVudGlvbhIPCgdyb2xlX2lkGAEgASgFGtIDCgpBdHRhY2htZW50EjkKBWltYWdlGGUgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASKwoMY2h1bmtlZE1lZGlhGGcgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSAASTQoPZW1iZWRkZWRNZXNzYWdlGGggASgLMjIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkVtYmVkZGVkTWVzc2FnZUgAEkUKC3VuZnVybGVkVXJsGGkgASgLMi4ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlVuZnVybGVkVVJMSAASOwoGdGlja2VyGGogASgLMikucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlRpY2tlckgAEj0KB21pbmlhcHAYayABKAsyKi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuTWluaWFwcEgAEj8KCGluZm9DYXJkGGwgASgLMisucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkSABCCQoHY29udGVudBrvFwoHQ29udGVudBqGAQoEVGV4dBIMCgRib2R5GAEgASgJEjQKCG1lbnRpb25zGAIgAygLMiIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5NZW50aW9uEjoKC2F0dGFjaG1lbnRzGAMgAygLMiUucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5BdHRhY2htZW50GqkCCgVJbWFnZRINCgV0aXRsZRgBIAEoCRI7CgRpbmZvGAIgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm8SRQoJdGh1bWJuYWlsGAMgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm9IAIgBARp/CgRJbmZvEgsKA3VybBgBIAEoCRIQCghtaW1ldHlwZRgCIAEoCRIRCgRzaXplGAMgASgFSACIAQESEgoFd2lkdGgYBCABKAVIAYgBARITCgZoZWlnaHQYBSABKAVIAogBAUIHCgVfc2l6ZUIICgZfd2lkdGhCCQoHX2hlaWdodEIMCgpfdGh1bWJuYWlsGjQKAkdNEhAKCHR5cGVfdXJsGAEgASgJEhIKBXZhbHVlGAIgASgMSACIAQFCCAoGX3ZhbHVlGr0ECg9FbWJlZGRlZE1lc3NhZ2USCwoDdXJsGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0EkUKBGluZm8YAyABKAsyNy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuRW1iZWRkZWRNZXNzYWdlLkluZm8SUQoKc3RhdGljSW5mbxgEIAEoCzI9LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5FbWJlZGRlZE1lc3NhZ2UuU3RhdGljSW5mbxqJAQoESW5mbxIOCgZ1c2VySWQYASABKAkSGAoQY3JlYXRlZEF0RXBvY2hNcxgCIAEoAxIPCgdzcGFjZUlkGAMgASgJEhEKCWNoYW5uZWxJZBgEIAEoCRIRCgltZXNzYWdlSWQYBSABKAkSFAoHcmVwbHlJZBgGIAEoCUgAiAEBQgoKCF9yZXBseUlkGswBCgpTdGF0aWNJbmZvEhUKCHVzZXJOYW1lGAEgASgJSACIAQESGAoLZGlzcGxheU5hbWUYAiABKAlIAYgBARIYCgtjaGFubmVsTmFtZRgDIAEoCUgCiAEBEhYKCXNwYWNlTmFtZRgEIAEoCUgDiAEBEhQKB2Vuc05hbWUYBSABKAlIBIgBAUILCglfdXNlck5hbWVCDgoMX2Rpc3BsYXlOYW1lQg4KDF9jaGFubmVsTmFtZUIMCgpfc3BhY2VOYW1lQgoKCF9lbnNOYW1lGscBCgtVbmZ1cmxlZFVSTBILCgN1cmwYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDQoFdGl0bGUYAyABKAkSSAoFaW1hZ2UYBCABKAsyNC5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVW5mdXJsZWRVUkwuSW1hZ2VIAIgBARozCgVJbWFnZRIOCgZoZWlnaHQYASABKAUSDQoFd2lkdGgYAiABKAUSCwoDdXJsGAMgASgJQggKBl9pbWFnZRorCgZUaWNrZXISDwoHYWRkcmVzcxgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRoWCgdNaW5pYXBwEgsKA3VybBgBIAEoCRqpDQoISW5mb0NhcmQSQAoFdGl0bGUYASABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWwSQQoGZmllbGRzGAIgAygLMjEucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkZpZWxkGuYDCgVMYWJlbBJJCgRpY29uGAEgASgOMjYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkljb25IAIgBARIMCgR0ZXh0GAIgASgJEksKBWJhZGdlGAMgASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlSAGIAQEayAEKBUJhZGdlEgwKBHRleHQYASABKAkSVQoHdmFyaWFudBgCIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQEiTgoHVmFyaWFudBIXChNWQVJJQU5UX1VOU1BFQ0lGSUVEEAASFAoQVkFSSUFOVF9QT1NJVElWRRABEhQKEFZBUklBTlRfTkVHQVRJVkUQAkIKCghfdmFyaWFudCJZCgRJY29uEhQKEElDT05fVU5TUEVDSUZJRUQQABIOCgpJQ09OX0NIRUNLEAESCgoGSUNPTl9YEAISEAoMSUNPTl9XQVJOSU5HEAMSDQoJSUNPTl9JTkZPEARCBwoFX2ljb25CCAoGX2JhZGdlGpwDCgVGaWVsZBISCgVsYWJlbBgBIAEoCUgBiAEBEkEKBHRleHQYCiABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWxIABJDCgR1c2VyGAsgASgLMjMucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLlVzZXJSZWZIABJICgV0b2tlbhgMIAEoCzI3LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5Ub2tlbkFtb3VudEgAEksKCGNvbnRyYWN0GA0gASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkNvbnRyYWN0UmVmSAASTQoLbWFya2V0X2l0ZW0YDiABKAsyNi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTWFya2V0SXRlbUgAQgcKBXZhbHVlQggKBl9sYWJlbBoaCgdVc2VyUmVmEg8KB3VzZXJfaWQYASABKAwaQAoLVG9rZW5BbW91bnQSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRIOCgZhbW91bnQYAyABKAkaMAoLQ29udHJhY3RSZWYSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRr/AwoKTWFya2V0SXRlbRIMCgRuYW1lGAEgASgJEg0KBXByaWNlGAIgASgJEhUKCGljb25fdXJsGAMgASgJSACIAQESFQoIc3VidGl0bGUYBCABKAlIAYgBARITCgZjaGFuZ2UYBSABKAlIAogBARIXCgpjaGFuZ2VfcGN0GAYgASgJSAOIAQESVwoJZGlyZWN0aW9uGAcgASgOMj8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlLlZhcmlhbnRIBIgBARJQCghvdXRjb21lcxgIIAMoCzI+LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5NYXJrZXRJdGVtLk91dGNvbWUaigEKB091dGNvbWUSDQoFbGFiZWwYASABKAkSDQoFdmFsdWUYAiABKAkSVQoHdmFyaWFudBgDIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQFCCgoIX3ZhcmlhbnRCCwoJX2ljb25fdXJsQgsKCV9zdWJ0aXRsZUIJCgdfY2hhbmdlQg0KC19jaGFuZ2VfcGN0QgwKCl9kaXJlY3Rpb25CCQoHY29udGVudEIMCgpfdGhyZWFkX2lkQhEKD190aHJlYWRfcHJldmlld0ILCglfcmVwbHlfaWRCEAoOX3JlcGx5X3ByZXZpZXdCCQoHcGF5bG9hZCJfCh5TcGVjaWFsaXN0Q2FwYWJpbGl0eUludm9jYXRpb24SEAoIYWdlbnRfaWQYASABKAwSFwoPY2FwYWJpbGl0eV9uYW1lGAIgASgJEhIKCnBhcmFtZXRlcnMYAyABKAkiNQoSQWdlbnRQcm9wb3NhbEVycm9yEhAKCGFnZW50X2lkGAEgASgMEg0KBWVycm9yGAIgASgJIowCCghQcm9wb3NhbBIKCgJpZBgBIAEoCRIXCg90YXJnZXRfYWdlbnRfaWQYAiABKAwSGQoRdGFyZ2V0X2FnZW50X25hbWUYAyABKAkSFwoPY2FwYWJpbGl0eV9uYW1lGAQgASgJEhIKCnBhcmFtZXRlcnMYBSABKAkSEwoLZXhwbGFuYXRpb24YBiABKAkSEgoKY29uZmlkZW5jZRgHIAEoAhIVCg1leHBpcmVzX2F0X21zGAggASgDEhAKCHdhcm5pbmdzGAkgAygJEh0KEGV4cGVjdGVkX291dGNvbWUYCiABKAlIAIgBARINCgV0aXRsZRgLIAEoCUITChFfZXhwZWN0ZWRfb3V0Y29tZSKnAQoWQWdlbnRQcm9wb3NhbHNSZXNwb25zZRIiCglwcm9wb3NhbHMYASADKAsyDy5yaXZlci5Qcm9wb3NhbBIpCgZlcnJvcnMYAiADKAsyGS5yaXZlci5BZ2VudFByb3Bvc2FsRXJyb3ISFwoPcmVzcG9uZGVkX2F0X21zGAMgASgDEiUKBnN0YXR1cxgEIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIrkGChBDb252ZXJzYXRpb25TZWVkEgoKAmlkGAEgASgJEhUKDWNyZWF0ZWRfYXRfbXMYAiABKAMSGwoTcHJvcG9zYWxfdGltZW91dF9tcxgDIAEoAxIcChRjb25jaWVyZ2VfdGltZW91dF9tcxgEIAEoAxINCgVxdWVyeRgFIAEoCRIUCgdjb250ZXh0GAYgASgJSACIAQESGQoMZXh0ZXJuYWxfcmVmGAcgASgJSAGIAQESFAoMY29uY2llcmdlX2lkGAggASgMEhMKBnNvdXJjZRgJIAEoCUgCiAEBEjoKC2ludm9jYXRpb25zGAogAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEiEKGWludm9jYXRpb25zX3VwZGF0ZWRfYXRfbXMYCyABKAMSSQoScHJvcG9zYWxzX2J5X2FnZW50GAwgAygLMi0ucml2ZXIuQ29udmVyc2F0aW9uU2VlZC5Qcm9wb3NhbHNCeUFnZW50RW50cnkSFQoNcmVzcG9uc2VfdGV4dBgNIAEoCRIdChVzZWxlY3RlZF9wcm9wb3NhbF9pZHMYDiADKAkSHAoUY2xhcmlmeWluZ19xdWVzdGlvbnMYDyADKAkSIQoZY29uY2llcmdlX3Jlc3BvbmRlZF9hdF9tcxgQIAEoAxIWCg5zdGF0dXNfdXBkYXRlcxgRIAMoCRIiCglwcm9wb3NhbHMYEiADKAsyDy5yaXZlci5Qcm9wb3NhbBIaCg11c2VyX3RpbWV6b25lGBMgASgJSAOIAQESHgoWY29uY2llcmdlX2ZhaWxlZF9hdF9tcxgUIAEoAxpWChVQcm9wb3NhbHNCeUFnZW50RW50cnkSCwoDa2V5GAEgASgJEiwKBXZhbHVlGAIgASgLMh0ucml2ZXIuQWdlbnRQcm9wb3NhbHNSZXNwb25zZToCOAFCCgoIX2NvbnRleHRCDwoNX2V4dGVybmFsX3JlZkIJCgdfc291cmNlQhAKDl91c2VyX3RpbWV6b25lUhRhZGRpdGlvbmFsX3Byb3Bvc2Fsc1IPcHJvcG9zYWxfZXJyb3JzUgpjcmVhdGVkX2F0IrIBChhDb252ZXJzYXRpb25TZWVkUmVzcG9uc2USDwoHc2VlZF9pZBgBIAEoCRIqCgRzZWVkGAIgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZEgBiAEBEiwKEXNlbGVjdGVkX3Byb3Bvc2FsGGQgASgLMg8ucml2ZXIuUHJvcG9zYWxIABIWCgx1c2VyX21lc3NhZ2UYZSABKAlIAEIKCghyZXNwb25zZUIHCgVfc2VlZCJjChFDaGFubmVsUHJvcGVydGllcxIMCgRuYW1lGAEgASgJEg0KBXRvcGljGAIgASgJEicKBWltYWdlGAMgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSACIAQFCCAoGX2ltYWdlImgKFlVzZXJNZXRhZGF0YVByb3BlcnRpZXMSFQoIdXNlcm5hbWUYASABKAlIAIgBARIZCgxkaXNwbGF5X25hbWUYAiABKAlIAYgBAUILCglfdXNlcm5hbWVCDwoNX2Rpc3BsYXlfbmFtZSKIAwoQRnVsbHlSZWFkTWFya2VycxI1CgdtYXJrZXJzGAEgAygLMiQucml2ZXIuRnVsbHlSZWFkTWFya2Vycy5NYXJrZXJzRW50cnka6wEKB0NvbnRlbnQSEgoKY2hhbm5lbF9pZBgBIAEoCRIdChB0aHJlYWRfcGFyZW50X2lkGAIgASgJSACIAQESEAoIZXZlbnRfaWQYAyABKAkSEQoJZXZlbnRfbnVtGAQgASgDEhsKE2JlZ2luX3VucmVhZF93aW5kb3cYBSABKAMSGQoRZW5kX3VucmVhZF93aW5kb3cYBiABKAMSEQoJaXNfdW5yZWFkGAcgASgIEhYKDm1hcmtlZFJlYWRBdFRzGAggASgDEhAKCG1lbnRpb25zGAkgASgFQhMKEV90aHJlYWRfcGFyZW50X2lkGk8KDE1hcmtlcnNFbnRyeRILCgNrZXkYASABKAkSLgoFdmFsdWUYAiABKAsyHy5yaXZlci5GdWxseVJlYWRNYXJrZXJzLkNvbnRlbnQ6AjgBIhsKC1Nlc3Npb25LZXlzEgwKBGtleXMYASADKAkiegoVSHlicmlkR3JvdXBTZXNzaW9uS2V5EhIKCnNlc3Npb25faWQYASABKAwSEQoJc3RyZWFtX2lkGAIgASgMEgsKA2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDEhYKDm1pbmlibG9ja19oYXNoGAUgASgMIm0KCU1lZGlhSW5mbxIQCghtaW1ldHlwZRgBIAEoCRIRCglzaXplQnl0ZXMYAiABKAMSEwoLd2lkdGhQaXhlbHMYAyABKAUSFAoMaGVpZ2h0UGl4ZWxzGAQgASgFEhAKCGZpbGVuYW1lGAUgASgJIkAKDUVtYmVkZGVkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIPCgdjb250ZW50GAIgASgMIs4BCgxDaHVua2VkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIQCghzdHJlYW1JZBgCIAEoCRInCgl0aHVtYm5haWwYAyABKAsyFC5yaXZlci5FbWJlZGRlZE1lZGlhEiwKBmFlc2djbRhlIAEoCzIaLnJpdmVyLkNodW5rZWRNZWRpYS5BRVNHQ01IABonCgZBRVNHQ00SCgoCaXYYASABKAwSEQoJc2VjcmV0S2V5GAIgASgMQgwKCmVuY3J5cHRpb24iUAoHVXNlckJpbxILCgNiaW8YASABKAkSIAoTdXBkYXRlZF9hdF9lcG9jaF9tcxgCIAEoBEgAiAEBQhYKFF91cGRhdGVkX2F0X2Vwb2NoX21zIloKC0JlYXJlclRva2VuEhwKFGRlbGVnYXRlX3ByaXZhdGVfa2V5GAEgASgJEhQKDGRlbGVnYXRlX3NpZxgCIAEoDBIXCg9leHBpcnlfZXBvY2hfbXMYAyABKAMirgMKDkV4cG9ydGVkRGV2aWNlEhEKCXBpY2tsZUtleRgBIAEoCRIWCg5waWNrbGVkQWNjb3VudBgCIAEoCRI8ChBvdXRib3VuZFNlc3Npb25zGAMgAygLMiIucml2ZXIuRXhwb3J0ZWREZXZpY2UuR3JvdXBTZXNzaW9uEjsKD2luYm91bmRTZXNzaW9ucxgEIAMoCzIiLnJpdmVyLkV4cG9ydGVkRGV2aWNlLkdyb3VwU2Vzc2lvbhJFChNoeWJyaWRHcm91cFNlc3Npb25zGAUgAygLMigucml2ZXIuRXhwb3J0ZWREZXZpY2UuSHlicmlkR3JvdXBTZXNzaW9uGkYKDEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRIPCgdzZXNzaW9uGAMgASgJGmcKEkh5YnJpZEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRITCgtzZXNzaW9uX2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDIqEBCg5BcHBQcml2YXRlRGF0YRITCgtwcml2YXRlX2tleRgBIAEoCRIwChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIVLnJpdmVyLkV4cG9ydGVkRGV2aWNlEgsKA2VudhgDIAEoCRITCgthcHBfYWRkcmVzcxgEIAEoDBIXCgpqd3Rfc2VjcmV0GAUgASgMSACIAQFCDQoLX2p3dF9zZWNyZXQqswEKFkNvbnZlcnNhdGlvblNlZWRTdGF0dXMSKAokQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX1VOU1BFQ0lGSUVEEAASJgoiQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX05PVF9SRUFEWRABEiIKHkNPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19SRUFEWRACEiMKH0NPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19GQUlMRUQQAyqoAQoOUHJvcG9zYWxTdGF0dXMSHwobUFJPUE9TQUxfU1RBVFVTX1VOU1BFQ0lGSUVEEAASGwoXUFJPUE9TQUxfU1RBVFVTX1BFTkRJTkcQARIdChlQUk9QT1NBTF9TVEFUVVNfRlVMRklMTEVEEAISGgoWUFJPUE9TQUxfU1RBVFVTX0ZBSUxFRBADEh0KGVBST1BPU0FMX1NUQVRVU19USU1FRF9PVVQQBEI0WjJnaXRodWIuY29tL3Rvd25zLXByb3RvY29sL3Rvd25zL2NvcmUvbm9kZS9wcm90b2NvbGIGcHJvdG8z", [import_wkt.file_google_protobuf_empty]);
|
|
7568
7568
|
var ChannelMessageSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 0);
|
|
7569
7569
|
var ChannelMessage_Post_Content_InfoCard_Label_Badge_Variant;
|
|
7570
7570
|
(function(ChannelMessage_Post_Content_InfoCard_Label_Badge_Variant2) {
|
|
@@ -7588,7 +7588,6 @@ var ChunkedMediaSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_
|
|
|
7588
7588
|
var UserBioSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 15);
|
|
7589
7589
|
var BearerTokenSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 16);
|
|
7590
7590
|
var ExportedDeviceSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 17);
|
|
7591
|
-
var ExportedDevice_GroupSessionSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 17, 0);
|
|
7592
7591
|
var ExportedDevice_HybridGroupSessionSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 17, 1);
|
|
7593
7592
|
var AppPrivateDataSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 18);
|
|
7594
7593
|
var ConversationSeedStatus;
|
|
@@ -7610,7 +7609,7 @@ var ProposalStatus;
|
|
|
7610
7609
|
// ../proto/dist/gen/protocol_pb.js
|
|
7611
7610
|
var import_codegenv22 = require("@bufbuild/protobuf/codegenv2");
|
|
7612
7611
|
var import_wkt2 = require("@bufbuild/protobuf/wkt");
|
|
7613
|
-
var file_protocol = /* @__PURE__ */ (0, import_codegenv22.fileDesc)("Cg5wcm90b2NvbC5wcm90bxIFcml2ZXIiXgoJTWluaWJsb2NrEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEh8KBmhlYWRlchgCIAEoCzIPLnJpdmVyLkVudmVsb3BlEg8KB3BhcnRpYWwYAyABKAgiOgoIRW52ZWxvcGUSDAoEaGFzaBgBIAEoDBIRCglzaWduYXR1cmUYAiABKAwSDQoFZXZlbnQYAyABKAwi1wYKC1N0cmVhbUV2ZW50EhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIUCgxkZWxlZ2F0ZV9zaWcYAiABKAwSDAoEc2FsdBgDIAEoDBIgChNwcmV2X21pbmlibG9ja19oYXNoGAQgASgMSAGIAQESGwoTY3JlYXRlZF9hdF9lcG9jaF9tcxgFIAEoAxIgChhkZWxlZ2F0ZV9leHBpcnlfZXBvY2hfbXMYBiABKAMSGQoEdGFncxgHIAEoCzILLnJpdmVyLlRhZ3MSHwoScHJldl9taW5pYmxvY2tfbnVtGAggASgDSAKIAQESEQoJZXBoZW1lcmFsGAkgASgIEhsKE2NyZWF0ZWRfYXRfdGltZXpvbmUYCiABKAkSMgoQbWluaWJsb2NrX2hlYWRlchhkIAEoCzIWLnJpdmVyLk1pbmlibG9ja0hlYWRlckgAEi4KDm1lbWJlcl9wYXlsb2FkGGUgASgLMhQucml2ZXIuTWVtYmVyUGF5bG9hZEgAEioKDHVzZXJfcGF5bG9hZBhoIAEoCzISLnJpdmVyLlVzZXJQYXlsb2FkSAASOwoVdXNlcl9zZXR0aW5nc19wYXlsb2FkGGkgASgLMhoucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZEgAEjsKFXVzZXJfbWV0YWRhdGFfcGF5bG9hZBhqIAEoCzIaLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWRIABI1ChJ1c2VyX2luYm94X3BheWxvYWQYayABKAsyFy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkSAASLAoNbWVkaWFfcGF5bG9hZBhsIAEoCzITLnJpdmVyLk1lZGlhUGF5bG9hZEgAEjcKE2dkbV9jaGFubmVsX3BheWxvYWQYbiABKAsyGC5yaXZlci5HZG1DaGFubmVsUGF5bG9hZEgAQgkKB3BheWxvYWRCFgoUX3ByZXZfbWluaWJsb2NrX2hhc2hCFQoTX3ByZXZfbWluaWJsb2NrX251bUoECGYQZ0oECGcQaEoECG0QbkoECG8QcFINc3BhY2VfcGF5bG9hZFIPY2hhbm5lbF9wYXlsb2FkUhJkbV9jaGFubmVsX3BheWxvYWRSEG1ldGFkYXRhX3BheWxvYWQizwIKD01pbmlibG9ja0hlYWRlchIVCg1taW5pYmxvY2tfbnVtGAEgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYAiABKAwSLQoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgxldmVudF9oYXNoZXMYBCADKAwSGAoQZXZlbnRfbnVtX29mZnNldBgGIAEoAxIjChtwcmV2X3NuYXBzaG90X21pbmlibG9ja19udW0YByABKAMSGgoNc25hcHNob3RfaGFzaBgIIAEoDEgBiAEBEh0KFXJlamVjdGVkX2V2ZW50X2hhc2hlcxgJIAMoDBImCgRub25lGGQgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABCCQoHY29udGVudEIQCg5fc25hcHNob3RfaGFzaEoECAUQBiL1EgoNTWVtYmVyUGF5bG9hZBI1CgptZW1iZXJzaGlwGAEgASgLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5NZW1iZXJzaGlwSAASQAoQa2V5X3NvbGljaXRhdGlvbhgCIAEoCzIkLnJpdmVyLk1lbWJlclBheWxvYWQuS2V5U29saWNpdGF0aW9uSAASPgoPa2V5X2Z1bGZpbGxtZW50GAMgASgLMiMucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlGdWxmaWxsbWVudEgAEicKA3BpbhgIIAEoCzIYLnJpdmVyLk1lbWJlclBheWxvYWQuUGluSAASKwoFdW5waW4YCSABKAsyGi5yaXZlci5NZW1iZXJQYXlsb2FkLlVucGluSAASWQodbWVtYmVyX2Jsb2NrY2hhaW5fdHJhbnNhY3Rpb24YCyABKAsyMC5yaXZlci5NZW1iZXJQYXlsb2FkLk1lbWJlckJsb2NrY2hhaW5UcmFuc2FjdGlvbkgAEkgKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAwgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtSAAa9wgKCFNuYXBzaG90EjQKBmpvaW5lZBgBIAMoCzIkLnJpdmVyLk1lbWJlclBheWxvYWQuU25hcHNob3QuTWVtYmVyEi0KBHBpbnMYAiADKAsyHy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBwZWRQaW4SRgoUZW5jcnlwdGlvbl9hbGdvcml0aG0YBCABKAsyKC5yaXZlci5NZW1iZXJQYXlsb2FkLkVuY3J5cHRpb25BbGdvcml0aG0SNQoEdGlwcxgFIAMoCzInLnJpdmVyLk1lbWJlclBheWxvYWQuU25hcHNob3QuVGlwc0VudHJ5EkAKCnRpcHNfY291bnQYBiADKAsyLC5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNDb3VudEVudHJ5Gt8FCgZNZW1iZXISFAoMdXNlcl9hZGRyZXNzGAEgASgMEhUKDW1pbmlibG9ja19udW0YAiABKAMSEQoJZXZlbnRfbnVtGAMgASgDEjsKDXNvbGljaXRhdGlvbnMYBCADKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLktleVNvbGljaXRhdGlvbhJFCgl0aXBzX3NlbnQYCSADKAsyMi5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzU2VudEVudHJ5Ek0KDXRpcHNfcmVjZWl2ZWQYCiADKAsyNi5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzUmVjZWl2ZWRFbnRyeRJQCg90aXBzX3NlbnRfY291bnQYCyADKAsyNy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzU2VudENvdW50RW50cnkSWAoTdGlwc19yZWNlaXZlZF9jb3VudBgMIAMoCzI7LnJpdmVyLk1lbWJlclBheWxvYWQuU25hcHNob3QuTWVtYmVyLlRpcHNSZWNlaXZlZENvdW50RW50cnkSGAoLYXBwX2FkZHJlc3MYDSABKAxIAIgBARovCg1UaXBzU2VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaMwoRVGlwc1JlY2VpdmVkRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo0ChJUaXBzU2VudENvdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo4ChZUaXBzUmVjZWl2ZWRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAFCDgoMX2FwcF9hZGRyZXNzSgQIBRAGSgQIBhAHSgQIBxAISgQICBAJGisKCVRpcHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBGjAKDlRpcHNDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAFKBAgDEAQagwIKCk1lbWJlcnNoaXASHwoCb3AYASABKA4yEy5yaXZlci5NZW1iZXJzaGlwT3ASFAoMdXNlcl9hZGRyZXNzGAIgASgMEhkKEWluaXRpYXRvcl9hZGRyZXNzGAMgASgMEicKBnJlYXNvbhgFIAEoDjIXLnJpdmVyLk1lbWJlcnNoaXBSZWFzb24SGAoLYXBwX2FkZHJlc3MYBiABKAxIAIgBARI3Cg5pbnZpdGVfcGF5bG9hZBgHIAEoCzIaLnJpdmVyLkludml0ZVNpZ25lZFBheWxvYWRIAYgBAUIOCgxfYXBwX2FkZHJlc3NCEQoPX2ludml0ZV9wYXlsb2FkSgQIBBAFGmcKD0tleVNvbGljaXRhdGlvbhISCgpkZXZpY2Vfa2V5GAEgASgJEhQKDGZhbGxiYWNrX2tleRgCIAEoCRIVCg1pc19uZXdfZGV2aWNlGAMgASgIEhMKC3Nlc3Npb25faWRzGAQgAygJGk8KDktleUZ1bGZpbGxtZW50EhQKDHVzZXJfYWRkcmVzcxgBIAEoDBISCgpkZXZpY2Vfa2V5GAIgASgJEhMKC3Nlc3Npb25faWRzGAMgAygJGkwKClNuYXBwZWRQaW4SFwoPY3JlYXRvcl9hZGRyZXNzGAEgASgMEiUKA3BpbhgCIAEoCzIYLnJpdmVyLk1lbWJlclBheWxvYWQuUGluGjoKA1BpbhIQCghldmVudF9pZBgBIAEoDBIhCgVldmVudBgCIAEoCzISLnJpdmVyLlN0cmVhbUV2ZW50GhkKBVVucGluEhAKCGV2ZW50X2lkGAEgASgMGjsKE0VuY3J5cHRpb25BbGdvcml0aG0SFgoJYWxnb3JpdGhtGAEgASgJSACIAQFCDAoKX2FsZ29yaXRobRprChtNZW1iZXJCbG9ja2NoYWluVHJhbnNhY3Rpb24SMQoLdHJhbnNhY3Rpb24YASABKAsyHC5yaXZlci5CbG9ja2NoYWluVHJhbnNhY3Rpb24SGQoRZnJvbV91c2VyX2FkZHJlc3MYAiABKAxCCQoHY29udGVudEoECAQQBUoECAUQBkoECAYQB0oECAcQCEoECAoQCyLwBAoRR2RtQ2hhbm5lbFBheWxvYWQSNwoJaW5jZXB0aW9uGAEgASgLMiIucml2ZXIuR2RtQ2hhbm5lbFBheWxvYWQuSW5jZXB0aW9uSAASJwoHbWVzc2FnZRgCIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGFIABIyChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASJgoGY3VzdG9tGAQgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueUgAEiUKCXJlZGFjdGlvbhgFIAEoCzIQLnJpdmVyLlJlZGFjdGlvbkgAEjgKE2ludGVyYWN0aW9uX3JlcXVlc3QYBiABKAsyGS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RIABI6ChRpbnRlcmFjdGlvbl9yZXNwb25zZRgHIAEoCzIaLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VIABp6CghTbmFwc2hvdBI1CglpbmNlcHRpb24YASABKAsyIi5yaXZlci5HZG1DaGFubmVsUGF5bG9hZC5JbmNlcHRpb24SNwoSY2hhbm5lbF9wcm9wZXJ0aWVzGAIgASgLMhsucml2ZXIuV3JhcHBlZEVuY3J5cHRlZERhdGEaeQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIwChJjaGFubmVsX3Byb3BlcnRpZXMYAiABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhEicKCHNldHRpbmdzGAMgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3NCCQoHY29udGVudCKFDQoLVXNlclBheWxvYWQSMQoJaW5jZXB0aW9uGAEgASgLMhwucml2ZXIuVXNlclBheWxvYWQuSW5jZXB0aW9uSAASPAoPdXNlcl9tZW1iZXJzaGlwGAIgASgLMiEucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBIABJJChZ1c2VyX21lbWJlcnNoaXBfYWN0aW9uGAMgASgLMicucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBBY3Rpb25IABI+ChZibG9ja2NoYWluX3RyYW5zYWN0aW9uGAQgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uSAASWwofcmVjZWl2ZWRfYmxvY2tjaGFpbl90cmFuc2FjdGlvbhgFIAEoCzIwLnJpdmVyLlVzZXJQYXlsb2FkLlJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uSAAa5wQKCFNuYXBzaG90Ei8KCWluY2VwdGlvbhgBIAEoCzIcLnJpdmVyLlVzZXJQYXlsb2FkLkluY2VwdGlvbhI2CgttZW1iZXJzaGlwcxgCIAMoCzIhLnJpdmVyLlVzZXJQYXlsb2FkLlVzZXJNZW1iZXJzaGlwEjwKCXRpcHNfc2VudBgDIAMoCzIpLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50RW50cnkSRAoNdGlwc19yZWNlaXZlZBgEIAMoCzItLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNSZWNlaXZlZEVudHJ5EkcKD3RpcHNfc2VudF9jb3VudBgFIAMoCzIuLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50Q291bnRFbnRyeRJPChN0aXBzX3JlY2VpdmVkX2NvdW50GAYgAygLMjIucml2ZXIuVXNlclBheWxvYWQuU25hcHNob3QuVGlwc1JlY2VpdmVkQ291bnRFbnRyeRovCg1UaXBzU2VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaMwoRVGlwc1JlY2VpdmVkRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo0ChJUaXBzU2VudENvdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo4ChZUaXBzUmVjZWl2ZWRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEapwEKCUluY2VwdGlvbhIRCglzdHJlYW1faWQYASABKAwSJwoIc2V0dGluZ3MYAiABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIYCgthcHBfYWRkcmVzcxgDIAEoDEgAiAEBEh4KEWFwcF9vd25lcl9hZGRyZXNzGAQgASgMSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhQKEl9hcHBfb3duZXJfYWRkcmVzcxrxAQoOVXNlck1lbWJlcnNoaXASEQoJc3RyZWFtX2lkGAEgASgMEh8KAm9wGAIgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKB2ludml0ZXIYAyABKAxIAIgBARIsCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uSAGIAQESNwoOaW52aXRlX3BheWxvYWQYBiABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAKIAQFCCgoIX2ludml0ZXJCCQoHX3JlYXNvbkIRCg9faW52aXRlX3BheWxvYWRKBAgEEAUamgEKFFVzZXJNZW1iZXJzaGlwQWN0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIPCgd1c2VyX2lkGAIgASgMEh8KAm9wGAMgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEiwKBnJlYXNvbhgFIAEoDjIXLnJpdmVyLk1lbWJlcnNoaXBSZWFzb25IAIgBAUIJCgdfcmVhc29uSgQIBBAFGm0KHVJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMQgkKB2NvbnRlbnQi2gcKEFVzZXJJbmJveFBheWxvYWQSNgoJaW5jZXB0aW9uGAEgASgLMiEucml2ZXIuVXNlckluYm94UGF5bG9hZC5JbmNlcHRpb25IABIqCgNhY2sYAiABKAsyGy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkFja0gAElQKGWdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnMYAyABKAsyLy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkdyb3VwRW5jcnlwdGlvblNlc3Npb25zSAAargIKCFNuYXBzaG90EjQKCWluY2VwdGlvbhgBIAEoCzIhLnJpdmVyLlVzZXJJbmJveFBheWxvYWQuSW5jZXB0aW9uEksKDmRldmljZV9zdW1tYXJ5GAIgAygLMjMucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5RW50cnkaOQoNRGV2aWNlU3VtbWFyeRITCgtsb3dlcl9ib3VuZBgBIAEoAxITCgt1cHBlcl9ib3VuZBgCIAEoAxpkChJEZXZpY2VTdW1tYXJ5RW50cnkSCwoDa2V5GAEgASgJEj0KBXZhbHVlGAIgASgLMi4ucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5OgI4ARqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGvMBChdHcm91cEVuY3J5cHRpb25TZXNzaW9ucxIRCglzdHJlYW1faWQYASABKAwSEgoKc2VuZGVyX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRJVCgtjaXBoZXJ0ZXh0cxgEIAMoCzJALnJpdmVyLlVzZXJJbmJveFBheWxvYWQuR3JvdXBFbmNyeXB0aW9uU2Vzc2lvbnMuQ2lwaGVydGV4dHNFbnRyeRIRCglhbGdvcml0aG0YBSABKAkaMgoQQ2lwaGVydGV4dHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGjAKA0FjaxISCgpkZXZpY2Vfa2V5GAEgASgJEhUKDW1pbmlibG9ja19udW0YAiABKANCCQoHY29udGVudCLBBwoTVXNlclNldHRpbmdzUGF5bG9hZBI5CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbkgAEkkKEmZ1bGx5X3JlYWRfbWFya2VycxgCIAEoCzIrLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuRnVsbHlSZWFkTWFya2Vyc0gAEjoKCnVzZXJfYmxvY2sYAyABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLlVzZXJCbG9ja0gAGuwCCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbhJHChJmdWxseV9yZWFkX21hcmtlcnMYAiADKAsyKy5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkZ1bGx5UmVhZE1hcmtlcnMSSAoQdXNlcl9ibG9ja3NfbGlzdBgDIAMoCzIuLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2NrcxqTAQoKVXNlckJsb2NrcxIPCgd1c2VyX2lkGAEgASgMEkQKBmJsb2NrcxgCIAMoCzI0LnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2Nrcy5CbG9jaxouCgVCbG9jaxISCgppc19ibG9ja2VkGAEgASgIEhEKCWV2ZW50X251bRgCIAEoAxqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGh0KDU1hcmtlckNvbnRlbnQSDAoEZGF0YRgBIAEoCRpgChBGdWxseVJlYWRNYXJrZXJzEhEKCXN0cmVhbV9pZBgBIAEoDBI5Cgdjb250ZW50GAIgASgLMigucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5NYXJrZXJDb250ZW50GkMKCVVzZXJCbG9jaxIPCgd1c2VyX2lkGAEgASgMEhIKCmlzX2Jsb2NrZWQYAiABKAgSEQoJZXZlbnRfbnVtGAMgASgDQgkKB2NvbnRlbnQizgUKE1VzZXJNZXRhZGF0YVBheWxvYWQSOQoJaW5jZXB0aW9uGAEgASgLMiQucml2ZXIuVXNlck1ldGFkYXRhUGF5bG9hZC5JbmNlcHRpb25IABJIChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZUgAEi0KDXByb2ZpbGVfaW1hZ2UYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASIwoDYmlvGAQgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YUgAGuoBCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkluY2VwdGlvbhJHChJlbmNyeXB0aW9uX2RldmljZXMYAiADKAsyKy5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkVuY3J5cHRpb25EZXZpY2USMgoNcHJvZmlsZV9pbWFnZRgDIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhEigKA2JpbxgEIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhGqcBCglJbmNlcHRpb24SEQoJc3RyZWFtX2lkGAEgASgMEicKCHNldHRpbmdzGAIgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3MSGAoLYXBwX2FkZHJlc3MYAyABKAxIAIgBARIeChFhcHBfb3duZXJfYWRkcmVzcxgEIAEoDEgBiAEBQg4KDF9hcHBfYWRkcmVzc0IUChJfYXBwX293bmVyX2FkZHJlc3MaPAoQRW5jcnlwdGlvbkRldmljZRISCgpkZXZpY2Vfa2V5GAEgASgJEhQKDGZhbGxiYWNrX2tleRgCIAEoCUIJCgdjb250ZW50IoQECgxNZWRpYVBheWxvYWQSMgoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbkgAEioKBWNodW5rGAIgASgLMhkucml2ZXIuTWVkaWFQYXlsb2FkLkNodW5rSAAaPAoIU25hcHNob3QSMAoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbhqGAgoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIXCgpjaGFubmVsX2lkGAIgASgMSACIAQESEwoLY2h1bmtfY291bnQYAyABKAUSJwoIc2V0dGluZ3MYBCABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIVCghzcGFjZV9pZBgFIAEoDEgBiAEBEhQKB3VzZXJfaWQYBiABKAxIAogBARIhChRwZXJfY2h1bmtfZW5jcnlwdGlvbhgHIAEoCEgDiAEBQg0KC19jaGFubmVsX2lkQgsKCV9zcGFjZV9pZEIKCghfdXNlcl9pZEIXChVfcGVyX2NodW5rX2VuY3J5cHRpb24aQgoFQ2h1bmsSDAoEZGF0YRgBIAEoDBITCgtjaHVua19pbmRleBgCIAEoBRIPCgJpdhgDIAEoDEgAiAEBQgUKA19pdkIJCgdjb250ZW50IrcECghTbmFwc2hvdBIuCgdtZW1iZXJzGAEgASgLMh0ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdBIYChBzbmFwc2hvdF92ZXJzaW9uGAIgASgFEjMKDHVzZXJfY29udGVudBhnIAEoCzIbLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90SAASRAoVdXNlcl9zZXR0aW5nc19jb250ZW50GGggASgLMiMucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5TbmFwc2hvdEgAEkQKFXVzZXJfbWV0YWRhdGFfY29udGVudBhpIAEoCzIjLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuU25hcHNob3RIABI1Cg1tZWRpYV9jb250ZW50GGogASgLMhwucml2ZXIuTWVkaWFQYXlsb2FkLlNuYXBzaG90SAASQAoTZ2RtX2NoYW5uZWxfY29udGVudBhsIAEoCzIhLnJpdmVyLkdkbUNoYW5uZWxQYXlsb2FkLlNuYXBzaG90SAASPgoSdXNlcl9pbmJveF9jb250ZW50GG0gASgLMiAucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdEgAQgkKB2NvbnRlbnRKBAhlEGZKBAhmEGdKBAhrEGxKBAhuEG9SDXNwYWNlX2NvbnRlbnRSD2NoYW5uZWxfY29udGVudFISZG1fY2hhbm5lbF9jb250ZW50UhBtZXRhZGF0YV9jb250ZW50IrcHChVCbG9ja2NoYWluVHJhbnNhY3Rpb24SNAoHcmVjZWlwdBgBIAEoCzIjLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQSQQoOc29sYW5hX3JlY2VpcHQYAiABKAsyKS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Ei8KA3RpcBhlIAEoCzIgLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXBIABJECg50b2tlbl90cmFuc2ZlchhmIAEoCzIqLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5Ub2tlblRyYW5zZmVySAASQAoMc3BhY2VfcmV2aWV3GGcgASgLMigucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3SAAa7QEKA1RpcBI1CgVldmVudBgBIAEoCzImLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXAuRXZlbnQSFQoNdG9Vc2VyQWRkcmVzcxgCIAEoDBqXAQoFRXZlbnQSFQoIdG9rZW5faWQYASABKARIAIgBARIQCghjdXJyZW5jeRgCIAEoDBIOCgZzZW5kZXIYAyABKAwSEAoIcmVjZWl2ZXIYBCABKAwSDgoGYW1vdW50GAUgASgEEhIKCm1lc3NhZ2VfaWQYBiABKAwSEgoKY2hhbm5lbF9pZBgHIAEoDEILCglfdG9rZW5faWQaeAoNVG9rZW5UcmFuc2ZlchIPCgdhZGRyZXNzGAEgASgMEg4KBmFtb3VudBgCIAEoCRIOCgZzZW5kZXIYAyABKAwSEgoKbWVzc2FnZV9pZBgEIAEoDBISCgpjaGFubmVsX2lkGAUgASgMEg4KBmlzX2J1eRgGIAEoCBr2AQoLU3BhY2VSZXZpZXcSFQoNc3BhY2VfYWRkcmVzcxgBIAEoDBI/CgZhY3Rpb24YAiABKA4yLy5yaXZlci5CbG9ja2NoYWluVHJhbnNhY3Rpb24uU3BhY2VSZXZpZXcuQWN0aW9uEj0KBWV2ZW50GAMgASgLMi4ucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3LkV2ZW50GiUKBUV2ZW50EgwKBHVzZXIYASABKAwSDgoGcmF0aW5nGAIgASgFIikKBkFjdGlvbhIHCgNBZGQQABIKCgZVcGRhdGUQARIKCgZEZWxldGUQAkIJCgdjb250ZW50IucBChxCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EhAKCGNoYWluX2lkGAEgASgEEhgKEHRyYW5zYWN0aW9uX2hhc2gYAiABKAwSFAoMYmxvY2tfbnVtYmVyGAMgASgEEgoKAnRvGAQgASgMEgwKBGZyb20YBSABKAwSNQoEbG9ncxgGIAMoCzInLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQuTG9nGjQKA0xvZxIPCgdhZGRyZXNzGAEgASgMEg4KBnRvcGljcxgCIAMoDBIMCgRkYXRhGAMgASgMItcECiJTb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EgwKBHNsb3QYASABKAQSSgoLdHJhbnNhY3Rpb24YAiABKAsyNS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0LlRyYW5zYWN0aW9uEjwKBG1ldGEYAyABKAsyLi5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEaIQoLVHJhbnNhY3Rpb24SEgoKc2lnbmF0dXJlcxgBIAMoCRr1AgoETWV0YRJXChJwcmVfdG9rZW5fYmFsYW5jZXMYASADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlElgKE3Bvc3RfdG9rZW5fYmFsYW5jZXMYAiADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlGrkBCgxUb2tlbkJhbGFuY2USDAoEbWludBgBIAEoCRINCgVvd25lchgCIAEoCRJZCgZhbW91bnQYAyABKAsySS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlLlVJVG9rZW5BbW91bnQaMQoNVUlUb2tlbkFtb3VudBIOCgZhbW91bnQYASABKAkSEAoIZGVjaW1hbHMYAiABKA0iPgoIRXZlbnRSZWYSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGhhc2gYAiABKAwSEQoJc2lnbmF0dXJlGAMgASgMIkoKDlN0cmVhbVNldHRpbmdzEiIKGmRpc2FibGVfbWluaWJsb2NrX2NyZWF0aW9uGAEgASgIEhQKDGxpZ2h0X3N0cmVhbRgCIAEoCCLQAgoNRW5jcnlwdGVkRGF0YRISCgpjaXBoZXJ0ZXh0GAEgASgJEhEKCWFsZ29yaXRobRgCIAEoCRISCgpzZW5kZXJfa2V5GAMgASgJEhIKCnNlc3Npb25faWQYBCABKAkSFQoIY2hlY2tzdW0YBSABKAlIAIgBARIZCgxyZWZfZXZlbnRfaWQYBiABKAlIAYgBARIYChBjaXBoZXJ0ZXh0X2J5dGVzGAggASgMEhAKCGl2X2J5dGVzGAkgASgMEhgKEHNlc3Npb25faWRfYnl0ZXMYCiABKAwSLAoHdmVyc2lvbhgLIAEoDjIbLnJpdmVyLkVuY3J5cHRlZERhdGFWZXJzaW9uEhcKCmRldmljZV9rZXkYDCABKAlIAogBAUILCglfY2hlY2tzdW1CDwoNX3JlZl9ldmVudF9pZEINCgtfZGV2aWNlX2tleUoECAcQCCJhChRXcmFwcGVkRW5jcnlwdGVkRGF0YRIiCgRkYXRhGAEgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIRCglldmVudF9udW0YAiABKAMSEgoKZXZlbnRfaGFzaBgDIAEoDCJuCgpTeW5jQ29va2llEhQKDG5vZGVfYWRkcmVzcxgBIAEoDBIRCglzdHJlYW1faWQYAiABKAwSFAoMbWluaXBvb2xfZ2VuGAMgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYBSABKAxKBAgEEAUiXQoOQ3JlYXRpb25Db29raWUSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW1pbmlibG9ja19udW0YAyABKAMSGwoTcHJldl9taW5pYmxvY2tfaGFzaBgEIAEoDEoECAIQAyLwAQoPU3RyZWFtQW5kQ29va2llEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEisKEG5leHRfc3luY19jb29raWUYAiABKAsyES5yaXZlci5TeW5jQ29va2llEiQKCm1pbmlibG9ja3MYAyADKAsyEC5yaXZlci5NaW5pYmxvY2sSEgoKc3luY19yZXNldBgEIAEoCBImCghzbmFwc2hvdBgFIAEoCzIPLnJpdmVyLkVudmVsb3BlSACIAQESIAoYc25hcHNob3RfbWluaWJsb2NrX2luZGV4GAYgASgDQgsKCV9zbmFwc2hvdCIrCghNaW5pcG9vbBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZSKjAgoEVGFncxI/ChhtZXNzYWdlX2ludGVyYWN0aW9uX3R5cGUYASABKA4yHS5yaXZlci5NZXNzYWdlSW50ZXJhY3Rpb25UeXBlEjQKE2dyb3VwX21lbnRpb25fdHlwZXMYAiADKA4yFy5yaXZlci5Hcm91cE1lbnRpb25UeXBlEiAKGG1lbnRpb25lZF91c2VyX2FkZHJlc3NlcxgDIAMoDBIkChxwYXJ0aWNpcGF0aW5nX3VzZXJfYWRkcmVzc2VzGAQgAygMEhYKCXRocmVhZF9pZBgFIAEoDEgAiAEBEh8KEmFwcF9jbGllbnRfYWRkcmVzcxgGIAEoDEgBiAEBQgwKCl90aHJlYWRfaWRCFQoTX2FwcF9jbGllbnRfYWRkcmVzcyIcCgtJbmZvUmVxdWVzdBINCgVkZWJ1ZxgBIAMoCSJhCgxJbmZvUmVzcG9uc2USEAoIZ3JhZmZpdGkYASABKAkSLgoKc3RhcnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHdmVyc2lvbhgDIAEoCSI+ChJHZXRTdHJlYW1FeFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW9taXRfc25hcHNob3QYAiABKAgingEKE0dldFN0cmVhbUV4UmVzcG9uc2USJQoJbWluaWJsb2NrGAEgASgLMhAucml2ZXIuTWluaWJsb2NrSAASIwoIbWluaXBvb2wYAiABKAsyDy5yaXZlci5NaW5pcG9vbEgAEiYKCHNuYXBzaG90GAMgASgLMg8ucml2ZXIuRW52ZWxvcGVIAYgBAUIGCgRkYXRhQgsKCV9zbmFwc2hvdCK2AQoTQ3JlYXRlU3RyZWFtUmVxdWVzdBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZRIRCglzdHJlYW1faWQYAiABKAwSOgoIbWV0YWRhdGEYAyADKAsyKC5yaXZlci5DcmVhdGVTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBImcKFENyZWF0ZVN0cmVhbVJlc3BvbnNlEiYKBnN0cmVhbRgBIAEoCzIWLnJpdmVyLlN0cmVhbUFuZENvb2tpZRInCg5kZXJpdmVkX2V2ZW50cxgCIAMoCzIPLnJpdmVyLkV2ZW50UmVmIsABChhDcmVhdGVNZWRpYVN0cmVhbVJlcXVlc3QSHwoGZXZlbnRzGAEgAygLMg8ucml2ZXIuRW52ZWxvcGUSEQoJc3RyZWFtX2lkGAIgASgMEj8KCG1ldGFkYXRhGAMgAygLMi0ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBIlAKGUNyZWF0ZU1lZGlhU3RyZWFtUmVzcG9uc2USMwoUbmV4dF9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSKHAQoQR2V0U3RyZWFtUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSEAoIb3B0aW9uYWwYAiABKAgSJgoLc3luY19jb29raWUYAyABKAsyES5yaXZlci5TeW5jQ29va2llEiYKHm51bWJlcl9vZl9wcmVjZWRpbmdfbWluaWJsb2NrcxgEIAEoAyI7ChFHZXRTdHJlYW1SZXNwb25zZRImCgZzdHJlYW0YASABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUiLwoLRXZlbnRGaWx0ZXISDwoHcGF5bG9hZBgBIAEoCRIPCgdjb250ZW50GAIgASgJIp0BChRHZXRNaW5pYmxvY2tzUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSFgoOZnJvbV9pbmNsdXNpdmUYAiABKAMSFAoMdG9fZXhjbHVzaXZlGAMgASgDEhYKDm9taXRfc25hcHNob3RzGAQgASgIEiwKEGV4Y2x1c2lvbl9maWx0ZXIYBSADKAsyEi5yaXZlci5FdmVudEZpbHRlciKRAgoVR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEiQKCm1pbmlibG9ja3MYASADKAsyEC5yaXZlci5NaW5pYmxvY2sSEAoIdGVybWludXMYAiABKAgSFgoOZnJvbV9pbmNsdXNpdmUYAyABKAMSDQoFbGltaXQYBCABKAMSFgoOb21pdF9zbmFwc2hvdHMYBSABKAgSPgoJc25hcHNob3RzGAYgAygLMisucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlLlNuYXBzaG90c0VudHJ5GkEKDlNuYXBzaG90c0VudHJ5EgsKA2tleRgBIAEoAxIeCgV2YWx1ZRgCIAEoCzIPLnJpdmVyLkVudmVsb3BlOgI4ASIwChtHZXRMYXN0TWluaWJsb2NrSGFzaFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMIosBChxHZXRMYXN0TWluaWJsb2NrSGFzaFJlc3BvbnNlEgwKBGhhc2gYASABKAwSFQoNbWluaWJsb2NrX251bRgCIAEoAxJGChRlbmNyeXB0aW9uX2FsZ29yaXRobRgDIAEoCzIoLnJpdmVyLk1lbWJlclBheWxvYWQuRW5jcnlwdGlvbkFsZ29yaXRobSJKCg9BZGRFdmVudFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEh4KBWV2ZW50GAIgASgLMg8ucml2ZXIuRW52ZWxvcGVKBAgDEAQiPQoQQWRkRXZlbnRSZXNwb25zZRIjCgpuZXdfZXZlbnRzGAIgAygLMg8ucml2ZXIuRXZlbnRSZWZKBAgBEAIidAoUQWRkTWVkaWFFdmVudFJlcXVlc3QSHgoFZXZlbnQYASABKAsyDy5yaXZlci5FbnZlbG9wZRIuCg9jcmVhdGlvbl9jb29raWUYAiABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZRIMCgRsYXN0GAMgASgIIkcKFUFkZE1lZGlhRXZlbnRSZXNwb25zZRIuCg9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSI5ChJTeW5jU3RyZWFtc1JlcXVlc3QSIwoIc3luY19wb3MYASADKAsyES5yaXZlci5TeW5jQ29va2llIq4BChNTeW5jU3RyZWFtc1Jlc3BvbnNlEg8KB3N5bmNfaWQYASABKAkSHgoHc3luY19vcBgCIAEoDjINLnJpdmVyLlN5bmNPcBImCgZzdHJlYW0YAyABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUSEgoKcG9uZ19ub25jZRgEIAEoCRIRCglzdHJlYW1faWQYBSABKAwSFwoPdGFyZ2V0X3N5bmNfaWRzGAYgAygJIuIBChFNb2RpZnlTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJEiYKC2FkZF9zdHJlYW1zGAIgAygLMhEucml2ZXIuU3luY0Nvb2tpZRIWCg5yZW1vdmVfc3RyZWFtcxgDIAMoDBI7ChBiYWNrZmlsbF9zdHJlYW1zGAQgASgLMiEucml2ZXIuTW9kaWZ5U3luY1JlcXVlc3QuQmFja2ZpbGwaPwoIQmFja2ZpbGwSIgoHc3RyZWFtcxgBIAMoCzIRLnJpdmVyLlN5bmNDb29raWUSDwoHc3luY19pZBgCIAEoCSJcChJTeW5jU3RyZWFtT3BTdGF0dXMSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGNvZGUYAiABKAUSDwoHbWVzc2FnZRgDIAEoCRIUCgxub2RlX2FkZHJlc3MYBCABKAwimAEKEk1vZGlmeVN5bmNSZXNwb25zZRInCgRhZGRzGAEgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEisKCHJlbW92YWxzGAIgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEiwKCWJhY2tmaWxscxgDIAMoCzIZLnJpdmVyLlN5bmNTdHJlYW1PcFN0YXR1cyIkChFDYW5jZWxTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJIhQKEkNhbmNlbFN5bmNSZXNwb25zZSIxCg9QaW5nU3luY1JlcXVlc3QSDwoHc3luY19pZBgBIAEoCRINCgVub25jZRgCIAEoCSISChBQaW5nU3luY1Jlc3BvbnNlIh0KCVJlZGFjdGlvbhIQCghldmVudF9pZBgBIAEoDCLyFwoZSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZBJGChFlbmNyeXB0aW9uX2RldmljZRgBIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZRI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEjUKBGZvcm0YZiABKAsyJS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLkZvcm1IABJDCgt0cmFuc2FjdGlvbhhnIAEoCzIsLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb25IABJACgphZGRfbWVtYmVyGGggASgLMioucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5BZGRNZW1iZXJIABJICg5wcmVwYXJlZF9jYWxscxhpIAEoCzIuLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxsc0gAEjcKBWJhdGNoGGogASgLMiYucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5CYXRjaEgAGu8DCglTaWduYXR1cmUSCgoCaWQYASABKAkSDAoEZGF0YRgCIAEoCRIQCghjaGFpbl9pZBgDIAEoCRIaCg1zaWduZXJfd2FsbGV0GAQgASgJSACIAQESRgoEdHlwZRgFIAEoDjI4LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuU2lnbmF0dXJlLlNpZ25hdHVyZVR5cGUSEgoFdGl0bGUYBiABKAlIAYgBARIVCghzdWJ0aXRsZRgHIAEoCUgCiAEBEmEKFHNpZ25hdHVyZV92YWxpZGF0aW9uGAggASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5TaWduYXR1cmUuU2lnbmF0dXJlVmFsaWRhdGlvbkgDiAEBIjIKDVNpZ25hdHVyZVR5cGUSEQoNUEVSU09OQUxfU0lHThAAEg4KClRZUEVEX0RBVEEQASJOChNTaWduYXR1cmVWYWxpZGF0aW9uEg8KC1VOU1BFQ0lGSUVEEAASDwoLRUlQNzEyX09OTFkQARIVChFFSVA3MTJfT1JfRUlQMTI3MRACQhAKDl9zaWduZXJfd2FsbGV0QggKBl90aXRsZUILCglfc3VidGl0bGVCFwoVX3NpZ25hdHVyZV92YWxpZGF0aW9uGpYDCgRGb3JtEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARJDCgpjb21wb25lbnRzGAQgAygLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5Gb3JtLkNvbXBvbmVudBr6AQoJQ29tcG9uZW50EgoKAmlkGAEgASgJEkgKBmJ1dHRvbhhlIAEoCzI2LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASTwoKdGV4dF9pbnB1dBhmIAEoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuVGV4dElucHV0SAAaFwoGQnV0dG9uEg0KBWxhYmVsGAEgASgJGiAKCVRleHRJbnB1dBITCgtwbGFjZWhvbGRlchgBIAEoCUILCgljb21wb25lbnRCCAoGX3RpdGxlQgsKCV9zdWJ0aXRsZRr/AgoLVHJhbnNhY3Rpb24SCgoCaWQYASABKAkSEgoFdGl0bGUYAiABKAlIAYgBARIVCghzdWJ0aXRsZRgDIAEoCUgCiAEBEkQKA2V2bRhlIAEoCzI1LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb24uRVZNQmF0Y2hIABo1CgpFVk1Db250ZW50EgoKAnRvGAEgASgJEg0KBXZhbHVlGAIgASgJEgwKBGRhdGEYAyABKAkamQEKCEVWTUJhdGNoEhAKCGNoYWluX2lkGAEgASgJEhoKDXNpZ25lcl93YWxsZXQYAiABKAlIAIgBARJNCgx0cmFuc2FjdGlvbnMYAyADKAsyNy5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlRyYW5zYWN0aW9uLkVWTUNvbnRlbnRCEAoOX3NpZ25lcl93YWxsZXRCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlGkoKCUFkZE1lbWJlchIKCgJpZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgMEhQKB21lc3NhZ2UYAyABKAlIAIgBAUIKCghfbWVzc2FnZRrzBgoNUHJlcGFyZWRDYWxscxIKCgJpZBgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRISCgp0eXBlZF9kYXRhGAMgASgJEg8KB2NvbnRleHQYBCABKAkSEgoFdGl0bGUYBSABKAlIAIgBARIVCghzdWJ0aXRsZRgGIAEoCUgBiAEBElMKDmF1dGhvcml6ZV9rZXlzGAcgAygLMjsucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLkF1dGhvcml6ZUtleRrmAwoKUGVybWlzc2lvbhJMCgR0eXBlGAEgASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uVHlwZRJOCgRjYWxsGAIgASgLMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uQ2FsbEgAElAKBXNwZW5kGAMgASgLMj8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uU3BlbmRIABpCCgRDYWxsEg8KAnRvGAEgASgJSACIAQESFQoIc2VsZWN0b3IYAiABKAlIAYgBAUIFCgNfdG9CCwoJX3NlbGVjdG9yGmMKBVNwZW5kEhIKBXRva2VuGAEgASgJSACIAQESEgoFbGltaXQYAiABKAlIAYgBARITCgZwZXJpb2QYAyABKAlIAogBAUIICgZfdG9rZW5CCAoGX2xpbWl0QgkKB19wZXJpb2QiMQoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASCAoEQ0FMTBABEgkKBVNQRU5EEAJCDAoKcGVybWlzc2lvbhqeAQoMQXV0aG9yaXplS2V5Eg4KBmV4cGlyeRgBIAEoCRIMCgR0eXBlGAIgASgJEgwKBHJvbGUYAyABKAkSEgoKcHVibGljX2tleRgEIAEoCRJOCgtwZXJtaXNzaW9ucxgFIAMoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxscy5QZXJtaXNzaW9uQggKBl90aXRsZUILCglfc3VidGl0bGUasAIKBUJhdGNoEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARI6CgVzdGVwcxgEIAMoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuQmF0Y2guU3RlcBqcAQoEU3RlcBI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEkgKDnByZXBhcmVkX2NhbGxzGGkgASgLMi4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzSABCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlQgkKB2NvbnRlbnQilAEKEkludGVyYWN0aW9uUmVxdWVzdBIWCglyZWNpcGllbnQYASABKAxIAIgBARIsCg5lbmNyeXB0ZWRfZGF0YRgDIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGESFgoJdGhyZWFkX2lkGAQgASgMSAGIAQFCDAoKX3JlY2lwaWVudEIMCgpfdGhyZWFkX2lkSgQIAhADInwKE0ludGVyYWN0aW9uUmVzcG9uc2USEQoJcmVjaXBpZW50GAEgASgMEiwKDmVuY3J5cHRlZF9kYXRhGAIgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIWCgl0aHJlYWRfaWQYAyABKAxIAIgBAUIMCgpfdGhyZWFkX2lkIugKChpJbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZBIMCgRzYWx0GAEgASgMEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEjYKBGZvcm0YZiABKAsyJi5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5Gb3JtSAASRAoLdHJhbnNhY3Rpb24YZyABKAsyLS5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5UcmFuc2FjdGlvbkgAEkEKCmFkZF9tZW1iZXIYaCABKAsyKy5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5BZGRNZW1iZXJIABJJCg5wcmVwYXJlZF9jYWxscxhpIAEoCzIvLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlByZXBhcmVkQ2FsbHNIABI4CgViYXRjaBhqIAEoCzInLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoSAAaMgoJU2lnbmF0dXJlEhIKCnJlcXVlc3RfaWQYASABKAkSEQoJc2lnbmF0dXJlGAIgASgJGsoCCgRGb3JtEhIKCnJlcXVlc3RfaWQYASABKAkSRAoKY29tcG9uZW50cxgCIAMoCzIwLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50GucBCglDb21wb25lbnQSCgoCaWQYASABKAkSSQoGYnV0dG9uGGUgASgLMjcucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASUAoKdGV4dF9pbnB1dBhmIAEoCzI6LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50LlRleHRJbnB1dEgAGggKBkJ1dHRvbhoaCglUZXh0SW5wdXQSDQoFdmFsdWUYASABKAlCCwoJY29tcG9uZW50GjIKC1RyYW5zYWN0aW9uEhIKCnJlcXVlc3RfaWQYASABKAkSDwoHdHhfaGFzaBgCIAEoCRoxCglBZGRNZW1iZXISEgoKcmVxdWVzdF9pZBgBIAEoCRIQCghhY2NlcHRlZBgCIAEoCBq0AQoNUHJlcGFyZWRDYWxscxISCgpyZXF1ZXN0X2lkGAEgASgJEhEKCXNpZ25hdHVyZRgCIAEoCRIeChFwYXltZW50X3NpZ25hdHVyZRgDIAEoCUgAiAEBEhQKB2NvbnRleHQYBCABKAlIAYgBARIWCglidW5kbGVfaWQYBSABKAlIAogBAUIUChJfcGF5bWVudF9zaWduYXR1cmVCCgoIX2NvbnRleHRCDAoKX2J1bmRsZV9pZBqJAgoFQmF0Y2gSEgoKcmVxdWVzdF9pZBgBIAEoCRJDCgVzdGVwcxgCIAMoCzI0LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoLlN0ZXBSZXNwb25zZRqmAQoMU3RlcFJlc3BvbnNlEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEkkKDnByZXBhcmVkX2NhbGxzGGkgASgLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuUHJlcGFyZWRDYWxsc0gAQgkKB2NvbnRlbnRCCQoHY29udGVudCKLAQoTSW52aXRlU2lnbmVkUGF5bG9hZBIPCgd1c2VyX2lkGAEgASgMEhEKCXN0cmVhbV9pZBgCIAEoDBIUCgx0aW1lc3RhbXBfbXMYAyABKAMSDAoEc2FsdBgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwSGQoRc2lnbmVyX3B1YmxpY19rZXkYBiABKAwqawoGU3luY09wEhQKEFNZTkNfVU5TUEVDSUZJRUQQABIMCghTWU5DX05FVxABEg4KClNZTkNfQ0xPU0UQAhIPCgtTWU5DX1VQREFURRADEg0KCVNZTkNfUE9ORxAEEg0KCVNZTkNfRE9XThAFKkwKDE1lbWJlcnNoaXBPcBISCg5TT19VTlNQRUNJRklFRBAAEg0KCVNPX0lOVklURRABEgsKB1NPX0pPSU4QAhIMCghTT19MRUFWRRADKkQKEE1lbWJlcnNoaXBSZWFzb24SCwoHTVJfTk9ORRAAEhMKD01SX05PVF9FTlRJVExFRBABEg4KCk1SX0VYUElSRUQQAipPCglDaGFubmVsT3ASEgoOQ09fVU5TUEVDSUZJRUQQABIOCgpDT19DUkVBVEVEEAESDgoKQ09fREVMRVRFRBACEg4KCkNPX1VQREFURUQQBCrtAgoWTWVzc2FnZUludGVyYWN0aW9uVHlwZRIoCiRNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVQTFkQARIlCiFNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVBQ1RJT04QAhIhCh1NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUE9TVBADEiEKHU1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9FRElUEAQSJgoiTUVTU0FHRV9JTlRFUkFDVElPTl9UWVBFX1JFREFDVElPThAFEiAKHE1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9USVAQBhIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVFJBREUQBxIqCiZNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfU0xBU0hfQ09NTUFORBAIKlkKEEdyb3VwTWVudGlvblR5cGUSIgoeR1JPVVBfTUVOVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASIQodR1JPVVBfTUVOVElPTl9UWVBFX0FUX0NIQU5ORUwQASpSChRFbmNyeXB0ZWREYXRhVmVyc2lvbhIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzAQABIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzEQASr1DAoDRXJyEhMKD0VSUl9VTlNQRUNJRklFRBAAEgwKCENBTkNFTEVEEAESCwoHVU5LTk9XThACEhQKEElOVkFMSURfQVJHVU1FTlQQAxIVChFERUFETElORV9FWENFRURFRBAEEg0KCU5PVF9GT1VORBAFEhIKDkFMUkVBRFlfRVhJU1RTEAYSFQoRUEVSTUlTU0lPTl9ERU5JRUQQBxIWChJSRVNPVVJDRV9FWEhBVVNURUQQCBIXChNGQUlMRURfUFJFQ09ORElUSU9OEAkSCwoHQUJPUlRFRBAKEhAKDE9VVF9PRl9SQU5HRRALEhEKDVVOSU1QTEVNRU5URUQQDBIMCghJTlRFUk5BTBANEg8KC1VOQVZBSUxBQkxFEA4SDQoJREFUQV9MT1NTEA8SEwoPVU5BVVRIRU5USUNBVEVEEBASDwoLREVCVUdfRVJST1IQERIRCg1CQURfU1RSRUFNX0lEEBISHgoaQkFEX1NUUkVBTV9DUkVBVElPTl9QQVJBTVMQExIZChVJTlRFUk5BTF9FUlJPUl9TV0lUQ0gQFBIQCgxCQURfRVZFTlRfSUQQFRIXChNCQURfRVZFTlRfU0lHTkFUVVJFEBYSEwoPQkFEX0hBU0hfRk9STUFUEBcSGwoXQkFEX1BSRVZfTUlOSUJMT0NLX0hBU0gQGBIWChJOT19FVkVOVF9TUEVDSUZJRUQQGRINCglCQURfRVZFTlQQGhISCg5VU0VSX0NBTlRfUE9TVBAbEhUKEVNUUkVBTV9CQURfSEFTSEVTEBwSEAoMU1RSRUFNX0VNUFRZEB0SFAoQU1RSRUFNX0JBRF9FVkVOVBAeEhQKEEJBRF9ERUxFR0FURV9TSUcQHxISCg5CQURfUFVCTElDX0tFWRAgEg8KC0JBRF9QQVlMT0FEECESEgoOQkFEX0hFWF9TVFJJTkcQIhISCg5CQURfRVZFTlRfSEFTSBAjEhMKD0JBRF9TWU5DX0NPT0tJRRAkEhMKD0RVUExJQ0FURV9FVkVOVBAlEg0KCUJBRF9CTE9DSxAmEh0KGVNUUkVBTV9OT19JTkNFUFRJT05fRVZFTlQQJxIUChBCQURfQkxPQ0tfTlVNQkVSECgSFQoRQkFEX01JTklQT09MX1NMT1QQKRIXChNCQURfQ1JFQVRPUl9BRERSRVNTECoSEgoOU1RBTEVfREVMRUdBVEUQKxIhCh1CQURfTElOS19XQUxMRVRfQkFEX1NJR05BVFVSRRAsEhMKD0JBRF9ST09UX0tFWV9JRBAtEhAKDFVOS05PV05fTk9ERRAuEhgKFERCX09QRVJBVElPTl9GQUlMVVJFEC8SHgoaTUlOSUJMT0NLU19TVE9SQUdFX0ZBSUxVUkUQMBIPCgtCQURfQUREUkVTUxAxEg8KC0JVRkZFUl9GVUxMEDISDgoKQkFEX0NPTkZJRxAzEhAKDEJBRF9DT05UUkFDVBA0EhIKDkNBTk5PVF9DT05ORUNUEDUSHQoZQ0FOTk9UX0dFVF9MSU5LRURfV0FMTEVUUxA2Eh0KGUNBTk5PVF9DSEVDS19FTlRJVExFTUVOVFMQNxIYChRDQU5OT1RfQ0FMTF9DT05UUkFDVBA4EhIKDlNQQUNFX0RJU0FCTEVEEDkSFAoQQ0hBTk5FTF9ESVNBQkxFRBA6EhUKEVdST05HX1NUUkVBTV9UWVBFEDsSGwoXTUlOSVBPT0xfTUlTU0lOR19FVkVOVFMQPBIeChpTVFJFQU1fTEFTVF9CTE9DS19NSVNNQVRDSBA9EhwKGERPV05TVFJFQU1fTkVUV09SS19FUlJPUhA+EhUKEU1JTklCTE9DS19UT09fTkVXED8SFQoRTUlOSUJMT0NLX1RPT19PTEQQQBIRCg1RVU9SVU1fRkFJTEVEEEESFwoTQ0FOTk9UX0NBTExfV0VCSE9PSxBCEh4KGk1BTEZPUk1FRF9XRUJIT09LX1JFU1BPTlNFEEMSGQoVQkFEX0VOQ1JZUFRJT05fREVWSUNFEEQSIgoeU1RSRUFNX1JFQ09OQ0lMSUFUSU9OX1JFUVVJUkVEEEUSHQoZU1lOQ19TRVNTSU9OX1JVTk5FUl9FTVBUWRBGEiQKIFNZTkNfU0VTU0lPTl9SVU5ORVJfVU5BU1NJR05BQkxFEEcSGAoUTUlOSUJMT0NLU19OT1RfRk9VTkQQSDKqBwoNU3RyZWFtU2VydmljZRIvCgRJbmZvEhIucml2ZXIuSW5mb1JlcXVlc3QaEy5yaXZlci5JbmZvUmVzcG9uc2USRwoMQ3JlYXRlU3RyZWFtEhoucml2ZXIuQ3JlYXRlU3RyZWFtUmVxdWVzdBobLnJpdmVyLkNyZWF0ZVN0cmVhbVJlc3BvbnNlElYKEUNyZWF0ZU1lZGlhU3RyZWFtEh8ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0GiAucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXNwb25zZRI+CglHZXRTdHJlYW0SFy5yaXZlci5HZXRTdHJlYW1SZXF1ZXN0Ghgucml2ZXIuR2V0U3RyZWFtUmVzcG9uc2USRgoLR2V0U3RyZWFtRXgSGS5yaXZlci5HZXRTdHJlYW1FeFJlcXVlc3QaGi5yaXZlci5HZXRTdHJlYW1FeFJlc3BvbnNlMAESSgoNR2V0TWluaWJsb2NrcxIbLnJpdmVyLkdldE1pbmlibG9ja3NSZXF1ZXN0Ghwucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEl8KFEdldExhc3RNaW5pYmxvY2tIYXNoEiIucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXF1ZXN0GiMucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXNwb25zZRI7CghBZGRFdmVudBIWLnJpdmVyLkFkZEV2ZW50UmVxdWVzdBoXLnJpdmVyLkFkZEV2ZW50UmVzcG9uc2USSgoNQWRkTWVkaWFFdmVudBIbLnJpdmVyLkFkZE1lZGlhRXZlbnRSZXF1ZXN0Ghwucml2ZXIuQWRkTWVkaWFFdmVudFJlc3BvbnNlEkYKC1N5bmNTdHJlYW1zEhkucml2ZXIuU3luY1N0cmVhbXNSZXF1ZXN0Ghoucml2ZXIuU3luY1N0cmVhbXNSZXNwb25zZTABEkEKCk1vZGlmeVN5bmMSGC5yaXZlci5Nb2RpZnlTeW5jUmVxdWVzdBoZLnJpdmVyLk1vZGlmeVN5bmNSZXNwb25zZRJBCgpDYW5jZWxTeW5jEhgucml2ZXIuQ2FuY2VsU3luY1JlcXVlc3QaGS5yaXZlci5DYW5jZWxTeW5jUmVzcG9uc2USOwoIUGluZ1N5bmMSFi5yaXZlci5QaW5nU3luY1JlcXVlc3QaFy5yaXZlci5QaW5nU3luY1Jlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM", [import_wkt2.file_google_protobuf_any, import_wkt2.file_google_protobuf_empty, import_wkt2.file_google_protobuf_timestamp]);
|
|
7612
|
+
var file_protocol = /* @__PURE__ */ (0, import_codegenv22.fileDesc)("Cg5wcm90b2NvbC5wcm90bxIFcml2ZXIiXgoJTWluaWJsb2NrEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEh8KBmhlYWRlchgCIAEoCzIPLnJpdmVyLkVudmVsb3BlEg8KB3BhcnRpYWwYAyABKAgiOgoIRW52ZWxvcGUSDAoEaGFzaBgBIAEoDBIRCglzaWduYXR1cmUYAiABKAwSDQoFZXZlbnQYAyABKAwi1wYKC1N0cmVhbUV2ZW50EhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIUCgxkZWxlZ2F0ZV9zaWcYAiABKAwSDAoEc2FsdBgDIAEoDBIgChNwcmV2X21pbmlibG9ja19oYXNoGAQgASgMSAGIAQESGwoTY3JlYXRlZF9hdF9lcG9jaF9tcxgFIAEoAxIgChhkZWxlZ2F0ZV9leHBpcnlfZXBvY2hfbXMYBiABKAMSGQoEdGFncxgHIAEoCzILLnJpdmVyLlRhZ3MSHwoScHJldl9taW5pYmxvY2tfbnVtGAggASgDSAKIAQESEQoJZXBoZW1lcmFsGAkgASgIEhsKE2NyZWF0ZWRfYXRfdGltZXpvbmUYCiABKAkSMgoQbWluaWJsb2NrX2hlYWRlchhkIAEoCzIWLnJpdmVyLk1pbmlibG9ja0hlYWRlckgAEi4KDm1lbWJlcl9wYXlsb2FkGGUgASgLMhQucml2ZXIuTWVtYmVyUGF5bG9hZEgAEioKDHVzZXJfcGF5bG9hZBhoIAEoCzISLnJpdmVyLlVzZXJQYXlsb2FkSAASOwoVdXNlcl9zZXR0aW5nc19wYXlsb2FkGGkgASgLMhoucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZEgAEjsKFXVzZXJfbWV0YWRhdGFfcGF5bG9hZBhqIAEoCzIaLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWRIABI1ChJ1c2VyX2luYm94X3BheWxvYWQYayABKAsyFy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkSAASLAoNbWVkaWFfcGF5bG9hZBhsIAEoCzITLnJpdmVyLk1lZGlhUGF5bG9hZEgAEjcKE2dkbV9jaGFubmVsX3BheWxvYWQYbiABKAsyGC5yaXZlci5HZG1DaGFubmVsUGF5bG9hZEgAQgkKB3BheWxvYWRCFgoUX3ByZXZfbWluaWJsb2NrX2hhc2hCFQoTX3ByZXZfbWluaWJsb2NrX251bUoECGYQZ0oECGcQaEoECG0QbkoECG8QcFINc3BhY2VfcGF5bG9hZFIPY2hhbm5lbF9wYXlsb2FkUhJkbV9jaGFubmVsX3BheWxvYWRSEG1ldGFkYXRhX3BheWxvYWQizwIKD01pbmlibG9ja0hlYWRlchIVCg1taW5pYmxvY2tfbnVtGAEgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYAiABKAwSLQoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgxldmVudF9oYXNoZXMYBCADKAwSGAoQZXZlbnRfbnVtX29mZnNldBgGIAEoAxIjChtwcmV2X3NuYXBzaG90X21pbmlibG9ja19udW0YByABKAMSGgoNc25hcHNob3RfaGFzaBgIIAEoDEgBiAEBEh0KFXJlamVjdGVkX2V2ZW50X2hhc2hlcxgJIAMoDBImCgRub25lGGQgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABCCQoHY29udGVudEIQCg5fc25hcHNob3RfaGFzaEoECAUQBiLcFAoNTWVtYmVyUGF5bG9hZBI1CgptZW1iZXJzaGlwGAEgASgLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5NZW1iZXJzaGlwSAASQAoQa2V5X3NvbGljaXRhdGlvbhgCIAEoCzIkLnJpdmVyLk1lbWJlclBheWxvYWQuS2V5U29saWNpdGF0aW9uSAASPgoPa2V5X2Z1bGZpbGxtZW50GAMgASgLMiMucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlGdWxmaWxsbWVudEgAEicKA3BpbhgIIAEoCzIYLnJpdmVyLk1lbWJlclBheWxvYWQuUGluSAASKwoFdW5waW4YCSABKAsyGi5yaXZlci5NZW1iZXJQYXlsb2FkLlVucGluSAASWQodbWVtYmVyX2Jsb2NrY2hhaW5fdHJhbnNhY3Rpb24YCyABKAsyMC5yaXZlci5NZW1iZXJQYXlsb2FkLk1lbWJlckJsb2NrY2hhaW5UcmFuc2FjdGlvbkgAEkgKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAwgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtSAASPQoPc2V0X2FwcF9hZGRyZXNzGA0gASgLMiIucml2ZXIuTWVtYmVyUGF5bG9hZC5TZXRBcHBBZGRyZXNzSAASQQoRdW5zZXRfYXBwX2FkZHJlc3MYDiABKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLlVuc2V0QXBwQWRkcmVzc0gAGvcICghTbmFwc2hvdBI0CgZqb2luZWQYASADKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlchItCgRwaW5zGAIgAygLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwcGVkUGluEkYKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAQgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtEjUKBHRpcHMYBSADKAsyJy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNFbnRyeRJACgp0aXBzX2NvdW50GAYgAygLMiwucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5UaXBzQ291bnRFbnRyeRrfBQoGTWVtYmVyEhQKDHVzZXJfYWRkcmVzcxgBIAEoDBIVCg1taW5pYmxvY2tfbnVtGAIgASgDEhEKCWV2ZW50X251bRgDIAEoAxI7Cg1zb2xpY2l0YXRpb25zGAQgAygLMiQucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlTb2xpY2l0YXRpb24SRQoJdGlwc19zZW50GAkgAygLMjIucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1NlbnRFbnRyeRJNCg10aXBzX3JlY2VpdmVkGAogAygLMjYucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1JlY2VpdmVkRW50cnkSUAoPdGlwc19zZW50X2NvdW50GAsgAygLMjcucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1NlbnRDb3VudEVudHJ5ElgKE3RpcHNfcmVjZWl2ZWRfY291bnQYDCADKAsyOy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzUmVjZWl2ZWRDb3VudEVudHJ5EhgKC2FwcF9hZGRyZXNzGA0gASgMSACIAQEaLwoNVGlwc1NlbnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBGjMKEVRpcHNSZWNlaXZlZEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaNAoSVGlwc1NlbnRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaOAoWVGlwc1JlY2VpdmVkQ291bnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBQg4KDF9hcHBfYWRkcmVzc0oECAUQBkoECAYQB0oECAcQCEoECAgQCRorCglUaXBzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARowCg5UaXBzQ291bnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBSgQIAxAEGoMCCgpNZW1iZXJzaGlwEh8KAm9wGAEgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKDHVzZXJfYWRkcmVzcxgCIAEoDBIZChFpbml0aWF0b3JfYWRkcmVzcxgDIAEoDBInCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uEhgKC2FwcF9hZGRyZXNzGAYgASgMSACIAQESNwoOaW52aXRlX3BheWxvYWQYByABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhEKD19pbnZpdGVfcGF5bG9hZEoECAQQBRpnCg9LZXlTb2xpY2l0YXRpb24SEgoKZGV2aWNlX2tleRgBIAEoCRIUCgxmYWxsYmFja19rZXkYAiABKAkSFQoNaXNfbmV3X2RldmljZRgDIAEoCBITCgtzZXNzaW9uX2lkcxgEIAMoCRpPCg5LZXlGdWxmaWxsbWVudBIUCgx1c2VyX2FkZHJlc3MYASABKAwSEgoKZGV2aWNlX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRpMCgpTbmFwcGVkUGluEhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIlCgNwaW4YAiABKAsyGC5yaXZlci5NZW1iZXJQYXlsb2FkLlBpbho6CgNQaW4SEAoIZXZlbnRfaWQYASABKAwSIQoFZXZlbnQYAiABKAsyEi5yaXZlci5TdHJlYW1FdmVudBoZCgVVbnBpbhIQCghldmVudF9pZBgBIAEoDBo7ChNFbmNyeXB0aW9uQWxnb3JpdGhtEhYKCWFsZ29yaXRobRgBIAEoCUgAiAEBQgwKCl9hbGdvcml0aG0aawobTWVtYmVyQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMGjoKDVNldEFwcEFkZHJlc3MSFAoMdXNlcl9hZGRyZXNzGAEgASgMEhMKC2FwcF9hZGRyZXNzGAIgASgMGicKD1Vuc2V0QXBwQWRkcmVzcxIUCgx1c2VyX2FkZHJlc3MYASABKAxCCQoHY29udGVudEoECAQQBUoECAUQBkoECAYQB0oECAcQCEoECAoQCyLwBAoRR2RtQ2hhbm5lbFBheWxvYWQSNwoJaW5jZXB0aW9uGAEgASgLMiIucml2ZXIuR2RtQ2hhbm5lbFBheWxvYWQuSW5jZXB0aW9uSAASJwoHbWVzc2FnZRgCIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGFIABIyChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASJgoGY3VzdG9tGAQgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueUgAEiUKCXJlZGFjdGlvbhgFIAEoCzIQLnJpdmVyLlJlZGFjdGlvbkgAEjgKE2ludGVyYWN0aW9uX3JlcXVlc3QYBiABKAsyGS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RIABI6ChRpbnRlcmFjdGlvbl9yZXNwb25zZRgHIAEoCzIaLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VIABp6CghTbmFwc2hvdBI1CglpbmNlcHRpb24YASABKAsyIi5yaXZlci5HZG1DaGFubmVsUGF5bG9hZC5JbmNlcHRpb24SNwoSY2hhbm5lbF9wcm9wZXJ0aWVzGAIgASgLMhsucml2ZXIuV3JhcHBlZEVuY3J5cHRlZERhdGEaeQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIwChJjaGFubmVsX3Byb3BlcnRpZXMYAiABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhEicKCHNldHRpbmdzGAMgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3NCCQoHY29udGVudCKFDQoLVXNlclBheWxvYWQSMQoJaW5jZXB0aW9uGAEgASgLMhwucml2ZXIuVXNlclBheWxvYWQuSW5jZXB0aW9uSAASPAoPdXNlcl9tZW1iZXJzaGlwGAIgASgLMiEucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBIABJJChZ1c2VyX21lbWJlcnNoaXBfYWN0aW9uGAMgASgLMicucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBBY3Rpb25IABI+ChZibG9ja2NoYWluX3RyYW5zYWN0aW9uGAQgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uSAASWwofcmVjZWl2ZWRfYmxvY2tjaGFpbl90cmFuc2FjdGlvbhgFIAEoCzIwLnJpdmVyLlVzZXJQYXlsb2FkLlJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uSAAa5wQKCFNuYXBzaG90Ei8KCWluY2VwdGlvbhgBIAEoCzIcLnJpdmVyLlVzZXJQYXlsb2FkLkluY2VwdGlvbhI2CgttZW1iZXJzaGlwcxgCIAMoCzIhLnJpdmVyLlVzZXJQYXlsb2FkLlVzZXJNZW1iZXJzaGlwEjwKCXRpcHNfc2VudBgDIAMoCzIpLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50RW50cnkSRAoNdGlwc19yZWNlaXZlZBgEIAMoCzItLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNSZWNlaXZlZEVudHJ5EkcKD3RpcHNfc2VudF9jb3VudBgFIAMoCzIuLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50Q291bnRFbnRyeRJPChN0aXBzX3JlY2VpdmVkX2NvdW50GAYgAygLMjIucml2ZXIuVXNlclBheWxvYWQuU25hcHNob3QuVGlwc1JlY2VpdmVkQ291bnRFbnRyeRovCg1UaXBzU2VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaMwoRVGlwc1JlY2VpdmVkRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo0ChJUaXBzU2VudENvdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo4ChZUaXBzUmVjZWl2ZWRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEapwEKCUluY2VwdGlvbhIRCglzdHJlYW1faWQYASABKAwSJwoIc2V0dGluZ3MYAiABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIYCgthcHBfYWRkcmVzcxgDIAEoDEgAiAEBEh4KEWFwcF9vd25lcl9hZGRyZXNzGAQgASgMSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhQKEl9hcHBfb3duZXJfYWRkcmVzcxrxAQoOVXNlck1lbWJlcnNoaXASEQoJc3RyZWFtX2lkGAEgASgMEh8KAm9wGAIgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKB2ludml0ZXIYAyABKAxIAIgBARIsCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uSAGIAQESNwoOaW52aXRlX3BheWxvYWQYBiABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAKIAQFCCgoIX2ludml0ZXJCCQoHX3JlYXNvbkIRCg9faW52aXRlX3BheWxvYWRKBAgEEAUamgEKFFVzZXJNZW1iZXJzaGlwQWN0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIPCgd1c2VyX2lkGAIgASgMEh8KAm9wGAMgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEiwKBnJlYXNvbhgFIAEoDjIXLnJpdmVyLk1lbWJlcnNoaXBSZWFzb25IAIgBAUIJCgdfcmVhc29uSgQIBBAFGm0KHVJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMQgkKB2NvbnRlbnQi2gcKEFVzZXJJbmJveFBheWxvYWQSNgoJaW5jZXB0aW9uGAEgASgLMiEucml2ZXIuVXNlckluYm94UGF5bG9hZC5JbmNlcHRpb25IABIqCgNhY2sYAiABKAsyGy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkFja0gAElQKGWdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnMYAyABKAsyLy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkdyb3VwRW5jcnlwdGlvblNlc3Npb25zSAAargIKCFNuYXBzaG90EjQKCWluY2VwdGlvbhgBIAEoCzIhLnJpdmVyLlVzZXJJbmJveFBheWxvYWQuSW5jZXB0aW9uEksKDmRldmljZV9zdW1tYXJ5GAIgAygLMjMucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5RW50cnkaOQoNRGV2aWNlU3VtbWFyeRITCgtsb3dlcl9ib3VuZBgBIAEoAxITCgt1cHBlcl9ib3VuZBgCIAEoAxpkChJEZXZpY2VTdW1tYXJ5RW50cnkSCwoDa2V5GAEgASgJEj0KBXZhbHVlGAIgASgLMi4ucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5OgI4ARqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGvMBChdHcm91cEVuY3J5cHRpb25TZXNzaW9ucxIRCglzdHJlYW1faWQYASABKAwSEgoKc2VuZGVyX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRJVCgtjaXBoZXJ0ZXh0cxgEIAMoCzJALnJpdmVyLlVzZXJJbmJveFBheWxvYWQuR3JvdXBFbmNyeXB0aW9uU2Vzc2lvbnMuQ2lwaGVydGV4dHNFbnRyeRIRCglhbGdvcml0aG0YBSABKAkaMgoQQ2lwaGVydGV4dHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGjAKA0FjaxISCgpkZXZpY2Vfa2V5GAEgASgJEhUKDW1pbmlibG9ja19udW0YAiABKANCCQoHY29udGVudCLBBwoTVXNlclNldHRpbmdzUGF5bG9hZBI5CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbkgAEkkKEmZ1bGx5X3JlYWRfbWFya2VycxgCIAEoCzIrLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuRnVsbHlSZWFkTWFya2Vyc0gAEjoKCnVzZXJfYmxvY2sYAyABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLlVzZXJCbG9ja0gAGuwCCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbhJHChJmdWxseV9yZWFkX21hcmtlcnMYAiADKAsyKy5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkZ1bGx5UmVhZE1hcmtlcnMSSAoQdXNlcl9ibG9ja3NfbGlzdBgDIAMoCzIuLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2NrcxqTAQoKVXNlckJsb2NrcxIPCgd1c2VyX2lkGAEgASgMEkQKBmJsb2NrcxgCIAMoCzI0LnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2Nrcy5CbG9jaxouCgVCbG9jaxISCgppc19ibG9ja2VkGAEgASgIEhEKCWV2ZW50X251bRgCIAEoAxqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGh0KDU1hcmtlckNvbnRlbnQSDAoEZGF0YRgBIAEoCRpgChBGdWxseVJlYWRNYXJrZXJzEhEKCXN0cmVhbV9pZBgBIAEoDBI5Cgdjb250ZW50GAIgASgLMigucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5NYXJrZXJDb250ZW50GkMKCVVzZXJCbG9jaxIPCgd1c2VyX2lkGAEgASgMEhIKCmlzX2Jsb2NrZWQYAiABKAgSEQoJZXZlbnRfbnVtGAMgASgDQgkKB2NvbnRlbnQizgUKE1VzZXJNZXRhZGF0YVBheWxvYWQSOQoJaW5jZXB0aW9uGAEgASgLMiQucml2ZXIuVXNlck1ldGFkYXRhUGF5bG9hZC5JbmNlcHRpb25IABJIChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZUgAEi0KDXByb2ZpbGVfaW1hZ2UYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASIwoDYmlvGAQgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YUgAGuoBCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkluY2VwdGlvbhJHChJlbmNyeXB0aW9uX2RldmljZXMYAiADKAsyKy5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkVuY3J5cHRpb25EZXZpY2USMgoNcHJvZmlsZV9pbWFnZRgDIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhEigKA2JpbxgEIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhGqcBCglJbmNlcHRpb24SEQoJc3RyZWFtX2lkGAEgASgMEicKCHNldHRpbmdzGAIgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3MSGAoLYXBwX2FkZHJlc3MYAyABKAxIAIgBARIeChFhcHBfb3duZXJfYWRkcmVzcxgEIAEoDEgBiAEBQg4KDF9hcHBfYWRkcmVzc0IUChJfYXBwX293bmVyX2FkZHJlc3MaPAoQRW5jcnlwdGlvbkRldmljZRISCgpkZXZpY2Vfa2V5GAEgASgJEhQKDGZhbGxiYWNrX2tleRgCIAEoCUIJCgdjb250ZW50IoQECgxNZWRpYVBheWxvYWQSMgoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbkgAEioKBWNodW5rGAIgASgLMhkucml2ZXIuTWVkaWFQYXlsb2FkLkNodW5rSAAaPAoIU25hcHNob3QSMAoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbhqGAgoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIXCgpjaGFubmVsX2lkGAIgASgMSACIAQESEwoLY2h1bmtfY291bnQYAyABKAUSJwoIc2V0dGluZ3MYBCABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIVCghzcGFjZV9pZBgFIAEoDEgBiAEBEhQKB3VzZXJfaWQYBiABKAxIAogBARIhChRwZXJfY2h1bmtfZW5jcnlwdGlvbhgHIAEoCEgDiAEBQg0KC19jaGFubmVsX2lkQgsKCV9zcGFjZV9pZEIKCghfdXNlcl9pZEIXChVfcGVyX2NodW5rX2VuY3J5cHRpb24aQgoFQ2h1bmsSDAoEZGF0YRgBIAEoDBITCgtjaHVua19pbmRleBgCIAEoBRIPCgJpdhgDIAEoDEgAiAEBQgUKA19pdkIJCgdjb250ZW50IrcECghTbmFwc2hvdBIuCgdtZW1iZXJzGAEgASgLMh0ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdBIYChBzbmFwc2hvdF92ZXJzaW9uGAIgASgFEjMKDHVzZXJfY29udGVudBhnIAEoCzIbLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90SAASRAoVdXNlcl9zZXR0aW5nc19jb250ZW50GGggASgLMiMucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5TbmFwc2hvdEgAEkQKFXVzZXJfbWV0YWRhdGFfY29udGVudBhpIAEoCzIjLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuU25hcHNob3RIABI1Cg1tZWRpYV9jb250ZW50GGogASgLMhwucml2ZXIuTWVkaWFQYXlsb2FkLlNuYXBzaG90SAASQAoTZ2RtX2NoYW5uZWxfY29udGVudBhsIAEoCzIhLnJpdmVyLkdkbUNoYW5uZWxQYXlsb2FkLlNuYXBzaG90SAASPgoSdXNlcl9pbmJveF9jb250ZW50GG0gASgLMiAucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdEgAQgkKB2NvbnRlbnRKBAhlEGZKBAhmEGdKBAhrEGxKBAhuEG9SDXNwYWNlX2NvbnRlbnRSD2NoYW5uZWxfY29udGVudFISZG1fY2hhbm5lbF9jb250ZW50UhBtZXRhZGF0YV9jb250ZW50IrcHChVCbG9ja2NoYWluVHJhbnNhY3Rpb24SNAoHcmVjZWlwdBgBIAEoCzIjLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQSQQoOc29sYW5hX3JlY2VpcHQYAiABKAsyKS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Ei8KA3RpcBhlIAEoCzIgLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXBIABJECg50b2tlbl90cmFuc2ZlchhmIAEoCzIqLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5Ub2tlblRyYW5zZmVySAASQAoMc3BhY2VfcmV2aWV3GGcgASgLMigucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3SAAa7QEKA1RpcBI1CgVldmVudBgBIAEoCzImLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXAuRXZlbnQSFQoNdG9Vc2VyQWRkcmVzcxgCIAEoDBqXAQoFRXZlbnQSFQoIdG9rZW5faWQYASABKARIAIgBARIQCghjdXJyZW5jeRgCIAEoDBIOCgZzZW5kZXIYAyABKAwSEAoIcmVjZWl2ZXIYBCABKAwSDgoGYW1vdW50GAUgASgEEhIKCm1lc3NhZ2VfaWQYBiABKAwSEgoKY2hhbm5lbF9pZBgHIAEoDEILCglfdG9rZW5faWQaeAoNVG9rZW5UcmFuc2ZlchIPCgdhZGRyZXNzGAEgASgMEg4KBmFtb3VudBgCIAEoCRIOCgZzZW5kZXIYAyABKAwSEgoKbWVzc2FnZV9pZBgEIAEoDBISCgpjaGFubmVsX2lkGAUgASgMEg4KBmlzX2J1eRgGIAEoCBr2AQoLU3BhY2VSZXZpZXcSFQoNc3BhY2VfYWRkcmVzcxgBIAEoDBI/CgZhY3Rpb24YAiABKA4yLy5yaXZlci5CbG9ja2NoYWluVHJhbnNhY3Rpb24uU3BhY2VSZXZpZXcuQWN0aW9uEj0KBWV2ZW50GAMgASgLMi4ucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3LkV2ZW50GiUKBUV2ZW50EgwKBHVzZXIYASABKAwSDgoGcmF0aW5nGAIgASgFIikKBkFjdGlvbhIHCgNBZGQQABIKCgZVcGRhdGUQARIKCgZEZWxldGUQAkIJCgdjb250ZW50IucBChxCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EhAKCGNoYWluX2lkGAEgASgEEhgKEHRyYW5zYWN0aW9uX2hhc2gYAiABKAwSFAoMYmxvY2tfbnVtYmVyGAMgASgEEgoKAnRvGAQgASgMEgwKBGZyb20YBSABKAwSNQoEbG9ncxgGIAMoCzInLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQuTG9nGjQKA0xvZxIPCgdhZGRyZXNzGAEgASgMEg4KBnRvcGljcxgCIAMoDBIMCgRkYXRhGAMgASgMItcECiJTb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EgwKBHNsb3QYASABKAQSSgoLdHJhbnNhY3Rpb24YAiABKAsyNS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0LlRyYW5zYWN0aW9uEjwKBG1ldGEYAyABKAsyLi5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEaIQoLVHJhbnNhY3Rpb24SEgoKc2lnbmF0dXJlcxgBIAMoCRr1AgoETWV0YRJXChJwcmVfdG9rZW5fYmFsYW5jZXMYASADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlElgKE3Bvc3RfdG9rZW5fYmFsYW5jZXMYAiADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlGrkBCgxUb2tlbkJhbGFuY2USDAoEbWludBgBIAEoCRINCgVvd25lchgCIAEoCRJZCgZhbW91bnQYAyABKAsySS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlLlVJVG9rZW5BbW91bnQaMQoNVUlUb2tlbkFtb3VudBIOCgZhbW91bnQYASABKAkSEAoIZGVjaW1hbHMYAiABKA0iPgoIRXZlbnRSZWYSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGhhc2gYAiABKAwSEQoJc2lnbmF0dXJlGAMgASgMIkoKDlN0cmVhbVNldHRpbmdzEiIKGmRpc2FibGVfbWluaWJsb2NrX2NyZWF0aW9uGAEgASgIEhQKDGxpZ2h0X3N0cmVhbRgCIAEoCCLQAgoNRW5jcnlwdGVkRGF0YRISCgpjaXBoZXJ0ZXh0GAEgASgJEhEKCWFsZ29yaXRobRgCIAEoCRISCgpzZW5kZXJfa2V5GAMgASgJEhIKCnNlc3Npb25faWQYBCABKAkSFQoIY2hlY2tzdW0YBSABKAlIAIgBARIZCgxyZWZfZXZlbnRfaWQYBiABKAlIAYgBARIYChBjaXBoZXJ0ZXh0X2J5dGVzGAggASgMEhAKCGl2X2J5dGVzGAkgASgMEhgKEHNlc3Npb25faWRfYnl0ZXMYCiABKAwSLAoHdmVyc2lvbhgLIAEoDjIbLnJpdmVyLkVuY3J5cHRlZERhdGFWZXJzaW9uEhcKCmRldmljZV9rZXkYDCABKAlIAogBAUILCglfY2hlY2tzdW1CDwoNX3JlZl9ldmVudF9pZEINCgtfZGV2aWNlX2tleUoECAcQCCJhChRXcmFwcGVkRW5jcnlwdGVkRGF0YRIiCgRkYXRhGAEgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIRCglldmVudF9udW0YAiABKAMSEgoKZXZlbnRfaGFzaBgDIAEoDCJuCgpTeW5jQ29va2llEhQKDG5vZGVfYWRkcmVzcxgBIAEoDBIRCglzdHJlYW1faWQYAiABKAwSFAoMbWluaXBvb2xfZ2VuGAMgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYBSABKAxKBAgEEAUiXQoOQ3JlYXRpb25Db29raWUSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW1pbmlibG9ja19udW0YAyABKAMSGwoTcHJldl9taW5pYmxvY2tfaGFzaBgEIAEoDEoECAIQAyLwAQoPU3RyZWFtQW5kQ29va2llEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEisKEG5leHRfc3luY19jb29raWUYAiABKAsyES5yaXZlci5TeW5jQ29va2llEiQKCm1pbmlibG9ja3MYAyADKAsyEC5yaXZlci5NaW5pYmxvY2sSEgoKc3luY19yZXNldBgEIAEoCBImCghzbmFwc2hvdBgFIAEoCzIPLnJpdmVyLkVudmVsb3BlSACIAQESIAoYc25hcHNob3RfbWluaWJsb2NrX2luZGV4GAYgASgDQgsKCV9zbmFwc2hvdCIrCghNaW5pcG9vbBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZSKjAgoEVGFncxI/ChhtZXNzYWdlX2ludGVyYWN0aW9uX3R5cGUYASABKA4yHS5yaXZlci5NZXNzYWdlSW50ZXJhY3Rpb25UeXBlEjQKE2dyb3VwX21lbnRpb25fdHlwZXMYAiADKA4yFy5yaXZlci5Hcm91cE1lbnRpb25UeXBlEiAKGG1lbnRpb25lZF91c2VyX2FkZHJlc3NlcxgDIAMoDBIkChxwYXJ0aWNpcGF0aW5nX3VzZXJfYWRkcmVzc2VzGAQgAygMEhYKCXRocmVhZF9pZBgFIAEoDEgAiAEBEh8KEmFwcF9jbGllbnRfYWRkcmVzcxgGIAEoDEgBiAEBQgwKCl90aHJlYWRfaWRCFQoTX2FwcF9jbGllbnRfYWRkcmVzcyIcCgtJbmZvUmVxdWVzdBINCgVkZWJ1ZxgBIAMoCSJhCgxJbmZvUmVzcG9uc2USEAoIZ3JhZmZpdGkYASABKAkSLgoKc3RhcnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHdmVyc2lvbhgDIAEoCSI+ChJHZXRTdHJlYW1FeFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW9taXRfc25hcHNob3QYAiABKAgingEKE0dldFN0cmVhbUV4UmVzcG9uc2USJQoJbWluaWJsb2NrGAEgASgLMhAucml2ZXIuTWluaWJsb2NrSAASIwoIbWluaXBvb2wYAiABKAsyDy5yaXZlci5NaW5pcG9vbEgAEiYKCHNuYXBzaG90GAMgASgLMg8ucml2ZXIuRW52ZWxvcGVIAYgBAUIGCgRkYXRhQgsKCV9zbmFwc2hvdCK2AQoTQ3JlYXRlU3RyZWFtUmVxdWVzdBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZRIRCglzdHJlYW1faWQYAiABKAwSOgoIbWV0YWRhdGEYAyADKAsyKC5yaXZlci5DcmVhdGVTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBImcKFENyZWF0ZVN0cmVhbVJlc3BvbnNlEiYKBnN0cmVhbRgBIAEoCzIWLnJpdmVyLlN0cmVhbUFuZENvb2tpZRInCg5kZXJpdmVkX2V2ZW50cxgCIAMoCzIPLnJpdmVyLkV2ZW50UmVmIsABChhDcmVhdGVNZWRpYVN0cmVhbVJlcXVlc3QSHwoGZXZlbnRzGAEgAygLMg8ucml2ZXIuRW52ZWxvcGUSEQoJc3RyZWFtX2lkGAIgASgMEj8KCG1ldGFkYXRhGAMgAygLMi0ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBIlAKGUNyZWF0ZU1lZGlhU3RyZWFtUmVzcG9uc2USMwoUbmV4dF9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSKHAQoQR2V0U3RyZWFtUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSEAoIb3B0aW9uYWwYAiABKAgSJgoLc3luY19jb29raWUYAyABKAsyES5yaXZlci5TeW5jQ29va2llEiYKHm51bWJlcl9vZl9wcmVjZWRpbmdfbWluaWJsb2NrcxgEIAEoAyI7ChFHZXRTdHJlYW1SZXNwb25zZRImCgZzdHJlYW0YASABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUiLwoLRXZlbnRGaWx0ZXISDwoHcGF5bG9hZBgBIAEoCRIPCgdjb250ZW50GAIgASgJIp0BChRHZXRNaW5pYmxvY2tzUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSFgoOZnJvbV9pbmNsdXNpdmUYAiABKAMSFAoMdG9fZXhjbHVzaXZlGAMgASgDEhYKDm9taXRfc25hcHNob3RzGAQgASgIEiwKEGV4Y2x1c2lvbl9maWx0ZXIYBSADKAsyEi5yaXZlci5FdmVudEZpbHRlciKRAgoVR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEiQKCm1pbmlibG9ja3MYASADKAsyEC5yaXZlci5NaW5pYmxvY2sSEAoIdGVybWludXMYAiABKAgSFgoOZnJvbV9pbmNsdXNpdmUYAyABKAMSDQoFbGltaXQYBCABKAMSFgoOb21pdF9zbmFwc2hvdHMYBSABKAgSPgoJc25hcHNob3RzGAYgAygLMisucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlLlNuYXBzaG90c0VudHJ5GkEKDlNuYXBzaG90c0VudHJ5EgsKA2tleRgBIAEoAxIeCgV2YWx1ZRgCIAEoCzIPLnJpdmVyLkVudmVsb3BlOgI4ASIwChtHZXRMYXN0TWluaWJsb2NrSGFzaFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMIosBChxHZXRMYXN0TWluaWJsb2NrSGFzaFJlc3BvbnNlEgwKBGhhc2gYASABKAwSFQoNbWluaWJsb2NrX251bRgCIAEoAxJGChRlbmNyeXB0aW9uX2FsZ29yaXRobRgDIAEoCzIoLnJpdmVyLk1lbWJlclBheWxvYWQuRW5jcnlwdGlvbkFsZ29yaXRobSJKCg9BZGRFdmVudFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEh4KBWV2ZW50GAIgASgLMg8ucml2ZXIuRW52ZWxvcGVKBAgDEAQiPQoQQWRkRXZlbnRSZXNwb25zZRIjCgpuZXdfZXZlbnRzGAIgAygLMg8ucml2ZXIuRXZlbnRSZWZKBAgBEAIidAoUQWRkTWVkaWFFdmVudFJlcXVlc3QSHgoFZXZlbnQYASABKAsyDy5yaXZlci5FbnZlbG9wZRIuCg9jcmVhdGlvbl9jb29raWUYAiABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZRIMCgRsYXN0GAMgASgIIkcKFUFkZE1lZGlhRXZlbnRSZXNwb25zZRIuCg9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSI5ChJTeW5jU3RyZWFtc1JlcXVlc3QSIwoIc3luY19wb3MYASADKAsyES5yaXZlci5TeW5jQ29va2llIq4BChNTeW5jU3RyZWFtc1Jlc3BvbnNlEg8KB3N5bmNfaWQYASABKAkSHgoHc3luY19vcBgCIAEoDjINLnJpdmVyLlN5bmNPcBImCgZzdHJlYW0YAyABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUSEgoKcG9uZ19ub25jZRgEIAEoCRIRCglzdHJlYW1faWQYBSABKAwSFwoPdGFyZ2V0X3N5bmNfaWRzGAYgAygJIuIBChFNb2RpZnlTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJEiYKC2FkZF9zdHJlYW1zGAIgAygLMhEucml2ZXIuU3luY0Nvb2tpZRIWCg5yZW1vdmVfc3RyZWFtcxgDIAMoDBI7ChBiYWNrZmlsbF9zdHJlYW1zGAQgASgLMiEucml2ZXIuTW9kaWZ5U3luY1JlcXVlc3QuQmFja2ZpbGwaPwoIQmFja2ZpbGwSIgoHc3RyZWFtcxgBIAMoCzIRLnJpdmVyLlN5bmNDb29raWUSDwoHc3luY19pZBgCIAEoCSJcChJTeW5jU3RyZWFtT3BTdGF0dXMSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGNvZGUYAiABKAUSDwoHbWVzc2FnZRgDIAEoCRIUCgxub2RlX2FkZHJlc3MYBCABKAwimAEKEk1vZGlmeVN5bmNSZXNwb25zZRInCgRhZGRzGAEgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEisKCHJlbW92YWxzGAIgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEiwKCWJhY2tmaWxscxgDIAMoCzIZLnJpdmVyLlN5bmNTdHJlYW1PcFN0YXR1cyIkChFDYW5jZWxTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJIhQKEkNhbmNlbFN5bmNSZXNwb25zZSIxCg9QaW5nU3luY1JlcXVlc3QSDwoHc3luY19pZBgBIAEoCRINCgVub25jZRgCIAEoCSISChBQaW5nU3luY1Jlc3BvbnNlIh0KCVJlZGFjdGlvbhIQCghldmVudF9pZBgBIAEoDCLyFwoZSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZBJGChFlbmNyeXB0aW9uX2RldmljZRgBIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZRI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEjUKBGZvcm0YZiABKAsyJS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLkZvcm1IABJDCgt0cmFuc2FjdGlvbhhnIAEoCzIsLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb25IABJACgphZGRfbWVtYmVyGGggASgLMioucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5BZGRNZW1iZXJIABJICg5wcmVwYXJlZF9jYWxscxhpIAEoCzIuLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxsc0gAEjcKBWJhdGNoGGogASgLMiYucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5CYXRjaEgAGu8DCglTaWduYXR1cmUSCgoCaWQYASABKAkSDAoEZGF0YRgCIAEoCRIQCghjaGFpbl9pZBgDIAEoCRIaCg1zaWduZXJfd2FsbGV0GAQgASgJSACIAQESRgoEdHlwZRgFIAEoDjI4LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuU2lnbmF0dXJlLlNpZ25hdHVyZVR5cGUSEgoFdGl0bGUYBiABKAlIAYgBARIVCghzdWJ0aXRsZRgHIAEoCUgCiAEBEmEKFHNpZ25hdHVyZV92YWxpZGF0aW9uGAggASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5TaWduYXR1cmUuU2lnbmF0dXJlVmFsaWRhdGlvbkgDiAEBIjIKDVNpZ25hdHVyZVR5cGUSEQoNUEVSU09OQUxfU0lHThAAEg4KClRZUEVEX0RBVEEQASJOChNTaWduYXR1cmVWYWxpZGF0aW9uEg8KC1VOU1BFQ0lGSUVEEAASDwoLRUlQNzEyX09OTFkQARIVChFFSVA3MTJfT1JfRUlQMTI3MRACQhAKDl9zaWduZXJfd2FsbGV0QggKBl90aXRsZUILCglfc3VidGl0bGVCFwoVX3NpZ25hdHVyZV92YWxpZGF0aW9uGpYDCgRGb3JtEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARJDCgpjb21wb25lbnRzGAQgAygLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5Gb3JtLkNvbXBvbmVudBr6AQoJQ29tcG9uZW50EgoKAmlkGAEgASgJEkgKBmJ1dHRvbhhlIAEoCzI2LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASTwoKdGV4dF9pbnB1dBhmIAEoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuVGV4dElucHV0SAAaFwoGQnV0dG9uEg0KBWxhYmVsGAEgASgJGiAKCVRleHRJbnB1dBITCgtwbGFjZWhvbGRlchgBIAEoCUILCgljb21wb25lbnRCCAoGX3RpdGxlQgsKCV9zdWJ0aXRsZRr/AgoLVHJhbnNhY3Rpb24SCgoCaWQYASABKAkSEgoFdGl0bGUYAiABKAlIAYgBARIVCghzdWJ0aXRsZRgDIAEoCUgCiAEBEkQKA2V2bRhlIAEoCzI1LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb24uRVZNQmF0Y2hIABo1CgpFVk1Db250ZW50EgoKAnRvGAEgASgJEg0KBXZhbHVlGAIgASgJEgwKBGRhdGEYAyABKAkamQEKCEVWTUJhdGNoEhAKCGNoYWluX2lkGAEgASgJEhoKDXNpZ25lcl93YWxsZXQYAiABKAlIAIgBARJNCgx0cmFuc2FjdGlvbnMYAyADKAsyNy5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlRyYW5zYWN0aW9uLkVWTUNvbnRlbnRCEAoOX3NpZ25lcl93YWxsZXRCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlGkoKCUFkZE1lbWJlchIKCgJpZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgMEhQKB21lc3NhZ2UYAyABKAlIAIgBAUIKCghfbWVzc2FnZRrzBgoNUHJlcGFyZWRDYWxscxIKCgJpZBgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRISCgp0eXBlZF9kYXRhGAMgASgJEg8KB2NvbnRleHQYBCABKAkSEgoFdGl0bGUYBSABKAlIAIgBARIVCghzdWJ0aXRsZRgGIAEoCUgBiAEBElMKDmF1dGhvcml6ZV9rZXlzGAcgAygLMjsucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLkF1dGhvcml6ZUtleRrmAwoKUGVybWlzc2lvbhJMCgR0eXBlGAEgASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uVHlwZRJOCgRjYWxsGAIgASgLMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uQ2FsbEgAElAKBXNwZW5kGAMgASgLMj8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uU3BlbmRIABpCCgRDYWxsEg8KAnRvGAEgASgJSACIAQESFQoIc2VsZWN0b3IYAiABKAlIAYgBAUIFCgNfdG9CCwoJX3NlbGVjdG9yGmMKBVNwZW5kEhIKBXRva2VuGAEgASgJSACIAQESEgoFbGltaXQYAiABKAlIAYgBARITCgZwZXJpb2QYAyABKAlIAogBAUIICgZfdG9rZW5CCAoGX2xpbWl0QgkKB19wZXJpb2QiMQoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASCAoEQ0FMTBABEgkKBVNQRU5EEAJCDAoKcGVybWlzc2lvbhqeAQoMQXV0aG9yaXplS2V5Eg4KBmV4cGlyeRgBIAEoCRIMCgR0eXBlGAIgASgJEgwKBHJvbGUYAyABKAkSEgoKcHVibGljX2tleRgEIAEoCRJOCgtwZXJtaXNzaW9ucxgFIAMoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxscy5QZXJtaXNzaW9uQggKBl90aXRsZUILCglfc3VidGl0bGUasAIKBUJhdGNoEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARI6CgVzdGVwcxgEIAMoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuQmF0Y2guU3RlcBqcAQoEU3RlcBI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEkgKDnByZXBhcmVkX2NhbGxzGGkgASgLMi4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzSABCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlQgkKB2NvbnRlbnQilAEKEkludGVyYWN0aW9uUmVxdWVzdBIWCglyZWNpcGllbnQYASABKAxIAIgBARIsCg5lbmNyeXB0ZWRfZGF0YRgDIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGESFgoJdGhyZWFkX2lkGAQgASgMSAGIAQFCDAoKX3JlY2lwaWVudEIMCgpfdGhyZWFkX2lkSgQIAhADInwKE0ludGVyYWN0aW9uUmVzcG9uc2USEQoJcmVjaXBpZW50GAEgASgMEiwKDmVuY3J5cHRlZF9kYXRhGAIgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIWCgl0aHJlYWRfaWQYAyABKAxIAIgBAUIMCgpfdGhyZWFkX2lkIugKChpJbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZBIMCgRzYWx0GAEgASgMEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEjYKBGZvcm0YZiABKAsyJi5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5Gb3JtSAASRAoLdHJhbnNhY3Rpb24YZyABKAsyLS5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5UcmFuc2FjdGlvbkgAEkEKCmFkZF9tZW1iZXIYaCABKAsyKy5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5BZGRNZW1iZXJIABJJCg5wcmVwYXJlZF9jYWxscxhpIAEoCzIvLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlByZXBhcmVkQ2FsbHNIABI4CgViYXRjaBhqIAEoCzInLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoSAAaMgoJU2lnbmF0dXJlEhIKCnJlcXVlc3RfaWQYASABKAkSEQoJc2lnbmF0dXJlGAIgASgJGsoCCgRGb3JtEhIKCnJlcXVlc3RfaWQYASABKAkSRAoKY29tcG9uZW50cxgCIAMoCzIwLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50GucBCglDb21wb25lbnQSCgoCaWQYASABKAkSSQoGYnV0dG9uGGUgASgLMjcucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASUAoKdGV4dF9pbnB1dBhmIAEoCzI6LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50LlRleHRJbnB1dEgAGggKBkJ1dHRvbhoaCglUZXh0SW5wdXQSDQoFdmFsdWUYASABKAlCCwoJY29tcG9uZW50GjIKC1RyYW5zYWN0aW9uEhIKCnJlcXVlc3RfaWQYASABKAkSDwoHdHhfaGFzaBgCIAEoCRoxCglBZGRNZW1iZXISEgoKcmVxdWVzdF9pZBgBIAEoCRIQCghhY2NlcHRlZBgCIAEoCBq0AQoNUHJlcGFyZWRDYWxscxISCgpyZXF1ZXN0X2lkGAEgASgJEhEKCXNpZ25hdHVyZRgCIAEoCRIeChFwYXltZW50X3NpZ25hdHVyZRgDIAEoCUgAiAEBEhQKB2NvbnRleHQYBCABKAlIAYgBARIWCglidW5kbGVfaWQYBSABKAlIAogBAUIUChJfcGF5bWVudF9zaWduYXR1cmVCCgoIX2NvbnRleHRCDAoKX2J1bmRsZV9pZBqJAgoFQmF0Y2gSEgoKcmVxdWVzdF9pZBgBIAEoCRJDCgVzdGVwcxgCIAMoCzI0LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoLlN0ZXBSZXNwb25zZRqmAQoMU3RlcFJlc3BvbnNlEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEkkKDnByZXBhcmVkX2NhbGxzGGkgASgLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuUHJlcGFyZWRDYWxsc0gAQgkKB2NvbnRlbnRCCQoHY29udGVudCKLAQoTSW52aXRlU2lnbmVkUGF5bG9hZBIPCgd1c2VyX2lkGAEgASgMEhEKCXN0cmVhbV9pZBgCIAEoDBIUCgx0aW1lc3RhbXBfbXMYAyABKAMSDAoEc2FsdBgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwSGQoRc2lnbmVyX3B1YmxpY19rZXkYBiABKAwqawoGU3luY09wEhQKEFNZTkNfVU5TUEVDSUZJRUQQABIMCghTWU5DX05FVxABEg4KClNZTkNfQ0xPU0UQAhIPCgtTWU5DX1VQREFURRADEg0KCVNZTkNfUE9ORxAEEg0KCVNZTkNfRE9XThAFKkwKDE1lbWJlcnNoaXBPcBISCg5TT19VTlNQRUNJRklFRBAAEg0KCVNPX0lOVklURRABEgsKB1NPX0pPSU4QAhIMCghTT19MRUFWRRADKkQKEE1lbWJlcnNoaXBSZWFzb24SCwoHTVJfTk9ORRAAEhMKD01SX05PVF9FTlRJVExFRBABEg4KCk1SX0VYUElSRUQQAipPCglDaGFubmVsT3ASEgoOQ09fVU5TUEVDSUZJRUQQABIOCgpDT19DUkVBVEVEEAESDgoKQ09fREVMRVRFRBACEg4KCkNPX1VQREFURUQQBCrtAgoWTWVzc2FnZUludGVyYWN0aW9uVHlwZRIoCiRNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVQTFkQARIlCiFNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVBQ1RJT04QAhIhCh1NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUE9TVBADEiEKHU1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9FRElUEAQSJgoiTUVTU0FHRV9JTlRFUkFDVElPTl9UWVBFX1JFREFDVElPThAFEiAKHE1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9USVAQBhIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVFJBREUQBxIqCiZNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfU0xBU0hfQ09NTUFORBAIKlkKEEdyb3VwTWVudGlvblR5cGUSIgoeR1JPVVBfTUVOVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASIQodR1JPVVBfTUVOVElPTl9UWVBFX0FUX0NIQU5ORUwQASpSChRFbmNyeXB0ZWREYXRhVmVyc2lvbhIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzAQABIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzEQASr1DAoDRXJyEhMKD0VSUl9VTlNQRUNJRklFRBAAEgwKCENBTkNFTEVEEAESCwoHVU5LTk9XThACEhQKEElOVkFMSURfQVJHVU1FTlQQAxIVChFERUFETElORV9FWENFRURFRBAEEg0KCU5PVF9GT1VORBAFEhIKDkFMUkVBRFlfRVhJU1RTEAYSFQoRUEVSTUlTU0lPTl9ERU5JRUQQBxIWChJSRVNPVVJDRV9FWEhBVVNURUQQCBIXChNGQUlMRURfUFJFQ09ORElUSU9OEAkSCwoHQUJPUlRFRBAKEhAKDE9VVF9PRl9SQU5HRRALEhEKDVVOSU1QTEVNRU5URUQQDBIMCghJTlRFUk5BTBANEg8KC1VOQVZBSUxBQkxFEA4SDQoJREFUQV9MT1NTEA8SEwoPVU5BVVRIRU5USUNBVEVEEBASDwoLREVCVUdfRVJST1IQERIRCg1CQURfU1RSRUFNX0lEEBISHgoaQkFEX1NUUkVBTV9DUkVBVElPTl9QQVJBTVMQExIZChVJTlRFUk5BTF9FUlJPUl9TV0lUQ0gQFBIQCgxCQURfRVZFTlRfSUQQFRIXChNCQURfRVZFTlRfU0lHTkFUVVJFEBYSEwoPQkFEX0hBU0hfRk9STUFUEBcSGwoXQkFEX1BSRVZfTUlOSUJMT0NLX0hBU0gQGBIWChJOT19FVkVOVF9TUEVDSUZJRUQQGRINCglCQURfRVZFTlQQGhISCg5VU0VSX0NBTlRfUE9TVBAbEhUKEVNUUkVBTV9CQURfSEFTSEVTEBwSEAoMU1RSRUFNX0VNUFRZEB0SFAoQU1RSRUFNX0JBRF9FVkVOVBAeEhQKEEJBRF9ERUxFR0FURV9TSUcQHxISCg5CQURfUFVCTElDX0tFWRAgEg8KC0JBRF9QQVlMT0FEECESEgoOQkFEX0hFWF9TVFJJTkcQIhISCg5CQURfRVZFTlRfSEFTSBAjEhMKD0JBRF9TWU5DX0NPT0tJRRAkEhMKD0RVUExJQ0FURV9FVkVOVBAlEg0KCUJBRF9CTE9DSxAmEh0KGVNUUkVBTV9OT19JTkNFUFRJT05fRVZFTlQQJxIUChBCQURfQkxPQ0tfTlVNQkVSECgSFQoRQkFEX01JTklQT09MX1NMT1QQKRIXChNCQURfQ1JFQVRPUl9BRERSRVNTECoSEgoOU1RBTEVfREVMRUdBVEUQKxIhCh1CQURfTElOS19XQUxMRVRfQkFEX1NJR05BVFVSRRAsEhMKD0JBRF9ST09UX0tFWV9JRBAtEhAKDFVOS05PV05fTk9ERRAuEhgKFERCX09QRVJBVElPTl9GQUlMVVJFEC8SHgoaTUlOSUJMT0NLU19TVE9SQUdFX0ZBSUxVUkUQMBIPCgtCQURfQUREUkVTUxAxEg8KC0JVRkZFUl9GVUxMEDISDgoKQkFEX0NPTkZJRxAzEhAKDEJBRF9DT05UUkFDVBA0EhIKDkNBTk5PVF9DT05ORUNUEDUSHQoZQ0FOTk9UX0dFVF9MSU5LRURfV0FMTEVUUxA2Eh0KGUNBTk5PVF9DSEVDS19FTlRJVExFTUVOVFMQNxIYChRDQU5OT1RfQ0FMTF9DT05UUkFDVBA4EhIKDlNQQUNFX0RJU0FCTEVEEDkSFAoQQ0hBTk5FTF9ESVNBQkxFRBA6EhUKEVdST05HX1NUUkVBTV9UWVBFEDsSGwoXTUlOSVBPT0xfTUlTU0lOR19FVkVOVFMQPBIeChpTVFJFQU1fTEFTVF9CTE9DS19NSVNNQVRDSBA9EhwKGERPV05TVFJFQU1fTkVUV09SS19FUlJPUhA+EhUKEU1JTklCTE9DS19UT09fTkVXED8SFQoRTUlOSUJMT0NLX1RPT19PTEQQQBIRCg1RVU9SVU1fRkFJTEVEEEESFwoTQ0FOTk9UX0NBTExfV0VCSE9PSxBCEh4KGk1BTEZPUk1FRF9XRUJIT09LX1JFU1BPTlNFEEMSGQoVQkFEX0VOQ1JZUFRJT05fREVWSUNFEEQSIgoeU1RSRUFNX1JFQ09OQ0lMSUFUSU9OX1JFUVVJUkVEEEUSHQoZU1lOQ19TRVNTSU9OX1JVTk5FUl9FTVBUWRBGEiQKIFNZTkNfU0VTU0lPTl9SVU5ORVJfVU5BU1NJR05BQkxFEEcSGAoUTUlOSUJMT0NLU19OT1RfRk9VTkQQSDKqBwoNU3RyZWFtU2VydmljZRIvCgRJbmZvEhIucml2ZXIuSW5mb1JlcXVlc3QaEy5yaXZlci5JbmZvUmVzcG9uc2USRwoMQ3JlYXRlU3RyZWFtEhoucml2ZXIuQ3JlYXRlU3RyZWFtUmVxdWVzdBobLnJpdmVyLkNyZWF0ZVN0cmVhbVJlc3BvbnNlElYKEUNyZWF0ZU1lZGlhU3RyZWFtEh8ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0GiAucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXNwb25zZRI+CglHZXRTdHJlYW0SFy5yaXZlci5HZXRTdHJlYW1SZXF1ZXN0Ghgucml2ZXIuR2V0U3RyZWFtUmVzcG9uc2USRgoLR2V0U3RyZWFtRXgSGS5yaXZlci5HZXRTdHJlYW1FeFJlcXVlc3QaGi5yaXZlci5HZXRTdHJlYW1FeFJlc3BvbnNlMAESSgoNR2V0TWluaWJsb2NrcxIbLnJpdmVyLkdldE1pbmlibG9ja3NSZXF1ZXN0Ghwucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEl8KFEdldExhc3RNaW5pYmxvY2tIYXNoEiIucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXF1ZXN0GiMucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXNwb25zZRI7CghBZGRFdmVudBIWLnJpdmVyLkFkZEV2ZW50UmVxdWVzdBoXLnJpdmVyLkFkZEV2ZW50UmVzcG9uc2USSgoNQWRkTWVkaWFFdmVudBIbLnJpdmVyLkFkZE1lZGlhRXZlbnRSZXF1ZXN0Ghwucml2ZXIuQWRkTWVkaWFFdmVudFJlc3BvbnNlEkYKC1N5bmNTdHJlYW1zEhkucml2ZXIuU3luY1N0cmVhbXNSZXF1ZXN0Ghoucml2ZXIuU3luY1N0cmVhbXNSZXNwb25zZTABEkEKCk1vZGlmeVN5bmMSGC5yaXZlci5Nb2RpZnlTeW5jUmVxdWVzdBoZLnJpdmVyLk1vZGlmeVN5bmNSZXNwb25zZRJBCgpDYW5jZWxTeW5jEhgucml2ZXIuQ2FuY2VsU3luY1JlcXVlc3QaGS5yaXZlci5DYW5jZWxTeW5jUmVzcG9uc2USOwoIUGluZ1N5bmMSFi5yaXZlci5QaW5nU3luY1JlcXVlc3QaFy5yaXZlci5QaW5nU3luY1Jlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM", [import_wkt2.file_google_protobuf_any, import_wkt2.file_google_protobuf_empty, import_wkt2.file_google_protobuf_timestamp]);
|
|
7614
7613
|
var EnvelopeSchema = /* @__PURE__ */ (0, import_codegenv22.messageDesc)(file_protocol, 1);
|
|
7615
7614
|
var StreamEventSchema = /* @__PURE__ */ (0, import_codegenv22.messageDesc)(file_protocol, 2);
|
|
7616
7615
|
var UserSettingsPayload_Snapshot_UserBlocksSchema = /* @__PURE__ */ (0, import_codegenv22.messageDesc)(file_protocol, 8, 0, 0);
|
|
@@ -7778,7 +7777,7 @@ var Err;
|
|
|
7778
7777
|
var StreamService = /* @__PURE__ */ (0, import_codegenv22.serviceDesc)(file_protocol, 0);
|
|
7779
7778
|
|
|
7780
7779
|
// ../proto/dist/gen/apps_pb.js
|
|
7781
|
-
var file_apps = /* @__PURE__ */ (0, import_codegenv23.fileDesc)("CgphcHBzLnByb3RvEgVyaXZlciKFAQoLQXBwU2V0dGluZ3MSMwoPZm9yd2FyZF9zZXR0aW5nGAEgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZRIUCgh0cmFkYWJsZRgCIAEoCEICGAESKwoOc3VwcG9ydGVkX2FwaXMYAyADKA4yEy5yaXZlci5TdXBwb3J0ZWRBcGkigwEKD1JlZ2lzdGVyUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSFAoMYXBwX293bmVyX2lkGAIgASgMEiQKCHNldHRpbmdzGAMgASgLMhIucml2ZXIuQXBwU2V0dGluZ3MSJAoIbWV0YWRhdGEYBCABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIvChBSZWdpc3RlclJlc3BvbnNlEhsKE2hzMjU2X3NoYXJlZF9zZWNyZXQYASABKAwiPQoWUmVnaXN0ZXJXZWJob29rUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSEwoLd2ViaG9va191cmwYAiABKAkiGQoXUmVnaXN0ZXJXZWJob29rUmVzcG9uc2UiTQoVU2V0QXBwU2V0dGluZ3NSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIkCghzZXR0aW5ncxgCIAEoCzISLnJpdmVyLkFwcFNldHRpbmdzIhgKFlNldEFwcFNldHRpbmdzUmVzcG9uc2UiugEKGFVwZGF0ZUFwcFNldHRpbmdzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSOAoPZm9yd2FyZF9zZXR0aW5nGAIgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZUgAiAEBEisKDnN1cHBvcnRlZF9hcGlzGAMgAygOMhMucml2ZXIuU3VwcG9ydGVkQXBpEhMKC3VwZGF0ZV9tYXNrGAQgAygJQhIKEF9mb3J3YXJkX3NldHRpbmciGwoZVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZSInChVHZXRBcHBTZXR0aW5nc1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMImgKFkdldEFwcFNldHRpbmdzUmVzcG9uc2USJAoIc2V0dGluZ3MYASABKAsyEi5yaXZlci5BcHBTZXR0aW5ncxIYCgt3ZWJob29rX3VybBgCIAEoCUgAiAEBQg4KDF93ZWJob29rX3VybCIlChNSb3RhdGVTZWNyZXRSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCIzChRSb3RhdGVTZWNyZXRSZXNwb25zZRIbChNoczI1Nl9zaGFyZWRfc2VjcmV0GAEgASgMIiIKEEdldFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIowBChFHZXRTdGF0dXNSZXNwb25zZRIVCg1pc19yZWdpc3RlcmVkGAEgASgIEhYKDnZhbGlkX3Jlc3BvbnNlGAIgASgIEjgKBnN0YXR1cxgDIAEoCzIoLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5TdGF0dXNSZXNwb25zZRIOCgZhY3RpdmUYBCABKAgiXAoRR2V0U2Vzc2lvblJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhQKCnNlc3Npb25faWQYAiABKAlIABITCglzdHJlYW1faWQYAyABKAxIAEIMCgppZGVudGlmaWVyIkgKEkdldFNlc3Npb25SZXNwb25zZRIyChlncm91cF9lbmNyeXB0aW9uX3Nlc3Npb25zGAEgASgLMg8ucml2ZXIuRW52ZWxvcGUiugIKDEV2ZW50UGF5bG9hZBIwCghtZXNzYWdlcxgBIAEoCzIcLnJpdmVyLkV2ZW50UGF5bG9hZC5NZXNzYWdlc0gAEjcKDHNvbGljaXRhdGlvbhgCIAEoCzIfLnJpdmVyLkV2ZW50UGF5bG9hZC5Tb2xpY2l0S2V5c0gAGn0KCE1lc3NhZ2VzEhEKCXN0cmVhbV9pZBgBIAEoDBIhCghtZXNzYWdlcxgCIAMoCzIPLnJpdmVyLkVudmVsb3BlEjsKImdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnNfbWVzc2FnZXMYAyADKAsyDy5yaXZlci5FbnZlbG9wZRo1CgtTb2xpY2l0S2V5cxIRCglzdHJlYW1faWQYASABKAwSEwoLc2Vzc2lvbl9pZHMYAiADKAlCCQoHcGF5bG9hZCI0Cg1FdmVudHNQYXlsb2FkEiMKBmV2ZW50cxgBIAMoCzITLnJpdmVyLkV2ZW50UGF5bG9hZCKsBgoRQXBwU2VydmljZVJlcXVlc3QSLAoKaW5pdGlhbGl6ZRhlIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEigKBnN0YXR1cxhmIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEiYKBmV2ZW50cxhnIAEoCzIULnJpdmVyLkV2ZW50c1BheWxvYWRIABIsCglwb3NpdGlvbnMYaCABKAsyFy5yaXZlci5Qb3NpdGlvbnNSZXF1ZXN0SAASPgoJcHJvcG9zYWxzGGkgASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuUHJvcG9zYWxzUmVxdWVzdEgAEkYKEWNvbmNpZXJnZV9yZXF1ZXN0GGogASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuQ29uY2llcmdlUmVxdWVzdEgAGsoBChBQcm9wb3NhbHNSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhIKCnVzZXJfcXVlcnkYAiABKAkSFAoHY29udGV4dBgDIAEoCUgAiAEBEjoKC2ludm9jYXRpb25zGAQgAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEhcKCnRpbWVvdXRfbXMYBSABKAVIAYgBAUIKCghfY29udGV4dEINCgtfdGltZW91dF9tcxqIAgoQQ29uY2llcmdlUmVxdWVzdBIcChRjb252ZXJzYXRpb25fc2VlZF9pZBgBIAEoCRISCgp1c2VyX3F1ZXJ5GAIgASgJEhQKB2NvbnRleHQYAyABKAlIAIgBARIZCgxleHRlcm5hbF9yZWYYBCABKAlIAYgBARIgChNwcm9wb3NhbF90aW1lb3V0X21zGAUgASgDSAKIAQESIQoUY29uY2llcmdlX3RpbWVvdXRfbXMYBiABKANIA4gBAUIKCghfY29udGV4dEIPCg1fZXh0ZXJuYWxfcmVmQhYKFF9wcm9wb3NhbF90aW1lb3V0X21zQhcKFV9jb25jaWVyZ2VfdGltZW91dF9tc0IJCgdwYXlsb2FkIo8FChJBcHBTZXJ2aWNlUmVzcG9uc2USQgoKaW5pdGlhbGl6ZRhlIAEoCzIsLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5Jbml0aWFsaXplUmVzcG9uc2VIABI6CgZzdGF0dXMYZiABKAsyKC5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuU3RhdHVzUmVzcG9uc2VIABItCglwb3NpdGlvbnMYZyABKAsyGC5yaXZlci5Qb3NpdGlvbnNSZXNwb25zZUgAEkAKCXByb3Bvc2FscxhoIAEoCzIrLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5Qcm9wb3NhbHNSZXNwb25zZUgAEkkKEmNvbmNpZXJnZV9yZXNwb25zZRhpIAEoCzIrLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5Db25jaWVyZ2VSZXNwb25zZUgAGlwKEkluaXRpYWxpemVSZXNwb25zZRJGChFlbmNyeXB0aW9uX2RldmljZRgBIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZRqFAQoOU3RhdHVzUmVzcG9uc2USGQoRZnJhbWV3b3JrX3ZlcnNpb24YASABKAUSEgoKZGV2aWNlX2tleRgCIAEoCRIUCgxmYWxsYmFja19rZXkYAyABKAkSGwoOY2xpZW50X3ZlcnNpb24YBCABKAlIAIgBAUIRCg9fY2xpZW50X3ZlcnNpb24aJQoRUHJvcG9zYWxzUmVzcG9uc2USEAoIYWNjZXB0ZWQYASABKAgaJQoRQ29uY2llcmdlUmVzcG9uc2USEAoIYWNjZXB0ZWQYASABKAhCCQoHcGF5bG9hZCLwAQoIUG9zaXRpb24SDQoFbGFiZWwYASABKAkSGAoLZGVzY3JpcHRpb24YAiABKAlIAIgBARIOCgZzeW1ib2wYAyABKAkSIQoEdHlwZRgEIAEoDjITLnJpdmVyLlBvc2l0aW9uVHlwZRITCgtiYWxhbmNlX3VzZBgFIAEoCRIPCgdwbmxfdXNkGAYgASgJEhUKCGNoYWluX2lkGAcgASgESAGIAQESGwoObmF0aXZlX2JhbGFuY2UYCCABKAlIAogBAUIOCgxfZGVzY3JpcHRpb25CCwoJX2NoYWluX2lkQhEKD19uYXRpdmVfYmFsYW5jZSIjChBQb3NpdGlvbnNSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAwiewoRUG9zaXRpb25zUmVzcG9uc2USEQoJc3VwcG9ydGVkGAEgASgIEhIKBWVycm9yGAIgASgJSACIAQESIgoJcG9zaXRpb25zGAMgAygLMg8ucml2ZXIuUG9zaXRpb24SEQoJdGltZXN0YW1wGAQgASgDQggKBl9lcnJvciIxCgxTbGFzaENvbW1hbmQSDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCSI7ChFDYXBhYmlsaXR5RXhhbXBsZRISCgp1c2VyX3F1ZXJ5GAEgASgJEhIKCnBhcmFtZXRlcnMYAiABKAkicQoKQ2FwYWJpbGl0eRIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhQKDGlucHV0X3NjaGVtYRgDIAEoCRIqCghleGFtcGxlcxgEIAMoCzIYLnJpdmVyLkNhcGFiaWxpdHlFeGFtcGxlIo8BChJDYXBhYmlsaXR5TWFuaWZlc3QSEAoIYWdlbnRfaWQYASABKAwSEgoKYWdlbnRfbmFtZRgCIAEoCRIZChFhZ2VudF9kZXNjcmlwdGlvbhgDIAEoCRInCgxjYXBhYmlsaXRpZXMYBCADKAsyES5yaXZlci5DYXBhYmlsaXR5Eg8KB3ZlcnNpb24YBSABKAkigAIKC0FwcE1ldGFkYXRhEhAKCHVzZXJuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhEKCWltYWdlX3VybBgDIAEoCRIZCgxleHRlcm5hbF91cmwYBCABKAlIAIgBARIrCg5zbGFzaF9jb21tYW5kcxgGIAMoCzITLnJpdmVyLlNsYXNoQ29tbWFuZBIUCgxkaXNwbGF5X25hbWUYByABKAkSDQoFbW90dG8YCCABKAkSJwoMY2FwYWJpbGl0aWVzGAkgAygLMhEucml2ZXIuQ2FwYWJpbGl0eUIPCg1fZXh0ZXJuYWxfdXJsSgQIBRAGUgphdmF0YXJfdXJsIuUCChFBcHBNZXRhZGF0YVVwZGF0ZRIVCgh1c2VybmFtZRgBIAEoCUgAiAEBEhgKC2Rlc2NyaXB0aW9uGAIgASgJSAGIAQESFgoJaW1hZ2VfdXJsGAMgASgJSAKIAQESGQoMZXh0ZXJuYWxfdXJsGAQgASgJSAOIAQESKwoOc2xhc2hfY29tbWFuZHMYBiADKAsyEy5yaXZlci5TbGFzaENvbW1hbmQSGQoMZGlzcGxheV9uYW1lGAcgASgJSASIAQESEgoFbW90dG8YCCABKAlIBYgBARInCgxjYXBhYmlsaXRpZXMYCSADKAsyES5yaXZlci5DYXBhYmlsaXR5QgsKCV91c2VybmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX2ltYWdlX3VybEIPCg1fZXh0ZXJuYWxfdXJsQg8KDV9kaXNwbGF5X25hbWVCCAoGX21vdHRvSgQIBRAGUgphdmF0YXJfdXJsImsKGFVwZGF0ZUFwcE1ldGFkYXRhUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSKgoIbWV0YWRhdGEYAiABKAsyGC5yaXZlci5BcHBNZXRhZGF0YVVwZGF0ZRITCgt1cGRhdGVfbWFzaxgDIAMoCSIbChlVcGRhdGVBcHBNZXRhZGF0YVJlc3BvbnNlIicKFUdldEFwcE1ldGFkYXRhUmVxdWVzdBIOCgZhcHBfaWQYASABKAwiPgoWR2V0QXBwTWV0YWRhdGFSZXNwb25zZRIkCghtZXRhZGF0YRgBIAEoCzISLnJpdmVyLkFwcE1ldGFkYXRhIioKFlZhbGlkYXRlQm90TmFtZVJlcXVlc3QSEAoIdXNlcm5hbWUYASABKAkiRgoXVmFsaWRhdGVCb3ROYW1lUmVzcG9uc2USFAoMaXNfYXZhaWxhYmxlGAEgASgIEhUKDWVycm9yX21lc3NhZ2UYAiABKAkiOwoZU2V0QXBwQWN0aXZlU3RhdHVzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSDgoGYWN0aXZlGAIgASgIIhwKGlNldEFwcEFjdGl2ZVN0YXR1c1Jlc3BvbnNlIj8KG1NldEFwcFByb21vdGVkU3RhdHVzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSEAoIcHJvbW90ZWQYAiABKAgiHgocU2V0QXBwUHJvbW90ZWRTdGF0dXNSZXNwb25zZSI/ChtTZXRBcHBWZXJpZmllZFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhAKCHZlcmlmaWVkGAIgASgIIh4KHFNldEFwcFZlcmlmaWVkU3RhdHVzUmVzcG9uc2UiPAoSU2V0VXNlck5hbWVSZXF1ZXN0EhAKCHVzZXJuYW1lGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCSIVChNTZXRVc2VyTmFtZVJlc3BvbnNlIikKFEdldEVudGl0eU5hbWVSZXF1ZXN0EhEKCWVudGl0eV9pZBgBIAEoDCJUChVHZXRFbnRpdHlOYW1lUmVzcG9uc2USEAoIdXNlcm5hbWUYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEhMKC2VudGl0eV90eXBlGAMgASgFIjAKGkdldEJhdGNoRW50aXR5TmFtZXNSZXF1ZXN0EhIKCmVudGl0eV9pZHMYASADKAwiYAoORW50aXR5TmFtZUluZm8SEQoJZW50aXR5X2lkGAEgASgMEhAKCHVzZXJuYW1lGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRITCgtlbnRpdHlfdHlwZRgEIAEoBSJGChtHZXRCYXRjaEVudGl0eU5hbWVzUmVzcG9uc2USJwoIZW50aXRpZXMYASADKAsyFS5yaXZlci5FbnRpdHlOYW1lSW5mbyJCChdJbnZpdGVFbmNyeXB0aW9uU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhMKC3Nlc3Npb25fa2V5GAIgASgJIm4KFEludml0ZUVuY3J5cHRpb25EYXRhEhEKCXN0cmVhbV9pZBgBIAEoDBIRCglhbGdvcml0aG0YAiABKAkSMAoIc2Vzc2lvbnMYAyADKAsyHi5yaXZlci5JbnZpdGVFbmNyeXB0aW9uU2Vzc2lvbiK7AQoXQ3JlYXRlSW52aXRlTGlua1JlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEjsKFmludml0ZV9lbmNyeXB0aW9uX2RhdGEYAiABKAsyGy5yaXZlci5JbnZpdGVFbmNyeXB0aW9uRGF0YRI5ChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyGC5yaXZlci5DaGFubmVsUHJvcGVydGllc0gAiAEBQhUKE19jaGFubmVsX3Byb3BlcnRpZXMiLwoYQ3JlYXRlSW52aXRlTGlua1Jlc3BvbnNlEhMKC2ludml0ZV9jb2RlGAEgASgJIiwKF1Jldm9rZUludml0ZUxpbmtSZXF1ZXN0EhEKCXN0cmVhbV9pZBgBIAEoDCIaChhSZXZva2VJbnZpdGVMaW5rUmVzcG9uc2UiLgoXUmVkZWVtSW52aXRlTGlua1JlcXVlc3QSEwoLaW52aXRlX2NvZGUYASABKAki3QEKGFJlZGVlbUludml0ZUxpbmtSZXNwb25zZRIyCg5zaWduZWRfcGF5bG9hZBgBIAEoCzIaLnJpdmVyLkludml0ZVNpZ25lZFBheWxvYWQSOwoWaW52aXRlX2VuY3J5cHRpb25fZGF0YRgCIAEoCzIbLnJpdmVyLkludml0ZUVuY3J5cHRpb25EYXRhEjkKEmNoYW5uZWxfcHJvcGVydGllcxgDIAEoCzIYLnJpdmVyLkNoYW5uZWxQcm9wZXJ0aWVzSACIAQFCFQoTX2NoYW5uZWxfcHJvcGVydGllcyIpChRHZXRJbnZpdGVMaW5rUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwiewoVR2V0SW52aXRlTGlua1Jlc3BvbnNlEhgKC2ludml0ZV9jb2RlGAEgASgJSACIAQESIAoTY3JlYXRlZF9hdF9lcG9jaF9tcxgCIAEoA0gBiAEBQg4KDF9pbnZpdGVfY29kZUIWChRfY3JlYXRlZF9hdF9lcG9jaF9tcyI4Cg9BcHBJbnN0YWxsU3RhdHMSDgoGYXBwX2lkGAEgASgMEhUKDWluc3RhbGxfY291bnQYAiABKAUijQEKCUFwcFJldmlldxIKCgJpZBgBIAEoCRIOCgZhcHBfaWQYAiABKAwSGAoQcmV2aWV3ZXJfYWRkcmVzcxgDIAEoDBIOCgZyYXRpbmcYBCABKAUSDwoHY29tbWVudBgFIAEoCRIVCg1jcmVhdGVkX2F0X21zGAYgASgDEhIKCmlzX3Jldm9rZWQYByABKAgiaQoQQXBwUmV2aWV3U3VtbWFyeRIOCgZhcHBfaWQYASABKAwSFQoNdG90YWxfcmV2aWV3cxgCIAEoBRIWCg5hY3RpdmVfcmV2aWV3cxgDIAEoBRIWCg5hdmVyYWdlX3JhdGluZxgEIAEoAiLvAQoLQXBwSW5mb0Z1bGwSDgoGYXBwX2lkGAEgASgMEg0KBW93bmVyGAIgASgMEiQKCG1ldGFkYXRhGAMgASgLMhIucml2ZXIuQXBwTWV0YWRhdGESLQoNaW5zdGFsbF9zdGF0cxgEIAEoCzIWLnJpdmVyLkFwcEluc3RhbGxTdGF0cxIvCg5yZXZpZXdfc3VtbWFyeRgFIAEoCzIXLnJpdmVyLkFwcFJldmlld1N1bW1hcnkSEQoJaXNfYWN0aXZlGAYgASgIEhMKC2lzX3Byb21vdGVkGAcgASgIEhMKC2lzX3ZlcmlmaWVkGAggASgIIuYBChlMaXN0UmVnaXN0ZXJlZEFwcHNSZXF1ZXN0Eg0KBWxpbWl0GAEgASgFEg4KBm9mZnNldBgCIAEoBRITCgthY3RpdmVfb25seRgDIAEoCBIaCg1vd25lcl9hZGRyZXNzGAQgASgMSACIAQESFgoJc3RyZWFtX2lkGAUgASgMSAGIAQESFQoNcHJvbW90ZWRfb25seRgGIAEoCBIZCgxzZWFyY2hfcXVlcnkYByABKAlIAogBAUIQCg5fb3duZXJfYWRkcmVzc0IMCgpfc3RyZWFtX2lkQg8KDV9zZWFyY2hfcXVlcnkiUwoaTGlzdFJlZ2lzdGVyZWRBcHBzUmVzcG9uc2USIAoEYXBwcxgBIAMoCzISLnJpdmVyLkFwcEluZm9GdWxsEhMKC3RvdGFsX2NvdW50GAIgASgFIigKFUdldEJ1bGtBcHBEYXRhUmVxdWVzdBIPCgdhcHBfaWRzGAEgAygMIjoKFkdldEJ1bGtBcHBEYXRhUmVzcG9uc2USIAoEYXBwcxgBIAMoCzISLnJpdmVyLkFwcEluZm9GdWxsIisKGUdldEFwcEluc3RhbGxTdGF0c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIkMKGkdldEFwcEluc3RhbGxTdGF0c1Jlc3BvbnNlEiUKBXN0YXRzGAEgASgLMhYucml2ZXIuQXBwSW5zdGFsbFN0YXRzIjAKHUdldEJ1bGtBcHBJbnN0YWxsU3RhdHNSZXF1ZXN0Eg8KB2FwcF9pZHMYASADKAwiRwoeR2V0QnVsa0FwcEluc3RhbGxTdGF0c1Jlc3BvbnNlEiUKBXN0YXRzGAEgAygLMhYucml2ZXIuQXBwSW5zdGFsbFN0YXRzIkkKFlN1Ym1pdEFwcFJldmlld1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEg4KBnJhdGluZxgCIAEoBRIPCgdjb21tZW50GAMgASgJIiwKF1N1Ym1pdEFwcFJldmlld1Jlc3BvbnNlEhEKCXJldmlld19pZBgBIAEoCSJFChRHZXRBcHBSZXZpZXdzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSDQoFbGltaXQYAiABKAUSDgoGb2Zmc2V0GAMgASgFIk8KFUdldEFwcFJldmlld3NSZXNwb25zZRIhCgdyZXZpZXdzGAEgAygLMhAucml2ZXIuQXBwUmV2aWV3EhMKC3RvdGFsX2NvdW50GAIgASgFIigKFlJldm9rZUFwcFJldmlld1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIhkKF1Jldm9rZUFwcFJldmlld1Jlc3BvbnNlIiwKGkdldEFwcFJldmlld1N1bW1hcnlSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCJHChtHZXRBcHBSZXZpZXdTdW1tYXJ5UmVzcG9uc2USKAoHc3VtbWFyeRgBIAEoCzIXLnJpdmVyLkFwcFJldmlld1N1bW1hcnkiMwogR2V0QnVsa0FwcFJldmlld1N1bW1hcmllc1JlcXVlc3QSDwoHYXBwX2lkcxgBIAMoDCJPCiFHZXRCdWxrQXBwUmV2aWV3U3VtbWFyaWVzUmVzcG9uc2USKgoJc3VtbWFyaWVzGAEgAygLMhcucml2ZXIuQXBwUmV2aWV3U3VtbWFyeSIoChZHZXRBcHBQb3NpdGlvbnNSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCJWChdHZXRBcHBQb3NpdGlvbnNSZXNwb25zZRIOCgZhcHBfaWQYASABKAwSKwoJcG9zaXRpb25zGAIgASgLMhgucml2ZXIuUG9zaXRpb25zUmVzcG9uc2UiLgobR2V0QmF0Y2hBcHBQb3NpdGlvbnNSZXF1ZXN0Eg8KB2FwcF9pZHMYASADKAwiSQocR2V0QmF0Y2hBcHBQb3NpdGlvbnNSZXNwb25zZRIpCgdlbnRyaWVzGAEgAygLMhgucml2ZXIuQXBwUG9zaXRpb25zRW50cnkibgoRQXBwUG9zaXRpb25zRW50cnkSDgoGYXBwX2lkGAEgASgMEisKCXBvc2l0aW9ucxgCIAEoCzIYLnJpdmVyLlBvc2l0aW9uc1Jlc3BvbnNlEhIKBWVycm9yGAMgASgJSACIAQFCCAoGX2Vycm9yIjQKH0dldEJ1bGtBZ2VudENhcGFiaWxpdGllc1JlcXVlc3QSEQoJYWdlbnRfaWRzGAEgAygMIlAKIEdldEJ1bGtBZ2VudENhcGFiaWxpdGllc1Jlc3BvbnNlEiwKCW1hbmlmZXN0cxgBIAMoCzIZLnJpdmVyLkNhcGFiaWxpdHlNYW5pZmVzdCKdAQocR2V0QnVsa0FnZW50UHJvcG9zYWxzUmVxdWVzdBIcChRjb252ZXJzYXRpb25fc2VlZF9pZBgBIAEoCRI3CghyZXF1ZXN0cxgCIAMoCzIlLnJpdmVyLlNwZWNpYWxpc3RDYXBhYmlsaXR5SW52b2NhdGlvbhIXCgp0aW1lb3V0X21zGAMgASgFSACIAQFCDQoLX3RpbWVvdXRfbXMiMQodR2V0QnVsa0FnZW50UHJvcG9zYWxzUmVzcG9uc2USEAoIYWNjZXB0ZWQYASABKAgicgoVUXVlcnlDb25jaWVyZ2VSZXF1ZXN0Eg0KBXF1ZXJ5GAEgASgJEhMKBnNvdXJjZRgCIAEoCUgAiAEBEhkKDGV4dGVybmFsX3JlZhgDIAEoCUgBiAEBQgkKB19zb3VyY2VCDwoNX2V4dGVybmFsX3JlZiI2ChZRdWVyeUNvbmNpZXJnZVJlc3BvbnNlEhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJIi0KGkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0Eg8KB3NlZWRfaWQYASABKAkiowEKG0dldENvbnZlcnNhdGlvblNlZWRSZXNwb25zZRIlCgRzZWVkGAEgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZBItCgZzdGF0dXMYAiABKA4yHS5yaXZlci5Db252ZXJzYXRpb25TZWVkU3RhdHVzEi4KD3Byb3Bvc2FsX3N0YXR1cxgDIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIooBChtTdWJtaXRBZ2VudFByb3Bvc2Fsc1JlcXVlc3QSHAoUY29udmVyc2F0aW9uX3NlZWRfaWQYASABKAkSIgoJcHJvcG9zYWxzGAIgAygLMg8ucml2ZXIuUHJvcG9zYWwSKQoGZXJyb3JzGAMgAygLMhkucml2ZXIuQWdlbnRQcm9wb3NhbEVycm9yIh4KHFN1Ym1pdEFnZW50UHJvcG9zYWxzUmVzcG9uc2UikQEKHUZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhUKDXJlc3BvbnNlX3RleHQYAiABKAkSHQoVc2VsZWN0ZWRfcHJvcG9zYWxfaWRzGAMgAygJEhwKFGNsYXJpZnlpbmdfcXVlc3Rpb25zGAQgAygJIiAKHkZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXNwb25zZSqpAQoTRm9yd2FyZFNldHRpbmdWYWx1ZRIfChtGT1JXQVJEX1NFVFRJTkdfVU5TUEVDSUZJRUQQABIgChxGT1JXQVJEX1NFVFRJTkdfQUxMX01FU1NBR0VTEAESLgoqRk9SV0FSRF9TRVRUSU5HX01FTlRJT05TX1JFUExJRVNfUkVBQ1RJT05TEAISHwobRk9SV0FSRF9TRVRUSU5HX05PX01FU1NBR0VTEAMqSgoMU3VwcG9ydGVkQXBpEh0KGVNVUFBPUlRFRF9BUElfVU5TUEVDSUZJRUQQABIbChdTVVBQT1JURURfQVBJX1BPU0lUSU9OUxABKmgKDFBvc2l0aW9uVHlwZRIdChlQT1NJVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXUE9TSVRJT05fVFlQRV9QRVJQRVRVQUwQARIcChhQT1NJVElPTl9UWVBFX1BSRURJQ1RJT04QAjLZGQoSQXBwUmVnaXN0cnlTZXJ2aWNlEjsKCFJlZ2lzdGVyEhYucml2ZXIuUmVnaXN0ZXJSZXF1ZXN0Ghcucml2ZXIuUmVnaXN0ZXJSZXNwb25zZRJQCg9SZWdpc3RlcldlYmhvb2sSHS5yaXZlci5SZWdpc3RlcldlYmhvb2tSZXF1ZXN0Gh4ucml2ZXIuUmVnaXN0ZXJXZWJob29rUmVzcG9uc2USPgoJR2V0U3RhdHVzEhcucml2ZXIuR2V0U3RhdHVzUmVxdWVzdBoYLnJpdmVyLkdldFN0YXR1c1Jlc3BvbnNlEk0KDlNldEFwcFNldHRpbmdzEhwucml2ZXIuU2V0QXBwU2V0dGluZ3NSZXF1ZXN0Gh0ucml2ZXIuU2V0QXBwU2V0dGluZ3NSZXNwb25zZRJWChFVcGRhdGVBcHBTZXR0aW5ncxIfLnJpdmVyLlVwZGF0ZUFwcFNldHRpbmdzUmVxdWVzdBogLnJpdmVyLlVwZGF0ZUFwcFNldHRpbmdzUmVzcG9uc2USTQoOR2V0QXBwU2V0dGluZ3MSHC5yaXZlci5HZXRBcHBTZXR0aW5nc1JlcXVlc3QaHS5yaXZlci5HZXRBcHBTZXR0aW5nc1Jlc3BvbnNlElYKEVVwZGF0ZUFwcE1ldGFkYXRhEh8ucml2ZXIuVXBkYXRlQXBwTWV0YWRhdGFSZXF1ZXN0GiAucml2ZXIuVXBkYXRlQXBwTWV0YWRhdGFSZXNwb25zZRJNCg5HZXRBcHBNZXRhZGF0YRIcLnJpdmVyLkdldEFwcE1ldGFkYXRhUmVxdWVzdBodLnJpdmVyLkdldEFwcE1ldGFkYXRhUmVzcG9uc2USRwoMUm90YXRlU2VjcmV0Ehoucml2ZXIuUm90YXRlU2VjcmV0UmVxdWVzdBobLnJpdmVyLlJvdGF0ZVNlY3JldFJlc3BvbnNlEkEKCkdldFNlc3Npb24SGC5yaXZlci5HZXRTZXNzaW9uUmVxdWVzdBoZLnJpdmVyLkdldFNlc3Npb25SZXNwb25zZRJQCg9WYWxpZGF0ZUJvdE5hbWUSHS5yaXZlci5WYWxpZGF0ZUJvdE5hbWVSZXF1ZXN0Gh4ucml2ZXIuVmFsaWRhdGVCb3ROYW1lUmVzcG9uc2USWQoSU2V0QXBwQWN0aXZlU3RhdHVzEiAucml2ZXIuU2V0QXBwQWN0aXZlU3RhdHVzUmVxdWVzdBohLnJpdmVyLlNldEFwcEFjdGl2ZVN0YXR1c1Jlc3BvbnNlEl8KFFNldEFwcFByb21vdGVkU3RhdHVzEiIucml2ZXIuU2V0QXBwUHJvbW90ZWRTdGF0dXNSZXF1ZXN0GiMucml2ZXIuU2V0QXBwUHJvbW90ZWRTdGF0dXNSZXNwb25zZRJfChRTZXRBcHBWZXJpZmllZFN0YXR1cxIiLnJpdmVyLlNldEFwcFZlcmlmaWVkU3RhdHVzUmVxdWVzdBojLnJpdmVyLlNldEFwcFZlcmlmaWVkU3RhdHVzUmVzcG9uc2USRAoLU2V0VXNlck5hbWUSGS5yaXZlci5TZXRVc2VyTmFtZVJlcXVlc3QaGi5yaXZlci5TZXRVc2VyTmFtZVJlc3BvbnNlEkoKDUdldEVudGl0eU5hbWUSGy5yaXZlci5HZXRFbnRpdHlOYW1lUmVxdWVzdBocLnJpdmVyLkdldEVudGl0eU5hbWVSZXNwb25zZRJcChNHZXRCYXRjaEVudGl0eU5hbWVzEiEucml2ZXIuR2V0QmF0Y2hFbnRpdHlOYW1lc1JlcXVlc3QaIi5yaXZlci5HZXRCYXRjaEVudGl0eU5hbWVzUmVzcG9uc2USUwoQQ3JlYXRlSW52aXRlTGluaxIeLnJpdmVyLkNyZWF0ZUludml0ZUxpbmtSZXF1ZXN0Gh8ucml2ZXIuQ3JlYXRlSW52aXRlTGlua1Jlc3BvbnNlElMKEFJldm9rZUludml0ZUxpbmsSHi5yaXZlci5SZXZva2VJbnZpdGVMaW5rUmVxdWVzdBofLnJpdmVyLlJldm9rZUludml0ZUxpbmtSZXNwb25zZRJTChBSZWRlZW1JbnZpdGVMaW5rEh4ucml2ZXIuUmVkZWVtSW52aXRlTGlua1JlcXVlc3QaHy5yaXZlci5SZWRlZW1JbnZpdGVMaW5rUmVzcG9uc2USSgoNR2V0SW52aXRlTGluaxIbLnJpdmVyLkdldEludml0ZUxpbmtSZXF1ZXN0Ghwucml2ZXIuR2V0SW52aXRlTGlua1Jlc3BvbnNlElkKEkxpc3RSZWdpc3RlcmVkQXBwcxIgLnJpdmVyLkxpc3RSZWdpc3RlcmVkQXBwc1JlcXVlc3QaIS5yaXZlci5MaXN0UmVnaXN0ZXJlZEFwcHNSZXNwb25zZRJNCg5HZXRCdWxrQXBwRGF0YRIcLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVxdWVzdBodLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVzcG9uc2USWQoSR2V0QXBwSW5zdGFsbFN0YXRzEiAucml2ZXIuR2V0QXBwSW5zdGFsbFN0YXRzUmVxdWVzdBohLnJpdmVyLkdldEFwcEluc3RhbGxTdGF0c1Jlc3BvbnNlEmUKFkdldEJ1bGtBcHBJbnN0YWxsU3RhdHMSJC5yaXZlci5HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVxdWVzdBolLnJpdmVyLkdldEJ1bGtBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRJQCg9TdWJtaXRBcHBSZXZpZXcSHS5yaXZlci5TdWJtaXRBcHBSZXZpZXdSZXF1ZXN0Gh4ucml2ZXIuU3VibWl0QXBwUmV2aWV3UmVzcG9uc2USSgoNR2V0QXBwUmV2aWV3cxIbLnJpdmVyLkdldEFwcFJldmlld3NSZXF1ZXN0Ghwucml2ZXIuR2V0QXBwUmV2aWV3c1Jlc3BvbnNlElAKD1Jldm9rZUFwcFJldmlldxIdLnJpdmVyLlJldm9rZUFwcFJldmlld1JlcXVlc3QaHi5yaXZlci5SZXZva2VBcHBSZXZpZXdSZXNwb25zZRJcChNHZXRBcHBSZXZpZXdTdW1tYXJ5EiEucml2ZXIuR2V0QXBwUmV2aWV3U3VtbWFyeVJlcXVlc3QaIi5yaXZlci5HZXRBcHBSZXZpZXdTdW1tYXJ5UmVzcG9uc2USbgoZR2V0QnVsa0FwcFJldmlld1N1bW1hcmllcxInLnJpdmVyLkdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXF1ZXN0Gigucml2ZXIuR2V0QnVsa0FwcFJldmlld1N1bW1hcmllc1Jlc3BvbnNlElAKD0dldEFwcFBvc2l0aW9ucxIdLnJpdmVyLkdldEFwcFBvc2l0aW9uc1JlcXVlc3QaHi5yaXZlci5HZXRBcHBQb3NpdGlvbnNSZXNwb25zZRJfChRHZXRCYXRjaEFwcFBvc2l0aW9ucxIiLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVxdWVzdBojLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVzcG9uc2USawoYR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzEiYucml2ZXIuR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzUmVxdWVzdBonLnJpdmVyLkdldEJ1bGtBZ2VudENhcGFiaWxpdGllc1Jlc3BvbnNlEmIKFUdldEJ1bGtBZ2VudFByb3Bvc2FscxIjLnJpdmVyLkdldEJ1bGtBZ2VudFByb3Bvc2Fsc1JlcXVlc3QaJC5yaXZlci5HZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXNwb25zZRJNCg5RdWVyeUNvbmNpZXJnZRIcLnJpdmVyLlF1ZXJ5Q29uY2llcmdlUmVxdWVzdBodLnJpdmVyLlF1ZXJ5Q29uY2llcmdlUmVzcG9uc2USXAoTR2V0Q29udmVyc2F0aW9uU2VlZBIhLnJpdmVyLkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0GiIucml2ZXIuR2V0Q29udmVyc2F0aW9uU2VlZFJlc3BvbnNlEl8KFFN1Ym1pdEFnZW50UHJvcG9zYWxzEiIucml2ZXIuU3VibWl0QWdlbnRQcm9wb3NhbHNSZXF1ZXN0GiMucml2ZXIuU3VibWl0QWdlbnRQcm9wb3NhbHNSZXNwb25zZRJlChZGaW5pc2hDb252ZXJzYXRpb25TZWVkEiQucml2ZXIuRmluaXNoQ29udmVyc2F0aW9uU2VlZFJlcXVlc3QaJS5yaXZlci5GaW5pc2hDb252ZXJzYXRpb25TZWVkUmVzcG9uc2VCNFoyZ2l0aHViLmNvbS90b3ducy1wcm90b2NvbC90b3ducy9jb3JlL25vZGUvcHJvdG9jb2xiBnByb3RvMw", [import_wkt3.file_google_protobuf_empty, file_payloads, file_protocol]);
|
|
7780
|
+
var file_apps = /* @__PURE__ */ (0, import_codegenv23.fileDesc)("CgphcHBzLnByb3RvEgVyaXZlciKFAQoLQXBwU2V0dGluZ3MSMwoPZm9yd2FyZF9zZXR0aW5nGAEgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZRIUCgh0cmFkYWJsZRgCIAEoCEICGAESKwoOc3VwcG9ydGVkX2FwaXMYAyADKA4yEy5yaXZlci5TdXBwb3J0ZWRBcGkigwEKD1JlZ2lzdGVyUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSFAoMYXBwX293bmVyX2lkGAIgASgMEiQKCHNldHRpbmdzGAMgASgLMhIucml2ZXIuQXBwU2V0dGluZ3MSJAoIbWV0YWRhdGEYBCABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIvChBSZWdpc3RlclJlc3BvbnNlEhsKE2hzMjU2X3NoYXJlZF9zZWNyZXQYASABKAwiPQoWUmVnaXN0ZXJXZWJob29rUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSEwoLd2ViaG9va191cmwYAiABKAkiGQoXUmVnaXN0ZXJXZWJob29rUmVzcG9uc2UiTQoVU2V0QXBwU2V0dGluZ3NSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIkCghzZXR0aW5ncxgCIAEoCzISLnJpdmVyLkFwcFNldHRpbmdzIhgKFlNldEFwcFNldHRpbmdzUmVzcG9uc2UiugEKGFVwZGF0ZUFwcFNldHRpbmdzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSOAoPZm9yd2FyZF9zZXR0aW5nGAIgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZUgAiAEBEisKDnN1cHBvcnRlZF9hcGlzGAMgAygOMhMucml2ZXIuU3VwcG9ydGVkQXBpEhMKC3VwZGF0ZV9tYXNrGAQgAygJQhIKEF9mb3J3YXJkX3NldHRpbmciGwoZVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZSInChVHZXRBcHBTZXR0aW5nc1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMImgKFkdldEFwcFNldHRpbmdzUmVzcG9uc2USJAoIc2V0dGluZ3MYASABKAsyEi5yaXZlci5BcHBTZXR0aW5ncxIYCgt3ZWJob29rX3VybBgCIAEoCUgAiAEBQg4KDF93ZWJob29rX3VybCIlChNSb3RhdGVTZWNyZXRSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCIzChRSb3RhdGVTZWNyZXRSZXNwb25zZRIbChNoczI1Nl9zaGFyZWRfc2VjcmV0GAEgASgMIiIKEEdldFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIowBChFHZXRTdGF0dXNSZXNwb25zZRIVCg1pc19yZWdpc3RlcmVkGAEgASgIEhYKDnZhbGlkX3Jlc3BvbnNlGAIgASgIEjgKBnN0YXR1cxgDIAEoCzIoLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5TdGF0dXNSZXNwb25zZRIOCgZhY3RpdmUYBCABKAgiXAoRR2V0U2Vzc2lvblJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhQKCnNlc3Npb25faWQYAiABKAlIABITCglzdHJlYW1faWQYAyABKAxIAEIMCgppZGVudGlmaWVyIkgKEkdldFNlc3Npb25SZXNwb25zZRIyChlncm91cF9lbmNyeXB0aW9uX3Nlc3Npb25zGAEgASgLMg8ucml2ZXIuRW52ZWxvcGUiugIKDEV2ZW50UGF5bG9hZBIwCghtZXNzYWdlcxgBIAEoCzIcLnJpdmVyLkV2ZW50UGF5bG9hZC5NZXNzYWdlc0gAEjcKDHNvbGljaXRhdGlvbhgCIAEoCzIfLnJpdmVyLkV2ZW50UGF5bG9hZC5Tb2xpY2l0S2V5c0gAGn0KCE1lc3NhZ2VzEhEKCXN0cmVhbV9pZBgBIAEoDBIhCghtZXNzYWdlcxgCIAMoCzIPLnJpdmVyLkVudmVsb3BlEjsKImdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnNfbWVzc2FnZXMYAyADKAsyDy5yaXZlci5FbnZlbG9wZRo1CgtTb2xpY2l0S2V5cxIRCglzdHJlYW1faWQYASABKAwSEwoLc2Vzc2lvbl9pZHMYAiADKAlCCQoHcGF5bG9hZCI0Cg1FdmVudHNQYXlsb2FkEiMKBmV2ZW50cxgBIAMoCzITLnJpdmVyLkV2ZW50UGF5bG9hZCLaBgoRQXBwU2VydmljZVJlcXVlc3QSLAoKaW5pdGlhbGl6ZRhlIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEigKBnN0YXR1cxhmIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEiYKBmV2ZW50cxhnIAEoCzIULnJpdmVyLkV2ZW50c1BheWxvYWRIABIsCglwb3NpdGlvbnMYaCABKAsyFy5yaXZlci5Qb3NpdGlvbnNSZXF1ZXN0SAASPgoJcHJvcG9zYWxzGGkgASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuUHJvcG9zYWxzUmVxdWVzdEgAEkYKEWNvbmNpZXJnZV9yZXF1ZXN0GGogASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuQ29uY2llcmdlUmVxdWVzdEgAGsoBChBQcm9wb3NhbHNSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhIKCnVzZXJfcXVlcnkYAiABKAkSFAoHY29udGV4dBgDIAEoCUgAiAEBEjoKC2ludm9jYXRpb25zGAQgAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEhcKCnRpbWVvdXRfbXMYBSABKAVIAYgBAUIKCghfY29udGV4dEINCgtfdGltZW91dF9tcxq2AgoQQ29uY2llcmdlUmVxdWVzdBIcChRjb252ZXJzYXRpb25fc2VlZF9pZBgBIAEoCRISCgp1c2VyX3F1ZXJ5GAIgASgJEhQKB2NvbnRleHQYAyABKAlIAIgBARIZCgxleHRlcm5hbF9yZWYYBCABKAlIAYgBARIgChNwcm9wb3NhbF90aW1lb3V0X21zGAUgASgDSAKIAQESIQoUY29uY2llcmdlX3RpbWVvdXRfbXMYBiABKANIA4gBARIaCg11c2VyX3RpbWV6b25lGAcgASgJSASIAQFCCgoIX2NvbnRleHRCDwoNX2V4dGVybmFsX3JlZkIWChRfcHJvcG9zYWxfdGltZW91dF9tc0IXChVfY29uY2llcmdlX3RpbWVvdXRfbXNCEAoOX3VzZXJfdGltZXpvbmVCCQoHcGF5bG9hZCKPBQoSQXBwU2VydmljZVJlc3BvbnNlEkIKCmluaXRpYWxpemUYZSABKAsyLC5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuSW5pdGlhbGl6ZVJlc3BvbnNlSAASOgoGc3RhdHVzGGYgASgLMigucml2ZXIuQXBwU2VydmljZVJlc3BvbnNlLlN0YXR1c1Jlc3BvbnNlSAASLQoJcG9zaXRpb25zGGcgASgLMhgucml2ZXIuUG9zaXRpb25zUmVzcG9uc2VIABJACglwcm9wb3NhbHMYaCABKAsyKy5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuUHJvcG9zYWxzUmVzcG9uc2VIABJJChJjb25jaWVyZ2VfcmVzcG9uc2UYaSABKAsyKy5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuQ29uY2llcmdlUmVzcG9uc2VIABpcChJJbml0aWFsaXplUmVzcG9uc2USRgoRZW5jcnlwdGlvbl9kZXZpY2UYASABKAsyKy5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkVuY3J5cHRpb25EZXZpY2UahQEKDlN0YXR1c1Jlc3BvbnNlEhkKEWZyYW1ld29ya192ZXJzaW9uGAEgASgFEhIKCmRldmljZV9rZXkYAiABKAkSFAoMZmFsbGJhY2tfa2V5GAMgASgJEhsKDmNsaWVudF92ZXJzaW9uGAQgASgJSACIAQFCEQoPX2NsaWVudF92ZXJzaW9uGiUKEVByb3Bvc2Fsc1Jlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIGiUKEUNvbmNpZXJnZVJlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIQgkKB3BheWxvYWQi8AEKCFBvc2l0aW9uEg0KBWxhYmVsGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESDgoGc3ltYm9sGAMgASgJEiEKBHR5cGUYBCABKA4yEy5yaXZlci5Qb3NpdGlvblR5cGUSEwoLYmFsYW5jZV91c2QYBSABKAkSDwoHcG5sX3VzZBgGIAEoCRIVCghjaGFpbl9pZBgHIAEoBEgBiAEBEhsKDm5hdGl2ZV9iYWxhbmNlGAggASgJSAKIAQFCDgoMX2Rlc2NyaXB0aW9uQgsKCV9jaGFpbl9pZEIRCg9fbmF0aXZlX2JhbGFuY2UiIwoQUG9zaXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgMInsKEVBvc2l0aW9uc1Jlc3BvbnNlEhEKCXN1cHBvcnRlZBgBIAEoCBISCgVlcnJvchgCIAEoCUgAiAEBEiIKCXBvc2l0aW9ucxgDIAMoCzIPLnJpdmVyLlBvc2l0aW9uEhEKCXRpbWVzdGFtcBgEIAEoA0IICgZfZXJyb3IiMQoMU2xhc2hDb21tYW5kEgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkiOwoRQ2FwYWJpbGl0eUV4YW1wbGUSEgoKdXNlcl9xdWVyeRgBIAEoCRISCgpwYXJhbWV0ZXJzGAIgASgJInEKCkNhcGFiaWxpdHkSDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIUCgxpbnB1dF9zY2hlbWEYAyABKAkSKgoIZXhhbXBsZXMYBCADKAsyGC5yaXZlci5DYXBhYmlsaXR5RXhhbXBsZSKPAQoSQ2FwYWJpbGl0eU1hbmlmZXN0EhAKCGFnZW50X2lkGAEgASgMEhIKCmFnZW50X25hbWUYAiABKAkSGQoRYWdlbnRfZGVzY3JpcHRpb24YAyABKAkSJwoMY2FwYWJpbGl0aWVzGAQgAygLMhEucml2ZXIuQ2FwYWJpbGl0eRIPCgd2ZXJzaW9uGAUgASgJIoACCgtBcHBNZXRhZGF0YRIQCgh1c2VybmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIRCglpbWFnZV91cmwYAyABKAkSGQoMZXh0ZXJuYWxfdXJsGAQgASgJSACIAQESKwoOc2xhc2hfY29tbWFuZHMYBiADKAsyEy5yaXZlci5TbGFzaENvbW1hbmQSFAoMZGlzcGxheV9uYW1lGAcgASgJEg0KBW1vdHRvGAggASgJEicKDGNhcGFiaWxpdGllcxgJIAMoCzIRLnJpdmVyLkNhcGFiaWxpdHlCDwoNX2V4dGVybmFsX3VybEoECAUQBlIKYXZhdGFyX3VybCLlAgoRQXBwTWV0YWRhdGFVcGRhdGUSFQoIdXNlcm5hbWUYASABKAlIAIgBARIYCgtkZXNjcmlwdGlvbhgCIAEoCUgBiAEBEhYKCWltYWdlX3VybBgDIAEoCUgCiAEBEhkKDGV4dGVybmFsX3VybBgEIAEoCUgDiAEBEisKDnNsYXNoX2NvbW1hbmRzGAYgAygLMhMucml2ZXIuU2xhc2hDb21tYW5kEhkKDGRpc3BsYXlfbmFtZRgHIAEoCUgEiAEBEhIKBW1vdHRvGAggASgJSAWIAQESJwoMY2FwYWJpbGl0aWVzGAkgAygLMhEucml2ZXIuQ2FwYWJpbGl0eUILCglfdXNlcm5hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9pbWFnZV91cmxCDwoNX2V4dGVybmFsX3VybEIPCg1fZGlzcGxheV9uYW1lQggKBl9tb3R0b0oECAUQBlIKYXZhdGFyX3VybCJrChhVcGRhdGVBcHBNZXRhZGF0YVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEioKCG1ldGFkYXRhGAIgASgLMhgucml2ZXIuQXBwTWV0YWRhdGFVcGRhdGUSEwoLdXBkYXRlX21hc2sYAyADKAkiGwoZVXBkYXRlQXBwTWV0YWRhdGFSZXNwb25zZSInChVHZXRBcHBNZXRhZGF0YVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMIj4KFkdldEFwcE1ldGFkYXRhUmVzcG9uc2USJAoIbWV0YWRhdGEYASABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIqChZWYWxpZGF0ZUJvdE5hbWVSZXF1ZXN0EhAKCHVzZXJuYW1lGAEgASgJIkYKF1ZhbGlkYXRlQm90TmFtZVJlc3BvbnNlEhQKDGlzX2F2YWlsYWJsZRgBIAEoCBIVCg1lcnJvcl9tZXNzYWdlGAIgASgJIjsKGVNldEFwcEFjdGl2ZVN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEg4KBmFjdGl2ZRgCIAEoCCIcChpTZXRBcHBBY3RpdmVTdGF0dXNSZXNwb25zZSI/ChtTZXRBcHBQcm9tb3RlZFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhAKCHByb21vdGVkGAIgASgIIh4KHFNldEFwcFByb21vdGVkU3RhdHVzUmVzcG9uc2UiPwobU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIQCgh2ZXJpZmllZBgCIAEoCCIeChxTZXRBcHBWZXJpZmllZFN0YXR1c1Jlc3BvbnNlIjwKElNldFVzZXJOYW1lUmVxdWVzdBIQCgh1c2VybmFtZRgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkiFQoTU2V0VXNlck5hbWVSZXNwb25zZSIpChRHZXRFbnRpdHlOYW1lUmVxdWVzdBIRCgllbnRpdHlfaWQYASABKAwiVAoVR2V0RW50aXR5TmFtZVJlc3BvbnNlEhAKCHVzZXJuYW1lGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCRITCgtlbnRpdHlfdHlwZRgDIAEoBSIwChpHZXRCYXRjaEVudGl0eU5hbWVzUmVxdWVzdBISCgplbnRpdHlfaWRzGAEgAygMImAKDkVudGl0eU5hbWVJbmZvEhEKCWVudGl0eV9pZBgBIAEoDBIQCgh1c2VybmFtZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSEwoLZW50aXR5X3R5cGUYBCABKAUiRgobR2V0QmF0Y2hFbnRpdHlOYW1lc1Jlc3BvbnNlEicKCGVudGl0aWVzGAEgAygLMhUucml2ZXIuRW50aXR5TmFtZUluZm8iQgoXSW52aXRlRW5jcnlwdGlvblNlc3Npb24SEgoKc2Vzc2lvbl9pZBgBIAEoCRITCgtzZXNzaW9uX2tleRgCIAEoCSJuChRJbnZpdGVFbmNyeXB0aW9uRGF0YRIRCglzdHJlYW1faWQYASABKAwSEQoJYWxnb3JpdGhtGAIgASgJEjAKCHNlc3Npb25zGAMgAygLMh4ucml2ZXIuSW52aXRlRW5jcnlwdGlvblNlc3Npb24iuwEKF0NyZWF0ZUludml0ZUxpbmtSZXF1ZXN0EhEKCXN0cmVhbV9pZBgBIAEoDBI7ChZpbnZpdGVfZW5jcnlwdGlvbl9kYXRhGAIgASgLMhsucml2ZXIuSW52aXRlRW5jcnlwdGlvbkRhdGESOQoSY2hhbm5lbF9wcm9wZXJ0aWVzGAMgASgLMhgucml2ZXIuQ2hhbm5lbFByb3BlcnRpZXNIAIgBAUIVChNfY2hhbm5lbF9wcm9wZXJ0aWVzIi8KGENyZWF0ZUludml0ZUxpbmtSZXNwb25zZRITCgtpbnZpdGVfY29kZRgBIAEoCSIsChdSZXZva2VJbnZpdGVMaW5rUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwiGgoYUmV2b2tlSW52aXRlTGlua1Jlc3BvbnNlIi4KF1JlZGVlbUludml0ZUxpbmtSZXF1ZXN0EhMKC2ludml0ZV9jb2RlGAEgASgJIt0BChhSZWRlZW1JbnZpdGVMaW5rUmVzcG9uc2USMgoOc2lnbmVkX3BheWxvYWQYASABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkEjsKFmludml0ZV9lbmNyeXB0aW9uX2RhdGEYAiABKAsyGy5yaXZlci5JbnZpdGVFbmNyeXB0aW9uRGF0YRI5ChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyGC5yaXZlci5DaGFubmVsUHJvcGVydGllc0gAiAEBQhUKE19jaGFubmVsX3Byb3BlcnRpZXMiKQoUR2V0SW52aXRlTGlua1JlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMInsKFUdldEludml0ZUxpbmtSZXNwb25zZRIYCgtpbnZpdGVfY29kZRgBIAEoCUgAiAEBEiAKE2NyZWF0ZWRfYXRfZXBvY2hfbXMYAiABKANIAYgBAUIOCgxfaW52aXRlX2NvZGVCFgoUX2NyZWF0ZWRfYXRfZXBvY2hfbXMiOAoPQXBwSW5zdGFsbFN0YXRzEg4KBmFwcF9pZBgBIAEoDBIVCg1pbnN0YWxsX2NvdW50GAIgASgFIo0BCglBcHBSZXZpZXcSCgoCaWQYASABKAkSDgoGYXBwX2lkGAIgASgMEhgKEHJldmlld2VyX2FkZHJlc3MYAyABKAwSDgoGcmF0aW5nGAQgASgFEg8KB2NvbW1lbnQYBSABKAkSFQoNY3JlYXRlZF9hdF9tcxgGIAEoAxISCgppc19yZXZva2VkGAcgASgIImkKEEFwcFJldmlld1N1bW1hcnkSDgoGYXBwX2lkGAEgASgMEhUKDXRvdGFsX3Jldmlld3MYAiABKAUSFgoOYWN0aXZlX3Jldmlld3MYAyABKAUSFgoOYXZlcmFnZV9yYXRpbmcYBCABKAIi7wEKC0FwcEluZm9GdWxsEg4KBmFwcF9pZBgBIAEoDBINCgVvd25lchgCIAEoDBIkCghtZXRhZGF0YRgDIAEoCzISLnJpdmVyLkFwcE1ldGFkYXRhEi0KDWluc3RhbGxfc3RhdHMYBCABKAsyFi5yaXZlci5BcHBJbnN0YWxsU3RhdHMSLwoOcmV2aWV3X3N1bW1hcnkYBSABKAsyFy5yaXZlci5BcHBSZXZpZXdTdW1tYXJ5EhEKCWlzX2FjdGl2ZRgGIAEoCBITCgtpc19wcm9tb3RlZBgHIAEoCBITCgtpc192ZXJpZmllZBgIIAEoCCLmAQoZTGlzdFJlZ2lzdGVyZWRBcHBzUmVxdWVzdBINCgVsaW1pdBgBIAEoBRIOCgZvZmZzZXQYAiABKAUSEwoLYWN0aXZlX29ubHkYAyABKAgSGgoNb3duZXJfYWRkcmVzcxgEIAEoDEgAiAEBEhYKCXN0cmVhbV9pZBgFIAEoDEgBiAEBEhUKDXByb21vdGVkX29ubHkYBiABKAgSGQoMc2VhcmNoX3F1ZXJ5GAcgASgJSAKIAQFCEAoOX293bmVyX2FkZHJlc3NCDAoKX3N0cmVhbV9pZEIPCg1fc2VhcmNoX3F1ZXJ5IlMKGkxpc3RSZWdpc3RlcmVkQXBwc1Jlc3BvbnNlEiAKBGFwcHMYASADKAsyEi5yaXZlci5BcHBJbmZvRnVsbBITCgt0b3RhbF9jb3VudBgCIAEoBSIoChVHZXRCdWxrQXBwRGF0YVJlcXVlc3QSDwoHYXBwX2lkcxgBIAMoDCI6ChZHZXRCdWxrQXBwRGF0YVJlc3BvbnNlEiAKBGFwcHMYASADKAsyEi5yaXZlci5BcHBJbmZvRnVsbCIrChlHZXRBcHBJbnN0YWxsU3RhdHNSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCJDChpHZXRBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRIlCgVzdGF0cxgBIAEoCzIWLnJpdmVyLkFwcEluc3RhbGxTdGF0cyIwCh1HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVxdWVzdBIPCgdhcHBfaWRzGAEgAygMIkcKHkdldEJ1bGtBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRIlCgVzdGF0cxgBIAMoCzIWLnJpdmVyLkFwcEluc3RhbGxTdGF0cyJJChZTdWJtaXRBcHBSZXZpZXdSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIOCgZyYXRpbmcYAiABKAUSDwoHY29tbWVudBgDIAEoCSIsChdTdWJtaXRBcHBSZXZpZXdSZXNwb25zZRIRCglyZXZpZXdfaWQYASABKAkiRQoUR2V0QXBwUmV2aWV3c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEg0KBWxpbWl0GAIgASgFEg4KBm9mZnNldBgDIAEoBSJPChVHZXRBcHBSZXZpZXdzUmVzcG9uc2USIQoHcmV2aWV3cxgBIAMoCzIQLnJpdmVyLkFwcFJldmlldxITCgt0b3RhbF9jb3VudBgCIAEoBSIoChZSZXZva2VBcHBSZXZpZXdSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCIZChdSZXZva2VBcHBSZXZpZXdSZXNwb25zZSIsChpHZXRBcHBSZXZpZXdTdW1tYXJ5UmVxdWVzdBIOCgZhcHBfaWQYASABKAwiRwobR2V0QXBwUmV2aWV3U3VtbWFyeVJlc3BvbnNlEigKB3N1bW1hcnkYASABKAsyFy5yaXZlci5BcHBSZXZpZXdTdW1tYXJ5IjMKIEdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXF1ZXN0Eg8KB2FwcF9pZHMYASADKAwiTwohR2V0QnVsa0FwcFJldmlld1N1bW1hcmllc1Jlc3BvbnNlEioKCXN1bW1hcmllcxgBIAMoCzIXLnJpdmVyLkFwcFJldmlld1N1bW1hcnkiKAoWR2V0QXBwUG9zaXRpb25zUmVxdWVzdBIOCgZhcHBfaWQYASABKAwiVgoXR2V0QXBwUG9zaXRpb25zUmVzcG9uc2USDgoGYXBwX2lkGAEgASgMEisKCXBvc2l0aW9ucxgCIAEoCzIYLnJpdmVyLlBvc2l0aW9uc1Jlc3BvbnNlIi4KG0dldEJhdGNoQXBwUG9zaXRpb25zUmVxdWVzdBIPCgdhcHBfaWRzGAEgAygMIkkKHEdldEJhdGNoQXBwUG9zaXRpb25zUmVzcG9uc2USKQoHZW50cmllcxgBIAMoCzIYLnJpdmVyLkFwcFBvc2l0aW9uc0VudHJ5Im4KEUFwcFBvc2l0aW9uc0VudHJ5Eg4KBmFwcF9pZBgBIAEoDBIrCglwb3NpdGlvbnMYAiABKAsyGC5yaXZlci5Qb3NpdGlvbnNSZXNwb25zZRISCgVlcnJvchgDIAEoCUgAiAEBQggKBl9lcnJvciI0Ch9HZXRCdWxrQWdlbnRDYXBhYmlsaXRpZXNSZXF1ZXN0EhEKCWFnZW50X2lkcxgBIAMoDCJQCiBHZXRCdWxrQWdlbnRDYXBhYmlsaXRpZXNSZXNwb25zZRIsCgltYW5pZmVzdHMYASADKAsyGS5yaXZlci5DYXBhYmlsaXR5TWFuaWZlc3QinQEKHEdldEJ1bGtBZ2VudFByb3Bvc2Fsc1JlcXVlc3QSHAoUY29udmVyc2F0aW9uX3NlZWRfaWQYASABKAkSNwoIcmVxdWVzdHMYAiADKAsyJS5yaXZlci5TcGVjaWFsaXN0Q2FwYWJpbGl0eUludm9jYXRpb24SFwoKdGltZW91dF9tcxgDIAEoBUgAiAEBQg0KC190aW1lb3V0X21zIjEKHUdldEJ1bGtBZ2VudFByb3Bvc2Fsc1Jlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIIqABChVRdWVyeUNvbmNpZXJnZVJlcXVlc3QSDQoFcXVlcnkYASABKAkSEwoGc291cmNlGAIgASgJSACIAQESGQoMZXh0ZXJuYWxfcmVmGAMgASgJSAGIAQESGgoNdXNlcl90aW1lem9uZRgEIAEoCUgCiAEBQgkKB19zb3VyY2VCDwoNX2V4dGVybmFsX3JlZkIQCg5fdXNlcl90aW1lem9uZSI2ChZRdWVyeUNvbmNpZXJnZVJlc3BvbnNlEhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJIi0KGkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0Eg8KB3NlZWRfaWQYASABKAkiowEKG0dldENvbnZlcnNhdGlvblNlZWRSZXNwb25zZRIlCgRzZWVkGAEgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZBItCgZzdGF0dXMYAiABKA4yHS5yaXZlci5Db252ZXJzYXRpb25TZWVkU3RhdHVzEi4KD3Byb3Bvc2FsX3N0YXR1cxgDIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIooBChtTdWJtaXRBZ2VudFByb3Bvc2Fsc1JlcXVlc3QSHAoUY29udmVyc2F0aW9uX3NlZWRfaWQYASABKAkSIgoJcHJvcG9zYWxzGAIgAygLMg8ucml2ZXIuUHJvcG9zYWwSKQoGZXJyb3JzGAMgAygLMhkucml2ZXIuQWdlbnRQcm9wb3NhbEVycm9yIh4KHFN1Ym1pdEFnZW50UHJvcG9zYWxzUmVzcG9uc2UivwEKHUZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhUKDXJlc3BvbnNlX3RleHQYAiABKAkSHQoVc2VsZWN0ZWRfcHJvcG9zYWxfaWRzGAMgAygJEhwKFGNsYXJpZnlpbmdfcXVlc3Rpb25zGAQgAygJEiwKBnN0YXR1cxgFIAEoDjIcLnJpdmVyLkNvbmNpZXJnZUZpbmlzaFN0YXR1cyIgCh5GaW5pc2hDb252ZXJzYXRpb25TZWVkUmVzcG9uc2UiKAoWR2V0RW50aXRsZW1lbnRzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwipgEKF0dldEVudGl0bGVtZW50c1Jlc3BvbnNlEhgKEGNhbl9zZXRfcHJvbW90ZWQYASABKAgSGAoQY2FuX3NldF92ZXJpZmllZBgCIAEoCBIWCg5jYW5fc2V0X2FjdGl2ZRgDIAEoCBIbChNjYW5fdXBkYXRlX21ldGFkYXRhGAQgASgIEhAKCGlzX293bmVyGAUgASgIEhAKCGlzX2FkbWluGAYgASgIKqkBChNGb3J3YXJkU2V0dGluZ1ZhbHVlEh8KG0ZPUldBUkRfU0VUVElOR19VTlNQRUNJRklFRBAAEiAKHEZPUldBUkRfU0VUVElOR19BTExfTUVTU0FHRVMQARIuCipGT1JXQVJEX1NFVFRJTkdfTUVOVElPTlNfUkVQTElFU19SRUFDVElPTlMQAhIfChtGT1JXQVJEX1NFVFRJTkdfTk9fTUVTU0FHRVMQAypKCgxTdXBwb3J0ZWRBcGkSHQoZU1VQUE9SVEVEX0FQSV9VTlNQRUNJRklFRBAAEhsKF1NVUFBPUlRFRF9BUElfUE9TSVRJT05TEAEqaAoMUG9zaXRpb25UeXBlEh0KGVBPU0lUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIbChdQT1NJVElPTl9UWVBFX1BFUlBFVFVBTBABEhwKGFBPU0lUSU9OX1RZUEVfUFJFRElDVElPThACKooBChVDb25jaWVyZ2VGaW5pc2hTdGF0dXMSJwojQ09OQ0lFUkdFX0ZJTklTSF9TVEFUVVNfVU5TUEVDSUZJRUQQABIjCh9DT05DSUVSR0VfRklOSVNIX1NUQVRVU19TVUNDRVNTEAESIwofQ09OQ0lFUkdFX0ZJTklTSF9TVEFUVVNfRkFJTFVSRRACMqsaChJBcHBSZWdpc3RyeVNlcnZpY2USOwoIUmVnaXN0ZXISFi5yaXZlci5SZWdpc3RlclJlcXVlc3QaFy5yaXZlci5SZWdpc3RlclJlc3BvbnNlElAKD1JlZ2lzdGVyV2ViaG9vaxIdLnJpdmVyLlJlZ2lzdGVyV2ViaG9va1JlcXVlc3QaHi5yaXZlci5SZWdpc3RlcldlYmhvb2tSZXNwb25zZRI+CglHZXRTdGF0dXMSFy5yaXZlci5HZXRTdGF0dXNSZXF1ZXN0Ghgucml2ZXIuR2V0U3RhdHVzUmVzcG9uc2USTQoOU2V0QXBwU2V0dGluZ3MSHC5yaXZlci5TZXRBcHBTZXR0aW5nc1JlcXVlc3QaHS5yaXZlci5TZXRBcHBTZXR0aW5nc1Jlc3BvbnNlElYKEVVwZGF0ZUFwcFNldHRpbmdzEh8ucml2ZXIuVXBkYXRlQXBwU2V0dGluZ3NSZXF1ZXN0GiAucml2ZXIuVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZRJNCg5HZXRBcHBTZXR0aW5ncxIcLnJpdmVyLkdldEFwcFNldHRpbmdzUmVxdWVzdBodLnJpdmVyLkdldEFwcFNldHRpbmdzUmVzcG9uc2USVgoRVXBkYXRlQXBwTWV0YWRhdGESHy5yaXZlci5VcGRhdGVBcHBNZXRhZGF0YVJlcXVlc3QaIC5yaXZlci5VcGRhdGVBcHBNZXRhZGF0YVJlc3BvbnNlEk0KDkdldEFwcE1ldGFkYXRhEhwucml2ZXIuR2V0QXBwTWV0YWRhdGFSZXF1ZXN0Gh0ucml2ZXIuR2V0QXBwTWV0YWRhdGFSZXNwb25zZRJHCgxSb3RhdGVTZWNyZXQSGi5yaXZlci5Sb3RhdGVTZWNyZXRSZXF1ZXN0Ghsucml2ZXIuUm90YXRlU2VjcmV0UmVzcG9uc2USQQoKR2V0U2Vzc2lvbhIYLnJpdmVyLkdldFNlc3Npb25SZXF1ZXN0Ghkucml2ZXIuR2V0U2Vzc2lvblJlc3BvbnNlElAKD1ZhbGlkYXRlQm90TmFtZRIdLnJpdmVyLlZhbGlkYXRlQm90TmFtZVJlcXVlc3QaHi5yaXZlci5WYWxpZGF0ZUJvdE5hbWVSZXNwb25zZRJZChJTZXRBcHBBY3RpdmVTdGF0dXMSIC5yaXZlci5TZXRBcHBBY3RpdmVTdGF0dXNSZXF1ZXN0GiEucml2ZXIuU2V0QXBwQWN0aXZlU3RhdHVzUmVzcG9uc2USXwoUU2V0QXBwUHJvbW90ZWRTdGF0dXMSIi5yaXZlci5TZXRBcHBQcm9tb3RlZFN0YXR1c1JlcXVlc3QaIy5yaXZlci5TZXRBcHBQcm9tb3RlZFN0YXR1c1Jlc3BvbnNlEl8KFFNldEFwcFZlcmlmaWVkU3RhdHVzEiIucml2ZXIuU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXF1ZXN0GiMucml2ZXIuU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXNwb25zZRJQCg9HZXRFbnRpdGxlbWVudHMSHS5yaXZlci5HZXRFbnRpdGxlbWVudHNSZXF1ZXN0Gh4ucml2ZXIuR2V0RW50aXRsZW1lbnRzUmVzcG9uc2USRAoLU2V0VXNlck5hbWUSGS5yaXZlci5TZXRVc2VyTmFtZVJlcXVlc3QaGi5yaXZlci5TZXRVc2VyTmFtZVJlc3BvbnNlEkoKDUdldEVudGl0eU5hbWUSGy5yaXZlci5HZXRFbnRpdHlOYW1lUmVxdWVzdBocLnJpdmVyLkdldEVudGl0eU5hbWVSZXNwb25zZRJcChNHZXRCYXRjaEVudGl0eU5hbWVzEiEucml2ZXIuR2V0QmF0Y2hFbnRpdHlOYW1lc1JlcXVlc3QaIi5yaXZlci5HZXRCYXRjaEVudGl0eU5hbWVzUmVzcG9uc2USUwoQQ3JlYXRlSW52aXRlTGluaxIeLnJpdmVyLkNyZWF0ZUludml0ZUxpbmtSZXF1ZXN0Gh8ucml2ZXIuQ3JlYXRlSW52aXRlTGlua1Jlc3BvbnNlElMKEFJldm9rZUludml0ZUxpbmsSHi5yaXZlci5SZXZva2VJbnZpdGVMaW5rUmVxdWVzdBofLnJpdmVyLlJldm9rZUludml0ZUxpbmtSZXNwb25zZRJTChBSZWRlZW1JbnZpdGVMaW5rEh4ucml2ZXIuUmVkZWVtSW52aXRlTGlua1JlcXVlc3QaHy5yaXZlci5SZWRlZW1JbnZpdGVMaW5rUmVzcG9uc2USSgoNR2V0SW52aXRlTGluaxIbLnJpdmVyLkdldEludml0ZUxpbmtSZXF1ZXN0Ghwucml2ZXIuR2V0SW52aXRlTGlua1Jlc3BvbnNlElkKEkxpc3RSZWdpc3RlcmVkQXBwcxIgLnJpdmVyLkxpc3RSZWdpc3RlcmVkQXBwc1JlcXVlc3QaIS5yaXZlci5MaXN0UmVnaXN0ZXJlZEFwcHNSZXNwb25zZRJNCg5HZXRCdWxrQXBwRGF0YRIcLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVxdWVzdBodLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVzcG9uc2USWQoSR2V0QXBwSW5zdGFsbFN0YXRzEiAucml2ZXIuR2V0QXBwSW5zdGFsbFN0YXRzUmVxdWVzdBohLnJpdmVyLkdldEFwcEluc3RhbGxTdGF0c1Jlc3BvbnNlEmUKFkdldEJ1bGtBcHBJbnN0YWxsU3RhdHMSJC5yaXZlci5HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVxdWVzdBolLnJpdmVyLkdldEJ1bGtBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRJQCg9TdWJtaXRBcHBSZXZpZXcSHS5yaXZlci5TdWJtaXRBcHBSZXZpZXdSZXF1ZXN0Gh4ucml2ZXIuU3VibWl0QXBwUmV2aWV3UmVzcG9uc2USSgoNR2V0QXBwUmV2aWV3cxIbLnJpdmVyLkdldEFwcFJldmlld3NSZXF1ZXN0Ghwucml2ZXIuR2V0QXBwUmV2aWV3c1Jlc3BvbnNlElAKD1Jldm9rZUFwcFJldmlldxIdLnJpdmVyLlJldm9rZUFwcFJldmlld1JlcXVlc3QaHi5yaXZlci5SZXZva2VBcHBSZXZpZXdSZXNwb25zZRJcChNHZXRBcHBSZXZpZXdTdW1tYXJ5EiEucml2ZXIuR2V0QXBwUmV2aWV3U3VtbWFyeVJlcXVlc3QaIi5yaXZlci5HZXRBcHBSZXZpZXdTdW1tYXJ5UmVzcG9uc2USbgoZR2V0QnVsa0FwcFJldmlld1N1bW1hcmllcxInLnJpdmVyLkdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXF1ZXN0Gigucml2ZXIuR2V0QnVsa0FwcFJldmlld1N1bW1hcmllc1Jlc3BvbnNlElAKD0dldEFwcFBvc2l0aW9ucxIdLnJpdmVyLkdldEFwcFBvc2l0aW9uc1JlcXVlc3QaHi5yaXZlci5HZXRBcHBQb3NpdGlvbnNSZXNwb25zZRJfChRHZXRCYXRjaEFwcFBvc2l0aW9ucxIiLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVxdWVzdBojLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVzcG9uc2USawoYR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzEiYucml2ZXIuR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzUmVxdWVzdBonLnJpdmVyLkdldEJ1bGtBZ2VudENhcGFiaWxpdGllc1Jlc3BvbnNlEmIKFUdldEJ1bGtBZ2VudFByb3Bvc2FscxIjLnJpdmVyLkdldEJ1bGtBZ2VudFByb3Bvc2Fsc1JlcXVlc3QaJC5yaXZlci5HZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXNwb25zZRJNCg5RdWVyeUNvbmNpZXJnZRIcLnJpdmVyLlF1ZXJ5Q29uY2llcmdlUmVxdWVzdBodLnJpdmVyLlF1ZXJ5Q29uY2llcmdlUmVzcG9uc2USXAoTR2V0Q29udmVyc2F0aW9uU2VlZBIhLnJpdmVyLkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0GiIucml2ZXIuR2V0Q29udmVyc2F0aW9uU2VlZFJlc3BvbnNlEl8KFFN1Ym1pdEFnZW50UHJvcG9zYWxzEiIucml2ZXIuU3VibWl0QWdlbnRQcm9wb3NhbHNSZXF1ZXN0GiMucml2ZXIuU3VibWl0QWdlbnRQcm9wb3NhbHNSZXNwb25zZRJlChZGaW5pc2hDb252ZXJzYXRpb25TZWVkEiQucml2ZXIuRmluaXNoQ29udmVyc2F0aW9uU2VlZFJlcXVlc3QaJS5yaXZlci5GaW5pc2hDb252ZXJzYXRpb25TZWVkUmVzcG9uc2VCNFoyZ2l0aHViLmNvbS90b3ducy1wcm90b2NvbC90b3ducy9jb3JlL25vZGUvcHJvdG9jb2xiBnByb3RvMw", [import_wkt3.file_google_protobuf_empty, file_payloads, file_protocol]);
|
|
7782
7781
|
var ForwardSettingValue;
|
|
7783
7782
|
(function(ForwardSettingValue2) {
|
|
7784
7783
|
ForwardSettingValue2[ForwardSettingValue2["FORWARD_SETTING_UNSPECIFIED"] = 0] = "FORWARD_SETTING_UNSPECIFIED";
|
|
@@ -7797,6 +7796,12 @@ var PositionType;
|
|
|
7797
7796
|
PositionType2[PositionType2["PERPETUAL"] = 1] = "PERPETUAL";
|
|
7798
7797
|
PositionType2[PositionType2["PREDICTION"] = 2] = "PREDICTION";
|
|
7799
7798
|
})(PositionType || (PositionType = {}));
|
|
7799
|
+
var ConciergeFinishStatus;
|
|
7800
|
+
(function(ConciergeFinishStatus2) {
|
|
7801
|
+
ConciergeFinishStatus2[ConciergeFinishStatus2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
|
|
7802
|
+
ConciergeFinishStatus2[ConciergeFinishStatus2["SUCCESS"] = 1] = "SUCCESS";
|
|
7803
|
+
ConciergeFinishStatus2[ConciergeFinishStatus2["FAILURE"] = 2] = "FAILURE";
|
|
7804
|
+
})(ConciergeFinishStatus || (ConciergeFinishStatus = {}));
|
|
7800
7805
|
var AppRegistryService = /* @__PURE__ */ (0, import_codegenv23.serviceDesc)(file_apps, 0);
|
|
7801
7806
|
|
|
7802
7807
|
// ../proto/dist/gen/auth_pb.js
|
|
@@ -10286,8 +10291,8 @@ function getHash(hash) {
|
|
|
10286
10291
|
};
|
|
10287
10292
|
}
|
|
10288
10293
|
function createCurve(curveDef, defHash) {
|
|
10289
|
-
const
|
|
10290
|
-
return { ...
|
|
10294
|
+
const create18 = (hash) => weierstrass({ ...curveDef, ...getHash(hash) });
|
|
10295
|
+
return { ...create18(defHash), create: create18 };
|
|
10291
10296
|
}
|
|
10292
10297
|
|
|
10293
10298
|
// ../../node_modules/.bun/@noble+curves@1.9.0/node_modules/@noble/curves/esm/secp256k1.js
|
|
@@ -15247,8 +15252,8 @@ function weierstrass2(c2) {
|
|
|
15247
15252
|
|
|
15248
15253
|
// ../../node_modules/.bun/@noble+curves@1.9.7/node_modules/@noble/curves/esm/_shortw_utils.js
|
|
15249
15254
|
function createCurve2(curveDef, defHash) {
|
|
15250
|
-
const
|
|
15251
|
-
return { ...
|
|
15255
|
+
const create18 = (hash) => weierstrass2({ ...curveDef, hash });
|
|
15256
|
+
return { ...create18(defHash), create: create18 };
|
|
15252
15257
|
}
|
|
15253
15258
|
|
|
15254
15259
|
// ../../node_modules/.bun/@noble+curves@1.9.7/node_modules/@noble/curves/esm/secp256k1.js
|
|
@@ -16414,12 +16419,6 @@ var CryptoStoreIndexedDb = class extends import_wrapper_default {
|
|
|
16414
16419
|
await this.hybridGroupSessions.clear();
|
|
16415
16420
|
await this.devices.clear();
|
|
16416
16421
|
}
|
|
16417
|
-
async deleteInboundGroupSessions(streamId, sessionId) {
|
|
16418
|
-
await this.inboundGroupSessions.where({ streamId, sessionId }).delete();
|
|
16419
|
-
}
|
|
16420
|
-
async deleteOutboundGrounpSessions(streamId) {
|
|
16421
|
-
await this.outboundGroupSessions.where({ streamId }).delete();
|
|
16422
|
-
}
|
|
16423
16422
|
async deleteAccount(userId) {
|
|
16424
16423
|
await this.account.where({ id: userId }).delete();
|
|
16425
16424
|
}
|
|
@@ -16433,22 +16432,6 @@ var CryptoStoreIndexedDb = class extends import_wrapper_default {
|
|
|
16433
16432
|
async storeAccount(accountPickle) {
|
|
16434
16433
|
await this.account.put({ id: this.userId, accountPickle });
|
|
16435
16434
|
}
|
|
16436
|
-
async storeEndToEndOutboundGroupSession(sessionId, sessionData, streamId) {
|
|
16437
|
-
await this.outboundGroupSessions.put({ sessionId, session: sessionData, streamId });
|
|
16438
|
-
}
|
|
16439
|
-
async getEndToEndOutboundGroupSession(streamId) {
|
|
16440
|
-
const session = await this.outboundGroupSessions.get({ streamId });
|
|
16441
|
-
if (!session) {
|
|
16442
|
-
throw new Error("session not found");
|
|
16443
|
-
}
|
|
16444
|
-
return session.session;
|
|
16445
|
-
}
|
|
16446
|
-
async getAllEndToEndOutboundGroupSessions() {
|
|
16447
|
-
return await this.outboundGroupSessions.toArray();
|
|
16448
|
-
}
|
|
16449
|
-
async getEndToEndInboundGroupSession(streamId, sessionId) {
|
|
16450
|
-
return await this.inboundGroupSessions.get({ sessionId, streamId });
|
|
16451
|
-
}
|
|
16452
16435
|
async getHybridGroupSession(streamId, sessionId) {
|
|
16453
16436
|
return await this.hybridGroupSessions.get({ streamId, sessionId });
|
|
16454
16437
|
}
|
|
@@ -16456,25 +16439,15 @@ var CryptoStoreIndexedDb = class extends import_wrapper_default {
|
|
|
16456
16439
|
const sessions = await this.hybridGroupSessions.where({ streamId }).toArray();
|
|
16457
16440
|
return sessions;
|
|
16458
16441
|
}
|
|
16459
|
-
async getAllEndToEndInboundGroupSessions() {
|
|
16460
|
-
return await this.inboundGroupSessions.toArray();
|
|
16461
|
-
}
|
|
16462
16442
|
async getAllHybridGroupSessions() {
|
|
16463
16443
|
return await this.hybridGroupSessions.toArray();
|
|
16464
16444
|
}
|
|
16465
16445
|
async deleteHybridGroupSessions(streamId) {
|
|
16466
16446
|
await this.hybridGroupSessions.where({ streamId }).delete();
|
|
16467
16447
|
}
|
|
16468
|
-
async storeEndToEndInboundGroupSession(streamId, sessionId, sessionData) {
|
|
16469
|
-
await this.inboundGroupSessions.put({ streamId, sessionId, ...sessionData });
|
|
16470
|
-
}
|
|
16471
16448
|
async storeHybridGroupSession(sessionData) {
|
|
16472
16449
|
await this.hybridGroupSessions.put({ ...sessionData });
|
|
16473
16450
|
}
|
|
16474
|
-
async getInboundGroupSessionIds(streamId) {
|
|
16475
|
-
const sessions = await this.inboundGroupSessions.where({ streamId }).toArray();
|
|
16476
|
-
return sessions.map((s) => s.sessionId);
|
|
16477
|
-
}
|
|
16478
16451
|
async getHybridGroupSessionIds(streamId) {
|
|
16479
16452
|
const sessions = await this.hybridGroupSessions.where({ streamId }).toArray();
|
|
16480
16453
|
return sessions.map((s) => s.sessionId);
|
|
@@ -16483,14 +16456,7 @@ var CryptoStoreIndexedDb = class extends import_wrapper_default {
|
|
|
16483
16456
|
return await this.transaction("rw", this.account, fn);
|
|
16484
16457
|
}
|
|
16485
16458
|
async withGroupSessions(fn) {
|
|
16486
|
-
return await this.transaction(
|
|
16487
|
-
"rw",
|
|
16488
|
-
this.outboundGroupSessions,
|
|
16489
|
-
this.inboundGroupSessions,
|
|
16490
|
-
this.hybridGroupSessions,
|
|
16491
|
-
// aellis this should be in its own transaction but tests were failing otherwise
|
|
16492
|
-
fn
|
|
16493
|
-
);
|
|
16459
|
+
return await this.transaction("rw", this.hybridGroupSessions, fn);
|
|
16494
16460
|
}
|
|
16495
16461
|
/**
|
|
16496
16462
|
* Only used for testing
|
|
@@ -17967,15 +17933,11 @@ var DEFAULT_MAX_CRYPTO_STORE_ENTRIES = 5e3;
|
|
|
17967
17933
|
var CryptoStoreInMemory = class {
|
|
17968
17934
|
userId;
|
|
17969
17935
|
accounts;
|
|
17970
|
-
outboundGroupSessions;
|
|
17971
|
-
inboundGroupSessions;
|
|
17972
17936
|
hybridGroupSessions;
|
|
17973
17937
|
devices;
|
|
17974
17938
|
constructor(userId, maxEntries = DEFAULT_MAX_CRYPTO_STORE_ENTRIES) {
|
|
17975
17939
|
this.userId = userId;
|
|
17976
17940
|
this.accounts = new LRUCache({ max: maxEntries });
|
|
17977
|
-
this.outboundGroupSessions = new LRUCache({ max: maxEntries });
|
|
17978
|
-
this.inboundGroupSessions = new LRUCache({ max: maxEntries });
|
|
17979
17941
|
this.hybridGroupSessions = new LRUCache({ max: maxEntries });
|
|
17980
17942
|
this.devices = new LRUCache({ max: maxEntries });
|
|
17981
17943
|
}
|
|
@@ -17991,18 +17953,9 @@ var CryptoStoreInMemory = class {
|
|
|
17991
17953
|
}
|
|
17992
17954
|
async deleteAllData() {
|
|
17993
17955
|
this.accounts.clear();
|
|
17994
|
-
this.outboundGroupSessions.clear();
|
|
17995
|
-
this.inboundGroupSessions.clear();
|
|
17996
17956
|
this.hybridGroupSessions.clear();
|
|
17997
17957
|
this.devices.clear();
|
|
17998
17958
|
}
|
|
17999
|
-
async deleteInboundGroupSessions(streamId, sessionId) {
|
|
18000
|
-
const key = this.getInboundSessionKey(streamId, sessionId);
|
|
18001
|
-
this.inboundGroupSessions.delete(key);
|
|
18002
|
-
}
|
|
18003
|
-
async deleteOutboundGrounpSessions(streamId) {
|
|
18004
|
-
this.outboundGroupSessions.delete(streamId);
|
|
18005
|
-
}
|
|
18006
17959
|
async deleteAccount(userId) {
|
|
18007
17960
|
this.accounts.delete(userId);
|
|
18008
17961
|
}
|
|
@@ -18016,28 +17969,6 @@ var CryptoStoreInMemory = class {
|
|
|
18016
17969
|
async storeAccount(accountPickle) {
|
|
18017
17970
|
this.accounts.set(this.userId, { id: this.userId, accountPickle });
|
|
18018
17971
|
}
|
|
18019
|
-
async storeEndToEndOutboundGroupSession(sessionId, sessionData, streamId) {
|
|
18020
|
-
this.outboundGroupSessions.set(streamId, { sessionId, session: sessionData, streamId });
|
|
18021
|
-
}
|
|
18022
|
-
async getEndToEndOutboundGroupSession(streamId) {
|
|
18023
|
-
const session = this.outboundGroupSessions.get(streamId);
|
|
18024
|
-
if (!session) {
|
|
18025
|
-
throw new Error("session not found");
|
|
18026
|
-
}
|
|
18027
|
-
return session.session;
|
|
18028
|
-
}
|
|
18029
|
-
async getAllEndToEndOutboundGroupSessions() {
|
|
18030
|
-
return Array.from(this.outboundGroupSessions.values());
|
|
18031
|
-
}
|
|
18032
|
-
async getEndToEndInboundGroupSession(streamId, sessionId) {
|
|
18033
|
-
const key = this.getInboundSessionKey(streamId, sessionId);
|
|
18034
|
-
const session = this.inboundGroupSessions.get(key);
|
|
18035
|
-
if (session) {
|
|
18036
|
-
const { streamId: _, sessionId: __, ...sessionData } = session;
|
|
18037
|
-
return sessionData;
|
|
18038
|
-
}
|
|
18039
|
-
return void 0;
|
|
18040
|
-
}
|
|
18041
17972
|
async getHybridGroupSession(streamId, sessionId) {
|
|
18042
17973
|
const key = this.getHybridSessionKey(streamId, sessionId);
|
|
18043
17974
|
return this.hybridGroupSessions.get(key);
|
|
@@ -18051,9 +17982,6 @@ var CryptoStoreInMemory = class {
|
|
|
18051
17982
|
}
|
|
18052
17983
|
return sessions;
|
|
18053
17984
|
}
|
|
18054
|
-
async getAllEndToEndInboundGroupSessions() {
|
|
18055
|
-
return Array.from(this.inboundGroupSessions.values());
|
|
18056
|
-
}
|
|
18057
17985
|
async getAllHybridGroupSessions() {
|
|
18058
17986
|
return Array.from(this.hybridGroupSessions.values());
|
|
18059
17987
|
}
|
|
@@ -18064,23 +17992,10 @@ var CryptoStoreInMemory = class {
|
|
|
18064
17992
|
}
|
|
18065
17993
|
}
|
|
18066
17994
|
}
|
|
18067
|
-
async storeEndToEndInboundGroupSession(streamId, sessionId, sessionData) {
|
|
18068
|
-
const key = this.getInboundSessionKey(streamId, sessionId);
|
|
18069
|
-
this.inboundGroupSessions.set(key, { streamId, sessionId, ...sessionData });
|
|
18070
|
-
}
|
|
18071
17995
|
async storeHybridGroupSession(sessionData) {
|
|
18072
17996
|
const key = this.getHybridSessionKey(sessionData.streamId, sessionData.sessionId);
|
|
18073
17997
|
this.hybridGroupSessions.set(key, sessionData);
|
|
18074
17998
|
}
|
|
18075
|
-
async getInboundGroupSessionIds(streamId) {
|
|
18076
|
-
const sessionIds = [];
|
|
18077
|
-
for (const session of this.inboundGroupSessions.values()) {
|
|
18078
|
-
if (session.streamId === streamId) {
|
|
18079
|
-
sessionIds.push(session.sessionId);
|
|
18080
|
-
}
|
|
18081
|
-
}
|
|
18082
|
-
return sessionIds;
|
|
18083
|
-
}
|
|
18084
17999
|
async getHybridGroupSessionIds(streamId) {
|
|
18085
18000
|
const sessionIds = [];
|
|
18086
18001
|
for (const session of this.hybridGroupSessions.values()) {
|
|
@@ -18119,9 +18034,6 @@ var CryptoStoreInMemory = class {
|
|
|
18119
18034
|
}
|
|
18120
18035
|
return userDevices;
|
|
18121
18036
|
}
|
|
18122
|
-
getInboundSessionKey(streamId, sessionId) {
|
|
18123
|
-
return `${streamId}:${sessionId}`;
|
|
18124
|
-
}
|
|
18125
18037
|
getHybridSessionKey(streamId, sessionId) {
|
|
18126
18038
|
return `${streamId}:${sessionId}`;
|
|
18127
18039
|
}
|
|
@@ -18264,7 +18176,6 @@ var EncryptionAlgorithmId;
|
|
|
18264
18176
|
})(EncryptionAlgorithmId || (EncryptionAlgorithmId = {}));
|
|
18265
18177
|
var GroupEncryptionAlgorithmId;
|
|
18266
18178
|
(function(GroupEncryptionAlgorithmId2) {
|
|
18267
|
-
GroupEncryptionAlgorithmId2["GroupEncryption"] = "r.group-encryption.v1.aes-sha2";
|
|
18268
18179
|
GroupEncryptionAlgorithmId2["HybridGroupEncryption"] = "grpaes";
|
|
18269
18180
|
})(GroupEncryptionAlgorithmId || (GroupEncryptionAlgorithmId = {}));
|
|
18270
18181
|
function isGroupEncryptionAlgorithmId(value) {
|
|
@@ -18317,13 +18228,6 @@ var EncryptionDevice = class {
|
|
|
18317
18228
|
// not one time keys, which suffer a race condition and expire once used.
|
|
18318
18229
|
olmPrekeyPromise = Promise.resolve();
|
|
18319
18230
|
// set by consumers
|
|
18320
|
-
// Store a set of decrypted message indexes for each group session.
|
|
18321
|
-
// This partially mitigates a replay attack where a MITM resends a group
|
|
18322
|
-
// message into the room.
|
|
18323
|
-
//
|
|
18324
|
-
// Keys are strings of form "<senderKey>|<session_id>|<message_index>"
|
|
18325
|
-
// Values are objects of the form "{id: <event id>, timestamp: <ts>}"
|
|
18326
|
-
inboundGroupSessionMessageIndexes = {};
|
|
18327
18231
|
constructor(delegate2, cryptoStore) {
|
|
18328
18232
|
this.delegate = delegate2;
|
|
18329
18233
|
this.cryptoStore = cryptoStore;
|
|
@@ -18377,17 +18281,7 @@ var EncryptionDevice = class {
|
|
|
18377
18281
|
}
|
|
18378
18282
|
async initializeFromExportedDevice(exportedData, account) {
|
|
18379
18283
|
await this.cryptoStore.withAccountTx(() => this.cryptoStore.storeAccount(exportedData.pickledAccount));
|
|
18380
|
-
await this.cryptoStore.withGroupSessions(() =>
|
|
18381
|
-
return Promise.all([
|
|
18382
|
-
...exportedData.outboundSessions.map((session) => this.cryptoStore.storeEndToEndOutboundGroupSession(session.sessionId, session.session, session.streamId)),
|
|
18383
|
-
...exportedData.inboundSessions.map((session) => this.cryptoStore.storeEndToEndInboundGroupSession(session.streamId, session.sessionId, {
|
|
18384
|
-
stream_id: session.streamId,
|
|
18385
|
-
session: session.session,
|
|
18386
|
-
keysClaimed: {}
|
|
18387
|
-
})),
|
|
18388
|
-
...exportedData.hybridGroupSessions.map((session) => this.cryptoStore.storeHybridGroupSession(session))
|
|
18389
|
-
]);
|
|
18390
|
-
});
|
|
18284
|
+
await this.cryptoStore.withGroupSessions(() => Promise.all(exportedData.hybridGroupSessions.map((session) => this.cryptoStore.storeHybridGroupSession(session))));
|
|
18391
18285
|
account.unpickle(this.pickleKey, exportedData.pickledAccount);
|
|
18392
18286
|
}
|
|
18393
18287
|
async initializeAccount(account) {
|
|
@@ -18408,24 +18302,10 @@ var EncryptionDevice = class {
|
|
|
18408
18302
|
const account = await this.getAccount();
|
|
18409
18303
|
const pickledAccount = account.pickle(this.pickleKey);
|
|
18410
18304
|
account.free();
|
|
18411
|
-
const
|
|
18412
|
-
this.cryptoStore.getAllEndToEndInboundGroupSessions(),
|
|
18413
|
-
this.cryptoStore.getAllEndToEndOutboundGroupSessions(),
|
|
18414
|
-
this.cryptoStore.getAllHybridGroupSessions()
|
|
18415
|
-
]);
|
|
18305
|
+
const hybridGroupSessions = await this.cryptoStore.getAllHybridGroupSessions();
|
|
18416
18306
|
return (0, import_protobuf7.create)(ExportedDeviceSchema, {
|
|
18417
18307
|
pickleKey: this.pickleKey,
|
|
18418
18308
|
pickledAccount,
|
|
18419
|
-
inboundSessions: inboundSessions.map((session) => (0, import_protobuf7.create)(ExportedDevice_GroupSessionSchema, {
|
|
18420
|
-
sessionId: session.sessionId,
|
|
18421
|
-
streamId: session.streamId,
|
|
18422
|
-
session: session.session
|
|
18423
|
-
})),
|
|
18424
|
-
outboundSessions: outboundSessions.map((session) => (0, import_protobuf7.create)(ExportedDevice_GroupSessionSchema, {
|
|
18425
|
-
sessionId: session.sessionId,
|
|
18426
|
-
streamId: session.streamId,
|
|
18427
|
-
session: session.session
|
|
18428
|
-
})),
|
|
18429
18309
|
hybridGroupSessions: hybridGroupSessions.map((session) => (0, import_protobuf7.create)(ExportedDevice_HybridGroupSessionSchema, {
|
|
18430
18310
|
sessionId: session.sessionId,
|
|
18431
18311
|
streamId: session.streamId,
|
|
@@ -18525,47 +18405,6 @@ var EncryptionDevice = class {
|
|
|
18525
18405
|
account.forget_old_fallback_key();
|
|
18526
18406
|
await this.storeAccount(account);
|
|
18527
18407
|
}
|
|
18528
|
-
// Outbound group session
|
|
18529
|
-
// ======================
|
|
18530
|
-
/**
|
|
18531
|
-
* Store an OutboundGroupSession in outboundSessionStore
|
|
18532
|
-
*
|
|
18533
|
-
*/
|
|
18534
|
-
async saveOutboundGroupSession(session, streamId) {
|
|
18535
|
-
return this.cryptoStore.withGroupSessions(async () => {
|
|
18536
|
-
await this.cryptoStore.storeEndToEndOutboundGroupSession(session.session_id(), session.pickle(this.pickleKey), streamId);
|
|
18537
|
-
});
|
|
18538
|
-
}
|
|
18539
|
-
/**
|
|
18540
|
-
* Extract OutboundGroupSession from the session store and call given fn.
|
|
18541
|
-
*/
|
|
18542
|
-
async getOutboundGroupSession(streamId) {
|
|
18543
|
-
return this.cryptoStore.withGroupSessions(async () => {
|
|
18544
|
-
const pickled = await this.cryptoStore.getEndToEndOutboundGroupSession(streamId);
|
|
18545
|
-
if (!pickled) {
|
|
18546
|
-
throw new Error(`Unknown outbound group session ${streamId}`);
|
|
18547
|
-
}
|
|
18548
|
-
const session = this.delegate.createOutboundGroupSession();
|
|
18549
|
-
session.unpickle(this.pickleKey, pickled);
|
|
18550
|
-
return session;
|
|
18551
|
-
});
|
|
18552
|
-
}
|
|
18553
|
-
/**
|
|
18554
|
-
* Get the session keys for an outbound group session
|
|
18555
|
-
*
|
|
18556
|
-
* @param sessionId - the id of the outbound group session
|
|
18557
|
-
*
|
|
18558
|
-
* @returns current chain index, and
|
|
18559
|
-
* base64-encoded secret key.
|
|
18560
|
-
*/
|
|
18561
|
-
async getOutboundGroupSessionKey(streamId) {
|
|
18562
|
-
const session = await this.getOutboundGroupSession(streamId);
|
|
18563
|
-
const chain_index = session.message_index();
|
|
18564
|
-
const key = session.session_key();
|
|
18565
|
-
const sessionId = session.session_id();
|
|
18566
|
-
session.free();
|
|
18567
|
-
return { chain_index, key, sessionId };
|
|
18568
|
-
}
|
|
18569
18408
|
/** */
|
|
18570
18409
|
async getHybridGroupSessionKeyForStream(streamId) {
|
|
18571
18410
|
return this.cryptoStore.withGroupSessions(async () => {
|
|
@@ -18587,36 +18426,6 @@ var EncryptionDevice = class {
|
|
|
18587
18426
|
return (0, import_protobuf7.fromBinary)(HybridGroupSessionKeySchema, sessionRecord.sessionKey);
|
|
18588
18427
|
});
|
|
18589
18428
|
}
|
|
18590
|
-
/**
|
|
18591
|
-
* Generate a new outbound group session
|
|
18592
|
-
*
|
|
18593
|
-
*/
|
|
18594
|
-
async createOutboundGroupSession(streamId) {
|
|
18595
|
-
return await this.cryptoStore.withGroupSessions(async () => {
|
|
18596
|
-
const session = this.delegate.createOutboundGroupSession();
|
|
18597
|
-
const inboundSession = this.delegate.createInboundGroupSession();
|
|
18598
|
-
try {
|
|
18599
|
-
session.create();
|
|
18600
|
-
const sessionId = session.session_id();
|
|
18601
|
-
await this.saveOutboundGroupSession(session, streamId);
|
|
18602
|
-
const key = session.session_key();
|
|
18603
|
-
inboundSession.create(key);
|
|
18604
|
-
const pickled = inboundSession.pickle(this.pickleKey);
|
|
18605
|
-
await this.cryptoStore.storeEndToEndInboundGroupSession(streamId, sessionId, {
|
|
18606
|
-
session: pickled,
|
|
18607
|
-
stream_id: streamId,
|
|
18608
|
-
keysClaimed: {}
|
|
18609
|
-
});
|
|
18610
|
-
return sessionId;
|
|
18611
|
-
} catch (e) {
|
|
18612
|
-
log4("Error creating outbound group session", e);
|
|
18613
|
-
throw e;
|
|
18614
|
-
} finally {
|
|
18615
|
-
session.free();
|
|
18616
|
-
inboundSession.free();
|
|
18617
|
-
}
|
|
18618
|
-
});
|
|
18619
|
-
}
|
|
18620
18429
|
/** */
|
|
18621
18430
|
async createHybridGroupSession(streamId, miniblockNum, miniblockHash) {
|
|
18622
18431
|
const streamIdBytes = bin_fromHexString(streamId);
|
|
@@ -18642,96 +18451,6 @@ var EncryptionDevice = class {
|
|
|
18642
18451
|
return { sessionId, sessionRecord, sessionKey };
|
|
18643
18452
|
});
|
|
18644
18453
|
}
|
|
18645
|
-
// Inbound group session
|
|
18646
|
-
// =====================
|
|
18647
|
-
/**
|
|
18648
|
-
* Unpickle a session from a sessionData object and invoke the given function.
|
|
18649
|
-
* The session is valid only until func returns.
|
|
18650
|
-
*
|
|
18651
|
-
* @param sessionData - Object describing the session.
|
|
18652
|
-
* @param func - Invoked with the unpickled session
|
|
18653
|
-
* @returns result of func
|
|
18654
|
-
*/
|
|
18655
|
-
unpickleInboundGroupSession(sessionData) {
|
|
18656
|
-
const session = this.delegate.createInboundGroupSession();
|
|
18657
|
-
session.unpickle(this.pickleKey, sessionData.session);
|
|
18658
|
-
return session;
|
|
18659
|
-
}
|
|
18660
|
-
/**
|
|
18661
|
-
* Extract an InboundGroupSession from the crypto store and call the given function
|
|
18662
|
-
*
|
|
18663
|
-
* @param streamId - The stream ID to extract the session for, or null to fetch
|
|
18664
|
-
* sessions for any room.
|
|
18665
|
-
* @param txn - Opaque transaction object from cryptoStore.doTxn()
|
|
18666
|
-
* @param func - function to call.
|
|
18667
|
-
*
|
|
18668
|
-
* @internal
|
|
18669
|
-
*/
|
|
18670
|
-
async getInboundGroupSession(streamId, sessionId) {
|
|
18671
|
-
const sessionInfo = await this.cryptoStore.getEndToEndInboundGroupSession(streamId, sessionId);
|
|
18672
|
-
const session = sessionInfo ? this.unpickleInboundGroupSession(sessionInfo) : void 0;
|
|
18673
|
-
return {
|
|
18674
|
-
session,
|
|
18675
|
-
data: sessionInfo
|
|
18676
|
-
};
|
|
18677
|
-
}
|
|
18678
|
-
/**
|
|
18679
|
-
* Add an inbound group session to the session store
|
|
18680
|
-
*
|
|
18681
|
-
* @param streamId - room in which this session will be used
|
|
18682
|
-
* @param senderKey - base64-encoded curve25519 key of the sender
|
|
18683
|
-
* @param sessionId - session identifier
|
|
18684
|
-
* @param sessionKey - base64-encoded secret key
|
|
18685
|
-
* @param keysClaimed - Other keys the sender claims.
|
|
18686
|
-
* @param exportFormat - true if the group keys are in export format
|
|
18687
|
-
* (ie, they lack an ed25519 signature)
|
|
18688
|
-
* @param extraSessionData - any other data to be include with the session
|
|
18689
|
-
*/
|
|
18690
|
-
async addInboundGroupSession(streamId, sessionId, sessionKey, keysClaimed, _exportFormat, extraSessionData = {}) {
|
|
18691
|
-
const { session: existingSession, data: existingSessionData } = await this.getInboundGroupSession(streamId, sessionId);
|
|
18692
|
-
const session = this.delegate.createInboundGroupSession();
|
|
18693
|
-
try {
|
|
18694
|
-
log4(`Adding group session ${streamId}|${sessionId}`);
|
|
18695
|
-
try {
|
|
18696
|
-
session.import_session(sessionKey);
|
|
18697
|
-
} catch {
|
|
18698
|
-
session.create(sessionKey);
|
|
18699
|
-
}
|
|
18700
|
-
if (sessionId != session.session_id()) {
|
|
18701
|
-
throw new Error("Mismatched group session ID from streamId: " + streamId);
|
|
18702
|
-
}
|
|
18703
|
-
if (existingSession && existingSessionData) {
|
|
18704
|
-
log4(`Update for group session ${streamId}|${sessionId}`);
|
|
18705
|
-
if (existingSession.first_known_index() <= session.first_known_index()) {
|
|
18706
|
-
if (!existingSessionData.untrusted || extraSessionData.untrusted) {
|
|
18707
|
-
log4(`Keeping existing group session ${streamId}|${sessionId}`);
|
|
18708
|
-
return;
|
|
18709
|
-
}
|
|
18710
|
-
if (existingSession.first_known_index() < session.first_known_index()) {
|
|
18711
|
-
if (existingSession.export_session(session.first_known_index()) === session.export_session(session.first_known_index())) {
|
|
18712
|
-
log4(`Upgrading trust of existing group session ${streamId}|${sessionId} based on newly-received trusted session`);
|
|
18713
|
-
existingSessionData.untrusted = false;
|
|
18714
|
-
await this.cryptoStore.storeEndToEndInboundGroupSession(streamId, sessionId, existingSessionData);
|
|
18715
|
-
} else {
|
|
18716
|
-
log4(`Newly-received group session ${streamId}|$sessionId} does not match existing session! Keeping existing session`);
|
|
18717
|
-
}
|
|
18718
|
-
return;
|
|
18719
|
-
}
|
|
18720
|
-
}
|
|
18721
|
-
}
|
|
18722
|
-
log4(`Storing group session ${streamId}|${sessionId} with first index ${session.first_known_index()}`);
|
|
18723
|
-
const sessionData = Object.assign({}, extraSessionData, {
|
|
18724
|
-
stream_id: streamId,
|
|
18725
|
-
session: session.pickle(this.pickleKey),
|
|
18726
|
-
keysClaimed
|
|
18727
|
-
});
|
|
18728
|
-
await this.cryptoStore.withGroupSessions(async () => {
|
|
18729
|
-
await this.cryptoStore.storeEndToEndInboundGroupSession(streamId, sessionId, sessionData);
|
|
18730
|
-
});
|
|
18731
|
-
} finally {
|
|
18732
|
-
session.free();
|
|
18733
|
-
}
|
|
18734
|
-
}
|
|
18735
18454
|
/** */
|
|
18736
18455
|
async addHybridGroupSession(streamId, sessionId, sessionKey) {
|
|
18737
18456
|
const sessionKeyBytes = bin_fromHexString(sessionKey);
|
|
@@ -18756,26 +18475,6 @@ var EncryptionDevice = class {
|
|
|
18756
18475
|
});
|
|
18757
18476
|
});
|
|
18758
18477
|
}
|
|
18759
|
-
/**
|
|
18760
|
-
* Encrypt an outgoing message with an outbound group session
|
|
18761
|
-
*
|
|
18762
|
-
* @param sessionId - this id of the session
|
|
18763
|
-
* @param payloadString - payload to be encrypted
|
|
18764
|
-
*
|
|
18765
|
-
* @returns ciphertext
|
|
18766
|
-
*/
|
|
18767
|
-
async encryptGroupMessage(payloadString, streamId) {
|
|
18768
|
-
return await this.cryptoStore.withGroupSessions(async () => {
|
|
18769
|
-
log4(`encrypting msg with group session for stream id ${streamId}`);
|
|
18770
|
-
checkPayloadLength(payloadString, { streamId, source: "encryptGroupMessage" });
|
|
18771
|
-
const session = await this.getOutboundGroupSession(streamId);
|
|
18772
|
-
const ciphertext = session.encrypt(payloadString);
|
|
18773
|
-
const sessionId = session.session_id();
|
|
18774
|
-
await this.saveOutboundGroupSession(session, streamId);
|
|
18775
|
-
session.free();
|
|
18776
|
-
return { ciphertext, sessionId };
|
|
18777
|
-
});
|
|
18778
|
-
}
|
|
18779
18478
|
async encryptUsingFallbackKey(theirIdentityKey, fallbackKey, payload) {
|
|
18780
18479
|
checkPayloadLength(payload, { source: "encryptUsingFallbackKey" });
|
|
18781
18480
|
return this.cryptoStore.withAccountTx(async () => {
|
|
@@ -18842,61 +18541,14 @@ var EncryptionDevice = class {
|
|
|
18842
18541
|
util.ed25519_verify(key, message, signature);
|
|
18843
18542
|
});
|
|
18844
18543
|
}
|
|
18845
|
-
// Group Sessions
|
|
18846
|
-
async getInboundGroupSessionIds(streamId) {
|
|
18847
|
-
return await this.cryptoStore.getInboundGroupSessionIds(streamId);
|
|
18848
|
-
}
|
|
18849
18544
|
async getHybridGroupSessionIds(streamId) {
|
|
18850
18545
|
return await this.cryptoStore.getHybridGroupSessionIds(streamId);
|
|
18851
18546
|
}
|
|
18852
|
-
/**
|
|
18853
|
-
* Determine if we have the keys for a given group session
|
|
18854
|
-
*
|
|
18855
|
-
* @param streamId - stream in which the message was received
|
|
18856
|
-
* @param senderKey - base64-encoded curve25519 key of the sender
|
|
18857
|
-
* @param sessionId - session identifier
|
|
18858
|
-
*/
|
|
18859
|
-
async hasInboundSessionKeys(streamId, sessionId) {
|
|
18860
|
-
const sessionData = await this.cryptoStore.withGroupSessions(async () => {
|
|
18861
|
-
return this.cryptoStore.getEndToEndInboundGroupSession(streamId, sessionId);
|
|
18862
|
-
});
|
|
18863
|
-
if (!sessionData) {
|
|
18864
|
-
return false;
|
|
18865
|
-
}
|
|
18866
|
-
if (streamId !== sessionData.stream_id) {
|
|
18867
|
-
log4(`[hasInboundSessionKey]: requested keys for inbound group session${sessionId}, with incorrect stream id (expected ${sessionData.stream_id}, was ${streamId})`);
|
|
18868
|
-
return false;
|
|
18869
|
-
} else {
|
|
18870
|
-
return true;
|
|
18871
|
-
}
|
|
18872
|
-
}
|
|
18873
18547
|
/** */
|
|
18874
18548
|
async hasHybridGroupSessionKey(streamId, sessionId) {
|
|
18875
18549
|
const key = await this.cryptoStore.getHybridGroupSession(streamId, sessionId);
|
|
18876
18550
|
return key !== void 0;
|
|
18877
18551
|
}
|
|
18878
|
-
/**
|
|
18879
|
-
* Export an inbound group session
|
|
18880
|
-
*
|
|
18881
|
-
* @param streamId - streamId of session
|
|
18882
|
-
* @param sessionId - session identifier
|
|
18883
|
-
*/
|
|
18884
|
-
async exportInboundGroupSession(streamId, sessionId) {
|
|
18885
|
-
const sessionData = await this.cryptoStore.getEndToEndInboundGroupSession(streamId, sessionId);
|
|
18886
|
-
if (!sessionData) {
|
|
18887
|
-
return void 0;
|
|
18888
|
-
}
|
|
18889
|
-
const session = this.unpickleInboundGroupSession(sessionData);
|
|
18890
|
-
const messageIndex = session.first_known_index();
|
|
18891
|
-
const sessionKey = session.export_session(messageIndex);
|
|
18892
|
-
session.free();
|
|
18893
|
-
return {
|
|
18894
|
-
streamId,
|
|
18895
|
-
sessionId,
|
|
18896
|
-
sessionKey,
|
|
18897
|
-
algorithm: GroupEncryptionAlgorithmId.GroupEncryption
|
|
18898
|
-
};
|
|
18899
|
-
}
|
|
18900
18552
|
/** */
|
|
18901
18553
|
async exportHybridGroupSession(streamId, sessionId) {
|
|
18902
18554
|
const sessionData = await this.cryptoStore.getHybridGroupSession(streamId, sessionId);
|
|
@@ -18910,33 +18562,6 @@ var EncryptionDevice = class {
|
|
|
18910
18562
|
algorithm: GroupEncryptionAlgorithmId.HybridGroupEncryption
|
|
18911
18563
|
};
|
|
18912
18564
|
}
|
|
18913
|
-
/**
|
|
18914
|
-
* Get a list containing all of the room keys
|
|
18915
|
-
*
|
|
18916
|
-
* @returns a list of session export objects
|
|
18917
|
-
*/
|
|
18918
|
-
async exportInboundGroupSessions() {
|
|
18919
|
-
const exportedSessions = [];
|
|
18920
|
-
await this.cryptoStore.withGroupSessions(async () => {
|
|
18921
|
-
const sessions = await this.cryptoStore.getAllEndToEndInboundGroupSessions();
|
|
18922
|
-
for (const sessionData of sessions) {
|
|
18923
|
-
if (!sessionData) {
|
|
18924
|
-
continue;
|
|
18925
|
-
}
|
|
18926
|
-
const session = this.unpickleInboundGroupSession(sessionData);
|
|
18927
|
-
const messageIndex = session.first_known_index();
|
|
18928
|
-
const sessionKey = session.export_session(messageIndex);
|
|
18929
|
-
session.free();
|
|
18930
|
-
exportedSessions.push({
|
|
18931
|
-
streamId: sessionData.streamId,
|
|
18932
|
-
sessionId: sessionData.sessionId,
|
|
18933
|
-
sessionKey,
|
|
18934
|
-
algorithm: GroupEncryptionAlgorithmId.GroupEncryption
|
|
18935
|
-
});
|
|
18936
|
-
}
|
|
18937
|
-
});
|
|
18938
|
-
return exportedSessions;
|
|
18939
|
-
}
|
|
18940
18565
|
async exportHybridGroupSessions() {
|
|
18941
18566
|
const sessions = await this.cryptoStore.getAllHybridGroupSessions();
|
|
18942
18567
|
return sessions.map((session) => {
|
|
@@ -18972,164 +18597,9 @@ async function hybridSessionKeyHash(streamId, key, miniblockNum, miniblockHash)
|
|
|
18972
18597
|
return new Uint8Array(hashBytes);
|
|
18973
18598
|
}
|
|
18974
18599
|
|
|
18975
|
-
// ../encryption/dist/
|
|
18976
|
-
var logError2 = dlogError("csb:encryption:groupDecryption");
|
|
18977
|
-
var GroupDecryption = class extends DecryptionAlgorithm {
|
|
18978
|
-
algorithm = GroupEncryptionAlgorithmId.GroupEncryption;
|
|
18979
|
-
lruCache;
|
|
18980
|
-
constructor(params) {
|
|
18981
|
-
super(params);
|
|
18982
|
-
this.lruCache = new LRUCache({ max: 1e3 });
|
|
18983
|
-
}
|
|
18984
|
-
/**
|
|
18985
|
-
* returns a promise which resolves to a
|
|
18986
|
-
* {@link EventDecryptionResult} once we have finished
|
|
18987
|
-
* decrypting, or rejects with an `algorithms.DecryptionError` if there is a
|
|
18988
|
-
* problem decrypting the event.
|
|
18989
|
-
*/
|
|
18990
|
-
async decrypt(streamId, content) {
|
|
18991
|
-
if (!content.senderKey || !content.sessionId || !content.ciphertext) {
|
|
18992
|
-
throw new DecryptionError("GROUP_DECRYPTION_MISSING_FIELDS", "Missing fields in input");
|
|
18993
|
-
}
|
|
18994
|
-
let session = this.lruCache.get(content.sessionId);
|
|
18995
|
-
if (!session) {
|
|
18996
|
-
const { session: loadedSession } = await this.device.getInboundGroupSession(streamId, content.sessionId);
|
|
18997
|
-
if (loadedSession) {
|
|
18998
|
-
this.lruCache.set(content.sessionId, loadedSession);
|
|
18999
|
-
session = loadedSession;
|
|
19000
|
-
}
|
|
19001
|
-
}
|
|
19002
|
-
if (!session) {
|
|
19003
|
-
throw new Error("Session not found");
|
|
19004
|
-
}
|
|
19005
|
-
const result = session.decrypt(content.ciphertext);
|
|
19006
|
-
switch (content.version) {
|
|
19007
|
-
case EncryptedDataVersion.ENCRYPTED_DATA_VERSION_0:
|
|
19008
|
-
return result.plaintext;
|
|
19009
|
-
case EncryptedDataVersion.ENCRYPTED_DATA_VERSION_1:
|
|
19010
|
-
return bin_fromBase64(result.plaintext);
|
|
19011
|
-
default:
|
|
19012
|
-
throw new DecryptionError("GROUP_DECRYPTION_INVALID_VERSION", "Unsupported version");
|
|
19013
|
-
}
|
|
19014
|
-
}
|
|
19015
|
-
/**
|
|
19016
|
-
* @param streamId - the stream id of the session
|
|
19017
|
-
* @param session- the group session object
|
|
19018
|
-
*/
|
|
19019
|
-
async importStreamKey(streamId, session) {
|
|
19020
|
-
const extraSessionData = {};
|
|
19021
|
-
try {
|
|
19022
|
-
await this.device.addInboundGroupSession(
|
|
19023
|
-
streamId,
|
|
19024
|
-
session.sessionId,
|
|
19025
|
-
session.sessionKey,
|
|
19026
|
-
// sender claimed keys not yet supported
|
|
19027
|
-
{},
|
|
19028
|
-
false,
|
|
19029
|
-
extraSessionData
|
|
19030
|
-
);
|
|
19031
|
-
} catch (e) {
|
|
19032
|
-
logError2(`Error handling room key import: ${e.message}`);
|
|
19033
|
-
throw e;
|
|
19034
|
-
}
|
|
19035
|
-
}
|
|
19036
|
-
/** */
|
|
19037
|
-
async exportGroupSession(streamId, sessionId) {
|
|
19038
|
-
return this.device.exportInboundGroupSession(streamId, sessionId);
|
|
19039
|
-
}
|
|
19040
|
-
/** */
|
|
19041
|
-
exportGroupSessions() {
|
|
19042
|
-
return this.device.exportInboundGroupSessions();
|
|
19043
|
-
}
|
|
19044
|
-
/** */
|
|
19045
|
-
exportGroupSessionIds(streamId) {
|
|
19046
|
-
return this.device.getInboundGroupSessionIds(streamId);
|
|
19047
|
-
}
|
|
19048
|
-
/** */
|
|
19049
|
-
async hasSessionKey(streamId, sessionId) {
|
|
19050
|
-
return this.device.hasInboundSessionKeys(streamId, sessionId);
|
|
19051
|
-
}
|
|
19052
|
-
};
|
|
19053
|
-
|
|
19054
|
-
// ../encryption/dist/groupEncryption.js
|
|
18600
|
+
// ../encryption/dist/hybridGroupEncryption.js
|
|
19055
18601
|
var import_protobuf8 = require("@bufbuild/protobuf");
|
|
19056
18602
|
var log5 = dlog("csb:encryption:groupEncryption");
|
|
19057
|
-
var GroupEncryption = class extends EncryptionAlgorithm {
|
|
19058
|
-
algorithm = GroupEncryptionAlgorithmId.GroupEncryption;
|
|
19059
|
-
constructor(params) {
|
|
19060
|
-
super(params);
|
|
19061
|
-
}
|
|
19062
|
-
async ensureOutboundSession(streamId, opts) {
|
|
19063
|
-
try {
|
|
19064
|
-
const sessionKey = await this.device.getOutboundGroupSessionKey(streamId);
|
|
19065
|
-
return sessionKey.sessionId;
|
|
19066
|
-
} catch (error) {
|
|
19067
|
-
const sessionId = await this.device.createOutboundGroupSession(streamId);
|
|
19068
|
-
log5(`Started new megolm session ${sessionId}`);
|
|
19069
|
-
const promise = this.shareSession(streamId, sessionId, opts?.priorityUserIds ?? []);
|
|
19070
|
-
if (opts?.shareShareSessionTimeoutMs === 0) {
|
|
19071
|
-
await promise;
|
|
19072
|
-
} else {
|
|
19073
|
-
const waitTimeBeforeMovingOn = opts?.shareShareSessionTimeoutMs ?? 3e4;
|
|
19074
|
-
await Promise.race([
|
|
19075
|
-
promise,
|
|
19076
|
-
new Promise((resolve4, _) => setTimeout(() => resolve4(), waitTimeBeforeMovingOn))
|
|
19077
|
-
]);
|
|
19078
|
-
}
|
|
19079
|
-
return sessionId;
|
|
19080
|
-
}
|
|
19081
|
-
}
|
|
19082
|
-
async hasOutboundSession(streamId) {
|
|
19083
|
-
try {
|
|
19084
|
-
await this.device.getOutboundGroupSessionKey(streamId);
|
|
19085
|
-
return true;
|
|
19086
|
-
} catch {
|
|
19087
|
-
return false;
|
|
19088
|
-
}
|
|
19089
|
-
}
|
|
19090
|
-
async shareSession(streamId, sessionId, priorityUserIds) {
|
|
19091
|
-
const session = await this.device.exportInboundGroupSession(streamId, sessionId);
|
|
19092
|
-
if (!session) {
|
|
19093
|
-
throw new Error("Session key not found for session " + sessionId);
|
|
19094
|
-
}
|
|
19095
|
-
await this.client.encryptAndShareGroupSessionsToStream(streamId, [session], this.algorithm, priorityUserIds);
|
|
19096
|
-
}
|
|
19097
|
-
/**
|
|
19098
|
-
* @deprecated
|
|
19099
|
-
*/
|
|
19100
|
-
async encrypt_deprecated_v0(streamId, payload) {
|
|
19101
|
-
await this.ensureOutboundSession(streamId);
|
|
19102
|
-
const result = await this.device.encryptGroupMessage(payload, streamId);
|
|
19103
|
-
return (0, import_protobuf8.create)(EncryptedDataSchema, {
|
|
19104
|
-
algorithm: this.algorithm,
|
|
19105
|
-
senderKey: this.device.deviceCurve25519Key,
|
|
19106
|
-
ciphertext: result.ciphertext,
|
|
19107
|
-
sessionId: result.sessionId,
|
|
19108
|
-
version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_0
|
|
19109
|
-
});
|
|
19110
|
-
}
|
|
19111
|
-
/**
|
|
19112
|
-
* @param content - plaintext event content
|
|
19113
|
-
*
|
|
19114
|
-
* @returns Promise which resolves to the new event body
|
|
19115
|
-
*/
|
|
19116
|
-
async encrypt(streamId, payload) {
|
|
19117
|
-
log5("Starting to encrypt event");
|
|
19118
|
-
await this.ensureOutboundSession(streamId);
|
|
19119
|
-
const result = await this.device.encryptGroupMessage(bin_toBase64(payload), streamId);
|
|
19120
|
-
return (0, import_protobuf8.create)(EncryptedDataSchema, {
|
|
19121
|
-
algorithm: this.algorithm,
|
|
19122
|
-
senderKey: this.device.deviceCurve25519Key,
|
|
19123
|
-
ciphertext: result.ciphertext,
|
|
19124
|
-
sessionId: result.sessionId,
|
|
19125
|
-
version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_1
|
|
19126
|
-
});
|
|
19127
|
-
}
|
|
19128
|
-
};
|
|
19129
|
-
|
|
19130
|
-
// ../encryption/dist/hybridGroupEncryption.js
|
|
19131
|
-
var import_protobuf9 = require("@bufbuild/protobuf");
|
|
19132
|
-
var log6 = dlog("csb:encryption:groupEncryption");
|
|
19133
18603
|
var HybridGroupEncryption = class extends EncryptionAlgorithm {
|
|
19134
18604
|
algorithm = GroupEncryptionAlgorithmId.HybridGroupEncryption;
|
|
19135
18605
|
constructor(params) {
|
|
@@ -19146,7 +18616,7 @@ var HybridGroupEncryption = class extends EncryptionAlgorithm {
|
|
|
19146
18616
|
} catch (error) {
|
|
19147
18617
|
const { miniblockNum, miniblockHash } = opts?.miniblockInfo ?? await this.client.getMiniblockInfo(streamId);
|
|
19148
18618
|
const { sessionId, sessionKey } = await this.device.createHybridGroupSession(streamId, miniblockNum, miniblockHash);
|
|
19149
|
-
|
|
18619
|
+
log5(`Started new hybrid group session ${sessionId}`);
|
|
19150
18620
|
const promise = this.shareSession(streamId, sessionId, opts?.priorityUserIds ?? []);
|
|
19151
18621
|
if (opts?.shareShareSessionTimeoutMs === 0) {
|
|
19152
18622
|
await promise;
|
|
@@ -19175,34 +18645,17 @@ var HybridGroupEncryption = class extends EncryptionAlgorithm {
|
|
|
19175
18645
|
}
|
|
19176
18646
|
await this.client.encryptAndShareGroupSessionsToStream(streamId, [session], this.algorithm, priorityUserIds);
|
|
19177
18647
|
}
|
|
19178
|
-
/**
|
|
19179
|
-
* @deprecated
|
|
19180
|
-
*/
|
|
19181
|
-
async encrypt_deprecated_v0(streamId, payload) {
|
|
19182
|
-
const sessionKey = await this._ensureOutboundSession(streamId);
|
|
19183
|
-
const key = await importAesGsmKeyBytes(sessionKey.key);
|
|
19184
|
-
const payloadBytes = new TextEncoder().encode(payload);
|
|
19185
|
-
const { ciphertext, iv } = await encryptAesGcm(key, payloadBytes);
|
|
19186
|
-
return (0, import_protobuf9.create)(EncryptedDataSchema, {
|
|
19187
|
-
algorithm: this.algorithm,
|
|
19188
|
-
senderKey: this.device.deviceCurve25519Key,
|
|
19189
|
-
sessionIdBytes: sessionKey.sessionId,
|
|
19190
|
-
ciphertextBytes: ciphertext,
|
|
19191
|
-
ivBytes: iv,
|
|
19192
|
-
version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_0
|
|
19193
|
-
});
|
|
19194
|
-
}
|
|
19195
18648
|
/**
|
|
19196
18649
|
* @param content - plaintext event content
|
|
19197
18650
|
*
|
|
19198
18651
|
* @returns Promise which resolves to the new event body
|
|
19199
18652
|
*/
|
|
19200
18653
|
async encrypt(streamId, payload) {
|
|
19201
|
-
|
|
18654
|
+
log5("Starting to encrypt event");
|
|
19202
18655
|
const sessionKey = await this._ensureOutboundSession(streamId);
|
|
19203
18656
|
const key = await importAesGsmKeyBytes(sessionKey.key);
|
|
19204
18657
|
const { ciphertext, iv } = await encryptAesGcm(key, payload);
|
|
19205
|
-
return (0,
|
|
18658
|
+
return (0, import_protobuf8.create)(EncryptedDataSchema, {
|
|
19206
18659
|
algorithm: this.algorithm,
|
|
19207
18660
|
senderKey: this.device.deviceCurve25519Key,
|
|
19208
18661
|
sessionIdBytes: sessionKey.sessionId,
|
|
@@ -19214,7 +18667,7 @@ var HybridGroupEncryption = class extends EncryptionAlgorithm {
|
|
|
19214
18667
|
};
|
|
19215
18668
|
|
|
19216
18669
|
// ../encryption/dist/hybridGroupDecryption.js
|
|
19217
|
-
var
|
|
18670
|
+
var logError2 = dlogError("csb:encryption:groupDecryption");
|
|
19218
18671
|
var HybridGroupDecryption = class extends DecryptionAlgorithm {
|
|
19219
18672
|
algorithm = GroupEncryptionAlgorithmId.HybridGroupEncryption;
|
|
19220
18673
|
lruCache;
|
|
@@ -19260,7 +18713,7 @@ var HybridGroupDecryption = class extends DecryptionAlgorithm {
|
|
|
19260
18713
|
try {
|
|
19261
18714
|
await this.device.addHybridGroupSession(streamId, session.sessionId, session.sessionKey);
|
|
19262
18715
|
} catch (e) {
|
|
19263
|
-
|
|
18716
|
+
logError2(`Error handling room key import: ${e.message}`);
|
|
19264
18717
|
throw e;
|
|
19265
18718
|
}
|
|
19266
18719
|
}
|
|
@@ -19282,7 +18735,7 @@ var HybridGroupDecryption = class extends DecryptionAlgorithm {
|
|
|
19282
18735
|
};
|
|
19283
18736
|
|
|
19284
18737
|
// ../encryption/dist/groupEncryptionCrypto.js
|
|
19285
|
-
var
|
|
18738
|
+
var log6 = dlog("csb:encryption:groupEncryptionCrypto");
|
|
19286
18739
|
var GroupEncryptionCrypto = class {
|
|
19287
18740
|
delegate;
|
|
19288
18741
|
encryptionDevice;
|
|
@@ -19295,24 +18748,17 @@ var GroupEncryptionCrypto = class {
|
|
|
19295
18748
|
this.cryptoStore = cryptoStore;
|
|
19296
18749
|
this.delegate = new EncryptionDelegate();
|
|
19297
18750
|
this.delegate.init().catch((e) => {
|
|
19298
|
-
|
|
18751
|
+
log6("error initializing olm", e);
|
|
19299
18752
|
throw e;
|
|
19300
18753
|
});
|
|
19301
18754
|
this.encryptionDevice = new EncryptionDevice(this.delegate, cryptoStore);
|
|
19302
18755
|
this.groupEncryption = {
|
|
19303
|
-
[GroupEncryptionAlgorithmId.GroupEncryption]: new GroupEncryption({
|
|
19304
|
-
device: this.encryptionDevice,
|
|
19305
|
-
client
|
|
19306
|
-
}),
|
|
19307
18756
|
[GroupEncryptionAlgorithmId.HybridGroupEncryption]: new HybridGroupEncryption({
|
|
19308
18757
|
device: this.encryptionDevice,
|
|
19309
18758
|
client
|
|
19310
18759
|
})
|
|
19311
18760
|
};
|
|
19312
18761
|
this.groupDecryption = {
|
|
19313
|
-
[GroupEncryptionAlgorithmId.GroupEncryption]: new GroupDecryption({
|
|
19314
|
-
device: this.encryptionDevice
|
|
19315
|
-
}),
|
|
19316
18762
|
[GroupEncryptionAlgorithmId.HybridGroupEncryption]: new HybridGroupDecryption({
|
|
19317
18763
|
device: this.encryptionDevice
|
|
19318
18764
|
})
|
|
@@ -19324,7 +18770,7 @@ var GroupEncryptionCrypto = class {
|
|
|
19324
18770
|
async init(opts) {
|
|
19325
18771
|
await this.encryptionDevice.init(opts);
|
|
19326
18772
|
if (!this.encryptionDevice.deviceCurve25519Key || !this.encryptionDevice.deviceDoNotUseKey) {
|
|
19327
|
-
|
|
18773
|
+
log6("device keys not initialized, cannot encrypt event");
|
|
19328
18774
|
}
|
|
19329
18775
|
}
|
|
19330
18776
|
/**
|
|
@@ -19381,15 +18827,6 @@ var GroupEncryptionCrypto = class {
|
|
|
19381
18827
|
async encryptGroupEvent(streamId, payload, algorithm) {
|
|
19382
18828
|
return this.groupEncryption[algorithm].encrypt(streamId, payload);
|
|
19383
18829
|
}
|
|
19384
|
-
/**
|
|
19385
|
-
* Deprecated uses v0 encryption version
|
|
19386
|
-
*
|
|
19387
|
-
* @returns Promise which resolves when the event has been
|
|
19388
|
-
* encrypted, or null if nothing was needed
|
|
19389
|
-
*/
|
|
19390
|
-
async encryptGroupEvent_deprecated_v0(streamId, payload, algorithm) {
|
|
19391
|
-
return this.groupEncryption[algorithm].encrypt_deprecated_v0(streamId, payload);
|
|
19392
|
-
}
|
|
19393
18830
|
/**
|
|
19394
18831
|
* Decrypt a received event using group encryption algorithm
|
|
19395
18832
|
*
|
|
@@ -19399,7 +18836,8 @@ var GroupEncryptionCrypto = class {
|
|
|
19399
18836
|
async decryptGroupEvent(streamId, content) {
|
|
19400
18837
|
const algorithm = parseGroupEncryptionAlgorithmId(content.algorithm);
|
|
19401
18838
|
if (algorithm.kind === "unrecognized") {
|
|
19402
|
-
|
|
18839
|
+
log6(`skipping event with unrecognized algorithm: ${content.algorithm}`);
|
|
18840
|
+
return void 0;
|
|
19403
18841
|
}
|
|
19404
18842
|
return this.groupDecryption[algorithm.value].decrypt(streamId, content);
|
|
19405
18843
|
}
|
|
@@ -19459,10 +18897,10 @@ var GroupEncryptionCrypto = class {
|
|
|
19459
18897
|
try {
|
|
19460
18898
|
await this.groupDecryption[algorithm].importStreamKey(streamId, key);
|
|
19461
18899
|
} catch (error) {
|
|
19462
|
-
|
|
18900
|
+
log6(`failed to import key`, error);
|
|
19463
18901
|
}
|
|
19464
18902
|
} else {
|
|
19465
|
-
|
|
18903
|
+
log6(`unknown algorithm ${algorithm}`);
|
|
19466
18904
|
}
|
|
19467
18905
|
})));
|
|
19468
18906
|
}
|
|
@@ -19486,7 +18924,7 @@ var GroupEncryptionCrypto = class {
|
|
|
19486
18924
|
}
|
|
19487
18925
|
return Promise.all(keys2.map(async (key) => {
|
|
19488
18926
|
if (!key.streamId || !key.algorithm) {
|
|
19489
|
-
|
|
18927
|
+
log6("ignoring room key entry with missing fields", key);
|
|
19490
18928
|
failures++;
|
|
19491
18929
|
if (opts.progressCallback) {
|
|
19492
18930
|
updateProgress();
|
|
@@ -19502,14 +18940,14 @@ var GroupEncryptionCrypto = class {
|
|
|
19502
18940
|
updateProgress();
|
|
19503
18941
|
}
|
|
19504
18942
|
} catch (error) {
|
|
19505
|
-
|
|
18943
|
+
log6("failed to import key", error);
|
|
19506
18944
|
failures++;
|
|
19507
18945
|
if (opts.progressCallback) {
|
|
19508
18946
|
updateProgress();
|
|
19509
18947
|
}
|
|
19510
18948
|
}
|
|
19511
18949
|
} else {
|
|
19512
|
-
|
|
18950
|
+
log6(`unknown algorithm ${algorithm}`);
|
|
19513
18951
|
}
|
|
19514
18952
|
})).then();
|
|
19515
18953
|
}
|
|
@@ -20509,7 +19947,7 @@ function SpaceIdFromSpaceAddress(spaceAddress) {
|
|
|
20509
19947
|
return spaceAddress.toLowerCase().replace("0x", "10").padEnd(64, "0");
|
|
20510
19948
|
}
|
|
20511
19949
|
|
|
20512
|
-
// ../
|
|
19950
|
+
// ../contracts/dist/config/deployments.json
|
|
20513
19951
|
var deployments_default = {
|
|
20514
19952
|
beta: {
|
|
20515
19953
|
river: {
|
|
@@ -20816,7 +20254,7 @@ function makeWeb3Deployment(optionalEnv, requiredEnv) {
|
|
|
20816
20254
|
}
|
|
20817
20255
|
|
|
20818
20256
|
// ../web3/dist/utils/xchain.js
|
|
20819
|
-
var
|
|
20257
|
+
var log7 = dlogger("csb:XChainConfig");
|
|
20820
20258
|
var validateLog = dlogger("csb:validateAndParseXChainConfig");
|
|
20821
20259
|
|
|
20822
20260
|
// ../web3/dist/web3Types.js
|
|
@@ -20860,18 +20298,18 @@ var reviewAbi = [
|
|
|
20860
20298
|
}
|
|
20861
20299
|
];
|
|
20862
20300
|
function getSpaceReviewEventDataBin(binLogs, from) {
|
|
20863
|
-
const logs = binLogs.map((
|
|
20864
|
-
address: "0x" + bin_toHexString(
|
|
20865
|
-
topics:
|
|
20866
|
-
data: "0x" + bin_toHexString(
|
|
20301
|
+
const logs = binLogs.map((log12) => ({
|
|
20302
|
+
address: "0x" + bin_toHexString(log12.address),
|
|
20303
|
+
topics: log12.topics.map((topic) => "0x" + bin_toHexString(topic)),
|
|
20304
|
+
data: "0x" + bin_toHexString(log12.data)
|
|
20867
20305
|
}));
|
|
20868
20306
|
const senderWallet = ("0x" + bin_toHexString(from)).toLowerCase();
|
|
20869
|
-
for (const
|
|
20307
|
+
for (const log12 of logs) {
|
|
20870
20308
|
try {
|
|
20871
20309
|
const decoded = (0, import_viem5.decodeEventLog)({
|
|
20872
20310
|
abi: reviewAbi,
|
|
20873
|
-
data:
|
|
20874
|
-
topics:
|
|
20311
|
+
data: log12.data,
|
|
20312
|
+
topics: log12.topics
|
|
20875
20313
|
});
|
|
20876
20314
|
if (decoded.eventName === "ReviewAdded" && decoded.args.user.toLowerCase() === senderWallet) {
|
|
20877
20315
|
return {
|
|
@@ -21156,7 +20594,7 @@ function townsEnv(opts) {
|
|
|
21156
20594
|
var import_ethers7 = require("ethers");
|
|
21157
20595
|
|
|
21158
20596
|
// ../sdk/dist/decryptionExtensions.js
|
|
21159
|
-
var
|
|
20597
|
+
var import_protobuf9 = require("@bufbuild/protobuf");
|
|
21160
20598
|
|
|
21161
20599
|
// ../sdk/dist/observable/utils.js
|
|
21162
20600
|
function sortedArraysEqual(a, b) {
|
|
@@ -21618,7 +21056,7 @@ var BaseDecryptionExtensions = class {
|
|
|
21618
21056
|
return;
|
|
21619
21057
|
}
|
|
21620
21058
|
this.log.debug("processNewGroupSession", session);
|
|
21621
|
-
const parsed = parseGroupEncryptionAlgorithmId(session.algorithm, GroupEncryptionAlgorithmId.
|
|
21059
|
+
const parsed = parseGroupEncryptionAlgorithmId(session.algorithm, GroupEncryptionAlgorithmId.HybridGroupEncryption);
|
|
21622
21060
|
if (parsed.kind === "unrecognized") {
|
|
21623
21061
|
this.log.error("skipping, invalid algorithm", session.algorithm);
|
|
21624
21062
|
return;
|
|
@@ -21634,7 +21072,7 @@ var BaseDecryptionExtensions = class {
|
|
|
21634
21072
|
}
|
|
21635
21073
|
if (neededKeyIndexs.length > 0) {
|
|
21636
21074
|
const cleartext = await this.crypto.decryptWithDeviceKey(ciphertext, session.senderKey);
|
|
21637
|
-
const sessionKeys = (0,
|
|
21075
|
+
const sessionKeys = (0, import_protobuf9.fromJsonString)(SessionKeysSchema, cleartext);
|
|
21638
21076
|
check(sessionKeys.keys.length === session.sessionIds.length, "bad sessionKeys");
|
|
21639
21077
|
const neededSessions = neededKeyIndexs.map((i2) => ({
|
|
21640
21078
|
streamId,
|
|
@@ -21878,7 +21316,7 @@ var BaseDecryptionExtensions = class {
|
|
|
21878
21316
|
};
|
|
21879
21317
|
function makeSessionKeys(sessions) {
|
|
21880
21318
|
const sessionKeys = sessions.map((s) => s.sessionKey);
|
|
21881
|
-
return (0,
|
|
21319
|
+
return (0, import_protobuf9.create)(SessionKeysSchema, {
|
|
21882
21320
|
keys: sessionKeys
|
|
21883
21321
|
});
|
|
21884
21322
|
}
|
|
@@ -21920,7 +21358,7 @@ var RiverDbManager = class {
|
|
|
21920
21358
|
};
|
|
21921
21359
|
|
|
21922
21360
|
// ../sdk/dist/types.js
|
|
21923
|
-
var
|
|
21361
|
+
var import_protobuf10 = require("@bufbuild/protobuf");
|
|
21924
21362
|
function isSolanaTransactionReceipt(obj) {
|
|
21925
21363
|
return typeof obj === "object" && obj !== null && "transaction" in obj && "meta" in obj && typeof obj["meta"] === "object" && obj.meta !== null && "preTokenBalances" in obj.meta && "postTokenBalances" in obj.meta;
|
|
21926
21364
|
}
|
|
@@ -22064,8 +21502,7 @@ var make_MemberPayload_Membership2 = (value) => {
|
|
|
22064
21502
|
userAddress: addressFromUserId(value.userId),
|
|
22065
21503
|
op: value.op,
|
|
22066
21504
|
initiatorAddress: addressFromUserId(value.initiatorId),
|
|
22067
|
-
reason: MembershipReason.MR_NONE
|
|
22068
|
-
appAddress: value.appAddress ? bin_fromHexString(value.appAddress) : void 0
|
|
21505
|
+
reason: MembershipReason.MR_NONE
|
|
22069
21506
|
});
|
|
22070
21507
|
};
|
|
22071
21508
|
var make_GDMChannelPayload_Inception = (value) => {
|
|
@@ -22301,10 +21738,10 @@ var getRefEventIdFromChannelMessage = (message) => {
|
|
|
22301
21738
|
};
|
|
22302
21739
|
|
|
22303
21740
|
// ../sdk/dist/client-v2.js
|
|
22304
|
-
var
|
|
21741
|
+
var import_protobuf19 = require("@bufbuild/protobuf");
|
|
22305
21742
|
|
|
22306
21743
|
// ../sdk/dist/encryptedContentTypes.js
|
|
22307
|
-
var
|
|
21744
|
+
var import_protobuf11 = require("@bufbuild/protobuf");
|
|
22308
21745
|
function isEncryptedContentKind(kind) {
|
|
22309
21746
|
return kind === "text" || kind === "channelMessage" || kind === "channelProperties" || kind === "interactionRequestPayload";
|
|
22310
21747
|
}
|
|
@@ -22323,17 +21760,17 @@ function toDecryptedContent(kind, dataVersion, cleartext) {
|
|
|
22323
21760
|
case "channelMessage":
|
|
22324
21761
|
return {
|
|
22325
21762
|
kind,
|
|
22326
|
-
content: (0,
|
|
21763
|
+
content: (0, import_protobuf11.fromJsonString)(ChannelMessageSchema, cleartext)
|
|
22327
21764
|
};
|
|
22328
21765
|
case "channelProperties":
|
|
22329
21766
|
return {
|
|
22330
21767
|
kind,
|
|
22331
|
-
content: (0,
|
|
21768
|
+
content: (0, import_protobuf11.fromJsonString)(ChannelPropertiesSchema, cleartext)
|
|
22332
21769
|
};
|
|
22333
21770
|
case "interactionRequestPayload":
|
|
22334
21771
|
return {
|
|
22335
21772
|
kind,
|
|
22336
|
-
content: (0,
|
|
21773
|
+
content: (0, import_protobuf11.fromJsonString)(InteractionRequestPayloadSchema, cleartext)
|
|
22337
21774
|
};
|
|
22338
21775
|
default:
|
|
22339
21776
|
checkNever(kind);
|
|
@@ -22355,17 +21792,17 @@ function toDecryptedContent(kind, dataVersion, cleartext) {
|
|
|
22355
21792
|
case "channelProperties":
|
|
22356
21793
|
return {
|
|
22357
21794
|
kind: "channelProperties",
|
|
22358
|
-
content: (0,
|
|
21795
|
+
content: (0, import_protobuf11.fromBinary)(ChannelPropertiesSchema, cleartext)
|
|
22359
21796
|
};
|
|
22360
21797
|
case "channelMessage":
|
|
22361
21798
|
return {
|
|
22362
21799
|
kind: "channelMessage",
|
|
22363
|
-
content: (0,
|
|
21800
|
+
content: (0, import_protobuf11.fromBinary)(ChannelMessageSchema, cleartext)
|
|
22364
21801
|
};
|
|
22365
21802
|
case "interactionRequestPayload":
|
|
22366
21803
|
return {
|
|
22367
21804
|
kind: "interactionRequestPayload",
|
|
22368
|
-
content: (0,
|
|
21805
|
+
content: (0, import_protobuf11.fromBinary)(InteractionRequestPayloadSchema, cleartext)
|
|
22369
21806
|
};
|
|
22370
21807
|
default:
|
|
22371
21808
|
checkNever(kind);
|
|
@@ -22597,8 +22034,8 @@ var StreamStateView_User = class extends StreamStateView_AbstractContent {
|
|
|
22597
22034
|
};
|
|
22598
22035
|
|
|
22599
22036
|
// ../sdk/dist/streamStateView_UserSettings.js
|
|
22600
|
-
var
|
|
22601
|
-
var
|
|
22037
|
+
var import_protobuf12 = require("@bufbuild/protobuf");
|
|
22038
|
+
var log8 = dlog("csb:stream");
|
|
22602
22039
|
var StreamStateView_UserSettings = class extends StreamStateView_AbstractContent {
|
|
22603
22040
|
userSettingsStreamsView;
|
|
22604
22041
|
streamId;
|
|
@@ -22671,17 +22108,17 @@ var StreamStateView_UserSettings = class extends StreamStateView_AbstractContent
|
|
|
22671
22108
|
}
|
|
22672
22109
|
fullyReadMarkerUpdate(payload, emitter) {
|
|
22673
22110
|
const { content } = payload;
|
|
22674
|
-
|
|
22111
|
+
log8("$ fullyReadMarkerUpdate", { content });
|
|
22675
22112
|
if (content === void 0) {
|
|
22676
|
-
|
|
22113
|
+
log8("$ Content with FullyReadMarkers is undefined");
|
|
22677
22114
|
return;
|
|
22678
22115
|
}
|
|
22679
22116
|
const streamId = streamIdFromBytes(payload.streamId);
|
|
22680
22117
|
let fullyReadMarkersContent;
|
|
22681
22118
|
try {
|
|
22682
|
-
fullyReadMarkersContent = (0,
|
|
22119
|
+
fullyReadMarkersContent = (0, import_protobuf12.fromJsonString)(FullyReadMarkersSchema, content.data);
|
|
22683
22120
|
} catch (e) {
|
|
22684
|
-
|
|
22121
|
+
log8("failed to decode FullyReadMarkers, skipping", streamId, e);
|
|
22685
22122
|
return;
|
|
22686
22123
|
}
|
|
22687
22124
|
this.userSettingsStreamsView.setFullyReadMarkers(this.streamId, streamId, fullyReadMarkersContent.markers);
|
|
@@ -22689,7 +22126,7 @@ var StreamStateView_UserSettings = class extends StreamStateView_AbstractContent
|
|
|
22689
22126
|
}
|
|
22690
22127
|
userBlockUpdate(payload, emitter) {
|
|
22691
22128
|
const userId = userIdFromAddress(payload.userId);
|
|
22692
|
-
const userBlock = (0,
|
|
22129
|
+
const userBlock = (0, import_protobuf12.create)(UserSettingsPayload_Snapshot_UserBlocks_BlockSchema, {
|
|
22693
22130
|
eventNum: payload.eventNum,
|
|
22694
22131
|
isBlocked: payload.isBlocked
|
|
22695
22132
|
});
|
|
@@ -22820,7 +22257,7 @@ async function encryptChunkedAESGCM(data, chunkSize) {
|
|
|
22820
22257
|
}
|
|
22821
22258
|
|
|
22822
22259
|
// ../sdk/dist/streamStateView_UserMetadata.js
|
|
22823
|
-
var
|
|
22260
|
+
var import_protobuf13 = require("@bufbuild/protobuf");
|
|
22824
22261
|
var StreamStateView_UserMetadata = class extends StreamStateView_AbstractContent {
|
|
22825
22262
|
userMetadataStreamsView;
|
|
22826
22263
|
streamId;
|
|
@@ -22913,7 +22350,7 @@ var StreamStateView_UserMetadata = class extends StreamStateView_AbstractContent
|
|
|
22913
22350
|
this.decryptionInProgress = {
|
|
22914
22351
|
...this.decryptionInProgress,
|
|
22915
22352
|
image: this.decrypt(encryptedData, (decrypted) => {
|
|
22916
|
-
const profileImage = (0,
|
|
22353
|
+
const profileImage = (0, import_protobuf13.fromBinary)(ChunkedMediaSchema, decrypted);
|
|
22917
22354
|
this.profileImage = profileImage;
|
|
22918
22355
|
return profileImage;
|
|
22919
22356
|
}, () => {
|
|
@@ -22937,7 +22374,7 @@ var StreamStateView_UserMetadata = class extends StreamStateView_AbstractContent
|
|
|
22937
22374
|
this.decryptionInProgress = {
|
|
22938
22375
|
...this.decryptionInProgress,
|
|
22939
22376
|
bio: this.decrypt(encryptedData, (plaintext) => {
|
|
22940
|
-
const bioPlaintext = (0,
|
|
22377
|
+
const bioPlaintext = (0, import_protobuf13.fromBinary)(UserBioSchema, plaintext);
|
|
22941
22378
|
this.bio = bioPlaintext;
|
|
22942
22379
|
return bioPlaintext;
|
|
22943
22380
|
}, () => {
|
|
@@ -23046,7 +22483,7 @@ var StreamStateView_MemberMetadata = class {
|
|
|
23046
22483
|
|
|
23047
22484
|
// ../sdk/dist/streamStateView_Members.js
|
|
23048
22485
|
var import_ethers6 = require("ethers");
|
|
23049
|
-
var
|
|
22486
|
+
var log9 = dlog("csb:streamStateView_Members");
|
|
23050
22487
|
var StreamStateView_Members = class extends StreamStateView_AbstractContent {
|
|
23051
22488
|
streamMemberIdsView;
|
|
23052
22489
|
streamId;
|
|
@@ -23182,7 +22619,7 @@ var StreamStateView_Members = class extends StreamStateView_AbstractContent {
|
|
|
23182
22619
|
switch (membership.op) {
|
|
23183
22620
|
case MembershipOp.SO_JOIN:
|
|
23184
22621
|
if (this.joined.has(userId)) {
|
|
23185
|
-
|
|
22622
|
+
log9("user already joined", this.streamId, userId);
|
|
23186
22623
|
return;
|
|
23187
22624
|
}
|
|
23188
22625
|
this.joined.set(userId, {
|
|
@@ -23327,6 +22764,8 @@ var StreamStateView_Members = class extends StreamStateView_AbstractContent {
|
|
|
23327
22764
|
this.encryptionAlgorithm = payload.content.value.algorithm;
|
|
23328
22765
|
stateEmitter?.emit("streamEncryptionAlgorithmUpdated", this.streamId, this.encryptionAlgorithm);
|
|
23329
22766
|
break;
|
|
22767
|
+
case "setAppAddress":
|
|
22768
|
+
case "unsetAppAddress":
|
|
23330
22769
|
case void 0:
|
|
23331
22770
|
break;
|
|
23332
22771
|
default:
|
|
@@ -23365,6 +22804,8 @@ var StreamStateView_Members = class extends StreamStateView_AbstractContent {
|
|
|
23365
22804
|
break;
|
|
23366
22805
|
case "encryptionAlgorithm":
|
|
23367
22806
|
break;
|
|
22807
|
+
case "setAppAddress":
|
|
22808
|
+
case "unsetAppAddress":
|
|
23368
22809
|
case void 0:
|
|
23369
22810
|
break;
|
|
23370
22811
|
default:
|
|
@@ -23886,7 +23327,7 @@ function snapshotMigration0003(snapshot) {
|
|
|
23886
23327
|
}
|
|
23887
23328
|
|
|
23888
23329
|
// ../sdk/dist/migrations/snapshotMigration0004.js
|
|
23889
|
-
var
|
|
23330
|
+
var import_protobuf14 = require("@bufbuild/protobuf");
|
|
23890
23331
|
var logger2 = dlogger("csb:snapshotMigration0004");
|
|
23891
23332
|
var LOG_SIZE_REDUCTION = false;
|
|
23892
23333
|
function snapshotMigration0004(snapshot, force = false) {
|
|
@@ -23916,7 +23357,7 @@ function snapshotMigration0004(snapshot, force = false) {
|
|
|
23916
23357
|
}
|
|
23917
23358
|
const lostSessionIds = Array.from(sessionIdCounts.entries()).filter(([_, count]) => count > threshold).map(([id]) => id).toSorted();
|
|
23918
23359
|
if (lostSessionIds.length) {
|
|
23919
|
-
const before = LOG_SIZE_REDUCTION ? (0,
|
|
23360
|
+
const before = LOG_SIZE_REDUCTION ? (0, import_protobuf14.toBinary)(SnapshotSchema, snapshot).length : void 0;
|
|
23920
23361
|
let numRemove = 0;
|
|
23921
23362
|
for (const member of members) {
|
|
23922
23363
|
for (const solicitation of member.solicitations) {
|
|
@@ -23929,7 +23370,7 @@ function snapshotMigration0004(snapshot, force = false) {
|
|
|
23929
23370
|
const streamIdBytes = snapshot.content.value?.inception?.streamId;
|
|
23930
23371
|
const streamId = streamIdBytes ? bin_toHexString(streamIdBytes) : "";
|
|
23931
23372
|
const spaceAddress = SpaceIdFromSpaceAddress(streamId);
|
|
23932
|
-
const after = LOG_SIZE_REDUCTION ? (0,
|
|
23373
|
+
const after = LOG_SIZE_REDUCTION ? (0, import_protobuf14.toBinary)(SnapshotSchema, snapshot).length : void 0;
|
|
23933
23374
|
const mbSaved = before && after ? (before - after) / 1024 / 1024 : void 0;
|
|
23934
23375
|
const sizeLog = before && after && mbSaved ? `Snapshot size reduced from ${before} to ${after}, ${mbSaved.toFixed(2)} MB saved` : "";
|
|
23935
23376
|
logger2.info(`${spaceAddress} ${sizeLog} ${numRemove} sessionIds`);
|
|
@@ -23938,7 +23379,7 @@ function snapshotMigration0004(snapshot, force = false) {
|
|
|
23938
23379
|
}
|
|
23939
23380
|
|
|
23940
23381
|
// ../sdk/dist/migrations/snapshotMigration0005.js
|
|
23941
|
-
var
|
|
23382
|
+
var import_protobuf15 = require("@bufbuild/protobuf");
|
|
23942
23383
|
var logger3 = dlogger("csb:snapshotMigration0005");
|
|
23943
23384
|
var LOG_SIZE_REDUCTION2 = false;
|
|
23944
23385
|
function snapshotMigration0005(snapshot, force = false) {
|
|
@@ -23965,7 +23406,7 @@ function snapshotMigration0005(snapshot, force = false) {
|
|
|
23965
23406
|
const lostSessionIds = Array.from(sessionIdCounts.entries()).filter(([_, count]) => count > threshold).map(([id]) => id);
|
|
23966
23407
|
if (lostSessionIds.length) {
|
|
23967
23408
|
const lostSessionIdsSet = new Set(lostSessionIds);
|
|
23968
|
-
const before = LOG_SIZE_REDUCTION2 ? (0,
|
|
23409
|
+
const before = LOG_SIZE_REDUCTION2 ? (0, import_protobuf15.toBinary)(SnapshotSchema, snapshot).length : void 0;
|
|
23969
23410
|
let numRemove = 0;
|
|
23970
23411
|
for (const member of members) {
|
|
23971
23412
|
for (const solicitation of member.solicitations) {
|
|
@@ -23979,7 +23420,7 @@ function snapshotMigration0005(snapshot, force = false) {
|
|
|
23979
23420
|
const streamIdBytes = snapshot.content.value?.inception?.streamId;
|
|
23980
23421
|
const streamId = streamIdBytes ? bin_toHexString(streamIdBytes) : "";
|
|
23981
23422
|
const spaceAddress = SpaceIdFromSpaceAddress(streamId);
|
|
23982
|
-
const after = LOG_SIZE_REDUCTION2 ? (0,
|
|
23423
|
+
const after = LOG_SIZE_REDUCTION2 ? (0, import_protobuf15.toBinary)(SnapshotSchema, snapshot).length : void 0;
|
|
23983
23424
|
const mbSaved = before && after ? (before - after) / 1024 / 1024 : void 0;
|
|
23984
23425
|
const sizeLog = before && after && mbSaved ? `Snapshot size reduced from ${before} to ${after}, ${mbSaved.toFixed(2)} MB saved` : "";
|
|
23985
23426
|
logger3.info(`${spaceAddress} ${sizeLog} ${numRemove} sessionIds`);
|
|
@@ -24262,7 +23703,7 @@ var StreamStatus = class extends ObservableRecord {
|
|
|
24262
23703
|
};
|
|
24263
23704
|
|
|
24264
23705
|
// ../sdk/dist/views/models/timelineTypes.js
|
|
24265
|
-
var
|
|
23706
|
+
var import_protobuf16 = require("@bufbuild/protobuf");
|
|
24266
23707
|
var EventStatus;
|
|
24267
23708
|
(function(EventStatus2) {
|
|
24268
23709
|
EventStatus2["NOT_SENT"] = "not_sent";
|
|
@@ -24307,6 +23748,8 @@ var RiverTimelineEvent;
|
|
|
24307
23748
|
RiverTimelineEvent2["UserReceivedBlockchainTransaction"] = "m.user_received_blockchain_transaction";
|
|
24308
23749
|
RiverTimelineEvent2["ConversationSeed"] = "m.conversation_seed";
|
|
24309
23750
|
RiverTimelineEvent2["ConversationSeedResponse"] = "m.conversation_seed_response";
|
|
23751
|
+
RiverTimelineEvent2["SetAppAddress"] = "m.set_app_address";
|
|
23752
|
+
RiverTimelineEvent2["UnsetAppAddress"] = "m.unset_app_address";
|
|
24310
23753
|
})(RiverTimelineEvent || (RiverTimelineEvent = {}));
|
|
24311
23754
|
var Membership;
|
|
24312
23755
|
(function(Membership2) {
|
|
@@ -24606,6 +24049,21 @@ function toTownsContent_MemberPayload(event, message, value, description) {
|
|
|
24606
24049
|
return {
|
|
24607
24050
|
error: `Encryption Algorithm not supported: ${description}`
|
|
24608
24051
|
};
|
|
24052
|
+
case "setAppAddress":
|
|
24053
|
+
return {
|
|
24054
|
+
content: {
|
|
24055
|
+
kind: RiverTimelineEvent.SetAppAddress,
|
|
24056
|
+
userId: bin_toHexString(value.content.value.userAddress),
|
|
24057
|
+
appAddress: bin_toHexString(value.content.value.appAddress)
|
|
24058
|
+
}
|
|
24059
|
+
};
|
|
24060
|
+
case "unsetAppAddress":
|
|
24061
|
+
return {
|
|
24062
|
+
content: {
|
|
24063
|
+
kind: RiverTimelineEvent.UnsetAppAddress,
|
|
24064
|
+
userId: bin_toHexString(value.content.value.userAddress)
|
|
24065
|
+
}
|
|
24066
|
+
};
|
|
24609
24067
|
case void 0:
|
|
24610
24068
|
return { error: `Undefined payload case: ${description}` };
|
|
24611
24069
|
default:
|
|
@@ -25250,6 +24708,8 @@ function toDecryptedEvent(event, decryptedContent, userId) {
|
|
|
25250
24708
|
case RiverTimelineEvent.UserReceivedBlockchainTransaction:
|
|
25251
24709
|
case RiverTimelineEvent.ConversationSeed:
|
|
25252
24710
|
case RiverTimelineEvent.ConversationSeedResponse:
|
|
24711
|
+
case RiverTimelineEvent.SetAppAddress:
|
|
24712
|
+
case RiverTimelineEvent.UnsetAppAddress:
|
|
25253
24713
|
return event;
|
|
25254
24714
|
default:
|
|
25255
24715
|
logNever(event.content);
|
|
@@ -25360,6 +24820,10 @@ function getFallbackContent(senderDisplayName, content, error) {
|
|
|
25360
24820
|
return toConversationSeedBody(content);
|
|
25361
24821
|
case RiverTimelineEvent.ConversationSeedResponse:
|
|
25362
24822
|
return toConversationSeedResponseBody(content);
|
|
24823
|
+
case RiverTimelineEvent.SetAppAddress:
|
|
24824
|
+
return `setAppAddress: ${content.userId} -> ${content.appAddress}`;
|
|
24825
|
+
case RiverTimelineEvent.UnsetAppAddress:
|
|
24826
|
+
return `unsetAppAddress: ${content.userId}`;
|
|
25363
24827
|
default:
|
|
25364
24828
|
checkNever(content);
|
|
25365
24829
|
}
|
|
@@ -26070,7 +25534,7 @@ var TimelinesView = class extends Observable {
|
|
|
26070
25534
|
};
|
|
26071
25535
|
|
|
26072
25536
|
// ../sdk/dist/views/streams/userSettingsStreams.js
|
|
26073
|
-
var
|
|
25537
|
+
var import_protobuf17 = require("@bufbuild/protobuf");
|
|
26074
25538
|
var DEFAULT_USER_SETTINGS_STREAM_MODEL = (userSettingsStreamId) => ({
|
|
26075
25539
|
streamId: userSettingsStreamId,
|
|
26076
25540
|
initialized: false,
|
|
@@ -26078,7 +25542,7 @@ var DEFAULT_USER_SETTINGS_STREAM_MODEL = (userSettingsStreamId) => ({
|
|
|
26078
25542
|
userBlocks: {},
|
|
26079
25543
|
appAddress: void 0
|
|
26080
25544
|
});
|
|
26081
|
-
var EMPTY_USER_BLOCKS = (0,
|
|
25545
|
+
var EMPTY_USER_BLOCKS = (0, import_protobuf17.create)(UserSettingsPayload_Snapshot_UserBlocksSchema, {
|
|
26082
25546
|
blocks: [],
|
|
26083
25547
|
userId: new Uint8Array()
|
|
26084
25548
|
});
|
|
@@ -26957,7 +26421,7 @@ function membersNotInDmsTransform(value, prev, prevResult) {
|
|
|
26957
26421
|
}
|
|
26958
26422
|
|
|
26959
26423
|
// ../sdk/dist/notificationsClient.js
|
|
26960
|
-
var
|
|
26424
|
+
var import_protobuf18 = require("@bufbuild/protobuf");
|
|
26961
26425
|
|
|
26962
26426
|
// ../sdk/dist/makeNotificationRpcClient.js
|
|
26963
26427
|
var logInfo4 = dlog("csb:rpc:info");
|
|
@@ -27043,10 +26507,10 @@ var InMemoryNotificationStore = class {
|
|
|
27043
26507
|
store = {};
|
|
27044
26508
|
getItem(schema, key) {
|
|
27045
26509
|
const data = this.store[`${schema.typeName}-${key}`];
|
|
27046
|
-
return data ? (0,
|
|
26510
|
+
return data ? (0, import_protobuf18.fromBinary)(schema, bin_fromBase64(data)) : void 0;
|
|
27047
26511
|
}
|
|
27048
26512
|
setItem(schema, key, value) {
|
|
27049
|
-
this.store[`${schema.typeName}-${key}`] = bin_toBase64((0,
|
|
26513
|
+
this.store[`${schema.typeName}-${key}`] = bin_toBase64((0, import_protobuf18.toBinary)(schema, value));
|
|
27050
26514
|
}
|
|
27051
26515
|
};
|
|
27052
26516
|
var NotificationsClient = class {
|
|
@@ -27165,7 +26629,7 @@ var NotificationsClient = class {
|
|
|
27165
26629
|
const response = await client.getSettings({});
|
|
27166
26630
|
this.setLocalSettings(response);
|
|
27167
26631
|
this.streamsView.notificationSettings.updateSettings(response, Date.now());
|
|
27168
|
-
logger6.log("TNS PUSH: fetched settings", (0,
|
|
26632
|
+
logger6.log("TNS PUSH: fetched settings", (0, import_protobuf18.toJson)(GetSettingsResponseSchema, response));
|
|
27169
26633
|
this.getSettingsPromise = void 0;
|
|
27170
26634
|
return response;
|
|
27171
26635
|
} catch (error) {
|
|
@@ -27204,7 +26668,7 @@ var NotificationsClient = class {
|
|
|
27204
26668
|
});
|
|
27205
26669
|
this.updateLocalSettings((settings) => {
|
|
27206
26670
|
settings.gdmChannels = settings.gdmChannels.filter((c2) => streamIdAsString(c2.channelId) !== channelId);
|
|
27207
|
-
settings.gdmChannels.push((0,
|
|
26671
|
+
settings.gdmChannels.push((0, import_protobuf18.create)(GdmChannelSettingSchema, {
|
|
27208
26672
|
channelId: streamIdAsBytes(channelId),
|
|
27209
26673
|
value
|
|
27210
26674
|
}));
|
|
@@ -27350,8 +26814,8 @@ var StreamsView = class {
|
|
|
27350
26814
|
};
|
|
27351
26815
|
|
|
27352
26816
|
// ../sdk/dist/streamStateView.js
|
|
27353
|
-
var
|
|
27354
|
-
var
|
|
26817
|
+
var log10 = dlog("csb:streams");
|
|
26818
|
+
var logError3 = dlogError("csb:streams:error");
|
|
27355
26819
|
var EMPTY_TIMELINE = [];
|
|
27356
26820
|
var StreamStateView = class {
|
|
27357
26821
|
streamId;
|
|
@@ -27410,7 +26874,7 @@ var StreamStateView = class {
|
|
|
27410
26874
|
return this._mediaContent;
|
|
27411
26875
|
}
|
|
27412
26876
|
constructor(userId, streamId, streamsView) {
|
|
27413
|
-
|
|
26877
|
+
log10("streamStateView::constructor", streamId);
|
|
27414
26878
|
this.userId = userId;
|
|
27415
26879
|
this.streamId = streamId;
|
|
27416
26880
|
this.streamsView = streamsView || new StreamsView("", void 0);
|
|
@@ -27555,7 +27019,7 @@ var StreamStateView = class {
|
|
|
27555
27019
|
this.getContent().appendEvent(timelineEvent, cleartext, encryptionEmitter, stateEmitter);
|
|
27556
27020
|
}
|
|
27557
27021
|
} catch (e) {
|
|
27558
|
-
|
|
27022
|
+
logError3(`StreamStateView::Error appending streamId: ${this.streamId} event ${event.hashStr}`, e);
|
|
27559
27023
|
}
|
|
27560
27024
|
return confirmed;
|
|
27561
27025
|
}
|
|
@@ -27565,7 +27029,7 @@ var StreamStateView = class {
|
|
|
27565
27029
|
const eventId = bin_toHexString(eventHashes[i2]);
|
|
27566
27030
|
const event = this.minipoolEvents.get(eventId);
|
|
27567
27031
|
if (!event) {
|
|
27568
|
-
|
|
27032
|
+
logError3(`Mininblock event not found ${eventId}`);
|
|
27569
27033
|
continue;
|
|
27570
27034
|
}
|
|
27571
27035
|
this.minipoolEvents.delete(eventId);
|
|
@@ -27600,13 +27064,13 @@ var StreamStateView = class {
|
|
|
27600
27064
|
this.membershipContent.prependEvent(timelineEvent, cleartext, encryptionEmitter, stateEmitter);
|
|
27601
27065
|
break;
|
|
27602
27066
|
case void 0:
|
|
27603
|
-
|
|
27067
|
+
logError3(`StreamStateView::Error undefined payload case ${event.hashStr}`, payload);
|
|
27604
27068
|
break;
|
|
27605
27069
|
default:
|
|
27606
27070
|
this.getContent().prependEvent(timelineEvent, cleartext, encryptionEmitter, stateEmitter);
|
|
27607
27071
|
}
|
|
27608
27072
|
} catch (e) {
|
|
27609
|
-
|
|
27073
|
+
logError3(`StreamStateView::Error prepending stream ${this.streamId} event ${event.hashStr}`, e);
|
|
27610
27074
|
}
|
|
27611
27075
|
}
|
|
27612
27076
|
updateMiniblockInfo(value, update2) {
|
|
@@ -27736,7 +27200,7 @@ var StreamStateView = class {
|
|
|
27736
27200
|
}
|
|
27737
27201
|
appendLocalEvent(channelMessage, status, emitter, appClientAddress) {
|
|
27738
27202
|
const localId = genLocalId();
|
|
27739
|
-
|
|
27203
|
+
log10("appendLocalEvent", localId);
|
|
27740
27204
|
const timelineEvent = {
|
|
27741
27205
|
hashStr: localId,
|
|
27742
27206
|
creatorUserId: this.userId,
|
|
@@ -27752,10 +27216,10 @@ var StreamStateView = class {
|
|
|
27752
27216
|
return localId;
|
|
27753
27217
|
}
|
|
27754
27218
|
updateLocalEvent(localId, parsedEventHash, status, emitter) {
|
|
27755
|
-
|
|
27219
|
+
log10("updateLocalEvent", { localId, parsedEventHash, status });
|
|
27756
27220
|
const timelineEvent = this.minipoolEvents.get(localId) ?? this.minipoolEvents.get(parsedEventHash);
|
|
27757
27221
|
if (!isDefined(timelineEvent)) {
|
|
27758
|
-
const logMissing = status === "sending" ?
|
|
27222
|
+
const logMissing = status === "sending" ? logError3 : log10;
|
|
27759
27223
|
logMissing("Local event not found", {
|
|
27760
27224
|
streamId: this.streamId,
|
|
27761
27225
|
localId,
|
|
@@ -27765,7 +27229,7 @@ var StreamStateView = class {
|
|
|
27765
27229
|
return;
|
|
27766
27230
|
}
|
|
27767
27231
|
if (!isLocalEvent(timelineEvent)) {
|
|
27768
|
-
const logMissing = status === "sending" ?
|
|
27232
|
+
const logMissing = status === "sending" ? logError3 : log10;
|
|
27769
27233
|
logMissing("Event is not local", {
|
|
27770
27234
|
streamId: this.streamId,
|
|
27771
27235
|
localId,
|
|
@@ -27831,7 +27295,7 @@ function timestampToEpochMs(ts) {
|
|
|
27831
27295
|
}
|
|
27832
27296
|
|
|
27833
27297
|
// ../sdk/dist/client.js
|
|
27834
|
-
var
|
|
27298
|
+
var import_protobuf21 = require("@bufbuild/protobuf");
|
|
27835
27299
|
|
|
27836
27300
|
// ../sdk/dist/clientDecryptionExtensions.js
|
|
27837
27301
|
var ClientDecryptionExtensions = class extends BaseDecryptionExtensions {
|
|
@@ -29127,7 +28591,7 @@ var Stream = class extends import_events.default {
|
|
|
29127
28591
|
};
|
|
29128
28592
|
|
|
29129
28593
|
// ../sdk/dist/syncedStream.js
|
|
29130
|
-
var
|
|
28594
|
+
var import_protobuf20 = require("@bufbuild/protobuf");
|
|
29131
28595
|
var SyncedStream = class extends Stream {
|
|
29132
28596
|
log;
|
|
29133
28597
|
get isUpToDate() {
|
|
@@ -29160,7 +28624,7 @@ var SyncedStream = class extends Stream {
|
|
|
29160
28624
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
29161
28625
|
async initialize(nextSyncCookie, events, snapshot, miniblocks, prependedMiniblocks, prevSnapshotMiniblockNum, cleartexts) {
|
|
29162
28626
|
super.initialize(nextSyncCookie, events, snapshot, miniblocks, prependedMiniblocks, prevSnapshotMiniblockNum, cleartexts);
|
|
29163
|
-
const cachedSyncedStream = (0,
|
|
28627
|
+
const cachedSyncedStream = (0, import_protobuf20.create)(PersistedSyncedStreamSchema, {
|
|
29164
28628
|
syncCookie: nextSyncCookie,
|
|
29165
28629
|
lastSnapshotMiniblockNum: miniblocks[0].header.miniblockNum,
|
|
29166
28630
|
minipoolEvents: events,
|
|
@@ -29216,7 +28680,7 @@ var SyncedStream = class extends Stream {
|
|
|
29216
28680
|
}
|
|
29217
28681
|
const minipoolEvents = Array.from(this.view.minipoolEvents.values());
|
|
29218
28682
|
const lastSnapshotMiniblockNum = miniblock.header.snapshotHash !== void 0 && bin_equal(miniblock.header.snapshotHash, snapshot?.hash) ? miniblock.header.miniblockNum : miniblock.header.prevSnapshotMiniblockNum;
|
|
29219
|
-
const cachedSyncedStream = (0,
|
|
28683
|
+
const cachedSyncedStream = (0, import_protobuf20.create)(PersistedSyncedStreamSchema, {
|
|
29220
28684
|
syncCookie,
|
|
29221
28685
|
lastSnapshotMiniblockNum,
|
|
29222
28686
|
minipoolEvents,
|
|
@@ -30287,7 +29751,7 @@ var Client = class extends import_events2.default {
|
|
|
30287
29751
|
void channelSettings;
|
|
30288
29752
|
throw new Error("Channel streams are not supported");
|
|
30289
29753
|
}
|
|
30290
|
-
async createGDMChannel(
|
|
29754
|
+
async createGDMChannel(userIds, channelProperties, streamSettings) {
|
|
30291
29755
|
const channelIdStr = makeUniqueGDMChannelStreamId();
|
|
30292
29756
|
const channelId = streamIdAsBytes(channelIdStr);
|
|
30293
29757
|
const events = [];
|
|
@@ -30300,24 +29764,31 @@ var Client = class extends import_events2.default {
|
|
|
30300
29764
|
const joinEvent = await makeEvent(this.signerContext, make_MemberPayload_Membership2({
|
|
30301
29765
|
userId: this.userId,
|
|
30302
29766
|
op: MembershipOp.SO_JOIN,
|
|
30303
|
-
initiatorId: this.userId
|
|
30304
|
-
appAddress: this.appAddress
|
|
29767
|
+
initiatorId: this.userId
|
|
30305
29768
|
}));
|
|
30306
29769
|
events.push(joinEvent);
|
|
30307
|
-
for (const
|
|
29770
|
+
for (const userId of userIds) {
|
|
30308
29771
|
const inviteEvent = await makeEvent(this.signerContext, make_MemberPayload_Membership2({
|
|
30309
|
-
userId
|
|
29772
|
+
userId,
|
|
30310
29773
|
op: MembershipOp.SO_JOIN,
|
|
30311
|
-
initiatorId: this.userId
|
|
30312
|
-
appAddress: user.appAddress
|
|
29774
|
+
initiatorId: this.userId
|
|
30313
29775
|
}));
|
|
30314
29776
|
events.push(inviteEvent);
|
|
30315
29777
|
}
|
|
30316
|
-
|
|
29778
|
+
const result = await this.createStreamAndSync({
|
|
30317
29779
|
events,
|
|
30318
29780
|
streamId: channelId,
|
|
30319
29781
|
metadata: {}
|
|
30320
29782
|
});
|
|
29783
|
+
try {
|
|
29784
|
+
await this.ensureOutboundSession(result.streamId);
|
|
29785
|
+
} catch (error) {
|
|
29786
|
+
this.logError("Failed to ensure outbound session after GDM creation", {
|
|
29787
|
+
streamId: result.streamId,
|
|
29788
|
+
error
|
|
29789
|
+
});
|
|
29790
|
+
}
|
|
29791
|
+
return result;
|
|
30321
29792
|
}
|
|
30322
29793
|
async createMediaStream(channelId, spaceId, userId, chunkCount, firstChunk, firstChunkIv, streamSettings, perChunkEncryption) {
|
|
30323
29794
|
assert(this.userStreamId !== void 0, "userStreamId must be set");
|
|
@@ -30375,11 +29846,11 @@ var Client = class extends import_events2.default {
|
|
|
30375
29846
|
this.logCall("updateGDMChannelProperties", streamId, channelName, channelTopic);
|
|
30376
29847
|
assert(isGDMChannelStreamId(streamId), "streamId must be a valid GDM stream id");
|
|
30377
29848
|
check(isDefined(this.cryptoBackend));
|
|
30378
|
-
const channelProps = (0,
|
|
29849
|
+
const channelProps = (0, import_protobuf21.create)(ChannelPropertiesSchema, {
|
|
30379
29850
|
name: channelName,
|
|
30380
29851
|
topic: channelTopic
|
|
30381
29852
|
});
|
|
30382
|
-
const encryptedData = await this.cryptoBackend.encryptGroupEvent(streamId, (0,
|
|
29853
|
+
const encryptedData = await this.cryptoBackend.encryptGroupEvent(streamId, (0, import_protobuf21.toBinary)(ChannelPropertiesSchema, channelProps), this.defaultGroupEncryptionAlgorithm);
|
|
30383
29854
|
const event = make_GDMChannelPayload_ChannelProperties(encryptedData);
|
|
30384
29855
|
return this.makeEventAndAddToStream(streamId, event, {
|
|
30385
29856
|
method: "updateGDMChannelProperties"
|
|
@@ -30399,12 +29870,12 @@ var Client = class extends import_events2.default {
|
|
|
30399
29870
|
if (!isDefined(this.userSettingsStreamId)) {
|
|
30400
29871
|
throw Error("userSettingsStreamId is not defined");
|
|
30401
29872
|
}
|
|
30402
|
-
const fullyReadMarkersContent = (0,
|
|
29873
|
+
const fullyReadMarkersContent = (0, import_protobuf21.create)(FullyReadMarkersSchema, {
|
|
30403
29874
|
markers: fullyReadMarkers
|
|
30404
29875
|
});
|
|
30405
29876
|
return this.makeEventAndAddToStream(this.userSettingsStreamId, make_UserSettingsPayload_FullyReadMarkers({
|
|
30406
29877
|
streamId: streamIdAsBytes(channelId),
|
|
30407
|
-
content: { data: (0,
|
|
29878
|
+
content: { data: (0, import_protobuf21.toJsonString)(FullyReadMarkersSchema, fullyReadMarkersContent) }
|
|
30408
29879
|
}), { method: "sendFullyReadMarker" });
|
|
30409
29880
|
}
|
|
30410
29881
|
async updateUserBlock(userId, isBlocked) {
|
|
@@ -30436,8 +29907,8 @@ var Client = class extends import_events2.default {
|
|
|
30436
29907
|
await this.initStream(userStreamId);
|
|
30437
29908
|
}
|
|
30438
29909
|
const { key, iv } = await deriveKeyAndIV(context);
|
|
30439
|
-
const { ciphertext } = await encryptAESGCM((0,
|
|
30440
|
-
const encryptedData = (0,
|
|
29910
|
+
const { ciphertext } = await encryptAESGCM((0, import_protobuf21.toBinary)(ChunkedMediaSchema, (0, import_protobuf21.create)(ChunkedMediaSchema, chunkedMediaInfo)), key, iv);
|
|
29911
|
+
const encryptedData = (0, import_protobuf21.create)(EncryptedDataSchema, {
|
|
30441
29912
|
ciphertext: uint8ArrayToBase64(ciphertext),
|
|
30442
29913
|
algorithm: AES_GCM_DERIVED_ALGORITHM
|
|
30443
29914
|
});
|
|
@@ -30454,9 +29925,9 @@ var Client = class extends import_events2.default {
|
|
|
30454
29925
|
const userStreamId = makeUserMetadataStreamId(this.userId);
|
|
30455
29926
|
const { key, iv } = await deriveKeyAndIV(context);
|
|
30456
29927
|
bio.updatedAtEpochMs = BigInt(Date.now());
|
|
30457
|
-
const bioBinary = (0,
|
|
29928
|
+
const bioBinary = (0, import_protobuf21.toBinary)(UserBioSchema, (0, import_protobuf21.create)(UserBioSchema, bio));
|
|
30458
29929
|
const { ciphertext } = await encryptAESGCM(bioBinary, key, iv);
|
|
30459
|
-
const encryptedData = (0,
|
|
29930
|
+
const encryptedData = (0, import_protobuf21.create)(EncryptedDataSchema, {
|
|
30460
29931
|
ciphertext: uint8ArrayToBase64(ciphertext),
|
|
30461
29932
|
algorithm: AES_GCM_DERIVED_ALGORITHM
|
|
30462
29933
|
});
|
|
@@ -30723,7 +30194,7 @@ var Client = class extends import_events2.default {
|
|
|
30723
30194
|
async sendChannelMessage(streamId, inPayload, opts) {
|
|
30724
30195
|
const stream = this.stream(streamId);
|
|
30725
30196
|
check(stream !== void 0, "stream not found");
|
|
30726
|
-
const payload = (0,
|
|
30197
|
+
const payload = (0, import_protobuf21.create)(ChannelMessageSchema, inPayload);
|
|
30727
30198
|
const localId = stream.appendLocalEvent(payload, "sending", opts?.appClientAddress);
|
|
30728
30199
|
opts?.onLocalEventAppended?.(localId);
|
|
30729
30200
|
if (opts?.beforeSendEventHook) {
|
|
@@ -30741,21 +30212,9 @@ var Client = class extends import_events2.default {
|
|
|
30741
30212
|
if (opts?.appClientAddress && tags) {
|
|
30742
30213
|
tags.appClientAddress = bin_fromHexString(opts.appClientAddress);
|
|
30743
30214
|
}
|
|
30744
|
-
const cleartext = (0,
|
|
30745
|
-
|
|
30746
|
-
const
|
|
30747
|
-
const buffer = (0, import_protobuf22.toBinary)(ChannelMessageSchema, payload);
|
|
30748
|
-
switch (encryptionAlgorithm) {
|
|
30749
|
-
case GroupEncryptionAlgorithmId.HybridGroupEncryption:
|
|
30750
|
-
message = await this.encryptGroupEvent(buffer, streamId, GroupEncryptionAlgorithmId.HybridGroupEncryption);
|
|
30751
|
-
break;
|
|
30752
|
-
case GroupEncryptionAlgorithmId.GroupEncryption:
|
|
30753
|
-
message = await this.encryptGroupEvent(buffer, streamId, GroupEncryptionAlgorithmId.GroupEncryption);
|
|
30754
|
-
break;
|
|
30755
|
-
default: {
|
|
30756
|
-
message = await this.encryptGroupEvent(buffer, streamId, this.defaultGroupEncryptionAlgorithm);
|
|
30757
|
-
}
|
|
30758
|
-
}
|
|
30215
|
+
const cleartext = (0, import_protobuf21.toBinary)(ChannelMessageSchema, payload);
|
|
30216
|
+
const buffer = (0, import_protobuf21.toBinary)(ChannelMessageSchema, payload);
|
|
30217
|
+
const message = await this.encryptGroupEvent(buffer, streamId, GroupEncryptionAlgorithmId.HybridGroupEncryption);
|
|
30759
30218
|
if (!message) {
|
|
30760
30219
|
throw new Error("failed to encrypt message");
|
|
30761
30220
|
}
|
|
@@ -30936,12 +30395,11 @@ var Client = class extends import_events2.default {
|
|
|
30936
30395
|
const stream = this.stream(streamId);
|
|
30937
30396
|
check(isDefined(stream), "stream not found");
|
|
30938
30397
|
check(isDefined(this.cryptoBackend), "crypto backend not initialized");
|
|
30939
|
-
const payload = (0,
|
|
30398
|
+
const payload = (0, import_protobuf21.create)(InteractionRequestPayloadSchema, {
|
|
30940
30399
|
encryptionDevice: this.userDeviceKey(),
|
|
30941
30400
|
content
|
|
30942
30401
|
});
|
|
30943
|
-
const
|
|
30944
|
-
const encryptedData = await this.cryptoBackend.encryptGroupEvent(streamId, (0, import_protobuf22.toBinary)(InteractionRequestPayloadSchema, payload), encryptionAlgorithm);
|
|
30402
|
+
const encryptedData = await this.cryptoBackend.encryptGroupEvent(streamId, (0, import_protobuf21.toBinary)(InteractionRequestPayloadSchema, payload), GroupEncryptionAlgorithmId.HybridGroupEncryption);
|
|
30945
30403
|
const request = {
|
|
30946
30404
|
recipient: typeof recipient === "string" ? bin_fromHexString(recipient) : recipient ?? void 0,
|
|
30947
30405
|
encryptedData,
|
|
@@ -30954,7 +30412,7 @@ var Client = class extends import_events2.default {
|
|
|
30954
30412
|
});
|
|
30955
30413
|
}
|
|
30956
30414
|
async sendInteractionResponse(streamId, recipient, payload, toUserDevice, opts) {
|
|
30957
|
-
const binaryData = (0,
|
|
30415
|
+
const binaryData = (0, import_protobuf21.toBinary)(InteractionResponsePayloadSchema, (0, import_protobuf21.create)(InteractionResponsePayloadSchema, payload));
|
|
30958
30416
|
const string = bin_toBase64(binaryData);
|
|
30959
30417
|
const ciphertextmap = await this.encryptWithDeviceKeys(string, [toUserDevice]);
|
|
30960
30418
|
const ciphertext = ciphertextmap[toUserDevice.deviceKey];
|
|
@@ -31030,9 +30488,9 @@ var Client = class extends import_events2.default {
|
|
|
31030
30488
|
streamId: streamIdAsBytes(streamId)
|
|
31031
30489
|
}), { method: "joinUser" });
|
|
31032
30490
|
try {
|
|
31033
|
-
await this.
|
|
30491
|
+
await this.encryptAndShareAllGroupSessionsToUser(streamId, userId);
|
|
31034
30492
|
} catch (error) {
|
|
31035
|
-
this.logError("Failed to share group
|
|
30493
|
+
this.logError("Failed to share group sessions to user", {
|
|
31036
30494
|
streamId,
|
|
31037
30495
|
userId,
|
|
31038
30496
|
error
|
|
@@ -31046,6 +30504,9 @@ var Client = class extends import_events2.default {
|
|
|
31046
30504
|
const userStream = this.stream(this.userStreamId);
|
|
31047
30505
|
check(isDefined(userStream), "userStream not defined");
|
|
31048
30506
|
const streamIdStr = streamIdAsString(streamId);
|
|
30507
|
+
if (opts?.redeemedInvite?.inviteEncryptionData) {
|
|
30508
|
+
await this.importInviteEncryptionData(streamIdStr, opts.redeemedInvite.inviteEncryptionData);
|
|
30509
|
+
}
|
|
31049
30510
|
const stream = await this.initStream(streamId);
|
|
31050
30511
|
if (userStream.view.userContent.isJoined(streamIdStr)) {
|
|
31051
30512
|
this.logError("joinStream: user already a member", streamId);
|
|
@@ -31054,7 +30515,7 @@ var Client = class extends import_events2.default {
|
|
|
31054
30515
|
await this.makeEventAndAddToStream(this.userStreamId, make_UserPayload_UserMembership({
|
|
31055
30516
|
op: MembershipOp.SO_JOIN,
|
|
31056
30517
|
streamId: streamIdAsBytes(streamId),
|
|
31057
|
-
invitePayload: opts?.
|
|
30518
|
+
invitePayload: opts?.redeemedInvite?.signedPayload
|
|
31058
30519
|
}), { method: "joinStream" });
|
|
31059
30520
|
if (opts?.skipWaitForMiniblockConfirmation !== true) {
|
|
31060
30521
|
await stream.waitForMembership(MembershipOp.SO_JOIN);
|
|
@@ -31087,19 +30548,19 @@ var Client = class extends import_events2.default {
|
|
|
31087
30548
|
async addTransaction(chainId, receipt, content, tags) {
|
|
31088
30549
|
check(isDefined(this.userStreamId));
|
|
31089
30550
|
const transaction = {
|
|
31090
|
-
receipt: !isSolanaTransactionReceipt(receipt) ? (0,
|
|
30551
|
+
receipt: !isSolanaTransactionReceipt(receipt) ? (0, import_protobuf21.create)(BlockchainTransactionReceiptSchema, {
|
|
31091
30552
|
chainId: BigInt(chainId),
|
|
31092
30553
|
transactionHash: bin_fromHexString(receipt.transactionHash),
|
|
31093
30554
|
blockNumber: BigInt(receipt.blockNumber),
|
|
31094
30555
|
to: bin_fromHexString(receipt.to),
|
|
31095
30556
|
from: bin_fromHexString(receipt.from),
|
|
31096
|
-
logs: receipt.logs.map((
|
|
31097
|
-
address: bin_fromHexString(
|
|
31098
|
-
topics:
|
|
31099
|
-
data: bin_fromHexString(
|
|
30557
|
+
logs: receipt.logs.map((log12) => (0, import_protobuf21.create)(BlockchainTransactionReceipt_LogSchema, {
|
|
30558
|
+
address: bin_fromHexString(log12.address),
|
|
30559
|
+
topics: log12.topics.map(bin_fromHexString),
|
|
30560
|
+
data: bin_fromHexString(log12.data)
|
|
31100
30561
|
}))
|
|
31101
30562
|
}) : void 0,
|
|
31102
|
-
solanaReceipt: isSolanaTransactionReceipt(receipt) ? (0,
|
|
30563
|
+
solanaReceipt: isSolanaTransactionReceipt(receipt) ? (0, import_protobuf21.create)(SolanaBlockchainTransactionReceiptSchema, {
|
|
31103
30564
|
...receipt
|
|
31104
30565
|
}) : void 0,
|
|
31105
30566
|
content: content ?? { case: void 0 }
|
|
@@ -31513,10 +30974,9 @@ var Client = class extends import_events2.default {
|
|
|
31513
30974
|
check(isDefined(this.cryptoBackend), "crypto backend not initialized");
|
|
31514
30975
|
return this.cryptoBackend.ensureOutboundSession(streamId, this.defaultGroupEncryptionAlgorithm, opts);
|
|
31515
30976
|
}
|
|
31516
|
-
async
|
|
31517
|
-
const streamId = streamIdAsString(inStreamId);
|
|
31518
|
-
await this.ensureOutboundSession(streamId);
|
|
30977
|
+
async exportAllGroupSessions(streamId) {
|
|
31519
30978
|
check(isDefined(this.cryptoBackend), "crypto backend not initialized");
|
|
30979
|
+
await this.ensureOutboundSession(streamId);
|
|
31520
30980
|
const sessionIds = await this.cryptoBackend.getGroupSessionIds(streamId);
|
|
31521
30981
|
const sessions = [];
|
|
31522
30982
|
for (const sessionId of sessionIds) {
|
|
@@ -31525,6 +30985,11 @@ var Client = class extends import_events2.default {
|
|
|
31525
30985
|
sessions.push(session);
|
|
31526
30986
|
}
|
|
31527
30987
|
}
|
|
30988
|
+
return sessions;
|
|
30989
|
+
}
|
|
30990
|
+
async exportInviteEncryptionData(inStreamId) {
|
|
30991
|
+
const streamId = streamIdAsString(inStreamId);
|
|
30992
|
+
const sessions = await this.exportAllGroupSessions(streamId);
|
|
31528
30993
|
check(sessions.length > 0, "no group sessions found for stream");
|
|
31529
30994
|
check(new Set(sessions.map((session) => session.algorithm)).size === 1, "group sessions must all use the same algorithm");
|
|
31530
30995
|
return {
|
|
@@ -31580,6 +31045,9 @@ var Client = class extends import_events2.default {
|
|
|
31580
31045
|
throw new Error("crypto backend not initialized");
|
|
31581
31046
|
}
|
|
31582
31047
|
const cleartext = await this.cryptoBackend.decryptGroupEvent(streamId, encryptedData);
|
|
31048
|
+
if (cleartext === void 0) {
|
|
31049
|
+
throw new Error(`unrecognized encryption algorithm: ${encryptedData.algorithm}`);
|
|
31050
|
+
}
|
|
31583
31051
|
await this.persistenceStore.saveCleartext(eventId, cleartext);
|
|
31584
31052
|
return cleartext;
|
|
31585
31053
|
}
|
|
@@ -31594,7 +31062,7 @@ var Client = class extends import_events2.default {
|
|
|
31594
31062
|
check(sessions[0].streamId === streamIdStr, "streamId mismatch");
|
|
31595
31063
|
const sessionIds = sessions.map((session) => session.sessionId);
|
|
31596
31064
|
const payload = makeSessionKeys(sessions);
|
|
31597
|
-
const payloadClearText = (0,
|
|
31065
|
+
const payloadClearText = (0, import_protobuf21.toJsonString)(SessionKeysSchema, payload);
|
|
31598
31066
|
return { streamIdBytes, sessionIds, payload, payloadClearText };
|
|
31599
31067
|
}
|
|
31600
31068
|
async _encryptAndShareGroupSessionsToDevice(inStreamId, content, algorithm, userId, deviceKeys, userDevice, printLog = false) {
|
|
@@ -31652,22 +31120,17 @@ var Client = class extends import_events2.default {
|
|
|
31652
31120
|
await Promise.all(promises);
|
|
31653
31121
|
this.logCall("encryptAndShareGroupSessions: done");
|
|
31654
31122
|
}
|
|
31655
|
-
|
|
31656
|
-
async encryptAndShareLatestGroupSessionToUser(inStreamId, toUserId) {
|
|
31123
|
+
async encryptAndShareAllGroupSessionsToUser(inStreamId, toUserId) {
|
|
31657
31124
|
const streamId = streamIdAsString(inStreamId);
|
|
31658
|
-
|
|
31659
|
-
|
|
31660
|
-
|
|
31661
|
-
const sessionId = await this.cryptoBackend.ensureOutboundSession(streamId, GroupEncryptionAlgorithmId.HybridGroupEncryption);
|
|
31662
|
-
const session = await this.cryptoBackend.exportGroupSession(streamId, sessionId);
|
|
31663
|
-
if (!session) {
|
|
31664
|
-
throw new Error("Session not exported");
|
|
31125
|
+
const sessions = await this.exportAllGroupSessions(streamId);
|
|
31126
|
+
if (sessions.length === 0) {
|
|
31127
|
+
return;
|
|
31665
31128
|
}
|
|
31666
31129
|
const deviceInfo = await this.downloadSingleUserDeviceInfo(toUserId, true);
|
|
31667
31130
|
if (deviceInfo.devices.length === 0) {
|
|
31668
|
-
|
|
31131
|
+
return;
|
|
31669
31132
|
}
|
|
31670
|
-
await this.encryptAndShareGroupSessionsToDevice(streamId,
|
|
31133
|
+
await this.encryptAndShareGroupSessionsToDevice(streamId, sessions, GroupEncryptionAlgorithmId.HybridGroupEncryption, toUserId, deviceInfo.devices);
|
|
31671
31134
|
}
|
|
31672
31135
|
// Encrypt event using GroupEncryption.
|
|
31673
31136
|
encryptGroupEvent(event, streamId, algorithm) {
|
|
@@ -31698,7 +31161,7 @@ var Client = class extends import_events2.default {
|
|
|
31698
31161
|
});
|
|
31699
31162
|
}
|
|
31700
31163
|
async debugForceAddEvent(streamId, event) {
|
|
31701
|
-
const jsonStr = (0,
|
|
31164
|
+
const jsonStr = (0, import_protobuf21.toJsonString)(EnvelopeSchema, event);
|
|
31702
31165
|
await this.rpcClient.info({ debug: ["add_event", streamId, jsonStr] });
|
|
31703
31166
|
}
|
|
31704
31167
|
async debugDropStream(syncId, streamId) {
|
|
@@ -31816,7 +31279,7 @@ async function updateAppSettings(params) {
|
|
|
31816
31279
|
}
|
|
31817
31280
|
|
|
31818
31281
|
// ../sdk/dist/store/store.js
|
|
31819
|
-
var
|
|
31282
|
+
var log11 = dlog("csb:dataStore");
|
|
31820
31283
|
var LoadPriority;
|
|
31821
31284
|
(function(LoadPriority2) {
|
|
31822
31285
|
LoadPriority2["high"] = "high";
|
|
@@ -31904,10 +31367,10 @@ var LocalhostWeb3Provider = class extends import_ethers8.ethers.providers.JsonRp
|
|
|
31904
31367
|
var import_debug3 = __toESM(require_src(), 1);
|
|
31905
31368
|
|
|
31906
31369
|
// src/modules/utils.ts
|
|
31907
|
-
var
|
|
31370
|
+
var import_protobuf22 = require("@bufbuild/protobuf");
|
|
31908
31371
|
|
|
31909
31372
|
// package.json
|
|
31910
|
-
var version = "3.
|
|
31373
|
+
var version = "3.4.1";
|
|
31911
31374
|
|
|
31912
31375
|
// src/modules/utils.ts
|
|
31913
31376
|
var getPackageManager = () => {
|
|
@@ -32362,7 +31825,7 @@ async function executeWithAuthRetry(initialAuth, operation) {
|
|
|
32362
31825
|
function checkTokenExpiry(tokenHex) {
|
|
32363
31826
|
try {
|
|
32364
31827
|
const bytes = bin_fromHexString(tokenHex);
|
|
32365
|
-
const bearerToken = (0,
|
|
31828
|
+
const bearerToken = (0, import_protobuf22.fromBinary)(BearerTokenSchema, bytes);
|
|
32366
31829
|
const expiryMs = Number(bearerToken.expiryEpochMs);
|
|
32367
31830
|
if (expiryMs === 0) {
|
|
32368
31831
|
return { valid: true, expiryMs: 0 };
|
|
@@ -33524,7 +32987,7 @@ function getChain(chainId, rpcUrl) {
|
|
|
33524
32987
|
};
|
|
33525
32988
|
}
|
|
33526
32989
|
|
|
33527
|
-
// ../
|
|
32990
|
+
// ../contracts/dist/addresses.json
|
|
33528
32991
|
var addresses_default = {
|
|
33529
32992
|
dev: {
|
|
33530
32993
|
"84532": {
|
|
@@ -33618,7 +33081,7 @@ var addresses_default = {
|
|
|
33618
33081
|
}
|
|
33619
33082
|
};
|
|
33620
33083
|
|
|
33621
|
-
// ../
|
|
33084
|
+
// ../contracts/dist/index.js
|
|
33622
33085
|
var requiredAddressKeys = [
|
|
33623
33086
|
"orchestrator",
|
|
33624
33087
|
"simpleFunder",
|
|
@@ -33722,7 +33185,7 @@ function getAddressesWithFallback(context, chainId, opts) {
|
|
|
33722
33185
|
// src/modules/image.ts
|
|
33723
33186
|
var fs4 = __toESM(require("fs"));
|
|
33724
33187
|
var path4 = __toESM(require("path"));
|
|
33725
|
-
var
|
|
33188
|
+
var import_protobuf23 = require("@bufbuild/protobuf");
|
|
33726
33189
|
var import_image_size = __toESM(require("image-size"));
|
|
33727
33190
|
|
|
33728
33191
|
// ../../node_modules/.bun/file-type@19.6.0/node_modules/file-type/index.js
|
|
@@ -36183,7 +35646,7 @@ async function uploadChunkedMedia(data, mimeType, width, height, filename, botUs
|
|
|
36183
35646
|
throw new Error("Failed to create media stream");
|
|
36184
35647
|
}
|
|
36185
35648
|
if (chunkCount > 1) {
|
|
36186
|
-
let cc = (0,
|
|
35649
|
+
let cc = (0, import_protobuf23.create)(CreationCookieSchema, mediaStreamResponse.nextCreationCookie);
|
|
36187
35650
|
for (let chunkIndex = 1; chunkIndex < chunkCount; chunkIndex++) {
|
|
36188
35651
|
const chunkEvent = await makeEvent(
|
|
36189
35652
|
signerContext,
|
|
@@ -36202,7 +35665,7 @@ async function uploadChunkedMedia(data, mimeType, width, height, filename, botUs
|
|
|
36202
35665
|
if (!result?.creationCookie) {
|
|
36203
35666
|
throw new Error("Failed to send media chunk");
|
|
36204
35667
|
}
|
|
36205
|
-
cc = (0,
|
|
35668
|
+
cc = (0, import_protobuf23.create)(CreationCookieSchema, result.creationCookie);
|
|
36206
35669
|
}
|
|
36207
35670
|
}
|
|
36208
35671
|
const info = {
|
|
@@ -36219,7 +35682,7 @@ async function uploadChunkedMedia(data, mimeType, width, height, filename, botUs
|
|
|
36219
35682
|
};
|
|
36220
35683
|
}
|
|
36221
35684
|
async function setProfileImage(media, botUserId, signerContext, rpc) {
|
|
36222
|
-
const chunkedMedia = (0,
|
|
35685
|
+
const chunkedMedia = (0, import_protobuf23.create)(ChunkedMediaSchema, {
|
|
36223
35686
|
info: media.info,
|
|
36224
35687
|
streamId: media.streamId,
|
|
36225
35688
|
encryption: {
|
|
@@ -36232,8 +35695,8 @@ async function setProfileImage(media, botUserId, signerContext, rpc) {
|
|
|
36232
35695
|
});
|
|
36233
35696
|
const context = botUserId.toLowerCase();
|
|
36234
35697
|
const { key, iv } = await deriveKeyAndIV(context);
|
|
36235
|
-
const { ciphertext } = await encryptAESGCM((0,
|
|
36236
|
-
const encryptedData = (0,
|
|
35698
|
+
const { ciphertext } = await encryptAESGCM((0, import_protobuf23.toBinary)(ChunkedMediaSchema, chunkedMedia), key, iv);
|
|
35699
|
+
const encryptedData = (0, import_protobuf23.create)(EncryptedDataSchema, {
|
|
36237
35700
|
ciphertext: uint8ArrayToBase64(ciphertext),
|
|
36238
35701
|
algorithm: AES_GCM_DERIVED_ALGORITHM
|
|
36239
35702
|
});
|
|
@@ -36250,7 +35713,7 @@ async function setProfileImage(media, botUserId, signerContext, rpc) {
|
|
|
36250
35713
|
}
|
|
36251
35714
|
|
|
36252
35715
|
// src/modules/create.ts
|
|
36253
|
-
async function
|
|
35716
|
+
async function create17(argv) {
|
|
36254
35717
|
const auth = await resolveAuth(argv.ownerPrivateKey, argv.bearerToken);
|
|
36255
35718
|
if (!auth) {
|
|
36256
35719
|
console.error((0, import_picocolors5.red)("Authentication is required."));
|
|
@@ -37611,7 +37074,7 @@ async function main() {
|
|
|
37611
37074
|
break;
|
|
37612
37075
|
case "create":
|
|
37613
37076
|
if (isCreateArgs(args)) {
|
|
37614
|
-
await
|
|
37077
|
+
await create17(args);
|
|
37615
37078
|
}
|
|
37616
37079
|
break;
|
|
37617
37080
|
case "metadata":
|