@eide/foir-proto-ts 0.44.0 → 0.45.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eide/foir-proto-ts",
3
- "version": "0.44.0",
3
+ "version": "0.45.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./analytics/v1/analytics_pb": "./src/analytics/v1/analytics_pb.js",
@@ -418,6 +418,209 @@ export declare type ExperimentDeclaration = Message<"experiments.v1.ExperimentDe
418
418
  export declare const ExperimentDeclarationSchema: GenMessage<ExperimentDeclaration>;
419
419
 
420
420
  /**
421
+ * ExperimentMetricSpec is a caller-supplied request to aggregate a
422
+ * numeric metadata value over the experiment's conversion events.
423
+ *
424
+ * path is a dot-separated list of object keys ("a.b.c") into the
425
+ * metadata JSONB, validated server-side against
426
+ * ^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$ — no array
427
+ * indexing, no JSONPath operators. Keys are bound as parameters in the
428
+ * aggregation SQL so even invalid paths cannot become injection
429
+ * vectors.
430
+ *
431
+ * Path target must be a JSON number. Rows where the target is a
432
+ * non-numeric JSON value (string, bool, null, missing) are excluded
433
+ * from the aggregation and counted in skipped_row_count.
434
+ *
435
+ * goal_key, when set, scopes the aggregation to events of that goal —
436
+ * useful for "average cart value among users who completed checkout"
437
+ * without bleeding cart-abandonment events into the AVG.
438
+ *
439
+ * @generated from message experiments.v1.ExperimentMetricSpec
440
+ */
441
+ export declare type ExperimentMetricSpec = Message<"experiments.v1.ExperimentMetricSpec"> & {
442
+ /**
443
+ * @generated from field: string name = 1;
444
+ */
445
+ name: string;
446
+
447
+ /**
448
+ * @generated from field: string path = 2;
449
+ */
450
+ path: string;
451
+
452
+ /**
453
+ * @generated from field: experiments.v1.MetricAggregator aggregator = 3;
454
+ */
455
+ aggregator: MetricAggregator;
456
+
457
+ /**
458
+ * @generated from field: optional string goal_key = 4;
459
+ */
460
+ goalKey?: string | undefined;
461
+ };
462
+
463
+ /**
464
+ * Describes the message experiments.v1.ExperimentMetricSpec.
465
+ * Use `create(ExperimentMetricSpecSchema)` to create a new message.
466
+ */
467
+ export declare const ExperimentMetricSpecSchema: GenMessage<ExperimentMetricSpec>;
468
+
469
+ /**
470
+ * SignificanceResult is a frequentist two-proportion comparison of a
471
+ * variant's conversion rate against the control's. Computed
472
+ * server-side from assignment_count and unique_converters via the
473
+ * two-proportion z-test. Returned per (variant, goal) for non-control
474
+ * variants only — control's slot is omitted because there's no
475
+ * comparison to compute.
476
+ *
477
+ * p_value is the raw two-sided value; consumers running multiple
478
+ * simultaneous comparisons (e.g. 3 variants × 4 goals = 12 tests)
479
+ * should apply their own multiple-testing correction. The CLI human
480
+ * renderer applies Bonferroni across the visible test family because
481
+ * it knows the family size; the wire response stays raw because the
482
+ * server doesn't know what other queries the consumer is running.
483
+ *
484
+ * is_significant gates p_value < 0.05 on minimum sample size per arm
485
+ * (default 100, overridable via GetExperimentStatsRequest.min_sample_size)
486
+ * to prevent false positives at low n.
487
+ *
488
+ * @generated from message experiments.v1.SignificanceResult
489
+ */
490
+ export declare type SignificanceResult = Message<"experiments.v1.SignificanceResult"> & {
491
+ /**
492
+ * @generated from field: double p_value = 1;
493
+ */
494
+ pValue: number;
495
+
496
+ /**
497
+ * @generated from field: double relative_lift = 2;
498
+ */
499
+ relativeLift: number;
500
+
501
+ /**
502
+ * @generated from field: double absolute_lift = 3;
503
+ */
504
+ absoluteLift: number;
505
+
506
+ /**
507
+ * @generated from field: double ci_lower = 4;
508
+ */
509
+ ciLower: number;
510
+
511
+ /**
512
+ * @generated from field: double ci_upper = 5;
513
+ */
514
+ ciUpper: number;
515
+
516
+ /**
517
+ * @generated from field: bool is_significant = 6;
518
+ */
519
+ isSignificant: boolean;
520
+
521
+ /**
522
+ * @generated from field: int32 min_sample_size = 7;
523
+ */
524
+ minSampleSize: number;
525
+ };
526
+
527
+ /**
528
+ * Describes the message experiments.v1.SignificanceResult.
529
+ * Use `create(SignificanceResultSchema)` to create a new message.
530
+ */
531
+ export declare const SignificanceResultSchema: GenMessage<SignificanceResult>;
532
+
533
+ /**
534
+ * MetricSignificanceResult is the metric counterpart of
535
+ * SignificanceResult. p_value comes from Welch's t-test (SUM/AVG) or
536
+ * the percentile bootstrap (P50/P95). MIN/MAX/COUNT have no meaningful
537
+ * significance test and this message is omitted on those aggregators.
538
+ *
539
+ * @generated from message experiments.v1.MetricSignificanceResult
540
+ */
541
+ export declare type MetricSignificanceResult = Message<"experiments.v1.MetricSignificanceResult"> & {
542
+ /**
543
+ * @generated from field: double p_value = 1;
544
+ */
545
+ pValue: number;
546
+
547
+ /**
548
+ * @generated from field: double relative_lift = 2;
549
+ */
550
+ relativeLift: number;
551
+
552
+ /**
553
+ * @generated from field: double absolute_lift = 3;
554
+ */
555
+ absoluteLift: number;
556
+
557
+ /**
558
+ * @generated from field: double ci_lower = 4;
559
+ */
560
+ ciLower: number;
561
+
562
+ /**
563
+ * @generated from field: double ci_upper = 5;
564
+ */
565
+ ciUpper: number;
566
+
567
+ /**
568
+ * @generated from field: bool is_significant = 6;
569
+ */
570
+ isSignificant: boolean;
571
+ };
572
+
573
+ /**
574
+ * Describes the message experiments.v1.MetricSignificanceResult.
575
+ * Use `create(MetricSignificanceResultSchema)` to create a new message.
576
+ */
577
+ export declare const MetricSignificanceResultSchema: GenMessage<MetricSignificanceResult>;
578
+
579
+ /**
580
+ * VariantGoalStats is one (variant, goal) cell of the experimentStats
581
+ * matrix. unique_converters de-duplicates by COALESCE(customer_id,
582
+ * viewer_key) — a user converting twice on the same goal counts as 1
583
+ * unique. conversion_rate = unique_converters / assignment_count
584
+ * (zero-safe — returns 0.0 when no assignments).
585
+ *
586
+ * @generated from message experiments.v1.VariantGoalStats
587
+ */
588
+ export declare type VariantGoalStats = Message<"experiments.v1.VariantGoalStats"> & {
589
+ /**
590
+ * @generated from field: string goal_key = 1;
591
+ */
592
+ goalKey: string;
593
+
594
+ /**
595
+ * @generated from field: int32 conversion_event_count = 2;
596
+ */
597
+ conversionEventCount: number;
598
+
599
+ /**
600
+ * @generated from field: int32 unique_converters = 3;
601
+ */
602
+ uniqueConverters: number;
603
+
604
+ /**
605
+ * @generated from field: double conversion_rate = 4;
606
+ */
607
+ conversionRate: number;
608
+
609
+ /**
610
+ * @generated from field: optional experiments.v1.SignificanceResult significance = 5;
611
+ */
612
+ significance?: SignificanceResult | undefined;
613
+ };
614
+
615
+ /**
616
+ * Describes the message experiments.v1.VariantGoalStats.
617
+ * Use `create(VariantGoalStatsSchema)` to create a new message.
618
+ */
619
+ export declare const VariantGoalStatsSchema: GenMessage<VariantGoalStats>;
620
+
621
+ /**
622
+ * VariantStats aggregates one variant across its declared goals.
623
+ *
421
624
  * @generated from message experiments.v1.VariantStats
422
625
  */
423
626
  export declare type VariantStats = Message<"experiments.v1.VariantStats"> & {
@@ -427,19 +630,19 @@ export declare type VariantStats = Message<"experiments.v1.VariantStats"> & {
427
630
  variantKey: string;
428
631
 
429
632
  /**
430
- * @generated from field: int32 assignment_count = 2;
633
+ * @generated from field: bool is_control = 2;
431
634
  */
432
- assignmentCount: number;
635
+ isControl: boolean;
433
636
 
434
637
  /**
435
- * @generated from field: double conversion_rate = 3;
638
+ * @generated from field: int32 assignment_count = 3;
436
639
  */
437
- conversionRate: number;
640
+ assignmentCount: number;
438
641
 
439
642
  /**
440
- * @generated from field: optional google.protobuf.Struct additional_metrics = 4;
643
+ * @generated from field: repeated experiments.v1.VariantGoalStats goal_stats = 4;
441
644
  */
442
- additionalMetrics?: JsonObject | undefined;
645
+ goalStats: VariantGoalStats[];
443
646
  };
444
647
 
445
648
  /**
@@ -449,18 +652,195 @@ export declare type VariantStats = Message<"experiments.v1.VariantStats"> & {
449
652
  export declare const VariantStatsSchema: GenMessage<VariantStats>;
450
653
 
451
654
  /**
655
+ * GoalStats summarises one goal across all variants.
656
+ *
657
+ * @generated from message experiments.v1.GoalStats
658
+ */
659
+ export declare type GoalStats = Message<"experiments.v1.GoalStats"> & {
660
+ /**
661
+ * @generated from field: string goal_key = 1;
662
+ */
663
+ goalKey: string;
664
+
665
+ /**
666
+ * @generated from field: string goal_name = 2;
667
+ */
668
+ goalName: string;
669
+
670
+ /**
671
+ * @generated from field: bool is_primary = 3;
672
+ */
673
+ isPrimary: boolean;
674
+
675
+ /**
676
+ * @generated from field: int32 total_conversions = 4;
677
+ */
678
+ totalConversions: number;
679
+
680
+ /**
681
+ * @generated from field: int32 total_unique_converters = 5;
682
+ */
683
+ totalUniqueConverters: number;
684
+ };
685
+
686
+ /**
687
+ * Describes the message experiments.v1.GoalStats.
688
+ * Use `create(GoalStatsSchema)` to create a new message.
689
+ */
690
+ export declare const GoalStatsSchema: GenMessage<GoalStats>;
691
+
692
+ /**
693
+ * DailyStatsPoint is one (variant, goal, day) row of the time series.
694
+ * stat_date is "YYYY-MM-DD" in UTC. unique_converters is per-day —
695
+ * summing the daily uniques does NOT equal the cumulative unique
696
+ * (a user who converts on day 1 and day 3 counts as 1 unique each
697
+ * day, but 1 cumulative).
698
+ *
699
+ * @generated from message experiments.v1.DailyStatsPoint
700
+ */
701
+ export declare type DailyStatsPoint = Message<"experiments.v1.DailyStatsPoint"> & {
702
+ /**
703
+ * @generated from field: string variant_key = 1;
704
+ */
705
+ variantKey: string;
706
+
707
+ /**
708
+ * @generated from field: string goal_key = 2;
709
+ */
710
+ goalKey: string;
711
+
712
+ /**
713
+ * @generated from field: string stat_date = 3;
714
+ */
715
+ statDate: string;
716
+
717
+ /**
718
+ * @generated from field: int32 conversion_event_count = 4;
719
+ */
720
+ conversionEventCount: number;
721
+
722
+ /**
723
+ * @generated from field: int32 unique_converters = 5;
724
+ */
725
+ uniqueConverters: number;
726
+ };
727
+
728
+ /**
729
+ * Describes the message experiments.v1.DailyStatsPoint.
730
+ * Use `create(DailyStatsPointSchema)` to create a new message.
731
+ */
732
+ export declare const DailyStatsPointSchema: GenMessage<DailyStatsPoint>;
733
+
734
+ /**
735
+ * VariantMetricStats is one (variant, metric) cell of the metric
736
+ * aggregation matrix.
737
+ *
738
+ * @generated from message experiments.v1.VariantMetricStats
739
+ */
740
+ export declare type VariantMetricStats = Message<"experiments.v1.VariantMetricStats"> & {
741
+ /**
742
+ * @generated from field: string variant_key = 1;
743
+ */
744
+ variantKey: string;
745
+
746
+ /**
747
+ * @generated from field: string metric_name = 2;
748
+ */
749
+ metricName: string;
750
+
751
+ /**
752
+ * @generated from field: double value = 3;
753
+ */
754
+ value: number;
755
+
756
+ /**
757
+ * @generated from field: int32 sample_size = 4;
758
+ */
759
+ sampleSize: number;
760
+
761
+ /**
762
+ * @generated from field: int32 skipped_row_count = 5;
763
+ */
764
+ skippedRowCount: number;
765
+
766
+ /**
767
+ * @generated from field: optional experiments.v1.MetricSignificanceResult significance = 6;
768
+ */
769
+ significance?: MetricSignificanceResult | undefined;
770
+ };
771
+
772
+ /**
773
+ * Describes the message experiments.v1.VariantMetricStats.
774
+ * Use `create(VariantMetricStatsSchema)` to create a new message.
775
+ */
776
+ export declare const VariantMetricStatsSchema: GenMessage<VariantMetricStats>;
777
+
778
+ /**
779
+ * ExperimentStats is the complete decision-grade response. variants
780
+ * gives per-variant assignment counts + per-goal breakdowns; goals
781
+ * gives experiment-wide totals; daily gives a time-series for charts;
782
+ * metric_stats holds optional caller-requested metadata aggregations.
783
+ *
784
+ * window_from / window_to echo the effective aggregation window the
785
+ * server used (caller-supplied or default).
786
+ *
787
+ * daily_grain is "day" for windows ≤ 365 days and "week" for longer
788
+ * windows — the handler downsamples automatically to keep the daily
789
+ * payload bounded. Consumers should use this to label their chart
790
+ * axis correctly.
791
+ *
452
792
  * @generated from message experiments.v1.ExperimentStats
453
793
  */
454
794
  export declare type ExperimentStats = Message<"experiments.v1.ExperimentStats"> & {
455
795
  /**
456
- * @generated from field: repeated experiments.v1.VariantStats variant_stats = 1;
796
+ * @generated from field: string experiment_id = 1;
797
+ */
798
+ experimentId: string;
799
+
800
+ /**
801
+ * @generated from field: string experiment_key = 2;
457
802
  */
458
- variantStats: VariantStats[];
803
+ experimentKey: string;
459
804
 
460
805
  /**
461
- * @generated from field: int32 total_assignments = 2;
806
+ * @generated from field: int32 total_assignments = 3;
462
807
  */
463
808
  totalAssignments: number;
809
+
810
+ /**
811
+ * @generated from field: repeated experiments.v1.VariantStats variants = 4;
812
+ */
813
+ variants: VariantStats[];
814
+
815
+ /**
816
+ * @generated from field: repeated experiments.v1.GoalStats goals = 5;
817
+ */
818
+ goals: GoalStats[];
819
+
820
+ /**
821
+ * @generated from field: google.protobuf.Timestamp window_from = 6;
822
+ */
823
+ windowFrom?: Timestamp | undefined;
824
+
825
+ /**
826
+ * @generated from field: google.protobuf.Timestamp window_to = 7;
827
+ */
828
+ windowTo?: Timestamp | undefined;
829
+
830
+ /**
831
+ * @generated from field: repeated experiments.v1.DailyStatsPoint daily = 8;
832
+ */
833
+ daily: DailyStatsPoint[];
834
+
835
+ /**
836
+ * @generated from field: string daily_grain = 9;
837
+ */
838
+ dailyGrain: string;
839
+
840
+ /**
841
+ * @generated from field: repeated experiments.v1.VariantMetricStats metric_stats = 10;
842
+ */
843
+ metricStats: VariantMetricStats[];
464
844
  };
465
845
 
466
846
  /**
@@ -949,6 +1329,41 @@ export declare type GetExperimentStatsRequest = Message<"experiments.v1.GetExper
949
1329
  * @generated from field: string experiment_id = 1;
950
1330
  */
951
1331
  experimentId: string;
1332
+
1333
+ /**
1334
+ * Caller-supplied time window. Both bounds are inclusive on
1335
+ * converted_at. Each may be set independently — the server fills
1336
+ * unset bounds with the defaults: from = experiment.start_date (or
1337
+ * earliest event when start_date is unset); to = NOW().
1338
+ *
1339
+ * @generated from field: optional google.protobuf.Timestamp from = 2;
1340
+ */
1341
+ from?: Timestamp | undefined;
1342
+
1343
+ /**
1344
+ * @generated from field: optional google.protobuf.Timestamp to = 3;
1345
+ */
1346
+ to?: Timestamp | undefined;
1347
+
1348
+ /**
1349
+ * Optional per-call metric aggregations over conversion_events.metadata.
1350
+ * Capped at 10 specs per request — past the cap the handler returns
1351
+ * InvalidArgument. Each spec produces one VariantMetricStats row per
1352
+ * variant in the response.
1353
+ *
1354
+ * @generated from field: repeated experiments.v1.ExperimentMetricSpec metrics = 4;
1355
+ */
1356
+ metrics: ExperimentMetricSpec[];
1357
+
1358
+ /**
1359
+ * Override for the SignificanceResult.is_significant sample-size gate.
1360
+ * Defaults to 100 per arm. Tenants running early-stage experiments
1361
+ * can lower this; the value used is echoed back on every per-goal
1362
+ * SignificanceResult so callers see the gate that was applied.
1363
+ *
1364
+ * @generated from field: optional int32 min_sample_size = 5;
1365
+ */
1366
+ minSampleSize?: number | undefined;
952
1367
  };
953
1368
 
954
1369
  /**
@@ -1456,6 +1871,61 @@ export enum ExperimentStatus {
1456
1871
  */
1457
1872
  export declare const ExperimentStatusSchema: GenEnum<ExperimentStatus>;
1458
1873
 
1874
+ /**
1875
+ * MetricAggregator names the aggregation operation applied to a JSONB
1876
+ * path on conversion_events.metadata. SUM/AVG/COUNT/MIN/MAX map to the
1877
+ * native Postgres aggregates; P50/P95 use percentile_cont(0.5|0.95)
1878
+ * WITHIN GROUP (ORDER BY value).
1879
+ *
1880
+ * @generated from enum experiments.v1.MetricAggregator
1881
+ */
1882
+ export enum MetricAggregator {
1883
+ /**
1884
+ * @generated from enum value: METRIC_AGGREGATOR_UNSPECIFIED = 0;
1885
+ */
1886
+ UNSPECIFIED = 0,
1887
+
1888
+ /**
1889
+ * @generated from enum value: METRIC_AGGREGATOR_SUM = 1;
1890
+ */
1891
+ SUM = 1,
1892
+
1893
+ /**
1894
+ * @generated from enum value: METRIC_AGGREGATOR_AVG = 2;
1895
+ */
1896
+ AVG = 2,
1897
+
1898
+ /**
1899
+ * @generated from enum value: METRIC_AGGREGATOR_COUNT = 3;
1900
+ */
1901
+ COUNT = 3,
1902
+
1903
+ /**
1904
+ * @generated from enum value: METRIC_AGGREGATOR_MIN = 4;
1905
+ */
1906
+ MIN = 4,
1907
+
1908
+ /**
1909
+ * @generated from enum value: METRIC_AGGREGATOR_MAX = 5;
1910
+ */
1911
+ MAX = 5,
1912
+
1913
+ /**
1914
+ * @generated from enum value: METRIC_AGGREGATOR_P50 = 6;
1915
+ */
1916
+ P50 = 6,
1917
+
1918
+ /**
1919
+ * @generated from enum value: METRIC_AGGREGATOR_P95 = 7;
1920
+ */
1921
+ P95 = 7,
1922
+ }
1923
+
1924
+ /**
1925
+ * Describes the enum experiments.v1.MetricAggregator.
1926
+ */
1927
+ export declare const MetricAggregatorSchema: GenEnum<MetricAggregator>;
1928
+
1459
1929
  /**
1460
1930
  * @generated from service experiments.v1.ExperimentsService
1461
1931
  */
@@ -10,7 +10,7 @@ import { file_expressions_v1_expressions } from "../../expressions/v1/expression
10
10
  * Describes the file experiments/v1/experiments.proto.
11
11
  */
12
12
  export const file_experiments_v1_experiments = /*@__PURE__*/
13
- fileDesc("CiBleHBlcmltZW50cy92MS9leHBlcmltZW50cy5wcm90bxIOZXhwZXJpbWVudHMudjEiswEKE0V4cGVyaW1lbnRUYXJnZXRpbmcSDAoEdHlwZRgBIAEoCRIXCgpzZWdtZW50X2lkGAIgASgJSACIAQESGAoLc2VnbWVudF9rZXkYAyABKAlIAYgBARIyCgVydWxlcxgEIAEoCzIeLmV4cHJlc3Npb25zLnYxLlJ1bGVFeHByZXNzaW9uSAKIAQFCDQoLX3NlZ21lbnRfaWRCDgoMX3NlZ21lbnRfa2V5QggKBl9ydWxlcyJ4ChFFeHBlcmltZW50VmFyaWFudBILCgNrZXkYASABKAkSDAoEbmFtZRgCIAEoCRIPCgdwZXJjZW50GAMgASgFEiwKBmNvbmZpZxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIJCgdfY29uZmlnImkKDkV4cGVyaW1lbnRHb2FsEgsKA2tleRgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESEgoKaXNfcHJpbWFyeRgEIAEoCEIOCgxfZGVzY3JpcHRpb24iYAoURXhwZXJpbWVudEZ1bm5lbFN0ZXASEAoIZ29hbF9rZXkYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBQg4KDF9kZXNjcmlwdGlvbiKDBwoKRXhwZXJpbWVudBIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSDAoEbmFtZRgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEjAKBnN0YXR1cxgKIAEoDjIgLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRTdGF0dXMSEQoJaXNfYWN0aXZlGAsgASgIEjYKCXRhcmdldGluZxgUIAEoCzIjLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRUYXJnZXRpbmcSFwoPY29udHJvbF9wZXJjZW50GBUgASgFEjMKCHZhcmlhbnRzGBYgAygLMiEuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFZhcmlhbnQSHgoWYXNzaWdubWVudF9wZXJzaXN0ZW5jZRgXIAEoCRIgChNleGNsdXNpb25fZ3JvdXBfa2V5GBggASgJSAGIAQESMwoKc3RhcnRfZGF0ZRgeIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAogBARIxCghlbmRfZGF0ZRgfIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIA4gBARItCgdtZXRyaWNzGCMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgEiAEBEi0KBWdvYWxzGCQgAygLMh4uZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEdvYWwSOgoMZnVubmVsX3N0ZXBzGCUgAygLMiQuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEZ1bm5lbFN0ZXASEQoJdGVuYW50X2lkGCggASgJEhIKCnByb2plY3RfaWQYKSABKAkSFwoKY3JlYXRlZF9ieRgtIAEoCUgFiAEBEhcKCnVwZGF0ZWRfYnkYLiABKAlIBogBARIuCgpjcmVhdGVkX2F0GDIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GDMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIOCgxfZGVzY3JpcHRpb25CFgoUX2V4Y2x1c2lvbl9ncm91cF9rZXlCDQoLX3N0YXJ0X2RhdGVCCwoJX2VuZF9kYXRlQgoKCF9tZXRyaWNzQg0KC19jcmVhdGVkX2J5Qg0KC191cGRhdGVkX2J5ItQDChRFeHBlcmltZW50QXNzaWdubWVudBIKCgJpZBgBIAEoCRIVCg1leHBlcmltZW50X2lkGAIgASgJEhgKC2N1c3RvbWVyX2lkGAMgASgJSACIAQESEwoLdmFyaWFudF9rZXkYBCABKAkSGQoRYXNzaWdubWVudF9tZXRob2QYBSABKAkSFgoOZXhwZXJpbWVudF9rZXkYBiABKAkSFwoKdmlld2VyX2tleRgHIAEoCUgBiAEBEhEKCXRlbmFudF9pZBgKIAEoCRISCgpwcm9qZWN0X2lkGAsgASgJEi8KC2Fzc2lnbmVkX2F0GBQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCg1maXJzdF9zZWVuX2F0GBUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0X3NlZW5fYXQYFiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmV4cGlyZXNfYXQYFyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5Qg0KC19leHBpcmVzX2F0IkUKFUV4cGVyaW1lbnREZWNsYXJhdGlvbhIWCg5leHBlcmltZW50X2tleRgBIAEoCRIUCgx2YXJpYW50X2tleXMYAiADKAkipwEKDFZhcmlhbnRTdGF0cxITCgt2YXJpYW50X2tleRgBIAEoCRIYChBhc3NpZ25tZW50X2NvdW50GAIgASgFEhcKD2NvbnZlcnNpb25fcmF0ZRgDIAEoARI4ChJhZGRpdGlvbmFsX21ldHJpY3MYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQFCFQoTX2FkZGl0aW9uYWxfbWV0cmljcyJhCg9FeHBlcmltZW50U3RhdHMSMwoNdmFyaWFudF9zdGF0cxgBIAMoCzIcLmV4cGVyaW1lbnRzLnYxLlZhcmlhbnRTdGF0cxIZChF0b3RhbF9hc3NpZ25tZW50cxgCIAEoBSL5BAoXQ3JlYXRlRXhwZXJpbWVudFJlcXVlc3QSCwoDa2V5GAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARI7Cgl0YXJnZXRpbmcYBCABKAsyIy5leHBlcmltZW50cy52MS5FeHBlcmltZW50VGFyZ2V0aW5nSAGIAQESHAoPY29udHJvbF9wZXJjZW50GAUgASgFSAKIAQESMwoIdmFyaWFudHMYBiADKAsyIS5leHBlcmltZW50cy52MS5FeHBlcmltZW50VmFyaWFudBIzCgpzdGFydF9kYXRlGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBEjEKCGVuZF9kYXRlGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEiMKFmFzc2lnbm1lbnRfcGVyc2lzdGVuY2UYCSABKAlIBYgBARItCgVnb2FscxgKIAMoCzIeLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRHb2FsEjoKDGZ1bm5lbF9zdGVwcxgLIAMoCzIkLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRGdW5uZWxTdGVwEiAKE2V4Y2x1c2lvbl9ncm91cF9rZXkYDCABKAlIBogBAUIOCgxfZGVzY3JpcHRpb25CDAoKX3RhcmdldGluZ0ISChBfY29udHJvbF9wZXJjZW50Qg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIZChdfYXNzaWdubWVudF9wZXJzaXN0ZW5jZUIWChRfZXhjbHVzaW9uX2dyb3VwX2tleSJKChhDcmVhdGVFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiIgoUR2V0RXhwZXJpbWVudFJlcXVlc3QSCgoCaWQYASABKAkiRwoVR2V0RXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50IigKGUdldEV4cGVyaW1lbnRCeUtleVJlcXVlc3QSCwoDa2V5GAEgASgJIkwKGkdldEV4cGVyaW1lbnRCeUtleVJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Ip8BChZMaXN0RXhwZXJpbWVudHNSZXF1ZXN0EjUKBnN0YXR1cxgBIAEoDjIgLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRTdGF0dXNIAIgBARIWCglpc19hY3RpdmUYAiABKAhIAYgBARINCgVsaW1pdBgKIAEoBRIOCgZvZmZzZXQYCyABKAVCCQoHX3N0YXR1c0IMCgpfaXNfYWN0aXZlIlkKF0xpc3RFeHBlcmltZW50c1Jlc3BvbnNlEi8KC2V4cGVyaW1lbnRzGAEgAygLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudBINCgV0b3RhbBgCIAEoBSLaBQoXVXBkYXRlRXhwZXJpbWVudFJlcXVlc3QSCgoCaWQYASABKAkSEQoEbmFtZRgCIAEoCUgAiAEBEhgKC2Rlc2NyaXB0aW9uGAMgASgJSAGIAQESOwoJdGFyZ2V0aW5nGAQgASgLMiMuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFRhcmdldGluZ0gCiAEBEhwKD2NvbnRyb2xfcGVyY2VudBgFIAEoBUgDiAEBEjMKCHZhcmlhbnRzGAYgAygLMiEuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFZhcmlhbnQSMwoKc3RhcnRfZGF0ZRgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIBIgBARIxCghlbmRfZGF0ZRgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIBYgBARIjChZhc3NpZ25tZW50X3BlcnNpc3RlbmNlGAkgASgJSAaIAQESLQoFZ29hbHMYCiADKAsyHi5leHBlcmltZW50cy52MS5FeHBlcmltZW50R29hbBITCgtnb2Fsc19jbGVhchgLIAEoCBI6CgxmdW5uZWxfc3RlcHMYDCADKAsyJC5leHBlcmltZW50cy52MS5FeHBlcmltZW50RnVubmVsU3RlcBIaChJmdW5uZWxfc3RlcHNfY2xlYXIYDSABKAgSIAoTZXhjbHVzaW9uX2dyb3VwX2tleRgOIAEoCUgHiAEBEiEKGWV4Y2x1c2lvbl9ncm91cF9rZXlfY2xlYXIYDyABKAhCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl90YXJnZXRpbmdCEgoQX2NvbnRyb2xfcGVyY2VudEINCgtfc3RhcnRfZGF0ZUILCglfZW5kX2RhdGVCGQoXX2Fzc2lnbm1lbnRfcGVyc2lzdGVuY2VCFgoUX2V4Y2x1c2lvbl9ncm91cF9rZXkiSgoYVXBkYXRlRXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50IiUKF0RlbGV0ZUV4cGVyaW1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJIisKGERlbGV0ZUV4cGVyaW1lbnRSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIi8KFlN0YXJ0RXhwZXJpbWVudFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCSJJChdTdGFydEV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIvChZQYXVzZUV4cGVyaW1lbnRSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkiSQoXUGF1c2VFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiMAoXUmVzdW1lRXhwZXJpbWVudFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCSJKChhSZXN1bWVFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiLQoURW5kRXhwZXJpbWVudFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCSJHChVFbmRFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiMgoZR2V0RXhwZXJpbWVudFN0YXRzUmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkwKGkdldEV4cGVyaW1lbnRTdGF0c1Jlc3BvbnNlEi4KBXN0YXRzGAEgASgLMh8uZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFN0YXRzIpwBChxGb3JjZUFzc2lnbkV4cGVyaW1lbnRSZXF1ZXN0EhgKC2N1c3RvbWVyX2lkGAEgASgJSACIAQESFQoNZXhwZXJpbWVudF9pZBgCIAEoCRITCgt2YXJpYW50X2tleRgDIAEoCRIXCgp2aWV3ZXJfa2V5GAQgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IlkKHUZvcmNlQXNzaWduRXhwZXJpbWVudFJlc3BvbnNlEjgKCmFzc2lnbm1lbnQYASABKAsyJC5leHBlcmltZW50cy52MS5FeHBlcmltZW50QXNzaWdubWVudCKMAQohUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXF1ZXN0EhgKC2N1c3RvbWVyX2lkGAEgASgJSACIAQESFQoNZXhwZXJpbWVudF9pZBgCIAEoCRIXCgp2aWV3ZXJfa2V5GAMgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IjUKIlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50UmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJRChxBcHBseUV4cGVyaW1lbnRXaW5uZXJSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkSGgoSd2lubmVyX3ZhcmlhbnRfa2V5GAIgASgJIo0BCh1BcHBseUV4cGVyaW1lbnRXaW5uZXJSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudBIdChVhZmZlY3RlZF9yZWNvcmRfY291bnQYAiABKAUSHQoVY2xlYXJlZF92YXJpYW50X2NvdW50GAMgASgFIloKJVByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCRIaChJ3aW5uZXJfdmFyaWFudF9rZXkYAiABKAkiZwoOQWZmZWN0ZWRSZWNvcmQSEQoJcmVjb3JkX2lkGAEgASgJEiIKGmN1cnJlbnRfZGVmYXVsdF92YXJpYW50X2lkGAIgASgJEh4KFm5ld19kZWZhdWx0X3ZhcmlhbnRfaWQYAyABKAkigQEKJlByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dFJlc3BvbnNlEjgKEGFmZmVjdGVkX3JlY29yZHMYASADKAsyHi5leHBlcmltZW50cy52MS5BZmZlY3RlZFJlY29yZBIdChVjbGVhcmVkX3ZhcmlhbnRfY291bnQYAiABKAUiMgoZUm9sbGJhY2tFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIosBChpSb2xsYmFja0V4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudBIdChVyZXN0b3JlZF9yZWNvcmRfY291bnQYAiABKAUSHgoWcmVzdG9yZWRfdmFyaWFudF9jb3VudBgDIAEoBSJpChVHZXRBc3NpZ25tZW50c1JlcXVlc3QSGAoLY3VzdG9tZXJfaWQYASABKAlIAIgBARIXCgp2aWV3ZXJfa2V5GAIgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IlMKFkdldEFzc2lnbm1lbnRzUmVzcG9uc2USOQoLYXNzaWdubWVudHMYASADKAsyJC5leHBlcmltZW50cy52MS5FeHBlcmltZW50QXNzaWdubWVudCIjCiFMaXN0RXhwZXJpbWVudERlY2xhcmF0aW9uc1JlcXVlc3QiYQoiTGlzdEV4cGVyaW1lbnREZWNsYXJhdGlvbnNSZXNwb25zZRI7CgxkZWNsYXJhdGlvbnMYASADKAsyJS5leHBlcmltZW50cy52MS5FeHBlcmltZW50RGVjbGFyYXRpb24iggEKFlJlc29sdmVFeHBvc3VyZVJlcXVlc3QSFgoOZXhwZXJpbWVudF9rZXkYASABKAkSGAoLY3VzdG9tZXJfaWQYAiABKAlIAIgBARIXCgp2aWV3ZXJfa2V5GAMgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IqQBChdSZXNvbHZlRXhwb3N1cmVSZXNwb25zZRIWCg5leHBlcmltZW50X2tleRgBIAEoCRITCgt2YXJpYW50X2tleRgCIAEoCRISCgppc19jb250cm9sGAMgASgIEhIKCmlzX2V4cG9zZWQYBCABKAgSGQoRYXNzaWdubWVudF9tZXRob2QYBSABKAkSGQoRaXNfbmV3X2Fzc2lnbm1lbnQYBiABKAgqsAEKEEV4cGVyaW1lbnRTdGF0dXMSIQodRVhQRVJJTUVOVF9TVEFUVVNfVU5TUEVDSUZJRUQQABIbChdFWFBFUklNRU5UX1NUQVRVU19EUkFGVBABEh0KGUVYUEVSSU1FTlRfU1RBVFVTX1JVTk5JTkcQAhIcChhFWFBFUklNRU5UX1NUQVRVU19QQVVTRUQQAxIfChtFWFBFUklNRU5UX1NUQVRVU19DT01QTEVURUQQBDKuEAoSRXhwZXJpbWVudHNTZXJ2aWNlElwKDUdldEV4cGVyaW1lbnQSJC5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50UmVxdWVzdBolLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRSZXNwb25zZRJrChJHZXRFeHBlcmltZW50QnlLZXkSKS5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50QnlLZXlSZXF1ZXN0GiouZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudEJ5S2V5UmVzcG9uc2USYgoPTGlzdEV4cGVyaW1lbnRzEiYuZXhwZXJpbWVudHMudjEuTGlzdEV4cGVyaW1lbnRzUmVxdWVzdBonLmV4cGVyaW1lbnRzLnYxLkxpc3RFeHBlcmltZW50c1Jlc3BvbnNlEmUKEENyZWF0ZUV4cGVyaW1lbnQSJy5leHBlcmltZW50cy52MS5DcmVhdGVFeHBlcmltZW50UmVxdWVzdBooLmV4cGVyaW1lbnRzLnYxLkNyZWF0ZUV4cGVyaW1lbnRSZXNwb25zZRJlChBVcGRhdGVFeHBlcmltZW50EicuZXhwZXJpbWVudHMudjEuVXBkYXRlRXhwZXJpbWVudFJlcXVlc3QaKC5leHBlcmltZW50cy52MS5VcGRhdGVFeHBlcmltZW50UmVzcG9uc2USZQoQRGVsZXRlRXhwZXJpbWVudBInLmV4cGVyaW1lbnRzLnYxLkRlbGV0ZUV4cGVyaW1lbnRSZXF1ZXN0GiguZXhwZXJpbWVudHMudjEuRGVsZXRlRXhwZXJpbWVudFJlc3BvbnNlEmIKD1N0YXJ0RXhwZXJpbWVudBImLmV4cGVyaW1lbnRzLnYxLlN0YXJ0RXhwZXJpbWVudFJlcXVlc3QaJy5leHBlcmltZW50cy52MS5TdGFydEV4cGVyaW1lbnRSZXNwb25zZRJiCg9QYXVzZUV4cGVyaW1lbnQSJi5leHBlcmltZW50cy52MS5QYXVzZUV4cGVyaW1lbnRSZXF1ZXN0GicuZXhwZXJpbWVudHMudjEuUGF1c2VFeHBlcmltZW50UmVzcG9uc2USZQoQUmVzdW1lRXhwZXJpbWVudBInLmV4cGVyaW1lbnRzLnYxLlJlc3VtZUV4cGVyaW1lbnRSZXF1ZXN0GiguZXhwZXJpbWVudHMudjEuUmVzdW1lRXhwZXJpbWVudFJlc3BvbnNlElwKDUVuZEV4cGVyaW1lbnQSJC5leHBlcmltZW50cy52MS5FbmRFeHBlcmltZW50UmVxdWVzdBolLmV4cGVyaW1lbnRzLnYxLkVuZEV4cGVyaW1lbnRSZXNwb25zZRJ0ChVBcHBseUV4cGVyaW1lbnRXaW5uZXISLC5leHBlcmltZW50cy52MS5BcHBseUV4cGVyaW1lbnRXaW5uZXJSZXF1ZXN0Gi0uZXhwZXJpbWVudHMudjEuQXBwbHlFeHBlcmltZW50V2lubmVyUmVzcG9uc2USjwEKHlByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dBI1LmV4cGVyaW1lbnRzLnYxLlByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dFJlcXVlc3QaNi5leHBlcmltZW50cy52MS5QcmV2aWV3RXhwZXJpbWVudFdpbm5lclJvbGxvdXRSZXNwb25zZRJrChJSb2xsYmFja0V4cGVyaW1lbnQSKS5leHBlcmltZW50cy52MS5Sb2xsYmFja0V4cGVyaW1lbnRSZXF1ZXN0GiouZXhwZXJpbWVudHMudjEuUm9sbGJhY2tFeHBlcmltZW50UmVzcG9uc2USawoSR2V0RXhwZXJpbWVudFN0YXRzEikuZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudFN0YXRzUmVxdWVzdBoqLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRTdGF0c1Jlc3BvbnNlEnQKFUZvcmNlQXNzaWduRXhwZXJpbWVudBIsLmV4cGVyaW1lbnRzLnYxLkZvcmNlQXNzaWduRXhwZXJpbWVudFJlcXVlc3QaLS5leHBlcmltZW50cy52MS5Gb3JjZUFzc2lnbkV4cGVyaW1lbnRSZXNwb25zZRKDAQoaUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnQSMS5leHBlcmltZW50cy52MS5SZW1vdmVFeHBlcmltZW50QXNzaWdubWVudFJlcXVlc3QaMi5leHBlcmltZW50cy52MS5SZW1vdmVFeHBlcmltZW50QXNzaWdubWVudFJlc3BvbnNlEl8KDkdldEFzc2lnbm1lbnRzEiUuZXhwZXJpbWVudHMudjEuR2V0QXNzaWdubWVudHNSZXF1ZXN0GiYuZXhwZXJpbWVudHMudjEuR2V0QXNzaWdubWVudHNSZXNwb25zZRJiCg9SZXNvbHZlRXhwb3N1cmUSJi5leHBlcmltZW50cy52MS5SZXNvbHZlRXhwb3N1cmVSZXF1ZXN0GicuZXhwZXJpbWVudHMudjEuUmVzb2x2ZUV4cG9zdXJlUmVzcG9uc2USgwEKGkxpc3RFeHBlcmltZW50RGVjbGFyYXRpb25zEjEuZXhwZXJpbWVudHMudjEuTGlzdEV4cGVyaW1lbnREZWNsYXJhdGlvbnNSZXF1ZXN0GjIuZXhwZXJpbWVudHMudjEuTGlzdEV4cGVyaW1lbnREZWNsYXJhdGlvbnNSZXNwb25zZUJDWkFnaXRodWIuY29tL2VpZGVzdHVkaW8vZm9pci9nZW4vcHJvdG8vZXhwZXJpbWVudHMvdjE7ZXhwZXJpbWVudHN2MWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_expressions_v1_expressions]);
13
+ fileDesc("CiBleHBlcmltZW50cy92MS9leHBlcmltZW50cy5wcm90bxIOZXhwZXJpbWVudHMudjEiswEKE0V4cGVyaW1lbnRUYXJnZXRpbmcSDAoEdHlwZRgBIAEoCRIXCgpzZWdtZW50X2lkGAIgASgJSACIAQESGAoLc2VnbWVudF9rZXkYAyABKAlIAYgBARIyCgVydWxlcxgEIAEoCzIeLmV4cHJlc3Npb25zLnYxLlJ1bGVFeHByZXNzaW9uSAKIAQFCDQoLX3NlZ21lbnRfaWRCDgoMX3NlZ21lbnRfa2V5QggKBl9ydWxlcyJ4ChFFeHBlcmltZW50VmFyaWFudBILCgNrZXkYASABKAkSDAoEbmFtZRgCIAEoCRIPCgdwZXJjZW50GAMgASgFEiwKBmNvbmZpZxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIJCgdfY29uZmlnImkKDkV4cGVyaW1lbnRHb2FsEgsKA2tleRgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESEgoKaXNfcHJpbWFyeRgEIAEoCEIOCgxfZGVzY3JpcHRpb24iYAoURXhwZXJpbWVudEZ1bm5lbFN0ZXASEAoIZ29hbF9rZXkYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBQg4KDF9kZXNjcmlwdGlvbiKDBwoKRXhwZXJpbWVudBIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSDAoEbmFtZRgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEjAKBnN0YXR1cxgKIAEoDjIgLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRTdGF0dXMSEQoJaXNfYWN0aXZlGAsgASgIEjYKCXRhcmdldGluZxgUIAEoCzIjLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRUYXJnZXRpbmcSFwoPY29udHJvbF9wZXJjZW50GBUgASgFEjMKCHZhcmlhbnRzGBYgAygLMiEuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFZhcmlhbnQSHgoWYXNzaWdubWVudF9wZXJzaXN0ZW5jZRgXIAEoCRIgChNleGNsdXNpb25fZ3JvdXBfa2V5GBggASgJSAGIAQESMwoKc3RhcnRfZGF0ZRgeIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAogBARIxCghlbmRfZGF0ZRgfIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIA4gBARItCgdtZXRyaWNzGCMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgEiAEBEi0KBWdvYWxzGCQgAygLMh4uZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEdvYWwSOgoMZnVubmVsX3N0ZXBzGCUgAygLMiQuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEZ1bm5lbFN0ZXASEQoJdGVuYW50X2lkGCggASgJEhIKCnByb2plY3RfaWQYKSABKAkSFwoKY3JlYXRlZF9ieRgtIAEoCUgFiAEBEhcKCnVwZGF0ZWRfYnkYLiABKAlIBogBARIuCgpjcmVhdGVkX2F0GDIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GDMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIOCgxfZGVzY3JpcHRpb25CFgoUX2V4Y2x1c2lvbl9ncm91cF9rZXlCDQoLX3N0YXJ0X2RhdGVCCwoJX2VuZF9kYXRlQgoKCF9tZXRyaWNzQg0KC19jcmVhdGVkX2J5Qg0KC191cGRhdGVkX2J5ItQDChRFeHBlcmltZW50QXNzaWdubWVudBIKCgJpZBgBIAEoCRIVCg1leHBlcmltZW50X2lkGAIgASgJEhgKC2N1c3RvbWVyX2lkGAMgASgJSACIAQESEwoLdmFyaWFudF9rZXkYBCABKAkSGQoRYXNzaWdubWVudF9tZXRob2QYBSABKAkSFgoOZXhwZXJpbWVudF9rZXkYBiABKAkSFwoKdmlld2VyX2tleRgHIAEoCUgBiAEBEhEKCXRlbmFudF9pZBgKIAEoCRISCgpwcm9qZWN0X2lkGAsgASgJEi8KC2Fzc2lnbmVkX2F0GBQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCg1maXJzdF9zZWVuX2F0GBUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0X3NlZW5fYXQYFiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmV4cGlyZXNfYXQYFyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5Qg0KC19leHBpcmVzX2F0IkUKFUV4cGVyaW1lbnREZWNsYXJhdGlvbhIWCg5leHBlcmltZW50X2tleRgBIAEoCRIUCgx2YXJpYW50X2tleXMYAiADKAkijAEKFEV4cGVyaW1lbnRNZXRyaWNTcGVjEgwKBG5hbWUYASABKAkSDAoEcGF0aBgCIAEoCRI0CgphZ2dyZWdhdG9yGAMgASgOMiAuZXhwZXJpbWVudHMudjEuTWV0cmljQWdncmVnYXRvchIVCghnb2FsX2tleRgEIAEoCUgAiAEBQgsKCV9nb2FsX2tleSKoAQoSU2lnbmlmaWNhbmNlUmVzdWx0Eg8KB3BfdmFsdWUYASABKAESFQoNcmVsYXRpdmVfbGlmdBgCIAEoARIVCg1hYnNvbHV0ZV9saWZ0GAMgASgBEhAKCGNpX2xvd2VyGAQgASgBEhAKCGNpX3VwcGVyGAUgASgBEhYKDmlzX3NpZ25pZmljYW50GAYgASgIEhcKD21pbl9zYW1wbGVfc2l6ZRgHIAEoBSKVAQoYTWV0cmljU2lnbmlmaWNhbmNlUmVzdWx0Eg8KB3BfdmFsdWUYASABKAESFQoNcmVsYXRpdmVfbGlmdBgCIAEoARIVCg1hYnNvbHV0ZV9saWZ0GAMgASgBEhAKCGNpX2xvd2VyGAQgASgBEhAKCGNpX3VwcGVyGAUgASgBEhYKDmlzX3NpZ25pZmljYW50GAYgASgIIsgBChBWYXJpYW50R29hbFN0YXRzEhAKCGdvYWxfa2V5GAEgASgJEh4KFmNvbnZlcnNpb25fZXZlbnRfY291bnQYAiABKAUSGQoRdW5pcXVlX2NvbnZlcnRlcnMYAyABKAUSFwoPY29udmVyc2lvbl9yYXRlGAQgASgBEj0KDHNpZ25pZmljYW5jZRgFIAEoCzIiLmV4cGVyaW1lbnRzLnYxLlNpZ25pZmljYW5jZVJlc3VsdEgAiAEBQg8KDV9zaWduaWZpY2FuY2UihwEKDFZhcmlhbnRTdGF0cxITCgt2YXJpYW50X2tleRgBIAEoCRISCgppc19jb250cm9sGAIgASgIEhgKEGFzc2lnbm1lbnRfY291bnQYAyABKAUSNAoKZ29hbF9zdGF0cxgEIAMoCzIgLmV4cGVyaW1lbnRzLnYxLlZhcmlhbnRHb2FsU3RhdHMigAEKCUdvYWxTdGF0cxIQCghnb2FsX2tleRgBIAEoCRIRCglnb2FsX25hbWUYAiABKAkSEgoKaXNfcHJpbWFyeRgDIAEoCBIZChF0b3RhbF9jb252ZXJzaW9ucxgEIAEoBRIfChd0b3RhbF91bmlxdWVfY29udmVydGVycxgFIAEoBSKGAQoPRGFpbHlTdGF0c1BvaW50EhMKC3ZhcmlhbnRfa2V5GAEgASgJEhAKCGdvYWxfa2V5GAIgASgJEhEKCXN0YXRfZGF0ZRgDIAEoCRIeChZjb252ZXJzaW9uX2V2ZW50X2NvdW50GAQgASgFEhkKEXVuaXF1ZV9jb252ZXJ0ZXJzGAUgASgFItMBChJWYXJpYW50TWV0cmljU3RhdHMSEwoLdmFyaWFudF9rZXkYASABKAkSEwoLbWV0cmljX25hbWUYAiABKAkSDQoFdmFsdWUYAyABKAESEwoLc2FtcGxlX3NpemUYBCABKAUSGQoRc2tpcHBlZF9yb3dfY291bnQYBSABKAUSQwoMc2lnbmlmaWNhbmNlGAYgASgLMiguZXhwZXJpbWVudHMudjEuTWV0cmljU2lnbmlmaWNhbmNlUmVzdWx0SACIAQFCDwoNX3NpZ25pZmljYW5jZSKUAwoPRXhwZXJpbWVudFN0YXRzEhUKDWV4cGVyaW1lbnRfaWQYASABKAkSFgoOZXhwZXJpbWVudF9rZXkYAiABKAkSGQoRdG90YWxfYXNzaWdubWVudHMYAyABKAUSLgoIdmFyaWFudHMYBCADKAsyHC5leHBlcmltZW50cy52MS5WYXJpYW50U3RhdHMSKAoFZ29hbHMYBSADKAsyGS5leHBlcmltZW50cy52MS5Hb2FsU3RhdHMSLwoLd2luZG93X2Zyb20YBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi0KCXdpbmRvd190bxgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoFZGFpbHkYCCADKAsyHy5leHBlcmltZW50cy52MS5EYWlseVN0YXRzUG9pbnQSEwoLZGFpbHlfZ3JhaW4YCSABKAkSOAoMbWV0cmljX3N0YXRzGAogAygLMiIuZXhwZXJpbWVudHMudjEuVmFyaWFudE1ldHJpY1N0YXRzIvkEChdDcmVhdGVFeHBlcmltZW50UmVxdWVzdBILCgNrZXkYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEjsKCXRhcmdldGluZxgEIAEoCzIjLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRUYXJnZXRpbmdIAYgBARIcCg9jb250cm9sX3BlcmNlbnQYBSABKAVIAogBARIzCgh2YXJpYW50cxgGIAMoCzIhLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRWYXJpYW50EjMKCnN0YXJ0X2RhdGUYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAOIAQESMQoIZW5kX2RhdGUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSASIAQESIwoWYXNzaWdubWVudF9wZXJzaXN0ZW5jZRgJIAEoCUgFiAEBEi0KBWdvYWxzGAogAygLMh4uZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEdvYWwSOgoMZnVubmVsX3N0ZXBzGAsgAygLMiQuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEZ1bm5lbFN0ZXASIAoTZXhjbHVzaW9uX2dyb3VwX2tleRgMIAEoCUgGiAEBQg4KDF9kZXNjcmlwdGlvbkIMCgpfdGFyZ2V0aW5nQhIKEF9jb250cm9sX3BlcmNlbnRCDQoLX3N0YXJ0X2RhdGVCCwoJX2VuZF9kYXRlQhkKF19hc3NpZ25tZW50X3BlcnNpc3RlbmNlQhYKFF9leGNsdXNpb25fZ3JvdXBfa2V5IkoKGENyZWF0ZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIiChRHZXRFeHBlcmltZW50UmVxdWVzdBIKCgJpZBgBIAEoCSJHChVHZXRFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiKAoZR2V0RXhwZXJpbWVudEJ5S2V5UmVxdWVzdBILCgNrZXkYASABKAkiTAoaR2V0RXhwZXJpbWVudEJ5S2V5UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQinwEKFkxpc3RFeHBlcmltZW50c1JlcXVlc3QSNQoGc3RhdHVzGAEgASgOMiAuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFN0YXR1c0gAiAEBEhYKCWlzX2FjdGl2ZRgCIAEoCEgBiAEBEg0KBWxpbWl0GAogASgFEg4KBm9mZnNldBgLIAEoBUIJCgdfc3RhdHVzQgwKCl9pc19hY3RpdmUiWQoXTGlzdEV4cGVyaW1lbnRzUmVzcG9uc2USLwoLZXhwZXJpbWVudHMYASADKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Eg0KBXRvdGFsGAIgASgFItoFChdVcGRhdGVFeHBlcmltZW50UmVxdWVzdBIKCgJpZBgBIAEoCRIRCgRuYW1lGAIgASgJSACIAQESGAoLZGVzY3JpcHRpb24YAyABKAlIAYgBARI7Cgl0YXJnZXRpbmcYBCABKAsyIy5leHBlcmltZW50cy52MS5FeHBlcmltZW50VGFyZ2V0aW5nSAKIAQESHAoPY29udHJvbF9wZXJjZW50GAUgASgFSAOIAQESMwoIdmFyaWFudHMYBiADKAsyIS5leHBlcmltZW50cy52MS5FeHBlcmltZW50VmFyaWFudBIzCgpzdGFydF9kYXRlGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEjEKCGVuZF9kYXRlGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgFiAEBEiMKFmFzc2lnbm1lbnRfcGVyc2lzdGVuY2UYCSABKAlIBogBARItCgVnb2FscxgKIAMoCzIeLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRHb2FsEhMKC2dvYWxzX2NsZWFyGAsgASgIEjoKDGZ1bm5lbF9zdGVwcxgMIAMoCzIkLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRGdW5uZWxTdGVwEhoKEmZ1bm5lbF9zdGVwc19jbGVhchgNIAEoCBIgChNleGNsdXNpb25fZ3JvdXBfa2V5GA4gASgJSAeIAQESIQoZZXhjbHVzaW9uX2dyb3VwX2tleV9jbGVhchgPIAEoCEIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX3RhcmdldGluZ0ISChBfY29udHJvbF9wZXJjZW50Qg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIZChdfYXNzaWdubWVudF9wZXJzaXN0ZW5jZUIWChRfZXhjbHVzaW9uX2dyb3VwX2tleSJKChhVcGRhdGVFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiJQoXRGVsZXRlRXhwZXJpbWVudFJlcXVlc3QSCgoCaWQYASABKAkiKwoYRGVsZXRlRXhwZXJpbWVudFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiLwoWU3RhcnRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkkKF1N0YXJ0RXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Ii8KFlBhdXNlRXhwZXJpbWVudFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCSJJChdQYXVzZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIwChdSZXN1bWVFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkoKGFJlc3VtZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCItChRFbmRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkcKFUVuZEV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCKHAgoZR2V0RXhwZXJpbWVudFN0YXRzUmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJEi0KBGZyb20YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQESKwoCdG8YAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESNQoHbWV0cmljcxgEIAMoCzIkLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRNZXRyaWNTcGVjEhwKD21pbl9zYW1wbGVfc2l6ZRgFIAEoBUgCiAEBQgcKBV9mcm9tQgUKA190b0ISChBfbWluX3NhbXBsZV9zaXplIkwKGkdldEV4cGVyaW1lbnRTdGF0c1Jlc3BvbnNlEi4KBXN0YXRzGAEgASgLMh8uZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFN0YXRzIpwBChxGb3JjZUFzc2lnbkV4cGVyaW1lbnRSZXF1ZXN0EhgKC2N1c3RvbWVyX2lkGAEgASgJSACIAQESFQoNZXhwZXJpbWVudF9pZBgCIAEoCRITCgt2YXJpYW50X2tleRgDIAEoCRIXCgp2aWV3ZXJfa2V5GAQgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IlkKHUZvcmNlQXNzaWduRXhwZXJpbWVudFJlc3BvbnNlEjgKCmFzc2lnbm1lbnQYASABKAsyJC5leHBlcmltZW50cy52MS5FeHBlcmltZW50QXNzaWdubWVudCKMAQohUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXF1ZXN0EhgKC2N1c3RvbWVyX2lkGAEgASgJSACIAQESFQoNZXhwZXJpbWVudF9pZBgCIAEoCRIXCgp2aWV3ZXJfa2V5GAMgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IjUKIlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50UmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJRChxBcHBseUV4cGVyaW1lbnRXaW5uZXJSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkSGgoSd2lubmVyX3ZhcmlhbnRfa2V5GAIgASgJIo0BCh1BcHBseUV4cGVyaW1lbnRXaW5uZXJSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudBIdChVhZmZlY3RlZF9yZWNvcmRfY291bnQYAiABKAUSHQoVY2xlYXJlZF92YXJpYW50X2NvdW50GAMgASgFIloKJVByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCRIaChJ3aW5uZXJfdmFyaWFudF9rZXkYAiABKAkiZwoOQWZmZWN0ZWRSZWNvcmQSEQoJcmVjb3JkX2lkGAEgASgJEiIKGmN1cnJlbnRfZGVmYXVsdF92YXJpYW50X2lkGAIgASgJEh4KFm5ld19kZWZhdWx0X3ZhcmlhbnRfaWQYAyABKAkigQEKJlByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dFJlc3BvbnNlEjgKEGFmZmVjdGVkX3JlY29yZHMYASADKAsyHi5leHBlcmltZW50cy52MS5BZmZlY3RlZFJlY29yZBIdChVjbGVhcmVkX3ZhcmlhbnRfY291bnQYAiABKAUiMgoZUm9sbGJhY2tFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIosBChpSb2xsYmFja0V4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudBIdChVyZXN0b3JlZF9yZWNvcmRfY291bnQYAiABKAUSHgoWcmVzdG9yZWRfdmFyaWFudF9jb3VudBgDIAEoBSJpChVHZXRBc3NpZ25tZW50c1JlcXVlc3QSGAoLY3VzdG9tZXJfaWQYASABKAlIAIgBARIXCgp2aWV3ZXJfa2V5GAIgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IlMKFkdldEFzc2lnbm1lbnRzUmVzcG9uc2USOQoLYXNzaWdubWVudHMYASADKAsyJC5leHBlcmltZW50cy52MS5FeHBlcmltZW50QXNzaWdubWVudCIjCiFMaXN0RXhwZXJpbWVudERlY2xhcmF0aW9uc1JlcXVlc3QiYQoiTGlzdEV4cGVyaW1lbnREZWNsYXJhdGlvbnNSZXNwb25zZRI7CgxkZWNsYXJhdGlvbnMYASADKAsyJS5leHBlcmltZW50cy52MS5FeHBlcmltZW50RGVjbGFyYXRpb24iggEKFlJlc29sdmVFeHBvc3VyZVJlcXVlc3QSFgoOZXhwZXJpbWVudF9rZXkYASABKAkSGAoLY3VzdG9tZXJfaWQYAiABKAlIAIgBARIXCgp2aWV3ZXJfa2V5GAMgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IqQBChdSZXNvbHZlRXhwb3N1cmVSZXNwb25zZRIWCg5leHBlcmltZW50X2tleRgBIAEoCRITCgt2YXJpYW50X2tleRgCIAEoCRISCgppc19jb250cm9sGAMgASgIEhIKCmlzX2V4cG9zZWQYBCABKAgSGQoRYXNzaWdubWVudF9tZXRob2QYBSABKAkSGQoRaXNfbmV3X2Fzc2lnbm1lbnQYBiABKAgqsAEKEEV4cGVyaW1lbnRTdGF0dXMSIQodRVhQRVJJTUVOVF9TVEFUVVNfVU5TUEVDSUZJRUQQABIbChdFWFBFUklNRU5UX1NUQVRVU19EUkFGVBABEh0KGUVYUEVSSU1FTlRfU1RBVFVTX1JVTk5JTkcQAhIcChhFWFBFUklNRU5UX1NUQVRVU19QQVVTRUQQAxIfChtFWFBFUklNRU5UX1NUQVRVU19DT01QTEVURUQQBCr0AQoQTWV0cmljQWdncmVnYXRvchIhCh1NRVRSSUNfQUdHUkVHQVRPUl9VTlNQRUNJRklFRBAAEhkKFU1FVFJJQ19BR0dSRUdBVE9SX1NVTRABEhkKFU1FVFJJQ19BR0dSRUdBVE9SX0FWRxACEhsKF01FVFJJQ19BR0dSRUdBVE9SX0NPVU5UEAMSGQoVTUVUUklDX0FHR1JFR0FUT1JfTUlOEAQSGQoVTUVUUklDX0FHR1JFR0FUT1JfTUFYEAUSGQoVTUVUUklDX0FHR1JFR0FUT1JfUDUwEAYSGQoVTUVUUklDX0FHR1JFR0FUT1JfUDk1EAcyrhAKEkV4cGVyaW1lbnRzU2VydmljZRJcCg1HZXRFeHBlcmltZW50EiQuZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudFJlcXVlc3QaJS5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50UmVzcG9uc2USawoSR2V0RXhwZXJpbWVudEJ5S2V5EikuZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudEJ5S2V5UmVxdWVzdBoqLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRCeUtleVJlc3BvbnNlEmIKD0xpc3RFeHBlcmltZW50cxImLmV4cGVyaW1lbnRzLnYxLkxpc3RFeHBlcmltZW50c1JlcXVlc3QaJy5leHBlcmltZW50cy52MS5MaXN0RXhwZXJpbWVudHNSZXNwb25zZRJlChBDcmVhdGVFeHBlcmltZW50EicuZXhwZXJpbWVudHMudjEuQ3JlYXRlRXhwZXJpbWVudFJlcXVlc3QaKC5leHBlcmltZW50cy52MS5DcmVhdGVFeHBlcmltZW50UmVzcG9uc2USZQoQVXBkYXRlRXhwZXJpbWVudBInLmV4cGVyaW1lbnRzLnYxLlVwZGF0ZUV4cGVyaW1lbnRSZXF1ZXN0GiguZXhwZXJpbWVudHMudjEuVXBkYXRlRXhwZXJpbWVudFJlc3BvbnNlEmUKEERlbGV0ZUV4cGVyaW1lbnQSJy5leHBlcmltZW50cy52MS5EZWxldGVFeHBlcmltZW50UmVxdWVzdBooLmV4cGVyaW1lbnRzLnYxLkRlbGV0ZUV4cGVyaW1lbnRSZXNwb25zZRJiCg9TdGFydEV4cGVyaW1lbnQSJi5leHBlcmltZW50cy52MS5TdGFydEV4cGVyaW1lbnRSZXF1ZXN0GicuZXhwZXJpbWVudHMudjEuU3RhcnRFeHBlcmltZW50UmVzcG9uc2USYgoPUGF1c2VFeHBlcmltZW50EiYuZXhwZXJpbWVudHMudjEuUGF1c2VFeHBlcmltZW50UmVxdWVzdBonLmV4cGVyaW1lbnRzLnYxLlBhdXNlRXhwZXJpbWVudFJlc3BvbnNlEmUKEFJlc3VtZUV4cGVyaW1lbnQSJy5leHBlcmltZW50cy52MS5SZXN1bWVFeHBlcmltZW50UmVxdWVzdBooLmV4cGVyaW1lbnRzLnYxLlJlc3VtZUV4cGVyaW1lbnRSZXNwb25zZRJcCg1FbmRFeHBlcmltZW50EiQuZXhwZXJpbWVudHMudjEuRW5kRXhwZXJpbWVudFJlcXVlc3QaJS5leHBlcmltZW50cy52MS5FbmRFeHBlcmltZW50UmVzcG9uc2USdAoVQXBwbHlFeHBlcmltZW50V2lubmVyEiwuZXhwZXJpbWVudHMudjEuQXBwbHlFeHBlcmltZW50V2lubmVyUmVxdWVzdBotLmV4cGVyaW1lbnRzLnYxLkFwcGx5RXhwZXJpbWVudFdpbm5lclJlc3BvbnNlEo8BCh5QcmV2aWV3RXhwZXJpbWVudFdpbm5lclJvbGxvdXQSNS5leHBlcmltZW50cy52MS5QcmV2aWV3RXhwZXJpbWVudFdpbm5lclJvbGxvdXRSZXF1ZXN0GjYuZXhwZXJpbWVudHMudjEuUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0UmVzcG9uc2USawoSUm9sbGJhY2tFeHBlcmltZW50EikuZXhwZXJpbWVudHMudjEuUm9sbGJhY2tFeHBlcmltZW50UmVxdWVzdBoqLmV4cGVyaW1lbnRzLnYxLlJvbGxiYWNrRXhwZXJpbWVudFJlc3BvbnNlEmsKEkdldEV4cGVyaW1lbnRTdGF0cxIpLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRTdGF0c1JlcXVlc3QaKi5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50U3RhdHNSZXNwb25zZRJ0ChVGb3JjZUFzc2lnbkV4cGVyaW1lbnQSLC5leHBlcmltZW50cy52MS5Gb3JjZUFzc2lnbkV4cGVyaW1lbnRSZXF1ZXN0Gi0uZXhwZXJpbWVudHMudjEuRm9yY2VBc3NpZ25FeHBlcmltZW50UmVzcG9uc2USgwEKGlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50EjEuZXhwZXJpbWVudHMudjEuUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXF1ZXN0GjIuZXhwZXJpbWVudHMudjEuUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXNwb25zZRJfCg5HZXRBc3NpZ25tZW50cxIlLmV4cGVyaW1lbnRzLnYxLkdldEFzc2lnbm1lbnRzUmVxdWVzdBomLmV4cGVyaW1lbnRzLnYxLkdldEFzc2lnbm1lbnRzUmVzcG9uc2USYgoPUmVzb2x2ZUV4cG9zdXJlEiYuZXhwZXJpbWVudHMudjEuUmVzb2x2ZUV4cG9zdXJlUmVxdWVzdBonLmV4cGVyaW1lbnRzLnYxLlJlc29sdmVFeHBvc3VyZVJlc3BvbnNlEoMBChpMaXN0RXhwZXJpbWVudERlY2xhcmF0aW9ucxIxLmV4cGVyaW1lbnRzLnYxLkxpc3RFeHBlcmltZW50RGVjbGFyYXRpb25zUmVxdWVzdBoyLmV4cGVyaW1lbnRzLnYxLkxpc3RFeHBlcmltZW50RGVjbGFyYXRpb25zUmVzcG9uc2VCQ1pBZ2l0aHViLmNvbS9laWRlc3R1ZGlvL2ZvaXIvZ2VuL3Byb3RvL2V4cGVyaW1lbnRzL3YxO2V4cGVyaW1lbnRzdjFiBnByb3RvMw", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_expressions_v1_expressions]);
14
14
 
15
15
  /**
16
16
  * Describes the message experiments.v1.ExperimentTargeting.
@@ -61,292 +61,341 @@ export const ExperimentAssignmentSchema = /*@__PURE__*/
61
61
  export const ExperimentDeclarationSchema = /*@__PURE__*/
62
62
  messageDesc(file_experiments_v1_experiments, 6);
63
63
 
64
+ /**
65
+ * Describes the message experiments.v1.ExperimentMetricSpec.
66
+ * Use `create(ExperimentMetricSpecSchema)` to create a new message.
67
+ */
68
+ export const ExperimentMetricSpecSchema = /*@__PURE__*/
69
+ messageDesc(file_experiments_v1_experiments, 7);
70
+
71
+ /**
72
+ * Describes the message experiments.v1.SignificanceResult.
73
+ * Use `create(SignificanceResultSchema)` to create a new message.
74
+ */
75
+ export const SignificanceResultSchema = /*@__PURE__*/
76
+ messageDesc(file_experiments_v1_experiments, 8);
77
+
78
+ /**
79
+ * Describes the message experiments.v1.MetricSignificanceResult.
80
+ * Use `create(MetricSignificanceResultSchema)` to create a new message.
81
+ */
82
+ export const MetricSignificanceResultSchema = /*@__PURE__*/
83
+ messageDesc(file_experiments_v1_experiments, 9);
84
+
85
+ /**
86
+ * Describes the message experiments.v1.VariantGoalStats.
87
+ * Use `create(VariantGoalStatsSchema)` to create a new message.
88
+ */
89
+ export const VariantGoalStatsSchema = /*@__PURE__*/
90
+ messageDesc(file_experiments_v1_experiments, 10);
91
+
64
92
  /**
65
93
  * Describes the message experiments.v1.VariantStats.
66
94
  * Use `create(VariantStatsSchema)` to create a new message.
67
95
  */
68
96
  export const VariantStatsSchema = /*@__PURE__*/
69
- messageDesc(file_experiments_v1_experiments, 7);
97
+ messageDesc(file_experiments_v1_experiments, 11);
98
+
99
+ /**
100
+ * Describes the message experiments.v1.GoalStats.
101
+ * Use `create(GoalStatsSchema)` to create a new message.
102
+ */
103
+ export const GoalStatsSchema = /*@__PURE__*/
104
+ messageDesc(file_experiments_v1_experiments, 12);
105
+
106
+ /**
107
+ * Describes the message experiments.v1.DailyStatsPoint.
108
+ * Use `create(DailyStatsPointSchema)` to create a new message.
109
+ */
110
+ export const DailyStatsPointSchema = /*@__PURE__*/
111
+ messageDesc(file_experiments_v1_experiments, 13);
112
+
113
+ /**
114
+ * Describes the message experiments.v1.VariantMetricStats.
115
+ * Use `create(VariantMetricStatsSchema)` to create a new message.
116
+ */
117
+ export const VariantMetricStatsSchema = /*@__PURE__*/
118
+ messageDesc(file_experiments_v1_experiments, 14);
70
119
 
71
120
  /**
72
121
  * Describes the message experiments.v1.ExperimentStats.
73
122
  * Use `create(ExperimentStatsSchema)` to create a new message.
74
123
  */
75
124
  export const ExperimentStatsSchema = /*@__PURE__*/
76
- messageDesc(file_experiments_v1_experiments, 8);
125
+ messageDesc(file_experiments_v1_experiments, 15);
77
126
 
78
127
  /**
79
128
  * Describes the message experiments.v1.CreateExperimentRequest.
80
129
  * Use `create(CreateExperimentRequestSchema)` to create a new message.
81
130
  */
82
131
  export const CreateExperimentRequestSchema = /*@__PURE__*/
83
- messageDesc(file_experiments_v1_experiments, 9);
132
+ messageDesc(file_experiments_v1_experiments, 16);
84
133
 
85
134
  /**
86
135
  * Describes the message experiments.v1.CreateExperimentResponse.
87
136
  * Use `create(CreateExperimentResponseSchema)` to create a new message.
88
137
  */
89
138
  export const CreateExperimentResponseSchema = /*@__PURE__*/
90
- messageDesc(file_experiments_v1_experiments, 10);
139
+ messageDesc(file_experiments_v1_experiments, 17);
91
140
 
92
141
  /**
93
142
  * Describes the message experiments.v1.GetExperimentRequest.
94
143
  * Use `create(GetExperimentRequestSchema)` to create a new message.
95
144
  */
96
145
  export const GetExperimentRequestSchema = /*@__PURE__*/
97
- messageDesc(file_experiments_v1_experiments, 11);
146
+ messageDesc(file_experiments_v1_experiments, 18);
98
147
 
99
148
  /**
100
149
  * Describes the message experiments.v1.GetExperimentResponse.
101
150
  * Use `create(GetExperimentResponseSchema)` to create a new message.
102
151
  */
103
152
  export const GetExperimentResponseSchema = /*@__PURE__*/
104
- messageDesc(file_experiments_v1_experiments, 12);
153
+ messageDesc(file_experiments_v1_experiments, 19);
105
154
 
106
155
  /**
107
156
  * Describes the message experiments.v1.GetExperimentByKeyRequest.
108
157
  * Use `create(GetExperimentByKeyRequestSchema)` to create a new message.
109
158
  */
110
159
  export const GetExperimentByKeyRequestSchema = /*@__PURE__*/
111
- messageDesc(file_experiments_v1_experiments, 13);
160
+ messageDesc(file_experiments_v1_experiments, 20);
112
161
 
113
162
  /**
114
163
  * Describes the message experiments.v1.GetExperimentByKeyResponse.
115
164
  * Use `create(GetExperimentByKeyResponseSchema)` to create a new message.
116
165
  */
117
166
  export const GetExperimentByKeyResponseSchema = /*@__PURE__*/
118
- messageDesc(file_experiments_v1_experiments, 14);
167
+ messageDesc(file_experiments_v1_experiments, 21);
119
168
 
120
169
  /**
121
170
  * Describes the message experiments.v1.ListExperimentsRequest.
122
171
  * Use `create(ListExperimentsRequestSchema)` to create a new message.
123
172
  */
124
173
  export const ListExperimentsRequestSchema = /*@__PURE__*/
125
- messageDesc(file_experiments_v1_experiments, 15);
174
+ messageDesc(file_experiments_v1_experiments, 22);
126
175
 
127
176
  /**
128
177
  * Describes the message experiments.v1.ListExperimentsResponse.
129
178
  * Use `create(ListExperimentsResponseSchema)` to create a new message.
130
179
  */
131
180
  export const ListExperimentsResponseSchema = /*@__PURE__*/
132
- messageDesc(file_experiments_v1_experiments, 16);
181
+ messageDesc(file_experiments_v1_experiments, 23);
133
182
 
134
183
  /**
135
184
  * Describes the message experiments.v1.UpdateExperimentRequest.
136
185
  * Use `create(UpdateExperimentRequestSchema)` to create a new message.
137
186
  */
138
187
  export const UpdateExperimentRequestSchema = /*@__PURE__*/
139
- messageDesc(file_experiments_v1_experiments, 17);
188
+ messageDesc(file_experiments_v1_experiments, 24);
140
189
 
141
190
  /**
142
191
  * Describes the message experiments.v1.UpdateExperimentResponse.
143
192
  * Use `create(UpdateExperimentResponseSchema)` to create a new message.
144
193
  */
145
194
  export const UpdateExperimentResponseSchema = /*@__PURE__*/
146
- messageDesc(file_experiments_v1_experiments, 18);
195
+ messageDesc(file_experiments_v1_experiments, 25);
147
196
 
148
197
  /**
149
198
  * Describes the message experiments.v1.DeleteExperimentRequest.
150
199
  * Use `create(DeleteExperimentRequestSchema)` to create a new message.
151
200
  */
152
201
  export const DeleteExperimentRequestSchema = /*@__PURE__*/
153
- messageDesc(file_experiments_v1_experiments, 19);
202
+ messageDesc(file_experiments_v1_experiments, 26);
154
203
 
155
204
  /**
156
205
  * Describes the message experiments.v1.DeleteExperimentResponse.
157
206
  * Use `create(DeleteExperimentResponseSchema)` to create a new message.
158
207
  */
159
208
  export const DeleteExperimentResponseSchema = /*@__PURE__*/
160
- messageDesc(file_experiments_v1_experiments, 20);
209
+ messageDesc(file_experiments_v1_experiments, 27);
161
210
 
162
211
  /**
163
212
  * Describes the message experiments.v1.StartExperimentRequest.
164
213
  * Use `create(StartExperimentRequestSchema)` to create a new message.
165
214
  */
166
215
  export const StartExperimentRequestSchema = /*@__PURE__*/
167
- messageDesc(file_experiments_v1_experiments, 21);
216
+ messageDesc(file_experiments_v1_experiments, 28);
168
217
 
169
218
  /**
170
219
  * Describes the message experiments.v1.StartExperimentResponse.
171
220
  * Use `create(StartExperimentResponseSchema)` to create a new message.
172
221
  */
173
222
  export const StartExperimentResponseSchema = /*@__PURE__*/
174
- messageDesc(file_experiments_v1_experiments, 22);
223
+ messageDesc(file_experiments_v1_experiments, 29);
175
224
 
176
225
  /**
177
226
  * Describes the message experiments.v1.PauseExperimentRequest.
178
227
  * Use `create(PauseExperimentRequestSchema)` to create a new message.
179
228
  */
180
229
  export const PauseExperimentRequestSchema = /*@__PURE__*/
181
- messageDesc(file_experiments_v1_experiments, 23);
230
+ messageDesc(file_experiments_v1_experiments, 30);
182
231
 
183
232
  /**
184
233
  * Describes the message experiments.v1.PauseExperimentResponse.
185
234
  * Use `create(PauseExperimentResponseSchema)` to create a new message.
186
235
  */
187
236
  export const PauseExperimentResponseSchema = /*@__PURE__*/
188
- messageDesc(file_experiments_v1_experiments, 24);
237
+ messageDesc(file_experiments_v1_experiments, 31);
189
238
 
190
239
  /**
191
240
  * Describes the message experiments.v1.ResumeExperimentRequest.
192
241
  * Use `create(ResumeExperimentRequestSchema)` to create a new message.
193
242
  */
194
243
  export const ResumeExperimentRequestSchema = /*@__PURE__*/
195
- messageDesc(file_experiments_v1_experiments, 25);
244
+ messageDesc(file_experiments_v1_experiments, 32);
196
245
 
197
246
  /**
198
247
  * Describes the message experiments.v1.ResumeExperimentResponse.
199
248
  * Use `create(ResumeExperimentResponseSchema)` to create a new message.
200
249
  */
201
250
  export const ResumeExperimentResponseSchema = /*@__PURE__*/
202
- messageDesc(file_experiments_v1_experiments, 26);
251
+ messageDesc(file_experiments_v1_experiments, 33);
203
252
 
204
253
  /**
205
254
  * Describes the message experiments.v1.EndExperimentRequest.
206
255
  * Use `create(EndExperimentRequestSchema)` to create a new message.
207
256
  */
208
257
  export const EndExperimentRequestSchema = /*@__PURE__*/
209
- messageDesc(file_experiments_v1_experiments, 27);
258
+ messageDesc(file_experiments_v1_experiments, 34);
210
259
 
211
260
  /**
212
261
  * Describes the message experiments.v1.EndExperimentResponse.
213
262
  * Use `create(EndExperimentResponseSchema)` to create a new message.
214
263
  */
215
264
  export const EndExperimentResponseSchema = /*@__PURE__*/
216
- messageDesc(file_experiments_v1_experiments, 28);
265
+ messageDesc(file_experiments_v1_experiments, 35);
217
266
 
218
267
  /**
219
268
  * Describes the message experiments.v1.GetExperimentStatsRequest.
220
269
  * Use `create(GetExperimentStatsRequestSchema)` to create a new message.
221
270
  */
222
271
  export const GetExperimentStatsRequestSchema = /*@__PURE__*/
223
- messageDesc(file_experiments_v1_experiments, 29);
272
+ messageDesc(file_experiments_v1_experiments, 36);
224
273
 
225
274
  /**
226
275
  * Describes the message experiments.v1.GetExperimentStatsResponse.
227
276
  * Use `create(GetExperimentStatsResponseSchema)` to create a new message.
228
277
  */
229
278
  export const GetExperimentStatsResponseSchema = /*@__PURE__*/
230
- messageDesc(file_experiments_v1_experiments, 30);
279
+ messageDesc(file_experiments_v1_experiments, 37);
231
280
 
232
281
  /**
233
282
  * Describes the message experiments.v1.ForceAssignExperimentRequest.
234
283
  * Use `create(ForceAssignExperimentRequestSchema)` to create a new message.
235
284
  */
236
285
  export const ForceAssignExperimentRequestSchema = /*@__PURE__*/
237
- messageDesc(file_experiments_v1_experiments, 31);
286
+ messageDesc(file_experiments_v1_experiments, 38);
238
287
 
239
288
  /**
240
289
  * Describes the message experiments.v1.ForceAssignExperimentResponse.
241
290
  * Use `create(ForceAssignExperimentResponseSchema)` to create a new message.
242
291
  */
243
292
  export const ForceAssignExperimentResponseSchema = /*@__PURE__*/
244
- messageDesc(file_experiments_v1_experiments, 32);
293
+ messageDesc(file_experiments_v1_experiments, 39);
245
294
 
246
295
  /**
247
296
  * Describes the message experiments.v1.RemoveExperimentAssignmentRequest.
248
297
  * Use `create(RemoveExperimentAssignmentRequestSchema)` to create a new message.
249
298
  */
250
299
  export const RemoveExperimentAssignmentRequestSchema = /*@__PURE__*/
251
- messageDesc(file_experiments_v1_experiments, 33);
300
+ messageDesc(file_experiments_v1_experiments, 40);
252
301
 
253
302
  /**
254
303
  * Describes the message experiments.v1.RemoveExperimentAssignmentResponse.
255
304
  * Use `create(RemoveExperimentAssignmentResponseSchema)` to create a new message.
256
305
  */
257
306
  export const RemoveExperimentAssignmentResponseSchema = /*@__PURE__*/
258
- messageDesc(file_experiments_v1_experiments, 34);
307
+ messageDesc(file_experiments_v1_experiments, 41);
259
308
 
260
309
  /**
261
310
  * Describes the message experiments.v1.ApplyExperimentWinnerRequest.
262
311
  * Use `create(ApplyExperimentWinnerRequestSchema)` to create a new message.
263
312
  */
264
313
  export const ApplyExperimentWinnerRequestSchema = /*@__PURE__*/
265
- messageDesc(file_experiments_v1_experiments, 35);
314
+ messageDesc(file_experiments_v1_experiments, 42);
266
315
 
267
316
  /**
268
317
  * Describes the message experiments.v1.ApplyExperimentWinnerResponse.
269
318
  * Use `create(ApplyExperimentWinnerResponseSchema)` to create a new message.
270
319
  */
271
320
  export const ApplyExperimentWinnerResponseSchema = /*@__PURE__*/
272
- messageDesc(file_experiments_v1_experiments, 36);
321
+ messageDesc(file_experiments_v1_experiments, 43);
273
322
 
274
323
  /**
275
324
  * Describes the message experiments.v1.PreviewExperimentWinnerRolloutRequest.
276
325
  * Use `create(PreviewExperimentWinnerRolloutRequestSchema)` to create a new message.
277
326
  */
278
327
  export const PreviewExperimentWinnerRolloutRequestSchema = /*@__PURE__*/
279
- messageDesc(file_experiments_v1_experiments, 37);
328
+ messageDesc(file_experiments_v1_experiments, 44);
280
329
 
281
330
  /**
282
331
  * Describes the message experiments.v1.AffectedRecord.
283
332
  * Use `create(AffectedRecordSchema)` to create a new message.
284
333
  */
285
334
  export const AffectedRecordSchema = /*@__PURE__*/
286
- messageDesc(file_experiments_v1_experiments, 38);
335
+ messageDesc(file_experiments_v1_experiments, 45);
287
336
 
288
337
  /**
289
338
  * Describes the message experiments.v1.PreviewExperimentWinnerRolloutResponse.
290
339
  * Use `create(PreviewExperimentWinnerRolloutResponseSchema)` to create a new message.
291
340
  */
292
341
  export const PreviewExperimentWinnerRolloutResponseSchema = /*@__PURE__*/
293
- messageDesc(file_experiments_v1_experiments, 39);
342
+ messageDesc(file_experiments_v1_experiments, 46);
294
343
 
295
344
  /**
296
345
  * Describes the message experiments.v1.RollbackExperimentRequest.
297
346
  * Use `create(RollbackExperimentRequestSchema)` to create a new message.
298
347
  */
299
348
  export const RollbackExperimentRequestSchema = /*@__PURE__*/
300
- messageDesc(file_experiments_v1_experiments, 40);
349
+ messageDesc(file_experiments_v1_experiments, 47);
301
350
 
302
351
  /**
303
352
  * Describes the message experiments.v1.RollbackExperimentResponse.
304
353
  * Use `create(RollbackExperimentResponseSchema)` to create a new message.
305
354
  */
306
355
  export const RollbackExperimentResponseSchema = /*@__PURE__*/
307
- messageDesc(file_experiments_v1_experiments, 41);
356
+ messageDesc(file_experiments_v1_experiments, 48);
308
357
 
309
358
  /**
310
359
  * Describes the message experiments.v1.GetAssignmentsRequest.
311
360
  * Use `create(GetAssignmentsRequestSchema)` to create a new message.
312
361
  */
313
362
  export const GetAssignmentsRequestSchema = /*@__PURE__*/
314
- messageDesc(file_experiments_v1_experiments, 42);
363
+ messageDesc(file_experiments_v1_experiments, 49);
315
364
 
316
365
  /**
317
366
  * Describes the message experiments.v1.GetAssignmentsResponse.
318
367
  * Use `create(GetAssignmentsResponseSchema)` to create a new message.
319
368
  */
320
369
  export const GetAssignmentsResponseSchema = /*@__PURE__*/
321
- messageDesc(file_experiments_v1_experiments, 43);
370
+ messageDesc(file_experiments_v1_experiments, 50);
322
371
 
323
372
  /**
324
373
  * Describes the message experiments.v1.ListExperimentDeclarationsRequest.
325
374
  * Use `create(ListExperimentDeclarationsRequestSchema)` to create a new message.
326
375
  */
327
376
  export const ListExperimentDeclarationsRequestSchema = /*@__PURE__*/
328
- messageDesc(file_experiments_v1_experiments, 44);
377
+ messageDesc(file_experiments_v1_experiments, 51);
329
378
 
330
379
  /**
331
380
  * Describes the message experiments.v1.ListExperimentDeclarationsResponse.
332
381
  * Use `create(ListExperimentDeclarationsResponseSchema)` to create a new message.
333
382
  */
334
383
  export const ListExperimentDeclarationsResponseSchema = /*@__PURE__*/
335
- messageDesc(file_experiments_v1_experiments, 45);
384
+ messageDesc(file_experiments_v1_experiments, 52);
336
385
 
337
386
  /**
338
387
  * Describes the message experiments.v1.ResolveExposureRequest.
339
388
  * Use `create(ResolveExposureRequestSchema)` to create a new message.
340
389
  */
341
390
  export const ResolveExposureRequestSchema = /*@__PURE__*/
342
- messageDesc(file_experiments_v1_experiments, 46);
391
+ messageDesc(file_experiments_v1_experiments, 53);
343
392
 
344
393
  /**
345
394
  * Describes the message experiments.v1.ResolveExposureResponse.
346
395
  * Use `create(ResolveExposureResponseSchema)` to create a new message.
347
396
  */
348
397
  export const ResolveExposureResponseSchema = /*@__PURE__*/
349
- messageDesc(file_experiments_v1_experiments, 47);
398
+ messageDesc(file_experiments_v1_experiments, 54);
350
399
 
351
400
  /**
352
401
  * Describes the enum experiments.v1.ExperimentStatus.
@@ -360,6 +409,23 @@ export const ExperimentStatusSchema = /*@__PURE__*/
360
409
  export const ExperimentStatus = /*@__PURE__*/
361
410
  tsEnum(ExperimentStatusSchema);
362
411
 
412
+ /**
413
+ * Describes the enum experiments.v1.MetricAggregator.
414
+ */
415
+ export const MetricAggregatorSchema = /*@__PURE__*/
416
+ enumDesc(file_experiments_v1_experiments, 1);
417
+
418
+ /**
419
+ * MetricAggregator names the aggregation operation applied to a JSONB
420
+ * path on conversion_events.metadata. SUM/AVG/COUNT/MIN/MAX map to the
421
+ * native Postgres aggregates; P50/P95 use percentile_cont(0.5|0.95)
422
+ * WITHIN GROUP (ORDER BY value).
423
+ *
424
+ * @generated from enum experiments.v1.MetricAggregator
425
+ */
426
+ export const MetricAggregator = /*@__PURE__*/
427
+ tsEnum(MetricAggregatorSchema);
428
+
363
429
  /**
364
430
  * @generated from service experiments.v1.ExperimentsService
365
431
  */