// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Generated by generate.py.
library fidl.test.dangerous.method.event.arguments.lower;
using argtype = uint32;
protocol DangerousResponseArguments {
  -> Event0(argtype abstract);
  -> Event1(argtype alignas);
  -> Event2(argtype alignof);
  -> Event3(argtype and);
  -> Event4(argtype and_eq);
  -> Event5(argtype as);
  -> Event6(argtype asm);
  -> Event7(argtype assert);
  -> Event8(argtype async);
  -> Event9(argtype atomic_cancel);
  -> Event10(argtype atomic_commit);
  -> Event11(argtype atomic_noexcept);
  -> Event12(argtype auto);
  -> Event13(argtype await);
  -> Event14(argtype become);
  -> Event15(argtype bitand);
  -> Event16(argtype bitor);
  -> Event17(argtype bool);
  -> Event18(argtype box);
  -> Event19(argtype break);
  -> Event20(argtype byte);
  -> Event21(argtype case);
  -> Event22(argtype catch);
  -> Event23(argtype chan);
  -> Event24(argtype char);
  -> Event25(argtype char16_t);
  -> Event26(argtype char32_t);
  -> Event27(argtype class);
  -> Event28(argtype co_await);
  -> Event29(argtype co_return);
  -> Event30(argtype co_yield);
  -> Event31(argtype coding_traits);
  -> Event32(argtype compl);
  -> Event33(argtype concept);
  -> Event34(argtype const);
  -> Event35(argtype const_cast);
  -> Event36(argtype constexpr);
  -> Event37(argtype continue);
  -> Event38(argtype controller);
  -> Event39(argtype covariant);
  -> Event40(argtype crate);
  -> Event41(argtype decltype);
  -> Event42(argtype decoder);
  -> Event43(argtype default);
  -> Event44(argtype defer);
  -> Event45(argtype deferred);
  -> Event46(argtype delete);
  -> Event47(argtype do);
  -> Event48(argtype double);
  -> Event49(argtype dynamic);
  -> Event50(argtype dynamic_cast);
  -> Event51(argtype else);
  -> Event52(argtype encoder);
  -> Event53(argtype ensure_values_instantiated);
  -> Event54(argtype enum);
  -> Event55(argtype err);
  -> Event56(argtype explicit);
  -> Event57(argtype export);
  -> Event58(argtype extends);
  -> Event59(argtype extern);
  -> Event60(argtype external);
  -> Event61(argtype factory);
  -> Event62(argtype fallthrough);
  -> Event63(argtype false);
  -> Event64(argtype fidl);
  -> Event65(argtype fidl_type);
  -> Event66(argtype final);
  -> Event67(argtype finally);
  -> Event68(argtype float);
  -> Event69(argtype fn);
  -> Event70(argtype for);
  -> Event71(argtype friend);
  -> Event72(argtype func);
  -> Event73(argtype future);
  -> Event74(argtype futures);
  -> Event75(argtype get);
  -> Event76(argtype go);
  -> Event77(argtype goto);
  -> Event78(argtype has_invalid_tag);
  -> Event79(argtype hash_code);
  -> Event80(argtype if);
  -> Event81(argtype impl);
  -> Event82(argtype implements);
  -> Event83(argtype import);
  -> Event84(argtype in);
  -> Event85(argtype index);
  -> Event86(argtype inline);
  -> Event87(argtype int);
  -> Event88(argtype int16);
  -> Event89(argtype int32);
  -> Event90(argtype int64);
  -> Event91(argtype int8);
  -> Event92(argtype interface);
  -> Event93(argtype is);
  -> Event94(argtype let);
  -> Event95(argtype lhs);
  -> Event96(argtype library);
  -> Event97(argtype list);
  -> Event98(argtype long);
  -> Event99(argtype loop);
  -> Event100(argtype macro);
  -> Event101(argtype map);
  -> Event102(argtype match);
  -> Event103(argtype mixin);
  -> Event104(argtype mod);
  -> Event105(argtype module);
  -> Event106(argtype move);
  -> Event107(argtype mut);
  -> Event108(argtype mutable);
  -> Event109(argtype namespace);
  -> Event110(argtype never);
  -> Event111(argtype new);
  -> Event112(argtype no_such_method);
  -> Event113(argtype noexcept);
  -> Event114(argtype none);
  -> Event115(argtype not);
  -> Event116(argtype not_eq);
  -> Event117(argtype null);
  -> Event118(argtype nullptr);
  -> Event119(argtype num);
  -> Event120(argtype object);
  -> Event121(argtype offset);
  -> Event122(argtype offsetof);
  -> Event123(argtype ok);
  -> Event124(argtype on_open);
  -> Event125(argtype operator);
  -> Event126(argtype option);
  -> Event127(argtype or);
  -> Event128(argtype or_eq);
  -> Event129(argtype override);
  -> Event130(argtype package);
  -> Event131(argtype part);
  -> Event132(argtype priv);
  -> Event133(argtype private);
  -> Event134(argtype proc);
  -> Event135(argtype protected);
  -> Event136(argtype proxy);
  -> Event137(argtype pub);
  -> Event138(argtype public);
  -> Event139(argtype pure);
  -> Event140(argtype range);
  -> Event141(argtype ref);
  -> Event142(argtype register);
  -> Event143(argtype reinterpret_cast);
  -> Event144(argtype requires);
  -> Event145(argtype result);
  -> Event146(argtype rethrow);
  -> Event147(argtype return);
  -> Event148(argtype rhs);
  -> Event149(argtype rune);
  -> Event150(argtype runtime_type);
  -> Event151(argtype select);
  -> Event152(argtype self);
  -> Event153(argtype send);
  -> Event154(argtype set);
  -> Event155(argtype set_controller);
  -> Event156(argtype short);
  -> Event157(argtype signed);
  -> Event158(argtype sizeof);
  -> Event159(argtype some);
  -> Event160(argtype static);
  -> Event161(argtype static_assert);
  -> Event162(argtype static_cast);
  -> Event163(argtype stream);
  -> Event164(argtype string);
  -> Event165(argtype struct);
  -> Event166(argtype stub);
  -> Event167(argtype super);
  -> Event168(argtype switch);
  -> Event169(argtype synchronized);
  -> Event170(argtype template);
  -> Event171(argtype this);
  -> Event172(argtype thread_local);
  -> Event173(argtype throw);
  -> Event174(argtype to_string);
  -> Event175(argtype trait);
  -> Event176(argtype true);
  -> Event177(argtype try);
  -> Event178(argtype type);
  -> Event179(argtype typedef);
  -> Event180(argtype typeid);
  -> Event181(argtype typename);
  -> Event182(argtype typeof);
  -> Event183(argtype uint16);
  -> Event184(argtype uint32);
  -> Event185(argtype uint64);
  -> Event186(argtype uint8);
  -> Event187(argtype union);
  -> Event188(argtype unsafe);
  -> Event189(argtype unsigned);
  -> Event190(argtype unsized);
  -> Event191(argtype use);
  -> Event192(argtype using);
  -> Event193(argtype value);
  -> Event194(argtype value_of);
  -> Event195(argtype value_union);
  -> Event196(argtype values_map);
  -> Event197(argtype var);
  -> Event198(argtype vec);
  -> Event199(argtype virtual);
  -> Event200(argtype void);
  -> Event201(argtype volatile);
  -> Event202(argtype wchar_t);
  -> Event203(argtype where);
  -> Event204(argtype which);
  -> Event205(argtype while);
  -> Event206(argtype with);
  -> Event207(argtype xor);
  -> Event208(argtype xor_eq);
  -> Event209(argtype xunion);
  -> Event210(argtype yield);
  -> Event211(argtype zx);
};
