diff --git a/.gitignore b/.gitignore index 0186ada852..be55b4630a 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,5 @@ yarn-error.log* *.gen.* *storybook.log .cursor -.claude \ No newline at end of file +.claude +.vercel diff --git a/.papi/descriptors/dist/assethub.d.ts b/.papi/descriptors/dist/assethub.d.ts new file mode 100644 index 0000000000..e2e8c58459 --- /dev/null +++ b/.papi/descriptors/dist/assethub.d.ts @@ -0,0 +1,7741 @@ +import { StorageDescriptor, PlainDescriptor, TxDescriptor, RuntimeDescriptor, Enum, QueryFromPalletsDef, TxFromPalletsDef, EventsFromPalletsDef, ErrorsFromPalletsDef, ConstFromPalletsDef, SS58String, FixedSizeBinary, Binary, FixedSizeArray } from "polkadot-api"; +import { I5sesotjlssv2d, Iffmde3ekjedi9, I4mddgoa69c0a2, I337ai2btcivaq, I95g6i7ilua7lq, Ieniouoqkq4icf, Phase, Ibgl04rn6nbfm6, I1v7jbnil3tjns, I8jgj1nhcr2dg8, Ifn6q3equiq9qi, Ia3sb0vgvovhtg, Iav8k1edbj86k7, Itom7fk49o0c9, I4i91h98n3cv1b, I4iumukclgj8ej, Iqnbvitf7a7l3, I6r5cbv8ttrb09, I4q39t5hn830vp, I1q8tnt1cluu5j, I8ds64oj6581v0, Ia7pdug7cdsg8g, I9bin2jc70qt6q, TransactionPaymentReleases, Ifble4juuml5ig, Version, Ia2lhg7l2hilo3, Ifi4da1gej1fri, Ifvgo9568rpmqc, Icgljjb6j82uhn, I82jm9g7pufuel, Ic5m5lp1oioo8r, I6cs1itejju2vv, Ib77b0fp1a6mjr, I5g2vv0ckl2m8b, Ifup3lg9ro8a0f, XcmPalletQueryStatus, Ic4qvh5df9s5gp, I7vlvrrl2pnbgk, I50sjs3s5lud21, XcmPalletVersionMigrationStage, I50qp0ij7h62g2, Iteuj23is2ed5, I3rp19gb4dadaa, Iegrepoo0c1jc5, I7f4alf2hnuu8s, Idh2ug6ou4a8og, Iejeo53sea6n4q, I53esa2ms463bk, Ib4jhb8tt3uung, Iag146hmjgqfgj, I8uo3fpd3bcc6f, I32or1mos65f9o, I9p9lq3rej5bhc, I3qklfjubrljqh, Iag3f1hum3p4c8, I7svnfko10tq2e, I4s6jkha20aoh0, I2brm5b9jij1st, I78s05f59eoi8b, Ianufjuplcj6u4, Id32h28hjj1tch, I6ouflveob4eli, I2mv9dvsaj3kcr, I9jd27rnpm8ttv, I7781vnk0rm9eq, Ie2iqtdb0stqo1, I5irutptk105do, Ic9nev69d8grv1, I18m6a0sc4k7s9, Ic9iokm15iigt6, I35m96p3u4vl0p, Iapmji0h53pmkn, Idrr42svup341f, I4ugih6gb4fmug, Idac0t49lnd4ls, I72ndo6phms8ik, I4c0s5cioidn76, I7rv8d2nr55kkq, I6lh06el3bdfqq, Id0as9l3s817qs, In7a38730s6qs, If15el53dd76v9, I9s0ave7t0vnrk, Ic6nglu2db2c36, Iasb8k6ash5mjn, I8ofcg5rbj0g2c, I4adgbll7gku4i, I6pjjpfvhvcfru, I9pj91mj79qekl, I39uah9nss64h9, Ik64dknsq7k08, Ib51vk42m1po4n, I60v7bikk54tpu, Ifpj261e8s63m3, Idcr6u6361oad9, I4ktuaksf5i1gk, I9bqtpv2ii35mp, I9j7pagd6d4bda, I2h9pmio37r7fb, Ibmr18suc9ikh9, I9iq22t0burs89, I5u8olqbbvfnvf, I5utcetro501ir, Id9uqtigc0il3v, Iaa2o6cgjdpdn5, Iam6hrl7ptd85l, Ict9ivhr2c5hv0, I8t4vv03357lk9, Ifccifqltb5obi, Iadtsfv699cq8b, Ialpmgmhr3gk5r, I4cbvqmqadhrea, I3sdol54kg5jaq, I8fougodaj6di6, I81vt5eq60l4b6, I3vh014cqgmrfd, I9paqujeb1fpv6, Iakevv83i18n4r, If2ssl12kcglhg, Iabk8ljl5g8c86, Ic76kfh5ebqkpl, Icrujen33bbibf, I5gi8h3e5lkbeq, Ibgm4rnf22lal1, I8mmaab8je28oo, I6r0pr82pbiftt, Idlampfle3vh6q, I40pqum1mu8qg3, I1r4c2ghbtvjuc, Ia6kc29epld8oe, Icjjfgkss9ab50, Ifabdf8qm932q0, I4u9de6jls8otm, I9rge57146rvbl, Id5a43kc4r5p31, Ideaemvoneh309, I3d9o9d7epp66v, I3mbtn2eb315ar, Iovrcu9bfelfq, Iefr8jgtgfk8um, I3j05hul54uj7q, I2eb501t8s6hsq, Ianmuoljk2sk1u, Iem4jetr2c8nf8, Ic357tcepuvo5c, I2rnoam876ruhj, Ic5b47dj4coa3r, Ib3qnc19gu633c, Ifira6u9hi7cu1, I72tqocvdoqfff, I2i27f3sfmvc05, I1nlrtd1epki2d, I3abtumcmempjs, Id81m8flopt8ha, I8hff7chabggkd, I49i39mtj1ivbs, Ifkr2kcak2vto1, I1ju6r8q0cs9jt, I4kpeq6j7cd5bu, I5na1ka76k6811, I59mhdb9omdqfa, I9vl5kpk0fpakt, I717jt61hu19b4, If66ivi02f7256, I223jtcatlfkrc, I223jg78mng8hq, I4iiuiftkpq3fd, Ibra6533h92c0a, Ibgvkh96s68a66, If9vko7pv0231m, Iafkqus0ohh6l6, I6cu7obfo0rr0o, I736lv5q9m5bot, I1ap9tlenhr44l, Ib92t90p616grb, Ieipuujd6879do, Ie56eq9sg1rsoc, I5tvvgui05tn6e, Ibal0joadvdc2h, Iceq9fmmp9aeqv, I9viqhmdtuof5e, Ibqooroq6rr5kr, I6h88h8vba22v8, Ia9cd4jqb5eecb, I19jiel1ftbcce, I43aobns89nbkh, Iamd7rovec1hfb, I77ie723ncd4co, Ieebloeahma3ke, I4mbtpf4pu3rec, I1ahf3pvgsgbu, I9uapdn16emsti, Ie5i0q2glmr0md, I97qcg6i3l8gee, Ib5udrahak005b, I1jj31tn29ie3c, I5llu6o6a0go5i, Ic8b8561e6t9ie, I93r2effh7od84, I6afd7fllr8otc, Icrkms46uh8tpb, I78u60nqh0etah, I1lso3vlgherue, I26c8p47106toa, Iq82b3qvf20ne, Ic3j8ku6mbsms4, I3nvoqsi8f05ph, I3eoft5md071do, I923eug653ra0o, I7p44cr9g492tc, Ibn8gm2jugarek, Iekg0q69obfi0f, I8dh2oimnihksg, Ib8mfkapk4u9hs, Ikm68gg7akl51, If3csb5ben9n1v, If90dk6l9lmtfv, Ifoahm8m43v9q2, I1rrgcjpoiot5q, I2hc61n7o8dso4, I5787kv2d05f94, Ia8g1imc1kclf4, Id26ouo5lt2551, Iap1up3prsbtvg, I8m5mvhifj6pm, I8ucc4915s9qvj, I1pjcv2ha0997v, Ifnm6nai2i47ar, I8eoqk45hnet27, Iddvk596rbl31l, I3iap9ri572kjf, I48iqqqmt2pr38, I90ob4vr51rue4, Ia82mnkmeo2rhc, Iane057r2vqar, Icbccs0ug47ilf, I855j4i3kr8ko1, Idd7hd99u0ho0n, Iafscmv8tjf0ou, I100l07kaehdlp, I6gnbnvip5vvdi, Icv68aq8841478, Ic262ibdoec56a, Iflcfm9b6nlmdd, Ijrsf4mnp3eka, Id5fm4p8lj5qgi, I8tjvj9uq4b7hi, I3qt1hgg4djhgb, I4fooe9dun9o0t, Ier2cke86dqbr2, Iqjk6s1a2lmkt, Icjchvrijclvlv, Ievr89968437gm, I39t01nnod9109, I6v8sm60vvkmk7, I1qmtmbe5so8r3, Ih99m6ehpcar7, Idgorhsbgdq2ap, I9ubb2kqevnu6t, I2hq50pu2kdjpo, I137t1cld92pod, I2aatv5i0cb96a, Ib9msr5sr8t3dn, I3le5tr7ugg6l2, I3iun9sig164po, I2uqmls7kcdnii, Idg69klialbkb8, I13jboebjcbglr, I30pg328m00nr3, I381dkhrurdhrs, Ic8hi3qr11vngc, Ibjdlecumfu7q7, Ia9ems1kg7laoc, I92fq0fa45vi3, Id01dpp0dn2cj0, I6nu8k62ck9o8o, I6s1nbislhk619, Iea25i7vqm7ot3, I1rvj4ubaplho0, Ia3uu7lqcc1q1i, I7crucfnonitkn, I7tmrp94r9sq4n, Ia916s7j8ucmdd, I6a0k8t8strmou, Iboobuvtv2hqbg, Iep27ialq4a7o7, Iasu5jvoqr43mv, I5f1j6imiigvdh, I5qolde99acmd1, Ie7cuj84ohvg56, I2ur0oeqg495j8, I8ioopvokvl3ud, I88ff3u4dpivk, I33cp947glv1ks, Ic9om1gmmqu7rq, I5hfov2b68ppb6, Ibthhb2m9vneds, Iaitn5bqfacj7k, If4ebvclj2ugvi, Ia5le7udkgbaq9, Ieduc1e6frq8rb, I9h6gbtabovtm4, Ifnsa0dkkpf465, I65dtqr2egjbc3, Ibqj3vg5s5lk0c, I6l73u513p8rna, Iefqmt2htu1dlu, If8bgtgqrchjtu, Idusmq77988cmt, I9gqanbbbe917p, Id1m1230297f7a, Ifvb1p5munhhv4, I46h83ilqeed3g, Icahse3uoi76n7, I75sj3uv7gnemk, I5fjkvcb5vr6nb, I2gr1toekv86b9, I2v2ikqt2trp52, If3057hi1g5qlo, Iaii5qf41d5n3d, Ico8bnjc6taa27, I78i1bvlonei69, I9i1f9mrso1hmf, I9ksla2si91s56, Id9j7b85otvjru, Iaihk9pek2ajl9, Id9av23h47ufb2, Ib4kpnijas4jqp, I2vnu5k0u1i65h, I36h211fbvstks, I2k9iu40qhp841, I3dufa2gr145hf, Ie66s9cr50m7sr, I3msvtljqnu799, I467a79vcdbrec, Ia8imt144v3n25, I35uvf5ij009e8, I1mmtcsmkng8nj, I30qmuqbs4i8i4, Iarmm62t3lm37e, I9nm7qticlhmgl, Iev4iv86ng02ck, I5s8p7gejoudvh, If4jtj68r1gabq, I8s66oebjsgqga, I42gee3b9iotl3, I9eo7u28un09g0, I99d21a0mjv4oo, I6l4cdn6bhfq84, Iduk3pajm13p5c, I9cgel74dg00ig, Ibkbs6pj6cn1hv, Iaqet9jc3ihboe, Ic952bubvq4k7d, I2v50gu3s1aqk6, Iabpgqcjikia83, Iai7icf56nsvk8, If7uv525tdvv7a, I2an1fs2eiebjp, TransactionValidityTransactionSource, Iajbob6uln5jct, Icerf8h8pdu8ss, I6spmpef2c7svf, Iei2mvq0mjvt81, I2g5nrfnsbr9n0, I1p1369d52j8jd, XcmVersionedXcm, Ic0c3req3mlc1l, XcmVersionedAssetId, I7ocn4njqde3v5, XcmVersionedLocation, I5rlt6h8ph553n, I48v5riethqckl, Id5e0bqoki0bb0, I6sn3ln0su7un5, Ieh6nis3hdbtgi, I93k1anhb5gs2q, Ic1d4u2opv3fst, Ie9sr1iqcg3cgm, I1mqgk2tmnn9i2, I6lr8sctk0bi4e, I35p85j063s0il, I5vv5n03oo8gas, Icogrvf0inr18b } from "./common-types"; +type AnonymousEnum = T & { + __anonymous: true; +}; +type MyTuple = [T, ...T[]]; +type SeparateUndefined = undefined extends T ? undefined | Exclude : T; +type Anonymize = SeparateUndefined ? number extends L ? Binary : FixedSizeBinary : T extends string | number | bigint | boolean | void | undefined | null | symbol | Uint8Array | Enum ? T : T extends AnonymousEnum ? Enum : T extends MyTuple ? { + [K in keyof T]: T[K]; +} : T extends [] ? [] : T extends FixedSizeArray ? number extends L ? Array : FixedSizeArray : { + [K in keyof T & string]: T[K]; +}>; +type IStorage = { + System: { + /** + * The full account information for a particular account ID. + */ + Account: StorageDescriptor<[Key: SS58String], Anonymize, false, never>; + /** + * Total extrinsics count for the current block. + */ + ExtrinsicCount: StorageDescriptor<[], number, true, never>; + /** + * Whether all inherents have been applied. + */ + InherentsApplied: StorageDescriptor<[], boolean, false, never>; + /** + * The current weight for the block. + */ + BlockWeight: StorageDescriptor<[], Anonymize, false, never>; + /** + * Total length (in bytes) for all extrinsics put together, for the current block. + */ + AllExtrinsicsLen: StorageDescriptor<[], number, true, never>; + /** + * Map of block numbers to block hashes. + */ + BlockHash: StorageDescriptor<[Key: number], FixedSizeBinary<32>, false, never>; + /** + * Extrinsics data for the current block (maps an extrinsic's index to its data). + */ + ExtrinsicData: StorageDescriptor<[Key: number], Binary, false, never>; + /** + * The current block number being processed. Set by `execute_block`. + */ + Number: StorageDescriptor<[], number, false, never>; + /** + * Hash of the previous block. + */ + ParentHash: StorageDescriptor<[], FixedSizeBinary<32>, false, never>; + /** + * Digest of the current block, also part of the block header. + */ + Digest: StorageDescriptor<[], Anonymize, false, never>; + /** + * Events deposited for the current block. + * + * NOTE: The item is unbound and should therefore never be read on chain. + * It could otherwise inflate the PoV size of a block. + * + * Events have a large in-memory size. Box the events to not go out-of-memory + * just in case someone still reads them from within the runtime. + */ + Events: StorageDescriptor<[], Anonymize, false, never>; + /** + * The number of events in the `Events` list. + */ + EventCount: StorageDescriptor<[], number, false, never>; + /** + * Mapping between a topic (represented by T::Hash) and a vector of indexes + * of events in the `>` list. + * + * All topic vectors have deterministic storage locations depending on the topic. This + * allows light-clients to leverage the changes trie storage tracking mechanism and + * in case of changes fetch the list of events of interest. + * + * The value has the type `(BlockNumberFor, EventIndex)` because if we used only just + * the `EventIndex` then in case if the topic has the same contents on the next block + * no notification will be triggered thus the event might be lost. + */ + EventTopics: StorageDescriptor<[Key: FixedSizeBinary<32>], Anonymize, false, never>; + /** + * Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened. + */ + LastRuntimeUpgrade: StorageDescriptor<[], Anonymize, true, never>; + /** + * True if we have upgraded so that `type RefCount` is `u32`. False (default) if not. + */ + UpgradedToU32RefCount: StorageDescriptor<[], boolean, false, never>; + /** + * True if we have upgraded so that AccountInfo contains three types of `RefCount`. False + * (default) if not. + */ + UpgradedToTripleRefCount: StorageDescriptor<[], boolean, false, never>; + /** + * The execution phase of the block. + */ + ExecutionPhase: StorageDescriptor<[], Phase, true, never>; + /** + * `Some` if a code upgrade has been authorized. + */ + AuthorizedUpgrade: StorageDescriptor<[], Anonymize, true, never>; + }; + ParachainSystem: { + /** + * Latest included block descendants the runtime accepted. In other words, these are + * ancestors of the currently executing block which have not been included in the observed + * relay-chain state. + * + * The segment length is limited by the capacity returned from the [`ConsensusHook`] configured + * in the pallet. + */ + UnincludedSegment: StorageDescriptor<[], Anonymize, false, never>; + /** + * Storage field that keeps track of bandwidth used by the unincluded segment along with the + * latest HRMP watermark. Used for limiting the acceptance of new blocks with + * respect to relay chain constraints. + */ + AggregatedUnincludedSegment: StorageDescriptor<[], Anonymize, true, never>; + /** + * In case of a scheduled upgrade, this storage field contains the validation code to be + * applied. + * + * As soon as the relay chain gives us the go-ahead signal, we will overwrite the + * [`:code`][sp_core::storage::well_known_keys::CODE] which will result the next block process + * with the new validation code. This concludes the upgrade process. + */ + PendingValidationCode: StorageDescriptor<[], Binary, false, never>; + /** + * Validation code that is set by the parachain and is to be communicated to collator and + * consequently the relay-chain. + * + * This will be cleared in `on_initialize` of each new block if no other pallet already set + * the value. + */ + NewValidationCode: StorageDescriptor<[], Binary, true, never>; + /** + * The [`PersistedValidationData`] set for this block. + * This value is expected to be set only once per block and it's never stored + * in the trie. + */ + ValidationData: StorageDescriptor<[], Anonymize, true, never>; + /** + * Were the validation data set to notify the relay chain? + */ + DidSetValidationCode: StorageDescriptor<[], boolean, false, never>; + /** + * The relay chain block number associated with the last parachain block. + * + * This is updated in `on_finalize`. + */ + LastRelayChainBlockNumber: StorageDescriptor<[], number, false, never>; + /** + * An option which indicates if the relay-chain restricts signalling a validation code upgrade. + * In other words, if this is `Some` and [`NewValidationCode`] is `Some` then the produced + * candidate will be invalid. + * + * This storage item is a mirror of the corresponding value for the current parachain from the + * relay-chain. This value is ephemeral which means it doesn't hit the storage. This value is + * set after the inherent. + */ + UpgradeRestrictionSignal: StorageDescriptor<[], Anonymize, false, never>; + /** + * Optional upgrade go-ahead signal from the relay-chain. + * + * This storage item is a mirror of the corresponding value for the current parachain from the + * relay-chain. This value is ephemeral which means it doesn't hit the storage. This value is + * set after the inherent. + */ + UpgradeGoAhead: StorageDescriptor<[], Anonymize, false, never>; + /** + * The state proof for the last relay parent block. + * + * This field is meant to be updated each block with the validation data inherent. Therefore, + * before processing of the inherent, e.g. in `on_initialize` this data may be stale. + * + * This data is also absent from the genesis. + */ + RelayStateProof: StorageDescriptor<[], Anonymize, true, never>; + /** + * The snapshot of some state related to messaging relevant to the current parachain as per + * the relay parent. + * + * This field is meant to be updated each block with the validation data inherent. Therefore, + * before processing of the inherent, e.g. in `on_initialize` this data may be stale. + * + * This data is also absent from the genesis. + */ + RelevantMessagingState: StorageDescriptor<[], Anonymize, true, never>; + /** + * The parachain host configuration that was obtained from the relay parent. + * + * This field is meant to be updated each block with the validation data inherent. Therefore, + * before processing of the inherent, e.g. in `on_initialize` this data may be stale. + * + * This data is also absent from the genesis. + */ + HostConfiguration: StorageDescriptor<[], Anonymize, true, never>; + /** + * The last downward message queue chain head we have observed. + * + * This value is loaded before and saved after processing inbound downward messages carried + * by the system inherent. + */ + LastDmqMqcHead: StorageDescriptor<[], FixedSizeBinary<32>, false, never>; + /** + * The message queue chain heads we have observed per each channel incoming channel. + * + * This value is loaded before and saved after processing inbound downward messages carried + * by the system inherent. + */ + LastHrmpMqcHeads: StorageDescriptor<[], Anonymize, false, never>; + /** + * Number of downward messages processed in a block. + * + * This will be cleared in `on_initialize` of each new block. + */ + ProcessedDownwardMessages: StorageDescriptor<[], number, false, never>; + /** + * HRMP watermark that was set in a block. + * + * This will be cleared in `on_initialize` of each new block. + */ + HrmpWatermark: StorageDescriptor<[], number, false, never>; + /** + * HRMP messages that were sent in a block. + * + * This will be cleared in `on_initialize` of each new block. + */ + HrmpOutboundMessages: StorageDescriptor<[], Anonymize, false, never>; + /** + * Upward messages that were sent in a block. + * + * This will be cleared in `on_initialize` of each new block. + */ + UpwardMessages: StorageDescriptor<[], Anonymize, false, never>; + /** + * Upward messages that are still pending and not yet send to the relay chain. + */ + PendingUpwardMessages: StorageDescriptor<[], Anonymize, false, never>; + /** + * The factor to multiply the base delivery fee by for UMP. + */ + UpwardDeliveryFeeFactor: StorageDescriptor<[], bigint, false, never>; + /** + * The number of HRMP messages we observed in `on_initialize` and thus used that number for + * announcing the weight of `on_initialize` and `on_finalize`. + */ + AnnouncedHrmpMessagesPerCandidate: StorageDescriptor<[], number, false, never>; + /** + * The weight we reserve at the beginning of the block for processing XCMP messages. This + * overrides the amount set in the Config trait. + */ + ReservedXcmpWeightOverride: StorageDescriptor<[], Anonymize, true, never>; + /** + * The weight we reserve at the beginning of the block for processing DMP messages. This + * overrides the amount set in the Config trait. + */ + ReservedDmpWeightOverride: StorageDescriptor<[], Anonymize, true, never>; + /** + * A custom head data that should be returned as result of `validate_block`. + * + * See `Pallet::set_custom_validation_head_data` for more information. + */ + CustomValidationHeadData: StorageDescriptor<[], Binary, true, never>; + }; + Timestamp: { + /** + * The current time for the current block. + */ + Now: StorageDescriptor<[], bigint, false, never>; + /** + * Whether the timestamp has been updated in this block. + * + * This value is updated to `true` upon successful submission of a timestamp by a node. + * It is then checked at the end of each block execution in the `on_finalize` hook. + */ + DidUpdate: StorageDescriptor<[], boolean, false, never>; + }; + ParachainInfo: { + /** + + */ + ParachainId: StorageDescriptor<[], number, false, never>; + }; + Balances: { + /** + * The total units issued in the system. + */ + TotalIssuance: StorageDescriptor<[], bigint, false, never>; + /** + * The total units of outstanding deactivated balance in the system. + */ + InactiveIssuance: StorageDescriptor<[], bigint, false, never>; + /** + * The Balances pallet example of storing the balance of an account. + * + * # Example + * + * ```nocompile + * impl pallet_balances::Config for Runtime { + * type AccountStore = StorageMapShim, frame_system::Provider, AccountId, Self::AccountData> + * } + * ``` + * + * You can also store the balance of an account in the `System` pallet. + * + * # Example + * + * ```nocompile + * impl pallet_balances::Config for Runtime { + * type AccountStore = System + * } + * ``` + * + * But this comes with tradeoffs, storing account balances in the system pallet stores + * `frame_system` data alongside the account data contrary to storing account balances in the + * `Balances` pallet, which uses a `StorageMap` to store balances data only. + * NOTE: This is only used in the case that this pallet is used to store balances. + */ + Account: StorageDescriptor<[Key: SS58String], Anonymize, false, never>; + /** + * Any liquidity locks on some account balances. + * NOTE: Should only be accessed when setting, changing and freeing a lock. + * + * Use of locks is deprecated in favour of freezes. See `https://github.com/paritytech/substrate/pull/12951/` + */ + Locks: StorageDescriptor<[Key: SS58String], Anonymize, false, never>; + /** + * Named reserves on some account balances. + * + * Use of reserves is deprecated in favour of holds. See `https://github.com/paritytech/substrate/pull/12951/` + */ + Reserves: StorageDescriptor<[Key: SS58String], Anonymize, false, never>; + /** + * Holds on account balances. + */ + Holds: StorageDescriptor<[Key: SS58String], Anonymize, false, never>; + /** + * Freeze locks on account balances. + */ + Freezes: StorageDescriptor<[Key: SS58String], Anonymize, false, never>; + }; + TransactionPayment: { + /** + + */ + NextFeeMultiplier: StorageDescriptor<[], bigint, false, never>; + /** + + */ + StorageVersion: StorageDescriptor<[], TransactionPaymentReleases, false, never>; + }; + Vesting: { + /** + * Information regarding the vesting of a given account. + */ + Vesting: StorageDescriptor<[Key: SS58String], Anonymize, true, never>; + /** + * Storage version of the pallet. + * + * New networks start with latest version, as determined by the genesis build. + */ + StorageVersion: StorageDescriptor<[], Version, false, never>; + }; + Authorship: { + /** + * Author of current block. + */ + Author: StorageDescriptor<[], SS58String, true, never>; + }; + CollatorSelection: { + /** + * The invulnerable, permissioned collators. This list must be sorted. + */ + Invulnerables: StorageDescriptor<[], Anonymize, false, never>; + /** + * The (community, limited) collation candidates. `Candidates` and `Invulnerables` should be + * mutually exclusive. + * + * This list is sorted in ascending order by deposit and when the deposits are equal, the least + * recently updated is considered greater. + */ + CandidateList: StorageDescriptor<[], Anonymize, false, never>; + /** + * Last block authored by collator. + */ + LastAuthoredBlock: StorageDescriptor<[Key: SS58String], number, false, never>; + /** + * Desired number of candidates. + * + * This should ideally always be less than [`Config::MaxCandidates`] for weights to be correct. + */ + DesiredCandidates: StorageDescriptor<[], number, false, never>; + /** + * Fixed amount to deposit to become a collator. + * + * When a collator calls `leave_intent` they immediately receive the deposit back. + */ + CandidacyBond: StorageDescriptor<[], bigint, false, never>; + }; + Session: { + /** + * The current set of validators. + */ + Validators: StorageDescriptor<[], Anonymize, false, never>; + /** + * Current index of the session. + */ + CurrentIndex: StorageDescriptor<[], number, false, never>; + /** + * True if the underlying economic identities or weighting behind the validators + * has changed in the queued validator set. + */ + QueuedChanged: StorageDescriptor<[], boolean, false, never>; + /** + * The queued keys for the next session. When the next session begins, these keys + * will be used to determine the validator's session keys. + */ + QueuedKeys: StorageDescriptor<[], Anonymize, false, never>; + /** + * Indices of disabled validators. + * + * The vec is always kept sorted so that we can find whether a given validator is + * disabled using binary search. It gets cleared when `on_session_ending` returns + * a new set of identities. + */ + DisabledValidators: StorageDescriptor<[], Anonymize, false, never>; + /** + * The next session keys for a validator. + */ + NextKeys: StorageDescriptor<[Key: SS58String], FixedSizeBinary<32>, true, never>; + /** + * The owner of a key. The key is the `KeyTypeId` + the encoded key. + */ + KeyOwner: StorageDescriptor<[Key: Anonymize], SS58String, true, never>; + }; + Aura: { + /** + * The current authority set. + */ + Authorities: StorageDescriptor<[], Anonymize, false, never>; + /** + * The current slot of this block. + * + * This will be set in `on_initialize`. + */ + CurrentSlot: StorageDescriptor<[], bigint, false, never>; + }; + AuraExt: { + /** + * Serves as cache for the authorities. + * + * The authorities in AuRa are overwritten in `on_initialize` when we switch to a new session, + * but we require the old authorities to verify the seal when validating a PoV. This will + * always be updated to the latest AuRa authorities in `on_finalize`. + */ + Authorities: StorageDescriptor<[], Anonymize, false, never>; + /** + * Current slot paired with a number of authored blocks. + * + * Updated on each block initialization. + */ + SlotInfo: StorageDescriptor<[], Anonymize, true, never>; + }; + XcmpQueue: { + /** + * The suspended inbound XCMP channels. All others are not suspended. + * + * This is a `StorageValue` instead of a `StorageMap` since we expect multiple reads per block + * to different keys with a one byte payload. The access to `BoundedBTreeSet` will be cached + * within the block and therefore only included once in the proof size. + * + * NOTE: The PoV benchmarking cannot know this and will over-estimate, but the actual proof + * will be smaller. + */ + InboundXcmpSuspended: StorageDescriptor<[], Anonymize, false, never>; + /** + * The non-empty XCMP channels in order of becoming non-empty, and the index of the first + * and last outbound message. If the two indices are equal, then it indicates an empty + * queue and there must be a non-`Ok` `OutboundStatus`. We assume queues grow no greater + * than 65535 items. Queue indices for normal messages begin at one; zero is reserved in + * case of the need to send a high-priority signal message this block. + * The bool is true if there is a signal message waiting to be sent. + */ + OutboundXcmpStatus: StorageDescriptor<[], Anonymize, false, never>; + /** + * The messages outbound in a given XCMP channel. + */ + OutboundXcmpMessages: StorageDescriptor, Binary, false, never>; + /** + * Any signal messages waiting to be sent. + */ + SignalMessages: StorageDescriptor<[Key: number], Binary, false, never>; + /** + * The configuration which controls the dynamics of the outbound queue. + */ + QueueConfig: StorageDescriptor<[], Anonymize, false, never>; + /** + * Whether or not the XCMP queue is suspended from executing incoming XCMs or not. + */ + QueueSuspended: StorageDescriptor<[], boolean, false, never>; + /** + * The factor to multiply the base delivery fee by. + */ + DeliveryFeeFactor: StorageDescriptor<[Key: number], bigint, false, never>; + }; + PolkadotXcm: { + /** + * The latest available query index. + */ + QueryCounter: StorageDescriptor<[], bigint, false, never>; + /** + * The ongoing queries. + */ + Queries: StorageDescriptor<[Key: bigint], XcmPalletQueryStatus, true, never>; + /** + * The existing asset traps. + * + * Key is the blake2 256 hash of (origin, versioned `Assets`) pair. Value is the number of + * times this pair has been trapped (usually just 1 if it exists at all). + */ + AssetTraps: StorageDescriptor<[Key: FixedSizeBinary<32>], number, false, never>; + /** + * Default version to encode XCM when latest version of destination is unknown. If `None`, + * then the destinations whose XCM version is unknown are considered unreachable. + */ + SafeXcmVersion: StorageDescriptor<[], number, true, never>; + /** + * The Latest versions that we know various locations support. + */ + SupportedVersion: StorageDescriptor, number, true, never>; + /** + * All locations that we have requested version notifications from. + */ + VersionNotifiers: StorageDescriptor, bigint, true, never>; + /** + * The target locations that are subscribed to our version changes, as well as the most recent + * of our versions we informed them of. + */ + VersionNotifyTargets: StorageDescriptor, Anonymize, true, never>; + /** + * Destinations whose latest XCM version we would like to know. Duplicates not allowed, and + * the `u32` counter is the number of times that a send to the destination has been attempted, + * which is used as a prioritization. + */ + VersionDiscoveryQueue: StorageDescriptor<[], Anonymize, false, never>; + /** + * The current migration's stage, if any. + */ + CurrentMigration: StorageDescriptor<[], XcmPalletVersionMigrationStage, true, never>; + /** + * Fungible assets which we know are locked on a remote chain. + */ + RemoteLockedFungibles: StorageDescriptor, Anonymize, true, never>; + /** + * Fungible assets which we know are locked on this chain. + */ + LockedFungibles: StorageDescriptor<[Key: SS58String], Anonymize, true, never>; + /** + * Global suspension state of the XCM executor. + */ + XcmExecutionSuspended: StorageDescriptor<[], boolean, false, never>; + /** + * Whether or not incoming XCMs (both executed locally and received) should be recorded. + * Only one XCM program will be recorded at a time. + * This is meant to be used in runtime APIs, and it's advised it stays false + * for all other use cases, so as to not degrade regular performance. + * + * Only relevant if this pallet is being used as the [`xcm_executor::traits::RecordXcm`] + * implementation in the XCM executor configuration. + */ + ShouldRecordXcm: StorageDescriptor<[], boolean, false, never>; + /** + * If [`ShouldRecordXcm`] is set to true, then the last XCM program executed locally + * will be stored here. + * Runtime APIs can fetch the XCM that was executed by accessing this value. + * + * Only relevant if this pallet is being used as the [`xcm_executor::traits::RecordXcm`] + * implementation in the XCM executor configuration. + */ + RecordedXcm: StorageDescriptor<[], Anonymize, true, never>; + }; + ToKusamaXcmRouter: { + /** + * Bridge that we are using. + * + * **bridges-v1** assumptions: all outbound messages through this router are using single lane + * and to single remote consensus. If there is some other remote consensus that uses the same + * bridge hub, the separate pallet instance shall be used, In `v2` we'll have all required + * primitives (lane-id aka bridge-id, derived from XCM locations) to support multiple bridges + * by the same pallet instance. + */ + Bridge: StorageDescriptor<[], Anonymize, false, never>; + }; + MessageQueue: { + /** + * The index of the first and last (non-empty) pages. + */ + BookStateFor: StorageDescriptor<[Key: Anonymize], Anonymize, false, never>; + /** + * The origin at which we should begin servicing. + */ + ServiceHead: StorageDescriptor<[], Anonymize, true, never>; + /** + * The map of page indices to pages. + */ + Pages: StorageDescriptor, Anonymize, true, never>; + }; + Multisig: { + /** + * The set of open multisig operations. + */ + Multisigs: StorageDescriptor, Anonymize, true, never>; + }; + Proxy: { + /** + * The set of account proxies. Maps the account which has delegated to the accounts + * which are being delegated to, together with the amount held on deposit. + */ + Proxies: StorageDescriptor<[Key: SS58String], Anonymize, false, never>; + /** + * The announcements made by the proxy (key). + */ + Announcements: StorageDescriptor<[Key: SS58String], Anonymize, false, never>; + }; + Assets: { + /** + * Details of an asset. + */ + Asset: StorageDescriptor<[Key: number], Anonymize, true, never>; + /** + * The holdings of a specific account for a specific asset. + */ + Account: StorageDescriptor, Anonymize, true, never>; + /** + * Approved balance transfers. First balance is the amount approved for transfer. Second + * is the amount of `T::Currency` reserved for storing this. + * First key is the asset ID, second key is the owner and third key is the delegate. + */ + Approvals: StorageDescriptor, Anonymize, true, never>; + /** + * Metadata of an asset. + */ + Metadata: StorageDescriptor<[Key: number], Anonymize, false, never>; + /** + * The asset ID enforced for the next asset creation, if any present. Otherwise, this storage + * item has no effect. + * + * This can be useful for setting up constraints for IDs of the new assets. For example, by + * providing an initial [`NextAssetId`] and using the [`crate::AutoIncAssetId`] callback, an + * auto-increment model can be applied to all new asset IDs. + * + * The initial next asset ID can be set using the [`GenesisConfig`] or the + * [SetNextAssetId](`migration::next_asset_id::SetNextAssetId`) migration. + */ + NextAssetId: StorageDescriptor<[], number, true, never>; + }; + Uniques: { + /** + * Details of a collection. + */ + Class: StorageDescriptor<[Key: number], Anonymize, true, never>; + /** + * The collection, if any, of which an account is willing to take ownership. + */ + OwnershipAcceptance: StorageDescriptor<[Key: SS58String], number, true, never>; + /** + * The items held by any given account; set out this way so that items owned by a single + * account can be enumerated. + */ + Account: StorageDescriptor, undefined, true, never>; + /** + * The collections owned by any given account; set out this way so that collections owned by + * a single account can be enumerated. + */ + ClassAccount: StorageDescriptor, undefined, true, never>; + /** + * The items in existence and their ownership details. + */ + Asset: StorageDescriptor, Anonymize, true, never>; + /** + * Metadata of a collection. + */ + ClassMetadataOf: StorageDescriptor<[Key: number], Anonymize, true, never>; + /** + * Metadata of an item. + */ + InstanceMetadataOf: StorageDescriptor, Anonymize, true, never>; + /** + * Attributes of a collection. + */ + Attribute: StorageDescriptor, Anonymize, true, never>; + /** + * Price of an asset instance. + */ + ItemPriceOf: StorageDescriptor, Anonymize, true, never>; + /** + * Keeps track of the number of items a collection might have. + */ + CollectionMaxSupply: StorageDescriptor<[Key: number], number, true, never>; + }; + Nfts: { + /** + * Details of a collection. + */ + Collection: StorageDescriptor<[Key: number], Anonymize, true, never>; + /** + * The collection, if any, of which an account is willing to take ownership. + */ + OwnershipAcceptance: StorageDescriptor<[Key: SS58String], number, true, never>; + /** + * The items held by any given account; set out this way so that items owned by a single + * account can be enumerated. + */ + Account: StorageDescriptor, undefined, true, never>; + /** + * The collections owned by any given account; set out this way so that collections owned by + * a single account can be enumerated. + */ + CollectionAccount: StorageDescriptor, undefined, true, never>; + /** + * The items in existence and their ownership details. + * Stores collection roles as per account. + */ + CollectionRoleOf: StorageDescriptor, number, true, never>; + /** + * The items in existence and their ownership details. + */ + Item: StorageDescriptor, Anonymize, true, never>; + /** + * Metadata of a collection. + */ + CollectionMetadataOf: StorageDescriptor<[Key: number], Anonymize, true, never>; + /** + * Metadata of an item. + */ + ItemMetadataOf: StorageDescriptor, Anonymize, true, never>; + /** + * Attributes of a collection. + */ + Attribute: StorageDescriptor, Anonymize, true, never>; + /** + * A price of an item. + */ + ItemPriceOf: StorageDescriptor, Anonymize, true, never>; + /** + * Item attribute approvals. + */ + ItemAttributesApprovalsOf: StorageDescriptor, Anonymize, false, never>; + /** + * Stores the `CollectionId` that is going to be used for the next collection. + * This gets incremented whenever a new collection is created. + */ + NextCollectionId: StorageDescriptor<[], number, true, never>; + /** + * Handles all the pending swaps. + */ + PendingSwapOf: StorageDescriptor, Anonymize, true, never>; + /** + * Config of a collection. + */ + CollectionConfigOf: StorageDescriptor<[Key: number], Anonymize, true, never>; + /** + * Config of an item. + */ + ItemConfigOf: StorageDescriptor, bigint, true, never>; + }; + ForeignAssets: { + /** + * Details of an asset. + */ + Asset: StorageDescriptor<[Key: Anonymize], Anonymize, true, never>; + /** + * The holdings of a specific account for a specific asset. + */ + Account: StorageDescriptor, Anonymize, true, never>; + /** + * Approved balance transfers. First balance is the amount approved for transfer. Second + * is the amount of `T::Currency` reserved for storing this. + * First key is the asset ID, second key is the owner and third key is the delegate. + */ + Approvals: StorageDescriptor, Anonymize, true, never>; + /** + * Metadata of an asset. + */ + Metadata: StorageDescriptor<[Key: Anonymize], Anonymize, false, never>; + /** + * The asset ID enforced for the next asset creation, if any present. Otherwise, this storage + * item has no effect. + * + * This can be useful for setting up constraints for IDs of the new assets. For example, by + * providing an initial [`NextAssetId`] and using the [`crate::AutoIncAssetId`] callback, an + * auto-increment model can be applied to all new asset IDs. + * + * The initial next asset ID can be set using the [`GenesisConfig`] or the + * [SetNextAssetId](`migration::next_asset_id::SetNextAssetId`) migration. + */ + NextAssetId: StorageDescriptor<[], Anonymize, true, never>; + }; + PoolAssets: { + /** + * Details of an asset. + */ + Asset: StorageDescriptor<[Key: number], Anonymize, true, never>; + /** + * The holdings of a specific account for a specific asset. + */ + Account: StorageDescriptor, Anonymize, true, never>; + /** + * Approved balance transfers. First balance is the amount approved for transfer. Second + * is the amount of `T::Currency` reserved for storing this. + * First key is the asset ID, second key is the owner and third key is the delegate. + */ + Approvals: StorageDescriptor, Anonymize, true, never>; + /** + * Metadata of an asset. + */ + Metadata: StorageDescriptor<[Key: number], Anonymize, false, never>; + /** + * The asset ID enforced for the next asset creation, if any present. Otherwise, this storage + * item has no effect. + * + * This can be useful for setting up constraints for IDs of the new assets. For example, by + * providing an initial [`NextAssetId`] and using the [`crate::AutoIncAssetId`] callback, an + * auto-increment model can be applied to all new asset IDs. + * + * The initial next asset ID can be set using the [`GenesisConfig`] or the + * [SetNextAssetId](`migration::next_asset_id::SetNextAssetId`) migration. + */ + NextAssetId: StorageDescriptor<[], number, true, never>; + }; + AssetConversion: { + /** + * Map from `PoolAssetId` to `PoolInfo`. This establishes whether a pool has been officially + * created rather than people sending tokens directly to a pool's public account. + */ + Pools: StorageDescriptor<[Key: Anonymize], number, true, never>; + /** + * Stores the `PoolAssetId` that is going to be used for the next lp token. + * This gets incremented whenever a new lp pool is created. + */ + NextPoolAssetId: StorageDescriptor<[], number, true, never>; + }; +}; +type ICalls = { + System: { + /** + *Make some on-chain remark. + * + *Can be executed by every `origin`. + */ + remark: TxDescriptor>; + /** + *Set the number of pages in the WebAssembly environment's heap. + */ + set_heap_pages: TxDescriptor>; + /** + *Set the new runtime code. + */ + set_code: TxDescriptor>; + /** + *Set the new runtime code without doing any checks of the given `code`. + * + *Note that runtime upgrades will not run if this is called with a not-increasing spec + *version! + */ + set_code_without_checks: TxDescriptor>; + /** + *Set some items of storage. + */ + set_storage: TxDescriptor>; + /** + *Kill some items from storage. + */ + kill_storage: TxDescriptor>; + /** + *Kill all storage items with a key that starts with the given prefix. + * + ***NOTE:** We rely on the Root origin to provide us the number of subkeys under + *the prefix we are removing to accurately calculate the weight of this function. + */ + kill_prefix: TxDescriptor>; + /** + *Make some on-chain remark and emit event. + */ + remark_with_event: TxDescriptor>; + /** + *Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied + *later. + * + *This call requires Root origin. + */ + authorize_upgrade: TxDescriptor>; + /** + *Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied + *later. + * + *WARNING: This authorizes an upgrade that will take place without any safety checks, for + *example that the spec name remains the same and that the version number increases. Not + *recommended for normal use. Use `authorize_upgrade` instead. + * + *This call requires Root origin. + */ + authorize_upgrade_without_checks: TxDescriptor>; + /** + *Provide the preimage (runtime binary) `code` for an upgrade that has been authorized. + * + *If the authorization required a version check, this call will ensure the spec name + *remains unchanged and that the spec version has increased. + * + *Depending on the runtime's `OnSetCode` configuration, this function may directly apply + *the new `code` in the same block or attempt to schedule the upgrade. + * + *All origins are allowed. + */ + apply_authorized_upgrade: TxDescriptor>; + }; + ParachainSystem: { + /** + *Set the current validation data. + * + *This should be invoked exactly once per block. It will panic at the finalization + *phase if the call was not invoked. + * + *The dispatch origin for this call must be `Inherent` + * + *As a side effect, this function upgrades the current validation function + *if the appropriate time has come. + */ + set_validation_data: TxDescriptor>; + /** + + */ + sudo_send_upward_message: TxDescriptor>; + /** + *Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied + *later. + * + *The `check_version` parameter sets a boolean flag for whether or not the runtime's spec + *version and name should be verified on upgrade. Since the authorization only has a hash, + *it cannot actually perform the verification. + * + *This call requires Root origin. + */ + authorize_upgrade: TxDescriptor>; + /** + *Provide the preimage (runtime binary) `code` for an upgrade that has been authorized. + * + *If the authorization required a version check, this call will ensure the spec name + *remains unchanged and that the spec version has increased. + * + *Note that this function will not apply the new `code`, but only attempt to schedule the + *upgrade with the Relay Chain. + * + *All origins are allowed. + */ + enact_authorized_upgrade: TxDescriptor>; + }; + Timestamp: { + /** + *Set the current time. + * + *This call should be invoked exactly once per block. It will panic at the finalization + *phase, if this call hasn't been invoked by that time. + * + *The timestamp should be greater than the previous one by the amount specified by + *[`Config::MinimumPeriod`]. + * + *The dispatch origin for this call must be _None_. + * + *This dispatch class is _Mandatory_ to ensure it gets executed in the block. Be aware + *that changing the complexity of this call could result exhausting the resources in a + *block to execute any other calls. + * + *## Complexity + *- `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`) + *- 1 storage read and 1 storage mutation (codec `O(1)` because of `DidUpdate::take` in + * `on_finalize`) + *- 1 event handler `on_timestamp_set`. Must be `O(1)`. + */ + set: TxDescriptor>; + }; + Balances: { + /** + *Transfer some liquid free balance to another account. + * + *`transfer_allow_death` will set the `FreeBalance` of the sender and receiver. + *If the sender's account is below the existential deposit as a result + *of the transfer, the account will be reaped. + * + *The dispatch origin for this call must be `Signed` by the transactor. + */ + transfer_allow_death: TxDescriptor>; + /** + *Exactly as `transfer_allow_death`, except the origin must be root and the source account + *may be specified. + */ + force_transfer: TxDescriptor>; + /** + *Same as the [`transfer_allow_death`] call, but with a check that the transfer will not + *kill the origin account. + * + *99% of the time you want [`transfer_allow_death`] instead. + * + *[`transfer_allow_death`]: struct.Pallet.html#method.transfer + */ + transfer_keep_alive: TxDescriptor>; + /** + *Transfer the entire transferable balance from the caller account. + * + *NOTE: This function only attempts to transfer _transferable_ balances. This means that + *any locked, reserved, or existential deposits (when `keep_alive` is `true`), will not be + *transferred by this function. To ensure that this function results in a killed account, + *you might need to prepare the account by removing any reference counters, storage + *deposits, etc... + * + *The dispatch origin of this call must be Signed. + * + *- `dest`: The recipient of the transfer. + *- `keep_alive`: A boolean to determine if the `transfer_all` operation should send all + * of the funds the account has, causing the sender account to be killed (false), or + * transfer everything except at least the existential deposit, which will guarantee to + * keep the sender account alive (true). + */ + transfer_all: TxDescriptor>; + /** + *Unreserve some balance from a user by force. + * + *Can only be called by ROOT. + */ + force_unreserve: TxDescriptor>; + /** + *Upgrade a specified account. + * + *- `origin`: Must be `Signed`. + *- `who`: The account to be upgraded. + * + *This will waive the transaction fee if at least all but 10% of the accounts needed to + *be upgraded. (We let some not have to be upgraded just in order to allow for the + *possibility of churn). + */ + upgrade_accounts: TxDescriptor>; + /** + *Set the regular balance of a given account. + * + *The dispatch origin for this call is `root`. + */ + force_set_balance: TxDescriptor>; + /** + *Adjust the total issuance in a saturating way. + * + *Can only be called by root and always needs a positive `delta`. + * + *# Example + */ + force_adjust_total_issuance: TxDescriptor>; + /** + *Burn the specified liquid free balance from the origin account. + * + *If the origin's account ends up below the existential deposit as a result + *of the burn and `keep_alive` is false, the account will be reaped. + * + *Unlike sending funds to a _burn_ address, which merely makes the funds inaccessible, + *this `burn` operation will reduce total issuance by the amount _burned_. + */ + burn: TxDescriptor>; + }; + Vesting: { + /** + *Unlock any vested funds of the sender account. + * + *The dispatch origin for this call must be _Signed_ and the sender must have funds still + *locked under this pallet. + * + *Emits either `VestingCompleted` or `VestingUpdated`. + * + *## Complexity + *- `O(1)`. + */ + vest: TxDescriptor; + /** + *Unlock any vested funds of a `target` account. + * + *The dispatch origin for this call must be _Signed_. + * + *- `target`: The account whose vested funds should be unlocked. Must have funds still + *locked under this pallet. + * + *Emits either `VestingCompleted` or `VestingUpdated`. + * + *## Complexity + *- `O(1)`. + */ + vest_other: TxDescriptor>; + /** + *Create a vested transfer. + * + *The dispatch origin for this call must be _Signed_. + * + *- `target`: The account receiving the vested funds. + *- `schedule`: The vesting schedule attached to the transfer. + * + *Emits `VestingCreated`. + * + *NOTE: This will unlock all schedules through the current block. + * + *## Complexity + *- `O(1)`. + */ + vested_transfer: TxDescriptor>; + /** + *Force a vested transfer. + * + *The dispatch origin for this call must be _Root_. + * + *- `source`: The account whose funds should be transferred. + *- `target`: The account that should be transferred the vested funds. + *- `schedule`: The vesting schedule attached to the transfer. + * + *Emits `VestingCreated`. + * + *NOTE: This will unlock all schedules through the current block. + * + *## Complexity + *- `O(1)`. + */ + force_vested_transfer: TxDescriptor>; + /** + *Merge two vesting schedules together, creating a new vesting schedule that unlocks over + *the highest possible start and end blocks. If both schedules have already started the + *current block will be used as the schedule start; with the caveat that if one schedule + *is finished by the current block, the other will be treated as the new merged schedule, + *unmodified. + * + *NOTE: If `schedule1_index == schedule2_index` this is a no-op. + *NOTE: This will unlock all schedules through the current block prior to merging. + *NOTE: If both schedules have ended by the current block, no new schedule will be created + *and both will be removed. + * + *Merged schedule attributes: + *- `starting_block`: `MAX(schedule1.starting_block, scheduled2.starting_block, + * current_block)`. + *- `ending_block`: `MAX(schedule1.ending_block, schedule2.ending_block)`. + *- `locked`: `schedule1.locked_at(current_block) + schedule2.locked_at(current_block)`. + * + *The dispatch origin for this call must be _Signed_. + * + *- `schedule1_index`: index of the first schedule to merge. + *- `schedule2_index`: index of the second schedule to merge. + */ + merge_schedules: TxDescriptor>; + /** + *Force remove a vesting schedule + * + *The dispatch origin for this call must be _Root_. + * + *- `target`: An account that has a vesting schedule + *- `schedule_index`: The vesting schedule index that should be removed + */ + force_remove_vesting_schedule: TxDescriptor>; + }; + CollatorSelection: { + /** + *Set the list of invulnerable (fixed) collators. These collators must do some + *preparation, namely to have registered session keys. + * + *The call will remove any accounts that have not registered keys from the set. That is, + *it is non-atomic; the caller accepts all `AccountId`s passed in `new` _individually_ as + *acceptable Invulnerables, and is not proposing a _set_ of new Invulnerables. + * + *This call does not maintain mutual exclusivity of `Invulnerables` and `Candidates`. It + *is recommended to use a batch of `add_invulnerable` and `remove_invulnerable` instead. A + *`batch_all` can also be used to enforce atomicity. If any candidates are included in + *`new`, they should be removed with `remove_invulnerable_candidate` after execution. + * + *Must be called by the `UpdateOrigin`. + */ + set_invulnerables: TxDescriptor>; + /** + *Set the ideal number of non-invulnerable collators. If lowering this number, then the + *number of running collators could be higher than this figure. Aside from that edge case, + *there should be no other way to have more candidates than the desired number. + * + *The origin for this call must be the `UpdateOrigin`. + */ + set_desired_candidates: TxDescriptor>; + /** + *Set the candidacy bond amount. + * + *If the candidacy bond is increased by this call, all current candidates which have a + *deposit lower than the new bond will be kicked from the list and get their deposits + *back. + * + *The origin for this call must be the `UpdateOrigin`. + */ + set_candidacy_bond: TxDescriptor>; + /** + *Register this account as a collator candidate. The account must (a) already have + *registered session keys and (b) be able to reserve the `CandidacyBond`. + * + *This call is not available to `Invulnerable` collators. + */ + register_as_candidate: TxDescriptor; + /** + *Deregister `origin` as a collator candidate. Note that the collator can only leave on + *session change. The `CandidacyBond` will be unreserved immediately. + * + *This call will fail if the total number of candidates would drop below + *`MinEligibleCollators`. + */ + leave_intent: TxDescriptor; + /** + *Add a new account `who` to the list of `Invulnerables` collators. `who` must have + *registered session keys. If `who` is a candidate, they will be removed. + * + *The origin for this call must be the `UpdateOrigin`. + */ + add_invulnerable: TxDescriptor>; + /** + *Remove an account `who` from the list of `Invulnerables` collators. `Invulnerables` must + *be sorted. + * + *The origin for this call must be the `UpdateOrigin`. + */ + remove_invulnerable: TxDescriptor>; + /** + *Update the candidacy bond of collator candidate `origin` to a new amount `new_deposit`. + * + *Setting a `new_deposit` that is lower than the current deposit while `origin` is + *occupying a top-`DesiredCandidates` slot is not allowed. + * + *This call will fail if `origin` is not a collator candidate, the updated bond is lower + *than the minimum candidacy bond, and/or the amount cannot be reserved. + */ + update_bond: TxDescriptor>; + /** + *The caller `origin` replaces a candidate `target` in the collator candidate list by + *reserving `deposit`. The amount `deposit` reserved by the caller must be greater than + *the existing bond of the target it is trying to replace. + * + *This call will fail if the caller is already a collator candidate or invulnerable, the + *caller does not have registered session keys, the target is not a collator candidate, + *and/or the `deposit` amount cannot be reserved. + */ + take_candidate_slot: TxDescriptor>; + }; + Session: { + /** + *Sets the session key(s) of the function caller to `keys`. + *Allows an account to set its session key prior to becoming a validator. + *This doesn't take effect until the next session. + * + *The dispatch origin of this function must be signed. + * + *## Complexity + *- `O(1)`. Actual cost depends on the number of length of `T::Keys::key_ids()` which is + * fixed. + */ + set_keys: TxDescriptor>; + /** + *Removes any session key(s) of the function caller. + * + *This doesn't take effect until the next session. + * + *The dispatch origin of this function must be Signed and the account must be either be + *convertible to a validator ID using the chain's typical addressing system (this usually + *means being a controller account) or directly convertible into a validator ID (which + *usually means being a stash account). + * + *## Complexity + *- `O(1)` in number of key types. Actual cost depends on the number of length of + * `T::Keys::key_ids()` which is fixed. + */ + purge_keys: TxDescriptor; + }; + XcmpQueue: { + /** + *Suspends all XCM executions for the XCMP queue, regardless of the sender's origin. + * + *- `origin`: Must pass `ControllerOrigin`. + */ + suspend_xcm_execution: TxDescriptor; + /** + *Resumes all XCM executions for the XCMP queue. + * + *Note that this function doesn't change the status of the in/out bound channels. + * + *- `origin`: Must pass `ControllerOrigin`. + */ + resume_xcm_execution: TxDescriptor; + /** + *Overwrites the number of pages which must be in the queue for the other side to be + *told to suspend their sending. + * + *- `origin`: Must pass `Root`. + *- `new`: Desired value for `QueueConfigData.suspend_value` + */ + update_suspend_threshold: TxDescriptor>; + /** + *Overwrites the number of pages which must be in the queue after which we drop any + *further messages from the channel. + * + *- `origin`: Must pass `Root`. + *- `new`: Desired value for `QueueConfigData.drop_threshold` + */ + update_drop_threshold: TxDescriptor>; + /** + *Overwrites the number of pages which the queue must be reduced to before it signals + *that message sending may recommence after it has been suspended. + * + *- `origin`: Must pass `Root`. + *- `new`: Desired value for `QueueConfigData.resume_threshold` + */ + update_resume_threshold: TxDescriptor>; + }; + PolkadotXcm: { + /** + + */ + send: TxDescriptor>; + /** + *Teleport some assets from the local chain to some destination chain. + * + ***This function is deprecated: Use `limited_teleport_assets` instead.** + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item`. The weight limit for fees is not provided and thus is unlimited, + *with all fees taken as needed from the asset. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` chain. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + */ + teleport_assets: TxDescriptor>; + /** + *Transfer some assets from the local chain to the destination chain through their local, + *destination or remote reserve. + * + *`assets` must have same reserve location and may not be teleportable to `dest`. + * - `assets` have local reserve: transfer assets to sovereign account of destination + * chain and forward a notification XCM to `dest` to mint and deposit reserve-based + * assets to `beneficiary`. + * - `assets` have destination reserve: burn local assets and forward a notification to + * `dest` chain to withdraw the reserve assets from this chain's sovereign account and + * deposit them to `beneficiary`. + * - `assets` have remote reserve: burn local assets, forward XCM to reserve chain to move + * reserves from this chain's SA to `dest` chain's SA, and forward another XCM to `dest` + * to mint and deposit reserve-based assets to `beneficiary`. + * + ***This function is deprecated: Use `limited_reserve_transfer_assets` instead.** + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item`. The weight limit for fees is not provided and thus is unlimited, + *with all fees taken as needed from the asset. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` (and possibly reserve) chains. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + */ + reserve_transfer_assets: TxDescriptor>; + /** + *Execute an XCM message from a local, signed, origin. + * + *An event is deposited indicating whether `msg` could be executed completely or only + *partially. + * + *No more than `max_weight` will be used in its attempted execution. If this is less than + *the maximum amount of weight that the message could take to be executed, then no + *execution attempt will be made. + */ + execute: TxDescriptor>; + /** + *Extoll that a particular destination can be communicated with through a particular + *version of XCM. + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `location`: The destination that is being described. + *- `xcm_version`: The latest version of XCM that `location` supports. + */ + force_xcm_version: TxDescriptor>; + /** + *Set a safe XCM version (the version that XCM should be encoded with if the most recent + *version a destination can accept is unknown). + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `maybe_xcm_version`: The default XCM encoding version, or `None` to disable. + */ + force_default_xcm_version: TxDescriptor>; + /** + *Ask a location to notify us regarding their XCM version and any changes to it. + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `location`: The location to which we should subscribe for XCM version notifications. + */ + force_subscribe_version_notify: TxDescriptor>; + /** + *Require that a particular destination should no longer notify us regarding any XCM + *version changes. + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `location`: The location to which we are currently subscribed for XCM version + * notifications which we no longer desire. + */ + force_unsubscribe_version_notify: TxDescriptor>; + /** + *Transfer some assets from the local chain to the destination chain through their local, + *destination or remote reserve. + * + *`assets` must have same reserve location and may not be teleportable to `dest`. + * - `assets` have local reserve: transfer assets to sovereign account of destination + * chain and forward a notification XCM to `dest` to mint and deposit reserve-based + * assets to `beneficiary`. + * - `assets` have destination reserve: burn local assets and forward a notification to + * `dest` chain to withdraw the reserve assets from this chain's sovereign account and + * deposit them to `beneficiary`. + * - `assets` have remote reserve: burn local assets, forward XCM to reserve chain to move + * reserves from this chain's SA to `dest` chain's SA, and forward another XCM to `dest` + * to mint and deposit reserve-based assets to `beneficiary`. + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item`, up to enough to pay for `weight_limit` of weight. If more weight + *is needed than `weight_limit`, then the operation will fail and the sent assets may be + *at risk. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` (and possibly reserve) chains. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + *- `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + */ + limited_reserve_transfer_assets: TxDescriptor>; + /** + *Teleport some assets from the local chain to some destination chain. + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item`, up to enough to pay for `weight_limit` of weight. If more weight + *is needed than `weight_limit`, then the operation will fail and the sent assets may be + *at risk. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` chain. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + *- `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + */ + limited_teleport_assets: TxDescriptor>; + /** + *Set or unset the global suspension state of the XCM executor. + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `suspended`: `true` to suspend, `false` to resume. + */ + force_suspension: TxDescriptor>; + /** + *Transfer some assets from the local chain to the destination chain through their local, + *destination or remote reserve, or through teleports. + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item` (hence referred to as `fees`), up to enough to pay for + *`weight_limit` of weight. If more weight is needed than `weight_limit`, then the + *operation will fail and the sent assets may be at risk. + * + *`assets` (excluding `fees`) must have same reserve location or otherwise be teleportable + *to `dest`, no limitations imposed on `fees`. + * - for local reserve: transfer assets to sovereign account of destination chain and + * forward a notification XCM to `dest` to mint and deposit reserve-based assets to + * `beneficiary`. + * - for destination reserve: burn local assets and forward a notification to `dest` chain + * to withdraw the reserve assets from this chain's sovereign account and deposit them + * to `beneficiary`. + * - for remote reserve: burn local assets, forward XCM to reserve chain to move reserves + * from this chain's SA to `dest` chain's SA, and forward another XCM to `dest` to mint + * and deposit reserve-based assets to `beneficiary`. + * - for teleports: burn local assets and forward XCM to `dest` chain to mint/teleport + * assets and deposit them to `beneficiary`. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `X2(Parent, + * Parachain(..))` to send from parachain to parachain, or `X1(Parachain(..))` to send + * from relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` (and possibly reserve) chains. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + *- `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + */ + transfer_assets: TxDescriptor>; + /** + *Claims assets trapped on this pallet because of leftover assets during XCM execution. + * + *- `origin`: Anyone can call this extrinsic. + *- `assets`: The exact assets that were trapped. Use the version to specify what version + *was the latest when they were trapped. + *- `beneficiary`: The location/account where the claimed assets will be deposited. + */ + claim_assets: TxDescriptor>; + /** + *Transfer assets from the local chain to the destination chain using explicit transfer + *types for assets and fees. + * + *`assets` must have same reserve location or may be teleportable to `dest`. Caller must + *provide the `assets_transfer_type` to be used for `assets`: + * - `TransferType::LocalReserve`: transfer assets to sovereign account of destination + * chain and forward a notification XCM to `dest` to mint and deposit reserve-based + * assets to `beneficiary`. + * - `TransferType::DestinationReserve`: burn local assets and forward a notification to + * `dest` chain to withdraw the reserve assets from this chain's sovereign account and + * deposit them to `beneficiary`. + * - `TransferType::RemoteReserve(reserve)`: burn local assets, forward XCM to `reserve` + * chain to move reserves from this chain's SA to `dest` chain's SA, and forward another + * XCM to `dest` to mint and deposit reserve-based assets to `beneficiary`. Typically + * the remote `reserve` is Asset Hub. + * - `TransferType::Teleport`: burn local assets and forward XCM to `dest` chain to + * mint/teleport assets and deposit them to `beneficiary`. + * + *On the destination chain, as well as any intermediary hops, `BuyExecution` is used to + *buy execution using transferred `assets` identified by `remote_fees_id`. + *Make sure enough of the specified `remote_fees_id` asset is included in the given list + *of `assets`. `remote_fees_id` should be enough to pay for `weight_limit`. If more weight + *is needed than `weight_limit`, then the operation will fail and the sent assets may be + *at risk. + * + *`remote_fees_id` may use different transfer type than rest of `assets` and can be + *specified through `fees_transfer_type`. + * + *The caller needs to specify what should happen to the transferred assets once they reach + *the `dest` chain. This is done through the `custom_xcm_on_dest` parameter, which + *contains the instructions to execute on `dest` as a final step. + * This is usually as simple as: + * `Xcm(vec![DepositAsset { assets: Wild(AllCounted(assets.len())), beneficiary }])`, + * but could be something more exotic like sending the `assets` even further. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain, or `(parents: 2, (GlobalConsensus(..), ..))` to send from + * parachain across a bridge to another ecosystem destination. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` (and possibly reserve) chains. + *- `assets_transfer_type`: The XCM `TransferType` used to transfer the `assets`. + *- `remote_fees_id`: One of the included `assets` to be used to pay fees. + *- `fees_transfer_type`: The XCM `TransferType` used to transfer the `fees` assets. + *- `custom_xcm_on_dest`: The XCM to be executed on `dest` chain as the last step of the + * transfer, which also determines what happens to the assets on the destination chain. + *- `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + */ + transfer_assets_using_type_and_then: TxDescriptor>; + }; + ToKusamaXcmRouter: { + /** + *Notification about congested bridge queue. + */ + report_bridge_status: TxDescriptor>; + }; + MessageQueue: { + /** + *Remove a page which has no more messages remaining to be processed or is stale. + */ + reap_page: TxDescriptor>; + /** + *Execute an overweight message. + * + *Temporary processing errors will be propagated whereas permanent errors are treated + *as success condition. + * + *- `origin`: Must be `Signed`. + *- `message_origin`: The origin from which the message to be executed arrived. + *- `page`: The page in the queue in which the message to be executed is sitting. + *- `index`: The index into the queue of the message to be executed. + *- `weight_limit`: The maximum amount of weight allowed to be consumed in the execution + * of the message. + * + *Benchmark complexity considerations: O(index + weight_limit). + */ + execute_overweight: TxDescriptor>; + }; + Utility: { + /** + *Send a batch of dispatch calls. + * + *May be called from any origin except `None`. + * + *- `calls`: The calls to be dispatched from the same origin. The number of call must not + * exceed the constant: `batched_calls_limit` (available in constant metadata). + * + *If origin is root then the calls are dispatched without checking origin filter. (This + *includes bypassing `frame_system::Config::BaseCallFilter`). + * + *## Complexity + *- O(C) where C is the number of calls to be batched. + * + *This will return `Ok` in all circumstances. To determine the success of the batch, an + *event is deposited. If a call failed and the batch was interrupted, then the + *`BatchInterrupted` event is deposited, along with the number of successful calls made + *and the error of the failed call. If all were successful, then the `BatchCompleted` + *event is deposited. + */ + batch: TxDescriptor>; + /** + *Send a call through an indexed pseudonym of the sender. + * + *Filter from origin are passed along. The call will be dispatched with an origin which + *use the same filter as the origin of this call. + * + *NOTE: If you need to ensure that any account-based filtering is not honored (i.e. + *because you expect `proxy` to have been used prior in the call stack and you do not want + *the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1` + *in the Multisig pallet instead. + * + *NOTE: Prior to version *12, this was called `as_limited_sub`. + * + *The dispatch origin for this call must be _Signed_. + */ + as_derivative: TxDescriptor>; + /** + *Send a batch of dispatch calls and atomically execute them. + *The whole transaction will rollback and fail if any of the calls failed. + * + *May be called from any origin except `None`. + * + *- `calls`: The calls to be dispatched from the same origin. The number of call must not + * exceed the constant: `batched_calls_limit` (available in constant metadata). + * + *If origin is root then the calls are dispatched without checking origin filter. (This + *includes bypassing `frame_system::Config::BaseCallFilter`). + * + *## Complexity + *- O(C) where C is the number of calls to be batched. + */ + batch_all: TxDescriptor>; + /** + *Dispatches a function call with a provided origin. + * + *The dispatch origin for this call must be _Root_. + * + *## Complexity + *- O(1). + */ + dispatch_as: TxDescriptor>; + /** + *Send a batch of dispatch calls. + *Unlike `batch`, it allows errors and won't interrupt. + * + *May be called from any origin except `None`. + * + *- `calls`: The calls to be dispatched from the same origin. The number of call must not + * exceed the constant: `batched_calls_limit` (available in constant metadata). + * + *If origin is root then the calls are dispatch without checking origin filter. (This + *includes bypassing `frame_system::Config::BaseCallFilter`). + * + *## Complexity + *- O(C) where C is the number of calls to be batched. + */ + force_batch: TxDescriptor>; + /** + *Dispatch a function call with a specified weight. + * + *This function does not check the weight of the call, and instead allows the + *Root origin to specify the weight of the call. + * + *The dispatch origin for this call must be _Root_. + */ + with_weight: TxDescriptor>; + }; + Multisig: { + /** + *Immediately dispatch a multi-signature call using a single approval from the caller. + * + *The dispatch origin for this call must be _Signed_. + * + *- `other_signatories`: The accounts (other than the sender) who are part of the + *multi-signature, but do not participate in the approval process. + *- `call`: The call to be executed. + * + *Result is equivalent to the dispatched result. + * + *## Complexity + *O(Z + C) where Z is the length of the call and C its execution weight. + */ + as_multi_threshold_1: TxDescriptor>; + /** + *Register approval for a dispatch to be made from a deterministic composite account if + *approved by a total of `threshold - 1` of `other_signatories`. + * + *If there are enough, then dispatch the call. + * + *Payment: `DepositBase` will be reserved if this is the first approval, plus + *`threshold` times `DepositFactor`. It is returned once this dispatch happens or + *is cancelled. + * + *The dispatch origin for this call must be _Signed_. + * + *- `threshold`: The total number of approvals for this dispatch before it is executed. + *- `other_signatories`: The accounts (other than the sender) who can approve this + *dispatch. May not be empty. + *- `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is + *not the first approval, then it must be `Some`, with the timepoint (block number and + *transaction index) of the first approval transaction. + *- `call`: The call to be executed. + * + *NOTE: Unless this is the final approval, you will generally want to use + *`approve_as_multi` instead, since it only requires a hash of the call. + * + *Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise + *on success, result is `Ok` and the result from the interior call, if it was executed, + *may be found in the deposited `MultisigExecuted` event. + * + *## Complexity + *- `O(S + Z + Call)`. + *- Up to one balance-reserve or unreserve operation. + *- One passthrough operation, one insert, both `O(S)` where `S` is the number of + * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. + *- One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len. + *- One encode & hash, both of complexity `O(S)`. + *- Up to one binary search and insert (`O(logS + S)`). + *- I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. + *- One event. + *- The weight of the `call`. + *- Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit + * taken for its lifetime of `DepositBase + threshold * DepositFactor`. + */ + as_multi: TxDescriptor>; + /** + *Register approval for a dispatch to be made from a deterministic composite account if + *approved by a total of `threshold - 1` of `other_signatories`. + * + *Payment: `DepositBase` will be reserved if this is the first approval, plus + *`threshold` times `DepositFactor`. It is returned once this dispatch happens or + *is cancelled. + * + *The dispatch origin for this call must be _Signed_. + * + *- `threshold`: The total number of approvals for this dispatch before it is executed. + *- `other_signatories`: The accounts (other than the sender) who can approve this + *dispatch. May not be empty. + *- `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is + *not the first approval, then it must be `Some`, with the timepoint (block number and + *transaction index) of the first approval transaction. + *- `call_hash`: The hash of the call to be executed. + * + *NOTE: If this is the final approval, you will want to use `as_multi` instead. + * + *## Complexity + *- `O(S)`. + *- Up to one balance-reserve or unreserve operation. + *- One passthrough operation, one insert, both `O(S)` where `S` is the number of + * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. + *- One encode & hash, both of complexity `O(S)`. + *- Up to one binary search and insert (`O(logS + S)`). + *- I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. + *- One event. + *- Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit + * taken for its lifetime of `DepositBase + threshold * DepositFactor`. + */ + approve_as_multi: TxDescriptor>; + /** + *Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously + *for this operation will be unreserved on success. + * + *The dispatch origin for this call must be _Signed_. + * + *- `threshold`: The total number of approvals for this dispatch before it is executed. + *- `other_signatories`: The accounts (other than the sender) who can approve this + *dispatch. May not be empty. + *- `timepoint`: The timepoint (block number and transaction index) of the first approval + *transaction for this dispatch. + *- `call_hash`: The hash of the call to be executed. + * + *## Complexity + *- `O(S)`. + *- Up to one balance-reserve or unreserve operation. + *- One passthrough operation, one insert, both `O(S)` where `S` is the number of + * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. + *- One encode & hash, both of complexity `O(S)`. + *- One event. + *- I/O: 1 read `O(S)`, one remove. + *- Storage: removes one item. + */ + cancel_as_multi: TxDescriptor>; + }; + Proxy: { + /** + *Dispatch the given `call` from an account that the sender is authorised for through + *`add_proxy`. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `real`: The account that the proxy will make a call on behalf of. + *- `force_proxy_type`: Specify the exact proxy type to be used and checked for this call. + *- `call`: The call to be made by the `real` account. + */ + proxy: TxDescriptor>; + /** + *Register a proxy account for the sender that is able to make calls on its behalf. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `proxy`: The account that the `caller` would like to make a proxy. + *- `proxy_type`: The permissions allowed for this proxy account. + *- `delay`: The announcement period required of the initial proxy. Will generally be + *zero. + */ + add_proxy: TxDescriptor>; + /** + *Unregister a proxy account for the sender. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `proxy`: The account that the `caller` would like to remove as a proxy. + *- `proxy_type`: The permissions currently enabled for the removed proxy account. + */ + remove_proxy: TxDescriptor>; + /** + *Unregister all proxy accounts for the sender. + * + *The dispatch origin for this call must be _Signed_. + * + *WARNING: This may be called on accounts created by `pure`, however if done, then + *the unreserved fees will be inaccessible. **All access to this account will be lost.** + */ + remove_proxies: TxDescriptor; + /** + *Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and + *initialize it with a proxy of `proxy_type` for `origin` sender. + * + *Requires a `Signed` origin. + * + *- `proxy_type`: The type of the proxy that the sender will be registered as over the + *new account. This will almost always be the most permissive `ProxyType` possible to + *allow for maximum flexibility. + *- `index`: A disambiguation index, in case this is called multiple times in the same + *transaction (e.g. with `utility::batch`). Unless you're using `batch` you probably just + *want to use `0`. + *- `delay`: The announcement period required of the initial proxy. Will generally be + *zero. + * + *Fails with `Duplicate` if this has already been called in this transaction, from the + *same sender, with the same parameters. + * + *Fails if there are insufficient funds to pay for deposit. + */ + create_pure: TxDescriptor>; + /** + *Removes a previously spawned pure proxy. + * + *WARNING: **All access to this account will be lost.** Any funds held in it will be + *inaccessible. + * + *Requires a `Signed` origin, and the sender account must have been created by a call to + *`pure` with corresponding parameters. + * + *- `spawner`: The account that originally called `pure` to create this account. + *- `index`: The disambiguation index originally passed to `pure`. Probably `0`. + *- `proxy_type`: The proxy type originally passed to `pure`. + *- `height`: The height of the chain when the call to `pure` was processed. + *- `ext_index`: The extrinsic index in which the call to `pure` was processed. + * + *Fails with `NoPermission` in case the caller is not a previously created pure + *account whose `pure` call has corresponding parameters. + */ + kill_pure: TxDescriptor>; + /** + *Publish the hash of a proxy-call that will be made in the future. + * + *This must be called some number of blocks before the corresponding `proxy` is attempted + *if the delay associated with the proxy relationship is greater than zero. + * + *No more than `MaxPending` announcements may be made at any one time. + * + *This will take a deposit of `AnnouncementDepositFactor` as well as + *`AnnouncementDepositBase` if there are no other pending announcements. + * + *The dispatch origin for this call must be _Signed_ and a proxy of `real`. + * + *Parameters: + *- `real`: The account that the proxy will make a call on behalf of. + *- `call_hash`: The hash of the call to be made by the `real` account. + */ + announce: TxDescriptor>; + /** + *Remove a given announcement. + * + *May be called by a proxy account to remove a call they previously announced and return + *the deposit. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `real`: The account that the proxy will make a call on behalf of. + *- `call_hash`: The hash of the call to be made by the `real` account. + */ + remove_announcement: TxDescriptor>; + /** + *Remove the given announcement of a delegate. + * + *May be called by a target (proxied) account to remove a call that one of their delegates + *(`delegate`) has announced they want to execute. The deposit is returned. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `delegate`: The account that previously announced the call. + *- `call_hash`: The hash of the call to be made. + */ + reject_announcement: TxDescriptor>; + /** + *Dispatch the given `call` from an account that the sender is authorized for through + *`add_proxy`. + * + *Removes any corresponding announcement(s). + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `real`: The account that the proxy will make a call on behalf of. + *- `force_proxy_type`: Specify the exact proxy type to be used and checked for this call. + *- `call`: The call to be made by the `real` account. + */ + proxy_announced: TxDescriptor>; + }; + Assets: { + /** + *Issue a new class of fungible assets from a public origin. + * + *This new asset class has no assets initially and its owner is the origin. + * + *The origin must conform to the configured `CreateOrigin` and have sufficient funds free. + * + *Funds of sender are reserved by `AssetDeposit`. + * + *Parameters: + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `admin`: The admin of this class of assets. The admin is the initial address of each + *member of the asset class's admin team. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `Created` event when successful. + * + *Weight: `O(1)` + */ + create: TxDescriptor>; + /** + *Issue a new class of fungible assets from a privileged origin. + * + *This new asset class has no assets initially. + * + *The origin must conform to `ForceOrigin`. + * + *Unlike `create`, no funds are reserved. + * + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `owner`: The owner of this class of assets. The owner has full superuser permissions + *over this asset, but may later change and configure the permissions using + *`transfer_ownership` and `set_team`. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `ForceCreated` event when successful. + * + *Weight: `O(1)` + */ + force_create: TxDescriptor>; + /** + *Start the process of destroying a fungible asset class. + * + *`start_destroy` is the first in a series of extrinsics that should be called, to allow + *destruction of an asset class. + * + *The origin must conform to `ForceOrigin` or must be `Signed` by the asset's `owner`. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *The asset class must be frozen before calling `start_destroy`. + */ + start_destroy: TxDescriptor>; + /** + *Destroy all accounts associated with a given asset. + * + *`destroy_accounts` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all accounts. It will destroy `RemoveItemsLimit` accounts at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedAccounts` event. + */ + destroy_accounts: TxDescriptor>; + /** + *Destroy all approvals associated with a given asset up to the max (T::RemoveItemsLimit). + * + *`destroy_approvals` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all approvals. It will destroy `RemoveItemsLimit` approvals at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedApprovals` event. + */ + destroy_approvals: TxDescriptor>; + /** + *Complete destroying asset and unreserve currency. + * + *`finish_destroy` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. All accounts or approvals should be destroyed before + *hand. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each successful call emits the `Event::Destroyed` event. + */ + finish_destroy: TxDescriptor>; + /** + *Mint assets of a particular class. + * + *The origin must be Signed and the sender must be the Issuer of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount minted. + *- `beneficiary`: The account to be credited with the minted assets. + *- `amount`: The amount of the asset to be minted. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + *Modes: Pre-existing balance of `beneficiary`; Account pre-existence of `beneficiary`. + */ + mint: TxDescriptor>; + /** + *Reduce the balance of `who` by as much as possible up to `amount` assets of `id`. + * + *Origin must be Signed and the sender should be the Manager of the asset `id`. + * + *Bails with `NoAccount` if the `who` is already dead. + * + *- `id`: The identifier of the asset to have some amount burned. + *- `who`: The account to be debited from. + *- `amount`: The maximum amount by which `who`'s balance should be reduced. + * + *Emits `Burned` with the actual amount burned. If this takes the balance to below the + *minimum for the asset, then the amount burned is increased to take it to zero. + * + *Weight: `O(1)` + *Modes: Post-existence of `who`; Pre & post Zombie-status of `who`. + */ + burn: TxDescriptor>; + /** + *Move some assets from the sender account to another. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + transfer: TxDescriptor>; + /** + *Move some assets from the sender account to another, keeping the sender account alive. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + transfer_keep_alive: TxDescriptor>; + /** + *Move some assets from one account to another. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `source`: The account to be debited. + *- `dest`: The account to be credited. + *- `amount`: The amount by which the `source`'s balance of assets should be reduced and + *`dest`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the `source` balance above zero but + *below the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `dest`; Post-existence of `source`; Account pre-existence of + *`dest`. + */ + force_transfer: TxDescriptor>; + /** + *Disallow further unprivileged transfers of an asset `id` from an account `who`. `who` + *must already exist as an entry in `Account`s of the asset. If you want to freeze an + *account that does not have an entry, use `touch_other` first. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + freeze: TxDescriptor>; + /** + *Allow unprivileged transfers to and from an account again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be unfrozen. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + thaw: TxDescriptor>; + /** + *Disallow further unprivileged transfers for the asset class. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + freeze_asset: TxDescriptor>; + /** + *Allow unprivileged transfers for the asset again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be thawed. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + thaw_asset: TxDescriptor>; + /** + *Change the Owner of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + transfer_ownership: TxDescriptor>; + /** + *Change the Issuer, Admin and Freezer of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + * + *Emits `TeamChanged`. + * + *Weight: `O(1)` + */ + set_team: TxDescriptor>; + /** + *Set the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Funds of sender are reserved according to the formula: + *`MetadataDepositBase + MetadataDepositPerByte * (name.len + symbol.len)` taking into + *account any already reserved funds. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(1)` + */ + set_metadata: TxDescriptor>; + /** + *Clear the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Any deposit is freed for the asset owner. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + clear_metadata: TxDescriptor>; + /** + *Force the metadata for an asset to some value. + * + *Origin must be ForceOrigin. + * + *Any deposit is left alone. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(N + S)` where N and S are the length of the name and symbol respectively. + */ + force_set_metadata: TxDescriptor>; + /** + *Clear the metadata for an asset. + * + *Origin must be ForceOrigin. + * + *Any deposit is returned. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + force_clear_metadata: TxDescriptor>; + /** + *Alter the attributes of a given asset. + * + *Origin must be `ForceOrigin`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + *- `is_sufficient`: Whether a non-zero balance of this asset is deposit of sufficient + *value to account for the state bloat associated with its balance storage. If set to + *`true`, then non-zero balances may be stored without a `consumer` reference (and thus + *an ED in the Balances pallet or whatever else is used to control user-account state + *growth). + *- `is_frozen`: Whether this asset class is frozen except for permissioned/admin + *instructions. + * + *Emits `AssetStatusChanged` with the identity of the asset. + * + *Weight: `O(1)` + */ + force_asset_status: TxDescriptor>; + /** + *Approve an amount of asset for transfer by a delegated third-party account. + * + *Origin must be Signed. + * + *Ensures that `ApprovalDeposit` worth of `Currency` is reserved from signing account + *for the purpose of holding the approval. If some non-zero amount of assets is already + *approved from signing account to `delegate`, then it is topped up or unreserved to + *meet the right value. + * + *NOTE: The signing account does not need to own `amount` of assets at the point of + *making this call. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account to delegate permission to transfer asset. + *- `amount`: The amount of asset that may be transferred by `delegate`. If there is + *already an approval in place, then this acts additively. + * + *Emits `ApprovedTransfer` on success. + * + *Weight: `O(1)` + */ + approve_transfer: TxDescriptor>; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be Signed and there must be an approval in place between signer and + *`delegate`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + cancel_approval: TxDescriptor>; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be either ForceOrigin or Signed origin with the signer being the Admin + *account of the asset `id`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + force_cancel_approval: TxDescriptor>; + /** + *Transfer some asset balance from a previously delegated account to some third-party + *account. + * + *Origin must be Signed and there must be an approval in place by the `owner` to the + *signer. + * + *If the entire amount approved for transfer is transferred, then any deposit previously + *reserved by `approve_transfer` is unreserved. + * + *- `id`: The identifier of the asset. + *- `owner`: The account which previously approved for a transfer of at least `amount` and + *from which the asset balance will be withdrawn. + *- `destination`: The account to which the asset balance of `amount` will be transferred. + *- `amount`: The amount of assets to transfer. + * + *Emits `TransferredApproved` on success. + * + *Weight: `O(1)` + */ + transfer_approved: TxDescriptor>; + /** + *Create an asset account for non-provider assets. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed; the signer account must have sufficient funds for a deposit + * to be taken. + *- `id`: The identifier of the asset for the account to be created. + * + *Emits `Touched` event when successful. + */ + touch: TxDescriptor>; + /** + *Return the deposit (if any) of an asset account or a consumer reference (if any) of an + *account. + * + *The origin must be Signed. + * + *- `id`: The identifier of the asset for which the caller would like the deposit + * refunded. + *- `allow_burn`: If `true` then assets may be destroyed in order to complete the refund. + * + *Emits `Refunded` event when successful. + */ + refund: TxDescriptor>; + /** + *Sets the minimum balance of an asset. + * + *Only works if there aren't any accounts that are holding the asset or if + *the new value of `min_balance` is less than the old one. + * + *Origin must be Signed and the sender has to be the Owner of the + *asset `id`. + * + *- `id`: The identifier of the asset. + *- `min_balance`: The new value of `min_balance`. + * + *Emits `AssetMinBalanceChanged` event when successful. + */ + set_min_balance: TxDescriptor>; + /** + *Create an asset account for `who`. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed by `Freezer` or `Admin` of the asset `id`; the signer account + * must have sufficient funds for a deposit to be taken. + *- `id`: The identifier of the asset for the account to be created. + *- `who`: The account to be created. + * + *Emits `Touched` event when successful. + */ + touch_other: TxDescriptor>; + /** + *Return the deposit (if any) of a target asset account. Useful if you are the depositor. + * + *The origin must be Signed and either the account owner, depositor, or asset `Admin`. In + *order to burn a non-zero balance of the asset, the caller must be the account and should + *use `refund`. + * + *- `id`: The identifier of the asset for the account holding a deposit. + *- `who`: The account to refund. + * + *Emits `Refunded` event when successful. + */ + refund_other: TxDescriptor>; + /** + *Disallow further unprivileged transfers of an asset `id` to and from an account `who`. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the account's asset. + *- `who`: The account to be unblocked. + * + *Emits `Blocked`. + * + *Weight: `O(1)` + */ + block: TxDescriptor>; + }; + Uniques: { + /** + *Issue a new collection of non-fungible items from a public origin. + * + *This new collection has no items initially and its owner is the origin. + * + *The origin must conform to the configured `CreateOrigin` and have sufficient funds free. + * + *`ItemDeposit` funds of sender are reserved. + * + *Parameters: + *- `collection`: The identifier of the new collection. This must not be currently in use. + *- `admin`: The admin of this collection. The admin is the initial address of each + *member of the collection's admin team. + * + *Emits `Created` event when successful. + * + *Weight: `O(1)` + */ + create: TxDescriptor>; + /** + *Issue a new collection of non-fungible items from a privileged origin. + * + *This new collection has no items initially. + * + *The origin must conform to `ForceOrigin`. + * + *Unlike `create`, no funds are reserved. + * + *- `collection`: The identifier of the new item. This must not be currently in use. + *- `owner`: The owner of this collection of items. The owner has full superuser + * permissions + *over this item, but may later change and configure the permissions using + *`transfer_ownership` and `set_team`. + * + *Emits `ForceCreated` event when successful. + * + *Weight: `O(1)` + */ + force_create: TxDescriptor>; + /** + *Destroy a collection of fungible items. + * + *The origin must conform to `ForceOrigin` or must be `Signed` and the sender must be the + *owner of the `collection`. + * + *- `collection`: The identifier of the collection to be destroyed. + *- `witness`: Information on the items minted in the collection. This must be + *correct. + * + *Emits `Destroyed` event when successful. + * + *Weight: `O(n + m)` where: + *- `n = witness.items` + *- `m = witness.item_metadatas` + *- `a = witness.attributes` + */ + destroy: TxDescriptor>; + /** + *Mint an item of a particular collection. + * + *The origin must be Signed and the sender must be the Issuer of the `collection`. + * + *- `collection`: The collection of the item to be minted. + *- `item`: The item value of the item to be minted. + *- `beneficiary`: The initial owner of the minted item. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + */ + mint: TxDescriptor>; + /** + *Destroy a single item. + * + *Origin must be Signed and the signing account must be either: + *- the Admin of the `collection`; + *- the Owner of the `item`; + * + *- `collection`: The collection of the item to be burned. + *- `item`: The item of the item to be burned. + *- `check_owner`: If `Some` then the operation will fail with `WrongOwner` unless the + * item is owned by this value. + * + *Emits `Burned` with the actual amount burned. + * + *Weight: `O(1)` + *Modes: `check_owner.is_some()`. + */ + burn: TxDescriptor>; + /** + *Move an item from the sender account to another. + * + *This resets the approved account of the item. + * + *Origin must be Signed and the signing account must be either: + *- the Admin of the `collection`; + *- the Owner of the `item`; + *- the approved delegate for the `item` (in this case, the approval is reset). + * + *Arguments: + *- `collection`: The collection of the item to be transferred. + *- `item`: The item of the item to be transferred. + *- `dest`: The account to receive ownership of the item. + * + *Emits `Transferred`. + * + *Weight: `O(1)` + */ + transfer: TxDescriptor>; + /** + *Reevaluate the deposits on some items. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection to be frozen. + *- `items`: The items of the collection whose deposits will be reevaluated. + * + *NOTE: This exists as a best-effort function. Any items which are unknown or + *in the case that the owner account does not have reservable funds to pay for a + *deposit increase are ignored. Generally the owner isn't going to call this on items + *whose existing deposit is less than the refreshed deposit as it would only cost them, + *so it's of little consequence. + * + *It will still return an error in the case that the collection is unknown of the signer + *is not permitted to call it. + * + *Weight: `O(items.len())` + */ + redeposit: TxDescriptor>; + /** + *Disallow further unprivileged transfer of an item. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection of the item to be frozen. + *- `item`: The item of the item to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + freeze: TxDescriptor>; + /** + *Re-allow unprivileged transfer of an item. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection of the item to be thawed. + *- `item`: The item of the item to be thawed. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + thaw: TxDescriptor>; + /** + *Disallow further unprivileged transfers for a whole collection. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection to be frozen. + * + *Emits `CollectionFrozen`. + * + *Weight: `O(1)` + */ + freeze_collection: TxDescriptor>; + /** + *Re-allow unprivileged transfers for a whole collection. + * + *Origin must be Signed and the sender should be the Admin of the `collection`. + * + *- `collection`: The collection to be thawed. + * + *Emits `CollectionThawed`. + * + *Weight: `O(1)` + */ + thaw_collection: TxDescriptor>; + /** + *Change the Owner of a collection. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection whose owner should be changed. + *- `owner`: The new Owner of this collection. They must have called + * `set_accept_ownership` with `collection` in order for this operation to succeed. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + transfer_ownership: TxDescriptor>; + /** + *Change the Issuer, Admin and Freezer of a collection. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection whose team should be changed. + *- `issuer`: The new Issuer of this collection. + *- `admin`: The new Admin of this collection. + *- `freezer`: The new Freezer of this collection. + * + *Emits `TeamChanged`. + * + *Weight: `O(1)` + */ + set_team: TxDescriptor>; + /** + *Approve an item to be transferred by a delegated third-party account. + * + *The origin must conform to `ForceOrigin` or must be `Signed` and the sender must be + *either the owner of the `item` or the admin of the collection. + * + *- `collection`: The collection of the item to be approved for delegated transfer. + *- `item`: The item of the item to be approved for delegated transfer. + *- `delegate`: The account to delegate permission to transfer the item. + * + *Important NOTE: The `approved` account gets reset after each transfer. + * + *Emits `ApprovedTransfer` on success. + * + *Weight: `O(1)` + */ + approve_transfer: TxDescriptor>; + /** + *Cancel the prior approval for the transfer of an item by a delegate. + * + *Origin must be either: + *- the `Force` origin; + *- `Signed` with the signer being the Admin of the `collection`; + *- `Signed` with the signer being the Owner of the `item`; + * + *Arguments: + *- `collection`: The collection of the item of whose approval will be cancelled. + *- `item`: The item of the item of whose approval will be cancelled. + *- `maybe_check_delegate`: If `Some` will ensure that the given account is the one to + * which permission of transfer is delegated. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + cancel_approval: TxDescriptor>; + /** + *Alter the attributes of a given item. + * + *Origin must be `ForceOrigin`. + * + *- `collection`: The identifier of the item. + *- `owner`: The new Owner of this item. + *- `issuer`: The new Issuer of this item. + *- `admin`: The new Admin of this item. + *- `freezer`: The new Freezer of this item. + *- `free_holding`: Whether a deposit is taken for holding an item of this collection. + *- `is_frozen`: Whether this collection is frozen except for permissioned/admin + *instructions. + * + *Emits `ItemStatusChanged` with the identity of the item. + * + *Weight: `O(1)` + */ + force_item_status: TxDescriptor>; + /** + *Set an attribute for a collection or item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`collection`. + * + *If the origin is Signed, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * (key.len + value.len)` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `maybe_item`: The identifier of the item whose metadata to set. + *- `key`: The key of the attribute. + *- `value`: The value to which to set the attribute. + * + *Emits `AttributeSet`. + * + *Weight: `O(1)` + */ + set_attribute: TxDescriptor>; + /** + *Clear an attribute for a collection or item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`collection`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose item's metadata to clear. + *- `maybe_item`: The identifier of the item whose metadata to clear. + *- `key`: The key of the attribute. + * + *Emits `AttributeCleared`. + * + *Weight: `O(1)` + */ + clear_attribute: TxDescriptor>; + /** + *Set the metadata for an item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`collection`. + * + *If the origin is Signed, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * data.len` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `item`: The identifier of the item whose metadata to set. + *- `data`: The general information of this item. Limited in length by `StringLimit`. + *- `is_frozen`: Whether the metadata should be frozen against further changes. + * + *Emits `MetadataSet`. + * + *Weight: `O(1)` + */ + set_metadata: TxDescriptor>; + /** + *Clear the metadata for an item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`item`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose item's metadata to clear. + *- `item`: The identifier of the item whose metadata to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + clear_metadata: TxDescriptor>; + /** + *Set the metadata for a collection. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Owner of + *the `collection`. + * + *If the origin is `Signed`, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * data.len` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the item whose metadata to update. + *- `data`: The general information of this item. Limited in length by `StringLimit`. + *- `is_frozen`: Whether the metadata should be frozen against further changes. + * + *Emits `CollectionMetadataSet`. + * + *Weight: `O(1)` + */ + set_collection_metadata: TxDescriptor>; + /** + *Clear the metadata for a collection. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Owner of + *the `collection`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose metadata to clear. + * + *Emits `CollectionMetadataCleared`. + * + *Weight: `O(1)` + */ + clear_collection_metadata: TxDescriptor>; + /** + *Set (or reset) the acceptance of ownership for a particular account. + * + *Origin must be `Signed` and if `maybe_collection` is `Some`, then the signer must have a + *provider reference. + * + *- `maybe_collection`: The identifier of the collection whose ownership the signer is + * willing to accept, or if `None`, an indication that the signer is willing to accept no + * ownership transferal. + * + *Emits `OwnershipAcceptanceChanged`. + */ + set_accept_ownership: TxDescriptor>; + /** + *Set the maximum amount of items a collection could have. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Owner of + *the `collection`. + * + *Note: This function can only succeed once per collection. + * + *- `collection`: The identifier of the collection to change. + *- `max_supply`: The maximum amount of items a collection could have. + * + *Emits `CollectionMaxSupplySet` event when successful. + */ + set_collection_max_supply: TxDescriptor>; + /** + *Set (or reset) the price for an item. + * + *Origin must be Signed and must be the owner of the asset `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item to set the price for. + *- `price`: The price for the item. Pass `None`, to reset the price. + *- `buyer`: Restricts the buy operation to a specific account. + * + *Emits `ItemPriceSet` on success if the price is not `None`. + *Emits `ItemPriceRemoved` on success if the price is `None`. + */ + set_price: TxDescriptor>; + /** + *Allows to buy an item if it's up for sale. + * + *Origin must be Signed and must not be the owner of the `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item the sender wants to buy. + *- `bid_price`: The price the sender is willing to pay. + * + *Emits `ItemBought` on success. + */ + buy_item: TxDescriptor>; + }; + Nfts: { + /** + *Issue a new collection of non-fungible items from a public origin. + * + *This new collection has no items initially and its owner is the origin. + * + *The origin must be Signed and the sender must have sufficient funds free. + * + *`CollectionDeposit` funds of sender are reserved. + * + *Parameters: + *- `admin`: The admin of this collection. The admin is the initial address of each + *member of the collection's admin team. + * + *Emits `Created` event when successful. + * + *Weight: `O(1)` + */ + create: TxDescriptor>; + /** + *Issue a new collection of non-fungible items from a privileged origin. + * + *This new collection has no items initially. + * + *The origin must conform to `ForceOrigin`. + * + *Unlike `create`, no funds are reserved. + * + *- `owner`: The owner of this collection of items. The owner has full superuser + * permissions over this item, but may later change and configure the permissions using + * `transfer_ownership` and `set_team`. + * + *Emits `ForceCreated` event when successful. + * + *Weight: `O(1)` + */ + force_create: TxDescriptor>; + /** + *Destroy a collection of fungible items. + * + *The origin must conform to `ForceOrigin` or must be `Signed` and the sender must be the + *owner of the `collection`. + * + *NOTE: The collection must have 0 items to be destroyed. + * + *- `collection`: The identifier of the collection to be destroyed. + *- `witness`: Information on the items minted in the collection. This must be + *correct. + * + *Emits `Destroyed` event when successful. + * + *Weight: `O(m + c + a)` where: + *- `m = witness.item_metadatas` + *- `c = witness.item_configs` + *- `a = witness.attributes` + */ + destroy: TxDescriptor>; + /** + *Mint an item of a particular collection. + * + *The origin must be Signed and the sender must comply with the `mint_settings` rules. + * + *- `collection`: The collection of the item to be minted. + *- `item`: An identifier of the new item. + *- `mint_to`: Account into which the item will be minted. + *- `witness_data`: When the mint type is `HolderOf(collection_id)`, then the owned + * item_id from that collection needs to be provided within the witness data object. If + * the mint price is set, then it should be additionally confirmed in the `witness_data`. + * + *Note: the deposit will be taken from the `origin` and not the `owner` of the `item`. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + */ + mint: TxDescriptor>; + /** + *Mint an item of a particular collection from a privileged origin. + * + *The origin must conform to `ForceOrigin` or must be `Signed` and the sender must be the + *Issuer of the `collection`. + * + *- `collection`: The collection of the item to be minted. + *- `item`: An identifier of the new item. + *- `mint_to`: Account into which the item will be minted. + *- `item_config`: A config of the new item. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + */ + force_mint: TxDescriptor>; + /** + *Destroy a single item. + * + *The origin must conform to `ForceOrigin` or must be Signed and the signing account must + *be the owner of the `item`. + * + *- `collection`: The collection of the item to be burned. + *- `item`: The item to be burned. + * + *Emits `Burned`. + * + *Weight: `O(1)` + */ + burn: TxDescriptor>; + /** + *Move an item from the sender account to another. + * + *Origin must be Signed and the signing account must be either: + *- the Owner of the `item`; + *- the approved delegate for the `item` (in this case, the approval is reset). + * + *Arguments: + *- `collection`: The collection of the item to be transferred. + *- `item`: The item to be transferred. + *- `dest`: The account to receive ownership of the item. + * + *Emits `Transferred`. + * + *Weight: `O(1)` + */ + transfer: TxDescriptor>; + /** + *Re-evaluate the deposits on some items. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection of the items to be reevaluated. + *- `items`: The items of the collection whose deposits will be reevaluated. + * + *NOTE: This exists as a best-effort function. Any items which are unknown or + *in the case that the owner account does not have reservable funds to pay for a + *deposit increase are ignored. Generally the owner isn't going to call this on items + *whose existing deposit is less than the refreshed deposit as it would only cost them, + *so it's of little consequence. + * + *It will still return an error in the case that the collection is unknown or the signer + *is not permitted to call it. + * + *Weight: `O(items.len())` + */ + redeposit: TxDescriptor>; + /** + *Disallow further unprivileged transfer of an item. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection of the item to be changed. + *- `item`: The item to become non-transferable. + * + *Emits `ItemTransferLocked`. + * + *Weight: `O(1)` + */ + lock_item_transfer: TxDescriptor>; + /** + *Re-allow unprivileged transfer of an item. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection of the item to be changed. + *- `item`: The item to become transferable. + * + *Emits `ItemTransferUnlocked`. + * + *Weight: `O(1)` + */ + unlock_item_transfer: TxDescriptor>; + /** + *Disallows specified settings for the whole collection. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection to be locked. + *- `lock_settings`: The settings to be locked. + * + *Note: it's possible to only lock(set) the setting, but not to unset it. + * + *Emits `CollectionLocked`. + * + *Weight: `O(1)` + */ + lock_collection: TxDescriptor>; + /** + *Change the Owner of a collection. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection whose owner should be changed. + *- `owner`: The new Owner of this collection. They must have called + * `set_accept_ownership` with `collection` in order for this operation to succeed. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + transfer_ownership: TxDescriptor>; + /** + *Change the Issuer, Admin and Freezer of a collection. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`collection`. + * + *Note: by setting the role to `None` only the `ForceOrigin` will be able to change it + *after to `Some(account)`. + * + *- `collection`: The collection whose team should be changed. + *- `issuer`: The new Issuer of this collection. + *- `admin`: The new Admin of this collection. + *- `freezer`: The new Freezer of this collection. + * + *Emits `TeamChanged`. + * + *Weight: `O(1)` + */ + set_team: TxDescriptor>; + /** + *Change the Owner of a collection. + * + *Origin must be `ForceOrigin`. + * + *- `collection`: The identifier of the collection. + *- `owner`: The new Owner of this collection. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + force_collection_owner: TxDescriptor>; + /** + *Change the config of a collection. + * + *Origin must be `ForceOrigin`. + * + *- `collection`: The identifier of the collection. + *- `config`: The new config of this collection. + * + *Emits `CollectionConfigChanged`. + * + *Weight: `O(1)` + */ + force_collection_config: TxDescriptor>; + /** + *Approve an item to be transferred by a delegated third-party account. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`item`. + * + *- `collection`: The collection of the item to be approved for delegated transfer. + *- `item`: The item to be approved for delegated transfer. + *- `delegate`: The account to delegate permission to transfer the item. + *- `maybe_deadline`: Optional deadline for the approval. Specified by providing the + * number of blocks after which the approval will expire + * + *Emits `TransferApproved` on success. + * + *Weight: `O(1)` + */ + approve_transfer: TxDescriptor>; + /** + *Cancel one of the transfer approvals for a specific item. + * + *Origin must be either: + *- the `Force` origin; + *- `Signed` with the signer being the Owner of the `item`; + * + *Arguments: + *- `collection`: The collection of the item of whose approval will be cancelled. + *- `item`: The item of the collection of whose approval will be cancelled. + *- `delegate`: The account that is going to loose their approval. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + cancel_approval: TxDescriptor>; + /** + *Cancel all the approvals of a specific item. + * + *Origin must be either: + *- the `Force` origin; + *- `Signed` with the signer being the Owner of the `item`; + * + *Arguments: + *- `collection`: The collection of the item of whose approvals will be cleared. + *- `item`: The item of the collection of whose approvals will be cleared. + * + *Emits `AllApprovalsCancelled` on success. + * + *Weight: `O(1)` + */ + clear_all_transfer_approvals: TxDescriptor>; + /** + *Disallows changing the metadata or attributes of the item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Admin + *of the `collection`. + * + *- `collection`: The collection if the `item`. + *- `item`: An item to be locked. + *- `lock_metadata`: Specifies whether the metadata should be locked. + *- `lock_attributes`: Specifies whether the attributes in the `CollectionOwner` namespace + * should be locked. + * + *Note: `lock_attributes` affects the attributes in the `CollectionOwner` namespace only. + *When the metadata or attributes are locked, it won't be possible the unlock them. + * + *Emits `ItemPropertiesLocked`. + * + *Weight: `O(1)` + */ + lock_item_properties: TxDescriptor>; + /** + *Set an attribute for a collection or item. + * + *Origin must be Signed and must conform to the namespace ruleset: + *- `CollectionOwner` namespace could be modified by the `collection` Admin only; + *- `ItemOwner` namespace could be modified by the `maybe_item` owner only. `maybe_item` + * should be set in that case; + *- `Account(AccountId)` namespace could be modified only when the `origin` was given a + * permission to do so; + * + *The funds of `origin` are reserved according to the formula: + *`AttributeDepositBase + DepositPerByte * (key.len + value.len)` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `maybe_item`: The identifier of the item whose metadata to set. + *- `namespace`: Attribute's namespace. + *- `key`: The key of the attribute. + *- `value`: The value to which to set the attribute. + * + *Emits `AttributeSet`. + * + *Weight: `O(1)` + */ + set_attribute: TxDescriptor>; + /** + *Force-set an attribute for a collection or item. + * + *Origin must be `ForceOrigin`. + * + *If the attribute already exists and it was set by another account, the deposit + *will be returned to the previous owner. + * + *- `set_as`: An optional owner of the attribute. + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `maybe_item`: The identifier of the item whose metadata to set. + *- `namespace`: Attribute's namespace. + *- `key`: The key of the attribute. + *- `value`: The value to which to set the attribute. + * + *Emits `AttributeSet`. + * + *Weight: `O(1)` + */ + force_set_attribute: TxDescriptor>; + /** + *Clear an attribute for a collection or item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *attribute. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose item's metadata to clear. + *- `maybe_item`: The identifier of the item whose metadata to clear. + *- `namespace`: Attribute's namespace. + *- `key`: The key of the attribute. + * + *Emits `AttributeCleared`. + * + *Weight: `O(1)` + */ + clear_attribute: TxDescriptor>; + /** + *Approve item's attributes to be changed by a delegated third-party account. + * + *Origin must be Signed and must be an owner of the `item`. + * + *- `collection`: A collection of the item. + *- `item`: The item that holds attributes. + *- `delegate`: The account to delegate permission to change attributes of the item. + * + *Emits `ItemAttributesApprovalAdded` on success. + */ + approve_item_attributes: TxDescriptor>; + /** + *Cancel the previously provided approval to change item's attributes. + *All the previously set attributes by the `delegate` will be removed. + * + *Origin must be Signed and must be an owner of the `item`. + * + *- `collection`: Collection that the item is contained within. + *- `item`: The item that holds attributes. + *- `delegate`: The previously approved account to remove. + * + *Emits `ItemAttributesApprovalRemoved` on success. + */ + cancel_item_attributes_approval: TxDescriptor>; + /** + *Set the metadata for an item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Admin of the + *`collection`. + * + *If the origin is Signed, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * data.len` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `item`: The identifier of the item whose metadata to set. + *- `data`: The general information of this item. Limited in length by `StringLimit`. + * + *Emits `ItemMetadataSet`. + * + *Weight: `O(1)` + */ + set_metadata: TxDescriptor>; + /** + *Clear the metadata for an item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Admin of the + *`collection`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose item's metadata to clear. + *- `item`: The identifier of the item whose metadata to clear. + * + *Emits `ItemMetadataCleared`. + * + *Weight: `O(1)` + */ + clear_metadata: TxDescriptor>; + /** + *Set the metadata for a collection. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Admin of + *the `collection`. + * + *If the origin is `Signed`, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * data.len` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the item whose metadata to update. + *- `data`: The general information of this item. Limited in length by `StringLimit`. + * + *Emits `CollectionMetadataSet`. + * + *Weight: `O(1)` + */ + set_collection_metadata: TxDescriptor>; + /** + *Clear the metadata for a collection. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Admin of + *the `collection`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose metadata to clear. + * + *Emits `CollectionMetadataCleared`. + * + *Weight: `O(1)` + */ + clear_collection_metadata: TxDescriptor>; + /** + *Set (or reset) the acceptance of ownership for a particular account. + * + *Origin must be `Signed` and if `maybe_collection` is `Some`, then the signer must have a + *provider reference. + * + *- `maybe_collection`: The identifier of the collection whose ownership the signer is + * willing to accept, or if `None`, an indication that the signer is willing to accept no + * ownership transferal. + * + *Emits `OwnershipAcceptanceChanged`. + */ + set_accept_ownership: TxDescriptor>; + /** + *Set the maximum number of items a collection could have. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Owner of + *the `collection`. + * + *- `collection`: The identifier of the collection to change. + *- `max_supply`: The maximum number of items a collection could have. + * + *Emits `CollectionMaxSupplySet` event when successful. + */ + set_collection_max_supply: TxDescriptor>; + /** + *Update mint settings. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Issuer + *of the `collection`. + * + *- `collection`: The identifier of the collection to change. + *- `mint_settings`: The new mint settings. + * + *Emits `CollectionMintSettingsUpdated` event when successful. + */ + update_mint_settings: TxDescriptor>; + /** + *Set (or reset) the price for an item. + * + *Origin must be Signed and must be the owner of the `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item to set the price for. + *- `price`: The price for the item. Pass `None`, to reset the price. + *- `buyer`: Restricts the buy operation to a specific account. + * + *Emits `ItemPriceSet` on success if the price is not `None`. + *Emits `ItemPriceRemoved` on success if the price is `None`. + */ + set_price: TxDescriptor>; + /** + *Allows to buy an item if it's up for sale. + * + *Origin must be Signed and must not be the owner of the `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item the sender wants to buy. + *- `bid_price`: The price the sender is willing to pay. + * + *Emits `ItemBought` on success. + */ + buy_item: TxDescriptor>; + /** + *Allows to pay the tips. + * + *Origin must be Signed. + * + *- `tips`: Tips array. + * + *Emits `TipSent` on every tip transfer. + */ + pay_tips: TxDescriptor>; + /** + *Register a new atomic swap, declaring an intention to send an `item` in exchange for + *`desired_item` from origin to target on the current blockchain. + *The target can execute the swap during the specified `duration` of blocks (if set). + *Additionally, the price could be set for the desired `item`. + * + *Origin must be Signed and must be an owner of the `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item an owner wants to give. + *- `desired_collection`: The collection of the desired item. + *- `desired_item`: The desired item an owner wants to receive. + *- `maybe_price`: The price an owner is willing to pay or receive for the desired `item`. + *- `duration`: A deadline for the swap. Specified by providing the number of blocks + * after which the swap will expire. + * + *Emits `SwapCreated` on success. + */ + create_swap: TxDescriptor>; + /** + *Cancel an atomic swap. + * + *Origin must be Signed. + *Origin must be an owner of the `item` if the deadline hasn't expired. + * + *- `collection`: The collection of the item. + *- `item`: The item an owner wants to give. + * + *Emits `SwapCancelled` on success. + */ + cancel_swap: TxDescriptor>; + /** + *Claim an atomic swap. + *This method executes a pending swap, that was created by a counterpart before. + * + *Origin must be Signed and must be an owner of the `item`. + * + *- `send_collection`: The collection of the item to be sent. + *- `send_item`: The item to be sent. + *- `receive_collection`: The collection of the item to be received. + *- `receive_item`: The item to be received. + *- `witness_price`: A price that was previously agreed on. + * + *Emits `SwapClaimed` on success. + */ + claim_swap: TxDescriptor>; + /** + *Mint an item by providing the pre-signed approval. + * + *Origin must be Signed. + * + *- `mint_data`: The pre-signed approval that consists of the information about the item, + * its metadata, attributes, who can mint it (`None` for anyone) and until what block + * number. + *- `signature`: The signature of the `data` object. + *- `signer`: The `data` object's signer. Should be an Issuer of the collection. + * + *Emits `Issued` on success. + *Emits `AttributeSet` if the attributes were provided. + *Emits `ItemMetadataSet` if the metadata was not empty. + */ + mint_pre_signed: TxDescriptor>; + /** + *Set attributes for an item by providing the pre-signed approval. + * + *Origin must be Signed and must be an owner of the `data.item`. + * + *- `data`: The pre-signed approval that consists of the information about the item, + * attributes to update and until what block number. + *- `signature`: The signature of the `data` object. + *- `signer`: The `data` object's signer. Should be an Admin of the collection for the + * `CollectionOwner` namespace. + * + *Emits `AttributeSet` for each provided attribute. + *Emits `ItemAttributesApprovalAdded` if the approval wasn't set before. + *Emits `PreSignedAttributesSet` on success. + */ + set_attributes_pre_signed: TxDescriptor>; + }; + ForeignAssets: { + /** + *Issue a new class of fungible assets from a public origin. + * + *This new asset class has no assets initially and its owner is the origin. + * + *The origin must conform to the configured `CreateOrigin` and have sufficient funds free. + * + *Funds of sender are reserved by `AssetDeposit`. + * + *Parameters: + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `admin`: The admin of this class of assets. The admin is the initial address of each + *member of the asset class's admin team. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `Created` event when successful. + * + *Weight: `O(1)` + */ + create: TxDescriptor>; + /** + *Issue a new class of fungible assets from a privileged origin. + * + *This new asset class has no assets initially. + * + *The origin must conform to `ForceOrigin`. + * + *Unlike `create`, no funds are reserved. + * + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `owner`: The owner of this class of assets. The owner has full superuser permissions + *over this asset, but may later change and configure the permissions using + *`transfer_ownership` and `set_team`. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `ForceCreated` event when successful. + * + *Weight: `O(1)` + */ + force_create: TxDescriptor>; + /** + *Start the process of destroying a fungible asset class. + * + *`start_destroy` is the first in a series of extrinsics that should be called, to allow + *destruction of an asset class. + * + *The origin must conform to `ForceOrigin` or must be `Signed` by the asset's `owner`. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *The asset class must be frozen before calling `start_destroy`. + */ + start_destroy: TxDescriptor>; + /** + *Destroy all accounts associated with a given asset. + * + *`destroy_accounts` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all accounts. It will destroy `RemoveItemsLimit` accounts at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedAccounts` event. + */ + destroy_accounts: TxDescriptor>; + /** + *Destroy all approvals associated with a given asset up to the max (T::RemoveItemsLimit). + * + *`destroy_approvals` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all approvals. It will destroy `RemoveItemsLimit` approvals at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedApprovals` event. + */ + destroy_approvals: TxDescriptor>; + /** + *Complete destroying asset and unreserve currency. + * + *`finish_destroy` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. All accounts or approvals should be destroyed before + *hand. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each successful call emits the `Event::Destroyed` event. + */ + finish_destroy: TxDescriptor>; + /** + *Mint assets of a particular class. + * + *The origin must be Signed and the sender must be the Issuer of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount minted. + *- `beneficiary`: The account to be credited with the minted assets. + *- `amount`: The amount of the asset to be minted. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + *Modes: Pre-existing balance of `beneficiary`; Account pre-existence of `beneficiary`. + */ + mint: TxDescriptor>; + /** + *Reduce the balance of `who` by as much as possible up to `amount` assets of `id`. + * + *Origin must be Signed and the sender should be the Manager of the asset `id`. + * + *Bails with `NoAccount` if the `who` is already dead. + * + *- `id`: The identifier of the asset to have some amount burned. + *- `who`: The account to be debited from. + *- `amount`: The maximum amount by which `who`'s balance should be reduced. + * + *Emits `Burned` with the actual amount burned. If this takes the balance to below the + *minimum for the asset, then the amount burned is increased to take it to zero. + * + *Weight: `O(1)` + *Modes: Post-existence of `who`; Pre & post Zombie-status of `who`. + */ + burn: TxDescriptor>; + /** + *Move some assets from the sender account to another. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + transfer: TxDescriptor>; + /** + *Move some assets from the sender account to another, keeping the sender account alive. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + transfer_keep_alive: TxDescriptor>; + /** + *Move some assets from one account to another. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `source`: The account to be debited. + *- `dest`: The account to be credited. + *- `amount`: The amount by which the `source`'s balance of assets should be reduced and + *`dest`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the `source` balance above zero but + *below the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `dest`; Post-existence of `source`; Account pre-existence of + *`dest`. + */ + force_transfer: TxDescriptor>; + /** + *Disallow further unprivileged transfers of an asset `id` from an account `who`. `who` + *must already exist as an entry in `Account`s of the asset. If you want to freeze an + *account that does not have an entry, use `touch_other` first. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + freeze: TxDescriptor>; + /** + *Allow unprivileged transfers to and from an account again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be unfrozen. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + thaw: TxDescriptor>; + /** + *Disallow further unprivileged transfers for the asset class. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + freeze_asset: TxDescriptor>; + /** + *Allow unprivileged transfers for the asset again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be thawed. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + thaw_asset: TxDescriptor>; + /** + *Change the Owner of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + transfer_ownership: TxDescriptor>; + /** + *Change the Issuer, Admin and Freezer of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + * + *Emits `TeamChanged`. + * + *Weight: `O(1)` + */ + set_team: TxDescriptor>; + /** + *Set the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Funds of sender are reserved according to the formula: + *`MetadataDepositBase + MetadataDepositPerByte * (name.len + symbol.len)` taking into + *account any already reserved funds. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(1)` + */ + set_metadata: TxDescriptor>; + /** + *Clear the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Any deposit is freed for the asset owner. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + clear_metadata: TxDescriptor>; + /** + *Force the metadata for an asset to some value. + * + *Origin must be ForceOrigin. + * + *Any deposit is left alone. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(N + S)` where N and S are the length of the name and symbol respectively. + */ + force_set_metadata: TxDescriptor>; + /** + *Clear the metadata for an asset. + * + *Origin must be ForceOrigin. + * + *Any deposit is returned. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + force_clear_metadata: TxDescriptor>; + /** + *Alter the attributes of a given asset. + * + *Origin must be `ForceOrigin`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + *- `is_sufficient`: Whether a non-zero balance of this asset is deposit of sufficient + *value to account for the state bloat associated with its balance storage. If set to + *`true`, then non-zero balances may be stored without a `consumer` reference (and thus + *an ED in the Balances pallet or whatever else is used to control user-account state + *growth). + *- `is_frozen`: Whether this asset class is frozen except for permissioned/admin + *instructions. + * + *Emits `AssetStatusChanged` with the identity of the asset. + * + *Weight: `O(1)` + */ + force_asset_status: TxDescriptor>; + /** + *Approve an amount of asset for transfer by a delegated third-party account. + * + *Origin must be Signed. + * + *Ensures that `ApprovalDeposit` worth of `Currency` is reserved from signing account + *for the purpose of holding the approval. If some non-zero amount of assets is already + *approved from signing account to `delegate`, then it is topped up or unreserved to + *meet the right value. + * + *NOTE: The signing account does not need to own `amount` of assets at the point of + *making this call. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account to delegate permission to transfer asset. + *- `amount`: The amount of asset that may be transferred by `delegate`. If there is + *already an approval in place, then this acts additively. + * + *Emits `ApprovedTransfer` on success. + * + *Weight: `O(1)` + */ + approve_transfer: TxDescriptor>; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be Signed and there must be an approval in place between signer and + *`delegate`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + cancel_approval: TxDescriptor>; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be either ForceOrigin or Signed origin with the signer being the Admin + *account of the asset `id`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + force_cancel_approval: TxDescriptor>; + /** + *Transfer some asset balance from a previously delegated account to some third-party + *account. + * + *Origin must be Signed and there must be an approval in place by the `owner` to the + *signer. + * + *If the entire amount approved for transfer is transferred, then any deposit previously + *reserved by `approve_transfer` is unreserved. + * + *- `id`: The identifier of the asset. + *- `owner`: The account which previously approved for a transfer of at least `amount` and + *from which the asset balance will be withdrawn. + *- `destination`: The account to which the asset balance of `amount` will be transferred. + *- `amount`: The amount of assets to transfer. + * + *Emits `TransferredApproved` on success. + * + *Weight: `O(1)` + */ + transfer_approved: TxDescriptor>; + /** + *Create an asset account for non-provider assets. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed; the signer account must have sufficient funds for a deposit + * to be taken. + *- `id`: The identifier of the asset for the account to be created. + * + *Emits `Touched` event when successful. + */ + touch: TxDescriptor>; + /** + *Return the deposit (if any) of an asset account or a consumer reference (if any) of an + *account. + * + *The origin must be Signed. + * + *- `id`: The identifier of the asset for which the caller would like the deposit + * refunded. + *- `allow_burn`: If `true` then assets may be destroyed in order to complete the refund. + * + *Emits `Refunded` event when successful. + */ + refund: TxDescriptor>; + /** + *Sets the minimum balance of an asset. + * + *Only works if there aren't any accounts that are holding the asset or if + *the new value of `min_balance` is less than the old one. + * + *Origin must be Signed and the sender has to be the Owner of the + *asset `id`. + * + *- `id`: The identifier of the asset. + *- `min_balance`: The new value of `min_balance`. + * + *Emits `AssetMinBalanceChanged` event when successful. + */ + set_min_balance: TxDescriptor>; + /** + *Create an asset account for `who`. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed by `Freezer` or `Admin` of the asset `id`; the signer account + * must have sufficient funds for a deposit to be taken. + *- `id`: The identifier of the asset for the account to be created. + *- `who`: The account to be created. + * + *Emits `Touched` event when successful. + */ + touch_other: TxDescriptor>; + /** + *Return the deposit (if any) of a target asset account. Useful if you are the depositor. + * + *The origin must be Signed and either the account owner, depositor, or asset `Admin`. In + *order to burn a non-zero balance of the asset, the caller must be the account and should + *use `refund`. + * + *- `id`: The identifier of the asset for the account holding a deposit. + *- `who`: The account to refund. + * + *Emits `Refunded` event when successful. + */ + refund_other: TxDescriptor>; + /** + *Disallow further unprivileged transfers of an asset `id` to and from an account `who`. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the account's asset. + *- `who`: The account to be unblocked. + * + *Emits `Blocked`. + * + *Weight: `O(1)` + */ + block: TxDescriptor>; + }; + PoolAssets: { + /** + *Issue a new class of fungible assets from a public origin. + * + *This new asset class has no assets initially and its owner is the origin. + * + *The origin must conform to the configured `CreateOrigin` and have sufficient funds free. + * + *Funds of sender are reserved by `AssetDeposit`. + * + *Parameters: + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `admin`: The admin of this class of assets. The admin is the initial address of each + *member of the asset class's admin team. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `Created` event when successful. + * + *Weight: `O(1)` + */ + create: TxDescriptor>; + /** + *Issue a new class of fungible assets from a privileged origin. + * + *This new asset class has no assets initially. + * + *The origin must conform to `ForceOrigin`. + * + *Unlike `create`, no funds are reserved. + * + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `owner`: The owner of this class of assets. The owner has full superuser permissions + *over this asset, but may later change and configure the permissions using + *`transfer_ownership` and `set_team`. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `ForceCreated` event when successful. + * + *Weight: `O(1)` + */ + force_create: TxDescriptor>; + /** + *Start the process of destroying a fungible asset class. + * + *`start_destroy` is the first in a series of extrinsics that should be called, to allow + *destruction of an asset class. + * + *The origin must conform to `ForceOrigin` or must be `Signed` by the asset's `owner`. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *The asset class must be frozen before calling `start_destroy`. + */ + start_destroy: TxDescriptor>; + /** + *Destroy all accounts associated with a given asset. + * + *`destroy_accounts` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all accounts. It will destroy `RemoveItemsLimit` accounts at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedAccounts` event. + */ + destroy_accounts: TxDescriptor>; + /** + *Destroy all approvals associated with a given asset up to the max (T::RemoveItemsLimit). + * + *`destroy_approvals` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all approvals. It will destroy `RemoveItemsLimit` approvals at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedApprovals` event. + */ + destroy_approvals: TxDescriptor>; + /** + *Complete destroying asset and unreserve currency. + * + *`finish_destroy` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. All accounts or approvals should be destroyed before + *hand. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each successful call emits the `Event::Destroyed` event. + */ + finish_destroy: TxDescriptor>; + /** + *Mint assets of a particular class. + * + *The origin must be Signed and the sender must be the Issuer of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount minted. + *- `beneficiary`: The account to be credited with the minted assets. + *- `amount`: The amount of the asset to be minted. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + *Modes: Pre-existing balance of `beneficiary`; Account pre-existence of `beneficiary`. + */ + mint: TxDescriptor>; + /** + *Reduce the balance of `who` by as much as possible up to `amount` assets of `id`. + * + *Origin must be Signed and the sender should be the Manager of the asset `id`. + * + *Bails with `NoAccount` if the `who` is already dead. + * + *- `id`: The identifier of the asset to have some amount burned. + *- `who`: The account to be debited from. + *- `amount`: The maximum amount by which `who`'s balance should be reduced. + * + *Emits `Burned` with the actual amount burned. If this takes the balance to below the + *minimum for the asset, then the amount burned is increased to take it to zero. + * + *Weight: `O(1)` + *Modes: Post-existence of `who`; Pre & post Zombie-status of `who`. + */ + burn: TxDescriptor>; + /** + *Move some assets from the sender account to another. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + transfer: TxDescriptor>; + /** + *Move some assets from the sender account to another, keeping the sender account alive. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + transfer_keep_alive: TxDescriptor>; + /** + *Move some assets from one account to another. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `source`: The account to be debited. + *- `dest`: The account to be credited. + *- `amount`: The amount by which the `source`'s balance of assets should be reduced and + *`dest`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the `source` balance above zero but + *below the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `dest`; Post-existence of `source`; Account pre-existence of + *`dest`. + */ + force_transfer: TxDescriptor>; + /** + *Disallow further unprivileged transfers of an asset `id` from an account `who`. `who` + *must already exist as an entry in `Account`s of the asset. If you want to freeze an + *account that does not have an entry, use `touch_other` first. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + freeze: TxDescriptor>; + /** + *Allow unprivileged transfers to and from an account again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be unfrozen. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + thaw: TxDescriptor>; + /** + *Disallow further unprivileged transfers for the asset class. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + freeze_asset: TxDescriptor>; + /** + *Allow unprivileged transfers for the asset again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be thawed. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + thaw_asset: TxDescriptor>; + /** + *Change the Owner of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + transfer_ownership: TxDescriptor>; + /** + *Change the Issuer, Admin and Freezer of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + * + *Emits `TeamChanged`. + * + *Weight: `O(1)` + */ + set_team: TxDescriptor>; + /** + *Set the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Funds of sender are reserved according to the formula: + *`MetadataDepositBase + MetadataDepositPerByte * (name.len + symbol.len)` taking into + *account any already reserved funds. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(1)` + */ + set_metadata: TxDescriptor>; + /** + *Clear the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Any deposit is freed for the asset owner. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + clear_metadata: TxDescriptor>; + /** + *Force the metadata for an asset to some value. + * + *Origin must be ForceOrigin. + * + *Any deposit is left alone. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(N + S)` where N and S are the length of the name and symbol respectively. + */ + force_set_metadata: TxDescriptor>; + /** + *Clear the metadata for an asset. + * + *Origin must be ForceOrigin. + * + *Any deposit is returned. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + force_clear_metadata: TxDescriptor>; + /** + *Alter the attributes of a given asset. + * + *Origin must be `ForceOrigin`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + *- `is_sufficient`: Whether a non-zero balance of this asset is deposit of sufficient + *value to account for the state bloat associated with its balance storage. If set to + *`true`, then non-zero balances may be stored without a `consumer` reference (and thus + *an ED in the Balances pallet or whatever else is used to control user-account state + *growth). + *- `is_frozen`: Whether this asset class is frozen except for permissioned/admin + *instructions. + * + *Emits `AssetStatusChanged` with the identity of the asset. + * + *Weight: `O(1)` + */ + force_asset_status: TxDescriptor>; + /** + *Approve an amount of asset for transfer by a delegated third-party account. + * + *Origin must be Signed. + * + *Ensures that `ApprovalDeposit` worth of `Currency` is reserved from signing account + *for the purpose of holding the approval. If some non-zero amount of assets is already + *approved from signing account to `delegate`, then it is topped up or unreserved to + *meet the right value. + * + *NOTE: The signing account does not need to own `amount` of assets at the point of + *making this call. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account to delegate permission to transfer asset. + *- `amount`: The amount of asset that may be transferred by `delegate`. If there is + *already an approval in place, then this acts additively. + * + *Emits `ApprovedTransfer` on success. + * + *Weight: `O(1)` + */ + approve_transfer: TxDescriptor>; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be Signed and there must be an approval in place between signer and + *`delegate`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + cancel_approval: TxDescriptor>; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be either ForceOrigin or Signed origin with the signer being the Admin + *account of the asset `id`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + force_cancel_approval: TxDescriptor>; + /** + *Transfer some asset balance from a previously delegated account to some third-party + *account. + * + *Origin must be Signed and there must be an approval in place by the `owner` to the + *signer. + * + *If the entire amount approved for transfer is transferred, then any deposit previously + *reserved by `approve_transfer` is unreserved. + * + *- `id`: The identifier of the asset. + *- `owner`: The account which previously approved for a transfer of at least `amount` and + *from which the asset balance will be withdrawn. + *- `destination`: The account to which the asset balance of `amount` will be transferred. + *- `amount`: The amount of assets to transfer. + * + *Emits `TransferredApproved` on success. + * + *Weight: `O(1)` + */ + transfer_approved: TxDescriptor>; + /** + *Create an asset account for non-provider assets. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed; the signer account must have sufficient funds for a deposit + * to be taken. + *- `id`: The identifier of the asset for the account to be created. + * + *Emits `Touched` event when successful. + */ + touch: TxDescriptor>; + /** + *Return the deposit (if any) of an asset account or a consumer reference (if any) of an + *account. + * + *The origin must be Signed. + * + *- `id`: The identifier of the asset for which the caller would like the deposit + * refunded. + *- `allow_burn`: If `true` then assets may be destroyed in order to complete the refund. + * + *Emits `Refunded` event when successful. + */ + refund: TxDescriptor>; + /** + *Sets the minimum balance of an asset. + * + *Only works if there aren't any accounts that are holding the asset or if + *the new value of `min_balance` is less than the old one. + * + *Origin must be Signed and the sender has to be the Owner of the + *asset `id`. + * + *- `id`: The identifier of the asset. + *- `min_balance`: The new value of `min_balance`. + * + *Emits `AssetMinBalanceChanged` event when successful. + */ + set_min_balance: TxDescriptor>; + /** + *Create an asset account for `who`. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed by `Freezer` or `Admin` of the asset `id`; the signer account + * must have sufficient funds for a deposit to be taken. + *- `id`: The identifier of the asset for the account to be created. + *- `who`: The account to be created. + * + *Emits `Touched` event when successful. + */ + touch_other: TxDescriptor>; + /** + *Return the deposit (if any) of a target asset account. Useful if you are the depositor. + * + *The origin must be Signed and either the account owner, depositor, or asset `Admin`. In + *order to burn a non-zero balance of the asset, the caller must be the account and should + *use `refund`. + * + *- `id`: The identifier of the asset for the account holding a deposit. + *- `who`: The account to refund. + * + *Emits `Refunded` event when successful. + */ + refund_other: TxDescriptor>; + /** + *Disallow further unprivileged transfers of an asset `id` to and from an account `who`. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the account's asset. + *- `who`: The account to be unblocked. + * + *Emits `Blocked`. + * + *Weight: `O(1)` + */ + block: TxDescriptor>; + }; + AssetConversion: { + /** + *Creates an empty liquidity pool and an associated new `lp_token` asset + *(the id of which is returned in the `Event::PoolCreated` event). + * + *Once a pool is created, someone may [`Pallet::add_liquidity`] to it. + */ + create_pool: TxDescriptor>; + /** + *Provide liquidity into the pool of `asset1` and `asset2`. + *NOTE: an optimal amount of asset1 and asset2 will be calculated and + *might be different than the provided `amount1_desired`/`amount2_desired` + *thus you should provide the min amount you're happy to provide. + *Params `amount1_min`/`amount2_min` represent that. + *`mint_to` will be sent the liquidity tokens that represent this share of the pool. + * + *NOTE: when encountering an incorrect exchange rate and non-withdrawable pool liquidity, + *batch an atomic call with [`Pallet::add_liquidity`] and + *[`Pallet::swap_exact_tokens_for_tokens`] or [`Pallet::swap_tokens_for_exact_tokens`] + *calls to render the liquidity withdrawable and rectify the exchange rate. + * + *Once liquidity is added, someone may successfully call + *[`Pallet::swap_exact_tokens_for_tokens`] successfully. + */ + add_liquidity: TxDescriptor>; + /** + *Allows you to remove liquidity by providing the `lp_token_burn` tokens that will be + *burned in the process. With the usage of `amount1_min_receive`/`amount2_min_receive` + *it's possible to control the min amount of returned tokens you're happy with. + */ + remove_liquidity: TxDescriptor>; + /** + *Swap the exact amount of `asset1` into `asset2`. + *`amount_out_min` param allows you to specify the min amount of the `asset2` + *you're happy to receive. + * + *[`AssetConversionApi::quote_price_exact_tokens_for_tokens`] runtime call can be called + *for a quote. + */ + swap_exact_tokens_for_tokens: TxDescriptor>; + /** + *Swap any amount of `asset1` to get the exact amount of `asset2`. + *`amount_in_max` param allows to specify the max amount of the `asset1` + *you're happy to provide. + * + *[`AssetConversionApi::quote_price_tokens_for_exact_tokens`] runtime call can be called + *for a quote. + */ + swap_tokens_for_exact_tokens: TxDescriptor>; + /** + *Touch an existing pool to fulfill prerequisites before providing liquidity, such as + *ensuring that the pool's accounts are in place. It is typically useful when a pool + *creator removes the pool's accounts and does not provide a liquidity. This action may + *involve holding assets from the caller as a deposit for creating the pool's accounts. + * + *The origin must be Signed. + * + *- `asset1`: The asset ID of an existing pool with a pair (asset1, asset2). + *- `asset2`: The asset ID of an existing pool with a pair (asset1, asset2). + * + *Emits `Touched` event when successful. + */ + touch: TxDescriptor>; + }; +}; +type IEvent = { + System: { + /** + *An extrinsic completed successfully. + */ + ExtrinsicSuccess: PlainDescriptor>; + /** + *An extrinsic failed. + */ + ExtrinsicFailed: PlainDescriptor>; + /** + *`:code` was updated. + */ + CodeUpdated: PlainDescriptor; + /** + *A new account was created. + */ + NewAccount: PlainDescriptor>; + /** + *An account was reaped. + */ + KilledAccount: PlainDescriptor>; + /** + *On on-chain remark happened. + */ + Remarked: PlainDescriptor>; + /** + *An upgrade was authorized. + */ + UpgradeAuthorized: PlainDescriptor>; + }; + ParachainSystem: { + /** + *The validation function has been scheduled to apply. + */ + ValidationFunctionStored: PlainDescriptor; + /** + *The validation function was applied as of the contained relay chain block number. + */ + ValidationFunctionApplied: PlainDescriptor>; + /** + *The relay-chain aborted the upgrade process. + */ + ValidationFunctionDiscarded: PlainDescriptor; + /** + *Some downward messages have been received and will be processed. + */ + DownwardMessagesReceived: PlainDescriptor>; + /** + *Downward messages were processed using the given weight. + */ + DownwardMessagesProcessed: PlainDescriptor>; + /** + *An upward message was sent to the relay chain. + */ + UpwardMessageSent: PlainDescriptor>; + }; + Balances: { + /** + *An account was created with some free balance. + */ + Endowed: PlainDescriptor>; + /** + *An account was removed whose balance was non-zero but below ExistentialDeposit, + *resulting in an outright loss. + */ + DustLost: PlainDescriptor>; + /** + *Transfer succeeded. + */ + Transfer: PlainDescriptor>; + /** + *A balance was set by root. + */ + BalanceSet: PlainDescriptor>; + /** + *Some balance was reserved (moved from free to reserved). + */ + Reserved: PlainDescriptor>; + /** + *Some balance was unreserved (moved from reserved to free). + */ + Unreserved: PlainDescriptor>; + /** + *Some balance was moved from the reserve of the first account to the second account. + *Final argument indicates the destination balance type. + */ + ReserveRepatriated: PlainDescriptor>; + /** + *Some amount was deposited (e.g. for transaction fees). + */ + Deposit: PlainDescriptor>; + /** + *Some amount was withdrawn from the account (e.g. for transaction fees). + */ + Withdraw: PlainDescriptor>; + /** + *Some amount was removed from the account (e.g. for misbehavior). + */ + Slashed: PlainDescriptor>; + /** + *Some amount was minted into an account. + */ + Minted: PlainDescriptor>; + /** + *Some amount was burned from an account. + */ + Burned: PlainDescriptor>; + /** + *Some amount was suspended from an account (it can be restored later). + */ + Suspended: PlainDescriptor>; + /** + *Some amount was restored into an account. + */ + Restored: PlainDescriptor>; + /** + *An account was upgraded. + */ + Upgraded: PlainDescriptor>; + /** + *Total issuance was increased by `amount`, creating a credit to be balanced. + */ + Issued: PlainDescriptor>; + /** + *Total issuance was decreased by `amount`, creating a debt to be balanced. + */ + Rescinded: PlainDescriptor>; + /** + *Some balance was locked. + */ + Locked: PlainDescriptor>; + /** + *Some balance was unlocked. + */ + Unlocked: PlainDescriptor>; + /** + *Some balance was frozen. + */ + Frozen: PlainDescriptor>; + /** + *Some balance was thawed. + */ + Thawed: PlainDescriptor>; + /** + *The `TotalIssuance` was forcefully changed. + */ + TotalIssuanceForced: PlainDescriptor>; + }; + TransactionPayment: { + /** + *A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, + *has been paid by `who`. + */ + TransactionFeePaid: PlainDescriptor>; + }; + AssetTxPayment: { + /** + *A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, + *has been paid by `who` in an asset `asset_id`. + */ + AssetTxFeePaid: PlainDescriptor>; + /** + *A swap of the refund in native currency back to asset failed. + */ + AssetRefundFailed: PlainDescriptor>; + }; + Vesting: { + /** + *The amount vested has been updated. This could indicate a change in funds available. + *The balance given is the amount which is left unvested (and thus locked). + */ + VestingUpdated: PlainDescriptor>; + /** + *An \[account\] has become fully vested. + */ + VestingCompleted: PlainDescriptor>; + }; + CollatorSelection: { + /** + *New Invulnerables were set. + */ + NewInvulnerables: PlainDescriptor>; + /** + *A new Invulnerable was added. + */ + InvulnerableAdded: PlainDescriptor>; + /** + *An Invulnerable was removed. + */ + InvulnerableRemoved: PlainDescriptor>; + /** + *The number of desired candidates was set. + */ + NewDesiredCandidates: PlainDescriptor>; + /** + *The candidacy bond was set. + */ + NewCandidacyBond: PlainDescriptor>; + /** + *A new candidate joined. + */ + CandidateAdded: PlainDescriptor>; + /** + *Bond of a candidate updated. + */ + CandidateBondUpdated: PlainDescriptor>; + /** + *A candidate was removed. + */ + CandidateRemoved: PlainDescriptor>; + /** + *An account was replaced in the candidate list by another one. + */ + CandidateReplaced: PlainDescriptor>; + /** + *An account was unable to be added to the Invulnerables because they did not have keys + *registered. Other Invulnerables may have been set. + */ + InvalidInvulnerableSkipped: PlainDescriptor>; + }; + Session: { + /** + *New session has happened. Note that the argument is the session index, not the + *block number as the type might suggest. + */ + NewSession: PlainDescriptor>; + }; + XcmpQueue: { + /** + *An HRMP message was sent to a sibling parachain. + */ + XcmpMessageSent: PlainDescriptor>; + }; + PolkadotXcm: { + /** + *Execution of an XCM message was attempted. + */ + Attempted: PlainDescriptor>; + /** + *A XCM message was sent. + */ + Sent: PlainDescriptor>; + /** + *Query response received which does not match a registered query. This may be because a + *matching query was never registered, it may be because it is a duplicate response, or + *because the query timed out. + */ + UnexpectedResponse: PlainDescriptor>; + /** + *Query response has been received and is ready for taking with `take_response`. There is + *no registered notification call. + */ + ResponseReady: PlainDescriptor>; + /** + *Query response has been received and query is removed. The registered notification has + *been dispatched and executed successfully. + */ + Notified: PlainDescriptor>; + /** + *Query response has been received and query is removed. The registered notification + *could not be dispatched because the dispatch weight is greater than the maximum weight + *originally budgeted by this runtime for the query result. + */ + NotifyOverweight: PlainDescriptor>; + /** + *Query response has been received and query is removed. There was a general error with + *dispatching the notification call. + */ + NotifyDispatchError: PlainDescriptor>; + /** + *Query response has been received and query is removed. The dispatch was unable to be + *decoded into a `Call`; this might be due to dispatch function having a signature which + *is not `(origin, QueryId, Response)`. + */ + NotifyDecodeFailed: PlainDescriptor>; + /** + *Expected query response has been received but the origin location of the response does + *not match that expected. The query remains registered for a later, valid, response to + *be received and acted upon. + */ + InvalidResponder: PlainDescriptor>; + /** + *Expected query response has been received but the expected origin location placed in + *storage by this runtime previously cannot be decoded. The query remains registered. + * + *This is unexpected (since a location placed in storage in a previously executing + *runtime should be readable prior to query timeout) and dangerous since the possibly + *valid response will be dropped. Manual governance intervention is probably going to be + *needed. + */ + InvalidResponderVersion: PlainDescriptor>; + /** + *Received query response has been read and removed. + */ + ResponseTaken: PlainDescriptor>; + /** + *Some assets have been placed in an asset trap. + */ + AssetsTrapped: PlainDescriptor>; + /** + *An XCM version change notification message has been attempted to be sent. + * + *The cost of sending it (borne by the chain) is included. + */ + VersionChangeNotified: PlainDescriptor>; + /** + *The supported version of a location has been changed. This might be through an + *automatic notification or a manual intervention. + */ + SupportedVersionChanged: PlainDescriptor>; + /** + *A given location which had a version change subscription was dropped owing to an error + *sending the notification to it. + */ + NotifyTargetSendFail: PlainDescriptor>; + /** + *A given location which had a version change subscription was dropped owing to an error + *migrating the location to our new XCM format. + */ + NotifyTargetMigrationFail: PlainDescriptor>; + /** + *Expected query response has been received but the expected querier location placed in + *storage by this runtime previously cannot be decoded. The query remains registered. + * + *This is unexpected (since a location placed in storage in a previously executing + *runtime should be readable prior to query timeout) and dangerous since the possibly + *valid response will be dropped. Manual governance intervention is probably going to be + *needed. + */ + InvalidQuerierVersion: PlainDescriptor>; + /** + *Expected query response has been received but the querier location of the response does + *not match the expected. The query remains registered for a later, valid, response to + *be received and acted upon. + */ + InvalidQuerier: PlainDescriptor>; + /** + *A remote has requested XCM version change notification from us and we have honored it. + *A version information message is sent to them and its cost is included. + */ + VersionNotifyStarted: PlainDescriptor>; + /** + *We have requested that a remote chain send us XCM version change notifications. + */ + VersionNotifyRequested: PlainDescriptor>; + /** + *We have requested that a remote chain stops sending us XCM version change + *notifications. + */ + VersionNotifyUnrequested: PlainDescriptor>; + /** + *Fees were paid from a location for an operation (often for using `SendXcm`). + */ + FeesPaid: PlainDescriptor>; + /** + *Some assets have been claimed from an asset trap + */ + AssetsClaimed: PlainDescriptor>; + /** + *A XCM version migration finished. + */ + VersionMigrationFinished: PlainDescriptor>; + }; + CumulusXcm: { + /** + *Downward message is invalid XCM. + *\[ id \] + */ + InvalidFormat: PlainDescriptor>; + /** + *Downward message is unsupported version of XCM. + *\[ id \] + */ + UnsupportedVersion: PlainDescriptor>; + /** + *Downward message executed with the given outcome. + *\[ id, outcome \] + */ + ExecutedDownward: PlainDescriptor>; + }; + MessageQueue: { + /** + *Message discarded due to an error in the `MessageProcessor` (usually a format error). + */ + ProcessingFailed: PlainDescriptor>; + /** + *Message is processed. + */ + Processed: PlainDescriptor>; + /** + *Message placed in overweight queue. + */ + OverweightEnqueued: PlainDescriptor>; + /** + *This page was reaped. + */ + PageReaped: PlainDescriptor>; + }; + Utility: { + /** + *Batch of dispatches did not complete fully. Index of first failing dispatch given, as + *well as the error. + */ + BatchInterrupted: PlainDescriptor>; + /** + *Batch of dispatches completed fully with no error. + */ + BatchCompleted: PlainDescriptor; + /** + *Batch of dispatches completed but has errors. + */ + BatchCompletedWithErrors: PlainDescriptor; + /** + *A single item within a Batch of dispatches has completed with no error. + */ + ItemCompleted: PlainDescriptor; + /** + *A single item within a Batch of dispatches has completed with error. + */ + ItemFailed: PlainDescriptor>; + /** + *A call was dispatched. + */ + DispatchedAs: PlainDescriptor>; + }; + Multisig: { + /** + *A new multisig operation has begun. + */ + NewMultisig: PlainDescriptor>; + /** + *A multisig operation has been approved by someone. + */ + MultisigApproval: PlainDescriptor>; + /** + *A multisig operation has been executed. + */ + MultisigExecuted: PlainDescriptor>; + /** + *A multisig operation has been cancelled. + */ + MultisigCancelled: PlainDescriptor>; + }; + Proxy: { + /** + *A proxy was executed correctly, with the given. + */ + ProxyExecuted: PlainDescriptor>; + /** + *A pure account has been created by new proxy with given + *disambiguation index and proxy type. + */ + PureCreated: PlainDescriptor>; + /** + *An announcement was placed to make a call in the future. + */ + Announced: PlainDescriptor>; + /** + *A proxy was added. + */ + ProxyAdded: PlainDescriptor>; + /** + *A proxy was removed. + */ + ProxyRemoved: PlainDescriptor>; + }; + Assets: { + /** + *Some asset class was created. + */ + Created: PlainDescriptor>; + /** + *Some assets were issued. + */ + Issued: PlainDescriptor>; + /** + *Some assets were transferred. + */ + Transferred: PlainDescriptor>; + /** + *Some assets were destroyed. + */ + Burned: PlainDescriptor>; + /** + *The management team changed. + */ + TeamChanged: PlainDescriptor>; + /** + *The owner changed. + */ + OwnerChanged: PlainDescriptor>; + /** + *Some account `who` was frozen. + */ + Frozen: PlainDescriptor>; + /** + *Some account `who` was thawed. + */ + Thawed: PlainDescriptor>; + /** + *Some asset `asset_id` was frozen. + */ + AssetFrozen: PlainDescriptor>; + /** + *Some asset `asset_id` was thawed. + */ + AssetThawed: PlainDescriptor>; + /** + *Accounts were destroyed for given asset. + */ + AccountsDestroyed: PlainDescriptor>; + /** + *Approvals were destroyed for given asset. + */ + ApprovalsDestroyed: PlainDescriptor>; + /** + *An asset class is in the process of being destroyed. + */ + DestructionStarted: PlainDescriptor>; + /** + *An asset class was destroyed. + */ + Destroyed: PlainDescriptor>; + /** + *Some asset class was force-created. + */ + ForceCreated: PlainDescriptor>; + /** + *New metadata has been set for an asset. + */ + MetadataSet: PlainDescriptor>; + /** + *Metadata has been cleared for an asset. + */ + MetadataCleared: PlainDescriptor>; + /** + *(Additional) funds have been approved for transfer to a destination account. + */ + ApprovedTransfer: PlainDescriptor>; + /** + *An approval for account `delegate` was cancelled by `owner`. + */ + ApprovalCancelled: PlainDescriptor>; + /** + *An `amount` was transferred in its entirety from `owner` to `destination` by + *the approved `delegate`. + */ + TransferredApproved: PlainDescriptor>; + /** + *An asset has had its attributes changed by the `Force` origin. + */ + AssetStatusChanged: PlainDescriptor>; + /** + *The min_balance of an asset has been updated by the asset owner. + */ + AssetMinBalanceChanged: PlainDescriptor>; + /** + *Some account `who` was created with a deposit from `depositor`. + */ + Touched: PlainDescriptor>; + /** + *Some account `who` was blocked. + */ + Blocked: PlainDescriptor>; + /** + *Some assets were deposited (e.g. for transaction fees). + */ + Deposited: PlainDescriptor>; + /** + *Some assets were withdrawn from the account (e.g. for transaction fees). + */ + Withdrawn: PlainDescriptor>; + }; + Uniques: { + /** + *A `collection` was created. + */ + Created: PlainDescriptor>; + /** + *A `collection` was force-created. + */ + ForceCreated: PlainDescriptor>; + /** + *A `collection` was destroyed. + */ + Destroyed: PlainDescriptor>; + /** + *An `item` was issued. + */ + Issued: PlainDescriptor>; + /** + *An `item` was transferred. + */ + Transferred: PlainDescriptor>; + /** + *An `item` was destroyed. + */ + Burned: PlainDescriptor>; + /** + *Some `item` was frozen. + */ + Frozen: PlainDescriptor>; + /** + *Some `item` was thawed. + */ + Thawed: PlainDescriptor>; + /** + *Some `collection` was frozen. + */ + CollectionFrozen: PlainDescriptor>; + /** + *Some `collection` was thawed. + */ + CollectionThawed: PlainDescriptor>; + /** + *The owner changed. + */ + OwnerChanged: PlainDescriptor>; + /** + *The management team changed. + */ + TeamChanged: PlainDescriptor>; + /** + *An `item` of a `collection` has been approved by the `owner` for transfer by + *a `delegate`. + */ + ApprovedTransfer: PlainDescriptor>; + /** + *An approval for a `delegate` account to transfer the `item` of an item + *`collection` was cancelled by its `owner`. + */ + ApprovalCancelled: PlainDescriptor>; + /** + *A `collection` has had its attributes changed by the `Force` origin. + */ + ItemStatusChanged: PlainDescriptor>; + /** + *New metadata has been set for a `collection`. + */ + CollectionMetadataSet: PlainDescriptor>; + /** + *Metadata has been cleared for a `collection`. + */ + CollectionMetadataCleared: PlainDescriptor>; + /** + *New metadata has been set for an item. + */ + MetadataSet: PlainDescriptor>; + /** + *Metadata has been cleared for an item. + */ + MetadataCleared: PlainDescriptor>; + /** + *Metadata has been cleared for an item. + */ + Redeposited: PlainDescriptor>; + /** + *New attribute metadata has been set for a `collection` or `item`. + */ + AttributeSet: PlainDescriptor>; + /** + *Attribute metadata has been cleared for a `collection` or `item`. + */ + AttributeCleared: PlainDescriptor>; + /** + *Ownership acceptance has changed for an account. + */ + OwnershipAcceptanceChanged: PlainDescriptor>; + /** + *Max supply has been set for a collection. + */ + CollectionMaxSupplySet: PlainDescriptor>; + /** + *The price was set for the instance. + */ + ItemPriceSet: PlainDescriptor>; + /** + *The price for the instance was removed. + */ + ItemPriceRemoved: PlainDescriptor>; + /** + *An item was bought. + */ + ItemBought: PlainDescriptor>; + }; + Nfts: { + /** + *A `collection` was created. + */ + Created: PlainDescriptor>; + /** + *A `collection` was force-created. + */ + ForceCreated: PlainDescriptor>; + /** + *A `collection` was destroyed. + */ + Destroyed: PlainDescriptor>; + /** + *An `item` was issued. + */ + Issued: PlainDescriptor>; + /** + *An `item` was transferred. + */ + Transferred: PlainDescriptor>; + /** + *An `item` was destroyed. + */ + Burned: PlainDescriptor>; + /** + *An `item` became non-transferable. + */ + ItemTransferLocked: PlainDescriptor>; + /** + *An `item` became transferable. + */ + ItemTransferUnlocked: PlainDescriptor>; + /** + *`item` metadata or attributes were locked. + */ + ItemPropertiesLocked: PlainDescriptor>; + /** + *Some `collection` was locked. + */ + CollectionLocked: PlainDescriptor>; + /** + *The owner changed. + */ + OwnerChanged: PlainDescriptor>; + /** + *The management team changed. + */ + TeamChanged: PlainDescriptor>; + /** + *An `item` of a `collection` has been approved by the `owner` for transfer by + *a `delegate`. + */ + TransferApproved: PlainDescriptor>; + /** + *An approval for a `delegate` account to transfer the `item` of an item + *`collection` was cancelled by its `owner`. + */ + ApprovalCancelled: PlainDescriptor>; + /** + *All approvals of an item got cancelled. + */ + AllApprovalsCancelled: PlainDescriptor>; + /** + *A `collection` has had its config changed by the `Force` origin. + */ + CollectionConfigChanged: PlainDescriptor>; + /** + *New metadata has been set for a `collection`. + */ + CollectionMetadataSet: PlainDescriptor>; + /** + *Metadata has been cleared for a `collection`. + */ + CollectionMetadataCleared: PlainDescriptor>; + /** + *New metadata has been set for an item. + */ + ItemMetadataSet: PlainDescriptor>; + /** + *Metadata has been cleared for an item. + */ + ItemMetadataCleared: PlainDescriptor>; + /** + *The deposit for a set of `item`s within a `collection` has been updated. + */ + Redeposited: PlainDescriptor>; + /** + *New attribute metadata has been set for a `collection` or `item`. + */ + AttributeSet: PlainDescriptor>; + /** + *Attribute metadata has been cleared for a `collection` or `item`. + */ + AttributeCleared: PlainDescriptor>; + /** + *A new approval to modify item attributes was added. + */ + ItemAttributesApprovalAdded: PlainDescriptor>; + /** + *A new approval to modify item attributes was removed. + */ + ItemAttributesApprovalRemoved: PlainDescriptor>; + /** + *Ownership acceptance has changed for an account. + */ + OwnershipAcceptanceChanged: PlainDescriptor>; + /** + *Max supply has been set for a collection. + */ + CollectionMaxSupplySet: PlainDescriptor>; + /** + *Mint settings for a collection had changed. + */ + CollectionMintSettingsUpdated: PlainDescriptor>; + /** + *Event gets emitted when the `NextCollectionId` gets incremented. + */ + NextCollectionIdIncremented: PlainDescriptor>; + /** + *The price was set for the item. + */ + ItemPriceSet: PlainDescriptor>; + /** + *The price for the item was removed. + */ + ItemPriceRemoved: PlainDescriptor>; + /** + *An item was bought. + */ + ItemBought: PlainDescriptor>; + /** + *A tip was sent. + */ + TipSent: PlainDescriptor>; + /** + *An `item` swap intent was created. + */ + SwapCreated: PlainDescriptor>; + /** + *The swap was cancelled. + */ + SwapCancelled: PlainDescriptor>; + /** + *The swap has been claimed. + */ + SwapClaimed: PlainDescriptor>; + /** + *New attributes have been set for an `item` of the `collection`. + */ + PreSignedAttributesSet: PlainDescriptor>; + /** + *A new attribute in the `Pallet` namespace was set for the `collection` or an `item` + *within that `collection`. + */ + PalletAttributeSet: PlainDescriptor>; + }; + ForeignAssets: { + /** + *Some asset class was created. + */ + Created: PlainDescriptor>; + /** + *Some assets were issued. + */ + Issued: PlainDescriptor>; + /** + *Some assets were transferred. + */ + Transferred: PlainDescriptor>; + /** + *Some assets were destroyed. + */ + Burned: PlainDescriptor>; + /** + *The management team changed. + */ + TeamChanged: PlainDescriptor>; + /** + *The owner changed. + */ + OwnerChanged: PlainDescriptor>; + /** + *Some account `who` was frozen. + */ + Frozen: PlainDescriptor>; + /** + *Some account `who` was thawed. + */ + Thawed: PlainDescriptor>; + /** + *Some asset `asset_id` was frozen. + */ + AssetFrozen: PlainDescriptor>; + /** + *Some asset `asset_id` was thawed. + */ + AssetThawed: PlainDescriptor>; + /** + *Accounts were destroyed for given asset. + */ + AccountsDestroyed: PlainDescriptor>; + /** + *Approvals were destroyed for given asset. + */ + ApprovalsDestroyed: PlainDescriptor>; + /** + *An asset class is in the process of being destroyed. + */ + DestructionStarted: PlainDescriptor>; + /** + *An asset class was destroyed. + */ + Destroyed: PlainDescriptor>; + /** + *Some asset class was force-created. + */ + ForceCreated: PlainDescriptor>; + /** + *New metadata has been set for an asset. + */ + MetadataSet: PlainDescriptor>; + /** + *Metadata has been cleared for an asset. + */ + MetadataCleared: PlainDescriptor>; + /** + *(Additional) funds have been approved for transfer to a destination account. + */ + ApprovedTransfer: PlainDescriptor>; + /** + *An approval for account `delegate` was cancelled by `owner`. + */ + ApprovalCancelled: PlainDescriptor>; + /** + *An `amount` was transferred in its entirety from `owner` to `destination` by + *the approved `delegate`. + */ + TransferredApproved: PlainDescriptor>; + /** + *An asset has had its attributes changed by the `Force` origin. + */ + AssetStatusChanged: PlainDescriptor>; + /** + *The min_balance of an asset has been updated by the asset owner. + */ + AssetMinBalanceChanged: PlainDescriptor>; + /** + *Some account `who` was created with a deposit from `depositor`. + */ + Touched: PlainDescriptor>; + /** + *Some account `who` was blocked. + */ + Blocked: PlainDescriptor>; + /** + *Some assets were deposited (e.g. for transaction fees). + */ + Deposited: PlainDescriptor>; + /** + *Some assets were withdrawn from the account (e.g. for transaction fees). + */ + Withdrawn: PlainDescriptor>; + }; + PoolAssets: { + /** + *Some asset class was created. + */ + Created: PlainDescriptor>; + /** + *Some assets were issued. + */ + Issued: PlainDescriptor>; + /** + *Some assets were transferred. + */ + Transferred: PlainDescriptor>; + /** + *Some assets were destroyed. + */ + Burned: PlainDescriptor>; + /** + *The management team changed. + */ + TeamChanged: PlainDescriptor>; + /** + *The owner changed. + */ + OwnerChanged: PlainDescriptor>; + /** + *Some account `who` was frozen. + */ + Frozen: PlainDescriptor>; + /** + *Some account `who` was thawed. + */ + Thawed: PlainDescriptor>; + /** + *Some asset `asset_id` was frozen. + */ + AssetFrozen: PlainDescriptor>; + /** + *Some asset `asset_id` was thawed. + */ + AssetThawed: PlainDescriptor>; + /** + *Accounts were destroyed for given asset. + */ + AccountsDestroyed: PlainDescriptor>; + /** + *Approvals were destroyed for given asset. + */ + ApprovalsDestroyed: PlainDescriptor>; + /** + *An asset class is in the process of being destroyed. + */ + DestructionStarted: PlainDescriptor>; + /** + *An asset class was destroyed. + */ + Destroyed: PlainDescriptor>; + /** + *Some asset class was force-created. + */ + ForceCreated: PlainDescriptor>; + /** + *New metadata has been set for an asset. + */ + MetadataSet: PlainDescriptor>; + /** + *Metadata has been cleared for an asset. + */ + MetadataCleared: PlainDescriptor>; + /** + *(Additional) funds have been approved for transfer to a destination account. + */ + ApprovedTransfer: PlainDescriptor>; + /** + *An approval for account `delegate` was cancelled by `owner`. + */ + ApprovalCancelled: PlainDescriptor>; + /** + *An `amount` was transferred in its entirety from `owner` to `destination` by + *the approved `delegate`. + */ + TransferredApproved: PlainDescriptor>; + /** + *An asset has had its attributes changed by the `Force` origin. + */ + AssetStatusChanged: PlainDescriptor>; + /** + *The min_balance of an asset has been updated by the asset owner. + */ + AssetMinBalanceChanged: PlainDescriptor>; + /** + *Some account `who` was created with a deposit from `depositor`. + */ + Touched: PlainDescriptor>; + /** + *Some account `who` was blocked. + */ + Blocked: PlainDescriptor>; + /** + *Some assets were deposited (e.g. for transaction fees). + */ + Deposited: PlainDescriptor>; + /** + *Some assets were withdrawn from the account (e.g. for transaction fees). + */ + Withdrawn: PlainDescriptor>; + }; + AssetConversion: { + /** + *A successful call of the `CreatePool` extrinsic will create this event. + */ + PoolCreated: PlainDescriptor>; + /** + *A successful call of the `AddLiquidity` extrinsic will create this event. + */ + LiquidityAdded: PlainDescriptor>; + /** + *A successful call of the `RemoveLiquidity` extrinsic will create this event. + */ + LiquidityRemoved: PlainDescriptor>; + /** + *Assets have been converted from one to another. Both `SwapExactTokenForToken` + *and `SwapTokenForExactToken` will generate this event. + */ + SwapExecuted: PlainDescriptor>; + /** + *Assets have been converted from one to another. + */ + SwapCreditExecuted: PlainDescriptor>; + /** + *Pool has been touched in order to fulfill operational requirements. + */ + Touched: PlainDescriptor>; + }; +}; +type IError = { + System: { + /** + *The name of specification does not match between the current runtime + *and the new runtime. + */ + InvalidSpecName: PlainDescriptor; + /** + *The specification version is not allowed to decrease between the current runtime + *and the new runtime. + */ + SpecVersionNeedsToIncrease: PlainDescriptor; + /** + *Failed to extract the runtime version from the new runtime. + * + *Either calling `Core_version` or decoding `RuntimeVersion` failed. + */ + FailedToExtractRuntimeVersion: PlainDescriptor; + /** + *Suicide called when the account has non-default composite data. + */ + NonDefaultComposite: PlainDescriptor; + /** + *There is a non-zero reference count preventing the account from being purged. + */ + NonZeroRefCount: PlainDescriptor; + /** + *The origin filter prevent the call to be dispatched. + */ + CallFiltered: PlainDescriptor; + /** + *A multi-block migration is ongoing and prevents the current code from being replaced. + */ + MultiBlockMigrationsOngoing: PlainDescriptor; + /** + *No upgrade authorized. + */ + NothingAuthorized: PlainDescriptor; + /** + *The submitted code is not authorized. + */ + Unauthorized: PlainDescriptor; + }; + ParachainSystem: { + /** + *Attempt to upgrade validation function while existing upgrade pending. + */ + OverlappingUpgrades: PlainDescriptor; + /** + *Polkadot currently prohibits this parachain from upgrading its validation function. + */ + ProhibitedByPolkadot: PlainDescriptor; + /** + *The supplied validation function has compiled into a blob larger than Polkadot is + *willing to run. + */ + TooBig: PlainDescriptor; + /** + *The inherent which supplies the validation data did not run this block. + */ + ValidationDataNotAvailable: PlainDescriptor; + /** + *The inherent which supplies the host configuration did not run this block. + */ + HostConfigurationNotAvailable: PlainDescriptor; + /** + *No validation function upgrade is currently scheduled. + */ + NotScheduled: PlainDescriptor; + /** + *No code upgrade has been authorized. + */ + NothingAuthorized: PlainDescriptor; + /** + *The given code upgrade has not been authorized. + */ + Unauthorized: PlainDescriptor; + }; + Balances: { + /** + *Vesting balance too high to send value. + */ + VestingBalance: PlainDescriptor; + /** + *Account liquidity restrictions prevent withdrawal. + */ + LiquidityRestrictions: PlainDescriptor; + /** + *Balance too low to send value. + */ + InsufficientBalance: PlainDescriptor; + /** + *Value too low to create account due to existential deposit. + */ + ExistentialDeposit: PlainDescriptor; + /** + *Transfer/payment would kill account. + */ + Expendability: PlainDescriptor; + /** + *A vesting schedule already exists for this account. + */ + ExistingVestingSchedule: PlainDescriptor; + /** + *Beneficiary account must pre-exist. + */ + DeadAccount: PlainDescriptor; + /** + *Number of named reserves exceed `MaxReserves`. + */ + TooManyReserves: PlainDescriptor; + /** + *Number of holds exceed `VariantCountOf`. + */ + TooManyHolds: PlainDescriptor; + /** + *Number of freezes exceed `MaxFreezes`. + */ + TooManyFreezes: PlainDescriptor; + /** + *The issuance cannot be modified since it is already deactivated. + */ + IssuanceDeactivated: PlainDescriptor; + /** + *The delta cannot be zero. + */ + DeltaZero: PlainDescriptor; + }; + Vesting: { + /** + *The account given is not vesting. + */ + NotVesting: PlainDescriptor; + /** + *The account already has `MaxVestingSchedules` count of schedules and thus + *cannot add another one. Consider merging existing schedules in order to add another. + */ + AtMaxVestingSchedules: PlainDescriptor; + /** + *Amount being transferred is too low to create a vesting schedule. + */ + AmountLow: PlainDescriptor; + /** + *An index was out of bounds of the vesting schedules. + */ + ScheduleIndexOutOfBounds: PlainDescriptor; + /** + *Failed to create a new schedule because some parameter was invalid. + */ + InvalidScheduleParams: PlainDescriptor; + }; + CollatorSelection: { + /** + *The pallet has too many candidates. + */ + TooManyCandidates: PlainDescriptor; + /** + *Leaving would result in too few candidates. + */ + TooFewEligibleCollators: PlainDescriptor; + /** + *Account is already a candidate. + */ + AlreadyCandidate: PlainDescriptor; + /** + *Account is not a candidate. + */ + NotCandidate: PlainDescriptor; + /** + *There are too many Invulnerables. + */ + TooManyInvulnerables: PlainDescriptor; + /** + *Account is already an Invulnerable. + */ + AlreadyInvulnerable: PlainDescriptor; + /** + *Account is not an Invulnerable. + */ + NotInvulnerable: PlainDescriptor; + /** + *Account has no associated validator ID. + */ + NoAssociatedValidatorId: PlainDescriptor; + /** + *Validator ID is not yet registered. + */ + ValidatorNotRegistered: PlainDescriptor; + /** + *Could not insert in the candidate list. + */ + InsertToCandidateListFailed: PlainDescriptor; + /** + *Could not remove from the candidate list. + */ + RemoveFromCandidateListFailed: PlainDescriptor; + /** + *New deposit amount would be below the minimum candidacy bond. + */ + DepositTooLow: PlainDescriptor; + /** + *Could not update the candidate list. + */ + UpdateCandidateListFailed: PlainDescriptor; + /** + *Deposit amount is too low to take the target's slot in the candidate list. + */ + InsufficientBond: PlainDescriptor; + /** + *The target account to be replaced in the candidate list is not a candidate. + */ + TargetIsNotCandidate: PlainDescriptor; + /** + *The updated deposit amount is equal to the amount already reserved. + */ + IdenticalDeposit: PlainDescriptor; + /** + *Cannot lower candidacy bond while occupying a future collator slot in the list. + */ + InvalidUnreserve: PlainDescriptor; + }; + Session: { + /** + *Invalid ownership proof. + */ + InvalidProof: PlainDescriptor; + /** + *No associated validator ID for account. + */ + NoAssociatedValidatorId: PlainDescriptor; + /** + *Registered duplicate key. + */ + DuplicatedKey: PlainDescriptor; + /** + *No keys are associated with this account. + */ + NoKeys: PlainDescriptor; + /** + *Key setting account is not live, so it's impossible to associate keys. + */ + NoAccount: PlainDescriptor; + }; + XcmpQueue: { + /** + *Setting the queue config failed since one of its values was invalid. + */ + BadQueueConfig: PlainDescriptor; + /** + *The execution is already suspended. + */ + AlreadySuspended: PlainDescriptor; + /** + *The execution is already resumed. + */ + AlreadyResumed: PlainDescriptor; + /** + *There are too many active outbound channels. + */ + TooManyActiveOutboundChannels: PlainDescriptor; + /** + *The message is too big. + */ + TooBig: PlainDescriptor; + }; + PolkadotXcm: { + /** + *The desired destination was unreachable, generally because there is a no way of routing + *to it. + */ + Unreachable: PlainDescriptor; + /** + *There was some other issue (i.e. not to do with routing) in sending the message. + *Perhaps a lack of space for buffering the message. + */ + SendFailure: PlainDescriptor; + /** + *The message execution fails the filter. + */ + Filtered: PlainDescriptor; + /** + *The message's weight could not be determined. + */ + UnweighableMessage: PlainDescriptor; + /** + *The destination `Location` provided cannot be inverted. + */ + DestinationNotInvertible: PlainDescriptor; + /** + *The assets to be sent are empty. + */ + Empty: PlainDescriptor; + /** + *Could not re-anchor the assets to declare the fees for the destination chain. + */ + CannotReanchor: PlainDescriptor; + /** + *Too many assets have been attempted for transfer. + */ + TooManyAssets: PlainDescriptor; + /** + *Origin is invalid for sending. + */ + InvalidOrigin: PlainDescriptor; + /** + *The version of the `Versioned` value used is not able to be interpreted. + */ + BadVersion: PlainDescriptor; + /** + *The given location could not be used (e.g. because it cannot be expressed in the + *desired version of XCM). + */ + BadLocation: PlainDescriptor; + /** + *The referenced subscription could not be found. + */ + NoSubscription: PlainDescriptor; + /** + *The location is invalid since it already has a subscription from us. + */ + AlreadySubscribed: PlainDescriptor; + /** + *Could not check-out the assets for teleportation to the destination chain. + */ + CannotCheckOutTeleport: PlainDescriptor; + /** + *The owner does not own (all) of the asset that they wish to do the operation on. + */ + LowBalance: PlainDescriptor; + /** + *The asset owner has too many locks on the asset. + */ + TooManyLocks: PlainDescriptor; + /** + *The given account is not an identifiable sovereign account for any location. + */ + AccountNotSovereign: PlainDescriptor; + /** + *The operation required fees to be paid which the initiator could not meet. + */ + FeesNotMet: PlainDescriptor; + /** + *A remote lock with the corresponding data could not be found. + */ + LockNotFound: PlainDescriptor; + /** + *The unlock operation cannot succeed because there are still consumers of the lock. + */ + InUse: PlainDescriptor; + /** + *Invalid asset, reserve chain could not be determined for it. + */ + InvalidAssetUnknownReserve: PlainDescriptor; + /** + *Invalid asset, do not support remote asset reserves with different fees reserves. + */ + InvalidAssetUnsupportedReserve: PlainDescriptor; + /** + *Too many assets with different reserve locations have been attempted for transfer. + */ + TooManyReserves: PlainDescriptor; + /** + *Local XCM execution incomplete. + */ + LocalExecutionIncomplete: PlainDescriptor; + }; + MessageQueue: { + /** + *Page is not reapable because it has items remaining to be processed and is not old + *enough. + */ + NotReapable: PlainDescriptor; + /** + *Page to be reaped does not exist. + */ + NoPage: PlainDescriptor; + /** + *The referenced message could not be found. + */ + NoMessage: PlainDescriptor; + /** + *The message was already processed and cannot be processed again. + */ + AlreadyProcessed: PlainDescriptor; + /** + *The message is queued for future execution. + */ + Queued: PlainDescriptor; + /** + *There is temporarily not enough weight to continue servicing messages. + */ + InsufficientWeight: PlainDescriptor; + /** + *This message is temporarily unprocessable. + * + *Such errors are expected, but not guaranteed, to resolve themselves eventually through + *retrying. + */ + TemporarilyUnprocessable: PlainDescriptor; + /** + *The queue is paused and no message can be executed from it. + * + *This can change at any time and may resolve in the future by re-trying. + */ + QueuePaused: PlainDescriptor; + /** + *Another call is in progress and needs to finish before this call can happen. + */ + RecursiveDisallowed: PlainDescriptor; + }; + Utility: { + /** + *Too many calls batched. + */ + TooManyCalls: PlainDescriptor; + }; + Multisig: { + /** + *Threshold must be 2 or greater. + */ + MinimumThreshold: PlainDescriptor; + /** + *Call is already approved by this signatory. + */ + AlreadyApproved: PlainDescriptor; + /** + *Call doesn't need any (more) approvals. + */ + NoApprovalsNeeded: PlainDescriptor; + /** + *There are too few signatories in the list. + */ + TooFewSignatories: PlainDescriptor; + /** + *There are too many signatories in the list. + */ + TooManySignatories: PlainDescriptor; + /** + *The signatories were provided out of order; they should be ordered. + */ + SignatoriesOutOfOrder: PlainDescriptor; + /** + *The sender was contained in the other signatories; it shouldn't be. + */ + SenderInSignatories: PlainDescriptor; + /** + *Multisig operation not found when attempting to cancel. + */ + NotFound: PlainDescriptor; + /** + *Only the account that originally created the multisig is able to cancel it. + */ + NotOwner: PlainDescriptor; + /** + *No timepoint was given, yet the multisig operation is already underway. + */ + NoTimepoint: PlainDescriptor; + /** + *A different timepoint was given to the multisig operation that is underway. + */ + WrongTimepoint: PlainDescriptor; + /** + *A timepoint was given, yet no multisig operation is underway. + */ + UnexpectedTimepoint: PlainDescriptor; + /** + *The maximum weight information provided was too low. + */ + MaxWeightTooLow: PlainDescriptor; + /** + *The data to be stored is already stored. + */ + AlreadyStored: PlainDescriptor; + }; + Proxy: { + /** + *There are too many proxies registered or too many announcements pending. + */ + TooMany: PlainDescriptor; + /** + *Proxy registration not found. + */ + NotFound: PlainDescriptor; + /** + *Sender is not a proxy of the account to be proxied. + */ + NotProxy: PlainDescriptor; + /** + *A call which is incompatible with the proxy type's filter was attempted. + */ + Unproxyable: PlainDescriptor; + /** + *Account is already a proxy. + */ + Duplicate: PlainDescriptor; + /** + *Call may not be made by proxy because it may escalate its privileges. + */ + NoPermission: PlainDescriptor; + /** + *Announcement, if made at all, was made too recently. + */ + Unannounced: PlainDescriptor; + /** + *Cannot add self as proxy. + */ + NoSelfProxy: PlainDescriptor; + }; + Assets: { + /** + *Account balance must be greater than or equal to the transfer amount. + */ + BalanceLow: PlainDescriptor; + /** + *The account to alter does not exist. + */ + NoAccount: PlainDescriptor; + /** + *The signing account has no permission to do the operation. + */ + NoPermission: PlainDescriptor; + /** + *The given asset ID is unknown. + */ + Unknown: PlainDescriptor; + /** + *The origin account is frozen. + */ + Frozen: PlainDescriptor; + /** + *The asset ID is already taken. + */ + InUse: PlainDescriptor; + /** + *Invalid witness data given. + */ + BadWitness: PlainDescriptor; + /** + *Minimum balance should be non-zero. + */ + MinBalanceZero: PlainDescriptor; + /** + *Unable to increment the consumer reference counters on the account. Either no provider + *reference exists to allow a non-zero balance of a non-self-sufficient asset, or one + *fewer then the maximum number of consumers has been reached. + */ + UnavailableConsumer: PlainDescriptor; + /** + *Invalid metadata given. + */ + BadMetadata: PlainDescriptor; + /** + *No approval exists that would allow the transfer. + */ + Unapproved: PlainDescriptor; + /** + *The source account would not survive the transfer and it needs to stay alive. + */ + WouldDie: PlainDescriptor; + /** + *The asset-account already exists. + */ + AlreadyExists: PlainDescriptor; + /** + *The asset-account doesn't have an associated deposit. + */ + NoDeposit: PlainDescriptor; + /** + *The operation would result in funds being burned. + */ + WouldBurn: PlainDescriptor; + /** + *The asset is a live asset and is actively being used. Usually emit for operations such + *as `start_destroy` which require the asset to be in a destroying state. + */ + LiveAsset: PlainDescriptor; + /** + *The asset is not live, and likely being destroyed. + */ + AssetNotLive: PlainDescriptor; + /** + *The asset status is not the expected status. + */ + IncorrectStatus: PlainDescriptor; + /** + *The asset should be frozen before the given operation. + */ + NotFrozen: PlainDescriptor; + /** + *Callback action resulted in error + */ + CallbackFailed: PlainDescriptor; + /** + *The asset ID must be equal to the [`NextAssetId`]. + */ + BadAssetId: PlainDescriptor; + }; + Uniques: { + /** + *The signing account has no permission to do the operation. + */ + NoPermission: PlainDescriptor; + /** + *The given item ID is unknown. + */ + UnknownCollection: PlainDescriptor; + /** + *The item ID has already been used for an item. + */ + AlreadyExists: PlainDescriptor; + /** + *The owner turned out to be different to what was expected. + */ + WrongOwner: PlainDescriptor; + /** + *Invalid witness data given. + */ + BadWitness: PlainDescriptor; + /** + *The item ID is already taken. + */ + InUse: PlainDescriptor; + /** + *The item or collection is frozen. + */ + Frozen: PlainDescriptor; + /** + *The delegate turned out to be different to what was expected. + */ + WrongDelegate: PlainDescriptor; + /** + *There is no delegate approved. + */ + NoDelegate: PlainDescriptor; + /** + *No approval exists that would allow the transfer. + */ + Unapproved: PlainDescriptor; + /** + *The named owner has not signed ownership of the collection is acceptable. + */ + Unaccepted: PlainDescriptor; + /** + *The item is locked. + */ + Locked: PlainDescriptor; + /** + *All items have been minted. + */ + MaxSupplyReached: PlainDescriptor; + /** + *The max supply has already been set. + */ + MaxSupplyAlreadySet: PlainDescriptor; + /** + *The provided max supply is less to the amount of items a collection already has. + */ + MaxSupplyTooSmall: PlainDescriptor; + /** + *The given item ID is unknown. + */ + UnknownItem: PlainDescriptor; + /** + *Item is not for sale. + */ + NotForSale: PlainDescriptor; + /** + *The provided bid is too low. + */ + BidTooLow: PlainDescriptor; + }; + Nfts: { + /** + *The signing account has no permission to do the operation. + */ + NoPermission: PlainDescriptor; + /** + *The given item ID is unknown. + */ + UnknownCollection: PlainDescriptor; + /** + *The item ID has already been used for an item. + */ + AlreadyExists: PlainDescriptor; + /** + *The approval had a deadline that expired, so the approval isn't valid anymore. + */ + ApprovalExpired: PlainDescriptor; + /** + *The owner turned out to be different to what was expected. + */ + WrongOwner: PlainDescriptor; + /** + *The witness data given does not match the current state of the chain. + */ + BadWitness: PlainDescriptor; + /** + *Collection ID is already taken. + */ + CollectionIdInUse: PlainDescriptor; + /** + *Items within that collection are non-transferable. + */ + ItemsNonTransferable: PlainDescriptor; + /** + *The provided account is not a delegate. + */ + NotDelegate: PlainDescriptor; + /** + *The delegate turned out to be different to what was expected. + */ + WrongDelegate: PlainDescriptor; + /** + *No approval exists that would allow the transfer. + */ + Unapproved: PlainDescriptor; + /** + *The named owner has not signed ownership acceptance of the collection. + */ + Unaccepted: PlainDescriptor; + /** + *The item is locked (non-transferable). + */ + ItemLocked: PlainDescriptor; + /** + *Item's attributes are locked. + */ + LockedItemAttributes: PlainDescriptor; + /** + *Collection's attributes are locked. + */ + LockedCollectionAttributes: PlainDescriptor; + /** + *Item's metadata is locked. + */ + LockedItemMetadata: PlainDescriptor; + /** + *Collection's metadata is locked. + */ + LockedCollectionMetadata: PlainDescriptor; + /** + *All items have been minted. + */ + MaxSupplyReached: PlainDescriptor; + /** + *The max supply is locked and can't be changed. + */ + MaxSupplyLocked: PlainDescriptor; + /** + *The provided max supply is less than the number of items a collection already has. + */ + MaxSupplyTooSmall: PlainDescriptor; + /** + *The given item ID is unknown. + */ + UnknownItem: PlainDescriptor; + /** + *Swap doesn't exist. + */ + UnknownSwap: PlainDescriptor; + /** + *The given item has no metadata set. + */ + MetadataNotFound: PlainDescriptor; + /** + *The provided attribute can't be found. + */ + AttributeNotFound: PlainDescriptor; + /** + *Item is not for sale. + */ + NotForSale: PlainDescriptor; + /** + *The provided bid is too low. + */ + BidTooLow: PlainDescriptor; + /** + *The item has reached its approval limit. + */ + ReachedApprovalLimit: PlainDescriptor; + /** + *The deadline has already expired. + */ + DeadlineExpired: PlainDescriptor; + /** + *The duration provided should be less than or equal to `MaxDeadlineDuration`. + */ + WrongDuration: PlainDescriptor; + /** + *The method is disabled by system settings. + */ + MethodDisabled: PlainDescriptor; + /** + *The provided setting can't be set. + */ + WrongSetting: PlainDescriptor; + /** + *Item's config already exists and should be equal to the provided one. + */ + InconsistentItemConfig: PlainDescriptor; + /** + *Config for a collection or an item can't be found. + */ + NoConfig: PlainDescriptor; + /** + *Some roles were not cleared. + */ + RolesNotCleared: PlainDescriptor; + /** + *Mint has not started yet. + */ + MintNotStarted: PlainDescriptor; + /** + *Mint has already ended. + */ + MintEnded: PlainDescriptor; + /** + *The provided Item was already used for claiming. + */ + AlreadyClaimed: PlainDescriptor; + /** + *The provided data is incorrect. + */ + IncorrectData: PlainDescriptor; + /** + *The extrinsic was sent by the wrong origin. + */ + WrongOrigin: PlainDescriptor; + /** + *The provided signature is incorrect. + */ + WrongSignature: PlainDescriptor; + /** + *The provided metadata might be too long. + */ + IncorrectMetadata: PlainDescriptor; + /** + *Can't set more attributes per one call. + */ + MaxAttributesLimitReached: PlainDescriptor; + /** + *The provided namespace isn't supported in this call. + */ + WrongNamespace: PlainDescriptor; + /** + *Can't delete non-empty collections. + */ + CollectionNotEmpty: PlainDescriptor; + /** + *The witness data should be provided. + */ + WitnessRequired: PlainDescriptor; + }; + ForeignAssets: { + /** + *Account balance must be greater than or equal to the transfer amount. + */ + BalanceLow: PlainDescriptor; + /** + *The account to alter does not exist. + */ + NoAccount: PlainDescriptor; + /** + *The signing account has no permission to do the operation. + */ + NoPermission: PlainDescriptor; + /** + *The given asset ID is unknown. + */ + Unknown: PlainDescriptor; + /** + *The origin account is frozen. + */ + Frozen: PlainDescriptor; + /** + *The asset ID is already taken. + */ + InUse: PlainDescriptor; + /** + *Invalid witness data given. + */ + BadWitness: PlainDescriptor; + /** + *Minimum balance should be non-zero. + */ + MinBalanceZero: PlainDescriptor; + /** + *Unable to increment the consumer reference counters on the account. Either no provider + *reference exists to allow a non-zero balance of a non-self-sufficient asset, or one + *fewer then the maximum number of consumers has been reached. + */ + UnavailableConsumer: PlainDescriptor; + /** + *Invalid metadata given. + */ + BadMetadata: PlainDescriptor; + /** + *No approval exists that would allow the transfer. + */ + Unapproved: PlainDescriptor; + /** + *The source account would not survive the transfer and it needs to stay alive. + */ + WouldDie: PlainDescriptor; + /** + *The asset-account already exists. + */ + AlreadyExists: PlainDescriptor; + /** + *The asset-account doesn't have an associated deposit. + */ + NoDeposit: PlainDescriptor; + /** + *The operation would result in funds being burned. + */ + WouldBurn: PlainDescriptor; + /** + *The asset is a live asset and is actively being used. Usually emit for operations such + *as `start_destroy` which require the asset to be in a destroying state. + */ + LiveAsset: PlainDescriptor; + /** + *The asset is not live, and likely being destroyed. + */ + AssetNotLive: PlainDescriptor; + /** + *The asset status is not the expected status. + */ + IncorrectStatus: PlainDescriptor; + /** + *The asset should be frozen before the given operation. + */ + NotFrozen: PlainDescriptor; + /** + *Callback action resulted in error + */ + CallbackFailed: PlainDescriptor; + /** + *The asset ID must be equal to the [`NextAssetId`]. + */ + BadAssetId: PlainDescriptor; + }; + PoolAssets: { + /** + *Account balance must be greater than or equal to the transfer amount. + */ + BalanceLow: PlainDescriptor; + /** + *The account to alter does not exist. + */ + NoAccount: PlainDescriptor; + /** + *The signing account has no permission to do the operation. + */ + NoPermission: PlainDescriptor; + /** + *The given asset ID is unknown. + */ + Unknown: PlainDescriptor; + /** + *The origin account is frozen. + */ + Frozen: PlainDescriptor; + /** + *The asset ID is already taken. + */ + InUse: PlainDescriptor; + /** + *Invalid witness data given. + */ + BadWitness: PlainDescriptor; + /** + *Minimum balance should be non-zero. + */ + MinBalanceZero: PlainDescriptor; + /** + *Unable to increment the consumer reference counters on the account. Either no provider + *reference exists to allow a non-zero balance of a non-self-sufficient asset, or one + *fewer then the maximum number of consumers has been reached. + */ + UnavailableConsumer: PlainDescriptor; + /** + *Invalid metadata given. + */ + BadMetadata: PlainDescriptor; + /** + *No approval exists that would allow the transfer. + */ + Unapproved: PlainDescriptor; + /** + *The source account would not survive the transfer and it needs to stay alive. + */ + WouldDie: PlainDescriptor; + /** + *The asset-account already exists. + */ + AlreadyExists: PlainDescriptor; + /** + *The asset-account doesn't have an associated deposit. + */ + NoDeposit: PlainDescriptor; + /** + *The operation would result in funds being burned. + */ + WouldBurn: PlainDescriptor; + /** + *The asset is a live asset and is actively being used. Usually emit for operations such + *as `start_destroy` which require the asset to be in a destroying state. + */ + LiveAsset: PlainDescriptor; + /** + *The asset is not live, and likely being destroyed. + */ + AssetNotLive: PlainDescriptor; + /** + *The asset status is not the expected status. + */ + IncorrectStatus: PlainDescriptor; + /** + *The asset should be frozen before the given operation. + */ + NotFrozen: PlainDescriptor; + /** + *Callback action resulted in error + */ + CallbackFailed: PlainDescriptor; + /** + *The asset ID must be equal to the [`NextAssetId`]. + */ + BadAssetId: PlainDescriptor; + }; + AssetConversion: { + /** + *Provided asset pair is not supported for pool. + */ + InvalidAssetPair: PlainDescriptor; + /** + *Pool already exists. + */ + PoolExists: PlainDescriptor; + /** + *Desired amount can't be zero. + */ + WrongDesiredAmount: PlainDescriptor; + /** + *Provided amount should be greater than or equal to the existential deposit/asset's + *minimal amount. + */ + AmountOneLessThanMinimal: PlainDescriptor; + /** + *Provided amount should be greater than or equal to the existential deposit/asset's + *minimal amount. + */ + AmountTwoLessThanMinimal: PlainDescriptor; + /** + *Reserve needs to always be greater than or equal to the existential deposit/asset's + *minimal amount. + */ + ReserveLeftLessThanMinimal: PlainDescriptor; + /** + *Desired amount can't be equal to the pool reserve. + */ + AmountOutTooHigh: PlainDescriptor; + /** + *The pool doesn't exist. + */ + PoolNotFound: PlainDescriptor; + /** + *An overflow happened. + */ + Overflow: PlainDescriptor; + /** + *The minimal amount requirement for the first token in the pair wasn't met. + */ + AssetOneDepositDidNotMeetMinimum: PlainDescriptor; + /** + *The minimal amount requirement for the second token in the pair wasn't met. + */ + AssetTwoDepositDidNotMeetMinimum: PlainDescriptor; + /** + *The minimal amount requirement for the first token in the pair wasn't met. + */ + AssetOneWithdrawalDidNotMeetMinimum: PlainDescriptor; + /** + *The minimal amount requirement for the second token in the pair wasn't met. + */ + AssetTwoWithdrawalDidNotMeetMinimum: PlainDescriptor; + /** + *Optimal calculated amount is less than desired. + */ + OptimalAmountLessThanDesired: PlainDescriptor; + /** + *Insufficient liquidity minted. + */ + InsufficientLiquidityMinted: PlainDescriptor; + /** + *Requested liquidity can't be zero. + */ + ZeroLiquidity: PlainDescriptor; + /** + *Amount can't be zero. + */ + ZeroAmount: PlainDescriptor; + /** + *Calculated amount out is less than provided minimum amount. + */ + ProvidedMinimumNotSufficientForSwap: PlainDescriptor; + /** + *Provided maximum amount is not sufficient for swap. + */ + ProvidedMaximumNotSufficientForSwap: PlainDescriptor; + /** + *The provided path must consists of 2 assets at least. + */ + InvalidPath: PlainDescriptor; + /** + *The provided path must consists of unique assets. + */ + NonUniquePath: PlainDescriptor; + /** + *It was not possible to get or increment the Id of the pool. + */ + IncorrectPoolAssetId: PlainDescriptor; + /** + *The destination account cannot exist with the swapped funds. + */ + BelowMinimum: PlainDescriptor; + }; +}; +type IConstants = { + System: { + /** + * Block & extrinsics weights: base values and limits. + */ + BlockWeights: PlainDescriptor>; + /** + * The maximum length of a block (in bytes). + */ + BlockLength: PlainDescriptor>; + /** + * Maximum number of block number to block hash mappings to keep (oldest pruned first). + */ + BlockHashCount: PlainDescriptor; + /** + * The weight of runtime database operations the runtime can invoke. + */ + DbWeight: PlainDescriptor>; + /** + * Get the chain's in-code version. + */ + Version: PlainDescriptor>; + /** + * The designated SS58 prefix of this chain. + * + * This replaces the "ss58Format" property declared in the chain spec. Reason is + * that the runtime should know about the prefix in order to make use of it as + * an identifier of the chain. + */ + SS58Prefix: PlainDescriptor; + }; + ParachainSystem: { + /** + * Returns the parachain ID we are running with. + */ + SelfParaId: PlainDescriptor; + }; + Timestamp: { + /** + * The minimum period between blocks. + * + * Be aware that this is different to the *expected* period that the block production + * apparatus provides. Your chosen consensus system will generally work with this to + * determine a sensible block time. For example, in the Aura pallet it will be double this + * period on default settings. + */ + MinimumPeriod: PlainDescriptor; + }; + Balances: { + /** + * The minimum amount required to keep an account open. MUST BE GREATER THAN ZERO! + * + * If you *really* need it to be zero, you can enable the feature `insecure_zero_ed` for + * this pallet. However, you do so at your own risk: this will open up a major DoS vector. + * In case you have multiple sources of provider references, you may also get unexpected + * behaviour if you set this to zero. + * + * Bottom line: Do yourself a favour and make it at least one! + */ + ExistentialDeposit: PlainDescriptor; + /** + * The maximum number of locks that should exist on an account. + * Not strictly enforced, but used for weight estimation. + * + * Use of locks is deprecated in favour of freezes. See `https://github.com/paritytech/substrate/pull/12951/` + */ + MaxLocks: PlainDescriptor; + /** + * The maximum number of named reserves that can exist on an account. + * + * Use of reserves is deprecated in favour of holds. See `https://github.com/paritytech/substrate/pull/12951/` + */ + MaxReserves: PlainDescriptor; + /** + * The maximum number of individual freeze locks that can exist on an account at any time. + */ + MaxFreezes: PlainDescriptor; + }; + TransactionPayment: { + /** + * A fee multiplier for `Operational` extrinsics to compute "virtual tip" to boost their + * `priority` + * + * This value is multiplied by the `final_fee` to obtain a "virtual tip" that is later + * added to a tip component in regular `priority` calculations. + * It means that a `Normal` transaction can front-run a similarly-sized `Operational` + * extrinsic (with no tip), by including a tip value greater than the virtual tip. + * + * ```rust,ignore + * // For `Normal` + * let priority = priority_calc(tip); + * + * // For `Operational` + * let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier; + * let priority = priority_calc(tip + virtual_tip); + * ``` + * + * Note that since we use `final_fee` the multiplier applies also to the regular `tip` + * sent with the transaction. So, not only does the transaction get a priority bump based + * on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational` + * transactions. + */ + OperationalFeeMultiplier: PlainDescriptor; + }; + Vesting: { + /** + * The minimum amount transferred to call `vested_transfer`. + */ + MinVestedTransfer: PlainDescriptor; + /** + + */ + MaxVestingSchedules: PlainDescriptor; + }; + Aura: { + /** + * The slot duration Aura should run with, expressed in milliseconds. + * The effective value of this type should not change while the chain is running. + * + * For backwards compatibility either use [`MinimumPeriodTimesTwo`] or a const. + */ + SlotDuration: PlainDescriptor; + }; + XcmpQueue: { + /** + * The maximum number of inbound XCMP channels that can be suspended simultaneously. + * + * Any further channel suspensions will fail and messages may get dropped without further + * notice. Choosing a high value (1000) is okay; the trade-off that is described in + * [`InboundXcmpSuspended`] still applies at that scale. + */ + MaxInboundSuspended: PlainDescriptor; + /** + * Maximal number of outbound XCMP channels that can have messages queued at the same time. + * + * If this is reached, then no further messages can be sent to channels that do not yet + * have a message queued. This should be set to the expected maximum of outbound channels + * which is determined by [`Self::ChannelInfo`]. It is important to set this large enough, + * since otherwise the congestion control protocol will not work as intended and messages + * may be dropped. This value increases the PoV and should therefore not be picked too + * high. Governance needs to pay attention to not open more channels than this value. + */ + MaxActiveOutboundChannels: PlainDescriptor; + /** + * The maximal page size for HRMP message pages. + * + * A lower limit can be set dynamically, but this is the hard-limit for the PoV worst case + * benchmarking. The limit for the size of a message is slightly below this, since some + * overhead is incurred for encoding the format. + */ + MaxPageSize: PlainDescriptor; + }; + MessageQueue: { + /** + * The size of the page; this implies the maximum message size which can be sent. + * + * A good value depends on the expected message sizes, their weights, the weight that is + * available for processing them and the maximal needed message size. The maximal message + * size is slightly lower than this as defined by [`MaxMessageLenOf`]. + */ + HeapSize: PlainDescriptor; + /** + * The maximum number of stale pages (i.e. of overweight messages) allowed before culling + * can happen. Once there are more stale pages than this, then historical pages may be + * dropped, even if they contain unprocessed overweight messages. + */ + MaxStale: PlainDescriptor; + /** + * The amount of weight (if any) which should be provided to the message queue for + * servicing enqueued items `on_initialize`. + * + * This may be legitimately `None` in the case that you will call + * `ServiceQueues::service_queues` manually or set [`Self::IdleMaxServiceWeight`] to have + * it run in `on_idle`. + */ + ServiceWeight: PlainDescriptor>; + /** + * The maximum amount of weight (if any) to be used from remaining weight `on_idle` which + * should be provided to the message queue for servicing enqueued items `on_idle`. + * Useful for parachains to process messages at the same block they are received. + * + * If `None`, it will not call `ServiceQueues::service_queues` in `on_idle`. + */ + IdleMaxServiceWeight: PlainDescriptor>; + }; + Utility: { + /** + * The limit on the number of batched calls. + */ + batched_calls_limit: PlainDescriptor; + }; + Multisig: { + /** + * The base amount of currency needed to reserve for creating a multisig execution or to + * store a dispatch call for later. + * + * This is held for an additional storage item whose value size is + * `4 + sizeof((BlockNumber, Balance, AccountId))` bytes and whose key size is + * `32 + sizeof(AccountId)` bytes. + */ + DepositBase: PlainDescriptor; + /** + * The amount of currency needed per unit threshold when creating a multisig execution. + * + * This is held for adding 32 bytes more into a pre-existing storage value. + */ + DepositFactor: PlainDescriptor; + /** + * The maximum amount of signatories allowed in the multisig. + */ + MaxSignatories: PlainDescriptor; + }; + Proxy: { + /** + * The base amount of currency needed to reserve for creating a proxy. + * + * This is held for an additional storage item whose value size is + * `sizeof(Balance)` bytes and whose key size is `sizeof(AccountId)` bytes. + */ + ProxyDepositBase: PlainDescriptor; + /** + * The amount of currency needed per proxy added. + * + * This is held for adding 32 bytes plus an instance of `ProxyType` more into a + * pre-existing storage value. Thus, when configuring `ProxyDepositFactor` one should take + * into account `32 + proxy_type.encode().len()` bytes of data. + */ + ProxyDepositFactor: PlainDescriptor; + /** + * The maximum amount of proxies allowed for a single account. + */ + MaxProxies: PlainDescriptor; + /** + * The maximum amount of time-delayed announcements that are allowed to be pending. + */ + MaxPending: PlainDescriptor; + /** + * The base amount of currency needed to reserve for creating an announcement. + * + * This is held when a new storage item holding a `Balance` is created (typically 16 + * bytes). + */ + AnnouncementDepositBase: PlainDescriptor; + /** + * The amount of currency needed per announcement made. + * + * This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes) + * into a pre-existing storage value. + */ + AnnouncementDepositFactor: PlainDescriptor; + }; + Assets: { + /** + * Max number of items to destroy per `destroy_accounts` and `destroy_approvals` call. + * + * Must be configured to result in a weight that makes each call fit in a block. + */ + RemoveItemsLimit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved for an asset. + */ + AssetDeposit: PlainDescriptor; + /** + * The amount of funds that must be reserved for a non-provider asset account to be + * maintained. + */ + AssetAccountDeposit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved when adding metadata to your asset. + */ + MetadataDepositBase: PlainDescriptor; + /** + * The additional funds that must be reserved for the number of bytes you store in your + * metadata. + */ + MetadataDepositPerByte: PlainDescriptor; + /** + * The amount of funds that must be reserved when creating a new approval. + */ + ApprovalDeposit: PlainDescriptor; + /** + * The maximum length of a name or symbol stored on-chain. + */ + StringLimit: PlainDescriptor; + }; + Uniques: { + /** + * The basic amount of funds that must be reserved for collection. + */ + CollectionDeposit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved for an item. + */ + ItemDeposit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved when adding metadata to your item. + */ + MetadataDepositBase: PlainDescriptor; + /** + * The basic amount of funds that must be reserved when adding an attribute to an item. + */ + AttributeDepositBase: PlainDescriptor; + /** + * The additional funds that must be reserved for the number of bytes store in metadata, + * either "normal" metadata or attribute metadata. + */ + DepositPerByte: PlainDescriptor; + /** + * The maximum length of data stored on-chain. + */ + StringLimit: PlainDescriptor; + /** + * The maximum length of an attribute key. + */ + KeyLimit: PlainDescriptor; + /** + * The maximum length of an attribute value. + */ + ValueLimit: PlainDescriptor; + }; + Nfts: { + /** + * The basic amount of funds that must be reserved for collection. + */ + CollectionDeposit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved for an item. + */ + ItemDeposit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved when adding metadata to your item. + */ + MetadataDepositBase: PlainDescriptor; + /** + * The basic amount of funds that must be reserved when adding an attribute to an item. + */ + AttributeDepositBase: PlainDescriptor; + /** + * The additional funds that must be reserved for the number of bytes store in metadata, + * either "normal" metadata or attribute metadata. + */ + DepositPerByte: PlainDescriptor; + /** + * The maximum length of data stored on-chain. + */ + StringLimit: PlainDescriptor; + /** + * The maximum length of an attribute key. + */ + KeyLimit: PlainDescriptor; + /** + * The maximum length of an attribute value. + */ + ValueLimit: PlainDescriptor; + /** + * The maximum approvals an item could have. + */ + ApprovalsLimit: PlainDescriptor; + /** + * The maximum attributes approvals an item could have. + */ + ItemAttributesApprovalsLimit: PlainDescriptor; + /** + * The max number of tips a user could send. + */ + MaxTips: PlainDescriptor; + /** + * The max duration in blocks for deadlines. + */ + MaxDeadlineDuration: PlainDescriptor; + /** + * The max number of attributes a user could set per call. + */ + MaxAttributesPerCall: PlainDescriptor; + /** + * Disables some of pallet's features. + */ + Features: PlainDescriptor; + }; + ForeignAssets: { + /** + * Max number of items to destroy per `destroy_accounts` and `destroy_approvals` call. + * + * Must be configured to result in a weight that makes each call fit in a block. + */ + RemoveItemsLimit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved for an asset. + */ + AssetDeposit: PlainDescriptor; + /** + * The amount of funds that must be reserved for a non-provider asset account to be + * maintained. + */ + AssetAccountDeposit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved when adding metadata to your asset. + */ + MetadataDepositBase: PlainDescriptor; + /** + * The additional funds that must be reserved for the number of bytes you store in your + * metadata. + */ + MetadataDepositPerByte: PlainDescriptor; + /** + * The amount of funds that must be reserved when creating a new approval. + */ + ApprovalDeposit: PlainDescriptor; + /** + * The maximum length of a name or symbol stored on-chain. + */ + StringLimit: PlainDescriptor; + }; + PoolAssets: { + /** + * Max number of items to destroy per `destroy_accounts` and `destroy_approvals` call. + * + * Must be configured to result in a weight that makes each call fit in a block. + */ + RemoveItemsLimit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved for an asset. + */ + AssetDeposit: PlainDescriptor; + /** + * The amount of funds that must be reserved for a non-provider asset account to be + * maintained. + */ + AssetAccountDeposit: PlainDescriptor; + /** + * The basic amount of funds that must be reserved when adding metadata to your asset. + */ + MetadataDepositBase: PlainDescriptor; + /** + * The additional funds that must be reserved for the number of bytes you store in your + * metadata. + */ + MetadataDepositPerByte: PlainDescriptor; + /** + * The amount of funds that must be reserved when creating a new approval. + */ + ApprovalDeposit: PlainDescriptor; + /** + * The maximum length of a name or symbol stored on-chain. + */ + StringLimit: PlainDescriptor; + }; + AssetConversion: { + /** + * A % the liquidity providers will take of every swap. Represents 10ths of a percent. + */ + LPFee: PlainDescriptor; + /** + * A one-time fee to setup the pool. + */ + PoolSetupFee: PlainDescriptor; + /** + * Asset class from [`Config::Assets`] used to pay the [`Config::PoolSetupFee`]. + */ + PoolSetupFeeAsset: PlainDescriptor>; + /** + * A fee to withdraw the liquidity. + */ + LiquidityWithdrawalFee: PlainDescriptor; + /** + * The minimum LP token amount that could be minted. Ameliorates rounding errors. + */ + MintMinLiquidity: PlainDescriptor; + /** + * The max number of hops in a swap. + */ + MaxSwapPathLength: PlainDescriptor; + /** + * The pallet's id, used for deriving its sovereign account ID. + */ + PalletId: PlainDescriptor>; + }; +}; +type IRuntimeCalls = { + /** + * API necessary for block authorship with aura. + */ + AuraApi: { + /** + * Returns the slot duration for Aura. + * + * Currently, only the value provided by this type at genesis will be used. + */ + slot_duration: RuntimeDescriptor<[], bigint>; + /** + * Return the current set of authorities. + */ + authorities: RuntimeDescriptor<[], Anonymize>; + }; + /** + * This runtime API is used to inform potential block authors whether they will + * have the right to author at a slot, assuming they have claimed the slot. + * + * In particular, this API allows Aura-based parachains to regulate their "unincluded segment", + * which is the section of the head of the chain which has not yet been made available in the + * relay chain. + * + * When the unincluded segment is short, Aura chains will allow authors to create multiple + * blocks per slot in order to build a backlog. When it is saturated, this API will limit + * the amount of blocks that can be created. + */ + AuraUnincludedSegmentApi: { + /** + * Whether it is legal to extend the chain, assuming the given block is the most + * recently included one as-of the relay parent that will be built against, and + * the given slot. + * + * This should be consistent with the logic the runtime uses when validating blocks to + * avoid issues. + * + * When the unincluded segment is empty, i.e. `included_hash == at`, where at is the block + * whose state we are querying against, this must always return `true` as long as the slot + * is more recent than the included block itself. + */ + can_build_upon: RuntimeDescriptor<[included_hash: FixedSizeBinary<32>, slot: bigint], boolean>; + }; + /** + * The `Core` runtime api that every Substrate runtime needs to implement. + */ + Core: { + /** + * Returns the version of the runtime. + */ + version: RuntimeDescriptor<[], Anonymize>; + /** + * Execute the given block. + */ + execute_block: RuntimeDescriptor<[block: Anonymize], undefined>; + /** + * Initialize a block with the given header and return the runtime executive mode. + */ + initialize_block: RuntimeDescriptor<[header: Anonymize], Anonymize>; + }; + /** + * The `Metadata` api trait that returns metadata for the runtime. + */ + Metadata: { + /** + * Returns the metadata of a runtime. + */ + metadata: RuntimeDescriptor<[], Binary>; + /** + * Returns the metadata at a given version. + * + * If the given `version` isn't supported, this will return `None`. + * Use [`Self::metadata_versions`] to find out about supported metadata version of the runtime. + */ + metadata_at_version: RuntimeDescriptor<[version: number], Anonymize>; + /** + * Returns the supported metadata versions. + * + * This can be used to call `metadata_at_version`. + */ + metadata_versions: RuntimeDescriptor<[], Anonymize>; + }; + /** + * The `BlockBuilder` api trait that provides the required functionality for building a block. + */ + BlockBuilder: { + /** + * Apply the given extrinsic. + * + * Returns an inclusion outcome which specifies if this extrinsic is included in + * this block or not. + */ + apply_extrinsic: RuntimeDescriptor<[extrinsic: Binary], Anonymize>; + /** + * Finish the current block. + */ + finalize_block: RuntimeDescriptor<[], Anonymize>; + /** + * Generate inherent extrinsics. The inherent data will vary from chain to chain. + */ + inherent_extrinsics: RuntimeDescriptor<[inherent: Anonymize], Anonymize>; + /** + * Check that the inherents are valid. The inherent data will vary from chain to chain. + */ + check_inherents: RuntimeDescriptor<[block: Anonymize, data: Anonymize], Anonymize>; + }; + /** + * The `TaggedTransactionQueue` api trait for interfering with the transaction queue. + */ + TaggedTransactionQueue: { + /** + * Validate the transaction. + * + * This method is invoked by the transaction pool to learn details about given transaction. + * The implementation should make sure to verify the correctness of the transaction + * against current state. The given `block_hash` corresponds to the hash of the block + * that is used as current state. + * + * Note that this call may be performed by the pool multiple times and transactions + * might be verified in any possible order. + */ + validate_transaction: RuntimeDescriptor<[source: TransactionValidityTransactionSource, tx: Binary, block_hash: FixedSizeBinary<32>], Anonymize>; + }; + /** + * The offchain worker api. + */ + OffchainWorkerApi: { + /** + * Starts the off-chain task for given block header. + */ + offchain_worker: RuntimeDescriptor<[header: Anonymize], undefined>; + }; + /** + * Session keys runtime api. + */ + SessionKeys: { + /** + * Generate a set of session keys with optionally using the given seed. + * The keys should be stored within the keystore exposed via runtime + * externalities. + * + * The seed needs to be a valid `utf8` string. + * + * Returns the concatenated SCALE encoded public keys. + */ + generate_session_keys: RuntimeDescriptor<[seed: Anonymize], Binary>; + /** + * Decode the given public session keys. + * + * Returns the list of public raw public keys + key type. + */ + decode_session_keys: RuntimeDescriptor<[encoded: Binary], Anonymize>; + }; + /** + * The API to query account nonce. + */ + AccountNonceApi: { + /** + * Get current account nonce of given `AccountId`. + */ + account_nonce: RuntimeDescriptor<[account: SS58String], number>; + }; + /** + + */ + TransactionPaymentApi: { + /** + + */ + query_info: RuntimeDescriptor<[uxt: Binary, len: number], Anonymize>; + /** + + */ + query_fee_details: RuntimeDescriptor<[uxt: Binary, len: number], Anonymize>; + /** + + */ + query_weight_to_fee: RuntimeDescriptor<[weight: Anonymize], bigint>; + /** + + */ + query_length_to_fee: RuntimeDescriptor<[length: number], bigint>; + }; + /** + + */ + TransactionPaymentCallApi: { + /** + * Query information of a dispatch class, weight, and fee of a given encoded `Call`. + */ + query_call_info: RuntimeDescriptor<[call: Anonymize, len: number], Anonymize>; + /** + * Query fee details of a given encoded `Call`. + */ + query_call_fee_details: RuntimeDescriptor<[call: Anonymize, len: number], Anonymize>; + /** + * Query the output of the current `WeightToFee` given some input. + */ + query_weight_to_fee: RuntimeDescriptor<[weight: Anonymize], bigint>; + /** + * Query the output of the current `LengthToFee` given some input. + */ + query_length_to_fee: RuntimeDescriptor<[length: number], bigint>; + }; + /** + * A trait of XCM payment API. + * + * API provides functionality for obtaining: + * + * * the weight required to execute an XCM message, + * * a list of acceptable `AssetId`s for message execution payment, + * * the cost of the weight in the specified acceptable `AssetId`. + * * the fees for an XCM message delivery. + * + * To determine the execution weight of the calls required for + * [`xcm::latest::Instruction::Transact`] instruction, `TransactionPaymentCallApi` can be used. + */ + XcmPaymentApi: { + /** + * Returns a list of acceptable payment assets. + * + * # Arguments + * + * * `xcm_version`: Version. + */ + query_acceptable_payment_assets: RuntimeDescriptor<[xcm_version: number], Anonymize>; + /** + * Returns a weight needed to execute a XCM. + * + * # Arguments + * + * * `message`: `VersionedXcm`. + */ + query_xcm_weight: RuntimeDescriptor<[message: XcmVersionedXcm], Anonymize>; + /** + * Converts a weight into a fee for the specified `AssetId`. + * + * # Arguments + * + * * `weight`: convertible `Weight`. + * * `asset`: `VersionedAssetId`. + */ + query_weight_to_asset_fee: RuntimeDescriptor<[weight: Anonymize, asset: XcmVersionedAssetId], Anonymize>; + /** + * Get delivery fees for sending a specific `message` to a `destination`. + * These always come in a specific asset, defined by the chain. + * + * # Arguments + * * `message`: The message that'll be sent, necessary because most delivery fees are based on the + * size of the message. + * * `destination`: The destination to send the message to. Different destinations may use + * different senders that charge different fees. + */ + query_delivery_fees: RuntimeDescriptor<[destination: XcmVersionedLocation, message: XcmVersionedXcm], Anonymize>; + }; + /** + * API for dry-running extrinsics and XCM programs to get the programs that need to be passed to the fees API. + * + * All calls return a vector of tuples (location, xcm) where each "xcm" is executed in "location". + * If there's local execution, the location will be "Here". + * This vector can be used to calculate both execution and delivery fees. + * + * Calls or XCMs might fail when executed, this doesn't mean the result of these calls will be an `Err`. + * In those cases, there might still be a valid result, with the execution error inside it. + * The only reasons why these calls might return an error are listed in the [`Error`] enum. + */ + DryRunApi: { + /** + * Dry run call. + */ + dry_run_call: RuntimeDescriptor<[origin: Anonymize, call: Anonymize], Anonymize>; + /** + * Dry run XCM program + */ + dry_run_xcm: RuntimeDescriptor<[origin_location: XcmVersionedLocation, xcm: XcmVersionedXcm], Anonymize>; + }; + /** + * API for useful conversions between XCM `Location` and `AccountId`. + */ + LocationToAccountApi: { + /** + * Converts `Location` to `AccountId`. + */ + convert_location: RuntimeDescriptor<[location: XcmVersionedLocation], Anonymize>; + }; + /** + * The API for querying account's balances from runtime. + */ + FungiblesApi: { + /** + * Returns the list of all [`Asset`] that an `AccountId` has. + */ + query_account_balances: RuntimeDescriptor<[account: SS58String], Anonymize>; + }; + /** + * Runtime api to collect information about a collation. + */ + CollectCollationInfo: { + /** + * Collect information about a collation. + * + * The given `header` is the header of the built block for that + * we are collecting the collation info for. + */ + collect_collation_info: RuntimeDescriptor<[header: Anonymize], Anonymize>; + }; + /** + * API to interact with RuntimeGenesisConfig for the runtime + */ + GenesisBuilder: { + /** + * Build `RuntimeGenesisConfig` from a JSON blob not using any defaults and store it in the + * storage. + * + * In the case of a FRAME-based runtime, this function deserializes the full `RuntimeGenesisConfig` from the given JSON blob and + * puts it into the storage. If the provided JSON blob is incorrect or incomplete or the + * deserialization fails, an error is returned. + * + * Please note that provided JSON blob must contain all `RuntimeGenesisConfig` fields, no + * defaults will be used. + */ + build_state: RuntimeDescriptor<[json: Binary], Anonymize>; + /** + * Returns a JSON blob representation of the built-in `RuntimeGenesisConfig` identified by + * `id`. + * + * If `id` is `None` the function returns JSON blob representation of the default + * `RuntimeGenesisConfig` struct of the runtime. Implementation must provide default + * `RuntimeGenesisConfig`. + * + * Otherwise function returns a JSON representation of the built-in, named + * `RuntimeGenesisConfig` preset identified by `id`, or `None` if such preset does not + * exists. Returned `Vec` contains bytes of JSON blob (patch) which comprises a list of + * (potentially nested) key-value pairs that are intended for customizing the default + * runtime genesis config. The patch shall be merged (rfc7386) with the JSON representation + * of the default `RuntimeGenesisConfig` to create a comprehensive genesis config that can + * be used in `build_state` method. + */ + get_preset: RuntimeDescriptor<[id: Anonymize], Anonymize>; + /** + * Returns a list of identifiers for available builtin `RuntimeGenesisConfig` presets. + * + * The presets from the list can be queried with [`GenesisBuilder::get_preset`] method. If + * no named presets are provided by the runtime the list is empty. + */ + preset_names: RuntimeDescriptor<[], Anonymize>; + }; + /** + * This runtime api allows people to query the size of the liquidity pools + * and quote prices for swaps. + */ + AssetConversionApi: { + /** + * Provides a quote for [`Pallet::swap_tokens_for_exact_tokens`]. + * + * Note that the price may have changed by the time the transaction is executed. + * (Use `amount_in_max` to control slippage.) + */ + quote_price_tokens_for_exact_tokens: RuntimeDescriptor<[asset1: Anonymize, asset2: Anonymize, amount: bigint, include_fee: boolean], Anonymize>; + /** + * Provides a quote for [`Pallet::swap_exact_tokens_for_tokens`]. + * + * Note that the price may have changed by the time the transaction is executed. + * (Use `amount_out_min` to control slippage.) + */ + quote_price_exact_tokens_for_tokens: RuntimeDescriptor<[asset1: Anonymize, asset2: Anonymize, amount: bigint, include_fee: boolean], Anonymize>; + /** + * Returns the size of the liquidity pool for the given asset pair. + */ + get_reserves: RuntimeDescriptor<[asset1: Anonymize, asset2: Anonymize], Anonymize>; + }; +}; +type IAsset = PlainDescriptor>; +export type AssethubDispatchError = Anonymize; +type PalletsTypedef = { + __storage: IStorage; + __tx: ICalls; + __event: IEvent; + __error: IError; + __const: IConstants; +}; +type IDescriptors = { + descriptors: { + pallets: PalletsTypedef; + apis: IRuntimeCalls; + } & Promise; + metadataTypes: Promise; + asset: IAsset; +}; +declare const _allDescriptors: IDescriptors; +export default _allDescriptors; +export type AssethubQueries = QueryFromPalletsDef; +export type AssethubCalls = TxFromPalletsDef; +export type AssethubEvents = EventsFromPalletsDef; +export type AssethubErrors = ErrorsFromPalletsDef; +export type AssethubConstants = ConstFromPalletsDef; +export type AssethubCallData = Anonymize & { + value: { + type: string; + }; +}; +export type AssethubWhitelistEntry = PalletKey | ApiKey | `query.${NestedKey}` | `tx.${NestedKey}` | `event.${NestedKey}` | `error.${NestedKey}` | `const.${NestedKey}`; +type PalletKey = `*.${keyof (IStorage & ICalls & IEvent & IError & IConstants & IRuntimeCalls)}`; +type NestedKey>> = "*" | { + [P in keyof D & string]: `${P}.*` | { + [N in keyof D[P] & string]: `${P}.${N}`; + }[keyof D[P] & string]; +}[keyof D & string]; +type ApiKey>> = "api.*" | { + [P in keyof D & string]: `api.${P}.*` | { + [N in keyof D[P] & string]: `api.${P}.${N}`; + }[keyof D[P] & string]; +}[keyof D & string]; diff --git a/.papi/descriptors/dist/common-types.d.ts b/.papi/descriptors/dist/common-types.d.ts new file mode 100644 index 0000000000..71309df67d --- /dev/null +++ b/.papi/descriptors/dist/common-types.d.ts @@ -0,0 +1,8390 @@ +import { Enum, GetEnum, FixedSizeBinary, Binary, SS58String, FixedSizeArray, ResultPayload, TxCallData } from "polkadot-api"; +type AnonymousEnum = T & { + __anonymous: true; +}; +type MyTuple = [T, ...T[]]; +type SeparateUndefined = undefined extends T ? undefined | Exclude : T; +type Anonymize = SeparateUndefined ? number extends L ? Binary : FixedSizeBinary : T extends string | number | bigint | boolean | void | undefined | null | symbol | Uint8Array | Enum ? T : T extends AnonymousEnum ? Enum : T extends MyTuple ? { + [K in keyof T]: T[K]; +} : T extends [] ? [] : T extends FixedSizeArray ? number extends L ? Array : FixedSizeArray : { + [K in keyof T & string]: T[K]; +}>; +export type I5sesotjlssv2d = { + "nonce": number; + "consumers": number; + "providers": number; + "sufficients": number; + "data": Anonymize; +}; +export type I1q8tnt1cluu5j = { + "free": bigint; + "reserved": bigint; + "frozen": bigint; + "flags": bigint; +}; +export type Iffmde3ekjedi9 = { + "normal": Anonymize; + "operational": Anonymize; + "mandatory": Anonymize; +}; +export type I4q39t5hn830vp = { + "ref_time": bigint; + "proof_size": bigint; +}; +export type I4mddgoa69c0a2 = Array; +export type DigestItem = Enum<{ + "PreRuntime": Anonymize; + "Consensus": Anonymize; + "Seal": Anonymize; + "Other": Binary; + "RuntimeEnvironmentUpdated": undefined; +}>; +export declare const DigestItem: GetEnum; +export type I82jm9g7pufuel = [FixedSizeBinary<4>, Binary]; +export type I337ai2btcivaq = Array>; +export type I11cj6t2vcmlfq = { + "phase": Phase; + "event": Anonymize; + "topics": Anonymize; +}; +export type Phase = Enum<{ + "ApplyExtrinsic": number; + "Finalization": undefined; + "Initialization": undefined; +}>; +export declare const Phase: GetEnum; +export type I668na8k863p14 = AnonymousEnum<{ + "System": Anonymize; + "ParachainSystem": Anonymize; + "Balances": Anonymize; + "TransactionPayment": TransactionPaymentEvent; + "AssetTxPayment": Anonymize; + "Vesting": VestingEvent; + "CollatorSelection": Anonymize; + "Session": SessionEvent; + "XcmpQueue": Anonymize; + "PolkadotXcm": Anonymize; + "CumulusXcm": Anonymize; + "MessageQueue": Anonymize; + "Utility": Anonymize; + "Multisig": Anonymize; + "Proxy": Anonymize; + "Assets": Anonymize; + "Uniques": Anonymize; + "Nfts": Anonymize; + "ForeignAssets": Anonymize; + "PoolAssets": Anonymize; + "AssetConversion": Anonymize; +}>; +export type I2t5vkq7dgaeal = AnonymousEnum<{ + /** + *An extrinsic completed successfully. + */ + "ExtrinsicSuccess": Anonymize; + /** + *An extrinsic failed. + */ + "ExtrinsicFailed": Anonymize; + /** + *`:code` was updated. + */ + "CodeUpdated": undefined; + /** + *A new account was created. + */ + "NewAccount": Anonymize; + /** + *An account was reaped. + */ + "KilledAccount": Anonymize; + /** + *On on-chain remark happened. + */ + "Remarked": Anonymize; + /** + *An upgrade was authorized. + */ + "UpgradeAuthorized": Anonymize; +}>; +export type Ia82mnkmeo2rhc = { + "dispatch_info": Anonymize; +}; +export type Ic9s8f85vjtncc = { + "weight": Anonymize; + "class": DispatchClass; + "pays_fee": Anonymize; +}; +export type DispatchClass = Enum<{ + "Normal": undefined; + "Operational": undefined; + "Mandatory": undefined; +}>; +export declare const DispatchClass: GetEnum; +export type Iehg04bj71rkd = AnonymousEnum<{ + "Yes": undefined; + "No": undefined; +}>; +export type Iane057r2vqar = { + "dispatch_error": Anonymize; + "dispatch_info": Anonymize; +}; +export type Icogrvf0inr18b = AnonymousEnum<{ + "Other": undefined; + "CannotLookup": undefined; + "BadOrigin": undefined; + "Module": Anonymize; + "ConsumerRemaining": undefined; + "NoProviders": undefined; + "TooManyConsumers": undefined; + "Token": TokenError; + "Arithmetic": ArithmeticError; + "Transactional": TransactionalError; + "Exhausted": undefined; + "Corruption": undefined; + "Unavailable": undefined; + "RootNotAllowed": undefined; +}>; +export type Iasm4f970q7bf9 = AnonymousEnum<{ + "System": Anonymize; + "ParachainSystem": Anonymize; + "Timestamp": undefined; + "ParachainInfo": undefined; + "Balances": Anonymize; + "TransactionPayment": undefined; + "AssetTxPayment": undefined; + "Vesting": Anonymize; + "Authorship": undefined; + "CollatorSelection": Anonymize; + "Session": Anonymize; + "Aura": undefined; + "AuraExt": undefined; + "XcmpQueue": Anonymize; + "PolkadotXcm": Anonymize; + "CumulusXcm": undefined; + "ToKusamaXcmRouter": undefined; + "MessageQueue": Anonymize; + "Utility": Anonymize; + "Multisig": Anonymize; + "Proxy": Anonymize; + "Assets": Anonymize; + "Uniques": Anonymize; + "Nfts": Anonymize; + "ForeignAssets": Anonymize; + "PoolAssets": Anonymize; + "AssetConversion": Anonymize; +}>; +export type I5o0s7c8q1cc9b = AnonymousEnum<{ + /** + *The name of specification does not match between the current runtime + *and the new runtime. + */ + "InvalidSpecName": undefined; + /** + *The specification version is not allowed to decrease between the current runtime + *and the new runtime. + */ + "SpecVersionNeedsToIncrease": undefined; + /** + *Failed to extract the runtime version from the new runtime. + * + *Either calling `Core_version` or decoding `RuntimeVersion` failed. + */ + "FailedToExtractRuntimeVersion": undefined; + /** + *Suicide called when the account has non-default composite data. + */ + "NonDefaultComposite": undefined; + /** + *There is a non-zero reference count preventing the account from being purged. + */ + "NonZeroRefCount": undefined; + /** + *The origin filter prevent the call to be dispatched. + */ + "CallFiltered": undefined; + /** + *A multi-block migration is ongoing and prevents the current code from being replaced. + */ + "MultiBlockMigrationsOngoing": undefined; + /** + *No upgrade authorized. + */ + "NothingAuthorized": undefined; + /** + *The submitted code is not authorized. + */ + "Unauthorized": undefined; +}>; +export type I9p95gln24a0rn = AnonymousEnum<{ + /** + *Attempt to upgrade validation function while existing upgrade pending. + */ + "OverlappingUpgrades": undefined; + /** + *Polkadot currently prohibits this parachain from upgrading its validation function. + */ + "ProhibitedByPolkadot": undefined; + /** + *The supplied validation function has compiled into a blob larger than Polkadot is + *willing to run. + */ + "TooBig": undefined; + /** + *The inherent which supplies the validation data did not run this block. + */ + "ValidationDataNotAvailable": undefined; + /** + *The inherent which supplies the host configuration did not run this block. + */ + "HostConfigurationNotAvailable": undefined; + /** + *No validation function upgrade is currently scheduled. + */ + "NotScheduled": undefined; + /** + *No code upgrade has been authorized. + */ + "NothingAuthorized": undefined; + /** + *The given code upgrade has not been authorized. + */ + "Unauthorized": undefined; +}>; +export type Idj13i7adlomht = AnonymousEnum<{ + /** + *Vesting balance too high to send value. + */ + "VestingBalance": undefined; + /** + *Account liquidity restrictions prevent withdrawal. + */ + "LiquidityRestrictions": undefined; + /** + *Balance too low to send value. + */ + "InsufficientBalance": undefined; + /** + *Value too low to create account due to existential deposit. + */ + "ExistentialDeposit": undefined; + /** + *Transfer/payment would kill account. + */ + "Expendability": undefined; + /** + *A vesting schedule already exists for this account. + */ + "ExistingVestingSchedule": undefined; + /** + *Beneficiary account must pre-exist. + */ + "DeadAccount": undefined; + /** + *Number of named reserves exceed `MaxReserves`. + */ + "TooManyReserves": undefined; + /** + *Number of holds exceed `VariantCountOf`. + */ + "TooManyHolds": undefined; + /** + *Number of freezes exceed `MaxFreezes`. + */ + "TooManyFreezes": undefined; + /** + *The issuance cannot be modified since it is already deactivated. + */ + "IssuanceDeactivated": undefined; + /** + *The delta cannot be zero. + */ + "DeltaZero": undefined; +}>; +export type Icof2acl69lq3c = AnonymousEnum<{ + /** + *The account given is not vesting. + */ + "NotVesting": undefined; + /** + *The account already has `MaxVestingSchedules` count of schedules and thus + *cannot add another one. Consider merging existing schedules in order to add another. + */ + "AtMaxVestingSchedules": undefined; + /** + *Amount being transferred is too low to create a vesting schedule. + */ + "AmountLow": undefined; + /** + *An index was out of bounds of the vesting schedules. + */ + "ScheduleIndexOutOfBounds": undefined; + /** + *Failed to create a new schedule because some parameter was invalid. + */ + "InvalidScheduleParams": undefined; +}>; +export type I36bcffk2387dv = AnonymousEnum<{ + /** + *The pallet has too many candidates. + */ + "TooManyCandidates": undefined; + /** + *Leaving would result in too few candidates. + */ + "TooFewEligibleCollators": undefined; + /** + *Account is already a candidate. + */ + "AlreadyCandidate": undefined; + /** + *Account is not a candidate. + */ + "NotCandidate": undefined; + /** + *There are too many Invulnerables. + */ + "TooManyInvulnerables": undefined; + /** + *Account is already an Invulnerable. + */ + "AlreadyInvulnerable": undefined; + /** + *Account is not an Invulnerable. + */ + "NotInvulnerable": undefined; + /** + *Account has no associated validator ID. + */ + "NoAssociatedValidatorId": undefined; + /** + *Validator ID is not yet registered. + */ + "ValidatorNotRegistered": undefined; + /** + *Could not insert in the candidate list. + */ + "InsertToCandidateListFailed": undefined; + /** + *Could not remove from the candidate list. + */ + "RemoveFromCandidateListFailed": undefined; + /** + *New deposit amount would be below the minimum candidacy bond. + */ + "DepositTooLow": undefined; + /** + *Could not update the candidate list. + */ + "UpdateCandidateListFailed": undefined; + /** + *Deposit amount is too low to take the target's slot in the candidate list. + */ + "InsufficientBond": undefined; + /** + *The target account to be replaced in the candidate list is not a candidate. + */ + "TargetIsNotCandidate": undefined; + /** + *The updated deposit amount is equal to the amount already reserved. + */ + "IdenticalDeposit": undefined; + /** + *Cannot lower candidacy bond while occupying a future collator slot in the list. + */ + "InvalidUnreserve": undefined; +}>; +export type I1e07dgbaqd1sq = AnonymousEnum<{ + /** + *Invalid ownership proof. + */ + "InvalidProof": undefined; + /** + *No associated validator ID for account. + */ + "NoAssociatedValidatorId": undefined; + /** + *Registered duplicate key. + */ + "DuplicatedKey": undefined; + /** + *No keys are associated with this account. + */ + "NoKeys": undefined; + /** + *Key setting account is not live, so it's impossible to associate keys. + */ + "NoAccount": undefined; +}>; +export type Idnnbndsjjeqqs = AnonymousEnum<{ + /** + *Setting the queue config failed since one of its values was invalid. + */ + "BadQueueConfig": undefined; + /** + *The execution is already suspended. + */ + "AlreadySuspended": undefined; + /** + *The execution is already resumed. + */ + "AlreadyResumed": undefined; + /** + *There are too many active outbound channels. + */ + "TooManyActiveOutboundChannels": undefined; + /** + *The message is too big. + */ + "TooBig": undefined; +}>; +export type I87j95aq93d7dq = AnonymousEnum<{ + /** + *The desired destination was unreachable, generally because there is a no way of routing + *to it. + */ + "Unreachable": undefined; + /** + *There was some other issue (i.e. not to do with routing) in sending the message. + *Perhaps a lack of space for buffering the message. + */ + "SendFailure": undefined; + /** + *The message execution fails the filter. + */ + "Filtered": undefined; + /** + *The message's weight could not be determined. + */ + "UnweighableMessage": undefined; + /** + *The destination `Location` provided cannot be inverted. + */ + "DestinationNotInvertible": undefined; + /** + *The assets to be sent are empty. + */ + "Empty": undefined; + /** + *Could not re-anchor the assets to declare the fees for the destination chain. + */ + "CannotReanchor": undefined; + /** + *Too many assets have been attempted for transfer. + */ + "TooManyAssets": undefined; + /** + *Origin is invalid for sending. + */ + "InvalidOrigin": undefined; + /** + *The version of the `Versioned` value used is not able to be interpreted. + */ + "BadVersion": undefined; + /** + *The given location could not be used (e.g. because it cannot be expressed in the + *desired version of XCM). + */ + "BadLocation": undefined; + /** + *The referenced subscription could not be found. + */ + "NoSubscription": undefined; + /** + *The location is invalid since it already has a subscription from us. + */ + "AlreadySubscribed": undefined; + /** + *Could not check-out the assets for teleportation to the destination chain. + */ + "CannotCheckOutTeleport": undefined; + /** + *The owner does not own (all) of the asset that they wish to do the operation on. + */ + "LowBalance": undefined; + /** + *The asset owner has too many locks on the asset. + */ + "TooManyLocks": undefined; + /** + *The given account is not an identifiable sovereign account for any location. + */ + "AccountNotSovereign": undefined; + /** + *The operation required fees to be paid which the initiator could not meet. + */ + "FeesNotMet": undefined; + /** + *A remote lock with the corresponding data could not be found. + */ + "LockNotFound": undefined; + /** + *The unlock operation cannot succeed because there are still consumers of the lock. + */ + "InUse": undefined; + /** + *Invalid asset, reserve chain could not be determined for it. + */ + "InvalidAssetUnknownReserve": undefined; + /** + *Invalid asset, do not support remote asset reserves with different fees reserves. + */ + "InvalidAssetUnsupportedReserve": undefined; + /** + *Too many assets with different reserve locations have been attempted for transfer. + */ + "TooManyReserves": undefined; + /** + *Local XCM execution incomplete. + */ + "LocalExecutionIncomplete": undefined; +}>; +export type I5iupade5ag2dp = AnonymousEnum<{ + /** + *Page is not reapable because it has items remaining to be processed and is not old + *enough. + */ + "NotReapable": undefined; + /** + *Page to be reaped does not exist. + */ + "NoPage": undefined; + /** + *The referenced message could not be found. + */ + "NoMessage": undefined; + /** + *The message was already processed and cannot be processed again. + */ + "AlreadyProcessed": undefined; + /** + *The message is queued for future execution. + */ + "Queued": undefined; + /** + *There is temporarily not enough weight to continue servicing messages. + */ + "InsufficientWeight": undefined; + /** + *This message is temporarily unprocessable. + * + *Such errors are expected, but not guaranteed, to resolve themselves eventually through + *retrying. + */ + "TemporarilyUnprocessable": undefined; + /** + *The queue is paused and no message can be executed from it. + * + *This can change at any time and may resolve in the future by re-trying. + */ + "QueuePaused": undefined; + /** + *Another call is in progress and needs to finish before this call can happen. + */ + "RecursiveDisallowed": undefined; +}>; +export type I8dt2g2hcrgh36 = AnonymousEnum<{ + /** + *Too many calls batched. + */ + "TooManyCalls": undefined; +}>; +export type Ia76qmhhg4jvb9 = AnonymousEnum<{ + /** + *Threshold must be 2 or greater. + */ + "MinimumThreshold": undefined; + /** + *Call is already approved by this signatory. + */ + "AlreadyApproved": undefined; + /** + *Call doesn't need any (more) approvals. + */ + "NoApprovalsNeeded": undefined; + /** + *There are too few signatories in the list. + */ + "TooFewSignatories": undefined; + /** + *There are too many signatories in the list. + */ + "TooManySignatories": undefined; + /** + *The signatories were provided out of order; they should be ordered. + */ + "SignatoriesOutOfOrder": undefined; + /** + *The sender was contained in the other signatories; it shouldn't be. + */ + "SenderInSignatories": undefined; + /** + *Multisig operation not found when attempting to cancel. + */ + "NotFound": undefined; + /** + *Only the account that originally created the multisig is able to cancel it. + */ + "NotOwner": undefined; + /** + *No timepoint was given, yet the multisig operation is already underway. + */ + "NoTimepoint": undefined; + /** + *A different timepoint was given to the multisig operation that is underway. + */ + "WrongTimepoint": undefined; + /** + *A timepoint was given, yet no multisig operation is underway. + */ + "UnexpectedTimepoint": undefined; + /** + *The maximum weight information provided was too low. + */ + "MaxWeightTooLow": undefined; + /** + *The data to be stored is already stored. + */ + "AlreadyStored": undefined; +}>; +export type Iuvt54ei4cehc = AnonymousEnum<{ + /** + *There are too many proxies registered or too many announcements pending. + */ + "TooMany": undefined; + /** + *Proxy registration not found. + */ + "NotFound": undefined; + /** + *Sender is not a proxy of the account to be proxied. + */ + "NotProxy": undefined; + /** + *A call which is incompatible with the proxy type's filter was attempted. + */ + "Unproxyable": undefined; + /** + *Account is already a proxy. + */ + "Duplicate": undefined; + /** + *Call may not be made by proxy because it may escalate its privileges. + */ + "NoPermission": undefined; + /** + *Announcement, if made at all, was made too recently. + */ + "Unannounced": undefined; + /** + *Cannot add self as proxy. + */ + "NoSelfProxy": undefined; +}>; +export type Iapedqb0veh71 = AnonymousEnum<{ + /** + *Account balance must be greater than or equal to the transfer amount. + */ + "BalanceLow": undefined; + /** + *The account to alter does not exist. + */ + "NoAccount": undefined; + /** + *The signing account has no permission to do the operation. + */ + "NoPermission": undefined; + /** + *The given asset ID is unknown. + */ + "Unknown": undefined; + /** + *The origin account is frozen. + */ + "Frozen": undefined; + /** + *The asset ID is already taken. + */ + "InUse": undefined; + /** + *Invalid witness data given. + */ + "BadWitness": undefined; + /** + *Minimum balance should be non-zero. + */ + "MinBalanceZero": undefined; + /** + *Unable to increment the consumer reference counters on the account. Either no provider + *reference exists to allow a non-zero balance of a non-self-sufficient asset, or one + *fewer then the maximum number of consumers has been reached. + */ + "UnavailableConsumer": undefined; + /** + *Invalid metadata given. + */ + "BadMetadata": undefined; + /** + *No approval exists that would allow the transfer. + */ + "Unapproved": undefined; + /** + *The source account would not survive the transfer and it needs to stay alive. + */ + "WouldDie": undefined; + /** + *The asset-account already exists. + */ + "AlreadyExists": undefined; + /** + *The asset-account doesn't have an associated deposit. + */ + "NoDeposit": undefined; + /** + *The operation would result in funds being burned. + */ + "WouldBurn": undefined; + /** + *The asset is a live asset and is actively being used. Usually emit for operations such + *as `start_destroy` which require the asset to be in a destroying state. + */ + "LiveAsset": undefined; + /** + *The asset is not live, and likely being destroyed. + */ + "AssetNotLive": undefined; + /** + *The asset status is not the expected status. + */ + "IncorrectStatus": undefined; + /** + *The asset should be frozen before the given operation. + */ + "NotFrozen": undefined; + /** + *Callback action resulted in error + */ + "CallbackFailed": undefined; + /** + *The asset ID must be equal to the [`NextAssetId`]. + */ + "BadAssetId": undefined; +}>; +export type Ienq2ge2rhv4jm = AnonymousEnum<{ + /** + *The signing account has no permission to do the operation. + */ + "NoPermission": undefined; + /** + *The given item ID is unknown. + */ + "UnknownCollection": undefined; + /** + *The item ID has already been used for an item. + */ + "AlreadyExists": undefined; + /** + *The owner turned out to be different to what was expected. + */ + "WrongOwner": undefined; + /** + *Invalid witness data given. + */ + "BadWitness": undefined; + /** + *The item ID is already taken. + */ + "InUse": undefined; + /** + *The item or collection is frozen. + */ + "Frozen": undefined; + /** + *The delegate turned out to be different to what was expected. + */ + "WrongDelegate": undefined; + /** + *There is no delegate approved. + */ + "NoDelegate": undefined; + /** + *No approval exists that would allow the transfer. + */ + "Unapproved": undefined; + /** + *The named owner has not signed ownership of the collection is acceptable. + */ + "Unaccepted": undefined; + /** + *The item is locked. + */ + "Locked": undefined; + /** + *All items have been minted. + */ + "MaxSupplyReached": undefined; + /** + *The max supply has already been set. + */ + "MaxSupplyAlreadySet": undefined; + /** + *The provided max supply is less to the amount of items a collection already has. + */ + "MaxSupplyTooSmall": undefined; + /** + *The given item ID is unknown. + */ + "UnknownItem": undefined; + /** + *Item is not for sale. + */ + "NotForSale": undefined; + /** + *The provided bid is too low. + */ + "BidTooLow": undefined; +}>; +export type I58r1150kmj18u = AnonymousEnum<{ + /** + *The signing account has no permission to do the operation. + */ + "NoPermission": undefined; + /** + *The given item ID is unknown. + */ + "UnknownCollection": undefined; + /** + *The item ID has already been used for an item. + */ + "AlreadyExists": undefined; + /** + *The approval had a deadline that expired, so the approval isn't valid anymore. + */ + "ApprovalExpired": undefined; + /** + *The owner turned out to be different to what was expected. + */ + "WrongOwner": undefined; + /** + *The witness data given does not match the current state of the chain. + */ + "BadWitness": undefined; + /** + *Collection ID is already taken. + */ + "CollectionIdInUse": undefined; + /** + *Items within that collection are non-transferable. + */ + "ItemsNonTransferable": undefined; + /** + *The provided account is not a delegate. + */ + "NotDelegate": undefined; + /** + *The delegate turned out to be different to what was expected. + */ + "WrongDelegate": undefined; + /** + *No approval exists that would allow the transfer. + */ + "Unapproved": undefined; + /** + *The named owner has not signed ownership acceptance of the collection. + */ + "Unaccepted": undefined; + /** + *The item is locked (non-transferable). + */ + "ItemLocked": undefined; + /** + *Item's attributes are locked. + */ + "LockedItemAttributes": undefined; + /** + *Collection's attributes are locked. + */ + "LockedCollectionAttributes": undefined; + /** + *Item's metadata is locked. + */ + "LockedItemMetadata": undefined; + /** + *Collection's metadata is locked. + */ + "LockedCollectionMetadata": undefined; + /** + *All items have been minted. + */ + "MaxSupplyReached": undefined; + /** + *The max supply is locked and can't be changed. + */ + "MaxSupplyLocked": undefined; + /** + *The provided max supply is less than the number of items a collection already has. + */ + "MaxSupplyTooSmall": undefined; + /** + *The given item ID is unknown. + */ + "UnknownItem": undefined; + /** + *Swap doesn't exist. + */ + "UnknownSwap": undefined; + /** + *The given item has no metadata set. + */ + "MetadataNotFound": undefined; + /** + *The provided attribute can't be found. + */ + "AttributeNotFound": undefined; + /** + *Item is not for sale. + */ + "NotForSale": undefined; + /** + *The provided bid is too low. + */ + "BidTooLow": undefined; + /** + *The item has reached its approval limit. + */ + "ReachedApprovalLimit": undefined; + /** + *The deadline has already expired. + */ + "DeadlineExpired": undefined; + /** + *The duration provided should be less than or equal to `MaxDeadlineDuration`. + */ + "WrongDuration": undefined; + /** + *The method is disabled by system settings. + */ + "MethodDisabled": undefined; + /** + *The provided setting can't be set. + */ + "WrongSetting": undefined; + /** + *Item's config already exists and should be equal to the provided one. + */ + "InconsistentItemConfig": undefined; + /** + *Config for a collection or an item can't be found. + */ + "NoConfig": undefined; + /** + *Some roles were not cleared. + */ + "RolesNotCleared": undefined; + /** + *Mint has not started yet. + */ + "MintNotStarted": undefined; + /** + *Mint has already ended. + */ + "MintEnded": undefined; + /** + *The provided Item was already used for claiming. + */ + "AlreadyClaimed": undefined; + /** + *The provided data is incorrect. + */ + "IncorrectData": undefined; + /** + *The extrinsic was sent by the wrong origin. + */ + "WrongOrigin": undefined; + /** + *The provided signature is incorrect. + */ + "WrongSignature": undefined; + /** + *The provided metadata might be too long. + */ + "IncorrectMetadata": undefined; + /** + *Can't set more attributes per one call. + */ + "MaxAttributesLimitReached": undefined; + /** + *The provided namespace isn't supported in this call. + */ + "WrongNamespace": undefined; + /** + *Can't delete non-empty collections. + */ + "CollectionNotEmpty": undefined; + /** + *The witness data should be provided. + */ + "WitnessRequired": undefined; +}>; +export type I4u78hb23uhvi2 = AnonymousEnum<{ + /** + *Provided asset pair is not supported for pool. + */ + "InvalidAssetPair": undefined; + /** + *Pool already exists. + */ + "PoolExists": undefined; + /** + *Desired amount can't be zero. + */ + "WrongDesiredAmount": undefined; + /** + *Provided amount should be greater than or equal to the existential deposit/asset's + *minimal amount. + */ + "AmountOneLessThanMinimal": undefined; + /** + *Provided amount should be greater than or equal to the existential deposit/asset's + *minimal amount. + */ + "AmountTwoLessThanMinimal": undefined; + /** + *Reserve needs to always be greater than or equal to the existential deposit/asset's + *minimal amount. + */ + "ReserveLeftLessThanMinimal": undefined; + /** + *Desired amount can't be equal to the pool reserve. + */ + "AmountOutTooHigh": undefined; + /** + *The pool doesn't exist. + */ + "PoolNotFound": undefined; + /** + *An overflow happened. + */ + "Overflow": undefined; + /** + *The minimal amount requirement for the first token in the pair wasn't met. + */ + "AssetOneDepositDidNotMeetMinimum": undefined; + /** + *The minimal amount requirement for the second token in the pair wasn't met. + */ + "AssetTwoDepositDidNotMeetMinimum": undefined; + /** + *The minimal amount requirement for the first token in the pair wasn't met. + */ + "AssetOneWithdrawalDidNotMeetMinimum": undefined; + /** + *The minimal amount requirement for the second token in the pair wasn't met. + */ + "AssetTwoWithdrawalDidNotMeetMinimum": undefined; + /** + *Optimal calculated amount is less than desired. + */ + "OptimalAmountLessThanDesired": undefined; + /** + *Insufficient liquidity minted. + */ + "InsufficientLiquidityMinted": undefined; + /** + *Requested liquidity can't be zero. + */ + "ZeroLiquidity": undefined; + /** + *Amount can't be zero. + */ + "ZeroAmount": undefined; + /** + *Calculated amount out is less than provided minimum amount. + */ + "ProvidedMinimumNotSufficientForSwap": undefined; + /** + *Provided maximum amount is not sufficient for swap. + */ + "ProvidedMaximumNotSufficientForSwap": undefined; + /** + *The provided path must consists of 2 assets at least. + */ + "InvalidPath": undefined; + /** + *The provided path must consists of unique assets. + */ + "NonUniquePath": undefined; + /** + *It was not possible to get or increment the Id of the pool. + */ + "IncorrectPoolAssetId": undefined; + /** + *The destination account cannot exist with the swapped funds. + */ + "BelowMinimum": undefined; +}>; +export type TokenError = Enum<{ + "FundsUnavailable": undefined; + "OnlyProvider": undefined; + "BelowMinimum": undefined; + "CannotCreate": undefined; + "UnknownAsset": undefined; + "Frozen": undefined; + "Unsupported": undefined; + "CannotCreateHold": undefined; + "NotExpendable": undefined; + "Blocked": undefined; +}>; +export declare const TokenError: GetEnum; +export type ArithmeticError = Enum<{ + "Underflow": undefined; + "Overflow": undefined; + "DivisionByZero": undefined; +}>; +export declare const ArithmeticError: GetEnum; +export type TransactionalError = Enum<{ + "LimitReached": undefined; + "NoLayer": undefined; +}>; +export declare const TransactionalError: GetEnum; +export type Icbccs0ug47ilf = { + "account": SS58String; +}; +export type I855j4i3kr8ko1 = { + "sender": SS58String; + "hash": FixedSizeBinary<32>; +}; +export type Ibgl04rn6nbfm6 = { + "code_hash": FixedSizeBinary<32>; + "check_version": boolean; +}; +export type Icbsekf57miplo = AnonymousEnum<{ + /** + *The validation function has been scheduled to apply. + */ + "ValidationFunctionStored": undefined; + /** + *The validation function was applied as of the contained relay chain block number. + */ + "ValidationFunctionApplied": Anonymize; + /** + *The relay-chain aborted the upgrade process. + */ + "ValidationFunctionDiscarded": undefined; + /** + *Some downward messages have been received and will be processed. + */ + "DownwardMessagesReceived": Anonymize; + /** + *Downward messages were processed using the given weight. + */ + "DownwardMessagesProcessed": Anonymize; + /** + *An upward message was sent to the relay chain. + */ + "UpwardMessageSent": Anonymize; +}>; +export type Idd7hd99u0ho0n = { + "relay_chain_block_num": number; +}; +export type Iafscmv8tjf0ou = { + "count": number; +}; +export type I100l07kaehdlp = { + "weight_used": Anonymize; + "dmq_head": FixedSizeBinary<32>; +}; +export type I6gnbnvip5vvdi = { + "message_hash"?: Anonymize; +}; +export type I4s6vifaf8k998 = (FixedSizeBinary<32>) | undefined; +export type Iao8h4hv7atnq3 = AnonymousEnum<{ + /** + *An account was created with some free balance. + */ + "Endowed": Anonymize; + /** + *An account was removed whose balance was non-zero but below ExistentialDeposit, + *resulting in an outright loss. + */ + "DustLost": Anonymize; + /** + *Transfer succeeded. + */ + "Transfer": Anonymize; + /** + *A balance was set by root. + */ + "BalanceSet": Anonymize; + /** + *Some balance was reserved (moved from free to reserved). + */ + "Reserved": Anonymize; + /** + *Some balance was unreserved (moved from reserved to free). + */ + "Unreserved": Anonymize; + /** + *Some balance was moved from the reserve of the first account to the second account. + *Final argument indicates the destination balance type. + */ + "ReserveRepatriated": Anonymize; + /** + *Some amount was deposited (e.g. for transaction fees). + */ + "Deposit": Anonymize; + /** + *Some amount was withdrawn from the account (e.g. for transaction fees). + */ + "Withdraw": Anonymize; + /** + *Some amount was removed from the account (e.g. for misbehavior). + */ + "Slashed": Anonymize; + /** + *Some amount was minted into an account. + */ + "Minted": Anonymize; + /** + *Some amount was burned from an account. + */ + "Burned": Anonymize; + /** + *Some amount was suspended from an account (it can be restored later). + */ + "Suspended": Anonymize; + /** + *Some amount was restored into an account. + */ + "Restored": Anonymize; + /** + *An account was upgraded. + */ + "Upgraded": Anonymize; + /** + *Total issuance was increased by `amount`, creating a credit to be balanced. + */ + "Issued": Anonymize; + /** + *Total issuance was decreased by `amount`, creating a debt to be balanced. + */ + "Rescinded": Anonymize; + /** + *Some balance was locked. + */ + "Locked": Anonymize; + /** + *Some balance was unlocked. + */ + "Unlocked": Anonymize; + /** + *Some balance was frozen. + */ + "Frozen": Anonymize; + /** + *Some balance was thawed. + */ + "Thawed": Anonymize; + /** + *The `TotalIssuance` was forcefully changed. + */ + "TotalIssuanceForced": Anonymize; +}>; +export type Icv68aq8841478 = { + "account": SS58String; + "free_balance": bigint; +}; +export type Ic262ibdoec56a = { + "account": SS58String; + "amount": bigint; +}; +export type Iflcfm9b6nlmdd = { + "from": SS58String; + "to": SS58String; + "amount": bigint; +}; +export type Ijrsf4mnp3eka = { + "who": SS58String; + "free": bigint; +}; +export type Id5fm4p8lj5qgi = { + "who": SS58String; + "amount": bigint; +}; +export type I8tjvj9uq4b7hi = { + "from": SS58String; + "to": SS58String; + "amount": bigint; + "destination_status": BalanceStatus; +}; +export type BalanceStatus = Enum<{ + "Free": undefined; + "Reserved": undefined; +}>; +export declare const BalanceStatus: GetEnum; +export type I4cbvqmqadhrea = { + "who": SS58String; +}; +export type I3qt1hgg4djhgb = { + "amount": bigint; +}; +export type I4fooe9dun9o0t = { + "old": bigint; + "new": bigint; +}; +export type TransactionPaymentEvent = Enum<{ + /** + *A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, + *has been paid by `who`. + */ + "TransactionFeePaid": Anonymize; +}>; +export declare const TransactionPaymentEvent: GetEnum; +export type Ier2cke86dqbr2 = { + "who": SS58String; + "actual_fee": bigint; + "tip": bigint; +}; +export type Ifagg2q2o5fgjl = AnonymousEnum<{ + /** + *A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, + *has been paid by `who` in an asset `asset_id`. + */ + "AssetTxFeePaid": Anonymize; + /** + *A swap of the refund in native currency back to asset failed. + */ + "AssetRefundFailed": Anonymize; +}>; +export type Iqjk6s1a2lmkt = { + "who": SS58String; + "actual_fee": bigint; + "tip": bigint; + "asset_id": Anonymize; +}; +export type I4c0s5cioidn76 = { + "parents": number; + "interior": XcmV3Junctions; +}; +export type XcmV3Junctions = Enum<{ + "Here": undefined; + "X1": XcmV3Junction; + "X2": Anonymize; + "X3": Anonymize; + "X4": Anonymize; + "X5": Anonymize; + "X6": Anonymize; + "X7": Anonymize; + "X8": Anonymize; +}>; +export declare const XcmV3Junctions: GetEnum; +export type XcmV3Junction = Enum<{ + "Parachain": number; + "AccountId32": Anonymize; + "AccountIndex64": Anonymize; + "AccountKey20": Anonymize; + "PalletInstance": number; + "GeneralIndex": bigint; + "GeneralKey": Anonymize; + "OnlyChild": undefined; + "Plurality": Anonymize; + "GlobalConsensus": XcmV3JunctionNetworkId; +}>; +export declare const XcmV3Junction: GetEnum; +export type Ifq0i8kc6ds30i = { + "network"?: Anonymize; + "id": FixedSizeBinary<32>; +}; +export type Idcq3vns9tgp5p = (XcmV3JunctionNetworkId) | undefined; +export type XcmV3JunctionNetworkId = Enum<{ + "ByGenesis": FixedSizeBinary<32>; + "ByFork": Anonymize; + "Polkadot": undefined; + "Kusama": undefined; + "Westend": undefined; + "Rococo": undefined; + "Wococo": undefined; + "Ethereum": Anonymize; + "BitcoinCore": undefined; + "BitcoinCash": undefined; + "PolkadotBulletin": undefined; +}>; +export declare const XcmV3JunctionNetworkId: GetEnum; +export type I15vf5oinmcgps = { + "block_number": bigint; + "block_hash": FixedSizeBinary<32>; +}; +export type I623eo8t3jrbeo = { + "chain_id": bigint; +}; +export type I2a3org9qntfkr = { + "network"?: Anonymize; + "index": bigint; +}; +export type I9ed2klpttaegt = { + "network"?: Anonymize; + "key": FixedSizeBinary<20>; +}; +export type I15lht6t53odo4 = { + "length": number; + "data": FixedSizeBinary<32>; +}; +export type I518fbtnclg1oc = { + "id": XcmV3JunctionBodyId; + "part": XcmV2JunctionBodyPart; +}; +export type XcmV3JunctionBodyId = Enum<{ + "Unit": undefined; + "Moniker": FixedSizeBinary<4>; + "Index": number; + "Executive": undefined; + "Technical": undefined; + "Legislative": undefined; + "Judicial": undefined; + "Defense": undefined; + "Administration": undefined; + "Treasury": undefined; +}>; +export declare const XcmV3JunctionBodyId: GetEnum; +export type XcmV2JunctionBodyPart = Enum<{ + "Voice": undefined; + "Members": Anonymize; + "Fraction": Anonymize; + "AtLeastProportion": Anonymize; + "MoreThanProportion": Anonymize; +}>; +export declare const XcmV2JunctionBodyPart: GetEnum; +export type Idif02efq16j92 = { + "nom": number; + "denom": number; +}; +export type Iam58b36i8f27i = FixedSizeArray<2, XcmV3Junction>; +export type Iegjh9cie771d8 = FixedSizeArray<3, XcmV3Junction>; +export type Iae5flu84s2oia = FixedSizeArray<4, XcmV3Junction>; +export type Iejq8c4n82a165 = FixedSizeArray<5, XcmV3Junction>; +export type I7rmt803vbpqrl = FixedSizeArray<6, XcmV3Junction>; +export type I7onfe2toh27f0 = FixedSizeArray<7, XcmV3Junction>; +export type I3vjadpg0k2omo = FixedSizeArray<8, XcmV3Junction>; +export type Icjchvrijclvlv = { + "native_amount_kept": bigint; +}; +export type VestingEvent = Enum<{ + /** + *The amount vested has been updated. This could indicate a change in funds available. + *The balance given is the amount which is left unvested (and thus locked). + */ + "VestingUpdated": Anonymize; + /** + *An \[account\] has become fully vested. + */ + "VestingCompleted": Anonymize; +}>; +export declare const VestingEvent: GetEnum; +export type Ievr89968437gm = { + "account": SS58String; + "unvested": bigint; +}; +export type I4srakrmf0fspo = AnonymousEnum<{ + /** + *New Invulnerables were set. + */ + "NewInvulnerables": Anonymize; + /** + *A new Invulnerable was added. + */ + "InvulnerableAdded": Anonymize; + /** + *An Invulnerable was removed. + */ + "InvulnerableRemoved": Anonymize; + /** + *The number of desired candidates was set. + */ + "NewDesiredCandidates": Anonymize; + /** + *The candidacy bond was set. + */ + "NewCandidacyBond": Anonymize; + /** + *A new candidate joined. + */ + "CandidateAdded": Anonymize; + /** + *Bond of a candidate updated. + */ + "CandidateBondUpdated": Anonymize; + /** + *A candidate was removed. + */ + "CandidateRemoved": Anonymize; + /** + *An account was replaced in the candidate list by another one. + */ + "CandidateReplaced": Anonymize; + /** + *An account was unable to be added to the Invulnerables because they did not have keys + *registered. Other Invulnerables may have been set. + */ + "InvalidInvulnerableSkipped": Anonymize; +}>; +export type I39t01nnod9109 = { + "invulnerables": Anonymize; +}; +export type Ia2lhg7l2hilo3 = Array; +export type I6v8sm60vvkmk7 = { + "account_id": SS58String; +}; +export type I1qmtmbe5so8r3 = { + "desired_candidates": number; +}; +export type Ih99m6ehpcar7 = { + "bond_amount": bigint; +}; +export type Idgorhsbgdq2ap = { + "account_id": SS58String; + "deposit": bigint; +}; +export type I9ubb2kqevnu6t = { + "old": SS58String; + "new": SS58String; + "deposit": bigint; +}; +export type SessionEvent = Enum<{ + /** + *New session has happened. Note that the argument is the session index, not the + *block number as the type might suggest. + */ + "NewSession": Anonymize; +}>; +export declare const SessionEvent: GetEnum; +export type I2hq50pu2kdjpo = { + "session_index": number; +}; +export type Idsqc7mhp6nnle = AnonymousEnum<{ + /** + *An HRMP message was sent to a sibling parachain. + */ + "XcmpMessageSent": Anonymize; +}>; +export type I137t1cld92pod = { + "message_hash": FixedSizeBinary<32>; +}; +export type I5ce1ru810vv9d = AnonymousEnum<{ + /** + *Execution of an XCM message was attempted. + */ + "Attempted": Anonymize; + /** + *A XCM message was sent. + */ + "Sent": Anonymize; + /** + *Query response received which does not match a registered query. This may be because a + *matching query was never registered, it may be because it is a duplicate response, or + *because the query timed out. + */ + "UnexpectedResponse": Anonymize; + /** + *Query response has been received and is ready for taking with `take_response`. There is + *no registered notification call. + */ + "ResponseReady": Anonymize; + /** + *Query response has been received and query is removed. The registered notification has + *been dispatched and executed successfully. + */ + "Notified": Anonymize; + /** + *Query response has been received and query is removed. The registered notification + *could not be dispatched because the dispatch weight is greater than the maximum weight + *originally budgeted by this runtime for the query result. + */ + "NotifyOverweight": Anonymize; + /** + *Query response has been received and query is removed. There was a general error with + *dispatching the notification call. + */ + "NotifyDispatchError": Anonymize; + /** + *Query response has been received and query is removed. The dispatch was unable to be + *decoded into a `Call`; this might be due to dispatch function having a signature which + *is not `(origin, QueryId, Response)`. + */ + "NotifyDecodeFailed": Anonymize; + /** + *Expected query response has been received but the origin location of the response does + *not match that expected. The query remains registered for a later, valid, response to + *be received and acted upon. + */ + "InvalidResponder": Anonymize; + /** + *Expected query response has been received but the expected origin location placed in + *storage by this runtime previously cannot be decoded. The query remains registered. + * + *This is unexpected (since a location placed in storage in a previously executing + *runtime should be readable prior to query timeout) and dangerous since the possibly + *valid response will be dropped. Manual governance intervention is probably going to be + *needed. + */ + "InvalidResponderVersion": Anonymize; + /** + *Received query response has been read and removed. + */ + "ResponseTaken": Anonymize; + /** + *Some assets have been placed in an asset trap. + */ + "AssetsTrapped": Anonymize; + /** + *An XCM version change notification message has been attempted to be sent. + * + *The cost of sending it (borne by the chain) is included. + */ + "VersionChangeNotified": Anonymize; + /** + *The supported version of a location has been changed. This might be through an + *automatic notification or a manual intervention. + */ + "SupportedVersionChanged": Anonymize; + /** + *A given location which had a version change subscription was dropped owing to an error + *sending the notification to it. + */ + "NotifyTargetSendFail": Anonymize; + /** + *A given location which had a version change subscription was dropped owing to an error + *migrating the location to our new XCM format. + */ + "NotifyTargetMigrationFail": Anonymize; + /** + *Expected query response has been received but the expected querier location placed in + *storage by this runtime previously cannot be decoded. The query remains registered. + * + *This is unexpected (since a location placed in storage in a previously executing + *runtime should be readable prior to query timeout) and dangerous since the possibly + *valid response will be dropped. Manual governance intervention is probably going to be + *needed. + */ + "InvalidQuerierVersion": Anonymize; + /** + *Expected query response has been received but the querier location of the response does + *not match the expected. The query remains registered for a later, valid, response to + *be received and acted upon. + */ + "InvalidQuerier": Anonymize; + /** + *A remote has requested XCM version change notification from us and we have honored it. + *A version information message is sent to them and its cost is included. + */ + "VersionNotifyStarted": Anonymize; + /** + *We have requested that a remote chain send us XCM version change notifications. + */ + "VersionNotifyRequested": Anonymize; + /** + *We have requested that a remote chain stops sending us XCM version change + *notifications. + */ + "VersionNotifyUnrequested": Anonymize; + /** + *Fees were paid from a location for an operation (often for using `SendXcm`). + */ + "FeesPaid": Anonymize; + /** + *Some assets have been claimed from an asset trap + */ + "AssetsClaimed": Anonymize; + /** + *A XCM version migration finished. + */ + "VersionMigrationFinished": Anonymize; +}>; +export type I2aatv5i0cb96a = { + "outcome": XcmV4TraitsOutcome; +}; +export type XcmV4TraitsOutcome = Enum<{ + "Complete": Anonymize; + "Incomplete": Anonymize; + "Error": Anonymize; +}>; +export declare const XcmV4TraitsOutcome: GetEnum; +export type I30iff2d192eu7 = { + "used": Anonymize; +}; +export type I3q41clmllcihh = { + "used": Anonymize; + "error": XcmV3TraitsError; +}; +export type XcmV3TraitsError = Enum<{ + "Overflow": undefined; + "Unimplemented": undefined; + "UntrustedReserveLocation": undefined; + "UntrustedTeleportLocation": undefined; + "LocationFull": undefined; + "LocationNotInvertible": undefined; + "BadOrigin": undefined; + "InvalidLocation": undefined; + "AssetNotFound": undefined; + "FailedToTransactAsset": undefined; + "NotWithdrawable": undefined; + "LocationCannotHold": undefined; + "ExceedsMaxMessageSize": undefined; + "DestinationUnsupported": undefined; + "Transport": undefined; + "Unroutable": undefined; + "UnknownClaim": undefined; + "FailedToDecode": undefined; + "MaxWeightInvalid": undefined; + "NotHoldingFees": undefined; + "TooExpensive": undefined; + "Trap": bigint; + "ExpectationFalse": undefined; + "PalletNotFound": undefined; + "NameMismatch": undefined; + "VersionIncompatible": undefined; + "HoldingWouldOverflow": undefined; + "ExportError": undefined; + "ReanchorFailed": undefined; + "NoDeal": undefined; + "FeesNotMet": undefined; + "LockError": undefined; + "NoPermission": undefined; + "Unanchored": undefined; + "NotDepositable": undefined; + "UnhandledXcmVersion": undefined; + "WeightLimitReached": Anonymize; + "Barrier": undefined; + "WeightNotComputable": undefined; + "ExceedsStackLimit": undefined; +}>; +export declare const XcmV3TraitsError: GetEnum; +export type I1n56hooghntl2 = { + "error": XcmV3TraitsError; +}; +export type Ib9msr5sr8t3dn = { + "origin": Anonymize; + "destination": Anonymize; + "message": Anonymize; + "message_id": FixedSizeBinary<32>; +}; +export type Iegrepoo0c1jc5 = Array; +export type XcmV4Instruction = Enum<{ + "WithdrawAsset": Anonymize; + "ReserveAssetDeposited": Anonymize; + "ReceiveTeleportedAsset": Anonymize; + "QueryResponse": Anonymize; + "TransferAsset": Anonymize; + "TransferReserveAsset": Anonymize; + "Transact": Anonymize; + "HrmpNewChannelOpenRequest": Anonymize; + "HrmpChannelAccepted": Anonymize; + "HrmpChannelClosing": Anonymize; + "ClearOrigin": undefined; + "DescendOrigin": XcmV3Junctions; + "ReportError": Anonymize; + "DepositAsset": Anonymize; + "DepositReserveAsset": Anonymize; + "ExchangeAsset": Anonymize; + "InitiateReserveWithdraw": Anonymize; + "InitiateTeleport": Anonymize; + "ReportHolding": Anonymize; + "BuyExecution": Anonymize; + "RefundSurplus": undefined; + "SetErrorHandler": Anonymize; + "SetAppendix": Anonymize; + "ClearError": undefined; + "ClaimAsset": Anonymize; + "Trap": bigint; + "SubscribeVersion": Anonymize; + "UnsubscribeVersion": undefined; + "BurnAsset": Anonymize; + "ExpectAsset": Anonymize; + "ExpectOrigin"?: Anonymize; + "ExpectError"?: Anonymize; + "ExpectTransactStatus": XcmV3MaybeErrorCode; + "QueryPallet": Anonymize; + "ExpectPallet": Anonymize; + "ReportTransactStatus": Anonymize; + "ClearTransactStatus": undefined; + "UniversalOrigin": XcmV3Junction; + "ExportMessage": Anonymize; + "LockAsset": Anonymize; + "UnlockAsset": Anonymize; + "NoteUnlockable": Anonymize; + "RequestUnlock": Anonymize; + "SetFeesMode": Anonymize; + "SetTopic": FixedSizeBinary<32>; + "ClearTopic": undefined; + "AliasOrigin": Anonymize; + "UnpaidExecution": Anonymize; +}>; +export declare const XcmV4Instruction: GetEnum; +export type I50mli3hb64f9b = Array>; +export type Ia5l7mu5a6v49o = { + "id": Anonymize; + "fun": XcmV3MultiassetFungibility; +}; +export type XcmV3MultiassetFungibility = Enum<{ + "Fungible": bigint; + "NonFungible": XcmV3MultiassetAssetInstance; +}>; +export declare const XcmV3MultiassetFungibility: GetEnum; +export type XcmV3MultiassetAssetInstance = Enum<{ + "Undefined": undefined; + "Index": bigint; + "Array4": FixedSizeBinary<4>; + "Array8": FixedSizeBinary<8>; + "Array16": FixedSizeBinary<16>; + "Array32": FixedSizeBinary<32>; +}>; +export declare const XcmV3MultiassetAssetInstance: GetEnum; +export type I9o9uda3nddbna = { + "query_id": bigint; + "response": XcmV4Response; + "max_weight": Anonymize; + "querier"?: Anonymize; +}; +export type XcmV4Response = Enum<{ + "Null": undefined; + "Assets": Anonymize; + "ExecutionResult"?: Anonymize; + "Version": number; + "PalletsInfo": Anonymize; + "DispatchResult": XcmV3MaybeErrorCode; +}>; +export declare const XcmV4Response: GetEnum; +export type I7sltvf8v2nure = (Anonymize) | undefined; +export type Id8ide743umavp = [number, XcmV3TraitsError]; +export type I599u7h20b52at = Array>; +export type Ift5r9b1bvoh16 = { + "index": number; + "name": Binary; + "module_name": Binary; + "major": number; + "minor": number; + "patch": number; +}; +export type XcmV3MaybeErrorCode = Enum<{ + "Success": undefined; + "Error": Binary; + "TruncatedError": Binary; +}>; +export declare const XcmV3MaybeErrorCode: GetEnum; +export type Ia9cgf4r40b26h = (Anonymize) | undefined; +export type I7s0ar727m8n1j = { + "assets": Anonymize; + "beneficiary": Anonymize; +}; +export type I5bepfv83t9cg7 = { + "assets": Anonymize; + "dest": Anonymize; + "xcm": Anonymize; +}; +export type I92p6l5cs3fr50 = { + "origin_kind": XcmV2OriginKind; + "require_weight_at_most": Anonymize; + "call": Binary; +}; +export type XcmV2OriginKind = Enum<{ + "Native": undefined; + "SovereignAccount": undefined; + "Superuser": undefined; + "Xcm": undefined; +}>; +export declare const XcmV2OriginKind: GetEnum; +export type I5uhhrjqfuo4e5 = { + "sender": number; + "max_message_size": number; + "max_capacity": number; +}; +export type Ifij4jam0o7sub = { + "recipient": number; +}; +export type Ieeb4svd9i8fji = { + "initiator": number; + "sender": number; + "recipient": number; +}; +export type I4r3v6e91d1qbs = { + "destination": Anonymize; + "query_id": bigint; + "max_weight": Anonymize; +}; +export type Idbqvv6kvph2qq = { + "assets": XcmV4AssetAssetFilter; + "beneficiary": Anonymize; +}; +export type XcmV4AssetAssetFilter = Enum<{ + "Definite": Anonymize; + "Wild": XcmV4AssetWildAsset; +}>; +export declare const XcmV4AssetAssetFilter: GetEnum; +export type XcmV4AssetWildAsset = Enum<{ + "All": undefined; + "AllOf": Anonymize; + "AllCounted": number; + "AllOfCounted": Anonymize; +}>; +export declare const XcmV4AssetWildAsset: GetEnum; +export type I9k109i13ivgac = { + "id": Anonymize; + "fun": XcmV2MultiassetWildFungibility; +}; +export type XcmV2MultiassetWildFungibility = Enum<{ + "Fungible": undefined; + "NonFungible": undefined; +}>; +export declare const XcmV2MultiassetWildFungibility: GetEnum; +export type Iano6fp1hcf6vu = { + "id": Anonymize; + "fun": XcmV2MultiassetWildFungibility; + "count": number; +}; +export type I6epv2jfejmsps = { + "assets": XcmV4AssetAssetFilter; + "dest": Anonymize; + "xcm": Anonymize; +}; +export type Ifunmnuvdqirrm = { + "give": XcmV4AssetAssetFilter; + "want": Anonymize; + "maximal": boolean; +}; +export type Id1994sd13a1fk = { + "assets": XcmV4AssetAssetFilter; + "reserve": Anonymize; + "xcm": Anonymize; +}; +export type I53nvbjei7ovcg = { + "response_info": Anonymize; + "assets": XcmV4AssetAssetFilter; +}; +export type I60dnk6pb13k6r = { + "fees": Anonymize; + "weight_limit": XcmV3WeightLimit; +}; +export type XcmV3WeightLimit = Enum<{ + "Unlimited": undefined; + "Limited": Anonymize; +}>; +export declare const XcmV3WeightLimit: GetEnum; +export type I39e2979fh1sq0 = { + "assets": Anonymize; + "ticket": Anonymize; +}; +export type Ieprdqqu7ildvr = { + "query_id": bigint; + "max_response_weight": Anonymize; +}; +export type Iba5bdbapp16oo = { + "module_name": Binary; + "response_info": Anonymize; +}; +export type Id7mf37dkpgfjs = { + "index": number; + "name": Binary; + "module_name": Binary; + "crate_major": number; + "min_crate_minor": number; +}; +export type Idjv4c30koq53t = { + "network": XcmV3JunctionNetworkId; + "destination": XcmV3Junctions; + "xcm": Anonymize; +}; +export type Ic2kq28flu5j2f = { + "asset": Anonymize; + "unlocker": Anonymize; +}; +export type I63d4j1l5gkla3 = { + "asset": Anonymize; + "target": Anonymize; +}; +export type Ibs79g4hs4qcqq = { + "asset": Anonymize; + "owner": Anonymize; +}; +export type Ifv72gq013neli = { + "asset": Anonymize; + "locker": Anonymize; +}; +export type I4nae9rsql8fa7 = { + "jit_withdraw": boolean; +}; +export type I40d50jeai33oq = { + "weight_limit": XcmV3WeightLimit; + "check_origin"?: Anonymize; +}; +export type I3le5tr7ugg6l2 = { + "origin": Anonymize; + "query_id": bigint; +}; +export type I3iun9sig164po = { + "query_id": bigint; + "response": XcmV4Response; +}; +export type I2uqmls7kcdnii = { + "query_id": bigint; + "pallet_index": number; + "call_index": number; +}; +export type Idg69klialbkb8 = { + "query_id": bigint; + "pallet_index": number; + "call_index": number; + "actual_weight": Anonymize; + "max_budgeted_weight": Anonymize; +}; +export type I13jboebjcbglr = { + "origin": Anonymize; + "query_id": bigint; + "expected_location"?: Anonymize; +}; +export type I30pg328m00nr3 = { + "query_id": bigint; +}; +export type I381dkhrurdhrs = { + "hash": FixedSizeBinary<32>; + "origin": Anonymize; + "assets": XcmVersionedAssets; +}; +export type XcmVersionedAssets = Enum<{ + "V2": Anonymize; + "V3": Anonymize; + "V4": Anonymize; +}>; +export declare const XcmVersionedAssets: GetEnum; +export type I2sllmucln1iic = Array>; +export type Id8h647t880l31 = { + "id": XcmV2MultiassetAssetId; + "fun": XcmV2MultiassetFungibility; +}; +export type XcmV2MultiassetAssetId = Enum<{ + "Concrete": Anonymize; + "Abstract": Binary; +}>; +export declare const XcmV2MultiassetAssetId: GetEnum; +export type I4frqunb5hj2km = { + "parents": number; + "interior": XcmV2MultilocationJunctions; +}; +export type XcmV2MultilocationJunctions = Enum<{ + "Here": undefined; + "X1": XcmV2Junction; + "X2": Anonymize; + "X3": Anonymize; + "X4": Anonymize; + "X5": Anonymize; + "X6": Anonymize; + "X7": Anonymize; + "X8": Anonymize; +}>; +export declare const XcmV2MultilocationJunctions: GetEnum; +export type XcmV2Junction = Enum<{ + "Parachain": number; + "AccountId32": Anonymize; + "AccountIndex64": Anonymize; + "AccountKey20": Anonymize; + "PalletInstance": number; + "GeneralIndex": bigint; + "GeneralKey": Binary; + "OnlyChild": undefined; + "Plurality": Anonymize; +}>; +export declare const XcmV2Junction: GetEnum; +export type I6h60jropk90ne = { + "network": XcmV2NetworkId; + "id": FixedSizeBinary<32>; +}; +export type XcmV2NetworkId = Enum<{ + "Any": undefined; + "Named": Binary; + "Polkadot": undefined; + "Kusama": undefined; +}>; +export declare const XcmV2NetworkId: GetEnum; +export type I73mah5ooc6vk = { + "network": XcmV2NetworkId; + "index": bigint; +}; +export type I9kkjqh79doku3 = { + "network": XcmV2NetworkId; + "key": FixedSizeBinary<20>; +}; +export type Iaqhvfsgakjhdq = { + "id": XcmV2BodyId; + "part": XcmV2JunctionBodyPart; +}; +export type XcmV2BodyId = Enum<{ + "Unit": undefined; + "Named": Binary; + "Index": number; + "Executive": undefined; + "Technical": undefined; + "Legislative": undefined; + "Judicial": undefined; + "Defense": undefined; + "Administration": undefined; + "Treasury": undefined; +}>; +export declare const XcmV2BodyId: GetEnum; +export type I7tthuukjoks45 = FixedSizeArray<2, XcmV2Junction>; +export type Icpsqle8f7ccnh = FixedSizeArray<3, XcmV2Junction>; +export type Ifaduechfcq41r = FixedSizeArray<4, XcmV2Junction>; +export type Ifg30nsfqato4g = FixedSizeArray<5, XcmV2Junction>; +export type I8s2vh6qelslgu = FixedSizeArray<6, XcmV2Junction>; +export type I7r6q3396okion = FixedSizeArray<7, XcmV2Junction>; +export type I1d4fie0b78rtc = FixedSizeArray<8, XcmV2Junction>; +export type XcmV2MultiassetFungibility = Enum<{ + "Fungible": bigint; + "NonFungible": XcmV2MultiassetAssetInstance; +}>; +export declare const XcmV2MultiassetFungibility: GetEnum; +export type XcmV2MultiassetAssetInstance = Enum<{ + "Undefined": undefined; + "Index": bigint; + "Array4": FixedSizeBinary<4>; + "Array8": FixedSizeBinary<8>; + "Array16": FixedSizeBinary<16>; + "Array32": FixedSizeBinary<32>; + "Blob": Binary; +}>; +export declare const XcmV2MultiassetAssetInstance: GetEnum; +export type Iai6dhqiq3bach = Array>; +export type Idcm24504c8bkk = { + "id": XcmV3MultiassetAssetId; + "fun": XcmV3MultiassetFungibility; +}; +export type XcmV3MultiassetAssetId = Enum<{ + "Concrete": Anonymize; + "Abstract": FixedSizeBinary<32>; +}>; +export declare const XcmV3MultiassetAssetId: GetEnum; +export type Ic8hi3qr11vngc = { + "destination": Anonymize; + "result": number; + "cost": Anonymize; + "message_id": FixedSizeBinary<32>; +}; +export type Iabk8ljl5g8c86 = { + "location": Anonymize; + "version": number; +}; +export type Ibjdlecumfu7q7 = { + "location": Anonymize; + "query_id": bigint; + "error": XcmV3TraitsError; +}; +export type Ia9ems1kg7laoc = { + "location": XcmVersionedLocation; + "query_id": bigint; +}; +export type XcmVersionedLocation = Enum<{ + "V2": Anonymize; + "V3": Anonymize; + "V4": Anonymize; +}>; +export declare const XcmVersionedLocation: GetEnum; +export type I92fq0fa45vi3 = { + "origin": Anonymize; + "query_id": bigint; + "expected_querier": Anonymize; + "maybe_actual_querier"?: Anonymize; +}; +export type Id01dpp0dn2cj0 = { + "destination": Anonymize; + "cost": Anonymize; + "message_id": FixedSizeBinary<32>; +}; +export type I6nu8k62ck9o8o = { + "paying": Anonymize; + "fees": Anonymize; +}; +export type I6s1nbislhk619 = { + "version": number; +}; +export type Ibvp9t1gqae5ct = AnonymousEnum<{ + /** + *Downward message is invalid XCM. + *\[ id \] + */ + "InvalidFormat": FixedSizeBinary<32>; + /** + *Downward message is unsupported version of XCM. + *\[ id \] + */ + "UnsupportedVersion": FixedSizeBinary<32>; + /** + *Downward message executed with the given outcome. + *\[ id, outcome \] + */ + "ExecutedDownward": Anonymize; +}>; +export type Iea25i7vqm7ot3 = [FixedSizeBinary<32>, XcmV4TraitsOutcome]; +export type I2kosejppk3jon = AnonymousEnum<{ + /** + *Message discarded due to an error in the `MessageProcessor` (usually a format error). + */ + "ProcessingFailed": Anonymize; + /** + *Message is processed. + */ + "Processed": Anonymize; + /** + *Message placed in overweight queue. + */ + "OverweightEnqueued": Anonymize; + /** + *This page was reaped. + */ + "PageReaped": Anonymize; +}>; +export type I1rvj4ubaplho0 = { + /** + *The `blake2_256` hash of the message. + */ + "id": FixedSizeBinary<32>; + /** + *The queue of the message. + */ + "origin": Anonymize; + /** + *The error that occurred. + * + *This error is pretty opaque. More fine-grained errors need to be emitted as events + *by the `MessageProcessor`. + */ + "error": Anonymize; +}; +export type Iejeo53sea6n4q = AnonymousEnum<{ + "Here": undefined; + "Parent": undefined; + "Sibling": number; +}>; +export type I5hhsj7l9obr84 = AnonymousEnum<{ + "BadFormat": undefined; + "Corrupt": undefined; + "Unsupported": undefined; + "Overweight": Anonymize; + "Yield": undefined; + "StackLimitReached": undefined; +}>; +export type Ia3uu7lqcc1q1i = { + /** + *The `blake2_256` hash of the message. + */ + "id": FixedSizeBinary<32>; + /** + *The queue of the message. + */ + "origin": Anonymize; + /** + *How much weight was used to process the message. + */ + "weight_used": Anonymize; + /** + *Whether the message was processed. + * + *Note that this does not mean that the underlying `MessageProcessor` was internally + *successful. It *solely* means that the MQ pallet will treat this as a success + *condition and discard the message. Any internal error needs to be emitted as events + *by the `MessageProcessor`. + */ + "success": boolean; +}; +export type I7crucfnonitkn = { + /** + *The `blake2_256` hash of the message. + */ + "id": FixedSizeBinary<32>; + /** + *The queue of the message. + */ + "origin": Anonymize; + /** + *The page of the message. + */ + "page_index": number; + /** + *The index of the message within the page. + */ + "message_index": number; +}; +export type I7tmrp94r9sq4n = { + /** + *The queue of the page. + */ + "origin": Anonymize; + /** + *The index of the page. + */ + "index": number; +}; +export type I45vovbl28u5ob = AnonymousEnum<{ + /** + *Batch of dispatches did not complete fully. Index of first failing dispatch given, as + *well as the error. + */ + "BatchInterrupted": Anonymize; + /** + *Batch of dispatches completed fully with no error. + */ + "BatchCompleted": undefined; + /** + *Batch of dispatches completed but has errors. + */ + "BatchCompletedWithErrors": undefined; + /** + *A single item within a Batch of dispatches has completed with no error. + */ + "ItemCompleted": undefined; + /** + *A single item within a Batch of dispatches has completed with error. + */ + "ItemFailed": Anonymize; + /** + *A call was dispatched. + */ + "DispatchedAs": Anonymize; +}>; +export type Ia916s7j8ucmdd = { + "index": number; + "error": Anonymize; +}; +export type I6a0k8t8strmou = { + "error": Anonymize; +}; +export type Iboobuvtv2hqbg = { + "result": Anonymize; +}; +export type I6sjjdpu2cscpe = ResultPayload>; +export type Icjl5oqk1eo6sb = AnonymousEnum<{ + /** + *A new multisig operation has begun. + */ + "NewMultisig": Anonymize; + /** + *A multisig operation has been approved by someone. + */ + "MultisigApproval": Anonymize; + /** + *A multisig operation has been executed. + */ + "MultisigExecuted": Anonymize; + /** + *A multisig operation has been cancelled. + */ + "MultisigCancelled": Anonymize; +}>; +export type Iep27ialq4a7o7 = { + "approving": SS58String; + "multisig": SS58String; + "call_hash": FixedSizeBinary<32>; +}; +export type Iasu5jvoqr43mv = { + "approving": SS58String; + "timepoint": Anonymize; + "multisig": SS58String; + "call_hash": FixedSizeBinary<32>; +}; +export type Itvprrpb0nm3o = { + "height": number; + "index": number; +}; +export type I5f1j6imiigvdh = { + "approving": SS58String; + "timepoint": Anonymize; + "multisig": SS58String; + "call_hash": FixedSizeBinary<32>; + "result": Anonymize; +}; +export type I5qolde99acmd1 = { + "cancelling": SS58String; + "timepoint": Anonymize; + "multisig": SS58String; + "call_hash": FixedSizeBinary<32>; +}; +export type I8qme4qa965a0r = AnonymousEnum<{ + /** + *A proxy was executed correctly, with the given. + */ + "ProxyExecuted": Anonymize; + /** + *A pure account has been created by new proxy with given + *disambiguation index and proxy type. + */ + "PureCreated": Anonymize; + /** + *An announcement was placed to make a call in the future. + */ + "Announced": Anonymize; + /** + *A proxy was added. + */ + "ProxyAdded": Anonymize; + /** + *A proxy was removed. + */ + "ProxyRemoved": Anonymize; +}>; +export type Ie7cuj84ohvg56 = { + "pure": SS58String; + "who": SS58String; + "proxy_type": Anonymize; + "disambiguation_index": number; +}; +export type I5ftepkjop3g1u = AnonymousEnum<{ + "Any": undefined; + "NonTransfer": undefined; + "CancelProxy": undefined; + "Assets": undefined; + "AssetOwner": undefined; + "AssetManager": undefined; + "Collator": undefined; +}>; +export type I2ur0oeqg495j8 = { + "real": SS58String; + "proxy": SS58String; + "call_hash": FixedSizeBinary<32>; +}; +export type I8ioopvokvl3ud = { + "delegator": SS58String; + "delegatee": SS58String; + "proxy_type": Anonymize; + "delay": number; +}; +export type I6avancvg8fd05 = AnonymousEnum<{ + /** + *Some asset class was created. + */ + "Created": Anonymize; + /** + *Some assets were issued. + */ + "Issued": Anonymize; + /** + *Some assets were transferred. + */ + "Transferred": Anonymize; + /** + *Some assets were destroyed. + */ + "Burned": Anonymize; + /** + *The management team changed. + */ + "TeamChanged": Anonymize; + /** + *The owner changed. + */ + "OwnerChanged": Anonymize; + /** + *Some account `who` was frozen. + */ + "Frozen": Anonymize; + /** + *Some account `who` was thawed. + */ + "Thawed": Anonymize; + /** + *Some asset `asset_id` was frozen. + */ + "AssetFrozen": Anonymize; + /** + *Some asset `asset_id` was thawed. + */ + "AssetThawed": Anonymize; + /** + *Accounts were destroyed for given asset. + */ + "AccountsDestroyed": Anonymize; + /** + *Approvals were destroyed for given asset. + */ + "ApprovalsDestroyed": Anonymize; + /** + *An asset class is in the process of being destroyed. + */ + "DestructionStarted": Anonymize; + /** + *An asset class was destroyed. + */ + "Destroyed": Anonymize; + /** + *Some asset class was force-created. + */ + "ForceCreated": Anonymize; + /** + *New metadata has been set for an asset. + */ + "MetadataSet": Anonymize; + /** + *Metadata has been cleared for an asset. + */ + "MetadataCleared": Anonymize; + /** + *(Additional) funds have been approved for transfer to a destination account. + */ + "ApprovedTransfer": Anonymize; + /** + *An approval for account `delegate` was cancelled by `owner`. + */ + "ApprovalCancelled": Anonymize; + /** + *An `amount` was transferred in its entirety from `owner` to `destination` by + *the approved `delegate`. + */ + "TransferredApproved": Anonymize; + /** + *An asset has had its attributes changed by the `Force` origin. + */ + "AssetStatusChanged": Anonymize; + /** + *The min_balance of an asset has been updated by the asset owner. + */ + "AssetMinBalanceChanged": Anonymize; + /** + *Some account `who` was created with a deposit from `depositor`. + */ + "Touched": Anonymize; + /** + *Some account `who` was blocked. + */ + "Blocked": Anonymize; + /** + *Some assets were deposited (e.g. for transaction fees). + */ + "Deposited": Anonymize; + /** + *Some assets were withdrawn from the account (e.g. for transaction fees). + */ + "Withdrawn": Anonymize; +}>; +export type I88ff3u4dpivk = { + "asset_id": number; + "creator": SS58String; + "owner": SS58String; +}; +export type I33cp947glv1ks = { + "asset_id": number; + "owner": SS58String; + "amount": bigint; +}; +export type Ic9om1gmmqu7rq = { + "asset_id": number; + "from": SS58String; + "to": SS58String; + "amount": bigint; +}; +export type I5hfov2b68ppb6 = { + "asset_id": number; + "owner": SS58String; + "balance": bigint; +}; +export type Ibthhb2m9vneds = { + "asset_id": number; + "issuer": SS58String; + "admin": SS58String; + "freezer": SS58String; +}; +export type Iaitn5bqfacj7k = { + "asset_id": number; + "owner": SS58String; +}; +export type If4ebvclj2ugvi = { + "asset_id": number; + "who": SS58String; +}; +export type Ia5le7udkgbaq9 = { + "asset_id": number; +}; +export type Ieduc1e6frq8rb = { + "asset_id": number; + "accounts_destroyed": number; + "accounts_remaining": number; +}; +export type I9h6gbtabovtm4 = { + "asset_id": number; + "approvals_destroyed": number; + "approvals_remaining": number; +}; +export type Ifnsa0dkkpf465 = { + "asset_id": number; + "name": Binary; + "symbol": Binary; + "decimals": number; + "is_frozen": boolean; +}; +export type I65dtqr2egjbc3 = { + "asset_id": number; + "source": SS58String; + "delegate": SS58String; + "amount": bigint; +}; +export type Ibqj3vg5s5lk0c = { + "asset_id": number; + "owner": SS58String; + "delegate": SS58String; +}; +export type I6l73u513p8rna = { + "asset_id": number; + "owner": SS58String; + "delegate": SS58String; + "destination": SS58String; + "amount": bigint; +}; +export type Iefqmt2htu1dlu = { + "asset_id": number; + "new_min_balance": bigint; +}; +export type If8bgtgqrchjtu = { + "asset_id": number; + "who": SS58String; + "depositor": SS58String; +}; +export type Idusmq77988cmt = { + "asset_id": number; + "who": SS58String; + "amount": bigint; +}; +export type Ia0j71vjrjqu9p = AnonymousEnum<{ + /** + *A `collection` was created. + */ + "Created": Anonymize; + /** + *A `collection` was force-created. + */ + "ForceCreated": Anonymize; + /** + *A `collection` was destroyed. + */ + "Destroyed": Anonymize; + /** + *An `item` was issued. + */ + "Issued": Anonymize; + /** + *An `item` was transferred. + */ + "Transferred": Anonymize; + /** + *An `item` was destroyed. + */ + "Burned": Anonymize; + /** + *Some `item` was frozen. + */ + "Frozen": Anonymize; + /** + *Some `item` was thawed. + */ + "Thawed": Anonymize; + /** + *Some `collection` was frozen. + */ + "CollectionFrozen": Anonymize; + /** + *Some `collection` was thawed. + */ + "CollectionThawed": Anonymize; + /** + *The owner changed. + */ + "OwnerChanged": Anonymize; + /** + *The management team changed. + */ + "TeamChanged": Anonymize; + /** + *An `item` of a `collection` has been approved by the `owner` for transfer by + *a `delegate`. + */ + "ApprovedTransfer": Anonymize; + /** + *An approval for a `delegate` account to transfer the `item` of an item + *`collection` was cancelled by its `owner`. + */ + "ApprovalCancelled": Anonymize; + /** + *A `collection` has had its attributes changed by the `Force` origin. + */ + "ItemStatusChanged": Anonymize; + /** + *New metadata has been set for a `collection`. + */ + "CollectionMetadataSet": Anonymize; + /** + *Metadata has been cleared for a `collection`. + */ + "CollectionMetadataCleared": Anonymize; + /** + *New metadata has been set for an item. + */ + "MetadataSet": Anonymize; + /** + *Metadata has been cleared for an item. + */ + "MetadataCleared": Anonymize; + /** + *Metadata has been cleared for an item. + */ + "Redeposited": Anonymize; + /** + *New attribute metadata has been set for a `collection` or `item`. + */ + "AttributeSet": Anonymize; + /** + *Attribute metadata has been cleared for a `collection` or `item`. + */ + "AttributeCleared": Anonymize; + /** + *Ownership acceptance has changed for an account. + */ + "OwnershipAcceptanceChanged": Anonymize; + /** + *Max supply has been set for a collection. + */ + "CollectionMaxSupplySet": Anonymize; + /** + *The price was set for the instance. + */ + "ItemPriceSet": Anonymize; + /** + *The price for the instance was removed. + */ + "ItemPriceRemoved": Anonymize; + /** + *An item was bought. + */ + "ItemBought": Anonymize; +}>; +export type I9gqanbbbe917p = { + "collection": number; + "creator": SS58String; + "owner": SS58String; +}; +export type Id1m1230297f7a = { + "collection": number; + "owner": SS58String; +}; +export type I6cu7obfo0rr0o = { + "collection": number; +}; +export type Ifvb1p5munhhv4 = { + "collection": number; + "item": number; + "owner": SS58String; +}; +export type I46h83ilqeed3g = { + "collection": number; + "item": number; + "from": SS58String; + "to": SS58String; +}; +export type Iafkqus0ohh6l6 = { + "collection": number; + "item": number; +}; +export type Icahse3uoi76n7 = { + "collection": number; + "new_owner": SS58String; +}; +export type I75sj3uv7gnemk = { + "collection": number; + "issuer": SS58String; + "admin": SS58String; + "freezer": SS58String; +}; +export type I5fjkvcb5vr6nb = { + "collection": number; + "item": number; + "owner": SS58String; + "delegate": SS58String; +}; +export type I9viqhmdtuof5e = { + "collection": number; + "data": Binary; + "is_frozen": boolean; +}; +export type Iceq9fmmp9aeqv = { + "collection": number; + "item": number; + "data": Binary; + "is_frozen": boolean; +}; +export type I2gr1toekv86b9 = { + "collection": number; + "successful_items": Anonymize; +}; +export type Icgljjb6j82uhn = Array; +export type I5tvvgui05tn6e = { + "collection": number; + "maybe_item"?: Anonymize; + "key": Binary; + "value": Binary; +}; +export type I4arjljr6dpflb = (number) | undefined; +export type Ibal0joadvdc2h = { + "collection": number; + "maybe_item"?: Anonymize; + "key": Binary; +}; +export type I2v2ikqt2trp52 = { + "who": SS58String; + "maybe_collection"?: Anonymize; +}; +export type I6h88h8vba22v8 = { + "collection": number; + "max_supply": number; +}; +export type If3057hi1g5qlo = { + "collection": number; + "item": number; + "price": bigint; + "whitelisted_buyer"?: Anonymize; +}; +export type Ihfphjolmsqq1 = (SS58String) | undefined; +export type Iaii5qf41d5n3d = { + "collection": number; + "item": number; + "price": bigint; + "seller": SS58String; + "buyer": SS58String; +}; +export type I6qicn8jn4fftj = AnonymousEnum<{ + /** + *A `collection` was created. + */ + "Created": Anonymize; + /** + *A `collection` was force-created. + */ + "ForceCreated": Anonymize; + /** + *A `collection` was destroyed. + */ + "Destroyed": Anonymize; + /** + *An `item` was issued. + */ + "Issued": Anonymize; + /** + *An `item` was transferred. + */ + "Transferred": Anonymize; + /** + *An `item` was destroyed. + */ + "Burned": Anonymize; + /** + *An `item` became non-transferable. + */ + "ItemTransferLocked": Anonymize; + /** + *An `item` became transferable. + */ + "ItemTransferUnlocked": Anonymize; + /** + *`item` metadata or attributes were locked. + */ + "ItemPropertiesLocked": Anonymize; + /** + *Some `collection` was locked. + */ + "CollectionLocked": Anonymize; + /** + *The owner changed. + */ + "OwnerChanged": Anonymize; + /** + *The management team changed. + */ + "TeamChanged": Anonymize; + /** + *An `item` of a `collection` has been approved by the `owner` for transfer by + *a `delegate`. + */ + "TransferApproved": Anonymize; + /** + *An approval for a `delegate` account to transfer the `item` of an item + *`collection` was cancelled by its `owner`. + */ + "ApprovalCancelled": Anonymize; + /** + *All approvals of an item got cancelled. + */ + "AllApprovalsCancelled": Anonymize; + /** + *A `collection` has had its config changed by the `Force` origin. + */ + "CollectionConfigChanged": Anonymize; + /** + *New metadata has been set for a `collection`. + */ + "CollectionMetadataSet": Anonymize; + /** + *Metadata has been cleared for a `collection`. + */ + "CollectionMetadataCleared": Anonymize; + /** + *New metadata has been set for an item. + */ + "ItemMetadataSet": Anonymize; + /** + *Metadata has been cleared for an item. + */ + "ItemMetadataCleared": Anonymize; + /** + *The deposit for a set of `item`s within a `collection` has been updated. + */ + "Redeposited": Anonymize; + /** + *New attribute metadata has been set for a `collection` or `item`. + */ + "AttributeSet": Anonymize; + /** + *Attribute metadata has been cleared for a `collection` or `item`. + */ + "AttributeCleared": Anonymize; + /** + *A new approval to modify item attributes was added. + */ + "ItemAttributesApprovalAdded": Anonymize; + /** + *A new approval to modify item attributes was removed. + */ + "ItemAttributesApprovalRemoved": Anonymize; + /** + *Ownership acceptance has changed for an account. + */ + "OwnershipAcceptanceChanged": Anonymize; + /** + *Max supply has been set for a collection. + */ + "CollectionMaxSupplySet": Anonymize; + /** + *Mint settings for a collection had changed. + */ + "CollectionMintSettingsUpdated": Anonymize; + /** + *Event gets emitted when the `NextCollectionId` gets incremented. + */ + "NextCollectionIdIncremented": Anonymize; + /** + *The price was set for the item. + */ + "ItemPriceSet": Anonymize; + /** + *The price for the item was removed. + */ + "ItemPriceRemoved": Anonymize; + /** + *An item was bought. + */ + "ItemBought": Anonymize; + /** + *A tip was sent. + */ + "TipSent": Anonymize; + /** + *An `item` swap intent was created. + */ + "SwapCreated": Anonymize; + /** + *The swap was cancelled. + */ + "SwapCancelled": Anonymize; + /** + *The swap has been claimed. + */ + "SwapClaimed": Anonymize; + /** + *New attributes have been set for an `item` of the `collection`. + */ + "PreSignedAttributesSet": Anonymize; + /** + *A new attribute in the `Pallet` namespace was set for the `collection` or an `item` + *within that `collection`. + */ + "PalletAttributeSet": Anonymize; +}>; +export type I1jj31tn29ie3c = { + "collection": number; + "item": number; + "lock_metadata": boolean; + "lock_attributes": boolean; +}; +export type Ico8bnjc6taa27 = { + "collection": number; + "issuer"?: Anonymize; + "admin"?: Anonymize; + "freezer"?: Anonymize; +}; +export type I78i1bvlonei69 = { + "collection": number; + "item": number; + "owner": SS58String; + "delegate": SS58String; + "deadline"?: Anonymize; +}; +export type I78u60nqh0etah = { + "collection": number; + "data": Binary; +}; +export type Icrkms46uh8tpb = { + "collection": number; + "item": number; + "data": Binary; +}; +export type I5llu6o6a0go5i = { + "collection": number; + "maybe_item"?: Anonymize; + "key": Binary; + "value": Binary; + "namespace": Anonymize; +}; +export type If3jjadhmug6qc = AnonymousEnum<{ + "Pallet": undefined; + "CollectionOwner": undefined; + "ItemOwner": undefined; + "Account": SS58String; +}>; +export type I93r2effh7od84 = { + "collection": number; + "maybe_item"?: Anonymize; + "key": Binary; + "namespace": Anonymize; +}; +export type I9i1f9mrso1hmf = { + "collection": number; + "item": number; + "delegate": SS58String; +}; +export type I9ksla2si91s56 = { + "next_id"?: Anonymize; +}; +export type Id9j7b85otvjru = { + "collection": number; + "item": number; + "sender": SS58String; + "receiver": SS58String; + "amount": bigint; +}; +export type Iaihk9pek2ajl9 = { + "offered_collection": number; + "offered_item": number; + "desired_collection": number; + "desired_item"?: Anonymize; + "price"?: Anonymize; + "deadline": number; +}; +export type I6oogc1jbmmi81 = (Anonymize) | undefined; +export type I9b1jgmi22enn5 = { + "amount": bigint; + "direction": Anonymize; +}; +export type I1p7rj0j3gmh73 = AnonymousEnum<{ + "Send": undefined; + "Receive": undefined; +}>; +export type Id9av23h47ufb2 = { + "sent_collection": number; + "sent_item": number; + "sent_item_owner": SS58String; + "received_collection": number; + "received_item": number; + "received_item_owner": SS58String; + "price"?: Anonymize; + "deadline": number; +}; +export type Ib4kpnijas4jqp = { + "collection": number; + "item": number; + "namespace": Anonymize; +}; +export type I2vnu5k0u1i65h = { + "collection": number; + "item"?: Anonymize; + "attribute": Anonymize; + "value": Binary; +}; +export type I75km45qj0eg5n = AnonymousEnum<{ + "UsedToClaim": number; + "TransferDisabled": undefined; +}>; +export type I81i2fkdo6nple = AnonymousEnum<{ + /** + *Some asset class was created. + */ + "Created": Anonymize; + /** + *Some assets were issued. + */ + "Issued": Anonymize; + /** + *Some assets were transferred. + */ + "Transferred": Anonymize; + /** + *Some assets were destroyed. + */ + "Burned": Anonymize; + /** + *The management team changed. + */ + "TeamChanged": Anonymize; + /** + *The owner changed. + */ + "OwnerChanged": Anonymize; + /** + *Some account `who` was frozen. + */ + "Frozen": Anonymize; + /** + *Some account `who` was thawed. + */ + "Thawed": Anonymize; + /** + *Some asset `asset_id` was frozen. + */ + "AssetFrozen": Anonymize; + /** + *Some asset `asset_id` was thawed. + */ + "AssetThawed": Anonymize; + /** + *Accounts were destroyed for given asset. + */ + "AccountsDestroyed": Anonymize; + /** + *Approvals were destroyed for given asset. + */ + "ApprovalsDestroyed": Anonymize; + /** + *An asset class is in the process of being destroyed. + */ + "DestructionStarted": Anonymize; + /** + *An asset class was destroyed. + */ + "Destroyed": Anonymize; + /** + *Some asset class was force-created. + */ + "ForceCreated": Anonymize; + /** + *New metadata has been set for an asset. + */ + "MetadataSet": Anonymize; + /** + *Metadata has been cleared for an asset. + */ + "MetadataCleared": Anonymize; + /** + *(Additional) funds have been approved for transfer to a destination account. + */ + "ApprovedTransfer": Anonymize; + /** + *An approval for account `delegate` was cancelled by `owner`. + */ + "ApprovalCancelled": Anonymize; + /** + *An `amount` was transferred in its entirety from `owner` to `destination` by + *the approved `delegate`. + */ + "TransferredApproved": Anonymize; + /** + *An asset has had its attributes changed by the `Force` origin. + */ + "AssetStatusChanged": Anonymize; + /** + *The min_balance of an asset has been updated by the asset owner. + */ + "AssetMinBalanceChanged": Anonymize; + /** + *Some account `who` was created with a deposit from `depositor`. + */ + "Touched": Anonymize; + /** + *Some account `who` was blocked. + */ + "Blocked": Anonymize; + /** + *Some assets were deposited (e.g. for transaction fees). + */ + "Deposited": Anonymize; + /** + *Some assets were withdrawn from the account (e.g. for transaction fees). + */ + "Withdrawn": Anonymize; +}>; +export type I36h211fbvstks = { + "asset_id": Anonymize; + "creator": SS58String; + "owner": SS58String; +}; +export type I2k9iu40qhp841 = { + "asset_id": Anonymize; + "owner": SS58String; + "amount": bigint; +}; +export type I3dufa2gr145hf = { + "asset_id": Anonymize; + "from": SS58String; + "to": SS58String; + "amount": bigint; +}; +export type Ie66s9cr50m7sr = { + "asset_id": Anonymize; + "owner": SS58String; + "balance": bigint; +}; +export type I3msvtljqnu799 = { + "asset_id": Anonymize; + "issuer": SS58String; + "admin": SS58String; + "freezer": SS58String; +}; +export type I467a79vcdbrec = { + "asset_id": Anonymize; + "owner": SS58String; +}; +export type Ia8imt144v3n25 = { + "asset_id": Anonymize; + "who": SS58String; +}; +export type I35uvf5ij009e8 = { + "asset_id": Anonymize; +}; +export type I1mmtcsmkng8nj = { + "asset_id": Anonymize; + "accounts_destroyed": number; + "accounts_remaining": number; +}; +export type I30qmuqbs4i8i4 = { + "asset_id": Anonymize; + "approvals_destroyed": number; + "approvals_remaining": number; +}; +export type Iarmm62t3lm37e = { + "asset_id": Anonymize; + "name": Binary; + "symbol": Binary; + "decimals": number; + "is_frozen": boolean; +}; +export type I9nm7qticlhmgl = { + "asset_id": Anonymize; + "source": SS58String; + "delegate": SS58String; + "amount": bigint; +}; +export type Iev4iv86ng02ck = { + "asset_id": Anonymize; + "owner": SS58String; + "delegate": SS58String; +}; +export type I5s8p7gejoudvh = { + "asset_id": Anonymize; + "owner": SS58String; + "delegate": SS58String; + "destination": SS58String; + "amount": bigint; +}; +export type If4jtj68r1gabq = { + "asset_id": Anonymize; + "new_min_balance": bigint; +}; +export type I8s66oebjsgqga = { + "asset_id": Anonymize; + "who": SS58String; + "depositor": SS58String; +}; +export type I42gee3b9iotl3 = { + "asset_id": Anonymize; + "who": SS58String; + "amount": bigint; +}; +export type I31lqq0fjfmnfv = AnonymousEnum<{ + /** + *A successful call of the `CreatePool` extrinsic will create this event. + */ + "PoolCreated": Anonymize; + /** + *A successful call of the `AddLiquidity` extrinsic will create this event. + */ + "LiquidityAdded": Anonymize; + /** + *A successful call of the `RemoveLiquidity` extrinsic will create this event. + */ + "LiquidityRemoved": Anonymize; + /** + *Assets have been converted from one to another. Both `SwapExactTokenForToken` + *and `SwapTokenForExactToken` will generate this event. + */ + "SwapExecuted": Anonymize; + /** + *Assets have been converted from one to another. + */ + "SwapCreditExecuted": Anonymize; + /** + *Pool has been touched in order to fulfill operational requirements. + */ + "Touched": Anonymize; +}>; +export type I9eo7u28un09g0 = { + /** + *The account that created the pool. + */ + "creator": SS58String; + /** + *The pool id associated with the pool. Note that the order of the assets may not be + *the same as the order specified in the create pool extrinsic. + */ + "pool_id": Anonymize; + /** + *The account ID of the pool. + */ + "pool_account": SS58String; + /** + *The id of the liquidity tokens that will be minted when assets are added to this + *pool. + */ + "lp_token": number; +}; +export type Id0as9l3s817qs = FixedSizeArray<2, Anonymize>; +export type I99d21a0mjv4oo = { + /** + *The account that the liquidity was taken from. + */ + "who": SS58String; + /** + *The account that the liquidity tokens were minted to. + */ + "mint_to": SS58String; + /** + *The pool id of the pool that the liquidity was added to. + */ + "pool_id": Anonymize; + /** + *The amount of the first asset that was added to the pool. + */ + "amount1_provided": bigint; + /** + *The amount of the second asset that was added to the pool. + */ + "amount2_provided": bigint; + /** + *The id of the lp token that was minted. + */ + "lp_token": number; + /** + *The amount of lp tokens that were minted of that id. + */ + "lp_token_minted": bigint; +}; +export type I6l4cdn6bhfq84 = { + /** + *The account that the liquidity tokens were burned from. + */ + "who": SS58String; + /** + *The account that the assets were transferred to. + */ + "withdraw_to": SS58String; + /** + *The pool id that the liquidity was removed from. + */ + "pool_id": Anonymize; + /** + *The amount of the first asset that was removed from the pool. + */ + "amount1": bigint; + /** + *The amount of the second asset that was removed from the pool. + */ + "amount2": bigint; + /** + *The id of the lp token that was burned. + */ + "lp_token": number; + /** + *The amount of lp tokens that were burned of that id. + */ + "lp_token_burned": bigint; + /** + *Liquidity withdrawal fee (%). + */ + "withdrawal_fee": number; +}; +export type Iduk3pajm13p5c = { + /** + *Which account was the instigator of the swap. + */ + "who": SS58String; + /** + *The account that the assets were transferred to. + */ + "send_to": SS58String; + /** + *The amount of the first asset that was swapped. + */ + "amount_in": bigint; + /** + *The amount of the second asset that was received. + */ + "amount_out": bigint; + /** + *The route of asset IDs with amounts that the swap went through. + *E.g. (A, amount_in) -> (Dot, amount_out) -> (B, amount_out) + */ + "path": Anonymize; +}; +export type Ibirh7ova056d = Array>; +export type Iadrpn9mhdu2rp = [Anonymize, bigint]; +export type I9cgel74dg00ig = { + /** + *The amount of the first asset that was swapped. + */ + "amount_in": bigint; + /** + *The amount of the second asset that was received. + */ + "amount_out": bigint; + /** + *The route of asset IDs with amounts that the swap went through. + *E.g. (A, amount_in) -> (Dot, amount_out) -> (B, amount_out) + */ + "path": Anonymize; +}; +export type Ibkbs6pj6cn1hv = { + /** + *The ID of the pool. + */ + "pool_id": Anonymize; + /** + *The account initiating the touch. + */ + "who": SS58String; +}; +export type Ic5m5lp1oioo8r = Array>; +export type I95g6i7ilua7lq = Array>; +export type I9jd27rnpm8ttv = FixedSizeArray<2, number>; +export type Ieniouoqkq4icf = { + "spec_version": number; + "spec_name": string; +}; +export type I1v7jbnil3tjns = Array>; +export type Ifv73m0cjq92it = { + "used_bandwidth": Anonymize; + "para_head_hash"?: Anonymize; + "consumed_go_ahead_signal"?: Anonymize; +}; +export type Ieafp1gui1o4cl = { + "ump_msg_count": number; + "ump_total_bytes": number; + "hrmp_outgoing": Anonymize; +}; +export type I68brng9hc4b57 = Array>; +export type I2hfpgo4vigap7 = [number, Anonymize]; +export type I37lfg356jmoof = { + "msg_count": number; + "total_bytes": number; +}; +export type Iav8k1edbj86k7 = (UpgradeGoAhead) | undefined; +export type UpgradeGoAhead = Enum<{ + "Abort": undefined; + "GoAhead": undefined; +}>; +export declare const UpgradeGoAhead: GetEnum; +export type I8jgj1nhcr2dg8 = { + "used_bandwidth": Anonymize; + "hrmp_watermark"?: Anonymize; + "consumed_go_ahead_signal"?: Anonymize; +}; +export type Ifn6q3equiq9qi = { + "parent_head": Binary; + "relay_parent_number": number; + "relay_parent_storage_root": FixedSizeBinary<32>; + "max_pov_size": number; +}; +export type Ia3sb0vgvovhtg = (UpgradeRestriction) | undefined; +export type UpgradeRestriction = Enum<{ + "Present": undefined; +}>; +export declare const UpgradeRestriction: GetEnum; +export type Itom7fk49o0c9 = Array; +export type I4i91h98n3cv1b = { + "dmq_mqc_head": FixedSizeBinary<32>; + "relay_dispatch_queue_remaining_capacity": Anonymize; + "ingress_channels": Anonymize; + "egress_channels": Anonymize; +}; +export type I3j1v1c2btq4bd = { + "remaining_count": number; + "remaining_size": number; +}; +export type I2d966pi8ko0ts = Array>; +export type Ib4li5mtsch8a1 = [number, Anonymize]; +export type Ivvvdad7teq4e = { + "max_capacity": number; + "max_total_size": number; + "max_message_size": number; + "msg_count": number; + "total_size": number; + "mqc_head"?: Anonymize; +}; +export type I4iumukclgj8ej = { + "max_code_size": number; + "max_head_data_size": number; + "max_upward_queue_count": number; + "max_upward_queue_size": number; + "max_upward_message_size": number; + "max_upward_message_num_per_candidate": number; + "hrmp_max_message_num_per_candidate": number; + "validation_upgrade_cooldown": number; + "validation_upgrade_delay": number; + "async_backing_params": Anonymize; +}; +export type Iavuvfkop6318c = { + "max_candidate_depth": number; + "allowed_ancestry_len": number; +}; +export type Iqnbvitf7a7l3 = Array>; +export type I4p5t2krb1gmvp = [number, FixedSizeBinary<32>]; +export type I6r5cbv8ttrb09 = Array>; +export type I958l48g4qg5rf = { + "recipient": number; + "data": Binary; +}; +export type I8ds64oj6581v0 = Array>; +export type Ifd60g9ld04ljn = { + "id": FixedSizeBinary<8>; + "amount": bigint; + "reasons": BalancesTypesReasons; +}; +export type BalancesTypesReasons = Enum<{ + "Fee": undefined; + "Misc": undefined; + "All": undefined; +}>; +export declare const BalancesTypesReasons: GetEnum; +export type Ia7pdug7cdsg8g = Array>; +export type I1basc5up2fk73 = { + "id": FixedSizeBinary<8>; + "amount": bigint; +}; +export type I9bin2jc70qt6q = Array>; +export type TransactionPaymentReleases = Enum<{ + "V1Ancient": undefined; + "V2": undefined; +}>; +export declare const TransactionPaymentReleases: GetEnum; +export type Ifble4juuml5ig = Array>; +export type I4aro1m78pdrtt = { + "locked": bigint; + "per_block": bigint; + "starting_block": number; +}; +export type Version = Enum<{ + "V0": undefined; + "V1": undefined; +}>; +export declare const Version: GetEnum; +export type Ifi4da1gej1fri = Array>; +export type Iep1lmt6q3s6r3 = { + "who": SS58String; + "deposit": bigint; +}; +export type Ifvgo9568rpmqc = Array>; +export type I8uo3fpd3bcc6f = [SS58String, FixedSizeBinary<32>]; +export type I6cs1itejju2vv = [bigint, number]; +export type Ib77b0fp1a6mjr = Array>; +export type I1tbd609kokm4d = { + "recipient": number; + "state": Anonymize; + "signals_exist": boolean; + "first_index": number; + "last_index": number; +}; +export type Ic2gg6ldfq068e = AnonymousEnum<{ + "Ok": undefined; + "Suspended": undefined; +}>; +export type I5g2vv0ckl2m8b = [number, number]; +export type Ifup3lg9ro8a0f = { + "suspend_threshold": number; + "drop_threshold": number; + "resume_threshold": number; +}; +export type XcmPalletQueryStatus = Enum<{ + "Pending": Anonymize; + "VersionNotifier": Anonymize; + "Ready": Anonymize; +}>; +export declare const XcmPalletQueryStatus: GetEnum; +export type I9cig2tff0h7a2 = { + "responder": XcmVersionedLocation; + "maybe_match_querier"?: Anonymize; + "maybe_notify"?: Anonymize; + "timeout": number; +}; +export type Ichrhugqpl0jbb = (XcmVersionedLocation) | undefined; +export type I1faufi0iffstp = (FixedSizeBinary<2>) | undefined; +export type I5c2ss6qk7lue3 = { + "origin": XcmVersionedLocation; + "is_active": boolean; +}; +export type I2rikk3g9dnfdf = { + "response": XcmVersionedResponse; + "at": number; +}; +export type XcmVersionedResponse = Enum<{ + "V2": XcmV2Response; + "V3": XcmV3Response; + "V4": XcmV4Response; +}>; +export declare const XcmVersionedResponse: GetEnum; +export type XcmV2Response = Enum<{ + "Null": undefined; + "Assets": Anonymize; + "ExecutionResult"?: Anonymize; + "Version": number; +}>; +export declare const XcmV2Response: GetEnum; +export type Ic6k45vtgiaa1s = (Anonymize) | undefined; +export type Ifg18rrvb5cqli = [number, XcmV2TraitsError]; +export type XcmV2TraitsError = Enum<{ + "Overflow": undefined; + "Unimplemented": undefined; + "UntrustedReserveLocation": undefined; + "UntrustedTeleportLocation": undefined; + "MultiLocationFull": undefined; + "MultiLocationNotInvertible": undefined; + "BadOrigin": undefined; + "InvalidLocation": undefined; + "AssetNotFound": undefined; + "FailedToTransactAsset": undefined; + "NotWithdrawable": undefined; + "LocationCannotHold": undefined; + "ExceedsMaxMessageSize": undefined; + "DestinationUnsupported": undefined; + "Transport": undefined; + "Unroutable": undefined; + "UnknownClaim": undefined; + "FailedToDecode": undefined; + "MaxWeightInvalid": undefined; + "NotHoldingFees": undefined; + "TooExpensive": undefined; + "Trap": bigint; + "UnhandledXcmVersion": undefined; + "WeightLimitReached": bigint; + "Barrier": undefined; + "WeightNotComputable": undefined; +}>; +export declare const XcmV2TraitsError: GetEnum; +export type XcmV3Response = Enum<{ + "Null": undefined; + "Assets": Anonymize; + "ExecutionResult"?: Anonymize; + "Version": number; + "PalletsInfo": Anonymize; + "DispatchResult": XcmV3MaybeErrorCode; +}>; +export declare const XcmV3Response: GetEnum; +export type Ic4qvh5df9s5gp = [number, XcmVersionedLocation]; +export type I7vlvrrl2pnbgk = [bigint, Anonymize, number]; +export type I50sjs3s5lud21 = Array>; +export type I6vu59hrif6rva = [XcmVersionedLocation, number]; +export type XcmPalletVersionMigrationStage = Enum<{ + "MigrateSupportedVersion": undefined; + "MigrateVersionNotifiers": undefined; + "NotifyCurrentTargets"?: Anonymize; + "MigrateAndNotifyOldTargets": undefined; +}>; +export declare const XcmPalletVersionMigrationStage: GetEnum; +export type Iabpgqcjikia83 = (Binary) | undefined; +export type I50qp0ij7h62g2 = { + "amount": bigint; + "owner": XcmVersionedLocation; + "locker": XcmVersionedLocation; + "consumers": Anonymize; +}; +export type I2ia97v5nng96b = Array>; +export type I2a3me3o6q76s8 = [undefined, bigint]; +export type Iteuj23is2ed5 = [number, SS58String, XcmVersionedAssetId]; +export type XcmVersionedAssetId = Enum<{ + "V3": XcmV3MultiassetAssetId; + "V4": Anonymize; +}>; +export declare const XcmVersionedAssetId: GetEnum; +export type I3rp19gb4dadaa = Array>; +export type I4arq5fbf241mq = [bigint, XcmVersionedLocation]; +export type I7f4alf2hnuu8s = { + "delivery_fee_factor": bigint; + "is_congested": boolean; +}; +export type Idh2ug6ou4a8og = { + "begin": number; + "end": number; + "count": number; + "ready_neighbours"?: Anonymize; + "message_count": bigint; + "size": bigint; +}; +export type Ignpjhsnd42fu = (Anonymize) | undefined; +export type I9d2uml1gs7v8 = { + "prev": Anonymize; + "next": Anonymize; +}; +export type I53esa2ms463bk = { + "remaining": number; + "remaining_size": number; + "first_index": number; + "first": number; + "last": number; + "heap": Binary; +}; +export type Ib4jhb8tt3uung = [Anonymize, number]; +export type Iag146hmjgqfgj = { + "when": Anonymize; + "deposit": bigint; + "depositor": SS58String; + "approvals": Anonymize; +}; +export type I32or1mos65f9o = [Anonymize, bigint]; +export type I8r6bfjpbrc70c = Array>; +export type I5temii03lnchi = { + "delegate": SS58String; + "proxy_type": Anonymize; + "delay": number; +}; +export type I9p9lq3rej5bhc = [Anonymize, bigint]; +export type Ie1hjkhaoshr67 = Array>; +export type I70eqajm9p2sc5 = { + "real": SS58String; + "call_hash": FixedSizeBinary<32>; + "height": number; +}; +export type I3qklfjubrljqh = { + "owner": SS58String; + "issuer": SS58String; + "admin": SS58String; + "freezer": SS58String; + "supply": bigint; + "deposit": bigint; + "min_balance": bigint; + "is_sufficient": boolean; + "accounts": number; + "sufficients": number; + "approvals": number; + "status": Anonymize; +}; +export type I3sd59779ndgs3 = AnonymousEnum<{ + "Live": undefined; + "Frozen": undefined; + "Destroying": undefined; +}>; +export type Iag3f1hum3p4c8 = { + "balance": bigint; + "status": Anonymize; + "reason": Anonymize; +}; +export type Icvjt1ogfma62c = AnonymousEnum<{ + "Liquid": undefined; + "Frozen": undefined; + "Blocked": undefined; +}>; +export type Ia34prnt421tan = AnonymousEnum<{ + "Consumer": undefined; + "Sufficient": undefined; + "DepositHeld": bigint; + "DepositRefunded": undefined; + "DepositFrom": Anonymize; +}>; +export type I95l2k9b1re95f = [SS58String, bigint]; +export type I7svnfko10tq2e = [number, SS58String]; +export type I4s6jkha20aoh0 = { + "amount": bigint; + "deposit": bigint; +}; +export type I2brm5b9jij1st = [number, SS58String, SS58String]; +export type I78s05f59eoi8b = { + "deposit": bigint; + "name": Binary; + "symbol": Binary; + "decimals": number; + "is_frozen": boolean; +}; +export type Ianufjuplcj6u4 = { + "owner": SS58String; + "issuer": SS58String; + "admin": SS58String; + "freezer": SS58String; + "total_deposit": bigint; + "free_holding": boolean; + "items": number; + "item_metadatas": number; + "attributes": number; + "is_frozen": boolean; +}; +export type Id32h28hjj1tch = [SS58String, number, number]; +export type I6ouflveob4eli = [SS58String, number]; +export type I2mv9dvsaj3kcr = { + "owner": SS58String; + "approved"?: Anonymize; + "is_frozen": boolean; + "deposit": bigint; +}; +export type I7781vnk0rm9eq = { + "deposit": bigint; + "data": Binary; + "is_frozen": boolean; +}; +export type Ie2iqtdb0stqo1 = [Binary, bigint]; +export type I5irutptk105do = [number, Anonymize, Binary]; +export type Ic9nev69d8grv1 = [bigint, Anonymize]; +export type I18m6a0sc4k7s9 = { + "owner": SS58String; + "owner_deposit": bigint; + "items": number; + "item_metadatas": number; + "item_configs": number; + "attributes": number; +}; +export type Ic9iokm15iigt6 = { + "owner": SS58String; + "approvals": Anonymize; + "deposit": Anonymize; +}; +export type I4m61c4hi7qpuv = Array>; +export type I2bebbvuje4ra8 = [SS58String, Anonymize]; +export type I35m96p3u4vl0p = { + "deposit": bigint; + "data": Binary; +}; +export type Iapmji0h53pmkn = { + "deposit": Anonymize; + "data": Binary; +}; +export type I6e70ge7ubff75 = { + "account"?: Anonymize; + "amount": bigint; +}; +export type Idrr42svup341f = [Binary, Anonymize]; +export type I4ugih6gb4fmug = [number, Anonymize, Anonymize, Binary]; +export type Idac0t49lnd4ls = { + "desired_collection": number; + "desired_item"?: Anonymize; + "price"?: Anonymize; + "deadline": number; +}; +export type I72ndo6phms8ik = { + "settings": bigint; + "max_supply"?: Anonymize; + "mint_settings": Anonymize; +}; +export type Ia3s8qquibn97v = { + "mint_type": Anonymize; + "price"?: Anonymize; + "start_block"?: Anonymize; + "end_block"?: Anonymize; + "default_item_settings": bigint; +}; +export type I41p72ko7duf22 = AnonymousEnum<{ + "Issuer": undefined; + "Public": undefined; + "HolderOf": number; +}>; +export type I35p85j063s0il = (bigint) | undefined; +export type I7rv8d2nr55kkq = [Anonymize, SS58String]; +export type I6lh06el3bdfqq = [Anonymize, SS58String, SS58String]; +export type In7a38730s6qs = { + "base_block": Anonymize; + "max_block": Anonymize; + "per_class": Anonymize; +}; +export type I79te2qqsklnbd = { + "normal": Anonymize; + "operational": Anonymize; + "mandatory": Anonymize; +}; +export type Ia78ef0a3p5958 = { + "base_extrinsic": Anonymize; + "max_extrinsic"?: Anonymize; + "max_total"?: Anonymize; + "reserved"?: Anonymize; +}; +export type Iasb8k6ash5mjn = (Anonymize) | undefined; +export type If15el53dd76v9 = { + "normal": number; + "operational": number; + "mandatory": number; +}; +export type I9s0ave7t0vnrk = { + "read": bigint; + "write": bigint; +}; +export type Ic6nglu2db2c36 = { + "spec_name": string; + "impl_name": string; + "authoring_version": number; + "spec_version": number; + "impl_version": number; + "apis": Anonymize; + "transaction_version": number; + "state_version": number; +}; +export type Ic9hg6pp5pkea5 = Array>; +export type I85u3mm1me217a = [FixedSizeBinary<8>, number]; +export type Iekve0i6djpd9f = AnonymousEnum<{ + /** + *Make some on-chain remark. + * + *Can be executed by every `origin`. + */ + "remark": Anonymize; + /** + *Set the number of pages in the WebAssembly environment's heap. + */ + "set_heap_pages": Anonymize; + /** + *Set the new runtime code. + */ + "set_code": Anonymize; + /** + *Set the new runtime code without doing any checks of the given `code`. + * + *Note that runtime upgrades will not run if this is called with a not-increasing spec + *version! + */ + "set_code_without_checks": Anonymize; + /** + *Set some items of storage. + */ + "set_storage": Anonymize; + /** + *Kill some items from storage. + */ + "kill_storage": Anonymize; + /** + *Kill all storage items with a key that starts with the given prefix. + * + ***NOTE:** We rely on the Root origin to provide us the number of subkeys under + *the prefix we are removing to accurately calculate the weight of this function. + */ + "kill_prefix": Anonymize; + /** + *Make some on-chain remark and emit event. + */ + "remark_with_event": Anonymize; + /** + *Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied + *later. + * + *This call requires Root origin. + */ + "authorize_upgrade": Anonymize; + /** + *Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied + *later. + * + *WARNING: This authorizes an upgrade that will take place without any safety checks, for + *example that the spec name remains the same and that the version number increases. Not + *recommended for normal use. Use `authorize_upgrade` instead. + * + *This call requires Root origin. + */ + "authorize_upgrade_without_checks": Anonymize; + /** + *Provide the preimage (runtime binary) `code` for an upgrade that has been authorized. + * + *If the authorization required a version check, this call will ensure the spec name + *remains unchanged and that the spec version has increased. + * + *Depending on the runtime's `OnSetCode` configuration, this function may directly apply + *the new `code` in the same block or attempt to schedule the upgrade. + * + *All origins are allowed. + */ + "apply_authorized_upgrade": Anonymize; +}>; +export type I8ofcg5rbj0g2c = { + "remark": Binary; +}; +export type I4adgbll7gku4i = { + "pages": bigint; +}; +export type I6pjjpfvhvcfru = { + "code": Binary; +}; +export type I9pj91mj79qekl = { + "items": Anonymize; +}; +export type I6pi5ou8r1hblk = Array>; +export type Idkbvh6dahk1v7 = FixedSizeArray<2, Binary>; +export type I39uah9nss64h9 = { + "keys": Anonymize; +}; +export type Ik64dknsq7k08 = { + "prefix": Binary; + "subkeys": number; +}; +export type Ib51vk42m1po4n = { + "code_hash": FixedSizeBinary<32>; +}; +export type I3jmip7qjlcqot = AnonymousEnum<{ + /** + *Set the current validation data. + * + *This should be invoked exactly once per block. It will panic at the finalization + *phase if the call was not invoked. + * + *The dispatch origin for this call must be `Inherent` + * + *As a side effect, this function upgrades the current validation function + *if the appropriate time has come. + */ + "set_validation_data": Anonymize; + "sudo_send_upward_message": Anonymize; + /** + *Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied + *later. + * + *The `check_version` parameter sets a boolean flag for whether or not the runtime's spec + *version and name should be verified on upgrade. Since the authorization only has a hash, + *it cannot actually perform the verification. + * + *This call requires Root origin. + */ + "authorize_upgrade": Anonymize; + /** + *Provide the preimage (runtime binary) `code` for an upgrade that has been authorized. + * + *If the authorization required a version check, this call will ensure the spec name + *remains unchanged and that the spec version has increased. + * + *Note that this function will not apply the new `code`, but only attempt to schedule the + *upgrade with the Relay Chain. + * + *All origins are allowed. + */ + "enact_authorized_upgrade": Anonymize; +}>; +export type I60v7bikk54tpu = { + "data": Anonymize; +}; +export type I1c673c4up9l62 = { + "validation_data": Anonymize; + "relay_chain_state": Anonymize; + "downward_messages": Anonymize; + "horizontal_messages": Anonymize; +}; +export type I6ljjd4b5fa4ov = Array>; +export type I60847k37jfcc6 = { + "sent_at": number; + "msg": Binary; +}; +export type I2pf0b05mc7sdr = Array>; +export type I9hvej6h53dqj0 = [number, Anonymize]; +export type Iev3u09i2vqn93 = Array>; +export type I409qo0sfkbh16 = { + "sent_at": number; + "data": Binary; +}; +export type Ifpj261e8s63m3 = { + "message": Binary; +}; +export type I7d75gqfg6jh9c = AnonymousEnum<{ + /** + *Set the current time. + * + *This call should be invoked exactly once per block. It will panic at the finalization + *phase, if this call hasn't been invoked by that time. + * + *The timestamp should be greater than the previous one by the amount specified by + *[`Config::MinimumPeriod`]. + * + *The dispatch origin for this call must be _None_. + * + *This dispatch class is _Mandatory_ to ensure it gets executed in the block. Be aware + *that changing the complexity of this call could result exhausting the resources in a + *block to execute any other calls. + * + *## Complexity + *- `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`) + *- 1 storage read and 1 storage mutation (codec `O(1)` because of `DidUpdate::take` in + * `on_finalize`) + *- 1 event handler `on_timestamp_set`. Must be `O(1)`. + */ + "set": Anonymize; +}>; +export type Idcr6u6361oad9 = { + "now": bigint; +}; +export type I9svldsp29mh87 = AnonymousEnum<{ + /** + *Transfer some liquid free balance to another account. + * + *`transfer_allow_death` will set the `FreeBalance` of the sender and receiver. + *If the sender's account is below the existential deposit as a result + *of the transfer, the account will be reaped. + * + *The dispatch origin for this call must be `Signed` by the transactor. + */ + "transfer_allow_death": Anonymize; + /** + *Exactly as `transfer_allow_death`, except the origin must be root and the source account + *may be specified. + */ + "force_transfer": Anonymize; + /** + *Same as the [`transfer_allow_death`] call, but with a check that the transfer will not + *kill the origin account. + * + *99% of the time you want [`transfer_allow_death`] instead. + * + *[`transfer_allow_death`]: struct.Pallet.html#method.transfer + */ + "transfer_keep_alive": Anonymize; + /** + *Transfer the entire transferable balance from the caller account. + * + *NOTE: This function only attempts to transfer _transferable_ balances. This means that + *any locked, reserved, or existential deposits (when `keep_alive` is `true`), will not be + *transferred by this function. To ensure that this function results in a killed account, + *you might need to prepare the account by removing any reference counters, storage + *deposits, etc... + * + *The dispatch origin of this call must be Signed. + * + *- `dest`: The recipient of the transfer. + *- `keep_alive`: A boolean to determine if the `transfer_all` operation should send all + * of the funds the account has, causing the sender account to be killed (false), or + * transfer everything except at least the existential deposit, which will guarantee to + * keep the sender account alive (true). + */ + "transfer_all": Anonymize; + /** + *Unreserve some balance from a user by force. + * + *Can only be called by ROOT. + */ + "force_unreserve": Anonymize; + /** + *Upgrade a specified account. + * + *- `origin`: Must be `Signed`. + *- `who`: The account to be upgraded. + * + *This will waive the transaction fee if at least all but 10% of the accounts needed to + *be upgraded. (We let some not have to be upgraded just in order to allow for the + *possibility of churn). + */ + "upgrade_accounts": Anonymize; + /** + *Set the regular balance of a given account. + * + *The dispatch origin for this call is `root`. + */ + "force_set_balance": Anonymize; + /** + *Adjust the total issuance in a saturating way. + * + *Can only be called by root and always needs a positive `delta`. + * + *# Example + */ + "force_adjust_total_issuance": Anonymize; + /** + *Burn the specified liquid free balance from the origin account. + * + *If the origin's account ends up below the existential deposit as a result + *of the burn and `keep_alive` is false, the account will be reaped. + * + *Unlike sending funds to a _burn_ address, which merely makes the funds inaccessible, + *this `burn` operation will reduce total issuance by the amount _burned_. + */ + "burn": Anonymize; +}>; +export type I4ktuaksf5i1gk = { + "dest": MultiAddress; + "value": bigint; +}; +export type MultiAddress = Enum<{ + "Id": SS58String; + "Index": undefined; + "Raw": Binary; + "Address32": FixedSizeBinary<32>; + "Address20": FixedSizeBinary<20>; +}>; +export declare const MultiAddress: GetEnum; +export type I9bqtpv2ii35mp = { + "source": MultiAddress; + "dest": MultiAddress; + "value": bigint; +}; +export type I9j7pagd6d4bda = { + "dest": MultiAddress; + "keep_alive": boolean; +}; +export type I2h9pmio37r7fb = { + "who": MultiAddress; + "amount": bigint; +}; +export type Ibmr18suc9ikh9 = { + "who": Anonymize; +}; +export type I9iq22t0burs89 = { + "who": MultiAddress; + "new_free": bigint; +}; +export type I5u8olqbbvfnvf = { + "direction": BalancesAdjustmentDirection; + "delta": bigint; +}; +export type BalancesAdjustmentDirection = Enum<{ + "Increase": undefined; + "Decrease": undefined; +}>; +export declare const BalancesAdjustmentDirection: GetEnum; +export type I5utcetro501ir = { + "value": bigint; + "keep_alive": boolean; +}; +export type Icgf8vmtkbnu4u = AnonymousEnum<{ + /** + *Unlock any vested funds of the sender account. + * + *The dispatch origin for this call must be _Signed_ and the sender must have funds still + *locked under this pallet. + * + *Emits either `VestingCompleted` or `VestingUpdated`. + * + *## Complexity + *- `O(1)`. + */ + "vest": undefined; + /** + *Unlock any vested funds of a `target` account. + * + *The dispatch origin for this call must be _Signed_. + * + *- `target`: The account whose vested funds should be unlocked. Must have funds still + *locked under this pallet. + * + *Emits either `VestingCompleted` or `VestingUpdated`. + * + *## Complexity + *- `O(1)`. + */ + "vest_other": Anonymize; + /** + *Create a vested transfer. + * + *The dispatch origin for this call must be _Signed_. + * + *- `target`: The account receiving the vested funds. + *- `schedule`: The vesting schedule attached to the transfer. + * + *Emits `VestingCreated`. + * + *NOTE: This will unlock all schedules through the current block. + * + *## Complexity + *- `O(1)`. + */ + "vested_transfer": Anonymize; + /** + *Force a vested transfer. + * + *The dispatch origin for this call must be _Root_. + * + *- `source`: The account whose funds should be transferred. + *- `target`: The account that should be transferred the vested funds. + *- `schedule`: The vesting schedule attached to the transfer. + * + *Emits `VestingCreated`. + * + *NOTE: This will unlock all schedules through the current block. + * + *## Complexity + *- `O(1)`. + */ + "force_vested_transfer": Anonymize; + /** + *Merge two vesting schedules together, creating a new vesting schedule that unlocks over + *the highest possible start and end blocks. If both schedules have already started the + *current block will be used as the schedule start; with the caveat that if one schedule + *is finished by the current block, the other will be treated as the new merged schedule, + *unmodified. + * + *NOTE: If `schedule1_index == schedule2_index` this is a no-op. + *NOTE: This will unlock all schedules through the current block prior to merging. + *NOTE: If both schedules have ended by the current block, no new schedule will be created + *and both will be removed. + * + *Merged schedule attributes: + *- `starting_block`: `MAX(schedule1.starting_block, scheduled2.starting_block, + * current_block)`. + *- `ending_block`: `MAX(schedule1.ending_block, schedule2.ending_block)`. + *- `locked`: `schedule1.locked_at(current_block) + schedule2.locked_at(current_block)`. + * + *The dispatch origin for this call must be _Signed_. + * + *- `schedule1_index`: index of the first schedule to merge. + *- `schedule2_index`: index of the second schedule to merge. + */ + "merge_schedules": Anonymize; + /** + *Force remove a vesting schedule + * + *The dispatch origin for this call must be _Root_. + * + *- `target`: An account that has a vesting schedule + *- `schedule_index`: The vesting schedule index that should be removed + */ + "force_remove_vesting_schedule": Anonymize; +}>; +export type Id9uqtigc0il3v = { + "target": MultiAddress; +}; +export type Iaa2o6cgjdpdn5 = { + "target": MultiAddress; + "schedule": Anonymize; +}; +export type Iam6hrl7ptd85l = { + "source": MultiAddress; + "target": MultiAddress; + "schedule": Anonymize; +}; +export type Ict9ivhr2c5hv0 = { + "schedule1_index": number; + "schedule2_index": number; +}; +export type I8t4vv03357lk9 = { + "target": MultiAddress; + "schedule_index": number; +}; +export type I9dpq5287dur8b = AnonymousEnum<{ + /** + *Set the list of invulnerable (fixed) collators. These collators must do some + *preparation, namely to have registered session keys. + * + *The call will remove any accounts that have not registered keys from the set. That is, + *it is non-atomic; the caller accepts all `AccountId`s passed in `new` _individually_ as + *acceptable Invulnerables, and is not proposing a _set_ of new Invulnerables. + * + *This call does not maintain mutual exclusivity of `Invulnerables` and `Candidates`. It + *is recommended to use a batch of `add_invulnerable` and `remove_invulnerable` instead. A + *`batch_all` can also be used to enforce atomicity. If any candidates are included in + *`new`, they should be removed with `remove_invulnerable_candidate` after execution. + * + *Must be called by the `UpdateOrigin`. + */ + "set_invulnerables": Anonymize; + /** + *Set the ideal number of non-invulnerable collators. If lowering this number, then the + *number of running collators could be higher than this figure. Aside from that edge case, + *there should be no other way to have more candidates than the desired number. + * + *The origin for this call must be the `UpdateOrigin`. + */ + "set_desired_candidates": Anonymize; + /** + *Set the candidacy bond amount. + * + *If the candidacy bond is increased by this call, all current candidates which have a + *deposit lower than the new bond will be kicked from the list and get their deposits + *back. + * + *The origin for this call must be the `UpdateOrigin`. + */ + "set_candidacy_bond": Anonymize; + /** + *Register this account as a collator candidate. The account must (a) already have + *registered session keys and (b) be able to reserve the `CandidacyBond`. + * + *This call is not available to `Invulnerable` collators. + */ + "register_as_candidate": undefined; + /** + *Deregister `origin` as a collator candidate. Note that the collator can only leave on + *session change. The `CandidacyBond` will be unreserved immediately. + * + *This call will fail if the total number of candidates would drop below + *`MinEligibleCollators`. + */ + "leave_intent": undefined; + /** + *Add a new account `who` to the list of `Invulnerables` collators. `who` must have + *registered session keys. If `who` is a candidate, they will be removed. + * + *The origin for this call must be the `UpdateOrigin`. + */ + "add_invulnerable": Anonymize; + /** + *Remove an account `who` from the list of `Invulnerables` collators. `Invulnerables` must + *be sorted. + * + *The origin for this call must be the `UpdateOrigin`. + */ + "remove_invulnerable": Anonymize; + /** + *Update the candidacy bond of collator candidate `origin` to a new amount `new_deposit`. + * + *Setting a `new_deposit` that is lower than the current deposit while `origin` is + *occupying a top-`DesiredCandidates` slot is not allowed. + * + *This call will fail if `origin` is not a collator candidate, the updated bond is lower + *than the minimum candidacy bond, and/or the amount cannot be reserved. + */ + "update_bond": Anonymize; + /** + *The caller `origin` replaces a candidate `target` in the collator candidate list by + *reserving `deposit`. The amount `deposit` reserved by the caller must be greater than + *the existing bond of the target it is trying to replace. + * + *This call will fail if the caller is already a collator candidate or invulnerable, the + *caller does not have registered session keys, the target is not a collator candidate, + *and/or the `deposit` amount cannot be reserved. + */ + "take_candidate_slot": Anonymize; +}>; +export type Ifccifqltb5obi = { + "new": Anonymize; +}; +export type Iadtsfv699cq8b = { + "max": number; +}; +export type Ialpmgmhr3gk5r = { + "bond": bigint; +}; +export type I3sdol54kg5jaq = { + "new_deposit": bigint; +}; +export type I8fougodaj6di6 = { + "deposit": bigint; + "target": SS58String; +}; +export type I77dda7hps0u37 = AnonymousEnum<{ + /** + *Sets the session key(s) of the function caller to `keys`. + *Allows an account to set its session key prior to becoming a validator. + *This doesn't take effect until the next session. + * + *The dispatch origin of this function must be signed. + * + *## Complexity + *- `O(1)`. Actual cost depends on the number of length of `T::Keys::key_ids()` which is + * fixed. + */ + "set_keys": Anonymize; + /** + *Removes any session key(s) of the function caller. + * + *This doesn't take effect until the next session. + * + *The dispatch origin of this function must be Signed and the account must be either be + *convertible to a validator ID using the chain's typical addressing system (this usually + *means being a controller account) or directly convertible into a validator ID (which + *usually means being a stash account). + * + *## Complexity + *- `O(1)` in number of key types. Actual cost depends on the number of length of + * `T::Keys::key_ids()` which is fixed. + */ + "purge_keys": undefined; +}>; +export type I81vt5eq60l4b6 = { + "keys": FixedSizeBinary<32>; + "proof": Binary; +}; +export type Ib7tahn20bvsep = AnonymousEnum<{ + /** + *Suspends all XCM executions for the XCMP queue, regardless of the sender's origin. + * + *- `origin`: Must pass `ControllerOrigin`. + */ + "suspend_xcm_execution": undefined; + /** + *Resumes all XCM executions for the XCMP queue. + * + *Note that this function doesn't change the status of the in/out bound channels. + * + *- `origin`: Must pass `ControllerOrigin`. + */ + "resume_xcm_execution": undefined; + /** + *Overwrites the number of pages which must be in the queue for the other side to be + *told to suspend their sending. + * + *- `origin`: Must pass `Root`. + *- `new`: Desired value for `QueueConfigData.suspend_value` + */ + "update_suspend_threshold": Anonymize; + /** + *Overwrites the number of pages which must be in the queue after which we drop any + *further messages from the channel. + * + *- `origin`: Must pass `Root`. + *- `new`: Desired value for `QueueConfigData.drop_threshold` + */ + "update_drop_threshold": Anonymize; + /** + *Overwrites the number of pages which the queue must be reduced to before it signals + *that message sending may recommence after it has been suspended. + * + *- `origin`: Must pass `Root`. + *- `new`: Desired value for `QueueConfigData.resume_threshold` + */ + "update_resume_threshold": Anonymize; +}>; +export type I3vh014cqgmrfd = { + "new": number; +}; +export type I9nbjvlrb9bp1g = AnonymousEnum<{ + "send": Anonymize; + /** + *Teleport some assets from the local chain to some destination chain. + * + ***This function is deprecated: Use `limited_teleport_assets` instead.** + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item`. The weight limit for fees is not provided and thus is unlimited, + *with all fees taken as needed from the asset. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` chain. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + */ + "teleport_assets": Anonymize; + /** + *Transfer some assets from the local chain to the destination chain through their local, + *destination or remote reserve. + * + *`assets` must have same reserve location and may not be teleportable to `dest`. + * - `assets` have local reserve: transfer assets to sovereign account of destination + * chain and forward a notification XCM to `dest` to mint and deposit reserve-based + * assets to `beneficiary`. + * - `assets` have destination reserve: burn local assets and forward a notification to + * `dest` chain to withdraw the reserve assets from this chain's sovereign account and + * deposit them to `beneficiary`. + * - `assets` have remote reserve: burn local assets, forward XCM to reserve chain to move + * reserves from this chain's SA to `dest` chain's SA, and forward another XCM to `dest` + * to mint and deposit reserve-based assets to `beneficiary`. + * + ***This function is deprecated: Use `limited_reserve_transfer_assets` instead.** + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item`. The weight limit for fees is not provided and thus is unlimited, + *with all fees taken as needed from the asset. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` (and possibly reserve) chains. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + */ + "reserve_transfer_assets": Anonymize; + /** + *Execute an XCM message from a local, signed, origin. + * + *An event is deposited indicating whether `msg` could be executed completely or only + *partially. + * + *No more than `max_weight` will be used in its attempted execution. If this is less than + *the maximum amount of weight that the message could take to be executed, then no + *execution attempt will be made. + */ + "execute": Anonymize; + /** + *Extoll that a particular destination can be communicated with through a particular + *version of XCM. + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `location`: The destination that is being described. + *- `xcm_version`: The latest version of XCM that `location` supports. + */ + "force_xcm_version": Anonymize; + /** + *Set a safe XCM version (the version that XCM should be encoded with if the most recent + *version a destination can accept is unknown). + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `maybe_xcm_version`: The default XCM encoding version, or `None` to disable. + */ + "force_default_xcm_version": Anonymize; + /** + *Ask a location to notify us regarding their XCM version and any changes to it. + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `location`: The location to which we should subscribe for XCM version notifications. + */ + "force_subscribe_version_notify": Anonymize; + /** + *Require that a particular destination should no longer notify us regarding any XCM + *version changes. + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `location`: The location to which we are currently subscribed for XCM version + * notifications which we no longer desire. + */ + "force_unsubscribe_version_notify": Anonymize; + /** + *Transfer some assets from the local chain to the destination chain through their local, + *destination or remote reserve. + * + *`assets` must have same reserve location and may not be teleportable to `dest`. + * - `assets` have local reserve: transfer assets to sovereign account of destination + * chain and forward a notification XCM to `dest` to mint and deposit reserve-based + * assets to `beneficiary`. + * - `assets` have destination reserve: burn local assets and forward a notification to + * `dest` chain to withdraw the reserve assets from this chain's sovereign account and + * deposit them to `beneficiary`. + * - `assets` have remote reserve: burn local assets, forward XCM to reserve chain to move + * reserves from this chain's SA to `dest` chain's SA, and forward another XCM to `dest` + * to mint and deposit reserve-based assets to `beneficiary`. + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item`, up to enough to pay for `weight_limit` of weight. If more weight + *is needed than `weight_limit`, then the operation will fail and the sent assets may be + *at risk. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` (and possibly reserve) chains. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + *- `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + */ + "limited_reserve_transfer_assets": Anonymize; + /** + *Teleport some assets from the local chain to some destination chain. + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item`, up to enough to pay for `weight_limit` of weight. If more weight + *is needed than `weight_limit`, then the operation will fail and the sent assets may be + *at risk. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` chain. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + *- `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + */ + "limited_teleport_assets": Anonymize; + /** + *Set or unset the global suspension state of the XCM executor. + * + *- `origin`: Must be an origin specified by AdminOrigin. + *- `suspended`: `true` to suspend, `false` to resume. + */ + "force_suspension": Anonymize; + /** + *Transfer some assets from the local chain to the destination chain through their local, + *destination or remote reserve, or through teleports. + * + *Fee payment on the destination side is made from the asset in the `assets` vector of + *index `fee_asset_item` (hence referred to as `fees`), up to enough to pay for + *`weight_limit` of weight. If more weight is needed than `weight_limit`, then the + *operation will fail and the sent assets may be at risk. + * + *`assets` (excluding `fees`) must have same reserve location or otherwise be teleportable + *to `dest`, no limitations imposed on `fees`. + * - for local reserve: transfer assets to sovereign account of destination chain and + * forward a notification XCM to `dest` to mint and deposit reserve-based assets to + * `beneficiary`. + * - for destination reserve: burn local assets and forward a notification to `dest` chain + * to withdraw the reserve assets from this chain's sovereign account and deposit them + * to `beneficiary`. + * - for remote reserve: burn local assets, forward XCM to reserve chain to move reserves + * from this chain's SA to `dest` chain's SA, and forward another XCM to `dest` to mint + * and deposit reserve-based assets to `beneficiary`. + * - for teleports: burn local assets and forward XCM to `dest` chain to mint/teleport + * assets and deposit them to `beneficiary`. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `X2(Parent, + * Parachain(..))` to send from parachain to parachain, or `X1(Parachain(..))` to send + * from relay to parachain. + *- `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will + * generally be an `AccountId32` value. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` (and possibly reserve) chains. + *- `fee_asset_item`: The index into `assets` of the item which should be used to pay + * fees. + *- `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + */ + "transfer_assets": Anonymize; + /** + *Claims assets trapped on this pallet because of leftover assets during XCM execution. + * + *- `origin`: Anyone can call this extrinsic. + *- `assets`: The exact assets that were trapped. Use the version to specify what version + *was the latest when they were trapped. + *- `beneficiary`: The location/account where the claimed assets will be deposited. + */ + "claim_assets": Anonymize; + /** + *Transfer assets from the local chain to the destination chain using explicit transfer + *types for assets and fees. + * + *`assets` must have same reserve location or may be teleportable to `dest`. Caller must + *provide the `assets_transfer_type` to be used for `assets`: + * - `TransferType::LocalReserve`: transfer assets to sovereign account of destination + * chain and forward a notification XCM to `dest` to mint and deposit reserve-based + * assets to `beneficiary`. + * - `TransferType::DestinationReserve`: burn local assets and forward a notification to + * `dest` chain to withdraw the reserve assets from this chain's sovereign account and + * deposit them to `beneficiary`. + * - `TransferType::RemoteReserve(reserve)`: burn local assets, forward XCM to `reserve` + * chain to move reserves from this chain's SA to `dest` chain's SA, and forward another + * XCM to `dest` to mint and deposit reserve-based assets to `beneficiary`. Typically + * the remote `reserve` is Asset Hub. + * - `TransferType::Teleport`: burn local assets and forward XCM to `dest` chain to + * mint/teleport assets and deposit them to `beneficiary`. + * + *On the destination chain, as well as any intermediary hops, `BuyExecution` is used to + *buy execution using transferred `assets` identified by `remote_fees_id`. + *Make sure enough of the specified `remote_fees_id` asset is included in the given list + *of `assets`. `remote_fees_id` should be enough to pay for `weight_limit`. If more weight + *is needed than `weight_limit`, then the operation will fail and the sent assets may be + *at risk. + * + *`remote_fees_id` may use different transfer type than rest of `assets` and can be + *specified through `fees_transfer_type`. + * + *The caller needs to specify what should happen to the transferred assets once they reach + *the `dest` chain. This is done through the `custom_xcm_on_dest` parameter, which + *contains the instructions to execute on `dest` as a final step. + * This is usually as simple as: + * `Xcm(vec![DepositAsset { assets: Wild(AllCounted(assets.len())), beneficiary }])`, + * but could be something more exotic like sending the `assets` even further. + * + *- `origin`: Must be capable of withdrawing the `assets` and executing XCM. + *- `dest`: Destination context for the assets. Will typically be `[Parent, + * Parachain(..)]` to send from parachain to parachain, or `[Parachain(..)]` to send from + * relay to parachain, or `(parents: 2, (GlobalConsensus(..), ..))` to send from + * parachain across a bridge to another ecosystem destination. + *- `assets`: The assets to be withdrawn. This should include the assets used to pay the + * fee on the `dest` (and possibly reserve) chains. + *- `assets_transfer_type`: The XCM `TransferType` used to transfer the `assets`. + *- `remote_fees_id`: One of the included `assets` to be used to pay fees. + *- `fees_transfer_type`: The XCM `TransferType` used to transfer the `fees` assets. + *- `custom_xcm_on_dest`: The XCM to be executed on `dest` chain as the last step of the + * transfer, which also determines what happens to the assets on the destination chain. + *- `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + */ + "transfer_assets_using_type_and_then": Anonymize; +}>; +export type I9paqujeb1fpv6 = { + "dest": XcmVersionedLocation; + "message": XcmVersionedXcm; +}; +export type XcmVersionedXcm = Enum<{ + "V2": Anonymize; + "V3": Anonymize; + "V4": Anonymize; +}>; +export declare const XcmVersionedXcm: GetEnum; +export type Iemqgk0vect4v7 = Array; +export type XcmV2Instruction = Enum<{ + "WithdrawAsset": Anonymize; + "ReserveAssetDeposited": Anonymize; + "ReceiveTeleportedAsset": Anonymize; + "QueryResponse": Anonymize; + "TransferAsset": Anonymize; + "TransferReserveAsset": Anonymize; + "Transact": Anonymize; + "HrmpNewChannelOpenRequest": Anonymize; + "HrmpChannelAccepted": Anonymize; + "HrmpChannelClosing": Anonymize; + "ClearOrigin": undefined; + "DescendOrigin": XcmV2MultilocationJunctions; + "ReportError": Anonymize; + "DepositAsset": Anonymize; + "DepositReserveAsset": Anonymize; + "ExchangeAsset": Anonymize; + "InitiateReserveWithdraw": Anonymize; + "InitiateTeleport": Anonymize; + "QueryHolding": Anonymize; + "BuyExecution": Anonymize; + "RefundSurplus": undefined; + "SetErrorHandler": Anonymize; + "SetAppendix": Anonymize; + "ClearError": undefined; + "ClaimAsset": Anonymize; + "Trap": bigint; + "SubscribeVersion": Anonymize; + "UnsubscribeVersion": undefined; +}>; +export declare const XcmV2Instruction: GetEnum; +export type I1n70k431nr92 = { + "query_id": bigint; + "response": XcmV2Response; + "max_weight": bigint; +}; +export type I800n35601gllq = { + "assets": Anonymize; + "beneficiary": Anonymize; +}; +export type I4ahfnfo1h39ng = { + "assets": Anonymize; + "dest": Anonymize; + "xcm": Anonymize; +}; +export type Icoi0hvjidego7 = { + "origin_type": XcmV2OriginKind; + "require_weight_at_most": bigint; + "call": Binary; +}; +export type I9ts0mtbeaq84a = { + "query_id": bigint; + "dest": Anonymize; + "max_response_weight": bigint; +}; +export type Ias146869ruhho = { + "assets": XcmV2MultiAssetFilter; + "max_assets": number; + "beneficiary": Anonymize; +}; +export type XcmV2MultiAssetFilter = Enum<{ + "Definite": Anonymize; + "Wild": XcmV2MultiassetWildMultiAsset; +}>; +export declare const XcmV2MultiAssetFilter: GetEnum; +export type XcmV2MultiassetWildMultiAsset = Enum<{ + "All": undefined; + "AllOf": Anonymize; +}>; +export declare const XcmV2MultiassetWildMultiAsset: GetEnum; +export type I8ojnukqr6c3j6 = { + "id": XcmV2MultiassetAssetId; + "fun": XcmV2MultiassetWildFungibility; +}; +export type I1upba6ju0ujgo = { + "assets": XcmV2MultiAssetFilter; + "max_assets": number; + "dest": Anonymize; + "xcm": Anonymize; +}; +export type Id2jloidb259tk = { + "give": XcmV2MultiAssetFilter; + "receive": Anonymize; +}; +export type I4dks21gdu9pr2 = { + "assets": XcmV2MultiAssetFilter; + "reserve": Anonymize; + "xcm": Anonymize; +}; +export type I4mu8vn87cfdeb = { + "assets": XcmV2MultiAssetFilter; + "dest": Anonymize; + "xcm": Anonymize; +}; +export type Ib0pr3c4bd0b1s = { + "query_id": bigint; + "dest": Anonymize; + "assets": XcmV2MultiAssetFilter; + "max_response_weight": bigint; +}; +export type Id8o97c8tt042k = { + "fees": Anonymize; + "weight_limit": XcmV2WeightLimit; +}; +export type XcmV2WeightLimit = Enum<{ + "Unlimited": undefined; + "Limited": bigint; +}>; +export declare const XcmV2WeightLimit: GetEnum; +export type I2i62b6lp2e74f = { + "assets": Anonymize; + "ticket": Anonymize; +}; +export type Ido2s48ntevurj = { + "query_id": bigint; + "max_response_weight": bigint; +}; +export type Ianvng4e08j9ii = Array; +export type XcmV3Instruction = Enum<{ + "WithdrawAsset": Anonymize; + "ReserveAssetDeposited": Anonymize; + "ReceiveTeleportedAsset": Anonymize; + "QueryResponse": Anonymize; + "TransferAsset": Anonymize; + "TransferReserveAsset": Anonymize; + "Transact": Anonymize; + "HrmpNewChannelOpenRequest": Anonymize; + "HrmpChannelAccepted": Anonymize; + "HrmpChannelClosing": Anonymize; + "ClearOrigin": undefined; + "DescendOrigin": XcmV3Junctions; + "ReportError": Anonymize; + "DepositAsset": Anonymize; + "DepositReserveAsset": Anonymize; + "ExchangeAsset": Anonymize; + "InitiateReserveWithdraw": Anonymize; + "InitiateTeleport": Anonymize; + "ReportHolding": Anonymize; + "BuyExecution": Anonymize; + "RefundSurplus": undefined; + "SetErrorHandler": Anonymize; + "SetAppendix": Anonymize; + "ClearError": undefined; + "ClaimAsset": Anonymize; + "Trap": bigint; + "SubscribeVersion": Anonymize; + "UnsubscribeVersion": undefined; + "BurnAsset": Anonymize; + "ExpectAsset": Anonymize; + "ExpectOrigin"?: Anonymize; + "ExpectError"?: Anonymize; + "ExpectTransactStatus": XcmV3MaybeErrorCode; + "QueryPallet": Anonymize; + "ExpectPallet": Anonymize; + "ReportTransactStatus": Anonymize; + "ClearTransactStatus": undefined; + "UniversalOrigin": XcmV3Junction; + "ExportMessage": Anonymize; + "LockAsset": Anonymize; + "UnlockAsset": Anonymize; + "NoteUnlockable": Anonymize; + "RequestUnlock": Anonymize; + "SetFeesMode": Anonymize; + "SetTopic": FixedSizeBinary<32>; + "ClearTopic": undefined; + "AliasOrigin": Anonymize; + "UnpaidExecution": Anonymize; +}>; +export declare const XcmV3Instruction: GetEnum; +export type I6g12ltekg2vaj = { + "query_id": bigint; + "response": XcmV3Response; + "max_weight": Anonymize; + "querier"?: Anonymize; +}; +export type I8d6ni89sh0qmn = { + "assets": Anonymize; + "beneficiary": Anonymize; +}; +export type Ib2euffogp56pp = { + "assets": Anonymize; + "dest": Anonymize; + "xcm": Anonymize; +}; +export type Ia848euuv1lip6 = { + "assets": XcmV3MultiassetMultiAssetFilter; + "beneficiary": Anonymize; +}; +export type XcmV3MultiassetMultiAssetFilter = Enum<{ + "Definite": Anonymize; + "Wild": XcmV3MultiassetWildMultiAsset; +}>; +export declare const XcmV3MultiassetMultiAssetFilter: GetEnum; +export type XcmV3MultiassetWildMultiAsset = Enum<{ + "All": undefined; + "AllOf": Anonymize; + "AllCounted": number; + "AllOfCounted": Anonymize; +}>; +export declare const XcmV3MultiassetWildMultiAsset: GetEnum; +export type Iemi0m9547o42b = { + "id": XcmV3MultiassetAssetId; + "fun": XcmV2MultiassetWildFungibility; +}; +export type I2ii8gjc2m1ca3 = { + "id": XcmV3MultiassetAssetId; + "fun": XcmV2MultiassetWildFungibility; + "count": number; +}; +export type I3m8e0mi6lq6fj = { + "assets": XcmV3MultiassetMultiAssetFilter; + "dest": Anonymize; + "xcm": Anonymize; +}; +export type Ich3d4125568vq = { + "give": XcmV3MultiassetMultiAssetFilter; + "want": Anonymize; + "maximal": boolean; +}; +export type I3k3ia72gehj6b = { + "assets": XcmV3MultiassetMultiAssetFilter; + "reserve": Anonymize; + "xcm": Anonymize; +}; +export type I4qgd1h8m3umqc = { + "response_info": Anonymize; + "assets": XcmV3MultiassetMultiAssetFilter; +}; +export type I9ff02md5rmeur = { + "fees": Anonymize; + "weight_limit": XcmV3WeightLimit; +}; +export type I8pu3j74el68mi = { + "assets": Anonymize; + "ticket": Anonymize; +}; +export type I8up5nu6gcp077 = { + "network": XcmV3JunctionNetworkId; + "destination": XcmV3Junctions; + "xcm": Anonymize; +}; +export type I2ieo5vo1bi5a0 = { + "asset": Anonymize; + "unlocker": Anonymize; +}; +export type I3u52dm5pikv6l = { + "asset": Anonymize; + "target": Anonymize; +}; +export type Idu2tro9aukpp8 = { + "asset": Anonymize; + "owner": Anonymize; +}; +export type Iarqpt33435e7r = { + "asset": Anonymize; + "locker": Anonymize; +}; +export type Iakevv83i18n4r = { + "dest": XcmVersionedLocation; + "beneficiary": XcmVersionedLocation; + "assets": XcmVersionedAssets; + "fee_asset_item": number; +}; +export type If2ssl12kcglhg = { + "message": XcmVersionedXcm; + "max_weight": Anonymize; +}; +export type Ic76kfh5ebqkpl = { + "maybe_xcm_version"?: Anonymize; +}; +export type Icrujen33bbibf = { + "location": XcmVersionedLocation; +}; +export type I5gi8h3e5lkbeq = { + "dest": XcmVersionedLocation; + "beneficiary": XcmVersionedLocation; + "assets": XcmVersionedAssets; + "fee_asset_item": number; + "weight_limit": XcmV3WeightLimit; +}; +export type Ibgm4rnf22lal1 = { + "suspended": boolean; +}; +export type I8mmaab8je28oo = { + "assets": XcmVersionedAssets; + "beneficiary": XcmVersionedLocation; +}; +export type I6r0pr82pbiftt = { + "dest": XcmVersionedLocation; + "assets": XcmVersionedAssets; + "assets_transfer_type": Anonymize; + "remote_fees_id": XcmVersionedAssetId; + "fees_transfer_type": Anonymize; + "custom_xcm_on_dest": XcmVersionedXcm; + "weight_limit": XcmV3WeightLimit; +}; +export type Ifkg2rgjl54s88 = AnonymousEnum<{ + "Teleport": undefined; + "LocalReserve": undefined; + "DestinationReserve": undefined; + "RemoteReserve": XcmVersionedLocation; +}>; +export type I6epb28bkd5aqn = AnonymousEnum<{ + /** + *Notification about congested bridge queue. + */ + "report_bridge_status": Anonymize; +}>; +export type Idlampfle3vh6q = { + "bridge_id": FixedSizeBinary<32>; + "is_congested": boolean; +}; +export type Ic2uoe7jdksosp = AnonymousEnum<{ + /** + *Remove a page which has no more messages remaining to be processed or is stale. + */ + "reap_page": Anonymize; + /** + *Execute an overweight message. + * + *Temporary processing errors will be propagated whereas permanent errors are treated + *as success condition. + * + *- `origin`: Must be `Signed`. + *- `message_origin`: The origin from which the message to be executed arrived. + *- `page`: The page in the queue in which the message to be executed is sitting. + *- `index`: The index into the queue of the message to be executed. + *- `weight_limit`: The maximum amount of weight allowed to be consumed in the execution + * of the message. + * + *Benchmark complexity considerations: O(index + weight_limit). + */ + "execute_overweight": Anonymize; +}>; +export type I40pqum1mu8qg3 = { + "message_origin": Anonymize; + "page_index": number; +}; +export type I1r4c2ghbtvjuc = { + "message_origin": Anonymize; + "page": number; + "index": number; + "weight_limit": Anonymize; +}; +export type I8ikgojd2kp4nr = AnonymousEnum<{ + /** + *Send a batch of dispatch calls. + * + *May be called from any origin except `None`. + * + *- `calls`: The calls to be dispatched from the same origin. The number of call must not + * exceed the constant: `batched_calls_limit` (available in constant metadata). + * + *If origin is root then the calls are dispatched without checking origin filter. (This + *includes bypassing `frame_system::Config::BaseCallFilter`). + * + *## Complexity + *- O(C) where C is the number of calls to be batched. + * + *This will return `Ok` in all circumstances. To determine the success of the batch, an + *event is deposited. If a call failed and the batch was interrupted, then the + *`BatchInterrupted` event is deposited, along with the number of successful calls made + *and the error of the failed call. If all were successful, then the `BatchCompleted` + *event is deposited. + */ + "batch": Anonymize; + /** + *Send a call through an indexed pseudonym of the sender. + * + *Filter from origin are passed along. The call will be dispatched with an origin which + *use the same filter as the origin of this call. + * + *NOTE: If you need to ensure that any account-based filtering is not honored (i.e. + *because you expect `proxy` to have been used prior in the call stack and you do not want + *the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1` + *in the Multisig pallet instead. + * + *NOTE: Prior to version *12, this was called `as_limited_sub`. + * + *The dispatch origin for this call must be _Signed_. + */ + "as_derivative": Anonymize; + /** + *Send a batch of dispatch calls and atomically execute them. + *The whole transaction will rollback and fail if any of the calls failed. + * + *May be called from any origin except `None`. + * + *- `calls`: The calls to be dispatched from the same origin. The number of call must not + * exceed the constant: `batched_calls_limit` (available in constant metadata). + * + *If origin is root then the calls are dispatched without checking origin filter. (This + *includes bypassing `frame_system::Config::BaseCallFilter`). + * + *## Complexity + *- O(C) where C is the number of calls to be batched. + */ + "batch_all": Anonymize; + /** + *Dispatches a function call with a provided origin. + * + *The dispatch origin for this call must be _Root_. + * + *## Complexity + *- O(1). + */ + "dispatch_as": Anonymize; + /** + *Send a batch of dispatch calls. + *Unlike `batch`, it allows errors and won't interrupt. + * + *May be called from any origin except `None`. + * + *- `calls`: The calls to be dispatched from the same origin. The number of call must not + * exceed the constant: `batched_calls_limit` (available in constant metadata). + * + *If origin is root then the calls are dispatch without checking origin filter. (This + *includes bypassing `frame_system::Config::BaseCallFilter`). + * + *## Complexity + *- O(C) where C is the number of calls to be batched. + */ + "force_batch": Anonymize; + /** + *Dispatch a function call with a specified weight. + * + *This function does not check the weight of the call, and instead allows the + *Root origin to specify the weight of the call. + * + *The dispatch origin for this call must be _Root_. + */ + "with_weight": Anonymize; +}>; +export type Ia6kc29epld8oe = { + "calls": Anonymize; +}; +export type Ifhubbh45t5b6a = Array; +export type Icjjfgkss9ab50 = { + "index": number; + "call": TxCallData; +}; +export type Ifabdf8qm932q0 = { + "as_origin": Anonymize; + "call": TxCallData; +}; +export type I48v5riethqckl = AnonymousEnum<{ + "system": DispatchRawOrigin; + "PolkadotXcm": XcmPalletOrigin; + "CumulusXcm": Anonymize; + "Void": undefined; +}>; +export type DispatchRawOrigin = Enum<{ + "Root": undefined; + "Signed": SS58String; + "None": undefined; +}>; +export declare const DispatchRawOrigin: GetEnum; +export type XcmPalletOrigin = Enum<{ + "Xcm": Anonymize; + "Response": Anonymize; +}>; +export declare const XcmPalletOrigin: GetEnum; +export type I3in0d0lb61qi8 = AnonymousEnum<{ + "Relay": undefined; + "SiblingParachain": number; +}>; +export type I4u9de6jls8otm = { + "call": TxCallData; + "weight": Anonymize; +}; +export type I2i3jnq078uco0 = AnonymousEnum<{ + /** + *Immediately dispatch a multi-signature call using a single approval from the caller. + * + *The dispatch origin for this call must be _Signed_. + * + *- `other_signatories`: The accounts (other than the sender) who are part of the + *multi-signature, but do not participate in the approval process. + *- `call`: The call to be executed. + * + *Result is equivalent to the dispatched result. + * + *## Complexity + *O(Z + C) where Z is the length of the call and C its execution weight. + */ + "as_multi_threshold_1": Anonymize; + /** + *Register approval for a dispatch to be made from a deterministic composite account if + *approved by a total of `threshold - 1` of `other_signatories`. + * + *If there are enough, then dispatch the call. + * + *Payment: `DepositBase` will be reserved if this is the first approval, plus + *`threshold` times `DepositFactor`. It is returned once this dispatch happens or + *is cancelled. + * + *The dispatch origin for this call must be _Signed_. + * + *- `threshold`: The total number of approvals for this dispatch before it is executed. + *- `other_signatories`: The accounts (other than the sender) who can approve this + *dispatch. May not be empty. + *- `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is + *not the first approval, then it must be `Some`, with the timepoint (block number and + *transaction index) of the first approval transaction. + *- `call`: The call to be executed. + * + *NOTE: Unless this is the final approval, you will generally want to use + *`approve_as_multi` instead, since it only requires a hash of the call. + * + *Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise + *on success, result is `Ok` and the result from the interior call, if it was executed, + *may be found in the deposited `MultisigExecuted` event. + * + *## Complexity + *- `O(S + Z + Call)`. + *- Up to one balance-reserve or unreserve operation. + *- One passthrough operation, one insert, both `O(S)` where `S` is the number of + * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. + *- One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len. + *- One encode & hash, both of complexity `O(S)`. + *- Up to one binary search and insert (`O(logS + S)`). + *- I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. + *- One event. + *- The weight of the `call`. + *- Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit + * taken for its lifetime of `DepositBase + threshold * DepositFactor`. + */ + "as_multi": Anonymize; + /** + *Register approval for a dispatch to be made from a deterministic composite account if + *approved by a total of `threshold - 1` of `other_signatories`. + * + *Payment: `DepositBase` will be reserved if this is the first approval, plus + *`threshold` times `DepositFactor`. It is returned once this dispatch happens or + *is cancelled. + * + *The dispatch origin for this call must be _Signed_. + * + *- `threshold`: The total number of approvals for this dispatch before it is executed. + *- `other_signatories`: The accounts (other than the sender) who can approve this + *dispatch. May not be empty. + *- `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is + *not the first approval, then it must be `Some`, with the timepoint (block number and + *transaction index) of the first approval transaction. + *- `call_hash`: The hash of the call to be executed. + * + *NOTE: If this is the final approval, you will want to use `as_multi` instead. + * + *## Complexity + *- `O(S)`. + *- Up to one balance-reserve or unreserve operation. + *- One passthrough operation, one insert, both `O(S)` where `S` is the number of + * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. + *- One encode & hash, both of complexity `O(S)`. + *- Up to one binary search and insert (`O(logS + S)`). + *- I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. + *- One event. + *- Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit + * taken for its lifetime of `DepositBase + threshold * DepositFactor`. + */ + "approve_as_multi": Anonymize; + /** + *Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously + *for this operation will be unreserved on success. + * + *The dispatch origin for this call must be _Signed_. + * + *- `threshold`: The total number of approvals for this dispatch before it is executed. + *- `other_signatories`: The accounts (other than the sender) who can approve this + *dispatch. May not be empty. + *- `timepoint`: The timepoint (block number and transaction index) of the first approval + *transaction for this dispatch. + *- `call_hash`: The hash of the call to be executed. + * + *## Complexity + *- `O(S)`. + *- Up to one balance-reserve or unreserve operation. + *- One passthrough operation, one insert, both `O(S)` where `S` is the number of + * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. + *- One encode & hash, both of complexity `O(S)`. + *- One event. + *- I/O: 1 read `O(S)`, one remove. + *- Storage: removes one item. + */ + "cancel_as_multi": Anonymize; +}>; +export type I9rge57146rvbl = { + "other_signatories": Anonymize; + "call": TxCallData; +}; +export type Id5a43kc4r5p31 = { + "threshold": number; + "other_signatories": Anonymize; + "maybe_timepoint"?: Anonymize; + "call": TxCallData; + "max_weight": Anonymize; +}; +export type I95jfd8j5cr5eh = (Anonymize) | undefined; +export type Ideaemvoneh309 = { + "threshold": number; + "other_signatories": Anonymize; + "maybe_timepoint"?: Anonymize; + "call_hash": FixedSizeBinary<32>; + "max_weight": Anonymize; +}; +export type I3d9o9d7epp66v = { + "threshold": number; + "other_signatories": Anonymize; + "timepoint": Anonymize; + "call_hash": FixedSizeBinary<32>; +}; +export type I6qfut29tv8are = AnonymousEnum<{ + /** + *Dispatch the given `call` from an account that the sender is authorised for through + *`add_proxy`. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `real`: The account that the proxy will make a call on behalf of. + *- `force_proxy_type`: Specify the exact proxy type to be used and checked for this call. + *- `call`: The call to be made by the `real` account. + */ + "proxy": Anonymize; + /** + *Register a proxy account for the sender that is able to make calls on its behalf. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `proxy`: The account that the `caller` would like to make a proxy. + *- `proxy_type`: The permissions allowed for this proxy account. + *- `delay`: The announcement period required of the initial proxy. Will generally be + *zero. + */ + "add_proxy": Anonymize; + /** + *Unregister a proxy account for the sender. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `proxy`: The account that the `caller` would like to remove as a proxy. + *- `proxy_type`: The permissions currently enabled for the removed proxy account. + */ + "remove_proxy": Anonymize; + /** + *Unregister all proxy accounts for the sender. + * + *The dispatch origin for this call must be _Signed_. + * + *WARNING: This may be called on accounts created by `pure`, however if done, then + *the unreserved fees will be inaccessible. **All access to this account will be lost.** + */ + "remove_proxies": undefined; + /** + *Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and + *initialize it with a proxy of `proxy_type` for `origin` sender. + * + *Requires a `Signed` origin. + * + *- `proxy_type`: The type of the proxy that the sender will be registered as over the + *new account. This will almost always be the most permissive `ProxyType` possible to + *allow for maximum flexibility. + *- `index`: A disambiguation index, in case this is called multiple times in the same + *transaction (e.g. with `utility::batch`). Unless you're using `batch` you probably just + *want to use `0`. + *- `delay`: The announcement period required of the initial proxy. Will generally be + *zero. + * + *Fails with `Duplicate` if this has already been called in this transaction, from the + *same sender, with the same parameters. + * + *Fails if there are insufficient funds to pay for deposit. + */ + "create_pure": Anonymize; + /** + *Removes a previously spawned pure proxy. + * + *WARNING: **All access to this account will be lost.** Any funds held in it will be + *inaccessible. + * + *Requires a `Signed` origin, and the sender account must have been created by a call to + *`pure` with corresponding parameters. + * + *- `spawner`: The account that originally called `pure` to create this account. + *- `index`: The disambiguation index originally passed to `pure`. Probably `0`. + *- `proxy_type`: The proxy type originally passed to `pure`. + *- `height`: The height of the chain when the call to `pure` was processed. + *- `ext_index`: The extrinsic index in which the call to `pure` was processed. + * + *Fails with `NoPermission` in case the caller is not a previously created pure + *account whose `pure` call has corresponding parameters. + */ + "kill_pure": Anonymize; + /** + *Publish the hash of a proxy-call that will be made in the future. + * + *This must be called some number of blocks before the corresponding `proxy` is attempted + *if the delay associated with the proxy relationship is greater than zero. + * + *No more than `MaxPending` announcements may be made at any one time. + * + *This will take a deposit of `AnnouncementDepositFactor` as well as + *`AnnouncementDepositBase` if there are no other pending announcements. + * + *The dispatch origin for this call must be _Signed_ and a proxy of `real`. + * + *Parameters: + *- `real`: The account that the proxy will make a call on behalf of. + *- `call_hash`: The hash of the call to be made by the `real` account. + */ + "announce": Anonymize; + /** + *Remove a given announcement. + * + *May be called by a proxy account to remove a call they previously announced and return + *the deposit. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `real`: The account that the proxy will make a call on behalf of. + *- `call_hash`: The hash of the call to be made by the `real` account. + */ + "remove_announcement": Anonymize; + /** + *Remove the given announcement of a delegate. + * + *May be called by a target (proxied) account to remove a call that one of their delegates + *(`delegate`) has announced they want to execute. The deposit is returned. + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `delegate`: The account that previously announced the call. + *- `call_hash`: The hash of the call to be made. + */ + "reject_announcement": Anonymize; + /** + *Dispatch the given `call` from an account that the sender is authorized for through + *`add_proxy`. + * + *Removes any corresponding announcement(s). + * + *The dispatch origin for this call must be _Signed_. + * + *Parameters: + *- `real`: The account that the proxy will make a call on behalf of. + *- `force_proxy_type`: Specify the exact proxy type to be used and checked for this call. + *- `call`: The call to be made by the `real` account. + */ + "proxy_announced": Anonymize; +}>; +export type I3mbtn2eb315ar = { + "real": MultiAddress; + "force_proxy_type"?: Anonymize; + "call": TxCallData; +}; +export type I7rk1n3vg3et43 = (Anonymize) | undefined; +export type Iovrcu9bfelfq = { + "delegate": MultiAddress; + "proxy_type": Anonymize; + "delay": number; +}; +export type Iefr8jgtgfk8um = { + "proxy_type": Anonymize; + "delay": number; + "index": number; +}; +export type I3j05hul54uj7q = { + "spawner": MultiAddress; + "proxy_type": Anonymize; + "index": number; + "height": number; + "ext_index": number; +}; +export type I2eb501t8s6hsq = { + "real": MultiAddress; + "call_hash": FixedSizeBinary<32>; +}; +export type Ianmuoljk2sk1u = { + "delegate": MultiAddress; + "call_hash": FixedSizeBinary<32>; +}; +export type Iem4jetr2c8nf8 = { + "delegate": MultiAddress; + "real": MultiAddress; + "force_proxy_type"?: Anonymize; + "call": TxCallData; +}; +export type Ideusanoto4b1j = AnonymousEnum<{ + /** + *Issue a new class of fungible assets from a public origin. + * + *This new asset class has no assets initially and its owner is the origin. + * + *The origin must conform to the configured `CreateOrigin` and have sufficient funds free. + * + *Funds of sender are reserved by `AssetDeposit`. + * + *Parameters: + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `admin`: The admin of this class of assets. The admin is the initial address of each + *member of the asset class's admin team. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `Created` event when successful. + * + *Weight: `O(1)` + */ + "create": Anonymize; + /** + *Issue a new class of fungible assets from a privileged origin. + * + *This new asset class has no assets initially. + * + *The origin must conform to `ForceOrigin`. + * + *Unlike `create`, no funds are reserved. + * + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `owner`: The owner of this class of assets. The owner has full superuser permissions + *over this asset, but may later change and configure the permissions using + *`transfer_ownership` and `set_team`. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `ForceCreated` event when successful. + * + *Weight: `O(1)` + */ + "force_create": Anonymize; + /** + *Start the process of destroying a fungible asset class. + * + *`start_destroy` is the first in a series of extrinsics that should be called, to allow + *destruction of an asset class. + * + *The origin must conform to `ForceOrigin` or must be `Signed` by the asset's `owner`. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *The asset class must be frozen before calling `start_destroy`. + */ + "start_destroy": Anonymize; + /** + *Destroy all accounts associated with a given asset. + * + *`destroy_accounts` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all accounts. It will destroy `RemoveItemsLimit` accounts at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedAccounts` event. + */ + "destroy_accounts": Anonymize; + /** + *Destroy all approvals associated with a given asset up to the max (T::RemoveItemsLimit). + * + *`destroy_approvals` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all approvals. It will destroy `RemoveItemsLimit` approvals at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedApprovals` event. + */ + "destroy_approvals": Anonymize; + /** + *Complete destroying asset and unreserve currency. + * + *`finish_destroy` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. All accounts or approvals should be destroyed before + *hand. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each successful call emits the `Event::Destroyed` event. + */ + "finish_destroy": Anonymize; + /** + *Mint assets of a particular class. + * + *The origin must be Signed and the sender must be the Issuer of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount minted. + *- `beneficiary`: The account to be credited with the minted assets. + *- `amount`: The amount of the asset to be minted. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + *Modes: Pre-existing balance of `beneficiary`; Account pre-existence of `beneficiary`. + */ + "mint": Anonymize; + /** + *Reduce the balance of `who` by as much as possible up to `amount` assets of `id`. + * + *Origin must be Signed and the sender should be the Manager of the asset `id`. + * + *Bails with `NoAccount` if the `who` is already dead. + * + *- `id`: The identifier of the asset to have some amount burned. + *- `who`: The account to be debited from. + *- `amount`: The maximum amount by which `who`'s balance should be reduced. + * + *Emits `Burned` with the actual amount burned. If this takes the balance to below the + *minimum for the asset, then the amount burned is increased to take it to zero. + * + *Weight: `O(1)` + *Modes: Post-existence of `who`; Pre & post Zombie-status of `who`. + */ + "burn": Anonymize; + /** + *Move some assets from the sender account to another. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + "transfer": Anonymize; + /** + *Move some assets from the sender account to another, keeping the sender account alive. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + "transfer_keep_alive": Anonymize; + /** + *Move some assets from one account to another. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `source`: The account to be debited. + *- `dest`: The account to be credited. + *- `amount`: The amount by which the `source`'s balance of assets should be reduced and + *`dest`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the `source` balance above zero but + *below the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `dest`; Post-existence of `source`; Account pre-existence of + *`dest`. + */ + "force_transfer": Anonymize; + /** + *Disallow further unprivileged transfers of an asset `id` from an account `who`. `who` + *must already exist as an entry in `Account`s of the asset. If you want to freeze an + *account that does not have an entry, use `touch_other` first. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + "freeze": Anonymize; + /** + *Allow unprivileged transfers to and from an account again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be unfrozen. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + "thaw": Anonymize; + /** + *Disallow further unprivileged transfers for the asset class. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + "freeze_asset": Anonymize; + /** + *Allow unprivileged transfers for the asset again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be thawed. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + "thaw_asset": Anonymize; + /** + *Change the Owner of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + "transfer_ownership": Anonymize; + /** + *Change the Issuer, Admin and Freezer of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + * + *Emits `TeamChanged`. + * + *Weight: `O(1)` + */ + "set_team": Anonymize; + /** + *Set the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Funds of sender are reserved according to the formula: + *`MetadataDepositBase + MetadataDepositPerByte * (name.len + symbol.len)` taking into + *account any already reserved funds. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(1)` + */ + "set_metadata": Anonymize; + /** + *Clear the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Any deposit is freed for the asset owner. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + "clear_metadata": Anonymize; + /** + *Force the metadata for an asset to some value. + * + *Origin must be ForceOrigin. + * + *Any deposit is left alone. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(N + S)` where N and S are the length of the name and symbol respectively. + */ + "force_set_metadata": Anonymize; + /** + *Clear the metadata for an asset. + * + *Origin must be ForceOrigin. + * + *Any deposit is returned. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + "force_clear_metadata": Anonymize; + /** + *Alter the attributes of a given asset. + * + *Origin must be `ForceOrigin`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + *- `is_sufficient`: Whether a non-zero balance of this asset is deposit of sufficient + *value to account for the state bloat associated with its balance storage. If set to + *`true`, then non-zero balances may be stored without a `consumer` reference (and thus + *an ED in the Balances pallet or whatever else is used to control user-account state + *growth). + *- `is_frozen`: Whether this asset class is frozen except for permissioned/admin + *instructions. + * + *Emits `AssetStatusChanged` with the identity of the asset. + * + *Weight: `O(1)` + */ + "force_asset_status": Anonymize; + /** + *Approve an amount of asset for transfer by a delegated third-party account. + * + *Origin must be Signed. + * + *Ensures that `ApprovalDeposit` worth of `Currency` is reserved from signing account + *for the purpose of holding the approval. If some non-zero amount of assets is already + *approved from signing account to `delegate`, then it is topped up or unreserved to + *meet the right value. + * + *NOTE: The signing account does not need to own `amount` of assets at the point of + *making this call. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account to delegate permission to transfer asset. + *- `amount`: The amount of asset that may be transferred by `delegate`. If there is + *already an approval in place, then this acts additively. + * + *Emits `ApprovedTransfer` on success. + * + *Weight: `O(1)` + */ + "approve_transfer": Anonymize; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be Signed and there must be an approval in place between signer and + *`delegate`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + "cancel_approval": Anonymize; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be either ForceOrigin or Signed origin with the signer being the Admin + *account of the asset `id`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + "force_cancel_approval": Anonymize; + /** + *Transfer some asset balance from a previously delegated account to some third-party + *account. + * + *Origin must be Signed and there must be an approval in place by the `owner` to the + *signer. + * + *If the entire amount approved for transfer is transferred, then any deposit previously + *reserved by `approve_transfer` is unreserved. + * + *- `id`: The identifier of the asset. + *- `owner`: The account which previously approved for a transfer of at least `amount` and + *from which the asset balance will be withdrawn. + *- `destination`: The account to which the asset balance of `amount` will be transferred. + *- `amount`: The amount of assets to transfer. + * + *Emits `TransferredApproved` on success. + * + *Weight: `O(1)` + */ + "transfer_approved": Anonymize; + /** + *Create an asset account for non-provider assets. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed; the signer account must have sufficient funds for a deposit + * to be taken. + *- `id`: The identifier of the asset for the account to be created. + * + *Emits `Touched` event when successful. + */ + "touch": Anonymize; + /** + *Return the deposit (if any) of an asset account or a consumer reference (if any) of an + *account. + * + *The origin must be Signed. + * + *- `id`: The identifier of the asset for which the caller would like the deposit + * refunded. + *- `allow_burn`: If `true` then assets may be destroyed in order to complete the refund. + * + *Emits `Refunded` event when successful. + */ + "refund": Anonymize; + /** + *Sets the minimum balance of an asset. + * + *Only works if there aren't any accounts that are holding the asset or if + *the new value of `min_balance` is less than the old one. + * + *Origin must be Signed and the sender has to be the Owner of the + *asset `id`. + * + *- `id`: The identifier of the asset. + *- `min_balance`: The new value of `min_balance`. + * + *Emits `AssetMinBalanceChanged` event when successful. + */ + "set_min_balance": Anonymize; + /** + *Create an asset account for `who`. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed by `Freezer` or `Admin` of the asset `id`; the signer account + * must have sufficient funds for a deposit to be taken. + *- `id`: The identifier of the asset for the account to be created. + *- `who`: The account to be created. + * + *Emits `Touched` event when successful. + */ + "touch_other": Anonymize; + /** + *Return the deposit (if any) of a target asset account. Useful if you are the depositor. + * + *The origin must be Signed and either the account owner, depositor, or asset `Admin`. In + *order to burn a non-zero balance of the asset, the caller must be the account and should + *use `refund`. + * + *- `id`: The identifier of the asset for the account holding a deposit. + *- `who`: The account to refund. + * + *Emits `Refunded` event when successful. + */ + "refund_other": Anonymize; + /** + *Disallow further unprivileged transfers of an asset `id` to and from an account `who`. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the account's asset. + *- `who`: The account to be unblocked. + * + *Emits `Blocked`. + * + *Weight: `O(1)` + */ + "block": Anonymize; +}>; +export type Ic357tcepuvo5c = { + "id": number; + "admin": MultiAddress; + "min_balance": bigint; +}; +export type I2rnoam876ruhj = { + "id": number; + "owner": MultiAddress; + "is_sufficient": boolean; + "min_balance": bigint; +}; +export type Ic5b47dj4coa3r = { + "id": number; +}; +export type Ib3qnc19gu633c = { + "id": number; + "beneficiary": MultiAddress; + "amount": bigint; +}; +export type Ifira6u9hi7cu1 = { + "id": number; + "who": MultiAddress; + "amount": bigint; +}; +export type I72tqocvdoqfff = { + "id": number; + "target": MultiAddress; + "amount": bigint; +}; +export type I2i27f3sfmvc05 = { + "id": number; + "source": MultiAddress; + "dest": MultiAddress; + "amount": bigint; +}; +export type I1nlrtd1epki2d = { + "id": number; + "who": MultiAddress; +}; +export type I3abtumcmempjs = { + "id": number; + "owner": MultiAddress; +}; +export type Id81m8flopt8ha = { + "id": number; + "issuer": MultiAddress; + "admin": MultiAddress; + "freezer": MultiAddress; +}; +export type I8hff7chabggkd = { + "id": number; + "name": Binary; + "symbol": Binary; + "decimals": number; +}; +export type I49i39mtj1ivbs = { + "id": number; + "name": Binary; + "symbol": Binary; + "decimals": number; + "is_frozen": boolean; +}; +export type Ifkr2kcak2vto1 = { + "id": number; + "owner": MultiAddress; + "issuer": MultiAddress; + "admin": MultiAddress; + "freezer": MultiAddress; + "min_balance": bigint; + "is_sufficient": boolean; + "is_frozen": boolean; +}; +export type I1ju6r8q0cs9jt = { + "id": number; + "delegate": MultiAddress; + "amount": bigint; +}; +export type I4kpeq6j7cd5bu = { + "id": number; + "delegate": MultiAddress; +}; +export type I5na1ka76k6811 = { + "id": number; + "owner": MultiAddress; + "delegate": MultiAddress; +}; +export type I59mhdb9omdqfa = { + "id": number; + "owner": MultiAddress; + "destination": MultiAddress; + "amount": bigint; +}; +export type I9vl5kpk0fpakt = { + "id": number; + "allow_burn": boolean; +}; +export type I717jt61hu19b4 = { + "id": number; + "min_balance": bigint; +}; +export type Icu49uv7rfej74 = AnonymousEnum<{ + /** + *Issue a new collection of non-fungible items from a public origin. + * + *This new collection has no items initially and its owner is the origin. + * + *The origin must conform to the configured `CreateOrigin` and have sufficient funds free. + * + *`ItemDeposit` funds of sender are reserved. + * + *Parameters: + *- `collection`: The identifier of the new collection. This must not be currently in use. + *- `admin`: The admin of this collection. The admin is the initial address of each + *member of the collection's admin team. + * + *Emits `Created` event when successful. + * + *Weight: `O(1)` + */ + "create": Anonymize; + /** + *Issue a new collection of non-fungible items from a privileged origin. + * + *This new collection has no items initially. + * + *The origin must conform to `ForceOrigin`. + * + *Unlike `create`, no funds are reserved. + * + *- `collection`: The identifier of the new item. This must not be currently in use. + *- `owner`: The owner of this collection of items. The owner has full superuser + * permissions + *over this item, but may later change and configure the permissions using + *`transfer_ownership` and `set_team`. + * + *Emits `ForceCreated` event when successful. + * + *Weight: `O(1)` + */ + "force_create": Anonymize; + /** + *Destroy a collection of fungible items. + * + *The origin must conform to `ForceOrigin` or must be `Signed` and the sender must be the + *owner of the `collection`. + * + *- `collection`: The identifier of the collection to be destroyed. + *- `witness`: Information on the items minted in the collection. This must be + *correct. + * + *Emits `Destroyed` event when successful. + * + *Weight: `O(n + m)` where: + *- `n = witness.items` + *- `m = witness.item_metadatas` + *- `a = witness.attributes` + */ + "destroy": Anonymize; + /** + *Mint an item of a particular collection. + * + *The origin must be Signed and the sender must be the Issuer of the `collection`. + * + *- `collection`: The collection of the item to be minted. + *- `item`: The item value of the item to be minted. + *- `beneficiary`: The initial owner of the minted item. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + */ + "mint": Anonymize; + /** + *Destroy a single item. + * + *Origin must be Signed and the signing account must be either: + *- the Admin of the `collection`; + *- the Owner of the `item`; + * + *- `collection`: The collection of the item to be burned. + *- `item`: The item of the item to be burned. + *- `check_owner`: If `Some` then the operation will fail with `WrongOwner` unless the + * item is owned by this value. + * + *Emits `Burned` with the actual amount burned. + * + *Weight: `O(1)` + *Modes: `check_owner.is_some()`. + */ + "burn": Anonymize; + /** + *Move an item from the sender account to another. + * + *This resets the approved account of the item. + * + *Origin must be Signed and the signing account must be either: + *- the Admin of the `collection`; + *- the Owner of the `item`; + *- the approved delegate for the `item` (in this case, the approval is reset). + * + *Arguments: + *- `collection`: The collection of the item to be transferred. + *- `item`: The item of the item to be transferred. + *- `dest`: The account to receive ownership of the item. + * + *Emits `Transferred`. + * + *Weight: `O(1)` + */ + "transfer": Anonymize; + /** + *Reevaluate the deposits on some items. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection to be frozen. + *- `items`: The items of the collection whose deposits will be reevaluated. + * + *NOTE: This exists as a best-effort function. Any items which are unknown or + *in the case that the owner account does not have reservable funds to pay for a + *deposit increase are ignored. Generally the owner isn't going to call this on items + *whose existing deposit is less than the refreshed deposit as it would only cost them, + *so it's of little consequence. + * + *It will still return an error in the case that the collection is unknown of the signer + *is not permitted to call it. + * + *Weight: `O(items.len())` + */ + "redeposit": Anonymize; + /** + *Disallow further unprivileged transfer of an item. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection of the item to be frozen. + *- `item`: The item of the item to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + "freeze": Anonymize; + /** + *Re-allow unprivileged transfer of an item. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection of the item to be thawed. + *- `item`: The item of the item to be thawed. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + "thaw": Anonymize; + /** + *Disallow further unprivileged transfers for a whole collection. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection to be frozen. + * + *Emits `CollectionFrozen`. + * + *Weight: `O(1)` + */ + "freeze_collection": Anonymize; + /** + *Re-allow unprivileged transfers for a whole collection. + * + *Origin must be Signed and the sender should be the Admin of the `collection`. + * + *- `collection`: The collection to be thawed. + * + *Emits `CollectionThawed`. + * + *Weight: `O(1)` + */ + "thaw_collection": Anonymize; + /** + *Change the Owner of a collection. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection whose owner should be changed. + *- `owner`: The new Owner of this collection. They must have called + * `set_accept_ownership` with `collection` in order for this operation to succeed. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + "transfer_ownership": Anonymize; + /** + *Change the Issuer, Admin and Freezer of a collection. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection whose team should be changed. + *- `issuer`: The new Issuer of this collection. + *- `admin`: The new Admin of this collection. + *- `freezer`: The new Freezer of this collection. + * + *Emits `TeamChanged`. + * + *Weight: `O(1)` + */ + "set_team": Anonymize; + /** + *Approve an item to be transferred by a delegated third-party account. + * + *The origin must conform to `ForceOrigin` or must be `Signed` and the sender must be + *either the owner of the `item` or the admin of the collection. + * + *- `collection`: The collection of the item to be approved for delegated transfer. + *- `item`: The item of the item to be approved for delegated transfer. + *- `delegate`: The account to delegate permission to transfer the item. + * + *Important NOTE: The `approved` account gets reset after each transfer. + * + *Emits `ApprovedTransfer` on success. + * + *Weight: `O(1)` + */ + "approve_transfer": Anonymize; + /** + *Cancel the prior approval for the transfer of an item by a delegate. + * + *Origin must be either: + *- the `Force` origin; + *- `Signed` with the signer being the Admin of the `collection`; + *- `Signed` with the signer being the Owner of the `item`; + * + *Arguments: + *- `collection`: The collection of the item of whose approval will be cancelled. + *- `item`: The item of the item of whose approval will be cancelled. + *- `maybe_check_delegate`: If `Some` will ensure that the given account is the one to + * which permission of transfer is delegated. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + "cancel_approval": Anonymize; + /** + *Alter the attributes of a given item. + * + *Origin must be `ForceOrigin`. + * + *- `collection`: The identifier of the item. + *- `owner`: The new Owner of this item. + *- `issuer`: The new Issuer of this item. + *- `admin`: The new Admin of this item. + *- `freezer`: The new Freezer of this item. + *- `free_holding`: Whether a deposit is taken for holding an item of this collection. + *- `is_frozen`: Whether this collection is frozen except for permissioned/admin + *instructions. + * + *Emits `ItemStatusChanged` with the identity of the item. + * + *Weight: `O(1)` + */ + "force_item_status": Anonymize; + /** + *Set an attribute for a collection or item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`collection`. + * + *If the origin is Signed, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * (key.len + value.len)` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `maybe_item`: The identifier of the item whose metadata to set. + *- `key`: The key of the attribute. + *- `value`: The value to which to set the attribute. + * + *Emits `AttributeSet`. + * + *Weight: `O(1)` + */ + "set_attribute": Anonymize; + /** + *Clear an attribute for a collection or item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`collection`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose item's metadata to clear. + *- `maybe_item`: The identifier of the item whose metadata to clear. + *- `key`: The key of the attribute. + * + *Emits `AttributeCleared`. + * + *Weight: `O(1)` + */ + "clear_attribute": Anonymize; + /** + *Set the metadata for an item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`collection`. + * + *If the origin is Signed, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * data.len` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `item`: The identifier of the item whose metadata to set. + *- `data`: The general information of this item. Limited in length by `StringLimit`. + *- `is_frozen`: Whether the metadata should be frozen against further changes. + * + *Emits `MetadataSet`. + * + *Weight: `O(1)` + */ + "set_metadata": Anonymize; + /** + *Clear the metadata for an item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`item`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose item's metadata to clear. + *- `item`: The identifier of the item whose metadata to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + "clear_metadata": Anonymize; + /** + *Set the metadata for a collection. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Owner of + *the `collection`. + * + *If the origin is `Signed`, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * data.len` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the item whose metadata to update. + *- `data`: The general information of this item. Limited in length by `StringLimit`. + *- `is_frozen`: Whether the metadata should be frozen against further changes. + * + *Emits `CollectionMetadataSet`. + * + *Weight: `O(1)` + */ + "set_collection_metadata": Anonymize; + /** + *Clear the metadata for a collection. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Owner of + *the `collection`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose metadata to clear. + * + *Emits `CollectionMetadataCleared`. + * + *Weight: `O(1)` + */ + "clear_collection_metadata": Anonymize; + /** + *Set (or reset) the acceptance of ownership for a particular account. + * + *Origin must be `Signed` and if `maybe_collection` is `Some`, then the signer must have a + *provider reference. + * + *- `maybe_collection`: The identifier of the collection whose ownership the signer is + * willing to accept, or if `None`, an indication that the signer is willing to accept no + * ownership transferal. + * + *Emits `OwnershipAcceptanceChanged`. + */ + "set_accept_ownership": Anonymize; + /** + *Set the maximum amount of items a collection could have. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Owner of + *the `collection`. + * + *Note: This function can only succeed once per collection. + * + *- `collection`: The identifier of the collection to change. + *- `max_supply`: The maximum amount of items a collection could have. + * + *Emits `CollectionMaxSupplySet` event when successful. + */ + "set_collection_max_supply": Anonymize; + /** + *Set (or reset) the price for an item. + * + *Origin must be Signed and must be the owner of the asset `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item to set the price for. + *- `price`: The price for the item. Pass `None`, to reset the price. + *- `buyer`: Restricts the buy operation to a specific account. + * + *Emits `ItemPriceSet` on success if the price is not `None`. + *Emits `ItemPriceRemoved` on success if the price is `None`. + */ + "set_price": Anonymize; + /** + *Allows to buy an item if it's up for sale. + * + *Origin must be Signed and must not be the owner of the `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item the sender wants to buy. + *- `bid_price`: The price the sender is willing to pay. + * + *Emits `ItemBought` on success. + */ + "buy_item": Anonymize; +}>; +export type If66ivi02f7256 = { + "collection": number; + "admin": MultiAddress; +}; +export type I223jtcatlfkrc = { + "collection": number; + "owner": MultiAddress; + "free_holding": boolean; +}; +export type I223jg78mng8hq = { + "collection": number; + "witness": Anonymize; +}; +export type I59th026dnaruk = { + "items": number; + "item_metadatas": number; + "attributes": number; +}; +export type I4iiuiftkpq3fd = { + "collection": number; + "item": number; + "owner": MultiAddress; +}; +export type Ibra6533h92c0a = { + "collection": number; + "item": number; + "check_owner"?: Anonymize; +}; +export type Ia0jlc0rcbskuk = (MultiAddress) | undefined; +export type Ibgvkh96s68a66 = { + "collection": number; + "item": number; + "dest": MultiAddress; +}; +export type If9vko7pv0231m = { + "collection": number; + "items": Anonymize; +}; +export type I736lv5q9m5bot = { + "collection": number; + "new_owner": MultiAddress; +}; +export type I1ap9tlenhr44l = { + "collection": number; + "issuer": MultiAddress; + "admin": MultiAddress; + "freezer": MultiAddress; +}; +export type Ib92t90p616grb = { + "collection": number; + "item": number; + "delegate": MultiAddress; +}; +export type Ieipuujd6879do = { + "collection": number; + "item": number; + "maybe_check_delegate"?: Anonymize; +}; +export type Ie56eq9sg1rsoc = { + "collection": number; + "owner": MultiAddress; + "issuer": MultiAddress; + "admin": MultiAddress; + "freezer": MultiAddress; + "free_holding": boolean; + "is_frozen": boolean; +}; +export type Ibqooroq6rr5kr = { + "maybe_collection"?: Anonymize; +}; +export type Ia9cd4jqb5eecb = { + "collection": number; + "item": number; + "price"?: Anonymize; + "whitelisted_buyer"?: Anonymize; +}; +export type I19jiel1ftbcce = { + "collection": number; + "item": number; + "bid_price": bigint; +}; +export type I1k4il7i5elhc7 = AnonymousEnum<{ + /** + *Issue a new collection of non-fungible items from a public origin. + * + *This new collection has no items initially and its owner is the origin. + * + *The origin must be Signed and the sender must have sufficient funds free. + * + *`CollectionDeposit` funds of sender are reserved. + * + *Parameters: + *- `admin`: The admin of this collection. The admin is the initial address of each + *member of the collection's admin team. + * + *Emits `Created` event when successful. + * + *Weight: `O(1)` + */ + "create": Anonymize; + /** + *Issue a new collection of non-fungible items from a privileged origin. + * + *This new collection has no items initially. + * + *The origin must conform to `ForceOrigin`. + * + *Unlike `create`, no funds are reserved. + * + *- `owner`: The owner of this collection of items. The owner has full superuser + * permissions over this item, but may later change and configure the permissions using + * `transfer_ownership` and `set_team`. + * + *Emits `ForceCreated` event when successful. + * + *Weight: `O(1)` + */ + "force_create": Anonymize; + /** + *Destroy a collection of fungible items. + * + *The origin must conform to `ForceOrigin` or must be `Signed` and the sender must be the + *owner of the `collection`. + * + *NOTE: The collection must have 0 items to be destroyed. + * + *- `collection`: The identifier of the collection to be destroyed. + *- `witness`: Information on the items minted in the collection. This must be + *correct. + * + *Emits `Destroyed` event when successful. + * + *Weight: `O(m + c + a)` where: + *- `m = witness.item_metadatas` + *- `c = witness.item_configs` + *- `a = witness.attributes` + */ + "destroy": Anonymize; + /** + *Mint an item of a particular collection. + * + *The origin must be Signed and the sender must comply with the `mint_settings` rules. + * + *- `collection`: The collection of the item to be minted. + *- `item`: An identifier of the new item. + *- `mint_to`: Account into which the item will be minted. + *- `witness_data`: When the mint type is `HolderOf(collection_id)`, then the owned + * item_id from that collection needs to be provided within the witness data object. If + * the mint price is set, then it should be additionally confirmed in the `witness_data`. + * + *Note: the deposit will be taken from the `origin` and not the `owner` of the `item`. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + */ + "mint": Anonymize; + /** + *Mint an item of a particular collection from a privileged origin. + * + *The origin must conform to `ForceOrigin` or must be `Signed` and the sender must be the + *Issuer of the `collection`. + * + *- `collection`: The collection of the item to be minted. + *- `item`: An identifier of the new item. + *- `mint_to`: Account into which the item will be minted. + *- `item_config`: A config of the new item. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + */ + "force_mint": Anonymize; + /** + *Destroy a single item. + * + *The origin must conform to `ForceOrigin` or must be Signed and the signing account must + *be the owner of the `item`. + * + *- `collection`: The collection of the item to be burned. + *- `item`: The item to be burned. + * + *Emits `Burned`. + * + *Weight: `O(1)` + */ + "burn": Anonymize; + /** + *Move an item from the sender account to another. + * + *Origin must be Signed and the signing account must be either: + *- the Owner of the `item`; + *- the approved delegate for the `item` (in this case, the approval is reset). + * + *Arguments: + *- `collection`: The collection of the item to be transferred. + *- `item`: The item to be transferred. + *- `dest`: The account to receive ownership of the item. + * + *Emits `Transferred`. + * + *Weight: `O(1)` + */ + "transfer": Anonymize; + /** + *Re-evaluate the deposits on some items. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection of the items to be reevaluated. + *- `items`: The items of the collection whose deposits will be reevaluated. + * + *NOTE: This exists as a best-effort function. Any items which are unknown or + *in the case that the owner account does not have reservable funds to pay for a + *deposit increase are ignored. Generally the owner isn't going to call this on items + *whose existing deposit is less than the refreshed deposit as it would only cost them, + *so it's of little consequence. + * + *It will still return an error in the case that the collection is unknown or the signer + *is not permitted to call it. + * + *Weight: `O(items.len())` + */ + "redeposit": Anonymize; + /** + *Disallow further unprivileged transfer of an item. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection of the item to be changed. + *- `item`: The item to become non-transferable. + * + *Emits `ItemTransferLocked`. + * + *Weight: `O(1)` + */ + "lock_item_transfer": Anonymize; + /** + *Re-allow unprivileged transfer of an item. + * + *Origin must be Signed and the sender should be the Freezer of the `collection`. + * + *- `collection`: The collection of the item to be changed. + *- `item`: The item to become transferable. + * + *Emits `ItemTransferUnlocked`. + * + *Weight: `O(1)` + */ + "unlock_item_transfer": Anonymize; + /** + *Disallows specified settings for the whole collection. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection to be locked. + *- `lock_settings`: The settings to be locked. + * + *Note: it's possible to only lock(set) the setting, but not to unset it. + * + *Emits `CollectionLocked`. + * + *Weight: `O(1)` + */ + "lock_collection": Anonymize; + /** + *Change the Owner of a collection. + * + *Origin must be Signed and the sender should be the Owner of the `collection`. + * + *- `collection`: The collection whose owner should be changed. + *- `owner`: The new Owner of this collection. They must have called + * `set_accept_ownership` with `collection` in order for this operation to succeed. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + "transfer_ownership": Anonymize; + /** + *Change the Issuer, Admin and Freezer of a collection. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`collection`. + * + *Note: by setting the role to `None` only the `ForceOrigin` will be able to change it + *after to `Some(account)`. + * + *- `collection`: The collection whose team should be changed. + *- `issuer`: The new Issuer of this collection. + *- `admin`: The new Admin of this collection. + *- `freezer`: The new Freezer of this collection. + * + *Emits `TeamChanged`. + * + *Weight: `O(1)` + */ + "set_team": Anonymize; + /** + *Change the Owner of a collection. + * + *Origin must be `ForceOrigin`. + * + *- `collection`: The identifier of the collection. + *- `owner`: The new Owner of this collection. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + "force_collection_owner": Anonymize; + /** + *Change the config of a collection. + * + *Origin must be `ForceOrigin`. + * + *- `collection`: The identifier of the collection. + *- `config`: The new config of this collection. + * + *Emits `CollectionConfigChanged`. + * + *Weight: `O(1)` + */ + "force_collection_config": Anonymize; + /** + *Approve an item to be transferred by a delegated third-party account. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *`item`. + * + *- `collection`: The collection of the item to be approved for delegated transfer. + *- `item`: The item to be approved for delegated transfer. + *- `delegate`: The account to delegate permission to transfer the item. + *- `maybe_deadline`: Optional deadline for the approval. Specified by providing the + * number of blocks after which the approval will expire + * + *Emits `TransferApproved` on success. + * + *Weight: `O(1)` + */ + "approve_transfer": Anonymize; + /** + *Cancel one of the transfer approvals for a specific item. + * + *Origin must be either: + *- the `Force` origin; + *- `Signed` with the signer being the Owner of the `item`; + * + *Arguments: + *- `collection`: The collection of the item of whose approval will be cancelled. + *- `item`: The item of the collection of whose approval will be cancelled. + *- `delegate`: The account that is going to loose their approval. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + "cancel_approval": Anonymize; + /** + *Cancel all the approvals of a specific item. + * + *Origin must be either: + *- the `Force` origin; + *- `Signed` with the signer being the Owner of the `item`; + * + *Arguments: + *- `collection`: The collection of the item of whose approvals will be cleared. + *- `item`: The item of the collection of whose approvals will be cleared. + * + *Emits `AllApprovalsCancelled` on success. + * + *Weight: `O(1)` + */ + "clear_all_transfer_approvals": Anonymize; + /** + *Disallows changing the metadata or attributes of the item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Admin + *of the `collection`. + * + *- `collection`: The collection if the `item`. + *- `item`: An item to be locked. + *- `lock_metadata`: Specifies whether the metadata should be locked. + *- `lock_attributes`: Specifies whether the attributes in the `CollectionOwner` namespace + * should be locked. + * + *Note: `lock_attributes` affects the attributes in the `CollectionOwner` namespace only. + *When the metadata or attributes are locked, it won't be possible the unlock them. + * + *Emits `ItemPropertiesLocked`. + * + *Weight: `O(1)` + */ + "lock_item_properties": Anonymize; + /** + *Set an attribute for a collection or item. + * + *Origin must be Signed and must conform to the namespace ruleset: + *- `CollectionOwner` namespace could be modified by the `collection` Admin only; + *- `ItemOwner` namespace could be modified by the `maybe_item` owner only. `maybe_item` + * should be set in that case; + *- `Account(AccountId)` namespace could be modified only when the `origin` was given a + * permission to do so; + * + *The funds of `origin` are reserved according to the formula: + *`AttributeDepositBase + DepositPerByte * (key.len + value.len)` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `maybe_item`: The identifier of the item whose metadata to set. + *- `namespace`: Attribute's namespace. + *- `key`: The key of the attribute. + *- `value`: The value to which to set the attribute. + * + *Emits `AttributeSet`. + * + *Weight: `O(1)` + */ + "set_attribute": Anonymize; + /** + *Force-set an attribute for a collection or item. + * + *Origin must be `ForceOrigin`. + * + *If the attribute already exists and it was set by another account, the deposit + *will be returned to the previous owner. + * + *- `set_as`: An optional owner of the attribute. + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `maybe_item`: The identifier of the item whose metadata to set. + *- `namespace`: Attribute's namespace. + *- `key`: The key of the attribute. + *- `value`: The value to which to set the attribute. + * + *Emits `AttributeSet`. + * + *Weight: `O(1)` + */ + "force_set_attribute": Anonymize; + /** + *Clear an attribute for a collection or item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Owner of the + *attribute. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose item's metadata to clear. + *- `maybe_item`: The identifier of the item whose metadata to clear. + *- `namespace`: Attribute's namespace. + *- `key`: The key of the attribute. + * + *Emits `AttributeCleared`. + * + *Weight: `O(1)` + */ + "clear_attribute": Anonymize; + /** + *Approve item's attributes to be changed by a delegated third-party account. + * + *Origin must be Signed and must be an owner of the `item`. + * + *- `collection`: A collection of the item. + *- `item`: The item that holds attributes. + *- `delegate`: The account to delegate permission to change attributes of the item. + * + *Emits `ItemAttributesApprovalAdded` on success. + */ + "approve_item_attributes": Anonymize; + /** + *Cancel the previously provided approval to change item's attributes. + *All the previously set attributes by the `delegate` will be removed. + * + *Origin must be Signed and must be an owner of the `item`. + * + *- `collection`: Collection that the item is contained within. + *- `item`: The item that holds attributes. + *- `delegate`: The previously approved account to remove. + * + *Emits `ItemAttributesApprovalRemoved` on success. + */ + "cancel_item_attributes_approval": Anonymize; + /** + *Set the metadata for an item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Admin of the + *`collection`. + * + *If the origin is Signed, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * data.len` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the collection whose item's metadata to set. + *- `item`: The identifier of the item whose metadata to set. + *- `data`: The general information of this item. Limited in length by `StringLimit`. + * + *Emits `ItemMetadataSet`. + * + *Weight: `O(1)` + */ + "set_metadata": Anonymize; + /** + *Clear the metadata for an item. + * + *Origin must be either `ForceOrigin` or Signed and the sender should be the Admin of the + *`collection`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose item's metadata to clear. + *- `item`: The identifier of the item whose metadata to clear. + * + *Emits `ItemMetadataCleared`. + * + *Weight: `O(1)` + */ + "clear_metadata": Anonymize; + /** + *Set the metadata for a collection. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Admin of + *the `collection`. + * + *If the origin is `Signed`, then funds of signer are reserved according to the formula: + *`MetadataDepositBase + DepositPerByte * data.len` taking into + *account any already reserved funds. + * + *- `collection`: The identifier of the item whose metadata to update. + *- `data`: The general information of this item. Limited in length by `StringLimit`. + * + *Emits `CollectionMetadataSet`. + * + *Weight: `O(1)` + */ + "set_collection_metadata": Anonymize; + /** + *Clear the metadata for a collection. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Admin of + *the `collection`. + * + *Any deposit is freed for the collection's owner. + * + *- `collection`: The identifier of the collection whose metadata to clear. + * + *Emits `CollectionMetadataCleared`. + * + *Weight: `O(1)` + */ + "clear_collection_metadata": Anonymize; + /** + *Set (or reset) the acceptance of ownership for a particular account. + * + *Origin must be `Signed` and if `maybe_collection` is `Some`, then the signer must have a + *provider reference. + * + *- `maybe_collection`: The identifier of the collection whose ownership the signer is + * willing to accept, or if `None`, an indication that the signer is willing to accept no + * ownership transferal. + * + *Emits `OwnershipAcceptanceChanged`. + */ + "set_accept_ownership": Anonymize; + /** + *Set the maximum number of items a collection could have. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Owner of + *the `collection`. + * + *- `collection`: The identifier of the collection to change. + *- `max_supply`: The maximum number of items a collection could have. + * + *Emits `CollectionMaxSupplySet` event when successful. + */ + "set_collection_max_supply": Anonymize; + /** + *Update mint settings. + * + *Origin must be either `ForceOrigin` or `Signed` and the sender should be the Issuer + *of the `collection`. + * + *- `collection`: The identifier of the collection to change. + *- `mint_settings`: The new mint settings. + * + *Emits `CollectionMintSettingsUpdated` event when successful. + */ + "update_mint_settings": Anonymize; + /** + *Set (or reset) the price for an item. + * + *Origin must be Signed and must be the owner of the `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item to set the price for. + *- `price`: The price for the item. Pass `None`, to reset the price. + *- `buyer`: Restricts the buy operation to a specific account. + * + *Emits `ItemPriceSet` on success if the price is not `None`. + *Emits `ItemPriceRemoved` on success if the price is `None`. + */ + "set_price": Anonymize; + /** + *Allows to buy an item if it's up for sale. + * + *Origin must be Signed and must not be the owner of the `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item the sender wants to buy. + *- `bid_price`: The price the sender is willing to pay. + * + *Emits `ItemBought` on success. + */ + "buy_item": Anonymize; + /** + *Allows to pay the tips. + * + *Origin must be Signed. + * + *- `tips`: Tips array. + * + *Emits `TipSent` on every tip transfer. + */ + "pay_tips": Anonymize; + /** + *Register a new atomic swap, declaring an intention to send an `item` in exchange for + *`desired_item` from origin to target on the current blockchain. + *The target can execute the swap during the specified `duration` of blocks (if set). + *Additionally, the price could be set for the desired `item`. + * + *Origin must be Signed and must be an owner of the `item`. + * + *- `collection`: The collection of the item. + *- `item`: The item an owner wants to give. + *- `desired_collection`: The collection of the desired item. + *- `desired_item`: The desired item an owner wants to receive. + *- `maybe_price`: The price an owner is willing to pay or receive for the desired `item`. + *- `duration`: A deadline for the swap. Specified by providing the number of blocks + * after which the swap will expire. + * + *Emits `SwapCreated` on success. + */ + "create_swap": Anonymize; + /** + *Cancel an atomic swap. + * + *Origin must be Signed. + *Origin must be an owner of the `item` if the deadline hasn't expired. + * + *- `collection`: The collection of the item. + *- `item`: The item an owner wants to give. + * + *Emits `SwapCancelled` on success. + */ + "cancel_swap": Anonymize; + /** + *Claim an atomic swap. + *This method executes a pending swap, that was created by a counterpart before. + * + *Origin must be Signed and must be an owner of the `item`. + * + *- `send_collection`: The collection of the item to be sent. + *- `send_item`: The item to be sent. + *- `receive_collection`: The collection of the item to be received. + *- `receive_item`: The item to be received. + *- `witness_price`: A price that was previously agreed on. + * + *Emits `SwapClaimed` on success. + */ + "claim_swap": Anonymize; + /** + *Mint an item by providing the pre-signed approval. + * + *Origin must be Signed. + * + *- `mint_data`: The pre-signed approval that consists of the information about the item, + * its metadata, attributes, who can mint it (`None` for anyone) and until what block + * number. + *- `signature`: The signature of the `data` object. + *- `signer`: The `data` object's signer. Should be an Issuer of the collection. + * + *Emits `Issued` on success. + *Emits `AttributeSet` if the attributes were provided. + *Emits `ItemMetadataSet` if the metadata was not empty. + */ + "mint_pre_signed": Anonymize; + /** + *Set attributes for an item by providing the pre-signed approval. + * + *Origin must be Signed and must be an owner of the `data.item`. + * + *- `data`: The pre-signed approval that consists of the information about the item, + * attributes to update and until what block number. + *- `signature`: The signature of the `data` object. + *- `signer`: The `data` object's signer. Should be an Admin of the collection for the + * `CollectionOwner` namespace. + * + *Emits `AttributeSet` for each provided attribute. + *Emits `ItemAttributesApprovalAdded` if the approval wasn't set before. + *Emits `PreSignedAttributesSet` on success. + */ + "set_attributes_pre_signed": Anonymize; +}>; +export type I43aobns89nbkh = { + "admin": MultiAddress; + "config": Anonymize; +}; +export type Iamd7rovec1hfb = { + "owner": MultiAddress; + "config": Anonymize; +}; +export type I77ie723ncd4co = { + "collection": number; + "witness": Anonymize; +}; +export type Idqhe2sslgfeu8 = { + "item_metadatas": number; + "item_configs": number; + "attributes": number; +}; +export type Ieebloeahma3ke = { + "collection": number; + "item": number; + "mint_to": MultiAddress; + "witness_data"?: Anonymize; +}; +export type Ib0113vv89gbic = (Anonymize) | undefined; +export type Ia2e23n2425vqn = { + "owned_item"?: Anonymize; + "mint_price"?: Anonymize; +}; +export type I4mbtpf4pu3rec = { + "collection": number; + "item": number; + "mint_to": MultiAddress; + "item_config": bigint; +}; +export type I1ahf3pvgsgbu = { + "collection": number; + "lock_settings": bigint; +}; +export type I9uapdn16emsti = { + "collection": number; + "issuer"?: Anonymize; + "admin"?: Anonymize; + "freezer"?: Anonymize; +}; +export type Ie5i0q2glmr0md = { + "collection": number; + "owner": MultiAddress; +}; +export type I97qcg6i3l8gee = { + "collection": number; + "config": Anonymize; +}; +export type Ib5udrahak005b = { + "collection": number; + "item": number; + "delegate": MultiAddress; + "maybe_deadline"?: Anonymize; +}; +export type Ic8b8561e6t9ie = { + "set_as"?: Anonymize; + "collection": number; + "maybe_item"?: Anonymize; + "namespace": Anonymize; + "key": Binary; + "value": Binary; +}; +export type I6afd7fllr8otc = { + "collection": number; + "item": number; + "delegate": MultiAddress; + "witness": number; +}; +export type I1lso3vlgherue = { + "collection": number; + "mint_settings": Anonymize; +}; +export type I26c8p47106toa = { + "tips": Anonymize; +}; +export type I73vqjhh9uvase = Array>; +export type I21hhoccptr6ko = { + "collection": number; + "item": number; + "receiver": SS58String; + "amount": bigint; +}; +export type Iq82b3qvf20ne = { + "offered_collection": number; + "offered_item": number; + "desired_collection": number; + "maybe_desired_item"?: Anonymize; + "maybe_price"?: Anonymize; + "duration": number; +}; +export type Ic3j8ku6mbsms4 = { + "offered_collection": number; + "offered_item": number; +}; +export type I3nvoqsi8f05ph = { + "send_collection": number; + "send_item": number; + "receive_collection": number; + "receive_item": number; + "witness_price"?: Anonymize; +}; +export type I3eoft5md071do = { + "mint_data": Anonymize; + "signature": MultiSignature; + "signer": SS58String; +}; +export type Icu0bim1kiuj19 = { + "collection": number; + "item": number; + "attributes": Anonymize; + "metadata": Binary; + "only_account"?: Anonymize; + "deadline": number; + "mint_price"?: Anonymize; +}; +export type MultiSignature = Enum<{ + "Ed25519": FixedSizeBinary<64>; + "Sr25519": FixedSizeBinary<64>; + "Ecdsa": FixedSizeBinary<65>; +}>; +export declare const MultiSignature: GetEnum; +export type I923eug653ra0o = { + "data": Anonymize; + "signature": MultiSignature; + "signer": SS58String; +}; +export type Id9tges27r8atl = { + "collection": number; + "item": number; + "attributes": Anonymize; + "namespace": Anonymize; + "deadline": number; +}; +export type I2clougp67ufee = AnonymousEnum<{ + /** + *Issue a new class of fungible assets from a public origin. + * + *This new asset class has no assets initially and its owner is the origin. + * + *The origin must conform to the configured `CreateOrigin` and have sufficient funds free. + * + *Funds of sender are reserved by `AssetDeposit`. + * + *Parameters: + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `admin`: The admin of this class of assets. The admin is the initial address of each + *member of the asset class's admin team. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `Created` event when successful. + * + *Weight: `O(1)` + */ + "create": Anonymize; + /** + *Issue a new class of fungible assets from a privileged origin. + * + *This new asset class has no assets initially. + * + *The origin must conform to `ForceOrigin`. + * + *Unlike `create`, no funds are reserved. + * + *- `id`: The identifier of the new asset. This must not be currently in use to identify + *an existing asset. If [`NextAssetId`] is set, then this must be equal to it. + *- `owner`: The owner of this class of assets. The owner has full superuser permissions + *over this asset, but may later change and configure the permissions using + *`transfer_ownership` and `set_team`. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + * + *Emits `ForceCreated` event when successful. + * + *Weight: `O(1)` + */ + "force_create": Anonymize; + /** + *Start the process of destroying a fungible asset class. + * + *`start_destroy` is the first in a series of extrinsics that should be called, to allow + *destruction of an asset class. + * + *The origin must conform to `ForceOrigin` or must be `Signed` by the asset's `owner`. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *The asset class must be frozen before calling `start_destroy`. + */ + "start_destroy": Anonymize; + /** + *Destroy all accounts associated with a given asset. + * + *`destroy_accounts` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all accounts. It will destroy `RemoveItemsLimit` accounts at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedAccounts` event. + */ + "destroy_accounts": Anonymize; + /** + *Destroy all approvals associated with a given asset up to the max (T::RemoveItemsLimit). + * + *`destroy_approvals` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. + * + *Due to weight restrictions, this function may need to be called multiple times to fully + *destroy all approvals. It will destroy `RemoveItemsLimit` approvals at a time. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each call emits the `Event::DestroyedApprovals` event. + */ + "destroy_approvals": Anonymize; + /** + *Complete destroying asset and unreserve currency. + * + *`finish_destroy` should only be called after `start_destroy` has been called, and the + *asset is in a `Destroying` state. All accounts or approvals should be destroyed before + *hand. + * + *- `id`: The identifier of the asset to be destroyed. This must identify an existing + * asset. + * + *Each successful call emits the `Event::Destroyed` event. + */ + "finish_destroy": Anonymize; + /** + *Mint assets of a particular class. + * + *The origin must be Signed and the sender must be the Issuer of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount minted. + *- `beneficiary`: The account to be credited with the minted assets. + *- `amount`: The amount of the asset to be minted. + * + *Emits `Issued` event when successful. + * + *Weight: `O(1)` + *Modes: Pre-existing balance of `beneficiary`; Account pre-existence of `beneficiary`. + */ + "mint": Anonymize; + /** + *Reduce the balance of `who` by as much as possible up to `amount` assets of `id`. + * + *Origin must be Signed and the sender should be the Manager of the asset `id`. + * + *Bails with `NoAccount` if the `who` is already dead. + * + *- `id`: The identifier of the asset to have some amount burned. + *- `who`: The account to be debited from. + *- `amount`: The maximum amount by which `who`'s balance should be reduced. + * + *Emits `Burned` with the actual amount burned. If this takes the balance to below the + *minimum for the asset, then the amount burned is increased to take it to zero. + * + *Weight: `O(1)` + *Modes: Post-existence of `who`; Pre & post Zombie-status of `who`. + */ + "burn": Anonymize; + /** + *Move some assets from the sender account to another. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + "transfer": Anonymize; + /** + *Move some assets from the sender account to another, keeping the sender account alive. + * + *Origin must be Signed. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `target`: The account to be credited. + *- `amount`: The amount by which the sender's balance of assets should be reduced and + *`target`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the sender balance above zero but below + *the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `target`; Post-existence of sender; Account pre-existence of + *`target`. + */ + "transfer_keep_alive": Anonymize; + /** + *Move some assets from one account to another. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to have some amount transferred. + *- `source`: The account to be debited. + *- `dest`: The account to be credited. + *- `amount`: The amount by which the `source`'s balance of assets should be reduced and + *`dest`'s balance increased. The amount actually transferred may be slightly greater in + *the case that the transfer would otherwise take the `source` balance above zero but + *below the minimum balance. Must be greater than zero. + * + *Emits `Transferred` with the actual amount transferred. If this takes the source balance + *to below the minimum for the asset, then the amount transferred is increased to take it + *to zero. + * + *Weight: `O(1)` + *Modes: Pre-existence of `dest`; Post-existence of `source`; Account pre-existence of + *`dest`. + */ + "force_transfer": Anonymize; + /** + *Disallow further unprivileged transfers of an asset `id` from an account `who`. `who` + *must already exist as an entry in `Account`s of the asset. If you want to freeze an + *account that does not have an entry, use `touch_other` first. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + "freeze": Anonymize; + /** + *Allow unprivileged transfers to and from an account again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `who`: The account to be unfrozen. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + "thaw": Anonymize; + /** + *Disallow further unprivileged transfers for the asset class. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + * + *Emits `Frozen`. + * + *Weight: `O(1)` + */ + "freeze_asset": Anonymize; + /** + *Allow unprivileged transfers for the asset again. + * + *Origin must be Signed and the sender should be the Admin of the asset `id`. + * + *- `id`: The identifier of the asset to be thawed. + * + *Emits `Thawed`. + * + *Weight: `O(1)` + */ + "thaw_asset": Anonymize; + /** + *Change the Owner of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + * + *Emits `OwnerChanged`. + * + *Weight: `O(1)` + */ + "transfer_ownership": Anonymize; + /** + *Change the Issuer, Admin and Freezer of an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *- `id`: The identifier of the asset to be frozen. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + * + *Emits `TeamChanged`. + * + *Weight: `O(1)` + */ + "set_team": Anonymize; + /** + *Set the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Funds of sender are reserved according to the formula: + *`MetadataDepositBase + MetadataDepositPerByte * (name.len + symbol.len)` taking into + *account any already reserved funds. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(1)` + */ + "set_metadata": Anonymize; + /** + *Clear the metadata for an asset. + * + *Origin must be Signed and the sender should be the Owner of the asset `id`. + * + *Any deposit is freed for the asset owner. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + "clear_metadata": Anonymize; + /** + *Force the metadata for an asset to some value. + * + *Origin must be ForceOrigin. + * + *Any deposit is left alone. + * + *- `id`: The identifier of the asset to update. + *- `name`: The user friendly name of this asset. Limited in length by `StringLimit`. + *- `symbol`: The exchange symbol for this asset. Limited in length by `StringLimit`. + *- `decimals`: The number of decimals this asset uses to represent one unit. + * + *Emits `MetadataSet`. + * + *Weight: `O(N + S)` where N and S are the length of the name and symbol respectively. + */ + "force_set_metadata": Anonymize; + /** + *Clear the metadata for an asset. + * + *Origin must be ForceOrigin. + * + *Any deposit is returned. + * + *- `id`: The identifier of the asset to clear. + * + *Emits `MetadataCleared`. + * + *Weight: `O(1)` + */ + "force_clear_metadata": Anonymize; + /** + *Alter the attributes of a given asset. + * + *Origin must be `ForceOrigin`. + * + *- `id`: The identifier of the asset. + *- `owner`: The new Owner of this asset. + *- `issuer`: The new Issuer of this asset. + *- `admin`: The new Admin of this asset. + *- `freezer`: The new Freezer of this asset. + *- `min_balance`: The minimum balance of this new asset that any single account must + *have. If an account's balance is reduced below this, then it collapses to zero. + *- `is_sufficient`: Whether a non-zero balance of this asset is deposit of sufficient + *value to account for the state bloat associated with its balance storage. If set to + *`true`, then non-zero balances may be stored without a `consumer` reference (and thus + *an ED in the Balances pallet or whatever else is used to control user-account state + *growth). + *- `is_frozen`: Whether this asset class is frozen except for permissioned/admin + *instructions. + * + *Emits `AssetStatusChanged` with the identity of the asset. + * + *Weight: `O(1)` + */ + "force_asset_status": Anonymize; + /** + *Approve an amount of asset for transfer by a delegated third-party account. + * + *Origin must be Signed. + * + *Ensures that `ApprovalDeposit` worth of `Currency` is reserved from signing account + *for the purpose of holding the approval. If some non-zero amount of assets is already + *approved from signing account to `delegate`, then it is topped up or unreserved to + *meet the right value. + * + *NOTE: The signing account does not need to own `amount` of assets at the point of + *making this call. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account to delegate permission to transfer asset. + *- `amount`: The amount of asset that may be transferred by `delegate`. If there is + *already an approval in place, then this acts additively. + * + *Emits `ApprovedTransfer` on success. + * + *Weight: `O(1)` + */ + "approve_transfer": Anonymize; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be Signed and there must be an approval in place between signer and + *`delegate`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + "cancel_approval": Anonymize; + /** + *Cancel all of some asset approved for delegated transfer by a third-party account. + * + *Origin must be either ForceOrigin or Signed origin with the signer being the Admin + *account of the asset `id`. + * + *Unreserves any deposit previously reserved by `approve_transfer` for the approval. + * + *- `id`: The identifier of the asset. + *- `delegate`: The account delegated permission to transfer asset. + * + *Emits `ApprovalCancelled` on success. + * + *Weight: `O(1)` + */ + "force_cancel_approval": Anonymize; + /** + *Transfer some asset balance from a previously delegated account to some third-party + *account. + * + *Origin must be Signed and there must be an approval in place by the `owner` to the + *signer. + * + *If the entire amount approved for transfer is transferred, then any deposit previously + *reserved by `approve_transfer` is unreserved. + * + *- `id`: The identifier of the asset. + *- `owner`: The account which previously approved for a transfer of at least `amount` and + *from which the asset balance will be withdrawn. + *- `destination`: The account to which the asset balance of `amount` will be transferred. + *- `amount`: The amount of assets to transfer. + * + *Emits `TransferredApproved` on success. + * + *Weight: `O(1)` + */ + "transfer_approved": Anonymize; + /** + *Create an asset account for non-provider assets. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed; the signer account must have sufficient funds for a deposit + * to be taken. + *- `id`: The identifier of the asset for the account to be created. + * + *Emits `Touched` event when successful. + */ + "touch": Anonymize; + /** + *Return the deposit (if any) of an asset account or a consumer reference (if any) of an + *account. + * + *The origin must be Signed. + * + *- `id`: The identifier of the asset for which the caller would like the deposit + * refunded. + *- `allow_burn`: If `true` then assets may be destroyed in order to complete the refund. + * + *Emits `Refunded` event when successful. + */ + "refund": Anonymize; + /** + *Sets the minimum balance of an asset. + * + *Only works if there aren't any accounts that are holding the asset or if + *the new value of `min_balance` is less than the old one. + * + *Origin must be Signed and the sender has to be the Owner of the + *asset `id`. + * + *- `id`: The identifier of the asset. + *- `min_balance`: The new value of `min_balance`. + * + *Emits `AssetMinBalanceChanged` event when successful. + */ + "set_min_balance": Anonymize; + /** + *Create an asset account for `who`. + * + *A deposit will be taken from the signer account. + * + *- `origin`: Must be Signed by `Freezer` or `Admin` of the asset `id`; the signer account + * must have sufficient funds for a deposit to be taken. + *- `id`: The identifier of the asset for the account to be created. + *- `who`: The account to be created. + * + *Emits `Touched` event when successful. + */ + "touch_other": Anonymize; + /** + *Return the deposit (if any) of a target asset account. Useful if you are the depositor. + * + *The origin must be Signed and either the account owner, depositor, or asset `Admin`. In + *order to burn a non-zero balance of the asset, the caller must be the account and should + *use `refund`. + * + *- `id`: The identifier of the asset for the account holding a deposit. + *- `who`: The account to refund. + * + *Emits `Refunded` event when successful. + */ + "refund_other": Anonymize; + /** + *Disallow further unprivileged transfers of an asset `id` to and from an account `who`. + * + *Origin must be Signed and the sender should be the Freezer of the asset `id`. + * + *- `id`: The identifier of the account's asset. + *- `who`: The account to be unblocked. + * + *Emits `Blocked`. + * + *Weight: `O(1)` + */ + "block": Anonymize; +}>; +export type I7p44cr9g492tc = { + "id": Anonymize; + "admin": MultiAddress; + "min_balance": bigint; +}; +export type Ibn8gm2jugarek = { + "id": Anonymize; + "owner": MultiAddress; + "is_sufficient": boolean; + "min_balance": bigint; +}; +export type Iekg0q69obfi0f = { + "id": Anonymize; +}; +export type I8dh2oimnihksg = { + "id": Anonymize; + "beneficiary": MultiAddress; + "amount": bigint; +}; +export type Ib8mfkapk4u9hs = { + "id": Anonymize; + "who": MultiAddress; + "amount": bigint; +}; +export type Ikm68gg7akl51 = { + "id": Anonymize; + "target": MultiAddress; + "amount": bigint; +}; +export type If3csb5ben9n1v = { + "id": Anonymize; + "source": MultiAddress; + "dest": MultiAddress; + "amount": bigint; +}; +export type If90dk6l9lmtfv = { + "id": Anonymize; + "who": MultiAddress; +}; +export type Ifoahm8m43v9q2 = { + "id": Anonymize; + "owner": MultiAddress; +}; +export type I1rrgcjpoiot5q = { + "id": Anonymize; + "issuer": MultiAddress; + "admin": MultiAddress; + "freezer": MultiAddress; +}; +export type I2hc61n7o8dso4 = { + "id": Anonymize; + "name": Binary; + "symbol": Binary; + "decimals": number; +}; +export type I5787kv2d05f94 = { + "id": Anonymize; + "name": Binary; + "symbol": Binary; + "decimals": number; + "is_frozen": boolean; +}; +export type Ia8g1imc1kclf4 = { + "id": Anonymize; + "owner": MultiAddress; + "issuer": MultiAddress; + "admin": MultiAddress; + "freezer": MultiAddress; + "min_balance": bigint; + "is_sufficient": boolean; + "is_frozen": boolean; +}; +export type Id26ouo5lt2551 = { + "id": Anonymize; + "delegate": MultiAddress; + "amount": bigint; +}; +export type Iap1up3prsbtvg = { + "id": Anonymize; + "delegate": MultiAddress; +}; +export type I8m5mvhifj6pm = { + "id": Anonymize; + "owner": MultiAddress; + "delegate": MultiAddress; +}; +export type I8ucc4915s9qvj = { + "id": Anonymize; + "owner": MultiAddress; + "destination": MultiAddress; + "amount": bigint; +}; +export type I1pjcv2ha0997v = { + "id": Anonymize; + "allow_burn": boolean; +}; +export type Ifnm6nai2i47ar = { + "id": Anonymize; + "min_balance": bigint; +}; +export type I9eemk0c7gip8o = AnonymousEnum<{ + /** + *Creates an empty liquidity pool and an associated new `lp_token` asset + *(the id of which is returned in the `Event::PoolCreated` event). + * + *Once a pool is created, someone may [`Pallet::add_liquidity`] to it. + */ + "create_pool": Anonymize; + /** + *Provide liquidity into the pool of `asset1` and `asset2`. + *NOTE: an optimal amount of asset1 and asset2 will be calculated and + *might be different than the provided `amount1_desired`/`amount2_desired` + *thus you should provide the min amount you're happy to provide. + *Params `amount1_min`/`amount2_min` represent that. + *`mint_to` will be sent the liquidity tokens that represent this share of the pool. + * + *NOTE: when encountering an incorrect exchange rate and non-withdrawable pool liquidity, + *batch an atomic call with [`Pallet::add_liquidity`] and + *[`Pallet::swap_exact_tokens_for_tokens`] or [`Pallet::swap_tokens_for_exact_tokens`] + *calls to render the liquidity withdrawable and rectify the exchange rate. + * + *Once liquidity is added, someone may successfully call + *[`Pallet::swap_exact_tokens_for_tokens`] successfully. + */ + "add_liquidity": Anonymize; + /** + *Allows you to remove liquidity by providing the `lp_token_burn` tokens that will be + *burned in the process. With the usage of `amount1_min_receive`/`amount2_min_receive` + *it's possible to control the min amount of returned tokens you're happy with. + */ + "remove_liquidity": Anonymize; + /** + *Swap the exact amount of `asset1` into `asset2`. + *`amount_out_min` param allows you to specify the min amount of the `asset2` + *you're happy to receive. + * + *[`AssetConversionApi::quote_price_exact_tokens_for_tokens`] runtime call can be called + *for a quote. + */ + "swap_exact_tokens_for_tokens": Anonymize; + /** + *Swap any amount of `asset1` to get the exact amount of `asset2`. + *`amount_in_max` param allows to specify the max amount of the `asset1` + *you're happy to provide. + * + *[`AssetConversionApi::quote_price_tokens_for_exact_tokens`] runtime call can be called + *for a quote. + */ + "swap_tokens_for_exact_tokens": Anonymize; + /** + *Touch an existing pool to fulfill prerequisites before providing liquidity, such as + *ensuring that the pool's accounts are in place. It is typically useful when a pool + *creator removes the pool's accounts and does not provide a liquidity. This action may + *involve holding assets from the caller as a deposit for creating the pool's accounts. + * + *The origin must be Signed. + * + *- `asset1`: The asset ID of an existing pool with a pair (asset1, asset2). + *- `asset2`: The asset ID of an existing pool with a pair (asset1, asset2). + * + *Emits `Touched` event when successful. + */ + "touch": Anonymize; +}>; +export type I8eoqk45hnet27 = { + "asset1": Anonymize; + "asset2": Anonymize; +}; +export type Iddvk596rbl31l = { + "asset1": Anonymize; + "asset2": Anonymize; + "amount1_desired": bigint; + "amount2_desired": bigint; + "amount1_min": bigint; + "amount2_min": bigint; + "mint_to": SS58String; +}; +export type I3iap9ri572kjf = { + "asset1": Anonymize; + "asset2": Anonymize; + "lp_token_burn": bigint; + "amount1_min_receive": bigint; + "amount2_min_receive": bigint; + "withdraw_to": SS58String; +}; +export type I48iqqqmt2pr38 = { + "path": Anonymize; + "amount_in": bigint; + "amount_out_min": bigint; + "send_to": SS58String; + "keep_alive": boolean; +}; +export type Ia88a8r9e89e2p = Array>; +export type I90ob4vr51rue4 = { + "path": Anonymize; + "amount_out": bigint; + "amount_in_max": bigint; + "send_to": SS58String; + "keep_alive": boolean; +}; +export type Iaqet9jc3ihboe = { + "header": Anonymize; + "extrinsics": Anonymize; +}; +export type Ic952bubvq4k7d = { + "parent_hash": FixedSizeBinary<32>; + "number": number; + "state_root": FixedSizeBinary<32>; + "extrinsics_root": FixedSizeBinary<32>; + "digest": Anonymize; +}; +export type I2v50gu3s1aqk6 = AnonymousEnum<{ + "AllExtrinsics": undefined; + "OnlyInherents": undefined; +}>; +export type Iai7icf56nsvk8 = ResultPayload, TransactionValidityError>; +export type TransactionValidityError = Enum<{ + "Invalid": TransactionValidityInvalidTransaction; + "Unknown": TransactionValidityUnknownTransaction; +}>; +export declare const TransactionValidityError: GetEnum; +export type TransactionValidityInvalidTransaction = Enum<{ + "Call": undefined; + "Payment": undefined; + "Future": undefined; + "Stale": undefined; + "BadProof": undefined; + "AncientBirthBlock": undefined; + "ExhaustsResources": undefined; + "Custom": number; + "BadMandatory": undefined; + "MandatoryValidation": undefined; + "BadSigner": undefined; +}>; +export declare const TransactionValidityInvalidTransaction: GetEnum; +export type TransactionValidityUnknownTransaction = Enum<{ + "CannotLookup": undefined; + "NoUnsignedValidator": undefined; + "Custom": number; +}>; +export declare const TransactionValidityUnknownTransaction: GetEnum; +export type If7uv525tdvv7a = Array>; +export type I76hdjk9qh40no = [FixedSizeBinary<8>, Binary]; +export type I2an1fs2eiebjp = { + "okay": boolean; + "fatal_error": boolean; + "errors": Anonymize; +}; +export type TransactionValidityTransactionSource = Enum<{ + "InBlock": undefined; + "Local": undefined; + "External": undefined; +}>; +export declare const TransactionValidityTransactionSource: GetEnum; +export type Iajbob6uln5jct = ResultPayload, TransactionValidityError>; +export type I6g5lcd9vf2cr0 = { + "priority": bigint; + "requires": Anonymize; + "provides": Anonymize; + "longevity": bigint; + "propagate": boolean; +}; +export type Icerf8h8pdu8ss = (Anonymize) | undefined; +export type I66iuq7l8se39 = Array>; +export type I9tmff36km6vjg = [Binary, FixedSizeBinary<4>]; +export type I6spmpef2c7svf = { + "weight": Anonymize; + "class": DispatchClass; + "partial_fee": bigint; +}; +export type Iei2mvq0mjvt81 = { + "inclusion_fee"?: Anonymize; + "tip": bigint; +}; +export type Id37fum600qfau = (Anonymize) | undefined; +export type I246faqtjrsnee = { + "base_fee": bigint; + "len_fee": bigint; + "adjusted_weight_fee": bigint; +}; +export type I2g5nrfnsbr9n0 = AnonymousEnum<{ + "System": Anonymize; + "ParachainSystem": Anonymize; + "Timestamp": Anonymize; + "ParachainInfo": undefined; + "Balances": Anonymize; + "Vesting": Anonymize; + "CollatorSelection": Anonymize; + "Session": Anonymize; + "XcmpQueue": Anonymize; + "PolkadotXcm": Anonymize; + "CumulusXcm": undefined; + "ToKusamaXcmRouter": Anonymize; + "MessageQueue": Anonymize; + "Utility": Anonymize; + "Multisig": Anonymize; + "Proxy": Anonymize; + "Assets": Anonymize; + "Uniques": Anonymize; + "Nfts": Anonymize; + "ForeignAssets": Anonymize; + "PoolAssets": Anonymize; + "AssetConversion": Anonymize; +}>; +export type I1p1369d52j8jd = ResultPayload, Anonymize>; +export type I66cvqflm1qj24 = Array; +export type Iavct6f844hfju = AnonymousEnum<{ + "Unimplemented": undefined; + "VersionedConversionFailed": undefined; + "WeightNotComputable": undefined; + "UnhandledXcmVersion": undefined; + "AssetNotFound": undefined; + "Unroutable": undefined; +}>; +export type Ic0c3req3mlc1l = ResultPayload, Anonymize>; +export type I7ocn4njqde3v5 = ResultPayload>; +export type I5rlt6h8ph553n = ResultPayload>; +export type Id5e0bqoki0bb0 = ResultPayload, Anonymize>; +export type I2b61r7oveqvlt = { + "execution_result": Anonymize; + "emitted_events": Anonymize; + "local_xcm"?: Anonymize; + "forwarded_xcms": Anonymize; +}; +export type Ic6s0p82uhoidt = ResultPayload, Anonymize>; +export type Ia1u1r3n74r13c = { + "actual_weight"?: Anonymize; + "pays_fee": Anonymize; +}; +export type I3n1v5i2efq6rh = { + "post_info": Anonymize; + "error": Anonymize; +}; +export type I6ulg2ml1s5o2p = Array>; +export type I3i0ce56p044d2 = (XcmVersionedXcm) | undefined; +export type I47tkk5e5nm6g7 = Array>; +export type I60vv2hvlt348b = [XcmVersionedLocation, Anonymize]; +export type I7ao2ct6q454mu = Array; +export type I55ku9c5gk50hb = AnonymousEnum<{ + "Unimplemented": undefined; + "VersionedConversionFailed": undefined; +}>; +export type I6sn3ln0su7un5 = ResultPayload, Anonymize>; +export type I16uv813m3c1lh = { + "execution_result": XcmV4TraitsOutcome; + "emitted_events": Anonymize; + "forwarded_xcms": Anonymize; +}; +export type Ieh6nis3hdbtgi = ResultPayload>; +export type Ibaohq34aedndv = AnonymousEnum<{ + "Unsupported": undefined; + "VersionedConversionFailed": undefined; +}>; +export type I93k1anhb5gs2q = ResultPayload>; +export type I5tspd7e422fr9 = AnonymousEnum<{ + "AssetIdConversionFailed": undefined; + "AmountToBalanceConversionFailed": undefined; +}>; +export type Ic1d4u2opv3fst = { + "upward_messages": Anonymize; + "horizontal_messages": Anonymize; + "new_validation_code"?: Anonymize; + "processed_downward_messages": number; + "hrmp_watermark": number; + "head_data": Binary; +}; +export type Ie9sr1iqcg3cgm = ResultPayload; +export type I1mqgk2tmnn9i2 = (string) | undefined; +export type I6lr8sctk0bi4e = Array; +export type I5vv5n03oo8gas = (Anonymize) | undefined; +export type I200n1ov5tbcvr = FixedSizeArray<2, bigint>; +export {}; diff --git a/.papi/descriptors/dist/descriptors-5NZKIUFU.mjs b/.papi/descriptors/dist/descriptors-5NZKIUFU.mjs new file mode 100644 index 0000000000..64627edae0 --- /dev/null +++ b/.papi/descriptors/dist/descriptors-5NZKIUFU.mjs @@ -0,0 +1,27 @@ +// .papi/descriptors/src/descriptors.ts +var [minified, commonTrees, tokens] = JSON.parse(`[{"assethub":{"storage":{"1":{"0":0,"ExtrinsicCount":1,"InherentsApplied":2,"BlockWeight":3,"AllExtrinsicsLen":1,"BlockHash":4,"ExtrinsicData":5,"Number":1,"ParentHash":6,"Digest":7,"Events":8,"EventCount":1,"EventTopics":9,"LastRuntimeUpgrade":10,"UpgradedToU32RefCount":2,"UpgradedToTripleRefCount":2,"ExecutionPhase":11,"AuthorizedUpgrade":12},"2":{"UnincludedSegment":31,"AggregatedUnincludedSegment":32,"PendingValidationCode":33,"NewValidationCode":33,"ValidationData":34,"DidSetValidationCode":2,"LastRelayChainBlockNumber":1,"UpgradeRestrictionSignal":35,"UpgradeGoAhead":36,"RelayStateProof":37,"RelevantMessagingState":38,"HostConfiguration":39,"LastDmqMqcHead":6,"LastHrmpMqcHeads":40,"ProcessedDownwardMessages":1,"HrmpWatermark":1,"HrmpOutboundMessages":41,"UpwardMessages":37,"PendingUpwardMessages":37,"UpwardDeliveryFeeFactor":42,"AnnouncedHrmpMessagesPerCandidate":1,"ReservedXcmpWeightOverride":43,"ReservedDmpWeightOverride":43,"CustomValidationHeadData":33},"3":{"Now":42,"DidUpdate":2},"4":{"ParachainId":1},"5":{"0":52,"TotalIssuance":42,"InactiveIssuance":42,"Locks":53,"Reserves":54,"Holds":55,"Freezes":55},"7":{"6":73,"NextFeeMultiplier":42},"8":0,"9":{"6":78,"9":77},"10":{"Author":86},"11":{"Invulnerables":87,"CandidateList":88,"LastAuthoredBlock":89,"DesiredCandidates":1,"CandidacyBond":42},"12":{"Validators":87,"CurrentIndex":1,"QueuedChanged":2,"QueuedKeys":102,"DisabledValidators":103,"NextKeys":104,"KeyOwner":105},"14":{"13":108,"CurrentSlot":42},"15":{"13":108,"SlotInfo":109},"16":{"InboundXcmpSuspended":103,"OutboundXcmpStatus":110,"OutboundXcmpMessages":111,"SignalMessages":5,"QueueConfig":112,"QueueSuspended":2,"DeliveryFeeFactor":113},"17":{"QueryCounter":42,"Queries":116,"AssetTraps":117,"SafeXcmVersion":1,"SupportedVersion":118,"VersionNotifiers":119,"VersionNotifyTargets":120,"VersionDiscoveryQueue":121,"CurrentMigration":122,"RemoteLockedFungibles":123,"LockedFungibles":124,"XcmExecutionSuspended":2,"ShouldRecordXcm":2,"RecordedXcm":125},"18":0,"19":{"Bridge":155},"20":{"BookStateFor":157,"ServiceHead":158,"Pages":159},"21":0,"22":{"Multisigs":174},"23":{"Proxies":183,"Announcements":184},"28":1,"32":{"0":236,"24":238,"29":89,"30":241,"31":242,"Class":235,"ClassAccount":237,"ClassMetadataOf":239,"InstanceMetadataOf":240,"CollectionMaxSupply":243},"33":{"0":236,"29":89,"30":289,"31":242,"Collection":284,"CollectionAccount":237,"CollectionRoleOf":285,"Item":286,"CollectionMetadataOf":287,"ItemMetadataOf":288,"ItemAttributesApprovalsOf":290,"NextCollectionId":1,"PendingSwapOf":291,"CollectionConfigOf":292,"ItemConfigOf":293},"34":{"0":333,"24":332,"25":334,"26":335,"27":336},"35":1,"36":{"Pools":373,"NextPoolAssetId":1}},"tx":{"1":{"37":23,"remark":17,"set_heap_pages":18,"set_code":19,"set_code_without_checks":19,"set_storage":20,"kill_storage":21,"kill_prefix":22,"remark_with_event":17,"authorize_upgrade_without_checks":23,"apply_authorized_upgrade":19},"2":{"37":46,"set_validation_data":44,"sudo_send_upward_message":45,"enact_authorized_upgrade":19},"3":{"set":51},"4":0,"5":{"38":57,"39":56,"40":63,"transfer_allow_death":56,"transfer_all":58,"force_unreserve":59,"upgrade_accounts":60,"force_set_balance":61,"force_adjust_total_issuance":62},"7":0,"8":0,"9":{"vest":79,"vest_other":80,"vested_transfer":81,"force_vested_transfer":82,"merge_schedules":83,"force_remove_vesting_schedule":84},"10":0,"11":{"set_invulnerables":90,"set_desired_candidates":91,"set_candidacy_bond":92,"register_as_candidate":79,"leave_intent":79,"add_invulnerable":93,"remove_invulnerable":93,"update_bond":94,"take_candidate_slot":95},"12":{"set_keys":106,"purge_keys":79},"14":0,"15":0,"16":{"suspend_xcm_execution":79,"resume_xcm_execution":79,"update_suspend_threshold":114,"update_drop_threshold":114,"update_resume_threshold":114},"17":{"send":126,"teleport_assets":127,"reserve_transfer_assets":127,"execute":128,"force_xcm_version":129,"force_default_xcm_version":130,"force_subscribe_version_notify":131,"force_unsubscribe_version_notify":131,"limited_reserve_transfer_assets":132,"limited_teleport_assets":132,"force_suspension":133,"transfer_assets":132,"claim_assets":134,"transfer_assets_using_type_and_then":135},"18":0,"19":{"report_bridge_status":156},"20":{"reap_page":161,"execute_overweight":162},"21":{"batch":167,"as_derivative":168,"batch_all":167,"dispatch_as":169,"force_batch":167,"with_weight":170},"22":{"as_multi_threshold_1":175,"as_multi":176,"approve_as_multi":177,"cancel_as_multi":178},"23":{"proxy":185,"add_proxy":186,"remove_proxy":186,"remove_proxies":79,"create_pure":187,"kill_pure":188,"announce":189,"remove_announcement":189,"reject_announcement":190,"proxy_announced":191},"28":2,"32":{"40":248,"41":244,"42":245,"47":247,"48":249,"49":251,"50":251,"53":253,"54":254,"55":260,"56":251,"60":255,"61":256,"70":246,"71":250,"72":258,"73":259,"74":261,"75":252,"76":262,"77":263,"78":264,"79":265,"freeze_collection":252,"thaw_collection":252,"force_item_status":257},"33":{"40":251,"41":294,"42":295,"47":297,"48":249,"53":253,"54":300,"55":309,"56":251,"60":303,"61":255,"70":296,"71":250,"72":305,"73":307,"74":310,"75":252,"76":262,"77":263,"78":264,"79":265,"force_mint":298,"lock_item_transfer":251,"unlock_item_transfer":251,"lock_collection":299,"force_collection_owner":301,"force_collection_config":302,"clear_all_transfer_approvals":251,"lock_item_properties":304,"force_set_attribute":306,"approve_item_attributes":255,"cancel_item_attributes_approval":308,"update_mint_settings":311,"pay_tips":312,"create_swap":313,"cancel_swap":314,"claim_swap":315,"mint_pre_signed":316,"set_attributes_pre_signed":317},"34":{"38":343,"39":342,"40":341,"41":337,"42":338,"43":339,"44":339,"45":339,"46":339,"47":340,"48":342,"49":344,"50":344,"51":339,"52":339,"53":345,"54":346,"55":347,"56":339,"57":348,"58":339,"59":349,"60":350,"61":351,"62":352,"63":353,"64":339,"65":354,"66":355,"67":344,"68":344,"69":344},"35":2,"36":{"64":375,"create_pool":375,"add_liquidity":376,"remove_liquidity":377,"swap_exact_tokens_for_tokens":378,"swap_tokens_for_exact_tokens":379}},"events":{"1":{"ExtrinsicSuccess":24,"ExtrinsicFailed":25,"CodeUpdated":26,"NewAccount":27,"KilledAccount":27,"Remarked":28,"UpgradeAuthorized":29},"2":{"ValidationFunctionStored":26,"ValidationFunctionApplied":47,"ValidationFunctionDiscarded":26,"DownwardMessagesReceived":48,"DownwardMessagesProcessed":49,"UpwardMessageSent":50},"3":0,"4":0,"5":{"80":68,"81":71,"82":68,"83":68,"Endowed":64,"DustLost":65,"Transfer":66,"BalanceSet":67,"Reserved":68,"Unreserved":68,"ReserveRepatriated":69,"Deposit":68,"Withdraw":68,"Slashed":68,"Minted":68,"Suspended":68,"Restored":68,"Upgraded":70,"Rescinded":71,"Locked":68,"Unlocked":68,"TotalIssuanceForced":72},"7":{"TransactionFeePaid":74},"8":{"AssetTxFeePaid":75,"AssetRefundFailed":76},"9":{"VestingUpdated":85,"VestingCompleted":27},"10":0,"11":{"NewInvulnerables":96,"InvulnerableAdded":97,"InvulnerableRemoved":97,"NewDesiredCandidates":98,"NewCandidacyBond":99,"CandidateAdded":100,"CandidateBondUpdated":100,"CandidateRemoved":97,"CandidateReplaced":101,"InvalidInvulnerableSkipped":97},"12":{"NewSession":107},"14":0,"15":0,"16":{"XcmpMessageSent":115},"17":{"Attempted":136,"Sent":137,"UnexpectedResponse":138,"ResponseReady":139,"Notified":140,"NotifyOverweight":141,"NotifyDispatchError":140,"NotifyDecodeFailed":140,"InvalidResponder":142,"InvalidResponderVersion":138,"ResponseTaken":143,"AssetsTrapped":144,"VersionChangeNotified":145,"SupportedVersionChanged":146,"NotifyTargetSendFail":147,"NotifyTargetMigrationFail":148,"InvalidQuerierVersion":138,"InvalidQuerier":149,"VersionNotifyStarted":150,"VersionNotifyRequested":150,"VersionNotifyUnrequested":150,"FeesPaid":151,"AssetsClaimed":144,"VersionMigrationFinished":152},"18":{"InvalidFormat":153,"UnsupportedVersion":153,"ExecutedDownward":154},"19":0,"20":{"ProcessingFailed":163,"Processed":164,"OverweightEnqueued":165,"PageReaped":166},"21":{"BatchInterrupted":171,"BatchCompleted":26,"BatchCompletedWithErrors":26,"ItemCompleted":26,"ItemFailed":172,"DispatchedAs":173},"22":{"NewMultisig":179,"MultisigApproval":180,"MultisigExecuted":181,"MultisigCancelled":182},"23":{"ProxyExecuted":173,"PureCreated":192,"Announced":193,"ProxyAdded":194,"ProxyRemoved":194},"28":3,"32":{"80":269,"81":269,"82":271,"83":271,"84":266,"85":270,"86":273,"87":272,"93":268,"94":267,"95":276,"96":271,"97":274,"98":274,"106":275,"107":268,"108":277,"109":278,"110":279,"111":280,"112":281,"113":282,"114":271,"115":283,"CollectionFrozen":268,"CollectionThawed":268,"ItemStatusChanged":268},"33":{"80":269,"81":269,"84":266,"85":270,"86":319,"87":272,"93":268,"94":267,"98":274,"106":321,"107":268,"108":277,"109":323,"110":324,"111":280,"112":281,"113":282,"114":271,"115":283,"ItemTransferLocked":271,"ItemTransferUnlocked":271,"ItemPropertiesLocked":318,"CollectionLocked":268,"TransferApproved":320,"AllApprovalsCancelled":269,"CollectionConfigChanged":268,"ItemMetadataSet":322,"ItemMetadataCleared":271,"ItemAttributesApprovalAdded":325,"ItemAttributesApprovalRemoved":325,"CollectionMintSettingsUpdated":268,"NextCollectionIdIncremented":326,"TipSent":327,"SwapCreated":328,"SwapCancelled":328,"SwapClaimed":329,"PreSignedAttributesSet":330,"PalletAttributeSet":331},"34":{"80":359,"81":357,"82":362,"83":362,"84":356,"85":358,"86":360,"87":361,"88":363,"89":363,"90":364,"91":365,"92":363,"93":363,"94":361,"95":366,"96":363,"97":367,"98":368,"99":369,"100":363,"101":370,"102":371,"103":362,"104":372,"105":372},"35":3,"36":{"102":385,"PoolCreated":380,"LiquidityAdded":381,"LiquidityRemoved":382,"SwapExecuted":383,"SwapCreditExecuted":384}},"constants":{"1":{"BlockWeights":13,"BlockLength":14,"BlockHashCount":1,"DbWeight":15,"Version":16,"SS58Prefix":1},"2":{"SelfParaId":1},"3":{"MinimumPeriod":42},"4":0,"5":{"ExistentialDeposit":42,"MaxLocks":1,"MaxReserves":1,"MaxFreezes":1},"7":{"OperationalFeeMultiplier":1},"8":0,"9":{"MinVestedTransfer":42,"MaxVestingSchedules":1},"10":0,"11":0,"12":0,"14":{"SlotDuration":42},"15":0,"16":{"MaxInboundSuspended":1,"MaxActiveOutboundChannels":1,"MaxPageSize":1},"17":0,"18":0,"19":0,"20":{"HeapSize":1,"MaxStale":1,"ServiceWeight":160,"IdleMaxServiceWeight":160},"21":{"batched_calls_limit":1},"22":{"DepositBase":42,"DepositFactor":42,"MaxSignatories":1},"23":{"ProxyDepositBase":42,"ProxyDepositFactor":42,"MaxProxies":1,"MaxPending":1,"AnnouncementDepositBase":42,"AnnouncementDepositFactor":42},"28":4,"32":{"119":42,"122":1,"123":42,"124":42,"125":42,"126":42,"127":1,"128":1},"33":{"119":42,"122":1,"123":42,"124":42,"125":42,"126":42,"127":1,"128":1,"ApprovalsLimit":1,"ItemAttributesApprovalsLimit":1,"MaxTips":1,"MaxDeadlineDuration":1,"MaxAttributesPerCall":1,"Features":42},"34":4,"35":4,"36":{"LPFee":1,"PoolSetupFee":42,"PoolSetupFeeAsset":336,"LiquidityWithdrawalFee":1,"MintMinLiquidity":42,"MaxSwapPathLength":1,"PalletId":374}},"apis":{"26":{"metadata":392,"metadata_at_version":393,"metadata_versions":394},"AuraApi":{"slot_duration":386,"authorities":387},"AuraUnincludedSegmentApi":{"can_build_upon":388},"Core":{"version":389,"execute_block":390,"initialize_block":391},"BlockBuilder":{"apply_extrinsic":395,"finalize_block":396,"inherent_extrinsics":397,"check_inherents":398},"TaggedTransactionQueue":{"validate_transaction":399},"OffchainWorkerApi":{"offchain_worker":400},"SessionKeys":{"generate_session_keys":401,"decode_session_keys":402},"AccountNonceApi":{"account_nonce":403},"TransactionPaymentApi":{"129":406,"130":407,"query_info":404,"query_fee_details":405},"TransactionPaymentCallApi":{"129":406,"130":407,"query_call_info":408,"query_call_fee_details":409},"XcmPaymentApi":{"query_acceptable_payment_assets":410,"query_xcm_weight":411,"query_weight_to_asset_fee":412,"query_delivery_fees":413},"DryRunApi":{"dry_run_call":414,"dry_run_xcm":415},"LocationToAccountApi":{"convert_location":416},"FungiblesApi":{"query_account_balances":417},"CollectCollationInfo":{"collect_collation_info":418},"GenesisBuilder":{"build_state":419,"get_preset":420,"preset_names":421},"AssetConversionApi":{"quote_price_tokens_for_exact_tokens":422,"quote_price_exact_tokens_for_tokens":422,"get_reserves":423}}}},[{},{"0":196,"24":195,"25":197,"26":198,"27":1},{"38":205,"39":204,"40":203,"41":199,"42":200,"43":201,"44":201,"45":201,"46":201,"47":202,"48":204,"49":206,"50":206,"51":201,"52":201,"53":207,"54":208,"55":209,"56":201,"57":210,"58":201,"59":211,"60":212,"61":213,"62":214,"63":215,"64":201,"65":216,"66":217,"67":206,"68":206,"69":206},{"80":221,"81":219,"82":224,"83":224,"84":218,"85":220,"86":222,"87":223,"88":225,"89":225,"90":226,"91":227,"92":225,"93":225,"94":223,"95":228,"96":225,"97":229,"98":230,"99":231,"100":225,"101":232,"102":233,"103":224,"104":234,"105":234},{"116":1,"117":42,"118":42,"119":42,"120":42,"121":42,"122":1}],["Account","System","ParachainSystem","Timestamp","ParachainInfo","Balances","StorageVersion","TransactionPayment","AssetTxPayment","Vesting","Authorship","CollatorSelection","Session","Authorities","Aura","AuraExt","XcmpQueue","PolkadotXcm","CumulusXcm","ToKusamaXcmRouter","MessageQueue","Utility","Multisig","Proxy","Asset","Approvals","Metadata","NextAssetId","Assets","OwnershipAcceptance","Attribute","ItemPriceOf","Uniques","Nfts","ForeignAssets","PoolAssets","AssetConversion","authorize_upgrade","force_transfer","transfer_keep_alive","burn","create","force_create","start_destroy","destroy_accounts","destroy_approvals","finish_destroy","mint","transfer","freeze","thaw","freeze_asset","thaw_asset","transfer_ownership","set_team","set_metadata","clear_metadata","force_set_metadata","force_clear_metadata","force_asset_status","approve_transfer","cancel_approval","force_cancel_approval","transfer_approved","touch","refund","set_min_balance","touch_other","refund_other","block","destroy","redeposit","set_attribute","clear_attribute","set_collection_metadata","clear_collection_metadata","set_accept_ownership","set_collection_max_supply","set_price","buy_item","Burned","Issued","Frozen","Thawed","Created","Transferred","TeamChanged","OwnerChanged","AssetFrozen","AssetThawed","AccountsDestroyed","ApprovalsDestroyed","DestructionStarted","Destroyed","ForceCreated","MetadataSet","MetadataCleared","ApprovedTransfer","ApprovalCancelled","TransferredApproved","AssetStatusChanged","AssetMinBalanceChanged","Touched","Blocked","Deposited","Withdrawn","CollectionMetadataSet","CollectionMetadataCleared","Redeposited","AttributeSet","AttributeCleared","OwnershipAcceptanceChanged","CollectionMaxSupplySet","ItemPriceSet","ItemPriceRemoved","ItemBought","RemoveItemsLimit","AssetDeposit","AssetAccountDeposit","MetadataDepositBase","MetadataDepositPerByte","ApprovalDeposit","StringLimit","CollectionDeposit","ItemDeposit","AttributeDepositBase","DepositPerByte","KeyLimit","ValueLimit","query_weight_to_fee","query_length_to_fee"]]`); +var replaceTokens = (obj) => Object.fromEntries( + Object.entries(obj).map(([key, value]) => { + const unwrappedValue = typeof value === "object" ? replaceTokens(value) : value; + const numericKey = Number(key); + if (Number.isNaN(numericKey)) { + return [key, unwrappedValue]; + } + return [tokens[numericKey], unwrappedValue]; + }) +); +var tokenizedCommonTrees = commonTrees.map(replaceTokens); +var unwrap = (obj, depth) => depth === 0 ? obj : Object.fromEntries( + Object.entries(obj).map(([key, value]) => [ + key, + unwrap( + typeof value === "object" ? value : tokenizedCommonTrees[value], + depth - 1 + ) + ]) +); +var getChainDescriptors = (key) => unwrap(replaceTokens(minified[key]), 2); +var Assethub = getChainDescriptors("assethub"); +export { + Assethub +}; diff --git a/.papi/descriptors/dist/descriptors.d.ts b/.papi/descriptors/dist/descriptors.d.ts new file mode 100644 index 0000000000..43e1e9cc54 --- /dev/null +++ b/.papi/descriptors/dist/descriptors.d.ts @@ -0,0 +1 @@ +export declare const Assethub: Record; diff --git a/.papi/descriptors/dist/index.d.ts b/.papi/descriptors/dist/index.d.ts new file mode 100644 index 0000000000..e20576ad0a --- /dev/null +++ b/.papi/descriptors/dist/index.d.ts @@ -0,0 +1,3 @@ +export { default as assethub, AssethubCallData } from "./assethub"; +export type * from "./assethub"; +export { DigestItem, Phase, DispatchClass, TokenError, ArithmeticError, TransactionalError, BalanceStatus, TransactionPaymentEvent, XcmV3Junctions, XcmV3Junction, XcmV3JunctionNetworkId, XcmV3JunctionBodyId, XcmV2JunctionBodyPart, VestingEvent, SessionEvent, XcmV4TraitsOutcome, XcmV3TraitsError, XcmV4Instruction, XcmV3MultiassetFungibility, XcmV3MultiassetAssetInstance, XcmV4Response, XcmV3MaybeErrorCode, XcmV2OriginKind, XcmV4AssetAssetFilter, XcmV4AssetWildAsset, XcmV2MultiassetWildFungibility, XcmV3WeightLimit, XcmVersionedAssets, XcmV2MultiassetAssetId, XcmV2MultilocationJunctions, XcmV2Junction, XcmV2NetworkId, XcmV2BodyId, XcmV2MultiassetFungibility, XcmV2MultiassetAssetInstance, XcmV3MultiassetAssetId, XcmVersionedLocation, UpgradeGoAhead, UpgradeRestriction, BalancesTypesReasons, TransactionPaymentReleases, Version, XcmPalletQueryStatus, XcmVersionedResponse, XcmV2Response, XcmV2TraitsError, XcmV3Response, XcmPalletVersionMigrationStage, XcmVersionedAssetId, MultiAddress, BalancesAdjustmentDirection, XcmVersionedXcm, XcmV2Instruction, XcmV2MultiAssetFilter, XcmV2MultiassetWildMultiAsset, XcmV2WeightLimit, XcmV3Instruction, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetWildMultiAsset, DispatchRawOrigin, XcmPalletOrigin, MultiSignature, TransactionValidityError, TransactionValidityInvalidTransaction, TransactionValidityUnknownTransaction, TransactionValidityTransactionSource } from './common-types'; diff --git a/.papi/descriptors/dist/index.js b/.papi/descriptors/dist/index.js new file mode 100644 index 0000000000..77510b2ff8 --- /dev/null +++ b/.papi/descriptors/dist/index.js @@ -0,0 +1,236 @@ +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// .papi/descriptors/src/descriptors.ts +var descriptors_exports = {}; +__export(descriptors_exports, { + Assethub: () => Assethub +}); +var minified, commonTrees, tokens, replaceTokens, tokenizedCommonTrees, unwrap, getChainDescriptors, Assethub; +var init_descriptors = __esm({ + ".papi/descriptors/src/descriptors.ts"() { + "use strict"; + [minified, commonTrees, tokens] = JSON.parse(`[{"assethub":{"storage":{"1":{"0":0,"ExtrinsicCount":1,"InherentsApplied":2,"BlockWeight":3,"AllExtrinsicsLen":1,"BlockHash":4,"ExtrinsicData":5,"Number":1,"ParentHash":6,"Digest":7,"Events":8,"EventCount":1,"EventTopics":9,"LastRuntimeUpgrade":10,"UpgradedToU32RefCount":2,"UpgradedToTripleRefCount":2,"ExecutionPhase":11,"AuthorizedUpgrade":12},"2":{"UnincludedSegment":31,"AggregatedUnincludedSegment":32,"PendingValidationCode":33,"NewValidationCode":33,"ValidationData":34,"DidSetValidationCode":2,"LastRelayChainBlockNumber":1,"UpgradeRestrictionSignal":35,"UpgradeGoAhead":36,"RelayStateProof":37,"RelevantMessagingState":38,"HostConfiguration":39,"LastDmqMqcHead":6,"LastHrmpMqcHeads":40,"ProcessedDownwardMessages":1,"HrmpWatermark":1,"HrmpOutboundMessages":41,"UpwardMessages":37,"PendingUpwardMessages":37,"UpwardDeliveryFeeFactor":42,"AnnouncedHrmpMessagesPerCandidate":1,"ReservedXcmpWeightOverride":43,"ReservedDmpWeightOverride":43,"CustomValidationHeadData":33},"3":{"Now":42,"DidUpdate":2},"4":{"ParachainId":1},"5":{"0":52,"TotalIssuance":42,"InactiveIssuance":42,"Locks":53,"Reserves":54,"Holds":55,"Freezes":55},"7":{"6":73,"NextFeeMultiplier":42},"8":0,"9":{"6":78,"9":77},"10":{"Author":86},"11":{"Invulnerables":87,"CandidateList":88,"LastAuthoredBlock":89,"DesiredCandidates":1,"CandidacyBond":42},"12":{"Validators":87,"CurrentIndex":1,"QueuedChanged":2,"QueuedKeys":102,"DisabledValidators":103,"NextKeys":104,"KeyOwner":105},"14":{"13":108,"CurrentSlot":42},"15":{"13":108,"SlotInfo":109},"16":{"InboundXcmpSuspended":103,"OutboundXcmpStatus":110,"OutboundXcmpMessages":111,"SignalMessages":5,"QueueConfig":112,"QueueSuspended":2,"DeliveryFeeFactor":113},"17":{"QueryCounter":42,"Queries":116,"AssetTraps":117,"SafeXcmVersion":1,"SupportedVersion":118,"VersionNotifiers":119,"VersionNotifyTargets":120,"VersionDiscoveryQueue":121,"CurrentMigration":122,"RemoteLockedFungibles":123,"LockedFungibles":124,"XcmExecutionSuspended":2,"ShouldRecordXcm":2,"RecordedXcm":125},"18":0,"19":{"Bridge":155},"20":{"BookStateFor":157,"ServiceHead":158,"Pages":159},"21":0,"22":{"Multisigs":174},"23":{"Proxies":183,"Announcements":184},"28":1,"32":{"0":236,"24":238,"29":89,"30":241,"31":242,"Class":235,"ClassAccount":237,"ClassMetadataOf":239,"InstanceMetadataOf":240,"CollectionMaxSupply":243},"33":{"0":236,"29":89,"30":289,"31":242,"Collection":284,"CollectionAccount":237,"CollectionRoleOf":285,"Item":286,"CollectionMetadataOf":287,"ItemMetadataOf":288,"ItemAttributesApprovalsOf":290,"NextCollectionId":1,"PendingSwapOf":291,"CollectionConfigOf":292,"ItemConfigOf":293},"34":{"0":333,"24":332,"25":334,"26":335,"27":336},"35":1,"36":{"Pools":373,"NextPoolAssetId":1}},"tx":{"1":{"37":23,"remark":17,"set_heap_pages":18,"set_code":19,"set_code_without_checks":19,"set_storage":20,"kill_storage":21,"kill_prefix":22,"remark_with_event":17,"authorize_upgrade_without_checks":23,"apply_authorized_upgrade":19},"2":{"37":46,"set_validation_data":44,"sudo_send_upward_message":45,"enact_authorized_upgrade":19},"3":{"set":51},"4":0,"5":{"38":57,"39":56,"40":63,"transfer_allow_death":56,"transfer_all":58,"force_unreserve":59,"upgrade_accounts":60,"force_set_balance":61,"force_adjust_total_issuance":62},"7":0,"8":0,"9":{"vest":79,"vest_other":80,"vested_transfer":81,"force_vested_transfer":82,"merge_schedules":83,"force_remove_vesting_schedule":84},"10":0,"11":{"set_invulnerables":90,"set_desired_candidates":91,"set_candidacy_bond":92,"register_as_candidate":79,"leave_intent":79,"add_invulnerable":93,"remove_invulnerable":93,"update_bond":94,"take_candidate_slot":95},"12":{"set_keys":106,"purge_keys":79},"14":0,"15":0,"16":{"suspend_xcm_execution":79,"resume_xcm_execution":79,"update_suspend_threshold":114,"update_drop_threshold":114,"update_resume_threshold":114},"17":{"send":126,"teleport_assets":127,"reserve_transfer_assets":127,"execute":128,"force_xcm_version":129,"force_default_xcm_version":130,"force_subscribe_version_notify":131,"force_unsubscribe_version_notify":131,"limited_reserve_transfer_assets":132,"limited_teleport_assets":132,"force_suspension":133,"transfer_assets":132,"claim_assets":134,"transfer_assets_using_type_and_then":135},"18":0,"19":{"report_bridge_status":156},"20":{"reap_page":161,"execute_overweight":162},"21":{"batch":167,"as_derivative":168,"batch_all":167,"dispatch_as":169,"force_batch":167,"with_weight":170},"22":{"as_multi_threshold_1":175,"as_multi":176,"approve_as_multi":177,"cancel_as_multi":178},"23":{"proxy":185,"add_proxy":186,"remove_proxy":186,"remove_proxies":79,"create_pure":187,"kill_pure":188,"announce":189,"remove_announcement":189,"reject_announcement":190,"proxy_announced":191},"28":2,"32":{"40":248,"41":244,"42":245,"47":247,"48":249,"49":251,"50":251,"53":253,"54":254,"55":260,"56":251,"60":255,"61":256,"70":246,"71":250,"72":258,"73":259,"74":261,"75":252,"76":262,"77":263,"78":264,"79":265,"freeze_collection":252,"thaw_collection":252,"force_item_status":257},"33":{"40":251,"41":294,"42":295,"47":297,"48":249,"53":253,"54":300,"55":309,"56":251,"60":303,"61":255,"70":296,"71":250,"72":305,"73":307,"74":310,"75":252,"76":262,"77":263,"78":264,"79":265,"force_mint":298,"lock_item_transfer":251,"unlock_item_transfer":251,"lock_collection":299,"force_collection_owner":301,"force_collection_config":302,"clear_all_transfer_approvals":251,"lock_item_properties":304,"force_set_attribute":306,"approve_item_attributes":255,"cancel_item_attributes_approval":308,"update_mint_settings":311,"pay_tips":312,"create_swap":313,"cancel_swap":314,"claim_swap":315,"mint_pre_signed":316,"set_attributes_pre_signed":317},"34":{"38":343,"39":342,"40":341,"41":337,"42":338,"43":339,"44":339,"45":339,"46":339,"47":340,"48":342,"49":344,"50":344,"51":339,"52":339,"53":345,"54":346,"55":347,"56":339,"57":348,"58":339,"59":349,"60":350,"61":351,"62":352,"63":353,"64":339,"65":354,"66":355,"67":344,"68":344,"69":344},"35":2,"36":{"64":375,"create_pool":375,"add_liquidity":376,"remove_liquidity":377,"swap_exact_tokens_for_tokens":378,"swap_tokens_for_exact_tokens":379}},"events":{"1":{"ExtrinsicSuccess":24,"ExtrinsicFailed":25,"CodeUpdated":26,"NewAccount":27,"KilledAccount":27,"Remarked":28,"UpgradeAuthorized":29},"2":{"ValidationFunctionStored":26,"ValidationFunctionApplied":47,"ValidationFunctionDiscarded":26,"DownwardMessagesReceived":48,"DownwardMessagesProcessed":49,"UpwardMessageSent":50},"3":0,"4":0,"5":{"80":68,"81":71,"82":68,"83":68,"Endowed":64,"DustLost":65,"Transfer":66,"BalanceSet":67,"Reserved":68,"Unreserved":68,"ReserveRepatriated":69,"Deposit":68,"Withdraw":68,"Slashed":68,"Minted":68,"Suspended":68,"Restored":68,"Upgraded":70,"Rescinded":71,"Locked":68,"Unlocked":68,"TotalIssuanceForced":72},"7":{"TransactionFeePaid":74},"8":{"AssetTxFeePaid":75,"AssetRefundFailed":76},"9":{"VestingUpdated":85,"VestingCompleted":27},"10":0,"11":{"NewInvulnerables":96,"InvulnerableAdded":97,"InvulnerableRemoved":97,"NewDesiredCandidates":98,"NewCandidacyBond":99,"CandidateAdded":100,"CandidateBondUpdated":100,"CandidateRemoved":97,"CandidateReplaced":101,"InvalidInvulnerableSkipped":97},"12":{"NewSession":107},"14":0,"15":0,"16":{"XcmpMessageSent":115},"17":{"Attempted":136,"Sent":137,"UnexpectedResponse":138,"ResponseReady":139,"Notified":140,"NotifyOverweight":141,"NotifyDispatchError":140,"NotifyDecodeFailed":140,"InvalidResponder":142,"InvalidResponderVersion":138,"ResponseTaken":143,"AssetsTrapped":144,"VersionChangeNotified":145,"SupportedVersionChanged":146,"NotifyTargetSendFail":147,"NotifyTargetMigrationFail":148,"InvalidQuerierVersion":138,"InvalidQuerier":149,"VersionNotifyStarted":150,"VersionNotifyRequested":150,"VersionNotifyUnrequested":150,"FeesPaid":151,"AssetsClaimed":144,"VersionMigrationFinished":152},"18":{"InvalidFormat":153,"UnsupportedVersion":153,"ExecutedDownward":154},"19":0,"20":{"ProcessingFailed":163,"Processed":164,"OverweightEnqueued":165,"PageReaped":166},"21":{"BatchInterrupted":171,"BatchCompleted":26,"BatchCompletedWithErrors":26,"ItemCompleted":26,"ItemFailed":172,"DispatchedAs":173},"22":{"NewMultisig":179,"MultisigApproval":180,"MultisigExecuted":181,"MultisigCancelled":182},"23":{"ProxyExecuted":173,"PureCreated":192,"Announced":193,"ProxyAdded":194,"ProxyRemoved":194},"28":3,"32":{"80":269,"81":269,"82":271,"83":271,"84":266,"85":270,"86":273,"87":272,"93":268,"94":267,"95":276,"96":271,"97":274,"98":274,"106":275,"107":268,"108":277,"109":278,"110":279,"111":280,"112":281,"113":282,"114":271,"115":283,"CollectionFrozen":268,"CollectionThawed":268,"ItemStatusChanged":268},"33":{"80":269,"81":269,"84":266,"85":270,"86":319,"87":272,"93":268,"94":267,"98":274,"106":321,"107":268,"108":277,"109":323,"110":324,"111":280,"112":281,"113":282,"114":271,"115":283,"ItemTransferLocked":271,"ItemTransferUnlocked":271,"ItemPropertiesLocked":318,"CollectionLocked":268,"TransferApproved":320,"AllApprovalsCancelled":269,"CollectionConfigChanged":268,"ItemMetadataSet":322,"ItemMetadataCleared":271,"ItemAttributesApprovalAdded":325,"ItemAttributesApprovalRemoved":325,"CollectionMintSettingsUpdated":268,"NextCollectionIdIncremented":326,"TipSent":327,"SwapCreated":328,"SwapCancelled":328,"SwapClaimed":329,"PreSignedAttributesSet":330,"PalletAttributeSet":331},"34":{"80":359,"81":357,"82":362,"83":362,"84":356,"85":358,"86":360,"87":361,"88":363,"89":363,"90":364,"91":365,"92":363,"93":363,"94":361,"95":366,"96":363,"97":367,"98":368,"99":369,"100":363,"101":370,"102":371,"103":362,"104":372,"105":372},"35":3,"36":{"102":385,"PoolCreated":380,"LiquidityAdded":381,"LiquidityRemoved":382,"SwapExecuted":383,"SwapCreditExecuted":384}},"constants":{"1":{"BlockWeights":13,"BlockLength":14,"BlockHashCount":1,"DbWeight":15,"Version":16,"SS58Prefix":1},"2":{"SelfParaId":1},"3":{"MinimumPeriod":42},"4":0,"5":{"ExistentialDeposit":42,"MaxLocks":1,"MaxReserves":1,"MaxFreezes":1},"7":{"OperationalFeeMultiplier":1},"8":0,"9":{"MinVestedTransfer":42,"MaxVestingSchedules":1},"10":0,"11":0,"12":0,"14":{"SlotDuration":42},"15":0,"16":{"MaxInboundSuspended":1,"MaxActiveOutboundChannels":1,"MaxPageSize":1},"17":0,"18":0,"19":0,"20":{"HeapSize":1,"MaxStale":1,"ServiceWeight":160,"IdleMaxServiceWeight":160},"21":{"batched_calls_limit":1},"22":{"DepositBase":42,"DepositFactor":42,"MaxSignatories":1},"23":{"ProxyDepositBase":42,"ProxyDepositFactor":42,"MaxProxies":1,"MaxPending":1,"AnnouncementDepositBase":42,"AnnouncementDepositFactor":42},"28":4,"32":{"119":42,"122":1,"123":42,"124":42,"125":42,"126":42,"127":1,"128":1},"33":{"119":42,"122":1,"123":42,"124":42,"125":42,"126":42,"127":1,"128":1,"ApprovalsLimit":1,"ItemAttributesApprovalsLimit":1,"MaxTips":1,"MaxDeadlineDuration":1,"MaxAttributesPerCall":1,"Features":42},"34":4,"35":4,"36":{"LPFee":1,"PoolSetupFee":42,"PoolSetupFeeAsset":336,"LiquidityWithdrawalFee":1,"MintMinLiquidity":42,"MaxSwapPathLength":1,"PalletId":374}},"apis":{"26":{"metadata":392,"metadata_at_version":393,"metadata_versions":394},"AuraApi":{"slot_duration":386,"authorities":387},"AuraUnincludedSegmentApi":{"can_build_upon":388},"Core":{"version":389,"execute_block":390,"initialize_block":391},"BlockBuilder":{"apply_extrinsic":395,"finalize_block":396,"inherent_extrinsics":397,"check_inherents":398},"TaggedTransactionQueue":{"validate_transaction":399},"OffchainWorkerApi":{"offchain_worker":400},"SessionKeys":{"generate_session_keys":401,"decode_session_keys":402},"AccountNonceApi":{"account_nonce":403},"TransactionPaymentApi":{"129":406,"130":407,"query_info":404,"query_fee_details":405},"TransactionPaymentCallApi":{"129":406,"130":407,"query_call_info":408,"query_call_fee_details":409},"XcmPaymentApi":{"query_acceptable_payment_assets":410,"query_xcm_weight":411,"query_weight_to_asset_fee":412,"query_delivery_fees":413},"DryRunApi":{"dry_run_call":414,"dry_run_xcm":415},"LocationToAccountApi":{"convert_location":416},"FungiblesApi":{"query_account_balances":417},"CollectCollationInfo":{"collect_collation_info":418},"GenesisBuilder":{"build_state":419,"get_preset":420,"preset_names":421},"AssetConversionApi":{"quote_price_tokens_for_exact_tokens":422,"quote_price_exact_tokens_for_tokens":422,"get_reserves":423}}}},[{},{"0":196,"24":195,"25":197,"26":198,"27":1},{"38":205,"39":204,"40":203,"41":199,"42":200,"43":201,"44":201,"45":201,"46":201,"47":202,"48":204,"49":206,"50":206,"51":201,"52":201,"53":207,"54":208,"55":209,"56":201,"57":210,"58":201,"59":211,"60":212,"61":213,"62":214,"63":215,"64":201,"65":216,"66":217,"67":206,"68":206,"69":206},{"80":221,"81":219,"82":224,"83":224,"84":218,"85":220,"86":222,"87":223,"88":225,"89":225,"90":226,"91":227,"92":225,"93":225,"94":223,"95":228,"96":225,"97":229,"98":230,"99":231,"100":225,"101":232,"102":233,"103":224,"104":234,"105":234},{"116":1,"117":42,"118":42,"119":42,"120":42,"121":42,"122":1}],["Account","System","ParachainSystem","Timestamp","ParachainInfo","Balances","StorageVersion","TransactionPayment","AssetTxPayment","Vesting","Authorship","CollatorSelection","Session","Authorities","Aura","AuraExt","XcmpQueue","PolkadotXcm","CumulusXcm","ToKusamaXcmRouter","MessageQueue","Utility","Multisig","Proxy","Asset","Approvals","Metadata","NextAssetId","Assets","OwnershipAcceptance","Attribute","ItemPriceOf","Uniques","Nfts","ForeignAssets","PoolAssets","AssetConversion","authorize_upgrade","force_transfer","transfer_keep_alive","burn","create","force_create","start_destroy","destroy_accounts","destroy_approvals","finish_destroy","mint","transfer","freeze","thaw","freeze_asset","thaw_asset","transfer_ownership","set_team","set_metadata","clear_metadata","force_set_metadata","force_clear_metadata","force_asset_status","approve_transfer","cancel_approval","force_cancel_approval","transfer_approved","touch","refund","set_min_balance","touch_other","refund_other","block","destroy","redeposit","set_attribute","clear_attribute","set_collection_metadata","clear_collection_metadata","set_accept_ownership","set_collection_max_supply","set_price","buy_item","Burned","Issued","Frozen","Thawed","Created","Transferred","TeamChanged","OwnerChanged","AssetFrozen","AssetThawed","AccountsDestroyed","ApprovalsDestroyed","DestructionStarted","Destroyed","ForceCreated","MetadataSet","MetadataCleared","ApprovedTransfer","ApprovalCancelled","TransferredApproved","AssetStatusChanged","AssetMinBalanceChanged","Touched","Blocked","Deposited","Withdrawn","CollectionMetadataSet","CollectionMetadataCleared","Redeposited","AttributeSet","AttributeCleared","OwnershipAcceptanceChanged","CollectionMaxSupplySet","ItemPriceSet","ItemPriceRemoved","ItemBought","RemoveItemsLimit","AssetDeposit","AssetAccountDeposit","MetadataDepositBase","MetadataDepositPerByte","ApprovalDeposit","StringLimit","CollectionDeposit","ItemDeposit","AttributeDepositBase","DepositPerByte","KeyLimit","ValueLimit","query_weight_to_fee","query_length_to_fee"]]`); + replaceTokens = (obj) => Object.fromEntries( + Object.entries(obj).map(([key, value]) => { + const unwrappedValue = typeof value === "object" ? replaceTokens(value) : value; + const numericKey = Number(key); + if (Number.isNaN(numericKey)) { + return [key, unwrappedValue]; + } + return [tokens[numericKey], unwrappedValue]; + }) + ); + tokenizedCommonTrees = commonTrees.map(replaceTokens); + unwrap = (obj, depth) => depth === 0 ? obj : Object.fromEntries( + Object.entries(obj).map(([key, value]) => [ + key, + unwrap( + typeof value === "object" ? value : tokenizedCommonTrees[value], + depth - 1 + ) + ]) + ); + getChainDescriptors = (key) => unwrap(replaceTokens(minified[key]), 2); + Assethub = getChainDescriptors("assethub"); + } +}); + +// .papi/descriptors/src/metadataTypes.ts +var metadataTypes_exports = {}; +__export(metadataTypes_exports, { + default: () => metadataTypes_default +}); +var content, metadataTypes_default; +var init_metadataTypes = __esm({ + ".papi/descriptors/src/metadataTypes.ts"() { + "use strict"; + content = "oQYAAAAQAQEFAAQBAQUAFAEBBQAcAAQAIAAEACQBAQUAIAEBBQAwAQEFABkCACAAIQIBAQUAKQIBAQUANAEBBQAtAgEBBQA9AgEBBQBBAgEBBQBFAgEBBQBRAgEABBhyZW1hcmskAQEFAQAEFHBhZ2VzCAEBBQEABBBjb2RlJAEBBQEABBRpdGVtc1kCAQEFAQAEEGtleXNdAgEBBQEACBhwcmVmaXgkHHN1YmtleXMEAQEFAQAEJGNvZGVfaGFzaCABAQUBAQUBAAQ0ZGlzcGF0Y2hfaW5mb0ABAQUBAAg4ZGlzcGF0Y2hfZXJyb3KUNGRpc3BhdGNoX2luZm9AAQEFAQEFAQEFAQAEHGFjY291bnQAAQEFAQAIGHNlbmRlcgAQaGFzaCABAQUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFAEBBQEBBQEBBQB9AgEBBQCBAgEBBQAkAQEFAIUCAQEFAI0CAQEFAHUCAQEFAF0CAQEFAKECAQEFAKkCAQEFALECAQEFALkCAQEFAAgBAQUAGAEABBBkYXRh1QIBAQUBAAQcbWVzc2FnZSQBAQUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFAEBBQEBBQEABFRyZWxheV9jaGFpbl9ibG9ja19udW0EAQEFAQAEFGNvdW50BAEBBQEACCx3ZWlnaHRfdXNlZBggZG1xX2hlYWQgAQEFAQAEMG1lc3NhZ2VfaGFzaJwBAAQMbm93CAEBBQAAAAwAAADhAgAAAOkCAAAA8QIBAAgQZGVzdPUCFHZhbHVlCAEBBQEADBhzb3VyY2X1AhBkZXN09QIUdmFsdWUIAQEFAQAIEGRlc3T1AihrZWVwX2FsaXZlFAEBBQEACAx3aG/1AhhhbW91bnQIAQEFAQAEDHdob/QBAQUBAAgMd2hv9QIgbmV3X2ZyZWUIAQEFAQAIJGRpcmVjdGlvbvkCFGRlbHRhCAEBBQEACBR2YWx1ZQgoa2VlcF9hbGl2ZRQBAQUBAQUBAAgcYWNjb3VudAAwZnJlZV9iYWxhbmNlCAEBBQEACBxhY2NvdW50ABhhbW91bnQIAQEFAQAMEGZyb20ACHRvABhhbW91bnQIAQEFAQAIDHdobwAQZnJlZQgBAQUBAAgMd2hvABhhbW91bnQIAQEFAQAQEGZyb20ACHRvABhhbW91bnQISGRlc3RpbmF0aW9uX3N0YXR1c6QBAQUBAAQMd2hvAAEBBQEABBhhbW91bnQIAQEFAQAIDG9sZAgMbmV3CAEBBQD9AgEBBQEADAx3aG8AKGFjdHVhbF9mZWUIDHRpcAgBAQUBABAMd2hvAChhY3R1YWxfZmVlCAx0aXAIIGFzc2V0X2lk6AEBBQEABEhuYXRpdmVfYW1vdW50X2tlcHQIAAAABQMBAQUACQMBAQUBAQUBAAQYdGFyZ2V09QIBAQUBAAgYdGFyZ2V09QIgc2NoZWR1bGUBAwEBBQEADBhzb3VyY2X1Ahh0YXJnZXT1AiBzY2hlZHVsZQEDAQEFAQAIPHNjaGVkdWxlMV9pbmRleAQ8c2NoZWR1bGUyX2luZGV4BAEBBQEACBh0YXJnZXT1AjhzY2hlZHVsZV9pbmRleAQBAQUBAQUBAAgcYWNjb3VudAAgdW52ZXN0ZWQIAQEFAAABAQUA9AEBBQARAwAAAAQBAAQMbmV39AEBBQEABAxtYXgEAQEFAQAEEGJvbmQIAQEFAQAEDHdobwABAQUBAAQsbmV3X2RlcG9zaXQIAQEFAQAIHGRlcG9zaXQIGHRhcmdldAABAQUBAQUBAAQ0aW52dWxuZXJhYmxlc/QBAQUBAAQoYWNjb3VudF9pZAABAQUBAARIZGVzaXJlZF9jYW5kaWRhdGVzBAEBBQEABCxib25kX2Ftb3VudAgBAQUBAAgoYWNjb3VudF9pZAAcZGVwb3NpdAgBAQUBAAwMb2xkAAxuZXcAHGRlcG9zaXQIAQEFABkDAQEFANEBAAAAIAAdAwAAAQAIEGtleXMgFHByb29mJAEBBQEBBQEABDRzZXNzaW9uX2luZGV4BAEBBQARAgEBBQAhAwEBBQAtAwAxAwAkAQEFADUDAAQACAEABAxuZXcEAQEFAQEFAQAEMG1lc3NhZ2VfaGFzaCAACABdAwAgAAQAYQMABABhAwAIAGEDAGUDAQEFAG0DAQEFAHUDAH0DAIkDAAAAkQMBAQUAXQEBAAgQZGVzdJkBHG1lc3NhZ2W5AwEBBQEAEBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQBAQUBAAgcbWVzc2FnZbkDKG1heF93ZWlnaHQYAQEFAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBAEBBQEABERtYXliZV94Y21fdmVyc2lvbtUBAQEFAQAEIGxvY2F0aW9umQEBAQUBABQQZGVzdJkBLGJlbmVmaWNpYXJ5mQEYYXNzZXRzlQE4ZmVlX2Fzc2V0X2l0ZW0EMHdlaWdodF9saW1pdFUBAQEFAQAEJHN1c3BlbmRlZBQBAQUBAAgYYXNzZXRzlQEsYmVuZWZpY2lhcnmZAQEBBQEAHBBkZXN0mQEYYXNzZXRzlQFQYXNzZXRzX3RyYW5zZmVyX3R5cGW9AzhyZW1vdGVfZmVlc19pZHkDSGZlZXNfdHJhbnNmZXJfdHlwZb0DSGN1c3RvbV94Y21fb25fZGVzdLkDMHdlaWdodF9saW1pdFUBAQEFAQEFAQAEHG91dGNvbWUJAQEBBQEAEBhvcmlnaW7oLGRlc3RpbmF0aW9u6BxtZXNzYWdlXQEobWVzc2FnZV9pZCABAQUBAAgYb3JpZ2lu6CBxdWVyeV9pZAgBAQUBAAggcXVlcnlfaWQIIHJlc3BvbnNlOQEBAQUBAAwgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleAQBAQUBABQgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleAQ0YWN0dWFsX3dlaWdodBhMbWF4X2J1ZGdldGVkX3dlaWdodBgBAQUBAAwYb3JpZ2lu6CBxdWVyeV9pZAhEZXhwZWN0ZWRfbG9jYXRpb249AQEBBQEABCBxdWVyeV9pZAgBAQUBAAwQaGFzaCAYb3JpZ2lu6Bhhc3NldHOVAQEBBQEAECxkZXN0aW5hdGlvbugYcmVzdWx0BBBjb3N0IQEobWVzc2FnZV9pZCABAQUBAAggbG9jYXRpb27oHHZlcnNpb24EAQEFAQAMIGxvY2F0aW9u6CBxdWVyeV9pZAgUZXJyb3IFAQEBBQEACCBsb2NhdGlvbpkBIHF1ZXJ5X2lkCAEBBQEAEBhvcmlnaW7oIHF1ZXJ5X2lkCEBleHBlY3RlZF9xdWVyaWVy6FBtYXliZV9hY3R1YWxfcXVlcmllcj0BAQEFAQAMLGRlc3RpbmF0aW9u6BBjb3N0IQEobWVzc2FnZV9pZCABAQUBAAgYcGF5aW5n6BBmZWVzIQEBAQUBAAQcdmVyc2lvbgQBAQUAIAEBBQEDCCAJAQEBBQDBAwEACCRicmlkZ2VfaWQgMGlzX2Nvbmdlc3RlZBQBAQUApQEAzQMBAQUApQEA0QMA1QMBAQUAMQIBAAg4bWVzc2FnZV9vcmlnaW6lAShwYWdlX2luZGV4BAEBBQEAEDhtZXNzYWdlX29yaWdpbqUBEHBhZ2UEFGluZGV4BDB3ZWlnaHRfbGltaXQYAQEFAQEFAQAMCGlkIBhvcmlnaW6lARRlcnJvcqkBAQEFAQAQCGlkIBhvcmlnaW6lASx3ZWlnaHRfdXNlZBgcc3VjY2VzcxQBAQUBABAIaWQgGG9yaWdpbqUBKHBhZ2VfaW5kZXgENG1lc3NhZ2VfaW5kZXgEAQEFAQAIGG9yaWdpbqUBFGluZGV4BAEABBRjYWxsc4UEAQEFAQAIFGluZGV4BBBjYWxsgQQBAQUBAAgkYXNfb3JpZ2luEQQQY2FsbIEEAQEFAQAIEGNhbGyBBBh3ZWlnaHQYAQEFAQEFAQAIFGluZGV4BBRlcnJvcpQBAQUBAAQUZXJyb3KUAQEFAQAEGHJlc3VsdLUBABUDAIkEAQAIRG90aGVyX3NpZ25hdG9yaWVz9BBjYWxsgQQBAQUBABQkdGhyZXNob2xkBERvdGhlcl9zaWduYXRvcmllc/Q8bWF5YmVfdGltZXBvaW50GQQQY2FsbIEEKG1heF93ZWlnaHQYAQEFAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEJGNhbGxfaGFzaCAobWF4X3dlaWdodBgBAQUBABAkdGhyZXNob2xkBERvdGhlcl9zaWduYXRvcmllc/QkdGltZXBvaW50vQEkY2FsbF9oYXNoIAEBBQEBBQEADCRhcHByb3ZpbmcAIG11bHRpc2lnACRjYWxsX2hhc2ggAQEFAQAQJGFwcHJvdmluZwAkdGltZXBvaW50vQEgbXVsdGlzaWcAJGNhbGxfaGFzaCABAQUBABQkYXBwcm92aW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIBhyZXN1bHS1AQEBBQEAEChjYW5jZWxsaW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIAAAAJUEAAAAoQQBAAwQcmVhbPUCQGZvcmNlX3Byb3h5X3R5cGUhBBBjYWxsgQQBAQUBAAwgZGVsZWdhdGX1Aihwcm94eV90eXBlxQEUZGVsYXkEAQEFAQAMKHByb3h5X3R5cGXFARRkZWxheQQUaW5kZXgEAQEFAQAUHHNwYXduZXL1Aihwcm94eV90eXBlxQEUaW5kZXgEGGhlaWdodAQkZXh0X2luZGV4BAEBBQEACBByZWFs9QIkY2FsbF9oYXNoIAEBBQEACCBkZWxlZ2F0ZfUCJGNhbGxfaGFzaCABAQUBABAgZGVsZWdhdGX1AhByZWFs9QJAZm9yY2VfcHJveHlfdHlwZSEEEGNhbGyBBAEBBQEBBQEAEBBwdXJlAAx3aG8AKHByb3h5X3R5cGXFAVBkaXNhbWJpZ3VhdGlvbl9pbmRleAQBAQUBAAwQcmVhbAAUcHJveHkAJGNhbGxfaGFzaCABAQUBABAkZGVsZWdhdG9yACRkZWxlZ2F0ZWUAKHByb3h5X3R5cGXFARRkZWxheQQABACpBACtBAC5BAC9BADBBAAEAMUEAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCAEBBQEAEAhpZAQUb3duZXL1AjRpc19zdWZmaWNpZW50FCxtaW5fYmFsYW5jZQgBAQUBAAQIaWQEAQEFAQAMCGlkBCxiZW5lZmljaWFyefUCGGFtb3VudAgBAQUBAAwIaWQEDHdob/UCGGFtb3VudAgBAQUBAAwIaWQEGHRhcmdldPUCGGFtb3VudAgBAQUBABAIaWQEGHNvdXJjZfUCEGRlc3T1AhhhbW91bnQIAQEFAQAICGlkBAx3aG/1AgEBBQEACAhpZAQUb3duZXL1AgEBBQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIBAQUBABAIaWQEEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEAQEFAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UAQEFAQAgCGlkBBRvd25lcvUCGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCLG1pbl9iYWxhbmNlCDRpc19zdWZmaWNpZW50FCRpc19mcm96ZW4UAQEFAQAMCGlkBCBkZWxlZ2F0ZfUCGGFtb3VudAgBAQUBAAgIaWQEIGRlbGVnYXRl9QIBAQUBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AgEBBQEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgBAQUBAAgIaWQEKGFsbG93X2J1cm4UAQEFAQAICGlkBCxtaW5fYmFsYW5jZQgBAQUBAQUBAAwgYXNzZXRfaWQEHGNyZWF0b3IAFG93bmVyAAEBBQEADCBhc3NldF9pZAQUb3duZXIAGGFtb3VudAgBAQUBABAgYXNzZXRfaWQEEGZyb20ACHRvABhhbW91bnQIAQEFAQAMIGFzc2V0X2lkBBRvd25lcgAcYmFsYW5jZQgBAQUBABAgYXNzZXRfaWQEGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIAAQEFAQAIIGFzc2V0X2lkBBRvd25lcgABAQUBAAggYXNzZXRfaWQEDHdobwABAQUBAAQgYXNzZXRfaWQEAQEFAQAMIGFzc2V0X2lkBEhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwQBAQUBAAwgYXNzZXRfaWQETGFwcHJvdmFsc19kZXN0cm95ZWQETGFwcHJvdmFsc19yZW1haW5pbmcEAQEFAQAUIGFzc2V0X2lkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UAQEFAQAQIGFzc2V0X2lkBBhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIAQEFAQAMIGFzc2V0X2lkBBRvd25lcgAgZGVsZWdhdGUAAQEFAQAUIGFzc2V0X2lkBBRvd25lcgAgZGVsZWdhdGUALGRlc3RpbmF0aW9uABhhbW91bnQIAQEFAQAIIGFzc2V0X2lkBDxuZXdfbWluX2JhbGFuY2UIAQEFAQAMIGFzc2V0X2lkBAx3aG8AJGRlcG9zaXRvcgABAQUBAAwgYXNzZXRfaWQEDHdobwAYYW1vdW50CAAEAMkEAM0EALEBANEEALEBAB0CANUEAAQA2QQAHQIA2QQA3QQA4QQAHQIA5QQABAAEAQAIKGNvbGxlY3Rpb24EFGFkbWlu9QIBAQUBAAwoY29sbGVjdGlvbgQUb3duZXL1AjBmcmVlX2hvbGRpbmcUAQEFAQAIKGNvbGxlY3Rpb24EHHdpdG5lc3MtBAEBBQEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcvUCAQEFAQAMKGNvbGxlY3Rpb24EEGl0ZW0ELGNoZWNrX293bmVyMQQBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGVzdPUCAQEFAQAIKGNvbGxlY3Rpb24EFGl0ZW1z0QEBAQUBAAgoY29sbGVjdGlvbgQQaXRlbQQBAQUBAAQoY29sbGVjdGlvbgQBAQUBAAgoY29sbGVjdGlvbgQkbmV3X293bmVy9QIBAQUBABAoY29sbGVjdGlvbgQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AgEBBQEADChjb2xsZWN0aW9uBBBpdGVtBFBtYXliZV9jaGVja19kZWxlZ2F0ZTEEAQEFAQAcKGNvbGxlY3Rpb24EFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwZnJlZV9ob2xkaW5nFCRpc19mcm96ZW4UAQEFAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VAQxrZXkkFHZhbHVlJAEBBQEADChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JAEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJCRpc19mcm96ZW4UAQEFAQAMKGNvbGxlY3Rpb24EEGRhdGEkJGlzX2Zyb3plbhQBAQUBAARAbWF5YmVfY29sbGVjdGlvbtUBAQEFAQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlNQREd2hpdGVsaXN0ZWRfYnV5ZXIxBAEBBQEADChjb2xsZWN0aW9uBBBpdGVtBCRiaWRfcHJpY2UIAQEFAQEFAQAMKGNvbGxlY3Rpb24EHGNyZWF0b3IAFG93bmVyAAEBBQEACChjb2xsZWN0aW9uBBRvd25lcgABAQUBAAQoY29sbGVjdGlvbgQBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQUb3duZXIAAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGZyb20ACHRvAAEBBQEACChjb2xsZWN0aW9uBBBpdGVtBAEBBQEACChjb2xsZWN0aW9uBCRuZXdfb3duZXIAAQEFAQAQKGNvbGxlY3Rpb24EGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIAAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQABAQUBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFAEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJCRpc19mcm96ZW4UAQEFAQAIKGNvbGxlY3Rpb24EQHN1Y2Nlc3NmdWxfaXRlbXPRAQEBBQEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQBAQUBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQBAQUBAAgMd2hvAEBtYXliZV9jb2xsZWN0aW9u1QEBAQUBAAgoY29sbGVjdGlvbgQobWF4X3N1cHBseQQBAQUBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIRHdoaXRlbGlzdGVkX2J1eWVy2QEBAQUBABQoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIGHNlbGxlcgAUYnV5ZXIAAAQA6QQArQQABAAdAgD5BAAEAP0EAB0CAAUFAAkFAA0FAB0CAPQAHQIAEQUABABFBAAdAgAIAQAIFGFkbWlu9QIYY29uZmlnRQQBAQUBAAgUb3duZXL1Ahhjb25maWdFBAEBBQEACChjb2xsZWN0aW9uBBx3aXRuZXNzSQQBAQUBABAoY29sbGVjdGlvbgQQaXRlbQQcbWludF90b/UCMHdpdG5lc3NfZGF0YVEEAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EHG1pbnRfdG/1AixpdGVtX2NvbmZpZwgBAQUBAAgoY29sbGVjdGlvbgQ0bG9ja19zZXR0aW5ncwgBAQUBABAoY29sbGVjdGlvbgQYaXNzdWVyMQQUYWRtaW4xBBxmcmVlemVyMQQBAQUBAAgoY29sbGVjdGlvbgQUb3duZXL1AgEBBQEACChjb2xsZWN0aW9uBBhjb25maWdFBAEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCOG1heWJlX2RlYWRsaW5l1QEBAQUBABAoY29sbGVjdGlvbgQQaXRlbQQ0bG9ja19tZXRhZGF0YRQ8bG9ja19hdHRyaWJ1dGVzFAEBBQEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JBR2YWx1ZSQBAQUBABgYc2V0X2Fz2QEoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBJG5hbWVzcGFjZeEBDGtleSQUdmFsdWUkAQEFAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VASRuYW1lc3BhY2XhAQxrZXkkAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QIcd2l0bmVzcwQBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGF0YSQBAQUBAAgoY29sbGVjdGlvbgQQZGF0YSQBAQUBAAgoY29sbGVjdGlvbgQ0bWludF9zZXR0aW5nc0EEAQEFAQAEEHRpcHNZBAEBBQEAGEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQRIZGVzaXJlZF9jb2xsZWN0aW9uBEhtYXliZV9kZXNpcmVkX2l0ZW3VASxtYXliZV9wcmljZe0BIGR1cmF0aW9uBAEBBQEACEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQQBAQUBABQ8c2VuZF9jb2xsZWN0aW9uBCRzZW5kX2l0ZW0ESHJlY2VpdmVfY29sbGVjdGlvbgQwcmVjZWl2ZV9pdGVtBDR3aXRuZXNzX3ByaWNl7QEBAQUBAAwkbWludF9kYXRhXQQkc2lnbmF0dXJlaQQYc2lnbmVyAAEBBQEADBBkYXRhbQQkc2lnbmF0dXJlaQQYc2lnbmVyAAEBBQEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBDRsb2NrX21ldGFkYXRhFDxsb2NrX2F0dHJpYnV0ZXMUAQEFAQAQKGNvbGxlY3Rpb24EGGlzc3VlctkBFGFkbWlu2QEcZnJlZXplctkBAQEFAQAUKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQAgZGVhZGxpbmXVAQEBBQEACChjb2xsZWN0aW9uBBBkYXRhJAEBBQEADChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJAEBBQEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQkbmFtZXNwYWNl4QEBAQUBABAoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQkbmFtZXNwYWNl4QEBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGUAAQEFAQAEHG5leHRfaWTVAQEBBQEAFChjb2xsZWN0aW9uBBBpdGVtBBhzZW5kZXIAIHJlY2VpdmVyABhhbW91bnQIAQEFAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24EMGRlc2lyZWRfaXRlbdUBFHByaWNl7QEgZGVhZGxpbmUEAQEFAQAgPHNlbnRfY29sbGVjdGlvbgQkc2VudF9pdGVtBDxzZW50X2l0ZW1fb3duZXIATHJlY2VpdmVkX2NvbGxlY3Rpb24ENHJlY2VpdmVkX2l0ZW0ETHJlY2VpdmVkX2l0ZW1fb3duZXIAFHByaWNl7QEgZGVhZGxpbmUEAQEFAQAMKGNvbGxlY3Rpb24EEGl0ZW0EJG5hbWVzcGFjZeEBAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW3VASRhdHRyaWJ1dGXxARR2YWx1ZSQA6ACpBAAVBQC5BAAZBQDBBADoAMUEAQEFAOgBAAwIaWToFGFkbWlu9QIsbWluX2JhbGFuY2UIAQEFAQAQCGlk6BRvd25lcvUCNGlzX3N1ZmZpY2llbnQULG1pbl9iYWxhbmNlCAEBBQEABAhpZOgBAQUBAAwIaWToLGJlbmVmaWNpYXJ59QIYYW1vdW50CAEBBQEADAhpZOgMd2hv9QIYYW1vdW50CAEBBQEADAhpZOgYdGFyZ2V09QIYYW1vdW50CAEBBQEAEAhpZOgYc291cmNl9QIQZGVzdPUCGGFtb3VudAgBAQUBAAgIaWToDHdob/UCAQEFAQAICGlk6BRvd25lcvUCAQEFAQAQCGlk6Bhpc3N1ZXL1AhRhZG1pbvUCHGZyZWV6ZXL1AgEBBQEAEAhpZOgQbmFtZSQYc3ltYm9sJCBkZWNpbWFscwQBAQUBABQIaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQBAQUBACAIaWToFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhQBAQUBAAwIaWToIGRlbGVnYXRl9QIYYW1vdW50CAEBBQEACAhpZOggZGVsZWdhdGX1AgEBBQEADAhpZOgUb3duZXL1AiBkZWxlZ2F0ZfUCAQEFAQAQCGlk6BRvd25lcvUCLGRlc3RpbmF0aW9u9QIYYW1vdW50CAEBBQEACAhpZOgoYWxsb3dfYnVybhQBAQUBAAgIaWToLG1pbl9iYWxhbmNlCAEBBQEBBQEADCBhc3NldF9pZOgcY3JlYXRvcgAUb3duZXIAAQEFAQAMIGFzc2V0X2lk6BRvd25lcgAYYW1vdW50CAEBBQEAECBhc3NldF9pZOgQZnJvbQAIdG8AGGFtb3VudAgBAQUBAAwgYXNzZXRfaWToFG93bmVyABxiYWxhbmNlCAEBBQEAECBhc3NldF9pZOgYaXNzdWVyABRhZG1pbgAcZnJlZXplcgABAQUBAAggYXNzZXRfaWToFG93bmVyAAEBBQEACCBhc3NldF9pZOgMd2hvAAEBBQEABCBhc3NldF9pZOgBAQUBAAwgYXNzZXRfaWToSGFjY291bnRzX2Rlc3Ryb3llZARIYWNjb3VudHNfcmVtYWluaW5nBAEBBQEADCBhc3NldF9pZOhMYXBwcm92YWxzX2Rlc3Ryb3llZARMYXBwcm92YWxzX3JlbWFpbmluZwQBAQUBABQgYXNzZXRfaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQBAQUBABAgYXNzZXRfaWToGHNvdXJjZQAgZGVsZWdhdGUAGGFtb3VudAgBAQUBAAwgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQABAQUBABQgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAgBAQUBAAggYXNzZXRfaWToPG5ld19taW5fYmFsYW5jZQgBAQUBAAwgYXNzZXRfaWToDHdobwAkZGVwb3NpdG9yAAEBBQEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIAP0BAAQBAQUADQEBAAgYYXNzZXQx6Bhhc3NldDLoAQEFAQAcGGFzc2V0MegYYXNzZXQy6DxhbW91bnQxX2Rlc2lyZWQIPGFtb3VudDJfZGVzaXJlZAgsYW1vdW50MV9taW4ILGFtb3VudDJfbWluCBxtaW50X3RvAAEBBQEAGBhhc3NldDHoGGFzc2V0Mug0bHBfdG9rZW5fYnVybghMYW1vdW50MV9taW5fcmVjZWl2ZQhMYW1vdW50Ml9taW5fcmVjZWl2ZQgsd2l0aGRyYXdfdG8AAQEFAQAUEHBhdGh5BCRhbW91bnRfaW4IOGFtb3VudF9vdXRfbWluCBxzZW5kX3RvAChrZWVwX2FsaXZlFAEBBQEAFBBwYXRoeQQoYW1vdW50X291dAg0YW1vdW50X2luX21heAgcc2VuZF90bwAoa2VlcF9hbGl2ZRQBAQUBAQUBABAcY3JlYXRvcgAccG9vbF9pZP0BMHBvb2xfYWNjb3VudAAgbHBfdG9rZW4EAQEFAQAcDHdobwAcbWludF90bwAccG9vbF9pZP0BQGFtb3VudDFfcHJvdmlkZWQIQGFtb3VudDJfcHJvdmlkZWQIIGxwX3Rva2VuBDxscF90b2tlbl9taW50ZWQIAQEFAQAgDHdobwAsd2l0aGRyYXdfdG8AHHBvb2xfaWT9ARxhbW91bnQxCBxhbW91bnQyCCBscF90b2tlbgQ8bHBfdG9rZW5fYnVybmVkCDh3aXRoZHJhd2FsX2ZlZQQBAQUBABQMd2hvABxzZW5kX3RvACRhbW91bnRfaW4IKGFtb3VudF9vdXQIEHBhdGgFAgEBBQEADCRhbW91bnRfaW4IKGFtb3VudF9vdXQIEHBhdGgFAgEBBQEACBxwb29sX2lk/QEMd2hvAAEDAAAIAQMAABECAQMIIAgAFAEDAABRAgEDBCEFALEBAQMEHQUAJQUBAwAAJAEDBAQAcQMBAwAA0QEBAwQkADUFAQMAAB0FAQMEPQUAXQIBAwghBT0FAEEFAQMMRQUkIABNBQEDBB0FALEBAQMEcQMAJAEDBCQAWQUBAwQAAAQBAwgkBABdBQEDCCQEAGkFAQMEGAAIAQMEBAAIAQMIgQQEAF0FAQMIgQQEAGkFAQMEBAB1BQEDBLkDAHkFAQMIGHkDAH0FAQMImQG5AwCBBQEDCBEEgQQArQUBAwiZAbkDALUFAQMEmQEAvQUBAwQAAMUFAQMEHQUAyQUBAwQkAM0FAQME0QUAcQMBAwAA1QUBAxDo6AgUADUEAQMI6OgA3QXhBQEBAQIBAwAQEGZyZWUIIHJlc2VydmVkCBhmcm96ZW4IFGZsYWdzCAAUFG5vbmNlBCRjb25zdW1lcnMEJHByb3ZpZGVycwQsc3VmZmljaWVudHMEEGRhdGEMAQAACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgADBhub3JtYWwYLG9wZXJhdGlvbmFsGCRtYW5kYXRvcnkYBQGABQAFARACFChQcmVSdW50aW1lAQMIKCQkQ29uc2Vuc3VzAQMIKCQQU2VhbAEDCCgkFE90aGVyAQUAZFJ1bnRpbWVFbnZpcm9ubWVudFVwZGF0ZWQBAQUELAACDDhBcHBseUV4dHJpbnNpYwEBAjBGaW5hbGl6YXRpb24BAQU4SW5pdGlhbGl6YXRpb24BAQUCDBhOb3JtYWwBAQUsT3BlcmF0aW9uYWwBAQUkTWFuZGF0b3J5AQEFAggMWWVzAQEFCE5vAQEFAAwYd2VpZ2h0GBRjbGFzczggcGF5c19mZWU8AiQ8SW52YWxpZFNwZWNOYW1lAQEFaFNwZWNWZXJzaW9uTmVlZHNUb0luY3JlYXNlAQEFdEZhaWxlZFRvRXh0cmFjdFJ1bnRpbWVWZXJzaW9uAQEFTE5vbkRlZmF1bHRDb21wb3NpdGUBAQU8Tm9uWmVyb1JlZkNvdW50AQEFMENhbGxGaWx0ZXJlZAEBBWxNdWx0aUJsb2NrTWlncmF0aW9uc09uZ29pbmcBAQVETm90aGluZ0F1dGhvcml6ZWQBAQUwVW5hdXRob3JpemVkAQEFAiBMT3ZlcmxhcHBpbmdVcGdyYWRlcwEBBVBQcm9oaWJpdGVkQnlQb2xrYWRvdAEBBRhUb29CaWcBAQVoVmFsaWRhdGlvbkRhdGFOb3RBdmFpbGFibGUBAQV0SG9zdENvbmZpZ3VyYXRpb25Ob3RBdmFpbGFibGUBAQUwTm90U2NoZWR1bGVkAQEFRE5vdGhpbmdBdXRob3JpemVkAQEFMFVuYXV0aG9yaXplZAEBBQIwOFZlc3RpbmdCYWxhbmNlAQEFVExpcXVpZGl0eVJlc3RyaWN0aW9ucwEBBUxJbnN1ZmZpY2llbnRCYWxhbmNlAQEFSEV4aXN0ZW50aWFsRGVwb3NpdAEBBTRFeHBlbmRhYmlsaXR5AQEFXEV4aXN0aW5nVmVzdGluZ1NjaGVkdWxlAQEFLERlYWRBY2NvdW50AQEFPFRvb01hbnlSZXNlcnZlcwEBBTBUb29NYW55SG9sZHMBAQU4VG9vTWFueUZyZWV6ZXMBAQVMSXNzdWFuY2VEZWFjdGl2YXRlZAEBBSREZWx0YVplcm8BAQUCFChOb3RWZXN0aW5nAQEFVEF0TWF4VmVzdGluZ1NjaGVkdWxlcwEBBSRBbW91bnRMb3cBAQVgU2NoZWR1bGVJbmRleE91dE9mQm91bmRzAQEFVEludmFsaWRTY2hlZHVsZVBhcmFtcwEBBQJERFRvb01hbnlDYW5kaWRhdGVzAQEFXFRvb0Zld0VsaWdpYmxlQ29sbGF0b3JzAQEFQEFscmVhZHlDYW5kaWRhdGUBAQUwTm90Q2FuZGlkYXRlAQEFUFRvb01hbnlJbnZ1bG5lcmFibGVzAQEFTEFscmVhZHlJbnZ1bG5lcmFibGUBAQU8Tm90SW52dWxuZXJhYmxlAQEFXE5vQXNzb2NpYXRlZFZhbGlkYXRvcklkAQEFWFZhbGlkYXRvck5vdFJlZ2lzdGVyZWQBAQVsSW5zZXJ0VG9DYW5kaWRhdGVMaXN0RmFpbGVkAQEFdFJlbW92ZUZyb21DYW5kaWRhdGVMaXN0RmFpbGVkAQEFNERlcG9zaXRUb29Mb3cBAQVkVXBkYXRlQ2FuZGlkYXRlTGlzdEZhaWxlZAEBBUBJbnN1ZmZpY2llbnRCb25kAQEFUFRhcmdldElzTm90Q2FuZGlkYXRlAQEFQElkZW50aWNhbERlcG9zaXQBAQVASW52YWxpZFVucmVzZXJ2ZQEBBQIUMEludmFsaWRQcm9vZgEBBVxOb0Fzc29jaWF0ZWRWYWxpZGF0b3JJZAEBBTREdXBsaWNhdGVkS2V5AQEFGE5vS2V5cwEBBSROb0FjY291bnQBAQUCFDhCYWRRdWV1ZUNvbmZpZwEBBUBBbHJlYWR5U3VzcGVuZGVkAQEFOEFscmVhZHlSZXN1bWVkAQEFdFRvb01hbnlBY3RpdmVPdXRib3VuZENoYW5uZWxzAQEFGFRvb0JpZwEBBQJgLFVucmVhY2hhYmxlAQEFLFNlbmRGYWlsdXJlAQEFIEZpbHRlcmVkAQEFSFVud2VpZ2hhYmxlTWVzc2FnZQEBBWBEZXN0aW5hdGlvbk5vdEludmVydGlibGUBAQUURW1wdHkBAQU4Q2Fubm90UmVhbmNob3IBAQU0VG9vTWFueUFzc2V0cwEBBTRJbnZhbGlkT3JpZ2luAQEFKEJhZFZlcnNpb24BAQUsQmFkTG9jYXRpb24BAQU4Tm9TdWJzY3JpcHRpb24BAQVEQWxyZWFkeVN1YnNjcmliZWQBAQVYQ2Fubm90Q2hlY2tPdXRUZWxlcG9ydAEBBShMb3dCYWxhbmNlAQEFMFRvb01hbnlMb2NrcwEBBUxBY2NvdW50Tm90U292ZXJlaWduAQEFKEZlZXNOb3RNZXQBAQUwTG9ja05vdEZvdW5kAQEFFEluVXNlAQEFaEludmFsaWRBc3NldFVua25vd25SZXNlcnZlAQEFeEludmFsaWRBc3NldFVuc3VwcG9ydGVkUmVzZXJ2ZQEBBTxUb29NYW55UmVzZXJ2ZXMBAQVgTG9jYWxFeGVjdXRpb25JbmNvbXBsZXRlAQEFAiQsTm90UmVhcGFibGUBAQUYTm9QYWdlAQEFJE5vTWVzc2FnZQEBBUBBbHJlYWR5UHJvY2Vzc2VkAQEFGFF1ZXVlZAEBBUhJbnN1ZmZpY2llbnRXZWlnaHQBAQVgVGVtcG9yYXJpbHlVbnByb2Nlc3NhYmxlAQEFLFF1ZXVlUGF1c2VkAQEFTFJlY3Vyc2l2ZURpc2FsbG93ZWQBAQUCBDBUb29NYW55Q2FsbHMBAQUCOEBNaW5pbXVtVGhyZXNob2xkAQEFPEFscmVhZHlBcHByb3ZlZAEBBUROb0FwcHJvdmFsc05lZWRlZAEBBURUb29GZXdTaWduYXRvcmllcwEBBUhUb29NYW55U2lnbmF0b3JpZXMBAQVUU2lnbmF0b3JpZXNPdXRPZk9yZGVyAQEFTFNlbmRlckluU2lnbmF0b3JpZXMBAQUgTm90Rm91bmQBAQUgTm90T3duZXIBAQUsTm9UaW1lcG9pbnQBAQU4V3JvbmdUaW1lcG9pbnQBAQVMVW5leHBlY3RlZFRpbWVwb2ludAEBBTxNYXhXZWlnaHRUb29Mb3cBAQU0QWxyZWFkeVN0b3JlZAEBBQIgHFRvb01hbnkBAQUgTm90Rm91bmQBAQUgTm90UHJveHkBAQUsVW5wcm94eWFibGUBAQUkRHVwbGljYXRlAQEFME5vUGVybWlzc2lvbgEBBSxVbmFubm91bmNlZAEBBSxOb1NlbGZQcm94eQEBBQJUKEJhbGFuY2VMb3cBAQUkTm9BY2NvdW50AQEFME5vUGVybWlzc2lvbgEBBRxVbmtub3duAQEFGEZyb3plbgEBBRRJblVzZQEBBShCYWRXaXRuZXNzAQEFOE1pbkJhbGFuY2VaZXJvAQEFTFVuYXZhaWxhYmxlQ29uc3VtZXIBAQUsQmFkTWV0YWRhdGEBAQUoVW5hcHByb3ZlZAEBBSBXb3VsZERpZQEBBTRBbHJlYWR5RXhpc3RzAQEFJE5vRGVwb3NpdAEBBSRXb3VsZEJ1cm4BAQUkTGl2ZUFzc2V0AQEFMEFzc2V0Tm90TGl2ZQEBBTxJbmNvcnJlY3RTdGF0dXMBAQUkTm90RnJvemVuAQEFOENhbGxiYWNrRmFpbGVkAQEFKEJhZEFzc2V0SWQBAQUCSDBOb1Blcm1pc3Npb24BAQVEVW5rbm93bkNvbGxlY3Rpb24BAQU0QWxyZWFkeUV4aXN0cwEBBShXcm9uZ093bmVyAQEFKEJhZFdpdG5lc3MBAQUUSW5Vc2UBAQUYRnJvemVuAQEFNFdyb25nRGVsZWdhdGUBAQUoTm9EZWxlZ2F0ZQEBBShVbmFwcHJvdmVkAQEFKFVuYWNjZXB0ZWQBAQUYTG9ja2VkAQEFQE1heFN1cHBseVJlYWNoZWQBAQVMTWF4U3VwcGx5QWxyZWFkeVNldAEBBURNYXhTdXBwbHlUb29TbWFsbAEBBSxVbmtub3duSXRlbQEBBShOb3RGb3JTYWxlAQEFJEJpZFRvb0xvdwEBBQK0ME5vUGVybWlzc2lvbgEBBURVbmtub3duQ29sbGVjdGlvbgEBBTRBbHJlYWR5RXhpc3RzAQEFPEFwcHJvdmFsRXhwaXJlZAEBBShXcm9uZ093bmVyAQEFKEJhZFdpdG5lc3MBAQVEQ29sbGVjdGlvbklkSW5Vc2UBAQVQSXRlbXNOb25UcmFuc2ZlcmFibGUBAQUsTm90RGVsZWdhdGUBAQU0V3JvbmdEZWxlZ2F0ZQEBBShVbmFwcHJvdmVkAQEFKFVuYWNjZXB0ZWQBAQUoSXRlbUxvY2tlZAEBBVBMb2NrZWRJdGVtQXR0cmlidXRlcwEBBWhMb2NrZWRDb2xsZWN0aW9uQXR0cmlidXRlcwEBBUhMb2NrZWRJdGVtTWV0YWRhdGEBAQVgTG9ja2VkQ29sbGVjdGlvbk1ldGFkYXRhAQEFQE1heFN1cHBseVJlYWNoZWQBAQU8TWF4U3VwcGx5TG9ja2VkAQEFRE1heFN1cHBseVRvb1NtYWxsAQEFLFVua25vd25JdGVtAQEFLFVua25vd25Td2FwAQEFQE1ldGFkYXRhTm90Rm91bmQBAQVEQXR0cmlidXRlTm90Rm91bmQBAQUoTm90Rm9yU2FsZQEBBSRCaWRUb29Mb3cBAQVQUmVhY2hlZEFwcHJvdmFsTGltaXQBAQU8RGVhZGxpbmVFeHBpcmVkAQEFNFdyb25nRHVyYXRpb24BAQU4TWV0aG9kRGlzYWJsZWQBAQUwV3JvbmdTZXR0aW5nAQEFWEluY29uc2lzdGVudEl0ZW1Db25maWcBAQUgTm9Db25maWcBAQU8Um9sZXNOb3RDbGVhcmVkAQEFOE1pbnROb3RTdGFydGVkAQEFJE1pbnRFbmRlZAEBBThBbHJlYWR5Q2xhaW1lZAEBBTRJbmNvcnJlY3REYXRhAQEFLFdyb25nT3JpZ2luAQEFOFdyb25nU2lnbmF0dXJlAQEFREluY29ycmVjdE1ldGFkYXRhAQEFZE1heEF0dHJpYnV0ZXNMaW1pdFJlYWNoZWQBAQU4V3JvbmdOYW1lc3BhY2UBAQVIQ29sbGVjdGlvbk5vdEVtcHR5AQEFPFdpdG5lc3NSZXF1aXJlZAEBBQJcQEludmFsaWRBc3NldFBhaXIBAQUoUG9vbEV4aXN0cwEBBUhXcm9uZ0Rlc2lyZWRBbW91bnQBAQVgQW1vdW50T25lTGVzc1RoYW5NaW5pbWFsAQEFYEFtb3VudFR3b0xlc3NUaGFuTWluaW1hbAEBBWhSZXNlcnZlTGVmdExlc3NUaGFuTWluaW1hbAEBBUBBbW91bnRPdXRUb29IaWdoAQEFMFBvb2xOb3RGb3VuZAEBBSBPdmVyZmxvdwEBBYBBc3NldE9uZURlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYBBc3NldFR3b0RlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYxBc3NldE9uZVdpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBYxBc3NldFR3b1dpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBXBPcHRpbWFsQW1vdW50TGVzc1RoYW5EZXNpcmVkAQEFbEluc3VmZmljaWVudExpcXVpZGl0eU1pbnRlZAEBBTRaZXJvTGlxdWlkaXR5AQEFKFplcm9BbW91bnQBAQWMUHJvdmlkZWRNaW5pbXVtTm90U3VmZmljaWVudEZvclN3YXABAQWMUHJvdmlkZWRNYXhpbXVtTm90U3VmZmljaWVudEZvclN3YXABAQUsSW52YWxpZFBhdGgBAQU0Tm9uVW5pcXVlUGF0aAEBBVBJbmNvcnJlY3RQb29sQXNzZXRJZAEBBTBCZWxvd01pbmltdW0BAQUCbBhTeXN0ZW0BAiQ8SW52YWxpZFNwZWNOYW1lAQEFaFNwZWNWZXJzaW9uTmVlZHNUb0luY3JlYXNlAQEFdEZhaWxlZFRvRXh0cmFjdFJ1bnRpbWVWZXJzaW9uAQEFTE5vbkRlZmF1bHRDb21wb3NpdGUBAQU8Tm9uWmVyb1JlZkNvdW50AQEFMENhbGxGaWx0ZXJlZAEBBWxNdWx0aUJsb2NrTWlncmF0aW9uc09uZ29pbmcBAQVETm90aGluZ0F1dGhvcml6ZWQBAQUwVW5hdXRob3JpemVkAQEFPFBhcmFjaGFpblN5c3RlbQECIExPdmVybGFwcGluZ1VwZ3JhZGVzAQEFUFByb2hpYml0ZWRCeVBvbGthZG90AQEFGFRvb0JpZwEBBWhWYWxpZGF0aW9uRGF0YU5vdEF2YWlsYWJsZQEBBXRIb3N0Q29uZmlndXJhdGlvbk5vdEF2YWlsYWJsZQEBBTBOb3RTY2hlZHVsZWQBAQVETm90aGluZ0F1dGhvcml6ZWQBAQUwVW5hdXRob3JpemVkAQEFJFRpbWVzdGFtcAEBBTRQYXJhY2hhaW5JbmZvAQEFIEJhbGFuY2VzAQIwOFZlc3RpbmdCYWxhbmNlAQEFVExpcXVpZGl0eVJlc3RyaWN0aW9ucwEBBUxJbnN1ZmZpY2llbnRCYWxhbmNlAQEFSEV4aXN0ZW50aWFsRGVwb3NpdAEBBTRFeHBlbmRhYmlsaXR5AQEFXEV4aXN0aW5nVmVzdGluZ1NjaGVkdWxlAQEFLERlYWRBY2NvdW50AQEFPFRvb01hbnlSZXNlcnZlcwEBBTBUb29NYW55SG9sZHMBAQU4VG9vTWFueUZyZWV6ZXMBAQVMSXNzdWFuY2VEZWFjdGl2YXRlZAEBBSREZWx0YVplcm8BAQVIVHJhbnNhY3Rpb25QYXltZW50AQEFOEFzc2V0VHhQYXltZW50AQEFHFZlc3RpbmcBAhQoTm90VmVzdGluZwEBBVRBdE1heFZlc3RpbmdTY2hlZHVsZXMBAQUkQW1vdW50TG93AQEFYFNjaGVkdWxlSW5kZXhPdXRPZkJvdW5kcwEBBVRJbnZhbGlkU2NoZWR1bGVQYXJhbXMBAQUoQXV0aG9yc2hpcAEBBURDb2xsYXRvclNlbGVjdGlvbgECRERUb29NYW55Q2FuZGlkYXRlcwEBBVxUb29GZXdFbGlnaWJsZUNvbGxhdG9ycwEBBUBBbHJlYWR5Q2FuZGlkYXRlAQEFME5vdENhbmRpZGF0ZQEBBVBUb29NYW55SW52dWxuZXJhYmxlcwEBBUxBbHJlYWR5SW52dWxuZXJhYmxlAQEFPE5vdEludnVsbmVyYWJsZQEBBVxOb0Fzc29jaWF0ZWRWYWxpZGF0b3JJZAEBBVhWYWxpZGF0b3JOb3RSZWdpc3RlcmVkAQEFbEluc2VydFRvQ2FuZGlkYXRlTGlzdEZhaWxlZAEBBXRSZW1vdmVGcm9tQ2FuZGlkYXRlTGlzdEZhaWxlZAEBBTREZXBvc2l0VG9vTG93AQEFZFVwZGF0ZUNhbmRpZGF0ZUxpc3RGYWlsZWQBAQVASW5zdWZmaWNpZW50Qm9uZAEBBVBUYXJnZXRJc05vdENhbmRpZGF0ZQEBBUBJZGVudGljYWxEZXBvc2l0AQEFQEludmFsaWRVbnJlc2VydmUBAQUcU2Vzc2lvbgECFDBJbnZhbGlkUHJvb2YBAQVcTm9Bc3NvY2lhdGVkVmFsaWRhdG9ySWQBAQU0RHVwbGljYXRlZEtleQEBBRhOb0tleXMBAQUkTm9BY2NvdW50AQEFEEF1cmEBAQUcQXVyYUV4dAEBBSRYY21wUXVldWUBAhQ4QmFkUXVldWVDb25maWcBAQVAQWxyZWFkeVN1c3BlbmRlZAEBBThBbHJlYWR5UmVzdW1lZAEBBXRUb29NYW55QWN0aXZlT3V0Ym91bmRDaGFubmVscwEBBRhUb29CaWcBAQUsUG9sa2Fkb3RYY20BAmAsVW5yZWFjaGFibGUBAQUsU2VuZEZhaWx1cmUBAQUgRmlsdGVyZWQBAQVIVW53ZWlnaGFibGVNZXNzYWdlAQEFYERlc3RpbmF0aW9uTm90SW52ZXJ0aWJsZQEBBRRFbXB0eQEBBThDYW5ub3RSZWFuY2hvcgEBBTRUb29NYW55QXNzZXRzAQEFNEludmFsaWRPcmlnaW4BAQUoQmFkVmVyc2lvbgEBBSxCYWRMb2NhdGlvbgEBBThOb1N1YnNjcmlwdGlvbgEBBURBbHJlYWR5U3Vic2NyaWJlZAEBBVhDYW5ub3RDaGVja091dFRlbGVwb3J0AQEFKExvd0JhbGFuY2UBAQUwVG9vTWFueUxvY2tzAQEFTEFjY291bnROb3RTb3ZlcmVpZ24BAQUoRmVlc05vdE1ldAEBBTBMb2NrTm90Rm91bmQBAQUUSW5Vc2UBAQVoSW52YWxpZEFzc2V0VW5rbm93blJlc2VydmUBAQV4SW52YWxpZEFzc2V0VW5zdXBwb3J0ZWRSZXNlcnZlAQEFPFRvb01hbnlSZXNlcnZlcwEBBWBMb2NhbEV4ZWN1dGlvbkluY29tcGxldGUBAQUoQ3VtdWx1c1hjbQEBBURUb0t1c2FtYVhjbVJvdXRlcgEBBTBNZXNzYWdlUXVldWUBAiQsTm90UmVhcGFibGUBAQUYTm9QYWdlAQEFJE5vTWVzc2FnZQEBBUBBbHJlYWR5UHJvY2Vzc2VkAQEFGFF1ZXVlZAEBBUhJbnN1ZmZpY2llbnRXZWlnaHQBAQVgVGVtcG9yYXJpbHlVbnByb2Nlc3NhYmxlAQEFLFF1ZXVlUGF1c2VkAQEFTFJlY3Vyc2l2ZURpc2FsbG93ZWQBAQUcVXRpbGl0eQECBDBUb29NYW55Q2FsbHMBAQUgTXVsdGlzaWcBAjhATWluaW11bVRocmVzaG9sZAEBBTxBbHJlYWR5QXBwcm92ZWQBAQVETm9BcHByb3ZhbHNOZWVkZWQBAQVEVG9vRmV3U2lnbmF0b3JpZXMBAQVIVG9vTWFueVNpZ25hdG9yaWVzAQEFVFNpZ25hdG9yaWVzT3V0T2ZPcmRlcgEBBUxTZW5kZXJJblNpZ25hdG9yaWVzAQEFIE5vdEZvdW5kAQEFIE5vdE93bmVyAQEFLE5vVGltZXBvaW50AQEFOFdyb25nVGltZXBvaW50AQEFTFVuZXhwZWN0ZWRUaW1lcG9pbnQBAQU8TWF4V2VpZ2h0VG9vTG93AQEFNEFscmVhZHlTdG9yZWQBAQUUUHJveHkBAiAcVG9vTWFueQEBBSBOb3RGb3VuZAEBBSBOb3RQcm94eQEBBSxVbnByb3h5YWJsZQEBBSREdXBsaWNhdGUBAQUwTm9QZXJtaXNzaW9uAQEFLFVuYW5ub3VuY2VkAQEFLE5vU2VsZlByb3h5AQEFGEFzc2V0cwECVChCYWxhbmNlTG93AQEFJE5vQWNjb3VudAEBBTBOb1Blcm1pc3Npb24BAQUcVW5rbm93bgEBBRhGcm96ZW4BAQUUSW5Vc2UBAQUoQmFkV2l0bmVzcwEBBThNaW5CYWxhbmNlWmVybwEBBUxVbmF2YWlsYWJsZUNvbnN1bWVyAQEFLEJhZE1ldGFkYXRhAQEFKFVuYXBwcm92ZWQBAQUgV291bGREaWUBAQU0QWxyZWFkeUV4aXN0cwEBBSROb0RlcG9zaXQBAQUkV291bGRCdXJuAQEFJExpdmVBc3NldAEBBTBBc3NldE5vdExpdmUBAQU8SW5jb3JyZWN0U3RhdHVzAQEFJE5vdEZyb3plbgEBBThDYWxsYmFja0ZhaWxlZAEBBShCYWRBc3NldElkAQEFHFVuaXF1ZXMBAkgwTm9QZXJtaXNzaW9uAQEFRFVua25vd25Db2xsZWN0aW9uAQEFNEFscmVhZHlFeGlzdHMBAQUoV3JvbmdPd25lcgEBBShCYWRXaXRuZXNzAQEFFEluVXNlAQEFGEZyb3plbgEBBTRXcm9uZ0RlbGVnYXRlAQEFKE5vRGVsZWdhdGUBAQUoVW5hcHByb3ZlZAEBBShVbmFjY2VwdGVkAQEFGExvY2tlZAEBBUBNYXhTdXBwbHlSZWFjaGVkAQEFTE1heFN1cHBseUFscmVhZHlTZXQBAQVETWF4U3VwcGx5VG9vU21hbGwBAQUsVW5rbm93bkl0ZW0BAQUoTm90Rm9yU2FsZQEBBSRCaWRUb29Mb3cBAQUQTmZ0cwECtDBOb1Blcm1pc3Npb24BAQVEVW5rbm93bkNvbGxlY3Rpb24BAQU0QWxyZWFkeUV4aXN0cwEBBTxBcHByb3ZhbEV4cGlyZWQBAQUoV3JvbmdPd25lcgEBBShCYWRXaXRuZXNzAQEFRENvbGxlY3Rpb25JZEluVXNlAQEFUEl0ZW1zTm9uVHJhbnNmZXJhYmxlAQEFLE5vdERlbGVnYXRlAQEFNFdyb25nRGVsZWdhdGUBAQUoVW5hcHByb3ZlZAEBBShVbmFjY2VwdGVkAQEFKEl0ZW1Mb2NrZWQBAQVQTG9ja2VkSXRlbUF0dHJpYnV0ZXMBAQVoTG9ja2VkQ29sbGVjdGlvbkF0dHJpYnV0ZXMBAQVITG9ja2VkSXRlbU1ldGFkYXRhAQEFYExvY2tlZENvbGxlY3Rpb25NZXRhZGF0YQEBBUBNYXhTdXBwbHlSZWFjaGVkAQEFPE1heFN1cHBseUxvY2tlZAEBBURNYXhTdXBwbHlUb29TbWFsbAEBBSxVbmtub3duSXRlbQEBBSxVbmtub3duU3dhcAEBBUBNZXRhZGF0YU5vdEZvdW5kAQEFREF0dHJpYnV0ZU5vdEZvdW5kAQEFKE5vdEZvclNhbGUBAQUkQmlkVG9vTG93AQEFUFJlYWNoZWRBcHByb3ZhbExpbWl0AQEFPERlYWRsaW5lRXhwaXJlZAEBBTRXcm9uZ0R1cmF0aW9uAQEFOE1ldGhvZERpc2FibGVkAQEFMFdyb25nU2V0dGluZwEBBVhJbmNvbnNpc3RlbnRJdGVtQ29uZmlnAQEFIE5vQ29uZmlnAQEFPFJvbGVzTm90Q2xlYXJlZAEBBThNaW50Tm90U3RhcnRlZAEBBSRNaW50RW5kZWQBAQU4QWxyZWFkeUNsYWltZWQBAQU0SW5jb3JyZWN0RGF0YQEBBSxXcm9uZ09yaWdpbgEBBThXcm9uZ1NpZ25hdHVyZQEBBURJbmNvcnJlY3RNZXRhZGF0YQEBBWRNYXhBdHRyaWJ1dGVzTGltaXRSZWFjaGVkAQEFOFdyb25nTmFtZXNwYWNlAQEFSENvbGxlY3Rpb25Ob3RFbXB0eQEBBTxXaXRuZXNzUmVxdWlyZWQBAQU0Rm9yZWlnbkFzc2V0cwECVChCYWxhbmNlTG93AQEFJE5vQWNjb3VudAEBBTBOb1Blcm1pc3Npb24BAQUcVW5rbm93bgEBBRhGcm96ZW4BAQUUSW5Vc2UBAQUoQmFkV2l0bmVzcwEBBThNaW5CYWxhbmNlWmVybwEBBUxVbmF2YWlsYWJsZUNvbnN1bWVyAQEFLEJhZE1ldGFkYXRhAQEFKFVuYXBwcm92ZWQBAQUgV291bGREaWUBAQU0QWxyZWFkeUV4aXN0cwEBBSROb0RlcG9zaXQBAQUkV291bGRCdXJuAQEFJExpdmVBc3NldAEBBTBBc3NldE5vdExpdmUBAQU8SW5jb3JyZWN0U3RhdHVzAQEFJE5vdEZyb3plbgEBBThDYWxsYmFja0ZhaWxlZAEBBShCYWRBc3NldElkAQEFKFBvb2xBc3NldHMBAlQoQmFsYW5jZUxvdwEBBSROb0FjY291bnQBAQUwTm9QZXJtaXNzaW9uAQEFHFVua25vd24BAQUYRnJvemVuAQEFFEluVXNlAQEFKEJhZFdpdG5lc3MBAQU4TWluQmFsYW5jZVplcm8BAQVMVW5hdmFpbGFibGVDb25zdW1lcgEBBSxCYWRNZXRhZGF0YQEBBShVbmFwcHJvdmVkAQEFIFdvdWxkRGllAQEFNEFscmVhZHlFeGlzdHMBAQUkTm9EZXBvc2l0AQEFJFdvdWxkQnVybgEBBSRMaXZlQXNzZXQBAQUwQXNzZXROb3RMaXZlAQEFPEluY29ycmVjdFN0YXR1cwEBBSROb3RGcm96ZW4BAQU4Q2FsbGJhY2tGYWlsZWQBAQUoQmFkQXNzZXRJZAEBBTxBc3NldENvbnZlcnNpb24BAlxASW52YWxpZEFzc2V0UGFpcgEBBShQb29sRXhpc3RzAQEFSFdyb25nRGVzaXJlZEFtb3VudAEBBWBBbW91bnRPbmVMZXNzVGhhbk1pbmltYWwBAQVgQW1vdW50VHdvTGVzc1RoYW5NaW5pbWFsAQEFaFJlc2VydmVMZWZ0TGVzc1RoYW5NaW5pbWFsAQEFQEFtb3VudE91dFRvb0hpZ2gBAQUwUG9vbE5vdEZvdW5kAQEFIE92ZXJmbG93AQEFgEFzc2V0T25lRGVwb3NpdERpZE5vdE1lZXRNaW5pbXVtAQEFgEFzc2V0VHdvRGVwb3NpdERpZE5vdE1lZXRNaW5pbXVtAQEFjEFzc2V0T25lV2l0aGRyYXdhbERpZE5vdE1lZXRNaW5pbXVtAQEFjEFzc2V0VHdvV2l0aGRyYXdhbERpZE5vdE1lZXRNaW5pbXVtAQEFcE9wdGltYWxBbW91bnRMZXNzVGhhbkRlc2lyZWQBAQVsSW5zdWZmaWNpZW50TGlxdWlkaXR5TWludGVkAQEFNFplcm9MaXF1aWRpdHkBAQUoWmVyb0Ftb3VudAEBBYxQcm92aWRlZE1pbmltdW1Ob3RTdWZmaWNpZW50Rm9yU3dhcAEBBYxQcm92aWRlZE1heGltdW1Ob3RTdWZmaWNpZW50Rm9yU3dhcAEBBSxJbnZhbGlkUGF0aAEBBTROb25VbmlxdWVQYXRoAQEFUEluY29ycmVjdFBvb2xBc3NldElkAQEFMEJlbG93TWluaW11bQEBBQIoQEZ1bmRzVW5hdmFpbGFibGUBAQUwT25seVByb3ZpZGVyAQEFMEJlbG93TWluaW11bQEBBTBDYW5ub3RDcmVhdGUBAQUwVW5rbm93bkFzc2V0AQEFGEZyb3plbgEBBSxVbnN1cHBvcnRlZAEBBUBDYW5ub3RDcmVhdGVIb2xkAQEFNE5vdEV4cGVuZGFibGUBAQUcQmxvY2tlZAEBBQIMJFVuZGVyZmxvdwEBBSBPdmVyZmxvdwEBBThEaXZpc2lvbkJ5WmVybwEBBQIIMExpbWl0UmVhY2hlZAEBBRxOb0xheWVyAQEFAjgUT3RoZXIBAQUwQ2Fubm90TG9va3VwAQEFJEJhZE9yaWdpbgEBBRhNb2R1bGUBAmwYU3lzdGVtAQIkPEludmFsaWRTcGVjTmFtZQEBBWhTcGVjVmVyc2lvbk5lZWRzVG9JbmNyZWFzZQEBBXRGYWlsZWRUb0V4dHJhY3RSdW50aW1lVmVyc2lvbgEBBUxOb25EZWZhdWx0Q29tcG9zaXRlAQEFPE5vblplcm9SZWZDb3VudAEBBTBDYWxsRmlsdGVyZWQBAQVsTXVsdGlCbG9ja01pZ3JhdGlvbnNPbmdvaW5nAQEFRE5vdGhpbmdBdXRob3JpemVkAQEFMFVuYXV0aG9yaXplZAEBBTxQYXJhY2hhaW5TeXN0ZW0BAiBMT3ZlcmxhcHBpbmdVcGdyYWRlcwEBBVBQcm9oaWJpdGVkQnlQb2xrYWRvdAEBBRhUb29CaWcBAQVoVmFsaWRhdGlvbkRhdGFOb3RBdmFpbGFibGUBAQV0SG9zdENvbmZpZ3VyYXRpb25Ob3RBdmFpbGFibGUBAQUwTm90U2NoZWR1bGVkAQEFRE5vdGhpbmdBdXRob3JpemVkAQEFMFVuYXV0aG9yaXplZAEBBSRUaW1lc3RhbXABAQU0UGFyYWNoYWluSW5mbwEBBSBCYWxhbmNlcwECMDhWZXN0aW5nQmFsYW5jZQEBBVRMaXF1aWRpdHlSZXN0cmljdGlvbnMBAQVMSW5zdWZmaWNpZW50QmFsYW5jZQEBBUhFeGlzdGVudGlhbERlcG9zaXQBAQU0RXhwZW5kYWJpbGl0eQEBBVxFeGlzdGluZ1Zlc3RpbmdTY2hlZHVsZQEBBSxEZWFkQWNjb3VudAEBBTxUb29NYW55UmVzZXJ2ZXMBAQUwVG9vTWFueUhvbGRzAQEFOFRvb01hbnlGcmVlemVzAQEFTElzc3VhbmNlRGVhY3RpdmF0ZWQBAQUkRGVsdGFaZXJvAQEFSFRyYW5zYWN0aW9uUGF5bWVudAEBBThBc3NldFR4UGF5bWVudAEBBRxWZXN0aW5nAQIUKE5vdFZlc3RpbmcBAQVUQXRNYXhWZXN0aW5nU2NoZWR1bGVzAQEFJEFtb3VudExvdwEBBWBTY2hlZHVsZUluZGV4T3V0T2ZCb3VuZHMBAQVUSW52YWxpZFNjaGVkdWxlUGFyYW1zAQEFKEF1dGhvcnNoaXABAQVEQ29sbGF0b3JTZWxlY3Rpb24BAkREVG9vTWFueUNhbmRpZGF0ZXMBAQVcVG9vRmV3RWxpZ2libGVDb2xsYXRvcnMBAQVAQWxyZWFkeUNhbmRpZGF0ZQEBBTBOb3RDYW5kaWRhdGUBAQVQVG9vTWFueUludnVsbmVyYWJsZXMBAQVMQWxyZWFkeUludnVsbmVyYWJsZQEBBTxOb3RJbnZ1bG5lcmFibGUBAQVcTm9Bc3NvY2lhdGVkVmFsaWRhdG9ySWQBAQVYVmFsaWRhdG9yTm90UmVnaXN0ZXJlZAEBBWxJbnNlcnRUb0NhbmRpZGF0ZUxpc3RGYWlsZWQBAQV0UmVtb3ZlRnJvbUNhbmRpZGF0ZUxpc3RGYWlsZWQBAQU0RGVwb3NpdFRvb0xvdwEBBWRVcGRhdGVDYW5kaWRhdGVMaXN0RmFpbGVkAQEFQEluc3VmZmljaWVudEJvbmQBAQVQVGFyZ2V0SXNOb3RDYW5kaWRhdGUBAQVASWRlbnRpY2FsRGVwb3NpdAEBBUBJbnZhbGlkVW5yZXNlcnZlAQEFHFNlc3Npb24BAhQwSW52YWxpZFByb29mAQEFXE5vQXNzb2NpYXRlZFZhbGlkYXRvcklkAQEFNER1cGxpY2F0ZWRLZXkBAQUYTm9LZXlzAQEFJE5vQWNjb3VudAEBBRBBdXJhAQEFHEF1cmFFeHQBAQUkWGNtcFF1ZXVlAQIUOEJhZFF1ZXVlQ29uZmlnAQEFQEFscmVhZHlTdXNwZW5kZWQBAQU4QWxyZWFkeVJlc3VtZWQBAQV0VG9vTWFueUFjdGl2ZU91dGJvdW5kQ2hhbm5lbHMBAQUYVG9vQmlnAQEFLFBvbGthZG90WGNtAQJgLFVucmVhY2hhYmxlAQEFLFNlbmRGYWlsdXJlAQEFIEZpbHRlcmVkAQEFSFVud2VpZ2hhYmxlTWVzc2FnZQEBBWBEZXN0aW5hdGlvbk5vdEludmVydGlibGUBAQUURW1wdHkBAQU4Q2Fubm90UmVhbmNob3IBAQU0VG9vTWFueUFzc2V0cwEBBTRJbnZhbGlkT3JpZ2luAQEFKEJhZFZlcnNpb24BAQUsQmFkTG9jYXRpb24BAQU4Tm9TdWJzY3JpcHRpb24BAQVEQWxyZWFkeVN1YnNjcmliZWQBAQVYQ2Fubm90Q2hlY2tPdXRUZWxlcG9ydAEBBShMb3dCYWxhbmNlAQEFMFRvb01hbnlMb2NrcwEBBUxBY2NvdW50Tm90U292ZXJlaWduAQEFKEZlZXNOb3RNZXQBAQUwTG9ja05vdEZvdW5kAQEFFEluVXNlAQEFaEludmFsaWRBc3NldFVua25vd25SZXNlcnZlAQEFeEludmFsaWRBc3NldFVuc3VwcG9ydGVkUmVzZXJ2ZQEBBTxUb29NYW55UmVzZXJ2ZXMBAQVgTG9jYWxFeGVjdXRpb25JbmNvbXBsZXRlAQEFKEN1bXVsdXNYY20BAQVEVG9LdXNhbWFYY21Sb3V0ZXIBAQUwTWVzc2FnZVF1ZXVlAQIkLE5vdFJlYXBhYmxlAQEFGE5vUGFnZQEBBSROb01lc3NhZ2UBAQVAQWxyZWFkeVByb2Nlc3NlZAEBBRhRdWV1ZWQBAQVISW5zdWZmaWNpZW50V2VpZ2h0AQEFYFRlbXBvcmFyaWx5VW5wcm9jZXNzYWJsZQEBBSxRdWV1ZVBhdXNlZAEBBUxSZWN1cnNpdmVEaXNhbGxvd2VkAQEFHFV0aWxpdHkBAgQwVG9vTWFueUNhbGxzAQEFIE11bHRpc2lnAQI4QE1pbmltdW1UaHJlc2hvbGQBAQU8QWxyZWFkeUFwcHJvdmVkAQEFRE5vQXBwcm92YWxzTmVlZGVkAQEFRFRvb0Zld1NpZ25hdG9yaWVzAQEFSFRvb01hbnlTaWduYXRvcmllcwEBBVRTaWduYXRvcmllc091dE9mT3JkZXIBAQVMU2VuZGVySW5TaWduYXRvcmllcwEBBSBOb3RGb3VuZAEBBSBOb3RPd25lcgEBBSxOb1RpbWVwb2ludAEBBThXcm9uZ1RpbWVwb2ludAEBBUxVbmV4cGVjdGVkVGltZXBvaW50AQEFPE1heFdlaWdodFRvb0xvdwEBBTRBbHJlYWR5U3RvcmVkAQEFFFByb3h5AQIgHFRvb01hbnkBAQUgTm90Rm91bmQBAQUgTm90UHJveHkBAQUsVW5wcm94eWFibGUBAQUkRHVwbGljYXRlAQEFME5vUGVybWlzc2lvbgEBBSxVbmFubm91bmNlZAEBBSxOb1NlbGZQcm94eQEBBRhBc3NldHMBAlQoQmFsYW5jZUxvdwEBBSROb0FjY291bnQBAQUwTm9QZXJtaXNzaW9uAQEFHFVua25vd24BAQUYRnJvemVuAQEFFEluVXNlAQEFKEJhZFdpdG5lc3MBAQU4TWluQmFsYW5jZVplcm8BAQVMVW5hdmFpbGFibGVDb25zdW1lcgEBBSxCYWRNZXRhZGF0YQEBBShVbmFwcHJvdmVkAQEFIFdvdWxkRGllAQEFNEFscmVhZHlFeGlzdHMBAQUkTm9EZXBvc2l0AQEFJFdvdWxkQnVybgEBBSRMaXZlQXNzZXQBAQUwQXNzZXROb3RMaXZlAQEFPEluY29ycmVjdFN0YXR1cwEBBSROb3RGcm96ZW4BAQU4Q2FsbGJhY2tGYWlsZWQBAQUoQmFkQXNzZXRJZAEBBRxVbmlxdWVzAQJIME5vUGVybWlzc2lvbgEBBURVbmtub3duQ29sbGVjdGlvbgEBBTRBbHJlYWR5RXhpc3RzAQEFKFdyb25nT3duZXIBAQUoQmFkV2l0bmVzcwEBBRRJblVzZQEBBRhGcm96ZW4BAQU0V3JvbmdEZWxlZ2F0ZQEBBShOb0RlbGVnYXRlAQEFKFVuYXBwcm92ZWQBAQUoVW5hY2NlcHRlZAEBBRhMb2NrZWQBAQVATWF4U3VwcGx5UmVhY2hlZAEBBUxNYXhTdXBwbHlBbHJlYWR5U2V0AQEFRE1heFN1cHBseVRvb1NtYWxsAQEFLFVua25vd25JdGVtAQEFKE5vdEZvclNhbGUBAQUkQmlkVG9vTG93AQEFEE5mdHMBArQwTm9QZXJtaXNzaW9uAQEFRFVua25vd25Db2xsZWN0aW9uAQEFNEFscmVhZHlFeGlzdHMBAQU8QXBwcm92YWxFeHBpcmVkAQEFKFdyb25nT3duZXIBAQUoQmFkV2l0bmVzcwEBBURDb2xsZWN0aW9uSWRJblVzZQEBBVBJdGVtc05vblRyYW5zZmVyYWJsZQEBBSxOb3REZWxlZ2F0ZQEBBTRXcm9uZ0RlbGVnYXRlAQEFKFVuYXBwcm92ZWQBAQUoVW5hY2NlcHRlZAEBBShJdGVtTG9ja2VkAQEFUExvY2tlZEl0ZW1BdHRyaWJ1dGVzAQEFaExvY2tlZENvbGxlY3Rpb25BdHRyaWJ1dGVzAQEFSExvY2tlZEl0ZW1NZXRhZGF0YQEBBWBMb2NrZWRDb2xsZWN0aW9uTWV0YWRhdGEBAQVATWF4U3VwcGx5UmVhY2hlZAEBBTxNYXhTdXBwbHlMb2NrZWQBAQVETWF4U3VwcGx5VG9vU21hbGwBAQUsVW5rbm93bkl0ZW0BAQUsVW5rbm93blN3YXABAQVATWV0YWRhdGFOb3RGb3VuZAEBBURBdHRyaWJ1dGVOb3RGb3VuZAEBBShOb3RGb3JTYWxlAQEFJEJpZFRvb0xvdwEBBVBSZWFjaGVkQXBwcm92YWxMaW1pdAEBBTxEZWFkbGluZUV4cGlyZWQBAQU0V3JvbmdEdXJhdGlvbgEBBThNZXRob2REaXNhYmxlZAEBBTBXcm9uZ1NldHRpbmcBAQVYSW5jb25zaXN0ZW50SXRlbUNvbmZpZwEBBSBOb0NvbmZpZwEBBTxSb2xlc05vdENsZWFyZWQBAQU4TWludE5vdFN0YXJ0ZWQBAQUkTWludEVuZGVkAQEFOEFscmVhZHlDbGFpbWVkAQEFNEluY29ycmVjdERhdGEBAQUsV3JvbmdPcmlnaW4BAQU4V3JvbmdTaWduYXR1cmUBAQVESW5jb3JyZWN0TWV0YWRhdGEBAQVkTWF4QXR0cmlidXRlc0xpbWl0UmVhY2hlZAEBBThXcm9uZ05hbWVzcGFjZQEBBUhDb2xsZWN0aW9uTm90RW1wdHkBAQU8V2l0bmVzc1JlcXVpcmVkAQEFNEZvcmVpZ25Bc3NldHMBAlQoQmFsYW5jZUxvdwEBBSROb0FjY291bnQBAQUwTm9QZXJtaXNzaW9uAQEFHFVua25vd24BAQUYRnJvemVuAQEFFEluVXNlAQEFKEJhZFdpdG5lc3MBAQU4TWluQmFsYW5jZVplcm8BAQVMVW5hdmFpbGFibGVDb25zdW1lcgEBBSxCYWRNZXRhZGF0YQEBBShVbmFwcHJvdmVkAQEFIFdvdWxkRGllAQEFNEFscmVhZHlFeGlzdHMBAQUkTm9EZXBvc2l0AQEFJFdvdWxkQnVybgEBBSRMaXZlQXNzZXQBAQUwQXNzZXROb3RMaXZlAQEFPEluY29ycmVjdFN0YXR1cwEBBSROb3RGcm96ZW4BAQU4Q2FsbGJhY2tGYWlsZWQBAQUoQmFkQXNzZXRJZAEBBShQb29sQXNzZXRzAQJUKEJhbGFuY2VMb3cBAQUkTm9BY2NvdW50AQEFME5vUGVybWlzc2lvbgEBBRxVbmtub3duAQEFGEZyb3plbgEBBRRJblVzZQEBBShCYWRXaXRuZXNzAQEFOE1pbkJhbGFuY2VaZXJvAQEFTFVuYXZhaWxhYmxlQ29uc3VtZXIBAQUsQmFkTWV0YWRhdGEBAQUoVW5hcHByb3ZlZAEBBSBXb3VsZERpZQEBBTRBbHJlYWR5RXhpc3RzAQEFJE5vRGVwb3NpdAEBBSRXb3VsZEJ1cm4BAQUkTGl2ZUFzc2V0AQEFMEFzc2V0Tm90TGl2ZQEBBTxJbmNvcnJlY3RTdGF0dXMBAQUkTm90RnJvemVuAQEFOENhbGxiYWNrRmFpbGVkAQEFKEJhZEFzc2V0SWQBAQU8QXNzZXRDb252ZXJzaW9uAQJcQEludmFsaWRBc3NldFBhaXIBAQUoUG9vbEV4aXN0cwEBBUhXcm9uZ0Rlc2lyZWRBbW91bnQBAQVgQW1vdW50T25lTGVzc1RoYW5NaW5pbWFsAQEFYEFtb3VudFR3b0xlc3NUaGFuTWluaW1hbAEBBWhSZXNlcnZlTGVmdExlc3NUaGFuTWluaW1hbAEBBUBBbW91bnRPdXRUb29IaWdoAQEFMFBvb2xOb3RGb3VuZAEBBSBPdmVyZmxvdwEBBYBBc3NldE9uZURlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYBBc3NldFR3b0RlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYxBc3NldE9uZVdpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBYxBc3NldFR3b1dpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBXBPcHRpbWFsQW1vdW50TGVzc1RoYW5EZXNpcmVkAQEFbEluc3VmZmljaWVudExpcXVpZGl0eU1pbnRlZAEBBTRaZXJvTGlxdWlkaXR5AQEFKFplcm9BbW91bnQBAQWMUHJvdmlkZWRNaW5pbXVtTm90U3VmZmljaWVudEZvclN3YXABAQWMUHJvdmlkZWRNYXhpbXVtTm90U3VmZmljaWVudEZvclN3YXABAQUsSW52YWxpZFBhdGgBAQU0Tm9uVW5pcXVlUGF0aAEBBVBJbmNvcnJlY3RQb29sQXNzZXRJZAEBBTBCZWxvd01pbmltdW0BAQVEQ29uc3VtZXJSZW1haW5pbmcBAQUsTm9Qcm92aWRlcnMBAQVAVG9vTWFueUNvbnN1bWVycwEBBRRUb2tlbgECKEBGdW5kc1VuYXZhaWxhYmxlAQEFME9ubHlQcm92aWRlcgEBBTBCZWxvd01pbmltdW0BAQUwQ2Fubm90Q3JlYXRlAQEFMFVua25vd25Bc3NldAEBBRhGcm96ZW4BAQUsVW5zdXBwb3J0ZWQBAQVAQ2Fubm90Q3JlYXRlSG9sZAEBBTROb3RFeHBlbmRhYmxlAQEFHEJsb2NrZWQBAQUoQXJpdGhtZXRpYwECDCRVbmRlcmZsb3cBAQUgT3ZlcmZsb3cBAQU4RGl2aXNpb25CeVplcm8BAQU0VHJhbnNhY3Rpb25hbAECCDBMaW1pdFJlYWNoZWQBAQUcTm9MYXllcgEBBSRFeGhhdXN0ZWQBAQUoQ29ycnVwdGlvbgEBBSxVbmF2YWlsYWJsZQEBBThSb290Tm90QWxsb3dlZAEBBQIcQEV4dHJpbnNpY1N1Y2Nlc3MBAAQ0ZGlzcGF0Y2hfaW5mb0A8RXh0cmluc2ljRmFpbGVkAQAIOGRpc3BhdGNoX2Vycm9ylDRkaXNwYXRjaF9pbmZvQCxDb2RlVXBkYXRlZAEBBShOZXdBY2NvdW50AQAEHGFjY291bnQANEtpbGxlZEFjY291bnQBAAQcYWNjb3VudAAgUmVtYXJrZWQBAAgYc2VuZGVyABBoYXNoIERVcGdyYWRlQXV0aG9yaXplZAEACCRjb2RlX2hhc2ggNGNoZWNrX3ZlcnNpb24UBiACGGBWYWxpZGF0aW9uRnVuY3Rpb25TdG9yZWQBAQVkVmFsaWRhdGlvbkZ1bmN0aW9uQXBwbGllZAEABFRyZWxheV9jaGFpbl9ibG9ja19udW0EbFZhbGlkYXRpb25GdW5jdGlvbkRpc2NhcmRlZAEBBWBEb3dud2FyZE1lc3NhZ2VzUmVjZWl2ZWQBAAQUY291bnQEZERvd253YXJkTWVzc2FnZXNQcm9jZXNzZWQBAAgsd2VpZ2h0X3VzZWQYIGRtcV9oZWFkIERVcHdhcmRNZXNzYWdlU2VudAEABDBtZXNzYWdlX2hhc2icAggQRnJlZQEBBSBSZXNlcnZlZAEBBQJYHEVuZG93ZWQBAAgcYWNjb3VudAAwZnJlZV9iYWxhbmNlCCBEdXN0TG9zdAEACBxhY2NvdW50ABhhbW91bnQIIFRyYW5zZmVyAQAMEGZyb20ACHRvABhhbW91bnQIKEJhbGFuY2VTZXQBAAgMd2hvABBmcmVlCCBSZXNlcnZlZAEACAx3aG8AGGFtb3VudAgoVW5yZXNlcnZlZAEACAx3aG8AGGFtb3VudAhIUmVzZXJ2ZVJlcGF0cmlhdGVkAQAQEGZyb20ACHRvABhhbW91bnQISGRlc3RpbmF0aW9uX3N0YXR1c6QcRGVwb3NpdAEACAx3aG8AGGFtb3VudAggV2l0aGRyYXcBAAgMd2hvABhhbW91bnQIHFNsYXNoZWQBAAgMd2hvABhhbW91bnQIGE1pbnRlZAEACAx3aG8AGGFtb3VudAgYQnVybmVkAQAIDHdobwAYYW1vdW50CCRTdXNwZW5kZWQBAAgMd2hvABhhbW91bnQIIFJlc3RvcmVkAQAIDHdobwAYYW1vdW50CCBVcGdyYWRlZAEABAx3aG8AGElzc3VlZAEABBhhbW91bnQIJFJlc2NpbmRlZAEABBhhbW91bnQIGExvY2tlZAEACAx3aG8AGGFtb3VudAggVW5sb2NrZWQBAAgMd2hvABhhbW91bnQIGEZyb3plbgEACAx3aG8AGGFtb3VudAgYVGhhd2VkAQAIDHdobwAYYW1vdW50CExUb3RhbElzc3VhbmNlRm9yY2VkAQAIDG9sZAgMbmV3CAIESFRyYW5zYWN0aW9uRmVlUGFpZAEADAx3aG8AKGFjdHVhbF9mZWUIDHRpcAgCLCRCeUdlbmVzaXMBBQGAGEJ5Rm9yawEACDBibG9ja19udW1iZXIIKGJsb2NrX2hhc2ggIFBvbGthZG90AQEFGEt1c2FtYQEBBRxXZXN0ZW5kAQEFGFJvY29jbwEBBRhXb2NvY28BAQUgRXRoZXJldW0BAAQgY2hhaW5faWQILEJpdGNvaW5Db3JlAQEFLEJpdGNvaW5DYXNoAQEFQFBvbGthZG90QnVsbGV0aW4BAQUGsAUBUAIoEFVuaXQBAQUcTW9uaWtlcgEFARAUSW5kZXgBAQIkRXhlY3V0aXZlAQEFJFRlY2huaWNhbAEBBSxMZWdpc2xhdGl2ZQEBBSBKdWRpY2lhbAEBBRxEZWZlbnNlAQEFOEFkbWluaXN0cmF0aW9uAQEFIFRyZWFzdXJ5AQEFAhQUVm9pY2UBAQUcTWVtYmVycwEABBRjb3VudAQgRnJhY3Rpb24BAAgMbm9tBBRkZW5vbQREQXRMZWFzdFByb3BvcnRpb24BAAgMbm9tBBRkZW5vbQRITW9yZVRoYW5Qcm9wb3J0aW9uAQAIDG5vbQQUZGVub20EAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFBMQBCATEAQwExAEQBMQBFATEARgExAEcBMQBIAIkEEhlcmUBAQUIWDEBAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFCFgyAQTEAQgIWDMBBMQBDAhYNAEExAEQCFg1AQTEARQIWDYBBMQBGAhYNwEExAEcCFg4AQTEASAACBxwYXJlbnRzBCBpbnRlcmlvcuQCCDhBc3NldFR4RmVlUGFpZAEAEAx3aG8AKGFjdHVhbF9mZWUIDHRpcAggYXNzZXRfaWToREFzc2V0UmVmdW5kRmFpbGVkAQAESG5hdGl2ZV9hbW91bnRfa2VwdAgCCDhWZXN0aW5nVXBkYXRlZAEACBxhY2NvdW50ACB1bnZlc3RlZAhAVmVzdGluZ0NvbXBsZXRlZAEABBxhY2NvdW50AAQAAAIoQE5ld0ludnVsbmVyYWJsZXMBAAQ0aW52dWxuZXJhYmxlc/RESW52dWxuZXJhYmxlQWRkZWQBAAQoYWNjb3VudF9pZABMSW52dWxuZXJhYmxlUmVtb3ZlZAEABChhY2NvdW50X2lkAFBOZXdEZXNpcmVkQ2FuZGlkYXRlcwEABEhkZXNpcmVkX2NhbmRpZGF0ZXMEQE5ld0NhbmRpZGFjeUJvbmQBAAQsYm9uZF9hbW91bnQIOENhbmRpZGF0ZUFkZGVkAQAIKGFjY291bnRfaWQAHGRlcG9zaXQIUENhbmRpZGF0ZUJvbmRVcGRhdGVkAQAIKGFjY291bnRfaWQAHGRlcG9zaXQIQENhbmRpZGF0ZVJlbW92ZWQBAAQoYWNjb3VudF9pZABEQ2FuZGlkYXRlUmVwbGFjZWQBAAwMb2xkAAxuZXcAHGRlcG9zaXQIaEludmFsaWRJbnZ1bG5lcmFibGVTa2lwcGVkAQAEKGFjY291bnRfaWQAAgQoTmV3U2Vzc2lvbgEABDRzZXNzaW9uX2luZGV4BAIEPFhjbXBNZXNzYWdlU2VudAEABDBtZXNzYWdlX2hhc2ggAqAgT3ZlcmZsb3cBAQU0VW5pbXBsZW1lbnRlZAEBBWBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb24BAQVkVW50cnVzdGVkVGVsZXBvcnRMb2NhdGlvbgEBBTBMb2NhdGlvbkZ1bGwBAQVUTG9jYXRpb25Ob3RJbnZlcnRpYmxlAQEFJEJhZE9yaWdpbgEBBTxJbnZhbGlkTG9jYXRpb24BAQU0QXNzZXROb3RGb3VuZAEBBVRGYWlsZWRUb1RyYW5zYWN0QXNzZXQBAQU8Tm90V2l0aGRyYXdhYmxlAQEFSExvY2F0aW9uQ2Fubm90SG9sZAEBBVRFeGNlZWRzTWF4TWVzc2FnZVNpemUBAQVYRGVzdGluYXRpb25VbnN1cHBvcnRlZAEBBSRUcmFuc3BvcnQBAQUoVW5yb3V0YWJsZQEBBTBVbmtub3duQ2xhaW0BAQU4RmFpbGVkVG9EZWNvZGUBAQVATWF4V2VpZ2h0SW52YWxpZAEBBThOb3RIb2xkaW5nRmVlcwEBBTBUb29FeHBlbnNpdmUBAQUQVHJhcAEBA0BFeHBlY3RhdGlvbkZhbHNlAQEFOFBhbGxldE5vdEZvdW5kAQEFME5hbWVNaXNtYXRjaAEBBUxWZXJzaW9uSW5jb21wYXRpYmxlAQEFUEhvbGRpbmdXb3VsZE92ZXJmbG93AQEFLEV4cG9ydEVycm9yAQEFOFJlYW5jaG9yRmFpbGVkAQEFGE5vRGVhbAEBBShGZWVzTm90TWV0AQEFJExvY2tFcnJvcgEBBTBOb1Blcm1pc3Npb24BAQUoVW5hbmNob3JlZAEBBThOb3REZXBvc2l0YWJsZQEBBUxVbmhhbmRsZWRYY21WZXJzaW9uAQEFSFdlaWdodExpbWl0UmVhY2hlZAEACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgcQmFycmllcgEBBUxXZWlnaHROb3RDb21wdXRhYmxlAQEFREV4Y2VlZHNTdGFja0xpbWl0AQEFAgwgQ29tcGxldGUBAAQQdXNlZBgoSW5jb21wbGV0ZQEACBB1c2VkGBRlcnJvcgUBFEVycm9yAQAEFGVycm9yBQEFASAFAUACGCRVbmRlZmluZWQBAQUUSW5kZXgBAQMYQXJyYXk0AQUBEBhBcnJheTgBBQEgHEFycmF5MTYBBQFAHEFycmF5MzIBBQGAAgggRnVuZ2libGUBAQMsTm9uRnVuZ2libGUBAhgkVW5kZWZpbmVkAQEFFEluZGV4AQEDGEFycmF5NAEFARAYQXJyYXk4AQUBIBxBcnJheTE2AQUBQBxBcnJheTMyAQUBgAAICGlk6AxmdW4ZAQQdAQADCAQFAQYlAQAYFGluZGV4BBBuYW1lJCxtb2R1bGVfbmFtZSQUbWFqb3IEFG1pbm9yBBRwYXRjaAQELQEAAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAIYEE51bGwBAQUYQXNzZXRzAQQdAQA8RXhlY3V0aW9uUmVzdWx0AQYlARxWZXJzaW9uAQECLFBhbGxldHNJbmZvAQQtAQA4RGlzcGF0Y2hSZXN1bHQBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAboAhAYTmF0aXZlAQEFQFNvdmVyZWlnbkFjY291bnQBAQUkU3VwZXJ1c2VyAQEFDFhjbQEBBQAMLGRlc3RpbmF0aW9u6CBxdWVyeV9pZAgobWF4X3dlaWdodBgCCCBGdW5naWJsZQEBBSxOb25GdW5naWJsZQEBBQIQDEFsbAEBBRRBbGxPZgEACAhpZOgMZnVuSQEoQWxsQ291bnRlZAEBAjBBbGxPZkNvdW50ZWQBAAwIaWToDGZ1bkkBFGNvdW50BAIIIERlZmluaXRlAQQdAQAQV2lsZAECEAxBbGwBAQUUQWxsT2YBAAgIaWToDGZ1bkkBKEFsbENvdW50ZWQBAQIwQWxsT2ZDb3VudGVkAQAMCGlk6AxmdW5JARRjb3VudAQCCCRVbmxpbWl0ZWQBAQUcTGltaXRlZAEACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgCwDRXaXRoZHJhd0Fzc2V0AQQdAQBUUmVzZXJ2ZUFzc2V0RGVwb3NpdGVkAQQdAQBYUmVjZWl2ZVRlbGVwb3J0ZWRBc3NldAEEHQEANFF1ZXJ5UmVzcG9uc2UBABAgcXVlcnlfaWQIIHJlc3BvbnNlOQEobWF4X3dlaWdodBgccXVlcmllcj0BNFRyYW5zZmVyQXNzZXQBAAgYYXNzZXRzIQEsYmVuZWZpY2lhcnnoUFRyYW5zZmVyUmVzZXJ2ZUFzc2V0AQAMGGFzc2V0cyEBEGRlc3ToDHhjbV0BIFRyYW5zYWN0AQAMLG9yaWdpbl9raW5kQQFYcmVxdWlyZV93ZWlnaHRfYXRfbW9zdBgQY2FsbCRkSHJtcE5ld0NoYW5uZWxPcGVuUmVxdWVzdAEADBhzZW5kZXIEQG1heF9tZXNzYWdlX3NpemUEMG1heF9jYXBhY2l0eQRMSHJtcENoYW5uZWxBY2NlcHRlZAEABCRyZWNpcGllbnQESEhybXBDaGFubmVsQ2xvc2luZwEADCRpbml0aWF0b3IEGHNlbmRlcgQkcmVjaXBpZW50BCxDbGVhck9yaWdpbgEBBTREZXNjZW5kT3JpZ2luAQIkEEhlcmUBAQUIWDEBAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFCFgyAQTEAQgIWDMBBMQBDAhYNAEExAEQCFg1AQTEARQIWDYBBMQBGAhYNwEExAEcCFg4AQTEASAsUmVwb3J0RXJyb3IBAAwsZGVzdGluYXRpb27oIHF1ZXJ5X2lkCChtYXhfd2VpZ2h0GDBEZXBvc2l0QXNzZXQBAAgYYXNzZXRzUQEsYmVuZWZpY2lhcnnoTERlcG9zaXRSZXNlcnZlQXNzZXQBAAwYYXNzZXRzUQEQZGVzdOgMeGNtXQE0RXhjaGFuZ2VBc3NldAEADBBnaXZlUQEQd2FudCEBHG1heGltYWwUXEluaXRpYXRlUmVzZXJ2ZVdpdGhkcmF3AQAMGGFzc2V0c1EBHHJlc2VydmXoDHhjbV0BQEluaXRpYXRlVGVsZXBvcnQBAAwYYXNzZXRzUQEQZGVzdOgMeGNtXQE0UmVwb3J0SG9sZGluZwEACDRyZXNwb25zZV9pbmZvRQEYYXNzZXRzUQEwQnV5RXhlY3V0aW9uAQAIEGZlZXMdATB3ZWlnaHRfbGltaXRVATRSZWZ1bmRTdXJwbHVzAQEFPFNldEVycm9ySGFuZGxlcgEEWQEALFNldEFwcGVuZGl4AQRZAQAoQ2xlYXJFcnJvcgEBBShDbGFpbUFzc2V0AQAIGGFzc2V0cyEBGHRpY2tldOgQVHJhcAEBA0BTdWJzY3JpYmVWZXJzaW9uAQAIIHF1ZXJ5X2lkCExtYXhfcmVzcG9uc2Vfd2VpZ2h0GEhVbnN1YnNjcmliZVZlcnNpb24BAQUkQnVybkFzc2V0AQQdAQAsRXhwZWN0QXNzZXQBBB0BADBFeHBlY3RPcmlnaW4BBugsRXhwZWN0RXJyb3IBBiUBUEV4cGVjdFRyYW5zYWN0U3RhdHVzAQIMHFN1Y2Nlc3MBAQUURXJyb3IBBQA4VHJ1bmNhdGVkRXJyb3IBBQAsUXVlcnlQYWxsZXQBAAgsbW9kdWxlX25hbWUkNHJlc3BvbnNlX2luZm9FATBFeHBlY3RQYWxsZXQBABQUaW5kZXgEEG5hbWUkLG1vZHVsZV9uYW1lJCxjcmF0ZV9tYWpvcgQ8bWluX2NyYXRlX21pbm9yBFBSZXBvcnRUcmFuc2FjdFN0YXR1cwEADCxkZXN0aW5hdGlvbuggcXVlcnlfaWQIKG1heF93ZWlnaHQYTENsZWFyVHJhbnNhY3RTdGF0dXMBAQU8VW5pdmVyc2FsT3JpZ2luAQIoJFBhcmFjaGFpbgEBAixBY2NvdW50SWQzMgEACBxuZXR3b3JrtAhpZCA4QWNjb3VudEluZGV4NjQBAAgcbmV0d29ya7QUaW5kZXgIMEFjY291bnRLZXkyMAEACBxuZXR3b3JrtAxrZXm4OFBhbGxldEluc3RhbmNlAQECMEdlbmVyYWxJbmRleAEBAyhHZW5lcmFsS2V5AQAIGGxlbmd0aAQQZGF0YSAkT25seUNoaWxkAQEFJFBsdXJhbGl0eQEACAhpZLwQcGFydMA8R2xvYmFsQ29uc2Vuc3VzAQIsJEJ5R2VuZXNpcwEFAYAYQnlGb3JrAQAIMGJsb2NrX251bWJlcggoYmxvY2tfaGFzaCAgUG9sa2Fkb3QBAQUYS3VzYW1hAQEFHFdlc3RlbmQBAQUYUm9jb2NvAQEFGFdvY29jbwEBBSBFdGhlcmV1bQEABCBjaGFpbl9pZAgsQml0Y29pbkNvcmUBAQUsQml0Y29pbkNhc2gBAQVAUG9sa2Fkb3RCdWxsZXRpbgEBBTRFeHBvcnRNZXNzYWdlAQAMHG5ldHdvcmuwLGRlc3RpbmF0aW9u5Ax4Y21dASRMb2NrQXNzZXQBAAgUYXNzZXQdASB1bmxvY2tlcugsVW5sb2NrQXNzZXQBAAgUYXNzZXQdARh0YXJnZXToOE5vdGVVbmxvY2thYmxlAQAIFGFzc2V0HQEUb3duZXLoNFJlcXVlc3RVbmxvY2sBAAgUYXNzZXQdARhsb2NrZXLoLFNldEZlZXNNb2RlAQAEMGppdF93aXRoZHJhdxQgU2V0VG9waWMBBQGAKENsZWFyVG9waWMBAQUsQWxpYXNPcmlnaW4BAAgccGFyZW50cwQgaW50ZXJpb3LkPFVucGFpZEV4ZWN1dGlvbgEACDB3ZWlnaHRfbGltaXRVATBjaGVja19vcmlnaW49AQRZAQACEAxBbnkBAQUUTmFtZWQBBQAgUG9sa2Fkb3QBAQUYS3VzYW1hAQEFAigQVW5pdAEBBRROYW1lZAEFABRJbmRleAEBAiRFeGVjdXRpdmUBAQUkVGVjaG5pY2FsAQEFLExlZ2lzbGF0aXZlAQEFIEp1ZGljaWFsAQEFHERlZmVuc2UBAQU4QWRtaW5pc3RyYXRpb24BAQUgVHJlYXN1cnkBAQUCJCRQYXJhY2hhaW4BAQIsQWNjb3VudElkMzIBAAgcbmV0d29ya2EBCGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrYQEUaW5kZXgIMEFjY291bnRLZXkyMAEACBxuZXR3b3JrYQEMa2V5uDhQYWxsZXRJbnN0YW5jZQEBAjBHZW5lcmFsSW5kZXgBAQMoR2VuZXJhbEtleQEFACRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkZQEQcGFydMACJBBIZXJlAQEFCFgxAQIkJFBhcmFjaGFpbgEBAixBY2NvdW50SWQzMgEACBxuZXR3b3JrYQEIaWQgOEFjY291bnRJbmRleDY0AQAIHG5ldHdvcmthARRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmthAQxrZXm4OFBhbGxldEluc3RhbmNlAQECMEdlbmVyYWxJbmRleAEBAyhHZW5lcmFsS2V5AQUAJE9ubHlDaGlsZAEBBSRQbHVyYWxpdHkBAAgIaWRlARBwYXJ0wAhYMgEEaQEBCAhYMwEEaQEBDAhYNAEEaQEBEAhYNQEEaQEBFAhYNgEEaQEBGAhYNwEEaQEBHAhYOAEEaQEBIAAIHHBhcmVudHMEIGludGVyaW9ybQECCCBDb25jcmV0ZQEACBxwYXJlbnRzBCBpbnRlcmlvcm0BIEFic3RyYWN0AQUAAhwkVW5kZWZpbmVkAQEFFEluZGV4AQEDGEFycmF5NAEFARAYQXJyYXk4AQUBIBxBcnJheTE2AQUBQBxBcnJheTMyAQUBgBBCbG9iAQUAAgggRnVuZ2libGUBAQMsTm9uRnVuZ2libGUBAhwkVW5kZWZpbmVkAQEFFEluZGV4AQEDGEFycmF5NAEFARAYQXJyYXk4AQUBIBxBcnJheTE2AQUBQBxBcnJheTMyAQUBgBBCbG9iAQUAAAgIaWR1AQxmdW59AQSBAQACCCBDb25jcmV0ZQEACBxwYXJlbnRzBCBpbnRlcmlvcuQgQWJzdHJhY3QBBQGAAAgIaWSJAQxmdW4ZAQSNAQACDAhWMgEEgQEACFYzAQSNAQAIVjQBBB0BAAIMCFYyAQAIHHBhcmVudHMEIGludGVyaW9ybQEIVjMBAAgccGFyZW50cwQgaW50ZXJpb3LkCFY0AQAIHHBhcmVudHMEIGludGVyaW9y5AJgJEF0dGVtcHRlZAEABBxvdXRjb21lCQEQU2VudAEAEBhvcmlnaW7oLGRlc3RpbmF0aW9u6BxtZXNzYWdlXQEobWVzc2FnZV9pZCBIVW5leHBlY3RlZFJlc3BvbnNlAQAIGG9yaWdpbuggcXVlcnlfaWQINFJlc3BvbnNlUmVhZHkBAAggcXVlcnlfaWQIIHJlc3BvbnNlOQEgTm90aWZpZWQBAAwgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleARATm90aWZ5T3ZlcndlaWdodAEAFCBxdWVyeV9pZAgwcGFsbGV0X2luZGV4BChjYWxsX2luZGV4BDRhY3R1YWxfd2VpZ2h0GExtYXhfYnVkZ2V0ZWRfd2VpZ2h0GExOb3RpZnlEaXNwYXRjaEVycm9yAQAMIHF1ZXJ5X2lkCDBwYWxsZXRfaW5kZXgEKGNhbGxfaW5kZXgESE5vdGlmeURlY29kZUZhaWxlZAEADCBxdWVyeV9pZAgwcGFsbGV0X2luZGV4BChjYWxsX2luZGV4BEBJbnZhbGlkUmVzcG9uZGVyAQAMGG9yaWdpbuggcXVlcnlfaWQIRGV4cGVjdGVkX2xvY2F0aW9uPQFcSW52YWxpZFJlc3BvbmRlclZlcnNpb24BAAgYb3JpZ2lu6CBxdWVyeV9pZAg0UmVzcG9uc2VUYWtlbgEABCBxdWVyeV9pZAg0QXNzZXRzVHJhcHBlZAEADBBoYXNoIBhvcmlnaW7oGGFzc2V0c5UBVFZlcnNpb25DaGFuZ2VOb3RpZmllZAEAECxkZXN0aW5hdGlvbugYcmVzdWx0BBBjb3N0IQEobWVzc2FnZV9pZCBcU3VwcG9ydGVkVmVyc2lvbkNoYW5nZWQBAAggbG9jYXRpb27oHHZlcnNpb24EUE5vdGlmeVRhcmdldFNlbmRGYWlsAQAMIGxvY2F0aW9u6CBxdWVyeV9pZAgUZXJyb3IFAWROb3RpZnlUYXJnZXRNaWdyYXRpb25GYWlsAQAIIGxvY2F0aW9umQEgcXVlcnlfaWQIVEludmFsaWRRdWVyaWVyVmVyc2lvbgEACBhvcmlnaW7oIHF1ZXJ5X2lkCDhJbnZhbGlkUXVlcmllcgEAEBhvcmlnaW7oIHF1ZXJ5X2lkCEBleHBlY3RlZF9xdWVyaWVy6FBtYXliZV9hY3R1YWxfcXVlcmllcj0BUFZlcnNpb25Ob3RpZnlTdGFydGVkAQAMLGRlc3RpbmF0aW9u6BBjb3N0IQEobWVzc2FnZV9pZCBYVmVyc2lvbk5vdGlmeVJlcXVlc3RlZAEADCxkZXN0aW5hdGlvbugQY29zdCEBKG1lc3NhZ2VfaWQgYFZlcnNpb25Ob3RpZnlVbnJlcXVlc3RlZAEADCxkZXN0aW5hdGlvbugQY29zdCEBKG1lc3NhZ2VfaWQgIEZlZXNQYWlkAQAIGHBheWluZ+gQZmVlcyEBNEFzc2V0c0NsYWltZWQBAAwQaGFzaCAYb3JpZ2lu6Bhhc3NldHOVAWBWZXJzaW9uTWlncmF0aW9uRmluaXNoZWQBAAQcdmVyc2lvbgQCDDRJbnZhbGlkRm9ybWF0AQUBgEhVbnN1cHBvcnRlZFZlcnNpb24BBQGAQEV4ZWN1dGVkRG93bndhcmQBAwggCQECDBBIZXJlAQEFGFBhcmVudAEBBRxTaWJsaW5nAQECAhgkQmFkRm9ybWF0AQEFHENvcnJ1cHQBAQUsVW5zdXBwb3J0ZWQBAQUoT3ZlcndlaWdodAEACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgUWWllbGQBAQVEU3RhY2tMaW1pdFJlYWNoZWQBAQUCEEBQcm9jZXNzaW5nRmFpbGVkAQAMCGlkIBhvcmlnaW6lARRlcnJvcqkBJFByb2Nlc3NlZAEAEAhpZCAYb3JpZ2lupQEsd2VpZ2h0X3VzZWQYHHN1Y2Nlc3MUSE92ZXJ3ZWlnaHRFbnF1ZXVlZAEAEAhpZCAYb3JpZ2lupQEocGFnZV9pbmRleAQ0bWVzc2FnZV9pbmRleAQoUGFnZVJlYXBlZAEACBhvcmlnaW6lARRpbmRleAQBBQexAZQCGEBCYXRjaEludGVycnVwdGVkAQAIFGluZGV4BBRlcnJvcpQ4QmF0Y2hDb21wbGV0ZWQBAQVgQmF0Y2hDb21wbGV0ZWRXaXRoRXJyb3JzAQEFNEl0ZW1Db21wbGV0ZWQBAQUoSXRlbUZhaWxlZAEABBRlcnJvcpQwRGlzcGF0Y2hlZEFzAQAEGHJlc3VsdLUBAAgYaGVpZ2h0BBRpbmRleAQCECxOZXdNdWx0aXNpZwEADCRhcHByb3ZpbmcAIG11bHRpc2lnACRjYWxsX2hhc2ggQE11bHRpc2lnQXBwcm92YWwBABAkYXBwcm92aW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIEBNdWx0aXNpZ0V4ZWN1dGVkAQAUJGFwcHJvdmluZwAkdGltZXBvaW50vQEgbXVsdGlzaWcAJGNhbGxfaGFzaCAYcmVzdWx0tQFETXVsdGlzaWdDYW5jZWxsZWQBABAoY2FuY2VsbGluZwAkdGltZXBvaW50vQEgbXVsdGlzaWcAJGNhbGxfaGFzaCACHAxBbnkBAQUsTm9uVHJhbnNmZXIBAQUsQ2FuY2VsUHJveHkBAQUYQXNzZXRzAQEFKEFzc2V0T3duZXIBAQUwQXNzZXRNYW5hZ2VyAQEFIENvbGxhdG9yAQEFAhQ0UHJveHlFeGVjdXRlZAEABBhyZXN1bHS1ASxQdXJlQ3JlYXRlZAEAEBBwdXJlAAx3aG8AKHByb3h5X3R5cGXFAVBkaXNhbWJpZ3VhdGlvbl9pbmRleAQkQW5ub3VuY2VkAQAMEHJlYWwAFHByb3h5ACRjYWxsX2hhc2ggKFByb3h5QWRkZWQBABAkZGVsZWdhdG9yACRkZWxlZ2F0ZWUAKHByb3h5X3R5cGXFARRkZWxheQQwUHJveHlSZW1vdmVkAQAQJGRlbGVnYXRvcgAkZGVsZWdhdGVlAChwcm94eV90eXBlxQEUZGVsYXkEAmgcQ3JlYXRlZAEADCBhc3NldF9pZAQcY3JlYXRvcgAUb3duZXIAGElzc3VlZAEADCBhc3NldF9pZAQUb3duZXIAGGFtb3VudAgsVHJhbnNmZXJyZWQBABAgYXNzZXRfaWQEEGZyb20ACHRvABhhbW91bnQIGEJ1cm5lZAEADCBhc3NldF9pZAQUb3duZXIAHGJhbGFuY2UILFRlYW1DaGFuZ2VkAQAQIGFzc2V0X2lkBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyADBPd25lckNoYW5nZWQBAAggYXNzZXRfaWQEFG93bmVyABhGcm96ZW4BAAggYXNzZXRfaWQEDHdobwAYVGhhd2VkAQAIIGFzc2V0X2lkBAx3aG8ALEFzc2V0RnJvemVuAQAEIGFzc2V0X2lkBCxBc3NldFRoYXdlZAEABCBhc3NldF9pZAREQWNjb3VudHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQESGFjY291bnRzX2Rlc3Ryb3llZARIYWNjb3VudHNfcmVtYWluaW5nBEhBcHByb3ZhbHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQETGFwcHJvdmFsc19kZXN0cm95ZWQETGFwcHJvdmFsc19yZW1haW5pbmcESERlc3RydWN0aW9uU3RhcnRlZAEABCBhc3NldF9pZAQkRGVzdHJveWVkAQAEIGFzc2V0X2lkBDBGb3JjZUNyZWF0ZWQBAAggYXNzZXRfaWQEFG93bmVyACxNZXRhZGF0YVNldAEAFCBhc3NldF9pZAQQbmFtZSQYc3ltYm9sJCBkZWNpbWFscwQkaXNfZnJvemVuFDxNZXRhZGF0YUNsZWFyZWQBAAQgYXNzZXRfaWQEQEFwcHJvdmVkVHJhbnNmZXIBABAgYXNzZXRfaWQEGHNvdXJjZQAgZGVsZWdhdGUAGGFtb3VudAhEQXBwcm92YWxDYW5jZWxsZWQBAAwgYXNzZXRfaWQEFG93bmVyACBkZWxlZ2F0ZQBMVHJhbnNmZXJyZWRBcHByb3ZlZAEAFCBhc3NldF9pZAQUb3duZXIAIGRlbGVnYXRlACxkZXN0aW5hdGlvbgAYYW1vdW50CEhBc3NldFN0YXR1c0NoYW5nZWQBAAQgYXNzZXRfaWQEWEFzc2V0TWluQmFsYW5jZUNoYW5nZWQBAAggYXNzZXRfaWQEPG5ld19taW5fYmFsYW5jZQgcVG91Y2hlZAEADCBhc3NldF9pZAQMd2hvACRkZXBvc2l0b3IAHEJsb2NrZWQBAAggYXNzZXRfaWQEDHdobwAkRGVwb3NpdGVkAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAgkV2l0aGRyYXduAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAgEBAAGBAYAAmwcQ3JlYXRlZAEADChjb2xsZWN0aW9uBBxjcmVhdG9yABRvd25lcgAwRm9yY2VDcmVhdGVkAQAIKGNvbGxlY3Rpb24EFG93bmVyACREZXN0cm95ZWQBAAQoY29sbGVjdGlvbgQYSXNzdWVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACxUcmFuc2ZlcnJlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBBmcm9tAAh0bwAYQnVybmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyABhGcm96ZW4BAAgoY29sbGVjdGlvbgQQaXRlbQQYVGhhd2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EQENvbGxlY3Rpb25Gcm96ZW4BAAQoY29sbGVjdGlvbgRAQ29sbGVjdGlvblRoYXdlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyAEBBcHByb3ZlZFRyYW5zZmVyAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQBEQXBwcm92YWxDYW5jZWxsZWQBABAoY29sbGVjdGlvbgQQaXRlbQQUb3duZXIAIGRlbGVnYXRlAERJdGVtU3RhdHVzQ2hhbmdlZAEABChjb2xsZWN0aW9uBFRDb2xsZWN0aW9uTWV0YWRhdGFTZXQBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRDb2xsZWN0aW9uTWV0YWRhdGFDbGVhcmVkAQAEKGNvbGxlY3Rpb24ELE1ldGFkYXRhU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAIKGNvbGxlY3Rpb24EEGl0ZW0ELFJlZGVwb3NpdGVkAQAIKGNvbGxlY3Rpb24EQHN1Y2Nlc3NmdWxfaXRlbXPRATBBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQUdmFsdWUkQEF0dHJpYnV0ZUNsZWFyZWQBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSRoT3duZXJzaGlwQWNjZXB0YW5jZUNoYW5nZWQBAAgMd2hvAEBtYXliZV9jb2xsZWN0aW9u1QFYQ29sbGVjdGlvbk1heFN1cHBseVNldAEACChjb2xsZWN0aW9uBChtYXhfc3VwcGx5BDBJdGVtUHJpY2VTZXQBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIRHdoaXRlbGlzdGVkX2J1eWVy2QFASXRlbVByaWNlUmVtb3ZlZAEACChjb2xsZWN0aW9uBBBpdGVtBChJdGVtQm91Z2h0AQAUKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCBhzZWxsZXIAFGJ1eWVyAAIQGFBhbGxldAEBBTxDb2xsZWN0aW9uT3duZXIBAQUkSXRlbU93bmVyAQEFHEFjY291bnQBAQECCBBTZW5kAQEFHFJlY2VpdmUBAQUACBhhbW91bnQIJGRpcmVjdGlvbuUBBukBAggsVXNlZFRvQ2xhaW0BAQJAVHJhbnNmZXJEaXNhYmxlZAEBBQKYHENyZWF0ZWQBAAwoY29sbGVjdGlvbgQcY3JlYXRvcgAUb3duZXIAMEZvcmNlQ3JlYXRlZAEACChjb2xsZWN0aW9uBBRvd25lcgAkRGVzdHJveWVkAQAEKGNvbGxlY3Rpb24EGElzc3VlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAsVHJhbnNmZXJyZWQBABAoY29sbGVjdGlvbgQQaXRlbQQQZnJvbQAIdG8AGEJ1cm5lZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBISXRlbVRyYW5zZmVyTG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1UcmFuc2ZlclVubG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1Qcm9wZXJ0aWVzTG9ja2VkAQAQKGNvbGxlY3Rpb24EEGl0ZW0ENGxvY2tfbWV0YWRhdGEUPGxvY2tfYXR0cmlidXRlcxRAQ29sbGVjdGlvbkxvY2tlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXLZARRhZG1pbtkBHGZyZWV6ZXLZAUBUcmFuc2ZlckFwcHJvdmVkAQAUKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQAgZGVhZGxpbmXVAURBcHByb3ZhbENhbmNlbGxlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAgZGVsZWdhdGUAVEFsbEFwcHJvdmFsc0NhbmNlbGxlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBcQ29sbGVjdGlvbkNvbmZpZ0NoYW5nZWQBAAQoY29sbGVjdGlvbgRUQ29sbGVjdGlvbk1ldGFkYXRhU2V0AQAIKGNvbGxlY3Rpb24EEGRhdGEkZENvbGxlY3Rpb25NZXRhZGF0YUNsZWFyZWQBAAQoY29sbGVjdGlvbgQ8SXRlbU1ldGFkYXRhU2V0AQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkTEl0ZW1NZXRhZGF0YUNsZWFyZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQsUmVkZXBvc2l0ZWQBAAgoY29sbGVjdGlvbgRAc3VjY2Vzc2Z1bF9pdGVtc9EBMEF0dHJpYnV0ZVNldAEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQkbmFtZXNwYWNl4QFAQXR0cmlidXRlQ2xlYXJlZAEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JCRuYW1lc3BhY2XhAWxJdGVtQXR0cmlidXRlc0FwcHJvdmFsQWRkZWQBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGUAdEl0ZW1BdHRyaWJ1dGVzQXBwcm92YWxSZW1vdmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRlAGhPd25lcnNoaXBBY2NlcHRhbmNlQ2hhbmdlZAEACAx3aG8AQG1heWJlX2NvbGxlY3Rpb27VAVhDb2xsZWN0aW9uTWF4U3VwcGx5U2V0AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEdENvbGxlY3Rpb25NaW50U2V0dGluZ3NVcGRhdGVkAQAEKGNvbGxlY3Rpb24EbE5leHRDb2xsZWN0aW9uSWRJbmNyZW1lbnRlZAEABBxuZXh0X2lk1QEwSXRlbVByaWNlU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCER3aGl0ZWxpc3RlZF9idXllctkBQEl0ZW1QcmljZVJlbW92ZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQoSXRlbUJvdWdodAEAFChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZQgYc2VsbGVyABRidXllcgAcVGlwU2VudAEAFChjb2xsZWN0aW9uBBBpdGVtBBhzZW5kZXIAIHJlY2VpdmVyABhhbW91bnQILFN3YXBDcmVhdGVkAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24EMGRlc2lyZWRfaXRlbdUBFHByaWNl7QEgZGVhZGxpbmUENFN3YXBDYW5jZWxsZWQBABhIb2ZmZXJlZF9jb2xsZWN0aW9uBDBvZmZlcmVkX2l0ZW0ESGRlc2lyZWRfY29sbGVjdGlvbgQwZGVzaXJlZF9pdGVt1QEUcHJpY2XtASBkZWFkbGluZQQsU3dhcENsYWltZWQBACA8c2VudF9jb2xsZWN0aW9uBCRzZW50X2l0ZW0EPHNlbnRfaXRlbV9vd25lcgBMcmVjZWl2ZWRfY29sbGVjdGlvbgQ0cmVjZWl2ZWRfaXRlbQRMcmVjZWl2ZWRfaXRlbV9vd25lcgAUcHJpY2XtASBkZWFkbGluZQRYUHJlU2lnbmVkQXR0cmlidXRlc1NldAEADChjb2xsZWN0aW9uBBBpdGVtBCRuYW1lc3BhY2XhAUhQYWxsZXRBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQQaXRlbdUBJGF0dHJpYnV0ZfEBFHZhbHVlJAJoHENyZWF0ZWQBAAwgYXNzZXRfaWToHGNyZWF0b3IAFG93bmVyABhJc3N1ZWQBAAwgYXNzZXRfaWToFG93bmVyABhhbW91bnQILFRyYW5zZmVycmVkAQAQIGFzc2V0X2lk6BBmcm9tAAh0bwAYYW1vdW50CBhCdXJuZWQBAAwgYXNzZXRfaWToFG93bmVyABxiYWxhbmNlCCxUZWFtQ2hhbmdlZAEAECBhc3NldF9pZOgYaXNzdWVyABRhZG1pbgAcZnJlZXplcgAwT3duZXJDaGFuZ2VkAQAIIGFzc2V0X2lk6BRvd25lcgAYRnJvemVuAQAIIGFzc2V0X2lk6Ax3aG8AGFRoYXdlZAEACCBhc3NldF9pZOgMd2hvACxBc3NldEZyb3plbgEABCBhc3NldF9pZOgsQXNzZXRUaGF3ZWQBAAQgYXNzZXRfaWToREFjY291bnRzRGVzdHJveWVkAQAMIGFzc2V0X2lk6EhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwRIQXBwcm92YWxzRGVzdHJveWVkAQAMIGFzc2V0X2lk6ExhcHByb3ZhbHNfZGVzdHJveWVkBExhcHByb3ZhbHNfcmVtYWluaW5nBEhEZXN0cnVjdGlvblN0YXJ0ZWQBAAQgYXNzZXRfaWToJERlc3Ryb3llZAEABCBhc3NldF9pZOgwRm9yY2VDcmVhdGVkAQAIIGFzc2V0X2lk6BRvd25lcgAsTWV0YWRhdGFTZXQBABQgYXNzZXRfaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAEIGFzc2V0X2lk6EBBcHByb3ZlZFRyYW5zZmVyAQAQIGFzc2V0X2lk6Bhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIREFwcHJvdmFsQ2FuY2VsbGVkAQAMIGFzc2V0X2lk6BRvd25lcgAgZGVsZWdhdGUATFRyYW5zZmVycmVkQXBwcm92ZWQBABQgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAhIQXNzZXRTdGF0dXNDaGFuZ2VkAQAEIGFzc2V0X2lk6FhBc3NldE1pbkJhbGFuY2VDaGFuZ2VkAQAIIGFzc2V0X2lk6DxuZXdfbWluX2JhbGFuY2UIHFRvdWNoZWQBAAwgYXNzZXRfaWToDHdobwAkZGVwb3NpdG9yABxCbG9ja2VkAQAIIGFzc2V0X2lk6Ax3aG8AJERlcG9zaXRlZAEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIJFdpdGhkcmF3bgEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIBOgBCAMI6AgEAQIAAhgsUG9vbENyZWF0ZWQBABAcY3JlYXRvcgAccG9vbF9pZP0BMHBvb2xfYWNjb3VudAAgbHBfdG9rZW4EOExpcXVpZGl0eUFkZGVkAQAcDHdobwAcbWludF90bwAccG9vbF9pZP0BQGFtb3VudDFfcHJvdmlkZWQIQGFtb3VudDJfcHJvdmlkZWQIIGxwX3Rva2VuBDxscF90b2tlbl9taW50ZWQIQExpcXVpZGl0eVJlbW92ZWQBACAMd2hvACx3aXRoZHJhd190bwAccG9vbF9pZP0BHGFtb3VudDEIHGFtb3VudDIIIGxwX3Rva2VuBDxscF90b2tlbl9idXJuZWQIOHdpdGhkcmF3YWxfZmVlBDBTd2FwRXhlY3V0ZWQBABQMd2hvABxzZW5kX3RvACRhbW91bnRfaW4IKGFtb3VudF9vdXQIEHBhdGgFAkhTd2FwQ3JlZGl0RXhlY3V0ZWQBAAwkYW1vdW50X2luCChhbW91bnRfb3V0CBBwYXRoBQIcVG91Y2hlZAEACBxwb29sX2lk/QEMd2hvAAJUGFN5c3RlbQECHEBFeHRyaW5zaWNTdWNjZXNzAQAENGRpc3BhdGNoX2luZm9APEV4dHJpbnNpY0ZhaWxlZAEACDhkaXNwYXRjaF9lcnJvcpQ0ZGlzcGF0Y2hfaW5mb0AsQ29kZVVwZGF0ZWQBAQUoTmV3QWNjb3VudAEABBxhY2NvdW50ADRLaWxsZWRBY2NvdW50AQAEHGFjY291bnQAIFJlbWFya2VkAQAIGHNlbmRlcgAQaGFzaCBEVXBncmFkZUF1dGhvcml6ZWQBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFDxQYXJhY2hhaW5TeXN0ZW0BAhhgVmFsaWRhdGlvbkZ1bmN0aW9uU3RvcmVkAQEFZFZhbGlkYXRpb25GdW5jdGlvbkFwcGxpZWQBAARUcmVsYXlfY2hhaW5fYmxvY2tfbnVtBGxWYWxpZGF0aW9uRnVuY3Rpb25EaXNjYXJkZWQBAQVgRG93bndhcmRNZXNzYWdlc1JlY2VpdmVkAQAEFGNvdW50BGREb3dud2FyZE1lc3NhZ2VzUHJvY2Vzc2VkAQAILHdlaWdodF91c2VkGCBkbXFfaGVhZCBEVXB3YXJkTWVzc2FnZVNlbnQBAAQwbWVzc2FnZV9oYXNonCBCYWxhbmNlcwECWBxFbmRvd2VkAQAIHGFjY291bnQAMGZyZWVfYmFsYW5jZQggRHVzdExvc3QBAAgcYWNjb3VudAAYYW1vdW50CCBUcmFuc2ZlcgEADBBmcm9tAAh0bwAYYW1vdW50CChCYWxhbmNlU2V0AQAIDHdobwAQZnJlZQggUmVzZXJ2ZWQBAAgMd2hvABhhbW91bnQIKFVucmVzZXJ2ZWQBAAgMd2hvABhhbW91bnQISFJlc2VydmVSZXBhdHJpYXRlZAEAEBBmcm9tAAh0bwAYYW1vdW50CEhkZXN0aW5hdGlvbl9zdGF0dXOkHERlcG9zaXQBAAgMd2hvABhhbW91bnQIIFdpdGhkcmF3AQAIDHdobwAYYW1vdW50CBxTbGFzaGVkAQAIDHdobwAYYW1vdW50CBhNaW50ZWQBAAgMd2hvABhhbW91bnQIGEJ1cm5lZAEACAx3aG8AGGFtb3VudAgkU3VzcGVuZGVkAQAIDHdobwAYYW1vdW50CCBSZXN0b3JlZAEACAx3aG8AGGFtb3VudAggVXBncmFkZWQBAAQMd2hvABhJc3N1ZWQBAAQYYW1vdW50CCRSZXNjaW5kZWQBAAQYYW1vdW50CBhMb2NrZWQBAAgMd2hvABhhbW91bnQIIFVubG9ja2VkAQAIDHdobwAYYW1vdW50CBhGcm96ZW4BAAgMd2hvABhhbW91bnQIGFRoYXdlZAEACAx3aG8AGGFtb3VudAhMVG90YWxJc3N1YW5jZUZvcmNlZAEACAxvbGQIDG5ldwhIVHJhbnNhY3Rpb25QYXltZW50AQIESFRyYW5zYWN0aW9uRmVlUGFpZAEADAx3aG8AKGFjdHVhbF9mZWUIDHRpcAg4QXNzZXRUeFBheW1lbnQBAgg4QXNzZXRUeEZlZVBhaWQBABAMd2hvAChhY3R1YWxfZmVlCAx0aXAIIGFzc2V0X2lk6ERBc3NldFJlZnVuZEZhaWxlZAEABEhuYXRpdmVfYW1vdW50X2tlcHQIHFZlc3RpbmcBAgg4VmVzdGluZ1VwZGF0ZWQBAAgcYWNjb3VudAAgdW52ZXN0ZWQIQFZlc3RpbmdDb21wbGV0ZWQBAAQcYWNjb3VudABEQ29sbGF0b3JTZWxlY3Rpb24BAihATmV3SW52dWxuZXJhYmxlcwEABDRpbnZ1bG5lcmFibGVz9ERJbnZ1bG5lcmFibGVBZGRlZAEABChhY2NvdW50X2lkAExJbnZ1bG5lcmFibGVSZW1vdmVkAQAEKGFjY291bnRfaWQAUE5ld0Rlc2lyZWRDYW5kaWRhdGVzAQAESGRlc2lyZWRfY2FuZGlkYXRlcwRATmV3Q2FuZGlkYWN5Qm9uZAEABCxib25kX2Ftb3VudAg4Q2FuZGlkYXRlQWRkZWQBAAgoYWNjb3VudF9pZAAcZGVwb3NpdAhQQ2FuZGlkYXRlQm9uZFVwZGF0ZWQBAAgoYWNjb3VudF9pZAAcZGVwb3NpdAhAQ2FuZGlkYXRlUmVtb3ZlZAEABChhY2NvdW50X2lkAERDYW5kaWRhdGVSZXBsYWNlZAEADAxvbGQADG5ldwAcZGVwb3NpdAhoSW52YWxpZEludnVsbmVyYWJsZVNraXBwZWQBAAQoYWNjb3VudF9pZAAcU2Vzc2lvbgECBChOZXdTZXNzaW9uAQAENHNlc3Npb25faW5kZXgEJFhjbXBRdWV1ZQECBDxYY21wTWVzc2FnZVNlbnQBAAQwbWVzc2FnZV9oYXNoICxQb2xrYWRvdFhjbQECYCRBdHRlbXB0ZWQBAAQcb3V0Y29tZQkBEFNlbnQBABAYb3JpZ2lu6CxkZXN0aW5hdGlvbugcbWVzc2FnZV0BKG1lc3NhZ2VfaWQgSFVuZXhwZWN0ZWRSZXNwb25zZQEACBhvcmlnaW7oIHF1ZXJ5X2lkCDRSZXNwb25zZVJlYWR5AQAIIHF1ZXJ5X2lkCCByZXNwb25zZTkBIE5vdGlmaWVkAQAMIHF1ZXJ5X2lkCDBwYWxsZXRfaW5kZXgEKGNhbGxfaW5kZXgEQE5vdGlmeU92ZXJ3ZWlnaHQBABQgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleAQ0YWN0dWFsX3dlaWdodBhMbWF4X2J1ZGdldGVkX3dlaWdodBhMTm90aWZ5RGlzcGF0Y2hFcnJvcgEADCBxdWVyeV9pZAgwcGFsbGV0X2luZGV4BChjYWxsX2luZGV4BEhOb3RpZnlEZWNvZGVGYWlsZWQBAAwgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleARASW52YWxpZFJlc3BvbmRlcgEADBhvcmlnaW7oIHF1ZXJ5X2lkCERleHBlY3RlZF9sb2NhdGlvbj0BXEludmFsaWRSZXNwb25kZXJWZXJzaW9uAQAIGG9yaWdpbuggcXVlcnlfaWQINFJlc3BvbnNlVGFrZW4BAAQgcXVlcnlfaWQINEFzc2V0c1RyYXBwZWQBAAwQaGFzaCAYb3JpZ2lu6Bhhc3NldHOVAVRWZXJzaW9uQ2hhbmdlTm90aWZpZWQBABAsZGVzdGluYXRpb27oGHJlc3VsdAQQY29zdCEBKG1lc3NhZ2VfaWQgXFN1cHBvcnRlZFZlcnNpb25DaGFuZ2VkAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBFBOb3RpZnlUYXJnZXRTZW5kRmFpbAEADCBsb2NhdGlvbuggcXVlcnlfaWQIFGVycm9yBQFkTm90aWZ5VGFyZ2V0TWlncmF0aW9uRmFpbAEACCBsb2NhdGlvbpkBIHF1ZXJ5X2lkCFRJbnZhbGlkUXVlcmllclZlcnNpb24BAAgYb3JpZ2lu6CBxdWVyeV9pZAg4SW52YWxpZFF1ZXJpZXIBABAYb3JpZ2lu6CBxdWVyeV9pZAhAZXhwZWN0ZWRfcXVlcmllcuhQbWF5YmVfYWN0dWFsX3F1ZXJpZXI9AVBWZXJzaW9uTm90aWZ5U3RhcnRlZAEADCxkZXN0aW5hdGlvbugQY29zdCEBKG1lc3NhZ2VfaWQgWFZlcnNpb25Ob3RpZnlSZXF1ZXN0ZWQBAAwsZGVzdGluYXRpb27oEGNvc3QhAShtZXNzYWdlX2lkIGBWZXJzaW9uTm90aWZ5VW5yZXF1ZXN0ZWQBAAwsZGVzdGluYXRpb27oEGNvc3QhAShtZXNzYWdlX2lkICBGZWVzUGFpZAEACBhwYXlpbmfoEGZlZXMhATRBc3NldHNDbGFpbWVkAQAMEGhhc2ggGG9yaWdpbugYYXNzZXRzlQFgVmVyc2lvbk1pZ3JhdGlvbkZpbmlzaGVkAQAEHHZlcnNpb24EKEN1bXVsdXNYY20BAgw0SW52YWxpZEZvcm1hdAEFAYBIVW5zdXBwb3J0ZWRWZXJzaW9uAQUBgEBFeGVjdXRlZERvd253YXJkAQMIIAkBME1lc3NhZ2VRdWV1ZQECEEBQcm9jZXNzaW5nRmFpbGVkAQAMCGlkIBhvcmlnaW6lARRlcnJvcqkBJFByb2Nlc3NlZAEAEAhpZCAYb3JpZ2lupQEsd2VpZ2h0X3VzZWQYHHN1Y2Nlc3MUSE92ZXJ3ZWlnaHRFbnF1ZXVlZAEAEAhpZCAYb3JpZ2lupQEocGFnZV9pbmRleAQ0bWVzc2FnZV9pbmRleAQoUGFnZVJlYXBlZAEACBhvcmlnaW6lARRpbmRleAQcVXRpbGl0eQECGEBCYXRjaEludGVycnVwdGVkAQAIFGluZGV4BBRlcnJvcpQ4QmF0Y2hDb21wbGV0ZWQBAQVgQmF0Y2hDb21wbGV0ZWRXaXRoRXJyb3JzAQEFNEl0ZW1Db21wbGV0ZWQBAQUoSXRlbUZhaWxlZAEABBRlcnJvcpQwRGlzcGF0Y2hlZEFzAQAEGHJlc3VsdLUBIE11bHRpc2lnAQIQLE5ld011bHRpc2lnAQAMJGFwcHJvdmluZwAgbXVsdGlzaWcAJGNhbGxfaGFzaCBATXVsdGlzaWdBcHByb3ZhbAEAECRhcHByb3ZpbmcAJHRpbWVwb2ludL0BIG11bHRpc2lnACRjYWxsX2hhc2ggQE11bHRpc2lnRXhlY3V0ZWQBABQkYXBwcm92aW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIBhyZXN1bHS1AURNdWx0aXNpZ0NhbmNlbGxlZAEAEChjYW5jZWxsaW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIBRQcm94eQECFDRQcm94eUV4ZWN1dGVkAQAEGHJlc3VsdLUBLFB1cmVDcmVhdGVkAQAQEHB1cmUADHdobwAocHJveHlfdHlwZcUBUGRpc2FtYmlndWF0aW9uX2luZGV4BCRBbm5vdW5jZWQBAAwQcmVhbAAUcHJveHkAJGNhbGxfaGFzaCAoUHJveHlBZGRlZAEAECRkZWxlZ2F0b3IAJGRlbGVnYXRlZQAocHJveHlfdHlwZcUBFGRlbGF5BDBQcm94eVJlbW92ZWQBABAkZGVsZWdhdG9yACRkZWxlZ2F0ZWUAKHByb3h5X3R5cGXFARRkZWxheQQYQXNzZXRzAQJoHENyZWF0ZWQBAAwgYXNzZXRfaWQEHGNyZWF0b3IAFG93bmVyABhJc3N1ZWQBAAwgYXNzZXRfaWQEFG93bmVyABhhbW91bnQILFRyYW5zZmVycmVkAQAQIGFzc2V0X2lkBBBmcm9tAAh0bwAYYW1vdW50CBhCdXJuZWQBAAwgYXNzZXRfaWQEFG93bmVyABxiYWxhbmNlCCxUZWFtQ2hhbmdlZAEAECBhc3NldF9pZAQYaXNzdWVyABRhZG1pbgAcZnJlZXplcgAwT3duZXJDaGFuZ2VkAQAIIGFzc2V0X2lkBBRvd25lcgAYRnJvemVuAQAIIGFzc2V0X2lkBAx3aG8AGFRoYXdlZAEACCBhc3NldF9pZAQMd2hvACxBc3NldEZyb3plbgEABCBhc3NldF9pZAQsQXNzZXRUaGF3ZWQBAAQgYXNzZXRfaWQEREFjY291bnRzRGVzdHJveWVkAQAMIGFzc2V0X2lkBEhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwRIQXBwcm92YWxzRGVzdHJveWVkAQAMIGFzc2V0X2lkBExhcHByb3ZhbHNfZGVzdHJveWVkBExhcHByb3ZhbHNfcmVtYWluaW5nBEhEZXN0cnVjdGlvblN0YXJ0ZWQBAAQgYXNzZXRfaWQEJERlc3Ryb3llZAEABCBhc3NldF9pZAQwRm9yY2VDcmVhdGVkAQAIIGFzc2V0X2lkBBRvd25lcgAsTWV0YWRhdGFTZXQBABQgYXNzZXRfaWQEEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAEIGFzc2V0X2lkBEBBcHByb3ZlZFRyYW5zZmVyAQAQIGFzc2V0X2lkBBhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIREFwcHJvdmFsQ2FuY2VsbGVkAQAMIGFzc2V0X2lkBBRvd25lcgAgZGVsZWdhdGUATFRyYW5zZmVycmVkQXBwcm92ZWQBABQgYXNzZXRfaWQEFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAhIQXNzZXRTdGF0dXNDaGFuZ2VkAQAEIGFzc2V0X2lkBFhBc3NldE1pbkJhbGFuY2VDaGFuZ2VkAQAIIGFzc2V0X2lkBDxuZXdfbWluX2JhbGFuY2UIHFRvdWNoZWQBAAwgYXNzZXRfaWQEDHdobwAkZGVwb3NpdG9yABxCbG9ja2VkAQAIIGFzc2V0X2lkBAx3aG8AJERlcG9zaXRlZAEADCBhc3NldF9pZAQMd2hvABhhbW91bnQIJFdpdGhkcmF3bgEADCBhc3NldF9pZAQMd2hvABhhbW91bnQIHFVuaXF1ZXMBAmwcQ3JlYXRlZAEADChjb2xsZWN0aW9uBBxjcmVhdG9yABRvd25lcgAwRm9yY2VDcmVhdGVkAQAIKGNvbGxlY3Rpb24EFG93bmVyACREZXN0cm95ZWQBAAQoY29sbGVjdGlvbgQYSXNzdWVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACxUcmFuc2ZlcnJlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBBmcm9tAAh0bwAYQnVybmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyABhGcm96ZW4BAAgoY29sbGVjdGlvbgQQaXRlbQQYVGhhd2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EQENvbGxlY3Rpb25Gcm96ZW4BAAQoY29sbGVjdGlvbgRAQ29sbGVjdGlvblRoYXdlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyAEBBcHByb3ZlZFRyYW5zZmVyAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQBEQXBwcm92YWxDYW5jZWxsZWQBABAoY29sbGVjdGlvbgQQaXRlbQQUb3duZXIAIGRlbGVnYXRlAERJdGVtU3RhdHVzQ2hhbmdlZAEABChjb2xsZWN0aW9uBFRDb2xsZWN0aW9uTWV0YWRhdGFTZXQBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRDb2xsZWN0aW9uTWV0YWRhdGFDbGVhcmVkAQAEKGNvbGxlY3Rpb24ELE1ldGFkYXRhU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAIKGNvbGxlY3Rpb24EEGl0ZW0ELFJlZGVwb3NpdGVkAQAIKGNvbGxlY3Rpb24EQHN1Y2Nlc3NmdWxfaXRlbXPRATBBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQUdmFsdWUkQEF0dHJpYnV0ZUNsZWFyZWQBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSRoT3duZXJzaGlwQWNjZXB0YW5jZUNoYW5nZWQBAAgMd2hvAEBtYXliZV9jb2xsZWN0aW9u1QFYQ29sbGVjdGlvbk1heFN1cHBseVNldAEACChjb2xsZWN0aW9uBChtYXhfc3VwcGx5BDBJdGVtUHJpY2VTZXQBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIRHdoaXRlbGlzdGVkX2J1eWVy2QFASXRlbVByaWNlUmVtb3ZlZAEACChjb2xsZWN0aW9uBBBpdGVtBChJdGVtQm91Z2h0AQAUKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCBhzZWxsZXIAFGJ1eWVyABBOZnRzAQKYHENyZWF0ZWQBAAwoY29sbGVjdGlvbgQcY3JlYXRvcgAUb3duZXIAMEZvcmNlQ3JlYXRlZAEACChjb2xsZWN0aW9uBBRvd25lcgAkRGVzdHJveWVkAQAEKGNvbGxlY3Rpb24EGElzc3VlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAsVHJhbnNmZXJyZWQBABAoY29sbGVjdGlvbgQQaXRlbQQQZnJvbQAIdG8AGEJ1cm5lZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBISXRlbVRyYW5zZmVyTG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1UcmFuc2ZlclVubG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1Qcm9wZXJ0aWVzTG9ja2VkAQAQKGNvbGxlY3Rpb24EEGl0ZW0ENGxvY2tfbWV0YWRhdGEUPGxvY2tfYXR0cmlidXRlcxRAQ29sbGVjdGlvbkxvY2tlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXLZARRhZG1pbtkBHGZyZWV6ZXLZAUBUcmFuc2ZlckFwcHJvdmVkAQAUKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQAgZGVhZGxpbmXVAURBcHByb3ZhbENhbmNlbGxlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAgZGVsZWdhdGUAVEFsbEFwcHJvdmFsc0NhbmNlbGxlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBcQ29sbGVjdGlvbkNvbmZpZ0NoYW5nZWQBAAQoY29sbGVjdGlvbgRUQ29sbGVjdGlvbk1ldGFkYXRhU2V0AQAIKGNvbGxlY3Rpb24EEGRhdGEkZENvbGxlY3Rpb25NZXRhZGF0YUNsZWFyZWQBAAQoY29sbGVjdGlvbgQ8SXRlbU1ldGFkYXRhU2V0AQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkTEl0ZW1NZXRhZGF0YUNsZWFyZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQsUmVkZXBvc2l0ZWQBAAgoY29sbGVjdGlvbgRAc3VjY2Vzc2Z1bF9pdGVtc9EBMEF0dHJpYnV0ZVNldAEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQkbmFtZXNwYWNl4QFAQXR0cmlidXRlQ2xlYXJlZAEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JCRuYW1lc3BhY2XhAWxJdGVtQXR0cmlidXRlc0FwcHJvdmFsQWRkZWQBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGUAdEl0ZW1BdHRyaWJ1dGVzQXBwcm92YWxSZW1vdmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRlAGhPd25lcnNoaXBBY2NlcHRhbmNlQ2hhbmdlZAEACAx3aG8AQG1heWJlX2NvbGxlY3Rpb27VAVhDb2xsZWN0aW9uTWF4U3VwcGx5U2V0AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEdENvbGxlY3Rpb25NaW50U2V0dGluZ3NVcGRhdGVkAQAEKGNvbGxlY3Rpb24EbE5leHRDb2xsZWN0aW9uSWRJbmNyZW1lbnRlZAEABBxuZXh0X2lk1QEwSXRlbVByaWNlU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCER3aGl0ZWxpc3RlZF9idXllctkBQEl0ZW1QcmljZVJlbW92ZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQoSXRlbUJvdWdodAEAFChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZQgYc2VsbGVyABRidXllcgAcVGlwU2VudAEAFChjb2xsZWN0aW9uBBBpdGVtBBhzZW5kZXIAIHJlY2VpdmVyABhhbW91bnQILFN3YXBDcmVhdGVkAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24EMGRlc2lyZWRfaXRlbdUBFHByaWNl7QEgZGVhZGxpbmUENFN3YXBDYW5jZWxsZWQBABhIb2ZmZXJlZF9jb2xsZWN0aW9uBDBvZmZlcmVkX2l0ZW0ESGRlc2lyZWRfY29sbGVjdGlvbgQwZGVzaXJlZF9pdGVt1QEUcHJpY2XtASBkZWFkbGluZQQsU3dhcENsYWltZWQBACA8c2VudF9jb2xsZWN0aW9uBCRzZW50X2l0ZW0EPHNlbnRfaXRlbV9vd25lcgBMcmVjZWl2ZWRfY29sbGVjdGlvbgQ0cmVjZWl2ZWRfaXRlbQRMcmVjZWl2ZWRfaXRlbV9vd25lcgAUcHJpY2XtASBkZWFkbGluZQRYUHJlU2lnbmVkQXR0cmlidXRlc1NldAEADChjb2xsZWN0aW9uBBBpdGVtBCRuYW1lc3BhY2XhAUhQYWxsZXRBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQQaXRlbdUBJGF0dHJpYnV0ZfEBFHZhbHVlJDRGb3JlaWduQXNzZXRzAQJoHENyZWF0ZWQBAAwgYXNzZXRfaWToHGNyZWF0b3IAFG93bmVyABhJc3N1ZWQBAAwgYXNzZXRfaWToFG93bmVyABhhbW91bnQILFRyYW5zZmVycmVkAQAQIGFzc2V0X2lk6BBmcm9tAAh0bwAYYW1vdW50CBhCdXJuZWQBAAwgYXNzZXRfaWToFG93bmVyABxiYWxhbmNlCCxUZWFtQ2hhbmdlZAEAECBhc3NldF9pZOgYaXNzdWVyABRhZG1pbgAcZnJlZXplcgAwT3duZXJDaGFuZ2VkAQAIIGFzc2V0X2lk6BRvd25lcgAYRnJvemVuAQAIIGFzc2V0X2lk6Ax3aG8AGFRoYXdlZAEACCBhc3NldF9pZOgMd2hvACxBc3NldEZyb3plbgEABCBhc3NldF9pZOgsQXNzZXRUaGF3ZWQBAAQgYXNzZXRfaWToREFjY291bnRzRGVzdHJveWVkAQAMIGFzc2V0X2lk6EhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwRIQXBwcm92YWxzRGVzdHJveWVkAQAMIGFzc2V0X2lk6ExhcHByb3ZhbHNfZGVzdHJveWVkBExhcHByb3ZhbHNfcmVtYWluaW5nBEhEZXN0cnVjdGlvblN0YXJ0ZWQBAAQgYXNzZXRfaWToJERlc3Ryb3llZAEABCBhc3NldF9pZOgwRm9yY2VDcmVhdGVkAQAIIGFzc2V0X2lk6BRvd25lcgAsTWV0YWRhdGFTZXQBABQgYXNzZXRfaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAEIGFzc2V0X2lk6EBBcHByb3ZlZFRyYW5zZmVyAQAQIGFzc2V0X2lk6Bhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIREFwcHJvdmFsQ2FuY2VsbGVkAQAMIGFzc2V0X2lk6BRvd25lcgAgZGVsZWdhdGUATFRyYW5zZmVycmVkQXBwcm92ZWQBABQgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAhIQXNzZXRTdGF0dXNDaGFuZ2VkAQAEIGFzc2V0X2lk6FhBc3NldE1pbkJhbGFuY2VDaGFuZ2VkAQAIIGFzc2V0X2lk6DxuZXdfbWluX2JhbGFuY2UIHFRvdWNoZWQBAAwgYXNzZXRfaWToDHdobwAkZGVwb3NpdG9yABxCbG9ja2VkAQAIIGFzc2V0X2lk6Ax3aG8AJERlcG9zaXRlZAEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIJFdpdGhkcmF3bgEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIKFBvb2xBc3NldHMBAmgcQ3JlYXRlZAEADCBhc3NldF9pZAQcY3JlYXRvcgAUb3duZXIAGElzc3VlZAEADCBhc3NldF9pZAQUb3duZXIAGGFtb3VudAgsVHJhbnNmZXJyZWQBABAgYXNzZXRfaWQEEGZyb20ACHRvABhhbW91bnQIGEJ1cm5lZAEADCBhc3NldF9pZAQUb3duZXIAHGJhbGFuY2UILFRlYW1DaGFuZ2VkAQAQIGFzc2V0X2lkBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyADBPd25lckNoYW5nZWQBAAggYXNzZXRfaWQEFG93bmVyABhGcm96ZW4BAAggYXNzZXRfaWQEDHdobwAYVGhhd2VkAQAIIGFzc2V0X2lkBAx3aG8ALEFzc2V0RnJvemVuAQAEIGFzc2V0X2lkBCxBc3NldFRoYXdlZAEABCBhc3NldF9pZAREQWNjb3VudHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQESGFjY291bnRzX2Rlc3Ryb3llZARIYWNjb3VudHNfcmVtYWluaW5nBEhBcHByb3ZhbHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQETGFwcHJvdmFsc19kZXN0cm95ZWQETGFwcHJvdmFsc19yZW1haW5pbmcESERlc3RydWN0aW9uU3RhcnRlZAEABCBhc3NldF9pZAQkRGVzdHJveWVkAQAEIGFzc2V0X2lkBDBGb3JjZUNyZWF0ZWQBAAggYXNzZXRfaWQEFG93bmVyACxNZXRhZGF0YVNldAEAFCBhc3NldF9pZAQQbmFtZSQYc3ltYm9sJCBkZWNpbWFscwQkaXNfZnJvemVuFDxNZXRhZGF0YUNsZWFyZWQBAAQgYXNzZXRfaWQEQEFwcHJvdmVkVHJhbnNmZXIBABAgYXNzZXRfaWQEGHNvdXJjZQAgZGVsZWdhdGUAGGFtb3VudAhEQXBwcm92YWxDYW5jZWxsZWQBAAwgYXNzZXRfaWQEFG93bmVyACBkZWxlZ2F0ZQBMVHJhbnNmZXJyZWRBcHByb3ZlZAEAFCBhc3NldF9pZAQUb3duZXIAIGRlbGVnYXRlACxkZXN0aW5hdGlvbgAYYW1vdW50CEhBc3NldFN0YXR1c0NoYW5nZWQBAAQgYXNzZXRfaWQEWEFzc2V0TWluQmFsYW5jZUNoYW5nZWQBAAggYXNzZXRfaWQEPG5ld19taW5fYmFsYW5jZQgcVG91Y2hlZAEADCBhc3NldF9pZAQMd2hvACRkZXBvc2l0b3IAHEJsb2NrZWQBAAggYXNzZXRfaWQEDHdobwAkRGVwb3NpdGVkAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAgkV2l0aGRyYXduAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAg8QXNzZXRDb252ZXJzaW9uAQIYLFBvb2xDcmVhdGVkAQAQHGNyZWF0b3IAHHBvb2xfaWT9ATBwb29sX2FjY291bnQAIGxwX3Rva2VuBDhMaXF1aWRpdHlBZGRlZAEAHAx3aG8AHG1pbnRfdG8AHHBvb2xfaWT9AUBhbW91bnQxX3Byb3ZpZGVkCEBhbW91bnQyX3Byb3ZpZGVkCCBscF90b2tlbgQ8bHBfdG9rZW5fbWludGVkCEBMaXF1aWRpdHlSZW1vdmVkAQAgDHdobwAsd2l0aGRyYXdfdG8AHHBvb2xfaWT9ARxhbW91bnQxCBxhbW91bnQyCCBscF90b2tlbgQ8bHBfdG9rZW5fYnVybmVkCDh3aXRoZHJhd2FsX2ZlZQQwU3dhcEV4ZWN1dGVkAQAUDHdobwAcc2VuZF90bwAkYW1vdW50X2luCChhbW91bnRfb3V0CBBwYXRoBQJIU3dhcENyZWRpdEV4ZWN1dGVkAQAMJGFtb3VudF9pbggoYW1vdW50X291dAgQcGF0aAUCHFRvdWNoZWQBAAgccG9vbF9pZP0BDHdobwAEIAAADBRwaGFzZTQUZXZlbnQNAhh0b3BpY3MRAgQVAgAEBAEIBB0CAAEBAAgwc3BlY192ZXJzaW9uBCRzcGVjX25hbWUlAgAIJGNvZGVfaGFzaCA0Y2hlY2tfdmVyc2lvbhQGGAAQOGJhc2VfZXh0cmluc2ljGDRtYXhfZXh0cmluc2ljMQIkbWF4X3RvdGFsMQIgcmVzZXJ2ZWQxAgAMGG5vcm1hbDUCLG9wZXJhdGlvbmFsNQIkbWFuZGF0b3J5NQIADChiYXNlX2Jsb2NrGCRtYXhfYmxvY2sYJHBlcl9jbGFzczkCAAwYbm9ybWFsBCxvcGVyYXRpb25hbAQkbWFuZGF0b3J5BAAIEHJlYWQIFHdyaXRlCAMIDQEEBEkCAAAgJHNwZWNfbmFtZSUCJGltcGxfbmFtZSUCRGF1dGhvcmluZ192ZXJzaW9uBDBzcGVjX3ZlcnNpb24EMGltcGxfdmVyc2lvbgQQYXBpc00CTHRyYW5zYWN0aW9uX3ZlcnNpb24ENHN0YXRlX3ZlcnNpb24EBCQBCARVAgAEJAAACCRtc2dfY291bnQELHRvdGFsX2J5dGVzBAMIBGECBGUCAAAMNHVtcF9tc2dfY291bnQEPHVtcF90b3RhbF9ieXRlcwQ0aHJtcF9vdXRnb2luZ2kCAggUQWJvcnQBAQUcR29BaGVhZAEBBQZxAgAMOHVzZWRfYmFuZHdpZHRobQI4cGFyYV9oZWFkX2hhc2icYGNvbnN1bWVkX2dvX2FoZWFkX3NpZ25hbHUCBHkCAAAMOHVzZWRfYmFuZHdpZHRobQI4aHJtcF93YXRlcm1hcmvVAWBjb25zdW1lZF9nb19haGVhZF9zaWduYWx1AgAQLHBhcmVudF9oZWFkJExyZWxheV9wYXJlbnRfbnVtYmVyBGRyZWxheV9wYXJlbnRfc3RvcmFnZV9yb290IDBtYXhfcG92X3NpemUEAgQcUHJlc2VudAEBBQaJAgAIPHJlbWFpbmluZ19jb3VudAQ4cmVtYWluaW5nX3NpemUEABgwbWF4X2NhcGFjaXR5BDhtYXhfdG90YWxfc2l6ZQRAbWF4X21lc3NhZ2Vfc2l6ZQQkbXNnX2NvdW50BCh0b3RhbF9zaXplBCBtcWNfaGVhZJwDCASVAgSZAgAAEDBkbXFfbXFjX2hlYWQgnHJlbGF5X2Rpc3BhdGNoX3F1ZXVlX3JlbWFpbmluZ19jYXBhY2l0eZECQGluZ3Jlc3NfY2hhbm5lbHOdAjxlZ3Jlc3NfY2hhbm5lbHOdAgAITG1heF9jYW5kaWRhdGVfZGVwdGgEUGFsbG93ZWRfYW5jZXN0cnlfbGVuBAAoNG1heF9jb2RlX3NpemUESG1heF9oZWFkX2RhdGFfc2l6ZQRYbWF4X3Vwd2FyZF9xdWV1ZV9jb3VudARUbWF4X3Vwd2FyZF9xdWV1ZV9zaXplBFxtYXhfdXB3YXJkX21lc3NhZ2Vfc2l6ZQSQbWF4X3Vwd2FyZF9tZXNzYWdlX251bV9wZXJfY2FuZGlkYXRlBIhocm1wX21heF9tZXNzYWdlX251bV9wZXJfY2FuZGlkYXRlBGx2YWxpZGF0aW9uX3VwZ3JhZGVfY29vbGRvd24EYHZhbGlkYXRpb25fdXBncmFkZV9kZWxheQRQYXN5bmNfYmFja2luZ19wYXJhbXOlAgMIBCAErQIAAAgkcmVjaXBpZW50BBBkYXRhJAS1AgAACBxzZW50X2F0BAxtc2ckBL0CAAAIHHNlbnRfYXQEEGRhdGEkBMUCAAMIBMkCBM0CAAAQPHZhbGlkYXRpb25fZGF0YYUCRHJlbGF5X2NoYWluX3N0YXRlXQJEZG93bndhcmRfbWVzc2FnZXPBAkxob3Jpem9udGFsX21lc3NhZ2Vz0QICDAxGZWUBAQUQTWlzYwEBBQxBbGwBAQUADAhpZA0BGGFtb3VudAgccmVhc29uc9kCBN0CAAAICGlkDQEYYW1vdW50CATlAgAABBhhbW91bnQIBO0CAAIUCElkAQEBFEluZGV4AQEFDFJhdwEFACRBZGRyZXNzMzIBBQGAJEFkZHJlc3MyMAEFAVACCCBJbmNyZWFzZQEBBSBEZWNyZWFzZQEBBQIIJFYxQW5jaWVudAEBBQhWMgEBBQAMGGxvY2tlZAgkcGVyX2Jsb2NrCDhzdGFydGluZ19ibG9jawQEAQMAAggIVjABAQUIVjEBAQUACAx3aG8AHGRlcG9zaXQIBA0DAAMIACAEFQMAAwgoJAMICAQCCAhPawEBBSRTdXNwZW5kZWQBAQUAFCRyZWNpcGllbnQEFHN0YXRlJQM0c2lnbmFsc19leGlzdBQsZmlyc3RfaW5kZXgEKGxhc3RfaW5kZXgEBCkDAAMIBAQADERzdXNwZW5kX3RocmVzaG9sZAQ4ZHJvcF90aHJlc2hvbGQEQHJlc3VtZV90aHJlc2hvbGQEBpkBBQEIBj0DAmggT3ZlcmZsb3cBAQU0VW5pbXBsZW1lbnRlZAEBBWBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb24BAQVkVW50cnVzdGVkVGVsZXBvcnRMb2NhdGlvbgEBBURNdWx0aUxvY2F0aW9uRnVsbAEBBWhNdWx0aUxvY2F0aW9uTm90SW52ZXJ0aWJsZQEBBSRCYWRPcmlnaW4BAQU8SW52YWxpZExvY2F0aW9uAQEFNEFzc2V0Tm90Rm91bmQBAQVURmFpbGVkVG9UcmFuc2FjdEFzc2V0AQEFPE5vdFdpdGhkcmF3YWJsZQEBBUhMb2NhdGlvbkNhbm5vdEhvbGQBAQVURXhjZWVkc01heE1lc3NhZ2VTaXplAQEFWERlc3RpbmF0aW9uVW5zdXBwb3J0ZWQBAQUkVHJhbnNwb3J0AQEFKFVucm91dGFibGUBAQUwVW5rbm93bkNsYWltAQEFOEZhaWxlZFRvRGVjb2RlAQEFQE1heFdlaWdodEludmFsaWQBAQU4Tm90SG9sZGluZ0ZlZXMBAQUwVG9vRXhwZW5zaXZlAQEFEFRyYXABAQNMVW5oYW5kbGVkWGNtVmVyc2lvbgEBBUhXZWlnaHRMaW1pdFJlYWNoZWQBAQMcQmFycmllcgEBBUxXZWlnaHROb3RDb21wdXRhYmxlAQEFAwgERQMGSQMCEBBOdWxsAQEFGEFzc2V0cwEEgQEAPEV4ZWN1dGlvblJlc3VsdAEGSQMcVmVyc2lvbgEBAgIYEE51bGwBAQUYQXNzZXRzAQSNAQA8RXhlY3V0aW9uUmVzdWx0AQYlARxWZXJzaW9uAQECLFBhbGxldHNJbmZvAQQtAQA4RGlzcGF0Y2hSZXN1bHQBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAIMCFYyAQIQEE51bGwBAQUYQXNzZXRzAQSBAQA8RXhlY3V0aW9uUmVzdWx0AQZJAxxWZXJzaW9uAQECCFYzAQIYEE51bGwBAQUYQXNzZXRzAQSNAQA8RXhlY3V0aW9uUmVzdWx0AQYlARxWZXJzaW9uAQECLFBhbGxldHNJbmZvAQQtAQA4RGlzcGF0Y2hSZXN1bHQBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAhWNAECGBBOdWxsAQEFGEFzc2V0cwEEHQEAPEV4ZWN1dGlvblJlc3VsdAEGJQEcVmVyc2lvbgEBAixQYWxsZXRzSW5mbwEELQEAOERpc3BhdGNoUmVzdWx0AQIMHFN1Y2Nlc3MBAQUURXJyb3IBBQA4VHJ1bmNhdGVkRXJyb3IBBQACDBxQZW5kaW5nAQAQJHJlc3BvbmRlcpkBTG1heWJlX21hdGNoX3F1ZXJpZXI5AzBtYXliZV9ub3RpZnlBAxx0aW1lb3V0BDxWZXJzaW9uTm90aWZpZXIBAAgYb3JpZ2lumQEkaXNfYWN0aXZlFBRSZWFkeQEACCByZXNwb25zZVkDCGF0BAMIBJkBAwwIGAQDCJkBBARpAwAGJAIQXE1pZ3JhdGVTdXBwb3J0ZWRWZXJzaW9uAQEFXE1pZ3JhdGVWZXJzaW9uTm90aWZpZXJzAQEFUE5vdGlmeUN1cnJlbnRUYXJnZXRzAQYkaE1pZ3JhdGVBbmROb3RpZnlPbGRUYXJnZXRzAQEFAggIVjMBAgggQ29uY3JldGUBAAgccGFyZW50cwQgaW50ZXJpb3LkIEFic3RyYWN0AQUBgAhWNAEACBxwYXJlbnRzBCBpbnRlcmlvcuQDDAQAeQMDCLEBCASBAwAAEBhhbW91bnQIFG93bmVymQEYbG9ja2VymQEkY29uc3VtZXJzhQMDCAiZAQSNAwACCAxBbGwBAQUUQWxsT2YBAAgIaWR1AQxmdW5JAQIIIERlZmluaXRlAQSBAQAQV2lsZAECCAxBbGwBAQUUQWxsT2YBAAgIaWR1AQxmdW5JAQIIJFVubGltaXRlZAEBBRxMaW1pdGVkAQEDAnA0V2l0aGRyYXdBc3NldAEEgQEAVFJlc2VydmVBc3NldERlcG9zaXRlZAEEgQEAWFJlY2VpdmVUZWxlcG9ydGVkQXNzZXQBBIEBADRRdWVyeVJlc3BvbnNlAQAMIHF1ZXJ5X2lkCCByZXNwb25zZVEDKG1heF93ZWlnaHQINFRyYW5zZmVyQXNzZXQBAAgYYXNzZXRzhQEsYmVuZWZpY2lhcnlxAVBUcmFuc2ZlclJlc2VydmVBc3NldAEADBhhc3NldHOFARBkZXN0cQEMeGNtpQMgVHJhbnNhY3QBAAwsb3JpZ2luX3R5cGVBAVhyZXF1aXJlX3dlaWdodF9hdF9tb3N0CBBjYWxsJGRIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0AQAMGHNlbmRlcgRAbWF4X21lc3NhZ2Vfc2l6ZQQwbWF4X2NhcGFjaXR5BExIcm1wQ2hhbm5lbEFjY2VwdGVkAQAEJHJlY2lwaWVudARISHJtcENoYW5uZWxDbG9zaW5nAQAMJGluaXRpYXRvcgQYc2VuZGVyBCRyZWNpcGllbnQELENsZWFyT3JpZ2luAQEFNERlc2NlbmRPcmlnaW4BAiQQSGVyZQEBBQhYMQECJCRQYXJhY2hhaW4BAQIsQWNjb3VudElkMzIBAAgcbmV0d29ya2EBCGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrYQEUaW5kZXgIMEFjY291bnRLZXkyMAEACBxuZXR3b3JrYQEMa2V5uDhQYWxsZXRJbnN0YW5jZQEBAjBHZW5lcmFsSW5kZXgBAQMoR2VuZXJhbEtleQEFACRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkZQEQcGFydMAIWDIBBGkBAQgIWDMBBGkBAQwIWDQBBGkBARAIWDUBBGkBARQIWDYBBGkBARgIWDcBBGkBARwIWDgBBGkBASAsUmVwb3J0RXJyb3IBAAwgcXVlcnlfaWQIEGRlc3RxAUxtYXhfcmVzcG9uc2Vfd2VpZ2h0CDBEZXBvc2l0QXNzZXQBAAwYYXNzZXRzmQMobWF4X2Fzc2V0cwQsYmVuZWZpY2lhcnlxAUxEZXBvc2l0UmVzZXJ2ZUFzc2V0AQAQGGFzc2V0c5kDKG1heF9hc3NldHMEEGRlc3RxAQx4Y22lAzRFeGNoYW5nZUFzc2V0AQAIEGdpdmWZAxxyZWNlaXZlhQFcSW5pdGlhdGVSZXNlcnZlV2l0aGRyYXcBAAwYYXNzZXRzmQMccmVzZXJ2ZXEBDHhjbaUDQEluaXRpYXRlVGVsZXBvcnQBAAwYYXNzZXRzmQMQZGVzdHEBDHhjbaUDMFF1ZXJ5SG9sZGluZwEAECBxdWVyeV9pZAgQZGVzdHEBGGFzc2V0c5kDTG1heF9yZXNwb25zZV93ZWlnaHQIMEJ1eUV4ZWN1dGlvbgEACBBmZWVzgQEwd2VpZ2h0X2xpbWl0nQM0UmVmdW5kU3VycGx1cwEBBTxTZXRFcnJvckhhbmRsZXIBBKEDACxTZXRBcHBlbmRpeAEEoQMAKENsZWFyRXJyb3IBAQUoQ2xhaW1Bc3NldAEACBhhc3NldHOFARh0aWNrZXRxARBUcmFwAQEDQFN1YnNjcmliZVZlcnNpb24BAAggcXVlcnlfaWQITG1heF9yZXNwb25zZV93ZWlnaHQISFVuc3Vic2NyaWJlVmVyc2lvbgEBBQShAwACEAxBbGwBAQUUQWxsT2YBAAgIaWSJAQxmdW5JAShBbGxDb3VudGVkAQECMEFsbE9mQ291bnRlZAEADAhpZIkBDGZ1bkkBFGNvdW50BAIIIERlZmluaXRlAQSNAQAQV2lsZAECEAxBbGwBAQUUQWxsT2YBAAgIaWSJAQxmdW5JAShBbGxDb3VudGVkAQECMEFsbE9mQ291bnRlZAEADAhpZIkBDGZ1bkkBFGNvdW50BALANFdpdGhkcmF3QXNzZXQBBI0BAFRSZXNlcnZlQXNzZXREZXBvc2l0ZWQBBI0BAFhSZWNlaXZlVGVsZXBvcnRlZEFzc2V0AQSNAQA0UXVlcnlSZXNwb25zZQEAECBxdWVyeV9pZAggcmVzcG9uc2VVAyhtYXhfd2VpZ2h0GBxxdWVyaWVyPQE0VHJhbnNmZXJBc3NldAEACBhhc3NldHORASxiZW5lZmljaWFyeehQVHJhbnNmZXJSZXNlcnZlQXNzZXQBAAwYYXNzZXRzkQEQZGVzdOgMeGNttQMgVHJhbnNhY3QBAAwsb3JpZ2luX2tpbmRBAVhyZXF1aXJlX3dlaWdodF9hdF9tb3N0GBBjYWxsJGRIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0AQAMGHNlbmRlcgRAbWF4X21lc3NhZ2Vfc2l6ZQQwbWF4X2NhcGFjaXR5BExIcm1wQ2hhbm5lbEFjY2VwdGVkAQAEJHJlY2lwaWVudARISHJtcENoYW5uZWxDbG9zaW5nAQAMJGluaXRpYXRvcgQYc2VuZGVyBCRyZWNpcGllbnQELENsZWFyT3JpZ2luAQEFNERlc2NlbmRPcmlnaW4BAiQQSGVyZQEBBQhYMQECKCRQYXJhY2hhaW4BAQIsQWNjb3VudElkMzIBAAgcbmV0d29ya7QIaWQgOEFjY291bnRJbmRleDY0AQAIHG5ldHdvcmu0FGluZGV4CDBBY2NvdW50S2V5MjABAAgcbmV0d29ya7QMa2V5uDhQYWxsZXRJbnN0YW5jZQEBAjBHZW5lcmFsSW5kZXgBAQMoR2VuZXJhbEtleQEACBhsZW5ndGgEEGRhdGEgJE9ubHlDaGlsZAEBBSRQbHVyYWxpdHkBAAgIaWS8EHBhcnTAPEdsb2JhbENvbnNlbnN1cwECLCRCeUdlbmVzaXMBBQGAGEJ5Rm9yawEACDBibG9ja19udW1iZXIIKGJsb2NrX2hhc2ggIFBvbGthZG90AQEFGEt1c2FtYQEBBRxXZXN0ZW5kAQEFGFJvY29jbwEBBRhXb2NvY28BAQUgRXRoZXJldW0BAAQgY2hhaW5faWQILEJpdGNvaW5Db3JlAQEFLEJpdGNvaW5DYXNoAQEFQFBvbGthZG90QnVsbGV0aW4BAQUIWDIBBMQBCAhYMwEExAEMCFg0AQTEARAIWDUBBMQBFAhYNgEExAEYCFg3AQTEARwIWDgBBMQBICxSZXBvcnRFcnJvcgEADCxkZXN0aW5hdGlvbuggcXVlcnlfaWQIKG1heF93ZWlnaHQYMERlcG9zaXRBc3NldAEACBhhc3NldHOtAyxiZW5lZmljaWFyeehMRGVwb3NpdFJlc2VydmVBc3NldAEADBhhc3NldHOtAxBkZXN06Ax4Y221AzRFeGNoYW5nZUFzc2V0AQAMEGdpdmWtAxB3YW50kQEcbWF4aW1hbBRcSW5pdGlhdGVSZXNlcnZlV2l0aGRyYXcBAAwYYXNzZXRzrQMccmVzZXJ2ZegMeGNttQNASW5pdGlhdGVUZWxlcG9ydAEADBhhc3NldHOtAxBkZXN06Ax4Y221AzRSZXBvcnRIb2xkaW5nAQAINHJlc3BvbnNlX2luZm9FARhhc3NldHOtAzBCdXlFeGVjdXRpb24BAAgQZmVlc40BMHdlaWdodF9saW1pdFUBNFJlZnVuZFN1cnBsdXMBAQU8U2V0RXJyb3JIYW5kbGVyAQSxAwAsU2V0QXBwZW5kaXgBBLEDAChDbGVhckVycm9yAQEFKENsYWltQXNzZXQBAAgYYXNzZXRzkQEYdGlja2V06BBUcmFwAQEDQFN1YnNjcmliZVZlcnNpb24BAAggcXVlcnlfaWQITG1heF9yZXNwb25zZV93ZWlnaHQYSFVuc3Vic2NyaWJlVmVyc2lvbgEBBSRCdXJuQXNzZXQBBI0BACxFeHBlY3RBc3NldAEEjQEAMEV4cGVjdE9yaWdpbgEG6CxFeHBlY3RFcnJvcgEGJQFQRXhwZWN0VHJhbnNhY3RTdGF0dXMBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFACxRdWVyeVBhbGxldAEACCxtb2R1bGVfbmFtZSQ0cmVzcG9uc2VfaW5mb0UBMEV4cGVjdFBhbGxldAEAFBRpbmRleAQQbmFtZSQsbW9kdWxlX25hbWUkLGNyYXRlX21ham9yBDxtaW5fY3JhdGVfbWlub3IEUFJlcG9ydFRyYW5zYWN0U3RhdHVzAQAMLGRlc3RpbmF0aW9u6CBxdWVyeV9pZAgobWF4X3dlaWdodBhMQ2xlYXJUcmFuc2FjdFN0YXR1cwEBBTxVbml2ZXJzYWxPcmlnaW4BAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFNEV4cG9ydE1lc3NhZ2UBAAwcbmV0d29ya7AsZGVzdGluYXRpb27kDHhjbbUDJExvY2tBc3NldAEACBRhc3NldI0BIHVubG9ja2Vy6CxVbmxvY2tBc3NldAEACBRhc3NldI0BGHRhcmdldOg4Tm90ZVVubG9ja2FibGUBAAgUYXNzZXSNARRvd25lcug0UmVxdWVzdFVubG9jawEACBRhc3NldI0BGGxvY2tlcugsU2V0RmVlc01vZGUBAAQwaml0X3dpdGhkcmF3FCBTZXRUb3BpYwEFAYAoQ2xlYXJUb3BpYwEBBSxBbGlhc09yaWdpbgEACBxwYXJlbnRzBCBpbnRlcmlvcuQ8VW5wYWlkRXhlY3V0aW9uAQAIMHdlaWdodF9saW1pdFUBMGNoZWNrX29yaWdpbj0BBLEDAAIMCFYyAQShAwAIVjMBBLEDAAhWNAEEWQEAAhAgVGVsZXBvcnQBAQUwTG9jYWxSZXNlcnZlAQEFSERlc3RpbmF0aW9uUmVzZXJ2ZQEBBTRSZW1vdGVSZXNlcnZlAQIMCFYyAQAIHHBhcmVudHMEIGludGVyaW9ybQEIVjMBAAgccGFyZW50cwQgaW50ZXJpb3LkCFY0AQAIHHBhcmVudHMEIGludGVyaW9y5AAITGRlbGl2ZXJ5X2ZlZV9mYWN0b3IIMGlzX2Nvbmdlc3RlZBQACBBwcmV2pQEQbmV4dKUBBsUDABgUYmVnaW4EDGVuZAQUY291bnQEQHJlYWR5X25laWdoYm91cnPJAzRtZXNzYWdlX2NvdW50CBBzaXplCAMIpQEEABgkcmVtYWluaW5nBDhyZW1haW5pbmdfc2l6ZQQsZmlyc3RfaW5kZXgEFGZpcnN0BBBsYXN0BBBoZWFwJAIsGHJlbWFyawEABBhyZW1hcmskOHNldF9oZWFwX3BhZ2VzAQAEFHBhZ2VzCCBzZXRfY29kZQEABBBjb2RlJFxzZXRfY29kZV93aXRob3V0X2NoZWNrcwEABBBjb2RlJCxzZXRfc3RvcmFnZQEABBRpdGVtc1kCMGtpbGxfc3RvcmFnZQEABBBrZXlzXQIsa2lsbF9wcmVmaXgBAAgYcHJlZml4JBxzdWJrZXlzBERyZW1hcmtfd2l0aF9ldmVudAEABBhyZW1hcmskRGF1dGhvcml6ZV91cGdyYWRlAQAEJGNvZGVfaGFzaCCAYXV0aG9yaXplX3VwZ3JhZGVfd2l0aG91dF9jaGVja3MBAAQkY29kZV9oYXNoIGBhcHBseV9hdXRob3JpemVkX3VwZ3JhZGUBAAQQY29kZSQCEExzZXRfdmFsaWRhdGlvbl9kYXRhAQAEEGRhdGHVAmBzdWRvX3NlbmRfdXB3YXJkX21lc3NhZ2UBAAQcbWVzc2FnZSREYXV0aG9yaXplX3VwZ3JhZGUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFGBlbmFjdF9hdXRob3JpemVkX3VwZ3JhZGUBAAQQY29kZSQCBAxzZXQBAAQMbm93CAIkUHRyYW5zZmVyX2FsbG93X2RlYXRoAQAIEGRlc3T1AhR2YWx1ZQg4Zm9yY2VfdHJhbnNmZXIBAAwYc291cmNl9QIQZGVzdPUCFHZhbHVlCEx0cmFuc2Zlcl9rZWVwX2FsaXZlAQAIEGRlc3T1AhR2YWx1ZQgwdHJhbnNmZXJfYWxsAQAIEGRlc3T1AihrZWVwX2FsaXZlFDxmb3JjZV91bnJlc2VydmUBAAgMd2hv9QIYYW1vdW50CEB1cGdyYWRlX2FjY291bnRzAQAEDHdob/REZm9yY2Vfc2V0X2JhbGFuY2UBAAgMd2hv9QIgbmV3X2ZyZWUIbGZvcmNlX2FkanVzdF90b3RhbF9pc3N1YW5jZQEACCRkaXJlY3Rpb275AhRkZWx0YQgQYnVybgEACBR2YWx1ZQgoa2VlcF9hbGl2ZRQCGBB2ZXN0AQEFKHZlc3Rfb3RoZXIBAAQYdGFyZ2V09QI8dmVzdGVkX3RyYW5zZmVyAQAIGHRhcmdldPUCIHNjaGVkdWxlAQNUZm9yY2VfdmVzdGVkX3RyYW5zZmVyAQAMGHNvdXJjZfUCGHRhcmdldPUCIHNjaGVkdWxlAQM8bWVyZ2Vfc2NoZWR1bGVzAQAIPHNjaGVkdWxlMV9pbmRleAQ8c2NoZWR1bGUyX2luZGV4BHRmb3JjZV9yZW1vdmVfdmVzdGluZ19zY2hlZHVsZQEACBh0YXJnZXT1AjhzY2hlZHVsZV9pbmRleAQCJERzZXRfaW52dWxuZXJhYmxlcwEABAxuZXf0WHNldF9kZXNpcmVkX2NhbmRpZGF0ZXMBAAQMbWF4BEhzZXRfY2FuZGlkYWN5X2JvbmQBAAQQYm9uZAhUcmVnaXN0ZXJfYXNfY2FuZGlkYXRlAQEFMGxlYXZlX2ludGVudAEBBUBhZGRfaW52dWxuZXJhYmxlAQAEDHdobwBMcmVtb3ZlX2ludnVsbmVyYWJsZQEABAx3aG8ALHVwZGF0ZV9ib25kAQAELG5ld19kZXBvc2l0CEx0YWtlX2NhbmRpZGF0ZV9zbG90AQAIHGRlcG9zaXQIGHRhcmdldAACCCBzZXRfa2V5cwEACBBrZXlzIBRwcm9vZiQocHVyZ2Vfa2V5cwEBBQIUVHN1c3BlbmRfeGNtX2V4ZWN1dGlvbgEBBVByZXN1bWVfeGNtX2V4ZWN1dGlvbgEBBWB1cGRhdGVfc3VzcGVuZF90aHJlc2hvbGQBAAQMbmV3BFR1cGRhdGVfZHJvcF90aHJlc2hvbGQBAAQMbmV3BFx1cGRhdGVfcmVzdW1lX3RocmVzaG9sZAEABAxuZXcEAjgQc2VuZAEACBBkZXN0mQEcbWVzc2FnZbkDPHRlbGVwb3J0X2Fzc2V0cwEAEBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQRccmVzZXJ2ZV90cmFuc2Zlcl9hc3NldHMBABAQZGVzdJkBLGJlbmVmaWNpYXJ5mQEYYXNzZXRzlQE4ZmVlX2Fzc2V0X2l0ZW0EHGV4ZWN1dGUBAAgcbWVzc2FnZbkDKG1heF93ZWlnaHQYRGZvcmNlX3hjbV92ZXJzaW9uAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBGRmb3JjZV9kZWZhdWx0X3hjbV92ZXJzaW9uAQAERG1heWJlX3hjbV92ZXJzaW9u1QF4Zm9yY2Vfc3Vic2NyaWJlX3ZlcnNpb25fbm90aWZ5AQAEIGxvY2F0aW9umQGAZm9yY2VfdW5zdWJzY3JpYmVfdmVyc2lvbl9ub3RpZnkBAAQgbG9jYXRpb26ZAXxsaW1pdGVkX3Jlc2VydmVfdHJhbnNmZXJfYXNzZXRzAQAUEGRlc3SZASxiZW5lZmljaWFyeZkBGGFzc2V0c5UBOGZlZV9hc3NldF9pdGVtBDB3ZWlnaHRfbGltaXRVAVxsaW1pdGVkX3RlbGVwb3J0X2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQFAZm9yY2Vfc3VzcGVuc2lvbgEABCRzdXNwZW5kZWQUPHRyYW5zZmVyX2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQEwY2xhaW1fYXNzZXRzAQAIGGFzc2V0c5UBLGJlbmVmaWNpYXJ5mQGMdHJhbnNmZXJfYXNzZXRzX3VzaW5nX3R5cGVfYW5kX3RoZW4BABwQZGVzdJkBGGFzc2V0c5UBUGFzc2V0c190cmFuc2Zlcl90eXBlvQM4cmVtb3RlX2ZlZXNfaWR5A0hmZWVzX3RyYW5zZmVyX3R5cGW9A0hjdXN0b21feGNtX29uX2Rlc3S5AzB3ZWlnaHRfbGltaXRVAQIEUHJlcG9ydF9icmlkZ2Vfc3RhdHVzAQAIJGJyaWRnZV9pZCAwaXNfY29uZ2VzdGVkFAIIJHJlYXBfcGFnZQEACDhtZXNzYWdlX29yaWdpbqUBKHBhZ2VfaW5kZXgESGV4ZWN1dGVfb3ZlcndlaWdodAEAEDhtZXNzYWdlX29yaWdpbqUBEHBhZ2UEFGluZGV4BDB3ZWlnaHRfbGltaXQYAgwQUm9vdAEBBRhTaWduZWQBAQEQTm9uZQEBBQIIDFhjbQEACBxwYXJlbnRzBCBpbnRlcmlvcuQgUmVzcG9uc2UBAAgccGFyZW50cwQgaW50ZXJpb3LkAggUUmVsYXkBAQVAU2libGluZ1BhcmFjaGFpbgEBAgIQGHN5c3RlbQECDBBSb290AQEFGFNpZ25lZAEBARBOb25lAQEFLFBvbGthZG90WGNtAQIIDFhjbQEACBxwYXJlbnRzBCBpbnRlcmlvcuQgUmVzcG9uc2UBAAgccGFyZW50cwQgaW50ZXJpb3LkKEN1bXVsdXNYY20BAggUUmVsYXkBAQVAU2libGluZ1BhcmFjaGFpbgEBAhBWb2lkAQEFAhgUYmF0Y2gBAAQUY2FsbHOFBDRhc19kZXJpdmF0aXZlAQAIFGluZGV4BBBjYWxsgQQkYmF0Y2hfYWxsAQAEFGNhbGxzhQQsZGlzcGF0Y2hfYXMBAAgkYXNfb3JpZ2luEQQQY2FsbIEELGZvcmNlX2JhdGNoAQAEFGNhbGxzhQQsd2l0aF93ZWlnaHQBAAgQY2FsbIEEGHdlaWdodBgGvQECEFBhc19tdWx0aV90aHJlc2hvbGRfMQEACERvdGhlcl9zaWduYXRvcmllc/QQY2FsbIEEIGFzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEEGNhbGyBBChtYXhfd2VpZ2h0GEBhcHByb3ZlX2FzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEJGNhbGxfaGFzaCAobWF4X3dlaWdodBg8Y2FuY2VsX2FzX211bHRpAQAQJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0JHRpbWVwb2ludL0BJGNhbGxfaGFzaCAGxQECKBRwcm94eQEADBByZWFs9QJAZm9yY2VfcHJveHlfdHlwZSEEEGNhbGyBBCRhZGRfcHJveHkBAAwgZGVsZWdhdGX1Aihwcm94eV90eXBlxQEUZGVsYXkEMHJlbW92ZV9wcm94eQEADCBkZWxlZ2F0ZfUCKHByb3h5X3R5cGXFARRkZWxheQQ4cmVtb3ZlX3Byb3hpZXMBAQUsY3JlYXRlX3B1cmUBAAwocHJveHlfdHlwZcUBFGRlbGF5BBRpbmRleAQka2lsbF9wdXJlAQAUHHNwYXduZXL1Aihwcm94eV90eXBlxQEUaW5kZXgEGGhlaWdodAQkZXh0X2luZGV4BCBhbm5vdW5jZQEACBByZWFs9QIkY2FsbF9oYXNoIExyZW1vdmVfYW5ub3VuY2VtZW50AQAIEHJlYWz1AiRjYWxsX2hhc2ggTHJlamVjdF9hbm5vdW5jZW1lbnQBAAggZGVsZWdhdGX1AiRjYWxsX2hhc2ggPHByb3h5X2Fubm91bmNlZAEAECBkZWxlZ2F0ZfUCEHJlYWz1AkBmb3JjZV9wcm94eV90eXBlIQQQY2FsbIEEAoAYY3JlYXRlAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWQEFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWQEQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWQERGRlc3Ryb3lfYXBwcm92YWxzAQAECGlkBDhmaW5pc2hfZGVzdHJveQEABAhpZAQQbWludAEADAhpZAQsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWQEDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWQEGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZAQYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZAQYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlkBAx3aG/1AhB0aGF3AQAICGlkBAx3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWQEKHRoYXdfYXNzZXQBAAQIaWQESHRyYW5zZmVyX293bmVyc2hpcAEACAhpZAQUb3duZXL1AiBzZXRfdGVhbQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZARIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlkBEhmb3JjZV9hc3NldF9zdGF0dXMBACAIaWQEFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZAQgZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZAQgZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWQEGHJlZnVuZAEACAhpZAQoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlkBCxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWQEDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZAQMd2hv9QIUYmxvY2sBAAgIaWQEDHdob/UCAAwUaXRlbXMEOGl0ZW1fbWV0YWRhdGFzBChhdHRyaWJ1dGVzBAb1AgYIAmgYY3JlYXRlAQAIKGNvbGxlY3Rpb24EFGFkbWlu9QIwZm9yY2VfY3JlYXRlAQAMKGNvbGxlY3Rpb24EFG93bmVy9QIwZnJlZV9ob2xkaW5nFBxkZXN0cm95AQAIKGNvbGxlY3Rpb24EHHdpdG5lc3MtBBBtaW50AQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVy9QIQYnVybgEADChjb2xsZWN0aW9uBBBpdGVtBCxjaGVja19vd25lcjEEIHRyYW5zZmVyAQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRlc3T1AiRyZWRlcG9zaXQBAAgoY29sbGVjdGlvbgQUaXRlbXPRARhmcmVlemUBAAgoY29sbGVjdGlvbgQQaXRlbQQQdGhhdwEACChjb2xsZWN0aW9uBBBpdGVtBERmcmVlemVfY29sbGVjdGlvbgEABChjb2xsZWN0aW9uBDx0aGF3X2NvbGxlY3Rpb24BAAQoY29sbGVjdGlvbgRIdHJhbnNmZXJfb3duZXJzaGlwAQAIKGNvbGxlY3Rpb24EJG5ld19vd25lcvUCIHNldF90ZWFtAQAQKGNvbGxlY3Rpb24EGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCQGFwcHJvdmVfdHJhbnNmZXIBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AjxjYW5jZWxfYXBwcm92YWwBAAwoY29sbGVjdGlvbgQQaXRlbQRQbWF5YmVfY2hlY2tfZGVsZWdhdGUxBERmb3JjZV9pdGVtX3N0YXR1cwEAHChjb2xsZWN0aW9uBBRvd25lcvUCGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCMGZyZWVfaG9sZGluZxQkaXNfZnJvemVuFDRzZXRfYXR0cmlidXRlAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VAQxrZXkkFHZhbHVlJDxjbGVhcl9hdHRyaWJ1dGUBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQwc2V0X21ldGFkYXRhAQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ4Y2xlYXJfbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQaXRlbQRcc2V0X2NvbGxlY3Rpb25fbWV0YWRhdGEBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRjbGVhcl9jb2xsZWN0aW9uX21ldGFkYXRhAQAEKGNvbGxlY3Rpb24EUHNldF9hY2NlcHRfb3duZXJzaGlwAQAEQG1heWJlX2NvbGxlY3Rpb27VAWRzZXRfY29sbGVjdGlvbl9tYXhfc3VwcGx5AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEJHNldF9wcmljZQEAEChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZTUERHdoaXRlbGlzdGVkX2J1eWVyMQQgYnV5X2l0ZW0BAAwoY29sbGVjdGlvbgQQaXRlbQQkYmlkX3ByaWNlCAIMGElzc3VlcgEBBRhQdWJsaWMBAQUgSG9sZGVyT2YBAQIAFCRtaW50X3R5cGU9BBRwcmljZTUELHN0YXJ0X2Jsb2Nr1QEkZW5kX2Jsb2Nr1QFUZGVmYXVsdF9pdGVtX3NldHRpbmdzCAAMIHNldHRpbmdzCChtYXhfc3VwcGx51QE0bWludF9zZXR0aW5nc0EEAAw4aXRlbV9tZXRhZGF0YXMEMGl0ZW1fY29uZmlncwQoYXR0cmlidXRlcwQACChvd25lZF9pdGVt1QEobWludF9wcmljZTUEBk0EABAoY29sbGVjdGlvbgQQaXRlbQQgcmVjZWl2ZXIAGGFtb3VudAgEVQQAABwoY29sbGVjdGlvbgQQaXRlbQQoYXR0cmlidXRlc1kCIG1ldGFkYXRhJDBvbmx5X2FjY291bnTZASBkZWFkbGluZQQobWludF9wcmljZTUEBQEBAQUBBQECDBxFZDI1NTE5AQUBAQEcU3IyNTUxOQEFAQEBFEVjZHNhAQUBBQEAFChjb2xsZWN0aW9uBBBpdGVtBChhdHRyaWJ1dGVzWQIkbmFtZXNwYWNl4QEgZGVhZGxpbmUEApwYY3JlYXRlAQAIFGFkbWlu9QIYY29uZmlnRQQwZm9yY2VfY3JlYXRlAQAIFG93bmVy9QIYY29uZmlnRQQcZGVzdHJveQEACChjb2xsZWN0aW9uBBx3aXRuZXNzSQQQbWludAEAEChjb2xsZWN0aW9uBBBpdGVtBBxtaW50X3Rv9QIwd2l0bmVzc19kYXRhUQQoZm9yY2VfbWludAEAEChjb2xsZWN0aW9uBBBpdGVtBBxtaW50X3Rv9QIsaXRlbV9jb25maWcIEGJ1cm4BAAgoY29sbGVjdGlvbgQQaXRlbQQgdHJhbnNmZXIBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGVzdPUCJHJlZGVwb3NpdAEACChjb2xsZWN0aW9uBBRpdGVtc9EBSGxvY2tfaXRlbV90cmFuc2ZlcgEACChjb2xsZWN0aW9uBBBpdGVtBFB1bmxvY2tfaXRlbV90cmFuc2ZlcgEACChjb2xsZWN0aW9uBBBpdGVtBDxsb2NrX2NvbGxlY3Rpb24BAAgoY29sbGVjdGlvbgQ0bG9ja19zZXR0aW5ncwhIdHJhbnNmZXJfb3duZXJzaGlwAQAIKGNvbGxlY3Rpb24EJG5ld19vd25lcvUCIHNldF90ZWFtAQAQKGNvbGxlY3Rpb24EGGlzc3VlcjEEFGFkbWluMQQcZnJlZXplcjEEWGZvcmNlX2NvbGxlY3Rpb25fb3duZXIBAAgoY29sbGVjdGlvbgQUb3duZXL1Alxmb3JjZV9jb2xsZWN0aW9uX2NvbmZpZwEACChjb2xsZWN0aW9uBBhjb25maWdFBEBhcHByb3ZlX3RyYW5zZmVyAQAQKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QI4bWF5YmVfZGVhZGxpbmXVATxjYW5jZWxfYXBwcm92YWwBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AnBjbGVhcl9hbGxfdHJhbnNmZXJfYXBwcm92YWxzAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUGxvY2tfaXRlbV9wcm9wZXJ0aWVzAQAQKGNvbGxlY3Rpb24EEGl0ZW0ENGxvY2tfbWV0YWRhdGEUPGxvY2tfYXR0cmlidXRlcxQ0c2V0X2F0dHJpYnV0ZQEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JBR2YWx1ZSRMZm9yY2Vfc2V0X2F0dHJpYnV0ZQEAGBhzZXRfYXPZAShjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JBR2YWx1ZSQ8Y2xlYXJfYXR0cmlidXRlAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VASRuYW1lc3BhY2XhAQxrZXkkXGFwcHJvdmVfaXRlbV9hdHRyaWJ1dGVzAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QJ8Y2FuY2VsX2l0ZW1fYXR0cmlidXRlc19hcHByb3ZhbAEAEChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCHHdpdG5lc3MEMHNldF9tZXRhZGF0YQEADChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJDhjbGVhcl9tZXRhZGF0YQEACChjb2xsZWN0aW9uBBBpdGVtBFxzZXRfY29sbGVjdGlvbl9tZXRhZGF0YQEACChjb2xsZWN0aW9uBBBkYXRhJGRjbGVhcl9jb2xsZWN0aW9uX21ldGFkYXRhAQAEKGNvbGxlY3Rpb24EUHNldF9hY2NlcHRfb3duZXJzaGlwAQAEQG1heWJlX2NvbGxlY3Rpb27VAWRzZXRfY29sbGVjdGlvbl9tYXhfc3VwcGx5AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEUHVwZGF0ZV9taW50X3NldHRpbmdzAQAIKGNvbGxlY3Rpb24ENG1pbnRfc2V0dGluZ3NBBCRzZXRfcHJpY2UBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2U1BER3aGl0ZWxpc3RlZF9idXllcjEEIGJ1eV9pdGVtAQAMKGNvbGxlY3Rpb24EEGl0ZW0EJGJpZF9wcmljZQggcGF5X3RpcHMBAAQQdGlwc1kELGNyZWF0ZV9zd2FwAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24ESG1heWJlX2Rlc2lyZWRfaXRlbdUBLG1heWJlX3ByaWNl7QEgZHVyYXRpb24ELGNhbmNlbF9zd2FwAQAISG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBChjbGFpbV9zd2FwAQAUPHNlbmRfY29sbGVjdGlvbgQkc2VuZF9pdGVtBEhyZWNlaXZlX2NvbGxlY3Rpb24EMHJlY2VpdmVfaXRlbQQ0d2l0bmVzc19wcmljZe0BPG1pbnRfcHJlX3NpZ25lZAEADCRtaW50X2RhdGFdBCRzaWduYXR1cmVpBBhzaWduZXIAZHNldF9hdHRyaWJ1dGVzX3ByZV9zaWduZWQBAAwQZGF0YW0EJHNpZ25hdHVyZWkEGHNpZ25lcgACgBhjcmVhdGUBAAwIaWToFGFkbWlu9QIsbWluX2JhbGFuY2UIMGZvcmNlX2NyZWF0ZQEAEAhpZOgUb3duZXL1AjRpc19zdWZmaWNpZW50FCxtaW5fYmFsYW5jZQg0c3RhcnRfZGVzdHJveQEABAhpZOhAZGVzdHJveV9hY2NvdW50cwEABAhpZOhEZGVzdHJveV9hcHByb3ZhbHMBAAQIaWToOGZpbmlzaF9kZXN0cm95AQAECGlk6BBtaW50AQAMCGlk6CxiZW5lZmljaWFyefUCGGFtb3VudAgQYnVybgEADAhpZOgMd2hv9QIYYW1vdW50CCB0cmFuc2ZlcgEADAhpZOgYdGFyZ2V09QIYYW1vdW50CEx0cmFuc2Zlcl9rZWVwX2FsaXZlAQAMCGlk6Bh0YXJnZXT1AhhhbW91bnQIOGZvcmNlX3RyYW5zZmVyAQAQCGlk6Bhzb3VyY2X1AhBkZXN09QIYYW1vdW50CBhmcmVlemUBAAgIaWToDHdob/UCEHRoYXcBAAgIaWToDHdob/UCMGZyZWV6ZV9hc3NldAEABAhpZOgodGhhd19hc3NldAEABAhpZOhIdHJhbnNmZXJfb3duZXJzaGlwAQAICGlk6BRvd25lcvUCIHNldF90ZWFtAQAQCGlk6Bhpc3N1ZXL1AhRhZG1pbvUCHGZyZWV6ZXL1AjBzZXRfbWV0YWRhdGEBABAIaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEOGNsZWFyX21ldGFkYXRhAQAECGlk6Ehmb3JjZV9zZXRfbWV0YWRhdGEBABQIaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhRQZm9yY2VfY2xlYXJfbWV0YWRhdGEBAAQIaWToSGZvcmNlX2Fzc2V0X3N0YXR1cwEAIAhpZOgUb3duZXL1Ahhpc3N1ZXL1AhRhZG1pbvUCHGZyZWV6ZXL1AixtaW5fYmFsYW5jZQg0aXNfc3VmZmljaWVudBQkaXNfZnJvemVuFEBhcHByb3ZlX3RyYW5zZmVyAQAMCGlk6CBkZWxlZ2F0ZfUCGGFtb3VudAg8Y2FuY2VsX2FwcHJvdmFsAQAICGlk6CBkZWxlZ2F0ZfUCVGZvcmNlX2NhbmNlbF9hcHByb3ZhbAEADAhpZOgUb3duZXL1AiBkZWxlZ2F0ZfUCRHRyYW5zZmVyX2FwcHJvdmVkAQAQCGlk6BRvd25lcvUCLGRlc3RpbmF0aW9u9QIYYW1vdW50CBR0b3VjaAEABAhpZOgYcmVmdW5kAQAICGlk6ChhbGxvd19idXJuFDxzZXRfbWluX2JhbGFuY2UBAAgIaWToLG1pbl9iYWxhbmNlCCx0b3VjaF9vdGhlcgEACAhpZOgMd2hv9QIwcmVmdW5kX290aGVyAQAICGlk6Ax3aG/1AhRibG9jawEACAhpZOgMd2hv9QIE6AACGCxjcmVhdGVfcG9vbAEACBhhc3NldDHoGGFzc2V0Mug0YWRkX2xpcXVpZGl0eQEAHBhhc3NldDHoGGFzc2V0Mug8YW1vdW50MV9kZXNpcmVkCDxhbW91bnQyX2Rlc2lyZWQILGFtb3VudDFfbWluCCxhbW91bnQyX21pbggcbWludF90bwBAcmVtb3ZlX2xpcXVpZGl0eQEAGBhhc3NldDHoGGFzc2V0Mug0bHBfdG9rZW5fYnVybghMYW1vdW50MV9taW5fcmVjZWl2ZQhMYW1vdW50Ml9taW5fcmVjZWl2ZQgsd2l0aGRyYXdfdG8AcHN3YXBfZXhhY3RfdG9rZW5zX2Zvcl90b2tlbnMBABQQcGF0aHkEJGFtb3VudF9pbgg4YW1vdW50X291dF9taW4IHHNlbmRfdG8AKGtlZXBfYWxpdmUUcHN3YXBfdG9rZW5zX2Zvcl9leGFjdF90b2tlbnMBABQQcGF0aHkEKGFtb3VudF9vdXQINGFtb3VudF9pbl9tYXgIHHNlbmRfdG8AKGtlZXBfYWxpdmUUFHRvdWNoAQAIGGFzc2V0MegYYXNzZXQy6AJYGFN5c3RlbQECLBhyZW1hcmsBAAQYcmVtYXJrJDhzZXRfaGVhcF9wYWdlcwEABBRwYWdlcwggc2V0X2NvZGUBAAQQY29kZSRcc2V0X2NvZGVfd2l0aG91dF9jaGVja3MBAAQQY29kZSQsc2V0X3N0b3JhZ2UBAAQUaXRlbXNZAjBraWxsX3N0b3JhZ2UBAAQQa2V5c10CLGtpbGxfcHJlZml4AQAIGHByZWZpeCQcc3Via2V5cwREcmVtYXJrX3dpdGhfZXZlbnQBAAQYcmVtYXJrJERhdXRob3JpemVfdXBncmFkZQEABCRjb2RlX2hhc2gggGF1dGhvcml6ZV91cGdyYWRlX3dpdGhvdXRfY2hlY2tzAQAEJGNvZGVfaGFzaCBgYXBwbHlfYXV0aG9yaXplZF91cGdyYWRlAQAEEGNvZGUkPFBhcmFjaGFpblN5c3RlbQECEExzZXRfdmFsaWRhdGlvbl9kYXRhAQAEEGRhdGHVAmBzdWRvX3NlbmRfdXB3YXJkX21lc3NhZ2UBAAQcbWVzc2FnZSREYXV0aG9yaXplX3VwZ3JhZGUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFGBlbmFjdF9hdXRob3JpemVkX3VwZ3JhZGUBAAQQY29kZSQkVGltZXN0YW1wAQIEDHNldAEABAxub3cINFBhcmFjaGFpbkluZm8BAQUgQmFsYW5jZXMBAiRQdHJhbnNmZXJfYWxsb3dfZGVhdGgBAAgQZGVzdPUCFHZhbHVlCDhmb3JjZV90cmFuc2ZlcgEADBhzb3VyY2X1AhBkZXN09QIUdmFsdWUITHRyYW5zZmVyX2tlZXBfYWxpdmUBAAgQZGVzdPUCFHZhbHVlCDB0cmFuc2Zlcl9hbGwBAAgQZGVzdPUCKGtlZXBfYWxpdmUUPGZvcmNlX3VucmVzZXJ2ZQEACAx3aG/1AhhhbW91bnQIQHVwZ3JhZGVfYWNjb3VudHMBAAQMd2hv9ERmb3JjZV9zZXRfYmFsYW5jZQEACAx3aG/1AiBuZXdfZnJlZQhsZm9yY2VfYWRqdXN0X3RvdGFsX2lzc3VhbmNlAQAIJGRpcmVjdGlvbvkCFGRlbHRhCBBidXJuAQAIFHZhbHVlCChrZWVwX2FsaXZlFBxWZXN0aW5nAQIYEHZlc3QBAQUodmVzdF9vdGhlcgEABBh0YXJnZXT1Ajx2ZXN0ZWRfdHJhbnNmZXIBAAgYdGFyZ2V09QIgc2NoZWR1bGUBA1Rmb3JjZV92ZXN0ZWRfdHJhbnNmZXIBAAwYc291cmNl9QIYdGFyZ2V09QIgc2NoZWR1bGUBAzxtZXJnZV9zY2hlZHVsZXMBAAg8c2NoZWR1bGUxX2luZGV4BDxzY2hlZHVsZTJfaW5kZXgEdGZvcmNlX3JlbW92ZV92ZXN0aW5nX3NjaGVkdWxlAQAIGHRhcmdldPUCOHNjaGVkdWxlX2luZGV4BERDb2xsYXRvclNlbGVjdGlvbgECJERzZXRfaW52dWxuZXJhYmxlcwEABAxuZXf0WHNldF9kZXNpcmVkX2NhbmRpZGF0ZXMBAAQMbWF4BEhzZXRfY2FuZGlkYWN5X2JvbmQBAAQQYm9uZAhUcmVnaXN0ZXJfYXNfY2FuZGlkYXRlAQEFMGxlYXZlX2ludGVudAEBBUBhZGRfaW52dWxuZXJhYmxlAQAEDHdobwBMcmVtb3ZlX2ludnVsbmVyYWJsZQEABAx3aG8ALHVwZGF0ZV9ib25kAQAELG5ld19kZXBvc2l0CEx0YWtlX2NhbmRpZGF0ZV9zbG90AQAIHGRlcG9zaXQIGHRhcmdldAAcU2Vzc2lvbgECCCBzZXRfa2V5cwEACBBrZXlzIBRwcm9vZiQocHVyZ2Vfa2V5cwEBBSRYY21wUXVldWUBAhRUc3VzcGVuZF94Y21fZXhlY3V0aW9uAQEFUHJlc3VtZV94Y21fZXhlY3V0aW9uAQEFYHVwZGF0ZV9zdXNwZW5kX3RocmVzaG9sZAEABAxuZXcEVHVwZGF0ZV9kcm9wX3RocmVzaG9sZAEABAxuZXcEXHVwZGF0ZV9yZXN1bWVfdGhyZXNob2xkAQAEDG5ldwQsUG9sa2Fkb3RYY20BAjgQc2VuZAEACBBkZXN0mQEcbWVzc2FnZbkDPHRlbGVwb3J0X2Fzc2V0cwEAEBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQRccmVzZXJ2ZV90cmFuc2Zlcl9hc3NldHMBABAQZGVzdJkBLGJlbmVmaWNpYXJ5mQEYYXNzZXRzlQE4ZmVlX2Fzc2V0X2l0ZW0EHGV4ZWN1dGUBAAgcbWVzc2FnZbkDKG1heF93ZWlnaHQYRGZvcmNlX3hjbV92ZXJzaW9uAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBGRmb3JjZV9kZWZhdWx0X3hjbV92ZXJzaW9uAQAERG1heWJlX3hjbV92ZXJzaW9u1QF4Zm9yY2Vfc3Vic2NyaWJlX3ZlcnNpb25fbm90aWZ5AQAEIGxvY2F0aW9umQGAZm9yY2VfdW5zdWJzY3JpYmVfdmVyc2lvbl9ub3RpZnkBAAQgbG9jYXRpb26ZAXxsaW1pdGVkX3Jlc2VydmVfdHJhbnNmZXJfYXNzZXRzAQAUEGRlc3SZASxiZW5lZmljaWFyeZkBGGFzc2V0c5UBOGZlZV9hc3NldF9pdGVtBDB3ZWlnaHRfbGltaXRVAVxsaW1pdGVkX3RlbGVwb3J0X2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQFAZm9yY2Vfc3VzcGVuc2lvbgEABCRzdXNwZW5kZWQUPHRyYW5zZmVyX2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQEwY2xhaW1fYXNzZXRzAQAIGGFzc2V0c5UBLGJlbmVmaWNpYXJ5mQGMdHJhbnNmZXJfYXNzZXRzX3VzaW5nX3R5cGVfYW5kX3RoZW4BABwQZGVzdJkBGGFzc2V0c5UBUGFzc2V0c190cmFuc2Zlcl90eXBlvQM4cmVtb3RlX2ZlZXNfaWR5A0hmZWVzX3RyYW5zZmVyX3R5cGW9A0hjdXN0b21feGNtX29uX2Rlc3S5AzB3ZWlnaHRfbGltaXRVAShDdW11bHVzWGNtAQEFRFRvS3VzYW1hWGNtUm91dGVyAQIEUHJlcG9ydF9icmlkZ2Vfc3RhdHVzAQAIJGJyaWRnZV9pZCAwaXNfY29uZ2VzdGVkFDBNZXNzYWdlUXVldWUBAggkcmVhcF9wYWdlAQAIOG1lc3NhZ2Vfb3JpZ2lupQEocGFnZV9pbmRleARIZXhlY3V0ZV9vdmVyd2VpZ2h0AQAQOG1lc3NhZ2Vfb3JpZ2lupQEQcGFnZQQUaW5kZXgEMHdlaWdodF9saW1pdBgcVXRpbGl0eQECGBRiYXRjaAEABBRjYWxsc4UENGFzX2Rlcml2YXRpdmUBAAgUaW5kZXgEEGNhbGyBBCRiYXRjaF9hbGwBAAQUY2FsbHOFBCxkaXNwYXRjaF9hcwEACCRhc19vcmlnaW4RBBBjYWxsgQQsZm9yY2VfYmF0Y2gBAAQUY2FsbHOFBCx3aXRoX3dlaWdodAEACBBjYWxsgQQYd2VpZ2h0GCBNdWx0aXNpZwECEFBhc19tdWx0aV90aHJlc2hvbGRfMQEACERvdGhlcl9zaWduYXRvcmllc/QQY2FsbIEEIGFzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEEGNhbGyBBChtYXhfd2VpZ2h0GEBhcHByb3ZlX2FzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEJGNhbGxfaGFzaCAobWF4X3dlaWdodBg8Y2FuY2VsX2FzX211bHRpAQAQJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0JHRpbWVwb2ludL0BJGNhbGxfaGFzaCAUUHJveHkBAigUcHJveHkBAAwQcmVhbPUCQGZvcmNlX3Byb3h5X3R5cGUhBBBjYWxsgQQkYWRkX3Byb3h5AQAMIGRlbGVnYXRl9QIocHJveHlfdHlwZcUBFGRlbGF5BDByZW1vdmVfcHJveHkBAAwgZGVsZWdhdGX1Aihwcm94eV90eXBlxQEUZGVsYXkEOHJlbW92ZV9wcm94aWVzAQEFLGNyZWF0ZV9wdXJlAQAMKHByb3h5X3R5cGXFARRkZWxheQQUaW5kZXgEJGtpbGxfcHVyZQEAFBxzcGF3bmVy9QIocHJveHlfdHlwZcUBFGluZGV4BBhoZWlnaHQEJGV4dF9pbmRleAQgYW5ub3VuY2UBAAgQcmVhbPUCJGNhbGxfaGFzaCBMcmVtb3ZlX2Fubm91bmNlbWVudAEACBByZWFs9QIkY2FsbF9oYXNoIExyZWplY3RfYW5ub3VuY2VtZW50AQAIIGRlbGVnYXRl9QIkY2FsbF9oYXNoIDxwcm94eV9hbm5vdW5jZWQBABAgZGVsZWdhdGX1AhByZWFs9QJAZm9yY2VfcHJveHlfdHlwZSEEEGNhbGyBBBhBc3NldHMBAoAYY3JlYXRlAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWQEFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWQEQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWQERGRlc3Ryb3lfYXBwcm92YWxzAQAECGlkBDhmaW5pc2hfZGVzdHJveQEABAhpZAQQbWludAEADAhpZAQsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWQEDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWQEGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZAQYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZAQYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlkBAx3aG/1AhB0aGF3AQAICGlkBAx3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWQEKHRoYXdfYXNzZXQBAAQIaWQESHRyYW5zZmVyX293bmVyc2hpcAEACAhpZAQUb3duZXL1AiBzZXRfdGVhbQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZARIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlkBEhmb3JjZV9hc3NldF9zdGF0dXMBACAIaWQEFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZAQgZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZAQgZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWQEGHJlZnVuZAEACAhpZAQoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlkBCxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWQEDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZAQMd2hv9QIUYmxvY2sBAAgIaWQEDHdob/UCHFVuaXF1ZXMBAmgYY3JlYXRlAQAIKGNvbGxlY3Rpb24EFGFkbWlu9QIwZm9yY2VfY3JlYXRlAQAMKGNvbGxlY3Rpb24EFG93bmVy9QIwZnJlZV9ob2xkaW5nFBxkZXN0cm95AQAIKGNvbGxlY3Rpb24EHHdpdG5lc3MtBBBtaW50AQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVy9QIQYnVybgEADChjb2xsZWN0aW9uBBBpdGVtBCxjaGVja19vd25lcjEEIHRyYW5zZmVyAQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRlc3T1AiRyZWRlcG9zaXQBAAgoY29sbGVjdGlvbgQUaXRlbXPRARhmcmVlemUBAAgoY29sbGVjdGlvbgQQaXRlbQQQdGhhdwEACChjb2xsZWN0aW9uBBBpdGVtBERmcmVlemVfY29sbGVjdGlvbgEABChjb2xsZWN0aW9uBDx0aGF3X2NvbGxlY3Rpb24BAAQoY29sbGVjdGlvbgRIdHJhbnNmZXJfb3duZXJzaGlwAQAIKGNvbGxlY3Rpb24EJG5ld19vd25lcvUCIHNldF90ZWFtAQAQKGNvbGxlY3Rpb24EGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCQGFwcHJvdmVfdHJhbnNmZXIBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AjxjYW5jZWxfYXBwcm92YWwBAAwoY29sbGVjdGlvbgQQaXRlbQRQbWF5YmVfY2hlY2tfZGVsZWdhdGUxBERmb3JjZV9pdGVtX3N0YXR1cwEAHChjb2xsZWN0aW9uBBRvd25lcvUCGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCMGZyZWVfaG9sZGluZxQkaXNfZnJvemVuFDRzZXRfYXR0cmlidXRlAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VAQxrZXkkFHZhbHVlJDxjbGVhcl9hdHRyaWJ1dGUBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQwc2V0X21ldGFkYXRhAQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ4Y2xlYXJfbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQaXRlbQRcc2V0X2NvbGxlY3Rpb25fbWV0YWRhdGEBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRjbGVhcl9jb2xsZWN0aW9uX21ldGFkYXRhAQAEKGNvbGxlY3Rpb24EUHNldF9hY2NlcHRfb3duZXJzaGlwAQAEQG1heWJlX2NvbGxlY3Rpb27VAWRzZXRfY29sbGVjdGlvbl9tYXhfc3VwcGx5AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEJHNldF9wcmljZQEAEChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZTUERHdoaXRlbGlzdGVkX2J1eWVyMQQgYnV5X2l0ZW0BAAwoY29sbGVjdGlvbgQQaXRlbQQkYmlkX3ByaWNlCBBOZnRzAQKcGGNyZWF0ZQEACBRhZG1pbvUCGGNvbmZpZ0UEMGZvcmNlX2NyZWF0ZQEACBRvd25lcvUCGGNvbmZpZ0UEHGRlc3Ryb3kBAAgoY29sbGVjdGlvbgQcd2l0bmVzc0kEEG1pbnQBABAoY29sbGVjdGlvbgQQaXRlbQQcbWludF90b/UCMHdpdG5lc3NfZGF0YVEEKGZvcmNlX21pbnQBABAoY29sbGVjdGlvbgQQaXRlbQQcbWludF90b/UCLGl0ZW1fY29uZmlnCBBidXJuAQAIKGNvbGxlY3Rpb24EEGl0ZW0EIHRyYW5zZmVyAQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRlc3T1AiRyZWRlcG9zaXQBAAgoY29sbGVjdGlvbgQUaXRlbXPRAUhsb2NrX2l0ZW1fdHJhbnNmZXIBAAgoY29sbGVjdGlvbgQQaXRlbQRQdW5sb2NrX2l0ZW1fdHJhbnNmZXIBAAgoY29sbGVjdGlvbgQQaXRlbQQ8bG9ja19jb2xsZWN0aW9uAQAIKGNvbGxlY3Rpb24ENGxvY2tfc2V0dGluZ3MISHRyYW5zZmVyX293bmVyc2hpcAEACChjb2xsZWN0aW9uBCRuZXdfb3duZXL1AiBzZXRfdGVhbQEAEChjb2xsZWN0aW9uBBhpc3N1ZXIxBBRhZG1pbjEEHGZyZWV6ZXIxBFhmb3JjZV9jb2xsZWN0aW9uX293bmVyAQAIKGNvbGxlY3Rpb24EFG93bmVy9QJcZm9yY2VfY29sbGVjdGlvbl9jb25maWcBAAgoY29sbGVjdGlvbgQYY29uZmlnRQRAYXBwcm92ZV90cmFuc2ZlcgEAEChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCOG1heWJlX2RlYWRsaW5l1QE8Y2FuY2VsX2FwcHJvdmFsAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QJwY2xlYXJfYWxsX3RyYW5zZmVyX2FwcHJvdmFscwEACChjb2xsZWN0aW9uBBBpdGVtBFBsb2NrX2l0ZW1fcHJvcGVydGllcwEAEChjb2xsZWN0aW9uBBBpdGVtBDRsb2NrX21ldGFkYXRhFDxsb2NrX2F0dHJpYnV0ZXMUNHNldF9hdHRyaWJ1dGUBABQoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBJG5hbWVzcGFjZeEBDGtleSQUdmFsdWUkTGZvcmNlX3NldF9hdHRyaWJ1dGUBABgYc2V0X2Fz2QEoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBJG5hbWVzcGFjZeEBDGtleSQUdmFsdWUkPGNsZWFyX2F0dHJpYnV0ZQEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JFxhcHByb3ZlX2l0ZW1fYXR0cmlidXRlcwEADChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCfGNhbmNlbF9pdGVtX2F0dHJpYnV0ZXNfYXBwcm92YWwBABAoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1Ahx3aXRuZXNzBDBzZXRfbWV0YWRhdGEBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGF0YSQ4Y2xlYXJfbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQaXRlbQRcc2V0X2NvbGxlY3Rpb25fbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQZGF0YSRkY2xlYXJfY29sbGVjdGlvbl9tZXRhZGF0YQEABChjb2xsZWN0aW9uBFBzZXRfYWNjZXB0X293bmVyc2hpcAEABEBtYXliZV9jb2xsZWN0aW9u1QFkc2V0X2NvbGxlY3Rpb25fbWF4X3N1cHBseQEACChjb2xsZWN0aW9uBChtYXhfc3VwcGx5BFB1cGRhdGVfbWludF9zZXR0aW5ncwEACChjb2xsZWN0aW9uBDRtaW50X3NldHRpbmdzQQQkc2V0X3ByaWNlAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlNQREd2hpdGVsaXN0ZWRfYnV5ZXIxBCBidXlfaXRlbQEADChjb2xsZWN0aW9uBBBpdGVtBCRiaWRfcHJpY2UIIHBheV90aXBzAQAEEHRpcHNZBCxjcmVhdGVfc3dhcAEAGEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQRIZGVzaXJlZF9jb2xsZWN0aW9uBEhtYXliZV9kZXNpcmVkX2l0ZW3VASxtYXliZV9wcmljZe0BIGR1cmF0aW9uBCxjYW5jZWxfc3dhcAEACEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQQoY2xhaW1fc3dhcAEAFDxzZW5kX2NvbGxlY3Rpb24EJHNlbmRfaXRlbQRIcmVjZWl2ZV9jb2xsZWN0aW9uBDByZWNlaXZlX2l0ZW0ENHdpdG5lc3NfcHJpY2XtATxtaW50X3ByZV9zaWduZWQBAAwkbWludF9kYXRhXQQkc2lnbmF0dXJlaQQYc2lnbmVyAGRzZXRfYXR0cmlidXRlc19wcmVfc2lnbmVkAQAMEGRhdGFtBCRzaWduYXR1cmVpBBhzaWduZXIANEZvcmVpZ25Bc3NldHMBAoAYY3JlYXRlAQAMCGlk6BRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWToFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWToQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWToRGRlc3Ryb3lfYXBwcm92YWxzAQAECGlk6DhmaW5pc2hfZGVzdHJveQEABAhpZOgQbWludAEADAhpZOgsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWToDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWToGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZOgYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZOgYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlk6Ax3aG/1AhB0aGF3AQAICGlk6Ax3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWToKHRoYXdfYXNzZXQBAAQIaWToSHRyYW5zZmVyX293bmVyc2hpcAEACAhpZOgUb3duZXL1AiBzZXRfdGVhbQEAEAhpZOgYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlk6BBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZOhIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlk6BBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlk6Ehmb3JjZV9hc3NldF9zdGF0dXMBACAIaWToFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZOggZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZOggZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWToFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZOgUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWToGHJlZnVuZAEACAhpZOgoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlk6CxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWToDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZOgMd2hv9QIUYmxvY2sBAAgIaWToDHdob/UCKFBvb2xBc3NldHMBAoAYY3JlYXRlAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWQEFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWQEQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWQERGRlc3Ryb3lfYXBwcm92YWxzAQAECGlkBDhmaW5pc2hfZGVzdHJveQEABAhpZAQQbWludAEADAhpZAQsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWQEDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWQEGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZAQYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZAQYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlkBAx3aG/1AhB0aGF3AQAICGlkBAx3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWQEKHRoYXdfYXNzZXQBAAQIaWQESHRyYW5zZmVyX293bmVyc2hpcAEACAhpZAQUb3duZXL1AiBzZXRfdGVhbQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZARIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlkBEhmb3JjZV9hc3NldF9zdGF0dXMBACAIaWQEFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZAQgZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZAQgZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWQEGHJlZnVuZAEACAhpZAQoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlkBCxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWQEDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZAQMd2hv9QIUYmxvY2sBAAgIaWQEDHdob/UCPEFzc2V0Q29udmVyc2lvbgECGCxjcmVhdGVfcG9vbAEACBhhc3NldDHoGGFzc2V0Mug0YWRkX2xpcXVpZGl0eQEAHBhhc3NldDHoGGFzc2V0Mug8YW1vdW50MV9kZXNpcmVkCDxhbW91bnQyX2Rlc2lyZWQILGFtb3VudDFfbWluCCxhbW91bnQyX21pbggcbWludF90bwBAcmVtb3ZlX2xpcXVpZGl0eQEAGBhhc3NldDHoGGFzc2V0Mug0bHBfdG9rZW5fYnVybghMYW1vdW50MV9taW5fcmVjZWl2ZQhMYW1vdW50Ml9taW5fcmVjZWl2ZQgsd2l0aGRyYXdfdG8AcHN3YXBfZXhhY3RfdG9rZW5zX2Zvcl90b2tlbnMBABQQcGF0aHkEJGFtb3VudF9pbgg4YW1vdW50X291dF9taW4IHHNlbmRfdG8AKGtlZXBfYWxpdmUUcHN3YXBfdG9rZW5zX2Zvcl9leGFjdF90b2tlbnMBABQQcGF0aHkEKGFtb3VudF9vdXQINGFtb3VudF9pbl9tYXgIHHNlbmRfdG8AKGtlZXBfYWxpdmUUFHRvdWNoAQAIGGFzc2V0MegYYXNzZXQy6ASBBAAAEBB3aGVuvQEcZGVwb3NpdAgkZGVwb3NpdG9yACRhcHByb3ZhbHP0AAwgZGVsZWdhdGUAKHByb3h5X3R5cGXFARRkZWxheQQEjQQAAwiRBAgADBByZWFsACRjYWxsX2hhc2ggGGhlaWdodAQEmQQAAwidBAgCDBBMaXZlAQEFGEZyb3plbgEBBShEZXN0cm95aW5nAQEFADAUb3duZXIAGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIAGHN1cHBseQgcZGVwb3NpdAgsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUIGFjY291bnRzBCxzdWZmaWNpZW50cwQkYXBwcm92YWxzBBhzdGF0dXOlBAMIBAACDBhMaXF1aWQBAQUYRnJvemVuAQEFHEJsb2NrZWQBAQUCFCBDb25zdW1lcgEBBShTdWZmaWNpZW50AQEFLERlcG9zaXRIZWxkAQEDPERlcG9zaXRSZWZ1bmRlZAEBBSxEZXBvc2l0RnJvbQEDCAAIAAwcYmFsYW5jZQgYc3RhdHVzsQQYcmVhc29utQQDDAQAAAAIGGFtb3VudAgcZGVwb3NpdAgAFBxkZXBvc2l0CBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UACgUb3duZXIAGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIANHRvdGFsX2RlcG9zaXQIMGZyZWVfaG9sZGluZxQUaXRlbXMEOGl0ZW1fbWV0YWRhdGFzBChhdHRyaWJ1dGVzBCRpc19mcm96ZW4UAwwABAQDCAAEABAUb3duZXIAIGFwcHJvdmVk2QEkaXNfZnJvemVuFBxkZXBvc2l0CAAMHGRlcG9zaXQIEGRhdGEkJGlzX2Zyb3plbhQDDATVASQDCCQIAwgI2QEAGBRvd25lcgA0b3duZXJfZGVwb3NpdAgUaXRlbXMEOGl0ZW1fbWV0YWRhdGFzBDBpdGVtX2NvbmZpZ3MEKGF0dHJpYnV0ZXMEAwgA1QEE7QQAAAgcYWNjb3VudAAYYW1vdW50CAAMFG93bmVyACRhcHByb3ZhbHPxBBxkZXBvc2l09QQACBxkZXBvc2l0CBBkYXRhJAAIHGFjY291bnTZARhhbW91bnQIAAgcZGVwb3NpdAEFEGRhdGEkAxAE1QHhASQDCCQBBQAQSGRlc2lyZWRfY29sbGVjdGlvbgQwZGVzaXJlZF9pdGVt1QEUcHJpY2XtASBkZWFkbGluZQQDCOgAAwzoAAAAFCxwYXJlbnRfaGFzaCAYbnVtYmVyBChzdGF0ZV9yb290IDxleHRyaW5zaWNzX3Jvb3QgGGRpZ2VzdDAACBhoZWFkZXIdBShleHRyaW5zaWNzXQICCDRBbGxFeHRyaW5zaWNzAQEFNE9ubHlJbmhlcmVudHMBAQUCLBBDYWxsAQEFHFBheW1lbnQBAQUYRnV0dXJlAQEFFFN0YWxlAQEFIEJhZFByb29mAQEFREFuY2llbnRCaXJ0aEJsb2NrAQEFREV4aGF1c3RzUmVzb3VyY2VzAQEFGEN1c3RvbQEBAjBCYWRNYW5kYXRvcnkBAQVMTWFuZGF0b3J5VmFsaWRhdGlvbgEBBSRCYWRTaWduZXIBAQUCDDBDYW5ub3RMb29rdXABAQVMTm9VbnNpZ25lZFZhbGlkYXRvcgEBBRhDdXN0b20BAQICCBxJbnZhbGlkAQIsEENhbGwBAQUcUGF5bWVudAEBBRhGdXR1cmUBAQUUU3RhbGUBAQUgQmFkUHJvb2YBAQVEQW5jaWVudEJpcnRoQmxvY2sBAQVERXhoYXVzdHNSZXNvdXJjZXMBAQUYQ3VzdG9tAQECMEJhZE1hbmRhdG9yeQEBBUxNYW5kYXRvcnlWYWxpZGF0aW9uAQEFJEJhZFNpZ25lcgEBBRxVbmtub3duAQIMMENhbm5vdExvb2t1cAEBBUxOb1Vuc2lnbmVkVmFsaWRhdG9yAQEFGEN1c3RvbQEBAge1ATEFAwgNASQEOQUAAAwQb2theRQsZmF0YWxfZXJyb3IUGGVycm9ycz0FAgwcSW5CbG9jawEBBRRMb2NhbAEBBSBFeHRlcm5hbAEBBQAUIHByaW9yaXR5CCByZXF1aXJlc10CIHByb3ZpZGVzXQIkbG9uZ2V2aXR5CCRwcm9wYWdhdGUUB0kFMQUDCCQoBFEFAAZVBQAMGHdlaWdodBgUY2xhc3M4LHBhcnRpYWxfZmVlCAAMIGJhc2VfZmVlCBxsZW5fZmVlCExhZGp1c3RlZF93ZWlnaHRfZmVlCAZhBQAINGluY2x1c2lvbl9mZWVlBQx0aXAIBHkDAAIYNFVuaW1wbGVtZW50ZWQBAQVkVmVyc2lvbmVkQ29udmVyc2lvbkZhaWxlZAEBBUxXZWlnaHROb3RDb21wdXRhYmxlAQEFTFVuaGFuZGxlZFhjbVZlcnNpb24BAQU0QXNzZXROb3RGb3VuZAEBBShVbnJvdXRhYmxlAQEFB20FcQUHGHEFBwhxBQeVAXEFAAg0YWN0dWFsX3dlaWdodDECIHBheXNfZmVlPAAIJHBvc3RfaW5mb4UFFGVycm9ylAeFBYkFBA0CAAa5AwS5AwADCJkBmQUEnQUAABBAZXhlY3V0aW9uX3Jlc3VsdI0FOGVtaXR0ZWRfZXZlbnRzkQUkbG9jYWxfeGNtlQU4Zm9yd2FyZGVkX3hjbXOhBQIINFVuaW1wbGVtZW50ZWQBAQVkVmVyc2lvbmVkQ29udmVyc2lvbkZhaWxlZAEBBQelBakFAAxAZXhlY3V0aW9uX3Jlc3VsdAkBOGVtaXR0ZWRfZXZlbnRzkQU4Zm9yd2FyZGVkX3hjbXOhBQexBakFAggsVW5zdXBwb3J0ZWQBAQVkVmVyc2lvbmVkQ29udmVyc2lvbkZhaWxlZAEBBQcAuQUCCFxBc3NldElkQ29udmVyc2lvbkZhaWxlZAEBBXxBbW91bnRUb0JhbGFuY2VDb252ZXJzaW9uRmFpbGVkAQEFB5UBwQUAGDx1cHdhcmRfbWVzc2FnZXNdAkxob3Jpem9udGFsX21lc3NhZ2VzuQJMbmV3X3ZhbGlkYXRpb25fY29kZXEDbHByb2Nlc3NlZF9kb3dud2FyZF9tZXNzYWdlcwQ4aHJtcF93YXRlcm1hcmsEJGhlYWRfZGF0YSQHsQElAgYlAgQlAgAECAEIBtkF"; + metadataTypes_default = content; + } +}); + +// .papi/descriptors/src/index.ts +var index_exports = {}; +__export(index_exports, { + ArithmeticError: () => ArithmeticError, + BalanceStatus: () => BalanceStatus, + BalancesAdjustmentDirection: () => BalancesAdjustmentDirection, + BalancesTypesReasons: () => BalancesTypesReasons, + DigestItem: () => DigestItem, + DispatchClass: () => DispatchClass, + DispatchRawOrigin: () => DispatchRawOrigin, + MultiAddress: () => MultiAddress, + MultiSignature: () => MultiSignature, + Phase: () => Phase, + SessionEvent: () => SessionEvent, + TokenError: () => TokenError, + TransactionPaymentEvent: () => TransactionPaymentEvent, + TransactionPaymentReleases: () => TransactionPaymentReleases, + TransactionValidityError: () => TransactionValidityError, + TransactionValidityInvalidTransaction: () => TransactionValidityInvalidTransaction, + TransactionValidityTransactionSource: () => TransactionValidityTransactionSource, + TransactionValidityUnknownTransaction: () => TransactionValidityUnknownTransaction, + TransactionalError: () => TransactionalError, + UpgradeGoAhead: () => UpgradeGoAhead, + UpgradeRestriction: () => UpgradeRestriction, + Version: () => Version, + VestingEvent: () => VestingEvent, + XcmPalletOrigin: () => XcmPalletOrigin, + XcmPalletQueryStatus: () => XcmPalletQueryStatus, + XcmPalletVersionMigrationStage: () => XcmPalletVersionMigrationStage, + XcmV2BodyId: () => XcmV2BodyId, + XcmV2Instruction: () => XcmV2Instruction, + XcmV2Junction: () => XcmV2Junction, + XcmV2JunctionBodyPart: () => XcmV2JunctionBodyPart, + XcmV2MultiAssetFilter: () => XcmV2MultiAssetFilter, + XcmV2MultiassetAssetId: () => XcmV2MultiassetAssetId, + XcmV2MultiassetAssetInstance: () => XcmV2MultiassetAssetInstance, + XcmV2MultiassetFungibility: () => XcmV2MultiassetFungibility, + XcmV2MultiassetWildFungibility: () => XcmV2MultiassetWildFungibility, + XcmV2MultiassetWildMultiAsset: () => XcmV2MultiassetWildMultiAsset, + XcmV2MultilocationJunctions: () => XcmV2MultilocationJunctions, + XcmV2NetworkId: () => XcmV2NetworkId, + XcmV2OriginKind: () => XcmV2OriginKind, + XcmV2Response: () => XcmV2Response, + XcmV2TraitsError: () => XcmV2TraitsError, + XcmV2WeightLimit: () => XcmV2WeightLimit, + XcmV3Instruction: () => XcmV3Instruction, + XcmV3Junction: () => XcmV3Junction, + XcmV3JunctionBodyId: () => XcmV3JunctionBodyId, + XcmV3JunctionNetworkId: () => XcmV3JunctionNetworkId, + XcmV3Junctions: () => XcmV3Junctions, + XcmV3MaybeErrorCode: () => XcmV3MaybeErrorCode, + XcmV3MultiassetAssetId: () => XcmV3MultiassetAssetId, + XcmV3MultiassetAssetInstance: () => XcmV3MultiassetAssetInstance, + XcmV3MultiassetFungibility: () => XcmV3MultiassetFungibility, + XcmV3MultiassetMultiAssetFilter: () => XcmV3MultiassetMultiAssetFilter, + XcmV3MultiassetWildMultiAsset: () => XcmV3MultiassetWildMultiAsset, + XcmV3Response: () => XcmV3Response, + XcmV3TraitsError: () => XcmV3TraitsError, + XcmV3WeightLimit: () => XcmV3WeightLimit, + XcmV4AssetAssetFilter: () => XcmV4AssetAssetFilter, + XcmV4AssetWildAsset: () => XcmV4AssetWildAsset, + XcmV4Instruction: () => XcmV4Instruction, + XcmV4Response: () => XcmV4Response, + XcmV4TraitsOutcome: () => XcmV4TraitsOutcome, + XcmVersionedAssetId: () => XcmVersionedAssetId, + XcmVersionedAssets: () => XcmVersionedAssets, + XcmVersionedLocation: () => XcmVersionedLocation, + XcmVersionedResponse: () => XcmVersionedResponse, + XcmVersionedXcm: () => XcmVersionedXcm, + assethub: () => assethub_default +}); +module.exports = __toCommonJS(index_exports); + +// .papi/descriptors/src/assethub.ts +var toBinary = (() => { + const table = new Uint8Array(128); + for (let i = 0; i < 64; i++) table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i; + return (base64) => { + const n = base64.length, bytes = new Uint8Array((n - Number(base64[n - 1] === "=") - Number(base64[n - 2] === "=")) * 3 / 4 | 0); + for (let i2 = 0, j = 0; i2 < n; ) { + const c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)]; + const c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)]; + bytes[j++] = c0 << 2 | c1 >> 4; + bytes[j++] = c1 << 4 | c2 >> 2; + bytes[j++] = c2 << 6 | c3; + } + return bytes; + }; +})(); +var descriptorValues = Promise.resolve().then(() => (init_descriptors(), descriptors_exports)).then((module2) => module2["Assethub"]); +var metadataTypes = Promise.resolve().then(() => (init_metadataTypes(), metadataTypes_exports)).then( + (module2) => toBinary("default" in module2 ? module2.default : module2) +); +var asset = {}; +var _allDescriptors = { descriptors: descriptorValues, metadataTypes, asset }; +var assethub_default = _allDescriptors; + +// .papi/descriptors/src/common-types.ts +var import_polkadot_api = require("polkadot-api"); +var DigestItem = import_polkadot_api._Enum; +var Phase = import_polkadot_api._Enum; +var DispatchClass = import_polkadot_api._Enum; +var TokenError = import_polkadot_api._Enum; +var ArithmeticError = import_polkadot_api._Enum; +var TransactionalError = import_polkadot_api._Enum; +var BalanceStatus = import_polkadot_api._Enum; +var TransactionPaymentEvent = import_polkadot_api._Enum; +var XcmV3Junctions = import_polkadot_api._Enum; +var XcmV3Junction = import_polkadot_api._Enum; +var XcmV3JunctionNetworkId = import_polkadot_api._Enum; +var XcmV3JunctionBodyId = import_polkadot_api._Enum; +var XcmV2JunctionBodyPart = import_polkadot_api._Enum; +var VestingEvent = import_polkadot_api._Enum; +var SessionEvent = import_polkadot_api._Enum; +var XcmV4TraitsOutcome = import_polkadot_api._Enum; +var XcmV3TraitsError = import_polkadot_api._Enum; +var XcmV4Instruction = import_polkadot_api._Enum; +var XcmV3MultiassetFungibility = import_polkadot_api._Enum; +var XcmV3MultiassetAssetInstance = import_polkadot_api._Enum; +var XcmV4Response = import_polkadot_api._Enum; +var XcmV3MaybeErrorCode = import_polkadot_api._Enum; +var XcmV2OriginKind = import_polkadot_api._Enum; +var XcmV4AssetAssetFilter = import_polkadot_api._Enum; +var XcmV4AssetWildAsset = import_polkadot_api._Enum; +var XcmV2MultiassetWildFungibility = import_polkadot_api._Enum; +var XcmV3WeightLimit = import_polkadot_api._Enum; +var XcmVersionedAssets = import_polkadot_api._Enum; +var XcmV2MultiassetAssetId = import_polkadot_api._Enum; +var XcmV2MultilocationJunctions = import_polkadot_api._Enum; +var XcmV2Junction = import_polkadot_api._Enum; +var XcmV2NetworkId = import_polkadot_api._Enum; +var XcmV2BodyId = import_polkadot_api._Enum; +var XcmV2MultiassetFungibility = import_polkadot_api._Enum; +var XcmV2MultiassetAssetInstance = import_polkadot_api._Enum; +var XcmV3MultiassetAssetId = import_polkadot_api._Enum; +var XcmVersionedLocation = import_polkadot_api._Enum; +var UpgradeGoAhead = import_polkadot_api._Enum; +var UpgradeRestriction = import_polkadot_api._Enum; +var BalancesTypesReasons = import_polkadot_api._Enum; +var TransactionPaymentReleases = import_polkadot_api._Enum; +var Version = import_polkadot_api._Enum; +var XcmPalletQueryStatus = import_polkadot_api._Enum; +var XcmVersionedResponse = import_polkadot_api._Enum; +var XcmV2Response = import_polkadot_api._Enum; +var XcmV2TraitsError = import_polkadot_api._Enum; +var XcmV3Response = import_polkadot_api._Enum; +var XcmPalletVersionMigrationStage = import_polkadot_api._Enum; +var XcmVersionedAssetId = import_polkadot_api._Enum; +var MultiAddress = import_polkadot_api._Enum; +var BalancesAdjustmentDirection = import_polkadot_api._Enum; +var XcmVersionedXcm = import_polkadot_api._Enum; +var XcmV2Instruction = import_polkadot_api._Enum; +var XcmV2MultiAssetFilter = import_polkadot_api._Enum; +var XcmV2MultiassetWildMultiAsset = import_polkadot_api._Enum; +var XcmV2WeightLimit = import_polkadot_api._Enum; +var XcmV3Instruction = import_polkadot_api._Enum; +var XcmV3MultiassetMultiAssetFilter = import_polkadot_api._Enum; +var XcmV3MultiassetWildMultiAsset = import_polkadot_api._Enum; +var DispatchRawOrigin = import_polkadot_api._Enum; +var XcmPalletOrigin = import_polkadot_api._Enum; +var MultiSignature = import_polkadot_api._Enum; +var TransactionValidityError = import_polkadot_api._Enum; +var TransactionValidityInvalidTransaction = import_polkadot_api._Enum; +var TransactionValidityUnknownTransaction = import_polkadot_api._Enum; +var TransactionValidityTransactionSource = import_polkadot_api._Enum; diff --git a/.papi/descriptors/dist/index.mjs b/.papi/descriptors/dist/index.mjs new file mode 100644 index 0000000000..da0d0751f5 --- /dev/null +++ b/.papi/descriptors/dist/index.mjs @@ -0,0 +1,161 @@ +// .papi/descriptors/src/assethub.ts +var toBinary = (() => { + const table = new Uint8Array(128); + for (let i = 0; i < 64; i++) table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i; + return (base64) => { + const n = base64.length, bytes = new Uint8Array((n - Number(base64[n - 1] === "=") - Number(base64[n - 2] === "=")) * 3 / 4 | 0); + for (let i2 = 0, j = 0; i2 < n; ) { + const c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)]; + const c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)]; + bytes[j++] = c0 << 2 | c1 >> 4; + bytes[j++] = c1 << 4 | c2 >> 2; + bytes[j++] = c2 << 6 | c3; + } + return bytes; + }; +})(); +var descriptorValues = import("./descriptors-5NZKIUFU.mjs").then((module) => module["Assethub"]); +var metadataTypes = import("./metadataTypes-RRERCRMN.mjs").then( + (module) => toBinary("default" in module ? module.default : module) +); +var asset = {}; +var _allDescriptors = { descriptors: descriptorValues, metadataTypes, asset }; +var assethub_default = _allDescriptors; + +// .papi/descriptors/src/common-types.ts +import { _Enum } from "polkadot-api"; +var DigestItem = _Enum; +var Phase = _Enum; +var DispatchClass = _Enum; +var TokenError = _Enum; +var ArithmeticError = _Enum; +var TransactionalError = _Enum; +var BalanceStatus = _Enum; +var TransactionPaymentEvent = _Enum; +var XcmV3Junctions = _Enum; +var XcmV3Junction = _Enum; +var XcmV3JunctionNetworkId = _Enum; +var XcmV3JunctionBodyId = _Enum; +var XcmV2JunctionBodyPart = _Enum; +var VestingEvent = _Enum; +var SessionEvent = _Enum; +var XcmV4TraitsOutcome = _Enum; +var XcmV3TraitsError = _Enum; +var XcmV4Instruction = _Enum; +var XcmV3MultiassetFungibility = _Enum; +var XcmV3MultiassetAssetInstance = _Enum; +var XcmV4Response = _Enum; +var XcmV3MaybeErrorCode = _Enum; +var XcmV2OriginKind = _Enum; +var XcmV4AssetAssetFilter = _Enum; +var XcmV4AssetWildAsset = _Enum; +var XcmV2MultiassetWildFungibility = _Enum; +var XcmV3WeightLimit = _Enum; +var XcmVersionedAssets = _Enum; +var XcmV2MultiassetAssetId = _Enum; +var XcmV2MultilocationJunctions = _Enum; +var XcmV2Junction = _Enum; +var XcmV2NetworkId = _Enum; +var XcmV2BodyId = _Enum; +var XcmV2MultiassetFungibility = _Enum; +var XcmV2MultiassetAssetInstance = _Enum; +var XcmV3MultiassetAssetId = _Enum; +var XcmVersionedLocation = _Enum; +var UpgradeGoAhead = _Enum; +var UpgradeRestriction = _Enum; +var BalancesTypesReasons = _Enum; +var TransactionPaymentReleases = _Enum; +var Version = _Enum; +var XcmPalletQueryStatus = _Enum; +var XcmVersionedResponse = _Enum; +var XcmV2Response = _Enum; +var XcmV2TraitsError = _Enum; +var XcmV3Response = _Enum; +var XcmPalletVersionMigrationStage = _Enum; +var XcmVersionedAssetId = _Enum; +var MultiAddress = _Enum; +var BalancesAdjustmentDirection = _Enum; +var XcmVersionedXcm = _Enum; +var XcmV2Instruction = _Enum; +var XcmV2MultiAssetFilter = _Enum; +var XcmV2MultiassetWildMultiAsset = _Enum; +var XcmV2WeightLimit = _Enum; +var XcmV3Instruction = _Enum; +var XcmV3MultiassetMultiAssetFilter = _Enum; +var XcmV3MultiassetWildMultiAsset = _Enum; +var DispatchRawOrigin = _Enum; +var XcmPalletOrigin = _Enum; +var MultiSignature = _Enum; +var TransactionValidityError = _Enum; +var TransactionValidityInvalidTransaction = _Enum; +var TransactionValidityUnknownTransaction = _Enum; +var TransactionValidityTransactionSource = _Enum; +export { + ArithmeticError, + BalanceStatus, + BalancesAdjustmentDirection, + BalancesTypesReasons, + DigestItem, + DispatchClass, + DispatchRawOrigin, + MultiAddress, + MultiSignature, + Phase, + SessionEvent, + TokenError, + TransactionPaymentEvent, + TransactionPaymentReleases, + TransactionValidityError, + TransactionValidityInvalidTransaction, + TransactionValidityTransactionSource, + TransactionValidityUnknownTransaction, + TransactionalError, + UpgradeGoAhead, + UpgradeRestriction, + Version, + VestingEvent, + XcmPalletOrigin, + XcmPalletQueryStatus, + XcmPalletVersionMigrationStage, + XcmV2BodyId, + XcmV2Instruction, + XcmV2Junction, + XcmV2JunctionBodyPart, + XcmV2MultiAssetFilter, + XcmV2MultiassetAssetId, + XcmV2MultiassetAssetInstance, + XcmV2MultiassetFungibility, + XcmV2MultiassetWildFungibility, + XcmV2MultiassetWildMultiAsset, + XcmV2MultilocationJunctions, + XcmV2NetworkId, + XcmV2OriginKind, + XcmV2Response, + XcmV2TraitsError, + XcmV2WeightLimit, + XcmV3Instruction, + XcmV3Junction, + XcmV3JunctionBodyId, + XcmV3JunctionNetworkId, + XcmV3Junctions, + XcmV3MaybeErrorCode, + XcmV3MultiassetAssetId, + XcmV3MultiassetAssetInstance, + XcmV3MultiassetFungibility, + XcmV3MultiassetMultiAssetFilter, + XcmV3MultiassetWildMultiAsset, + XcmV3Response, + XcmV3TraitsError, + XcmV3WeightLimit, + XcmV4AssetAssetFilter, + XcmV4AssetWildAsset, + XcmV4Instruction, + XcmV4Response, + XcmV4TraitsOutcome, + XcmVersionedAssetId, + XcmVersionedAssets, + XcmVersionedLocation, + XcmVersionedResponse, + XcmVersionedXcm, + assethub_default as assethub +}; diff --git a/.papi/descriptors/dist/metadataTypes-RRERCRMN.mjs b/.papi/descriptors/dist/metadataTypes-RRERCRMN.mjs new file mode 100644 index 0000000000..f505ad6303 --- /dev/null +++ b/.papi/descriptors/dist/metadataTypes-RRERCRMN.mjs @@ -0,0 +1,6 @@ +// .papi/descriptors/src/metadataTypes.ts +var content = "oQYAAAAQAQEFAAQBAQUAFAEBBQAcAAQAIAAEACQBAQUAIAEBBQAwAQEFABkCACAAIQIBAQUAKQIBAQUANAEBBQAtAgEBBQA9AgEBBQBBAgEBBQBFAgEBBQBRAgEABBhyZW1hcmskAQEFAQAEFHBhZ2VzCAEBBQEABBBjb2RlJAEBBQEABBRpdGVtc1kCAQEFAQAEEGtleXNdAgEBBQEACBhwcmVmaXgkHHN1YmtleXMEAQEFAQAEJGNvZGVfaGFzaCABAQUBAQUBAAQ0ZGlzcGF0Y2hfaW5mb0ABAQUBAAg4ZGlzcGF0Y2hfZXJyb3KUNGRpc3BhdGNoX2luZm9AAQEFAQEFAQEFAQAEHGFjY291bnQAAQEFAQAIGHNlbmRlcgAQaGFzaCABAQUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFAEBBQEBBQEBBQB9AgEBBQCBAgEBBQAkAQEFAIUCAQEFAI0CAQEFAHUCAQEFAF0CAQEFAKECAQEFAKkCAQEFALECAQEFALkCAQEFAAgBAQUAGAEABBBkYXRh1QIBAQUBAAQcbWVzc2FnZSQBAQUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFAEBBQEBBQEABFRyZWxheV9jaGFpbl9ibG9ja19udW0EAQEFAQAEFGNvdW50BAEBBQEACCx3ZWlnaHRfdXNlZBggZG1xX2hlYWQgAQEFAQAEMG1lc3NhZ2VfaGFzaJwBAAQMbm93CAEBBQAAAAwAAADhAgAAAOkCAAAA8QIBAAgQZGVzdPUCFHZhbHVlCAEBBQEADBhzb3VyY2X1AhBkZXN09QIUdmFsdWUIAQEFAQAIEGRlc3T1AihrZWVwX2FsaXZlFAEBBQEACAx3aG/1AhhhbW91bnQIAQEFAQAEDHdob/QBAQUBAAgMd2hv9QIgbmV3X2ZyZWUIAQEFAQAIJGRpcmVjdGlvbvkCFGRlbHRhCAEBBQEACBR2YWx1ZQgoa2VlcF9hbGl2ZRQBAQUBAQUBAAgcYWNjb3VudAAwZnJlZV9iYWxhbmNlCAEBBQEACBxhY2NvdW50ABhhbW91bnQIAQEFAQAMEGZyb20ACHRvABhhbW91bnQIAQEFAQAIDHdobwAQZnJlZQgBAQUBAAgMd2hvABhhbW91bnQIAQEFAQAQEGZyb20ACHRvABhhbW91bnQISGRlc3RpbmF0aW9uX3N0YXR1c6QBAQUBAAQMd2hvAAEBBQEABBhhbW91bnQIAQEFAQAIDG9sZAgMbmV3CAEBBQD9AgEBBQEADAx3aG8AKGFjdHVhbF9mZWUIDHRpcAgBAQUBABAMd2hvAChhY3R1YWxfZmVlCAx0aXAIIGFzc2V0X2lk6AEBBQEABEhuYXRpdmVfYW1vdW50X2tlcHQIAAAABQMBAQUACQMBAQUBAQUBAAQYdGFyZ2V09QIBAQUBAAgYdGFyZ2V09QIgc2NoZWR1bGUBAwEBBQEADBhzb3VyY2X1Ahh0YXJnZXT1AiBzY2hlZHVsZQEDAQEFAQAIPHNjaGVkdWxlMV9pbmRleAQ8c2NoZWR1bGUyX2luZGV4BAEBBQEACBh0YXJnZXT1AjhzY2hlZHVsZV9pbmRleAQBAQUBAQUBAAgcYWNjb3VudAAgdW52ZXN0ZWQIAQEFAAABAQUA9AEBBQARAwAAAAQBAAQMbmV39AEBBQEABAxtYXgEAQEFAQAEEGJvbmQIAQEFAQAEDHdobwABAQUBAAQsbmV3X2RlcG9zaXQIAQEFAQAIHGRlcG9zaXQIGHRhcmdldAABAQUBAQUBAAQ0aW52dWxuZXJhYmxlc/QBAQUBAAQoYWNjb3VudF9pZAABAQUBAARIZGVzaXJlZF9jYW5kaWRhdGVzBAEBBQEABCxib25kX2Ftb3VudAgBAQUBAAgoYWNjb3VudF9pZAAcZGVwb3NpdAgBAQUBAAwMb2xkAAxuZXcAHGRlcG9zaXQIAQEFABkDAQEFANEBAAAAIAAdAwAAAQAIEGtleXMgFHByb29mJAEBBQEBBQEABDRzZXNzaW9uX2luZGV4BAEBBQARAgEBBQAhAwEBBQAtAwAxAwAkAQEFADUDAAQACAEABAxuZXcEAQEFAQEFAQAEMG1lc3NhZ2VfaGFzaCAACABdAwAgAAQAYQMABABhAwAIAGEDAGUDAQEFAG0DAQEFAHUDAH0DAIkDAAAAkQMBAQUAXQEBAAgQZGVzdJkBHG1lc3NhZ2W5AwEBBQEAEBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQBAQUBAAgcbWVzc2FnZbkDKG1heF93ZWlnaHQYAQEFAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBAEBBQEABERtYXliZV94Y21fdmVyc2lvbtUBAQEFAQAEIGxvY2F0aW9umQEBAQUBABQQZGVzdJkBLGJlbmVmaWNpYXJ5mQEYYXNzZXRzlQE4ZmVlX2Fzc2V0X2l0ZW0EMHdlaWdodF9saW1pdFUBAQEFAQAEJHN1c3BlbmRlZBQBAQUBAAgYYXNzZXRzlQEsYmVuZWZpY2lhcnmZAQEBBQEAHBBkZXN0mQEYYXNzZXRzlQFQYXNzZXRzX3RyYW5zZmVyX3R5cGW9AzhyZW1vdGVfZmVlc19pZHkDSGZlZXNfdHJhbnNmZXJfdHlwZb0DSGN1c3RvbV94Y21fb25fZGVzdLkDMHdlaWdodF9saW1pdFUBAQEFAQEFAQAEHG91dGNvbWUJAQEBBQEAEBhvcmlnaW7oLGRlc3RpbmF0aW9u6BxtZXNzYWdlXQEobWVzc2FnZV9pZCABAQUBAAgYb3JpZ2lu6CBxdWVyeV9pZAgBAQUBAAggcXVlcnlfaWQIIHJlc3BvbnNlOQEBAQUBAAwgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleAQBAQUBABQgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleAQ0YWN0dWFsX3dlaWdodBhMbWF4X2J1ZGdldGVkX3dlaWdodBgBAQUBAAwYb3JpZ2lu6CBxdWVyeV9pZAhEZXhwZWN0ZWRfbG9jYXRpb249AQEBBQEABCBxdWVyeV9pZAgBAQUBAAwQaGFzaCAYb3JpZ2lu6Bhhc3NldHOVAQEBBQEAECxkZXN0aW5hdGlvbugYcmVzdWx0BBBjb3N0IQEobWVzc2FnZV9pZCABAQUBAAggbG9jYXRpb27oHHZlcnNpb24EAQEFAQAMIGxvY2F0aW9u6CBxdWVyeV9pZAgUZXJyb3IFAQEBBQEACCBsb2NhdGlvbpkBIHF1ZXJ5X2lkCAEBBQEAEBhvcmlnaW7oIHF1ZXJ5X2lkCEBleHBlY3RlZF9xdWVyaWVy6FBtYXliZV9hY3R1YWxfcXVlcmllcj0BAQEFAQAMLGRlc3RpbmF0aW9u6BBjb3N0IQEobWVzc2FnZV9pZCABAQUBAAgYcGF5aW5n6BBmZWVzIQEBAQUBAAQcdmVyc2lvbgQBAQUAIAEBBQEDCCAJAQEBBQDBAwEACCRicmlkZ2VfaWQgMGlzX2Nvbmdlc3RlZBQBAQUApQEAzQMBAQUApQEA0QMA1QMBAQUAMQIBAAg4bWVzc2FnZV9vcmlnaW6lAShwYWdlX2luZGV4BAEBBQEAEDhtZXNzYWdlX29yaWdpbqUBEHBhZ2UEFGluZGV4BDB3ZWlnaHRfbGltaXQYAQEFAQEFAQAMCGlkIBhvcmlnaW6lARRlcnJvcqkBAQEFAQAQCGlkIBhvcmlnaW6lASx3ZWlnaHRfdXNlZBgcc3VjY2VzcxQBAQUBABAIaWQgGG9yaWdpbqUBKHBhZ2VfaW5kZXgENG1lc3NhZ2VfaW5kZXgEAQEFAQAIGG9yaWdpbqUBFGluZGV4BAEABBRjYWxsc4UEAQEFAQAIFGluZGV4BBBjYWxsgQQBAQUBAAgkYXNfb3JpZ2luEQQQY2FsbIEEAQEFAQAIEGNhbGyBBBh3ZWlnaHQYAQEFAQEFAQAIFGluZGV4BBRlcnJvcpQBAQUBAAQUZXJyb3KUAQEFAQAEGHJlc3VsdLUBABUDAIkEAQAIRG90aGVyX3NpZ25hdG9yaWVz9BBjYWxsgQQBAQUBABQkdGhyZXNob2xkBERvdGhlcl9zaWduYXRvcmllc/Q8bWF5YmVfdGltZXBvaW50GQQQY2FsbIEEKG1heF93ZWlnaHQYAQEFAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEJGNhbGxfaGFzaCAobWF4X3dlaWdodBgBAQUBABAkdGhyZXNob2xkBERvdGhlcl9zaWduYXRvcmllc/QkdGltZXBvaW50vQEkY2FsbF9oYXNoIAEBBQEBBQEADCRhcHByb3ZpbmcAIG11bHRpc2lnACRjYWxsX2hhc2ggAQEFAQAQJGFwcHJvdmluZwAkdGltZXBvaW50vQEgbXVsdGlzaWcAJGNhbGxfaGFzaCABAQUBABQkYXBwcm92aW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIBhyZXN1bHS1AQEBBQEAEChjYW5jZWxsaW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIAAAAJUEAAAAoQQBAAwQcmVhbPUCQGZvcmNlX3Byb3h5X3R5cGUhBBBjYWxsgQQBAQUBAAwgZGVsZWdhdGX1Aihwcm94eV90eXBlxQEUZGVsYXkEAQEFAQAMKHByb3h5X3R5cGXFARRkZWxheQQUaW5kZXgEAQEFAQAUHHNwYXduZXL1Aihwcm94eV90eXBlxQEUaW5kZXgEGGhlaWdodAQkZXh0X2luZGV4BAEBBQEACBByZWFs9QIkY2FsbF9oYXNoIAEBBQEACCBkZWxlZ2F0ZfUCJGNhbGxfaGFzaCABAQUBABAgZGVsZWdhdGX1AhByZWFs9QJAZm9yY2VfcHJveHlfdHlwZSEEEGNhbGyBBAEBBQEBBQEAEBBwdXJlAAx3aG8AKHByb3h5X3R5cGXFAVBkaXNhbWJpZ3VhdGlvbl9pbmRleAQBAQUBAAwQcmVhbAAUcHJveHkAJGNhbGxfaGFzaCABAQUBABAkZGVsZWdhdG9yACRkZWxlZ2F0ZWUAKHByb3h5X3R5cGXFARRkZWxheQQABACpBACtBAC5BAC9BADBBAAEAMUEAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCAEBBQEAEAhpZAQUb3duZXL1AjRpc19zdWZmaWNpZW50FCxtaW5fYmFsYW5jZQgBAQUBAAQIaWQEAQEFAQAMCGlkBCxiZW5lZmljaWFyefUCGGFtb3VudAgBAQUBAAwIaWQEDHdob/UCGGFtb3VudAgBAQUBAAwIaWQEGHRhcmdldPUCGGFtb3VudAgBAQUBABAIaWQEGHNvdXJjZfUCEGRlc3T1AhhhbW91bnQIAQEFAQAICGlkBAx3aG/1AgEBBQEACAhpZAQUb3duZXL1AgEBBQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIBAQUBABAIaWQEEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEAQEFAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UAQEFAQAgCGlkBBRvd25lcvUCGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCLG1pbl9iYWxhbmNlCDRpc19zdWZmaWNpZW50FCRpc19mcm96ZW4UAQEFAQAMCGlkBCBkZWxlZ2F0ZfUCGGFtb3VudAgBAQUBAAgIaWQEIGRlbGVnYXRl9QIBAQUBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AgEBBQEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgBAQUBAAgIaWQEKGFsbG93X2J1cm4UAQEFAQAICGlkBCxtaW5fYmFsYW5jZQgBAQUBAQUBAAwgYXNzZXRfaWQEHGNyZWF0b3IAFG93bmVyAAEBBQEADCBhc3NldF9pZAQUb3duZXIAGGFtb3VudAgBAQUBABAgYXNzZXRfaWQEEGZyb20ACHRvABhhbW91bnQIAQEFAQAMIGFzc2V0X2lkBBRvd25lcgAcYmFsYW5jZQgBAQUBABAgYXNzZXRfaWQEGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIAAQEFAQAIIGFzc2V0X2lkBBRvd25lcgABAQUBAAggYXNzZXRfaWQEDHdobwABAQUBAAQgYXNzZXRfaWQEAQEFAQAMIGFzc2V0X2lkBEhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwQBAQUBAAwgYXNzZXRfaWQETGFwcHJvdmFsc19kZXN0cm95ZWQETGFwcHJvdmFsc19yZW1haW5pbmcEAQEFAQAUIGFzc2V0X2lkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UAQEFAQAQIGFzc2V0X2lkBBhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIAQEFAQAMIGFzc2V0X2lkBBRvd25lcgAgZGVsZWdhdGUAAQEFAQAUIGFzc2V0X2lkBBRvd25lcgAgZGVsZWdhdGUALGRlc3RpbmF0aW9uABhhbW91bnQIAQEFAQAIIGFzc2V0X2lkBDxuZXdfbWluX2JhbGFuY2UIAQEFAQAMIGFzc2V0X2lkBAx3aG8AJGRlcG9zaXRvcgABAQUBAAwgYXNzZXRfaWQEDHdobwAYYW1vdW50CAAEAMkEAM0EALEBANEEALEBAB0CANUEAAQA2QQAHQIA2QQA3QQA4QQAHQIA5QQABAAEAQAIKGNvbGxlY3Rpb24EFGFkbWlu9QIBAQUBAAwoY29sbGVjdGlvbgQUb3duZXL1AjBmcmVlX2hvbGRpbmcUAQEFAQAIKGNvbGxlY3Rpb24EHHdpdG5lc3MtBAEBBQEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcvUCAQEFAQAMKGNvbGxlY3Rpb24EEGl0ZW0ELGNoZWNrX293bmVyMQQBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGVzdPUCAQEFAQAIKGNvbGxlY3Rpb24EFGl0ZW1z0QEBAQUBAAgoY29sbGVjdGlvbgQQaXRlbQQBAQUBAAQoY29sbGVjdGlvbgQBAQUBAAgoY29sbGVjdGlvbgQkbmV3X293bmVy9QIBAQUBABAoY29sbGVjdGlvbgQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AgEBBQEADChjb2xsZWN0aW9uBBBpdGVtBFBtYXliZV9jaGVja19kZWxlZ2F0ZTEEAQEFAQAcKGNvbGxlY3Rpb24EFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwZnJlZV9ob2xkaW5nFCRpc19mcm96ZW4UAQEFAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VAQxrZXkkFHZhbHVlJAEBBQEADChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JAEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJCRpc19mcm96ZW4UAQEFAQAMKGNvbGxlY3Rpb24EEGRhdGEkJGlzX2Zyb3plbhQBAQUBAARAbWF5YmVfY29sbGVjdGlvbtUBAQEFAQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlNQREd2hpdGVsaXN0ZWRfYnV5ZXIxBAEBBQEADChjb2xsZWN0aW9uBBBpdGVtBCRiaWRfcHJpY2UIAQEFAQEFAQAMKGNvbGxlY3Rpb24EHGNyZWF0b3IAFG93bmVyAAEBBQEACChjb2xsZWN0aW9uBBRvd25lcgABAQUBAAQoY29sbGVjdGlvbgQBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQUb3duZXIAAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGZyb20ACHRvAAEBBQEACChjb2xsZWN0aW9uBBBpdGVtBAEBBQEACChjb2xsZWN0aW9uBCRuZXdfb3duZXIAAQEFAQAQKGNvbGxlY3Rpb24EGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIAAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQABAQUBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFAEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJCRpc19mcm96ZW4UAQEFAQAIKGNvbGxlY3Rpb24EQHN1Y2Nlc3NmdWxfaXRlbXPRAQEBBQEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQBAQUBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQBAQUBAAgMd2hvAEBtYXliZV9jb2xsZWN0aW9u1QEBAQUBAAgoY29sbGVjdGlvbgQobWF4X3N1cHBseQQBAQUBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIRHdoaXRlbGlzdGVkX2J1eWVy2QEBAQUBABQoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIGHNlbGxlcgAUYnV5ZXIAAAQA6QQArQQABAAdAgD5BAAEAP0EAB0CAAUFAAkFAA0FAB0CAPQAHQIAEQUABABFBAAdAgAIAQAIFGFkbWlu9QIYY29uZmlnRQQBAQUBAAgUb3duZXL1Ahhjb25maWdFBAEBBQEACChjb2xsZWN0aW9uBBx3aXRuZXNzSQQBAQUBABAoY29sbGVjdGlvbgQQaXRlbQQcbWludF90b/UCMHdpdG5lc3NfZGF0YVEEAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EHG1pbnRfdG/1AixpdGVtX2NvbmZpZwgBAQUBAAgoY29sbGVjdGlvbgQ0bG9ja19zZXR0aW5ncwgBAQUBABAoY29sbGVjdGlvbgQYaXNzdWVyMQQUYWRtaW4xBBxmcmVlemVyMQQBAQUBAAgoY29sbGVjdGlvbgQUb3duZXL1AgEBBQEACChjb2xsZWN0aW9uBBhjb25maWdFBAEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCOG1heWJlX2RlYWRsaW5l1QEBAQUBABAoY29sbGVjdGlvbgQQaXRlbQQ0bG9ja19tZXRhZGF0YRQ8bG9ja19hdHRyaWJ1dGVzFAEBBQEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JBR2YWx1ZSQBAQUBABgYc2V0X2Fz2QEoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBJG5hbWVzcGFjZeEBDGtleSQUdmFsdWUkAQEFAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VASRuYW1lc3BhY2XhAQxrZXkkAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QIcd2l0bmVzcwQBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGF0YSQBAQUBAAgoY29sbGVjdGlvbgQQZGF0YSQBAQUBAAgoY29sbGVjdGlvbgQ0bWludF9zZXR0aW5nc0EEAQEFAQAEEHRpcHNZBAEBBQEAGEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQRIZGVzaXJlZF9jb2xsZWN0aW9uBEhtYXliZV9kZXNpcmVkX2l0ZW3VASxtYXliZV9wcmljZe0BIGR1cmF0aW9uBAEBBQEACEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQQBAQUBABQ8c2VuZF9jb2xsZWN0aW9uBCRzZW5kX2l0ZW0ESHJlY2VpdmVfY29sbGVjdGlvbgQwcmVjZWl2ZV9pdGVtBDR3aXRuZXNzX3ByaWNl7QEBAQUBAAwkbWludF9kYXRhXQQkc2lnbmF0dXJlaQQYc2lnbmVyAAEBBQEADBBkYXRhbQQkc2lnbmF0dXJlaQQYc2lnbmVyAAEBBQEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBDRsb2NrX21ldGFkYXRhFDxsb2NrX2F0dHJpYnV0ZXMUAQEFAQAQKGNvbGxlY3Rpb24EGGlzc3VlctkBFGFkbWlu2QEcZnJlZXplctkBAQEFAQAUKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQAgZGVhZGxpbmXVAQEBBQEACChjb2xsZWN0aW9uBBBkYXRhJAEBBQEADChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJAEBBQEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQkbmFtZXNwYWNl4QEBAQUBABAoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQkbmFtZXNwYWNl4QEBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGUAAQEFAQAEHG5leHRfaWTVAQEBBQEAFChjb2xsZWN0aW9uBBBpdGVtBBhzZW5kZXIAIHJlY2VpdmVyABhhbW91bnQIAQEFAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24EMGRlc2lyZWRfaXRlbdUBFHByaWNl7QEgZGVhZGxpbmUEAQEFAQAgPHNlbnRfY29sbGVjdGlvbgQkc2VudF9pdGVtBDxzZW50X2l0ZW1fb3duZXIATHJlY2VpdmVkX2NvbGxlY3Rpb24ENHJlY2VpdmVkX2l0ZW0ETHJlY2VpdmVkX2l0ZW1fb3duZXIAFHByaWNl7QEgZGVhZGxpbmUEAQEFAQAMKGNvbGxlY3Rpb24EEGl0ZW0EJG5hbWVzcGFjZeEBAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW3VASRhdHRyaWJ1dGXxARR2YWx1ZSQA6ACpBAAVBQC5BAAZBQDBBADoAMUEAQEFAOgBAAwIaWToFGFkbWlu9QIsbWluX2JhbGFuY2UIAQEFAQAQCGlk6BRvd25lcvUCNGlzX3N1ZmZpY2llbnQULG1pbl9iYWxhbmNlCAEBBQEABAhpZOgBAQUBAAwIaWToLGJlbmVmaWNpYXJ59QIYYW1vdW50CAEBBQEADAhpZOgMd2hv9QIYYW1vdW50CAEBBQEADAhpZOgYdGFyZ2V09QIYYW1vdW50CAEBBQEAEAhpZOgYc291cmNl9QIQZGVzdPUCGGFtb3VudAgBAQUBAAgIaWToDHdob/UCAQEFAQAICGlk6BRvd25lcvUCAQEFAQAQCGlk6Bhpc3N1ZXL1AhRhZG1pbvUCHGZyZWV6ZXL1AgEBBQEAEAhpZOgQbmFtZSQYc3ltYm9sJCBkZWNpbWFscwQBAQUBABQIaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQBAQUBACAIaWToFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhQBAQUBAAwIaWToIGRlbGVnYXRl9QIYYW1vdW50CAEBBQEACAhpZOggZGVsZWdhdGX1AgEBBQEADAhpZOgUb3duZXL1AiBkZWxlZ2F0ZfUCAQEFAQAQCGlk6BRvd25lcvUCLGRlc3RpbmF0aW9u9QIYYW1vdW50CAEBBQEACAhpZOgoYWxsb3dfYnVybhQBAQUBAAgIaWToLG1pbl9iYWxhbmNlCAEBBQEBBQEADCBhc3NldF9pZOgcY3JlYXRvcgAUb3duZXIAAQEFAQAMIGFzc2V0X2lk6BRvd25lcgAYYW1vdW50CAEBBQEAECBhc3NldF9pZOgQZnJvbQAIdG8AGGFtb3VudAgBAQUBAAwgYXNzZXRfaWToFG93bmVyABxiYWxhbmNlCAEBBQEAECBhc3NldF9pZOgYaXNzdWVyABRhZG1pbgAcZnJlZXplcgABAQUBAAggYXNzZXRfaWToFG93bmVyAAEBBQEACCBhc3NldF9pZOgMd2hvAAEBBQEABCBhc3NldF9pZOgBAQUBAAwgYXNzZXRfaWToSGFjY291bnRzX2Rlc3Ryb3llZARIYWNjb3VudHNfcmVtYWluaW5nBAEBBQEADCBhc3NldF9pZOhMYXBwcm92YWxzX2Rlc3Ryb3llZARMYXBwcm92YWxzX3JlbWFpbmluZwQBAQUBABQgYXNzZXRfaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQBAQUBABAgYXNzZXRfaWToGHNvdXJjZQAgZGVsZWdhdGUAGGFtb3VudAgBAQUBAAwgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQABAQUBABQgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAgBAQUBAAggYXNzZXRfaWToPG5ld19taW5fYmFsYW5jZQgBAQUBAAwgYXNzZXRfaWToDHdobwAkZGVwb3NpdG9yAAEBBQEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIAP0BAAQBAQUADQEBAAgYYXNzZXQx6Bhhc3NldDLoAQEFAQAcGGFzc2V0MegYYXNzZXQy6DxhbW91bnQxX2Rlc2lyZWQIPGFtb3VudDJfZGVzaXJlZAgsYW1vdW50MV9taW4ILGFtb3VudDJfbWluCBxtaW50X3RvAAEBBQEAGBhhc3NldDHoGGFzc2V0Mug0bHBfdG9rZW5fYnVybghMYW1vdW50MV9taW5fcmVjZWl2ZQhMYW1vdW50Ml9taW5fcmVjZWl2ZQgsd2l0aGRyYXdfdG8AAQEFAQAUEHBhdGh5BCRhbW91bnRfaW4IOGFtb3VudF9vdXRfbWluCBxzZW5kX3RvAChrZWVwX2FsaXZlFAEBBQEAFBBwYXRoeQQoYW1vdW50X291dAg0YW1vdW50X2luX21heAgcc2VuZF90bwAoa2VlcF9hbGl2ZRQBAQUBAQUBABAcY3JlYXRvcgAccG9vbF9pZP0BMHBvb2xfYWNjb3VudAAgbHBfdG9rZW4EAQEFAQAcDHdobwAcbWludF90bwAccG9vbF9pZP0BQGFtb3VudDFfcHJvdmlkZWQIQGFtb3VudDJfcHJvdmlkZWQIIGxwX3Rva2VuBDxscF90b2tlbl9taW50ZWQIAQEFAQAgDHdobwAsd2l0aGRyYXdfdG8AHHBvb2xfaWT9ARxhbW91bnQxCBxhbW91bnQyCCBscF90b2tlbgQ8bHBfdG9rZW5fYnVybmVkCDh3aXRoZHJhd2FsX2ZlZQQBAQUBABQMd2hvABxzZW5kX3RvACRhbW91bnRfaW4IKGFtb3VudF9vdXQIEHBhdGgFAgEBBQEADCRhbW91bnRfaW4IKGFtb3VudF9vdXQIEHBhdGgFAgEBBQEACBxwb29sX2lk/QEMd2hvAAEDAAAIAQMAABECAQMIIAgAFAEDAABRAgEDBCEFALEBAQMEHQUAJQUBAwAAJAEDBAQAcQMBAwAA0QEBAwQkADUFAQMAAB0FAQMEPQUAXQIBAwghBT0FAEEFAQMMRQUkIABNBQEDBB0FALEBAQMEcQMAJAEDBCQAWQUBAwQAAAQBAwgkBABdBQEDCCQEAGkFAQMEGAAIAQMEBAAIAQMIgQQEAF0FAQMIgQQEAGkFAQMEBAB1BQEDBLkDAHkFAQMIGHkDAH0FAQMImQG5AwCBBQEDCBEEgQQArQUBAwiZAbkDALUFAQMEmQEAvQUBAwQAAMUFAQMEHQUAyQUBAwQkAM0FAQME0QUAcQMBAwAA1QUBAxDo6AgUADUEAQMI6OgA3QXhBQEBAQIBAwAQEGZyZWUIIHJlc2VydmVkCBhmcm96ZW4IFGZsYWdzCAAUFG5vbmNlBCRjb25zdW1lcnMEJHByb3ZpZGVycwQsc3VmZmljaWVudHMEEGRhdGEMAQAACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgADBhub3JtYWwYLG9wZXJhdGlvbmFsGCRtYW5kYXRvcnkYBQGABQAFARACFChQcmVSdW50aW1lAQMIKCQkQ29uc2Vuc3VzAQMIKCQQU2VhbAEDCCgkFE90aGVyAQUAZFJ1bnRpbWVFbnZpcm9ubWVudFVwZGF0ZWQBAQUELAACDDhBcHBseUV4dHJpbnNpYwEBAjBGaW5hbGl6YXRpb24BAQU4SW5pdGlhbGl6YXRpb24BAQUCDBhOb3JtYWwBAQUsT3BlcmF0aW9uYWwBAQUkTWFuZGF0b3J5AQEFAggMWWVzAQEFCE5vAQEFAAwYd2VpZ2h0GBRjbGFzczggcGF5c19mZWU8AiQ8SW52YWxpZFNwZWNOYW1lAQEFaFNwZWNWZXJzaW9uTmVlZHNUb0luY3JlYXNlAQEFdEZhaWxlZFRvRXh0cmFjdFJ1bnRpbWVWZXJzaW9uAQEFTE5vbkRlZmF1bHRDb21wb3NpdGUBAQU8Tm9uWmVyb1JlZkNvdW50AQEFMENhbGxGaWx0ZXJlZAEBBWxNdWx0aUJsb2NrTWlncmF0aW9uc09uZ29pbmcBAQVETm90aGluZ0F1dGhvcml6ZWQBAQUwVW5hdXRob3JpemVkAQEFAiBMT3ZlcmxhcHBpbmdVcGdyYWRlcwEBBVBQcm9oaWJpdGVkQnlQb2xrYWRvdAEBBRhUb29CaWcBAQVoVmFsaWRhdGlvbkRhdGFOb3RBdmFpbGFibGUBAQV0SG9zdENvbmZpZ3VyYXRpb25Ob3RBdmFpbGFibGUBAQUwTm90U2NoZWR1bGVkAQEFRE5vdGhpbmdBdXRob3JpemVkAQEFMFVuYXV0aG9yaXplZAEBBQIwOFZlc3RpbmdCYWxhbmNlAQEFVExpcXVpZGl0eVJlc3RyaWN0aW9ucwEBBUxJbnN1ZmZpY2llbnRCYWxhbmNlAQEFSEV4aXN0ZW50aWFsRGVwb3NpdAEBBTRFeHBlbmRhYmlsaXR5AQEFXEV4aXN0aW5nVmVzdGluZ1NjaGVkdWxlAQEFLERlYWRBY2NvdW50AQEFPFRvb01hbnlSZXNlcnZlcwEBBTBUb29NYW55SG9sZHMBAQU4VG9vTWFueUZyZWV6ZXMBAQVMSXNzdWFuY2VEZWFjdGl2YXRlZAEBBSREZWx0YVplcm8BAQUCFChOb3RWZXN0aW5nAQEFVEF0TWF4VmVzdGluZ1NjaGVkdWxlcwEBBSRBbW91bnRMb3cBAQVgU2NoZWR1bGVJbmRleE91dE9mQm91bmRzAQEFVEludmFsaWRTY2hlZHVsZVBhcmFtcwEBBQJERFRvb01hbnlDYW5kaWRhdGVzAQEFXFRvb0Zld0VsaWdpYmxlQ29sbGF0b3JzAQEFQEFscmVhZHlDYW5kaWRhdGUBAQUwTm90Q2FuZGlkYXRlAQEFUFRvb01hbnlJbnZ1bG5lcmFibGVzAQEFTEFscmVhZHlJbnZ1bG5lcmFibGUBAQU8Tm90SW52dWxuZXJhYmxlAQEFXE5vQXNzb2NpYXRlZFZhbGlkYXRvcklkAQEFWFZhbGlkYXRvck5vdFJlZ2lzdGVyZWQBAQVsSW5zZXJ0VG9DYW5kaWRhdGVMaXN0RmFpbGVkAQEFdFJlbW92ZUZyb21DYW5kaWRhdGVMaXN0RmFpbGVkAQEFNERlcG9zaXRUb29Mb3cBAQVkVXBkYXRlQ2FuZGlkYXRlTGlzdEZhaWxlZAEBBUBJbnN1ZmZpY2llbnRCb25kAQEFUFRhcmdldElzTm90Q2FuZGlkYXRlAQEFQElkZW50aWNhbERlcG9zaXQBAQVASW52YWxpZFVucmVzZXJ2ZQEBBQIUMEludmFsaWRQcm9vZgEBBVxOb0Fzc29jaWF0ZWRWYWxpZGF0b3JJZAEBBTREdXBsaWNhdGVkS2V5AQEFGE5vS2V5cwEBBSROb0FjY291bnQBAQUCFDhCYWRRdWV1ZUNvbmZpZwEBBUBBbHJlYWR5U3VzcGVuZGVkAQEFOEFscmVhZHlSZXN1bWVkAQEFdFRvb01hbnlBY3RpdmVPdXRib3VuZENoYW5uZWxzAQEFGFRvb0JpZwEBBQJgLFVucmVhY2hhYmxlAQEFLFNlbmRGYWlsdXJlAQEFIEZpbHRlcmVkAQEFSFVud2VpZ2hhYmxlTWVzc2FnZQEBBWBEZXN0aW5hdGlvbk5vdEludmVydGlibGUBAQUURW1wdHkBAQU4Q2Fubm90UmVhbmNob3IBAQU0VG9vTWFueUFzc2V0cwEBBTRJbnZhbGlkT3JpZ2luAQEFKEJhZFZlcnNpb24BAQUsQmFkTG9jYXRpb24BAQU4Tm9TdWJzY3JpcHRpb24BAQVEQWxyZWFkeVN1YnNjcmliZWQBAQVYQ2Fubm90Q2hlY2tPdXRUZWxlcG9ydAEBBShMb3dCYWxhbmNlAQEFMFRvb01hbnlMb2NrcwEBBUxBY2NvdW50Tm90U292ZXJlaWduAQEFKEZlZXNOb3RNZXQBAQUwTG9ja05vdEZvdW5kAQEFFEluVXNlAQEFaEludmFsaWRBc3NldFVua25vd25SZXNlcnZlAQEFeEludmFsaWRBc3NldFVuc3VwcG9ydGVkUmVzZXJ2ZQEBBTxUb29NYW55UmVzZXJ2ZXMBAQVgTG9jYWxFeGVjdXRpb25JbmNvbXBsZXRlAQEFAiQsTm90UmVhcGFibGUBAQUYTm9QYWdlAQEFJE5vTWVzc2FnZQEBBUBBbHJlYWR5UHJvY2Vzc2VkAQEFGFF1ZXVlZAEBBUhJbnN1ZmZpY2llbnRXZWlnaHQBAQVgVGVtcG9yYXJpbHlVbnByb2Nlc3NhYmxlAQEFLFF1ZXVlUGF1c2VkAQEFTFJlY3Vyc2l2ZURpc2FsbG93ZWQBAQUCBDBUb29NYW55Q2FsbHMBAQUCOEBNaW5pbXVtVGhyZXNob2xkAQEFPEFscmVhZHlBcHByb3ZlZAEBBUROb0FwcHJvdmFsc05lZWRlZAEBBURUb29GZXdTaWduYXRvcmllcwEBBUhUb29NYW55U2lnbmF0b3JpZXMBAQVUU2lnbmF0b3JpZXNPdXRPZk9yZGVyAQEFTFNlbmRlckluU2lnbmF0b3JpZXMBAQUgTm90Rm91bmQBAQUgTm90T3duZXIBAQUsTm9UaW1lcG9pbnQBAQU4V3JvbmdUaW1lcG9pbnQBAQVMVW5leHBlY3RlZFRpbWVwb2ludAEBBTxNYXhXZWlnaHRUb29Mb3cBAQU0QWxyZWFkeVN0b3JlZAEBBQIgHFRvb01hbnkBAQUgTm90Rm91bmQBAQUgTm90UHJveHkBAQUsVW5wcm94eWFibGUBAQUkRHVwbGljYXRlAQEFME5vUGVybWlzc2lvbgEBBSxVbmFubm91bmNlZAEBBSxOb1NlbGZQcm94eQEBBQJUKEJhbGFuY2VMb3cBAQUkTm9BY2NvdW50AQEFME5vUGVybWlzc2lvbgEBBRxVbmtub3duAQEFGEZyb3plbgEBBRRJblVzZQEBBShCYWRXaXRuZXNzAQEFOE1pbkJhbGFuY2VaZXJvAQEFTFVuYXZhaWxhYmxlQ29uc3VtZXIBAQUsQmFkTWV0YWRhdGEBAQUoVW5hcHByb3ZlZAEBBSBXb3VsZERpZQEBBTRBbHJlYWR5RXhpc3RzAQEFJE5vRGVwb3NpdAEBBSRXb3VsZEJ1cm4BAQUkTGl2ZUFzc2V0AQEFMEFzc2V0Tm90TGl2ZQEBBTxJbmNvcnJlY3RTdGF0dXMBAQUkTm90RnJvemVuAQEFOENhbGxiYWNrRmFpbGVkAQEFKEJhZEFzc2V0SWQBAQUCSDBOb1Blcm1pc3Npb24BAQVEVW5rbm93bkNvbGxlY3Rpb24BAQU0QWxyZWFkeUV4aXN0cwEBBShXcm9uZ093bmVyAQEFKEJhZFdpdG5lc3MBAQUUSW5Vc2UBAQUYRnJvemVuAQEFNFdyb25nRGVsZWdhdGUBAQUoTm9EZWxlZ2F0ZQEBBShVbmFwcHJvdmVkAQEFKFVuYWNjZXB0ZWQBAQUYTG9ja2VkAQEFQE1heFN1cHBseVJlYWNoZWQBAQVMTWF4U3VwcGx5QWxyZWFkeVNldAEBBURNYXhTdXBwbHlUb29TbWFsbAEBBSxVbmtub3duSXRlbQEBBShOb3RGb3JTYWxlAQEFJEJpZFRvb0xvdwEBBQK0ME5vUGVybWlzc2lvbgEBBURVbmtub3duQ29sbGVjdGlvbgEBBTRBbHJlYWR5RXhpc3RzAQEFPEFwcHJvdmFsRXhwaXJlZAEBBShXcm9uZ093bmVyAQEFKEJhZFdpdG5lc3MBAQVEQ29sbGVjdGlvbklkSW5Vc2UBAQVQSXRlbXNOb25UcmFuc2ZlcmFibGUBAQUsTm90RGVsZWdhdGUBAQU0V3JvbmdEZWxlZ2F0ZQEBBShVbmFwcHJvdmVkAQEFKFVuYWNjZXB0ZWQBAQUoSXRlbUxvY2tlZAEBBVBMb2NrZWRJdGVtQXR0cmlidXRlcwEBBWhMb2NrZWRDb2xsZWN0aW9uQXR0cmlidXRlcwEBBUhMb2NrZWRJdGVtTWV0YWRhdGEBAQVgTG9ja2VkQ29sbGVjdGlvbk1ldGFkYXRhAQEFQE1heFN1cHBseVJlYWNoZWQBAQU8TWF4U3VwcGx5TG9ja2VkAQEFRE1heFN1cHBseVRvb1NtYWxsAQEFLFVua25vd25JdGVtAQEFLFVua25vd25Td2FwAQEFQE1ldGFkYXRhTm90Rm91bmQBAQVEQXR0cmlidXRlTm90Rm91bmQBAQUoTm90Rm9yU2FsZQEBBSRCaWRUb29Mb3cBAQVQUmVhY2hlZEFwcHJvdmFsTGltaXQBAQU8RGVhZGxpbmVFeHBpcmVkAQEFNFdyb25nRHVyYXRpb24BAQU4TWV0aG9kRGlzYWJsZWQBAQUwV3JvbmdTZXR0aW5nAQEFWEluY29uc2lzdGVudEl0ZW1Db25maWcBAQUgTm9Db25maWcBAQU8Um9sZXNOb3RDbGVhcmVkAQEFOE1pbnROb3RTdGFydGVkAQEFJE1pbnRFbmRlZAEBBThBbHJlYWR5Q2xhaW1lZAEBBTRJbmNvcnJlY3REYXRhAQEFLFdyb25nT3JpZ2luAQEFOFdyb25nU2lnbmF0dXJlAQEFREluY29ycmVjdE1ldGFkYXRhAQEFZE1heEF0dHJpYnV0ZXNMaW1pdFJlYWNoZWQBAQU4V3JvbmdOYW1lc3BhY2UBAQVIQ29sbGVjdGlvbk5vdEVtcHR5AQEFPFdpdG5lc3NSZXF1aXJlZAEBBQJcQEludmFsaWRBc3NldFBhaXIBAQUoUG9vbEV4aXN0cwEBBUhXcm9uZ0Rlc2lyZWRBbW91bnQBAQVgQW1vdW50T25lTGVzc1RoYW5NaW5pbWFsAQEFYEFtb3VudFR3b0xlc3NUaGFuTWluaW1hbAEBBWhSZXNlcnZlTGVmdExlc3NUaGFuTWluaW1hbAEBBUBBbW91bnRPdXRUb29IaWdoAQEFMFBvb2xOb3RGb3VuZAEBBSBPdmVyZmxvdwEBBYBBc3NldE9uZURlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYBBc3NldFR3b0RlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYxBc3NldE9uZVdpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBYxBc3NldFR3b1dpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBXBPcHRpbWFsQW1vdW50TGVzc1RoYW5EZXNpcmVkAQEFbEluc3VmZmljaWVudExpcXVpZGl0eU1pbnRlZAEBBTRaZXJvTGlxdWlkaXR5AQEFKFplcm9BbW91bnQBAQWMUHJvdmlkZWRNaW5pbXVtTm90U3VmZmljaWVudEZvclN3YXABAQWMUHJvdmlkZWRNYXhpbXVtTm90U3VmZmljaWVudEZvclN3YXABAQUsSW52YWxpZFBhdGgBAQU0Tm9uVW5pcXVlUGF0aAEBBVBJbmNvcnJlY3RQb29sQXNzZXRJZAEBBTBCZWxvd01pbmltdW0BAQUCbBhTeXN0ZW0BAiQ8SW52YWxpZFNwZWNOYW1lAQEFaFNwZWNWZXJzaW9uTmVlZHNUb0luY3JlYXNlAQEFdEZhaWxlZFRvRXh0cmFjdFJ1bnRpbWVWZXJzaW9uAQEFTE5vbkRlZmF1bHRDb21wb3NpdGUBAQU8Tm9uWmVyb1JlZkNvdW50AQEFMENhbGxGaWx0ZXJlZAEBBWxNdWx0aUJsb2NrTWlncmF0aW9uc09uZ29pbmcBAQVETm90aGluZ0F1dGhvcml6ZWQBAQUwVW5hdXRob3JpemVkAQEFPFBhcmFjaGFpblN5c3RlbQECIExPdmVybGFwcGluZ1VwZ3JhZGVzAQEFUFByb2hpYml0ZWRCeVBvbGthZG90AQEFGFRvb0JpZwEBBWhWYWxpZGF0aW9uRGF0YU5vdEF2YWlsYWJsZQEBBXRIb3N0Q29uZmlndXJhdGlvbk5vdEF2YWlsYWJsZQEBBTBOb3RTY2hlZHVsZWQBAQVETm90aGluZ0F1dGhvcml6ZWQBAQUwVW5hdXRob3JpemVkAQEFJFRpbWVzdGFtcAEBBTRQYXJhY2hhaW5JbmZvAQEFIEJhbGFuY2VzAQIwOFZlc3RpbmdCYWxhbmNlAQEFVExpcXVpZGl0eVJlc3RyaWN0aW9ucwEBBUxJbnN1ZmZpY2llbnRCYWxhbmNlAQEFSEV4aXN0ZW50aWFsRGVwb3NpdAEBBTRFeHBlbmRhYmlsaXR5AQEFXEV4aXN0aW5nVmVzdGluZ1NjaGVkdWxlAQEFLERlYWRBY2NvdW50AQEFPFRvb01hbnlSZXNlcnZlcwEBBTBUb29NYW55SG9sZHMBAQU4VG9vTWFueUZyZWV6ZXMBAQVMSXNzdWFuY2VEZWFjdGl2YXRlZAEBBSREZWx0YVplcm8BAQVIVHJhbnNhY3Rpb25QYXltZW50AQEFOEFzc2V0VHhQYXltZW50AQEFHFZlc3RpbmcBAhQoTm90VmVzdGluZwEBBVRBdE1heFZlc3RpbmdTY2hlZHVsZXMBAQUkQW1vdW50TG93AQEFYFNjaGVkdWxlSW5kZXhPdXRPZkJvdW5kcwEBBVRJbnZhbGlkU2NoZWR1bGVQYXJhbXMBAQUoQXV0aG9yc2hpcAEBBURDb2xsYXRvclNlbGVjdGlvbgECRERUb29NYW55Q2FuZGlkYXRlcwEBBVxUb29GZXdFbGlnaWJsZUNvbGxhdG9ycwEBBUBBbHJlYWR5Q2FuZGlkYXRlAQEFME5vdENhbmRpZGF0ZQEBBVBUb29NYW55SW52dWxuZXJhYmxlcwEBBUxBbHJlYWR5SW52dWxuZXJhYmxlAQEFPE5vdEludnVsbmVyYWJsZQEBBVxOb0Fzc29jaWF0ZWRWYWxpZGF0b3JJZAEBBVhWYWxpZGF0b3JOb3RSZWdpc3RlcmVkAQEFbEluc2VydFRvQ2FuZGlkYXRlTGlzdEZhaWxlZAEBBXRSZW1vdmVGcm9tQ2FuZGlkYXRlTGlzdEZhaWxlZAEBBTREZXBvc2l0VG9vTG93AQEFZFVwZGF0ZUNhbmRpZGF0ZUxpc3RGYWlsZWQBAQVASW5zdWZmaWNpZW50Qm9uZAEBBVBUYXJnZXRJc05vdENhbmRpZGF0ZQEBBUBJZGVudGljYWxEZXBvc2l0AQEFQEludmFsaWRVbnJlc2VydmUBAQUcU2Vzc2lvbgECFDBJbnZhbGlkUHJvb2YBAQVcTm9Bc3NvY2lhdGVkVmFsaWRhdG9ySWQBAQU0RHVwbGljYXRlZEtleQEBBRhOb0tleXMBAQUkTm9BY2NvdW50AQEFEEF1cmEBAQUcQXVyYUV4dAEBBSRYY21wUXVldWUBAhQ4QmFkUXVldWVDb25maWcBAQVAQWxyZWFkeVN1c3BlbmRlZAEBBThBbHJlYWR5UmVzdW1lZAEBBXRUb29NYW55QWN0aXZlT3V0Ym91bmRDaGFubmVscwEBBRhUb29CaWcBAQUsUG9sa2Fkb3RYY20BAmAsVW5yZWFjaGFibGUBAQUsU2VuZEZhaWx1cmUBAQUgRmlsdGVyZWQBAQVIVW53ZWlnaGFibGVNZXNzYWdlAQEFYERlc3RpbmF0aW9uTm90SW52ZXJ0aWJsZQEBBRRFbXB0eQEBBThDYW5ub3RSZWFuY2hvcgEBBTRUb29NYW55QXNzZXRzAQEFNEludmFsaWRPcmlnaW4BAQUoQmFkVmVyc2lvbgEBBSxCYWRMb2NhdGlvbgEBBThOb1N1YnNjcmlwdGlvbgEBBURBbHJlYWR5U3Vic2NyaWJlZAEBBVhDYW5ub3RDaGVja091dFRlbGVwb3J0AQEFKExvd0JhbGFuY2UBAQUwVG9vTWFueUxvY2tzAQEFTEFjY291bnROb3RTb3ZlcmVpZ24BAQUoRmVlc05vdE1ldAEBBTBMb2NrTm90Rm91bmQBAQUUSW5Vc2UBAQVoSW52YWxpZEFzc2V0VW5rbm93blJlc2VydmUBAQV4SW52YWxpZEFzc2V0VW5zdXBwb3J0ZWRSZXNlcnZlAQEFPFRvb01hbnlSZXNlcnZlcwEBBWBMb2NhbEV4ZWN1dGlvbkluY29tcGxldGUBAQUoQ3VtdWx1c1hjbQEBBURUb0t1c2FtYVhjbVJvdXRlcgEBBTBNZXNzYWdlUXVldWUBAiQsTm90UmVhcGFibGUBAQUYTm9QYWdlAQEFJE5vTWVzc2FnZQEBBUBBbHJlYWR5UHJvY2Vzc2VkAQEFGFF1ZXVlZAEBBUhJbnN1ZmZpY2llbnRXZWlnaHQBAQVgVGVtcG9yYXJpbHlVbnByb2Nlc3NhYmxlAQEFLFF1ZXVlUGF1c2VkAQEFTFJlY3Vyc2l2ZURpc2FsbG93ZWQBAQUcVXRpbGl0eQECBDBUb29NYW55Q2FsbHMBAQUgTXVsdGlzaWcBAjhATWluaW11bVRocmVzaG9sZAEBBTxBbHJlYWR5QXBwcm92ZWQBAQVETm9BcHByb3ZhbHNOZWVkZWQBAQVEVG9vRmV3U2lnbmF0b3JpZXMBAQVIVG9vTWFueVNpZ25hdG9yaWVzAQEFVFNpZ25hdG9yaWVzT3V0T2ZPcmRlcgEBBUxTZW5kZXJJblNpZ25hdG9yaWVzAQEFIE5vdEZvdW5kAQEFIE5vdE93bmVyAQEFLE5vVGltZXBvaW50AQEFOFdyb25nVGltZXBvaW50AQEFTFVuZXhwZWN0ZWRUaW1lcG9pbnQBAQU8TWF4V2VpZ2h0VG9vTG93AQEFNEFscmVhZHlTdG9yZWQBAQUUUHJveHkBAiAcVG9vTWFueQEBBSBOb3RGb3VuZAEBBSBOb3RQcm94eQEBBSxVbnByb3h5YWJsZQEBBSREdXBsaWNhdGUBAQUwTm9QZXJtaXNzaW9uAQEFLFVuYW5ub3VuY2VkAQEFLE5vU2VsZlByb3h5AQEFGEFzc2V0cwECVChCYWxhbmNlTG93AQEFJE5vQWNjb3VudAEBBTBOb1Blcm1pc3Npb24BAQUcVW5rbm93bgEBBRhGcm96ZW4BAQUUSW5Vc2UBAQUoQmFkV2l0bmVzcwEBBThNaW5CYWxhbmNlWmVybwEBBUxVbmF2YWlsYWJsZUNvbnN1bWVyAQEFLEJhZE1ldGFkYXRhAQEFKFVuYXBwcm92ZWQBAQUgV291bGREaWUBAQU0QWxyZWFkeUV4aXN0cwEBBSROb0RlcG9zaXQBAQUkV291bGRCdXJuAQEFJExpdmVBc3NldAEBBTBBc3NldE5vdExpdmUBAQU8SW5jb3JyZWN0U3RhdHVzAQEFJE5vdEZyb3plbgEBBThDYWxsYmFja0ZhaWxlZAEBBShCYWRBc3NldElkAQEFHFVuaXF1ZXMBAkgwTm9QZXJtaXNzaW9uAQEFRFVua25vd25Db2xsZWN0aW9uAQEFNEFscmVhZHlFeGlzdHMBAQUoV3JvbmdPd25lcgEBBShCYWRXaXRuZXNzAQEFFEluVXNlAQEFGEZyb3plbgEBBTRXcm9uZ0RlbGVnYXRlAQEFKE5vRGVsZWdhdGUBAQUoVW5hcHByb3ZlZAEBBShVbmFjY2VwdGVkAQEFGExvY2tlZAEBBUBNYXhTdXBwbHlSZWFjaGVkAQEFTE1heFN1cHBseUFscmVhZHlTZXQBAQVETWF4U3VwcGx5VG9vU21hbGwBAQUsVW5rbm93bkl0ZW0BAQUoTm90Rm9yU2FsZQEBBSRCaWRUb29Mb3cBAQUQTmZ0cwECtDBOb1Blcm1pc3Npb24BAQVEVW5rbm93bkNvbGxlY3Rpb24BAQU0QWxyZWFkeUV4aXN0cwEBBTxBcHByb3ZhbEV4cGlyZWQBAQUoV3JvbmdPd25lcgEBBShCYWRXaXRuZXNzAQEFRENvbGxlY3Rpb25JZEluVXNlAQEFUEl0ZW1zTm9uVHJhbnNmZXJhYmxlAQEFLE5vdERlbGVnYXRlAQEFNFdyb25nRGVsZWdhdGUBAQUoVW5hcHByb3ZlZAEBBShVbmFjY2VwdGVkAQEFKEl0ZW1Mb2NrZWQBAQVQTG9ja2VkSXRlbUF0dHJpYnV0ZXMBAQVoTG9ja2VkQ29sbGVjdGlvbkF0dHJpYnV0ZXMBAQVITG9ja2VkSXRlbU1ldGFkYXRhAQEFYExvY2tlZENvbGxlY3Rpb25NZXRhZGF0YQEBBUBNYXhTdXBwbHlSZWFjaGVkAQEFPE1heFN1cHBseUxvY2tlZAEBBURNYXhTdXBwbHlUb29TbWFsbAEBBSxVbmtub3duSXRlbQEBBSxVbmtub3duU3dhcAEBBUBNZXRhZGF0YU5vdEZvdW5kAQEFREF0dHJpYnV0ZU5vdEZvdW5kAQEFKE5vdEZvclNhbGUBAQUkQmlkVG9vTG93AQEFUFJlYWNoZWRBcHByb3ZhbExpbWl0AQEFPERlYWRsaW5lRXhwaXJlZAEBBTRXcm9uZ0R1cmF0aW9uAQEFOE1ldGhvZERpc2FibGVkAQEFMFdyb25nU2V0dGluZwEBBVhJbmNvbnNpc3RlbnRJdGVtQ29uZmlnAQEFIE5vQ29uZmlnAQEFPFJvbGVzTm90Q2xlYXJlZAEBBThNaW50Tm90U3RhcnRlZAEBBSRNaW50RW5kZWQBAQU4QWxyZWFkeUNsYWltZWQBAQU0SW5jb3JyZWN0RGF0YQEBBSxXcm9uZ09yaWdpbgEBBThXcm9uZ1NpZ25hdHVyZQEBBURJbmNvcnJlY3RNZXRhZGF0YQEBBWRNYXhBdHRyaWJ1dGVzTGltaXRSZWFjaGVkAQEFOFdyb25nTmFtZXNwYWNlAQEFSENvbGxlY3Rpb25Ob3RFbXB0eQEBBTxXaXRuZXNzUmVxdWlyZWQBAQU0Rm9yZWlnbkFzc2V0cwECVChCYWxhbmNlTG93AQEFJE5vQWNjb3VudAEBBTBOb1Blcm1pc3Npb24BAQUcVW5rbm93bgEBBRhGcm96ZW4BAQUUSW5Vc2UBAQUoQmFkV2l0bmVzcwEBBThNaW5CYWxhbmNlWmVybwEBBUxVbmF2YWlsYWJsZUNvbnN1bWVyAQEFLEJhZE1ldGFkYXRhAQEFKFVuYXBwcm92ZWQBAQUgV291bGREaWUBAQU0QWxyZWFkeUV4aXN0cwEBBSROb0RlcG9zaXQBAQUkV291bGRCdXJuAQEFJExpdmVBc3NldAEBBTBBc3NldE5vdExpdmUBAQU8SW5jb3JyZWN0U3RhdHVzAQEFJE5vdEZyb3plbgEBBThDYWxsYmFja0ZhaWxlZAEBBShCYWRBc3NldElkAQEFKFBvb2xBc3NldHMBAlQoQmFsYW5jZUxvdwEBBSROb0FjY291bnQBAQUwTm9QZXJtaXNzaW9uAQEFHFVua25vd24BAQUYRnJvemVuAQEFFEluVXNlAQEFKEJhZFdpdG5lc3MBAQU4TWluQmFsYW5jZVplcm8BAQVMVW5hdmFpbGFibGVDb25zdW1lcgEBBSxCYWRNZXRhZGF0YQEBBShVbmFwcHJvdmVkAQEFIFdvdWxkRGllAQEFNEFscmVhZHlFeGlzdHMBAQUkTm9EZXBvc2l0AQEFJFdvdWxkQnVybgEBBSRMaXZlQXNzZXQBAQUwQXNzZXROb3RMaXZlAQEFPEluY29ycmVjdFN0YXR1cwEBBSROb3RGcm96ZW4BAQU4Q2FsbGJhY2tGYWlsZWQBAQUoQmFkQXNzZXRJZAEBBTxBc3NldENvbnZlcnNpb24BAlxASW52YWxpZEFzc2V0UGFpcgEBBShQb29sRXhpc3RzAQEFSFdyb25nRGVzaXJlZEFtb3VudAEBBWBBbW91bnRPbmVMZXNzVGhhbk1pbmltYWwBAQVgQW1vdW50VHdvTGVzc1RoYW5NaW5pbWFsAQEFaFJlc2VydmVMZWZ0TGVzc1RoYW5NaW5pbWFsAQEFQEFtb3VudE91dFRvb0hpZ2gBAQUwUG9vbE5vdEZvdW5kAQEFIE92ZXJmbG93AQEFgEFzc2V0T25lRGVwb3NpdERpZE5vdE1lZXRNaW5pbXVtAQEFgEFzc2V0VHdvRGVwb3NpdERpZE5vdE1lZXRNaW5pbXVtAQEFjEFzc2V0T25lV2l0aGRyYXdhbERpZE5vdE1lZXRNaW5pbXVtAQEFjEFzc2V0VHdvV2l0aGRyYXdhbERpZE5vdE1lZXRNaW5pbXVtAQEFcE9wdGltYWxBbW91bnRMZXNzVGhhbkRlc2lyZWQBAQVsSW5zdWZmaWNpZW50TGlxdWlkaXR5TWludGVkAQEFNFplcm9MaXF1aWRpdHkBAQUoWmVyb0Ftb3VudAEBBYxQcm92aWRlZE1pbmltdW1Ob3RTdWZmaWNpZW50Rm9yU3dhcAEBBYxQcm92aWRlZE1heGltdW1Ob3RTdWZmaWNpZW50Rm9yU3dhcAEBBSxJbnZhbGlkUGF0aAEBBTROb25VbmlxdWVQYXRoAQEFUEluY29ycmVjdFBvb2xBc3NldElkAQEFMEJlbG93TWluaW11bQEBBQIoQEZ1bmRzVW5hdmFpbGFibGUBAQUwT25seVByb3ZpZGVyAQEFMEJlbG93TWluaW11bQEBBTBDYW5ub3RDcmVhdGUBAQUwVW5rbm93bkFzc2V0AQEFGEZyb3plbgEBBSxVbnN1cHBvcnRlZAEBBUBDYW5ub3RDcmVhdGVIb2xkAQEFNE5vdEV4cGVuZGFibGUBAQUcQmxvY2tlZAEBBQIMJFVuZGVyZmxvdwEBBSBPdmVyZmxvdwEBBThEaXZpc2lvbkJ5WmVybwEBBQIIMExpbWl0UmVhY2hlZAEBBRxOb0xheWVyAQEFAjgUT3RoZXIBAQUwQ2Fubm90TG9va3VwAQEFJEJhZE9yaWdpbgEBBRhNb2R1bGUBAmwYU3lzdGVtAQIkPEludmFsaWRTcGVjTmFtZQEBBWhTcGVjVmVyc2lvbk5lZWRzVG9JbmNyZWFzZQEBBXRGYWlsZWRUb0V4dHJhY3RSdW50aW1lVmVyc2lvbgEBBUxOb25EZWZhdWx0Q29tcG9zaXRlAQEFPE5vblplcm9SZWZDb3VudAEBBTBDYWxsRmlsdGVyZWQBAQVsTXVsdGlCbG9ja01pZ3JhdGlvbnNPbmdvaW5nAQEFRE5vdGhpbmdBdXRob3JpemVkAQEFMFVuYXV0aG9yaXplZAEBBTxQYXJhY2hhaW5TeXN0ZW0BAiBMT3ZlcmxhcHBpbmdVcGdyYWRlcwEBBVBQcm9oaWJpdGVkQnlQb2xrYWRvdAEBBRhUb29CaWcBAQVoVmFsaWRhdGlvbkRhdGFOb3RBdmFpbGFibGUBAQV0SG9zdENvbmZpZ3VyYXRpb25Ob3RBdmFpbGFibGUBAQUwTm90U2NoZWR1bGVkAQEFRE5vdGhpbmdBdXRob3JpemVkAQEFMFVuYXV0aG9yaXplZAEBBSRUaW1lc3RhbXABAQU0UGFyYWNoYWluSW5mbwEBBSBCYWxhbmNlcwECMDhWZXN0aW5nQmFsYW5jZQEBBVRMaXF1aWRpdHlSZXN0cmljdGlvbnMBAQVMSW5zdWZmaWNpZW50QmFsYW5jZQEBBUhFeGlzdGVudGlhbERlcG9zaXQBAQU0RXhwZW5kYWJpbGl0eQEBBVxFeGlzdGluZ1Zlc3RpbmdTY2hlZHVsZQEBBSxEZWFkQWNjb3VudAEBBTxUb29NYW55UmVzZXJ2ZXMBAQUwVG9vTWFueUhvbGRzAQEFOFRvb01hbnlGcmVlemVzAQEFTElzc3VhbmNlRGVhY3RpdmF0ZWQBAQUkRGVsdGFaZXJvAQEFSFRyYW5zYWN0aW9uUGF5bWVudAEBBThBc3NldFR4UGF5bWVudAEBBRxWZXN0aW5nAQIUKE5vdFZlc3RpbmcBAQVUQXRNYXhWZXN0aW5nU2NoZWR1bGVzAQEFJEFtb3VudExvdwEBBWBTY2hlZHVsZUluZGV4T3V0T2ZCb3VuZHMBAQVUSW52YWxpZFNjaGVkdWxlUGFyYW1zAQEFKEF1dGhvcnNoaXABAQVEQ29sbGF0b3JTZWxlY3Rpb24BAkREVG9vTWFueUNhbmRpZGF0ZXMBAQVcVG9vRmV3RWxpZ2libGVDb2xsYXRvcnMBAQVAQWxyZWFkeUNhbmRpZGF0ZQEBBTBOb3RDYW5kaWRhdGUBAQVQVG9vTWFueUludnVsbmVyYWJsZXMBAQVMQWxyZWFkeUludnVsbmVyYWJsZQEBBTxOb3RJbnZ1bG5lcmFibGUBAQVcTm9Bc3NvY2lhdGVkVmFsaWRhdG9ySWQBAQVYVmFsaWRhdG9yTm90UmVnaXN0ZXJlZAEBBWxJbnNlcnRUb0NhbmRpZGF0ZUxpc3RGYWlsZWQBAQV0UmVtb3ZlRnJvbUNhbmRpZGF0ZUxpc3RGYWlsZWQBAQU0RGVwb3NpdFRvb0xvdwEBBWRVcGRhdGVDYW5kaWRhdGVMaXN0RmFpbGVkAQEFQEluc3VmZmljaWVudEJvbmQBAQVQVGFyZ2V0SXNOb3RDYW5kaWRhdGUBAQVASWRlbnRpY2FsRGVwb3NpdAEBBUBJbnZhbGlkVW5yZXNlcnZlAQEFHFNlc3Npb24BAhQwSW52YWxpZFByb29mAQEFXE5vQXNzb2NpYXRlZFZhbGlkYXRvcklkAQEFNER1cGxpY2F0ZWRLZXkBAQUYTm9LZXlzAQEFJE5vQWNjb3VudAEBBRBBdXJhAQEFHEF1cmFFeHQBAQUkWGNtcFF1ZXVlAQIUOEJhZFF1ZXVlQ29uZmlnAQEFQEFscmVhZHlTdXNwZW5kZWQBAQU4QWxyZWFkeVJlc3VtZWQBAQV0VG9vTWFueUFjdGl2ZU91dGJvdW5kQ2hhbm5lbHMBAQUYVG9vQmlnAQEFLFBvbGthZG90WGNtAQJgLFVucmVhY2hhYmxlAQEFLFNlbmRGYWlsdXJlAQEFIEZpbHRlcmVkAQEFSFVud2VpZ2hhYmxlTWVzc2FnZQEBBWBEZXN0aW5hdGlvbk5vdEludmVydGlibGUBAQUURW1wdHkBAQU4Q2Fubm90UmVhbmNob3IBAQU0VG9vTWFueUFzc2V0cwEBBTRJbnZhbGlkT3JpZ2luAQEFKEJhZFZlcnNpb24BAQUsQmFkTG9jYXRpb24BAQU4Tm9TdWJzY3JpcHRpb24BAQVEQWxyZWFkeVN1YnNjcmliZWQBAQVYQ2Fubm90Q2hlY2tPdXRUZWxlcG9ydAEBBShMb3dCYWxhbmNlAQEFMFRvb01hbnlMb2NrcwEBBUxBY2NvdW50Tm90U292ZXJlaWduAQEFKEZlZXNOb3RNZXQBAQUwTG9ja05vdEZvdW5kAQEFFEluVXNlAQEFaEludmFsaWRBc3NldFVua25vd25SZXNlcnZlAQEFeEludmFsaWRBc3NldFVuc3VwcG9ydGVkUmVzZXJ2ZQEBBTxUb29NYW55UmVzZXJ2ZXMBAQVgTG9jYWxFeGVjdXRpb25JbmNvbXBsZXRlAQEFKEN1bXVsdXNYY20BAQVEVG9LdXNhbWFYY21Sb3V0ZXIBAQUwTWVzc2FnZVF1ZXVlAQIkLE5vdFJlYXBhYmxlAQEFGE5vUGFnZQEBBSROb01lc3NhZ2UBAQVAQWxyZWFkeVByb2Nlc3NlZAEBBRhRdWV1ZWQBAQVISW5zdWZmaWNpZW50V2VpZ2h0AQEFYFRlbXBvcmFyaWx5VW5wcm9jZXNzYWJsZQEBBSxRdWV1ZVBhdXNlZAEBBUxSZWN1cnNpdmVEaXNhbGxvd2VkAQEFHFV0aWxpdHkBAgQwVG9vTWFueUNhbGxzAQEFIE11bHRpc2lnAQI4QE1pbmltdW1UaHJlc2hvbGQBAQU8QWxyZWFkeUFwcHJvdmVkAQEFRE5vQXBwcm92YWxzTmVlZGVkAQEFRFRvb0Zld1NpZ25hdG9yaWVzAQEFSFRvb01hbnlTaWduYXRvcmllcwEBBVRTaWduYXRvcmllc091dE9mT3JkZXIBAQVMU2VuZGVySW5TaWduYXRvcmllcwEBBSBOb3RGb3VuZAEBBSBOb3RPd25lcgEBBSxOb1RpbWVwb2ludAEBBThXcm9uZ1RpbWVwb2ludAEBBUxVbmV4cGVjdGVkVGltZXBvaW50AQEFPE1heFdlaWdodFRvb0xvdwEBBTRBbHJlYWR5U3RvcmVkAQEFFFByb3h5AQIgHFRvb01hbnkBAQUgTm90Rm91bmQBAQUgTm90UHJveHkBAQUsVW5wcm94eWFibGUBAQUkRHVwbGljYXRlAQEFME5vUGVybWlzc2lvbgEBBSxVbmFubm91bmNlZAEBBSxOb1NlbGZQcm94eQEBBRhBc3NldHMBAlQoQmFsYW5jZUxvdwEBBSROb0FjY291bnQBAQUwTm9QZXJtaXNzaW9uAQEFHFVua25vd24BAQUYRnJvemVuAQEFFEluVXNlAQEFKEJhZFdpdG5lc3MBAQU4TWluQmFsYW5jZVplcm8BAQVMVW5hdmFpbGFibGVDb25zdW1lcgEBBSxCYWRNZXRhZGF0YQEBBShVbmFwcHJvdmVkAQEFIFdvdWxkRGllAQEFNEFscmVhZHlFeGlzdHMBAQUkTm9EZXBvc2l0AQEFJFdvdWxkQnVybgEBBSRMaXZlQXNzZXQBAQUwQXNzZXROb3RMaXZlAQEFPEluY29ycmVjdFN0YXR1cwEBBSROb3RGcm96ZW4BAQU4Q2FsbGJhY2tGYWlsZWQBAQUoQmFkQXNzZXRJZAEBBRxVbmlxdWVzAQJIME5vUGVybWlzc2lvbgEBBURVbmtub3duQ29sbGVjdGlvbgEBBTRBbHJlYWR5RXhpc3RzAQEFKFdyb25nT3duZXIBAQUoQmFkV2l0bmVzcwEBBRRJblVzZQEBBRhGcm96ZW4BAQU0V3JvbmdEZWxlZ2F0ZQEBBShOb0RlbGVnYXRlAQEFKFVuYXBwcm92ZWQBAQUoVW5hY2NlcHRlZAEBBRhMb2NrZWQBAQVATWF4U3VwcGx5UmVhY2hlZAEBBUxNYXhTdXBwbHlBbHJlYWR5U2V0AQEFRE1heFN1cHBseVRvb1NtYWxsAQEFLFVua25vd25JdGVtAQEFKE5vdEZvclNhbGUBAQUkQmlkVG9vTG93AQEFEE5mdHMBArQwTm9QZXJtaXNzaW9uAQEFRFVua25vd25Db2xsZWN0aW9uAQEFNEFscmVhZHlFeGlzdHMBAQU8QXBwcm92YWxFeHBpcmVkAQEFKFdyb25nT3duZXIBAQUoQmFkV2l0bmVzcwEBBURDb2xsZWN0aW9uSWRJblVzZQEBBVBJdGVtc05vblRyYW5zZmVyYWJsZQEBBSxOb3REZWxlZ2F0ZQEBBTRXcm9uZ0RlbGVnYXRlAQEFKFVuYXBwcm92ZWQBAQUoVW5hY2NlcHRlZAEBBShJdGVtTG9ja2VkAQEFUExvY2tlZEl0ZW1BdHRyaWJ1dGVzAQEFaExvY2tlZENvbGxlY3Rpb25BdHRyaWJ1dGVzAQEFSExvY2tlZEl0ZW1NZXRhZGF0YQEBBWBMb2NrZWRDb2xsZWN0aW9uTWV0YWRhdGEBAQVATWF4U3VwcGx5UmVhY2hlZAEBBTxNYXhTdXBwbHlMb2NrZWQBAQVETWF4U3VwcGx5VG9vU21hbGwBAQUsVW5rbm93bkl0ZW0BAQUsVW5rbm93blN3YXABAQVATWV0YWRhdGFOb3RGb3VuZAEBBURBdHRyaWJ1dGVOb3RGb3VuZAEBBShOb3RGb3JTYWxlAQEFJEJpZFRvb0xvdwEBBVBSZWFjaGVkQXBwcm92YWxMaW1pdAEBBTxEZWFkbGluZUV4cGlyZWQBAQU0V3JvbmdEdXJhdGlvbgEBBThNZXRob2REaXNhYmxlZAEBBTBXcm9uZ1NldHRpbmcBAQVYSW5jb25zaXN0ZW50SXRlbUNvbmZpZwEBBSBOb0NvbmZpZwEBBTxSb2xlc05vdENsZWFyZWQBAQU4TWludE5vdFN0YXJ0ZWQBAQUkTWludEVuZGVkAQEFOEFscmVhZHlDbGFpbWVkAQEFNEluY29ycmVjdERhdGEBAQUsV3JvbmdPcmlnaW4BAQU4V3JvbmdTaWduYXR1cmUBAQVESW5jb3JyZWN0TWV0YWRhdGEBAQVkTWF4QXR0cmlidXRlc0xpbWl0UmVhY2hlZAEBBThXcm9uZ05hbWVzcGFjZQEBBUhDb2xsZWN0aW9uTm90RW1wdHkBAQU8V2l0bmVzc1JlcXVpcmVkAQEFNEZvcmVpZ25Bc3NldHMBAlQoQmFsYW5jZUxvdwEBBSROb0FjY291bnQBAQUwTm9QZXJtaXNzaW9uAQEFHFVua25vd24BAQUYRnJvemVuAQEFFEluVXNlAQEFKEJhZFdpdG5lc3MBAQU4TWluQmFsYW5jZVplcm8BAQVMVW5hdmFpbGFibGVDb25zdW1lcgEBBSxCYWRNZXRhZGF0YQEBBShVbmFwcHJvdmVkAQEFIFdvdWxkRGllAQEFNEFscmVhZHlFeGlzdHMBAQUkTm9EZXBvc2l0AQEFJFdvdWxkQnVybgEBBSRMaXZlQXNzZXQBAQUwQXNzZXROb3RMaXZlAQEFPEluY29ycmVjdFN0YXR1cwEBBSROb3RGcm96ZW4BAQU4Q2FsbGJhY2tGYWlsZWQBAQUoQmFkQXNzZXRJZAEBBShQb29sQXNzZXRzAQJUKEJhbGFuY2VMb3cBAQUkTm9BY2NvdW50AQEFME5vUGVybWlzc2lvbgEBBRxVbmtub3duAQEFGEZyb3plbgEBBRRJblVzZQEBBShCYWRXaXRuZXNzAQEFOE1pbkJhbGFuY2VaZXJvAQEFTFVuYXZhaWxhYmxlQ29uc3VtZXIBAQUsQmFkTWV0YWRhdGEBAQUoVW5hcHByb3ZlZAEBBSBXb3VsZERpZQEBBTRBbHJlYWR5RXhpc3RzAQEFJE5vRGVwb3NpdAEBBSRXb3VsZEJ1cm4BAQUkTGl2ZUFzc2V0AQEFMEFzc2V0Tm90TGl2ZQEBBTxJbmNvcnJlY3RTdGF0dXMBAQUkTm90RnJvemVuAQEFOENhbGxiYWNrRmFpbGVkAQEFKEJhZEFzc2V0SWQBAQU8QXNzZXRDb252ZXJzaW9uAQJcQEludmFsaWRBc3NldFBhaXIBAQUoUG9vbEV4aXN0cwEBBUhXcm9uZ0Rlc2lyZWRBbW91bnQBAQVgQW1vdW50T25lTGVzc1RoYW5NaW5pbWFsAQEFYEFtb3VudFR3b0xlc3NUaGFuTWluaW1hbAEBBWhSZXNlcnZlTGVmdExlc3NUaGFuTWluaW1hbAEBBUBBbW91bnRPdXRUb29IaWdoAQEFMFBvb2xOb3RGb3VuZAEBBSBPdmVyZmxvdwEBBYBBc3NldE9uZURlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYBBc3NldFR3b0RlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYxBc3NldE9uZVdpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBYxBc3NldFR3b1dpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBXBPcHRpbWFsQW1vdW50TGVzc1RoYW5EZXNpcmVkAQEFbEluc3VmZmljaWVudExpcXVpZGl0eU1pbnRlZAEBBTRaZXJvTGlxdWlkaXR5AQEFKFplcm9BbW91bnQBAQWMUHJvdmlkZWRNaW5pbXVtTm90U3VmZmljaWVudEZvclN3YXABAQWMUHJvdmlkZWRNYXhpbXVtTm90U3VmZmljaWVudEZvclN3YXABAQUsSW52YWxpZFBhdGgBAQU0Tm9uVW5pcXVlUGF0aAEBBVBJbmNvcnJlY3RQb29sQXNzZXRJZAEBBTBCZWxvd01pbmltdW0BAQVEQ29uc3VtZXJSZW1haW5pbmcBAQUsTm9Qcm92aWRlcnMBAQVAVG9vTWFueUNvbnN1bWVycwEBBRRUb2tlbgECKEBGdW5kc1VuYXZhaWxhYmxlAQEFME9ubHlQcm92aWRlcgEBBTBCZWxvd01pbmltdW0BAQUwQ2Fubm90Q3JlYXRlAQEFMFVua25vd25Bc3NldAEBBRhGcm96ZW4BAQUsVW5zdXBwb3J0ZWQBAQVAQ2Fubm90Q3JlYXRlSG9sZAEBBTROb3RFeHBlbmRhYmxlAQEFHEJsb2NrZWQBAQUoQXJpdGhtZXRpYwECDCRVbmRlcmZsb3cBAQUgT3ZlcmZsb3cBAQU4RGl2aXNpb25CeVplcm8BAQU0VHJhbnNhY3Rpb25hbAECCDBMaW1pdFJlYWNoZWQBAQUcTm9MYXllcgEBBSRFeGhhdXN0ZWQBAQUoQ29ycnVwdGlvbgEBBSxVbmF2YWlsYWJsZQEBBThSb290Tm90QWxsb3dlZAEBBQIcQEV4dHJpbnNpY1N1Y2Nlc3MBAAQ0ZGlzcGF0Y2hfaW5mb0A8RXh0cmluc2ljRmFpbGVkAQAIOGRpc3BhdGNoX2Vycm9ylDRkaXNwYXRjaF9pbmZvQCxDb2RlVXBkYXRlZAEBBShOZXdBY2NvdW50AQAEHGFjY291bnQANEtpbGxlZEFjY291bnQBAAQcYWNjb3VudAAgUmVtYXJrZWQBAAgYc2VuZGVyABBoYXNoIERVcGdyYWRlQXV0aG9yaXplZAEACCRjb2RlX2hhc2ggNGNoZWNrX3ZlcnNpb24UBiACGGBWYWxpZGF0aW9uRnVuY3Rpb25TdG9yZWQBAQVkVmFsaWRhdGlvbkZ1bmN0aW9uQXBwbGllZAEABFRyZWxheV9jaGFpbl9ibG9ja19udW0EbFZhbGlkYXRpb25GdW5jdGlvbkRpc2NhcmRlZAEBBWBEb3dud2FyZE1lc3NhZ2VzUmVjZWl2ZWQBAAQUY291bnQEZERvd253YXJkTWVzc2FnZXNQcm9jZXNzZWQBAAgsd2VpZ2h0X3VzZWQYIGRtcV9oZWFkIERVcHdhcmRNZXNzYWdlU2VudAEABDBtZXNzYWdlX2hhc2icAggQRnJlZQEBBSBSZXNlcnZlZAEBBQJYHEVuZG93ZWQBAAgcYWNjb3VudAAwZnJlZV9iYWxhbmNlCCBEdXN0TG9zdAEACBxhY2NvdW50ABhhbW91bnQIIFRyYW5zZmVyAQAMEGZyb20ACHRvABhhbW91bnQIKEJhbGFuY2VTZXQBAAgMd2hvABBmcmVlCCBSZXNlcnZlZAEACAx3aG8AGGFtb3VudAgoVW5yZXNlcnZlZAEACAx3aG8AGGFtb3VudAhIUmVzZXJ2ZVJlcGF0cmlhdGVkAQAQEGZyb20ACHRvABhhbW91bnQISGRlc3RpbmF0aW9uX3N0YXR1c6QcRGVwb3NpdAEACAx3aG8AGGFtb3VudAggV2l0aGRyYXcBAAgMd2hvABhhbW91bnQIHFNsYXNoZWQBAAgMd2hvABhhbW91bnQIGE1pbnRlZAEACAx3aG8AGGFtb3VudAgYQnVybmVkAQAIDHdobwAYYW1vdW50CCRTdXNwZW5kZWQBAAgMd2hvABhhbW91bnQIIFJlc3RvcmVkAQAIDHdobwAYYW1vdW50CCBVcGdyYWRlZAEABAx3aG8AGElzc3VlZAEABBhhbW91bnQIJFJlc2NpbmRlZAEABBhhbW91bnQIGExvY2tlZAEACAx3aG8AGGFtb3VudAggVW5sb2NrZWQBAAgMd2hvABhhbW91bnQIGEZyb3plbgEACAx3aG8AGGFtb3VudAgYVGhhd2VkAQAIDHdobwAYYW1vdW50CExUb3RhbElzc3VhbmNlRm9yY2VkAQAIDG9sZAgMbmV3CAIESFRyYW5zYWN0aW9uRmVlUGFpZAEADAx3aG8AKGFjdHVhbF9mZWUIDHRpcAgCLCRCeUdlbmVzaXMBBQGAGEJ5Rm9yawEACDBibG9ja19udW1iZXIIKGJsb2NrX2hhc2ggIFBvbGthZG90AQEFGEt1c2FtYQEBBRxXZXN0ZW5kAQEFGFJvY29jbwEBBRhXb2NvY28BAQUgRXRoZXJldW0BAAQgY2hhaW5faWQILEJpdGNvaW5Db3JlAQEFLEJpdGNvaW5DYXNoAQEFQFBvbGthZG90QnVsbGV0aW4BAQUGsAUBUAIoEFVuaXQBAQUcTW9uaWtlcgEFARAUSW5kZXgBAQIkRXhlY3V0aXZlAQEFJFRlY2huaWNhbAEBBSxMZWdpc2xhdGl2ZQEBBSBKdWRpY2lhbAEBBRxEZWZlbnNlAQEFOEFkbWluaXN0cmF0aW9uAQEFIFRyZWFzdXJ5AQEFAhQUVm9pY2UBAQUcTWVtYmVycwEABBRjb3VudAQgRnJhY3Rpb24BAAgMbm9tBBRkZW5vbQREQXRMZWFzdFByb3BvcnRpb24BAAgMbm9tBBRkZW5vbQRITW9yZVRoYW5Qcm9wb3J0aW9uAQAIDG5vbQQUZGVub20EAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFBMQBCATEAQwExAEQBMQBFATEARgExAEcBMQBIAIkEEhlcmUBAQUIWDEBAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFCFgyAQTEAQgIWDMBBMQBDAhYNAEExAEQCFg1AQTEARQIWDYBBMQBGAhYNwEExAEcCFg4AQTEASAACBxwYXJlbnRzBCBpbnRlcmlvcuQCCDhBc3NldFR4RmVlUGFpZAEAEAx3aG8AKGFjdHVhbF9mZWUIDHRpcAggYXNzZXRfaWToREFzc2V0UmVmdW5kRmFpbGVkAQAESG5hdGl2ZV9hbW91bnRfa2VwdAgCCDhWZXN0aW5nVXBkYXRlZAEACBxhY2NvdW50ACB1bnZlc3RlZAhAVmVzdGluZ0NvbXBsZXRlZAEABBxhY2NvdW50AAQAAAIoQE5ld0ludnVsbmVyYWJsZXMBAAQ0aW52dWxuZXJhYmxlc/RESW52dWxuZXJhYmxlQWRkZWQBAAQoYWNjb3VudF9pZABMSW52dWxuZXJhYmxlUmVtb3ZlZAEABChhY2NvdW50X2lkAFBOZXdEZXNpcmVkQ2FuZGlkYXRlcwEABEhkZXNpcmVkX2NhbmRpZGF0ZXMEQE5ld0NhbmRpZGFjeUJvbmQBAAQsYm9uZF9hbW91bnQIOENhbmRpZGF0ZUFkZGVkAQAIKGFjY291bnRfaWQAHGRlcG9zaXQIUENhbmRpZGF0ZUJvbmRVcGRhdGVkAQAIKGFjY291bnRfaWQAHGRlcG9zaXQIQENhbmRpZGF0ZVJlbW92ZWQBAAQoYWNjb3VudF9pZABEQ2FuZGlkYXRlUmVwbGFjZWQBAAwMb2xkAAxuZXcAHGRlcG9zaXQIaEludmFsaWRJbnZ1bG5lcmFibGVTa2lwcGVkAQAEKGFjY291bnRfaWQAAgQoTmV3U2Vzc2lvbgEABDRzZXNzaW9uX2luZGV4BAIEPFhjbXBNZXNzYWdlU2VudAEABDBtZXNzYWdlX2hhc2ggAqAgT3ZlcmZsb3cBAQU0VW5pbXBsZW1lbnRlZAEBBWBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb24BAQVkVW50cnVzdGVkVGVsZXBvcnRMb2NhdGlvbgEBBTBMb2NhdGlvbkZ1bGwBAQVUTG9jYXRpb25Ob3RJbnZlcnRpYmxlAQEFJEJhZE9yaWdpbgEBBTxJbnZhbGlkTG9jYXRpb24BAQU0QXNzZXROb3RGb3VuZAEBBVRGYWlsZWRUb1RyYW5zYWN0QXNzZXQBAQU8Tm90V2l0aGRyYXdhYmxlAQEFSExvY2F0aW9uQ2Fubm90SG9sZAEBBVRFeGNlZWRzTWF4TWVzc2FnZVNpemUBAQVYRGVzdGluYXRpb25VbnN1cHBvcnRlZAEBBSRUcmFuc3BvcnQBAQUoVW5yb3V0YWJsZQEBBTBVbmtub3duQ2xhaW0BAQU4RmFpbGVkVG9EZWNvZGUBAQVATWF4V2VpZ2h0SW52YWxpZAEBBThOb3RIb2xkaW5nRmVlcwEBBTBUb29FeHBlbnNpdmUBAQUQVHJhcAEBA0BFeHBlY3RhdGlvbkZhbHNlAQEFOFBhbGxldE5vdEZvdW5kAQEFME5hbWVNaXNtYXRjaAEBBUxWZXJzaW9uSW5jb21wYXRpYmxlAQEFUEhvbGRpbmdXb3VsZE92ZXJmbG93AQEFLEV4cG9ydEVycm9yAQEFOFJlYW5jaG9yRmFpbGVkAQEFGE5vRGVhbAEBBShGZWVzTm90TWV0AQEFJExvY2tFcnJvcgEBBTBOb1Blcm1pc3Npb24BAQUoVW5hbmNob3JlZAEBBThOb3REZXBvc2l0YWJsZQEBBUxVbmhhbmRsZWRYY21WZXJzaW9uAQEFSFdlaWdodExpbWl0UmVhY2hlZAEACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgcQmFycmllcgEBBUxXZWlnaHROb3RDb21wdXRhYmxlAQEFREV4Y2VlZHNTdGFja0xpbWl0AQEFAgwgQ29tcGxldGUBAAQQdXNlZBgoSW5jb21wbGV0ZQEACBB1c2VkGBRlcnJvcgUBFEVycm9yAQAEFGVycm9yBQEFASAFAUACGCRVbmRlZmluZWQBAQUUSW5kZXgBAQMYQXJyYXk0AQUBEBhBcnJheTgBBQEgHEFycmF5MTYBBQFAHEFycmF5MzIBBQGAAgggRnVuZ2libGUBAQMsTm9uRnVuZ2libGUBAhgkVW5kZWZpbmVkAQEFFEluZGV4AQEDGEFycmF5NAEFARAYQXJyYXk4AQUBIBxBcnJheTE2AQUBQBxBcnJheTMyAQUBgAAICGlk6AxmdW4ZAQQdAQADCAQFAQYlAQAYFGluZGV4BBBuYW1lJCxtb2R1bGVfbmFtZSQUbWFqb3IEFG1pbm9yBBRwYXRjaAQELQEAAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAIYEE51bGwBAQUYQXNzZXRzAQQdAQA8RXhlY3V0aW9uUmVzdWx0AQYlARxWZXJzaW9uAQECLFBhbGxldHNJbmZvAQQtAQA4RGlzcGF0Y2hSZXN1bHQBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAboAhAYTmF0aXZlAQEFQFNvdmVyZWlnbkFjY291bnQBAQUkU3VwZXJ1c2VyAQEFDFhjbQEBBQAMLGRlc3RpbmF0aW9u6CBxdWVyeV9pZAgobWF4X3dlaWdodBgCCCBGdW5naWJsZQEBBSxOb25GdW5naWJsZQEBBQIQDEFsbAEBBRRBbGxPZgEACAhpZOgMZnVuSQEoQWxsQ291bnRlZAEBAjBBbGxPZkNvdW50ZWQBAAwIaWToDGZ1bkkBFGNvdW50BAIIIERlZmluaXRlAQQdAQAQV2lsZAECEAxBbGwBAQUUQWxsT2YBAAgIaWToDGZ1bkkBKEFsbENvdW50ZWQBAQIwQWxsT2ZDb3VudGVkAQAMCGlk6AxmdW5JARRjb3VudAQCCCRVbmxpbWl0ZWQBAQUcTGltaXRlZAEACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgCwDRXaXRoZHJhd0Fzc2V0AQQdAQBUUmVzZXJ2ZUFzc2V0RGVwb3NpdGVkAQQdAQBYUmVjZWl2ZVRlbGVwb3J0ZWRBc3NldAEEHQEANFF1ZXJ5UmVzcG9uc2UBABAgcXVlcnlfaWQIIHJlc3BvbnNlOQEobWF4X3dlaWdodBgccXVlcmllcj0BNFRyYW5zZmVyQXNzZXQBAAgYYXNzZXRzIQEsYmVuZWZpY2lhcnnoUFRyYW5zZmVyUmVzZXJ2ZUFzc2V0AQAMGGFzc2V0cyEBEGRlc3ToDHhjbV0BIFRyYW5zYWN0AQAMLG9yaWdpbl9raW5kQQFYcmVxdWlyZV93ZWlnaHRfYXRfbW9zdBgQY2FsbCRkSHJtcE5ld0NoYW5uZWxPcGVuUmVxdWVzdAEADBhzZW5kZXIEQG1heF9tZXNzYWdlX3NpemUEMG1heF9jYXBhY2l0eQRMSHJtcENoYW5uZWxBY2NlcHRlZAEABCRyZWNpcGllbnQESEhybXBDaGFubmVsQ2xvc2luZwEADCRpbml0aWF0b3IEGHNlbmRlcgQkcmVjaXBpZW50BCxDbGVhck9yaWdpbgEBBTREZXNjZW5kT3JpZ2luAQIkEEhlcmUBAQUIWDEBAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFCFgyAQTEAQgIWDMBBMQBDAhYNAEExAEQCFg1AQTEARQIWDYBBMQBGAhYNwEExAEcCFg4AQTEASAsUmVwb3J0RXJyb3IBAAwsZGVzdGluYXRpb27oIHF1ZXJ5X2lkCChtYXhfd2VpZ2h0GDBEZXBvc2l0QXNzZXQBAAgYYXNzZXRzUQEsYmVuZWZpY2lhcnnoTERlcG9zaXRSZXNlcnZlQXNzZXQBAAwYYXNzZXRzUQEQZGVzdOgMeGNtXQE0RXhjaGFuZ2VBc3NldAEADBBnaXZlUQEQd2FudCEBHG1heGltYWwUXEluaXRpYXRlUmVzZXJ2ZVdpdGhkcmF3AQAMGGFzc2V0c1EBHHJlc2VydmXoDHhjbV0BQEluaXRpYXRlVGVsZXBvcnQBAAwYYXNzZXRzUQEQZGVzdOgMeGNtXQE0UmVwb3J0SG9sZGluZwEACDRyZXNwb25zZV9pbmZvRQEYYXNzZXRzUQEwQnV5RXhlY3V0aW9uAQAIEGZlZXMdATB3ZWlnaHRfbGltaXRVATRSZWZ1bmRTdXJwbHVzAQEFPFNldEVycm9ySGFuZGxlcgEEWQEALFNldEFwcGVuZGl4AQRZAQAoQ2xlYXJFcnJvcgEBBShDbGFpbUFzc2V0AQAIGGFzc2V0cyEBGHRpY2tldOgQVHJhcAEBA0BTdWJzY3JpYmVWZXJzaW9uAQAIIHF1ZXJ5X2lkCExtYXhfcmVzcG9uc2Vfd2VpZ2h0GEhVbnN1YnNjcmliZVZlcnNpb24BAQUkQnVybkFzc2V0AQQdAQAsRXhwZWN0QXNzZXQBBB0BADBFeHBlY3RPcmlnaW4BBugsRXhwZWN0RXJyb3IBBiUBUEV4cGVjdFRyYW5zYWN0U3RhdHVzAQIMHFN1Y2Nlc3MBAQUURXJyb3IBBQA4VHJ1bmNhdGVkRXJyb3IBBQAsUXVlcnlQYWxsZXQBAAgsbW9kdWxlX25hbWUkNHJlc3BvbnNlX2luZm9FATBFeHBlY3RQYWxsZXQBABQUaW5kZXgEEG5hbWUkLG1vZHVsZV9uYW1lJCxjcmF0ZV9tYWpvcgQ8bWluX2NyYXRlX21pbm9yBFBSZXBvcnRUcmFuc2FjdFN0YXR1cwEADCxkZXN0aW5hdGlvbuggcXVlcnlfaWQIKG1heF93ZWlnaHQYTENsZWFyVHJhbnNhY3RTdGF0dXMBAQU8VW5pdmVyc2FsT3JpZ2luAQIoJFBhcmFjaGFpbgEBAixBY2NvdW50SWQzMgEACBxuZXR3b3JrtAhpZCA4QWNjb3VudEluZGV4NjQBAAgcbmV0d29ya7QUaW5kZXgIMEFjY291bnRLZXkyMAEACBxuZXR3b3JrtAxrZXm4OFBhbGxldEluc3RhbmNlAQECMEdlbmVyYWxJbmRleAEBAyhHZW5lcmFsS2V5AQAIGGxlbmd0aAQQZGF0YSAkT25seUNoaWxkAQEFJFBsdXJhbGl0eQEACAhpZLwQcGFydMA8R2xvYmFsQ29uc2Vuc3VzAQIsJEJ5R2VuZXNpcwEFAYAYQnlGb3JrAQAIMGJsb2NrX251bWJlcggoYmxvY2tfaGFzaCAgUG9sa2Fkb3QBAQUYS3VzYW1hAQEFHFdlc3RlbmQBAQUYUm9jb2NvAQEFGFdvY29jbwEBBSBFdGhlcmV1bQEABCBjaGFpbl9pZAgsQml0Y29pbkNvcmUBAQUsQml0Y29pbkNhc2gBAQVAUG9sa2Fkb3RCdWxsZXRpbgEBBTRFeHBvcnRNZXNzYWdlAQAMHG5ldHdvcmuwLGRlc3RpbmF0aW9u5Ax4Y21dASRMb2NrQXNzZXQBAAgUYXNzZXQdASB1bmxvY2tlcugsVW5sb2NrQXNzZXQBAAgUYXNzZXQdARh0YXJnZXToOE5vdGVVbmxvY2thYmxlAQAIFGFzc2V0HQEUb3duZXLoNFJlcXVlc3RVbmxvY2sBAAgUYXNzZXQdARhsb2NrZXLoLFNldEZlZXNNb2RlAQAEMGppdF93aXRoZHJhdxQgU2V0VG9waWMBBQGAKENsZWFyVG9waWMBAQUsQWxpYXNPcmlnaW4BAAgccGFyZW50cwQgaW50ZXJpb3LkPFVucGFpZEV4ZWN1dGlvbgEACDB3ZWlnaHRfbGltaXRVATBjaGVja19vcmlnaW49AQRZAQACEAxBbnkBAQUUTmFtZWQBBQAgUG9sa2Fkb3QBAQUYS3VzYW1hAQEFAigQVW5pdAEBBRROYW1lZAEFABRJbmRleAEBAiRFeGVjdXRpdmUBAQUkVGVjaG5pY2FsAQEFLExlZ2lzbGF0aXZlAQEFIEp1ZGljaWFsAQEFHERlZmVuc2UBAQU4QWRtaW5pc3RyYXRpb24BAQUgVHJlYXN1cnkBAQUCJCRQYXJhY2hhaW4BAQIsQWNjb3VudElkMzIBAAgcbmV0d29ya2EBCGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrYQEUaW5kZXgIMEFjY291bnRLZXkyMAEACBxuZXR3b3JrYQEMa2V5uDhQYWxsZXRJbnN0YW5jZQEBAjBHZW5lcmFsSW5kZXgBAQMoR2VuZXJhbEtleQEFACRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkZQEQcGFydMACJBBIZXJlAQEFCFgxAQIkJFBhcmFjaGFpbgEBAixBY2NvdW50SWQzMgEACBxuZXR3b3JrYQEIaWQgOEFjY291bnRJbmRleDY0AQAIHG5ldHdvcmthARRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmthAQxrZXm4OFBhbGxldEluc3RhbmNlAQECMEdlbmVyYWxJbmRleAEBAyhHZW5lcmFsS2V5AQUAJE9ubHlDaGlsZAEBBSRQbHVyYWxpdHkBAAgIaWRlARBwYXJ0wAhYMgEEaQEBCAhYMwEEaQEBDAhYNAEEaQEBEAhYNQEEaQEBFAhYNgEEaQEBGAhYNwEEaQEBHAhYOAEEaQEBIAAIHHBhcmVudHMEIGludGVyaW9ybQECCCBDb25jcmV0ZQEACBxwYXJlbnRzBCBpbnRlcmlvcm0BIEFic3RyYWN0AQUAAhwkVW5kZWZpbmVkAQEFFEluZGV4AQEDGEFycmF5NAEFARAYQXJyYXk4AQUBIBxBcnJheTE2AQUBQBxBcnJheTMyAQUBgBBCbG9iAQUAAgggRnVuZ2libGUBAQMsTm9uRnVuZ2libGUBAhwkVW5kZWZpbmVkAQEFFEluZGV4AQEDGEFycmF5NAEFARAYQXJyYXk4AQUBIBxBcnJheTE2AQUBQBxBcnJheTMyAQUBgBBCbG9iAQUAAAgIaWR1AQxmdW59AQSBAQACCCBDb25jcmV0ZQEACBxwYXJlbnRzBCBpbnRlcmlvcuQgQWJzdHJhY3QBBQGAAAgIaWSJAQxmdW4ZAQSNAQACDAhWMgEEgQEACFYzAQSNAQAIVjQBBB0BAAIMCFYyAQAIHHBhcmVudHMEIGludGVyaW9ybQEIVjMBAAgccGFyZW50cwQgaW50ZXJpb3LkCFY0AQAIHHBhcmVudHMEIGludGVyaW9y5AJgJEF0dGVtcHRlZAEABBxvdXRjb21lCQEQU2VudAEAEBhvcmlnaW7oLGRlc3RpbmF0aW9u6BxtZXNzYWdlXQEobWVzc2FnZV9pZCBIVW5leHBlY3RlZFJlc3BvbnNlAQAIGG9yaWdpbuggcXVlcnlfaWQINFJlc3BvbnNlUmVhZHkBAAggcXVlcnlfaWQIIHJlc3BvbnNlOQEgTm90aWZpZWQBAAwgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleARATm90aWZ5T3ZlcndlaWdodAEAFCBxdWVyeV9pZAgwcGFsbGV0X2luZGV4BChjYWxsX2luZGV4BDRhY3R1YWxfd2VpZ2h0GExtYXhfYnVkZ2V0ZWRfd2VpZ2h0GExOb3RpZnlEaXNwYXRjaEVycm9yAQAMIHF1ZXJ5X2lkCDBwYWxsZXRfaW5kZXgEKGNhbGxfaW5kZXgESE5vdGlmeURlY29kZUZhaWxlZAEADCBxdWVyeV9pZAgwcGFsbGV0X2luZGV4BChjYWxsX2luZGV4BEBJbnZhbGlkUmVzcG9uZGVyAQAMGG9yaWdpbuggcXVlcnlfaWQIRGV4cGVjdGVkX2xvY2F0aW9uPQFcSW52YWxpZFJlc3BvbmRlclZlcnNpb24BAAgYb3JpZ2lu6CBxdWVyeV9pZAg0UmVzcG9uc2VUYWtlbgEABCBxdWVyeV9pZAg0QXNzZXRzVHJhcHBlZAEADBBoYXNoIBhvcmlnaW7oGGFzc2V0c5UBVFZlcnNpb25DaGFuZ2VOb3RpZmllZAEAECxkZXN0aW5hdGlvbugYcmVzdWx0BBBjb3N0IQEobWVzc2FnZV9pZCBcU3VwcG9ydGVkVmVyc2lvbkNoYW5nZWQBAAggbG9jYXRpb27oHHZlcnNpb24EUE5vdGlmeVRhcmdldFNlbmRGYWlsAQAMIGxvY2F0aW9u6CBxdWVyeV9pZAgUZXJyb3IFAWROb3RpZnlUYXJnZXRNaWdyYXRpb25GYWlsAQAIIGxvY2F0aW9umQEgcXVlcnlfaWQIVEludmFsaWRRdWVyaWVyVmVyc2lvbgEACBhvcmlnaW7oIHF1ZXJ5X2lkCDhJbnZhbGlkUXVlcmllcgEAEBhvcmlnaW7oIHF1ZXJ5X2lkCEBleHBlY3RlZF9xdWVyaWVy6FBtYXliZV9hY3R1YWxfcXVlcmllcj0BUFZlcnNpb25Ob3RpZnlTdGFydGVkAQAMLGRlc3RpbmF0aW9u6BBjb3N0IQEobWVzc2FnZV9pZCBYVmVyc2lvbk5vdGlmeVJlcXVlc3RlZAEADCxkZXN0aW5hdGlvbugQY29zdCEBKG1lc3NhZ2VfaWQgYFZlcnNpb25Ob3RpZnlVbnJlcXVlc3RlZAEADCxkZXN0aW5hdGlvbugQY29zdCEBKG1lc3NhZ2VfaWQgIEZlZXNQYWlkAQAIGHBheWluZ+gQZmVlcyEBNEFzc2V0c0NsYWltZWQBAAwQaGFzaCAYb3JpZ2lu6Bhhc3NldHOVAWBWZXJzaW9uTWlncmF0aW9uRmluaXNoZWQBAAQcdmVyc2lvbgQCDDRJbnZhbGlkRm9ybWF0AQUBgEhVbnN1cHBvcnRlZFZlcnNpb24BBQGAQEV4ZWN1dGVkRG93bndhcmQBAwggCQECDBBIZXJlAQEFGFBhcmVudAEBBRxTaWJsaW5nAQECAhgkQmFkRm9ybWF0AQEFHENvcnJ1cHQBAQUsVW5zdXBwb3J0ZWQBAQUoT3ZlcndlaWdodAEACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgUWWllbGQBAQVEU3RhY2tMaW1pdFJlYWNoZWQBAQUCEEBQcm9jZXNzaW5nRmFpbGVkAQAMCGlkIBhvcmlnaW6lARRlcnJvcqkBJFByb2Nlc3NlZAEAEAhpZCAYb3JpZ2lupQEsd2VpZ2h0X3VzZWQYHHN1Y2Nlc3MUSE92ZXJ3ZWlnaHRFbnF1ZXVlZAEAEAhpZCAYb3JpZ2lupQEocGFnZV9pbmRleAQ0bWVzc2FnZV9pbmRleAQoUGFnZVJlYXBlZAEACBhvcmlnaW6lARRpbmRleAQBBQexAZQCGEBCYXRjaEludGVycnVwdGVkAQAIFGluZGV4BBRlcnJvcpQ4QmF0Y2hDb21wbGV0ZWQBAQVgQmF0Y2hDb21wbGV0ZWRXaXRoRXJyb3JzAQEFNEl0ZW1Db21wbGV0ZWQBAQUoSXRlbUZhaWxlZAEABBRlcnJvcpQwRGlzcGF0Y2hlZEFzAQAEGHJlc3VsdLUBAAgYaGVpZ2h0BBRpbmRleAQCECxOZXdNdWx0aXNpZwEADCRhcHByb3ZpbmcAIG11bHRpc2lnACRjYWxsX2hhc2ggQE11bHRpc2lnQXBwcm92YWwBABAkYXBwcm92aW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIEBNdWx0aXNpZ0V4ZWN1dGVkAQAUJGFwcHJvdmluZwAkdGltZXBvaW50vQEgbXVsdGlzaWcAJGNhbGxfaGFzaCAYcmVzdWx0tQFETXVsdGlzaWdDYW5jZWxsZWQBABAoY2FuY2VsbGluZwAkdGltZXBvaW50vQEgbXVsdGlzaWcAJGNhbGxfaGFzaCACHAxBbnkBAQUsTm9uVHJhbnNmZXIBAQUsQ2FuY2VsUHJveHkBAQUYQXNzZXRzAQEFKEFzc2V0T3duZXIBAQUwQXNzZXRNYW5hZ2VyAQEFIENvbGxhdG9yAQEFAhQ0UHJveHlFeGVjdXRlZAEABBhyZXN1bHS1ASxQdXJlQ3JlYXRlZAEAEBBwdXJlAAx3aG8AKHByb3h5X3R5cGXFAVBkaXNhbWJpZ3VhdGlvbl9pbmRleAQkQW5ub3VuY2VkAQAMEHJlYWwAFHByb3h5ACRjYWxsX2hhc2ggKFByb3h5QWRkZWQBABAkZGVsZWdhdG9yACRkZWxlZ2F0ZWUAKHByb3h5X3R5cGXFARRkZWxheQQwUHJveHlSZW1vdmVkAQAQJGRlbGVnYXRvcgAkZGVsZWdhdGVlAChwcm94eV90eXBlxQEUZGVsYXkEAmgcQ3JlYXRlZAEADCBhc3NldF9pZAQcY3JlYXRvcgAUb3duZXIAGElzc3VlZAEADCBhc3NldF9pZAQUb3duZXIAGGFtb3VudAgsVHJhbnNmZXJyZWQBABAgYXNzZXRfaWQEEGZyb20ACHRvABhhbW91bnQIGEJ1cm5lZAEADCBhc3NldF9pZAQUb3duZXIAHGJhbGFuY2UILFRlYW1DaGFuZ2VkAQAQIGFzc2V0X2lkBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyADBPd25lckNoYW5nZWQBAAggYXNzZXRfaWQEFG93bmVyABhGcm96ZW4BAAggYXNzZXRfaWQEDHdobwAYVGhhd2VkAQAIIGFzc2V0X2lkBAx3aG8ALEFzc2V0RnJvemVuAQAEIGFzc2V0X2lkBCxBc3NldFRoYXdlZAEABCBhc3NldF9pZAREQWNjb3VudHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQESGFjY291bnRzX2Rlc3Ryb3llZARIYWNjb3VudHNfcmVtYWluaW5nBEhBcHByb3ZhbHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQETGFwcHJvdmFsc19kZXN0cm95ZWQETGFwcHJvdmFsc19yZW1haW5pbmcESERlc3RydWN0aW9uU3RhcnRlZAEABCBhc3NldF9pZAQkRGVzdHJveWVkAQAEIGFzc2V0X2lkBDBGb3JjZUNyZWF0ZWQBAAggYXNzZXRfaWQEFG93bmVyACxNZXRhZGF0YVNldAEAFCBhc3NldF9pZAQQbmFtZSQYc3ltYm9sJCBkZWNpbWFscwQkaXNfZnJvemVuFDxNZXRhZGF0YUNsZWFyZWQBAAQgYXNzZXRfaWQEQEFwcHJvdmVkVHJhbnNmZXIBABAgYXNzZXRfaWQEGHNvdXJjZQAgZGVsZWdhdGUAGGFtb3VudAhEQXBwcm92YWxDYW5jZWxsZWQBAAwgYXNzZXRfaWQEFG93bmVyACBkZWxlZ2F0ZQBMVHJhbnNmZXJyZWRBcHByb3ZlZAEAFCBhc3NldF9pZAQUb3duZXIAIGRlbGVnYXRlACxkZXN0aW5hdGlvbgAYYW1vdW50CEhBc3NldFN0YXR1c0NoYW5nZWQBAAQgYXNzZXRfaWQEWEFzc2V0TWluQmFsYW5jZUNoYW5nZWQBAAggYXNzZXRfaWQEPG5ld19taW5fYmFsYW5jZQgcVG91Y2hlZAEADCBhc3NldF9pZAQMd2hvACRkZXBvc2l0b3IAHEJsb2NrZWQBAAggYXNzZXRfaWQEDHdobwAkRGVwb3NpdGVkAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAgkV2l0aGRyYXduAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAgEBAAGBAYAAmwcQ3JlYXRlZAEADChjb2xsZWN0aW9uBBxjcmVhdG9yABRvd25lcgAwRm9yY2VDcmVhdGVkAQAIKGNvbGxlY3Rpb24EFG93bmVyACREZXN0cm95ZWQBAAQoY29sbGVjdGlvbgQYSXNzdWVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACxUcmFuc2ZlcnJlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBBmcm9tAAh0bwAYQnVybmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyABhGcm96ZW4BAAgoY29sbGVjdGlvbgQQaXRlbQQYVGhhd2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EQENvbGxlY3Rpb25Gcm96ZW4BAAQoY29sbGVjdGlvbgRAQ29sbGVjdGlvblRoYXdlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyAEBBcHByb3ZlZFRyYW5zZmVyAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQBEQXBwcm92YWxDYW5jZWxsZWQBABAoY29sbGVjdGlvbgQQaXRlbQQUb3duZXIAIGRlbGVnYXRlAERJdGVtU3RhdHVzQ2hhbmdlZAEABChjb2xsZWN0aW9uBFRDb2xsZWN0aW9uTWV0YWRhdGFTZXQBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRDb2xsZWN0aW9uTWV0YWRhdGFDbGVhcmVkAQAEKGNvbGxlY3Rpb24ELE1ldGFkYXRhU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAIKGNvbGxlY3Rpb24EEGl0ZW0ELFJlZGVwb3NpdGVkAQAIKGNvbGxlY3Rpb24EQHN1Y2Nlc3NmdWxfaXRlbXPRATBBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQUdmFsdWUkQEF0dHJpYnV0ZUNsZWFyZWQBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSRoT3duZXJzaGlwQWNjZXB0YW5jZUNoYW5nZWQBAAgMd2hvAEBtYXliZV9jb2xsZWN0aW9u1QFYQ29sbGVjdGlvbk1heFN1cHBseVNldAEACChjb2xsZWN0aW9uBChtYXhfc3VwcGx5BDBJdGVtUHJpY2VTZXQBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIRHdoaXRlbGlzdGVkX2J1eWVy2QFASXRlbVByaWNlUmVtb3ZlZAEACChjb2xsZWN0aW9uBBBpdGVtBChJdGVtQm91Z2h0AQAUKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCBhzZWxsZXIAFGJ1eWVyAAIQGFBhbGxldAEBBTxDb2xsZWN0aW9uT3duZXIBAQUkSXRlbU93bmVyAQEFHEFjY291bnQBAQECCBBTZW5kAQEFHFJlY2VpdmUBAQUACBhhbW91bnQIJGRpcmVjdGlvbuUBBukBAggsVXNlZFRvQ2xhaW0BAQJAVHJhbnNmZXJEaXNhYmxlZAEBBQKYHENyZWF0ZWQBAAwoY29sbGVjdGlvbgQcY3JlYXRvcgAUb3duZXIAMEZvcmNlQ3JlYXRlZAEACChjb2xsZWN0aW9uBBRvd25lcgAkRGVzdHJveWVkAQAEKGNvbGxlY3Rpb24EGElzc3VlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAsVHJhbnNmZXJyZWQBABAoY29sbGVjdGlvbgQQaXRlbQQQZnJvbQAIdG8AGEJ1cm5lZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBISXRlbVRyYW5zZmVyTG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1UcmFuc2ZlclVubG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1Qcm9wZXJ0aWVzTG9ja2VkAQAQKGNvbGxlY3Rpb24EEGl0ZW0ENGxvY2tfbWV0YWRhdGEUPGxvY2tfYXR0cmlidXRlcxRAQ29sbGVjdGlvbkxvY2tlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXLZARRhZG1pbtkBHGZyZWV6ZXLZAUBUcmFuc2ZlckFwcHJvdmVkAQAUKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQAgZGVhZGxpbmXVAURBcHByb3ZhbENhbmNlbGxlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAgZGVsZWdhdGUAVEFsbEFwcHJvdmFsc0NhbmNlbGxlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBcQ29sbGVjdGlvbkNvbmZpZ0NoYW5nZWQBAAQoY29sbGVjdGlvbgRUQ29sbGVjdGlvbk1ldGFkYXRhU2V0AQAIKGNvbGxlY3Rpb24EEGRhdGEkZENvbGxlY3Rpb25NZXRhZGF0YUNsZWFyZWQBAAQoY29sbGVjdGlvbgQ8SXRlbU1ldGFkYXRhU2V0AQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkTEl0ZW1NZXRhZGF0YUNsZWFyZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQsUmVkZXBvc2l0ZWQBAAgoY29sbGVjdGlvbgRAc3VjY2Vzc2Z1bF9pdGVtc9EBMEF0dHJpYnV0ZVNldAEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQkbmFtZXNwYWNl4QFAQXR0cmlidXRlQ2xlYXJlZAEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JCRuYW1lc3BhY2XhAWxJdGVtQXR0cmlidXRlc0FwcHJvdmFsQWRkZWQBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGUAdEl0ZW1BdHRyaWJ1dGVzQXBwcm92YWxSZW1vdmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRlAGhPd25lcnNoaXBBY2NlcHRhbmNlQ2hhbmdlZAEACAx3aG8AQG1heWJlX2NvbGxlY3Rpb27VAVhDb2xsZWN0aW9uTWF4U3VwcGx5U2V0AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEdENvbGxlY3Rpb25NaW50U2V0dGluZ3NVcGRhdGVkAQAEKGNvbGxlY3Rpb24EbE5leHRDb2xsZWN0aW9uSWRJbmNyZW1lbnRlZAEABBxuZXh0X2lk1QEwSXRlbVByaWNlU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCER3aGl0ZWxpc3RlZF9idXllctkBQEl0ZW1QcmljZVJlbW92ZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQoSXRlbUJvdWdodAEAFChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZQgYc2VsbGVyABRidXllcgAcVGlwU2VudAEAFChjb2xsZWN0aW9uBBBpdGVtBBhzZW5kZXIAIHJlY2VpdmVyABhhbW91bnQILFN3YXBDcmVhdGVkAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24EMGRlc2lyZWRfaXRlbdUBFHByaWNl7QEgZGVhZGxpbmUENFN3YXBDYW5jZWxsZWQBABhIb2ZmZXJlZF9jb2xsZWN0aW9uBDBvZmZlcmVkX2l0ZW0ESGRlc2lyZWRfY29sbGVjdGlvbgQwZGVzaXJlZF9pdGVt1QEUcHJpY2XtASBkZWFkbGluZQQsU3dhcENsYWltZWQBACA8c2VudF9jb2xsZWN0aW9uBCRzZW50X2l0ZW0EPHNlbnRfaXRlbV9vd25lcgBMcmVjZWl2ZWRfY29sbGVjdGlvbgQ0cmVjZWl2ZWRfaXRlbQRMcmVjZWl2ZWRfaXRlbV9vd25lcgAUcHJpY2XtASBkZWFkbGluZQRYUHJlU2lnbmVkQXR0cmlidXRlc1NldAEADChjb2xsZWN0aW9uBBBpdGVtBCRuYW1lc3BhY2XhAUhQYWxsZXRBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQQaXRlbdUBJGF0dHJpYnV0ZfEBFHZhbHVlJAJoHENyZWF0ZWQBAAwgYXNzZXRfaWToHGNyZWF0b3IAFG93bmVyABhJc3N1ZWQBAAwgYXNzZXRfaWToFG93bmVyABhhbW91bnQILFRyYW5zZmVycmVkAQAQIGFzc2V0X2lk6BBmcm9tAAh0bwAYYW1vdW50CBhCdXJuZWQBAAwgYXNzZXRfaWToFG93bmVyABxiYWxhbmNlCCxUZWFtQ2hhbmdlZAEAECBhc3NldF9pZOgYaXNzdWVyABRhZG1pbgAcZnJlZXplcgAwT3duZXJDaGFuZ2VkAQAIIGFzc2V0X2lk6BRvd25lcgAYRnJvemVuAQAIIGFzc2V0X2lk6Ax3aG8AGFRoYXdlZAEACCBhc3NldF9pZOgMd2hvACxBc3NldEZyb3plbgEABCBhc3NldF9pZOgsQXNzZXRUaGF3ZWQBAAQgYXNzZXRfaWToREFjY291bnRzRGVzdHJveWVkAQAMIGFzc2V0X2lk6EhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwRIQXBwcm92YWxzRGVzdHJveWVkAQAMIGFzc2V0X2lk6ExhcHByb3ZhbHNfZGVzdHJveWVkBExhcHByb3ZhbHNfcmVtYWluaW5nBEhEZXN0cnVjdGlvblN0YXJ0ZWQBAAQgYXNzZXRfaWToJERlc3Ryb3llZAEABCBhc3NldF9pZOgwRm9yY2VDcmVhdGVkAQAIIGFzc2V0X2lk6BRvd25lcgAsTWV0YWRhdGFTZXQBABQgYXNzZXRfaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAEIGFzc2V0X2lk6EBBcHByb3ZlZFRyYW5zZmVyAQAQIGFzc2V0X2lk6Bhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIREFwcHJvdmFsQ2FuY2VsbGVkAQAMIGFzc2V0X2lk6BRvd25lcgAgZGVsZWdhdGUATFRyYW5zZmVycmVkQXBwcm92ZWQBABQgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAhIQXNzZXRTdGF0dXNDaGFuZ2VkAQAEIGFzc2V0X2lk6FhBc3NldE1pbkJhbGFuY2VDaGFuZ2VkAQAIIGFzc2V0X2lk6DxuZXdfbWluX2JhbGFuY2UIHFRvdWNoZWQBAAwgYXNzZXRfaWToDHdobwAkZGVwb3NpdG9yABxCbG9ja2VkAQAIIGFzc2V0X2lk6Ax3aG8AJERlcG9zaXRlZAEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIJFdpdGhkcmF3bgEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIBOgBCAMI6AgEAQIAAhgsUG9vbENyZWF0ZWQBABAcY3JlYXRvcgAccG9vbF9pZP0BMHBvb2xfYWNjb3VudAAgbHBfdG9rZW4EOExpcXVpZGl0eUFkZGVkAQAcDHdobwAcbWludF90bwAccG9vbF9pZP0BQGFtb3VudDFfcHJvdmlkZWQIQGFtb3VudDJfcHJvdmlkZWQIIGxwX3Rva2VuBDxscF90b2tlbl9taW50ZWQIQExpcXVpZGl0eVJlbW92ZWQBACAMd2hvACx3aXRoZHJhd190bwAccG9vbF9pZP0BHGFtb3VudDEIHGFtb3VudDIIIGxwX3Rva2VuBDxscF90b2tlbl9idXJuZWQIOHdpdGhkcmF3YWxfZmVlBDBTd2FwRXhlY3V0ZWQBABQMd2hvABxzZW5kX3RvACRhbW91bnRfaW4IKGFtb3VudF9vdXQIEHBhdGgFAkhTd2FwQ3JlZGl0RXhlY3V0ZWQBAAwkYW1vdW50X2luCChhbW91bnRfb3V0CBBwYXRoBQIcVG91Y2hlZAEACBxwb29sX2lk/QEMd2hvAAJUGFN5c3RlbQECHEBFeHRyaW5zaWNTdWNjZXNzAQAENGRpc3BhdGNoX2luZm9APEV4dHJpbnNpY0ZhaWxlZAEACDhkaXNwYXRjaF9lcnJvcpQ0ZGlzcGF0Y2hfaW5mb0AsQ29kZVVwZGF0ZWQBAQUoTmV3QWNjb3VudAEABBxhY2NvdW50ADRLaWxsZWRBY2NvdW50AQAEHGFjY291bnQAIFJlbWFya2VkAQAIGHNlbmRlcgAQaGFzaCBEVXBncmFkZUF1dGhvcml6ZWQBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFDxQYXJhY2hhaW5TeXN0ZW0BAhhgVmFsaWRhdGlvbkZ1bmN0aW9uU3RvcmVkAQEFZFZhbGlkYXRpb25GdW5jdGlvbkFwcGxpZWQBAARUcmVsYXlfY2hhaW5fYmxvY2tfbnVtBGxWYWxpZGF0aW9uRnVuY3Rpb25EaXNjYXJkZWQBAQVgRG93bndhcmRNZXNzYWdlc1JlY2VpdmVkAQAEFGNvdW50BGREb3dud2FyZE1lc3NhZ2VzUHJvY2Vzc2VkAQAILHdlaWdodF91c2VkGCBkbXFfaGVhZCBEVXB3YXJkTWVzc2FnZVNlbnQBAAQwbWVzc2FnZV9oYXNonCBCYWxhbmNlcwECWBxFbmRvd2VkAQAIHGFjY291bnQAMGZyZWVfYmFsYW5jZQggRHVzdExvc3QBAAgcYWNjb3VudAAYYW1vdW50CCBUcmFuc2ZlcgEADBBmcm9tAAh0bwAYYW1vdW50CChCYWxhbmNlU2V0AQAIDHdobwAQZnJlZQggUmVzZXJ2ZWQBAAgMd2hvABhhbW91bnQIKFVucmVzZXJ2ZWQBAAgMd2hvABhhbW91bnQISFJlc2VydmVSZXBhdHJpYXRlZAEAEBBmcm9tAAh0bwAYYW1vdW50CEhkZXN0aW5hdGlvbl9zdGF0dXOkHERlcG9zaXQBAAgMd2hvABhhbW91bnQIIFdpdGhkcmF3AQAIDHdobwAYYW1vdW50CBxTbGFzaGVkAQAIDHdobwAYYW1vdW50CBhNaW50ZWQBAAgMd2hvABhhbW91bnQIGEJ1cm5lZAEACAx3aG8AGGFtb3VudAgkU3VzcGVuZGVkAQAIDHdobwAYYW1vdW50CCBSZXN0b3JlZAEACAx3aG8AGGFtb3VudAggVXBncmFkZWQBAAQMd2hvABhJc3N1ZWQBAAQYYW1vdW50CCRSZXNjaW5kZWQBAAQYYW1vdW50CBhMb2NrZWQBAAgMd2hvABhhbW91bnQIIFVubG9ja2VkAQAIDHdobwAYYW1vdW50CBhGcm96ZW4BAAgMd2hvABhhbW91bnQIGFRoYXdlZAEACAx3aG8AGGFtb3VudAhMVG90YWxJc3N1YW5jZUZvcmNlZAEACAxvbGQIDG5ldwhIVHJhbnNhY3Rpb25QYXltZW50AQIESFRyYW5zYWN0aW9uRmVlUGFpZAEADAx3aG8AKGFjdHVhbF9mZWUIDHRpcAg4QXNzZXRUeFBheW1lbnQBAgg4QXNzZXRUeEZlZVBhaWQBABAMd2hvAChhY3R1YWxfZmVlCAx0aXAIIGFzc2V0X2lk6ERBc3NldFJlZnVuZEZhaWxlZAEABEhuYXRpdmVfYW1vdW50X2tlcHQIHFZlc3RpbmcBAgg4VmVzdGluZ1VwZGF0ZWQBAAgcYWNjb3VudAAgdW52ZXN0ZWQIQFZlc3RpbmdDb21wbGV0ZWQBAAQcYWNjb3VudABEQ29sbGF0b3JTZWxlY3Rpb24BAihATmV3SW52dWxuZXJhYmxlcwEABDRpbnZ1bG5lcmFibGVz9ERJbnZ1bG5lcmFibGVBZGRlZAEABChhY2NvdW50X2lkAExJbnZ1bG5lcmFibGVSZW1vdmVkAQAEKGFjY291bnRfaWQAUE5ld0Rlc2lyZWRDYW5kaWRhdGVzAQAESGRlc2lyZWRfY2FuZGlkYXRlcwRATmV3Q2FuZGlkYWN5Qm9uZAEABCxib25kX2Ftb3VudAg4Q2FuZGlkYXRlQWRkZWQBAAgoYWNjb3VudF9pZAAcZGVwb3NpdAhQQ2FuZGlkYXRlQm9uZFVwZGF0ZWQBAAgoYWNjb3VudF9pZAAcZGVwb3NpdAhAQ2FuZGlkYXRlUmVtb3ZlZAEABChhY2NvdW50X2lkAERDYW5kaWRhdGVSZXBsYWNlZAEADAxvbGQADG5ldwAcZGVwb3NpdAhoSW52YWxpZEludnVsbmVyYWJsZVNraXBwZWQBAAQoYWNjb3VudF9pZAAcU2Vzc2lvbgECBChOZXdTZXNzaW9uAQAENHNlc3Npb25faW5kZXgEJFhjbXBRdWV1ZQECBDxYY21wTWVzc2FnZVNlbnQBAAQwbWVzc2FnZV9oYXNoICxQb2xrYWRvdFhjbQECYCRBdHRlbXB0ZWQBAAQcb3V0Y29tZQkBEFNlbnQBABAYb3JpZ2lu6CxkZXN0aW5hdGlvbugcbWVzc2FnZV0BKG1lc3NhZ2VfaWQgSFVuZXhwZWN0ZWRSZXNwb25zZQEACBhvcmlnaW7oIHF1ZXJ5X2lkCDRSZXNwb25zZVJlYWR5AQAIIHF1ZXJ5X2lkCCByZXNwb25zZTkBIE5vdGlmaWVkAQAMIHF1ZXJ5X2lkCDBwYWxsZXRfaW5kZXgEKGNhbGxfaW5kZXgEQE5vdGlmeU92ZXJ3ZWlnaHQBABQgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleAQ0YWN0dWFsX3dlaWdodBhMbWF4X2J1ZGdldGVkX3dlaWdodBhMTm90aWZ5RGlzcGF0Y2hFcnJvcgEADCBxdWVyeV9pZAgwcGFsbGV0X2luZGV4BChjYWxsX2luZGV4BEhOb3RpZnlEZWNvZGVGYWlsZWQBAAwgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleARASW52YWxpZFJlc3BvbmRlcgEADBhvcmlnaW7oIHF1ZXJ5X2lkCERleHBlY3RlZF9sb2NhdGlvbj0BXEludmFsaWRSZXNwb25kZXJWZXJzaW9uAQAIGG9yaWdpbuggcXVlcnlfaWQINFJlc3BvbnNlVGFrZW4BAAQgcXVlcnlfaWQINEFzc2V0c1RyYXBwZWQBAAwQaGFzaCAYb3JpZ2lu6Bhhc3NldHOVAVRWZXJzaW9uQ2hhbmdlTm90aWZpZWQBABAsZGVzdGluYXRpb27oGHJlc3VsdAQQY29zdCEBKG1lc3NhZ2VfaWQgXFN1cHBvcnRlZFZlcnNpb25DaGFuZ2VkAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBFBOb3RpZnlUYXJnZXRTZW5kRmFpbAEADCBsb2NhdGlvbuggcXVlcnlfaWQIFGVycm9yBQFkTm90aWZ5VGFyZ2V0TWlncmF0aW9uRmFpbAEACCBsb2NhdGlvbpkBIHF1ZXJ5X2lkCFRJbnZhbGlkUXVlcmllclZlcnNpb24BAAgYb3JpZ2lu6CBxdWVyeV9pZAg4SW52YWxpZFF1ZXJpZXIBABAYb3JpZ2lu6CBxdWVyeV9pZAhAZXhwZWN0ZWRfcXVlcmllcuhQbWF5YmVfYWN0dWFsX3F1ZXJpZXI9AVBWZXJzaW9uTm90aWZ5U3RhcnRlZAEADCxkZXN0aW5hdGlvbugQY29zdCEBKG1lc3NhZ2VfaWQgWFZlcnNpb25Ob3RpZnlSZXF1ZXN0ZWQBAAwsZGVzdGluYXRpb27oEGNvc3QhAShtZXNzYWdlX2lkIGBWZXJzaW9uTm90aWZ5VW5yZXF1ZXN0ZWQBAAwsZGVzdGluYXRpb27oEGNvc3QhAShtZXNzYWdlX2lkICBGZWVzUGFpZAEACBhwYXlpbmfoEGZlZXMhATRBc3NldHNDbGFpbWVkAQAMEGhhc2ggGG9yaWdpbugYYXNzZXRzlQFgVmVyc2lvbk1pZ3JhdGlvbkZpbmlzaGVkAQAEHHZlcnNpb24EKEN1bXVsdXNYY20BAgw0SW52YWxpZEZvcm1hdAEFAYBIVW5zdXBwb3J0ZWRWZXJzaW9uAQUBgEBFeGVjdXRlZERvd253YXJkAQMIIAkBME1lc3NhZ2VRdWV1ZQECEEBQcm9jZXNzaW5nRmFpbGVkAQAMCGlkIBhvcmlnaW6lARRlcnJvcqkBJFByb2Nlc3NlZAEAEAhpZCAYb3JpZ2lupQEsd2VpZ2h0X3VzZWQYHHN1Y2Nlc3MUSE92ZXJ3ZWlnaHRFbnF1ZXVlZAEAEAhpZCAYb3JpZ2lupQEocGFnZV9pbmRleAQ0bWVzc2FnZV9pbmRleAQoUGFnZVJlYXBlZAEACBhvcmlnaW6lARRpbmRleAQcVXRpbGl0eQECGEBCYXRjaEludGVycnVwdGVkAQAIFGluZGV4BBRlcnJvcpQ4QmF0Y2hDb21wbGV0ZWQBAQVgQmF0Y2hDb21wbGV0ZWRXaXRoRXJyb3JzAQEFNEl0ZW1Db21wbGV0ZWQBAQUoSXRlbUZhaWxlZAEABBRlcnJvcpQwRGlzcGF0Y2hlZEFzAQAEGHJlc3VsdLUBIE11bHRpc2lnAQIQLE5ld011bHRpc2lnAQAMJGFwcHJvdmluZwAgbXVsdGlzaWcAJGNhbGxfaGFzaCBATXVsdGlzaWdBcHByb3ZhbAEAECRhcHByb3ZpbmcAJHRpbWVwb2ludL0BIG11bHRpc2lnACRjYWxsX2hhc2ggQE11bHRpc2lnRXhlY3V0ZWQBABQkYXBwcm92aW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIBhyZXN1bHS1AURNdWx0aXNpZ0NhbmNlbGxlZAEAEChjYW5jZWxsaW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIBRQcm94eQECFDRQcm94eUV4ZWN1dGVkAQAEGHJlc3VsdLUBLFB1cmVDcmVhdGVkAQAQEHB1cmUADHdobwAocHJveHlfdHlwZcUBUGRpc2FtYmlndWF0aW9uX2luZGV4BCRBbm5vdW5jZWQBAAwQcmVhbAAUcHJveHkAJGNhbGxfaGFzaCAoUHJveHlBZGRlZAEAECRkZWxlZ2F0b3IAJGRlbGVnYXRlZQAocHJveHlfdHlwZcUBFGRlbGF5BDBQcm94eVJlbW92ZWQBABAkZGVsZWdhdG9yACRkZWxlZ2F0ZWUAKHByb3h5X3R5cGXFARRkZWxheQQYQXNzZXRzAQJoHENyZWF0ZWQBAAwgYXNzZXRfaWQEHGNyZWF0b3IAFG93bmVyABhJc3N1ZWQBAAwgYXNzZXRfaWQEFG93bmVyABhhbW91bnQILFRyYW5zZmVycmVkAQAQIGFzc2V0X2lkBBBmcm9tAAh0bwAYYW1vdW50CBhCdXJuZWQBAAwgYXNzZXRfaWQEFG93bmVyABxiYWxhbmNlCCxUZWFtQ2hhbmdlZAEAECBhc3NldF9pZAQYaXNzdWVyABRhZG1pbgAcZnJlZXplcgAwT3duZXJDaGFuZ2VkAQAIIGFzc2V0X2lkBBRvd25lcgAYRnJvemVuAQAIIGFzc2V0X2lkBAx3aG8AGFRoYXdlZAEACCBhc3NldF9pZAQMd2hvACxBc3NldEZyb3plbgEABCBhc3NldF9pZAQsQXNzZXRUaGF3ZWQBAAQgYXNzZXRfaWQEREFjY291bnRzRGVzdHJveWVkAQAMIGFzc2V0X2lkBEhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwRIQXBwcm92YWxzRGVzdHJveWVkAQAMIGFzc2V0X2lkBExhcHByb3ZhbHNfZGVzdHJveWVkBExhcHByb3ZhbHNfcmVtYWluaW5nBEhEZXN0cnVjdGlvblN0YXJ0ZWQBAAQgYXNzZXRfaWQEJERlc3Ryb3llZAEABCBhc3NldF9pZAQwRm9yY2VDcmVhdGVkAQAIIGFzc2V0X2lkBBRvd25lcgAsTWV0YWRhdGFTZXQBABQgYXNzZXRfaWQEEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAEIGFzc2V0X2lkBEBBcHByb3ZlZFRyYW5zZmVyAQAQIGFzc2V0X2lkBBhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIREFwcHJvdmFsQ2FuY2VsbGVkAQAMIGFzc2V0X2lkBBRvd25lcgAgZGVsZWdhdGUATFRyYW5zZmVycmVkQXBwcm92ZWQBABQgYXNzZXRfaWQEFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAhIQXNzZXRTdGF0dXNDaGFuZ2VkAQAEIGFzc2V0X2lkBFhBc3NldE1pbkJhbGFuY2VDaGFuZ2VkAQAIIGFzc2V0X2lkBDxuZXdfbWluX2JhbGFuY2UIHFRvdWNoZWQBAAwgYXNzZXRfaWQEDHdobwAkZGVwb3NpdG9yABxCbG9ja2VkAQAIIGFzc2V0X2lkBAx3aG8AJERlcG9zaXRlZAEADCBhc3NldF9pZAQMd2hvABhhbW91bnQIJFdpdGhkcmF3bgEADCBhc3NldF9pZAQMd2hvABhhbW91bnQIHFVuaXF1ZXMBAmwcQ3JlYXRlZAEADChjb2xsZWN0aW9uBBxjcmVhdG9yABRvd25lcgAwRm9yY2VDcmVhdGVkAQAIKGNvbGxlY3Rpb24EFG93bmVyACREZXN0cm95ZWQBAAQoY29sbGVjdGlvbgQYSXNzdWVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACxUcmFuc2ZlcnJlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBBmcm9tAAh0bwAYQnVybmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyABhGcm96ZW4BAAgoY29sbGVjdGlvbgQQaXRlbQQYVGhhd2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EQENvbGxlY3Rpb25Gcm96ZW4BAAQoY29sbGVjdGlvbgRAQ29sbGVjdGlvblRoYXdlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyAEBBcHByb3ZlZFRyYW5zZmVyAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQBEQXBwcm92YWxDYW5jZWxsZWQBABAoY29sbGVjdGlvbgQQaXRlbQQUb3duZXIAIGRlbGVnYXRlAERJdGVtU3RhdHVzQ2hhbmdlZAEABChjb2xsZWN0aW9uBFRDb2xsZWN0aW9uTWV0YWRhdGFTZXQBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRDb2xsZWN0aW9uTWV0YWRhdGFDbGVhcmVkAQAEKGNvbGxlY3Rpb24ELE1ldGFkYXRhU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAIKGNvbGxlY3Rpb24EEGl0ZW0ELFJlZGVwb3NpdGVkAQAIKGNvbGxlY3Rpb24EQHN1Y2Nlc3NmdWxfaXRlbXPRATBBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQUdmFsdWUkQEF0dHJpYnV0ZUNsZWFyZWQBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSRoT3duZXJzaGlwQWNjZXB0YW5jZUNoYW5nZWQBAAgMd2hvAEBtYXliZV9jb2xsZWN0aW9u1QFYQ29sbGVjdGlvbk1heFN1cHBseVNldAEACChjb2xsZWN0aW9uBChtYXhfc3VwcGx5BDBJdGVtUHJpY2VTZXQBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIRHdoaXRlbGlzdGVkX2J1eWVy2QFASXRlbVByaWNlUmVtb3ZlZAEACChjb2xsZWN0aW9uBBBpdGVtBChJdGVtQm91Z2h0AQAUKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCBhzZWxsZXIAFGJ1eWVyABBOZnRzAQKYHENyZWF0ZWQBAAwoY29sbGVjdGlvbgQcY3JlYXRvcgAUb3duZXIAMEZvcmNlQ3JlYXRlZAEACChjb2xsZWN0aW9uBBRvd25lcgAkRGVzdHJveWVkAQAEKGNvbGxlY3Rpb24EGElzc3VlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAsVHJhbnNmZXJyZWQBABAoY29sbGVjdGlvbgQQaXRlbQQQZnJvbQAIdG8AGEJ1cm5lZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBISXRlbVRyYW5zZmVyTG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1UcmFuc2ZlclVubG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1Qcm9wZXJ0aWVzTG9ja2VkAQAQKGNvbGxlY3Rpb24EEGl0ZW0ENGxvY2tfbWV0YWRhdGEUPGxvY2tfYXR0cmlidXRlcxRAQ29sbGVjdGlvbkxvY2tlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXLZARRhZG1pbtkBHGZyZWV6ZXLZAUBUcmFuc2ZlckFwcHJvdmVkAQAUKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQAgZGVhZGxpbmXVAURBcHByb3ZhbENhbmNlbGxlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAgZGVsZWdhdGUAVEFsbEFwcHJvdmFsc0NhbmNlbGxlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBcQ29sbGVjdGlvbkNvbmZpZ0NoYW5nZWQBAAQoY29sbGVjdGlvbgRUQ29sbGVjdGlvbk1ldGFkYXRhU2V0AQAIKGNvbGxlY3Rpb24EEGRhdGEkZENvbGxlY3Rpb25NZXRhZGF0YUNsZWFyZWQBAAQoY29sbGVjdGlvbgQ8SXRlbU1ldGFkYXRhU2V0AQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkTEl0ZW1NZXRhZGF0YUNsZWFyZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQsUmVkZXBvc2l0ZWQBAAgoY29sbGVjdGlvbgRAc3VjY2Vzc2Z1bF9pdGVtc9EBMEF0dHJpYnV0ZVNldAEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQkbmFtZXNwYWNl4QFAQXR0cmlidXRlQ2xlYXJlZAEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JCRuYW1lc3BhY2XhAWxJdGVtQXR0cmlidXRlc0FwcHJvdmFsQWRkZWQBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGUAdEl0ZW1BdHRyaWJ1dGVzQXBwcm92YWxSZW1vdmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRlAGhPd25lcnNoaXBBY2NlcHRhbmNlQ2hhbmdlZAEACAx3aG8AQG1heWJlX2NvbGxlY3Rpb27VAVhDb2xsZWN0aW9uTWF4U3VwcGx5U2V0AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEdENvbGxlY3Rpb25NaW50U2V0dGluZ3NVcGRhdGVkAQAEKGNvbGxlY3Rpb24EbE5leHRDb2xsZWN0aW9uSWRJbmNyZW1lbnRlZAEABBxuZXh0X2lk1QEwSXRlbVByaWNlU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCER3aGl0ZWxpc3RlZF9idXllctkBQEl0ZW1QcmljZVJlbW92ZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQoSXRlbUJvdWdodAEAFChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZQgYc2VsbGVyABRidXllcgAcVGlwU2VudAEAFChjb2xsZWN0aW9uBBBpdGVtBBhzZW5kZXIAIHJlY2VpdmVyABhhbW91bnQILFN3YXBDcmVhdGVkAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24EMGRlc2lyZWRfaXRlbdUBFHByaWNl7QEgZGVhZGxpbmUENFN3YXBDYW5jZWxsZWQBABhIb2ZmZXJlZF9jb2xsZWN0aW9uBDBvZmZlcmVkX2l0ZW0ESGRlc2lyZWRfY29sbGVjdGlvbgQwZGVzaXJlZF9pdGVt1QEUcHJpY2XtASBkZWFkbGluZQQsU3dhcENsYWltZWQBACA8c2VudF9jb2xsZWN0aW9uBCRzZW50X2l0ZW0EPHNlbnRfaXRlbV9vd25lcgBMcmVjZWl2ZWRfY29sbGVjdGlvbgQ0cmVjZWl2ZWRfaXRlbQRMcmVjZWl2ZWRfaXRlbV9vd25lcgAUcHJpY2XtASBkZWFkbGluZQRYUHJlU2lnbmVkQXR0cmlidXRlc1NldAEADChjb2xsZWN0aW9uBBBpdGVtBCRuYW1lc3BhY2XhAUhQYWxsZXRBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQQaXRlbdUBJGF0dHJpYnV0ZfEBFHZhbHVlJDRGb3JlaWduQXNzZXRzAQJoHENyZWF0ZWQBAAwgYXNzZXRfaWToHGNyZWF0b3IAFG93bmVyABhJc3N1ZWQBAAwgYXNzZXRfaWToFG93bmVyABhhbW91bnQILFRyYW5zZmVycmVkAQAQIGFzc2V0X2lk6BBmcm9tAAh0bwAYYW1vdW50CBhCdXJuZWQBAAwgYXNzZXRfaWToFG93bmVyABxiYWxhbmNlCCxUZWFtQ2hhbmdlZAEAECBhc3NldF9pZOgYaXNzdWVyABRhZG1pbgAcZnJlZXplcgAwT3duZXJDaGFuZ2VkAQAIIGFzc2V0X2lk6BRvd25lcgAYRnJvemVuAQAIIGFzc2V0X2lk6Ax3aG8AGFRoYXdlZAEACCBhc3NldF9pZOgMd2hvACxBc3NldEZyb3plbgEABCBhc3NldF9pZOgsQXNzZXRUaGF3ZWQBAAQgYXNzZXRfaWToREFjY291bnRzRGVzdHJveWVkAQAMIGFzc2V0X2lk6EhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwRIQXBwcm92YWxzRGVzdHJveWVkAQAMIGFzc2V0X2lk6ExhcHByb3ZhbHNfZGVzdHJveWVkBExhcHByb3ZhbHNfcmVtYWluaW5nBEhEZXN0cnVjdGlvblN0YXJ0ZWQBAAQgYXNzZXRfaWToJERlc3Ryb3llZAEABCBhc3NldF9pZOgwRm9yY2VDcmVhdGVkAQAIIGFzc2V0X2lk6BRvd25lcgAsTWV0YWRhdGFTZXQBABQgYXNzZXRfaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAEIGFzc2V0X2lk6EBBcHByb3ZlZFRyYW5zZmVyAQAQIGFzc2V0X2lk6Bhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIREFwcHJvdmFsQ2FuY2VsbGVkAQAMIGFzc2V0X2lk6BRvd25lcgAgZGVsZWdhdGUATFRyYW5zZmVycmVkQXBwcm92ZWQBABQgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAhIQXNzZXRTdGF0dXNDaGFuZ2VkAQAEIGFzc2V0X2lk6FhBc3NldE1pbkJhbGFuY2VDaGFuZ2VkAQAIIGFzc2V0X2lk6DxuZXdfbWluX2JhbGFuY2UIHFRvdWNoZWQBAAwgYXNzZXRfaWToDHdobwAkZGVwb3NpdG9yABxCbG9ja2VkAQAIIGFzc2V0X2lk6Ax3aG8AJERlcG9zaXRlZAEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIJFdpdGhkcmF3bgEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIKFBvb2xBc3NldHMBAmgcQ3JlYXRlZAEADCBhc3NldF9pZAQcY3JlYXRvcgAUb3duZXIAGElzc3VlZAEADCBhc3NldF9pZAQUb3duZXIAGGFtb3VudAgsVHJhbnNmZXJyZWQBABAgYXNzZXRfaWQEEGZyb20ACHRvABhhbW91bnQIGEJ1cm5lZAEADCBhc3NldF9pZAQUb3duZXIAHGJhbGFuY2UILFRlYW1DaGFuZ2VkAQAQIGFzc2V0X2lkBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyADBPd25lckNoYW5nZWQBAAggYXNzZXRfaWQEFG93bmVyABhGcm96ZW4BAAggYXNzZXRfaWQEDHdobwAYVGhhd2VkAQAIIGFzc2V0X2lkBAx3aG8ALEFzc2V0RnJvemVuAQAEIGFzc2V0X2lkBCxBc3NldFRoYXdlZAEABCBhc3NldF9pZAREQWNjb3VudHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQESGFjY291bnRzX2Rlc3Ryb3llZARIYWNjb3VudHNfcmVtYWluaW5nBEhBcHByb3ZhbHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQETGFwcHJvdmFsc19kZXN0cm95ZWQETGFwcHJvdmFsc19yZW1haW5pbmcESERlc3RydWN0aW9uU3RhcnRlZAEABCBhc3NldF9pZAQkRGVzdHJveWVkAQAEIGFzc2V0X2lkBDBGb3JjZUNyZWF0ZWQBAAggYXNzZXRfaWQEFG93bmVyACxNZXRhZGF0YVNldAEAFCBhc3NldF9pZAQQbmFtZSQYc3ltYm9sJCBkZWNpbWFscwQkaXNfZnJvemVuFDxNZXRhZGF0YUNsZWFyZWQBAAQgYXNzZXRfaWQEQEFwcHJvdmVkVHJhbnNmZXIBABAgYXNzZXRfaWQEGHNvdXJjZQAgZGVsZWdhdGUAGGFtb3VudAhEQXBwcm92YWxDYW5jZWxsZWQBAAwgYXNzZXRfaWQEFG93bmVyACBkZWxlZ2F0ZQBMVHJhbnNmZXJyZWRBcHByb3ZlZAEAFCBhc3NldF9pZAQUb3duZXIAIGRlbGVnYXRlACxkZXN0aW5hdGlvbgAYYW1vdW50CEhBc3NldFN0YXR1c0NoYW5nZWQBAAQgYXNzZXRfaWQEWEFzc2V0TWluQmFsYW5jZUNoYW5nZWQBAAggYXNzZXRfaWQEPG5ld19taW5fYmFsYW5jZQgcVG91Y2hlZAEADCBhc3NldF9pZAQMd2hvACRkZXBvc2l0b3IAHEJsb2NrZWQBAAggYXNzZXRfaWQEDHdobwAkRGVwb3NpdGVkAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAgkV2l0aGRyYXduAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAg8QXNzZXRDb252ZXJzaW9uAQIYLFBvb2xDcmVhdGVkAQAQHGNyZWF0b3IAHHBvb2xfaWT9ATBwb29sX2FjY291bnQAIGxwX3Rva2VuBDhMaXF1aWRpdHlBZGRlZAEAHAx3aG8AHG1pbnRfdG8AHHBvb2xfaWT9AUBhbW91bnQxX3Byb3ZpZGVkCEBhbW91bnQyX3Byb3ZpZGVkCCBscF90b2tlbgQ8bHBfdG9rZW5fbWludGVkCEBMaXF1aWRpdHlSZW1vdmVkAQAgDHdobwAsd2l0aGRyYXdfdG8AHHBvb2xfaWT9ARxhbW91bnQxCBxhbW91bnQyCCBscF90b2tlbgQ8bHBfdG9rZW5fYnVybmVkCDh3aXRoZHJhd2FsX2ZlZQQwU3dhcEV4ZWN1dGVkAQAUDHdobwAcc2VuZF90bwAkYW1vdW50X2luCChhbW91bnRfb3V0CBBwYXRoBQJIU3dhcENyZWRpdEV4ZWN1dGVkAQAMJGFtb3VudF9pbggoYW1vdW50X291dAgQcGF0aAUCHFRvdWNoZWQBAAgccG9vbF9pZP0BDHdobwAEIAAADBRwaGFzZTQUZXZlbnQNAhh0b3BpY3MRAgQVAgAEBAEIBB0CAAEBAAgwc3BlY192ZXJzaW9uBCRzcGVjX25hbWUlAgAIJGNvZGVfaGFzaCA0Y2hlY2tfdmVyc2lvbhQGGAAQOGJhc2VfZXh0cmluc2ljGDRtYXhfZXh0cmluc2ljMQIkbWF4X3RvdGFsMQIgcmVzZXJ2ZWQxAgAMGG5vcm1hbDUCLG9wZXJhdGlvbmFsNQIkbWFuZGF0b3J5NQIADChiYXNlX2Jsb2NrGCRtYXhfYmxvY2sYJHBlcl9jbGFzczkCAAwYbm9ybWFsBCxvcGVyYXRpb25hbAQkbWFuZGF0b3J5BAAIEHJlYWQIFHdyaXRlCAMIDQEEBEkCAAAgJHNwZWNfbmFtZSUCJGltcGxfbmFtZSUCRGF1dGhvcmluZ192ZXJzaW9uBDBzcGVjX3ZlcnNpb24EMGltcGxfdmVyc2lvbgQQYXBpc00CTHRyYW5zYWN0aW9uX3ZlcnNpb24ENHN0YXRlX3ZlcnNpb24EBCQBCARVAgAEJAAACCRtc2dfY291bnQELHRvdGFsX2J5dGVzBAMIBGECBGUCAAAMNHVtcF9tc2dfY291bnQEPHVtcF90b3RhbF9ieXRlcwQ0aHJtcF9vdXRnb2luZ2kCAggUQWJvcnQBAQUcR29BaGVhZAEBBQZxAgAMOHVzZWRfYmFuZHdpZHRobQI4cGFyYV9oZWFkX2hhc2icYGNvbnN1bWVkX2dvX2FoZWFkX3NpZ25hbHUCBHkCAAAMOHVzZWRfYmFuZHdpZHRobQI4aHJtcF93YXRlcm1hcmvVAWBjb25zdW1lZF9nb19haGVhZF9zaWduYWx1AgAQLHBhcmVudF9oZWFkJExyZWxheV9wYXJlbnRfbnVtYmVyBGRyZWxheV9wYXJlbnRfc3RvcmFnZV9yb290IDBtYXhfcG92X3NpemUEAgQcUHJlc2VudAEBBQaJAgAIPHJlbWFpbmluZ19jb3VudAQ4cmVtYWluaW5nX3NpemUEABgwbWF4X2NhcGFjaXR5BDhtYXhfdG90YWxfc2l6ZQRAbWF4X21lc3NhZ2Vfc2l6ZQQkbXNnX2NvdW50BCh0b3RhbF9zaXplBCBtcWNfaGVhZJwDCASVAgSZAgAAEDBkbXFfbXFjX2hlYWQgnHJlbGF5X2Rpc3BhdGNoX3F1ZXVlX3JlbWFpbmluZ19jYXBhY2l0eZECQGluZ3Jlc3NfY2hhbm5lbHOdAjxlZ3Jlc3NfY2hhbm5lbHOdAgAITG1heF9jYW5kaWRhdGVfZGVwdGgEUGFsbG93ZWRfYW5jZXN0cnlfbGVuBAAoNG1heF9jb2RlX3NpemUESG1heF9oZWFkX2RhdGFfc2l6ZQRYbWF4X3Vwd2FyZF9xdWV1ZV9jb3VudARUbWF4X3Vwd2FyZF9xdWV1ZV9zaXplBFxtYXhfdXB3YXJkX21lc3NhZ2Vfc2l6ZQSQbWF4X3Vwd2FyZF9tZXNzYWdlX251bV9wZXJfY2FuZGlkYXRlBIhocm1wX21heF9tZXNzYWdlX251bV9wZXJfY2FuZGlkYXRlBGx2YWxpZGF0aW9uX3VwZ3JhZGVfY29vbGRvd24EYHZhbGlkYXRpb25fdXBncmFkZV9kZWxheQRQYXN5bmNfYmFja2luZ19wYXJhbXOlAgMIBCAErQIAAAgkcmVjaXBpZW50BBBkYXRhJAS1AgAACBxzZW50X2F0BAxtc2ckBL0CAAAIHHNlbnRfYXQEEGRhdGEkBMUCAAMIBMkCBM0CAAAQPHZhbGlkYXRpb25fZGF0YYUCRHJlbGF5X2NoYWluX3N0YXRlXQJEZG93bndhcmRfbWVzc2FnZXPBAkxob3Jpem9udGFsX21lc3NhZ2Vz0QICDAxGZWUBAQUQTWlzYwEBBQxBbGwBAQUADAhpZA0BGGFtb3VudAgccmVhc29uc9kCBN0CAAAICGlkDQEYYW1vdW50CATlAgAABBhhbW91bnQIBO0CAAIUCElkAQEBFEluZGV4AQEFDFJhdwEFACRBZGRyZXNzMzIBBQGAJEFkZHJlc3MyMAEFAVACCCBJbmNyZWFzZQEBBSBEZWNyZWFzZQEBBQIIJFYxQW5jaWVudAEBBQhWMgEBBQAMGGxvY2tlZAgkcGVyX2Jsb2NrCDhzdGFydGluZ19ibG9jawQEAQMAAggIVjABAQUIVjEBAQUACAx3aG8AHGRlcG9zaXQIBA0DAAMIACAEFQMAAwgoJAMICAQCCAhPawEBBSRTdXNwZW5kZWQBAQUAFCRyZWNpcGllbnQEFHN0YXRlJQM0c2lnbmFsc19leGlzdBQsZmlyc3RfaW5kZXgEKGxhc3RfaW5kZXgEBCkDAAMIBAQADERzdXNwZW5kX3RocmVzaG9sZAQ4ZHJvcF90aHJlc2hvbGQEQHJlc3VtZV90aHJlc2hvbGQEBpkBBQEIBj0DAmggT3ZlcmZsb3cBAQU0VW5pbXBsZW1lbnRlZAEBBWBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb24BAQVkVW50cnVzdGVkVGVsZXBvcnRMb2NhdGlvbgEBBURNdWx0aUxvY2F0aW9uRnVsbAEBBWhNdWx0aUxvY2F0aW9uTm90SW52ZXJ0aWJsZQEBBSRCYWRPcmlnaW4BAQU8SW52YWxpZExvY2F0aW9uAQEFNEFzc2V0Tm90Rm91bmQBAQVURmFpbGVkVG9UcmFuc2FjdEFzc2V0AQEFPE5vdFdpdGhkcmF3YWJsZQEBBUhMb2NhdGlvbkNhbm5vdEhvbGQBAQVURXhjZWVkc01heE1lc3NhZ2VTaXplAQEFWERlc3RpbmF0aW9uVW5zdXBwb3J0ZWQBAQUkVHJhbnNwb3J0AQEFKFVucm91dGFibGUBAQUwVW5rbm93bkNsYWltAQEFOEZhaWxlZFRvRGVjb2RlAQEFQE1heFdlaWdodEludmFsaWQBAQU4Tm90SG9sZGluZ0ZlZXMBAQUwVG9vRXhwZW5zaXZlAQEFEFRyYXABAQNMVW5oYW5kbGVkWGNtVmVyc2lvbgEBBUhXZWlnaHRMaW1pdFJlYWNoZWQBAQMcQmFycmllcgEBBUxXZWlnaHROb3RDb21wdXRhYmxlAQEFAwgERQMGSQMCEBBOdWxsAQEFGEFzc2V0cwEEgQEAPEV4ZWN1dGlvblJlc3VsdAEGSQMcVmVyc2lvbgEBAgIYEE51bGwBAQUYQXNzZXRzAQSNAQA8RXhlY3V0aW9uUmVzdWx0AQYlARxWZXJzaW9uAQECLFBhbGxldHNJbmZvAQQtAQA4RGlzcGF0Y2hSZXN1bHQBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAIMCFYyAQIQEE51bGwBAQUYQXNzZXRzAQSBAQA8RXhlY3V0aW9uUmVzdWx0AQZJAxxWZXJzaW9uAQECCFYzAQIYEE51bGwBAQUYQXNzZXRzAQSNAQA8RXhlY3V0aW9uUmVzdWx0AQYlARxWZXJzaW9uAQECLFBhbGxldHNJbmZvAQQtAQA4RGlzcGF0Y2hSZXN1bHQBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAhWNAECGBBOdWxsAQEFGEFzc2V0cwEEHQEAPEV4ZWN1dGlvblJlc3VsdAEGJQEcVmVyc2lvbgEBAixQYWxsZXRzSW5mbwEELQEAOERpc3BhdGNoUmVzdWx0AQIMHFN1Y2Nlc3MBAQUURXJyb3IBBQA4VHJ1bmNhdGVkRXJyb3IBBQACDBxQZW5kaW5nAQAQJHJlc3BvbmRlcpkBTG1heWJlX21hdGNoX3F1ZXJpZXI5AzBtYXliZV9ub3RpZnlBAxx0aW1lb3V0BDxWZXJzaW9uTm90aWZpZXIBAAgYb3JpZ2lumQEkaXNfYWN0aXZlFBRSZWFkeQEACCByZXNwb25zZVkDCGF0BAMIBJkBAwwIGAQDCJkBBARpAwAGJAIQXE1pZ3JhdGVTdXBwb3J0ZWRWZXJzaW9uAQEFXE1pZ3JhdGVWZXJzaW9uTm90aWZpZXJzAQEFUE5vdGlmeUN1cnJlbnRUYXJnZXRzAQYkaE1pZ3JhdGVBbmROb3RpZnlPbGRUYXJnZXRzAQEFAggIVjMBAgggQ29uY3JldGUBAAgccGFyZW50cwQgaW50ZXJpb3LkIEFic3RyYWN0AQUBgAhWNAEACBxwYXJlbnRzBCBpbnRlcmlvcuQDDAQAeQMDCLEBCASBAwAAEBhhbW91bnQIFG93bmVymQEYbG9ja2VymQEkY29uc3VtZXJzhQMDCAiZAQSNAwACCAxBbGwBAQUUQWxsT2YBAAgIaWR1AQxmdW5JAQIIIERlZmluaXRlAQSBAQAQV2lsZAECCAxBbGwBAQUUQWxsT2YBAAgIaWR1AQxmdW5JAQIIJFVubGltaXRlZAEBBRxMaW1pdGVkAQEDAnA0V2l0aGRyYXdBc3NldAEEgQEAVFJlc2VydmVBc3NldERlcG9zaXRlZAEEgQEAWFJlY2VpdmVUZWxlcG9ydGVkQXNzZXQBBIEBADRRdWVyeVJlc3BvbnNlAQAMIHF1ZXJ5X2lkCCByZXNwb25zZVEDKG1heF93ZWlnaHQINFRyYW5zZmVyQXNzZXQBAAgYYXNzZXRzhQEsYmVuZWZpY2lhcnlxAVBUcmFuc2ZlclJlc2VydmVBc3NldAEADBhhc3NldHOFARBkZXN0cQEMeGNtpQMgVHJhbnNhY3QBAAwsb3JpZ2luX3R5cGVBAVhyZXF1aXJlX3dlaWdodF9hdF9tb3N0CBBjYWxsJGRIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0AQAMGHNlbmRlcgRAbWF4X21lc3NhZ2Vfc2l6ZQQwbWF4X2NhcGFjaXR5BExIcm1wQ2hhbm5lbEFjY2VwdGVkAQAEJHJlY2lwaWVudARISHJtcENoYW5uZWxDbG9zaW5nAQAMJGluaXRpYXRvcgQYc2VuZGVyBCRyZWNpcGllbnQELENsZWFyT3JpZ2luAQEFNERlc2NlbmRPcmlnaW4BAiQQSGVyZQEBBQhYMQECJCRQYXJhY2hhaW4BAQIsQWNjb3VudElkMzIBAAgcbmV0d29ya2EBCGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrYQEUaW5kZXgIMEFjY291bnRLZXkyMAEACBxuZXR3b3JrYQEMa2V5uDhQYWxsZXRJbnN0YW5jZQEBAjBHZW5lcmFsSW5kZXgBAQMoR2VuZXJhbEtleQEFACRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkZQEQcGFydMAIWDIBBGkBAQgIWDMBBGkBAQwIWDQBBGkBARAIWDUBBGkBARQIWDYBBGkBARgIWDcBBGkBARwIWDgBBGkBASAsUmVwb3J0RXJyb3IBAAwgcXVlcnlfaWQIEGRlc3RxAUxtYXhfcmVzcG9uc2Vfd2VpZ2h0CDBEZXBvc2l0QXNzZXQBAAwYYXNzZXRzmQMobWF4X2Fzc2V0cwQsYmVuZWZpY2lhcnlxAUxEZXBvc2l0UmVzZXJ2ZUFzc2V0AQAQGGFzc2V0c5kDKG1heF9hc3NldHMEEGRlc3RxAQx4Y22lAzRFeGNoYW5nZUFzc2V0AQAIEGdpdmWZAxxyZWNlaXZlhQFcSW5pdGlhdGVSZXNlcnZlV2l0aGRyYXcBAAwYYXNzZXRzmQMccmVzZXJ2ZXEBDHhjbaUDQEluaXRpYXRlVGVsZXBvcnQBAAwYYXNzZXRzmQMQZGVzdHEBDHhjbaUDMFF1ZXJ5SG9sZGluZwEAECBxdWVyeV9pZAgQZGVzdHEBGGFzc2V0c5kDTG1heF9yZXNwb25zZV93ZWlnaHQIMEJ1eUV4ZWN1dGlvbgEACBBmZWVzgQEwd2VpZ2h0X2xpbWl0nQM0UmVmdW5kU3VycGx1cwEBBTxTZXRFcnJvckhhbmRsZXIBBKEDACxTZXRBcHBlbmRpeAEEoQMAKENsZWFyRXJyb3IBAQUoQ2xhaW1Bc3NldAEACBhhc3NldHOFARh0aWNrZXRxARBUcmFwAQEDQFN1YnNjcmliZVZlcnNpb24BAAggcXVlcnlfaWQITG1heF9yZXNwb25zZV93ZWlnaHQISFVuc3Vic2NyaWJlVmVyc2lvbgEBBQShAwACEAxBbGwBAQUUQWxsT2YBAAgIaWSJAQxmdW5JAShBbGxDb3VudGVkAQECMEFsbE9mQ291bnRlZAEADAhpZIkBDGZ1bkkBFGNvdW50BAIIIERlZmluaXRlAQSNAQAQV2lsZAECEAxBbGwBAQUUQWxsT2YBAAgIaWSJAQxmdW5JAShBbGxDb3VudGVkAQECMEFsbE9mQ291bnRlZAEADAhpZIkBDGZ1bkkBFGNvdW50BALANFdpdGhkcmF3QXNzZXQBBI0BAFRSZXNlcnZlQXNzZXREZXBvc2l0ZWQBBI0BAFhSZWNlaXZlVGVsZXBvcnRlZEFzc2V0AQSNAQA0UXVlcnlSZXNwb25zZQEAECBxdWVyeV9pZAggcmVzcG9uc2VVAyhtYXhfd2VpZ2h0GBxxdWVyaWVyPQE0VHJhbnNmZXJBc3NldAEACBhhc3NldHORASxiZW5lZmljaWFyeehQVHJhbnNmZXJSZXNlcnZlQXNzZXQBAAwYYXNzZXRzkQEQZGVzdOgMeGNttQMgVHJhbnNhY3QBAAwsb3JpZ2luX2tpbmRBAVhyZXF1aXJlX3dlaWdodF9hdF9tb3N0GBBjYWxsJGRIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0AQAMGHNlbmRlcgRAbWF4X21lc3NhZ2Vfc2l6ZQQwbWF4X2NhcGFjaXR5BExIcm1wQ2hhbm5lbEFjY2VwdGVkAQAEJHJlY2lwaWVudARISHJtcENoYW5uZWxDbG9zaW5nAQAMJGluaXRpYXRvcgQYc2VuZGVyBCRyZWNpcGllbnQELENsZWFyT3JpZ2luAQEFNERlc2NlbmRPcmlnaW4BAiQQSGVyZQEBBQhYMQECKCRQYXJhY2hhaW4BAQIsQWNjb3VudElkMzIBAAgcbmV0d29ya7QIaWQgOEFjY291bnRJbmRleDY0AQAIHG5ldHdvcmu0FGluZGV4CDBBY2NvdW50S2V5MjABAAgcbmV0d29ya7QMa2V5uDhQYWxsZXRJbnN0YW5jZQEBAjBHZW5lcmFsSW5kZXgBAQMoR2VuZXJhbEtleQEACBhsZW5ndGgEEGRhdGEgJE9ubHlDaGlsZAEBBSRQbHVyYWxpdHkBAAgIaWS8EHBhcnTAPEdsb2JhbENvbnNlbnN1cwECLCRCeUdlbmVzaXMBBQGAGEJ5Rm9yawEACDBibG9ja19udW1iZXIIKGJsb2NrX2hhc2ggIFBvbGthZG90AQEFGEt1c2FtYQEBBRxXZXN0ZW5kAQEFGFJvY29jbwEBBRhXb2NvY28BAQUgRXRoZXJldW0BAAQgY2hhaW5faWQILEJpdGNvaW5Db3JlAQEFLEJpdGNvaW5DYXNoAQEFQFBvbGthZG90QnVsbGV0aW4BAQUIWDIBBMQBCAhYMwEExAEMCFg0AQTEARAIWDUBBMQBFAhYNgEExAEYCFg3AQTEARwIWDgBBMQBICxSZXBvcnRFcnJvcgEADCxkZXN0aW5hdGlvbuggcXVlcnlfaWQIKG1heF93ZWlnaHQYMERlcG9zaXRBc3NldAEACBhhc3NldHOtAyxiZW5lZmljaWFyeehMRGVwb3NpdFJlc2VydmVBc3NldAEADBhhc3NldHOtAxBkZXN06Ax4Y221AzRFeGNoYW5nZUFzc2V0AQAMEGdpdmWtAxB3YW50kQEcbWF4aW1hbBRcSW5pdGlhdGVSZXNlcnZlV2l0aGRyYXcBAAwYYXNzZXRzrQMccmVzZXJ2ZegMeGNttQNASW5pdGlhdGVUZWxlcG9ydAEADBhhc3NldHOtAxBkZXN06Ax4Y221AzRSZXBvcnRIb2xkaW5nAQAINHJlc3BvbnNlX2luZm9FARhhc3NldHOtAzBCdXlFeGVjdXRpb24BAAgQZmVlc40BMHdlaWdodF9saW1pdFUBNFJlZnVuZFN1cnBsdXMBAQU8U2V0RXJyb3JIYW5kbGVyAQSxAwAsU2V0QXBwZW5kaXgBBLEDAChDbGVhckVycm9yAQEFKENsYWltQXNzZXQBAAgYYXNzZXRzkQEYdGlja2V06BBUcmFwAQEDQFN1YnNjcmliZVZlcnNpb24BAAggcXVlcnlfaWQITG1heF9yZXNwb25zZV93ZWlnaHQYSFVuc3Vic2NyaWJlVmVyc2lvbgEBBSRCdXJuQXNzZXQBBI0BACxFeHBlY3RBc3NldAEEjQEAMEV4cGVjdE9yaWdpbgEG6CxFeHBlY3RFcnJvcgEGJQFQRXhwZWN0VHJhbnNhY3RTdGF0dXMBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFACxRdWVyeVBhbGxldAEACCxtb2R1bGVfbmFtZSQ0cmVzcG9uc2VfaW5mb0UBMEV4cGVjdFBhbGxldAEAFBRpbmRleAQQbmFtZSQsbW9kdWxlX25hbWUkLGNyYXRlX21ham9yBDxtaW5fY3JhdGVfbWlub3IEUFJlcG9ydFRyYW5zYWN0U3RhdHVzAQAMLGRlc3RpbmF0aW9u6CBxdWVyeV9pZAgobWF4X3dlaWdodBhMQ2xlYXJUcmFuc2FjdFN0YXR1cwEBBTxVbml2ZXJzYWxPcmlnaW4BAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFNEV4cG9ydE1lc3NhZ2UBAAwcbmV0d29ya7AsZGVzdGluYXRpb27kDHhjbbUDJExvY2tBc3NldAEACBRhc3NldI0BIHVubG9ja2Vy6CxVbmxvY2tBc3NldAEACBRhc3NldI0BGHRhcmdldOg4Tm90ZVVubG9ja2FibGUBAAgUYXNzZXSNARRvd25lcug0UmVxdWVzdFVubG9jawEACBRhc3NldI0BGGxvY2tlcugsU2V0RmVlc01vZGUBAAQwaml0X3dpdGhkcmF3FCBTZXRUb3BpYwEFAYAoQ2xlYXJUb3BpYwEBBSxBbGlhc09yaWdpbgEACBxwYXJlbnRzBCBpbnRlcmlvcuQ8VW5wYWlkRXhlY3V0aW9uAQAIMHdlaWdodF9saW1pdFUBMGNoZWNrX29yaWdpbj0BBLEDAAIMCFYyAQShAwAIVjMBBLEDAAhWNAEEWQEAAhAgVGVsZXBvcnQBAQUwTG9jYWxSZXNlcnZlAQEFSERlc3RpbmF0aW9uUmVzZXJ2ZQEBBTRSZW1vdGVSZXNlcnZlAQIMCFYyAQAIHHBhcmVudHMEIGludGVyaW9ybQEIVjMBAAgccGFyZW50cwQgaW50ZXJpb3LkCFY0AQAIHHBhcmVudHMEIGludGVyaW9y5AAITGRlbGl2ZXJ5X2ZlZV9mYWN0b3IIMGlzX2Nvbmdlc3RlZBQACBBwcmV2pQEQbmV4dKUBBsUDABgUYmVnaW4EDGVuZAQUY291bnQEQHJlYWR5X25laWdoYm91cnPJAzRtZXNzYWdlX2NvdW50CBBzaXplCAMIpQEEABgkcmVtYWluaW5nBDhyZW1haW5pbmdfc2l6ZQQsZmlyc3RfaW5kZXgEFGZpcnN0BBBsYXN0BBBoZWFwJAIsGHJlbWFyawEABBhyZW1hcmskOHNldF9oZWFwX3BhZ2VzAQAEFHBhZ2VzCCBzZXRfY29kZQEABBBjb2RlJFxzZXRfY29kZV93aXRob3V0X2NoZWNrcwEABBBjb2RlJCxzZXRfc3RvcmFnZQEABBRpdGVtc1kCMGtpbGxfc3RvcmFnZQEABBBrZXlzXQIsa2lsbF9wcmVmaXgBAAgYcHJlZml4JBxzdWJrZXlzBERyZW1hcmtfd2l0aF9ldmVudAEABBhyZW1hcmskRGF1dGhvcml6ZV91cGdyYWRlAQAEJGNvZGVfaGFzaCCAYXV0aG9yaXplX3VwZ3JhZGVfd2l0aG91dF9jaGVja3MBAAQkY29kZV9oYXNoIGBhcHBseV9hdXRob3JpemVkX3VwZ3JhZGUBAAQQY29kZSQCEExzZXRfdmFsaWRhdGlvbl9kYXRhAQAEEGRhdGHVAmBzdWRvX3NlbmRfdXB3YXJkX21lc3NhZ2UBAAQcbWVzc2FnZSREYXV0aG9yaXplX3VwZ3JhZGUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFGBlbmFjdF9hdXRob3JpemVkX3VwZ3JhZGUBAAQQY29kZSQCBAxzZXQBAAQMbm93CAIkUHRyYW5zZmVyX2FsbG93X2RlYXRoAQAIEGRlc3T1AhR2YWx1ZQg4Zm9yY2VfdHJhbnNmZXIBAAwYc291cmNl9QIQZGVzdPUCFHZhbHVlCEx0cmFuc2Zlcl9rZWVwX2FsaXZlAQAIEGRlc3T1AhR2YWx1ZQgwdHJhbnNmZXJfYWxsAQAIEGRlc3T1AihrZWVwX2FsaXZlFDxmb3JjZV91bnJlc2VydmUBAAgMd2hv9QIYYW1vdW50CEB1cGdyYWRlX2FjY291bnRzAQAEDHdob/REZm9yY2Vfc2V0X2JhbGFuY2UBAAgMd2hv9QIgbmV3X2ZyZWUIbGZvcmNlX2FkanVzdF90b3RhbF9pc3N1YW5jZQEACCRkaXJlY3Rpb275AhRkZWx0YQgQYnVybgEACBR2YWx1ZQgoa2VlcF9hbGl2ZRQCGBB2ZXN0AQEFKHZlc3Rfb3RoZXIBAAQYdGFyZ2V09QI8dmVzdGVkX3RyYW5zZmVyAQAIGHRhcmdldPUCIHNjaGVkdWxlAQNUZm9yY2VfdmVzdGVkX3RyYW5zZmVyAQAMGHNvdXJjZfUCGHRhcmdldPUCIHNjaGVkdWxlAQM8bWVyZ2Vfc2NoZWR1bGVzAQAIPHNjaGVkdWxlMV9pbmRleAQ8c2NoZWR1bGUyX2luZGV4BHRmb3JjZV9yZW1vdmVfdmVzdGluZ19zY2hlZHVsZQEACBh0YXJnZXT1AjhzY2hlZHVsZV9pbmRleAQCJERzZXRfaW52dWxuZXJhYmxlcwEABAxuZXf0WHNldF9kZXNpcmVkX2NhbmRpZGF0ZXMBAAQMbWF4BEhzZXRfY2FuZGlkYWN5X2JvbmQBAAQQYm9uZAhUcmVnaXN0ZXJfYXNfY2FuZGlkYXRlAQEFMGxlYXZlX2ludGVudAEBBUBhZGRfaW52dWxuZXJhYmxlAQAEDHdobwBMcmVtb3ZlX2ludnVsbmVyYWJsZQEABAx3aG8ALHVwZGF0ZV9ib25kAQAELG5ld19kZXBvc2l0CEx0YWtlX2NhbmRpZGF0ZV9zbG90AQAIHGRlcG9zaXQIGHRhcmdldAACCCBzZXRfa2V5cwEACBBrZXlzIBRwcm9vZiQocHVyZ2Vfa2V5cwEBBQIUVHN1c3BlbmRfeGNtX2V4ZWN1dGlvbgEBBVByZXN1bWVfeGNtX2V4ZWN1dGlvbgEBBWB1cGRhdGVfc3VzcGVuZF90aHJlc2hvbGQBAAQMbmV3BFR1cGRhdGVfZHJvcF90aHJlc2hvbGQBAAQMbmV3BFx1cGRhdGVfcmVzdW1lX3RocmVzaG9sZAEABAxuZXcEAjgQc2VuZAEACBBkZXN0mQEcbWVzc2FnZbkDPHRlbGVwb3J0X2Fzc2V0cwEAEBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQRccmVzZXJ2ZV90cmFuc2Zlcl9hc3NldHMBABAQZGVzdJkBLGJlbmVmaWNpYXJ5mQEYYXNzZXRzlQE4ZmVlX2Fzc2V0X2l0ZW0EHGV4ZWN1dGUBAAgcbWVzc2FnZbkDKG1heF93ZWlnaHQYRGZvcmNlX3hjbV92ZXJzaW9uAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBGRmb3JjZV9kZWZhdWx0X3hjbV92ZXJzaW9uAQAERG1heWJlX3hjbV92ZXJzaW9u1QF4Zm9yY2Vfc3Vic2NyaWJlX3ZlcnNpb25fbm90aWZ5AQAEIGxvY2F0aW9umQGAZm9yY2VfdW5zdWJzY3JpYmVfdmVyc2lvbl9ub3RpZnkBAAQgbG9jYXRpb26ZAXxsaW1pdGVkX3Jlc2VydmVfdHJhbnNmZXJfYXNzZXRzAQAUEGRlc3SZASxiZW5lZmljaWFyeZkBGGFzc2V0c5UBOGZlZV9hc3NldF9pdGVtBDB3ZWlnaHRfbGltaXRVAVxsaW1pdGVkX3RlbGVwb3J0X2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQFAZm9yY2Vfc3VzcGVuc2lvbgEABCRzdXNwZW5kZWQUPHRyYW5zZmVyX2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQEwY2xhaW1fYXNzZXRzAQAIGGFzc2V0c5UBLGJlbmVmaWNpYXJ5mQGMdHJhbnNmZXJfYXNzZXRzX3VzaW5nX3R5cGVfYW5kX3RoZW4BABwQZGVzdJkBGGFzc2V0c5UBUGFzc2V0c190cmFuc2Zlcl90eXBlvQM4cmVtb3RlX2ZlZXNfaWR5A0hmZWVzX3RyYW5zZmVyX3R5cGW9A0hjdXN0b21feGNtX29uX2Rlc3S5AzB3ZWlnaHRfbGltaXRVAQIEUHJlcG9ydF9icmlkZ2Vfc3RhdHVzAQAIJGJyaWRnZV9pZCAwaXNfY29uZ2VzdGVkFAIIJHJlYXBfcGFnZQEACDhtZXNzYWdlX29yaWdpbqUBKHBhZ2VfaW5kZXgESGV4ZWN1dGVfb3ZlcndlaWdodAEAEDhtZXNzYWdlX29yaWdpbqUBEHBhZ2UEFGluZGV4BDB3ZWlnaHRfbGltaXQYAgwQUm9vdAEBBRhTaWduZWQBAQEQTm9uZQEBBQIIDFhjbQEACBxwYXJlbnRzBCBpbnRlcmlvcuQgUmVzcG9uc2UBAAgccGFyZW50cwQgaW50ZXJpb3LkAggUUmVsYXkBAQVAU2libGluZ1BhcmFjaGFpbgEBAgIQGHN5c3RlbQECDBBSb290AQEFGFNpZ25lZAEBARBOb25lAQEFLFBvbGthZG90WGNtAQIIDFhjbQEACBxwYXJlbnRzBCBpbnRlcmlvcuQgUmVzcG9uc2UBAAgccGFyZW50cwQgaW50ZXJpb3LkKEN1bXVsdXNYY20BAggUUmVsYXkBAQVAU2libGluZ1BhcmFjaGFpbgEBAhBWb2lkAQEFAhgUYmF0Y2gBAAQUY2FsbHOFBDRhc19kZXJpdmF0aXZlAQAIFGluZGV4BBBjYWxsgQQkYmF0Y2hfYWxsAQAEFGNhbGxzhQQsZGlzcGF0Y2hfYXMBAAgkYXNfb3JpZ2luEQQQY2FsbIEELGZvcmNlX2JhdGNoAQAEFGNhbGxzhQQsd2l0aF93ZWlnaHQBAAgQY2FsbIEEGHdlaWdodBgGvQECEFBhc19tdWx0aV90aHJlc2hvbGRfMQEACERvdGhlcl9zaWduYXRvcmllc/QQY2FsbIEEIGFzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEEGNhbGyBBChtYXhfd2VpZ2h0GEBhcHByb3ZlX2FzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEJGNhbGxfaGFzaCAobWF4X3dlaWdodBg8Y2FuY2VsX2FzX211bHRpAQAQJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0JHRpbWVwb2ludL0BJGNhbGxfaGFzaCAGxQECKBRwcm94eQEADBByZWFs9QJAZm9yY2VfcHJveHlfdHlwZSEEEGNhbGyBBCRhZGRfcHJveHkBAAwgZGVsZWdhdGX1Aihwcm94eV90eXBlxQEUZGVsYXkEMHJlbW92ZV9wcm94eQEADCBkZWxlZ2F0ZfUCKHByb3h5X3R5cGXFARRkZWxheQQ4cmVtb3ZlX3Byb3hpZXMBAQUsY3JlYXRlX3B1cmUBAAwocHJveHlfdHlwZcUBFGRlbGF5BBRpbmRleAQka2lsbF9wdXJlAQAUHHNwYXduZXL1Aihwcm94eV90eXBlxQEUaW5kZXgEGGhlaWdodAQkZXh0X2luZGV4BCBhbm5vdW5jZQEACBByZWFs9QIkY2FsbF9oYXNoIExyZW1vdmVfYW5ub3VuY2VtZW50AQAIEHJlYWz1AiRjYWxsX2hhc2ggTHJlamVjdF9hbm5vdW5jZW1lbnQBAAggZGVsZWdhdGX1AiRjYWxsX2hhc2ggPHByb3h5X2Fubm91bmNlZAEAECBkZWxlZ2F0ZfUCEHJlYWz1AkBmb3JjZV9wcm94eV90eXBlIQQQY2FsbIEEAoAYY3JlYXRlAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWQEFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWQEQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWQERGRlc3Ryb3lfYXBwcm92YWxzAQAECGlkBDhmaW5pc2hfZGVzdHJveQEABAhpZAQQbWludAEADAhpZAQsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWQEDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWQEGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZAQYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZAQYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlkBAx3aG/1AhB0aGF3AQAICGlkBAx3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWQEKHRoYXdfYXNzZXQBAAQIaWQESHRyYW5zZmVyX293bmVyc2hpcAEACAhpZAQUb3duZXL1AiBzZXRfdGVhbQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZARIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlkBEhmb3JjZV9hc3NldF9zdGF0dXMBACAIaWQEFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZAQgZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZAQgZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWQEGHJlZnVuZAEACAhpZAQoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlkBCxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWQEDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZAQMd2hv9QIUYmxvY2sBAAgIaWQEDHdob/UCAAwUaXRlbXMEOGl0ZW1fbWV0YWRhdGFzBChhdHRyaWJ1dGVzBAb1AgYIAmgYY3JlYXRlAQAIKGNvbGxlY3Rpb24EFGFkbWlu9QIwZm9yY2VfY3JlYXRlAQAMKGNvbGxlY3Rpb24EFG93bmVy9QIwZnJlZV9ob2xkaW5nFBxkZXN0cm95AQAIKGNvbGxlY3Rpb24EHHdpdG5lc3MtBBBtaW50AQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVy9QIQYnVybgEADChjb2xsZWN0aW9uBBBpdGVtBCxjaGVja19vd25lcjEEIHRyYW5zZmVyAQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRlc3T1AiRyZWRlcG9zaXQBAAgoY29sbGVjdGlvbgQUaXRlbXPRARhmcmVlemUBAAgoY29sbGVjdGlvbgQQaXRlbQQQdGhhdwEACChjb2xsZWN0aW9uBBBpdGVtBERmcmVlemVfY29sbGVjdGlvbgEABChjb2xsZWN0aW9uBDx0aGF3X2NvbGxlY3Rpb24BAAQoY29sbGVjdGlvbgRIdHJhbnNmZXJfb3duZXJzaGlwAQAIKGNvbGxlY3Rpb24EJG5ld19vd25lcvUCIHNldF90ZWFtAQAQKGNvbGxlY3Rpb24EGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCQGFwcHJvdmVfdHJhbnNmZXIBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AjxjYW5jZWxfYXBwcm92YWwBAAwoY29sbGVjdGlvbgQQaXRlbQRQbWF5YmVfY2hlY2tfZGVsZWdhdGUxBERmb3JjZV9pdGVtX3N0YXR1cwEAHChjb2xsZWN0aW9uBBRvd25lcvUCGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCMGZyZWVfaG9sZGluZxQkaXNfZnJvemVuFDRzZXRfYXR0cmlidXRlAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VAQxrZXkkFHZhbHVlJDxjbGVhcl9hdHRyaWJ1dGUBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQwc2V0X21ldGFkYXRhAQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ4Y2xlYXJfbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQaXRlbQRcc2V0X2NvbGxlY3Rpb25fbWV0YWRhdGEBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRjbGVhcl9jb2xsZWN0aW9uX21ldGFkYXRhAQAEKGNvbGxlY3Rpb24EUHNldF9hY2NlcHRfb3duZXJzaGlwAQAEQG1heWJlX2NvbGxlY3Rpb27VAWRzZXRfY29sbGVjdGlvbl9tYXhfc3VwcGx5AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEJHNldF9wcmljZQEAEChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZTUERHdoaXRlbGlzdGVkX2J1eWVyMQQgYnV5X2l0ZW0BAAwoY29sbGVjdGlvbgQQaXRlbQQkYmlkX3ByaWNlCAIMGElzc3VlcgEBBRhQdWJsaWMBAQUgSG9sZGVyT2YBAQIAFCRtaW50X3R5cGU9BBRwcmljZTUELHN0YXJ0X2Jsb2Nr1QEkZW5kX2Jsb2Nr1QFUZGVmYXVsdF9pdGVtX3NldHRpbmdzCAAMIHNldHRpbmdzCChtYXhfc3VwcGx51QE0bWludF9zZXR0aW5nc0EEAAw4aXRlbV9tZXRhZGF0YXMEMGl0ZW1fY29uZmlncwQoYXR0cmlidXRlcwQACChvd25lZF9pdGVt1QEobWludF9wcmljZTUEBk0EABAoY29sbGVjdGlvbgQQaXRlbQQgcmVjZWl2ZXIAGGFtb3VudAgEVQQAABwoY29sbGVjdGlvbgQQaXRlbQQoYXR0cmlidXRlc1kCIG1ldGFkYXRhJDBvbmx5X2FjY291bnTZASBkZWFkbGluZQQobWludF9wcmljZTUEBQEBAQUBBQECDBxFZDI1NTE5AQUBAQEcU3IyNTUxOQEFAQEBFEVjZHNhAQUBBQEAFChjb2xsZWN0aW9uBBBpdGVtBChhdHRyaWJ1dGVzWQIkbmFtZXNwYWNl4QEgZGVhZGxpbmUEApwYY3JlYXRlAQAIFGFkbWlu9QIYY29uZmlnRQQwZm9yY2VfY3JlYXRlAQAIFG93bmVy9QIYY29uZmlnRQQcZGVzdHJveQEACChjb2xsZWN0aW9uBBx3aXRuZXNzSQQQbWludAEAEChjb2xsZWN0aW9uBBBpdGVtBBxtaW50X3Rv9QIwd2l0bmVzc19kYXRhUQQoZm9yY2VfbWludAEAEChjb2xsZWN0aW9uBBBpdGVtBBxtaW50X3Rv9QIsaXRlbV9jb25maWcIEGJ1cm4BAAgoY29sbGVjdGlvbgQQaXRlbQQgdHJhbnNmZXIBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGVzdPUCJHJlZGVwb3NpdAEACChjb2xsZWN0aW9uBBRpdGVtc9EBSGxvY2tfaXRlbV90cmFuc2ZlcgEACChjb2xsZWN0aW9uBBBpdGVtBFB1bmxvY2tfaXRlbV90cmFuc2ZlcgEACChjb2xsZWN0aW9uBBBpdGVtBDxsb2NrX2NvbGxlY3Rpb24BAAgoY29sbGVjdGlvbgQ0bG9ja19zZXR0aW5ncwhIdHJhbnNmZXJfb3duZXJzaGlwAQAIKGNvbGxlY3Rpb24EJG5ld19vd25lcvUCIHNldF90ZWFtAQAQKGNvbGxlY3Rpb24EGGlzc3VlcjEEFGFkbWluMQQcZnJlZXplcjEEWGZvcmNlX2NvbGxlY3Rpb25fb3duZXIBAAgoY29sbGVjdGlvbgQUb3duZXL1Alxmb3JjZV9jb2xsZWN0aW9uX2NvbmZpZwEACChjb2xsZWN0aW9uBBhjb25maWdFBEBhcHByb3ZlX3RyYW5zZmVyAQAQKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QI4bWF5YmVfZGVhZGxpbmXVATxjYW5jZWxfYXBwcm92YWwBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AnBjbGVhcl9hbGxfdHJhbnNmZXJfYXBwcm92YWxzAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUGxvY2tfaXRlbV9wcm9wZXJ0aWVzAQAQKGNvbGxlY3Rpb24EEGl0ZW0ENGxvY2tfbWV0YWRhdGEUPGxvY2tfYXR0cmlidXRlcxQ0c2V0X2F0dHJpYnV0ZQEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JBR2YWx1ZSRMZm9yY2Vfc2V0X2F0dHJpYnV0ZQEAGBhzZXRfYXPZAShjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JBR2YWx1ZSQ8Y2xlYXJfYXR0cmlidXRlAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VASRuYW1lc3BhY2XhAQxrZXkkXGFwcHJvdmVfaXRlbV9hdHRyaWJ1dGVzAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QJ8Y2FuY2VsX2l0ZW1fYXR0cmlidXRlc19hcHByb3ZhbAEAEChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCHHdpdG5lc3MEMHNldF9tZXRhZGF0YQEADChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJDhjbGVhcl9tZXRhZGF0YQEACChjb2xsZWN0aW9uBBBpdGVtBFxzZXRfY29sbGVjdGlvbl9tZXRhZGF0YQEACChjb2xsZWN0aW9uBBBkYXRhJGRjbGVhcl9jb2xsZWN0aW9uX21ldGFkYXRhAQAEKGNvbGxlY3Rpb24EUHNldF9hY2NlcHRfb3duZXJzaGlwAQAEQG1heWJlX2NvbGxlY3Rpb27VAWRzZXRfY29sbGVjdGlvbl9tYXhfc3VwcGx5AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEUHVwZGF0ZV9taW50X3NldHRpbmdzAQAIKGNvbGxlY3Rpb24ENG1pbnRfc2V0dGluZ3NBBCRzZXRfcHJpY2UBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2U1BER3aGl0ZWxpc3RlZF9idXllcjEEIGJ1eV9pdGVtAQAMKGNvbGxlY3Rpb24EEGl0ZW0EJGJpZF9wcmljZQggcGF5X3RpcHMBAAQQdGlwc1kELGNyZWF0ZV9zd2FwAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24ESG1heWJlX2Rlc2lyZWRfaXRlbdUBLG1heWJlX3ByaWNl7QEgZHVyYXRpb24ELGNhbmNlbF9zd2FwAQAISG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBChjbGFpbV9zd2FwAQAUPHNlbmRfY29sbGVjdGlvbgQkc2VuZF9pdGVtBEhyZWNlaXZlX2NvbGxlY3Rpb24EMHJlY2VpdmVfaXRlbQQ0d2l0bmVzc19wcmljZe0BPG1pbnRfcHJlX3NpZ25lZAEADCRtaW50X2RhdGFdBCRzaWduYXR1cmVpBBhzaWduZXIAZHNldF9hdHRyaWJ1dGVzX3ByZV9zaWduZWQBAAwQZGF0YW0EJHNpZ25hdHVyZWkEGHNpZ25lcgACgBhjcmVhdGUBAAwIaWToFGFkbWlu9QIsbWluX2JhbGFuY2UIMGZvcmNlX2NyZWF0ZQEAEAhpZOgUb3duZXL1AjRpc19zdWZmaWNpZW50FCxtaW5fYmFsYW5jZQg0c3RhcnRfZGVzdHJveQEABAhpZOhAZGVzdHJveV9hY2NvdW50cwEABAhpZOhEZGVzdHJveV9hcHByb3ZhbHMBAAQIaWToOGZpbmlzaF9kZXN0cm95AQAECGlk6BBtaW50AQAMCGlk6CxiZW5lZmljaWFyefUCGGFtb3VudAgQYnVybgEADAhpZOgMd2hv9QIYYW1vdW50CCB0cmFuc2ZlcgEADAhpZOgYdGFyZ2V09QIYYW1vdW50CEx0cmFuc2Zlcl9rZWVwX2FsaXZlAQAMCGlk6Bh0YXJnZXT1AhhhbW91bnQIOGZvcmNlX3RyYW5zZmVyAQAQCGlk6Bhzb3VyY2X1AhBkZXN09QIYYW1vdW50CBhmcmVlemUBAAgIaWToDHdob/UCEHRoYXcBAAgIaWToDHdob/UCMGZyZWV6ZV9hc3NldAEABAhpZOgodGhhd19hc3NldAEABAhpZOhIdHJhbnNmZXJfb3duZXJzaGlwAQAICGlk6BRvd25lcvUCIHNldF90ZWFtAQAQCGlk6Bhpc3N1ZXL1AhRhZG1pbvUCHGZyZWV6ZXL1AjBzZXRfbWV0YWRhdGEBABAIaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEOGNsZWFyX21ldGFkYXRhAQAECGlk6Ehmb3JjZV9zZXRfbWV0YWRhdGEBABQIaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhRQZm9yY2VfY2xlYXJfbWV0YWRhdGEBAAQIaWToSGZvcmNlX2Fzc2V0X3N0YXR1cwEAIAhpZOgUb3duZXL1Ahhpc3N1ZXL1AhRhZG1pbvUCHGZyZWV6ZXL1AixtaW5fYmFsYW5jZQg0aXNfc3VmZmljaWVudBQkaXNfZnJvemVuFEBhcHByb3ZlX3RyYW5zZmVyAQAMCGlk6CBkZWxlZ2F0ZfUCGGFtb3VudAg8Y2FuY2VsX2FwcHJvdmFsAQAICGlk6CBkZWxlZ2F0ZfUCVGZvcmNlX2NhbmNlbF9hcHByb3ZhbAEADAhpZOgUb3duZXL1AiBkZWxlZ2F0ZfUCRHRyYW5zZmVyX2FwcHJvdmVkAQAQCGlk6BRvd25lcvUCLGRlc3RpbmF0aW9u9QIYYW1vdW50CBR0b3VjaAEABAhpZOgYcmVmdW5kAQAICGlk6ChhbGxvd19idXJuFDxzZXRfbWluX2JhbGFuY2UBAAgIaWToLG1pbl9iYWxhbmNlCCx0b3VjaF9vdGhlcgEACAhpZOgMd2hv9QIwcmVmdW5kX290aGVyAQAICGlk6Ax3aG/1AhRibG9jawEACAhpZOgMd2hv9QIE6AACGCxjcmVhdGVfcG9vbAEACBhhc3NldDHoGGFzc2V0Mug0YWRkX2xpcXVpZGl0eQEAHBhhc3NldDHoGGFzc2V0Mug8YW1vdW50MV9kZXNpcmVkCDxhbW91bnQyX2Rlc2lyZWQILGFtb3VudDFfbWluCCxhbW91bnQyX21pbggcbWludF90bwBAcmVtb3ZlX2xpcXVpZGl0eQEAGBhhc3NldDHoGGFzc2V0Mug0bHBfdG9rZW5fYnVybghMYW1vdW50MV9taW5fcmVjZWl2ZQhMYW1vdW50Ml9taW5fcmVjZWl2ZQgsd2l0aGRyYXdfdG8AcHN3YXBfZXhhY3RfdG9rZW5zX2Zvcl90b2tlbnMBABQQcGF0aHkEJGFtb3VudF9pbgg4YW1vdW50X291dF9taW4IHHNlbmRfdG8AKGtlZXBfYWxpdmUUcHN3YXBfdG9rZW5zX2Zvcl9leGFjdF90b2tlbnMBABQQcGF0aHkEKGFtb3VudF9vdXQINGFtb3VudF9pbl9tYXgIHHNlbmRfdG8AKGtlZXBfYWxpdmUUFHRvdWNoAQAIGGFzc2V0MegYYXNzZXQy6AJYGFN5c3RlbQECLBhyZW1hcmsBAAQYcmVtYXJrJDhzZXRfaGVhcF9wYWdlcwEABBRwYWdlcwggc2V0X2NvZGUBAAQQY29kZSRcc2V0X2NvZGVfd2l0aG91dF9jaGVja3MBAAQQY29kZSQsc2V0X3N0b3JhZ2UBAAQUaXRlbXNZAjBraWxsX3N0b3JhZ2UBAAQQa2V5c10CLGtpbGxfcHJlZml4AQAIGHByZWZpeCQcc3Via2V5cwREcmVtYXJrX3dpdGhfZXZlbnQBAAQYcmVtYXJrJERhdXRob3JpemVfdXBncmFkZQEABCRjb2RlX2hhc2gggGF1dGhvcml6ZV91cGdyYWRlX3dpdGhvdXRfY2hlY2tzAQAEJGNvZGVfaGFzaCBgYXBwbHlfYXV0aG9yaXplZF91cGdyYWRlAQAEEGNvZGUkPFBhcmFjaGFpblN5c3RlbQECEExzZXRfdmFsaWRhdGlvbl9kYXRhAQAEEGRhdGHVAmBzdWRvX3NlbmRfdXB3YXJkX21lc3NhZ2UBAAQcbWVzc2FnZSREYXV0aG9yaXplX3VwZ3JhZGUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFGBlbmFjdF9hdXRob3JpemVkX3VwZ3JhZGUBAAQQY29kZSQkVGltZXN0YW1wAQIEDHNldAEABAxub3cINFBhcmFjaGFpbkluZm8BAQUgQmFsYW5jZXMBAiRQdHJhbnNmZXJfYWxsb3dfZGVhdGgBAAgQZGVzdPUCFHZhbHVlCDhmb3JjZV90cmFuc2ZlcgEADBhzb3VyY2X1AhBkZXN09QIUdmFsdWUITHRyYW5zZmVyX2tlZXBfYWxpdmUBAAgQZGVzdPUCFHZhbHVlCDB0cmFuc2Zlcl9hbGwBAAgQZGVzdPUCKGtlZXBfYWxpdmUUPGZvcmNlX3VucmVzZXJ2ZQEACAx3aG/1AhhhbW91bnQIQHVwZ3JhZGVfYWNjb3VudHMBAAQMd2hv9ERmb3JjZV9zZXRfYmFsYW5jZQEACAx3aG/1AiBuZXdfZnJlZQhsZm9yY2VfYWRqdXN0X3RvdGFsX2lzc3VhbmNlAQAIJGRpcmVjdGlvbvkCFGRlbHRhCBBidXJuAQAIFHZhbHVlCChrZWVwX2FsaXZlFBxWZXN0aW5nAQIYEHZlc3QBAQUodmVzdF9vdGhlcgEABBh0YXJnZXT1Ajx2ZXN0ZWRfdHJhbnNmZXIBAAgYdGFyZ2V09QIgc2NoZWR1bGUBA1Rmb3JjZV92ZXN0ZWRfdHJhbnNmZXIBAAwYc291cmNl9QIYdGFyZ2V09QIgc2NoZWR1bGUBAzxtZXJnZV9zY2hlZHVsZXMBAAg8c2NoZWR1bGUxX2luZGV4BDxzY2hlZHVsZTJfaW5kZXgEdGZvcmNlX3JlbW92ZV92ZXN0aW5nX3NjaGVkdWxlAQAIGHRhcmdldPUCOHNjaGVkdWxlX2luZGV4BERDb2xsYXRvclNlbGVjdGlvbgECJERzZXRfaW52dWxuZXJhYmxlcwEABAxuZXf0WHNldF9kZXNpcmVkX2NhbmRpZGF0ZXMBAAQMbWF4BEhzZXRfY2FuZGlkYWN5X2JvbmQBAAQQYm9uZAhUcmVnaXN0ZXJfYXNfY2FuZGlkYXRlAQEFMGxlYXZlX2ludGVudAEBBUBhZGRfaW52dWxuZXJhYmxlAQAEDHdobwBMcmVtb3ZlX2ludnVsbmVyYWJsZQEABAx3aG8ALHVwZGF0ZV9ib25kAQAELG5ld19kZXBvc2l0CEx0YWtlX2NhbmRpZGF0ZV9zbG90AQAIHGRlcG9zaXQIGHRhcmdldAAcU2Vzc2lvbgECCCBzZXRfa2V5cwEACBBrZXlzIBRwcm9vZiQocHVyZ2Vfa2V5cwEBBSRYY21wUXVldWUBAhRUc3VzcGVuZF94Y21fZXhlY3V0aW9uAQEFUHJlc3VtZV94Y21fZXhlY3V0aW9uAQEFYHVwZGF0ZV9zdXNwZW5kX3RocmVzaG9sZAEABAxuZXcEVHVwZGF0ZV9kcm9wX3RocmVzaG9sZAEABAxuZXcEXHVwZGF0ZV9yZXN1bWVfdGhyZXNob2xkAQAEDG5ldwQsUG9sa2Fkb3RYY20BAjgQc2VuZAEACBBkZXN0mQEcbWVzc2FnZbkDPHRlbGVwb3J0X2Fzc2V0cwEAEBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQRccmVzZXJ2ZV90cmFuc2Zlcl9hc3NldHMBABAQZGVzdJkBLGJlbmVmaWNpYXJ5mQEYYXNzZXRzlQE4ZmVlX2Fzc2V0X2l0ZW0EHGV4ZWN1dGUBAAgcbWVzc2FnZbkDKG1heF93ZWlnaHQYRGZvcmNlX3hjbV92ZXJzaW9uAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBGRmb3JjZV9kZWZhdWx0X3hjbV92ZXJzaW9uAQAERG1heWJlX3hjbV92ZXJzaW9u1QF4Zm9yY2Vfc3Vic2NyaWJlX3ZlcnNpb25fbm90aWZ5AQAEIGxvY2F0aW9umQGAZm9yY2VfdW5zdWJzY3JpYmVfdmVyc2lvbl9ub3RpZnkBAAQgbG9jYXRpb26ZAXxsaW1pdGVkX3Jlc2VydmVfdHJhbnNmZXJfYXNzZXRzAQAUEGRlc3SZASxiZW5lZmljaWFyeZkBGGFzc2V0c5UBOGZlZV9hc3NldF9pdGVtBDB3ZWlnaHRfbGltaXRVAVxsaW1pdGVkX3RlbGVwb3J0X2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQFAZm9yY2Vfc3VzcGVuc2lvbgEABCRzdXNwZW5kZWQUPHRyYW5zZmVyX2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQEwY2xhaW1fYXNzZXRzAQAIGGFzc2V0c5UBLGJlbmVmaWNpYXJ5mQGMdHJhbnNmZXJfYXNzZXRzX3VzaW5nX3R5cGVfYW5kX3RoZW4BABwQZGVzdJkBGGFzc2V0c5UBUGFzc2V0c190cmFuc2Zlcl90eXBlvQM4cmVtb3RlX2ZlZXNfaWR5A0hmZWVzX3RyYW5zZmVyX3R5cGW9A0hjdXN0b21feGNtX29uX2Rlc3S5AzB3ZWlnaHRfbGltaXRVAShDdW11bHVzWGNtAQEFRFRvS3VzYW1hWGNtUm91dGVyAQIEUHJlcG9ydF9icmlkZ2Vfc3RhdHVzAQAIJGJyaWRnZV9pZCAwaXNfY29uZ2VzdGVkFDBNZXNzYWdlUXVldWUBAggkcmVhcF9wYWdlAQAIOG1lc3NhZ2Vfb3JpZ2lupQEocGFnZV9pbmRleARIZXhlY3V0ZV9vdmVyd2VpZ2h0AQAQOG1lc3NhZ2Vfb3JpZ2lupQEQcGFnZQQUaW5kZXgEMHdlaWdodF9saW1pdBgcVXRpbGl0eQECGBRiYXRjaAEABBRjYWxsc4UENGFzX2Rlcml2YXRpdmUBAAgUaW5kZXgEEGNhbGyBBCRiYXRjaF9hbGwBAAQUY2FsbHOFBCxkaXNwYXRjaF9hcwEACCRhc19vcmlnaW4RBBBjYWxsgQQsZm9yY2VfYmF0Y2gBAAQUY2FsbHOFBCx3aXRoX3dlaWdodAEACBBjYWxsgQQYd2VpZ2h0GCBNdWx0aXNpZwECEFBhc19tdWx0aV90aHJlc2hvbGRfMQEACERvdGhlcl9zaWduYXRvcmllc/QQY2FsbIEEIGFzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEEGNhbGyBBChtYXhfd2VpZ2h0GEBhcHByb3ZlX2FzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEJGNhbGxfaGFzaCAobWF4X3dlaWdodBg8Y2FuY2VsX2FzX211bHRpAQAQJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0JHRpbWVwb2ludL0BJGNhbGxfaGFzaCAUUHJveHkBAigUcHJveHkBAAwQcmVhbPUCQGZvcmNlX3Byb3h5X3R5cGUhBBBjYWxsgQQkYWRkX3Byb3h5AQAMIGRlbGVnYXRl9QIocHJveHlfdHlwZcUBFGRlbGF5BDByZW1vdmVfcHJveHkBAAwgZGVsZWdhdGX1Aihwcm94eV90eXBlxQEUZGVsYXkEOHJlbW92ZV9wcm94aWVzAQEFLGNyZWF0ZV9wdXJlAQAMKHByb3h5X3R5cGXFARRkZWxheQQUaW5kZXgEJGtpbGxfcHVyZQEAFBxzcGF3bmVy9QIocHJveHlfdHlwZcUBFGluZGV4BBhoZWlnaHQEJGV4dF9pbmRleAQgYW5ub3VuY2UBAAgQcmVhbPUCJGNhbGxfaGFzaCBMcmVtb3ZlX2Fubm91bmNlbWVudAEACBByZWFs9QIkY2FsbF9oYXNoIExyZWplY3RfYW5ub3VuY2VtZW50AQAIIGRlbGVnYXRl9QIkY2FsbF9oYXNoIDxwcm94eV9hbm5vdW5jZWQBABAgZGVsZWdhdGX1AhByZWFs9QJAZm9yY2VfcHJveHlfdHlwZSEEEGNhbGyBBBhBc3NldHMBAoAYY3JlYXRlAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWQEFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWQEQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWQERGRlc3Ryb3lfYXBwcm92YWxzAQAECGlkBDhmaW5pc2hfZGVzdHJveQEABAhpZAQQbWludAEADAhpZAQsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWQEDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWQEGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZAQYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZAQYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlkBAx3aG/1AhB0aGF3AQAICGlkBAx3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWQEKHRoYXdfYXNzZXQBAAQIaWQESHRyYW5zZmVyX293bmVyc2hpcAEACAhpZAQUb3duZXL1AiBzZXRfdGVhbQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZARIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlkBEhmb3JjZV9hc3NldF9zdGF0dXMBACAIaWQEFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZAQgZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZAQgZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWQEGHJlZnVuZAEACAhpZAQoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlkBCxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWQEDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZAQMd2hv9QIUYmxvY2sBAAgIaWQEDHdob/UCHFVuaXF1ZXMBAmgYY3JlYXRlAQAIKGNvbGxlY3Rpb24EFGFkbWlu9QIwZm9yY2VfY3JlYXRlAQAMKGNvbGxlY3Rpb24EFG93bmVy9QIwZnJlZV9ob2xkaW5nFBxkZXN0cm95AQAIKGNvbGxlY3Rpb24EHHdpdG5lc3MtBBBtaW50AQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVy9QIQYnVybgEADChjb2xsZWN0aW9uBBBpdGVtBCxjaGVja19vd25lcjEEIHRyYW5zZmVyAQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRlc3T1AiRyZWRlcG9zaXQBAAgoY29sbGVjdGlvbgQUaXRlbXPRARhmcmVlemUBAAgoY29sbGVjdGlvbgQQaXRlbQQQdGhhdwEACChjb2xsZWN0aW9uBBBpdGVtBERmcmVlemVfY29sbGVjdGlvbgEABChjb2xsZWN0aW9uBDx0aGF3X2NvbGxlY3Rpb24BAAQoY29sbGVjdGlvbgRIdHJhbnNmZXJfb3duZXJzaGlwAQAIKGNvbGxlY3Rpb24EJG5ld19vd25lcvUCIHNldF90ZWFtAQAQKGNvbGxlY3Rpb24EGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCQGFwcHJvdmVfdHJhbnNmZXIBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AjxjYW5jZWxfYXBwcm92YWwBAAwoY29sbGVjdGlvbgQQaXRlbQRQbWF5YmVfY2hlY2tfZGVsZWdhdGUxBERmb3JjZV9pdGVtX3N0YXR1cwEAHChjb2xsZWN0aW9uBBRvd25lcvUCGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCMGZyZWVfaG9sZGluZxQkaXNfZnJvemVuFDRzZXRfYXR0cmlidXRlAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VAQxrZXkkFHZhbHVlJDxjbGVhcl9hdHRyaWJ1dGUBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQwc2V0X21ldGFkYXRhAQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ4Y2xlYXJfbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQaXRlbQRcc2V0X2NvbGxlY3Rpb25fbWV0YWRhdGEBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRjbGVhcl9jb2xsZWN0aW9uX21ldGFkYXRhAQAEKGNvbGxlY3Rpb24EUHNldF9hY2NlcHRfb3duZXJzaGlwAQAEQG1heWJlX2NvbGxlY3Rpb27VAWRzZXRfY29sbGVjdGlvbl9tYXhfc3VwcGx5AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEJHNldF9wcmljZQEAEChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZTUERHdoaXRlbGlzdGVkX2J1eWVyMQQgYnV5X2l0ZW0BAAwoY29sbGVjdGlvbgQQaXRlbQQkYmlkX3ByaWNlCBBOZnRzAQKcGGNyZWF0ZQEACBRhZG1pbvUCGGNvbmZpZ0UEMGZvcmNlX2NyZWF0ZQEACBRvd25lcvUCGGNvbmZpZ0UEHGRlc3Ryb3kBAAgoY29sbGVjdGlvbgQcd2l0bmVzc0kEEG1pbnQBABAoY29sbGVjdGlvbgQQaXRlbQQcbWludF90b/UCMHdpdG5lc3NfZGF0YVEEKGZvcmNlX21pbnQBABAoY29sbGVjdGlvbgQQaXRlbQQcbWludF90b/UCLGl0ZW1fY29uZmlnCBBidXJuAQAIKGNvbGxlY3Rpb24EEGl0ZW0EIHRyYW5zZmVyAQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRlc3T1AiRyZWRlcG9zaXQBAAgoY29sbGVjdGlvbgQUaXRlbXPRAUhsb2NrX2l0ZW1fdHJhbnNmZXIBAAgoY29sbGVjdGlvbgQQaXRlbQRQdW5sb2NrX2l0ZW1fdHJhbnNmZXIBAAgoY29sbGVjdGlvbgQQaXRlbQQ8bG9ja19jb2xsZWN0aW9uAQAIKGNvbGxlY3Rpb24ENGxvY2tfc2V0dGluZ3MISHRyYW5zZmVyX293bmVyc2hpcAEACChjb2xsZWN0aW9uBCRuZXdfb3duZXL1AiBzZXRfdGVhbQEAEChjb2xsZWN0aW9uBBhpc3N1ZXIxBBRhZG1pbjEEHGZyZWV6ZXIxBFhmb3JjZV9jb2xsZWN0aW9uX293bmVyAQAIKGNvbGxlY3Rpb24EFG93bmVy9QJcZm9yY2VfY29sbGVjdGlvbl9jb25maWcBAAgoY29sbGVjdGlvbgQYY29uZmlnRQRAYXBwcm92ZV90cmFuc2ZlcgEAEChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCOG1heWJlX2RlYWRsaW5l1QE8Y2FuY2VsX2FwcHJvdmFsAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QJwY2xlYXJfYWxsX3RyYW5zZmVyX2FwcHJvdmFscwEACChjb2xsZWN0aW9uBBBpdGVtBFBsb2NrX2l0ZW1fcHJvcGVydGllcwEAEChjb2xsZWN0aW9uBBBpdGVtBDRsb2NrX21ldGFkYXRhFDxsb2NrX2F0dHJpYnV0ZXMUNHNldF9hdHRyaWJ1dGUBABQoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBJG5hbWVzcGFjZeEBDGtleSQUdmFsdWUkTGZvcmNlX3NldF9hdHRyaWJ1dGUBABgYc2V0X2Fz2QEoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBJG5hbWVzcGFjZeEBDGtleSQUdmFsdWUkPGNsZWFyX2F0dHJpYnV0ZQEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JFxhcHByb3ZlX2l0ZW1fYXR0cmlidXRlcwEADChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCfGNhbmNlbF9pdGVtX2F0dHJpYnV0ZXNfYXBwcm92YWwBABAoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1Ahx3aXRuZXNzBDBzZXRfbWV0YWRhdGEBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGF0YSQ4Y2xlYXJfbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQaXRlbQRcc2V0X2NvbGxlY3Rpb25fbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQZGF0YSRkY2xlYXJfY29sbGVjdGlvbl9tZXRhZGF0YQEABChjb2xsZWN0aW9uBFBzZXRfYWNjZXB0X293bmVyc2hpcAEABEBtYXliZV9jb2xsZWN0aW9u1QFkc2V0X2NvbGxlY3Rpb25fbWF4X3N1cHBseQEACChjb2xsZWN0aW9uBChtYXhfc3VwcGx5BFB1cGRhdGVfbWludF9zZXR0aW5ncwEACChjb2xsZWN0aW9uBDRtaW50X3NldHRpbmdzQQQkc2V0X3ByaWNlAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlNQREd2hpdGVsaXN0ZWRfYnV5ZXIxBCBidXlfaXRlbQEADChjb2xsZWN0aW9uBBBpdGVtBCRiaWRfcHJpY2UIIHBheV90aXBzAQAEEHRpcHNZBCxjcmVhdGVfc3dhcAEAGEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQRIZGVzaXJlZF9jb2xsZWN0aW9uBEhtYXliZV9kZXNpcmVkX2l0ZW3VASxtYXliZV9wcmljZe0BIGR1cmF0aW9uBCxjYW5jZWxfc3dhcAEACEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQQoY2xhaW1fc3dhcAEAFDxzZW5kX2NvbGxlY3Rpb24EJHNlbmRfaXRlbQRIcmVjZWl2ZV9jb2xsZWN0aW9uBDByZWNlaXZlX2l0ZW0ENHdpdG5lc3NfcHJpY2XtATxtaW50X3ByZV9zaWduZWQBAAwkbWludF9kYXRhXQQkc2lnbmF0dXJlaQQYc2lnbmVyAGRzZXRfYXR0cmlidXRlc19wcmVfc2lnbmVkAQAMEGRhdGFtBCRzaWduYXR1cmVpBBhzaWduZXIANEZvcmVpZ25Bc3NldHMBAoAYY3JlYXRlAQAMCGlk6BRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWToFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWToQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWToRGRlc3Ryb3lfYXBwcm92YWxzAQAECGlk6DhmaW5pc2hfZGVzdHJveQEABAhpZOgQbWludAEADAhpZOgsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWToDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWToGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZOgYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZOgYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlk6Ax3aG/1AhB0aGF3AQAICGlk6Ax3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWToKHRoYXdfYXNzZXQBAAQIaWToSHRyYW5zZmVyX293bmVyc2hpcAEACAhpZOgUb3duZXL1AiBzZXRfdGVhbQEAEAhpZOgYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlk6BBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZOhIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlk6BBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlk6Ehmb3JjZV9hc3NldF9zdGF0dXMBACAIaWToFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZOggZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZOggZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWToFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZOgUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWToGHJlZnVuZAEACAhpZOgoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlk6CxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWToDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZOgMd2hv9QIUYmxvY2sBAAgIaWToDHdob/UCKFBvb2xBc3NldHMBAoAYY3JlYXRlAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWQEFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWQEQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWQERGRlc3Ryb3lfYXBwcm92YWxzAQAECGlkBDhmaW5pc2hfZGVzdHJveQEABAhpZAQQbWludAEADAhpZAQsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWQEDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWQEGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZAQYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZAQYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlkBAx3aG/1AhB0aGF3AQAICGlkBAx3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWQEKHRoYXdfYXNzZXQBAAQIaWQESHRyYW5zZmVyX293bmVyc2hpcAEACAhpZAQUb3duZXL1AiBzZXRfdGVhbQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZARIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlkBEhmb3JjZV9hc3NldF9zdGF0dXMBACAIaWQEFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZAQgZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZAQgZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWQEGHJlZnVuZAEACAhpZAQoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlkBCxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWQEDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZAQMd2hv9QIUYmxvY2sBAAgIaWQEDHdob/UCPEFzc2V0Q29udmVyc2lvbgECGCxjcmVhdGVfcG9vbAEACBhhc3NldDHoGGFzc2V0Mug0YWRkX2xpcXVpZGl0eQEAHBhhc3NldDHoGGFzc2V0Mug8YW1vdW50MV9kZXNpcmVkCDxhbW91bnQyX2Rlc2lyZWQILGFtb3VudDFfbWluCCxhbW91bnQyX21pbggcbWludF90bwBAcmVtb3ZlX2xpcXVpZGl0eQEAGBhhc3NldDHoGGFzc2V0Mug0bHBfdG9rZW5fYnVybghMYW1vdW50MV9taW5fcmVjZWl2ZQhMYW1vdW50Ml9taW5fcmVjZWl2ZQgsd2l0aGRyYXdfdG8AcHN3YXBfZXhhY3RfdG9rZW5zX2Zvcl90b2tlbnMBABQQcGF0aHkEJGFtb3VudF9pbgg4YW1vdW50X291dF9taW4IHHNlbmRfdG8AKGtlZXBfYWxpdmUUcHN3YXBfdG9rZW5zX2Zvcl9leGFjdF90b2tlbnMBABQQcGF0aHkEKGFtb3VudF9vdXQINGFtb3VudF9pbl9tYXgIHHNlbmRfdG8AKGtlZXBfYWxpdmUUFHRvdWNoAQAIGGFzc2V0MegYYXNzZXQy6ASBBAAAEBB3aGVuvQEcZGVwb3NpdAgkZGVwb3NpdG9yACRhcHByb3ZhbHP0AAwgZGVsZWdhdGUAKHByb3h5X3R5cGXFARRkZWxheQQEjQQAAwiRBAgADBByZWFsACRjYWxsX2hhc2ggGGhlaWdodAQEmQQAAwidBAgCDBBMaXZlAQEFGEZyb3plbgEBBShEZXN0cm95aW5nAQEFADAUb3duZXIAGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIAGHN1cHBseQgcZGVwb3NpdAgsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUIGFjY291bnRzBCxzdWZmaWNpZW50cwQkYXBwcm92YWxzBBhzdGF0dXOlBAMIBAACDBhMaXF1aWQBAQUYRnJvemVuAQEFHEJsb2NrZWQBAQUCFCBDb25zdW1lcgEBBShTdWZmaWNpZW50AQEFLERlcG9zaXRIZWxkAQEDPERlcG9zaXRSZWZ1bmRlZAEBBSxEZXBvc2l0RnJvbQEDCAAIAAwcYmFsYW5jZQgYc3RhdHVzsQQYcmVhc29utQQDDAQAAAAIGGFtb3VudAgcZGVwb3NpdAgAFBxkZXBvc2l0CBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UACgUb3duZXIAGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIANHRvdGFsX2RlcG9zaXQIMGZyZWVfaG9sZGluZxQUaXRlbXMEOGl0ZW1fbWV0YWRhdGFzBChhdHRyaWJ1dGVzBCRpc19mcm96ZW4UAwwABAQDCAAEABAUb3duZXIAIGFwcHJvdmVk2QEkaXNfZnJvemVuFBxkZXBvc2l0CAAMHGRlcG9zaXQIEGRhdGEkJGlzX2Zyb3plbhQDDATVASQDCCQIAwgI2QEAGBRvd25lcgA0b3duZXJfZGVwb3NpdAgUaXRlbXMEOGl0ZW1fbWV0YWRhdGFzBDBpdGVtX2NvbmZpZ3MEKGF0dHJpYnV0ZXMEAwgA1QEE7QQAAAgcYWNjb3VudAAYYW1vdW50CAAMFG93bmVyACRhcHByb3ZhbHPxBBxkZXBvc2l09QQACBxkZXBvc2l0CBBkYXRhJAAIHGFjY291bnTZARhhbW91bnQIAAgcZGVwb3NpdAEFEGRhdGEkAxAE1QHhASQDCCQBBQAQSGRlc2lyZWRfY29sbGVjdGlvbgQwZGVzaXJlZF9pdGVt1QEUcHJpY2XtASBkZWFkbGluZQQDCOgAAwzoAAAAFCxwYXJlbnRfaGFzaCAYbnVtYmVyBChzdGF0ZV9yb290IDxleHRyaW5zaWNzX3Jvb3QgGGRpZ2VzdDAACBhoZWFkZXIdBShleHRyaW5zaWNzXQICCDRBbGxFeHRyaW5zaWNzAQEFNE9ubHlJbmhlcmVudHMBAQUCLBBDYWxsAQEFHFBheW1lbnQBAQUYRnV0dXJlAQEFFFN0YWxlAQEFIEJhZFByb29mAQEFREFuY2llbnRCaXJ0aEJsb2NrAQEFREV4aGF1c3RzUmVzb3VyY2VzAQEFGEN1c3RvbQEBAjBCYWRNYW5kYXRvcnkBAQVMTWFuZGF0b3J5VmFsaWRhdGlvbgEBBSRCYWRTaWduZXIBAQUCDDBDYW5ub3RMb29rdXABAQVMTm9VbnNpZ25lZFZhbGlkYXRvcgEBBRhDdXN0b20BAQICCBxJbnZhbGlkAQIsEENhbGwBAQUcUGF5bWVudAEBBRhGdXR1cmUBAQUUU3RhbGUBAQUgQmFkUHJvb2YBAQVEQW5jaWVudEJpcnRoQmxvY2sBAQVERXhoYXVzdHNSZXNvdXJjZXMBAQUYQ3VzdG9tAQECMEJhZE1hbmRhdG9yeQEBBUxNYW5kYXRvcnlWYWxpZGF0aW9uAQEFJEJhZFNpZ25lcgEBBRxVbmtub3duAQIMMENhbm5vdExvb2t1cAEBBUxOb1Vuc2lnbmVkVmFsaWRhdG9yAQEFGEN1c3RvbQEBAge1ATEFAwgNASQEOQUAAAwQb2theRQsZmF0YWxfZXJyb3IUGGVycm9ycz0FAgwcSW5CbG9jawEBBRRMb2NhbAEBBSBFeHRlcm5hbAEBBQAUIHByaW9yaXR5CCByZXF1aXJlc10CIHByb3ZpZGVzXQIkbG9uZ2V2aXR5CCRwcm9wYWdhdGUUB0kFMQUDCCQoBFEFAAZVBQAMGHdlaWdodBgUY2xhc3M4LHBhcnRpYWxfZmVlCAAMIGJhc2VfZmVlCBxsZW5fZmVlCExhZGp1c3RlZF93ZWlnaHRfZmVlCAZhBQAINGluY2x1c2lvbl9mZWVlBQx0aXAIBHkDAAIYNFVuaW1wbGVtZW50ZWQBAQVkVmVyc2lvbmVkQ29udmVyc2lvbkZhaWxlZAEBBUxXZWlnaHROb3RDb21wdXRhYmxlAQEFTFVuaGFuZGxlZFhjbVZlcnNpb24BAQU0QXNzZXROb3RGb3VuZAEBBShVbnJvdXRhYmxlAQEFB20FcQUHGHEFBwhxBQeVAXEFAAg0YWN0dWFsX3dlaWdodDECIHBheXNfZmVlPAAIJHBvc3RfaW5mb4UFFGVycm9ylAeFBYkFBA0CAAa5AwS5AwADCJkBmQUEnQUAABBAZXhlY3V0aW9uX3Jlc3VsdI0FOGVtaXR0ZWRfZXZlbnRzkQUkbG9jYWxfeGNtlQU4Zm9yd2FyZGVkX3hjbXOhBQIINFVuaW1wbGVtZW50ZWQBAQVkVmVyc2lvbmVkQ29udmVyc2lvbkZhaWxlZAEBBQelBakFAAxAZXhlY3V0aW9uX3Jlc3VsdAkBOGVtaXR0ZWRfZXZlbnRzkQU4Zm9yd2FyZGVkX3hjbXOhBQexBakFAggsVW5zdXBwb3J0ZWQBAQVkVmVyc2lvbmVkQ29udmVyc2lvbkZhaWxlZAEBBQcAuQUCCFxBc3NldElkQ29udmVyc2lvbkZhaWxlZAEBBXxBbW91bnRUb0JhbGFuY2VDb252ZXJzaW9uRmFpbGVkAQEFB5UBwQUAGDx1cHdhcmRfbWVzc2FnZXNdAkxob3Jpem9udGFsX21lc3NhZ2VzuQJMbmV3X3ZhbGlkYXRpb25fY29kZXEDbHByb2Nlc3NlZF9kb3dud2FyZF9tZXNzYWdlcwQ4aHJtcF93YXRlcm1hcmsEJGhlYWRfZGF0YSQHsQElAgYlAgQlAgAECAEIBtkF"; +var metadataTypes_default = content; +export { + metadataTypes_default as default +}; diff --git a/.papi/descriptors/dist/metadataTypes.d.ts b/.papi/descriptors/dist/metadataTypes.d.ts new file mode 100644 index 0000000000..059e772d97 --- /dev/null +++ b/.papi/descriptors/dist/metadataTypes.d.ts @@ -0,0 +1,2 @@ +declare const content = "oQYAAAAQAQEFAAQBAQUAFAEBBQAcAAQAIAAEACQBAQUAIAEBBQAwAQEFABkCACAAIQIBAQUAKQIBAQUANAEBBQAtAgEBBQA9AgEBBQBBAgEBBQBFAgEBBQBRAgEABBhyZW1hcmskAQEFAQAEFHBhZ2VzCAEBBQEABBBjb2RlJAEBBQEABBRpdGVtc1kCAQEFAQAEEGtleXNdAgEBBQEACBhwcmVmaXgkHHN1YmtleXMEAQEFAQAEJGNvZGVfaGFzaCABAQUBAQUBAAQ0ZGlzcGF0Y2hfaW5mb0ABAQUBAAg4ZGlzcGF0Y2hfZXJyb3KUNGRpc3BhdGNoX2luZm9AAQEFAQEFAQEFAQAEHGFjY291bnQAAQEFAQAIGHNlbmRlcgAQaGFzaCABAQUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFAEBBQEBBQEBBQB9AgEBBQCBAgEBBQAkAQEFAIUCAQEFAI0CAQEFAHUCAQEFAF0CAQEFAKECAQEFAKkCAQEFALECAQEFALkCAQEFAAgBAQUAGAEABBBkYXRh1QIBAQUBAAQcbWVzc2FnZSQBAQUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFAEBBQEBBQEABFRyZWxheV9jaGFpbl9ibG9ja19udW0EAQEFAQAEFGNvdW50BAEBBQEACCx3ZWlnaHRfdXNlZBggZG1xX2hlYWQgAQEFAQAEMG1lc3NhZ2VfaGFzaJwBAAQMbm93CAEBBQAAAAwAAADhAgAAAOkCAAAA8QIBAAgQZGVzdPUCFHZhbHVlCAEBBQEADBhzb3VyY2X1AhBkZXN09QIUdmFsdWUIAQEFAQAIEGRlc3T1AihrZWVwX2FsaXZlFAEBBQEACAx3aG/1AhhhbW91bnQIAQEFAQAEDHdob/QBAQUBAAgMd2hv9QIgbmV3X2ZyZWUIAQEFAQAIJGRpcmVjdGlvbvkCFGRlbHRhCAEBBQEACBR2YWx1ZQgoa2VlcF9hbGl2ZRQBAQUBAQUBAAgcYWNjb3VudAAwZnJlZV9iYWxhbmNlCAEBBQEACBxhY2NvdW50ABhhbW91bnQIAQEFAQAMEGZyb20ACHRvABhhbW91bnQIAQEFAQAIDHdobwAQZnJlZQgBAQUBAAgMd2hvABhhbW91bnQIAQEFAQAQEGZyb20ACHRvABhhbW91bnQISGRlc3RpbmF0aW9uX3N0YXR1c6QBAQUBAAQMd2hvAAEBBQEABBhhbW91bnQIAQEFAQAIDG9sZAgMbmV3CAEBBQD9AgEBBQEADAx3aG8AKGFjdHVhbF9mZWUIDHRpcAgBAQUBABAMd2hvAChhY3R1YWxfZmVlCAx0aXAIIGFzc2V0X2lk6AEBBQEABEhuYXRpdmVfYW1vdW50X2tlcHQIAAAABQMBAQUACQMBAQUBAQUBAAQYdGFyZ2V09QIBAQUBAAgYdGFyZ2V09QIgc2NoZWR1bGUBAwEBBQEADBhzb3VyY2X1Ahh0YXJnZXT1AiBzY2hlZHVsZQEDAQEFAQAIPHNjaGVkdWxlMV9pbmRleAQ8c2NoZWR1bGUyX2luZGV4BAEBBQEACBh0YXJnZXT1AjhzY2hlZHVsZV9pbmRleAQBAQUBAQUBAAgcYWNjb3VudAAgdW52ZXN0ZWQIAQEFAAABAQUA9AEBBQARAwAAAAQBAAQMbmV39AEBBQEABAxtYXgEAQEFAQAEEGJvbmQIAQEFAQAEDHdobwABAQUBAAQsbmV3X2RlcG9zaXQIAQEFAQAIHGRlcG9zaXQIGHRhcmdldAABAQUBAQUBAAQ0aW52dWxuZXJhYmxlc/QBAQUBAAQoYWNjb3VudF9pZAABAQUBAARIZGVzaXJlZF9jYW5kaWRhdGVzBAEBBQEABCxib25kX2Ftb3VudAgBAQUBAAgoYWNjb3VudF9pZAAcZGVwb3NpdAgBAQUBAAwMb2xkAAxuZXcAHGRlcG9zaXQIAQEFABkDAQEFANEBAAAAIAAdAwAAAQAIEGtleXMgFHByb29mJAEBBQEBBQEABDRzZXNzaW9uX2luZGV4BAEBBQARAgEBBQAhAwEBBQAtAwAxAwAkAQEFADUDAAQACAEABAxuZXcEAQEFAQEFAQAEMG1lc3NhZ2VfaGFzaCAACABdAwAgAAQAYQMABABhAwAIAGEDAGUDAQEFAG0DAQEFAHUDAH0DAIkDAAAAkQMBAQUAXQEBAAgQZGVzdJkBHG1lc3NhZ2W5AwEBBQEAEBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQBAQUBAAgcbWVzc2FnZbkDKG1heF93ZWlnaHQYAQEFAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBAEBBQEABERtYXliZV94Y21fdmVyc2lvbtUBAQEFAQAEIGxvY2F0aW9umQEBAQUBABQQZGVzdJkBLGJlbmVmaWNpYXJ5mQEYYXNzZXRzlQE4ZmVlX2Fzc2V0X2l0ZW0EMHdlaWdodF9saW1pdFUBAQEFAQAEJHN1c3BlbmRlZBQBAQUBAAgYYXNzZXRzlQEsYmVuZWZpY2lhcnmZAQEBBQEAHBBkZXN0mQEYYXNzZXRzlQFQYXNzZXRzX3RyYW5zZmVyX3R5cGW9AzhyZW1vdGVfZmVlc19pZHkDSGZlZXNfdHJhbnNmZXJfdHlwZb0DSGN1c3RvbV94Y21fb25fZGVzdLkDMHdlaWdodF9saW1pdFUBAQEFAQEFAQAEHG91dGNvbWUJAQEBBQEAEBhvcmlnaW7oLGRlc3RpbmF0aW9u6BxtZXNzYWdlXQEobWVzc2FnZV9pZCABAQUBAAgYb3JpZ2lu6CBxdWVyeV9pZAgBAQUBAAggcXVlcnlfaWQIIHJlc3BvbnNlOQEBAQUBAAwgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleAQBAQUBABQgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleAQ0YWN0dWFsX3dlaWdodBhMbWF4X2J1ZGdldGVkX3dlaWdodBgBAQUBAAwYb3JpZ2lu6CBxdWVyeV9pZAhEZXhwZWN0ZWRfbG9jYXRpb249AQEBBQEABCBxdWVyeV9pZAgBAQUBAAwQaGFzaCAYb3JpZ2lu6Bhhc3NldHOVAQEBBQEAECxkZXN0aW5hdGlvbugYcmVzdWx0BBBjb3N0IQEobWVzc2FnZV9pZCABAQUBAAggbG9jYXRpb27oHHZlcnNpb24EAQEFAQAMIGxvY2F0aW9u6CBxdWVyeV9pZAgUZXJyb3IFAQEBBQEACCBsb2NhdGlvbpkBIHF1ZXJ5X2lkCAEBBQEAEBhvcmlnaW7oIHF1ZXJ5X2lkCEBleHBlY3RlZF9xdWVyaWVy6FBtYXliZV9hY3R1YWxfcXVlcmllcj0BAQEFAQAMLGRlc3RpbmF0aW9u6BBjb3N0IQEobWVzc2FnZV9pZCABAQUBAAgYcGF5aW5n6BBmZWVzIQEBAQUBAAQcdmVyc2lvbgQBAQUAIAEBBQEDCCAJAQEBBQDBAwEACCRicmlkZ2VfaWQgMGlzX2Nvbmdlc3RlZBQBAQUApQEAzQMBAQUApQEA0QMA1QMBAQUAMQIBAAg4bWVzc2FnZV9vcmlnaW6lAShwYWdlX2luZGV4BAEBBQEAEDhtZXNzYWdlX29yaWdpbqUBEHBhZ2UEFGluZGV4BDB3ZWlnaHRfbGltaXQYAQEFAQEFAQAMCGlkIBhvcmlnaW6lARRlcnJvcqkBAQEFAQAQCGlkIBhvcmlnaW6lASx3ZWlnaHRfdXNlZBgcc3VjY2VzcxQBAQUBABAIaWQgGG9yaWdpbqUBKHBhZ2VfaW5kZXgENG1lc3NhZ2VfaW5kZXgEAQEFAQAIGG9yaWdpbqUBFGluZGV4BAEABBRjYWxsc4UEAQEFAQAIFGluZGV4BBBjYWxsgQQBAQUBAAgkYXNfb3JpZ2luEQQQY2FsbIEEAQEFAQAIEGNhbGyBBBh3ZWlnaHQYAQEFAQEFAQAIFGluZGV4BBRlcnJvcpQBAQUBAAQUZXJyb3KUAQEFAQAEGHJlc3VsdLUBABUDAIkEAQAIRG90aGVyX3NpZ25hdG9yaWVz9BBjYWxsgQQBAQUBABQkdGhyZXNob2xkBERvdGhlcl9zaWduYXRvcmllc/Q8bWF5YmVfdGltZXBvaW50GQQQY2FsbIEEKG1heF93ZWlnaHQYAQEFAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEJGNhbGxfaGFzaCAobWF4X3dlaWdodBgBAQUBABAkdGhyZXNob2xkBERvdGhlcl9zaWduYXRvcmllc/QkdGltZXBvaW50vQEkY2FsbF9oYXNoIAEBBQEBBQEADCRhcHByb3ZpbmcAIG11bHRpc2lnACRjYWxsX2hhc2ggAQEFAQAQJGFwcHJvdmluZwAkdGltZXBvaW50vQEgbXVsdGlzaWcAJGNhbGxfaGFzaCABAQUBABQkYXBwcm92aW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIBhyZXN1bHS1AQEBBQEAEChjYW5jZWxsaW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIAAAAJUEAAAAoQQBAAwQcmVhbPUCQGZvcmNlX3Byb3h5X3R5cGUhBBBjYWxsgQQBAQUBAAwgZGVsZWdhdGX1Aihwcm94eV90eXBlxQEUZGVsYXkEAQEFAQAMKHByb3h5X3R5cGXFARRkZWxheQQUaW5kZXgEAQEFAQAUHHNwYXduZXL1Aihwcm94eV90eXBlxQEUaW5kZXgEGGhlaWdodAQkZXh0X2luZGV4BAEBBQEACBByZWFs9QIkY2FsbF9oYXNoIAEBBQEACCBkZWxlZ2F0ZfUCJGNhbGxfaGFzaCABAQUBABAgZGVsZWdhdGX1AhByZWFs9QJAZm9yY2VfcHJveHlfdHlwZSEEEGNhbGyBBAEBBQEBBQEAEBBwdXJlAAx3aG8AKHByb3h5X3R5cGXFAVBkaXNhbWJpZ3VhdGlvbl9pbmRleAQBAQUBAAwQcmVhbAAUcHJveHkAJGNhbGxfaGFzaCABAQUBABAkZGVsZWdhdG9yACRkZWxlZ2F0ZWUAKHByb3h5X3R5cGXFARRkZWxheQQABACpBACtBAC5BAC9BADBBAAEAMUEAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCAEBBQEAEAhpZAQUb3duZXL1AjRpc19zdWZmaWNpZW50FCxtaW5fYmFsYW5jZQgBAQUBAAQIaWQEAQEFAQAMCGlkBCxiZW5lZmljaWFyefUCGGFtb3VudAgBAQUBAAwIaWQEDHdob/UCGGFtb3VudAgBAQUBAAwIaWQEGHRhcmdldPUCGGFtb3VudAgBAQUBABAIaWQEGHNvdXJjZfUCEGRlc3T1AhhhbW91bnQIAQEFAQAICGlkBAx3aG/1AgEBBQEACAhpZAQUb3duZXL1AgEBBQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIBAQUBABAIaWQEEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEAQEFAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UAQEFAQAgCGlkBBRvd25lcvUCGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCLG1pbl9iYWxhbmNlCDRpc19zdWZmaWNpZW50FCRpc19mcm96ZW4UAQEFAQAMCGlkBCBkZWxlZ2F0ZfUCGGFtb3VudAgBAQUBAAgIaWQEIGRlbGVnYXRl9QIBAQUBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AgEBBQEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgBAQUBAAgIaWQEKGFsbG93X2J1cm4UAQEFAQAICGlkBCxtaW5fYmFsYW5jZQgBAQUBAQUBAAwgYXNzZXRfaWQEHGNyZWF0b3IAFG93bmVyAAEBBQEADCBhc3NldF9pZAQUb3duZXIAGGFtb3VudAgBAQUBABAgYXNzZXRfaWQEEGZyb20ACHRvABhhbW91bnQIAQEFAQAMIGFzc2V0X2lkBBRvd25lcgAcYmFsYW5jZQgBAQUBABAgYXNzZXRfaWQEGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIAAQEFAQAIIGFzc2V0X2lkBBRvd25lcgABAQUBAAggYXNzZXRfaWQEDHdobwABAQUBAAQgYXNzZXRfaWQEAQEFAQAMIGFzc2V0X2lkBEhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwQBAQUBAAwgYXNzZXRfaWQETGFwcHJvdmFsc19kZXN0cm95ZWQETGFwcHJvdmFsc19yZW1haW5pbmcEAQEFAQAUIGFzc2V0X2lkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UAQEFAQAQIGFzc2V0X2lkBBhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIAQEFAQAMIGFzc2V0X2lkBBRvd25lcgAgZGVsZWdhdGUAAQEFAQAUIGFzc2V0X2lkBBRvd25lcgAgZGVsZWdhdGUALGRlc3RpbmF0aW9uABhhbW91bnQIAQEFAQAIIGFzc2V0X2lkBDxuZXdfbWluX2JhbGFuY2UIAQEFAQAMIGFzc2V0X2lkBAx3aG8AJGRlcG9zaXRvcgABAQUBAAwgYXNzZXRfaWQEDHdobwAYYW1vdW50CAAEAMkEAM0EALEBANEEALEBAB0CANUEAAQA2QQAHQIA2QQA3QQA4QQAHQIA5QQABAAEAQAIKGNvbGxlY3Rpb24EFGFkbWlu9QIBAQUBAAwoY29sbGVjdGlvbgQUb3duZXL1AjBmcmVlX2hvbGRpbmcUAQEFAQAIKGNvbGxlY3Rpb24EHHdpdG5lc3MtBAEBBQEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcvUCAQEFAQAMKGNvbGxlY3Rpb24EEGl0ZW0ELGNoZWNrX293bmVyMQQBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGVzdPUCAQEFAQAIKGNvbGxlY3Rpb24EFGl0ZW1z0QEBAQUBAAgoY29sbGVjdGlvbgQQaXRlbQQBAQUBAAQoY29sbGVjdGlvbgQBAQUBAAgoY29sbGVjdGlvbgQkbmV3X293bmVy9QIBAQUBABAoY29sbGVjdGlvbgQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AgEBBQEADChjb2xsZWN0aW9uBBBpdGVtBFBtYXliZV9jaGVja19kZWxlZ2F0ZTEEAQEFAQAcKGNvbGxlY3Rpb24EFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwZnJlZV9ob2xkaW5nFCRpc19mcm96ZW4UAQEFAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VAQxrZXkkFHZhbHVlJAEBBQEADChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JAEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJCRpc19mcm96ZW4UAQEFAQAMKGNvbGxlY3Rpb24EEGRhdGEkJGlzX2Zyb3plbhQBAQUBAARAbWF5YmVfY29sbGVjdGlvbtUBAQEFAQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlNQREd2hpdGVsaXN0ZWRfYnV5ZXIxBAEBBQEADChjb2xsZWN0aW9uBBBpdGVtBCRiaWRfcHJpY2UIAQEFAQEFAQAMKGNvbGxlY3Rpb24EHGNyZWF0b3IAFG93bmVyAAEBBQEACChjb2xsZWN0aW9uBBRvd25lcgABAQUBAAQoY29sbGVjdGlvbgQBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQUb3duZXIAAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGZyb20ACHRvAAEBBQEACChjb2xsZWN0aW9uBBBpdGVtBAEBBQEACChjb2xsZWN0aW9uBCRuZXdfb3duZXIAAQEFAQAQKGNvbGxlY3Rpb24EGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIAAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQABAQUBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFAEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJCRpc19mcm96ZW4UAQEFAQAIKGNvbGxlY3Rpb24EQHN1Y2Nlc3NmdWxfaXRlbXPRAQEBBQEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQBAQUBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQBAQUBAAgMd2hvAEBtYXliZV9jb2xsZWN0aW9u1QEBAQUBAAgoY29sbGVjdGlvbgQobWF4X3N1cHBseQQBAQUBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIRHdoaXRlbGlzdGVkX2J1eWVy2QEBAQUBABQoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIGHNlbGxlcgAUYnV5ZXIAAAQA6QQArQQABAAdAgD5BAAEAP0EAB0CAAUFAAkFAA0FAB0CAPQAHQIAEQUABABFBAAdAgAIAQAIFGFkbWlu9QIYY29uZmlnRQQBAQUBAAgUb3duZXL1Ahhjb25maWdFBAEBBQEACChjb2xsZWN0aW9uBBx3aXRuZXNzSQQBAQUBABAoY29sbGVjdGlvbgQQaXRlbQQcbWludF90b/UCMHdpdG5lc3NfZGF0YVEEAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EHG1pbnRfdG/1AixpdGVtX2NvbmZpZwgBAQUBAAgoY29sbGVjdGlvbgQ0bG9ja19zZXR0aW5ncwgBAQUBABAoY29sbGVjdGlvbgQYaXNzdWVyMQQUYWRtaW4xBBxmcmVlemVyMQQBAQUBAAgoY29sbGVjdGlvbgQUb3duZXL1AgEBBQEACChjb2xsZWN0aW9uBBhjb25maWdFBAEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCOG1heWJlX2RlYWRsaW5l1QEBAQUBABAoY29sbGVjdGlvbgQQaXRlbQQ0bG9ja19tZXRhZGF0YRQ8bG9ja19hdHRyaWJ1dGVzFAEBBQEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JBR2YWx1ZSQBAQUBABgYc2V0X2Fz2QEoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBJG5hbWVzcGFjZeEBDGtleSQUdmFsdWUkAQEFAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VASRuYW1lc3BhY2XhAQxrZXkkAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QIcd2l0bmVzcwQBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGF0YSQBAQUBAAgoY29sbGVjdGlvbgQQZGF0YSQBAQUBAAgoY29sbGVjdGlvbgQ0bWludF9zZXR0aW5nc0EEAQEFAQAEEHRpcHNZBAEBBQEAGEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQRIZGVzaXJlZF9jb2xsZWN0aW9uBEhtYXliZV9kZXNpcmVkX2l0ZW3VASxtYXliZV9wcmljZe0BIGR1cmF0aW9uBAEBBQEACEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQQBAQUBABQ8c2VuZF9jb2xsZWN0aW9uBCRzZW5kX2l0ZW0ESHJlY2VpdmVfY29sbGVjdGlvbgQwcmVjZWl2ZV9pdGVtBDR3aXRuZXNzX3ByaWNl7QEBAQUBAAwkbWludF9kYXRhXQQkc2lnbmF0dXJlaQQYc2lnbmVyAAEBBQEADBBkYXRhbQQkc2lnbmF0dXJlaQQYc2lnbmVyAAEBBQEBBQEAEChjb2xsZWN0aW9uBBBpdGVtBDRsb2NrX21ldGFkYXRhFDxsb2NrX2F0dHJpYnV0ZXMUAQEFAQAQKGNvbGxlY3Rpb24EGGlzc3VlctkBFGFkbWlu2QEcZnJlZXplctkBAQEFAQAUKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQAgZGVhZGxpbmXVAQEBBQEACChjb2xsZWN0aW9uBBBkYXRhJAEBBQEADChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJAEBBQEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQkbmFtZXNwYWNl4QEBAQUBABAoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQkbmFtZXNwYWNl4QEBAQUBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGUAAQEFAQAEHG5leHRfaWTVAQEBBQEAFChjb2xsZWN0aW9uBBBpdGVtBBhzZW5kZXIAIHJlY2VpdmVyABhhbW91bnQIAQEFAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24EMGRlc2lyZWRfaXRlbdUBFHByaWNl7QEgZGVhZGxpbmUEAQEFAQAgPHNlbnRfY29sbGVjdGlvbgQkc2VudF9pdGVtBDxzZW50X2l0ZW1fb3duZXIATHJlY2VpdmVkX2NvbGxlY3Rpb24ENHJlY2VpdmVkX2l0ZW0ETHJlY2VpdmVkX2l0ZW1fb3duZXIAFHByaWNl7QEgZGVhZGxpbmUEAQEFAQAMKGNvbGxlY3Rpb24EEGl0ZW0EJG5hbWVzcGFjZeEBAQEFAQAQKGNvbGxlY3Rpb24EEGl0ZW3VASRhdHRyaWJ1dGXxARR2YWx1ZSQA6ACpBAAVBQC5BAAZBQDBBADoAMUEAQEFAOgBAAwIaWToFGFkbWlu9QIsbWluX2JhbGFuY2UIAQEFAQAQCGlk6BRvd25lcvUCNGlzX3N1ZmZpY2llbnQULG1pbl9iYWxhbmNlCAEBBQEABAhpZOgBAQUBAAwIaWToLGJlbmVmaWNpYXJ59QIYYW1vdW50CAEBBQEADAhpZOgMd2hv9QIYYW1vdW50CAEBBQEADAhpZOgYdGFyZ2V09QIYYW1vdW50CAEBBQEAEAhpZOgYc291cmNl9QIQZGVzdPUCGGFtb3VudAgBAQUBAAgIaWToDHdob/UCAQEFAQAICGlk6BRvd25lcvUCAQEFAQAQCGlk6Bhpc3N1ZXL1AhRhZG1pbvUCHGZyZWV6ZXL1AgEBBQEAEAhpZOgQbmFtZSQYc3ltYm9sJCBkZWNpbWFscwQBAQUBABQIaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQBAQUBACAIaWToFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhQBAQUBAAwIaWToIGRlbGVnYXRl9QIYYW1vdW50CAEBBQEACAhpZOggZGVsZWdhdGX1AgEBBQEADAhpZOgUb3duZXL1AiBkZWxlZ2F0ZfUCAQEFAQAQCGlk6BRvd25lcvUCLGRlc3RpbmF0aW9u9QIYYW1vdW50CAEBBQEACAhpZOgoYWxsb3dfYnVybhQBAQUBAAgIaWToLG1pbl9iYWxhbmNlCAEBBQEBBQEADCBhc3NldF9pZOgcY3JlYXRvcgAUb3duZXIAAQEFAQAMIGFzc2V0X2lk6BRvd25lcgAYYW1vdW50CAEBBQEAECBhc3NldF9pZOgQZnJvbQAIdG8AGGFtb3VudAgBAQUBAAwgYXNzZXRfaWToFG93bmVyABxiYWxhbmNlCAEBBQEAECBhc3NldF9pZOgYaXNzdWVyABRhZG1pbgAcZnJlZXplcgABAQUBAAggYXNzZXRfaWToFG93bmVyAAEBBQEACCBhc3NldF9pZOgMd2hvAAEBBQEABCBhc3NldF9pZOgBAQUBAAwgYXNzZXRfaWToSGFjY291bnRzX2Rlc3Ryb3llZARIYWNjb3VudHNfcmVtYWluaW5nBAEBBQEADCBhc3NldF9pZOhMYXBwcm92YWxzX2Rlc3Ryb3llZARMYXBwcm92YWxzX3JlbWFpbmluZwQBAQUBABQgYXNzZXRfaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQBAQUBABAgYXNzZXRfaWToGHNvdXJjZQAgZGVsZWdhdGUAGGFtb3VudAgBAQUBAAwgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQABAQUBABQgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAgBAQUBAAggYXNzZXRfaWToPG5ld19taW5fYmFsYW5jZQgBAQUBAAwgYXNzZXRfaWToDHdobwAkZGVwb3NpdG9yAAEBBQEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIAP0BAAQBAQUADQEBAAgYYXNzZXQx6Bhhc3NldDLoAQEFAQAcGGFzc2V0MegYYXNzZXQy6DxhbW91bnQxX2Rlc2lyZWQIPGFtb3VudDJfZGVzaXJlZAgsYW1vdW50MV9taW4ILGFtb3VudDJfbWluCBxtaW50X3RvAAEBBQEAGBhhc3NldDHoGGFzc2V0Mug0bHBfdG9rZW5fYnVybghMYW1vdW50MV9taW5fcmVjZWl2ZQhMYW1vdW50Ml9taW5fcmVjZWl2ZQgsd2l0aGRyYXdfdG8AAQEFAQAUEHBhdGh5BCRhbW91bnRfaW4IOGFtb3VudF9vdXRfbWluCBxzZW5kX3RvAChrZWVwX2FsaXZlFAEBBQEAFBBwYXRoeQQoYW1vdW50X291dAg0YW1vdW50X2luX21heAgcc2VuZF90bwAoa2VlcF9hbGl2ZRQBAQUBAQUBABAcY3JlYXRvcgAccG9vbF9pZP0BMHBvb2xfYWNjb3VudAAgbHBfdG9rZW4EAQEFAQAcDHdobwAcbWludF90bwAccG9vbF9pZP0BQGFtb3VudDFfcHJvdmlkZWQIQGFtb3VudDJfcHJvdmlkZWQIIGxwX3Rva2VuBDxscF90b2tlbl9taW50ZWQIAQEFAQAgDHdobwAsd2l0aGRyYXdfdG8AHHBvb2xfaWT9ARxhbW91bnQxCBxhbW91bnQyCCBscF90b2tlbgQ8bHBfdG9rZW5fYnVybmVkCDh3aXRoZHJhd2FsX2ZlZQQBAQUBABQMd2hvABxzZW5kX3RvACRhbW91bnRfaW4IKGFtb3VudF9vdXQIEHBhdGgFAgEBBQEADCRhbW91bnRfaW4IKGFtb3VudF9vdXQIEHBhdGgFAgEBBQEACBxwb29sX2lk/QEMd2hvAAEDAAAIAQMAABECAQMIIAgAFAEDAABRAgEDBCEFALEBAQMEHQUAJQUBAwAAJAEDBAQAcQMBAwAA0QEBAwQkADUFAQMAAB0FAQMEPQUAXQIBAwghBT0FAEEFAQMMRQUkIABNBQEDBB0FALEBAQMEcQMAJAEDBCQAWQUBAwQAAAQBAwgkBABdBQEDCCQEAGkFAQMEGAAIAQMEBAAIAQMIgQQEAF0FAQMIgQQEAGkFAQMEBAB1BQEDBLkDAHkFAQMIGHkDAH0FAQMImQG5AwCBBQEDCBEEgQQArQUBAwiZAbkDALUFAQMEmQEAvQUBAwQAAMUFAQMEHQUAyQUBAwQkAM0FAQME0QUAcQMBAwAA1QUBAxDo6AgUADUEAQMI6OgA3QXhBQEBAQIBAwAQEGZyZWUIIHJlc2VydmVkCBhmcm96ZW4IFGZsYWdzCAAUFG5vbmNlBCRjb25zdW1lcnMEJHByb3ZpZGVycwQsc3VmZmljaWVudHMEEGRhdGEMAQAACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgADBhub3JtYWwYLG9wZXJhdGlvbmFsGCRtYW5kYXRvcnkYBQGABQAFARACFChQcmVSdW50aW1lAQMIKCQkQ29uc2Vuc3VzAQMIKCQQU2VhbAEDCCgkFE90aGVyAQUAZFJ1bnRpbWVFbnZpcm9ubWVudFVwZGF0ZWQBAQUELAACDDhBcHBseUV4dHJpbnNpYwEBAjBGaW5hbGl6YXRpb24BAQU4SW5pdGlhbGl6YXRpb24BAQUCDBhOb3JtYWwBAQUsT3BlcmF0aW9uYWwBAQUkTWFuZGF0b3J5AQEFAggMWWVzAQEFCE5vAQEFAAwYd2VpZ2h0GBRjbGFzczggcGF5c19mZWU8AiQ8SW52YWxpZFNwZWNOYW1lAQEFaFNwZWNWZXJzaW9uTmVlZHNUb0luY3JlYXNlAQEFdEZhaWxlZFRvRXh0cmFjdFJ1bnRpbWVWZXJzaW9uAQEFTE5vbkRlZmF1bHRDb21wb3NpdGUBAQU8Tm9uWmVyb1JlZkNvdW50AQEFMENhbGxGaWx0ZXJlZAEBBWxNdWx0aUJsb2NrTWlncmF0aW9uc09uZ29pbmcBAQVETm90aGluZ0F1dGhvcml6ZWQBAQUwVW5hdXRob3JpemVkAQEFAiBMT3ZlcmxhcHBpbmdVcGdyYWRlcwEBBVBQcm9oaWJpdGVkQnlQb2xrYWRvdAEBBRhUb29CaWcBAQVoVmFsaWRhdGlvbkRhdGFOb3RBdmFpbGFibGUBAQV0SG9zdENvbmZpZ3VyYXRpb25Ob3RBdmFpbGFibGUBAQUwTm90U2NoZWR1bGVkAQEFRE5vdGhpbmdBdXRob3JpemVkAQEFMFVuYXV0aG9yaXplZAEBBQIwOFZlc3RpbmdCYWxhbmNlAQEFVExpcXVpZGl0eVJlc3RyaWN0aW9ucwEBBUxJbnN1ZmZpY2llbnRCYWxhbmNlAQEFSEV4aXN0ZW50aWFsRGVwb3NpdAEBBTRFeHBlbmRhYmlsaXR5AQEFXEV4aXN0aW5nVmVzdGluZ1NjaGVkdWxlAQEFLERlYWRBY2NvdW50AQEFPFRvb01hbnlSZXNlcnZlcwEBBTBUb29NYW55SG9sZHMBAQU4VG9vTWFueUZyZWV6ZXMBAQVMSXNzdWFuY2VEZWFjdGl2YXRlZAEBBSREZWx0YVplcm8BAQUCFChOb3RWZXN0aW5nAQEFVEF0TWF4VmVzdGluZ1NjaGVkdWxlcwEBBSRBbW91bnRMb3cBAQVgU2NoZWR1bGVJbmRleE91dE9mQm91bmRzAQEFVEludmFsaWRTY2hlZHVsZVBhcmFtcwEBBQJERFRvb01hbnlDYW5kaWRhdGVzAQEFXFRvb0Zld0VsaWdpYmxlQ29sbGF0b3JzAQEFQEFscmVhZHlDYW5kaWRhdGUBAQUwTm90Q2FuZGlkYXRlAQEFUFRvb01hbnlJbnZ1bG5lcmFibGVzAQEFTEFscmVhZHlJbnZ1bG5lcmFibGUBAQU8Tm90SW52dWxuZXJhYmxlAQEFXE5vQXNzb2NpYXRlZFZhbGlkYXRvcklkAQEFWFZhbGlkYXRvck5vdFJlZ2lzdGVyZWQBAQVsSW5zZXJ0VG9DYW5kaWRhdGVMaXN0RmFpbGVkAQEFdFJlbW92ZUZyb21DYW5kaWRhdGVMaXN0RmFpbGVkAQEFNERlcG9zaXRUb29Mb3cBAQVkVXBkYXRlQ2FuZGlkYXRlTGlzdEZhaWxlZAEBBUBJbnN1ZmZpY2llbnRCb25kAQEFUFRhcmdldElzTm90Q2FuZGlkYXRlAQEFQElkZW50aWNhbERlcG9zaXQBAQVASW52YWxpZFVucmVzZXJ2ZQEBBQIUMEludmFsaWRQcm9vZgEBBVxOb0Fzc29jaWF0ZWRWYWxpZGF0b3JJZAEBBTREdXBsaWNhdGVkS2V5AQEFGE5vS2V5cwEBBSROb0FjY291bnQBAQUCFDhCYWRRdWV1ZUNvbmZpZwEBBUBBbHJlYWR5U3VzcGVuZGVkAQEFOEFscmVhZHlSZXN1bWVkAQEFdFRvb01hbnlBY3RpdmVPdXRib3VuZENoYW5uZWxzAQEFGFRvb0JpZwEBBQJgLFVucmVhY2hhYmxlAQEFLFNlbmRGYWlsdXJlAQEFIEZpbHRlcmVkAQEFSFVud2VpZ2hhYmxlTWVzc2FnZQEBBWBEZXN0aW5hdGlvbk5vdEludmVydGlibGUBAQUURW1wdHkBAQU4Q2Fubm90UmVhbmNob3IBAQU0VG9vTWFueUFzc2V0cwEBBTRJbnZhbGlkT3JpZ2luAQEFKEJhZFZlcnNpb24BAQUsQmFkTG9jYXRpb24BAQU4Tm9TdWJzY3JpcHRpb24BAQVEQWxyZWFkeVN1YnNjcmliZWQBAQVYQ2Fubm90Q2hlY2tPdXRUZWxlcG9ydAEBBShMb3dCYWxhbmNlAQEFMFRvb01hbnlMb2NrcwEBBUxBY2NvdW50Tm90U292ZXJlaWduAQEFKEZlZXNOb3RNZXQBAQUwTG9ja05vdEZvdW5kAQEFFEluVXNlAQEFaEludmFsaWRBc3NldFVua25vd25SZXNlcnZlAQEFeEludmFsaWRBc3NldFVuc3VwcG9ydGVkUmVzZXJ2ZQEBBTxUb29NYW55UmVzZXJ2ZXMBAQVgTG9jYWxFeGVjdXRpb25JbmNvbXBsZXRlAQEFAiQsTm90UmVhcGFibGUBAQUYTm9QYWdlAQEFJE5vTWVzc2FnZQEBBUBBbHJlYWR5UHJvY2Vzc2VkAQEFGFF1ZXVlZAEBBUhJbnN1ZmZpY2llbnRXZWlnaHQBAQVgVGVtcG9yYXJpbHlVbnByb2Nlc3NhYmxlAQEFLFF1ZXVlUGF1c2VkAQEFTFJlY3Vyc2l2ZURpc2FsbG93ZWQBAQUCBDBUb29NYW55Q2FsbHMBAQUCOEBNaW5pbXVtVGhyZXNob2xkAQEFPEFscmVhZHlBcHByb3ZlZAEBBUROb0FwcHJvdmFsc05lZWRlZAEBBURUb29GZXdTaWduYXRvcmllcwEBBUhUb29NYW55U2lnbmF0b3JpZXMBAQVUU2lnbmF0b3JpZXNPdXRPZk9yZGVyAQEFTFNlbmRlckluU2lnbmF0b3JpZXMBAQUgTm90Rm91bmQBAQUgTm90T3duZXIBAQUsTm9UaW1lcG9pbnQBAQU4V3JvbmdUaW1lcG9pbnQBAQVMVW5leHBlY3RlZFRpbWVwb2ludAEBBTxNYXhXZWlnaHRUb29Mb3cBAQU0QWxyZWFkeVN0b3JlZAEBBQIgHFRvb01hbnkBAQUgTm90Rm91bmQBAQUgTm90UHJveHkBAQUsVW5wcm94eWFibGUBAQUkRHVwbGljYXRlAQEFME5vUGVybWlzc2lvbgEBBSxVbmFubm91bmNlZAEBBSxOb1NlbGZQcm94eQEBBQJUKEJhbGFuY2VMb3cBAQUkTm9BY2NvdW50AQEFME5vUGVybWlzc2lvbgEBBRxVbmtub3duAQEFGEZyb3plbgEBBRRJblVzZQEBBShCYWRXaXRuZXNzAQEFOE1pbkJhbGFuY2VaZXJvAQEFTFVuYXZhaWxhYmxlQ29uc3VtZXIBAQUsQmFkTWV0YWRhdGEBAQUoVW5hcHByb3ZlZAEBBSBXb3VsZERpZQEBBTRBbHJlYWR5RXhpc3RzAQEFJE5vRGVwb3NpdAEBBSRXb3VsZEJ1cm4BAQUkTGl2ZUFzc2V0AQEFMEFzc2V0Tm90TGl2ZQEBBTxJbmNvcnJlY3RTdGF0dXMBAQUkTm90RnJvemVuAQEFOENhbGxiYWNrRmFpbGVkAQEFKEJhZEFzc2V0SWQBAQUCSDBOb1Blcm1pc3Npb24BAQVEVW5rbm93bkNvbGxlY3Rpb24BAQU0QWxyZWFkeUV4aXN0cwEBBShXcm9uZ093bmVyAQEFKEJhZFdpdG5lc3MBAQUUSW5Vc2UBAQUYRnJvemVuAQEFNFdyb25nRGVsZWdhdGUBAQUoTm9EZWxlZ2F0ZQEBBShVbmFwcHJvdmVkAQEFKFVuYWNjZXB0ZWQBAQUYTG9ja2VkAQEFQE1heFN1cHBseVJlYWNoZWQBAQVMTWF4U3VwcGx5QWxyZWFkeVNldAEBBURNYXhTdXBwbHlUb29TbWFsbAEBBSxVbmtub3duSXRlbQEBBShOb3RGb3JTYWxlAQEFJEJpZFRvb0xvdwEBBQK0ME5vUGVybWlzc2lvbgEBBURVbmtub3duQ29sbGVjdGlvbgEBBTRBbHJlYWR5RXhpc3RzAQEFPEFwcHJvdmFsRXhwaXJlZAEBBShXcm9uZ093bmVyAQEFKEJhZFdpdG5lc3MBAQVEQ29sbGVjdGlvbklkSW5Vc2UBAQVQSXRlbXNOb25UcmFuc2ZlcmFibGUBAQUsTm90RGVsZWdhdGUBAQU0V3JvbmdEZWxlZ2F0ZQEBBShVbmFwcHJvdmVkAQEFKFVuYWNjZXB0ZWQBAQUoSXRlbUxvY2tlZAEBBVBMb2NrZWRJdGVtQXR0cmlidXRlcwEBBWhMb2NrZWRDb2xsZWN0aW9uQXR0cmlidXRlcwEBBUhMb2NrZWRJdGVtTWV0YWRhdGEBAQVgTG9ja2VkQ29sbGVjdGlvbk1ldGFkYXRhAQEFQE1heFN1cHBseVJlYWNoZWQBAQU8TWF4U3VwcGx5TG9ja2VkAQEFRE1heFN1cHBseVRvb1NtYWxsAQEFLFVua25vd25JdGVtAQEFLFVua25vd25Td2FwAQEFQE1ldGFkYXRhTm90Rm91bmQBAQVEQXR0cmlidXRlTm90Rm91bmQBAQUoTm90Rm9yU2FsZQEBBSRCaWRUb29Mb3cBAQVQUmVhY2hlZEFwcHJvdmFsTGltaXQBAQU8RGVhZGxpbmVFeHBpcmVkAQEFNFdyb25nRHVyYXRpb24BAQU4TWV0aG9kRGlzYWJsZWQBAQUwV3JvbmdTZXR0aW5nAQEFWEluY29uc2lzdGVudEl0ZW1Db25maWcBAQUgTm9Db25maWcBAQU8Um9sZXNOb3RDbGVhcmVkAQEFOE1pbnROb3RTdGFydGVkAQEFJE1pbnRFbmRlZAEBBThBbHJlYWR5Q2xhaW1lZAEBBTRJbmNvcnJlY3REYXRhAQEFLFdyb25nT3JpZ2luAQEFOFdyb25nU2lnbmF0dXJlAQEFREluY29ycmVjdE1ldGFkYXRhAQEFZE1heEF0dHJpYnV0ZXNMaW1pdFJlYWNoZWQBAQU4V3JvbmdOYW1lc3BhY2UBAQVIQ29sbGVjdGlvbk5vdEVtcHR5AQEFPFdpdG5lc3NSZXF1aXJlZAEBBQJcQEludmFsaWRBc3NldFBhaXIBAQUoUG9vbEV4aXN0cwEBBUhXcm9uZ0Rlc2lyZWRBbW91bnQBAQVgQW1vdW50T25lTGVzc1RoYW5NaW5pbWFsAQEFYEFtb3VudFR3b0xlc3NUaGFuTWluaW1hbAEBBWhSZXNlcnZlTGVmdExlc3NUaGFuTWluaW1hbAEBBUBBbW91bnRPdXRUb29IaWdoAQEFMFBvb2xOb3RGb3VuZAEBBSBPdmVyZmxvdwEBBYBBc3NldE9uZURlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYBBc3NldFR3b0RlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYxBc3NldE9uZVdpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBYxBc3NldFR3b1dpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBXBPcHRpbWFsQW1vdW50TGVzc1RoYW5EZXNpcmVkAQEFbEluc3VmZmljaWVudExpcXVpZGl0eU1pbnRlZAEBBTRaZXJvTGlxdWlkaXR5AQEFKFplcm9BbW91bnQBAQWMUHJvdmlkZWRNaW5pbXVtTm90U3VmZmljaWVudEZvclN3YXABAQWMUHJvdmlkZWRNYXhpbXVtTm90U3VmZmljaWVudEZvclN3YXABAQUsSW52YWxpZFBhdGgBAQU0Tm9uVW5pcXVlUGF0aAEBBVBJbmNvcnJlY3RQb29sQXNzZXRJZAEBBTBCZWxvd01pbmltdW0BAQUCbBhTeXN0ZW0BAiQ8SW52YWxpZFNwZWNOYW1lAQEFaFNwZWNWZXJzaW9uTmVlZHNUb0luY3JlYXNlAQEFdEZhaWxlZFRvRXh0cmFjdFJ1bnRpbWVWZXJzaW9uAQEFTE5vbkRlZmF1bHRDb21wb3NpdGUBAQU8Tm9uWmVyb1JlZkNvdW50AQEFMENhbGxGaWx0ZXJlZAEBBWxNdWx0aUJsb2NrTWlncmF0aW9uc09uZ29pbmcBAQVETm90aGluZ0F1dGhvcml6ZWQBAQUwVW5hdXRob3JpemVkAQEFPFBhcmFjaGFpblN5c3RlbQECIExPdmVybGFwcGluZ1VwZ3JhZGVzAQEFUFByb2hpYml0ZWRCeVBvbGthZG90AQEFGFRvb0JpZwEBBWhWYWxpZGF0aW9uRGF0YU5vdEF2YWlsYWJsZQEBBXRIb3N0Q29uZmlndXJhdGlvbk5vdEF2YWlsYWJsZQEBBTBOb3RTY2hlZHVsZWQBAQVETm90aGluZ0F1dGhvcml6ZWQBAQUwVW5hdXRob3JpemVkAQEFJFRpbWVzdGFtcAEBBTRQYXJhY2hhaW5JbmZvAQEFIEJhbGFuY2VzAQIwOFZlc3RpbmdCYWxhbmNlAQEFVExpcXVpZGl0eVJlc3RyaWN0aW9ucwEBBUxJbnN1ZmZpY2llbnRCYWxhbmNlAQEFSEV4aXN0ZW50aWFsRGVwb3NpdAEBBTRFeHBlbmRhYmlsaXR5AQEFXEV4aXN0aW5nVmVzdGluZ1NjaGVkdWxlAQEFLERlYWRBY2NvdW50AQEFPFRvb01hbnlSZXNlcnZlcwEBBTBUb29NYW55SG9sZHMBAQU4VG9vTWFueUZyZWV6ZXMBAQVMSXNzdWFuY2VEZWFjdGl2YXRlZAEBBSREZWx0YVplcm8BAQVIVHJhbnNhY3Rpb25QYXltZW50AQEFOEFzc2V0VHhQYXltZW50AQEFHFZlc3RpbmcBAhQoTm90VmVzdGluZwEBBVRBdE1heFZlc3RpbmdTY2hlZHVsZXMBAQUkQW1vdW50TG93AQEFYFNjaGVkdWxlSW5kZXhPdXRPZkJvdW5kcwEBBVRJbnZhbGlkU2NoZWR1bGVQYXJhbXMBAQUoQXV0aG9yc2hpcAEBBURDb2xsYXRvclNlbGVjdGlvbgECRERUb29NYW55Q2FuZGlkYXRlcwEBBVxUb29GZXdFbGlnaWJsZUNvbGxhdG9ycwEBBUBBbHJlYWR5Q2FuZGlkYXRlAQEFME5vdENhbmRpZGF0ZQEBBVBUb29NYW55SW52dWxuZXJhYmxlcwEBBUxBbHJlYWR5SW52dWxuZXJhYmxlAQEFPE5vdEludnVsbmVyYWJsZQEBBVxOb0Fzc29jaWF0ZWRWYWxpZGF0b3JJZAEBBVhWYWxpZGF0b3JOb3RSZWdpc3RlcmVkAQEFbEluc2VydFRvQ2FuZGlkYXRlTGlzdEZhaWxlZAEBBXRSZW1vdmVGcm9tQ2FuZGlkYXRlTGlzdEZhaWxlZAEBBTREZXBvc2l0VG9vTG93AQEFZFVwZGF0ZUNhbmRpZGF0ZUxpc3RGYWlsZWQBAQVASW5zdWZmaWNpZW50Qm9uZAEBBVBUYXJnZXRJc05vdENhbmRpZGF0ZQEBBUBJZGVudGljYWxEZXBvc2l0AQEFQEludmFsaWRVbnJlc2VydmUBAQUcU2Vzc2lvbgECFDBJbnZhbGlkUHJvb2YBAQVcTm9Bc3NvY2lhdGVkVmFsaWRhdG9ySWQBAQU0RHVwbGljYXRlZEtleQEBBRhOb0tleXMBAQUkTm9BY2NvdW50AQEFEEF1cmEBAQUcQXVyYUV4dAEBBSRYY21wUXVldWUBAhQ4QmFkUXVldWVDb25maWcBAQVAQWxyZWFkeVN1c3BlbmRlZAEBBThBbHJlYWR5UmVzdW1lZAEBBXRUb29NYW55QWN0aXZlT3V0Ym91bmRDaGFubmVscwEBBRhUb29CaWcBAQUsUG9sa2Fkb3RYY20BAmAsVW5yZWFjaGFibGUBAQUsU2VuZEZhaWx1cmUBAQUgRmlsdGVyZWQBAQVIVW53ZWlnaGFibGVNZXNzYWdlAQEFYERlc3RpbmF0aW9uTm90SW52ZXJ0aWJsZQEBBRRFbXB0eQEBBThDYW5ub3RSZWFuY2hvcgEBBTRUb29NYW55QXNzZXRzAQEFNEludmFsaWRPcmlnaW4BAQUoQmFkVmVyc2lvbgEBBSxCYWRMb2NhdGlvbgEBBThOb1N1YnNjcmlwdGlvbgEBBURBbHJlYWR5U3Vic2NyaWJlZAEBBVhDYW5ub3RDaGVja091dFRlbGVwb3J0AQEFKExvd0JhbGFuY2UBAQUwVG9vTWFueUxvY2tzAQEFTEFjY291bnROb3RTb3ZlcmVpZ24BAQUoRmVlc05vdE1ldAEBBTBMb2NrTm90Rm91bmQBAQUUSW5Vc2UBAQVoSW52YWxpZEFzc2V0VW5rbm93blJlc2VydmUBAQV4SW52YWxpZEFzc2V0VW5zdXBwb3J0ZWRSZXNlcnZlAQEFPFRvb01hbnlSZXNlcnZlcwEBBWBMb2NhbEV4ZWN1dGlvbkluY29tcGxldGUBAQUoQ3VtdWx1c1hjbQEBBURUb0t1c2FtYVhjbVJvdXRlcgEBBTBNZXNzYWdlUXVldWUBAiQsTm90UmVhcGFibGUBAQUYTm9QYWdlAQEFJE5vTWVzc2FnZQEBBUBBbHJlYWR5UHJvY2Vzc2VkAQEFGFF1ZXVlZAEBBUhJbnN1ZmZpY2llbnRXZWlnaHQBAQVgVGVtcG9yYXJpbHlVbnByb2Nlc3NhYmxlAQEFLFF1ZXVlUGF1c2VkAQEFTFJlY3Vyc2l2ZURpc2FsbG93ZWQBAQUcVXRpbGl0eQECBDBUb29NYW55Q2FsbHMBAQUgTXVsdGlzaWcBAjhATWluaW11bVRocmVzaG9sZAEBBTxBbHJlYWR5QXBwcm92ZWQBAQVETm9BcHByb3ZhbHNOZWVkZWQBAQVEVG9vRmV3U2lnbmF0b3JpZXMBAQVIVG9vTWFueVNpZ25hdG9yaWVzAQEFVFNpZ25hdG9yaWVzT3V0T2ZPcmRlcgEBBUxTZW5kZXJJblNpZ25hdG9yaWVzAQEFIE5vdEZvdW5kAQEFIE5vdE93bmVyAQEFLE5vVGltZXBvaW50AQEFOFdyb25nVGltZXBvaW50AQEFTFVuZXhwZWN0ZWRUaW1lcG9pbnQBAQU8TWF4V2VpZ2h0VG9vTG93AQEFNEFscmVhZHlTdG9yZWQBAQUUUHJveHkBAiAcVG9vTWFueQEBBSBOb3RGb3VuZAEBBSBOb3RQcm94eQEBBSxVbnByb3h5YWJsZQEBBSREdXBsaWNhdGUBAQUwTm9QZXJtaXNzaW9uAQEFLFVuYW5ub3VuY2VkAQEFLE5vU2VsZlByb3h5AQEFGEFzc2V0cwECVChCYWxhbmNlTG93AQEFJE5vQWNjb3VudAEBBTBOb1Blcm1pc3Npb24BAQUcVW5rbm93bgEBBRhGcm96ZW4BAQUUSW5Vc2UBAQUoQmFkV2l0bmVzcwEBBThNaW5CYWxhbmNlWmVybwEBBUxVbmF2YWlsYWJsZUNvbnN1bWVyAQEFLEJhZE1ldGFkYXRhAQEFKFVuYXBwcm92ZWQBAQUgV291bGREaWUBAQU0QWxyZWFkeUV4aXN0cwEBBSROb0RlcG9zaXQBAQUkV291bGRCdXJuAQEFJExpdmVBc3NldAEBBTBBc3NldE5vdExpdmUBAQU8SW5jb3JyZWN0U3RhdHVzAQEFJE5vdEZyb3plbgEBBThDYWxsYmFja0ZhaWxlZAEBBShCYWRBc3NldElkAQEFHFVuaXF1ZXMBAkgwTm9QZXJtaXNzaW9uAQEFRFVua25vd25Db2xsZWN0aW9uAQEFNEFscmVhZHlFeGlzdHMBAQUoV3JvbmdPd25lcgEBBShCYWRXaXRuZXNzAQEFFEluVXNlAQEFGEZyb3plbgEBBTRXcm9uZ0RlbGVnYXRlAQEFKE5vRGVsZWdhdGUBAQUoVW5hcHByb3ZlZAEBBShVbmFjY2VwdGVkAQEFGExvY2tlZAEBBUBNYXhTdXBwbHlSZWFjaGVkAQEFTE1heFN1cHBseUFscmVhZHlTZXQBAQVETWF4U3VwcGx5VG9vU21hbGwBAQUsVW5rbm93bkl0ZW0BAQUoTm90Rm9yU2FsZQEBBSRCaWRUb29Mb3cBAQUQTmZ0cwECtDBOb1Blcm1pc3Npb24BAQVEVW5rbm93bkNvbGxlY3Rpb24BAQU0QWxyZWFkeUV4aXN0cwEBBTxBcHByb3ZhbEV4cGlyZWQBAQUoV3JvbmdPd25lcgEBBShCYWRXaXRuZXNzAQEFRENvbGxlY3Rpb25JZEluVXNlAQEFUEl0ZW1zTm9uVHJhbnNmZXJhYmxlAQEFLE5vdERlbGVnYXRlAQEFNFdyb25nRGVsZWdhdGUBAQUoVW5hcHByb3ZlZAEBBShVbmFjY2VwdGVkAQEFKEl0ZW1Mb2NrZWQBAQVQTG9ja2VkSXRlbUF0dHJpYnV0ZXMBAQVoTG9ja2VkQ29sbGVjdGlvbkF0dHJpYnV0ZXMBAQVITG9ja2VkSXRlbU1ldGFkYXRhAQEFYExvY2tlZENvbGxlY3Rpb25NZXRhZGF0YQEBBUBNYXhTdXBwbHlSZWFjaGVkAQEFPE1heFN1cHBseUxvY2tlZAEBBURNYXhTdXBwbHlUb29TbWFsbAEBBSxVbmtub3duSXRlbQEBBSxVbmtub3duU3dhcAEBBUBNZXRhZGF0YU5vdEZvdW5kAQEFREF0dHJpYnV0ZU5vdEZvdW5kAQEFKE5vdEZvclNhbGUBAQUkQmlkVG9vTG93AQEFUFJlYWNoZWRBcHByb3ZhbExpbWl0AQEFPERlYWRsaW5lRXhwaXJlZAEBBTRXcm9uZ0R1cmF0aW9uAQEFOE1ldGhvZERpc2FibGVkAQEFMFdyb25nU2V0dGluZwEBBVhJbmNvbnNpc3RlbnRJdGVtQ29uZmlnAQEFIE5vQ29uZmlnAQEFPFJvbGVzTm90Q2xlYXJlZAEBBThNaW50Tm90U3RhcnRlZAEBBSRNaW50RW5kZWQBAQU4QWxyZWFkeUNsYWltZWQBAQU0SW5jb3JyZWN0RGF0YQEBBSxXcm9uZ09yaWdpbgEBBThXcm9uZ1NpZ25hdHVyZQEBBURJbmNvcnJlY3RNZXRhZGF0YQEBBWRNYXhBdHRyaWJ1dGVzTGltaXRSZWFjaGVkAQEFOFdyb25nTmFtZXNwYWNlAQEFSENvbGxlY3Rpb25Ob3RFbXB0eQEBBTxXaXRuZXNzUmVxdWlyZWQBAQU0Rm9yZWlnbkFzc2V0cwECVChCYWxhbmNlTG93AQEFJE5vQWNjb3VudAEBBTBOb1Blcm1pc3Npb24BAQUcVW5rbm93bgEBBRhGcm96ZW4BAQUUSW5Vc2UBAQUoQmFkV2l0bmVzcwEBBThNaW5CYWxhbmNlWmVybwEBBUxVbmF2YWlsYWJsZUNvbnN1bWVyAQEFLEJhZE1ldGFkYXRhAQEFKFVuYXBwcm92ZWQBAQUgV291bGREaWUBAQU0QWxyZWFkeUV4aXN0cwEBBSROb0RlcG9zaXQBAQUkV291bGRCdXJuAQEFJExpdmVBc3NldAEBBTBBc3NldE5vdExpdmUBAQU8SW5jb3JyZWN0U3RhdHVzAQEFJE5vdEZyb3plbgEBBThDYWxsYmFja0ZhaWxlZAEBBShCYWRBc3NldElkAQEFKFBvb2xBc3NldHMBAlQoQmFsYW5jZUxvdwEBBSROb0FjY291bnQBAQUwTm9QZXJtaXNzaW9uAQEFHFVua25vd24BAQUYRnJvemVuAQEFFEluVXNlAQEFKEJhZFdpdG5lc3MBAQU4TWluQmFsYW5jZVplcm8BAQVMVW5hdmFpbGFibGVDb25zdW1lcgEBBSxCYWRNZXRhZGF0YQEBBShVbmFwcHJvdmVkAQEFIFdvdWxkRGllAQEFNEFscmVhZHlFeGlzdHMBAQUkTm9EZXBvc2l0AQEFJFdvdWxkQnVybgEBBSRMaXZlQXNzZXQBAQUwQXNzZXROb3RMaXZlAQEFPEluY29ycmVjdFN0YXR1cwEBBSROb3RGcm96ZW4BAQU4Q2FsbGJhY2tGYWlsZWQBAQUoQmFkQXNzZXRJZAEBBTxBc3NldENvbnZlcnNpb24BAlxASW52YWxpZEFzc2V0UGFpcgEBBShQb29sRXhpc3RzAQEFSFdyb25nRGVzaXJlZEFtb3VudAEBBWBBbW91bnRPbmVMZXNzVGhhbk1pbmltYWwBAQVgQW1vdW50VHdvTGVzc1RoYW5NaW5pbWFsAQEFaFJlc2VydmVMZWZ0TGVzc1RoYW5NaW5pbWFsAQEFQEFtb3VudE91dFRvb0hpZ2gBAQUwUG9vbE5vdEZvdW5kAQEFIE92ZXJmbG93AQEFgEFzc2V0T25lRGVwb3NpdERpZE5vdE1lZXRNaW5pbXVtAQEFgEFzc2V0VHdvRGVwb3NpdERpZE5vdE1lZXRNaW5pbXVtAQEFjEFzc2V0T25lV2l0aGRyYXdhbERpZE5vdE1lZXRNaW5pbXVtAQEFjEFzc2V0VHdvV2l0aGRyYXdhbERpZE5vdE1lZXRNaW5pbXVtAQEFcE9wdGltYWxBbW91bnRMZXNzVGhhbkRlc2lyZWQBAQVsSW5zdWZmaWNpZW50TGlxdWlkaXR5TWludGVkAQEFNFplcm9MaXF1aWRpdHkBAQUoWmVyb0Ftb3VudAEBBYxQcm92aWRlZE1pbmltdW1Ob3RTdWZmaWNpZW50Rm9yU3dhcAEBBYxQcm92aWRlZE1heGltdW1Ob3RTdWZmaWNpZW50Rm9yU3dhcAEBBSxJbnZhbGlkUGF0aAEBBTROb25VbmlxdWVQYXRoAQEFUEluY29ycmVjdFBvb2xBc3NldElkAQEFMEJlbG93TWluaW11bQEBBQIoQEZ1bmRzVW5hdmFpbGFibGUBAQUwT25seVByb3ZpZGVyAQEFMEJlbG93TWluaW11bQEBBTBDYW5ub3RDcmVhdGUBAQUwVW5rbm93bkFzc2V0AQEFGEZyb3plbgEBBSxVbnN1cHBvcnRlZAEBBUBDYW5ub3RDcmVhdGVIb2xkAQEFNE5vdEV4cGVuZGFibGUBAQUcQmxvY2tlZAEBBQIMJFVuZGVyZmxvdwEBBSBPdmVyZmxvdwEBBThEaXZpc2lvbkJ5WmVybwEBBQIIMExpbWl0UmVhY2hlZAEBBRxOb0xheWVyAQEFAjgUT3RoZXIBAQUwQ2Fubm90TG9va3VwAQEFJEJhZE9yaWdpbgEBBRhNb2R1bGUBAmwYU3lzdGVtAQIkPEludmFsaWRTcGVjTmFtZQEBBWhTcGVjVmVyc2lvbk5lZWRzVG9JbmNyZWFzZQEBBXRGYWlsZWRUb0V4dHJhY3RSdW50aW1lVmVyc2lvbgEBBUxOb25EZWZhdWx0Q29tcG9zaXRlAQEFPE5vblplcm9SZWZDb3VudAEBBTBDYWxsRmlsdGVyZWQBAQVsTXVsdGlCbG9ja01pZ3JhdGlvbnNPbmdvaW5nAQEFRE5vdGhpbmdBdXRob3JpemVkAQEFMFVuYXV0aG9yaXplZAEBBTxQYXJhY2hhaW5TeXN0ZW0BAiBMT3ZlcmxhcHBpbmdVcGdyYWRlcwEBBVBQcm9oaWJpdGVkQnlQb2xrYWRvdAEBBRhUb29CaWcBAQVoVmFsaWRhdGlvbkRhdGFOb3RBdmFpbGFibGUBAQV0SG9zdENvbmZpZ3VyYXRpb25Ob3RBdmFpbGFibGUBAQUwTm90U2NoZWR1bGVkAQEFRE5vdGhpbmdBdXRob3JpemVkAQEFMFVuYXV0aG9yaXplZAEBBSRUaW1lc3RhbXABAQU0UGFyYWNoYWluSW5mbwEBBSBCYWxhbmNlcwECMDhWZXN0aW5nQmFsYW5jZQEBBVRMaXF1aWRpdHlSZXN0cmljdGlvbnMBAQVMSW5zdWZmaWNpZW50QmFsYW5jZQEBBUhFeGlzdGVudGlhbERlcG9zaXQBAQU0RXhwZW5kYWJpbGl0eQEBBVxFeGlzdGluZ1Zlc3RpbmdTY2hlZHVsZQEBBSxEZWFkQWNjb3VudAEBBTxUb29NYW55UmVzZXJ2ZXMBAQUwVG9vTWFueUhvbGRzAQEFOFRvb01hbnlGcmVlemVzAQEFTElzc3VhbmNlRGVhY3RpdmF0ZWQBAQUkRGVsdGFaZXJvAQEFSFRyYW5zYWN0aW9uUGF5bWVudAEBBThBc3NldFR4UGF5bWVudAEBBRxWZXN0aW5nAQIUKE5vdFZlc3RpbmcBAQVUQXRNYXhWZXN0aW5nU2NoZWR1bGVzAQEFJEFtb3VudExvdwEBBWBTY2hlZHVsZUluZGV4T3V0T2ZCb3VuZHMBAQVUSW52YWxpZFNjaGVkdWxlUGFyYW1zAQEFKEF1dGhvcnNoaXABAQVEQ29sbGF0b3JTZWxlY3Rpb24BAkREVG9vTWFueUNhbmRpZGF0ZXMBAQVcVG9vRmV3RWxpZ2libGVDb2xsYXRvcnMBAQVAQWxyZWFkeUNhbmRpZGF0ZQEBBTBOb3RDYW5kaWRhdGUBAQVQVG9vTWFueUludnVsbmVyYWJsZXMBAQVMQWxyZWFkeUludnVsbmVyYWJsZQEBBTxOb3RJbnZ1bG5lcmFibGUBAQVcTm9Bc3NvY2lhdGVkVmFsaWRhdG9ySWQBAQVYVmFsaWRhdG9yTm90UmVnaXN0ZXJlZAEBBWxJbnNlcnRUb0NhbmRpZGF0ZUxpc3RGYWlsZWQBAQV0UmVtb3ZlRnJvbUNhbmRpZGF0ZUxpc3RGYWlsZWQBAQU0RGVwb3NpdFRvb0xvdwEBBWRVcGRhdGVDYW5kaWRhdGVMaXN0RmFpbGVkAQEFQEluc3VmZmljaWVudEJvbmQBAQVQVGFyZ2V0SXNOb3RDYW5kaWRhdGUBAQVASWRlbnRpY2FsRGVwb3NpdAEBBUBJbnZhbGlkVW5yZXNlcnZlAQEFHFNlc3Npb24BAhQwSW52YWxpZFByb29mAQEFXE5vQXNzb2NpYXRlZFZhbGlkYXRvcklkAQEFNER1cGxpY2F0ZWRLZXkBAQUYTm9LZXlzAQEFJE5vQWNjb3VudAEBBRBBdXJhAQEFHEF1cmFFeHQBAQUkWGNtcFF1ZXVlAQIUOEJhZFF1ZXVlQ29uZmlnAQEFQEFscmVhZHlTdXNwZW5kZWQBAQU4QWxyZWFkeVJlc3VtZWQBAQV0VG9vTWFueUFjdGl2ZU91dGJvdW5kQ2hhbm5lbHMBAQUYVG9vQmlnAQEFLFBvbGthZG90WGNtAQJgLFVucmVhY2hhYmxlAQEFLFNlbmRGYWlsdXJlAQEFIEZpbHRlcmVkAQEFSFVud2VpZ2hhYmxlTWVzc2FnZQEBBWBEZXN0aW5hdGlvbk5vdEludmVydGlibGUBAQUURW1wdHkBAQU4Q2Fubm90UmVhbmNob3IBAQU0VG9vTWFueUFzc2V0cwEBBTRJbnZhbGlkT3JpZ2luAQEFKEJhZFZlcnNpb24BAQUsQmFkTG9jYXRpb24BAQU4Tm9TdWJzY3JpcHRpb24BAQVEQWxyZWFkeVN1YnNjcmliZWQBAQVYQ2Fubm90Q2hlY2tPdXRUZWxlcG9ydAEBBShMb3dCYWxhbmNlAQEFMFRvb01hbnlMb2NrcwEBBUxBY2NvdW50Tm90U292ZXJlaWduAQEFKEZlZXNOb3RNZXQBAQUwTG9ja05vdEZvdW5kAQEFFEluVXNlAQEFaEludmFsaWRBc3NldFVua25vd25SZXNlcnZlAQEFeEludmFsaWRBc3NldFVuc3VwcG9ydGVkUmVzZXJ2ZQEBBTxUb29NYW55UmVzZXJ2ZXMBAQVgTG9jYWxFeGVjdXRpb25JbmNvbXBsZXRlAQEFKEN1bXVsdXNYY20BAQVEVG9LdXNhbWFYY21Sb3V0ZXIBAQUwTWVzc2FnZVF1ZXVlAQIkLE5vdFJlYXBhYmxlAQEFGE5vUGFnZQEBBSROb01lc3NhZ2UBAQVAQWxyZWFkeVByb2Nlc3NlZAEBBRhRdWV1ZWQBAQVISW5zdWZmaWNpZW50V2VpZ2h0AQEFYFRlbXBvcmFyaWx5VW5wcm9jZXNzYWJsZQEBBSxRdWV1ZVBhdXNlZAEBBUxSZWN1cnNpdmVEaXNhbGxvd2VkAQEFHFV0aWxpdHkBAgQwVG9vTWFueUNhbGxzAQEFIE11bHRpc2lnAQI4QE1pbmltdW1UaHJlc2hvbGQBAQU8QWxyZWFkeUFwcHJvdmVkAQEFRE5vQXBwcm92YWxzTmVlZGVkAQEFRFRvb0Zld1NpZ25hdG9yaWVzAQEFSFRvb01hbnlTaWduYXRvcmllcwEBBVRTaWduYXRvcmllc091dE9mT3JkZXIBAQVMU2VuZGVySW5TaWduYXRvcmllcwEBBSBOb3RGb3VuZAEBBSBOb3RPd25lcgEBBSxOb1RpbWVwb2ludAEBBThXcm9uZ1RpbWVwb2ludAEBBUxVbmV4cGVjdGVkVGltZXBvaW50AQEFPE1heFdlaWdodFRvb0xvdwEBBTRBbHJlYWR5U3RvcmVkAQEFFFByb3h5AQIgHFRvb01hbnkBAQUgTm90Rm91bmQBAQUgTm90UHJveHkBAQUsVW5wcm94eWFibGUBAQUkRHVwbGljYXRlAQEFME5vUGVybWlzc2lvbgEBBSxVbmFubm91bmNlZAEBBSxOb1NlbGZQcm94eQEBBRhBc3NldHMBAlQoQmFsYW5jZUxvdwEBBSROb0FjY291bnQBAQUwTm9QZXJtaXNzaW9uAQEFHFVua25vd24BAQUYRnJvemVuAQEFFEluVXNlAQEFKEJhZFdpdG5lc3MBAQU4TWluQmFsYW5jZVplcm8BAQVMVW5hdmFpbGFibGVDb25zdW1lcgEBBSxCYWRNZXRhZGF0YQEBBShVbmFwcHJvdmVkAQEFIFdvdWxkRGllAQEFNEFscmVhZHlFeGlzdHMBAQUkTm9EZXBvc2l0AQEFJFdvdWxkQnVybgEBBSRMaXZlQXNzZXQBAQUwQXNzZXROb3RMaXZlAQEFPEluY29ycmVjdFN0YXR1cwEBBSROb3RGcm96ZW4BAQU4Q2FsbGJhY2tGYWlsZWQBAQUoQmFkQXNzZXRJZAEBBRxVbmlxdWVzAQJIME5vUGVybWlzc2lvbgEBBURVbmtub3duQ29sbGVjdGlvbgEBBTRBbHJlYWR5RXhpc3RzAQEFKFdyb25nT3duZXIBAQUoQmFkV2l0bmVzcwEBBRRJblVzZQEBBRhGcm96ZW4BAQU0V3JvbmdEZWxlZ2F0ZQEBBShOb0RlbGVnYXRlAQEFKFVuYXBwcm92ZWQBAQUoVW5hY2NlcHRlZAEBBRhMb2NrZWQBAQVATWF4U3VwcGx5UmVhY2hlZAEBBUxNYXhTdXBwbHlBbHJlYWR5U2V0AQEFRE1heFN1cHBseVRvb1NtYWxsAQEFLFVua25vd25JdGVtAQEFKE5vdEZvclNhbGUBAQUkQmlkVG9vTG93AQEFEE5mdHMBArQwTm9QZXJtaXNzaW9uAQEFRFVua25vd25Db2xsZWN0aW9uAQEFNEFscmVhZHlFeGlzdHMBAQU8QXBwcm92YWxFeHBpcmVkAQEFKFdyb25nT3duZXIBAQUoQmFkV2l0bmVzcwEBBURDb2xsZWN0aW9uSWRJblVzZQEBBVBJdGVtc05vblRyYW5zZmVyYWJsZQEBBSxOb3REZWxlZ2F0ZQEBBTRXcm9uZ0RlbGVnYXRlAQEFKFVuYXBwcm92ZWQBAQUoVW5hY2NlcHRlZAEBBShJdGVtTG9ja2VkAQEFUExvY2tlZEl0ZW1BdHRyaWJ1dGVzAQEFaExvY2tlZENvbGxlY3Rpb25BdHRyaWJ1dGVzAQEFSExvY2tlZEl0ZW1NZXRhZGF0YQEBBWBMb2NrZWRDb2xsZWN0aW9uTWV0YWRhdGEBAQVATWF4U3VwcGx5UmVhY2hlZAEBBTxNYXhTdXBwbHlMb2NrZWQBAQVETWF4U3VwcGx5VG9vU21hbGwBAQUsVW5rbm93bkl0ZW0BAQUsVW5rbm93blN3YXABAQVATWV0YWRhdGFOb3RGb3VuZAEBBURBdHRyaWJ1dGVOb3RGb3VuZAEBBShOb3RGb3JTYWxlAQEFJEJpZFRvb0xvdwEBBVBSZWFjaGVkQXBwcm92YWxMaW1pdAEBBTxEZWFkbGluZUV4cGlyZWQBAQU0V3JvbmdEdXJhdGlvbgEBBThNZXRob2REaXNhYmxlZAEBBTBXcm9uZ1NldHRpbmcBAQVYSW5jb25zaXN0ZW50SXRlbUNvbmZpZwEBBSBOb0NvbmZpZwEBBTxSb2xlc05vdENsZWFyZWQBAQU4TWludE5vdFN0YXJ0ZWQBAQUkTWludEVuZGVkAQEFOEFscmVhZHlDbGFpbWVkAQEFNEluY29ycmVjdERhdGEBAQUsV3JvbmdPcmlnaW4BAQU4V3JvbmdTaWduYXR1cmUBAQVESW5jb3JyZWN0TWV0YWRhdGEBAQVkTWF4QXR0cmlidXRlc0xpbWl0UmVhY2hlZAEBBThXcm9uZ05hbWVzcGFjZQEBBUhDb2xsZWN0aW9uTm90RW1wdHkBAQU8V2l0bmVzc1JlcXVpcmVkAQEFNEZvcmVpZ25Bc3NldHMBAlQoQmFsYW5jZUxvdwEBBSROb0FjY291bnQBAQUwTm9QZXJtaXNzaW9uAQEFHFVua25vd24BAQUYRnJvemVuAQEFFEluVXNlAQEFKEJhZFdpdG5lc3MBAQU4TWluQmFsYW5jZVplcm8BAQVMVW5hdmFpbGFibGVDb25zdW1lcgEBBSxCYWRNZXRhZGF0YQEBBShVbmFwcHJvdmVkAQEFIFdvdWxkRGllAQEFNEFscmVhZHlFeGlzdHMBAQUkTm9EZXBvc2l0AQEFJFdvdWxkQnVybgEBBSRMaXZlQXNzZXQBAQUwQXNzZXROb3RMaXZlAQEFPEluY29ycmVjdFN0YXR1cwEBBSROb3RGcm96ZW4BAQU4Q2FsbGJhY2tGYWlsZWQBAQUoQmFkQXNzZXRJZAEBBShQb29sQXNzZXRzAQJUKEJhbGFuY2VMb3cBAQUkTm9BY2NvdW50AQEFME5vUGVybWlzc2lvbgEBBRxVbmtub3duAQEFGEZyb3plbgEBBRRJblVzZQEBBShCYWRXaXRuZXNzAQEFOE1pbkJhbGFuY2VaZXJvAQEFTFVuYXZhaWxhYmxlQ29uc3VtZXIBAQUsQmFkTWV0YWRhdGEBAQUoVW5hcHByb3ZlZAEBBSBXb3VsZERpZQEBBTRBbHJlYWR5RXhpc3RzAQEFJE5vRGVwb3NpdAEBBSRXb3VsZEJ1cm4BAQUkTGl2ZUFzc2V0AQEFMEFzc2V0Tm90TGl2ZQEBBTxJbmNvcnJlY3RTdGF0dXMBAQUkTm90RnJvemVuAQEFOENhbGxiYWNrRmFpbGVkAQEFKEJhZEFzc2V0SWQBAQU8QXNzZXRDb252ZXJzaW9uAQJcQEludmFsaWRBc3NldFBhaXIBAQUoUG9vbEV4aXN0cwEBBUhXcm9uZ0Rlc2lyZWRBbW91bnQBAQVgQW1vdW50T25lTGVzc1RoYW5NaW5pbWFsAQEFYEFtb3VudFR3b0xlc3NUaGFuTWluaW1hbAEBBWhSZXNlcnZlTGVmdExlc3NUaGFuTWluaW1hbAEBBUBBbW91bnRPdXRUb29IaWdoAQEFMFBvb2xOb3RGb3VuZAEBBSBPdmVyZmxvdwEBBYBBc3NldE9uZURlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYBBc3NldFR3b0RlcG9zaXREaWROb3RNZWV0TWluaW11bQEBBYxBc3NldE9uZVdpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBYxBc3NldFR3b1dpdGhkcmF3YWxEaWROb3RNZWV0TWluaW11bQEBBXBPcHRpbWFsQW1vdW50TGVzc1RoYW5EZXNpcmVkAQEFbEluc3VmZmljaWVudExpcXVpZGl0eU1pbnRlZAEBBTRaZXJvTGlxdWlkaXR5AQEFKFplcm9BbW91bnQBAQWMUHJvdmlkZWRNaW5pbXVtTm90U3VmZmljaWVudEZvclN3YXABAQWMUHJvdmlkZWRNYXhpbXVtTm90U3VmZmljaWVudEZvclN3YXABAQUsSW52YWxpZFBhdGgBAQU0Tm9uVW5pcXVlUGF0aAEBBVBJbmNvcnJlY3RQb29sQXNzZXRJZAEBBTBCZWxvd01pbmltdW0BAQVEQ29uc3VtZXJSZW1haW5pbmcBAQUsTm9Qcm92aWRlcnMBAQVAVG9vTWFueUNvbnN1bWVycwEBBRRUb2tlbgECKEBGdW5kc1VuYXZhaWxhYmxlAQEFME9ubHlQcm92aWRlcgEBBTBCZWxvd01pbmltdW0BAQUwQ2Fubm90Q3JlYXRlAQEFMFVua25vd25Bc3NldAEBBRhGcm96ZW4BAQUsVW5zdXBwb3J0ZWQBAQVAQ2Fubm90Q3JlYXRlSG9sZAEBBTROb3RFeHBlbmRhYmxlAQEFHEJsb2NrZWQBAQUoQXJpdGhtZXRpYwECDCRVbmRlcmZsb3cBAQUgT3ZlcmZsb3cBAQU4RGl2aXNpb25CeVplcm8BAQU0VHJhbnNhY3Rpb25hbAECCDBMaW1pdFJlYWNoZWQBAQUcTm9MYXllcgEBBSRFeGhhdXN0ZWQBAQUoQ29ycnVwdGlvbgEBBSxVbmF2YWlsYWJsZQEBBThSb290Tm90QWxsb3dlZAEBBQIcQEV4dHJpbnNpY1N1Y2Nlc3MBAAQ0ZGlzcGF0Y2hfaW5mb0A8RXh0cmluc2ljRmFpbGVkAQAIOGRpc3BhdGNoX2Vycm9ylDRkaXNwYXRjaF9pbmZvQCxDb2RlVXBkYXRlZAEBBShOZXdBY2NvdW50AQAEHGFjY291bnQANEtpbGxlZEFjY291bnQBAAQcYWNjb3VudAAgUmVtYXJrZWQBAAgYc2VuZGVyABBoYXNoIERVcGdyYWRlQXV0aG9yaXplZAEACCRjb2RlX2hhc2ggNGNoZWNrX3ZlcnNpb24UBiACGGBWYWxpZGF0aW9uRnVuY3Rpb25TdG9yZWQBAQVkVmFsaWRhdGlvbkZ1bmN0aW9uQXBwbGllZAEABFRyZWxheV9jaGFpbl9ibG9ja19udW0EbFZhbGlkYXRpb25GdW5jdGlvbkRpc2NhcmRlZAEBBWBEb3dud2FyZE1lc3NhZ2VzUmVjZWl2ZWQBAAQUY291bnQEZERvd253YXJkTWVzc2FnZXNQcm9jZXNzZWQBAAgsd2VpZ2h0X3VzZWQYIGRtcV9oZWFkIERVcHdhcmRNZXNzYWdlU2VudAEABDBtZXNzYWdlX2hhc2icAggQRnJlZQEBBSBSZXNlcnZlZAEBBQJYHEVuZG93ZWQBAAgcYWNjb3VudAAwZnJlZV9iYWxhbmNlCCBEdXN0TG9zdAEACBxhY2NvdW50ABhhbW91bnQIIFRyYW5zZmVyAQAMEGZyb20ACHRvABhhbW91bnQIKEJhbGFuY2VTZXQBAAgMd2hvABBmcmVlCCBSZXNlcnZlZAEACAx3aG8AGGFtb3VudAgoVW5yZXNlcnZlZAEACAx3aG8AGGFtb3VudAhIUmVzZXJ2ZVJlcGF0cmlhdGVkAQAQEGZyb20ACHRvABhhbW91bnQISGRlc3RpbmF0aW9uX3N0YXR1c6QcRGVwb3NpdAEACAx3aG8AGGFtb3VudAggV2l0aGRyYXcBAAgMd2hvABhhbW91bnQIHFNsYXNoZWQBAAgMd2hvABhhbW91bnQIGE1pbnRlZAEACAx3aG8AGGFtb3VudAgYQnVybmVkAQAIDHdobwAYYW1vdW50CCRTdXNwZW5kZWQBAAgMd2hvABhhbW91bnQIIFJlc3RvcmVkAQAIDHdobwAYYW1vdW50CCBVcGdyYWRlZAEABAx3aG8AGElzc3VlZAEABBhhbW91bnQIJFJlc2NpbmRlZAEABBhhbW91bnQIGExvY2tlZAEACAx3aG8AGGFtb3VudAggVW5sb2NrZWQBAAgMd2hvABhhbW91bnQIGEZyb3plbgEACAx3aG8AGGFtb3VudAgYVGhhd2VkAQAIDHdobwAYYW1vdW50CExUb3RhbElzc3VhbmNlRm9yY2VkAQAIDG9sZAgMbmV3CAIESFRyYW5zYWN0aW9uRmVlUGFpZAEADAx3aG8AKGFjdHVhbF9mZWUIDHRpcAgCLCRCeUdlbmVzaXMBBQGAGEJ5Rm9yawEACDBibG9ja19udW1iZXIIKGJsb2NrX2hhc2ggIFBvbGthZG90AQEFGEt1c2FtYQEBBRxXZXN0ZW5kAQEFGFJvY29jbwEBBRhXb2NvY28BAQUgRXRoZXJldW0BAAQgY2hhaW5faWQILEJpdGNvaW5Db3JlAQEFLEJpdGNvaW5DYXNoAQEFQFBvbGthZG90QnVsbGV0aW4BAQUGsAUBUAIoEFVuaXQBAQUcTW9uaWtlcgEFARAUSW5kZXgBAQIkRXhlY3V0aXZlAQEFJFRlY2huaWNhbAEBBSxMZWdpc2xhdGl2ZQEBBSBKdWRpY2lhbAEBBRxEZWZlbnNlAQEFOEFkbWluaXN0cmF0aW9uAQEFIFRyZWFzdXJ5AQEFAhQUVm9pY2UBAQUcTWVtYmVycwEABBRjb3VudAQgRnJhY3Rpb24BAAgMbm9tBBRkZW5vbQREQXRMZWFzdFByb3BvcnRpb24BAAgMbm9tBBRkZW5vbQRITW9yZVRoYW5Qcm9wb3J0aW9uAQAIDG5vbQQUZGVub20EAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFBMQBCATEAQwExAEQBMQBFATEARgExAEcBMQBIAIkEEhlcmUBAQUIWDEBAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFCFgyAQTEAQgIWDMBBMQBDAhYNAEExAEQCFg1AQTEARQIWDYBBMQBGAhYNwEExAEcCFg4AQTEASAACBxwYXJlbnRzBCBpbnRlcmlvcuQCCDhBc3NldFR4RmVlUGFpZAEAEAx3aG8AKGFjdHVhbF9mZWUIDHRpcAggYXNzZXRfaWToREFzc2V0UmVmdW5kRmFpbGVkAQAESG5hdGl2ZV9hbW91bnRfa2VwdAgCCDhWZXN0aW5nVXBkYXRlZAEACBxhY2NvdW50ACB1bnZlc3RlZAhAVmVzdGluZ0NvbXBsZXRlZAEABBxhY2NvdW50AAQAAAIoQE5ld0ludnVsbmVyYWJsZXMBAAQ0aW52dWxuZXJhYmxlc/RESW52dWxuZXJhYmxlQWRkZWQBAAQoYWNjb3VudF9pZABMSW52dWxuZXJhYmxlUmVtb3ZlZAEABChhY2NvdW50X2lkAFBOZXdEZXNpcmVkQ2FuZGlkYXRlcwEABEhkZXNpcmVkX2NhbmRpZGF0ZXMEQE5ld0NhbmRpZGFjeUJvbmQBAAQsYm9uZF9hbW91bnQIOENhbmRpZGF0ZUFkZGVkAQAIKGFjY291bnRfaWQAHGRlcG9zaXQIUENhbmRpZGF0ZUJvbmRVcGRhdGVkAQAIKGFjY291bnRfaWQAHGRlcG9zaXQIQENhbmRpZGF0ZVJlbW92ZWQBAAQoYWNjb3VudF9pZABEQ2FuZGlkYXRlUmVwbGFjZWQBAAwMb2xkAAxuZXcAHGRlcG9zaXQIaEludmFsaWRJbnZ1bG5lcmFibGVTa2lwcGVkAQAEKGFjY291bnRfaWQAAgQoTmV3U2Vzc2lvbgEABDRzZXNzaW9uX2luZGV4BAIEPFhjbXBNZXNzYWdlU2VudAEABDBtZXNzYWdlX2hhc2ggAqAgT3ZlcmZsb3cBAQU0VW5pbXBsZW1lbnRlZAEBBWBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb24BAQVkVW50cnVzdGVkVGVsZXBvcnRMb2NhdGlvbgEBBTBMb2NhdGlvbkZ1bGwBAQVUTG9jYXRpb25Ob3RJbnZlcnRpYmxlAQEFJEJhZE9yaWdpbgEBBTxJbnZhbGlkTG9jYXRpb24BAQU0QXNzZXROb3RGb3VuZAEBBVRGYWlsZWRUb1RyYW5zYWN0QXNzZXQBAQU8Tm90V2l0aGRyYXdhYmxlAQEFSExvY2F0aW9uQ2Fubm90SG9sZAEBBVRFeGNlZWRzTWF4TWVzc2FnZVNpemUBAQVYRGVzdGluYXRpb25VbnN1cHBvcnRlZAEBBSRUcmFuc3BvcnQBAQUoVW5yb3V0YWJsZQEBBTBVbmtub3duQ2xhaW0BAQU4RmFpbGVkVG9EZWNvZGUBAQVATWF4V2VpZ2h0SW52YWxpZAEBBThOb3RIb2xkaW5nRmVlcwEBBTBUb29FeHBlbnNpdmUBAQUQVHJhcAEBA0BFeHBlY3RhdGlvbkZhbHNlAQEFOFBhbGxldE5vdEZvdW5kAQEFME5hbWVNaXNtYXRjaAEBBUxWZXJzaW9uSW5jb21wYXRpYmxlAQEFUEhvbGRpbmdXb3VsZE92ZXJmbG93AQEFLEV4cG9ydEVycm9yAQEFOFJlYW5jaG9yRmFpbGVkAQEFGE5vRGVhbAEBBShGZWVzTm90TWV0AQEFJExvY2tFcnJvcgEBBTBOb1Blcm1pc3Npb24BAQUoVW5hbmNob3JlZAEBBThOb3REZXBvc2l0YWJsZQEBBUxVbmhhbmRsZWRYY21WZXJzaW9uAQEFSFdlaWdodExpbWl0UmVhY2hlZAEACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgcQmFycmllcgEBBUxXZWlnaHROb3RDb21wdXRhYmxlAQEFREV4Y2VlZHNTdGFja0xpbWl0AQEFAgwgQ29tcGxldGUBAAQQdXNlZBgoSW5jb21wbGV0ZQEACBB1c2VkGBRlcnJvcgUBFEVycm9yAQAEFGVycm9yBQEFASAFAUACGCRVbmRlZmluZWQBAQUUSW5kZXgBAQMYQXJyYXk0AQUBEBhBcnJheTgBBQEgHEFycmF5MTYBBQFAHEFycmF5MzIBBQGAAgggRnVuZ2libGUBAQMsTm9uRnVuZ2libGUBAhgkVW5kZWZpbmVkAQEFFEluZGV4AQEDGEFycmF5NAEFARAYQXJyYXk4AQUBIBxBcnJheTE2AQUBQBxBcnJheTMyAQUBgAAICGlk6AxmdW4ZAQQdAQADCAQFAQYlAQAYFGluZGV4BBBuYW1lJCxtb2R1bGVfbmFtZSQUbWFqb3IEFG1pbm9yBBRwYXRjaAQELQEAAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAIYEE51bGwBAQUYQXNzZXRzAQQdAQA8RXhlY3V0aW9uUmVzdWx0AQYlARxWZXJzaW9uAQECLFBhbGxldHNJbmZvAQQtAQA4RGlzcGF0Y2hSZXN1bHQBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAboAhAYTmF0aXZlAQEFQFNvdmVyZWlnbkFjY291bnQBAQUkU3VwZXJ1c2VyAQEFDFhjbQEBBQAMLGRlc3RpbmF0aW9u6CBxdWVyeV9pZAgobWF4X3dlaWdodBgCCCBGdW5naWJsZQEBBSxOb25GdW5naWJsZQEBBQIQDEFsbAEBBRRBbGxPZgEACAhpZOgMZnVuSQEoQWxsQ291bnRlZAEBAjBBbGxPZkNvdW50ZWQBAAwIaWToDGZ1bkkBFGNvdW50BAIIIERlZmluaXRlAQQdAQAQV2lsZAECEAxBbGwBAQUUQWxsT2YBAAgIaWToDGZ1bkkBKEFsbENvdW50ZWQBAQIwQWxsT2ZDb3VudGVkAQAMCGlk6AxmdW5JARRjb3VudAQCCCRVbmxpbWl0ZWQBAQUcTGltaXRlZAEACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgCwDRXaXRoZHJhd0Fzc2V0AQQdAQBUUmVzZXJ2ZUFzc2V0RGVwb3NpdGVkAQQdAQBYUmVjZWl2ZVRlbGVwb3J0ZWRBc3NldAEEHQEANFF1ZXJ5UmVzcG9uc2UBABAgcXVlcnlfaWQIIHJlc3BvbnNlOQEobWF4X3dlaWdodBgccXVlcmllcj0BNFRyYW5zZmVyQXNzZXQBAAgYYXNzZXRzIQEsYmVuZWZpY2lhcnnoUFRyYW5zZmVyUmVzZXJ2ZUFzc2V0AQAMGGFzc2V0cyEBEGRlc3ToDHhjbV0BIFRyYW5zYWN0AQAMLG9yaWdpbl9raW5kQQFYcmVxdWlyZV93ZWlnaHRfYXRfbW9zdBgQY2FsbCRkSHJtcE5ld0NoYW5uZWxPcGVuUmVxdWVzdAEADBhzZW5kZXIEQG1heF9tZXNzYWdlX3NpemUEMG1heF9jYXBhY2l0eQRMSHJtcENoYW5uZWxBY2NlcHRlZAEABCRyZWNpcGllbnQESEhybXBDaGFubmVsQ2xvc2luZwEADCRpbml0aWF0b3IEGHNlbmRlcgQkcmVjaXBpZW50BCxDbGVhck9yaWdpbgEBBTREZXNjZW5kT3JpZ2luAQIkEEhlcmUBAQUIWDEBAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFCFgyAQTEAQgIWDMBBMQBDAhYNAEExAEQCFg1AQTEARQIWDYBBMQBGAhYNwEExAEcCFg4AQTEASAsUmVwb3J0RXJyb3IBAAwsZGVzdGluYXRpb27oIHF1ZXJ5X2lkCChtYXhfd2VpZ2h0GDBEZXBvc2l0QXNzZXQBAAgYYXNzZXRzUQEsYmVuZWZpY2lhcnnoTERlcG9zaXRSZXNlcnZlQXNzZXQBAAwYYXNzZXRzUQEQZGVzdOgMeGNtXQE0RXhjaGFuZ2VBc3NldAEADBBnaXZlUQEQd2FudCEBHG1heGltYWwUXEluaXRpYXRlUmVzZXJ2ZVdpdGhkcmF3AQAMGGFzc2V0c1EBHHJlc2VydmXoDHhjbV0BQEluaXRpYXRlVGVsZXBvcnQBAAwYYXNzZXRzUQEQZGVzdOgMeGNtXQE0UmVwb3J0SG9sZGluZwEACDRyZXNwb25zZV9pbmZvRQEYYXNzZXRzUQEwQnV5RXhlY3V0aW9uAQAIEGZlZXMdATB3ZWlnaHRfbGltaXRVATRSZWZ1bmRTdXJwbHVzAQEFPFNldEVycm9ySGFuZGxlcgEEWQEALFNldEFwcGVuZGl4AQRZAQAoQ2xlYXJFcnJvcgEBBShDbGFpbUFzc2V0AQAIGGFzc2V0cyEBGHRpY2tldOgQVHJhcAEBA0BTdWJzY3JpYmVWZXJzaW9uAQAIIHF1ZXJ5X2lkCExtYXhfcmVzcG9uc2Vfd2VpZ2h0GEhVbnN1YnNjcmliZVZlcnNpb24BAQUkQnVybkFzc2V0AQQdAQAsRXhwZWN0QXNzZXQBBB0BADBFeHBlY3RPcmlnaW4BBugsRXhwZWN0RXJyb3IBBiUBUEV4cGVjdFRyYW5zYWN0U3RhdHVzAQIMHFN1Y2Nlc3MBAQUURXJyb3IBBQA4VHJ1bmNhdGVkRXJyb3IBBQAsUXVlcnlQYWxsZXQBAAgsbW9kdWxlX25hbWUkNHJlc3BvbnNlX2luZm9FATBFeHBlY3RQYWxsZXQBABQUaW5kZXgEEG5hbWUkLG1vZHVsZV9uYW1lJCxjcmF0ZV9tYWpvcgQ8bWluX2NyYXRlX21pbm9yBFBSZXBvcnRUcmFuc2FjdFN0YXR1cwEADCxkZXN0aW5hdGlvbuggcXVlcnlfaWQIKG1heF93ZWlnaHQYTENsZWFyVHJhbnNhY3RTdGF0dXMBAQU8VW5pdmVyc2FsT3JpZ2luAQIoJFBhcmFjaGFpbgEBAixBY2NvdW50SWQzMgEACBxuZXR3b3JrtAhpZCA4QWNjb3VudEluZGV4NjQBAAgcbmV0d29ya7QUaW5kZXgIMEFjY291bnRLZXkyMAEACBxuZXR3b3JrtAxrZXm4OFBhbGxldEluc3RhbmNlAQECMEdlbmVyYWxJbmRleAEBAyhHZW5lcmFsS2V5AQAIGGxlbmd0aAQQZGF0YSAkT25seUNoaWxkAQEFJFBsdXJhbGl0eQEACAhpZLwQcGFydMA8R2xvYmFsQ29uc2Vuc3VzAQIsJEJ5R2VuZXNpcwEFAYAYQnlGb3JrAQAIMGJsb2NrX251bWJlcggoYmxvY2tfaGFzaCAgUG9sa2Fkb3QBAQUYS3VzYW1hAQEFHFdlc3RlbmQBAQUYUm9jb2NvAQEFGFdvY29jbwEBBSBFdGhlcmV1bQEABCBjaGFpbl9pZAgsQml0Y29pbkNvcmUBAQUsQml0Y29pbkNhc2gBAQVAUG9sa2Fkb3RCdWxsZXRpbgEBBTRFeHBvcnRNZXNzYWdlAQAMHG5ldHdvcmuwLGRlc3RpbmF0aW9u5Ax4Y21dASRMb2NrQXNzZXQBAAgUYXNzZXQdASB1bmxvY2tlcugsVW5sb2NrQXNzZXQBAAgUYXNzZXQdARh0YXJnZXToOE5vdGVVbmxvY2thYmxlAQAIFGFzc2V0HQEUb3duZXLoNFJlcXVlc3RVbmxvY2sBAAgUYXNzZXQdARhsb2NrZXLoLFNldEZlZXNNb2RlAQAEMGppdF93aXRoZHJhdxQgU2V0VG9waWMBBQGAKENsZWFyVG9waWMBAQUsQWxpYXNPcmlnaW4BAAgccGFyZW50cwQgaW50ZXJpb3LkPFVucGFpZEV4ZWN1dGlvbgEACDB3ZWlnaHRfbGltaXRVATBjaGVja19vcmlnaW49AQRZAQACEAxBbnkBAQUUTmFtZWQBBQAgUG9sa2Fkb3QBAQUYS3VzYW1hAQEFAigQVW5pdAEBBRROYW1lZAEFABRJbmRleAEBAiRFeGVjdXRpdmUBAQUkVGVjaG5pY2FsAQEFLExlZ2lzbGF0aXZlAQEFIEp1ZGljaWFsAQEFHERlZmVuc2UBAQU4QWRtaW5pc3RyYXRpb24BAQUgVHJlYXN1cnkBAQUCJCRQYXJhY2hhaW4BAQIsQWNjb3VudElkMzIBAAgcbmV0d29ya2EBCGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrYQEUaW5kZXgIMEFjY291bnRLZXkyMAEACBxuZXR3b3JrYQEMa2V5uDhQYWxsZXRJbnN0YW5jZQEBAjBHZW5lcmFsSW5kZXgBAQMoR2VuZXJhbEtleQEFACRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkZQEQcGFydMACJBBIZXJlAQEFCFgxAQIkJFBhcmFjaGFpbgEBAixBY2NvdW50SWQzMgEACBxuZXR3b3JrYQEIaWQgOEFjY291bnRJbmRleDY0AQAIHG5ldHdvcmthARRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmthAQxrZXm4OFBhbGxldEluc3RhbmNlAQECMEdlbmVyYWxJbmRleAEBAyhHZW5lcmFsS2V5AQUAJE9ubHlDaGlsZAEBBSRQbHVyYWxpdHkBAAgIaWRlARBwYXJ0wAhYMgEEaQEBCAhYMwEEaQEBDAhYNAEEaQEBEAhYNQEEaQEBFAhYNgEEaQEBGAhYNwEEaQEBHAhYOAEEaQEBIAAIHHBhcmVudHMEIGludGVyaW9ybQECCCBDb25jcmV0ZQEACBxwYXJlbnRzBCBpbnRlcmlvcm0BIEFic3RyYWN0AQUAAhwkVW5kZWZpbmVkAQEFFEluZGV4AQEDGEFycmF5NAEFARAYQXJyYXk4AQUBIBxBcnJheTE2AQUBQBxBcnJheTMyAQUBgBBCbG9iAQUAAgggRnVuZ2libGUBAQMsTm9uRnVuZ2libGUBAhwkVW5kZWZpbmVkAQEFFEluZGV4AQEDGEFycmF5NAEFARAYQXJyYXk4AQUBIBxBcnJheTE2AQUBQBxBcnJheTMyAQUBgBBCbG9iAQUAAAgIaWR1AQxmdW59AQSBAQACCCBDb25jcmV0ZQEACBxwYXJlbnRzBCBpbnRlcmlvcuQgQWJzdHJhY3QBBQGAAAgIaWSJAQxmdW4ZAQSNAQACDAhWMgEEgQEACFYzAQSNAQAIVjQBBB0BAAIMCFYyAQAIHHBhcmVudHMEIGludGVyaW9ybQEIVjMBAAgccGFyZW50cwQgaW50ZXJpb3LkCFY0AQAIHHBhcmVudHMEIGludGVyaW9y5AJgJEF0dGVtcHRlZAEABBxvdXRjb21lCQEQU2VudAEAEBhvcmlnaW7oLGRlc3RpbmF0aW9u6BxtZXNzYWdlXQEobWVzc2FnZV9pZCBIVW5leHBlY3RlZFJlc3BvbnNlAQAIGG9yaWdpbuggcXVlcnlfaWQINFJlc3BvbnNlUmVhZHkBAAggcXVlcnlfaWQIIHJlc3BvbnNlOQEgTm90aWZpZWQBAAwgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleARATm90aWZ5T3ZlcndlaWdodAEAFCBxdWVyeV9pZAgwcGFsbGV0X2luZGV4BChjYWxsX2luZGV4BDRhY3R1YWxfd2VpZ2h0GExtYXhfYnVkZ2V0ZWRfd2VpZ2h0GExOb3RpZnlEaXNwYXRjaEVycm9yAQAMIHF1ZXJ5X2lkCDBwYWxsZXRfaW5kZXgEKGNhbGxfaW5kZXgESE5vdGlmeURlY29kZUZhaWxlZAEADCBxdWVyeV9pZAgwcGFsbGV0X2luZGV4BChjYWxsX2luZGV4BEBJbnZhbGlkUmVzcG9uZGVyAQAMGG9yaWdpbuggcXVlcnlfaWQIRGV4cGVjdGVkX2xvY2F0aW9uPQFcSW52YWxpZFJlc3BvbmRlclZlcnNpb24BAAgYb3JpZ2lu6CBxdWVyeV9pZAg0UmVzcG9uc2VUYWtlbgEABCBxdWVyeV9pZAg0QXNzZXRzVHJhcHBlZAEADBBoYXNoIBhvcmlnaW7oGGFzc2V0c5UBVFZlcnNpb25DaGFuZ2VOb3RpZmllZAEAECxkZXN0aW5hdGlvbugYcmVzdWx0BBBjb3N0IQEobWVzc2FnZV9pZCBcU3VwcG9ydGVkVmVyc2lvbkNoYW5nZWQBAAggbG9jYXRpb27oHHZlcnNpb24EUE5vdGlmeVRhcmdldFNlbmRGYWlsAQAMIGxvY2F0aW9u6CBxdWVyeV9pZAgUZXJyb3IFAWROb3RpZnlUYXJnZXRNaWdyYXRpb25GYWlsAQAIIGxvY2F0aW9umQEgcXVlcnlfaWQIVEludmFsaWRRdWVyaWVyVmVyc2lvbgEACBhvcmlnaW7oIHF1ZXJ5X2lkCDhJbnZhbGlkUXVlcmllcgEAEBhvcmlnaW7oIHF1ZXJ5X2lkCEBleHBlY3RlZF9xdWVyaWVy6FBtYXliZV9hY3R1YWxfcXVlcmllcj0BUFZlcnNpb25Ob3RpZnlTdGFydGVkAQAMLGRlc3RpbmF0aW9u6BBjb3N0IQEobWVzc2FnZV9pZCBYVmVyc2lvbk5vdGlmeVJlcXVlc3RlZAEADCxkZXN0aW5hdGlvbugQY29zdCEBKG1lc3NhZ2VfaWQgYFZlcnNpb25Ob3RpZnlVbnJlcXVlc3RlZAEADCxkZXN0aW5hdGlvbugQY29zdCEBKG1lc3NhZ2VfaWQgIEZlZXNQYWlkAQAIGHBheWluZ+gQZmVlcyEBNEFzc2V0c0NsYWltZWQBAAwQaGFzaCAYb3JpZ2lu6Bhhc3NldHOVAWBWZXJzaW9uTWlncmF0aW9uRmluaXNoZWQBAAQcdmVyc2lvbgQCDDRJbnZhbGlkRm9ybWF0AQUBgEhVbnN1cHBvcnRlZFZlcnNpb24BBQGAQEV4ZWN1dGVkRG93bndhcmQBAwggCQECDBBIZXJlAQEFGFBhcmVudAEBBRxTaWJsaW5nAQECAhgkQmFkRm9ybWF0AQEFHENvcnJ1cHQBAQUsVW5zdXBwb3J0ZWQBAQUoT3ZlcndlaWdodAEACCByZWZfdGltZQgocHJvb2Zfc2l6ZQgUWWllbGQBAQVEU3RhY2tMaW1pdFJlYWNoZWQBAQUCEEBQcm9jZXNzaW5nRmFpbGVkAQAMCGlkIBhvcmlnaW6lARRlcnJvcqkBJFByb2Nlc3NlZAEAEAhpZCAYb3JpZ2lupQEsd2VpZ2h0X3VzZWQYHHN1Y2Nlc3MUSE92ZXJ3ZWlnaHRFbnF1ZXVlZAEAEAhpZCAYb3JpZ2lupQEocGFnZV9pbmRleAQ0bWVzc2FnZV9pbmRleAQoUGFnZVJlYXBlZAEACBhvcmlnaW6lARRpbmRleAQBBQexAZQCGEBCYXRjaEludGVycnVwdGVkAQAIFGluZGV4BBRlcnJvcpQ4QmF0Y2hDb21wbGV0ZWQBAQVgQmF0Y2hDb21wbGV0ZWRXaXRoRXJyb3JzAQEFNEl0ZW1Db21wbGV0ZWQBAQUoSXRlbUZhaWxlZAEABBRlcnJvcpQwRGlzcGF0Y2hlZEFzAQAEGHJlc3VsdLUBAAgYaGVpZ2h0BBRpbmRleAQCECxOZXdNdWx0aXNpZwEADCRhcHByb3ZpbmcAIG11bHRpc2lnACRjYWxsX2hhc2ggQE11bHRpc2lnQXBwcm92YWwBABAkYXBwcm92aW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIEBNdWx0aXNpZ0V4ZWN1dGVkAQAUJGFwcHJvdmluZwAkdGltZXBvaW50vQEgbXVsdGlzaWcAJGNhbGxfaGFzaCAYcmVzdWx0tQFETXVsdGlzaWdDYW5jZWxsZWQBABAoY2FuY2VsbGluZwAkdGltZXBvaW50vQEgbXVsdGlzaWcAJGNhbGxfaGFzaCACHAxBbnkBAQUsTm9uVHJhbnNmZXIBAQUsQ2FuY2VsUHJveHkBAQUYQXNzZXRzAQEFKEFzc2V0T3duZXIBAQUwQXNzZXRNYW5hZ2VyAQEFIENvbGxhdG9yAQEFAhQ0UHJveHlFeGVjdXRlZAEABBhyZXN1bHS1ASxQdXJlQ3JlYXRlZAEAEBBwdXJlAAx3aG8AKHByb3h5X3R5cGXFAVBkaXNhbWJpZ3VhdGlvbl9pbmRleAQkQW5ub3VuY2VkAQAMEHJlYWwAFHByb3h5ACRjYWxsX2hhc2ggKFByb3h5QWRkZWQBABAkZGVsZWdhdG9yACRkZWxlZ2F0ZWUAKHByb3h5X3R5cGXFARRkZWxheQQwUHJveHlSZW1vdmVkAQAQJGRlbGVnYXRvcgAkZGVsZWdhdGVlAChwcm94eV90eXBlxQEUZGVsYXkEAmgcQ3JlYXRlZAEADCBhc3NldF9pZAQcY3JlYXRvcgAUb3duZXIAGElzc3VlZAEADCBhc3NldF9pZAQUb3duZXIAGGFtb3VudAgsVHJhbnNmZXJyZWQBABAgYXNzZXRfaWQEEGZyb20ACHRvABhhbW91bnQIGEJ1cm5lZAEADCBhc3NldF9pZAQUb3duZXIAHGJhbGFuY2UILFRlYW1DaGFuZ2VkAQAQIGFzc2V0X2lkBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyADBPd25lckNoYW5nZWQBAAggYXNzZXRfaWQEFG93bmVyABhGcm96ZW4BAAggYXNzZXRfaWQEDHdobwAYVGhhd2VkAQAIIGFzc2V0X2lkBAx3aG8ALEFzc2V0RnJvemVuAQAEIGFzc2V0X2lkBCxBc3NldFRoYXdlZAEABCBhc3NldF9pZAREQWNjb3VudHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQESGFjY291bnRzX2Rlc3Ryb3llZARIYWNjb3VudHNfcmVtYWluaW5nBEhBcHByb3ZhbHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQETGFwcHJvdmFsc19kZXN0cm95ZWQETGFwcHJvdmFsc19yZW1haW5pbmcESERlc3RydWN0aW9uU3RhcnRlZAEABCBhc3NldF9pZAQkRGVzdHJveWVkAQAEIGFzc2V0X2lkBDBGb3JjZUNyZWF0ZWQBAAggYXNzZXRfaWQEFG93bmVyACxNZXRhZGF0YVNldAEAFCBhc3NldF9pZAQQbmFtZSQYc3ltYm9sJCBkZWNpbWFscwQkaXNfZnJvemVuFDxNZXRhZGF0YUNsZWFyZWQBAAQgYXNzZXRfaWQEQEFwcHJvdmVkVHJhbnNmZXIBABAgYXNzZXRfaWQEGHNvdXJjZQAgZGVsZWdhdGUAGGFtb3VudAhEQXBwcm92YWxDYW5jZWxsZWQBAAwgYXNzZXRfaWQEFG93bmVyACBkZWxlZ2F0ZQBMVHJhbnNmZXJyZWRBcHByb3ZlZAEAFCBhc3NldF9pZAQUb3duZXIAIGRlbGVnYXRlACxkZXN0aW5hdGlvbgAYYW1vdW50CEhBc3NldFN0YXR1c0NoYW5nZWQBAAQgYXNzZXRfaWQEWEFzc2V0TWluQmFsYW5jZUNoYW5nZWQBAAggYXNzZXRfaWQEPG5ld19taW5fYmFsYW5jZQgcVG91Y2hlZAEADCBhc3NldF9pZAQMd2hvACRkZXBvc2l0b3IAHEJsb2NrZWQBAAggYXNzZXRfaWQEDHdobwAkRGVwb3NpdGVkAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAgkV2l0aGRyYXduAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAgEBAAGBAYAAmwcQ3JlYXRlZAEADChjb2xsZWN0aW9uBBxjcmVhdG9yABRvd25lcgAwRm9yY2VDcmVhdGVkAQAIKGNvbGxlY3Rpb24EFG93bmVyACREZXN0cm95ZWQBAAQoY29sbGVjdGlvbgQYSXNzdWVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACxUcmFuc2ZlcnJlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBBmcm9tAAh0bwAYQnVybmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyABhGcm96ZW4BAAgoY29sbGVjdGlvbgQQaXRlbQQYVGhhd2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EQENvbGxlY3Rpb25Gcm96ZW4BAAQoY29sbGVjdGlvbgRAQ29sbGVjdGlvblRoYXdlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyAEBBcHByb3ZlZFRyYW5zZmVyAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQBEQXBwcm92YWxDYW5jZWxsZWQBABAoY29sbGVjdGlvbgQQaXRlbQQUb3duZXIAIGRlbGVnYXRlAERJdGVtU3RhdHVzQ2hhbmdlZAEABChjb2xsZWN0aW9uBFRDb2xsZWN0aW9uTWV0YWRhdGFTZXQBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRDb2xsZWN0aW9uTWV0YWRhdGFDbGVhcmVkAQAEKGNvbGxlY3Rpb24ELE1ldGFkYXRhU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAIKGNvbGxlY3Rpb24EEGl0ZW0ELFJlZGVwb3NpdGVkAQAIKGNvbGxlY3Rpb24EQHN1Y2Nlc3NmdWxfaXRlbXPRATBBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQUdmFsdWUkQEF0dHJpYnV0ZUNsZWFyZWQBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSRoT3duZXJzaGlwQWNjZXB0YW5jZUNoYW5nZWQBAAgMd2hvAEBtYXliZV9jb2xsZWN0aW9u1QFYQ29sbGVjdGlvbk1heFN1cHBseVNldAEACChjb2xsZWN0aW9uBChtYXhfc3VwcGx5BDBJdGVtUHJpY2VTZXQBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIRHdoaXRlbGlzdGVkX2J1eWVy2QFASXRlbVByaWNlUmVtb3ZlZAEACChjb2xsZWN0aW9uBBBpdGVtBChJdGVtQm91Z2h0AQAUKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCBhzZWxsZXIAFGJ1eWVyAAIQGFBhbGxldAEBBTxDb2xsZWN0aW9uT3duZXIBAQUkSXRlbU93bmVyAQEFHEFjY291bnQBAQECCBBTZW5kAQEFHFJlY2VpdmUBAQUACBhhbW91bnQIJGRpcmVjdGlvbuUBBukBAggsVXNlZFRvQ2xhaW0BAQJAVHJhbnNmZXJEaXNhYmxlZAEBBQKYHENyZWF0ZWQBAAwoY29sbGVjdGlvbgQcY3JlYXRvcgAUb3duZXIAMEZvcmNlQ3JlYXRlZAEACChjb2xsZWN0aW9uBBRvd25lcgAkRGVzdHJveWVkAQAEKGNvbGxlY3Rpb24EGElzc3VlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAsVHJhbnNmZXJyZWQBABAoY29sbGVjdGlvbgQQaXRlbQQQZnJvbQAIdG8AGEJ1cm5lZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBISXRlbVRyYW5zZmVyTG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1UcmFuc2ZlclVubG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1Qcm9wZXJ0aWVzTG9ja2VkAQAQKGNvbGxlY3Rpb24EEGl0ZW0ENGxvY2tfbWV0YWRhdGEUPGxvY2tfYXR0cmlidXRlcxRAQ29sbGVjdGlvbkxvY2tlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXLZARRhZG1pbtkBHGZyZWV6ZXLZAUBUcmFuc2ZlckFwcHJvdmVkAQAUKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQAgZGVhZGxpbmXVAURBcHByb3ZhbENhbmNlbGxlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAgZGVsZWdhdGUAVEFsbEFwcHJvdmFsc0NhbmNlbGxlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBcQ29sbGVjdGlvbkNvbmZpZ0NoYW5nZWQBAAQoY29sbGVjdGlvbgRUQ29sbGVjdGlvbk1ldGFkYXRhU2V0AQAIKGNvbGxlY3Rpb24EEGRhdGEkZENvbGxlY3Rpb25NZXRhZGF0YUNsZWFyZWQBAAQoY29sbGVjdGlvbgQ8SXRlbU1ldGFkYXRhU2V0AQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkTEl0ZW1NZXRhZGF0YUNsZWFyZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQsUmVkZXBvc2l0ZWQBAAgoY29sbGVjdGlvbgRAc3VjY2Vzc2Z1bF9pdGVtc9EBMEF0dHJpYnV0ZVNldAEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQkbmFtZXNwYWNl4QFAQXR0cmlidXRlQ2xlYXJlZAEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JCRuYW1lc3BhY2XhAWxJdGVtQXR0cmlidXRlc0FwcHJvdmFsQWRkZWQBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGUAdEl0ZW1BdHRyaWJ1dGVzQXBwcm92YWxSZW1vdmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRlAGhPd25lcnNoaXBBY2NlcHRhbmNlQ2hhbmdlZAEACAx3aG8AQG1heWJlX2NvbGxlY3Rpb27VAVhDb2xsZWN0aW9uTWF4U3VwcGx5U2V0AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEdENvbGxlY3Rpb25NaW50U2V0dGluZ3NVcGRhdGVkAQAEKGNvbGxlY3Rpb24EbE5leHRDb2xsZWN0aW9uSWRJbmNyZW1lbnRlZAEABBxuZXh0X2lk1QEwSXRlbVByaWNlU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCER3aGl0ZWxpc3RlZF9idXllctkBQEl0ZW1QcmljZVJlbW92ZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQoSXRlbUJvdWdodAEAFChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZQgYc2VsbGVyABRidXllcgAcVGlwU2VudAEAFChjb2xsZWN0aW9uBBBpdGVtBBhzZW5kZXIAIHJlY2VpdmVyABhhbW91bnQILFN3YXBDcmVhdGVkAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24EMGRlc2lyZWRfaXRlbdUBFHByaWNl7QEgZGVhZGxpbmUENFN3YXBDYW5jZWxsZWQBABhIb2ZmZXJlZF9jb2xsZWN0aW9uBDBvZmZlcmVkX2l0ZW0ESGRlc2lyZWRfY29sbGVjdGlvbgQwZGVzaXJlZF9pdGVt1QEUcHJpY2XtASBkZWFkbGluZQQsU3dhcENsYWltZWQBACA8c2VudF9jb2xsZWN0aW9uBCRzZW50X2l0ZW0EPHNlbnRfaXRlbV9vd25lcgBMcmVjZWl2ZWRfY29sbGVjdGlvbgQ0cmVjZWl2ZWRfaXRlbQRMcmVjZWl2ZWRfaXRlbV9vd25lcgAUcHJpY2XtASBkZWFkbGluZQRYUHJlU2lnbmVkQXR0cmlidXRlc1NldAEADChjb2xsZWN0aW9uBBBpdGVtBCRuYW1lc3BhY2XhAUhQYWxsZXRBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQQaXRlbdUBJGF0dHJpYnV0ZfEBFHZhbHVlJAJoHENyZWF0ZWQBAAwgYXNzZXRfaWToHGNyZWF0b3IAFG93bmVyABhJc3N1ZWQBAAwgYXNzZXRfaWToFG93bmVyABhhbW91bnQILFRyYW5zZmVycmVkAQAQIGFzc2V0X2lk6BBmcm9tAAh0bwAYYW1vdW50CBhCdXJuZWQBAAwgYXNzZXRfaWToFG93bmVyABxiYWxhbmNlCCxUZWFtQ2hhbmdlZAEAECBhc3NldF9pZOgYaXNzdWVyABRhZG1pbgAcZnJlZXplcgAwT3duZXJDaGFuZ2VkAQAIIGFzc2V0X2lk6BRvd25lcgAYRnJvemVuAQAIIGFzc2V0X2lk6Ax3aG8AGFRoYXdlZAEACCBhc3NldF9pZOgMd2hvACxBc3NldEZyb3plbgEABCBhc3NldF9pZOgsQXNzZXRUaGF3ZWQBAAQgYXNzZXRfaWToREFjY291bnRzRGVzdHJveWVkAQAMIGFzc2V0X2lk6EhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwRIQXBwcm92YWxzRGVzdHJveWVkAQAMIGFzc2V0X2lk6ExhcHByb3ZhbHNfZGVzdHJveWVkBExhcHByb3ZhbHNfcmVtYWluaW5nBEhEZXN0cnVjdGlvblN0YXJ0ZWQBAAQgYXNzZXRfaWToJERlc3Ryb3llZAEABCBhc3NldF9pZOgwRm9yY2VDcmVhdGVkAQAIIGFzc2V0X2lk6BRvd25lcgAsTWV0YWRhdGFTZXQBABQgYXNzZXRfaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAEIGFzc2V0X2lk6EBBcHByb3ZlZFRyYW5zZmVyAQAQIGFzc2V0X2lk6Bhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIREFwcHJvdmFsQ2FuY2VsbGVkAQAMIGFzc2V0X2lk6BRvd25lcgAgZGVsZWdhdGUATFRyYW5zZmVycmVkQXBwcm92ZWQBABQgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAhIQXNzZXRTdGF0dXNDaGFuZ2VkAQAEIGFzc2V0X2lk6FhBc3NldE1pbkJhbGFuY2VDaGFuZ2VkAQAIIGFzc2V0X2lk6DxuZXdfbWluX2JhbGFuY2UIHFRvdWNoZWQBAAwgYXNzZXRfaWToDHdobwAkZGVwb3NpdG9yABxCbG9ja2VkAQAIIGFzc2V0X2lk6Ax3aG8AJERlcG9zaXRlZAEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIJFdpdGhkcmF3bgEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIBOgBCAMI6AgEAQIAAhgsUG9vbENyZWF0ZWQBABAcY3JlYXRvcgAccG9vbF9pZP0BMHBvb2xfYWNjb3VudAAgbHBfdG9rZW4EOExpcXVpZGl0eUFkZGVkAQAcDHdobwAcbWludF90bwAccG9vbF9pZP0BQGFtb3VudDFfcHJvdmlkZWQIQGFtb3VudDJfcHJvdmlkZWQIIGxwX3Rva2VuBDxscF90b2tlbl9taW50ZWQIQExpcXVpZGl0eVJlbW92ZWQBACAMd2hvACx3aXRoZHJhd190bwAccG9vbF9pZP0BHGFtb3VudDEIHGFtb3VudDIIIGxwX3Rva2VuBDxscF90b2tlbl9idXJuZWQIOHdpdGhkcmF3YWxfZmVlBDBTd2FwRXhlY3V0ZWQBABQMd2hvABxzZW5kX3RvACRhbW91bnRfaW4IKGFtb3VudF9vdXQIEHBhdGgFAkhTd2FwQ3JlZGl0RXhlY3V0ZWQBAAwkYW1vdW50X2luCChhbW91bnRfb3V0CBBwYXRoBQIcVG91Y2hlZAEACBxwb29sX2lk/QEMd2hvAAJUGFN5c3RlbQECHEBFeHRyaW5zaWNTdWNjZXNzAQAENGRpc3BhdGNoX2luZm9APEV4dHJpbnNpY0ZhaWxlZAEACDhkaXNwYXRjaF9lcnJvcpQ0ZGlzcGF0Y2hfaW5mb0AsQ29kZVVwZGF0ZWQBAQUoTmV3QWNjb3VudAEABBxhY2NvdW50ADRLaWxsZWRBY2NvdW50AQAEHGFjY291bnQAIFJlbWFya2VkAQAIGHNlbmRlcgAQaGFzaCBEVXBncmFkZUF1dGhvcml6ZWQBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFDxQYXJhY2hhaW5TeXN0ZW0BAhhgVmFsaWRhdGlvbkZ1bmN0aW9uU3RvcmVkAQEFZFZhbGlkYXRpb25GdW5jdGlvbkFwcGxpZWQBAARUcmVsYXlfY2hhaW5fYmxvY2tfbnVtBGxWYWxpZGF0aW9uRnVuY3Rpb25EaXNjYXJkZWQBAQVgRG93bndhcmRNZXNzYWdlc1JlY2VpdmVkAQAEFGNvdW50BGREb3dud2FyZE1lc3NhZ2VzUHJvY2Vzc2VkAQAILHdlaWdodF91c2VkGCBkbXFfaGVhZCBEVXB3YXJkTWVzc2FnZVNlbnQBAAQwbWVzc2FnZV9oYXNonCBCYWxhbmNlcwECWBxFbmRvd2VkAQAIHGFjY291bnQAMGZyZWVfYmFsYW5jZQggRHVzdExvc3QBAAgcYWNjb3VudAAYYW1vdW50CCBUcmFuc2ZlcgEADBBmcm9tAAh0bwAYYW1vdW50CChCYWxhbmNlU2V0AQAIDHdobwAQZnJlZQggUmVzZXJ2ZWQBAAgMd2hvABhhbW91bnQIKFVucmVzZXJ2ZWQBAAgMd2hvABhhbW91bnQISFJlc2VydmVSZXBhdHJpYXRlZAEAEBBmcm9tAAh0bwAYYW1vdW50CEhkZXN0aW5hdGlvbl9zdGF0dXOkHERlcG9zaXQBAAgMd2hvABhhbW91bnQIIFdpdGhkcmF3AQAIDHdobwAYYW1vdW50CBxTbGFzaGVkAQAIDHdobwAYYW1vdW50CBhNaW50ZWQBAAgMd2hvABhhbW91bnQIGEJ1cm5lZAEACAx3aG8AGGFtb3VudAgkU3VzcGVuZGVkAQAIDHdobwAYYW1vdW50CCBSZXN0b3JlZAEACAx3aG8AGGFtb3VudAggVXBncmFkZWQBAAQMd2hvABhJc3N1ZWQBAAQYYW1vdW50CCRSZXNjaW5kZWQBAAQYYW1vdW50CBhMb2NrZWQBAAgMd2hvABhhbW91bnQIIFVubG9ja2VkAQAIDHdobwAYYW1vdW50CBhGcm96ZW4BAAgMd2hvABhhbW91bnQIGFRoYXdlZAEACAx3aG8AGGFtb3VudAhMVG90YWxJc3N1YW5jZUZvcmNlZAEACAxvbGQIDG5ldwhIVHJhbnNhY3Rpb25QYXltZW50AQIESFRyYW5zYWN0aW9uRmVlUGFpZAEADAx3aG8AKGFjdHVhbF9mZWUIDHRpcAg4QXNzZXRUeFBheW1lbnQBAgg4QXNzZXRUeEZlZVBhaWQBABAMd2hvAChhY3R1YWxfZmVlCAx0aXAIIGFzc2V0X2lk6ERBc3NldFJlZnVuZEZhaWxlZAEABEhuYXRpdmVfYW1vdW50X2tlcHQIHFZlc3RpbmcBAgg4VmVzdGluZ1VwZGF0ZWQBAAgcYWNjb3VudAAgdW52ZXN0ZWQIQFZlc3RpbmdDb21wbGV0ZWQBAAQcYWNjb3VudABEQ29sbGF0b3JTZWxlY3Rpb24BAihATmV3SW52dWxuZXJhYmxlcwEABDRpbnZ1bG5lcmFibGVz9ERJbnZ1bG5lcmFibGVBZGRlZAEABChhY2NvdW50X2lkAExJbnZ1bG5lcmFibGVSZW1vdmVkAQAEKGFjY291bnRfaWQAUE5ld0Rlc2lyZWRDYW5kaWRhdGVzAQAESGRlc2lyZWRfY2FuZGlkYXRlcwRATmV3Q2FuZGlkYWN5Qm9uZAEABCxib25kX2Ftb3VudAg4Q2FuZGlkYXRlQWRkZWQBAAgoYWNjb3VudF9pZAAcZGVwb3NpdAhQQ2FuZGlkYXRlQm9uZFVwZGF0ZWQBAAgoYWNjb3VudF9pZAAcZGVwb3NpdAhAQ2FuZGlkYXRlUmVtb3ZlZAEABChhY2NvdW50X2lkAERDYW5kaWRhdGVSZXBsYWNlZAEADAxvbGQADG5ldwAcZGVwb3NpdAhoSW52YWxpZEludnVsbmVyYWJsZVNraXBwZWQBAAQoYWNjb3VudF9pZAAcU2Vzc2lvbgECBChOZXdTZXNzaW9uAQAENHNlc3Npb25faW5kZXgEJFhjbXBRdWV1ZQECBDxYY21wTWVzc2FnZVNlbnQBAAQwbWVzc2FnZV9oYXNoICxQb2xrYWRvdFhjbQECYCRBdHRlbXB0ZWQBAAQcb3V0Y29tZQkBEFNlbnQBABAYb3JpZ2lu6CxkZXN0aW5hdGlvbugcbWVzc2FnZV0BKG1lc3NhZ2VfaWQgSFVuZXhwZWN0ZWRSZXNwb25zZQEACBhvcmlnaW7oIHF1ZXJ5X2lkCDRSZXNwb25zZVJlYWR5AQAIIHF1ZXJ5X2lkCCByZXNwb25zZTkBIE5vdGlmaWVkAQAMIHF1ZXJ5X2lkCDBwYWxsZXRfaW5kZXgEKGNhbGxfaW5kZXgEQE5vdGlmeU92ZXJ3ZWlnaHQBABQgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleAQ0YWN0dWFsX3dlaWdodBhMbWF4X2J1ZGdldGVkX3dlaWdodBhMTm90aWZ5RGlzcGF0Y2hFcnJvcgEADCBxdWVyeV9pZAgwcGFsbGV0X2luZGV4BChjYWxsX2luZGV4BEhOb3RpZnlEZWNvZGVGYWlsZWQBAAwgcXVlcnlfaWQIMHBhbGxldF9pbmRleAQoY2FsbF9pbmRleARASW52YWxpZFJlc3BvbmRlcgEADBhvcmlnaW7oIHF1ZXJ5X2lkCERleHBlY3RlZF9sb2NhdGlvbj0BXEludmFsaWRSZXNwb25kZXJWZXJzaW9uAQAIGG9yaWdpbuggcXVlcnlfaWQINFJlc3BvbnNlVGFrZW4BAAQgcXVlcnlfaWQINEFzc2V0c1RyYXBwZWQBAAwQaGFzaCAYb3JpZ2lu6Bhhc3NldHOVAVRWZXJzaW9uQ2hhbmdlTm90aWZpZWQBABAsZGVzdGluYXRpb27oGHJlc3VsdAQQY29zdCEBKG1lc3NhZ2VfaWQgXFN1cHBvcnRlZFZlcnNpb25DaGFuZ2VkAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBFBOb3RpZnlUYXJnZXRTZW5kRmFpbAEADCBsb2NhdGlvbuggcXVlcnlfaWQIFGVycm9yBQFkTm90aWZ5VGFyZ2V0TWlncmF0aW9uRmFpbAEACCBsb2NhdGlvbpkBIHF1ZXJ5X2lkCFRJbnZhbGlkUXVlcmllclZlcnNpb24BAAgYb3JpZ2lu6CBxdWVyeV9pZAg4SW52YWxpZFF1ZXJpZXIBABAYb3JpZ2lu6CBxdWVyeV9pZAhAZXhwZWN0ZWRfcXVlcmllcuhQbWF5YmVfYWN0dWFsX3F1ZXJpZXI9AVBWZXJzaW9uTm90aWZ5U3RhcnRlZAEADCxkZXN0aW5hdGlvbugQY29zdCEBKG1lc3NhZ2VfaWQgWFZlcnNpb25Ob3RpZnlSZXF1ZXN0ZWQBAAwsZGVzdGluYXRpb27oEGNvc3QhAShtZXNzYWdlX2lkIGBWZXJzaW9uTm90aWZ5VW5yZXF1ZXN0ZWQBAAwsZGVzdGluYXRpb27oEGNvc3QhAShtZXNzYWdlX2lkICBGZWVzUGFpZAEACBhwYXlpbmfoEGZlZXMhATRBc3NldHNDbGFpbWVkAQAMEGhhc2ggGG9yaWdpbugYYXNzZXRzlQFgVmVyc2lvbk1pZ3JhdGlvbkZpbmlzaGVkAQAEHHZlcnNpb24EKEN1bXVsdXNYY20BAgw0SW52YWxpZEZvcm1hdAEFAYBIVW5zdXBwb3J0ZWRWZXJzaW9uAQUBgEBFeGVjdXRlZERvd253YXJkAQMIIAkBME1lc3NhZ2VRdWV1ZQECEEBQcm9jZXNzaW5nRmFpbGVkAQAMCGlkIBhvcmlnaW6lARRlcnJvcqkBJFByb2Nlc3NlZAEAEAhpZCAYb3JpZ2lupQEsd2VpZ2h0X3VzZWQYHHN1Y2Nlc3MUSE92ZXJ3ZWlnaHRFbnF1ZXVlZAEAEAhpZCAYb3JpZ2lupQEocGFnZV9pbmRleAQ0bWVzc2FnZV9pbmRleAQoUGFnZVJlYXBlZAEACBhvcmlnaW6lARRpbmRleAQcVXRpbGl0eQECGEBCYXRjaEludGVycnVwdGVkAQAIFGluZGV4BBRlcnJvcpQ4QmF0Y2hDb21wbGV0ZWQBAQVgQmF0Y2hDb21wbGV0ZWRXaXRoRXJyb3JzAQEFNEl0ZW1Db21wbGV0ZWQBAQUoSXRlbUZhaWxlZAEABBRlcnJvcpQwRGlzcGF0Y2hlZEFzAQAEGHJlc3VsdLUBIE11bHRpc2lnAQIQLE5ld011bHRpc2lnAQAMJGFwcHJvdmluZwAgbXVsdGlzaWcAJGNhbGxfaGFzaCBATXVsdGlzaWdBcHByb3ZhbAEAECRhcHByb3ZpbmcAJHRpbWVwb2ludL0BIG11bHRpc2lnACRjYWxsX2hhc2ggQE11bHRpc2lnRXhlY3V0ZWQBABQkYXBwcm92aW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIBhyZXN1bHS1AURNdWx0aXNpZ0NhbmNlbGxlZAEAEChjYW5jZWxsaW5nACR0aW1lcG9pbnS9ASBtdWx0aXNpZwAkY2FsbF9oYXNoIBRQcm94eQECFDRQcm94eUV4ZWN1dGVkAQAEGHJlc3VsdLUBLFB1cmVDcmVhdGVkAQAQEHB1cmUADHdobwAocHJveHlfdHlwZcUBUGRpc2FtYmlndWF0aW9uX2luZGV4BCRBbm5vdW5jZWQBAAwQcmVhbAAUcHJveHkAJGNhbGxfaGFzaCAoUHJveHlBZGRlZAEAECRkZWxlZ2F0b3IAJGRlbGVnYXRlZQAocHJveHlfdHlwZcUBFGRlbGF5BDBQcm94eVJlbW92ZWQBABAkZGVsZWdhdG9yACRkZWxlZ2F0ZWUAKHByb3h5X3R5cGXFARRkZWxheQQYQXNzZXRzAQJoHENyZWF0ZWQBAAwgYXNzZXRfaWQEHGNyZWF0b3IAFG93bmVyABhJc3N1ZWQBAAwgYXNzZXRfaWQEFG93bmVyABhhbW91bnQILFRyYW5zZmVycmVkAQAQIGFzc2V0X2lkBBBmcm9tAAh0bwAYYW1vdW50CBhCdXJuZWQBAAwgYXNzZXRfaWQEFG93bmVyABxiYWxhbmNlCCxUZWFtQ2hhbmdlZAEAECBhc3NldF9pZAQYaXNzdWVyABRhZG1pbgAcZnJlZXplcgAwT3duZXJDaGFuZ2VkAQAIIGFzc2V0X2lkBBRvd25lcgAYRnJvemVuAQAIIGFzc2V0X2lkBAx3aG8AGFRoYXdlZAEACCBhc3NldF9pZAQMd2hvACxBc3NldEZyb3plbgEABCBhc3NldF9pZAQsQXNzZXRUaGF3ZWQBAAQgYXNzZXRfaWQEREFjY291bnRzRGVzdHJveWVkAQAMIGFzc2V0X2lkBEhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwRIQXBwcm92YWxzRGVzdHJveWVkAQAMIGFzc2V0X2lkBExhcHByb3ZhbHNfZGVzdHJveWVkBExhcHByb3ZhbHNfcmVtYWluaW5nBEhEZXN0cnVjdGlvblN0YXJ0ZWQBAAQgYXNzZXRfaWQEJERlc3Ryb3llZAEABCBhc3NldF9pZAQwRm9yY2VDcmVhdGVkAQAIIGFzc2V0X2lkBBRvd25lcgAsTWV0YWRhdGFTZXQBABQgYXNzZXRfaWQEEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAEIGFzc2V0X2lkBEBBcHByb3ZlZFRyYW5zZmVyAQAQIGFzc2V0X2lkBBhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIREFwcHJvdmFsQ2FuY2VsbGVkAQAMIGFzc2V0X2lkBBRvd25lcgAgZGVsZWdhdGUATFRyYW5zZmVycmVkQXBwcm92ZWQBABQgYXNzZXRfaWQEFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAhIQXNzZXRTdGF0dXNDaGFuZ2VkAQAEIGFzc2V0X2lkBFhBc3NldE1pbkJhbGFuY2VDaGFuZ2VkAQAIIGFzc2V0X2lkBDxuZXdfbWluX2JhbGFuY2UIHFRvdWNoZWQBAAwgYXNzZXRfaWQEDHdobwAkZGVwb3NpdG9yABxCbG9ja2VkAQAIIGFzc2V0X2lkBAx3aG8AJERlcG9zaXRlZAEADCBhc3NldF9pZAQMd2hvABhhbW91bnQIJFdpdGhkcmF3bgEADCBhc3NldF9pZAQMd2hvABhhbW91bnQIHFVuaXF1ZXMBAmwcQ3JlYXRlZAEADChjb2xsZWN0aW9uBBxjcmVhdG9yABRvd25lcgAwRm9yY2VDcmVhdGVkAQAIKGNvbGxlY3Rpb24EFG93bmVyACREZXN0cm95ZWQBAAQoY29sbGVjdGlvbgQYSXNzdWVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACxUcmFuc2ZlcnJlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBBmcm9tAAh0bwAYQnVybmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyABhGcm96ZW4BAAgoY29sbGVjdGlvbgQQaXRlbQQYVGhhd2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EQENvbGxlY3Rpb25Gcm96ZW4BAAQoY29sbGVjdGlvbgRAQ29sbGVjdGlvblRoYXdlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyAEBBcHByb3ZlZFRyYW5zZmVyAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQBEQXBwcm92YWxDYW5jZWxsZWQBABAoY29sbGVjdGlvbgQQaXRlbQQUb3duZXIAIGRlbGVnYXRlAERJdGVtU3RhdHVzQ2hhbmdlZAEABChjb2xsZWN0aW9uBFRDb2xsZWN0aW9uTWV0YWRhdGFTZXQBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRDb2xsZWN0aW9uTWV0YWRhdGFDbGVhcmVkAQAEKGNvbGxlY3Rpb24ELE1ldGFkYXRhU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAIKGNvbGxlY3Rpb24EEGl0ZW0ELFJlZGVwb3NpdGVkAQAIKGNvbGxlY3Rpb24EQHN1Y2Nlc3NmdWxfaXRlbXPRATBBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQUdmFsdWUkQEF0dHJpYnV0ZUNsZWFyZWQBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSRoT3duZXJzaGlwQWNjZXB0YW5jZUNoYW5nZWQBAAgMd2hvAEBtYXliZV9jb2xsZWN0aW9u1QFYQ29sbGVjdGlvbk1heFN1cHBseVNldAEACChjb2xsZWN0aW9uBChtYXhfc3VwcGx5BDBJdGVtUHJpY2VTZXQBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2UIRHdoaXRlbGlzdGVkX2J1eWVy2QFASXRlbVByaWNlUmVtb3ZlZAEACChjb2xsZWN0aW9uBBBpdGVtBChJdGVtQm91Z2h0AQAUKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCBhzZWxsZXIAFGJ1eWVyABBOZnRzAQKYHENyZWF0ZWQBAAwoY29sbGVjdGlvbgQcY3JlYXRvcgAUb3duZXIAMEZvcmNlQ3JlYXRlZAEACChjb2xsZWN0aW9uBBRvd25lcgAkRGVzdHJveWVkAQAEKGNvbGxlY3Rpb24EGElzc3VlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAsVHJhbnNmZXJyZWQBABAoY29sbGVjdGlvbgQQaXRlbQQQZnJvbQAIdG8AGEJ1cm5lZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBISXRlbVRyYW5zZmVyTG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1UcmFuc2ZlclVubG9ja2VkAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUEl0ZW1Qcm9wZXJ0aWVzTG9ja2VkAQAQKGNvbGxlY3Rpb24EEGl0ZW0ENGxvY2tfbWV0YWRhdGEUPGxvY2tfYXR0cmlidXRlcxRAQ29sbGVjdGlvbkxvY2tlZAEABChjb2xsZWN0aW9uBDBPd25lckNoYW5nZWQBAAgoY29sbGVjdGlvbgQkbmV3X293bmVyACxUZWFtQ2hhbmdlZAEAEChjb2xsZWN0aW9uBBhpc3N1ZXLZARRhZG1pbtkBHGZyZWV6ZXLZAUBUcmFuc2ZlckFwcHJvdmVkAQAUKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVyACBkZWxlZ2F0ZQAgZGVhZGxpbmXVAURBcHByb3ZhbENhbmNlbGxlZAEAEChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgAgZGVsZWdhdGUAVEFsbEFwcHJvdmFsc0NhbmNlbGxlZAEADChjb2xsZWN0aW9uBBBpdGVtBBRvd25lcgBcQ29sbGVjdGlvbkNvbmZpZ0NoYW5nZWQBAAQoY29sbGVjdGlvbgRUQ29sbGVjdGlvbk1ldGFkYXRhU2V0AQAIKGNvbGxlY3Rpb24EEGRhdGEkZENvbGxlY3Rpb25NZXRhZGF0YUNsZWFyZWQBAAQoY29sbGVjdGlvbgQ8SXRlbU1ldGFkYXRhU2V0AQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkTEl0ZW1NZXRhZGF0YUNsZWFyZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQsUmVkZXBvc2l0ZWQBAAgoY29sbGVjdGlvbgRAc3VjY2Vzc2Z1bF9pdGVtc9EBMEF0dHJpYnV0ZVNldAEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JBR2YWx1ZSQkbmFtZXNwYWNl4QFAQXR0cmlidXRlQ2xlYXJlZAEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEMa2V5JCRuYW1lc3BhY2XhAWxJdGVtQXR0cmlidXRlc0FwcHJvdmFsQWRkZWQBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGUAdEl0ZW1BdHRyaWJ1dGVzQXBwcm92YWxSZW1vdmVkAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRlAGhPd25lcnNoaXBBY2NlcHRhbmNlQ2hhbmdlZAEACAx3aG8AQG1heWJlX2NvbGxlY3Rpb27VAVhDb2xsZWN0aW9uTWF4U3VwcGx5U2V0AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEdENvbGxlY3Rpb25NaW50U2V0dGluZ3NVcGRhdGVkAQAEKGNvbGxlY3Rpb24EbE5leHRDb2xsZWN0aW9uSWRJbmNyZW1lbnRlZAEABBxuZXh0X2lk1QEwSXRlbVByaWNlU2V0AQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlCER3aGl0ZWxpc3RlZF9idXllctkBQEl0ZW1QcmljZVJlbW92ZWQBAAgoY29sbGVjdGlvbgQQaXRlbQQoSXRlbUJvdWdodAEAFChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZQgYc2VsbGVyABRidXllcgAcVGlwU2VudAEAFChjb2xsZWN0aW9uBBBpdGVtBBhzZW5kZXIAIHJlY2VpdmVyABhhbW91bnQILFN3YXBDcmVhdGVkAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24EMGRlc2lyZWRfaXRlbdUBFHByaWNl7QEgZGVhZGxpbmUENFN3YXBDYW5jZWxsZWQBABhIb2ZmZXJlZF9jb2xsZWN0aW9uBDBvZmZlcmVkX2l0ZW0ESGRlc2lyZWRfY29sbGVjdGlvbgQwZGVzaXJlZF9pdGVt1QEUcHJpY2XtASBkZWFkbGluZQQsU3dhcENsYWltZWQBACA8c2VudF9jb2xsZWN0aW9uBCRzZW50X2l0ZW0EPHNlbnRfaXRlbV9vd25lcgBMcmVjZWl2ZWRfY29sbGVjdGlvbgQ0cmVjZWl2ZWRfaXRlbQRMcmVjZWl2ZWRfaXRlbV9vd25lcgAUcHJpY2XtASBkZWFkbGluZQRYUHJlU2lnbmVkQXR0cmlidXRlc1NldAEADChjb2xsZWN0aW9uBBBpdGVtBCRuYW1lc3BhY2XhAUhQYWxsZXRBdHRyaWJ1dGVTZXQBABAoY29sbGVjdGlvbgQQaXRlbdUBJGF0dHJpYnV0ZfEBFHZhbHVlJDRGb3JlaWduQXNzZXRzAQJoHENyZWF0ZWQBAAwgYXNzZXRfaWToHGNyZWF0b3IAFG93bmVyABhJc3N1ZWQBAAwgYXNzZXRfaWToFG93bmVyABhhbW91bnQILFRyYW5zZmVycmVkAQAQIGFzc2V0X2lk6BBmcm9tAAh0bwAYYW1vdW50CBhCdXJuZWQBAAwgYXNzZXRfaWToFG93bmVyABxiYWxhbmNlCCxUZWFtQ2hhbmdlZAEAECBhc3NldF9pZOgYaXNzdWVyABRhZG1pbgAcZnJlZXplcgAwT3duZXJDaGFuZ2VkAQAIIGFzc2V0X2lk6BRvd25lcgAYRnJvemVuAQAIIGFzc2V0X2lk6Ax3aG8AGFRoYXdlZAEACCBhc3NldF9pZOgMd2hvACxBc3NldEZyb3plbgEABCBhc3NldF9pZOgsQXNzZXRUaGF3ZWQBAAQgYXNzZXRfaWToREFjY291bnRzRGVzdHJveWVkAQAMIGFzc2V0X2lk6EhhY2NvdW50c19kZXN0cm95ZWQESGFjY291bnRzX3JlbWFpbmluZwRIQXBwcm92YWxzRGVzdHJveWVkAQAMIGFzc2V0X2lk6ExhcHByb3ZhbHNfZGVzdHJveWVkBExhcHByb3ZhbHNfcmVtYWluaW5nBEhEZXN0cnVjdGlvblN0YXJ0ZWQBAAQgYXNzZXRfaWToJERlc3Ryb3llZAEABCBhc3NldF9pZOgwRm9yY2VDcmVhdGVkAQAIIGFzc2V0X2lk6BRvd25lcgAsTWV0YWRhdGFTZXQBABQgYXNzZXRfaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhQ8TWV0YWRhdGFDbGVhcmVkAQAEIGFzc2V0X2lk6EBBcHByb3ZlZFRyYW5zZmVyAQAQIGFzc2V0X2lk6Bhzb3VyY2UAIGRlbGVnYXRlABhhbW91bnQIREFwcHJvdmFsQ2FuY2VsbGVkAQAMIGFzc2V0X2lk6BRvd25lcgAgZGVsZWdhdGUATFRyYW5zZmVycmVkQXBwcm92ZWQBABQgYXNzZXRfaWToFG93bmVyACBkZWxlZ2F0ZQAsZGVzdGluYXRpb24AGGFtb3VudAhIQXNzZXRTdGF0dXNDaGFuZ2VkAQAEIGFzc2V0X2lk6FhBc3NldE1pbkJhbGFuY2VDaGFuZ2VkAQAIIGFzc2V0X2lk6DxuZXdfbWluX2JhbGFuY2UIHFRvdWNoZWQBAAwgYXNzZXRfaWToDHdobwAkZGVwb3NpdG9yABxCbG9ja2VkAQAIIGFzc2V0X2lk6Ax3aG8AJERlcG9zaXRlZAEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIJFdpdGhkcmF3bgEADCBhc3NldF9pZOgMd2hvABhhbW91bnQIKFBvb2xBc3NldHMBAmgcQ3JlYXRlZAEADCBhc3NldF9pZAQcY3JlYXRvcgAUb3duZXIAGElzc3VlZAEADCBhc3NldF9pZAQUb3duZXIAGGFtb3VudAgsVHJhbnNmZXJyZWQBABAgYXNzZXRfaWQEEGZyb20ACHRvABhhbW91bnQIGEJ1cm5lZAEADCBhc3NldF9pZAQUb3duZXIAHGJhbGFuY2UILFRlYW1DaGFuZ2VkAQAQIGFzc2V0X2lkBBhpc3N1ZXIAFGFkbWluABxmcmVlemVyADBPd25lckNoYW5nZWQBAAggYXNzZXRfaWQEFG93bmVyABhGcm96ZW4BAAggYXNzZXRfaWQEDHdobwAYVGhhd2VkAQAIIGFzc2V0X2lkBAx3aG8ALEFzc2V0RnJvemVuAQAEIGFzc2V0X2lkBCxBc3NldFRoYXdlZAEABCBhc3NldF9pZAREQWNjb3VudHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQESGFjY291bnRzX2Rlc3Ryb3llZARIYWNjb3VudHNfcmVtYWluaW5nBEhBcHByb3ZhbHNEZXN0cm95ZWQBAAwgYXNzZXRfaWQETGFwcHJvdmFsc19kZXN0cm95ZWQETGFwcHJvdmFsc19yZW1haW5pbmcESERlc3RydWN0aW9uU3RhcnRlZAEABCBhc3NldF9pZAQkRGVzdHJveWVkAQAEIGFzc2V0X2lkBDBGb3JjZUNyZWF0ZWQBAAggYXNzZXRfaWQEFG93bmVyACxNZXRhZGF0YVNldAEAFCBhc3NldF9pZAQQbmFtZSQYc3ltYm9sJCBkZWNpbWFscwQkaXNfZnJvemVuFDxNZXRhZGF0YUNsZWFyZWQBAAQgYXNzZXRfaWQEQEFwcHJvdmVkVHJhbnNmZXIBABAgYXNzZXRfaWQEGHNvdXJjZQAgZGVsZWdhdGUAGGFtb3VudAhEQXBwcm92YWxDYW5jZWxsZWQBAAwgYXNzZXRfaWQEFG93bmVyACBkZWxlZ2F0ZQBMVHJhbnNmZXJyZWRBcHByb3ZlZAEAFCBhc3NldF9pZAQUb3duZXIAIGRlbGVnYXRlACxkZXN0aW5hdGlvbgAYYW1vdW50CEhBc3NldFN0YXR1c0NoYW5nZWQBAAQgYXNzZXRfaWQEWEFzc2V0TWluQmFsYW5jZUNoYW5nZWQBAAggYXNzZXRfaWQEPG5ld19taW5fYmFsYW5jZQgcVG91Y2hlZAEADCBhc3NldF9pZAQMd2hvACRkZXBvc2l0b3IAHEJsb2NrZWQBAAggYXNzZXRfaWQEDHdobwAkRGVwb3NpdGVkAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAgkV2l0aGRyYXduAQAMIGFzc2V0X2lkBAx3aG8AGGFtb3VudAg8QXNzZXRDb252ZXJzaW9uAQIYLFBvb2xDcmVhdGVkAQAQHGNyZWF0b3IAHHBvb2xfaWT9ATBwb29sX2FjY291bnQAIGxwX3Rva2VuBDhMaXF1aWRpdHlBZGRlZAEAHAx3aG8AHG1pbnRfdG8AHHBvb2xfaWT9AUBhbW91bnQxX3Byb3ZpZGVkCEBhbW91bnQyX3Byb3ZpZGVkCCBscF90b2tlbgQ8bHBfdG9rZW5fbWludGVkCEBMaXF1aWRpdHlSZW1vdmVkAQAgDHdobwAsd2l0aGRyYXdfdG8AHHBvb2xfaWT9ARxhbW91bnQxCBxhbW91bnQyCCBscF90b2tlbgQ8bHBfdG9rZW5fYnVybmVkCDh3aXRoZHJhd2FsX2ZlZQQwU3dhcEV4ZWN1dGVkAQAUDHdobwAcc2VuZF90bwAkYW1vdW50X2luCChhbW91bnRfb3V0CBBwYXRoBQJIU3dhcENyZWRpdEV4ZWN1dGVkAQAMJGFtb3VudF9pbggoYW1vdW50X291dAgQcGF0aAUCHFRvdWNoZWQBAAgccG9vbF9pZP0BDHdobwAEIAAADBRwaGFzZTQUZXZlbnQNAhh0b3BpY3MRAgQVAgAEBAEIBB0CAAEBAAgwc3BlY192ZXJzaW9uBCRzcGVjX25hbWUlAgAIJGNvZGVfaGFzaCA0Y2hlY2tfdmVyc2lvbhQGGAAQOGJhc2VfZXh0cmluc2ljGDRtYXhfZXh0cmluc2ljMQIkbWF4X3RvdGFsMQIgcmVzZXJ2ZWQxAgAMGG5vcm1hbDUCLG9wZXJhdGlvbmFsNQIkbWFuZGF0b3J5NQIADChiYXNlX2Jsb2NrGCRtYXhfYmxvY2sYJHBlcl9jbGFzczkCAAwYbm9ybWFsBCxvcGVyYXRpb25hbAQkbWFuZGF0b3J5BAAIEHJlYWQIFHdyaXRlCAMIDQEEBEkCAAAgJHNwZWNfbmFtZSUCJGltcGxfbmFtZSUCRGF1dGhvcmluZ192ZXJzaW9uBDBzcGVjX3ZlcnNpb24EMGltcGxfdmVyc2lvbgQQYXBpc00CTHRyYW5zYWN0aW9uX3ZlcnNpb24ENHN0YXRlX3ZlcnNpb24EBCQBCARVAgAEJAAACCRtc2dfY291bnQELHRvdGFsX2J5dGVzBAMIBGECBGUCAAAMNHVtcF9tc2dfY291bnQEPHVtcF90b3RhbF9ieXRlcwQ0aHJtcF9vdXRnb2luZ2kCAggUQWJvcnQBAQUcR29BaGVhZAEBBQZxAgAMOHVzZWRfYmFuZHdpZHRobQI4cGFyYV9oZWFkX2hhc2icYGNvbnN1bWVkX2dvX2FoZWFkX3NpZ25hbHUCBHkCAAAMOHVzZWRfYmFuZHdpZHRobQI4aHJtcF93YXRlcm1hcmvVAWBjb25zdW1lZF9nb19haGVhZF9zaWduYWx1AgAQLHBhcmVudF9oZWFkJExyZWxheV9wYXJlbnRfbnVtYmVyBGRyZWxheV9wYXJlbnRfc3RvcmFnZV9yb290IDBtYXhfcG92X3NpemUEAgQcUHJlc2VudAEBBQaJAgAIPHJlbWFpbmluZ19jb3VudAQ4cmVtYWluaW5nX3NpemUEABgwbWF4X2NhcGFjaXR5BDhtYXhfdG90YWxfc2l6ZQRAbWF4X21lc3NhZ2Vfc2l6ZQQkbXNnX2NvdW50BCh0b3RhbF9zaXplBCBtcWNfaGVhZJwDCASVAgSZAgAAEDBkbXFfbXFjX2hlYWQgnHJlbGF5X2Rpc3BhdGNoX3F1ZXVlX3JlbWFpbmluZ19jYXBhY2l0eZECQGluZ3Jlc3NfY2hhbm5lbHOdAjxlZ3Jlc3NfY2hhbm5lbHOdAgAITG1heF9jYW5kaWRhdGVfZGVwdGgEUGFsbG93ZWRfYW5jZXN0cnlfbGVuBAAoNG1heF9jb2RlX3NpemUESG1heF9oZWFkX2RhdGFfc2l6ZQRYbWF4X3Vwd2FyZF9xdWV1ZV9jb3VudARUbWF4X3Vwd2FyZF9xdWV1ZV9zaXplBFxtYXhfdXB3YXJkX21lc3NhZ2Vfc2l6ZQSQbWF4X3Vwd2FyZF9tZXNzYWdlX251bV9wZXJfY2FuZGlkYXRlBIhocm1wX21heF9tZXNzYWdlX251bV9wZXJfY2FuZGlkYXRlBGx2YWxpZGF0aW9uX3VwZ3JhZGVfY29vbGRvd24EYHZhbGlkYXRpb25fdXBncmFkZV9kZWxheQRQYXN5bmNfYmFja2luZ19wYXJhbXOlAgMIBCAErQIAAAgkcmVjaXBpZW50BBBkYXRhJAS1AgAACBxzZW50X2F0BAxtc2ckBL0CAAAIHHNlbnRfYXQEEGRhdGEkBMUCAAMIBMkCBM0CAAAQPHZhbGlkYXRpb25fZGF0YYUCRHJlbGF5X2NoYWluX3N0YXRlXQJEZG93bndhcmRfbWVzc2FnZXPBAkxob3Jpem9udGFsX21lc3NhZ2Vz0QICDAxGZWUBAQUQTWlzYwEBBQxBbGwBAQUADAhpZA0BGGFtb3VudAgccmVhc29uc9kCBN0CAAAICGlkDQEYYW1vdW50CATlAgAABBhhbW91bnQIBO0CAAIUCElkAQEBFEluZGV4AQEFDFJhdwEFACRBZGRyZXNzMzIBBQGAJEFkZHJlc3MyMAEFAVACCCBJbmNyZWFzZQEBBSBEZWNyZWFzZQEBBQIIJFYxQW5jaWVudAEBBQhWMgEBBQAMGGxvY2tlZAgkcGVyX2Jsb2NrCDhzdGFydGluZ19ibG9jawQEAQMAAggIVjABAQUIVjEBAQUACAx3aG8AHGRlcG9zaXQIBA0DAAMIACAEFQMAAwgoJAMICAQCCAhPawEBBSRTdXNwZW5kZWQBAQUAFCRyZWNpcGllbnQEFHN0YXRlJQM0c2lnbmFsc19leGlzdBQsZmlyc3RfaW5kZXgEKGxhc3RfaW5kZXgEBCkDAAMIBAQADERzdXNwZW5kX3RocmVzaG9sZAQ4ZHJvcF90aHJlc2hvbGQEQHJlc3VtZV90aHJlc2hvbGQEBpkBBQEIBj0DAmggT3ZlcmZsb3cBAQU0VW5pbXBsZW1lbnRlZAEBBWBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb24BAQVkVW50cnVzdGVkVGVsZXBvcnRMb2NhdGlvbgEBBURNdWx0aUxvY2F0aW9uRnVsbAEBBWhNdWx0aUxvY2F0aW9uTm90SW52ZXJ0aWJsZQEBBSRCYWRPcmlnaW4BAQU8SW52YWxpZExvY2F0aW9uAQEFNEFzc2V0Tm90Rm91bmQBAQVURmFpbGVkVG9UcmFuc2FjdEFzc2V0AQEFPE5vdFdpdGhkcmF3YWJsZQEBBUhMb2NhdGlvbkNhbm5vdEhvbGQBAQVURXhjZWVkc01heE1lc3NhZ2VTaXplAQEFWERlc3RpbmF0aW9uVW5zdXBwb3J0ZWQBAQUkVHJhbnNwb3J0AQEFKFVucm91dGFibGUBAQUwVW5rbm93bkNsYWltAQEFOEZhaWxlZFRvRGVjb2RlAQEFQE1heFdlaWdodEludmFsaWQBAQU4Tm90SG9sZGluZ0ZlZXMBAQUwVG9vRXhwZW5zaXZlAQEFEFRyYXABAQNMVW5oYW5kbGVkWGNtVmVyc2lvbgEBBUhXZWlnaHRMaW1pdFJlYWNoZWQBAQMcQmFycmllcgEBBUxXZWlnaHROb3RDb21wdXRhYmxlAQEFAwgERQMGSQMCEBBOdWxsAQEFGEFzc2V0cwEEgQEAPEV4ZWN1dGlvblJlc3VsdAEGSQMcVmVyc2lvbgEBAgIYEE51bGwBAQUYQXNzZXRzAQSNAQA8RXhlY3V0aW9uUmVzdWx0AQYlARxWZXJzaW9uAQECLFBhbGxldHNJbmZvAQQtAQA4RGlzcGF0Y2hSZXN1bHQBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAIMCFYyAQIQEE51bGwBAQUYQXNzZXRzAQSBAQA8RXhlY3V0aW9uUmVzdWx0AQZJAxxWZXJzaW9uAQECCFYzAQIYEE51bGwBAQUYQXNzZXRzAQSNAQA8RXhlY3V0aW9uUmVzdWx0AQYlARxWZXJzaW9uAQECLFBhbGxldHNJbmZvAQQtAQA4RGlzcGF0Y2hSZXN1bHQBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFAAhWNAECGBBOdWxsAQEFGEFzc2V0cwEEHQEAPEV4ZWN1dGlvblJlc3VsdAEGJQEcVmVyc2lvbgEBAixQYWxsZXRzSW5mbwEELQEAOERpc3BhdGNoUmVzdWx0AQIMHFN1Y2Nlc3MBAQUURXJyb3IBBQA4VHJ1bmNhdGVkRXJyb3IBBQACDBxQZW5kaW5nAQAQJHJlc3BvbmRlcpkBTG1heWJlX21hdGNoX3F1ZXJpZXI5AzBtYXliZV9ub3RpZnlBAxx0aW1lb3V0BDxWZXJzaW9uTm90aWZpZXIBAAgYb3JpZ2lumQEkaXNfYWN0aXZlFBRSZWFkeQEACCByZXNwb25zZVkDCGF0BAMIBJkBAwwIGAQDCJkBBARpAwAGJAIQXE1pZ3JhdGVTdXBwb3J0ZWRWZXJzaW9uAQEFXE1pZ3JhdGVWZXJzaW9uTm90aWZpZXJzAQEFUE5vdGlmeUN1cnJlbnRUYXJnZXRzAQYkaE1pZ3JhdGVBbmROb3RpZnlPbGRUYXJnZXRzAQEFAggIVjMBAgggQ29uY3JldGUBAAgccGFyZW50cwQgaW50ZXJpb3LkIEFic3RyYWN0AQUBgAhWNAEACBxwYXJlbnRzBCBpbnRlcmlvcuQDDAQAeQMDCLEBCASBAwAAEBhhbW91bnQIFG93bmVymQEYbG9ja2VymQEkY29uc3VtZXJzhQMDCAiZAQSNAwACCAxBbGwBAQUUQWxsT2YBAAgIaWR1AQxmdW5JAQIIIERlZmluaXRlAQSBAQAQV2lsZAECCAxBbGwBAQUUQWxsT2YBAAgIaWR1AQxmdW5JAQIIJFVubGltaXRlZAEBBRxMaW1pdGVkAQEDAnA0V2l0aGRyYXdBc3NldAEEgQEAVFJlc2VydmVBc3NldERlcG9zaXRlZAEEgQEAWFJlY2VpdmVUZWxlcG9ydGVkQXNzZXQBBIEBADRRdWVyeVJlc3BvbnNlAQAMIHF1ZXJ5X2lkCCByZXNwb25zZVEDKG1heF93ZWlnaHQINFRyYW5zZmVyQXNzZXQBAAgYYXNzZXRzhQEsYmVuZWZpY2lhcnlxAVBUcmFuc2ZlclJlc2VydmVBc3NldAEADBhhc3NldHOFARBkZXN0cQEMeGNtpQMgVHJhbnNhY3QBAAwsb3JpZ2luX3R5cGVBAVhyZXF1aXJlX3dlaWdodF9hdF9tb3N0CBBjYWxsJGRIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0AQAMGHNlbmRlcgRAbWF4X21lc3NhZ2Vfc2l6ZQQwbWF4X2NhcGFjaXR5BExIcm1wQ2hhbm5lbEFjY2VwdGVkAQAEJHJlY2lwaWVudARISHJtcENoYW5uZWxDbG9zaW5nAQAMJGluaXRpYXRvcgQYc2VuZGVyBCRyZWNpcGllbnQELENsZWFyT3JpZ2luAQEFNERlc2NlbmRPcmlnaW4BAiQQSGVyZQEBBQhYMQECJCRQYXJhY2hhaW4BAQIsQWNjb3VudElkMzIBAAgcbmV0d29ya2EBCGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrYQEUaW5kZXgIMEFjY291bnRLZXkyMAEACBxuZXR3b3JrYQEMa2V5uDhQYWxsZXRJbnN0YW5jZQEBAjBHZW5lcmFsSW5kZXgBAQMoR2VuZXJhbEtleQEFACRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkZQEQcGFydMAIWDIBBGkBAQgIWDMBBGkBAQwIWDQBBGkBARAIWDUBBGkBARQIWDYBBGkBARgIWDcBBGkBARwIWDgBBGkBASAsUmVwb3J0RXJyb3IBAAwgcXVlcnlfaWQIEGRlc3RxAUxtYXhfcmVzcG9uc2Vfd2VpZ2h0CDBEZXBvc2l0QXNzZXQBAAwYYXNzZXRzmQMobWF4X2Fzc2V0cwQsYmVuZWZpY2lhcnlxAUxEZXBvc2l0UmVzZXJ2ZUFzc2V0AQAQGGFzc2V0c5kDKG1heF9hc3NldHMEEGRlc3RxAQx4Y22lAzRFeGNoYW5nZUFzc2V0AQAIEGdpdmWZAxxyZWNlaXZlhQFcSW5pdGlhdGVSZXNlcnZlV2l0aGRyYXcBAAwYYXNzZXRzmQMccmVzZXJ2ZXEBDHhjbaUDQEluaXRpYXRlVGVsZXBvcnQBAAwYYXNzZXRzmQMQZGVzdHEBDHhjbaUDMFF1ZXJ5SG9sZGluZwEAECBxdWVyeV9pZAgQZGVzdHEBGGFzc2V0c5kDTG1heF9yZXNwb25zZV93ZWlnaHQIMEJ1eUV4ZWN1dGlvbgEACBBmZWVzgQEwd2VpZ2h0X2xpbWl0nQM0UmVmdW5kU3VycGx1cwEBBTxTZXRFcnJvckhhbmRsZXIBBKEDACxTZXRBcHBlbmRpeAEEoQMAKENsZWFyRXJyb3IBAQUoQ2xhaW1Bc3NldAEACBhhc3NldHOFARh0aWNrZXRxARBUcmFwAQEDQFN1YnNjcmliZVZlcnNpb24BAAggcXVlcnlfaWQITG1heF9yZXNwb25zZV93ZWlnaHQISFVuc3Vic2NyaWJlVmVyc2lvbgEBBQShAwACEAxBbGwBAQUUQWxsT2YBAAgIaWSJAQxmdW5JAShBbGxDb3VudGVkAQECMEFsbE9mQ291bnRlZAEADAhpZIkBDGZ1bkkBFGNvdW50BAIIIERlZmluaXRlAQSNAQAQV2lsZAECEAxBbGwBAQUUQWxsT2YBAAgIaWSJAQxmdW5JAShBbGxDb3VudGVkAQECMEFsbE9mQ291bnRlZAEADAhpZIkBDGZ1bkkBFGNvdW50BALANFdpdGhkcmF3QXNzZXQBBI0BAFRSZXNlcnZlQXNzZXREZXBvc2l0ZWQBBI0BAFhSZWNlaXZlVGVsZXBvcnRlZEFzc2V0AQSNAQA0UXVlcnlSZXNwb25zZQEAECBxdWVyeV9pZAggcmVzcG9uc2VVAyhtYXhfd2VpZ2h0GBxxdWVyaWVyPQE0VHJhbnNmZXJBc3NldAEACBhhc3NldHORASxiZW5lZmljaWFyeehQVHJhbnNmZXJSZXNlcnZlQXNzZXQBAAwYYXNzZXRzkQEQZGVzdOgMeGNttQMgVHJhbnNhY3QBAAwsb3JpZ2luX2tpbmRBAVhyZXF1aXJlX3dlaWdodF9hdF9tb3N0GBBjYWxsJGRIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0AQAMGHNlbmRlcgRAbWF4X21lc3NhZ2Vfc2l6ZQQwbWF4X2NhcGFjaXR5BExIcm1wQ2hhbm5lbEFjY2VwdGVkAQAEJHJlY2lwaWVudARISHJtcENoYW5uZWxDbG9zaW5nAQAMJGluaXRpYXRvcgQYc2VuZGVyBCRyZWNpcGllbnQELENsZWFyT3JpZ2luAQEFNERlc2NlbmRPcmlnaW4BAiQQSGVyZQEBBQhYMQECKCRQYXJhY2hhaW4BAQIsQWNjb3VudElkMzIBAAgcbmV0d29ya7QIaWQgOEFjY291bnRJbmRleDY0AQAIHG5ldHdvcmu0FGluZGV4CDBBY2NvdW50S2V5MjABAAgcbmV0d29ya7QMa2V5uDhQYWxsZXRJbnN0YW5jZQEBAjBHZW5lcmFsSW5kZXgBAQMoR2VuZXJhbEtleQEACBhsZW5ndGgEEGRhdGEgJE9ubHlDaGlsZAEBBSRQbHVyYWxpdHkBAAgIaWS8EHBhcnTAPEdsb2JhbENvbnNlbnN1cwECLCRCeUdlbmVzaXMBBQGAGEJ5Rm9yawEACDBibG9ja19udW1iZXIIKGJsb2NrX2hhc2ggIFBvbGthZG90AQEFGEt1c2FtYQEBBRxXZXN0ZW5kAQEFGFJvY29jbwEBBRhXb2NvY28BAQUgRXRoZXJldW0BAAQgY2hhaW5faWQILEJpdGNvaW5Db3JlAQEFLEJpdGNvaW5DYXNoAQEFQFBvbGthZG90QnVsbGV0aW4BAQUIWDIBBMQBCAhYMwEExAEMCFg0AQTEARAIWDUBBMQBFAhYNgEExAEYCFg3AQTEARwIWDgBBMQBICxSZXBvcnRFcnJvcgEADCxkZXN0aW5hdGlvbuggcXVlcnlfaWQIKG1heF93ZWlnaHQYMERlcG9zaXRBc3NldAEACBhhc3NldHOtAyxiZW5lZmljaWFyeehMRGVwb3NpdFJlc2VydmVBc3NldAEADBhhc3NldHOtAxBkZXN06Ax4Y221AzRFeGNoYW5nZUFzc2V0AQAMEGdpdmWtAxB3YW50kQEcbWF4aW1hbBRcSW5pdGlhdGVSZXNlcnZlV2l0aGRyYXcBAAwYYXNzZXRzrQMccmVzZXJ2ZegMeGNttQNASW5pdGlhdGVUZWxlcG9ydAEADBhhc3NldHOtAxBkZXN06Ax4Y221AzRSZXBvcnRIb2xkaW5nAQAINHJlc3BvbnNlX2luZm9FARhhc3NldHOtAzBCdXlFeGVjdXRpb24BAAgQZmVlc40BMHdlaWdodF9saW1pdFUBNFJlZnVuZFN1cnBsdXMBAQU8U2V0RXJyb3JIYW5kbGVyAQSxAwAsU2V0QXBwZW5kaXgBBLEDAChDbGVhckVycm9yAQEFKENsYWltQXNzZXQBAAgYYXNzZXRzkQEYdGlja2V06BBUcmFwAQEDQFN1YnNjcmliZVZlcnNpb24BAAggcXVlcnlfaWQITG1heF9yZXNwb25zZV93ZWlnaHQYSFVuc3Vic2NyaWJlVmVyc2lvbgEBBSRCdXJuQXNzZXQBBI0BACxFeHBlY3RBc3NldAEEjQEAMEV4cGVjdE9yaWdpbgEG6CxFeHBlY3RFcnJvcgEGJQFQRXhwZWN0VHJhbnNhY3RTdGF0dXMBAgwcU3VjY2VzcwEBBRRFcnJvcgEFADhUcnVuY2F0ZWRFcnJvcgEFACxRdWVyeVBhbGxldAEACCxtb2R1bGVfbmFtZSQ0cmVzcG9uc2VfaW5mb0UBMEV4cGVjdFBhbGxldAEAFBRpbmRleAQQbmFtZSQsbW9kdWxlX25hbWUkLGNyYXRlX21ham9yBDxtaW5fY3JhdGVfbWlub3IEUFJlcG9ydFRyYW5zYWN0U3RhdHVzAQAMLGRlc3RpbmF0aW9u6CBxdWVyeV9pZAgobWF4X3dlaWdodBhMQ2xlYXJUcmFuc2FjdFN0YXR1cwEBBTxVbml2ZXJzYWxPcmlnaW4BAigkUGFyYWNoYWluAQECLEFjY291bnRJZDMyAQAIHG5ldHdvcmu0CGlkIDhBY2NvdW50SW5kZXg2NAEACBxuZXR3b3JrtBRpbmRleAgwQWNjb3VudEtleTIwAQAIHG5ldHdvcmu0DGtlebg4UGFsbGV0SW5zdGFuY2UBAQIwR2VuZXJhbEluZGV4AQEDKEdlbmVyYWxLZXkBAAgYbGVuZ3RoBBBkYXRhICRPbmx5Q2hpbGQBAQUkUGx1cmFsaXR5AQAICGlkvBBwYXJ0wDxHbG9iYWxDb25zZW5zdXMBAiwkQnlHZW5lc2lzAQUBgBhCeUZvcmsBAAgwYmxvY2tfbnVtYmVyCChibG9ja19oYXNoICBQb2xrYWRvdAEBBRhLdXNhbWEBAQUcV2VzdGVuZAEBBRhSb2NvY28BAQUYV29jb2NvAQEFIEV0aGVyZXVtAQAEIGNoYWluX2lkCCxCaXRjb2luQ29yZQEBBSxCaXRjb2luQ2FzaAEBBUBQb2xrYWRvdEJ1bGxldGluAQEFNEV4cG9ydE1lc3NhZ2UBAAwcbmV0d29ya7AsZGVzdGluYXRpb27kDHhjbbUDJExvY2tBc3NldAEACBRhc3NldI0BIHVubG9ja2Vy6CxVbmxvY2tBc3NldAEACBRhc3NldI0BGHRhcmdldOg4Tm90ZVVubG9ja2FibGUBAAgUYXNzZXSNARRvd25lcug0UmVxdWVzdFVubG9jawEACBRhc3NldI0BGGxvY2tlcugsU2V0RmVlc01vZGUBAAQwaml0X3dpdGhkcmF3FCBTZXRUb3BpYwEFAYAoQ2xlYXJUb3BpYwEBBSxBbGlhc09yaWdpbgEACBxwYXJlbnRzBCBpbnRlcmlvcuQ8VW5wYWlkRXhlY3V0aW9uAQAIMHdlaWdodF9saW1pdFUBMGNoZWNrX29yaWdpbj0BBLEDAAIMCFYyAQShAwAIVjMBBLEDAAhWNAEEWQEAAhAgVGVsZXBvcnQBAQUwTG9jYWxSZXNlcnZlAQEFSERlc3RpbmF0aW9uUmVzZXJ2ZQEBBTRSZW1vdGVSZXNlcnZlAQIMCFYyAQAIHHBhcmVudHMEIGludGVyaW9ybQEIVjMBAAgccGFyZW50cwQgaW50ZXJpb3LkCFY0AQAIHHBhcmVudHMEIGludGVyaW9y5AAITGRlbGl2ZXJ5X2ZlZV9mYWN0b3IIMGlzX2Nvbmdlc3RlZBQACBBwcmV2pQEQbmV4dKUBBsUDABgUYmVnaW4EDGVuZAQUY291bnQEQHJlYWR5X25laWdoYm91cnPJAzRtZXNzYWdlX2NvdW50CBBzaXplCAMIpQEEABgkcmVtYWluaW5nBDhyZW1haW5pbmdfc2l6ZQQsZmlyc3RfaW5kZXgEFGZpcnN0BBBsYXN0BBBoZWFwJAIsGHJlbWFyawEABBhyZW1hcmskOHNldF9oZWFwX3BhZ2VzAQAEFHBhZ2VzCCBzZXRfY29kZQEABBBjb2RlJFxzZXRfY29kZV93aXRob3V0X2NoZWNrcwEABBBjb2RlJCxzZXRfc3RvcmFnZQEABBRpdGVtc1kCMGtpbGxfc3RvcmFnZQEABBBrZXlzXQIsa2lsbF9wcmVmaXgBAAgYcHJlZml4JBxzdWJrZXlzBERyZW1hcmtfd2l0aF9ldmVudAEABBhyZW1hcmskRGF1dGhvcml6ZV91cGdyYWRlAQAEJGNvZGVfaGFzaCCAYXV0aG9yaXplX3VwZ3JhZGVfd2l0aG91dF9jaGVja3MBAAQkY29kZV9oYXNoIGBhcHBseV9hdXRob3JpemVkX3VwZ3JhZGUBAAQQY29kZSQCEExzZXRfdmFsaWRhdGlvbl9kYXRhAQAEEGRhdGHVAmBzdWRvX3NlbmRfdXB3YXJkX21lc3NhZ2UBAAQcbWVzc2FnZSREYXV0aG9yaXplX3VwZ3JhZGUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFGBlbmFjdF9hdXRob3JpemVkX3VwZ3JhZGUBAAQQY29kZSQCBAxzZXQBAAQMbm93CAIkUHRyYW5zZmVyX2FsbG93X2RlYXRoAQAIEGRlc3T1AhR2YWx1ZQg4Zm9yY2VfdHJhbnNmZXIBAAwYc291cmNl9QIQZGVzdPUCFHZhbHVlCEx0cmFuc2Zlcl9rZWVwX2FsaXZlAQAIEGRlc3T1AhR2YWx1ZQgwdHJhbnNmZXJfYWxsAQAIEGRlc3T1AihrZWVwX2FsaXZlFDxmb3JjZV91bnJlc2VydmUBAAgMd2hv9QIYYW1vdW50CEB1cGdyYWRlX2FjY291bnRzAQAEDHdob/REZm9yY2Vfc2V0X2JhbGFuY2UBAAgMd2hv9QIgbmV3X2ZyZWUIbGZvcmNlX2FkanVzdF90b3RhbF9pc3N1YW5jZQEACCRkaXJlY3Rpb275AhRkZWx0YQgQYnVybgEACBR2YWx1ZQgoa2VlcF9hbGl2ZRQCGBB2ZXN0AQEFKHZlc3Rfb3RoZXIBAAQYdGFyZ2V09QI8dmVzdGVkX3RyYW5zZmVyAQAIGHRhcmdldPUCIHNjaGVkdWxlAQNUZm9yY2VfdmVzdGVkX3RyYW5zZmVyAQAMGHNvdXJjZfUCGHRhcmdldPUCIHNjaGVkdWxlAQM8bWVyZ2Vfc2NoZWR1bGVzAQAIPHNjaGVkdWxlMV9pbmRleAQ8c2NoZWR1bGUyX2luZGV4BHRmb3JjZV9yZW1vdmVfdmVzdGluZ19zY2hlZHVsZQEACBh0YXJnZXT1AjhzY2hlZHVsZV9pbmRleAQCJERzZXRfaW52dWxuZXJhYmxlcwEABAxuZXf0WHNldF9kZXNpcmVkX2NhbmRpZGF0ZXMBAAQMbWF4BEhzZXRfY2FuZGlkYWN5X2JvbmQBAAQQYm9uZAhUcmVnaXN0ZXJfYXNfY2FuZGlkYXRlAQEFMGxlYXZlX2ludGVudAEBBUBhZGRfaW52dWxuZXJhYmxlAQAEDHdobwBMcmVtb3ZlX2ludnVsbmVyYWJsZQEABAx3aG8ALHVwZGF0ZV9ib25kAQAELG5ld19kZXBvc2l0CEx0YWtlX2NhbmRpZGF0ZV9zbG90AQAIHGRlcG9zaXQIGHRhcmdldAACCCBzZXRfa2V5cwEACBBrZXlzIBRwcm9vZiQocHVyZ2Vfa2V5cwEBBQIUVHN1c3BlbmRfeGNtX2V4ZWN1dGlvbgEBBVByZXN1bWVfeGNtX2V4ZWN1dGlvbgEBBWB1cGRhdGVfc3VzcGVuZF90aHJlc2hvbGQBAAQMbmV3BFR1cGRhdGVfZHJvcF90aHJlc2hvbGQBAAQMbmV3BFx1cGRhdGVfcmVzdW1lX3RocmVzaG9sZAEABAxuZXcEAjgQc2VuZAEACBBkZXN0mQEcbWVzc2FnZbkDPHRlbGVwb3J0X2Fzc2V0cwEAEBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQRccmVzZXJ2ZV90cmFuc2Zlcl9hc3NldHMBABAQZGVzdJkBLGJlbmVmaWNpYXJ5mQEYYXNzZXRzlQE4ZmVlX2Fzc2V0X2l0ZW0EHGV4ZWN1dGUBAAgcbWVzc2FnZbkDKG1heF93ZWlnaHQYRGZvcmNlX3hjbV92ZXJzaW9uAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBGRmb3JjZV9kZWZhdWx0X3hjbV92ZXJzaW9uAQAERG1heWJlX3hjbV92ZXJzaW9u1QF4Zm9yY2Vfc3Vic2NyaWJlX3ZlcnNpb25fbm90aWZ5AQAEIGxvY2F0aW9umQGAZm9yY2VfdW5zdWJzY3JpYmVfdmVyc2lvbl9ub3RpZnkBAAQgbG9jYXRpb26ZAXxsaW1pdGVkX3Jlc2VydmVfdHJhbnNmZXJfYXNzZXRzAQAUEGRlc3SZASxiZW5lZmljaWFyeZkBGGFzc2V0c5UBOGZlZV9hc3NldF9pdGVtBDB3ZWlnaHRfbGltaXRVAVxsaW1pdGVkX3RlbGVwb3J0X2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQFAZm9yY2Vfc3VzcGVuc2lvbgEABCRzdXNwZW5kZWQUPHRyYW5zZmVyX2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQEwY2xhaW1fYXNzZXRzAQAIGGFzc2V0c5UBLGJlbmVmaWNpYXJ5mQGMdHJhbnNmZXJfYXNzZXRzX3VzaW5nX3R5cGVfYW5kX3RoZW4BABwQZGVzdJkBGGFzc2V0c5UBUGFzc2V0c190cmFuc2Zlcl90eXBlvQM4cmVtb3RlX2ZlZXNfaWR5A0hmZWVzX3RyYW5zZmVyX3R5cGW9A0hjdXN0b21feGNtX29uX2Rlc3S5AzB3ZWlnaHRfbGltaXRVAQIEUHJlcG9ydF9icmlkZ2Vfc3RhdHVzAQAIJGJyaWRnZV9pZCAwaXNfY29uZ2VzdGVkFAIIJHJlYXBfcGFnZQEACDhtZXNzYWdlX29yaWdpbqUBKHBhZ2VfaW5kZXgESGV4ZWN1dGVfb3ZlcndlaWdodAEAEDhtZXNzYWdlX29yaWdpbqUBEHBhZ2UEFGluZGV4BDB3ZWlnaHRfbGltaXQYAgwQUm9vdAEBBRhTaWduZWQBAQEQTm9uZQEBBQIIDFhjbQEACBxwYXJlbnRzBCBpbnRlcmlvcuQgUmVzcG9uc2UBAAgccGFyZW50cwQgaW50ZXJpb3LkAggUUmVsYXkBAQVAU2libGluZ1BhcmFjaGFpbgEBAgIQGHN5c3RlbQECDBBSb290AQEFGFNpZ25lZAEBARBOb25lAQEFLFBvbGthZG90WGNtAQIIDFhjbQEACBxwYXJlbnRzBCBpbnRlcmlvcuQgUmVzcG9uc2UBAAgccGFyZW50cwQgaW50ZXJpb3LkKEN1bXVsdXNYY20BAggUUmVsYXkBAQVAU2libGluZ1BhcmFjaGFpbgEBAhBWb2lkAQEFAhgUYmF0Y2gBAAQUY2FsbHOFBDRhc19kZXJpdmF0aXZlAQAIFGluZGV4BBBjYWxsgQQkYmF0Y2hfYWxsAQAEFGNhbGxzhQQsZGlzcGF0Y2hfYXMBAAgkYXNfb3JpZ2luEQQQY2FsbIEELGZvcmNlX2JhdGNoAQAEFGNhbGxzhQQsd2l0aF93ZWlnaHQBAAgQY2FsbIEEGHdlaWdodBgGvQECEFBhc19tdWx0aV90aHJlc2hvbGRfMQEACERvdGhlcl9zaWduYXRvcmllc/QQY2FsbIEEIGFzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEEGNhbGyBBChtYXhfd2VpZ2h0GEBhcHByb3ZlX2FzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEJGNhbGxfaGFzaCAobWF4X3dlaWdodBg8Y2FuY2VsX2FzX211bHRpAQAQJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0JHRpbWVwb2ludL0BJGNhbGxfaGFzaCAGxQECKBRwcm94eQEADBByZWFs9QJAZm9yY2VfcHJveHlfdHlwZSEEEGNhbGyBBCRhZGRfcHJveHkBAAwgZGVsZWdhdGX1Aihwcm94eV90eXBlxQEUZGVsYXkEMHJlbW92ZV9wcm94eQEADCBkZWxlZ2F0ZfUCKHByb3h5X3R5cGXFARRkZWxheQQ4cmVtb3ZlX3Byb3hpZXMBAQUsY3JlYXRlX3B1cmUBAAwocHJveHlfdHlwZcUBFGRlbGF5BBRpbmRleAQka2lsbF9wdXJlAQAUHHNwYXduZXL1Aihwcm94eV90eXBlxQEUaW5kZXgEGGhlaWdodAQkZXh0X2luZGV4BCBhbm5vdW5jZQEACBByZWFs9QIkY2FsbF9oYXNoIExyZW1vdmVfYW5ub3VuY2VtZW50AQAIEHJlYWz1AiRjYWxsX2hhc2ggTHJlamVjdF9hbm5vdW5jZW1lbnQBAAggZGVsZWdhdGX1AiRjYWxsX2hhc2ggPHByb3h5X2Fubm91bmNlZAEAECBkZWxlZ2F0ZfUCEHJlYWz1AkBmb3JjZV9wcm94eV90eXBlIQQQY2FsbIEEAoAYY3JlYXRlAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWQEFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWQEQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWQERGRlc3Ryb3lfYXBwcm92YWxzAQAECGlkBDhmaW5pc2hfZGVzdHJveQEABAhpZAQQbWludAEADAhpZAQsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWQEDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWQEGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZAQYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZAQYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlkBAx3aG/1AhB0aGF3AQAICGlkBAx3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWQEKHRoYXdfYXNzZXQBAAQIaWQESHRyYW5zZmVyX293bmVyc2hpcAEACAhpZAQUb3duZXL1AiBzZXRfdGVhbQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZARIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlkBEhmb3JjZV9hc3NldF9zdGF0dXMBACAIaWQEFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZAQgZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZAQgZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWQEGHJlZnVuZAEACAhpZAQoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlkBCxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWQEDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZAQMd2hv9QIUYmxvY2sBAAgIaWQEDHdob/UCAAwUaXRlbXMEOGl0ZW1fbWV0YWRhdGFzBChhdHRyaWJ1dGVzBAb1AgYIAmgYY3JlYXRlAQAIKGNvbGxlY3Rpb24EFGFkbWlu9QIwZm9yY2VfY3JlYXRlAQAMKGNvbGxlY3Rpb24EFG93bmVy9QIwZnJlZV9ob2xkaW5nFBxkZXN0cm95AQAIKGNvbGxlY3Rpb24EHHdpdG5lc3MtBBBtaW50AQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVy9QIQYnVybgEADChjb2xsZWN0aW9uBBBpdGVtBCxjaGVja19vd25lcjEEIHRyYW5zZmVyAQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRlc3T1AiRyZWRlcG9zaXQBAAgoY29sbGVjdGlvbgQUaXRlbXPRARhmcmVlemUBAAgoY29sbGVjdGlvbgQQaXRlbQQQdGhhdwEACChjb2xsZWN0aW9uBBBpdGVtBERmcmVlemVfY29sbGVjdGlvbgEABChjb2xsZWN0aW9uBDx0aGF3X2NvbGxlY3Rpb24BAAQoY29sbGVjdGlvbgRIdHJhbnNmZXJfb3duZXJzaGlwAQAIKGNvbGxlY3Rpb24EJG5ld19vd25lcvUCIHNldF90ZWFtAQAQKGNvbGxlY3Rpb24EGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCQGFwcHJvdmVfdHJhbnNmZXIBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AjxjYW5jZWxfYXBwcm92YWwBAAwoY29sbGVjdGlvbgQQaXRlbQRQbWF5YmVfY2hlY2tfZGVsZWdhdGUxBERmb3JjZV9pdGVtX3N0YXR1cwEAHChjb2xsZWN0aW9uBBRvd25lcvUCGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCMGZyZWVfaG9sZGluZxQkaXNfZnJvemVuFDRzZXRfYXR0cmlidXRlAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VAQxrZXkkFHZhbHVlJDxjbGVhcl9hdHRyaWJ1dGUBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQwc2V0X21ldGFkYXRhAQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ4Y2xlYXJfbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQaXRlbQRcc2V0X2NvbGxlY3Rpb25fbWV0YWRhdGEBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRjbGVhcl9jb2xsZWN0aW9uX21ldGFkYXRhAQAEKGNvbGxlY3Rpb24EUHNldF9hY2NlcHRfb3duZXJzaGlwAQAEQG1heWJlX2NvbGxlY3Rpb27VAWRzZXRfY29sbGVjdGlvbl9tYXhfc3VwcGx5AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEJHNldF9wcmljZQEAEChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZTUERHdoaXRlbGlzdGVkX2J1eWVyMQQgYnV5X2l0ZW0BAAwoY29sbGVjdGlvbgQQaXRlbQQkYmlkX3ByaWNlCAIMGElzc3VlcgEBBRhQdWJsaWMBAQUgSG9sZGVyT2YBAQIAFCRtaW50X3R5cGU9BBRwcmljZTUELHN0YXJ0X2Jsb2Nr1QEkZW5kX2Jsb2Nr1QFUZGVmYXVsdF9pdGVtX3NldHRpbmdzCAAMIHNldHRpbmdzCChtYXhfc3VwcGx51QE0bWludF9zZXR0aW5nc0EEAAw4aXRlbV9tZXRhZGF0YXMEMGl0ZW1fY29uZmlncwQoYXR0cmlidXRlcwQACChvd25lZF9pdGVt1QEobWludF9wcmljZTUEBk0EABAoY29sbGVjdGlvbgQQaXRlbQQgcmVjZWl2ZXIAGGFtb3VudAgEVQQAABwoY29sbGVjdGlvbgQQaXRlbQQoYXR0cmlidXRlc1kCIG1ldGFkYXRhJDBvbmx5X2FjY291bnTZASBkZWFkbGluZQQobWludF9wcmljZTUEBQEBAQUBBQECDBxFZDI1NTE5AQUBAQEcU3IyNTUxOQEFAQEBFEVjZHNhAQUBBQEAFChjb2xsZWN0aW9uBBBpdGVtBChhdHRyaWJ1dGVzWQIkbmFtZXNwYWNl4QEgZGVhZGxpbmUEApwYY3JlYXRlAQAIFGFkbWlu9QIYY29uZmlnRQQwZm9yY2VfY3JlYXRlAQAIFG93bmVy9QIYY29uZmlnRQQcZGVzdHJveQEACChjb2xsZWN0aW9uBBx3aXRuZXNzSQQQbWludAEAEChjb2xsZWN0aW9uBBBpdGVtBBxtaW50X3Rv9QIwd2l0bmVzc19kYXRhUQQoZm9yY2VfbWludAEAEChjb2xsZWN0aW9uBBBpdGVtBBxtaW50X3Rv9QIsaXRlbV9jb25maWcIEGJ1cm4BAAgoY29sbGVjdGlvbgQQaXRlbQQgdHJhbnNmZXIBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGVzdPUCJHJlZGVwb3NpdAEACChjb2xsZWN0aW9uBBRpdGVtc9EBSGxvY2tfaXRlbV90cmFuc2ZlcgEACChjb2xsZWN0aW9uBBBpdGVtBFB1bmxvY2tfaXRlbV90cmFuc2ZlcgEACChjb2xsZWN0aW9uBBBpdGVtBDxsb2NrX2NvbGxlY3Rpb24BAAgoY29sbGVjdGlvbgQ0bG9ja19zZXR0aW5ncwhIdHJhbnNmZXJfb3duZXJzaGlwAQAIKGNvbGxlY3Rpb24EJG5ld19vd25lcvUCIHNldF90ZWFtAQAQKGNvbGxlY3Rpb24EGGlzc3VlcjEEFGFkbWluMQQcZnJlZXplcjEEWGZvcmNlX2NvbGxlY3Rpb25fb3duZXIBAAgoY29sbGVjdGlvbgQUb3duZXL1Alxmb3JjZV9jb2xsZWN0aW9uX2NvbmZpZwEACChjb2xsZWN0aW9uBBhjb25maWdFBEBhcHByb3ZlX3RyYW5zZmVyAQAQKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QI4bWF5YmVfZGVhZGxpbmXVATxjYW5jZWxfYXBwcm92YWwBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AnBjbGVhcl9hbGxfdHJhbnNmZXJfYXBwcm92YWxzAQAIKGNvbGxlY3Rpb24EEGl0ZW0EUGxvY2tfaXRlbV9wcm9wZXJ0aWVzAQAQKGNvbGxlY3Rpb24EEGl0ZW0ENGxvY2tfbWV0YWRhdGEUPGxvY2tfYXR0cmlidXRlcxQ0c2V0X2F0dHJpYnV0ZQEAFChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JBR2YWx1ZSRMZm9yY2Vfc2V0X2F0dHJpYnV0ZQEAGBhzZXRfYXPZAShjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JBR2YWx1ZSQ8Y2xlYXJfYXR0cmlidXRlAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VASRuYW1lc3BhY2XhAQxrZXkkXGFwcHJvdmVfaXRlbV9hdHRyaWJ1dGVzAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QJ8Y2FuY2VsX2l0ZW1fYXR0cmlidXRlc19hcHByb3ZhbAEAEChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCHHdpdG5lc3MEMHNldF9tZXRhZGF0YQEADChjb2xsZWN0aW9uBBBpdGVtBBBkYXRhJDhjbGVhcl9tZXRhZGF0YQEACChjb2xsZWN0aW9uBBBpdGVtBFxzZXRfY29sbGVjdGlvbl9tZXRhZGF0YQEACChjb2xsZWN0aW9uBBBkYXRhJGRjbGVhcl9jb2xsZWN0aW9uX21ldGFkYXRhAQAEKGNvbGxlY3Rpb24EUHNldF9hY2NlcHRfb3duZXJzaGlwAQAEQG1heWJlX2NvbGxlY3Rpb27VAWRzZXRfY29sbGVjdGlvbl9tYXhfc3VwcGx5AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEUHVwZGF0ZV9taW50X3NldHRpbmdzAQAIKGNvbGxlY3Rpb24ENG1pbnRfc2V0dGluZ3NBBCRzZXRfcHJpY2UBABAoY29sbGVjdGlvbgQQaXRlbQQUcHJpY2U1BER3aGl0ZWxpc3RlZF9idXllcjEEIGJ1eV9pdGVtAQAMKGNvbGxlY3Rpb24EEGl0ZW0EJGJpZF9wcmljZQggcGF5X3RpcHMBAAQQdGlwc1kELGNyZWF0ZV9zd2FwAQAYSG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBEhkZXNpcmVkX2NvbGxlY3Rpb24ESG1heWJlX2Rlc2lyZWRfaXRlbdUBLG1heWJlX3ByaWNl7QEgZHVyYXRpb24ELGNhbmNlbF9zd2FwAQAISG9mZmVyZWRfY29sbGVjdGlvbgQwb2ZmZXJlZF9pdGVtBChjbGFpbV9zd2FwAQAUPHNlbmRfY29sbGVjdGlvbgQkc2VuZF9pdGVtBEhyZWNlaXZlX2NvbGxlY3Rpb24EMHJlY2VpdmVfaXRlbQQ0d2l0bmVzc19wcmljZe0BPG1pbnRfcHJlX3NpZ25lZAEADCRtaW50X2RhdGFdBCRzaWduYXR1cmVpBBhzaWduZXIAZHNldF9hdHRyaWJ1dGVzX3ByZV9zaWduZWQBAAwQZGF0YW0EJHNpZ25hdHVyZWkEGHNpZ25lcgACgBhjcmVhdGUBAAwIaWToFGFkbWlu9QIsbWluX2JhbGFuY2UIMGZvcmNlX2NyZWF0ZQEAEAhpZOgUb3duZXL1AjRpc19zdWZmaWNpZW50FCxtaW5fYmFsYW5jZQg0c3RhcnRfZGVzdHJveQEABAhpZOhAZGVzdHJveV9hY2NvdW50cwEABAhpZOhEZGVzdHJveV9hcHByb3ZhbHMBAAQIaWToOGZpbmlzaF9kZXN0cm95AQAECGlk6BBtaW50AQAMCGlk6CxiZW5lZmljaWFyefUCGGFtb3VudAgQYnVybgEADAhpZOgMd2hv9QIYYW1vdW50CCB0cmFuc2ZlcgEADAhpZOgYdGFyZ2V09QIYYW1vdW50CEx0cmFuc2Zlcl9rZWVwX2FsaXZlAQAMCGlk6Bh0YXJnZXT1AhhhbW91bnQIOGZvcmNlX3RyYW5zZmVyAQAQCGlk6Bhzb3VyY2X1AhBkZXN09QIYYW1vdW50CBhmcmVlemUBAAgIaWToDHdob/UCEHRoYXcBAAgIaWToDHdob/UCMGZyZWV6ZV9hc3NldAEABAhpZOgodGhhd19hc3NldAEABAhpZOhIdHJhbnNmZXJfb3duZXJzaGlwAQAICGlk6BRvd25lcvUCIHNldF90ZWFtAQAQCGlk6Bhpc3N1ZXL1AhRhZG1pbvUCHGZyZWV6ZXL1AjBzZXRfbWV0YWRhdGEBABAIaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEOGNsZWFyX21ldGFkYXRhAQAECGlk6Ehmb3JjZV9zZXRfbWV0YWRhdGEBABQIaWToEG5hbWUkGHN5bWJvbCQgZGVjaW1hbHMEJGlzX2Zyb3plbhRQZm9yY2VfY2xlYXJfbWV0YWRhdGEBAAQIaWToSGZvcmNlX2Fzc2V0X3N0YXR1cwEAIAhpZOgUb3duZXL1Ahhpc3N1ZXL1AhRhZG1pbvUCHGZyZWV6ZXL1AixtaW5fYmFsYW5jZQg0aXNfc3VmZmljaWVudBQkaXNfZnJvemVuFEBhcHByb3ZlX3RyYW5zZmVyAQAMCGlk6CBkZWxlZ2F0ZfUCGGFtb3VudAg8Y2FuY2VsX2FwcHJvdmFsAQAICGlk6CBkZWxlZ2F0ZfUCVGZvcmNlX2NhbmNlbF9hcHByb3ZhbAEADAhpZOgUb3duZXL1AiBkZWxlZ2F0ZfUCRHRyYW5zZmVyX2FwcHJvdmVkAQAQCGlk6BRvd25lcvUCLGRlc3RpbmF0aW9u9QIYYW1vdW50CBR0b3VjaAEABAhpZOgYcmVmdW5kAQAICGlk6ChhbGxvd19idXJuFDxzZXRfbWluX2JhbGFuY2UBAAgIaWToLG1pbl9iYWxhbmNlCCx0b3VjaF9vdGhlcgEACAhpZOgMd2hv9QIwcmVmdW5kX290aGVyAQAICGlk6Ax3aG/1AhRibG9jawEACAhpZOgMd2hv9QIE6AACGCxjcmVhdGVfcG9vbAEACBhhc3NldDHoGGFzc2V0Mug0YWRkX2xpcXVpZGl0eQEAHBhhc3NldDHoGGFzc2V0Mug8YW1vdW50MV9kZXNpcmVkCDxhbW91bnQyX2Rlc2lyZWQILGFtb3VudDFfbWluCCxhbW91bnQyX21pbggcbWludF90bwBAcmVtb3ZlX2xpcXVpZGl0eQEAGBhhc3NldDHoGGFzc2V0Mug0bHBfdG9rZW5fYnVybghMYW1vdW50MV9taW5fcmVjZWl2ZQhMYW1vdW50Ml9taW5fcmVjZWl2ZQgsd2l0aGRyYXdfdG8AcHN3YXBfZXhhY3RfdG9rZW5zX2Zvcl90b2tlbnMBABQQcGF0aHkEJGFtb3VudF9pbgg4YW1vdW50X291dF9taW4IHHNlbmRfdG8AKGtlZXBfYWxpdmUUcHN3YXBfdG9rZW5zX2Zvcl9leGFjdF90b2tlbnMBABQQcGF0aHkEKGFtb3VudF9vdXQINGFtb3VudF9pbl9tYXgIHHNlbmRfdG8AKGtlZXBfYWxpdmUUFHRvdWNoAQAIGGFzc2V0MegYYXNzZXQy6AJYGFN5c3RlbQECLBhyZW1hcmsBAAQYcmVtYXJrJDhzZXRfaGVhcF9wYWdlcwEABBRwYWdlcwggc2V0X2NvZGUBAAQQY29kZSRcc2V0X2NvZGVfd2l0aG91dF9jaGVja3MBAAQQY29kZSQsc2V0X3N0b3JhZ2UBAAQUaXRlbXNZAjBraWxsX3N0b3JhZ2UBAAQQa2V5c10CLGtpbGxfcHJlZml4AQAIGHByZWZpeCQcc3Via2V5cwREcmVtYXJrX3dpdGhfZXZlbnQBAAQYcmVtYXJrJERhdXRob3JpemVfdXBncmFkZQEABCRjb2RlX2hhc2gggGF1dGhvcml6ZV91cGdyYWRlX3dpdGhvdXRfY2hlY2tzAQAEJGNvZGVfaGFzaCBgYXBwbHlfYXV0aG9yaXplZF91cGdyYWRlAQAEEGNvZGUkPFBhcmFjaGFpblN5c3RlbQECEExzZXRfdmFsaWRhdGlvbl9kYXRhAQAEEGRhdGHVAmBzdWRvX3NlbmRfdXB3YXJkX21lc3NhZ2UBAAQcbWVzc2FnZSREYXV0aG9yaXplX3VwZ3JhZGUBAAgkY29kZV9oYXNoIDRjaGVja192ZXJzaW9uFGBlbmFjdF9hdXRob3JpemVkX3VwZ3JhZGUBAAQQY29kZSQkVGltZXN0YW1wAQIEDHNldAEABAxub3cINFBhcmFjaGFpbkluZm8BAQUgQmFsYW5jZXMBAiRQdHJhbnNmZXJfYWxsb3dfZGVhdGgBAAgQZGVzdPUCFHZhbHVlCDhmb3JjZV90cmFuc2ZlcgEADBhzb3VyY2X1AhBkZXN09QIUdmFsdWUITHRyYW5zZmVyX2tlZXBfYWxpdmUBAAgQZGVzdPUCFHZhbHVlCDB0cmFuc2Zlcl9hbGwBAAgQZGVzdPUCKGtlZXBfYWxpdmUUPGZvcmNlX3VucmVzZXJ2ZQEACAx3aG/1AhhhbW91bnQIQHVwZ3JhZGVfYWNjb3VudHMBAAQMd2hv9ERmb3JjZV9zZXRfYmFsYW5jZQEACAx3aG/1AiBuZXdfZnJlZQhsZm9yY2VfYWRqdXN0X3RvdGFsX2lzc3VhbmNlAQAIJGRpcmVjdGlvbvkCFGRlbHRhCBBidXJuAQAIFHZhbHVlCChrZWVwX2FsaXZlFBxWZXN0aW5nAQIYEHZlc3QBAQUodmVzdF9vdGhlcgEABBh0YXJnZXT1Ajx2ZXN0ZWRfdHJhbnNmZXIBAAgYdGFyZ2V09QIgc2NoZWR1bGUBA1Rmb3JjZV92ZXN0ZWRfdHJhbnNmZXIBAAwYc291cmNl9QIYdGFyZ2V09QIgc2NoZWR1bGUBAzxtZXJnZV9zY2hlZHVsZXMBAAg8c2NoZWR1bGUxX2luZGV4BDxzY2hlZHVsZTJfaW5kZXgEdGZvcmNlX3JlbW92ZV92ZXN0aW5nX3NjaGVkdWxlAQAIGHRhcmdldPUCOHNjaGVkdWxlX2luZGV4BERDb2xsYXRvclNlbGVjdGlvbgECJERzZXRfaW52dWxuZXJhYmxlcwEABAxuZXf0WHNldF9kZXNpcmVkX2NhbmRpZGF0ZXMBAAQMbWF4BEhzZXRfY2FuZGlkYWN5X2JvbmQBAAQQYm9uZAhUcmVnaXN0ZXJfYXNfY2FuZGlkYXRlAQEFMGxlYXZlX2ludGVudAEBBUBhZGRfaW52dWxuZXJhYmxlAQAEDHdobwBMcmVtb3ZlX2ludnVsbmVyYWJsZQEABAx3aG8ALHVwZGF0ZV9ib25kAQAELG5ld19kZXBvc2l0CEx0YWtlX2NhbmRpZGF0ZV9zbG90AQAIHGRlcG9zaXQIGHRhcmdldAAcU2Vzc2lvbgECCCBzZXRfa2V5cwEACBBrZXlzIBRwcm9vZiQocHVyZ2Vfa2V5cwEBBSRYY21wUXVldWUBAhRUc3VzcGVuZF94Y21fZXhlY3V0aW9uAQEFUHJlc3VtZV94Y21fZXhlY3V0aW9uAQEFYHVwZGF0ZV9zdXNwZW5kX3RocmVzaG9sZAEABAxuZXcEVHVwZGF0ZV9kcm9wX3RocmVzaG9sZAEABAxuZXcEXHVwZGF0ZV9yZXN1bWVfdGhyZXNob2xkAQAEDG5ldwQsUG9sa2Fkb3RYY20BAjgQc2VuZAEACBBkZXN0mQEcbWVzc2FnZbkDPHRlbGVwb3J0X2Fzc2V0cwEAEBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQRccmVzZXJ2ZV90cmFuc2Zlcl9hc3NldHMBABAQZGVzdJkBLGJlbmVmaWNpYXJ5mQEYYXNzZXRzlQE4ZmVlX2Fzc2V0X2l0ZW0EHGV4ZWN1dGUBAAgcbWVzc2FnZbkDKG1heF93ZWlnaHQYRGZvcmNlX3hjbV92ZXJzaW9uAQAIIGxvY2F0aW9u6Bx2ZXJzaW9uBGRmb3JjZV9kZWZhdWx0X3hjbV92ZXJzaW9uAQAERG1heWJlX3hjbV92ZXJzaW9u1QF4Zm9yY2Vfc3Vic2NyaWJlX3ZlcnNpb25fbm90aWZ5AQAEIGxvY2F0aW9umQGAZm9yY2VfdW5zdWJzY3JpYmVfdmVyc2lvbl9ub3RpZnkBAAQgbG9jYXRpb26ZAXxsaW1pdGVkX3Jlc2VydmVfdHJhbnNmZXJfYXNzZXRzAQAUEGRlc3SZASxiZW5lZmljaWFyeZkBGGFzc2V0c5UBOGZlZV9hc3NldF9pdGVtBDB3ZWlnaHRfbGltaXRVAVxsaW1pdGVkX3RlbGVwb3J0X2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQFAZm9yY2Vfc3VzcGVuc2lvbgEABCRzdXNwZW5kZWQUPHRyYW5zZmVyX2Fzc2V0cwEAFBBkZXN0mQEsYmVuZWZpY2lhcnmZARhhc3NldHOVAThmZWVfYXNzZXRfaXRlbQQwd2VpZ2h0X2xpbWl0VQEwY2xhaW1fYXNzZXRzAQAIGGFzc2V0c5UBLGJlbmVmaWNpYXJ5mQGMdHJhbnNmZXJfYXNzZXRzX3VzaW5nX3R5cGVfYW5kX3RoZW4BABwQZGVzdJkBGGFzc2V0c5UBUGFzc2V0c190cmFuc2Zlcl90eXBlvQM4cmVtb3RlX2ZlZXNfaWR5A0hmZWVzX3RyYW5zZmVyX3R5cGW9A0hjdXN0b21feGNtX29uX2Rlc3S5AzB3ZWlnaHRfbGltaXRVAShDdW11bHVzWGNtAQEFRFRvS3VzYW1hWGNtUm91dGVyAQIEUHJlcG9ydF9icmlkZ2Vfc3RhdHVzAQAIJGJyaWRnZV9pZCAwaXNfY29uZ2VzdGVkFDBNZXNzYWdlUXVldWUBAggkcmVhcF9wYWdlAQAIOG1lc3NhZ2Vfb3JpZ2lupQEocGFnZV9pbmRleARIZXhlY3V0ZV9vdmVyd2VpZ2h0AQAQOG1lc3NhZ2Vfb3JpZ2lupQEQcGFnZQQUaW5kZXgEMHdlaWdodF9saW1pdBgcVXRpbGl0eQECGBRiYXRjaAEABBRjYWxsc4UENGFzX2Rlcml2YXRpdmUBAAgUaW5kZXgEEGNhbGyBBCRiYXRjaF9hbGwBAAQUY2FsbHOFBCxkaXNwYXRjaF9hcwEACCRhc19vcmlnaW4RBBBjYWxsgQQsZm9yY2VfYmF0Y2gBAAQUY2FsbHOFBCx3aXRoX3dlaWdodAEACBBjYWxsgQQYd2VpZ2h0GCBNdWx0aXNpZwECEFBhc19tdWx0aV90aHJlc2hvbGRfMQEACERvdGhlcl9zaWduYXRvcmllc/QQY2FsbIEEIGFzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEEGNhbGyBBChtYXhfd2VpZ2h0GEBhcHByb3ZlX2FzX211bHRpAQAUJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0PG1heWJlX3RpbWVwb2ludBkEJGNhbGxfaGFzaCAobWF4X3dlaWdodBg8Y2FuY2VsX2FzX211bHRpAQAQJHRocmVzaG9sZAREb3RoZXJfc2lnbmF0b3JpZXP0JHRpbWVwb2ludL0BJGNhbGxfaGFzaCAUUHJveHkBAigUcHJveHkBAAwQcmVhbPUCQGZvcmNlX3Byb3h5X3R5cGUhBBBjYWxsgQQkYWRkX3Byb3h5AQAMIGRlbGVnYXRl9QIocHJveHlfdHlwZcUBFGRlbGF5BDByZW1vdmVfcHJveHkBAAwgZGVsZWdhdGX1Aihwcm94eV90eXBlxQEUZGVsYXkEOHJlbW92ZV9wcm94aWVzAQEFLGNyZWF0ZV9wdXJlAQAMKHByb3h5X3R5cGXFARRkZWxheQQUaW5kZXgEJGtpbGxfcHVyZQEAFBxzcGF3bmVy9QIocHJveHlfdHlwZcUBFGluZGV4BBhoZWlnaHQEJGV4dF9pbmRleAQgYW5ub3VuY2UBAAgQcmVhbPUCJGNhbGxfaGFzaCBMcmVtb3ZlX2Fubm91bmNlbWVudAEACBByZWFs9QIkY2FsbF9oYXNoIExyZWplY3RfYW5ub3VuY2VtZW50AQAIIGRlbGVnYXRl9QIkY2FsbF9oYXNoIDxwcm94eV9hbm5vdW5jZWQBABAgZGVsZWdhdGX1AhByZWFs9QJAZm9yY2VfcHJveHlfdHlwZSEEEGNhbGyBBBhBc3NldHMBAoAYY3JlYXRlAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWQEFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWQEQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWQERGRlc3Ryb3lfYXBwcm92YWxzAQAECGlkBDhmaW5pc2hfZGVzdHJveQEABAhpZAQQbWludAEADAhpZAQsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWQEDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWQEGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZAQYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZAQYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlkBAx3aG/1AhB0aGF3AQAICGlkBAx3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWQEKHRoYXdfYXNzZXQBAAQIaWQESHRyYW5zZmVyX293bmVyc2hpcAEACAhpZAQUb3duZXL1AiBzZXRfdGVhbQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZARIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlkBEhmb3JjZV9hc3NldF9zdGF0dXMBACAIaWQEFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZAQgZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZAQgZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWQEGHJlZnVuZAEACAhpZAQoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlkBCxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWQEDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZAQMd2hv9QIUYmxvY2sBAAgIaWQEDHdob/UCHFVuaXF1ZXMBAmgYY3JlYXRlAQAIKGNvbGxlY3Rpb24EFGFkbWlu9QIwZm9yY2VfY3JlYXRlAQAMKGNvbGxlY3Rpb24EFG93bmVy9QIwZnJlZV9ob2xkaW5nFBxkZXN0cm95AQAIKGNvbGxlY3Rpb24EHHdpdG5lc3MtBBBtaW50AQAMKGNvbGxlY3Rpb24EEGl0ZW0EFG93bmVy9QIQYnVybgEADChjb2xsZWN0aW9uBBBpdGVtBCxjaGVja19vd25lcjEEIHRyYW5zZmVyAQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRlc3T1AiRyZWRlcG9zaXQBAAgoY29sbGVjdGlvbgQUaXRlbXPRARhmcmVlemUBAAgoY29sbGVjdGlvbgQQaXRlbQQQdGhhdwEACChjb2xsZWN0aW9uBBBpdGVtBERmcmVlemVfY29sbGVjdGlvbgEABChjb2xsZWN0aW9uBDx0aGF3X2NvbGxlY3Rpb24BAAQoY29sbGVjdGlvbgRIdHJhbnNmZXJfb3duZXJzaGlwAQAIKGNvbGxlY3Rpb24EJG5ld19vd25lcvUCIHNldF90ZWFtAQAQKGNvbGxlY3Rpb24EGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCQGFwcHJvdmVfdHJhbnNmZXIBAAwoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1AjxjYW5jZWxfYXBwcm92YWwBAAwoY29sbGVjdGlvbgQQaXRlbQRQbWF5YmVfY2hlY2tfZGVsZWdhdGUxBERmb3JjZV9pdGVtX3N0YXR1cwEAHChjb2xsZWN0aW9uBBRvd25lcvUCGGlzc3VlcvUCFGFkbWlu9QIcZnJlZXplcvUCMGZyZWVfaG9sZGluZxQkaXNfZnJvemVuFDRzZXRfYXR0cmlidXRlAQAQKGNvbGxlY3Rpb24EKG1heWJlX2l0ZW3VAQxrZXkkFHZhbHVlJDxjbGVhcl9hdHRyaWJ1dGUBAAwoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBDGtleSQwc2V0X21ldGFkYXRhAQAQKGNvbGxlY3Rpb24EEGl0ZW0EEGRhdGEkJGlzX2Zyb3plbhQ4Y2xlYXJfbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQaXRlbQRcc2V0X2NvbGxlY3Rpb25fbWV0YWRhdGEBAAwoY29sbGVjdGlvbgQQZGF0YSQkaXNfZnJvemVuFGRjbGVhcl9jb2xsZWN0aW9uX21ldGFkYXRhAQAEKGNvbGxlY3Rpb24EUHNldF9hY2NlcHRfb3duZXJzaGlwAQAEQG1heWJlX2NvbGxlY3Rpb27VAWRzZXRfY29sbGVjdGlvbl9tYXhfc3VwcGx5AQAIKGNvbGxlY3Rpb24EKG1heF9zdXBwbHkEJHNldF9wcmljZQEAEChjb2xsZWN0aW9uBBBpdGVtBBRwcmljZTUERHdoaXRlbGlzdGVkX2J1eWVyMQQgYnV5X2l0ZW0BAAwoY29sbGVjdGlvbgQQaXRlbQQkYmlkX3ByaWNlCBBOZnRzAQKcGGNyZWF0ZQEACBRhZG1pbvUCGGNvbmZpZ0UEMGZvcmNlX2NyZWF0ZQEACBRvd25lcvUCGGNvbmZpZ0UEHGRlc3Ryb3kBAAgoY29sbGVjdGlvbgQcd2l0bmVzc0kEEG1pbnQBABAoY29sbGVjdGlvbgQQaXRlbQQcbWludF90b/UCMHdpdG5lc3NfZGF0YVEEKGZvcmNlX21pbnQBABAoY29sbGVjdGlvbgQQaXRlbQQcbWludF90b/UCLGl0ZW1fY29uZmlnCBBidXJuAQAIKGNvbGxlY3Rpb24EEGl0ZW0EIHRyYW5zZmVyAQAMKGNvbGxlY3Rpb24EEGl0ZW0EEGRlc3T1AiRyZWRlcG9zaXQBAAgoY29sbGVjdGlvbgQUaXRlbXPRAUhsb2NrX2l0ZW1fdHJhbnNmZXIBAAgoY29sbGVjdGlvbgQQaXRlbQRQdW5sb2NrX2l0ZW1fdHJhbnNmZXIBAAgoY29sbGVjdGlvbgQQaXRlbQQ8bG9ja19jb2xsZWN0aW9uAQAIKGNvbGxlY3Rpb24ENGxvY2tfc2V0dGluZ3MISHRyYW5zZmVyX293bmVyc2hpcAEACChjb2xsZWN0aW9uBCRuZXdfb3duZXL1AiBzZXRfdGVhbQEAEChjb2xsZWN0aW9uBBhpc3N1ZXIxBBRhZG1pbjEEHGZyZWV6ZXIxBFhmb3JjZV9jb2xsZWN0aW9uX293bmVyAQAIKGNvbGxlY3Rpb24EFG93bmVy9QJcZm9yY2VfY29sbGVjdGlvbl9jb25maWcBAAgoY29sbGVjdGlvbgQYY29uZmlnRQRAYXBwcm92ZV90cmFuc2ZlcgEAEChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCOG1heWJlX2RlYWRsaW5l1QE8Y2FuY2VsX2FwcHJvdmFsAQAMKGNvbGxlY3Rpb24EEGl0ZW0EIGRlbGVnYXRl9QJwY2xlYXJfYWxsX3RyYW5zZmVyX2FwcHJvdmFscwEACChjb2xsZWN0aW9uBBBpdGVtBFBsb2NrX2l0ZW1fcHJvcGVydGllcwEAEChjb2xsZWN0aW9uBBBpdGVtBDRsb2NrX21ldGFkYXRhFDxsb2NrX2F0dHJpYnV0ZXMUNHNldF9hdHRyaWJ1dGUBABQoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBJG5hbWVzcGFjZeEBDGtleSQUdmFsdWUkTGZvcmNlX3NldF9hdHRyaWJ1dGUBABgYc2V0X2Fz2QEoY29sbGVjdGlvbgQobWF5YmVfaXRlbdUBJG5hbWVzcGFjZeEBDGtleSQUdmFsdWUkPGNsZWFyX2F0dHJpYnV0ZQEAEChjb2xsZWN0aW9uBChtYXliZV9pdGVt1QEkbmFtZXNwYWNl4QEMa2V5JFxhcHByb3ZlX2l0ZW1fYXR0cmlidXRlcwEADChjb2xsZWN0aW9uBBBpdGVtBCBkZWxlZ2F0ZfUCfGNhbmNlbF9pdGVtX2F0dHJpYnV0ZXNfYXBwcm92YWwBABAoY29sbGVjdGlvbgQQaXRlbQQgZGVsZWdhdGX1Ahx3aXRuZXNzBDBzZXRfbWV0YWRhdGEBAAwoY29sbGVjdGlvbgQQaXRlbQQQZGF0YSQ4Y2xlYXJfbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQaXRlbQRcc2V0X2NvbGxlY3Rpb25fbWV0YWRhdGEBAAgoY29sbGVjdGlvbgQQZGF0YSRkY2xlYXJfY29sbGVjdGlvbl9tZXRhZGF0YQEABChjb2xsZWN0aW9uBFBzZXRfYWNjZXB0X293bmVyc2hpcAEABEBtYXliZV9jb2xsZWN0aW9u1QFkc2V0X2NvbGxlY3Rpb25fbWF4X3N1cHBseQEACChjb2xsZWN0aW9uBChtYXhfc3VwcGx5BFB1cGRhdGVfbWludF9zZXR0aW5ncwEACChjb2xsZWN0aW9uBDRtaW50X3NldHRpbmdzQQQkc2V0X3ByaWNlAQAQKGNvbGxlY3Rpb24EEGl0ZW0EFHByaWNlNQREd2hpdGVsaXN0ZWRfYnV5ZXIxBCBidXlfaXRlbQEADChjb2xsZWN0aW9uBBBpdGVtBCRiaWRfcHJpY2UIIHBheV90aXBzAQAEEHRpcHNZBCxjcmVhdGVfc3dhcAEAGEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQRIZGVzaXJlZF9jb2xsZWN0aW9uBEhtYXliZV9kZXNpcmVkX2l0ZW3VASxtYXliZV9wcmljZe0BIGR1cmF0aW9uBCxjYW5jZWxfc3dhcAEACEhvZmZlcmVkX2NvbGxlY3Rpb24EMG9mZmVyZWRfaXRlbQQoY2xhaW1fc3dhcAEAFDxzZW5kX2NvbGxlY3Rpb24EJHNlbmRfaXRlbQRIcmVjZWl2ZV9jb2xsZWN0aW9uBDByZWNlaXZlX2l0ZW0ENHdpdG5lc3NfcHJpY2XtATxtaW50X3ByZV9zaWduZWQBAAwkbWludF9kYXRhXQQkc2lnbmF0dXJlaQQYc2lnbmVyAGRzZXRfYXR0cmlidXRlc19wcmVfc2lnbmVkAQAMEGRhdGFtBCRzaWduYXR1cmVpBBhzaWduZXIANEZvcmVpZ25Bc3NldHMBAoAYY3JlYXRlAQAMCGlk6BRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWToFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWToQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWToRGRlc3Ryb3lfYXBwcm92YWxzAQAECGlk6DhmaW5pc2hfZGVzdHJveQEABAhpZOgQbWludAEADAhpZOgsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWToDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWToGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZOgYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZOgYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlk6Ax3aG/1AhB0aGF3AQAICGlk6Ax3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWToKHRoYXdfYXNzZXQBAAQIaWToSHRyYW5zZmVyX293bmVyc2hpcAEACAhpZOgUb3duZXL1AiBzZXRfdGVhbQEAEAhpZOgYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlk6BBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZOhIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlk6BBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlk6Ehmb3JjZV9hc3NldF9zdGF0dXMBACAIaWToFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZOggZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZOggZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWToFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZOgUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWToGHJlZnVuZAEACAhpZOgoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlk6CxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWToDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZOgMd2hv9QIUYmxvY2sBAAgIaWToDHdob/UCKFBvb2xBc3NldHMBAoAYY3JlYXRlAQAMCGlkBBRhZG1pbvUCLG1pbl9iYWxhbmNlCDBmb3JjZV9jcmVhdGUBABAIaWQEFG93bmVy9QI0aXNfc3VmZmljaWVudBQsbWluX2JhbGFuY2UINHN0YXJ0X2Rlc3Ryb3kBAAQIaWQEQGRlc3Ryb3lfYWNjb3VudHMBAAQIaWQERGRlc3Ryb3lfYXBwcm92YWxzAQAECGlkBDhmaW5pc2hfZGVzdHJveQEABAhpZAQQbWludAEADAhpZAQsYmVuZWZpY2lhcnn1AhhhbW91bnQIEGJ1cm4BAAwIaWQEDHdob/UCGGFtb3VudAggdHJhbnNmZXIBAAwIaWQEGHRhcmdldPUCGGFtb3VudAhMdHJhbnNmZXJfa2VlcF9hbGl2ZQEADAhpZAQYdGFyZ2V09QIYYW1vdW50CDhmb3JjZV90cmFuc2ZlcgEAEAhpZAQYc291cmNl9QIQZGVzdPUCGGFtb3VudAgYZnJlZXplAQAICGlkBAx3aG/1AhB0aGF3AQAICGlkBAx3aG/1AjBmcmVlemVfYXNzZXQBAAQIaWQEKHRoYXdfYXNzZXQBAAQIaWQESHRyYW5zZmVyX293bmVyc2hpcAEACAhpZAQUb3duZXL1AiBzZXRfdGVhbQEAEAhpZAQYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIwc2V0X21ldGFkYXRhAQAQCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBDhjbGVhcl9tZXRhZGF0YQEABAhpZARIZm9yY2Vfc2V0X21ldGFkYXRhAQAUCGlkBBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UUGZvcmNlX2NsZWFyX21ldGFkYXRhAQAECGlkBEhmb3JjZV9hc3NldF9zdGF0dXMBACAIaWQEFG93bmVy9QIYaXNzdWVy9QIUYWRtaW71AhxmcmVlemVy9QIsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUJGlzX2Zyb3plbhRAYXBwcm92ZV90cmFuc2ZlcgEADAhpZAQgZGVsZWdhdGX1AhhhbW91bnQIPGNhbmNlbF9hcHByb3ZhbAEACAhpZAQgZGVsZWdhdGX1AlRmb3JjZV9jYW5jZWxfYXBwcm92YWwBAAwIaWQEFG93bmVy9QIgZGVsZWdhdGX1AkR0cmFuc2Zlcl9hcHByb3ZlZAEAEAhpZAQUb3duZXL1AixkZXN0aW5hdGlvbvUCGGFtb3VudAgUdG91Y2gBAAQIaWQEGHJlZnVuZAEACAhpZAQoYWxsb3dfYnVybhQ8c2V0X21pbl9iYWxhbmNlAQAICGlkBCxtaW5fYmFsYW5jZQgsdG91Y2hfb3RoZXIBAAgIaWQEDHdob/UCMHJlZnVuZF9vdGhlcgEACAhpZAQMd2hv9QIUYmxvY2sBAAgIaWQEDHdob/UCPEFzc2V0Q29udmVyc2lvbgECGCxjcmVhdGVfcG9vbAEACBhhc3NldDHoGGFzc2V0Mug0YWRkX2xpcXVpZGl0eQEAHBhhc3NldDHoGGFzc2V0Mug8YW1vdW50MV9kZXNpcmVkCDxhbW91bnQyX2Rlc2lyZWQILGFtb3VudDFfbWluCCxhbW91bnQyX21pbggcbWludF90bwBAcmVtb3ZlX2xpcXVpZGl0eQEAGBhhc3NldDHoGGFzc2V0Mug0bHBfdG9rZW5fYnVybghMYW1vdW50MV9taW5fcmVjZWl2ZQhMYW1vdW50Ml9taW5fcmVjZWl2ZQgsd2l0aGRyYXdfdG8AcHN3YXBfZXhhY3RfdG9rZW5zX2Zvcl90b2tlbnMBABQQcGF0aHkEJGFtb3VudF9pbgg4YW1vdW50X291dF9taW4IHHNlbmRfdG8AKGtlZXBfYWxpdmUUcHN3YXBfdG9rZW5zX2Zvcl9leGFjdF90b2tlbnMBABQQcGF0aHkEKGFtb3VudF9vdXQINGFtb3VudF9pbl9tYXgIHHNlbmRfdG8AKGtlZXBfYWxpdmUUFHRvdWNoAQAIGGFzc2V0MegYYXNzZXQy6ASBBAAAEBB3aGVuvQEcZGVwb3NpdAgkZGVwb3NpdG9yACRhcHByb3ZhbHP0AAwgZGVsZWdhdGUAKHByb3h5X3R5cGXFARRkZWxheQQEjQQAAwiRBAgADBByZWFsACRjYWxsX2hhc2ggGGhlaWdodAQEmQQAAwidBAgCDBBMaXZlAQEFGEZyb3plbgEBBShEZXN0cm95aW5nAQEFADAUb3duZXIAGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIAGHN1cHBseQgcZGVwb3NpdAgsbWluX2JhbGFuY2UINGlzX3N1ZmZpY2llbnQUIGFjY291bnRzBCxzdWZmaWNpZW50cwQkYXBwcm92YWxzBBhzdGF0dXOlBAMIBAACDBhMaXF1aWQBAQUYRnJvemVuAQEFHEJsb2NrZWQBAQUCFCBDb25zdW1lcgEBBShTdWZmaWNpZW50AQEFLERlcG9zaXRIZWxkAQEDPERlcG9zaXRSZWZ1bmRlZAEBBSxEZXBvc2l0RnJvbQEDCAAIAAwcYmFsYW5jZQgYc3RhdHVzsQQYcmVhc29utQQDDAQAAAAIGGFtb3VudAgcZGVwb3NpdAgAFBxkZXBvc2l0CBBuYW1lJBhzeW1ib2wkIGRlY2ltYWxzBCRpc19mcm96ZW4UACgUb3duZXIAGGlzc3VlcgAUYWRtaW4AHGZyZWV6ZXIANHRvdGFsX2RlcG9zaXQIMGZyZWVfaG9sZGluZxQUaXRlbXMEOGl0ZW1fbWV0YWRhdGFzBChhdHRyaWJ1dGVzBCRpc19mcm96ZW4UAwwABAQDCAAEABAUb3duZXIAIGFwcHJvdmVk2QEkaXNfZnJvemVuFBxkZXBvc2l0CAAMHGRlcG9zaXQIEGRhdGEkJGlzX2Zyb3plbhQDDATVASQDCCQIAwgI2QEAGBRvd25lcgA0b3duZXJfZGVwb3NpdAgUaXRlbXMEOGl0ZW1fbWV0YWRhdGFzBDBpdGVtX2NvbmZpZ3MEKGF0dHJpYnV0ZXMEAwgA1QEE7QQAAAgcYWNjb3VudAAYYW1vdW50CAAMFG93bmVyACRhcHByb3ZhbHPxBBxkZXBvc2l09QQACBxkZXBvc2l0CBBkYXRhJAAIHGFjY291bnTZARhhbW91bnQIAAgcZGVwb3NpdAEFEGRhdGEkAxAE1QHhASQDCCQBBQAQSGRlc2lyZWRfY29sbGVjdGlvbgQwZGVzaXJlZF9pdGVt1QEUcHJpY2XtASBkZWFkbGluZQQDCOgAAwzoAAAAFCxwYXJlbnRfaGFzaCAYbnVtYmVyBChzdGF0ZV9yb290IDxleHRyaW5zaWNzX3Jvb3QgGGRpZ2VzdDAACBhoZWFkZXIdBShleHRyaW5zaWNzXQICCDRBbGxFeHRyaW5zaWNzAQEFNE9ubHlJbmhlcmVudHMBAQUCLBBDYWxsAQEFHFBheW1lbnQBAQUYRnV0dXJlAQEFFFN0YWxlAQEFIEJhZFByb29mAQEFREFuY2llbnRCaXJ0aEJsb2NrAQEFREV4aGF1c3RzUmVzb3VyY2VzAQEFGEN1c3RvbQEBAjBCYWRNYW5kYXRvcnkBAQVMTWFuZGF0b3J5VmFsaWRhdGlvbgEBBSRCYWRTaWduZXIBAQUCDDBDYW5ub3RMb29rdXABAQVMTm9VbnNpZ25lZFZhbGlkYXRvcgEBBRhDdXN0b20BAQICCBxJbnZhbGlkAQIsEENhbGwBAQUcUGF5bWVudAEBBRhGdXR1cmUBAQUUU3RhbGUBAQUgQmFkUHJvb2YBAQVEQW5jaWVudEJpcnRoQmxvY2sBAQVERXhoYXVzdHNSZXNvdXJjZXMBAQUYQ3VzdG9tAQECMEJhZE1hbmRhdG9yeQEBBUxNYW5kYXRvcnlWYWxpZGF0aW9uAQEFJEJhZFNpZ25lcgEBBRxVbmtub3duAQIMMENhbm5vdExvb2t1cAEBBUxOb1Vuc2lnbmVkVmFsaWRhdG9yAQEFGEN1c3RvbQEBAge1ATEFAwgNASQEOQUAAAwQb2theRQsZmF0YWxfZXJyb3IUGGVycm9ycz0FAgwcSW5CbG9jawEBBRRMb2NhbAEBBSBFeHRlcm5hbAEBBQAUIHByaW9yaXR5CCByZXF1aXJlc10CIHByb3ZpZGVzXQIkbG9uZ2V2aXR5CCRwcm9wYWdhdGUUB0kFMQUDCCQoBFEFAAZVBQAMGHdlaWdodBgUY2xhc3M4LHBhcnRpYWxfZmVlCAAMIGJhc2VfZmVlCBxsZW5fZmVlCExhZGp1c3RlZF93ZWlnaHRfZmVlCAZhBQAINGluY2x1c2lvbl9mZWVlBQx0aXAIBHkDAAIYNFVuaW1wbGVtZW50ZWQBAQVkVmVyc2lvbmVkQ29udmVyc2lvbkZhaWxlZAEBBUxXZWlnaHROb3RDb21wdXRhYmxlAQEFTFVuaGFuZGxlZFhjbVZlcnNpb24BAQU0QXNzZXROb3RGb3VuZAEBBShVbnJvdXRhYmxlAQEFB20FcQUHGHEFBwhxBQeVAXEFAAg0YWN0dWFsX3dlaWdodDECIHBheXNfZmVlPAAIJHBvc3RfaW5mb4UFFGVycm9ylAeFBYkFBA0CAAa5AwS5AwADCJkBmQUEnQUAABBAZXhlY3V0aW9uX3Jlc3VsdI0FOGVtaXR0ZWRfZXZlbnRzkQUkbG9jYWxfeGNtlQU4Zm9yd2FyZGVkX3hjbXOhBQIINFVuaW1wbGVtZW50ZWQBAQVkVmVyc2lvbmVkQ29udmVyc2lvbkZhaWxlZAEBBQelBakFAAxAZXhlY3V0aW9uX3Jlc3VsdAkBOGVtaXR0ZWRfZXZlbnRzkQU4Zm9yd2FyZGVkX3hjbXOhBQexBakFAggsVW5zdXBwb3J0ZWQBAQVkVmVyc2lvbmVkQ29udmVyc2lvbkZhaWxlZAEBBQcAuQUCCFxBc3NldElkQ29udmVyc2lvbkZhaWxlZAEBBXxBbW91bnRUb0JhbGFuY2VDb252ZXJzaW9uRmFpbGVkAQEFB5UBwQUAGDx1cHdhcmRfbWVzc2FnZXNdAkxob3Jpem9udGFsX21lc3NhZ2VzuQJMbmV3X3ZhbGlkYXRpb25fY29kZXEDbHByb2Nlc3NlZF9kb3dud2FyZF9tZXNzYWdlcwQ4aHJtcF93YXRlcm1hcmsEJGhlYWRfZGF0YSQHsQElAgYlAgQlAgAECAEIBtkF"; +export default content; diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..fdc92efcfb --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,109 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +Hydration UI is a DeFi frontend for the Hydration protocol (Polkadot ecosystem). It is a monorepo managed with Yarn workspaces and Turbo, containing one main app and several shared packages. + +## Commands + +All commands can be run from the repo root (via Turbo) or from within a specific workspace. + +### Development +```bash +yarn dev # Start all dev servers (root, via Turbo) +cd apps/main && yarn dev # Start only the main app dev server +``` + +### Build +```bash +yarn build # Build all packages (root) +cd apps/main && yarn build # Build only the main app (runs tsc + vite build) +``` + +### Linting & Type Checking +```bash +yarn lint # ESLint + TypeScript across all packages +yarn lint:fix # Auto-fix ESLint issues across all packages + +cd apps/main && yarn lint # ESLint + TypeScript for main app +cd apps/main && yarn lint:ts # TypeScript type-check only (tsc --noEmit) +cd apps/main && yarn lint:eslint # ESLint only +``` + +### Storybook (UI package) +```bash +cd packages/ui && yarn dev # Start Storybook dev server +cd packages/ui && yarn build # Build Storybook +``` + +### GraphQL Codegen (indexer package) +```bash +cd packages/indexer && yarn codegen +``` + +## Architecture + +### Monorepo Structure + +``` +apps/ + main/ # Main Hydration UI application (Vite + React) +packages/ + ui/ # Shared React component library (@galacticcouncil/ui) + utils/ # Shared utility functions + web3-connect/ # Multi-wallet connection (Polkadot, EVM, Solana, Turnkey) + money-market/ # Aave/lending integration + indexer/ # GraphQL clients for multiple indexers (indexer, squid, snowbridge) + typescript-config/ # Shared tsconfig bases + eslint-config/ # Shared ESLint config +``` + +### Main App (`apps/main/src/`) + +- **Entry point:** `index.tsx` → `App.tsx` +- **Routing:** TanStack Router with file-based routes in `src/routes/`. The route tree is auto-generated at `src/routeTree.gen.ts` — do not edit manually. +- **Server state:** TanStack React Query. The `queryClient` is passed via router context (`RouterContext` in `App.tsx`). +- **Client state:** Zustand stores in `src/states/` +- **Styling:** Emotion (CSS-in-JS). JSX import source is `@galacticcouncil/ui/jsx` (set in `tsconfig.json`). Always import from `@galacticcouncil/ui` for themed components. +- **i18n:** i18next with translations in `src/i18n/locales/en/`. Namespace files: `common.json`, `trade.json`, `strategies.json`. +- **Path alias:** `@/*` maps to `src/*` + +### Route Structure + +Routes mirror feature modules. Each major feature has: +- A `route.tsx` (layout/wrapper) +- An `index.tsx` (default view) +- Optional nested routes for sub-pages + +Key route groups: `trade/`, `liquidity/`, `borrow/`, `staking/`, `stats/`, `wallet/`, `cross-chain/`, `strategies/` + +### Feature Modules (`src/modules/`) + +Feature logic lives in `src/modules//`. Each module typically contains: +- Components specific to that feature +- Hooks for data fetching (React Query) +- Sections/sub-components + +The `src/api/` directory contains lower-level API integration code (blockchain calls, external APIs) that modules consume via hooks. + +### Blockchain Integration + +- **Polkadot API:** via `polkadot-api` (PAPI) — not the older `@polkadot/api` +- **Math libraries:** `@galacticcouncil/math-*` packages (xyk, stableswap, omnipool, etc.) for on-chain calculations +- **EVM:** ethers.js (used in money-market package) +- **WASM:** Supported via Vite WASM plugin; math libraries ship WASM + +### Web3-Connect Package + +Handles wallet connection for multiple ecosystems. Contains providers for Polkadot (substrate) wallets, EVM wallets, Solana, and Turnkey (email/OTP-based embedded wallet). The package exposes a `Web3ConnectModal` component and a query-based wallet state system. + +### Indexer Package + +Exports three sub-paths for different data sources: +- `@galacticcouncil/indexer/indexer` — main chain indexer +- `@galacticcouncil/indexer/squid` — Subsquid-based indexer +- `@galacticcouncil/indexer/snowbridge` — Snowbridge cross-chain data + +GraphQL types are generated via codegen. diff --git a/apps/main/.env.development b/apps/main/.env.development index d140119f27..48a908f585 100644 --- a/apps/main/.env.development +++ b/apps/main/.env.development @@ -1,4 +1,4 @@ -VITE_PROVIDER_URL=wss://rpc.nice.hydration.cloud +VITE_PROVIDER_URL=wss://node3.lark.hydration.cloud VITE_INDEXER_URL=https://archive.nice.hydration.cloud/graphql VITE_SQUID_URL=https://orca-main-aggr-indx.indexer.hydration.cloud/graphql VITE_SNOWBRIDGE_URL="https://snowbridge.squids.live/snowbridge-subsquid-polkadot@v1/api/graphql" diff --git a/apps/main/.env.production b/apps/main/.env.production index 30df85e236..e9f713d003 100644 --- a/apps/main/.env.production +++ b/apps/main/.env.production @@ -1,4 +1,4 @@ -VITE_PROVIDER_URL=wss://hydration-rpc.n.dwellir.com +VITE_PROVIDER_URL=wss://node3.lark.hydration.cloud VITE_INDEXER_URL=https://explorer.hydradx.cloud/graphql VITE_SQUID_URL=https://orca-main-aggr-indx.indexer.hydration.cloud/graphql VITE_SNOWBRIDGE_URL="https://snowbridge.squids.live/snowbridge-subsquid-polkadot@v1/api/graphql" diff --git a/apps/main/src/api/intents.ts b/apps/main/src/api/intents.ts new file mode 100644 index 0000000000..b3e06d0ec4 --- /dev/null +++ b/apps/main/src/api/intents.ts @@ -0,0 +1,58 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { safeConvertSS58toPublicKey } from "@galacticcouncil/utils" +import { queryOptions } from "@tanstack/react-query" + +import { TProviderContext } from "@/providers/rpcProvider" + +export const intentsByAccountQuery = ( + context: TProviderContext, + address: string, +) => { + const { papiClient, isApiLoaded } = context + + return queryOptions({ + enabled: isApiLoaded && !!address, + refetchInterval: 30_000, + queryKey: ["intents", "byAccount", address], + queryFn: async () => { + // Use unsafe API to bypass descriptor checksum validation + // (Intent pallet descriptors may not match the runtime version) + const unsafeApi = papiClient.getUnsafeApi() as any + + // TODO: switch to Intent.AccountIntents.getEntries(address) once + // the new runtime (PR #1360) is deployed — it's a direct reverse index + // and avoids this full scan. + let ownerEntries: any[] + try { + ownerEntries = await unsafeApi.query.Intent.IntentOwner.getEntries({ + at: "best", + }) + } catch { + // Intent pallet not available on this chain + return [] + } + + const accountPublicKey = safeConvertSS58toPublicKey(address) + + const myIntentIds = ownerEntries + .filter( + (entry: any) => + safeConvertSS58toPublicKey(entry.value) === accountPublicKey, + ) + .map((entry: any) => entry.keyArgs[0]) + + if (myIntentIds.length === 0) return [] + + const results = await Promise.all( + myIntentIds.map(async (id: any) => { + const intent = await unsafeApi.query.Intent.Intents.getValue(id, { + at: "best", + }) + return intent ? { id, intent } : null + }), + ) + + return results.filter((r: any) => r !== null) + }, + }) +} diff --git a/apps/main/src/api/payments.ts b/apps/main/src/api/payments.ts index 7319d2d0e3..f04dbaa1a6 100644 --- a/apps/main/src/api/payments.ts +++ b/apps/main/src/api/payments.ts @@ -7,7 +7,7 @@ import { } from "@galacticcouncil/web3-connect" import { AccountId, compactNumber } from "@polkadot-api/substrate-bindings" import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query" -import { FixedSizeBinary } from "polkadot-api" +import { Binary, FixedSizeBinary } from "polkadot-api" import { mergeUint8 } from "polkadot-api/utils" import { useMemo } from "react" import { useTranslation } from "react-i18next" @@ -176,7 +176,7 @@ export function getEvmAccountClaimMessage( export const useSetFeePaymentAsset = (options: TransactionOptions) => { const { t } = useTranslation(["common"]) - const { papi } = useRpcProvider() + const { papi, papiClient } = useRpcProvider() const { account } = useAccount() const wallet = useWallet() @@ -213,6 +213,57 @@ export const useSetFeePaymentAsset = (options: TransactionOptions) => { }) } + if (account?.address) { + const accountInfo = await papi.query.System.Account.getValue( + account.address, + ) + const isUnclaimedAccount = + accountInfo.nonce === 0 && + accountInfo.providers === 0 && + accountInfo.sufficients === 0 + + const signer = wallet?.signer + + if (isUnclaimedAccount && isPolkadotSigner(signer)) { + const message = getEvmAccountClaimMessage(account.address, assetId) + const sigBytes = await signer.signBytes(message) + + const claimTx = papi.tx.EVMAccounts.claim_account({ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + account: account.address as any, + asset_id: Number(assetId), + signature: MultiSignature.Sr25519(new FixedSizeBinary(sigBytes)), + }) + + const callData = await claimTx.getEncodedData() + const rawCallData = callData.asBytes() + const unsignedTxHex = Binary.fromBytes( + mergeUint8( + compactNumber.enc(rawCallData.length + 1), + new Uint8Array([4]), + rawCallData, + ), + ).asHex() + + await new Promise((resolve, reject) => { + const sub = papiClient.submitAndWatch(unsignedTxHex).subscribe({ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + next: (event: any) => { + if (event.type === "txBestBlocksState" && event.found) { + if (!event.ok) { + reject(new Error("EVM account claim failed")) + } else { + resolve() + } + sub.unsubscribe() + } + }, + error: reject, + }) + }) + } + } + return createTransaction( { ...(isUnclaimedAccount diff --git a/apps/main/src/api/provider.ts b/apps/main/src/api/provider.ts index 478958e0fd..281ff6f20f 100644 --- a/apps/main/src/api/provider.ts +++ b/apps/main/src/api/provider.ts @@ -38,6 +38,7 @@ export type TProviderData = { sdk: SdkCtx papiClient: PolkadotClient papiCompatibilityToken: Awaited + papiNextCompatibilityToken: Awaited evm: PublicClient featureFlags: TFeatureFlags rpcUrlList: string[] @@ -108,19 +109,22 @@ const getProviderData = async ( const metadata = AssetMetadataFactory.getInstance() - const [sdk, slotDuration, papiCompatibilityToken, isNext] = await Promise.all( - [ - createSdkContext(papiClient), - papi.constants.Aura.SlotDuration(), - papi.compatibilityToken, - papiNext.constants.System.Version.isCompatible( - CompatibilityLevel.Partial, - ), - metadata.fetchAssets(), - metadata.fetchChains(), - metadata.fetchMetadata(), - ], - ) + const [ + sdk, + slotDuration, + papiCompatibilityToken, + papiNextCompatibilityToken, + isNext, + ] = await Promise.all([ + createSdkContext(papiClient), + papi.constants.Aura.SlotDuration(), + papi.compatibilityToken, + papiNext.compatibilityToken, + papiNext.constants.System.Version.isCompatible(CompatibilityLevel.Partial), + metadata.fetchAssets(), + metadata.fetchChains(), + metadata.fetchMetadata(), + ]) if (ENV.VITE_HSM_ENABLED) { sdk.ctx.pool.withHsm() @@ -141,6 +145,7 @@ const getProviderData = async ( papiClient, isNext, papiCompatibilityToken, + papiNextCompatibilityToken, evm, sdk, rpcUrlList, diff --git a/apps/main/src/api/trade.ts b/apps/main/src/api/trade.ts index b2048471aa..74fbb14ba9 100644 --- a/apps/main/src/api/trade.ts +++ b/apps/main/src/api/trade.ts @@ -1,4 +1,4 @@ -import { SdkCtx, sor } from "@galacticcouncil/sdk-next" +import { pool, SdkCtx, sor } from "@galacticcouncil/sdk-next" import { QUERY_KEY_BLOCK_PREFIX } from "@galacticcouncil/utils" import { QueryKey, queryOptions } from "@tanstack/react-query" import Big from "big.js" @@ -46,6 +46,7 @@ export const bestSellQuery = ( amountIn, ], queryFn: async () => { + sdk.api.router.withFilter({ exclude: [pool.PoolType.HSM] }) const swap = await sdk.api.router.getBestSell( Number(assetIn), Number(assetOut), @@ -265,6 +266,7 @@ export const bestBuyQuery = ( amountOut, ], queryFn: async () => { + sdk.api.router.withFilter({ exclude: [pool.PoolType.HSM] }) const swap = await sdk.api.router.getBestBuy( Number(assetIn), Number(assetOut), @@ -290,13 +292,35 @@ export const bestBuyTxQuery = ( ) => queryOptions({ queryKey: [swapKey, "tx"], - queryFn: () => - sdk.tx - .trade(swap) + queryFn: () => { + // We submit a sell tx for a buy (exact-out) trade. The SDK's withSlippage() + // on a sell reduces min_buy_amount, which would let the user receive less than + // the amountOut they specified. To prevent this, we inflate amountOut so that + // after SDK subtracts slippage%, min_buy_amount >= original amountOut. + // Formula: amountOutInflated = ceil(amountOut * 10000 / (10000 - k)) + // where k = round(slippage * 100). Then: min_buy_amount = amountOutInflated - k/10000 + // >= amountOut_original. + const k = BigInt(Math.round(slippage * 100)) + const denom = 10000n - k + // Inflate amountOut so min_buy_amount >= amountOut_original after SDK subtracts slippage% + const amountOutInflated = (swap.amountOut * 10000n + denom - 1n) / denom + // Inflate amountIn by slippage% — the slippage buffer goes on the input side, + // matching original buy tx semantics (max_sell_amount = amountIn + slippage%). + // This lets the tx succeed despite small price movements between quote and execution. + const amountInInflated = (swap.amountIn * (10000n + k) + 9999n) / 10000n + + return sdk.tx + .trade({ + ...swap, + amountIn: amountInInflated, + amountOut: amountOutInflated, + type: TradeType.Sell, + }) .withSlippage(slippage) .withBeneficiary(address) .build() - .then((tx) => tx.get()), + .then((tx) => tx.get()) + }, enabled: !!address, }) diff --git a/apps/main/src/config/navigation.ts b/apps/main/src/config/navigation.ts index 68f3cc2bdd..57bc2e961d 100644 --- a/apps/main/src/config/navigation.ts +++ b/apps/main/src/config/navigation.ts @@ -6,8 +6,10 @@ import { DropletIcon, DropletsIcon, GemIcon, + GlobeIcon, Grid2X2Icon, HistoryIcon, + HydrationLogo, Repeat2Icon, WalletCardsIcon, WavesIcon, @@ -26,9 +28,11 @@ export const LINKS = { pools: "/liquidity", swap: "/trade/swap", swapMarket: "/trade/swap/market", + swapLimit: "/trade/swap/limit", swapDca: "/trade/swap/dca", wallet: "/wallet", walletAssets: "/wallet/assets", + walletMultichain: "/wallet/multichain", walletTransactions: "/wallet/transactions", crossChain: "/cross-chain", crossChainHistory: "/cross-chain/history", @@ -79,6 +83,7 @@ export const NAVIGATION: NavigationItem[] = [ icon: Repeat2Icon, children: [ { key: "swapMarket", to: LINKS.swapMarket }, + { key: "swapLimit", to: LINKS.swapLimit }, { key: "swapDca", to: LINKS.swapDca }, ], }, @@ -121,7 +126,8 @@ export const NAVIGATION: NavigationItem[] = [ icon: WalletCardsIcon, defaultChild: LINKS.walletAssets, children: [ - { key: "walletAssets", to: LINKS.walletAssets }, + { key: "walletAssets", to: LINKS.walletAssets, icon: HydrationLogo }, + { key: "walletMultichain", to: LINKS.walletMultichain, icon: GlobeIcon }, // { key: "walletTransactions", to: LINKS.walletTransactions }, ], }, @@ -192,6 +198,10 @@ export const getMenuTranslations = (t: TFunction) => title: t("navigation.walletAssets.title"), description: "", }, + walletMultichain: { + title: t("navigation.walletMultichain.title"), + description: "", + }, walletTransactions: { title: t("navigation.walletTransactions.title"), description: "", @@ -220,6 +230,10 @@ export const getMenuTranslations = (t: TFunction) => title: t("navigation.swapMarket.title"), description: "", }, + swapLimit: { + title: t("navigation.swapLimit.title"), + description: "", + }, swapDca: { title: t("navigation.swapDca.title"), description: "", diff --git a/apps/main/src/config/rpc.ts b/apps/main/src/config/rpc.ts index 7363ce0dd4..b74d4d3e90 100644 --- a/apps/main/src/config/rpc.ts +++ b/apps/main/src/config/rpc.ts @@ -86,6 +86,14 @@ export const PROVIDERS: ProviderProps[] = [ // createProvider("Dotters", "wss://hydration.dotters.network"), // createProvider("IBP", "wss://hydration.ibp.network"), // createProvider("LATAM", "wss://hydration.rpc.stkd.io"), + createProvider( + "Lark (Intents)", + "wss://node3.lark.hydration.cloud", + MAINNET_INDEXER_URL, + MAINNET_SQUID_URL, + ["development", "production"], + "testnet", + ), createProvider( "Testnet", "wss://rpc.nice.hydration.cloud", diff --git a/apps/main/src/i18n/index.ts b/apps/main/src/i18n/index.ts index 93d5800c33..d14ec82d1f 100644 --- a/apps/main/src/i18n/index.ts +++ b/apps/main/src/i18n/index.ts @@ -7,13 +7,24 @@ import common from "@/i18n/locales/en/common.json" import liquidity from "@/i18n/locales/en/liquidity.json" import staking from "@/i18n/locales/en/staking.json" import stats from "@/i18n/locales/en/stats.json" +import strategies from "@/i18n/locales/en/strategies.json" import trade from "@/i18n/locales/en/trade.json" import wallet from "@/i18n/locales/en/wallet.json" import xcm from "@/i18n/locales/en/xcm.json" export const defaultNS = "common" export const resources = { - en: { common, liquidity, trade, wallet, borrow, staking, xcm, stats }, + en: { + common, + liquidity, + trade, + wallet, + borrow, + staking, + xcm, + stats, + strategies, + }, } as const const i18n = i18next.createInstance() diff --git a/apps/main/src/i18n/locales/en/common.json b/apps/main/src/i18n/locales/en/common.json index db0af76ef8..2c5a6016ea 100644 --- a/apps/main/src/i18n/locales/en/common.json +++ b/apps/main/src/i18n/locales/en/common.json @@ -199,10 +199,13 @@ "navigation.swap.description": "Trade instantly using the Omnipool", "navigation.swap.title": "Swap", "navigation.trade.title": "Trade", + "navigation.strategies.title": "Strategies", "navigation.swapMarket.title": "Market", + "navigation.swapLimit.title": "Limit", "navigation.swapDca.title": "DCA", "navigation.wallet.title": "Wallet", - "navigation.walletAssets.title": "Overview", + "navigation.walletAssets.title": "Hydration", + "navigation.walletMultichain.title": "Multichain", "navigation.walletTransactions.title": "Transactions", "navigation.statsOverview.title": "Overview", "navigation.statsTreasury.title": "Treasury", @@ -344,5 +347,6 @@ "submitTransaction.validation": "Invalid hex", "submitTransaction.warning": "Warning! Do not submit transactions somebody sent you in a message. Always check what you are sending on transaction confirmation screen or in https://polkadot.js.org/apps/#/extrinsics/decode", "submitTransaction.toasts.success": "Extrinsic successful", - "submitTransaction.toasts.submitted": "Extrinsic submitted" + "submitTransaction.toasts.submitted": "Extrinsic submitted", + "clear": "Clear" } diff --git a/apps/main/src/i18n/locales/en/strategies.json b/apps/main/src/i18n/locales/en/strategies.json new file mode 100644 index 0000000000..3f83474207 --- /dev/null +++ b/apps/main/src/i18n/locales/en/strategies.json @@ -0,0 +1,25 @@ +{ + "stats.totalDeposits": "Total deposits", + "stats.activeBorrows": "Active borrows", + "positions.title": "My positions", + "positions.show": "Show positions", + "positions.hide": "Show less", + "positions.openedPositions": "Opened positions", + "positions.positionsValue": "Positions value", + "positions.avgLeverage": "Avg. leverage", + "positions.table.position": "Position", + "positions.table.value": "Value", + "positions.table.positions": "Positions", + "positions.table.amount": "Amount", + "positions.table.pnl": "PNL (%)", + "positions.table.apy": "APY", + "positions.table.hf": "HF", + "positions.table.actions": "Actions", + "positions.table.close": "Close", + "positions.table.goToPair": "Go to pair", + "positions.leverage": "{{value}}x Leverage", + "featured.title": "Featured strategies", + "featured.netApy": "Net APY", + "featured.liquidity": "Liquidity Available", + "featured.upTo": "UP TO {{value}}X" +} diff --git a/apps/main/src/i18n/locales/en/trade.json b/apps/main/src/i18n/locales/en/trade.json index c8b76f0560..67a33661a1 100644 --- a/apps/main/src/i18n/locales/en/trade.json +++ b/apps/main/src/i18n/locales/en/trade.json @@ -24,6 +24,7 @@ "trade.orders.allPairs.off": "Recent pair", "trade.orders.type.market": "Market", "trade.orders.type.dca": "DCA", + "trade.orders.type.limit": "Limit", "trade.orders.status.filled": "Filled", "trade.orders.status.active": "Active", "trade.orders.status.failed": "Failed", @@ -172,5 +173,25 @@ "otc.fillOrder.partiallyFillable.description": "Allow users to fill smaller parts of this offer", "otc.cancelOrder.loading": "Cancelling an OTC order for {{ amount }}.", "otc.cancelOrder.success": "OTC order cancelled for {{ amount }}.", - "otc.cancelOrder.error": "Failed to cancel OTC order for {{ amount }}." + "otc.cancelOrder.error": "Failed to cancel OTC order for {{ amount }}.", + "limit.expiry.label": "Expires", + "limit.expiry.1h": "1h", + "limit.expiry.12h": "12h", + "limit.expiry.24h": "24h", + "limit.expiry.open": "Open", + "limit.limitPrice.label": "Limit price", + "limit.limitPrice.takeProfit": "Take profit", + "limit.limitPrice.stopLoss": "Stop loss", + "limit.addStopLoss.label": "Add Stop Loss", + "limit.remove.tx.submitted": "Removing limit orders", + "limit.remove.tx.success": "Limit orders removed", + "limit.remove.tx.error": "Failed to remove limit orders", + "limit.chart.label": "Limit order", + "limit.submit": "Set limit order", + "limit.tx.submitted": "Submitting limit order: {{amountIn}} for {{amountOut}}", + "limit.tx.success": "Limit order set: {{amountIn}} for {{amountOut}}", + "limit.tx.error": "Failed to set limit order: {{amountIn}} for {{amountOut}}", + "limit.market": "Best", + "limit.spot": "Spot", + "limit.receive": "When filled, you receive" } diff --git a/apps/main/src/i18n/locales/en/wallet.json b/apps/main/src/i18n/locales/en/wallet.json index cb2775d9cd..1a4db66c5d 100644 --- a/apps/main/src/i18n/locales/en/wallet.json +++ b/apps/main/src/i18n/locales/en/wallet.json @@ -1,4 +1,6 @@ { + "multichain.noAssets": "No supported assets found on this chain.", + "multichain.transfer": "Transfer to Hydration", "emptyState.title": "No wallet connected", "emptyState.description": "Connect a wallet to view your assets.", "balances.title": "Balances", diff --git a/apps/main/src/modules/liquidity/Liquidity.utils.tsx b/apps/main/src/modules/liquidity/Liquidity.utils.tsx index 7f70d0ddf6..9826deb5b0 100644 --- a/apps/main/src/modules/liquidity/Liquidity.utils.tsx +++ b/apps/main/src/modules/liquidity/Liquidity.utils.tsx @@ -843,6 +843,7 @@ export const useIsLiquidityProvided = () => { const { positionsAmount } = useAccountPositions() return useMemo(() => { + if (!getAsset) return false if (positionsAmount > 0) return true return Object.values(balances).some((balance) => { diff --git a/apps/main/src/modules/trade/orders/OpenOrders/OpenOrders.columns.tsx b/apps/main/src/modules/trade/orders/OpenOrders/OpenOrders.columns.tsx index 5512e71d59..578b2c0c5b 100644 --- a/apps/main/src/modules/trade/orders/OpenOrders/OpenOrders.columns.tsx +++ b/apps/main/src/modules/trade/orders/OpenOrders/OpenOrders.columns.tsx @@ -19,7 +19,8 @@ import { SwapAmount } from "@/modules/trade/orders/columns/SwapAmount" import { SwapMobile } from "@/modules/trade/orders/columns/SwapMobile" import { SwapPrice } from "@/modules/trade/orders/columns/SwapPrice" import { SwapType } from "@/modules/trade/orders/columns/SwapType" -import { OrderData } from "@/modules/trade/orders/lib/useOrdersData" +import { OrderData, OrderKind } from "@/modules/trade/orders/lib/useOrdersData" +import { RemoveIntentModalContent } from "@/modules/trade/orders/RemoveIntentModalContent" import { TerminateDcaScheduleModalContent } from "@/modules/trade/orders/TerminateDcaScheduleModalContent" const columnHelper = createColumnHelper() @@ -32,6 +33,7 @@ export const useOpenOrdersColumns = () => { const fromToColumn = columnHelper.display({ header: t("trade:trade.orders.openOrders.inOut"), cell: ({ row }) => { + const isLimit = row.original.kind === OrderKind.Limit return ( { : row.original.fromAmountBudget } toAmount={ - row.original.isOpenBudget + isLimit ? row.original.toAmountExecuted - : undefined + : row.original.isOpenBudget + ? row.original.toAmountExecuted + : undefined } from={row.original.from} to={row.original.to} @@ -68,11 +72,18 @@ export const useOpenOrdersColumns = () => { ), cell: ({ row }) => { - const { from, to, fromAmountExecuted, toAmountExecuted } = row.original + const { + from, + to, + fromAmountExecuted, + fromAmountBudget, + toAmountExecuted, + } = row.original + const amountIn = fromAmountExecuted ?? fromAmountBudget const price = - toAmountExecuted && fromAmountExecuted && Big(toAmountExecuted).gt(0) - ? Big(fromAmountExecuted).div(toAmountExecuted).toString() + toAmountExecuted && amountIn && Big(toAmountExecuted).gt(0) + ? Big(amountIn).div(toAmountExecuted).toString() : null return @@ -109,6 +120,7 @@ export const useOpenOrdersColumns = () => { id: "actions", cell: function Cell({ row }) { const [modal, setModal] = useState<"confirmation" | "none">("none") + const isLimit = row.original.kind === OrderKind.Limit return ( @@ -124,19 +136,28 @@ export const useOpenOrdersColumns = () => { > - + {!isLimit && } setModal("none")} > - setModal("none")} - /> + {isLimit && row.original.intentId !== undefined ? ( + setModal("none")} + /> + ) : ( + setModal("none")} + /> + )} ) diff --git a/apps/main/src/modules/trade/orders/OpenOrders/OpenOrders.tsx b/apps/main/src/modules/trade/orders/OpenOrders/OpenOrders.tsx index 7ce3e3e149..cce9c51d23 100644 --- a/apps/main/src/modules/trade/orders/OpenOrders/OpenOrders.tsx +++ b/apps/main/src/modules/trade/orders/OpenOrders/OpenOrders.tsx @@ -5,8 +5,10 @@ import { FC, useState } from "react" import { PaginationProps } from "@/hooks/useDataTableUrlPagination" import { DcaOrderDetailsModal } from "@/modules/trade/orders/DcaOrderDetailsModal" +import { useIntentsData } from "@/modules/trade/orders/lib/useIntentsData" import { OrderData, + OrderKind, useOrdersData, } from "@/modules/trade/orders/lib/useOrdersData" import { useOpenOrdersColumns } from "@/modules/trade/orders/OpenOrders/OpenOrders.columns" @@ -28,13 +30,29 @@ export const OpenOrders: FC = ({ allPairs, paginationProps }) => { readonly isTermination: boolean } | null>(null) - const { orders, totalCount, isLoading } = useOrdersData( + const { + orders: dcaOrders, + totalCount, + isLoading: isDcaLoading, + } = useOrdersData( [DcaScheduleStatus.Created], allPairs ? [] : [assetIn, assetOut], paginationProps.pagination.pageIndex, paginationProps.pagination.pageSize, ) + const { orders: allIntentOrders, isLoading: isIntentsLoading } = + useIntentsData() + + const intentOrders = allPairs + ? allIntentOrders + : allIntentOrders.filter( + (o) => o.from.id === assetIn && o.to.id === assetOut, + ) + + const orders = [...intentOrders, ...dcaOrders] + const isLoading = isDcaLoading || isIntentsLoading + const columns = useOpenOrdersColumns() return ( @@ -45,10 +63,12 @@ export const OpenOrders: FC = ({ allPairs, paginationProps }) => { isLoading={isLoading} paginated {...paginationProps} - rowCount={totalCount} - onRowClick={(detail) => - setIsDetailOpen({ detail, isTermination: false }) - } + rowCount={totalCount + intentOrders.length} + onRowClick={(detail) => { + if (detail.kind !== OrderKind.Limit) { + setIsDetailOpen({ detail, isTermination: false }) + } + }} emptyState={} /> setIsDetailOpen(null)}> diff --git a/apps/main/src/modules/trade/orders/RemoveIntentModalContent.tsx b/apps/main/src/modules/trade/orders/RemoveIntentModalContent.tsx new file mode 100644 index 0000000000..f442e12b44 --- /dev/null +++ b/apps/main/src/modules/trade/orders/RemoveIntentModalContent.tsx @@ -0,0 +1,33 @@ +import { FC } from "react" + +import { CancelTradeOrderModalContent } from "@/modules/trade/otc/cancel-order/CancelTradeOrderModalContent" +import { useRemoveIntents } from "@/modules/trade/swap/sections/Limit/useRemoveIntents" + +type Props = { + readonly intentId: bigint + readonly fromAmount: string | null + readonly symbol: string + readonly onClose: () => void +} + +export const RemoveIntentModalContent: FC = ({ + intentId, + fromAmount, + symbol, + onClose, +}) => { + const removeIntents = useRemoveIntents() + + return ( + { + removeIntents.mutate([intentId]) + onClose() + }} + /> + ) +} diff --git a/apps/main/src/modules/trade/orders/TradeOrdersHeader.tsx b/apps/main/src/modules/trade/orders/TradeOrdersHeader.tsx index 90b41ed1c7..abff71e50a 100644 --- a/apps/main/src/modules/trade/orders/TradeOrdersHeader.tsx +++ b/apps/main/src/modules/trade/orders/TradeOrdersHeader.tsx @@ -16,6 +16,7 @@ import { useSquidClient } from "@/api/provider" import { TabItem, TabMenu } from "@/components/TabMenu" import { TabMenuItem } from "@/components/TabMenu/TabMenuItem" import { PaginationProps } from "@/hooks/useDataTableUrlPagination" +import { useIntentsData } from "@/modules/trade/orders/lib/useIntentsData" import { TradeHistorySearchParams } from "@/routes/trade/_history/route" export const tradeOrderTabs = [ @@ -51,7 +52,15 @@ export const TradeOrdersHeader: FC = ({ paginationProps }) => { ), ) - const openOrdersCount = openOrdersCountData?.dcaSchedules?.totalCount ?? 0 + const dcaCount = openOrdersCountData?.dcaSchedules?.totalCount ?? 0 + + const { orders: intentOrders } = useIntentsData() + const intentCount = allPairs + ? intentOrders.length + : intentOrders.filter((o) => o.from.id === assetIn && o.to.id === assetOut) + .length + + const openOrdersCount = dcaCount + intentCount const navigate = useNavigate() diff --git a/apps/main/src/modules/trade/orders/lib/useIntentsData.ts b/apps/main/src/modules/trade/orders/lib/useIntentsData.ts new file mode 100644 index 0000000000..2fb0710a51 --- /dev/null +++ b/apps/main/src/modules/trade/orders/lib/useIntentsData.ts @@ -0,0 +1,58 @@ +import { useAccount } from "@galacticcouncil/web3-connect" +import { useQuery } from "@tanstack/react-query" +import { useMemo } from "react" + +import { intentsByAccountQuery } from "@/api/intents" +import { OrderData, OrderKind } from "@/modules/trade/orders/lib/useOrdersData" +import { useAssets } from "@/providers/assetsProvider" +import { useRpcProvider } from "@/providers/rpcProvider" +import { scaleHuman } from "@/utils/formatting" + +export const useIntentsData = () => { + const { account } = useAccount() + const provider = useRpcProvider() + const { getAssetWithFallback } = useAssets() + + const { data, isLoading } = useQuery( + intentsByAccountQuery(provider, account?.address ?? ""), + ) + + const orders = useMemo>( + () => + (data ?? []) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + .map(({ id, intent }: any) => { + if (intent.data.type !== "Swap") return null + + const swap = intent.data.value + const from = getAssetWithFallback(String(swap.asset_in)) + const to = getAssetWithFallback(String(swap.asset_out)) + const fromAmount = scaleHuman( + swap.amount_in.toString(), + from.decimals, + ) + const toAmount = scaleHuman(swap.amount_out.toString(), to.decimals) + + return { + kind: OrderKind.Limit, + scheduleId: Number(id), + intentId: id, + from, + fromAmountBudget: fromAmount, + fromAmountExecuted: null, + fromAmountRemaining: null, + singleTradeSize: null, + to, + toAmountExecuted: toAmount, + status: null, + blocksPeriod: null, + isOpenBudget: false, + } satisfies OrderData + }) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + .filter((o: any): o is OrderData => o !== null) as OrderData[], + [data, getAssetWithFallback], + ) + + return { orders, isLoading } +} diff --git a/apps/main/src/modules/trade/orders/lib/useOrdersData.ts b/apps/main/src/modules/trade/orders/lib/useOrdersData.ts index 81bcb71114..702112563e 100644 --- a/apps/main/src/modules/trade/orders/lib/useOrdersData.ts +++ b/apps/main/src/modules/trade/orders/lib/useOrdersData.ts @@ -16,11 +16,13 @@ import { scaleHuman } from "@/utils/formatting" export enum OrderKind { Dca = "dca", DcaRolling = "dcaRolling", + Limit = "limit", } export type OrderData = { readonly kind: OrderKind readonly scheduleId: number + readonly intentId?: bigint readonly from: TAsset readonly fromAmountBudget: string | null readonly fromAmountExecuted: string | null diff --git a/apps/main/src/modules/trade/swap/components/TradeChart/TradeChart.tsx b/apps/main/src/modules/trade/swap/components/TradeChart/TradeChart.tsx index 487207191a..53ea668a5d 100644 --- a/apps/main/src/modules/trade/swap/components/TradeChart/TradeChart.tsx +++ b/apps/main/src/modules/trade/swap/components/TradeChart/TradeChart.tsx @@ -10,7 +10,8 @@ import { import { BaselineChartData } from "@galacticcouncil/ui/components/TradingViewChart/utils" import { USDT_ASSET_ID } from "@galacticcouncil/utils" import { useSearch } from "@tanstack/react-router" -import React, { useRef, useState } from "react" +import Big from "big.js" +import React, { useMemo, useRef, useState } from "react" import { useTranslation } from "react-i18next" import { last } from "remeda" @@ -21,6 +22,7 @@ import { ChartTimeRangeOptionType, } from "@/components/ChartTimeRange/ChartTimeRange" import i18n from "@/i18n" +import { useIntentsData } from "@/modules/trade/orders/lib/useIntentsData" import { useTradeChartData } from "@/modules/trade/swap/components/TradeChart/TradeChart.data" import { useAssets } from "@/providers/assetsProvider" @@ -40,7 +42,7 @@ type TradeChartProps = { } export const TradeChart: React.FC = ({ height }) => { - const { t } = useTranslation() + const { t } = useTranslation("trade") const { assetIn, assetOut } = useSearch({ from: "/trade/_history" }) @@ -56,6 +58,19 @@ export const TradeChart: React.FC = ({ height }) => { timeFrame: interval === "all" ? null : interval, }) + const { orders: intentOrders } = useIntentsData() + + const intentPriceLines = useMemo(() => { + return intentOrders + .filter((o) => o.from.id === assetIn && o.to.id === assetOut) + .flatMap((o) => { + if (!o.fromAmountBudget || !o.toAmountExecuted) return [] + const toAmount = Big(o.toAmountExecuted) + if (toAmount.eq(0)) return [] + return [Number(Big(o.fromAmountBudget).div(toAmount))] + }) + }, [intentOrders, assetIn, assetOut]) + const isEmpty = isSuccess && !prices.length const lastDataPoint = last(prices) @@ -72,7 +87,8 @@ export const TradeChart: React.FC = ({ height }) => { const chartValue = !isEmpty && !isError - ? t("currency", { + ? // eslint-disable-next-line @typescript-eslint/no-explicit-any + t("common:currency" as any, { value, symbol: getAssetWithFallback(assetIn).symbol, }) @@ -82,10 +98,12 @@ export const TradeChart: React.FC = ({ height }) => { !isEmpty && !isError ? ( - {t("price")}: {formattedAssetPrice} + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {t("common:price" as any)}: {formattedAssetPrice} 0 ? "visible" : "hidden"}> - {t("vol")}: {formattedVolumePrice} + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} + {t("common:vol" as any)}: {formattedVolumePrice} ) : undefined @@ -118,6 +136,10 @@ export const TradeChart: React.FC = ({ height }) => { height={height} data={prices} hidePriceIndicator + priceLines={intentPriceLines.length ? intentPriceLines : undefined} + priceLinesLabel={ + intentPriceLines.length ? t("limit.chart.label") : undefined + } onCrosshairMove={setCrosshair} /> diff --git a/apps/main/src/modules/trade/swap/sections/Limit/Limit.styled.ts b/apps/main/src/modules/trade/swap/sections/Limit/Limit.styled.ts new file mode 100644 index 0000000000..9fa280d5d3 --- /dev/null +++ b/apps/main/src/modules/trade/swap/sections/Limit/Limit.styled.ts @@ -0,0 +1,139 @@ +import isPropValid from "@emotion/is-prop-valid" +import { css } from "@emotion/react" +import styled from "@emotion/styled" +import { Box, Flex } from "@galacticcouncil/ui/components" + +export const SDenominationPill = styled(Flex)( + ({ theme }) => css` + align-items: center; + gap: ${theme.space.s}; + + padding-block: ${theme.space.base}; + padding-inline: ${theme.space.l}; + border-radius: ${theme.radii.xxl}; + + font-weight: 500; + font-size: ${theme.fontSizes.p5}; + color: ${theme.text.high}; + white-space: nowrap; + + cursor: pointer; + user-select: none; + flex-shrink: 0; + + margin-left: calc(-1 * ${theme.containers.paddings.tertiary}); + + svg { + color: ${theme.icons.primary}; + } + + &:hover { + background: ${theme.buttons.secondary.low.rest}; + } + `, +) + +export const SPriceOption = styled(Box, { + shouldForwardProp: (prop) => isPropValid(prop) && prop !== "active", +})<{ active?: boolean }>( + ({ theme, active }) => css` + display: inline-flex; + align-items: center; + gap: 2px; + + color: ${active ? theme.text.high : theme.text.low}; + + padding-block: ${theme.space.base}; + padding-inline: ${theme.space.l}; + border-radius: ${theme.radii.xxl}; + + font-weight: 500; + font-size: ${theme.fontSizes.p3}; + line-height: ${theme.lineHeights.m}; + text-decoration: none; + + cursor: pointer; + user-select: none; + + ${active + ? css` + background: ${theme.buttons.secondary.low.rest}; + ` + : ""} + + &:hover { + color: ${theme.text.high}; + background: ${theme.buttons.secondary.low.rest}; + } + `, +) + +export const SCustomPill = styled(Box, { + shouldForwardProp: (prop) => isPropValid(prop) && prop !== "active", +})<{ active?: boolean }>( + ({ theme, active }) => css` + display: inline-flex; + align-items: center; + gap: 2px; + + color: ${active ? theme.text.high : theme.text.low}; + padding-block: ${theme.space.base}; + padding-inline: ${theme.space.l}; + border-radius: ${theme.radii.xxl}; + font-weight: 500; + font-size: ${theme.fontSizes.p3}; + line-height: ${theme.lineHeights.m}; + cursor: pointer; + user-select: none; + + ${active + ? css` + background: ${theme.buttons.secondary.low.rest}; + ` + : ""} + + &:hover { + color: ${theme.text.high}; + background: ${theme.buttons.secondary.low.rest}; + } + `, +) + +export const SPctBadge = styled.span( + ({ theme }) => css` + display: inline-flex; + align-items: center; + + padding-block: ${theme.space.base}; + padding-inline: ${theme.space.s}; + border-radius: ${theme.radii.xxl}; + + font-weight: 500; + font-size: ${theme.fontSizes.p5}; + line-height: ${theme.lineHeights.m}; + color: ${theme.text.low}; + background: ${theme.buttons.secondary.low.rest}; + + user-select: none; + white-space: nowrap; + `, +) + +export const SCustomPctInput = styled.input( + () => css` + width: 3ch; + background: none; + border: none; + outline: none; + color: inherit; + font: inherit; + text-align: right; + padding: 0; + + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none; + } + -moz-appearance: textfield; + `, +) diff --git a/apps/main/src/modules/trade/swap/sections/Limit/Limit.tsx b/apps/main/src/modules/trade/swap/sections/Limit/Limit.tsx new file mode 100644 index 0000000000..844d77fe66 --- /dev/null +++ b/apps/main/src/modules/trade/swap/sections/Limit/Limit.tsx @@ -0,0 +1,47 @@ +import { Button, Grid } from "@galacticcouncil/ui/components" +import { useSearch } from "@tanstack/react-router" +import { FC } from "react" +import { FormProvider } from "react-hook-form" +import { useTranslation } from "react-i18next" + +import { AuthorizedAction } from "@/components/AuthorizedAction/AuthorizedAction" +import { LimitForm } from "@/modules/trade/swap/sections/Limit/LimitForm" +import { useLimitForm } from "@/modules/trade/swap/sections/Limit/useLimitForm" +import { useSubmitLimitOrder } from "@/modules/trade/swap/sections/Limit/useSubmitLimitOrder" +import { SwapSectionSeparator } from "@/modules/trade/swap/SwapPage.styled" + +export const Limit: FC = () => { + const { t } = useTranslation(["common", "trade"]) + const { assetIn, assetOut } = useSearch({ from: "/trade/_history" }) + + const form = useLimitForm({ assetIn, assetOut }) + const submitLimitOrder = useSubmitLimitOrder() + + const limitPrice = form.watch("limitPrice") + const isFormValid = form.formState.isValid && !!limitPrice + + return ( + +
+ submitLimitOrder.mutate(values), + )} + > + + + + + + + + +
+ ) +} diff --git a/apps/main/src/modules/trade/swap/sections/Limit/LimitAssetSwitcher.tsx b/apps/main/src/modules/trade/swap/sections/Limit/LimitAssetSwitcher.tsx new file mode 100644 index 0000000000..b7c775fa7c --- /dev/null +++ b/apps/main/src/modules/trade/swap/sections/Limit/LimitAssetSwitcher.tsx @@ -0,0 +1,38 @@ +import { SELL_ONLY_ASSETS } from "@galacticcouncil/utils" +import { useQuery } from "@tanstack/react-query" +import { FC } from "react" +import { useFormContext } from "react-hook-form" + +import { spotPriceQuery } from "@/api/spotPrice" +import { AssetSwitcher } from "@/components/AssetSwitcher/AssetSwitcher" +import { LimitFormValues } from "@/modules/trade/swap/sections/Limit/useLimitForm" +import { useSwitchAssets } from "@/modules/trade/swap/sections/Limit/useSwitchAssets" +import { useRpcProvider } from "@/providers/rpcProvider" + +export const LimitAssetSwitcher: FC = () => { + const rpc = useRpcProvider() + const { watch } = useFormContext() + + const [sellAsset, buyAsset] = watch(["sellAsset", "buyAsset"]) + + const { data: spotPriceData, isPending: isSpotPricePending } = useQuery( + spotPriceQuery(rpc, sellAsset?.id ?? "", buyAsset?.id ?? ""), + ) + + const switchAssets = useSwitchAssets() + + return ( + switchAssets.mutate()} + disabled={ + switchAssets.isPending || + (!!sellAsset && SELL_ONLY_ASSETS.includes(sellAsset.id)) + } + fallbackPrice={spotPriceData?.spotPrice ?? undefined} + isFallbackPriceLoading={isSpotPricePending} + /> + ) +} diff --git a/apps/main/src/modules/trade/swap/sections/Limit/LimitForm.tsx b/apps/main/src/modules/trade/swap/sections/Limit/LimitForm.tsx new file mode 100644 index 0000000000..c6d29f5b6b --- /dev/null +++ b/apps/main/src/modules/trade/swap/sections/Limit/LimitForm.tsx @@ -0,0 +1,583 @@ +import { + Box, + Flex, + Icon, + NumberInput, + Text, +} from "@galacticcouncil/ui/components" +import { getToken } from "@galacticcouncil/ui/utils" +import { formatNumber, SELL_ONLY_ASSETS } from "@galacticcouncil/utils" +import { useQuery } from "@tanstack/react-query" +import { useNavigate } from "@tanstack/react-router" +import Big from "big.js" +import { ArrowDown, ArrowLeftRight, ArrowUp, Pencil, X } from "lucide-react" +import { FC, useEffect, useMemo, useRef, useState } from "react" +import { Controller, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" + +import { spotPriceQuery } from "@/api/spotPrice" +import { bestSellQuery } from "@/api/trade" +import { AssetSelectFormField } from "@/form/AssetSelectFormField" +import { + SCustomPctInput, + SCustomPill, + SDenominationPill, + SPctBadge, + SPriceOption, +} from "@/modules/trade/swap/sections/Limit/Limit.styled" +import { LimitAssetSwitcher } from "@/modules/trade/swap/sections/Limit/LimitAssetSwitcher" +import { + EXPIRY_OPTIONS, + ExpiryOption, + LimitFormValues, +} from "@/modules/trade/swap/sections/Limit/useLimitForm" +import { useSwitchAssets } from "@/modules/trade/swap/sections/Limit/useSwitchAssets" +import { SwapSectionSeparator } from "@/modules/trade/swap/SwapPage.styled" +import { TAsset, useAssets } from "@/providers/assetsProvider" +import { useRpcProvider } from "@/providers/rpcProvider" +import { + DEFAULT_TRADE_ASSET_IN_ID, + DEFAULT_TRADE_ASSET_OUT_ID, +} from "@/routes/trade/_history/route" +import { scaleHuman } from "@/utils/formatting" + +// Percentage offsets shown as pills. Factors are derived per-render based on isPriceInverted. +const PILL_PCTS = [2, 5, 10] as const + +// Buffer applied to "Best" (market) pill: sets limit slightly below spot so the order +// can be filled via AMM routing even without a CoW match (accounts for price impact). +const BEST_PILL_BUFFER = 0.005 // 0.5% below spot in internal (buyAsset/sellAsset) terms + +export const LimitForm: FC = () => { + const { t } = useTranslation(["common", "trade"]) + const rpc = useRpcProvider() + const { tradable, getAsset } = useAssets() + const navigate = useNavigate() + const switchAssets = useSwitchAssets() + + const { control, getValues, setValue, reset, trigger, watch } = + useFormContext() + + const [sellAsset, buyAsset, limitPrice, sellAmount, buyAmountVal] = watch([ + "sellAsset", + "buyAsset", + "limitPrice", + "sellAmount", + "buyAmount", + ]) + + const buyableAssets = useMemo( + () => tradable.filter((asset) => !SELL_ONLY_ASSETS.includes(asset.id)), + [tradable], + ) + + const { data: spotPriceData } = useQuery( + spotPriceQuery(rpc, sellAsset?.id ?? "", buyAsset?.id ?? ""), + ) + + // Swap execution quote: gives us the effective rate including fees & price impact + const { data: bestSellData } = useQuery( + bestSellQuery(rpc, { + assetIn: sellAsset?.id ?? "", + assetOut: buyAsset?.id ?? "", + amountIn: sellAmount || "0", + }), + ) + + // Derive "Best" price from the swap quote (effective execution rate). + // bestPrice = amountOut / sellAmount (in human-readable units = buyAsset per sellAsset). + // Falls back to spot × (1 - buffer) when no sell amount or quote unavailable. + const bestPrice = useMemo(() => { + if (bestSellData && sellAmount && Big(sellAmount).gt(0) && buyAsset) { + const amountOutHuman = scaleHuman( + bestSellData.amountOut, + buyAsset.decimals, + ) + if (amountOutHuman && Big(amountOutHuman).gt(0)) { + return Big(amountOutHuman).div(sellAmount).toString() + } + } + // Fallback: spot price with buffer + if (spotPriceData?.spotPrice) { + return Big(spotPriceData.spotPrice) + .times(1 - BEST_PILL_BUFFER) + .toString() + } + return null + }, [bestSellData, sellAmount, buyAsset, spotPriceData?.spotPrice]) + + // selectedFactor: 1 = Market, 0 = custom/manual, else a specific pill factor + const [selectedFactor, setSelectedFactor] = useState(1) + // isPriceInverted=true: display = sellAsset per buyAsset (1/internal) + // isPriceInverted=false: display = buyAsset per sellAsset (internal) + const [isPriceInverted, setIsPriceInverted] = useState(false) + const [customPct, setCustomPct] = useState("0") + + // Guards to prevent onValueChange from treating programmatic updates as user edits + const programmaticPriceRef = useRef(false) + const denominationChangingRef = useRef(false) + // Tracks whether buy amount was last edited by user (prevents live-sync overwriting it) + const buyEditedRef = useRef(false) + + // Reset display direction when assets change + useEffect(() => { + setIsPriceInverted(false) + }, [sellAsset?.id, buyAsset?.id]) + + // Displayed symbol (numerator of the price ratio shown to user) + // Denomination pill / input label: shows the current display unit (numerator of the price ratio) + const displaySymbol = isPriceInverted ? sellAsset?.symbol : buyAsset?.symbol + + // Arrow icon direction for "better" pills: inverted display goes down, non-inverted goes up + const PillArrowIcon = isPriceInverted ? ArrowDown : ArrowUp + + // Each pill factor: for inverted display, "better" = lower displayed = lower internal factor + const pillAdjustments = PILL_PCTS.map((pct) => ({ + pct, + factor: isPriceInverted ? 1 - pct / 100 : 1 + pct / 100, + })) + + // Convert internal price (buyAsset per sellAsset) to displayed value + const toDisplayPrice = (internal: string) => { + if (!internal || Big(internal).eq(0)) return "" + const raw = isPriceInverted ? Big(1).div(internal).toString() : internal + return formatNumber(raw, undefined, { useGrouping: false }) + } + + // Convert displayed price back to internal (buyAsset per sellAsset) + const toInternalPrice = (displayed: string) => { + if (!displayed || Big(displayed).eq(0)) return "" + return isPriceInverted ? Big(1).div(displayed).toString() : displayed + } + + // Round to 5 significant digits for display of calculated amounts + const toSignificant = (value: string, digits = 5) => { + const n = Big(value) + if (n.eq(0)) return "0" + return n.toPrecision(digits) + } + + const recalculateBuyAmount = ( + currentSellAmount: string, + internalLimitPrice: string, + ) => { + if ( + !currentSellAmount || + !internalLimitPrice || + Big(internalLimitPrice).eq(0) + ) { + setValue("buyAmount", "") + return + } + setValue( + "buyAmount", + toSignificant( + Big(currentSellAmount).times(internalLimitPrice).toString(), + ), + ) + } + + // % deviation from spot, symmetric across denomination toggle. + // Computed from internal prices (buyAsset per sellAsset), sign flipped for inverted display. + const pctFromMarket = useMemo(() => { + if (!limitPrice || !spotPriceData?.spotPrice || Big(limitPrice).eq(0)) + return null + const market = Big(spotPriceData.spotPrice) + const limit = Big(limitPrice) + if (market.eq(0)) return null + const internalPct = limit.div(market).minus(1).times(100) + return isPriceInverted ? internalPct.neg() : internalPct + }, [limitPrice, spotPriceData?.spotPrice, isPriceInverted]) + + // Treat as "at market" when Market pill is explicitly selected or deviation is negligible + const isAtMarket = + selectedFactor === 1 || + (pctFromMarket !== null && pctFromMarket.abs().lt(0.01)) + + // Prefill limit price on initial load or asset change + const prevAssetsRef = useRef("") + useEffect(() => { + const assetsKey = `${sellAsset?.id}-${buyAsset?.id}` + const assetsChanged = prevAssetsRef.current !== assetsKey + prevAssetsRef.current = assetsKey + + if (!bestPrice) return + + const currentLimitPrice = getValues("limitPrice") + if (!currentLimitPrice || assetsChanged) { + programmaticPriceRef.current = true + setValue("limitPrice", bestPrice) + setSelectedFactor(1) + const currentSellAmount = getValues("sellAmount") + if (currentSellAmount) { + recalculateBuyAmount(currentSellAmount, bestPrice) + } + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [bestPrice, sellAsset?.id, buyAsset?.id, getValues, setValue]) + + // Keep limit price synced to live quote every block while Best pill is selected + useEffect(() => { + if (selectedFactor !== 1 || !bestPrice) return + + programmaticPriceRef.current = true + setValue("limitPrice", bestPrice) + trigger("limitPrice") + + // Only recalculate buy if the user didn't manually edit it + if (!buyEditedRef.current) { + const currentSellAmount = getValues("sellAmount") + if (currentSellAmount) recalculateBuyAmount(currentSellAmount, bestPrice) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [bestPrice, selectedFactor, setValue, trigger, getValues]) + + // Ensure default assets on mount + useEffect(() => { + const { sellAsset: sa, buyAsset: ba, ...values } = getValues() + + if (!sa || !ba) { + reset({ + ...values, + sellAsset: getAsset(DEFAULT_TRADE_ASSET_IN_ID), + buyAsset: getAsset(DEFAULT_TRADE_ASSET_OUT_ID), + }) + + navigate({ + to: ".", + search: (search) => ({ + ...search, + assetIn: DEFAULT_TRADE_ASSET_IN_ID, + assetOut: DEFAULT_TRADE_ASSET_OUT_ID, + }), + resetScroll: false, + }) + } + }, [getValues, reset, getAsset, navigate]) + + const handleSellAssetChange = ( + newSellAsset: TAsset, + previousSellAsset: TAsset | null, + ): void => { + const { buyAsset: ba } = getValues() + + if (newSellAsset.id !== ba?.id) { + trigger("sellAmount") + navigate({ + to: ".", + search: (search) => ({ + ...search, + assetIn: newSellAsset.id, + assetOut: ba?.id, + }), + resetScroll: false, + }) + } else { + setValue("sellAsset", previousSellAsset) + switchAssets.mutate() + } + } + + const handleBuyAssetChange = ( + newBuyAsset: TAsset, + previousBuyAsset: TAsset | null, + ): void => { + const { sellAsset: sa } = getValues() + + if (newBuyAsset.id !== sa?.id) { + navigate({ + to: ".", + search: (search) => ({ + ...search, + assetIn: sa?.id, + assetOut: newBuyAsset.id, + }), + resetScroll: false, + }) + } else { + setValue("buyAsset", previousBuyAsset) + switchAssets.mutate() + } + } + + const resetLimitToBest = () => { + if (bestPrice) { + programmaticPriceRef.current = true + setValue("limitPrice", bestPrice) + } + setSelectedFactor(1) + } + + const handleSellAmountChange = (newSellAmount: string) => { + buyEditedRef.current = false + if (!newSellAmount) { + setValue("buyAmount", "") + resetLimitToBest() + return + } + recalculateBuyAmount(newSellAmount, getValues("limitPrice")) + } + + const handleBuyAmountChange = (newBuyAmount: string) => { + buyEditedRef.current = true + // Buy edited → recalculate sell (sell = buy / limitPrice), keep limit price fixed + // Buy cleared → clear sell too + if (!newBuyAmount) { + setValue("sellAmount", "") + buyEditedRef.current = false + resetLimitToBest() + return + } + const currentLimitPrice = getValues("limitPrice") + if (currentLimitPrice && !Big(currentLimitPrice).eq(0)) { + setValue( + "sellAmount", + toSignificant(Big(newBuyAmount).div(currentLimitPrice).toString()), + ) + } + } + + const handleLimitPriceChange = (internalLimitPrice: string) => { + recalculateBuyAmount(getValues("sellAmount"), internalLimitPrice) + } + + const handlePriceAdjustment = (factor: number) => { + const marketPrice = spotPriceData?.spotPrice + if (!marketPrice) return + + setSelectedFactor(factor) + programmaticPriceRef.current = true + const adjustedPrice = + factor === 1 + ? (bestPrice ?? + Big(marketPrice) + .times(1 - BEST_PILL_BUFFER) + .toString()) + : isPriceInverted + ? Big(marketPrice).div(factor).toString() + : Big(marketPrice).times(factor).toString() + setValue("limitPrice", adjustedPrice) + trigger("limitPrice") + handleLimitPriceChange(adjustedPrice) + } + + // Custom pill: pct is the displayed % deviation from market (positive = above displayed market) + const handleCustomPctChange = (pct: string) => { + setCustomPct(pct) + const pctNum = parseFloat(pct) + if (isNaN(pctNum) || !spotPriceData?.spotPrice) return + const factor = 1 + pctNum / 100 + if (factor <= 0) return + const marketPrice = spotPriceData.spotPrice + programmaticPriceRef.current = true + const adjustedPrice = isPriceInverted + ? Big(marketPrice).div(factor).toString() + : Big(marketPrice).times(factor).toString() + setValue("limitPrice", adjustedPrice) + trigger("limitPrice") + handleLimitPriceChange(adjustedPrice) + } + + const handleCustomPillClick = () => { + setSelectedFactor(0) + if (pctFromMarket !== null) { + setCustomPct(pctFromMarket.toFixed(2)) + } + } + + const handleDenominationToggle = () => { + denominationChangingRef.current = true + setIsPriceInverted((prev) => !prev) + // Do NOT reset selectedFactor — the internal limitPrice is unchanged, + // only the display direction flips (toDisplayPrice inverts the value). + } + + const handleClear = () => { + buyEditedRef.current = false + setValue("sellAmount", "") + setValue("buyAmount", "") + resetLimitToBest() + } + + const hasClearableAmounts = !!sellAmount || !!buyAmountVal + + return ( + + + assetFieldName="sellAsset" + amountFieldName="sellAmount" + assets={tradable} + label={t("sell")} + maxBalanceFallback="0" + onAssetChange={handleSellAssetChange} + onAmountChange={handleSellAmountChange} + /> + + + assetFieldName="buyAsset" + amountFieldName="buyAmount" + assets={buyableAssets} + label={t("get")} + hideMaxBalanceAction + maxBalanceFallback="0" + onAssetChange={handleBuyAssetChange} + onAmountChange={handleBuyAmountChange} + /> + + {hasClearableAmounts && ( + + + + )} + + + + + + + {displaySymbol} {t("trade:limit.limitPrice.label")} + + + {pctFromMarket !== null ? ( + <> + {pctFromMarket.gt(0) ? "+" : ""} + {pctFromMarket.toFixed(1)}% + + ) : ( + "0.0%" + )} + + + + handlePriceAdjustment(1)} + > + {t("trade:limit.market")} + + {pillAdjustments.map(({ pct, factor }) => ( + handlePriceAdjustment(factor)} + > + + {pct}% + + ))} + + + e.stopPropagation()} + onChange={(e) => { + setSelectedFactor(0) + handleCustomPctChange(e.target.value) + }} + /> + % + + + + ( + { + if (programmaticPriceRef.current) { + programmaticPriceRef.current = false + return + } + if (denominationChangingRef.current) { + denominationChangingRef.current = false + return + } + const internal = toInternalPrice(value) + field.onChange(internal) + setSelectedFactor(0) + handleLimitPriceChange(internal) + }} + leadingElement={ + + + {displaySymbol} + + } + allowNegative={false} + sx={{ textAlign: "right" }} + /> + )} + /> + + + {t("trade:limit.spot")}:{" "} + {spotPriceData?.spotPrice + ? toDisplayPrice(spotPriceData.spotPrice) + : "\u00A0"} + + + + + + {t("trade:limit.expiry.label")} + + + ( + <> + {EXPIRY_OPTIONS.map((option) => ( + field.onChange(option as ExpiryOption)} + > + {t(`trade:limit.expiry.${option}`)} + + ))} + + )} + /> + + + + ) +} diff --git a/apps/main/src/modules/trade/swap/sections/Limit/useLimitForm.ts b/apps/main/src/modules/trade/swap/sections/Limit/useLimitForm.ts new file mode 100644 index 0000000000..bad0419d5e --- /dev/null +++ b/apps/main/src/modules/trade/swap/sections/Limit/useLimitForm.ts @@ -0,0 +1,83 @@ +import { useAccount } from "@galacticcouncil/web3-connect" +import { standardSchemaResolver } from "@hookform/resolvers/standard-schema" +import { useEffect } from "react" +import { useForm } from "react-hook-form" +import * as z from "zod/v4" + +import { TAsset, useAssets } from "@/providers/assetsProvider" +import { useAccountBalances } from "@/states/account" +import { + positiveOptional, + requiredObject, + useValidateFormMaxBalance, + validateAssetSellOnly, +} from "@/utils/validators" + +export const EXPIRY_OPTIONS = ["1h", "12h", "24h", "open"] as const +export type ExpiryOption = (typeof EXPIRY_OPTIONS)[number] + +const schemaBase = z.object({ + sellAsset: requiredObject(), + sellAmount: positiveOptional, + buyAsset: requiredObject().check(validateAssetSellOnly), + buyAmount: positiveOptional, + limitPrice: positiveOptional, + expiry: z.enum(EXPIRY_OPTIONS), +}) + +export type LimitFormValues = z.infer + +const useSchema = () => { + const { account } = useAccount() + const refineMaxBalance = useValidateFormMaxBalance() + + if (!account) { + return schemaBase + } + + return schemaBase.check( + refineMaxBalance("sellAmount", (form) => [form.sellAsset, form.sellAmount]), + ) +} + +type Args = { + readonly assetIn: string + readonly assetOut: string +} + +export const useLimitForm = ({ assetIn, assetOut }: Args) => { + const { account } = useAccount() + const { getAsset } = useAssets() + const { isBalanceLoaded, isBalanceLoading } = useAccountBalances() + + const defaultValues: LimitFormValues = { + sellAsset: getAsset(assetIn) ?? null, + sellAmount: "", + buyAsset: getAsset(assetOut) ?? null, + buyAmount: "", + limitPrice: "", + expiry: "open", + } + + const form = useForm({ + defaultValues, + mode: "onChange", + resolver: standardSchemaResolver(useSchema()), + }) + + const { trigger, getValues } = form + + useEffect(() => { + const { sellAsset } = getValues() + + if (!account || !sellAsset) { + return + } + + if (isBalanceLoaded(sellAsset.id) || !isBalanceLoading) { + trigger("sellAmount") + } + }, [account, isBalanceLoading, trigger, getValues, isBalanceLoaded]) + + return form +} diff --git a/apps/main/src/modules/trade/swap/sections/Limit/useRemoveIntents.ts b/apps/main/src/modules/trade/swap/sections/Limit/useRemoveIntents.ts new file mode 100644 index 0000000000..ba3c258bab --- /dev/null +++ b/apps/main/src/modules/trade/swap/sections/Limit/useRemoveIntents.ts @@ -0,0 +1,60 @@ +import { useAccount } from "@galacticcouncil/web3-connect" +import { useMutation, useQueryClient } from "@tanstack/react-query" +import { useTranslation } from "react-i18next" + +import { AnyTransaction } from "@/modules/transactions/types" +import { useRpcProvider } from "@/providers/rpcProvider" +import { useTransactionsStore } from "@/states/transactions" + +export const useRemoveIntents = () => { + const { t } = useTranslation(["common", "trade"]) + const { papiNext, papiClient } = useRpcProvider() + const { account } = useAccount() + const createTransaction = useTransactionsStore((s) => s.createTransaction) + const queryClient = useQueryClient() + + const queryKey = ["intents", "byAccount", account?.address ?? ""] + + return useMutation({ + onMutate: (intentIds) => { + queryClient.setQueryData( + queryKey, + (prev: Array<{ id: bigint }> | undefined) => + prev?.filter((entry) => !intentIds.includes(entry.id)) ?? [], + ) + }, + onError: () => { + queryClient.invalidateQueries({ queryKey }) + }, + mutationFn: async (intentIds: bigint[]) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const unsafeApi = papiClient.getUnsafeApi() as any + const txs = intentIds.map((id) => + unsafeApi.tx.Intent.remove_intent({ id }), + ) + + const tx = + txs.length === 1 + ? txs[0] + : papiNext.tx.Utility.batch_all({ + calls: txs.map((t) => t.decodedCall), + }) + + return createTransaction( + { + tx: tx as AnyTransaction, + toasts: { + submitted: t("trade:limit.remove.tx.submitted"), + success: t("trade:limit.remove.tx.success"), + error: t("trade:limit.remove.tx.error"), + }, + }, + { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey }) + }, + }, + ) + }, + }) +} diff --git a/apps/main/src/modules/trade/swap/sections/Limit/useSubmitLimitOrder.ts b/apps/main/src/modules/trade/swap/sections/Limit/useSubmitLimitOrder.ts new file mode 100644 index 0000000000..7dee55bf2f --- /dev/null +++ b/apps/main/src/modules/trade/swap/sections/Limit/useSubmitLimitOrder.ts @@ -0,0 +1,94 @@ +import { useAccount } from "@galacticcouncil/web3-connect" +import { useMutation, useQueryClient } from "@tanstack/react-query" +import { useTranslation } from "react-i18next" + +import { LimitFormValues } from "@/modules/trade/swap/sections/Limit/useLimitForm" +import { useRpcProvider } from "@/providers/rpcProvider" +import { useTransactionsStore } from "@/states/transactions" +import { scale } from "@/utils/formatting" + +const EXPIRY_MS: Record = { + "1h": 1 * 60 * 60 * 1000, + "12h": 12 * 60 * 60 * 1000, + "24h": 23 * 60 * 60 * 1000 + 59 * 60 * 1000, // just under runtime's 24h max +} + +export const useSubmitLimitOrder = () => { + const { t } = useTranslation(["common", "trade"]) + const { account } = useAccount() + + const { papiClient } = useRpcProvider() + + const createTransaction = useTransactionsStore((s) => s.createTransaction) + const queryClient = useQueryClient() + + return useMutation({ + mutationFn: async (values: LimitFormValues) => { + const { sellAsset, sellAmount, buyAsset, buyAmount, expiry } = values + + if (!sellAsset || !buyAsset || !account) { + return + } + + const formattedSell = t("currency", { + value: sellAmount, + symbol: sellAsset.symbol, + }) + const formattedBuy = t("currency", { + value: buyAmount, + symbol: buyAsset.symbol, + }) + + const expiryMs = EXPIRY_MS[expiry] + const deadline = + expiryMs !== undefined ? BigInt(Date.now() + expiryMs) : undefined + + // Use unsafe API to bypass descriptor checksum validation + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const unsafeApi = papiClient.getUnsafeApi() as any + const tx = unsafeApi.tx.Intent.submit_intent({ + intent: { + data: { + type: "Swap", + value: { + asset_in: Number(sellAsset.id), + asset_out: Number(buyAsset.id), + amount_in: BigInt(scale(sellAmount || "0", sellAsset.decimals)), + amount_out: BigInt(scale(buyAmount || "0", buyAsset.decimals)), + partial: false, + }, + }, + deadline, + on_resolved: undefined, + }, + }) + + return createTransaction( + { + tx, + toasts: { + submitted: t("trade:limit.tx.submitted", { + amountIn: formattedSell, + amountOut: formattedBuy, + }), + success: t("trade:limit.tx.success", { + amountIn: formattedSell, + amountOut: formattedBuy, + }), + error: t("trade:limit.tx.error", { + amountIn: formattedSell, + amountOut: formattedBuy, + }), + }, + }, + { + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: ["intents", "byAccount", account?.address ?? ""], + }) + }, + }, + ) + }, + }) +} diff --git a/apps/main/src/modules/trade/swap/sections/Limit/useSwitchAssets.ts b/apps/main/src/modules/trade/swap/sections/Limit/useSwitchAssets.ts new file mode 100644 index 0000000000..325cc87c4e --- /dev/null +++ b/apps/main/src/modules/trade/swap/sections/Limit/useSwitchAssets.ts @@ -0,0 +1,35 @@ +import { useMutation } from "@tanstack/react-query" +import { useNavigate } from "@tanstack/react-router" +import { useFormContext } from "react-hook-form" + +import { LimitFormValues } from "@/modules/trade/swap/sections/Limit/useLimitForm" + +export const useSwitchAssets = () => { + const navigate = useNavigate() + const { reset, getValues, trigger } = useFormContext() + + return useMutation({ + mutationFn: async () => { + const values = getValues() + + reset({ + ...values, + buyAsset: values.sellAsset, + sellAsset: values.buyAsset, + limitPrice: "", + }) + + trigger() + + navigate({ + to: ".", + search: (search) => ({ + ...search, + assetIn: values.buyAsset?.id, + assetOut: values.sellAsset?.id, + }), + resetScroll: false, + }) + }, + }) +} diff --git a/apps/main/src/modules/transactions/hooks/usePolkadotJSExtrinsicUrl.ts b/apps/main/src/modules/transactions/hooks/usePolkadotJSExtrinsicUrl.ts index 7964327eb9..5726e74dd2 100644 --- a/apps/main/src/modules/transactions/hooks/usePolkadotJSExtrinsicUrl.ts +++ b/apps/main/src/modules/transactions/hooks/usePolkadotJSExtrinsicUrl.ts @@ -11,10 +11,15 @@ export const usePolkadotJSExtrinsicUrl = ( tx: AnyTransaction, srcChainKey: string = HYDRATION_CHAIN_KEY, ): string => { - const { papiCompatibilityToken } = useRpcProvider() + const { papiCompatibilityToken, papiNextCompatibilityToken } = + useRpcProvider() const { rpcUrl } = useProviderRpcUrlStore() - const callData = getPapiTransactionCallData(tx, papiCompatibilityToken) + const callData = getPapiTransactionCallData( + tx, + papiCompatibilityToken, + papiNextCompatibilityToken, + ) if (!callData) return "" diff --git a/apps/main/src/modules/transactions/review/ReviewTransactionJsonView/ReviewTransactionJsonView.tsx b/apps/main/src/modules/transactions/review/ReviewTransactionJsonView/ReviewTransactionJsonView.tsx index aca94fc4df..6bc26c28b1 100644 --- a/apps/main/src/modules/transactions/review/ReviewTransactionJsonView/ReviewTransactionJsonView.tsx +++ b/apps/main/src/modules/transactions/review/ReviewTransactionJsonView/ReviewTransactionJsonView.tsx @@ -41,10 +41,15 @@ const ReviewTransactionJsonContent: React.FC< Omit > = ({ tx, srcChainKey }) => { const { t } = useTranslation("common") - const { papiCompatibilityToken } = useRpcProvider() + const { papiCompatibilityToken, papiNextCompatibilityToken } = + useRpcProvider() const txJson = decodeTx(tx) - const txCallHash = getTxCallHash(tx, papiCompatibilityToken) + const txCallHash = getTxCallHash( + tx, + papiCompatibilityToken, + papiNextCompatibilityToken, + ) const txUrl = usePolkadotJSExtrinsicUrl(tx, srcChainKey) const isValidTxCallHash = !!txCallHash diff --git a/apps/main/src/modules/transactions/review/ReviewTransactionJsonView/ReviewTransactionJsonView.utils.ts b/apps/main/src/modules/transactions/review/ReviewTransactionJsonView/ReviewTransactionJsonView.utils.ts index 041e9e051f..dd85780b64 100644 --- a/apps/main/src/modules/transactions/review/ReviewTransactionJsonView/ReviewTransactionJsonView.utils.ts +++ b/apps/main/src/modules/transactions/review/ReviewTransactionJsonView/ReviewTransactionJsonView.utils.ts @@ -81,10 +81,10 @@ export const decodeTx = (tx: AnyTransaction): object | JsonValue => { export const getTxCallHash = ( tx: AnyTransaction, - papiCompatibilityToken: CompatibilityToken, + ...compatibilityTokens: CompatibilityToken[] ): string => { if (isPapiTransaction(tx)) { - return getPapiTransactionCallData(tx, papiCompatibilityToken) + return getPapiTransactionCallData(tx, ...compatibilityTokens) } if (isEvmCall(tx) || isSolanaCall(tx) || isSuiCall(tx)) { diff --git a/apps/main/src/modules/transactions/utils/tx.ts b/apps/main/src/modules/transactions/utils/tx.ts index d212a93b62..dc7ca1bc2b 100644 --- a/apps/main/src/modules/transactions/utils/tx.ts +++ b/apps/main/src/modules/transactions/utils/tx.ts @@ -123,16 +123,19 @@ export const isValidPapiTxForPermit = ( export const getPapiTransactionCallData = ( tx: AnyTransaction, - papiCompatibilityToken: CompatibilityToken, + ...compatibilityTokens: CompatibilityToken[] ): string => { if (!isPapiTransaction(tx)) return "" - try { - const binary = tx.getEncodedData(papiCompatibilityToken) - return isBinary(binary) ? binary.asHex() : "" - } catch { - return "" + for (const token of compatibilityTokens) { + try { + const binary = tx.getEncodedData(token) + if (isBinary(binary)) return binary.asHex() + } catch { + // try next token + } } + return "" } export const getExtraTxFeeByWeight = async ( diff --git a/apps/main/src/modules/wallet/multichain/WalletMultichainPage.tsx b/apps/main/src/modules/wallet/multichain/WalletMultichainPage.tsx new file mode 100644 index 0000000000..e8ecc84bdb --- /dev/null +++ b/apps/main/src/modules/wallet/multichain/WalletMultichainPage.tsx @@ -0,0 +1,40 @@ +import { Flex, Modal } from "@galacticcouncil/ui/components" +import { useAccount } from "@galacticcouncil/web3-connect" +import { useSearch } from "@tanstack/react-router" +import { useState } from "react" + +import { MultichainAssetList } from "@/modules/wallet/multichain/components/MultichainAssetList" +import { MultichainChainTabs } from "@/modules/wallet/multichain/components/MultichainChainTabs" +import { WalletEmptyState } from "@/modules/wallet/WalletEmptyState" +import { XcmQueryParams } from "@/modules/xcm/transfer/utils/query" +import { XcmTransferApp } from "@/modules/xcm/transfer/XcmTransferApp" + +export const WalletMultichainPage = () => { + const { account } = useAccount() + const { chain } = useSearch({ from: "/wallet/multichain" }) + const [xcmParams, setXcmParams] = useState(null) + + if (!account) { + return + } + + return ( + <> + + + + + setXcmParams(null)} + > + {xcmParams && } + + + ) +} diff --git a/apps/main/src/modules/wallet/multichain/components/MultichainAssetList.tsx b/apps/main/src/modules/wallet/multichain/components/MultichainAssetList.tsx new file mode 100644 index 0000000000..277bb6dcab --- /dev/null +++ b/apps/main/src/modules/wallet/multichain/components/MultichainAssetList.tsx @@ -0,0 +1,67 @@ +import { + DataTable, + Flex, + Paper, + TableContainer, + Text, +} from "@galacticcouncil/ui/components" +import { Account } from "@galacticcouncil/web3-connect" +import { ChainEcosystem } from "@galacticcouncil/xc-core" +import { useMemo } from "react" +import { useTranslation } from "react-i18next" + +import { useMultichainColumns } from "@/modules/wallet/multichain/components/MultichainTable.columns" +import { useMultichainAssets } from "@/modules/wallet/multichain/useMultichainAssets" +import { XcmQueryParams } from "@/modules/xcm/transfer/utils/query" +import { MultichainChainKey } from "@/routes/wallet/multichain" + +type Props = { + chainKey: MultichainChainKey + account: Account + onTransfer: (params: XcmQueryParams) => void +} + +const CHAIN_ECOSYSTEMS: Record = { + ethereum: ChainEcosystem.Ethereum, + base: ChainEcosystem.Ethereum, + solana: ChainEcosystem.Solana, + sui: ChainEcosystem.Sui, +} + +export const MultichainAssetList = ({ + chainKey, + account, + onTransfer, +}: Props) => { + const { t } = useTranslation(["wallet"]) + const { rows, isLoading, isPriceLoading } = useMultichainAssets( + chainKey, + account, + ) + + const ecosystem = CHAIN_ECOSYSTEMS[chainKey] + + const tableData = useMemo( + () => rows.map((row) => ({ ...row, ecosystem, isPriceLoading })), + [rows, ecosystem, isPriceLoading], + ) + + const columns = useMultichainColumns(chainKey, onTransfer) + + return ( + + + + {t("multichain.noAssets")} + + + } + /> + + ) +} diff --git a/apps/main/src/modules/wallet/multichain/components/MultichainChainTabs.tsx b/apps/main/src/modules/wallet/multichain/components/MultichainChainTabs.tsx new file mode 100644 index 0000000000..9ab6d1709a --- /dev/null +++ b/apps/main/src/modules/wallet/multichain/components/MultichainChainTabs.tsx @@ -0,0 +1,93 @@ +import { Button, Flex, Text } from "@galacticcouncil/ui/components" +import { getChainId } from "@galacticcouncil/utils" +import { chainsMap } from "@galacticcouncil/xc-cfg" +import { ChainEcosystem } from "@galacticcouncil/xc-core" +import { Link, useLocation } from "@tanstack/react-router" + +import { ChainLogo } from "@/components/ChainLogo" +import { TabItem, TabMenu } from "@/components/TabMenu" +import { + MULTICHAIN_CHAINS, + MultichainChainKey, +} from "@/routes/wallet/multichain" + +type ChainTabConfig = { + key: MultichainChainKey + name: string + chainId: string | number + ecosystem: ChainEcosystem +} + +const CHAIN_TABS: ChainTabConfig[] = MULTICHAIN_CHAINS.map((key) => { + const chain = chainsMap.get(key)! + return { + key, + name: chain.name, + chainId: getChainId(chain), + ecosystem: chain.ecosystem ?? ChainEcosystem.Polkadot, + } +}) + +const tabItems: TabItem[] = CHAIN_TABS.map((chain) => ({ + to: "/wallet/multichain", + title: chain.name, + search: { chain: chain.key }, + resetScroll: false, +})) + +type ChainTabItemProps = { + item: TabItem + chain: ChainTabConfig +} + +const ChainTabItem = ({ item, chain }: ChainTabItemProps) => { + const currentSearch = useLocation({ select: (s) => s.search }) + const path = useLocation({ select: (s) => s.href }) + + const isActive = + path.startsWith(item.to) && + Object.entries(item.search ?? {}).every( + ([key, value]) => + currentSearch[key as keyof typeof currentSearch] === value, + ) + + return ( + + ) +} + +export const MultichainChainTabs = () => { + return ( + { + const chain = CHAIN_TABS.find((c) => c.name === item.title) + if (!chain) return null + return + }} + /> + ) +} diff --git a/apps/main/src/modules/wallet/multichain/components/MultichainTable.columns.tsx b/apps/main/src/modules/wallet/multichain/components/MultichainTable.columns.tsx new file mode 100644 index 0000000000..57067f0c40 --- /dev/null +++ b/apps/main/src/modules/wallet/multichain/components/MultichainTable.columns.tsx @@ -0,0 +1,103 @@ +import { + Amount, + AssetLabel, + Flex, + Skeleton, + TableRowAction, +} from "@galacticcouncil/ui/components" +import { HYDRATION_CHAIN_KEY } from "@galacticcouncil/utils" +import { ChainEcosystem } from "@galacticcouncil/xc-core" +import { createColumnHelper } from "@tanstack/react-table" +import { useMemo } from "react" +import { useTranslation } from "react-i18next" + +import { ExternalAssetLogo } from "@/components/ExternalAssetLogo" +import { MultichainAssetRow } from "@/modules/wallet/multichain/useMultichainAssets" +import { XcmQueryParams } from "@/modules/xcm/transfer/utils/query" +import { MultichainChainKey } from "@/routes/wallet/multichain" + +type MultichainTableRow = MultichainAssetRow & { + ecosystem: ChainEcosystem + isPriceLoading: boolean +} + +const columnHelper = createColumnHelper() + +export const useMultichainColumns = ( + chainKey: MultichainChainKey, + onTransfer: (params: XcmQueryParams) => void, +) => { + const { t } = useTranslation(["wallet", "common"]) + + return useMemo( + () => [ + columnHelper.accessor("originSymbol", { + id: "asset", + header: t("common:asset"), + cell: ({ row }) => ( + + + + + ), + }), + columnHelper.accessor("amount", { + id: "balance", + header: t("common:balance"), + meta: { sx: { textAlign: "right" } }, + cell: ({ row }) => { + if (row.original.isPriceLoading && row.original.usdValue === 0) { + return ( + + + + + ) + } + + return ( + 0 + ? t("common:currency", { + value: row.original.usdValue.toFixed(2), + }) + : undefined + } + /> + ) + }, + }), + columnHelper.display({ + id: "actions", + header: t("common:actions"), + meta: { sx: { textAlign: "right" } }, + cell: ({ row }) => ( + + + onTransfer({ + srcChain: chainKey, + srcAsset: row.original.key, + destChain: HYDRATION_CHAIN_KEY, + destAsset: row.original.key, + }) + } + > + {t("multichain.transfer")} + + + ), + }), + ], + [chainKey, onTransfer, t], + ) +} diff --git a/apps/main/src/modules/wallet/multichain/useMultichainAssets.ts b/apps/main/src/modules/wallet/multichain/useMultichainAssets.ts new file mode 100644 index 0000000000..ac6464bcd4 --- /dev/null +++ b/apps/main/src/modules/wallet/multichain/useMultichainAssets.ts @@ -0,0 +1,138 @@ +import { HYDRATION_CHAIN_KEY } from "@galacticcouncil/utils" +import { formatSourceChainAddress } from "@galacticcouncil/utils" +import { getChainAssetId, getChainId } from "@galacticcouncil/utils" +import { Account } from "@galacticcouncil/web3-connect" +import { chainsMap } from "@galacticcouncil/xc-cfg" +import { EvmParachain } from "@galacticcouncil/xc-core" +import Big from "big.js" +import { useMemo } from "react" + +import { + useCrossChainBalance, + useCrossChainBalanceSubscription, +} from "@/api/xcm" +import { MultichainChainKey } from "@/routes/wallet/multichain" +import { useAssetsPrice } from "@/states/displayAsset" +import { toDecimal } from "@/utils/formatting" + +export type MultichainAssetRow = { + key: string + originSymbol: string + chainAssetId: string + chainId: string + amount: string + usdValue: number + spotPriceIds: string[] +} + +const registryChain = chainsMap.get(HYDRATION_CHAIN_KEY) as EvmParachain + +// All Hydration assets indexed by originSymbol for quick same-symbol lookup +const hydrationAssetsBySymbol = registryChain + ? [...registryChain.assetsData.values()].reduce>( + (acc, d) => { + const sym = d.asset.originSymbol + if (!acc[sym]) acc[sym] = [] + if (d.id !== undefined) acc[sym].push(d.id.toString()) + return acc + }, + {}, + ) + : {} + +const resolveUsdValue = ( + spotPriceIds: string[], + amount: string, + getAssetPrice: (id: string) => { price: string; isValid: boolean }, +): number => { + for (const id of spotPriceIds) { + const { price, isValid } = getAssetPrice(id) + if (isValid && price) { + try { + return Big(amount).mul(price).toNumber() + } catch { + // try next id + } + } + } + return 0 +} + +export const useMultichainAssets = ( + chainKey: MultichainChainKey, + account: Account, +) => { + const chain = chainsMap.get(chainKey) + + const xcmAssets = useMemo( + () => (chain ? [...chain.assetsData.values()].map((d) => d.asset) : []), + [chain], + ) + + const address = chain + ? formatSourceChainAddress(account.address, chain) + : account.address + + const { isLoading, isError } = useCrossChainBalanceSubscription( + address, + chainKey, + ) + const { data: balances } = useCrossChainBalance(address, chainKey) + + // Collect all candidate price IDs up front for a single batch subscription + const allSpotPriceIds = useMemo(() => { + return [ + ...new Set( + xcmAssets.flatMap((asset) => { + const primaryId = registryChain?.getBalanceAssetId(asset)?.toString() + const sameSymbolIds = + hydrationAssetsBySymbol[asset.originSymbol] ?? [] + return [primaryId, ...sameSymbolIds].filter(Boolean) as string[] + }), + ), + ] + }, [xcmAssets]) + + // One batch price subscription for all assets on this chain + const { getAssetPrice, isLoading: isPriceLoading } = + useAssetsPrice(allSpotPriceIds) + + const rows = useMemo(() => { + if (!chain || !balances) return [] + + return xcmAssets + .map((asset) => { + const balance = balances.get(asset.key) + if (!balance) return null + + const amount = toDecimal(balance.amount, balance.decimals) + + // Primary Hydration ID + same-symbol fallbacks (e.g. sUSDS: 1000626 → 1000745) + const primaryId = registryChain?.getBalanceAssetId(asset)?.toString() + const sameSymbolIds = hydrationAssetsBySymbol[asset.originSymbol] ?? [] + const spotPriceIds = [ + ...new Set([primaryId, ...sameSymbolIds].filter(Boolean) as string[]), + ] + + const usdValue = resolveUsdValue(spotPriceIds, amount, getAssetPrice) + + return { + key: asset.key, + originSymbol: asset.originSymbol, + chainAssetId: getChainAssetId(chain, asset).toString(), + chainId: getChainId(chain) ?? "", + amount, + usdValue, + spotPriceIds, + } + }) + .filter((row): row is MultichainAssetRow => row !== null) + .sort((a, b) => { + // Sort by USD value desc; fall back to token amount for unpriced assets + if (a.usdValue !== b.usdValue) return b.usdValue - a.usdValue + return Big(b.amount).minus(Big(a.amount)).toNumber() + }) + }, [xcmAssets, balances, chain, getAssetPrice]) + + return { rows, isLoading, isPriceLoading, isError, address, chain } +} diff --git a/apps/main/src/modules/xcm/history/utils/optimistic.ts b/apps/main/src/modules/xcm/history/utils/optimistic.ts index 6ba2fa53d5..fc45273a30 100644 --- a/apps/main/src/modules/xcm/history/utils/optimistic.ts +++ b/apps/main/src/modules/xcm/history/utils/optimistic.ts @@ -64,9 +64,12 @@ export function convertXcmFormValuesToOptimisticJourney( toFormatted: destAddress, sentAt: now, createdAt: now, - stops: "", - instructions: "", - transactCalls: "", + // eslint-disable-next-line @typescript-eslint/no-explicit-any + stops: [] as any, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + instructions: "" as any, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + transactCalls: "" as any, originTxPrimary: txHash, totalUsd: 0, assets: [ diff --git a/apps/main/src/modules/xcm/transfer/XcmProvider.tsx b/apps/main/src/modules/xcm/transfer/XcmProvider.tsx index cd956317a8..e6bf8ce01d 100644 --- a/apps/main/src/modules/xcm/transfer/XcmProvider.tsx +++ b/apps/main/src/modules/xcm/transfer/XcmProvider.tsx @@ -26,6 +26,7 @@ import { isAccountValidOnChain, XCM_CHAINS, } from "@/modules/xcm/transfer/utils/chain" +import { XcmQueryParams } from "@/modules/xcm/transfer/utils/query" import { calculateTransferDestAmount, getTransferStatus, @@ -33,14 +34,18 @@ import { type XcmProviderProps = { children: React.ReactNode + initialSearch?: XcmQueryParams } -export const XcmProvider: React.FC = ({ children }) => { +export const XcmProvider: React.FC = ({ + children, + initialSearch, +}) => { const { account } = useAccount() const queryClient = useQueryClient() const [transfer, setTransfer] = useState(null) - const form = useXcmForm(transfer) + const form = useXcmForm(transfer, initialSearch) const configService = useCrossChainConfigService() diff --git a/apps/main/src/modules/xcm/transfer/XcmTransferApp.tsx b/apps/main/src/modules/xcm/transfer/XcmTransferApp.tsx index 060b1f84e4..2dd19e3b5c 100644 --- a/apps/main/src/modules/xcm/transfer/XcmTransferApp.tsx +++ b/apps/main/src/modules/xcm/transfer/XcmTransferApp.tsx @@ -1,9 +1,14 @@ +import { XcmQueryParams } from "@/modules/xcm/transfer/utils/query" import { XcmForm } from "@/modules/xcm/transfer/XcmForm" import { XcmProvider } from "@/modules/xcm/transfer/XcmProvider" -export const XcmTransferApp = () => { +type XcmTransferAppProps = { + initialSearch?: XcmQueryParams +} + +export const XcmTransferApp = ({ initialSearch }: XcmTransferAppProps) => { return ( - + ) diff --git a/apps/main/src/modules/xcm/transfer/hooks/useXcmForm.ts b/apps/main/src/modules/xcm/transfer/hooks/useXcmForm.ts index bb2a35c46e..b46d09f949 100644 --- a/apps/main/src/modules/xcm/transfer/hooks/useXcmForm.ts +++ b/apps/main/src/modules/xcm/transfer/hooks/useXcmForm.ts @@ -7,11 +7,16 @@ import { useForm } from "react-hook-form" import { useXcmFormSchema } from "@/modules/xcm/transfer/hooks/useXcmFormSchema" import { useXcmQueryParams } from "@/modules/xcm/transfer/hooks/useXcmQueryParams" import { getXcmFormDefaults } from "@/modules/xcm/transfer/utils/chain" +import { XcmQueryParams } from "@/modules/xcm/transfer/utils/query" -export const useXcmForm = (transfer: Transfer | null) => { +export const useXcmForm = ( + transfer: Transfer | null, + initialSearch?: XcmQueryParams, +) => { const { account } = useAccount() - const { parsedQueryParams, updateQueryParams } = useXcmQueryParams() + const { parsedQueryParams, updateQueryParams } = + useXcmQueryParams(initialSearch) const defaults = { ...getXcmFormDefaults(account), ...parsedQueryParams, diff --git a/apps/main/src/modules/xcm/transfer/hooks/useXcmQueryParams.ts b/apps/main/src/modules/xcm/transfer/hooks/useXcmQueryParams.ts index 75d728bff2..0c5c993a40 100644 --- a/apps/main/src/modules/xcm/transfer/hooks/useXcmQueryParams.ts +++ b/apps/main/src/modules/xcm/transfer/hooks/useXcmQueryParams.ts @@ -43,7 +43,7 @@ const parseQueryParams = (params: XcmQueryParams): ParsedXcmQueryParams => { } } -export const useXcmQueryParams = () => { +export const useXcmQueryParams = (override?: XcmQueryParams) => { const navigate = useNavigate() const searchParams = useSearch({ @@ -51,13 +51,14 @@ export const useXcmQueryParams = () => { shouldThrow: false, }) - const parsedQueryParams = useMemo( - () => (searchParams ? parseQueryParams(searchParams) : undefined), - [searchParams], - ) + const parsedQueryParams = useMemo(() => { + if (override) return parseQueryParams(override) + return searchParams ? parseQueryParams(searchParams) : undefined + }, [override, searchParams]) const updateQueryParams = useCallback( (values: XcmQueryParams) => { + if (override) return navigate({ to: ".", search: values, @@ -65,7 +66,7 @@ export const useXcmQueryParams = () => { replace: true, }) }, - [navigate], + [navigate, override], ) return { diff --git a/apps/main/src/providers/rpcProvider.tsx b/apps/main/src/providers/rpcProvider.tsx index 4ce1186853..3e9c6d9f87 100644 --- a/apps/main/src/providers/rpcProvider.tsx +++ b/apps/main/src/providers/rpcProvider.tsx @@ -45,6 +45,7 @@ const defaultData: TProviderContext = { papiNext: {} as TProviderData["papiNext"], isNext: false, papiCompatibilityToken: {} as TProviderData["papiCompatibilityToken"], + papiNextCompatibilityToken: {} as TProviderData["papiNextCompatibilityToken"], sdk: {} as TProviderData["sdk"], papiClient: {} as TProviderData["papiClient"], evm: {} as TProviderData["evm"], diff --git a/apps/main/src/routes/trade/_history/swap.limit.tsx b/apps/main/src/routes/trade/_history/swap.limit.tsx new file mode 100644 index 0000000000..154edd2146 --- /dev/null +++ b/apps/main/src/routes/trade/_history/swap.limit.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from "@tanstack/react-router" + +import { Limit } from "@/modules/trade/swap/sections/Limit/Limit" +import { SwapPageSkeleton } from "@/modules/trade/swap/SwapPageSkeleton" + +export const Route = createFileRoute("/trade/_history/swap/limit")({ + component: Limit, + pendingComponent: SwapPageSkeleton, +}) diff --git a/apps/main/src/routes/wallet/multichain.tsx b/apps/main/src/routes/wallet/multichain.tsx new file mode 100644 index 0000000000..71d2dc90b2 --- /dev/null +++ b/apps/main/src/routes/wallet/multichain.tsx @@ -0,0 +1,24 @@ +import { createFileRoute } from "@tanstack/react-router" +import * as z from "zod/v4" + +import { getPageMeta } from "@/config/navigation" +import { WalletMultichainPage } from "@/modules/wallet/multichain/WalletMultichainPage" + +export const MULTICHAIN_CHAINS = ["ethereum", "base", "solana", "sui"] as const +export type MultichainChainKey = (typeof MULTICHAIN_CHAINS)[number] + +const searchSchema = z.object({ + chain: z.enum(MULTICHAIN_CHAINS).default("ethereum"), +}) + +export const Route = createFileRoute("/wallet/multichain")({ + component: WalletMultichainPage, + validateSearch: searchSchema, + head: ({ + match: { + context: { i18n }, + }, + }) => ({ + meta: getPageMeta("wallet", i18n.t), + }), +}) diff --git a/apps/main/src/states/account.ts b/apps/main/src/states/account.ts index dfdee96c21..e0da69cc98 100644 --- a/apps/main/src/states/account.ts +++ b/apps/main/src/states/account.ts @@ -104,11 +104,7 @@ const createAccountsBalances: StateCreator< set((state) => produce(state, (draft) => { balances.forEach((balance) => { - if (balance.total > 0n) { - draft.balances[balance.assetId] = balance - } else { - delete draft.balances[balance.assetId] - } + draft.balances[balance.assetId] = balance }) }), ), diff --git a/packages/ui/src/components/TradingViewChart/TradingViewChart.tsx b/packages/ui/src/components/TradingViewChart/TradingViewChart.tsx index 73211c7138..0cb5946056 100644 --- a/packages/ui/src/components/TradingViewChart/TradingViewChart.tsx +++ b/packages/ui/src/components/TradingViewChart/TradingViewChart.tsx @@ -2,6 +2,7 @@ import { hexToRgba } from "@galacticcouncil/utils" import { createChart, IChartApi, + LineStyle, LineType, SeriesType, } from "lightweight-charts" @@ -16,6 +17,7 @@ import { import { Box } from "@/components" import { Crosshair } from "@/components/TradingViewChart/components/Crosshair" import { PriceIndicator } from "@/components/TradingViewChart/components/PriceIndicator" +import { PriceMarkers } from "@/components/TradingViewChart/components/PriceMarkers" import { crosshair, grid, @@ -53,6 +55,8 @@ export type TradingViewChartProps = ChartTypeProps & { data: Array height?: number hidePriceIndicator?: boolean + priceLines?: Array + priceLinesLabel?: string } export const TradingViewChart: React.FC = ({ @@ -61,6 +65,8 @@ export const TradingViewChart: React.FC = ({ type = "Baseline", height = 400, hidePriceIndicator, + priceLines, + priceLinesLabel, onCrosshairMove, }) => { const chartContainerRef = useRef(null) @@ -68,6 +74,11 @@ export const TradingViewChart: React.FC = ({ const priceIndicatorRef = useRef(null) const chartRef = useRef(null) + const [seriesState, setSeriesState] = useState< + ReturnType[0] | null + >(null) + const [chartState, setChartState] = useState(null) + useImperativeHandle(ref, () => ({ resetZoom: () => { chartRef.current = null @@ -130,6 +141,20 @@ export const TradingViewChart: React.FC = ({ chart.timeScale().fitContent() + priceLines?.forEach((price) => { + series.createPriceLine({ + price, + color: themeProps.details.values.positive, + lineWidth: 1, + lineStyle: LineStyle.Dashed, + axisLabelVisible: false, + title: "", + }) + }) + + setSeriesState(series) + setChartState(chart) + const previousVisibleRange = chartRef.current?.timeScale().getVisibleRange() if (previousVisibleRange) { @@ -157,8 +182,19 @@ export const TradingViewChart: React.FC = ({ return () => { chart.remove() + setSeriesState(null) + setChartState(null) } - }, [data, height, themeProps, type, hidePriceIndicator, uiScale, isMobile]) + }, [ + data, + height, + themeProps, + type, + hidePriceIndicator, + uiScale, + isMobile, + priceLines, + ]) return ( = ({
{!hidePriceIndicator && } + {priceLines?.length && seriesState && chartState && ( + + )} ) } diff --git a/packages/ui/src/components/TradingViewChart/components/PriceMarkers.styled.ts b/packages/ui/src/components/TradingViewChart/components/PriceMarkers.styled.ts index bab9b734ad..d6e98fe742 100644 --- a/packages/ui/src/components/TradingViewChart/components/PriceMarkers.styled.ts +++ b/packages/ui/src/components/TradingViewChart/components/PriceMarkers.styled.ts @@ -5,38 +5,43 @@ export const SPriceMarkerLine = styled.div( position: absolute; left: 0; right: 0; - height: 1px; border-top: 1px dashed ${theme.text.high}; - pointer-events: none; z-index: 1; `, ) -export const SPriceMarkerTag = styled.div( - ({ theme }) => css` +export const SPriceMarkerAnchor = styled.div( + () => css` position: absolute; - right: 0; + left: 0; transform: translateY(-50%); + z-index: 2; + `, +) - padding: 4px 8px; - border-radius: 4px; - border: none; - font-size: 12px; +export const SPriceMarkerTag = styled.div( + ({ theme }) => css` + display: flex; + align-items: center; + gap: 6px; + padding: 3px 8px; + border-radius: 999px; + font-size: 11px; font-weight: 600; white-space: nowrap; - - background-color: transparent; - color: ${theme.text.high}; - transition: all 0.2s ease; - + background-color: ${theme.details.values.positive}; + color: ${theme.text.contrast}; cursor: pointer; - z-index: 2; + + span + span { + padding-left: 6px; + border-left: 1px solid ${theme.text.contrast}40; + } :hover { - background-color: ${theme.text.high}; - color: ${theme.text.contrast}; + opacity: 0.85; } `, ) diff --git a/packages/ui/src/components/TradingViewChart/components/PriceMarkers.tsx b/packages/ui/src/components/TradingViewChart/components/PriceMarkers.tsx index c414383cfc..4870ac958a 100644 --- a/packages/ui/src/components/TradingViewChart/components/PriceMarkers.tsx +++ b/packages/ui/src/components/TradingViewChart/components/PriceMarkers.tsx @@ -1,8 +1,10 @@ import { formatNumber } from "@galacticcouncil/utils" +import { IChartApi } from "lightweight-charts" import { FC, useEffect, useState } from "react" import { Box } from "@/components" import { + SPriceMarkerAnchor, SPriceMarkerLine, SPriceMarkerTag, } from "@/components/TradingViewChart/components/PriceMarkers.styled" @@ -11,11 +13,15 @@ import { TradingViewChartSeries } from "@/components/TradingViewChart/utils" type PriceMarkersProps = { priceLines: Array seriesApi: TradingViewChartSeries + chartApi: IChartApi + label?: string } export const PriceMarkers: FC = ({ priceLines, seriesApi, + chartApi, + label, }) => { const [hoveredIndex, setHoveredIndex] = useState(null) const [positions, setPositions] = useState< @@ -44,29 +50,31 @@ export const PriceMarkers: FC = ({ const timeout = setTimeout(updatePositions, 100) + chartApi.timeScale().subscribeVisibleLogicalRangeChange(updatePositions) + return () => { clearTimeout(timeout) + chartApi.timeScale().unsubscribeVisibleLogicalRangeChange(updatePositions) } - }, [priceLines, seriesApi]) + }, [priceLines, seriesApi, chartApi]) return ( <> {positions.map((pos, index) => ( {hoveredIndex === index && ( - + )} - setHoveredIndex(index)} onMouseLeave={() => setHoveredIndex(null)} > - {formatNumber(pos.price)} - + + {label && {label}} + {formatNumber(pos.price)} + + ))} diff --git a/yarn.lock b/yarn.lock index 783f429bee..64eb4d1265 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32,6 +32,16 @@ resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.2.tgz#c836b1bd81e6d62cd6cdf3ee4948bcdce8ea79c8" integrity sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A== +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + "@adraffy/ens-normalize@^1.10.1": version "1.11.0" resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" @@ -2702,6 +2712,39 @@ dependencies: "@standard-schema/utils" "^0.3.0" +"@hpke/chacha20poly1305@^1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@hpke/chacha20poly1305/-/chacha20poly1305-1.7.1.tgz#645160fc32b377969bf01e9de8108eeb1ceef73e" + integrity sha512-Zp8IwRIkdCucu877wCNqDp3B8yOhAnAah/YDDkO94pPr/KKV7IGnBbpwIjDB3BsAySWBMrhhdE0JKYw3N4FCag== + dependencies: + "@hpke/common" "^1.8.1" + +"@hpke/common@^1.8.1", "@hpke/common@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@hpke/common/-/common-1.9.0.tgz#7a38fb956cc3303acbe35d9baa8ff88758b1f2d2" + integrity sha512-Sdxj4KqtmBt8FiwRkNLxXF+peqLR3FwVxtnsemiiEzClgslckRpFv3yK8mchoCwvyRwLOMS3Y2Z9ND2bq3sRVg== + +"@hpke/core@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@hpke/core/-/core-1.8.0.tgz#d92bac47db59a9e43b1bd4c72470b6b656cfea6c" + integrity sha512-yHuo+2q4HSPUFuxcg87Kiy7QZRk4IeR+cwBB0qW8fHnr71bnRCArM39Cq1bWHBt75gTyeERGD/v1H14yPB2wyw== + dependencies: + "@hpke/common" "^1.9.0" + +"@hpke/dhkem-x25519@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@hpke/dhkem-x25519/-/dhkem-x25519-1.7.0.tgz#f69b589b9ddd52aaf4d3f83b07693f0fb435b020" + integrity sha512-mgqkCUj82jBoKSa55VG/QAih4d5npalRd3uu/U/t3PvvrSbrYjDnok6PDxFwRPh+9aUNRX0tBtxupqtAiT+P1A== + dependencies: + "@hpke/common" "^1.9.0" + +"@hpke/dhkem-x448@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@hpke/dhkem-x448/-/dhkem-x448-1.7.0.tgz#ed6f5170d1f2be6df88503e348c14a247f32b9db" + integrity sha512-12Qik0A5srTp5D2RbwYorF4OyJePN2Ccej8pM45VbZampZdM6qFmZ2I3vWjUaOcN4L+CgP8U2uzq1g1dpc5MBw== + dependencies: + "@hpke/common" "^1.9.0" + "@humanwhocodes/config-array@^0.11.14": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" @@ -2849,6 +2892,11 @@ dependencies: "@types/mdx" "^2.0.0" +"@msgpack/msgpack@3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@msgpack/msgpack/-/msgpack-3.1.3.tgz#c4bff2b9539faf0882f3ee03537a7e9a4b3a7864" + integrity sha512-47XIizs9XZXvuJgoaJUIE2lFoID8ugvc0jzSHP+Ptfk8nTbnR8g788wv48N03Kx0UkAv559HWRQ3yzOgzlRNUA== + "@mysten/bcs@1.9.2": version "1.9.2" resolved "https://registry.yarnpkg.com/@mysten/bcs/-/bcs-1.9.2.tgz#3bf0e30f14595c9d9e5c142e94b5646ac1318da7" @@ -2898,11 +2946,25 @@ resolved "https://registry.yarnpkg.com/@neoconfetti/react/-/react-1.0.0.tgz#9a619d980a2285a829b1f8c78ca6484f0364a370" integrity sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A== -"@noble/ciphers@^1.3.0": +"@noble/ciphers@1.3.0", "@noble/ciphers@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc" integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw== +"@noble/curves@1.2.0", "@noble/curves@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.0.tgz#fe035a23959e6aeadf695851b51a87465b5ba8f7" + integrity sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ== + dependencies: + "@noble/hashes" "1.7.0" + "@noble/curves@1.8.2", "@noble/curves@~1.8.1": version "1.8.2" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.2.tgz#8f24c037795e22b90ae29e222a856294c1d9ffc7" @@ -2910,6 +2972,13 @@ dependencies: "@noble/hashes" "1.7.2" +"@noble/curves@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.0.tgz#13e0ca8be4a0ce66c113693a94514e5599f40cfc" + integrity sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg== + dependencies: + "@noble/hashes" "1.8.0" + "@noble/curves@1.9.1", "@noble/curves@^1.4.0", "@noble/curves@^1.4.2", "@noble/curves@^1.6.0", "@noble/curves@~1.9.0": version "1.9.1" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.1.tgz#9654a0bc6c13420ae252ddcf975eaf0f58f0a35c" @@ -2917,6 +2986,13 @@ dependencies: "@noble/hashes" "1.8.0" +"@noble/curves@1.9.7", "@noble/curves@^1.3.0": + version "1.9.7" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" + integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== + dependencies: + "@noble/hashes" "1.8.0" + "@noble/curves@=1.9.4": version "1.9.4" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.4.tgz#a748c6837ee7854a558cc3b951aedd87a5e7d6a5" @@ -2924,12 +3000,22 @@ dependencies: "@noble/hashes" "1.8.0" +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.0.tgz#5d9e33af2c7d04fee35de1519b80c958b2e35e39" + integrity sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w== + "@noble/hashes@1.7.2", "@noble/hashes@~1.7.1": version "1.7.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== -"@noble/hashes@1.8.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@^1.6.1", "@noble/hashes@^1.8.0", "@noble/hashes@~1.8.0": +"@noble/hashes@1.8.0", "@noble/hashes@^1.2.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@^1.6.1", "@noble/hashes@^1.8.0", "@noble/hashes@~1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== @@ -2939,6 +3025,11 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-2.0.1.tgz#fc1a928061d1232b0a52bb754393c37a5216c89e" integrity sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw== +"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2960,6 +3051,129 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@peculiar/asn1-cms@^2.3.13", "@peculiar/asn1-cms@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz#cb5445c1bad9197d176073bf142a5c035b460640" + integrity sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + "@peculiar/asn1-x509-attr" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-csr@^2.3.13": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz#9629d403bc5a61254f28ed0b90e99cee61c0e8be" + integrity sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-ecc@^2.3.14": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz#d29c4af671508a9934edc78e7c9419fbf7bc9870" + integrity sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pfx@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz#75cddd14d43ef875109e91ea150377d679c8fbc1" + integrity sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw== + dependencies: + "@peculiar/asn1-cms" "^2.6.1" + "@peculiar/asn1-pkcs8" "^2.6.1" + "@peculiar/asn1-rsa" "^2.6.1" + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs8@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz#bd56b4bb9e8a3702369049713a89134c87c6931a" + integrity sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs9@^2.3.13": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz#ddc5222952f25b59a0562a6f8cabdb72f586a496" + integrity sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw== + dependencies: + "@peculiar/asn1-cms" "^2.6.1" + "@peculiar/asn1-pfx" "^2.6.1" + "@peculiar/asn1-pkcs8" "^2.6.1" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + "@peculiar/asn1-x509-attr" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-rsa@^2.3.13", "@peculiar/asn1-rsa@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz#2cdf9f9ea6d6fdbaae214b9fed6de0534b654437" + integrity sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-schema@^2.3.13", "@peculiar/asn1-schema@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz#0dca1601d5b0fed2a72fed7a5f1d0d7dbe3a6f82" + integrity sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg== + dependencies: + asn1js "^3.0.6" + pvtsutils "^1.3.6" + tslib "^2.8.1" + +"@peculiar/asn1-x509-attr@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz#6425008b8099476010aace5b8ae9f9cbc41db0ab" + integrity sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-x509@^2.3.13", "@peculiar/asn1-x509@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz#4e8995659e16178e0e90fe90519aa269045af262" + integrity sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" + pvtsutils "^1.3.6" + tslib "^2.8.1" + +"@peculiar/x509@1.12.3": + version "1.12.3" + resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.12.3.tgz#af3db2c637a861d9bd6ca29c4bd659048d8d42b1" + integrity sha512-+Mzq+W7cNEKfkNZzyLl6A6ffqc3r21HGZUezgfKxpZrkORfOqgRXnS80Zu0IV6a9Ue9QBJeKD7kN0iWfc3bhRQ== + dependencies: + "@peculiar/asn1-cms" "^2.3.13" + "@peculiar/asn1-csr" "^2.3.13" + "@peculiar/asn1-ecc" "^2.3.14" + "@peculiar/asn1-pkcs9" "^2.3.13" + "@peculiar/asn1-rsa" "^2.3.13" + "@peculiar/asn1-schema" "^2.3.13" + "@peculiar/asn1-x509" "^2.3.13" + pvtsutils "^1.3.5" + reflect-metadata "^0.2.2" + tslib "^2.7.0" + tsyringe "^4.8.0" + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -4033,21 +4247,35 @@ resolved "https://registry.yarnpkg.com/@rx-state/core/-/core-0.1.4.tgz#586dde80be9dbdac31844006a0dcaa2bc7f35a5c" integrity sha512-Z+3hjU2xh1HisLxt+W5hlYX/eGSDaXXP+ns82gq/PLZpkXLu0uwcNUh9RLY3Clq4zT+hSsA3vcpIGt6+UAb8rQ== +"@scure/base@1.2.6", "@scure/base@^1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" + integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== + "@scure/base@^1.1.3", "@scure/base@~1.2.2", "@scure/base@~1.2.4", "@scure/base@~1.2.5": version "1.2.5" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.5.tgz#f9d1b232425b367d0dcb81c96611dcc651d58671" integrity sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw== -"@scure/base@^1.2.6": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" - integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== - "@scure/base@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@scure/base/-/base-2.0.0.tgz#ba6371fddf92c2727e88ad6ab485db6e624f9a98" integrity sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w== +"@scure/base@~1.1.0", "@scure/base@~1.1.2": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + +"@scure/bip32@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" + integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" + "@scure/bip32@1.6.2": version "1.6.2" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" @@ -4066,6 +4294,14 @@ "@noble/hashes" "~1.8.0" "@scure/base" "~1.2.5" +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + "@scure/bip39@1.5.4": version "1.5.4" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" @@ -4730,6 +4966,133 @@ resolved "https://registry.yarnpkg.com/@tokens-studio/types/-/types-0.5.2.tgz#cac9bce7a27dda7254664d7acab7b088e2aefe33" integrity sha512-rzMcZP0bj2E5jaa7Fj0LGgYHysoCrbrxILVbT0ohsCUH5uCHY/u6J7Qw/TE0n6gR9Js/c9ZO9T8mOoz0HdLMbA== +"@turnkey/api-key-stamper@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@turnkey/api-key-stamper/-/api-key-stamper-0.6.2.tgz#3a9ecc6b4d1f1c75b31fcdbb823104f472c3dd3d" + integrity sha512-FwTqQk8y2gr0s7yJOduM2ZS/y/WzXPAPcchV2vcfSpcpe3E6opRRrrkOrf+m+pDWkSE91bqgehaBIDxeZLnPcQ== + dependencies: + "@noble/curves" "^1.3.0" + "@turnkey/crypto" "2.8.11" + "@turnkey/encoding" "0.6.0" + sha256-uint8array "^0.10.7" + +"@turnkey/core@1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@turnkey/core/-/core-1.12.0.tgz#2d225d34d81623ab150fedfeab037ac3d1df562e" + integrity sha512-7JfYG3rxgBhB5hUgeqizDBBvZ8IhrnftSIt6pajM/iEgb7Rsb8LqEVcuyjK871x7+smhdjB4FO6tysDLZyIx0g== + dependencies: + "@turnkey/api-key-stamper" "0.6.2" + "@turnkey/crypto" "2.8.11" + "@turnkey/encoding" "0.6.0" + "@turnkey/http" "3.17.0" + "@turnkey/sdk-types" "0.12.0" + "@turnkey/webauthn-stamper" "0.6.0" + "@wallet-standard/app" "^1.1.0" + "@wallet-standard/base" "^1.1.0" + "@walletconnect/sign-client" "^2.23.6" + "@walletconnect/types" "^2.23.0" + cross-fetch "^3.1.5" + ethers "^6.10.0" + jwt-decode "4.0.0" + uuid "^11.1.0" + viem "^2.33.1" + +"@turnkey/crypto@2.8.11": + version "2.8.11" + resolved "https://registry.yarnpkg.com/@turnkey/crypto/-/crypto-2.8.11.tgz#2a9bb76cae93bfdccb9c1069af8bfb37f4de000e" + integrity sha512-WShKeYfbBWZebIbxT8umzLY7YZxDkwyMc7cPYwKEs7D82OmkRubqwme+r3t3fEKjKtTIREteSIV87Tx1IWlA3g== + dependencies: + "@noble/ciphers" "1.3.0" + "@noble/curves" "1.9.0" + "@noble/hashes" "1.8.0" + "@peculiar/x509" "1.12.3" + "@turnkey/encoding" "0.6.0" + "@turnkey/sdk-types" "0.12.0" + borsh "2.0.0" + cbor-js "0.1.0" + +"@turnkey/eip-1193-provider@^3.4.25": + version "3.4.25" + resolved "https://registry.yarnpkg.com/@turnkey/eip-1193-provider/-/eip-1193-provider-3.4.25.tgz#2e2e6bda0e2b2f7ab29f4746a417020ea3ba403a" + integrity sha512-01xfC5HxWhPFqINFGGDxBatr3KYnrOEi0lINp/A/ZuJQYc6zjNDd+UnJ9SgdLl2Yu5QjzEm+1c2JvVo4jUcFRQ== + dependencies: + "@turnkey/api-key-stamper" "0.6.2" + "@turnkey/core" "1.12.0" + "@turnkey/http" "3.17.0" + "@turnkey/sdk-browser" "5.15.1" + viem "2.7.19" + +"@turnkey/encoding@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@turnkey/encoding/-/encoding-0.6.0.tgz#a739b0e1f74a9cc752dc2c5cd3a4d2c8a3ef7379" + integrity sha512-IC8qXvy36+iGAeiaVIuJvB35uU2Ld/RAWI/DRTKS+ttBej0GXhOn48Ouu5mlca4jt8ZEuwXmDVv74A8uBQclsA== + dependencies: + bs58 "6.0.0" + bs58check "4.0.0" + +"@turnkey/http@3.17.0", "@turnkey/http@^3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@turnkey/http/-/http-3.17.0.tgz#0bfbb44405781714ee7d06be992503bd989ff90f" + integrity sha512-z6weSGNfhvib1ajFVdiw8fAB79Wo6ZFvwf8Izzqr2oO/2yyE4R5YoHuNf0lsWmJIr2Vz3/VL/S9wsf3WE6ameA== + dependencies: + "@turnkey/api-key-stamper" "0.6.2" + "@turnkey/encoding" "0.6.0" + "@turnkey/webauthn-stamper" "0.6.0" + cross-fetch "^3.1.5" + +"@turnkey/iframe-stamper@2.11.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@turnkey/iframe-stamper/-/iframe-stamper-2.11.0.tgz#4930fd1c60cf9317c0d4926e5afc67b928360036" + integrity sha512-Iyf4W4S4Hx/RVsXl07PkRTh3g5Ca+vpN6SdUbRy8lt9IQZAJel/vxAk9XMyB7utX9TJx+icSjNYHvC0XGqJ47A== + +"@turnkey/indexed-db-stamper@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@turnkey/indexed-db-stamper/-/indexed-db-stamper-1.2.3.tgz#6e1d05099ec7754157c3490da30dbc1e6d6eac4b" + integrity sha512-8ozqbI4XWyiczZJdkCyQ0PH2IpyK2iTFIFWm4foye0678ox5Xc/5cFNY8nb4iF6W+aI5VTV9bSCJYfWCDNCAzA== + dependencies: + "@turnkey/api-key-stamper" "0.6.2" + "@turnkey/encoding" "0.6.0" + +"@turnkey/sdk-browser@5.15.1", "@turnkey/sdk-browser@^5.15.1": + version "5.15.1" + resolved "https://registry.yarnpkg.com/@turnkey/sdk-browser/-/sdk-browser-5.15.1.tgz#3fbc5f8eb701bccaba7b832abfe13cf8b32b3dce" + integrity sha512-GcwRVFnuUe2hqn+dMdIGtpxwL8XKll1iYaHD//YWembyWNcBvgIyHpXNVUVyl2F8DdD3h7/+yf0ylz96YwpJ6w== + dependencies: + "@turnkey/api-key-stamper" "0.6.2" + "@turnkey/crypto" "2.8.11" + "@turnkey/encoding" "0.6.0" + "@turnkey/http" "3.17.0" + "@turnkey/iframe-stamper" "2.11.0" + "@turnkey/indexed-db-stamper" "1.2.3" + "@turnkey/sdk-types" "0.12.0" + "@turnkey/wallet-stamper" "1.1.13" + "@turnkey/webauthn-stamper" "0.6.0" + buffer "^6.0.3" + cross-fetch "^3.1.5" + hpke-js "^1.6.5" + +"@turnkey/sdk-types@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@turnkey/sdk-types/-/sdk-types-0.12.0.tgz#b506acdab1821953ac3a36f030382c14eace4c24" + integrity sha512-3FunPW4seCiZIXKMOJbyIa0eylIL5JKycI/qb7Kj2dJPGGIMt9lwd0lEc1+ibZzrP2tLex6OzKZSIXWPsBsOVQ== + +"@turnkey/wallet-stamper@1.1.13": + version "1.1.13" + resolved "https://registry.yarnpkg.com/@turnkey/wallet-stamper/-/wallet-stamper-1.1.13.tgz#b15e43ffb90bcb4ec4ddacbcd537a46b555ad6fd" + integrity sha512-zHzDG0h4t+lpkVFRkFfqVvz0x3abqJuGoIivafpSQQFYFYsuIdtTkGUucTQPAV37Rxz/mVRqxUdvaFuh3awUrg== + dependencies: + "@turnkey/crypto" "2.8.11" + "@turnkey/encoding" "0.6.0" + optionalDependencies: + viem "^2.21.35" + +"@turnkey/webauthn-stamper@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@turnkey/webauthn-stamper/-/webauthn-stamper-0.6.0.tgz#aa41ce5d1b55da370b887c972901e9e9b6067ca2" + integrity sha512-jdN17QEnn7RBykEOhtKIialWmDjnDAH8DzbyITwn8jsKcwT1TBNYge89hTUTjbdsDLBAqQw8cHujPdy0RaAqvw== + dependencies: + sha256-uint8array "^0.10.7" + "@types/aria-query@^5.0.1": version "5.0.4" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" @@ -4893,6 +5256,13 @@ dependencies: undici-types "~6.21.0" +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + "@types/node@^12.12.54": version "12.20.55" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" @@ -5273,6 +5643,205 @@ dependencies: "@wallet-standard/base" "^1.1.0" +"@walletconnect/core@2.23.7": + version "2.23.7" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.23.7.tgz#31add4d3774e72e3b72a983e96f6fc556bc05707" + integrity sha512-yTyymn9mFaDZkUfLfZ3E9VyaSDPeHAXlrPxQRmNx2zFsEt/25GmTU2A848aomimLxZnAG2jNLhxbJ8I0gyNV+w== + dependencies: + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-provider" "1.0.14" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/jsonrpc-ws-connection" "1.0.16" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/logger" "3.0.2" + "@walletconnect/relay-api" "1.0.11" + "@walletconnect/relay-auth" "1.1.0" + "@walletconnect/safe-json" "1.0.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.23.7" + "@walletconnect/utils" "2.23.7" + "@walletconnect/window-getters" "1.0.1" + es-toolkit "1.44.0" + events "3.3.0" + uint8arrays "3.1.1" + +"@walletconnect/environment@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" + integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== + dependencies: + tslib "1.14.1" + +"@walletconnect/events@1.0.1", "@walletconnect/events@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" + integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== + dependencies: + keyvaluestorage-interface "^1.0.0" + tslib "1.14.1" + +"@walletconnect/heartbeat@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz#e8dc5179db7769950c6f9cf59b23516d9b95227d" + integrity sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw== + dependencies: + "@walletconnect/events" "^1.0.1" + "@walletconnect/time" "^1.0.2" + events "^3.3.0" + +"@walletconnect/jsonrpc-provider@1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz#696f3e3b6d728b361f2e8b853cfc6afbdf2e4e3e" + integrity sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.8" + "@walletconnect/safe-json" "^1.0.2" + events "^3.3.0" + +"@walletconnect/jsonrpc-types@1.0.4", "@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz#ce1a667d79eadf2a2d9d002c152ceb68739c230c" + integrity sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ== + dependencies: + events "^3.3.0" + keyvaluestorage-interface "^1.0.0" + +"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" + integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== + dependencies: + "@walletconnect/environment" "^1.0.1" + "@walletconnect/jsonrpc-types" "^1.0.3" + tslib "1.14.1" + +"@walletconnect/jsonrpc-ws-connection@1.0.16": + version "1.0.16" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.16.tgz#666bb13fbf32a2d4f7912d5b4d0bdef26a1d057b" + integrity sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.6" + "@walletconnect/safe-json" "^1.0.2" + events "^3.3.0" + ws "^7.5.1" + +"@walletconnect/keyvaluestorage@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz#dd2caddabfbaf80f6b8993a0704d8b83115a1842" + integrity sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA== + dependencies: + "@walletconnect/safe-json" "^1.0.1" + idb-keyval "^6.2.1" + unstorage "^1.9.0" + +"@walletconnect/logger@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-3.0.2.tgz#dab84d27ff32687f60c7bbe4d2e930c7460ddf2b" + integrity sha512-7wR3wAwJTOmX4gbcUZcFMov8fjftY05+5cO/d4cpDD8wDzJ+cIlKdYOXaXfxHLSYeDazMXIsxMYjHYVDfkx+nA== + dependencies: + "@walletconnect/safe-json" "^1.0.2" + pino "10.0.0" + +"@walletconnect/relay-api@1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.11.tgz#80ab7ef2e83c6c173be1a59756f95e515fb63224" + integrity sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q== + dependencies: + "@walletconnect/jsonrpc-types" "^1.0.2" + +"@walletconnect/relay-auth@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.1.0.tgz#c3c5f54abd44a5138ea7d4fe77970597ba66c077" + integrity sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ== + dependencies: + "@noble/curves" "1.8.0" + "@noble/hashes" "1.7.0" + "@walletconnect/safe-json" "^1.0.1" + "@walletconnect/time" "^1.0.2" + uint8arrays "^3.0.0" + +"@walletconnect/safe-json@1.0.2", "@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" + integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== + dependencies: + tslib "1.14.1" + +"@walletconnect/sign-client@^2.23.6": + version "2.23.7" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.23.7.tgz#1f9035c9909547bd5210805424d44d723bd1a117" + integrity sha512-SX61lzb1bTl/LijlcHQttnoHPBzzoY5mW9ArR6qhFtDNDTS7yr2rcH7rCngxHlYeb4rAYcWLHgbiGSrdKxl/mg== + dependencies: + "@walletconnect/core" "2.23.7" + "@walletconnect/events" "1.0.1" + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/logger" "3.0.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.23.7" + "@walletconnect/utils" "2.23.7" + events "3.3.0" + +"@walletconnect/time@1.0.2", "@walletconnect/time@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" + integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== + dependencies: + tslib "1.14.1" + +"@walletconnect/types@2.23.7", "@walletconnect/types@^2.23.0": + version "2.23.7" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.23.7.tgz#9662c30289ad20e4f27ba1c5ddbd71cf7bda7882" + integrity sha512-6PAKK+iR2IntmlkCFLMAHjYeIaerCJJYRDmdRimhon0u+aNmQT+HyGM6zxDAth0rdpBD7qEvKP5IXZTE7KFUhw== + dependencies: + "@walletconnect/events" "1.0.1" + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/logger" "3.0.2" + events "3.3.0" + +"@walletconnect/utils@2.23.7": + version "2.23.7" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.23.7.tgz#4e3d8431b1176f29844a1a6ca4b270188fee02ca" + integrity sha512-3p38gNrkVcIiQixVrlsWSa66Gjs5PqHOug2TxDgYUVBW5NcKjwQA08GkC6CKBQUfr5iaCtbfy6uZJW1LKSIvWQ== + dependencies: + "@msgpack/msgpack" "3.1.3" + "@noble/ciphers" "1.3.0" + "@noble/curves" "1.9.7" + "@noble/hashes" "1.8.0" + "@scure/base" "1.2.6" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/logger" "3.0.2" + "@walletconnect/relay-api" "1.0.11" + "@walletconnect/relay-auth" "1.1.0" + "@walletconnect/safe-json" "1.0.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.23.7" + "@walletconnect/window-getters" "1.0.1" + "@walletconnect/window-metadata" "1.0.1" + blakejs "1.2.1" + detect-browser "5.3.0" + ox "0.9.3" + uint8arrays "3.1.1" + +"@walletconnect/window-getters@1.0.1", "@walletconnect/window-getters@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" + integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== + dependencies: + tslib "1.14.1" + +"@walletconnect/window-metadata@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" + integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== + dependencies: + "@walletconnect/window-getters" "^1.0.1" + tslib "1.14.1" + "@whatwg-node/disposablestack@^0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz#2064a1425ea66194def6df0c7a1851b6939c82bb" @@ -5409,6 +5978,11 @@ resolved "https://registry.yarnpkg.com/@zip.js/zip.js/-/zip.js-2.7.61.tgz#417ba7c6afe2f704d7b5e4f93d14488bc20ab3a6" integrity sha512-+tZvY10nkW0pJoU88XFWLBd2O9PJPvEnDhSY/jQHfIroN5W5qGfPgFHKC4lkx0+9Vw/0IAkNHf1XBVInBkM9Vw== +abitype@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" + integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== + abitype@1.0.8, abitype@^1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" @@ -5419,6 +5993,11 @@ abitype@1.1.0: resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.1.0.tgz#510c5b3f92901877977af5e864841f443bf55406" integrity sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A== +abitype@1.2.3, abitype@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.2.3.tgz#bec3e09dea97d99ef6c719140bee663a329ad1f4" + integrity sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg== + abitype@^1.0.9: version "1.1.1" resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.1.1.tgz#b50ed400f8bfca5452eb4033445c309d3e1117c8" @@ -5444,6 +6023,11 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + agent-base@^7.1.0, agent-base@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" @@ -5486,6 +6070,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -5513,7 +6102,7 @@ any-promise@^1.0.0: resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== -anymatch@~3.1.2: +anymatch@^3.1.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -5631,6 +6220,15 @@ asap@~2.0.3: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +asn1js@^3.0.6: + version "3.0.7" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.7.tgz#15f1f2f59e60f80d5b43ef14047a294a969f824f" + integrity sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ== + dependencies: + pvtsutils "^1.3.6" + pvutils "^1.1.3" + tslib "^2.8.1" + assert@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" @@ -5679,6 +6277,11 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + auto-bind@~4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb" @@ -5834,6 +6437,11 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +blakejs@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + bn.js@^4.11.9: version "4.12.2" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.2.tgz#3d8fed6796c24e177737f7cc5172ee04ef39ec99" @@ -5849,6 +6457,11 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== +borsh@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-2.0.0.tgz#042a9f109565caac3c6a21297cd8c0ae8db3149d" + integrity sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg== + borsh@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" @@ -5895,6 +6508,13 @@ browserslist@^4.24.0: node-releases "^2.0.19" update-browserslist-db "^1.1.3" +bs58@6.0.0, bs58@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-6.0.0.tgz#a2cda0130558535dd281a2f8697df79caaf425d8" + integrity sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw== + dependencies: + base-x "^5.0.0" + bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -5902,12 +6522,13 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" -bs58@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-6.0.0.tgz#a2cda0130558535dd281a2f8697df79caaf425d8" - integrity sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw== +bs58check@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-4.0.0.tgz#46cda52a5713b7542dcb78ec2efdf78f5bf1d23c" + integrity sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g== dependencies: - base-x "^5.0.0" + "@noble/hashes" "^1.2.0" + bs58 "^6.0.0" bser@2.1.1: version "2.1.1" @@ -6038,6 +6659,11 @@ capital-case@^1.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" +cbor-js@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cbor-js/-/cbor-js-0.1.0.tgz#c80ce6120f387e8faa74370dfda21d965b8fc7f9" + integrity sha512-7sQ/TvDZPl7csT1Sif9G0+MA0I0JOVah8+wWlJVQdVEgIbCzlN/ab3x+uvMNsc34TUvO6osQTAmB2ls80JX6tw== + chai@^5.1.1: version "5.2.0" resolved "https://registry.yarnpkg.com/chai/-/chai-5.2.0.tgz#1358ee106763624114addf84ab02697e411c9c05" @@ -6162,6 +6788,13 @@ chokidar@^4.0.3: dependencies: readdirp "^4.0.1" +chokidar@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-5.0.0.tgz#949c126a9238a80792be9a0265934f098af369a5" + integrity sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw== + dependencies: + readdirp "^5.0.0" + chromatic@^13.3.4: version "13.3.5" resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-13.3.5.tgz#425d9eac714de2063962172d11914d8ec3feb64d" @@ -6404,6 +7037,11 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== +cookie-es@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.2.2.tgz#18ceef9eb513cac1cb6c14bcbf8bdb2679b34821" + integrity sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg== + cookie-es@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-2.0.0.tgz#ca6163d7ef8686ea6bbdd551f1de575569c1ed69" @@ -6465,6 +7103,13 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" +crossws@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.3.5.tgz#daad331d44148ea6500098bc858869f3a5ab81a6" + integrity sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA== + dependencies: + uncrypto "^0.1.3" + crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" @@ -6721,6 +7366,11 @@ define-properties@^1.1.3, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +defu@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + delay@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" @@ -6741,6 +7391,16 @@ dequal@^2.0.3: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +destr@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.5.tgz#7d112ff1b925fb8d2079fac5bdb4a90973b51fdb" + integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== + +detect-browser@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" + integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== + detect-indent@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" @@ -7058,6 +7718,11 @@ es-to-primitive@^1.3.0: is-date-object "^1.0.5" is-symbol "^1.0.4" +es-toolkit@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.44.0.tgz#b363b436b6115c3cc9cc21954c1e08ecdaa51c8c" + integrity sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg== + es-toolkit@^1.39.3: version "1.39.10" resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.39.10.tgz#513407af73e79f9940e7ec7650f2e6dceeaf1d81" @@ -7350,6 +8015,19 @@ ethers@5.7.0: "@ethersproject/web" "5.7.0" "@ethersproject/wordlists" "5.7.0" +ethers@^6.10.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.16.0.tgz#fff9b4f05d7a359c774ad6e91085a800f7fccf65" + integrity sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" + eventemitter3@5.0.1, eventemitter3@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" @@ -7360,7 +8038,7 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.7: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.3.0: +events@3.3.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -7926,6 +8604,21 @@ graphql-ws@^6.0.3: resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.11.0.tgz#96d17f66370678027fdf59b2d4c20b4efaa8a633" integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== +h3@^1.15.5: + version "1.15.5" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.5.tgz#e2f28d4a66a249973bb050eaddb06b9ab55506f8" + integrity sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg== + dependencies: + cookie-es "^1.2.2" + crossws "^0.3.5" + defu "^6.1.4" + destr "^2.0.5" + iron-webcrypto "^1.2.1" + node-mock-http "^1.0.4" + radix3 "^1.1.2" + ufo "^1.6.3" + uncrypto "^0.1.3" + has-bigints@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" @@ -8020,6 +8713,17 @@ hosted-git-info@^9.0.0: dependencies: lru-cache "^11.1.0" +hpke-js@^1.6.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/hpke-js/-/hpke-js-1.7.0.tgz#f01d37eac4c9f24d28f477c30d27399c48b37d1d" + integrity sha512-Ix6O3U7XmCs6Jc+8NkvyxTvk2DXliwYZ8+fDNjOtXC769ypslNIDwMHucaoCDALSyqqr3/pnpDwDx7Icac/iCg== + dependencies: + "@hpke/chacha20poly1305" "^1.7.0" + "@hpke/common" "^1.9.0" + "@hpke/core" "^1.8.0" + "@hpke/dhkem-x25519" "^1.7.0" + "@hpke/dhkem-x448" "^1.7.0" + html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" @@ -8139,6 +8843,11 @@ iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +idb-keyval@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.2.tgz#b0171b5f73944854a3291a5cdba8e12768c4854a" + integrity sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg== + ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -8259,6 +8968,11 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +iron-webcrypto@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" + integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== + is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -8619,6 +9333,11 @@ isomorphic-ws@^5.0.0: resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== +isows@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== + isows@1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.7.tgz#1c06400b7eed216fbba3bcbd68f12490fc342915" @@ -8807,6 +9526,11 @@ jsonify@^0.0.1: object.assign "^4.1.4" object.values "^1.1.6" +jwt-decode@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-4.0.0.tgz#2270352425fd413785b2faf11f6e755c5151bd4b" + integrity sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA== + keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -8814,6 +9538,11 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" +keyvaluestorage-interface@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" + integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== + klaw-sync@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" @@ -8966,6 +9695,11 @@ lru-cache@^11.1.0, lru-cache@^11.2.2: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.4.tgz#ecb523ebb0e6f4d837c807ad1abaea8e0619770d" integrity sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg== +lru-cache@^11.2.0: + version "11.2.6" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.6.tgz#356bf8a29e88a7a2945507b31f6429a65a192c58" + integrity sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -9149,6 +9883,11 @@ ms@^2.0.0, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multiformats@^9.4.2: + version "9.9.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" + integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== + mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -9200,6 +9939,11 @@ node-domexception@^1.0.0: resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== +node-fetch-native@^1.6.7: + version "1.6.7" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz#9d09ca63066cc48423211ed4caf5d70075d76a71" + integrity sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q== + node-fetch@^2.6.1, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -9234,6 +9978,11 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== +node-mock-http@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/node-mock-http/-/node-mock-http-1.0.4.tgz#21f2ab4ce2fe4fbe8a660d7c5195a1db85e042a4" + integrity sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ== + node-releases@^2.0.19: version "2.0.19" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" @@ -9354,6 +10103,20 @@ object.values@^1.1.6, object.values@^1.2.1: define-properties "^1.2.1" es-object-atoms "^1.0.0" +ofetch@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.5.1.tgz#5c43cc56e03398b273014957060344254505c5c7" + integrity sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA== + dependencies: + destr "^2.0.5" + node-fetch-native "^1.6.7" + ufo "^1.6.1" + +on-exit-leak-free@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -9453,6 +10216,20 @@ own-keys@^1.0.1: object-keys "^1.1.1" safe-push-apply "^1.0.0" +ox@0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.14.0.tgz#e9f58515dbcb95a74cd5017293380ddce700e401" + integrity sha512-WLOB7IKnmI3Ol6RAqY7CJdZKl8QaI44LN91OGF1061YIeN6bL5IsFcdp7+oQShRyamE/8fW/CBRWhJAOzI35Dw== + dependencies: + "@adraffy/ens-normalize" "^1.11.0" + "@noble/ciphers" "^1.3.0" + "@noble/curves" "1.9.1" + "@noble/hashes" "^1.8.0" + "@scure/bip32" "^1.7.0" + "@scure/bip39" "^1.6.0" + abitype "^1.2.3" + eventemitter3 "5.0.1" + ox@0.6.9: version "0.6.9" resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.9.tgz#da1ee04fa10de30c8d04c15bfb80fe58b1f554bd" @@ -9466,6 +10243,20 @@ ox@0.6.9: abitype "^1.0.6" eventemitter3 "5.0.1" +ox@0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.9.3.tgz#92cc1008dcd913e919364fd4175c860b3eeb18db" + integrity sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg== + dependencies: + "@adraffy/ens-normalize" "^1.11.0" + "@noble/ciphers" "^1.3.0" + "@noble/curves" "1.9.1" + "@noble/hashes" "^1.8.0" + "@scure/bip32" "^1.7.0" + "@scure/bip39" "^1.6.0" + abitype "^1.0.9" + eventemitter3 "5.0.1" + ox@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/ox/-/ox-0.9.6.tgz#5cf02523b6db364c10ee7f293ff1e664e0e1eab7" @@ -9731,6 +10522,35 @@ picomatch@^4.0.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== +pino-abstract-transport@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60" + integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== + dependencies: + split2 "^4.0.0" + +pino-std-serializers@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz#a7b0cd65225f29e92540e7853bd73b07479893fc" + integrity sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw== + +pino@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-10.0.0.tgz#3d1a8abc7a700142edebf02a7b291834da199fbe" + integrity sha512-eI9pKwWEix40kfvSzqEP6ldqOoBIN7dwD/o91TY5z8vQI12sAffpR/pOqAD1IVVwIVHDpHjkq0joBPdJD0rafA== + dependencies: + atomic-sleep "^1.0.0" + on-exit-leak-free "^2.1.0" + pino-abstract-transport "^2.0.0" + pino-std-serializers "^7.0.0" + process-warning "^5.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.2.0" + safe-stable-stringify "^2.3.1" + slow-redact "^0.3.0" + sonic-boom "^4.0.1" + thread-stream "^3.0.0" + pirates@^4.0.1: version "4.0.7" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" @@ -9854,6 +10674,11 @@ pretty-ms@^9.2.0: dependencies: parse-ms "^4.0.0" +process-warning@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-5.0.0.tgz#566e0bf79d1dff30a72d8bbbe9e8ecefe8d378d7" + integrity sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA== + process@^0.11.1: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -9890,6 +10715,18 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +pvtsutils@^1.3.5, pvtsutils@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" + integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== + dependencies: + tslib "^2.8.1" + +pvutils@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.5.tgz#84b0dea4a5d670249aa9800511804ee0b7c2809c" + integrity sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA== + qs@^6.12.3, qs@^6.4.0: version "6.14.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" @@ -9902,6 +10739,16 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-format-unescaped@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + +radix3@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.2.tgz#fd27d2af3896c6bf4bcdfab6427c69c2afc69ec0" + integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== + react-docgen-typescript@^2.2.2: version "2.4.0" resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.4.0.tgz#033428b4a6a639d050ac8baf2a5195c596521713" @@ -10100,6 +10947,11 @@ readdirp@^4.0.1: resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== +readdirp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-5.0.0.tgz#fbf1f71a727891d685bb1786f9ba74084f6e2f91" + integrity sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -10107,6 +10959,11 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +real-require@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== + recast@^0.23.11, recast@^0.23.5: version "0.23.11" resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.11.tgz#8885570bb28cf773ba1dc600da7f502f7883f73f" @@ -10158,6 +11015,11 @@ reflect-metadata@0.1.13: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== +reflect-metadata@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" @@ -10484,6 +11346,11 @@ safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" +safe-stable-stringify@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -10599,6 +11466,11 @@ setimmediate@^1.0.5: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== +sha256-uint8array@^0.10.7: + version "0.10.7" + resolved "https://registry.yarnpkg.com/sha256-uint8array/-/sha256-uint8array-0.10.7.tgz#c751fc914f4227b26d996980562065fa4eadcf99" + integrity sha512-1Q6JQU4tX9NqsDGodej6pkrUVQVNapLZnvkwIhddH/JqzBZF1fSaxSWNY6sziXBE8aEa2twtGkXUrwzGeZCMpQ== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -10699,6 +11571,11 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slow-redact@^0.3.0: + version "0.3.2" + resolved "https://registry.yarnpkg.com/slow-redact/-/slow-redact-0.3.2.tgz#d06e25195aa5c492d32631c53d9ae86043b8b0e2" + integrity sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw== + smoldot@2.0.40: version "2.0.40" resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.40.tgz#c898b303d6b2bd512c3b7cbad1799fecc9aa7fb5" @@ -10714,6 +11591,13 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +sonic-boom@^4.0.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.1.tgz#28598250df4899c0ac572d7e2f0460690ba6a030" + integrity sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q== + dependencies: + atomic-sleep "^1.0.0" + sonner@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/sonner/-/sonner-2.0.3.tgz#de7cdbc4b6a25ac3f0a9e0aed3748e0b3d6e092e" @@ -10792,6 +11676,11 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + sponge-case@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sponge-case/-/sponge-case-1.0.1.tgz#260833b86453883d974f84854cdb63aecc5aef4c" @@ -10875,7 +11764,7 @@ string-env-interpolation@^1.0.1: resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -10893,15 +11782,6 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -10985,19 +11865,19 @@ string_decoder@^1.1.1, string_decoder@^1.3.0: dependencies: safe-buffer "~5.2.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1, strip-ansi@^7.1.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +strip-ansi@^7.0.1, strip-ansi@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== dependencies: - ansi-regex "^5.0.1" + ansi-regex "^6.2.2" strip-bom@^3.0.0: version "3.0.0" @@ -11162,6 +12042,13 @@ thingies@^1.20.0: resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1" integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== +thread-stream@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" + integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== + dependencies: + real-require "^0.2.0" + throttle-debounce@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" @@ -11335,7 +12222,17 @@ tsconfig-paths@^4.2.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.3, tslib@^2.8.0, tslib@^2.8.1: +tslib@1.14.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.3, tslib@^2.7.0, tslib@^2.8.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -11383,6 +12280,13 @@ tsx@^4.19.2: optionalDependencies: fsevents "~2.3.3" +tsyringe@^4.8.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c" + integrity sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw== + dependencies: + tslib "^1.9.3" + turbo-darwin-64@2.5.3: version "2.5.3" resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-2.5.3.tgz#e1f19e816f76e0d636e31e66f8238c43bf870f45" @@ -11519,6 +12423,18 @@ ufo@^1.5.4: resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b" integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA== +ufo@^1.6.1, ufo@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.3.tgz#799666e4e88c122a9659805e30b9dc071c3aed4f" + integrity sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q== + +uint8arrays@3.1.1, uint8arrays@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" + integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== + dependencies: + multiformats "^9.4.2" + unbox-primitive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" @@ -11534,6 +12450,16 @@ unc-path-regex@^0.1.2: resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== +uncrypto@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" + integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + undici-types@~6.21.0: version "6.21.0" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" @@ -11597,6 +12523,20 @@ unplugin@^2.3.5: picomatch "^4.0.3" webpack-virtual-modules "^0.6.2" +unstorage@^1.9.0: + version "1.17.4" + resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.17.4.tgz#92a0bca7ea3781ba80b492939c6bed17418b12f2" + integrity sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw== + dependencies: + anymatch "^3.1.3" + chokidar "^5.0.0" + destr "^2.0.5" + h3 "^1.15.5" + lru-cache "^11.2.0" + node-fetch-native "^1.6.7" + ofetch "^1.5.1" + ufo "^1.6.3" + update-browserslist-db@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" @@ -11704,7 +12644,7 @@ util@^0.12.5: is-typed-array "^1.1.3" which-typed-array "^1.1.2" -uuid@^11.0.5: +uuid@^11.0.5, uuid@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== @@ -11754,6 +12694,34 @@ victory-vendor@^37.0.2: d3-time "^3.0.0" d3-timer "^3.0.1" +viem@2.7.19: + version "2.7.19" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.19.tgz#fa6bd8f46df2f0332e5ca6d116772dff6f161a72" + integrity sha512-UOMeqy+8p2709ra2j9HEOL1NfjsXZzlJ8gwR6YO/zXH8KIZvyzW07t4iQARF5+ShVZ/7+/1ec8oPjVi1M//33A== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "1.0.0" + isows "1.0.3" + ws "8.13.0" + +viem@^2.21.35, viem@^2.33.1: + version "2.47.0" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.47.0.tgz#de169885384419d64fd86bf9f5b687e088ce5839" + integrity sha512-jU5e1E1s5E5M1y+YrELDnNar/34U8NXfVcRfxtVETigs2gS1vvW2ngnBoQUGBwLnNr0kNv+NUu4m10OqHByoFw== + dependencies: + "@noble/curves" "1.9.1" + "@noble/hashes" "1.8.0" + "@scure/bip32" "1.7.0" + "@scure/bip39" "1.6.0" + abitype "1.2.3" + isows "1.0.7" + ox "0.14.0" + ws "8.18.3" + viem@^2.30.0: version "2.30.0" resolved "https://registry.yarnpkg.com/viem/-/viem-2.30.0.tgz#e8f881bdba290db87fbf94302b0427aaa8abe320" @@ -11987,7 +12955,7 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -12005,15 +12973,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -12062,6 +13021,16 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + ws@8.18.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" @@ -12077,7 +13046,7 @@ ws@8.18.3: resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== -ws@^7.5.10: +ws@^7.5.1, ws@^7.5.10: version "7.5.10" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==