1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
// This file is generated by rust-protobuf 3.2.0. Do not edit
// .proto file is parsed by protoc --rust-out=...
// @generated

// https://github.com/rust-lang/rust-clippy/issues/702
#![allow(unknown_lints)]
#![allow(clippy::all)]

#![allow(unused_attributes)]
#![cfg_attr(rustfmt, rustfmt::skip)]

#![allow(box_pointers)]
#![allow(dead_code)]
#![allow(missing_docs)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(trivial_casts)]
#![allow(unused_results)]
#![allow(unused_mut)]

//! Generated file from `steps/detective.proto`

/// Generated files are compatible only with the same version
/// of protobuf runtime.
const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_3_2_0;

#[derive(PartialEq,Clone,Default,Debug)]
// @@protoc_insertion_point(message:protos.steps.DetectiveStep)
pub struct DetectiveStep {
    // message fields
    // @@protoc_insertion_point(field:protos.steps.DetectiveStep.input)
    pub input: ::std::vec::Vec<u8>,
    // @@protoc_insertion_point(field:protos.steps.DetectiveStep.path)
    pub path: ::std::string::String,
    // @@protoc_insertion_point(field:protos.steps.DetectiveStep.args)
    pub args: ::std::vec::Vec<::std::string::String>,
    // @@protoc_insertion_point(field:protos.steps.DetectiveStep.negate)
    pub negate: bool,
    // @@protoc_insertion_point(field:protos.steps.DetectiveStep.type)
    pub type_: ::protobuf::EnumOrUnknown<DetectiveType>,
    // @@protoc_insertion_point(field:protos.steps.DetectiveStep.conditions)
    pub conditions: ::std::vec::Vec<::protobuf::EnumOrUnknown<super::common::Condition>>,
    // special fields
    // @@protoc_insertion_point(special_field:protos.steps.DetectiveStep.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a DetectiveStep {
    fn default() -> &'a DetectiveStep {
        <DetectiveStep as ::protobuf::Message>::default_instance()
    }
}

impl DetectiveStep {
    pub fn new() -> DetectiveStep {
        ::std::default::Default::default()
    }

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(6);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "input",
            |m: &DetectiveStep| { &m.input },
            |m: &mut DetectiveStep| { &mut m.input },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "path",
            |m: &DetectiveStep| { &m.path },
            |m: &mut DetectiveStep| { &mut m.path },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
            "args",
            |m: &DetectiveStep| { &m.args },
            |m: &mut DetectiveStep| { &mut m.args },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "negate",
            |m: &DetectiveStep| { &m.negate },
            |m: &mut DetectiveStep| { &mut m.negate },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "type",
            |m: &DetectiveStep| { &m.type_ },
            |m: &mut DetectiveStep| { &mut m.type_ },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
            "conditions",
            |m: &DetectiveStep| { &m.conditions },
            |m: &mut DetectiveStep| { &mut m.conditions },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<DetectiveStep>(
            "DetectiveStep",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for DetectiveStep {
    const NAME: &'static str = "DetectiveStep";

    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
        while let Some(tag) = is.read_raw_tag_or_eof()? {
            match tag {
                10 => {
                    self.input = is.read_bytes()?;
                },
                18 => {
                    self.path = is.read_string()?;
                },
                26 => {
                    self.args.push(is.read_string()?);
                },
                32 => {
                    self.negate = is.read_bool()?;
                },
                40 => {
                    self.type_ = is.read_enum_or_unknown()?;
                },
                48 => {
                    self.conditions.push(is.read_enum_or_unknown()?);
                },
                50 => {
                    ::protobuf::rt::read_repeated_packed_enum_or_unknown_into(is, &mut self.conditions)?
                },
                tag => {
                    ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u64 {
        let mut my_size = 0;
        if !self.input.is_empty() {
            my_size += ::protobuf::rt::bytes_size(1, &self.input);
        }
        if !self.path.is_empty() {
            my_size += ::protobuf::rt::string_size(2, &self.path);
        }
        for value in &self.args {
            my_size += ::protobuf::rt::string_size(3, &value);
        };
        if self.negate != false {
            my_size += 1 + 1;
        }
        if self.type_ != ::protobuf::EnumOrUnknown::new(DetectiveType::DETECTIVE_TYPE_UNKNOWN) {
            my_size += ::protobuf::rt::int32_size(5, self.type_.value());
        }
        for value in &self.conditions {
            my_size += ::protobuf::rt::int32_size(6, value.value());
        };
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if !self.input.is_empty() {
            os.write_bytes(1, &self.input)?;
        }
        if !self.path.is_empty() {
            os.write_string(2, &self.path)?;
        }
        for v in &self.args {
            os.write_string(3, &v)?;
        };
        if self.negate != false {
            os.write_bool(4, self.negate)?;
        }
        if self.type_ != ::protobuf::EnumOrUnknown::new(DetectiveType::DETECTIVE_TYPE_UNKNOWN) {
            os.write_enum(5, ::protobuf::EnumOrUnknown::value(&self.type_))?;
        }
        for v in &self.conditions {
            os.write_enum(6, ::protobuf::EnumOrUnknown::value(v))?;
        };
        os.write_unknown_fields(self.special_fields.unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn special_fields(&self) -> &::protobuf::SpecialFields {
        &self.special_fields
    }

    fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
        &mut self.special_fields
    }

    fn new() -> DetectiveStep {
        DetectiveStep::new()
    }

    fn clear(&mut self) {
        self.input.clear();
        self.path.clear();
        self.args.clear();
        self.negate = false;
        self.type_ = ::protobuf::EnumOrUnknown::new(DetectiveType::DETECTIVE_TYPE_UNKNOWN);
        self.conditions.clear();
        self.special_fields.clear();
    }

    fn default_instance() -> &'static DetectiveStep {
        static instance: DetectiveStep = DetectiveStep {
            input: ::std::vec::Vec::new(),
            path: ::std::string::String::new(),
            args: ::std::vec::Vec::new(),
            negate: false,
            type_: ::protobuf::EnumOrUnknown::from_i32(0),
            conditions: ::std::vec::Vec::new(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for DetectiveStep {
    fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().message_by_package_relative_name("DetectiveStep").unwrap()).clone()
    }
}

impl ::std::fmt::Display for DetectiveStep {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for DetectiveStep {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

#[derive(Clone,Copy,PartialEq,Eq,Debug,Hash)]
// @@protoc_insertion_point(enum:protos.steps.DetectiveType)
pub enum DetectiveType {
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_UNKNOWN)
    DETECTIVE_TYPE_UNKNOWN = 0,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_IS_EMPTY)
    DETECTIVE_TYPE_IS_EMPTY = 1000,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_HAS_FIELD)
    DETECTIVE_TYPE_HAS_FIELD = 1001,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_IS_TYPE)
    DETECTIVE_TYPE_IS_TYPE = 1002,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_STRING_CONTAINS_ANY)
    DETECTIVE_TYPE_STRING_CONTAINS_ANY = 1003,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_STRING_CONTAINS_ALL)
    DETECTIVE_TYPE_STRING_CONTAINS_ALL = 1004,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_STRING_EQUAL)
    DETECTIVE_TYPE_STRING_EQUAL = 1005,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_IPV4_ADDRESS)
    DETECTIVE_TYPE_IPV4_ADDRESS = 1006,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_IPV6_ADDRESS)
    DETECTIVE_TYPE_IPV6_ADDRESS = 1007,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_MAC_ADDRESS)
    DETECTIVE_TYPE_MAC_ADDRESS = 1008,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_REGEX)
    DETECTIVE_TYPE_REGEX = 1009,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_TIMESTAMP_RFC3339)
    DETECTIVE_TYPE_TIMESTAMP_RFC3339 = 1010,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_TIMESTAMP_UNIX_NANO)
    DETECTIVE_TYPE_TIMESTAMP_UNIX_NANO = 1011,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_TIMESTAMP_UNIX)
    DETECTIVE_TYPE_TIMESTAMP_UNIX = 1012,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_BOOLEAN_TRUE)
    DETECTIVE_TYPE_BOOLEAN_TRUE = 1013,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_BOOLEAN_FALSE)
    DETECTIVE_TYPE_BOOLEAN_FALSE = 1014,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_UUID)
    DETECTIVE_TYPE_UUID = 1015,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_ANY)
    DETECTIVE_TYPE_PII_ANY = 2000,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_CREDIT_CARD)
    DETECTIVE_TYPE_PII_CREDIT_CARD = 2001,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_SSN)
    DETECTIVE_TYPE_PII_SSN = 2002,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_EMAIL)
    DETECTIVE_TYPE_PII_EMAIL = 2003,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_PHONE)
    DETECTIVE_TYPE_PII_PHONE = 2004,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_DRIVER_LICENSE)
    DETECTIVE_TYPE_PII_DRIVER_LICENSE = 2005,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_PASSPORT_ID)
    DETECTIVE_TYPE_PII_PASSPORT_ID = 2006,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_VIN_NUMBER)
    DETECTIVE_TYPE_PII_VIN_NUMBER = 2007,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_SERIAL_NUMBER)
    DETECTIVE_TYPE_PII_SERIAL_NUMBER = 2008,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_LOGIN)
    DETECTIVE_TYPE_PII_LOGIN = 2009,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_TAXPAYER_ID)
    DETECTIVE_TYPE_PII_TAXPAYER_ID = 2010,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_ADDRESS)
    DETECTIVE_TYPE_PII_ADDRESS = 2011,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_SIGNATURE)
    DETECTIVE_TYPE_PII_SIGNATURE = 2012,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_GEOLOCATION)
    DETECTIVE_TYPE_PII_GEOLOCATION = 2013,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_EDUCATION)
    DETECTIVE_TYPE_PII_EDUCATION = 2014,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_FINANCIAL)
    DETECTIVE_TYPE_PII_FINANCIAL = 2015,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_PII_HEALTH)
    DETECTIVE_TYPE_PII_HEALTH = 2016,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_NUMERIC_EQUAL_TO)
    DETECTIVE_TYPE_NUMERIC_EQUAL_TO = 3000,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_NUMERIC_GREATER_THAN)
    DETECTIVE_TYPE_NUMERIC_GREATER_THAN = 3001,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_NUMERIC_GREATER_EQUAL)
    DETECTIVE_TYPE_NUMERIC_GREATER_EQUAL = 3002,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_NUMERIC_LESS_THAN)
    DETECTIVE_TYPE_NUMERIC_LESS_THAN = 3003,
    // @@protoc_insertion_point(enum_value:protos.steps.DetectiveType.DETECTIVE_TYPE_NUMERIC_LESS_EQUAL)
    DETECTIVE_TYPE_NUMERIC_LESS_EQUAL = 3004,
}

impl ::protobuf::Enum for DetectiveType {
    const NAME: &'static str = "DetectiveType";

    fn value(&self) -> i32 {
        *self as i32
    }

    fn from_i32(value: i32) -> ::std::option::Option<DetectiveType> {
        match value {
            0 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_UNKNOWN),
            1000 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_IS_EMPTY),
            1001 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_HAS_FIELD),
            1002 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_IS_TYPE),
            1003 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_STRING_CONTAINS_ANY),
            1004 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_STRING_CONTAINS_ALL),
            1005 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_STRING_EQUAL),
            1006 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_IPV4_ADDRESS),
            1007 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_IPV6_ADDRESS),
            1008 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_MAC_ADDRESS),
            1009 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_REGEX),
            1010 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_TIMESTAMP_RFC3339),
            1011 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_TIMESTAMP_UNIX_NANO),
            1012 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_TIMESTAMP_UNIX),
            1013 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_BOOLEAN_TRUE),
            1014 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_BOOLEAN_FALSE),
            1015 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_UUID),
            2000 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_ANY),
            2001 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_CREDIT_CARD),
            2002 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_SSN),
            2003 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_EMAIL),
            2004 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_PHONE),
            2005 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_DRIVER_LICENSE),
            2006 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_PASSPORT_ID),
            2007 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_VIN_NUMBER),
            2008 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_SERIAL_NUMBER),
            2009 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_LOGIN),
            2010 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_TAXPAYER_ID),
            2011 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_ADDRESS),
            2012 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_SIGNATURE),
            2013 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_GEOLOCATION),
            2014 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_EDUCATION),
            2015 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_FINANCIAL),
            2016 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_PII_HEALTH),
            3000 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_NUMERIC_EQUAL_TO),
            3001 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_NUMERIC_GREATER_THAN),
            3002 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_NUMERIC_GREATER_EQUAL),
            3003 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_NUMERIC_LESS_THAN),
            3004 => ::std::option::Option::Some(DetectiveType::DETECTIVE_TYPE_NUMERIC_LESS_EQUAL),
            _ => ::std::option::Option::None
        }
    }

    const VALUES: &'static [DetectiveType] = &[
        DetectiveType::DETECTIVE_TYPE_UNKNOWN,
        DetectiveType::DETECTIVE_TYPE_IS_EMPTY,
        DetectiveType::DETECTIVE_TYPE_HAS_FIELD,
        DetectiveType::DETECTIVE_TYPE_IS_TYPE,
        DetectiveType::DETECTIVE_TYPE_STRING_CONTAINS_ANY,
        DetectiveType::DETECTIVE_TYPE_STRING_CONTAINS_ALL,
        DetectiveType::DETECTIVE_TYPE_STRING_EQUAL,
        DetectiveType::DETECTIVE_TYPE_IPV4_ADDRESS,
        DetectiveType::DETECTIVE_TYPE_IPV6_ADDRESS,
        DetectiveType::DETECTIVE_TYPE_MAC_ADDRESS,
        DetectiveType::DETECTIVE_TYPE_REGEX,
        DetectiveType::DETECTIVE_TYPE_TIMESTAMP_RFC3339,
        DetectiveType::DETECTIVE_TYPE_TIMESTAMP_UNIX_NANO,
        DetectiveType::DETECTIVE_TYPE_TIMESTAMP_UNIX,
        DetectiveType::DETECTIVE_TYPE_BOOLEAN_TRUE,
        DetectiveType::DETECTIVE_TYPE_BOOLEAN_FALSE,
        DetectiveType::DETECTIVE_TYPE_UUID,
        DetectiveType::DETECTIVE_TYPE_PII_ANY,
        DetectiveType::DETECTIVE_TYPE_PII_CREDIT_CARD,
        DetectiveType::DETECTIVE_TYPE_PII_SSN,
        DetectiveType::DETECTIVE_TYPE_PII_EMAIL,
        DetectiveType::DETECTIVE_TYPE_PII_PHONE,
        DetectiveType::DETECTIVE_TYPE_PII_DRIVER_LICENSE,
        DetectiveType::DETECTIVE_TYPE_PII_PASSPORT_ID,
        DetectiveType::DETECTIVE_TYPE_PII_VIN_NUMBER,
        DetectiveType::DETECTIVE_TYPE_PII_SERIAL_NUMBER,
        DetectiveType::DETECTIVE_TYPE_PII_LOGIN,
        DetectiveType::DETECTIVE_TYPE_PII_TAXPAYER_ID,
        DetectiveType::DETECTIVE_TYPE_PII_ADDRESS,
        DetectiveType::DETECTIVE_TYPE_PII_SIGNATURE,
        DetectiveType::DETECTIVE_TYPE_PII_GEOLOCATION,
        DetectiveType::DETECTIVE_TYPE_PII_EDUCATION,
        DetectiveType::DETECTIVE_TYPE_PII_FINANCIAL,
        DetectiveType::DETECTIVE_TYPE_PII_HEALTH,
        DetectiveType::DETECTIVE_TYPE_NUMERIC_EQUAL_TO,
        DetectiveType::DETECTIVE_TYPE_NUMERIC_GREATER_THAN,
        DetectiveType::DETECTIVE_TYPE_NUMERIC_GREATER_EQUAL,
        DetectiveType::DETECTIVE_TYPE_NUMERIC_LESS_THAN,
        DetectiveType::DETECTIVE_TYPE_NUMERIC_LESS_EQUAL,
    ];
}

impl ::protobuf::EnumFull for DetectiveType {
    fn enum_descriptor() -> ::protobuf::reflect::EnumDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().enum_by_package_relative_name("DetectiveType").unwrap()).clone()
    }

    fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor {
        let index = match self {
            DetectiveType::DETECTIVE_TYPE_UNKNOWN => 0,
            DetectiveType::DETECTIVE_TYPE_IS_EMPTY => 1,
            DetectiveType::DETECTIVE_TYPE_HAS_FIELD => 2,
            DetectiveType::DETECTIVE_TYPE_IS_TYPE => 3,
            DetectiveType::DETECTIVE_TYPE_STRING_CONTAINS_ANY => 4,
            DetectiveType::DETECTIVE_TYPE_STRING_CONTAINS_ALL => 5,
            DetectiveType::DETECTIVE_TYPE_STRING_EQUAL => 6,
            DetectiveType::DETECTIVE_TYPE_IPV4_ADDRESS => 7,
            DetectiveType::DETECTIVE_TYPE_IPV6_ADDRESS => 8,
            DetectiveType::DETECTIVE_TYPE_MAC_ADDRESS => 9,
            DetectiveType::DETECTIVE_TYPE_REGEX => 10,
            DetectiveType::DETECTIVE_TYPE_TIMESTAMP_RFC3339 => 11,
            DetectiveType::DETECTIVE_TYPE_TIMESTAMP_UNIX_NANO => 12,
            DetectiveType::DETECTIVE_TYPE_TIMESTAMP_UNIX => 13,
            DetectiveType::DETECTIVE_TYPE_BOOLEAN_TRUE => 14,
            DetectiveType::DETECTIVE_TYPE_BOOLEAN_FALSE => 15,
            DetectiveType::DETECTIVE_TYPE_UUID => 16,
            DetectiveType::DETECTIVE_TYPE_PII_ANY => 17,
            DetectiveType::DETECTIVE_TYPE_PII_CREDIT_CARD => 18,
            DetectiveType::DETECTIVE_TYPE_PII_SSN => 19,
            DetectiveType::DETECTIVE_TYPE_PII_EMAIL => 20,
            DetectiveType::DETECTIVE_TYPE_PII_PHONE => 21,
            DetectiveType::DETECTIVE_TYPE_PII_DRIVER_LICENSE => 22,
            DetectiveType::DETECTIVE_TYPE_PII_PASSPORT_ID => 23,
            DetectiveType::DETECTIVE_TYPE_PII_VIN_NUMBER => 24,
            DetectiveType::DETECTIVE_TYPE_PII_SERIAL_NUMBER => 25,
            DetectiveType::DETECTIVE_TYPE_PII_LOGIN => 26,
            DetectiveType::DETECTIVE_TYPE_PII_TAXPAYER_ID => 27,
            DetectiveType::DETECTIVE_TYPE_PII_ADDRESS => 28,
            DetectiveType::DETECTIVE_TYPE_PII_SIGNATURE => 29,
            DetectiveType::DETECTIVE_TYPE_PII_GEOLOCATION => 30,
            DetectiveType::DETECTIVE_TYPE_PII_EDUCATION => 31,
            DetectiveType::DETECTIVE_TYPE_PII_FINANCIAL => 32,
            DetectiveType::DETECTIVE_TYPE_PII_HEALTH => 33,
            DetectiveType::DETECTIVE_TYPE_NUMERIC_EQUAL_TO => 34,
            DetectiveType::DETECTIVE_TYPE_NUMERIC_GREATER_THAN => 35,
            DetectiveType::DETECTIVE_TYPE_NUMERIC_GREATER_EQUAL => 36,
            DetectiveType::DETECTIVE_TYPE_NUMERIC_LESS_THAN => 37,
            DetectiveType::DETECTIVE_TYPE_NUMERIC_LESS_EQUAL => 38,
        };
        Self::enum_descriptor().value_by_index(index)
    }
}

impl ::std::default::Default for DetectiveType {
    fn default() -> Self {
        DetectiveType::DETECTIVE_TYPE_UNKNOWN
    }
}

impl DetectiveType {
    fn generated_enum_descriptor_data() -> ::protobuf::reflect::GeneratedEnumDescriptorData {
        ::protobuf::reflect::GeneratedEnumDescriptorData::new::<DetectiveType>("DetectiveType")
    }
}

static file_descriptor_proto_data: &'static [u8] = b"\
    \n\x15steps/detective.proto\x12\x0cprotos.steps\x1a\x0ccommon.proto\"\
    \xc9\x01\n\rDetectiveStep\x12\x14\n\x05input\x18\x01\x20\x01(\x0cR\x05in\
    put\x12\x12\n\x04path\x18\x02\x20\x01(\tR\x04path\x12\x12\n\x04args\x18\
    \x03\x20\x03(\tR\x04args\x12\x16\n\x06negate\x18\x04\x20\x01(\x08R\x06ne\
    gate\x12/\n\x04type\x18\x05\x20\x01(\x0e2\x1b.protos.steps.DetectiveType\
    R\x04type\x121\n\nconditions\x18\x06\x20\x03(\x0e2\x11.protos.ConditionR\
    \nconditions*\xde\n\n\rDetectiveType\x12\x1a\n\x16DETECTIVE_TYPE_UNKNOWN\
    \x10\0\x12\x1c\n\x17DETECTIVE_TYPE_IS_EMPTY\x10\xe8\x07\x12\x1d\n\x18DET\
    ECTIVE_TYPE_HAS_FIELD\x10\xe9\x07\x12\x1b\n\x16DETECTIVE_TYPE_IS_TYPE\
    \x10\xea\x07\x12'\n\"DETECTIVE_TYPE_STRING_CONTAINS_ANY\x10\xeb\x07\x12'\
    \n\"DETECTIVE_TYPE_STRING_CONTAINS_ALL\x10\xec\x07\x12\x20\n\x1bDETECTIV\
    E_TYPE_STRING_EQUAL\x10\xed\x07\x12\x20\n\x1bDETECTIVE_TYPE_IPV4_ADDRESS\
    \x10\xee\x07\x12\x20\n\x1bDETECTIVE_TYPE_IPV6_ADDRESS\x10\xef\x07\x12\
    \x1f\n\x1aDETECTIVE_TYPE_MAC_ADDRESS\x10\xf0\x07\x12\x19\n\x14DETECTIVE_\
    TYPE_REGEX\x10\xf1\x07\x12%\n\x20DETECTIVE_TYPE_TIMESTAMP_RFC3339\x10\
    \xf2\x07\x12'\n\"DETECTIVE_TYPE_TIMESTAMP_UNIX_NANO\x10\xf3\x07\x12\"\n\
    \x1dDETECTIVE_TYPE_TIMESTAMP_UNIX\x10\xf4\x07\x12\x20\n\x1bDETECTIVE_TYP\
    E_BOOLEAN_TRUE\x10\xf5\x07\x12!\n\x1cDETECTIVE_TYPE_BOOLEAN_FALSE\x10\
    \xf6\x07\x12\x18\n\x13DETECTIVE_TYPE_UUID\x10\xf7\x07\x12\x1b\n\x16DETEC\
    TIVE_TYPE_PII_ANY\x10\xd0\x0f\x12#\n\x1eDETECTIVE_TYPE_PII_CREDIT_CARD\
    \x10\xd1\x0f\x12\x1b\n\x16DETECTIVE_TYPE_PII_SSN\x10\xd2\x0f\x12\x1d\n\
    \x18DETECTIVE_TYPE_PII_EMAIL\x10\xd3\x0f\x12\x1d\n\x18DETECTIVE_TYPE_PII\
    _PHONE\x10\xd4\x0f\x12&\n!DETECTIVE_TYPE_PII_DRIVER_LICENSE\x10\xd5\x0f\
    \x12#\n\x1eDETECTIVE_TYPE_PII_PASSPORT_ID\x10\xd6\x0f\x12\"\n\x1dDETECTI\
    VE_TYPE_PII_VIN_NUMBER\x10\xd7\x0f\x12%\n\x20DETECTIVE_TYPE_PII_SERIAL_N\
    UMBER\x10\xd8\x0f\x12\x1d\n\x18DETECTIVE_TYPE_PII_LOGIN\x10\xd9\x0f\x12#\
    \n\x1eDETECTIVE_TYPE_PII_TAXPAYER_ID\x10\xda\x0f\x12\x1f\n\x1aDETECTIVE_\
    TYPE_PII_ADDRESS\x10\xdb\x0f\x12!\n\x1cDETECTIVE_TYPE_PII_SIGNATURE\x10\
    \xdc\x0f\x12#\n\x1eDETECTIVE_TYPE_PII_GEOLOCATION\x10\xdd\x0f\x12!\n\x1c\
    DETECTIVE_TYPE_PII_EDUCATION\x10\xde\x0f\x12!\n\x1cDETECTIVE_TYPE_PII_FI\
    NANCIAL\x10\xdf\x0f\x12\x1e\n\x19DETECTIVE_TYPE_PII_HEALTH\x10\xe0\x0f\
    \x12$\n\x1fDETECTIVE_TYPE_NUMERIC_EQUAL_TO\x10\xb8\x17\x12(\n#DETECTIVE_\
    TYPE_NUMERIC_GREATER_THAN\x10\xb9\x17\x12)\n$DETECTIVE_TYPE_NUMERIC_GREA\
    TER_EQUAL\x10\xba\x17\x12%\n\x20DETECTIVE_TYPE_NUMERIC_LESS_THAN\x10\xbb\
    \x17\x12&\n!DETECTIVE_TYPE_NUMERIC_LESS_EQUAL\x10\xbc\x17B:Z8github.com/\
    streamdal/snitch-protos/build/go/protos/stepsJ\xc8\x1b\n\x06\x12\x04\0\0\
    R\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\t\n\x02\x03\0\x12\x03\x02\0\x16\
    \n\x08\n\x01\x02\x12\x03\x04\0\x15\n\x08\n\x01\x08\x12\x03\x06\0O\n\t\n\
    \x02\x08\x0b\x12\x03\x06\0O\n5\n\x02\x05\0\x12\x04\x08\0I\x01\")\x201000\
    -1999\x20reserved\x20for\x20core\x20match\x20types\n\n\n\n\x03\x05\0\x01\
    \x12\x03\x08\x05\x12\n\x0b\n\x04\x05\0\x02\0\x12\x03\x0b\x02\x1d\n\x0c\n\
    \x05\x05\0\x02\0\x01\x12\x03\x0b\x02\x18\n\x0c\n\x05\x05\0\x02\0\x02\x12\
    \x03\x0b\x1b\x1c\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x0c\x02!\n\x0c\n\x05\
    \x05\0\x02\x01\x01\x12\x03\x0c\x02\x19\n\x0c\n\x05\x05\0\x02\x01\x02\x12\
    \x03\x0c\x1c\x20\n\x0b\n\x04\x05\0\x02\x02\x12\x03\r\x02\"\n\x0c\n\x05\
    \x05\0\x02\x02\x01\x12\x03\r\x02\x1a\n\x0c\n\x05\x05\0\x02\x02\x02\x12\
    \x03\r\x1d!\n\x0b\n\x04\x05\0\x02\x03\x12\x03\x0e\x02\x20\n\x0c\n\x05\
    \x05\0\x02\x03\x01\x12\x03\x0e\x02\x18\n\x0c\n\x05\x05\0\x02\x03\x02\x12\
    \x03\x0e\x1b\x1f\n\x0b\n\x04\x05\0\x02\x04\x12\x03\x0f\x02,\n\x0c\n\x05\
    \x05\0\x02\x04\x01\x12\x03\x0f\x02$\n\x0c\n\x05\x05\0\x02\x04\x02\x12\
    \x03\x0f'+\n\x0b\n\x04\x05\0\x02\x05\x12\x03\x10\x02,\n\x0c\n\x05\x05\0\
    \x02\x05\x01\x12\x03\x10\x02$\n\x0c\n\x05\x05\0\x02\x05\x02\x12\x03\x10'\
    +\n\x0b\n\x04\x05\0\x02\x06\x12\x03\x11\x02%\n\x0c\n\x05\x05\0\x02\x06\
    \x01\x12\x03\x11\x02\x1d\n\x0c\n\x05\x05\0\x02\x06\x02\x12\x03\x11\x20$\
    \n\x0b\n\x04\x05\0\x02\x07\x12\x03\x12\x02%\n\x0c\n\x05\x05\0\x02\x07\
    \x01\x12\x03\x12\x02\x1d\n\x0c\n\x05\x05\0\x02\x07\x02\x12\x03\x12\x20$\
    \n\x0b\n\x04\x05\0\x02\x08\x12\x03\x13\x02%\n\x0c\n\x05\x05\0\x02\x08\
    \x01\x12\x03\x13\x02\x1d\n\x0c\n\x05\x05\0\x02\x08\x02\x12\x03\x13\x20$\
    \n\x0b\n\x04\x05\0\x02\t\x12\x03\x14\x02$\n\x0c\n\x05\x05\0\x02\t\x01\
    \x12\x03\x14\x02\x1c\n\x0c\n\x05\x05\0\x02\t\x02\x12\x03\x14\x1f#\n\x0b\
    \n\x04\x05\0\x02\n\x12\x03\x15\x02\x1e\n\x0c\n\x05\x05\0\x02\n\x01\x12\
    \x03\x15\x02\x16\n\x0c\n\x05\x05\0\x02\n\x02\x12\x03\x15\x19\x1d\n\x0b\n\
    \x04\x05\0\x02\x0b\x12\x03\x16\x02*\n\x0c\n\x05\x05\0\x02\x0b\x01\x12\
    \x03\x16\x02\"\n\x0c\n\x05\x05\0\x02\x0b\x02\x12\x03\x16%)\n\x0b\n\x04\
    \x05\0\x02\x0c\x12\x03\x17\x02,\n\x0c\n\x05\x05\0\x02\x0c\x01\x12\x03\
    \x17\x02$\n\x0c\n\x05\x05\0\x02\x0c\x02\x12\x03\x17'+\n\x0b\n\x04\x05\0\
    \x02\r\x12\x03\x18\x02'\n\x0c\n\x05\x05\0\x02\r\x01\x12\x03\x18\x02\x1f\
    \n\x0c\n\x05\x05\0\x02\r\x02\x12\x03\x18\"&\n\x0b\n\x04\x05\0\x02\x0e\
    \x12\x03\x19\x02%\n\x0c\n\x05\x05\0\x02\x0e\x01\x12\x03\x19\x02\x1d\n\
    \x0c\n\x05\x05\0\x02\x0e\x02\x12\x03\x19\x20$\n\x0b\n\x04\x05\0\x02\x0f\
    \x12\x03\x1a\x02&\n\x0c\n\x05\x05\0\x02\x0f\x01\x12\x03\x1a\x02\x1e\n\
    \x0c\n\x05\x05\0\x02\x0f\x02\x12\x03\x1a!%\n\x0b\n\x04\x05\0\x02\x10\x12\
    \x03\x1b\x02\x1d\n\x0c\n\x05\x05\0\x02\x10\x01\x12\x03\x1b\x02\x15\n\x0c\
    \n\x05\x05\0\x02\x10\x02\x12\x03\x1b\x18\x1c\nk\n\x04\x05\0\x02\x11\x12\
    \x03\x20\x02\x20\x1aB/\x20Payloads\x20containing\x20values\x20with\x20an\
    y\x20PII\x20-\x20runs\x20all\x20PII\x20matchers\n2\x1a\x20PII\x20matcher\
    s\x20(2000-2999)\n\n\x0c\n\x05\x05\0\x02\x11\x01\x12\x03\x20\x02\x18\n\
    \x0c\n\x05\x05\0\x02\x11\x02\x12\x03\x20\x1b\x1f\nC\n\x04\x05\0\x02\x12\
    \x12\x03\"\x02(\x1a6\x20Payloads\x20containing\x20values\x20with\x20a\
    \x20credit\x20card\x20number\n\n\x0c\n\x05\x05\0\x02\x12\x01\x12\x03\"\
    \x02\x20\n\x0c\n\x05\x05\0\x02\x12\x02\x12\x03\"#'\nG\n\x04\x05\0\x02\
    \x13\x12\x03$\x02\x20\x1a:\x20Payloads\x20containing\x20values\x20with\
    \x20a\x20social\x20security\x20number\n\n\x0c\n\x05\x05\0\x02\x13\x01\
    \x12\x03$\x02\x18\n\x0c\n\x05\x05\0\x02\x13\x02\x12\x03$\x1b\x1f\n?\n\
    \x04\x05\0\x02\x14\x12\x03&\x02\"\x1a2\x20Payloads\x20containing\x20valu\
    es\x20with\x20an\x20email\x20address\n\n\x0c\n\x05\x05\0\x02\x14\x01\x12\
    \x03&\x02\x1a\n\x0c\n\x05\x05\0\x02\x14\x02\x12\x03&\x1d!\n=\n\x04\x05\0\
    \x02\x15\x12\x03(\x02\"\x1a0\x20Payloads\x20containing\x20values\x20with\
    \x20a\x20phone\x20number\n\n\x0c\n\x05\x05\0\x02\x15\x01\x12\x03(\x02\
    \x1a\n\x0c\n\x05\x05\0\x02\x15\x02\x12\x03(\x1d!\nA\n\x04\x05\0\x02\x16\
    \x12\x03*\x02+\x1a4\x20Payloads\x20containing\x20values\x20with\x20a\x20\
    driver's\x20license\n\n\x0c\n\x05\x05\0\x02\x16\x01\x12\x03*\x02#\n\x0c\
    \n\x05\x05\0\x02\x16\x02\x12\x03*&*\n<\n\x04\x05\0\x02\x17\x12\x03,\x02(\
    \x1a/\x20Payloads\x20containing\x20values\x20with\x20a\x20passport\x20ID\
    \n\n\x0c\n\x05\x05\0\x02\x17\x01\x12\x03,\x02\x20\n\x0c\n\x05\x05\0\x02\
    \x17\x02\x12\x03,#'\n;\n\x04\x05\0\x02\x18\x12\x03.\x02'\x1a.\x20Payload\
    s\x20containing\x20values\x20with\x20a\x20VIN\x20number\n\n\x0c\n\x05\
    \x05\0\x02\x18\x01\x12\x03.\x02\x1f\n\x0c\n\x05\x05\0\x02\x18\x02\x12\
    \x03.\"&\nL\n\x04\x05\0\x02\x19\x12\x030\x02*\x1a?\x20Payloads\x20contai\
    ning\x20values\x20with\x20various\x20serial\x20number\x20formats\n\n\x0c\
    \n\x05\x05\0\x02\x19\x01\x12\x030\x02\"\n\x0c\n\x05\x05\0\x02\x19\x02\
    \x12\x030%)\n\x8e\x01\n\x04\x05\0\x02\x1a\x12\x032\x02\"\x1a\x80\x01\x20\
    Payloads\x20containing\x20fields\x20named\x20\"login\",\x20\"username\",\
    \x20\"user\",\x20\"userid\",\x20\"user_id\",\x20\"user\",\x20\"password\
    \",\x20\"pass\",\x20\"passwd\",\x20\"pwd\"\n\n\x0c\n\x05\x05\0\x02\x1a\
    \x01\x12\x032\x02\x1a\n\x0c\n\x05\x05\0\x02\x1a\x02\x12\x032\x1d!\n^\n\
    \x04\x05\0\x02\x1b\x12\x034\x02(\x1aQ\x20Payloads\x20containing\x20field\
    s\x20named\x20\"taxpayer_id\",\x20\"tax_id\",\x20\"taxpayerid\",\x20\"ta\
    xid\"\n\n\x0c\n\x05\x05\0\x02\x1b\x01\x12\x034\x02\x20\n\x0c\n\x05\x05\0\
    \x02\x1b\x02\x12\x034#'\n}\n\x04\x05\0\x02\x1c\x12\x036\x02$\x1ap\x20Pay\
    loads\x20containing\x20fields\x20named\x20\"address\",\x20\"street\",\
    \x20\"city\",\x20\"state\",\x20\"zip\",\x20\"zipcode\",\x20\"zip_code\",\
    \x20\"country\"\n\n\x0c\n\x05\x05\0\x02\x1c\x01\x12\x036\x02\x1c\n\x0c\n\
    \x05\x05\0\x02\x1c\x02\x12\x036\x1f#\n|\n\x04\x05\0\x02\x1d\x12\x038\x02\
    &\x1ao\x20Payloads\x20containing\x20fields\x20named\x20\"signature\",\
    \x20\"signature_image\",\x20\"signature_image_url\",\x20\"signature_imag\
    e_uri\"\n\n\x0c\n\x05\x05\0\x02\x1d\x01\x12\x038\x02\x1e\n\x0c\n\x05\x05\
    \0\x02\x1d\x02\x12\x038!%\ny\n\x04\x05\0\x02\x1e\x12\x03:\x02(\x1al\x20P\
    ayloads\x20containing\x20values\x20that\x20contain\x20GPS\x20data\x20or\
    \x20coordinates\x20like\x20\"lat\",\x20\"lon\",\x20\"latitude\",\x20\"lo\
    ngitude\"\n\n\x0c\n\x05\x05\0\x02\x1e\x01\x12\x03:\x02\x20\n\x0c\n\x05\
    \x05\0\x02\x1e\x02\x12\x03:#'\n]\n\x04\x05\0\x02\x1f\x12\x03<\x02&\x1aP\
    \x20Payloads\x20containing\x20fields\x20like\x20\"school\",\x20\"univers\
    ity\",\x20\"college\",\x20\"education\"\n\n\x0c\n\x05\x05\0\x02\x1f\x01\
    \x12\x03<\x02\x1e\n\x0c\n\x05\x05\0\x02\x1f\x02\x12\x03<!%\nk\n\x04\x05\
    \0\x02\x20\x12\x03>\x02&\x1a^\x20Payloads\x20containing\x20fields\x20lik\
    e\x20\"account\",\x20\"bank\",\x20\"credit\",\x20\"debit\",\x20\"financi\
    al\",\x20\"finance\"\n\n\x0c\n\x05\x05\0\x02\x20\x01\x12\x03>\x02\x1e\n\
    \x0c\n\x05\x05\0\x02\x20\x02\x12\x03>!%\nj\n\x04\x05\0\x02!\x12\x03@\x02\
    #\x1a]\x20Payloads\x20containing\x20fields\x20like\x20\"patient\",\x20\"\
    health\",\x20\"healthcare\",\x20\"health\x20care\",\x20\"medical\"\n\n\
    \x0c\n\x05\x05\0\x02!\x01\x12\x03@\x02\x1b\n\x0c\n\x05\x05\0\x02!\x02\
    \x12\x03@\x1e\"\n+\n\x04\x05\0\x02\"\x12\x03D\x02(2\x1e\x20Numeric\x20ma\
    tchers\x20(3000-3999)\n\n\x0c\n\x05\x05\0\x02\"\x01\x12\x03D\x02!\n\x0c\
    \n\x05\x05\0\x02\"\x02\x12\x03D#'\n\x0b\n\x04\x05\0\x02#\x12\x03E\x02-\n\
    \x0c\n\x05\x05\0\x02#\x01\x12\x03E\x02%\n\x0c\n\x05\x05\0\x02#\x02\x12\
    \x03E(,\n\x0b\n\x04\x05\0\x02$\x12\x03F\x02.\n\x0c\n\x05\x05\0\x02$\x01\
    \x12\x03F\x02&\n\x0c\n\x05\x05\0\x02$\x02\x12\x03F)-\n\x0b\n\x04\x05\0\
    \x02%\x12\x03G\x02*\n\x0c\n\x05\x05\0\x02%\x01\x12\x03G\x02\"\n\x0c\n\
    \x05\x05\0\x02%\x02\x12\x03G%)\n\x0b\n\x04\x05\0\x02&\x12\x03H\x02+\n\
    \x0c\n\x05\x05\0\x02&\x01\x12\x03H\x02#\n\x0c\n\x05\x05\0\x02&\x02\x12\
    \x03H&*\n\n\n\x02\x04\0\x12\x04K\0R\x01\n\n\n\x03\x04\0\x01\x12\x03K\x08\
    \x15\n\x0b\n\x04\x04\0\x02\0\x12\x03L\x02\x12\n\x0c\n\x05\x04\0\x02\0\
    \x05\x12\x03L\x02\x07\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03L\x08\r\n\x0c\n\
    \x05\x04\0\x02\0\x03\x12\x03L\x10\x11\n\x0b\n\x04\x04\0\x02\x01\x12\x03M\
    \x02\x12\n\x0c\n\x05\x04\0\x02\x01\x05\x12\x03M\x02\x08\n\x0c\n\x05\x04\
    \0\x02\x01\x01\x12\x03M\t\r\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03M\x10\
    \x11\n,\n\x04\x04\0\x02\x02\x12\x03N\x02\x1b\"\x1f\x20args\x20determined\
    \x20by\x20match_type\n\n\x0c\n\x05\x04\0\x02\x02\x04\x12\x03N\x02\n\n\
    \x0c\n\x05\x04\0\x02\x02\x05\x12\x03N\x0b\x11\n\x0c\n\x05\x04\0\x02\x02\
    \x01\x12\x03N\x12\x16\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03N\x19\x1a\n\
    \x0b\n\x04\x04\0\x02\x03\x12\x03O\x02\x12\n\x0c\n\x05\x04\0\x02\x03\x05\
    \x12\x03O\x02\x06\n\x0c\n\x05\x04\0\x02\x03\x01\x12\x03O\x07\r\n\x0c\n\
    \x05\x04\0\x02\x03\x03\x12\x03O\x10\x11\n\x0b\n\x04\x04\0\x02\x04\x12\
    \x03P\x02\x19\n\x0c\n\x05\x04\0\x02\x04\x06\x12\x03P\x02\x0f\n\x0c\n\x05\
    \x04\0\x02\x04\x01\x12\x03P\x10\x14\n\x0c\n\x05\x04\0\x02\x04\x03\x12\
    \x03P\x17\x18\n\x0b\n\x04\x04\0\x02\x05\x12\x03Q\x02+\n\x0c\n\x05\x04\0\
    \x02\x05\x04\x12\x03Q\x02\n\n\x0c\n\x05\x04\0\x02\x05\x06\x12\x03Q\x0b\
    \x1b\n\x0c\n\x05\x04\0\x02\x05\x01\x12\x03Q\x1c&\n\x0c\n\x05\x04\0\x02\
    \x05\x03\x12\x03Q)*b\x06proto3\
";

/// `FileDescriptorProto` object which was a source for this generated file
fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
    static file_descriptor_proto_lazy: ::protobuf::rt::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::Lazy::new();
    file_descriptor_proto_lazy.get(|| {
        ::protobuf::Message::parse_from_bytes(file_descriptor_proto_data).unwrap()
    })
}

/// `FileDescriptor` object which allows dynamic access to files
pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
    static generated_file_descriptor_lazy: ::protobuf::rt::Lazy<::protobuf::reflect::GeneratedFileDescriptor> = ::protobuf::rt::Lazy::new();
    static file_descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::FileDescriptor> = ::protobuf::rt::Lazy::new();
    file_descriptor.get(|| {
        let generated_file_descriptor = generated_file_descriptor_lazy.get(|| {
            let mut deps = ::std::vec::Vec::with_capacity(1);
            deps.push(super::common::file_descriptor().clone());
            let mut messages = ::std::vec::Vec::with_capacity(1);
            messages.push(DetectiveStep::generated_message_descriptor_data());
            let mut enums = ::std::vec::Vec::with_capacity(1);
            enums.push(DetectiveType::generated_enum_descriptor_data());
            ::protobuf::reflect::GeneratedFileDescriptor::new_generated(
                file_descriptor_proto(),
                deps,
                messages,
                enums,
            )
        });
        ::protobuf::reflect::FileDescriptor::new_generated_2(generated_file_descriptor)
    })
}