-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
Copy pathlib.rs
734 lines (622 loc) · 167 KB
/
lib.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
#![feature(trait_alias)]
#![allow(clippy::type_complexity, async_fn_in_trait)]
use std::{collections::VecDeque, fmt::Debug, future::Future, marker::PhantomData};
use chain_utils::{
arbitrum::Arbitrum, berachain::Berachain, cosmos::Cosmos, ethereum::Ethereum, scroll::Scroll,
union::Union, wasm::Wasm, Chains,
};
use frame_support_procedural::{CloneNoBound, DebugNoBound, PartialEqNoBound};
use queue_msg::{seq, Op, OpT, QueueMessage};
use serde::{Deserialize, Serialize};
use unionlabs::{
ethereum::config::{Mainnet, Minimal},
ics24,
never::Never,
traits::{Chain, ChainIdOf, ClientIdOf, HeightOf},
MaybeArbitrary, MaybeRecoverableError,
};
use crate::{
aggregate::AnyAggregate,
data::AnyData,
effect::{AnyEffect, Effect},
event::AnyEvent,
fetch::{AnyFetch, FetchUpdateHeaders},
wait::AnyWait,
};
pub mod use_aggregate;
pub mod aggregate;
pub mod data;
pub mod effect;
pub mod event;
pub mod fetch;
pub mod wait;
pub mod chain;
pub trait ChainExt: Chain {
type Data<Tr: ChainExt>: OpT;
type Fetch<Tr: ChainExt>: OpT;
type Aggregate<Tr: ChainExt>: OpT;
/// Error type for [`Self::msg`].
type MsgError: Debug + MaybeRecoverableError;
/// The config required to create a light client on this chain.
type Config: Debug
+ Clone
+ PartialEq
+ Serialize
+ for<'de> Deserialize<'de>
+ MaybeArbitrary
+ Send
+ Sync;
}
pub enum RelayMessage {}
impl QueueMessage for RelayMessage {
type Event = AnyLightClientIdentified<AnyEvent>;
type Data = AnyLightClientIdentified<AnyData>;
type Fetch = AnyLightClientIdentified<AnyFetch>;
type Effect = AnyLightClientIdentified<AnyEffect>;
type Wait = AnyLightClientIdentified<AnyWait>;
type Aggregate = AnyLightClientIdentified<AnyAggregate>;
type Store = Chains;
}
impl TryFrom<Op<RelayMessage>> for AnyLightClientIdentified<AnyData> {
type Error = Op<RelayMessage>;
fn try_from(value: Op<RelayMessage>) -> Result<Self, Self::Error> {
match value {
Op::Data(data) => Ok(data),
_ => Err(value),
}
}
}
macro_rules! any_enum {
(
$(#[doc = $outer_doc:literal])*
#[any = $Any:ident]
$(#[specific = $Specific:ident])?
pub enum $Enum:ident<Hc: ChainExt, Tr: ChainExt> {
$(
$(#[doc = $doc:literal])*
$(#[serde($untagged:ident)])*
$Variant:ident(
$(#[$variant_inner_meta:meta])*
$VariantInner:ty
),
)+
}
) => {
#[::queue_msg::queue_msg]
#[derive(::enumorph::Enumorph)]
$(#[doc = $outer_doc])*
pub enum $Enum<Hc: ChainExt, Tr: ChainExt> {
$(
$(#[doc = $doc])*
$(#[serde($untagged)])*
$Variant(
$(#[$variant_inner_meta])*
$VariantInner
),
)+
}
pub enum $Any {}
impl crate::AnyLightClient for $Any {
type Inner<Hc: ChainExt, Tr: ChainExt> = $Enum<Hc, Tr>;
}
const _: () = {
use crate::{AnyLightClientIdentified, Identified};
$(
impl<Hc: ChainExt, Tr: ChainExt> From<Identified<Hc, Tr, $VariantInner>>
for AnyLightClientIdentified<$Any>
where
$VariantInner: Into<$Enum<Hc, Tr>>,
AnyLightClientIdentified<$Any>: From<Identified<Hc, Tr, $Enum<Hc, Tr>>>,
{
fn from(
Identified {
chain_id,
t,
__marker: _,
}: Identified<Hc, Tr, $VariantInner>,
) -> Self {
Self::from(crate::id(
chain_id,
<$Enum<Hc, Tr>>::from(t),
))
}
}
impl<Hc: ChainExt, Tr: ChainExt>
TryFrom<AnyLightClientIdentified<$Any>> for Identified<Hc, Tr, $VariantInner>
where
Identified<Hc, Tr, $Enum<Hc, Tr>>: TryFrom<AnyLightClientIdentified<$Any>, Error = AnyLightClientIdentified<$Any>>
+ Into<AnyLightClientIdentified<$Any>>,
{
type Error = AnyLightClientIdentified<$Any>;
fn try_from(value: AnyLightClientIdentified<$Any>) -> Result<Self, Self::Error> {
let Identified {
chain_id,
t,
__marker: _,
} = <Identified<Hc, Tr, $Enum<Hc, Tr>>>::try_from(value)?;
Ok(crate::id(
chain_id.clone(),
<$VariantInner>::try_from(t).map_err(|x: $Enum<Hc, Tr>| {
Into::<AnyLightClientIdentified<_>>::into(crate::id(chain_id, x))
})?,
))
}
}
)+
$(
impl<Hc: ChainExt, Tr: ChainExt> $Enum<Hc, Tr> {
pub fn specific(t: impl Into<Hc::$Enum<Tr>>) -> $Enum<Hc, Tr> {
$Specific(t.into()).into()
}
}
)?
};
};
}
pub(crate) use any_enum;
pub type PathOf<Hc, Tr> = ics24::Path<ClientIdOf<Hc>, HeightOf<Tr>>;
pub trait AnyLightClient {
type Inner<Hc: ChainExt, Tr: ChainExt>: Debug + Clone + PartialEq;
// + Serialize
// + for<'de> Deserialize<'de>
// + MaybeArbitrary;
}
pub type InnerOf<T, Hc, Tr> = <T as AnyLightClient>::Inner<Hc, Tr>;
macro_rules! lc {
// A on B
($Tr:ty => $Hc:ty) => {
Identified<$Hc, $Tr, InnerOf<T, $Hc, $Tr>>
};
}
#[derive(
DebugNoBound, CloneNoBound, PartialEqNoBound, Serialize, Deserialize, enumorph::Enumorph,
)]
#[cfg_attr(
feature = "arbitrary",
derive(arbitrary::Arbitrary),
arbitrary(bound = "")
)]
#[serde(
from = "AnyLightClientIdentifiedSerde<T>",
into = "AnyLightClientIdentifiedSerde<T>",
bound(
serialize = "AnyLightClientIdentifiedSerde<T>: Serialize",
deserialize = "AnyLightClientIdentifiedSerde<T>: Deserialize<'de>"
)
)]
#[allow(clippy::large_enum_variant)]
pub enum AnyLightClientIdentified<T: AnyLightClient> {
/// The 08-wasm client tracking the state of Ethereum<Mainnet>.
EthereumMainnetOnUnion(lc!(Ethereum<Mainnet> => Wasm<Union>)),
/// The solidity client on Ethereum<Mainnet> tracking the state of Wasm<Union>.
UnionOnEthereumMainnet(lc!(Wasm<Union> => Ethereum<Mainnet>)),
/// The 08-wasm client tracking the state of Ethereum<Minimal>.
EthereumMinimalOnUnion(lc!(Ethereum<Minimal> => Wasm<Union>)),
/// The solidity client on Ethereum<Minimal> tracking the state of Wasm<Union>.
UnionOnEthereumMinimal(lc!(Wasm<Union> => Ethereum<Minimal>)),
/// The 08-wasm client tracking the state of Scroll.
ScrollOnUnion(lc!(Scroll => Wasm<Union>)),
/// The solidity client on Scroll tracking the state of Wasm<Union>.
UnionOnScroll(lc!(Wasm<Union> => Scroll)),
/// The 08-wasm client tracking the state of Arbitrum.
ArbitrumOnUnion(lc!(Arbitrum => Wasm<Union>)),
/// The solidity client on Arbitrum tracking the state of Wasm<Union>.
UnionOnArbitrum(lc!(Wasm<Union> => Arbitrum)),
/// The 08-wasm client tracking the state of Berachain.
BerachainOnUnion(lc!(Berachain => Wasm<Union>)),
/// The solidity client on Berachain tracking the state of Wasm<Union>.
UnionOnBerachain(lc!(Wasm<Union> => Berachain)),
/// The native tendermint client on Union tracking the state of Wasm<Cosmos>.
WasmCosmosOnUnion(lc!(Wasm<Cosmos> => Union)),
/// The 08-wasm client on Cosmos tracking the state of Union.
UnionOnWasmCosmos(lc!(Union => Wasm<Cosmos>)),
/// The native tendermint client on Union tracking the state of Cosmos.
CosmosOnUnion(lc!(Cosmos => Union)),
/// The native cometbls client on Cosmos tracking the state of Union.
UnionOnCosmos(lc!(Union => Cosmos)),
/// The 08-wasm client tracking the state of Cosmos.
CosmosOnCosmos(lc!(Cosmos => Cosmos)),
}
impl<T: AnyLightClient> AnyLightClientIdentified<T> {
fn chain_id(&self) -> String {
let i = self;
any_lc! {
|i| i.chain_id.to_string()
}
}
}
#[derive(Serialize, Deserialize, enumorph::Enumorph)]
#[serde(
bound(
serialize = "
Inner<Wasm<Union>, Ethereum<Mainnet>, lc!(Ethereum<Mainnet> => Wasm<Union>)>: Serialize,
Inner<Ethereum<Mainnet>, Wasm<Union>, lc!(Wasm<Union> => Ethereum<Mainnet>)>: Serialize,
Inner<Wasm<Union>, Ethereum<Minimal>, lc!(Ethereum<Minimal> => Wasm<Union>)>: Serialize,
Inner<Ethereum<Minimal>, Wasm<Union>, lc!(Wasm<Union> => Ethereum<Minimal>)>: Serialize,
Inner<Wasm<Union>, Scroll, lc!(Scroll => Wasm<Union>)>: Serialize,
Inner<Scroll, Wasm<Union>, lc!(Wasm<Union> => Scroll)>: Serialize,
Inner<Wasm<Union>, Arbitrum, lc!(Arbitrum => Wasm<Union>)>: Serialize,
Inner<Arbitrum, Wasm<Union>, lc!(Wasm<Union> => Arbitrum)>: Serialize,
Inner<Wasm<Union>, Berachain, lc!(Berachain => Wasm<Union>)>: Serialize,
Inner<Berachain, Wasm<Union>, lc!(Wasm<Union> => Berachain)>: Serialize,
Inner<Union, Wasm<Cosmos>, lc!(Wasm<Cosmos> => Union)>: Serialize,
Inner<Wasm<Cosmos>, Union, lc!(Union => Wasm<Cosmos>)>: Serialize,
Inner<Union, Cosmos, lc!(Cosmos => Union)>: Serialize,
Inner<Cosmos, Union, lc!(Union => Cosmos)>: Serialize,
Inner<Cosmos, Cosmos, lc!(Cosmos => Cosmos)>: Serialize,
",
deserialize = "
Inner<Wasm<Union>, Ethereum<Mainnet>, lc!(Ethereum<Mainnet> => Wasm<Union>)>: Deserialize<'de>,
Inner<Ethereum<Mainnet>, Wasm<Union>, lc!(Wasm<Union> => Ethereum<Mainnet>)>: Deserialize<'de>,
Inner<Wasm<Union>, Ethereum<Minimal>, lc!(Ethereum<Minimal> => Wasm<Union>)>: Deserialize<'de>,
Inner<Ethereum<Minimal>, Wasm<Union>, lc!(Wasm<Union> => Ethereum<Minimal>)>: Deserialize<'de>,
Inner<Wasm<Union>, Scroll, lc!(Scroll => Wasm<Union>)>: Deserialize<'de>,
Inner<Scroll, Wasm<Union>, lc!(Wasm<Union> => Scroll)>: Deserialize<'de>,
Inner<Wasm<Union>, Arbitrum, lc!(Arbitrum => Wasm<Union>)>: Deserialize<'de>,
Inner<Arbitrum, Wasm<Union>, lc!(Wasm<Union> => Arbitrum)>: Deserialize<'de>,
Inner<Wasm<Union>, Berachain, lc!(Berachain => Wasm<Union>)>: Deserialize<'de>,
Inner<Berachain, Wasm<Union>, lc!(Wasm<Union> => Berachain)>: Deserialize<'de>,
Inner<Union, Wasm<Cosmos>, lc!(Wasm<Cosmos> => Union)>: Deserialize<'de>,
Inner<Wasm<Cosmos>, Union, lc!(Union => Wasm<Cosmos>)>: Deserialize<'de>,
Inner<Union, Cosmos, lc!(Cosmos => Union)>: Deserialize<'de>,
Inner<Cosmos, Union, lc!(Union => Cosmos)>: Deserialize<'de>,
Inner<Cosmos, Cosmos, lc!(Cosmos => Cosmos)>: Deserialize<'de>,
"
),
untagged,
deny_unknown_fields
)]
#[allow(clippy::large_enum_variant)]
enum AnyLightClientIdentifiedSerde<T: AnyLightClient> {
EthereumMainnetOnUnion(
Inner<Wasm<Union>, Ethereum<Mainnet>, lc!(Ethereum<Mainnet> => Wasm<Union>)>,
),
UnionOnEthereumMainnet(
Inner<Ethereum<Mainnet>, Wasm<Union>, lc!(Wasm<Union> => Ethereum<Mainnet>)>,
),
EthereumMinimalOnUnion(
Inner<Wasm<Union>, Ethereum<Minimal>, lc!(Ethereum<Minimal> => Wasm<Union>)>,
),
UnionOnEthereumMinimal(
Inner<Ethereum<Minimal>, Wasm<Union>, lc!(Wasm<Union> => Ethereum<Minimal>)>,
),
ScrollOnUnion(Inner<Wasm<Union>, Scroll, lc!(Scroll => Wasm<Union>)>),
UnionOnScroll(Inner<Scroll, Wasm<Union>, lc!(Wasm<Union> => Scroll)>),
ArbitrumOnUnion(Inner<Wasm<Union>, Arbitrum, lc!(Arbitrum => Wasm<Union>)>),
UnionOnArbitrum(Inner<Arbitrum, Wasm<Union>, lc!(Wasm<Union> => Arbitrum)>),
BerachainOnUnion(Inner<Wasm<Union>, Berachain, lc!(Berachain => Wasm<Union>)>),
UnionOnBerachain(Inner<Berachain, Wasm<Union>, lc!(Wasm<Union> => Berachain)>),
WasmCosmosOnUnion(Inner<Union, Wasm<Cosmos>, lc!(Wasm<Cosmos> => Union)>),
UnionOnWasmCosmos(Inner<Wasm<Cosmos>, Union, lc!(Union => Wasm<Cosmos>)>),
CosmosOnUnion(Inner<Union, Cosmos, lc!(Cosmos => Union)>),
UnionOnCosmos(Inner<Cosmos, Union, lc!(Union => Cosmos)>),
CosmosOnCosmos(Inner<Cosmos, Cosmos, lc!(Cosmos => Cosmos)>),
}
impl<T: AnyLightClient> From<AnyLightClientIdentified<T>> for AnyLightClientIdentifiedSerde<T> {
fn from(value: AnyLightClientIdentified<T>) -> Self {
any_lc! {
|value| Inner::new(value).into()
}
}
}
impl<T: AnyLightClient> From<AnyLightClientIdentifiedSerde<T>> for AnyLightClientIdentified<T> {
fn from(value: AnyLightClientIdentifiedSerde<T>) -> Self {
match value {
AnyLightClientIdentifiedSerde::EthereumMainnetOnUnion(t) => {
Self::EthereumMainnetOnUnion(t.inner)
}
AnyLightClientIdentifiedSerde::UnionOnEthereumMainnet(t) => {
Self::UnionOnEthereumMainnet(t.inner)
}
AnyLightClientIdentifiedSerde::EthereumMinimalOnUnion(t) => {
Self::EthereumMinimalOnUnion(t.inner)
}
AnyLightClientIdentifiedSerde::UnionOnEthereumMinimal(t) => {
Self::UnionOnEthereumMinimal(t.inner)
}
AnyLightClientIdentifiedSerde::ScrollOnUnion(t) => Self::ScrollOnUnion(t.inner),
AnyLightClientIdentifiedSerde::UnionOnScroll(t) => Self::UnionOnScroll(t.inner),
AnyLightClientIdentifiedSerde::ArbitrumOnUnion(t) => Self::ArbitrumOnUnion(t.inner),
AnyLightClientIdentifiedSerde::UnionOnArbitrum(t) => Self::UnionOnArbitrum(t.inner),
AnyLightClientIdentifiedSerde::BerachainOnUnion(t) => Self::BerachainOnUnion(t.inner),
AnyLightClientIdentifiedSerde::UnionOnBerachain(t) => Self::UnionOnBerachain(t.inner),
AnyLightClientIdentifiedSerde::WasmCosmosOnUnion(t) => Self::WasmCosmosOnUnion(t.inner),
AnyLightClientIdentifiedSerde::UnionOnWasmCosmos(t) => Self::UnionOnWasmCosmos(t.inner),
AnyLightClientIdentifiedSerde::CosmosOnCosmos(t) => Self::CosmosOnCosmos(t.inner),
AnyLightClientIdentifiedSerde::CosmosOnUnion(t) => Self::CosmosOnUnion(t.inner),
AnyLightClientIdentifiedSerde::UnionOnCosmos(t) => Self::UnionOnCosmos(t.inner),
}
}
}
#[macro_export]
macro_rules! identified {
($Ty:ident<$Hc:ty, $Tr:ty>) => {
$crate::Identified<$Hc, $Tr, $Ty<$Hc, $Tr>>
};
}
#[derive(DebugNoBound, thiserror::Error)]
pub enum LcError<Hc: ChainExt, Tr: ChainExt> {
#[error(transparent)]
Msg(Hc::MsgError),
__Marker(PhantomData<fn() -> Tr>),
}
#[derive(macros::Debug, Serialize, Deserialize)]
#[serde(
bound(
serialize = "T: ::serde::Serialize",
deserialize = "T: for<'d> Deserialize<'d>"
),
deny_unknown_fields
)]
// TODO: `T: AnyLightClient`
// prerequisites: derive macro for AnyLightClient
#[cfg_attr(
feature = "arbitrary",
derive(arbitrary::Arbitrary),
arbitrary(bound = "T: arbitrary::Arbitrary<'arbitrary>")
)]
pub struct Identified<Hc: Chain, Tr, T> {
pub chain_id: ChainIdOf<Hc>,
pub t: T,
#[serde(skip)]
#[debug(skip)]
#[cfg_attr(feature = "arbitrary", arbitrary(default))]
pub __marker: PhantomData<fn() -> Tr>,
}
impl<Hc: Chain, Tr, Data: PartialEq> PartialEq for Identified<Hc, Tr, Data> {
fn eq(&self, other: &Self) -> bool {
self.chain_id == other.chain_id && self.t == other.t
}
}
impl<Hc: Chain, Tr, Data: Clone> Clone for Identified<Hc, Tr, Data> {
fn clone(&self) -> Self {
Self {
chain_id: self.chain_id.clone(),
t: self.t.clone(),
__marker: PhantomData,
}
}
}
pub fn id<Hc: Chain, Tr, T>(chain_id: ChainIdOf<Hc>, t: T) -> Identified<Hc, Tr, T> {
Identified {
chain_id,
t,
__marker: PhantomData,
}
}
pub trait DoAggregate: Sized + Debug + Clone + PartialEq {
fn do_aggregate(_: Self, _: VecDeque<AnyLightClientIdentified<AnyData>>) -> Op<RelayMessage>;
}
impl<Hc: Chain, Tr> DoAggregate for Identified<Hc, Tr, Never> {
fn do_aggregate(s: Self, _: VecDeque<AnyLightClientIdentified<AnyData>>) -> Op<RelayMessage> {
match s.t {}
}
}
pub trait DoFetchState<Hc: ChainExt, Tr: ChainExt>: ChainExt {
type QueryUnfinalizedTrustedClientStateError: Debug
+ Clone
+ PartialEq
+ std::error::Error
+ Send
+ Sync;
fn state(hc: &Hc, at: Hc::Height, path: PathOf<Hc, Tr>) -> Op<RelayMessage>;
// SEE: <https://github.com/unionlabs/union/issues/1813>
fn query_unfinalized_trusted_client_state(
hc: &Hc,
client_id: Hc::ClientId,
) -> impl Future<
Output = Result<Hc::StoredClientState<Tr>, Self::QueryUnfinalizedTrustedClientStateError>,
> + '_;
}
pub trait DoFetchProof<Hc: ChainExt, Tr: ChainExt>: ChainExt {
fn proof(hc: &Hc, at: HeightOf<Hc>, path: PathOf<Hc, Tr>) -> Op<RelayMessage>;
}
pub trait DoFetchUpdateHeaders<Hc: ChainExt, Tr: ChainExt>: ChainExt {
fn fetch_update_headers(hc: &Hc, update_info: FetchUpdateHeaders<Hc, Tr>) -> Op<RelayMessage>;
}
pub trait DoMsg<Hc: ChainExt, Tr: ChainExt>: ChainExt {
fn msg(
&self,
msg: Effect<Hc, Tr>,
) -> impl Future<Output = Result<Op<RelayMessage>, Self::MsgError>> + Send + '_;
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(
bound(serialize = "T: Serialize", deserialize = "T: for<'d> Deserialize<'d>"),
deny_unknown_fields
)]
struct Inner<Hc: Chain, Tr: Chain, T> {
#[serde(rename = "@host_chain", with = "::unionlabs::traits::from_str_exact")]
host_chain: Hc::ChainType,
#[serde(rename = "@tracking", with = "::unionlabs::traits::from_str_exact")]
tracking: Tr::ChainType,
#[serde(rename = "@value")]
inner: T,
}
impl<Hc: Chain, Tr: Chain, T> Inner<Hc, Tr, T> {
fn new(s: T) -> Inner<Hc, Tr, T> {
Self {
host_chain: Hc::ChainType::default(),
tracking: Tr::ChainType::default(),
inner: s,
}
}
}
macro_rules! any_lc {
(|$msg:ident| $expr:expr) => {
match $msg {
AnyLightClientIdentified::EthereumMainnetOnUnion($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::wasm::Wasm<chain_utils::union::Union>;
#[allow(dead_code)]
type Tr = chain_utils::ethereum::Ethereum<unionlabs::ethereum::config::Mainnet>;
$expr
}
AnyLightClientIdentified::UnionOnEthereumMainnet($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::ethereum::Ethereum<unionlabs::ethereum::config::Mainnet>;
#[allow(dead_code)]
type Tr = chain_utils::wasm::Wasm<chain_utils::union::Union>;
$expr
}
AnyLightClientIdentified::EthereumMinimalOnUnion($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::wasm::Wasm<chain_utils::union::Union>;
#[allow(dead_code)]
type Tr = chain_utils::ethereum::Ethereum<unionlabs::ethereum::config::Minimal>;
$expr
}
AnyLightClientIdentified::UnionOnEthereumMinimal($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::ethereum::Ethereum<unionlabs::ethereum::config::Minimal>;
#[allow(dead_code)]
type Tr = chain_utils::wasm::Wasm<chain_utils::union::Union>;
$expr
}
AnyLightClientIdentified::ScrollOnUnion($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::wasm::Wasm<chain_utils::union::Union>;
#[allow(dead_code)]
type Tr = chain_utils::scroll::Scroll;
$expr
}
AnyLightClientIdentified::UnionOnScroll($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::scroll::Scroll;
#[allow(dead_code)]
type Tr = chain_utils::wasm::Wasm<chain_utils::union::Union>;
$expr
}
AnyLightClientIdentified::ArbitrumOnUnion($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::wasm::Wasm<chain_utils::union::Union>;
#[allow(dead_code)]
type Tr = chain_utils::arbitrum::Arbitrum;
$expr
}
AnyLightClientIdentified::UnionOnArbitrum($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::arbitrum::Arbitrum;
#[allow(dead_code)]
type Tr = chain_utils::wasm::Wasm<chain_utils::union::Union>;
$expr
}
AnyLightClientIdentified::BerachainOnUnion($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::wasm::Wasm<chain_utils::union::Union>;
#[allow(dead_code)]
type Tr = chain_utils::berachain::Berachain;
$expr
}
AnyLightClientIdentified::UnionOnBerachain($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::berachain::Berachain;
#[allow(dead_code)]
type Tr = chain_utils::wasm::Wasm<chain_utils::union::Union>;
$expr
}
AnyLightClientIdentified::WasmCosmosOnUnion($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::union::Union;
#[allow(dead_code)]
type Tr = chain_utils::wasm::Wasm<chain_utils::cosmos::Cosmos>;
$expr
}
AnyLightClientIdentified::UnionOnWasmCosmos($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::wasm::Wasm<chain_utils::cosmos::Cosmos>;
#[allow(dead_code)]
type Tr = chain_utils::union::Union;
$expr
}
AnyLightClientIdentified::CosmosOnUnion($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::union::Union;
#[allow(dead_code)]
type Tr = chain_utils::cosmos::Cosmos;
$expr
}
AnyLightClientIdentified::UnionOnCosmos($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::cosmos::Cosmos;
#[allow(dead_code)]
type Tr = chain_utils::union::Union;
$expr
}
AnyLightClientIdentified::CosmosOnCosmos($msg) => {
#[allow(dead_code)]
type Hc = chain_utils::cosmos::Cosmos;
#[allow(dead_code)]
type Tr = chain_utils::cosmos::Cosmos;
$expr
}
}
};
}
pub(crate) use any_lc;
mod sanity_checks {
use chain_utils::{cosmos::Cosmos, ethereum::Ethereum, union::Union, wasm::Wasm};
use queue_msg::aggregation::UseAggregate;
use static_assertions::assert_impl_all;
use unionlabs::ethereum::config::Mainnet;
use crate::{
aggregate::AggregateMsgConnectionOpenTry, chain::union::UnionFetch, fetch::DoFetch,
DoFetchState, RelayMessage,
};
assert_impl_all!(Wasm<Cosmos>: DoFetchState<Wasm<Cosmos>, Union>);
assert_impl_all!(identified!(AggregateMsgConnectionOpenTry<Wasm<Cosmos>, Union>): UseAggregate<RelayMessage>);
assert_impl_all!(UnionFetch<Wasm<Union>, Ethereum<Mainnet>>: DoFetch<Wasm<Union>>);
}
#[cfg(test)]
mod tests {
use hex_literal::hex;
use unionlabs::{hash::H256, ibc::core::client::height::Height};
use super::*;
use crate::{chain::scroll::ScrollData, data::Data};
#[test]
fn serde() {
let expected_json =
serde_json::to_string_pretty(&Data::<Scroll, Wasm<Union>>::specific(ScrollData::CommitBatchTransactionInput(
chain::scroll::CommitBatchTransactionInput {
height: Height {
revision_number: 0,
revision_height: 4846816,
},
batch_index: 70133,
calldata: hex_literal::hex!("1325aca00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000008c6000000000000000000000000000000000000000000000000000000000000000790100000000000111f4000000000000000000000000000fe405fbacc987e7de390501620837ba1e41f75bac2c2b7d000f75e2faffe788ba604601fc76d357b024e757ec6675fb6025c3aeecd166900598b22c5b0c5b8f65a9a1f8bfe15b0f7fe61c68a641727337a9e51f0fb66e79d2cf386761133b618fb94e0000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000004d000000000000000000000000000000000000000000000000000000000000005ce000000000000000000000000000000000000000000000000000000000000069400000000000000000000000000000000000000000000000000000000000007ac000000000000000000000000000000000000000000000000000000000000013395200000000003cc5f9000000006627e3e9000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc5fa000000006627e3ec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc5fb000000006627e3ef000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc5fc000000006627e3f2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc5fd000000006627e3f5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc5fe000000006627e3f8000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc5ff000000006627e3fb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc600000000006627e3fe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc601000000006627e401000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc602000000006627e404000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc603000000006627e407000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc604000000006627e40a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc605000000006627e40d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc606000000006627e410000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc607000000006627e413000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc608000000006627e416000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc609000000006627e419000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60a000000006627e41c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60b000000006627e41f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60c000000006627e422000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc60d000000006627e425000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60e000000006627e428000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60f000000006627e42b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc610000000006627e42e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc611000000006627e431000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc612000000006627e434000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc613000000006627e437000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc614000000006627e43a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc615000000006627e43d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc616000000006627e441000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc617000000006627e444000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc618000000006627e447000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc619000000006627e44a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc61a000000006627e44d000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc61b000000006627e450000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc61c000000006627e453000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc61d000000006627e456000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc61e000000006627e459000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc61f000000006627e45c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc620000000006627e45f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc621000000006627e462000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc622000000006627e465000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc623000000006627e468000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc624000000006627e46b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc625000000006627e46e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc626000000006627e471000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc627000000006627e474000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc628000000006627e477000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc629000000006627e47a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62a000000006627e47d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62b000000006627e480000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62c000000006627e483000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62d000000006627e486000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62e000000006627e489000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62f000000006627e48c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc630000000006627e48f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc631000000006627e492000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc632000000006627e495000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc633000000006627e498000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc634000000006627e49b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc635000000006627e49e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc636000000006627e4a1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc637000000006627e4a4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc638000000006627e4a7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc639000000006627e4aa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63a000000006627e4ad000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc63b000000006627e4b0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63c000000006627e4b3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63d000000006627e4b6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63e000000006627e4b9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63f000000006627e4bc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc640000000006627e4bf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc641000000006627e4c2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc642000000006627e4c5000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc643000000006627e4c8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc644000000006627e4cb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc645000000006627e4ce000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc646000000006627e4d1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc647000000006627e4d4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc648000000006627e4d7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc649000000006627e4da000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64a000000006627e4dd00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000000000000000000000000000000000000000000000000000000000000000013b15400000000003cc64b000000006627e4e0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64c000000006627e4e3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64d000000006627e4e6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64e000000006627e4e9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64f000000006627e4ec000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc650000000006627e4ef000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc651000000006627e4f2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc652000000006627e4f5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc653000000006627e4f8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc654000000006627e4fb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc655000000006627e4fe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc656000000006627e501000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc657000000006627e504000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc658000000006627e507000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc659000000006627e50a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65a000000006627e50d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65b000000006627e510000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65c000000006627e513000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65d000000006627e516000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65e000000006627e519000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65f000000006627e51c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc660000000006627e51f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc661000000006627e522000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc662000000006627e525000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc663000000006627e529000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc664000000006627e52c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc665000000006627e52f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc666000000006627e532000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc667000000006627e535000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc668000000006627e538000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc669000000006627e53b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66a000000006627e53e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66b000000006627e541000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66c000000006627e544000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66d000000006627e547000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66e000000006627e54a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66f000000006627e54d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc670000000006627e550000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc671000000006627e553000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc672000000006627e556000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc673000000006627e559000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc674000000006627e55c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc675000000006627e55f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc676000000006627e562000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc677000000006627e565000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc678000000006627e568000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc679000000006627e56b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67a000000006627e56e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67b000000006627e571000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67c000000006627e574000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67d000000006627e577000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67e000000006627e57a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc67f000000006627e57d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc680000000006627e580000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc681000000006627e583000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc682000000006627e586000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc683000000006627e589000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc684000000006627e58c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc685000000006627e58f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc686000000006627e592000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc687000000006627e595000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc688000000006627e598000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc689000000006627e59b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68a000000006627e59e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68b000000006627e5a1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68c000000006627e5a5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68d000000006627e5a8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68e000000006627e5ab000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc68f000000006627e5ae000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc690000000006627e5b1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc691000000006627e5b4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc692000000006627e5b7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc693000000006627e5ba000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc694000000006627e5bd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc695000000006627e5c0000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc696000000006627e5c3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc697000000006627e5c6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc698000000006627e5c9000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc699000000006627e5cc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc69a000000006627e5cf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc69b000000006627e5d2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc69c000000006627e5d5000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc69d000000006627e5d8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc69e000000006627e5db000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012854f00000000003cc69f000000006627e5de000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a0000000006627e5e1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a1000000006627e5e4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a2000000006627e5e7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a3000000006627e5ea000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a4000000006627e5ed000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a5000000006627e5f0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a6000000006627e5f3000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc6a7000000006627e5f6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a8000000006627e5f9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a9000000006627e5fc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6aa000000006627e5ff000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ab000000006627e602000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ac000000006627e605000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ad000000006627e608000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6ae000000006627e60b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6af000000006627e60e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b0000000006627e612000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b1000000006627e615000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6b2000000006627e618000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b3000000006627e61b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b4000000006627e61e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b5000000006627e621000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b6000000006627e624000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6b7000000006627e627000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b8000000006627e62a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b9000000006627e62d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ba000000006627e630000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6bb000000006627e633000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6bc000000006627e636000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6bd000000006627e639000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6be000000006627e63c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6bf000000006627e63f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c0000000006627e642000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c1000000006627e645000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c2000000006627e648000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c3000000006627e64b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c4000000006627e64e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c5000000006627e651000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6c6000000006627e654000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc6c7000000006627e657000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c8000000006627e65a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c9000000006627e65d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ca000000006627e660000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc6cb000000006627e663000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6cc000000006627e666000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6cd000000006627e669000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ce000000006627e66c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6cf000000006627e66f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6d0000000006627e672000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d1000000006627e675000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d2000000006627e679000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d3000000006627e67c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d4000000006627e67f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d5000000006627e682000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d6000000006627e685000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d7000000006627e688000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d8000000006627e68b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d9000000006627e68e000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6da000000006627e691000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6db000000006627e694000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6dc000000006627e697000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6dd000000006627e69a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6de000000006627e69d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6df000000006627e6a0000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6e0000000006627e6a3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e1000000006627e6a6000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6e2000000006627e6a9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e3000000006627e6ac000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e4000000006627e6af000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e5000000006627e6b2000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6e6000000006627e6b5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e7000000006627e6b8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e8000000006627e6bb000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6e9000000006627e6be000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ea000000006627e6c1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6eb000000006627e6c4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ec000000006627e6c7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ed000000006627e6ca000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d14c00000000003cc6ee000000006627e6cd000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6ef000000006627e6d0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f0000000006627e6d3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f1000000006627e6d6000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6f2000000006627e6d9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f3000000006627e6dc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f4000000006627e6df000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f5000000006627e6e2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f6000000006627e6e6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f7000000006627e6e9000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6f8000000006627e6ec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f9000000006627e6ef000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6fa000000006627e6f2000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6fb000000006627e6f5000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6fc000000006627e6f8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6fd000000006627e6fb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6fe000000006627e6fe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ff000000006627e701000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc700000000006627e704000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc701000000006627e707000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc702000000006627e70a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc703000000006627e70d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc704000000006627e710000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc705000000006627e713000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc706000000006627e716000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc707000000006627e719000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc708000000006627e71c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc709000000006627e71f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc70a000000006627e722000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc70b000000006627e725000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc70c000000006627e728000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc70d000000006627e72b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc70e000000006627e72e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc70f000000006627e731000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc710000000006627e734000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc711000000006627e737000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc712000000006627e73a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc713000000006627e73d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc714000000006627e740000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc715000000006627e743000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc716000000006627e746000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc717000000006627e749000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc718000000006627e74c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc719000000006627e74f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc71a000000006627e752000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc71b000000006627e755000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc71c000000006627e759000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc71d000000006627e75c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc71e000000006627e75f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc71f000000006627e762000000000000000000000000000000000000000000000000000000000000000000000000009896800002000100000000003cc720000000006627e765000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc721000000006627e768000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc722000000006627e76b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc723000000006627e76e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc724000000006627e771000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc725000000006627e774000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc726000000006627e777000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc727000000006627e77a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc728000000006627e77d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc729000000006627e780000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72a000000006627e783000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72b000000006627e786000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72c000000006627e789000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72d000000006627e78c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72e000000006627e78f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72f000000006627e792000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc730000000006627e795000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc731000000006627e798000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc732000000006627e79b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc733000000006627e79e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc734000000006627e7a1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc735000000006627e7a4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc736000000006627e7a7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc737000000006627e7aa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc738000000006627e7ad000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc739000000006627e7b000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fb54300000000003cc73a000000006627e7b3000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc73b000000006627e7b6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc73c000000006627e7b9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc73d000000006627e7bc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc73e000000006627e7bf000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc73f000000006627e7c2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc740000000006627e7c5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc741000000006627e7c8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc742000000006627e7cb000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc743000000006627e7ce000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc744000000006627e7d1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc745000000006627e7d4000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc746000000006627e7d7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc747000000006627e7da000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc748000000006627e7dd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc749000000006627e7e0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc74a000000006627e7e3000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc74b000000006627e7e6000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc74c000000006627e7e9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc74d000000006627e7ec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc74e000000006627e7ef000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc74f000000006627e7f2000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc750000000006627e7f5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc751000000006627e7f8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc752000000006627e7fb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc753000000006627e7fe000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc754000000006627e801000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc755000000006627e804000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc756000000006627e807000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc757000000006627e80a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc758000000006627e80d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc759000000006627e810000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75a000000006627e813000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75b000000006627e816000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75c000000006627e819000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75d000000006627e81c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75e000000006627e81f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75f000000006627e822000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc760000000006627e825000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc761000000006627e828000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc762000000006627e82b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc763000000006627e82e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc764000000006627e831000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc765000000006627e834000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc766000000006627e837000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc767000000006627e83a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc768000000006627e83d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc769000000006627e840000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76a000000006627e843000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76b000000006627e846000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc76c000000006627e849000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76d000000006627e84c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76e000000006627e84f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76f000000006627e852000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc770000000006627e855000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc771000000006627e858000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc772000000006627e85b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc773000000006627e85e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc774000000006627e861000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc775000000006627e864000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc776000000006627e867000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc777000000006627e86a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc778000000006627e86d000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc779000000006627e870000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc77a000000006627e874000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc77b000000006627e877000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc77c000000006627e87a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c313400000000003cc77d000000006627e87d000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc77e000000006627e880000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc77f000000006627e883000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc780000000006627e886000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc781000000006627e889000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc782000000006627e88c000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc783000000006627e88f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc784000000006627e892000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc785000000006627e895000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc786000000006627e898000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc787000000006627e89b000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc788000000006627e89e000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc789000000006627e8a1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78a000000006627e8a4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78b000000006627e8a7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78c000000006627e8aa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78d000000006627e8ad000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc78e000000006627e8b0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78f000000006627e8b4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc790000000006627e8b7000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc791000000006627e8ba000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc792000000006627e8bd000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc793000000006627e8c0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc794000000006627e8c3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc795000000006627e8c6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc796000000006627e8c9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc797000000006627e8cc000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc798000000006627e8cf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc799000000006627e8d2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc79a000000006627e8d5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc79b000000006627e8d8000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc79c000000006627e8db000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc79d000000006627e8de000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc79e000000006627e8e1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc79f000000006627e8e4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a0000000006627e8e7000000000000000000000000000000000000000000000000000000000000000000000000009896800004000300000000003cc7a1000000006627e8ed000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a2000000006627e8f0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a3000000006627e8f3000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7a4000000006627e8f6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a5000000006627e8f9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a6000000006627e8fc000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7a7000000006627e8ff000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a8000000006627e902000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a9000000006627e906000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7aa000000006627e909000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7ab000000006627e90c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ac000000006627e90f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ad000000006627e912000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7ae000000006627e915000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7af000000006627e918000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7b0000000006627e91b000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011594a00000000003cc7b1000000006627e91e000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7b2000000006627e921000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b3000000006627e924000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b4000000006627e927000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b5000000006627e92a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7b6000000006627e92d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b7000000006627e930000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b8000000006627e933000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b9000000006627e936000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ba000000006627e939000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7bb000000006627e93c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7bc000000006627e93f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7bd000000006627e942000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7be000000006627e945000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7bf000000006627e948000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c0000000006627e94b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c1000000006627e94e000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7c2000000006627e951000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7c3000000006627e954000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c4000000006627e957000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c5000000006627e95a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c6000000006627e95d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c7000000006627e960000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c8000000006627e963000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c9000000006627e966000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ca000000006627e96a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7cb000000006627e96d000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc7cc000000006627e970000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7cd000000006627e973000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ce000000006627e976000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7cf000000006627e979000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d0000000006627e97c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d1000000006627e97f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d2000000006627e982000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d3000000006627e985000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7d4000000006627e988000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d5000000006627e98b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d6000000006627e98e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d7000000006627e991000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7d8000000006627e994000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7d9000000006627e997000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7da000000006627e99a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7db000000006627e99d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7dc000000006627e9a0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7dd000000006627e9a3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7de000000006627e9a6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7df000000006627e9a9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e0000000006627e9ac000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e1000000006627e9af000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e2000000006627e9b2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e3000000006627e9b5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e4000000006627e9b8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e5000000006627e9bb000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7e6000000006627e9be000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e7000000006627e9c1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e8000000006627e9c4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e9000000006627e9c7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ea000000006627e9ca000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7eb000000006627e9ce000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ec000000006627e9d1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7ed000000006627e9d4000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7ee000000006627e9d7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ef000000006627e9da000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f0000000006627e9dd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f1000000006627e9e0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f2000000006627e9e3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f3000000006627e9e6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f4000000006627e9e9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f5000000006627e9ec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f6000000006627e9ef000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7f7000000006627e9f2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f8000000006627e9f5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f9000000006627e9f8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7fa000000006627e9fb000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000000000000000000000000000000000000000000000000000000000000000000000102d4500000000003cc7fb000000006627e9fe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7fc000000006627ea01000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7fd000000006627ea04000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7fe000000006627ea07000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ff000000006627ea0a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc800000000006627ea0d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc801000000006627ea10000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc802000000006627ea13000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc803000000006627ea16000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc804000000006627ea19000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc805000000006627ea1c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc806000000006627ea1f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc807000000006627ea22000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc808000000006627ea25000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc809000000006627ea28000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc80a000000006627ea2b000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc80b000000006627ea2e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc80c000000006627ea31000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc80d000000006627ea34000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc80e000000006627ea37000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc80f000000006627ea3a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc810000000006627ea3d000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc811000000006627ea40000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc812000000006627ea43000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc813000000006627ea46000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc814000000006627ea49000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc815000000006627ea4c000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc816000000006627ea4f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc817000000006627ea52000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc818000000006627ea55000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc819000000006627ea58000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc81a000000006627ea5b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc81b000000006627ea5e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc81c000000006627ea61000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc81d000000006627ea64000000000000000000000000000000000000000000000000000000000000000000000000009896800002000100000000003cc81e000000006627ea67000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc81f000000006627ea6a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc820000000006627ea6d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc821000000006627ea70000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc822000000006627ea73000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc823000000006627ea76000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc824000000006627ea79000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc825000000006627ea7c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc826000000006627ea80000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc827000000006627ea83000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc828000000006627ea86000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc829000000006627ea89000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc82a000000006627ea8c000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc82b000000006627ea8f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc82c000000006627ea92000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc82d000000006627ea95000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc82e000000006627ea98000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc82f000000006627ea9b000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc830000000006627ea9e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc831000000006627eaa1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc832000000006627eaa4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc833000000006627eaa7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc834000000006627eaaa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc835000000006627eaad000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc836000000006627eab0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc837000000006627eab3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc838000000006627eab6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc839000000006627eab9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc83a000000006627eabc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc83b000000006627eabf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc83c000000006627eac2000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc83d000000006627eac6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc83e000000006627eac9000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc83f000000006627eacc00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000").to_vec(),
message_hashes: [
(1041413, H256(hex!("2309c1909b298c03f5b2c4531b75ce924a18f8f01ecd11706c046bf5be121121"))),
(1041414, H256(hex!("5a10e631df8a1843b077d6bfa04157a9e4ebcad949c594bec13fd5fc91987e9a"))),
(1041415, H256(hex!("b01db83451d4edab828943ad9dea86ac05b50d1f6bcedd4a2fde88d6d598d102"))),
(1041416, H256(hex!("6cd3b0b235cd2b5170a37871354a31847ed5caa21320d59fcdbe89d532fcc161"))),
(1041417, H256(hex!("e11ab5fae2c94c6a509afebbdadc0104ef1d560000275a8532b18571e4886e33")))
].into_iter().collect(),
blob_versioned_hash: Some(H256(hex!("0127c42381cb4014aeaa54fcc188be37d9aa9a5aa1e79fd01aaad7dd37c8575d"))),
__marker: PhantomData,
},
)))
.unwrap();
println!("{expected_json}");
let json = r#"
{
"@type": "commit_batch_transaction_input",
"@value": {
"height": {
"revision_height": 4846816,
"revision_number": 0
},
"calldata": "0x1325aca00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000008c6000000000000000000000000000000000000000000000000000000000000000790100000000000111f4000000000000000000000000000fe405fbacc987e7de390501620837ba1e41f75bac2c2b7d000f75e2faffe788ba604601fc76d357b024e757ec6675fb6025c3aeecd166900598b22c5b0c5b8f65a9a1f8bfe15b0f7fe61c68a641727337a9e51f0fb66e79d2cf386761133b618fb94e0000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000004d000000000000000000000000000000000000000000000000000000000000005ce000000000000000000000000000000000000000000000000000000000000069400000000000000000000000000000000000000000000000000000000000007ac000000000000000000000000000000000000000000000000000000000000013395200000000003cc5f9000000006627e3e9000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc5fa000000006627e3ec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc5fb000000006627e3ef000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc5fc000000006627e3f2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc5fd000000006627e3f5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc5fe000000006627e3f8000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc5ff000000006627e3fb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc600000000006627e3fe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc601000000006627e401000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc602000000006627e404000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc603000000006627e407000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc604000000006627e40a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc605000000006627e40d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc606000000006627e410000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc607000000006627e413000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc608000000006627e416000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc609000000006627e419000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60a000000006627e41c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60b000000006627e41f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60c000000006627e422000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc60d000000006627e425000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60e000000006627e428000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc60f000000006627e42b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc610000000006627e42e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc611000000006627e431000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc612000000006627e434000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc613000000006627e437000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc614000000006627e43a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc615000000006627e43d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc616000000006627e441000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc617000000006627e444000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc618000000006627e447000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc619000000006627e44a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc61a000000006627e44d000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc61b000000006627e450000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc61c000000006627e453000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc61d000000006627e456000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc61e000000006627e459000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc61f000000006627e45c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc620000000006627e45f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc621000000006627e462000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc622000000006627e465000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc623000000006627e468000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc624000000006627e46b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc625000000006627e46e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc626000000006627e471000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc627000000006627e474000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc628000000006627e477000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc629000000006627e47a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62a000000006627e47d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62b000000006627e480000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62c000000006627e483000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62d000000006627e486000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62e000000006627e489000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc62f000000006627e48c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc630000000006627e48f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc631000000006627e492000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc632000000006627e495000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc633000000006627e498000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc634000000006627e49b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc635000000006627e49e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc636000000006627e4a1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc637000000006627e4a4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc638000000006627e4a7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc639000000006627e4aa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63a000000006627e4ad000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc63b000000006627e4b0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63c000000006627e4b3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63d000000006627e4b6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63e000000006627e4b9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc63f000000006627e4bc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc640000000006627e4bf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc641000000006627e4c2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc642000000006627e4c5000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc643000000006627e4c8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc644000000006627e4cb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc645000000006627e4ce000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc646000000006627e4d1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc647000000006627e4d4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc648000000006627e4d7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc649000000006627e4da000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64a000000006627e4dd00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000000000000000000000000000000000000000000000000000000000000000013b15400000000003cc64b000000006627e4e0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64c000000006627e4e3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64d000000006627e4e6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64e000000006627e4e9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc64f000000006627e4ec000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc650000000006627e4ef000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc651000000006627e4f2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc652000000006627e4f5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc653000000006627e4f8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc654000000006627e4fb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc655000000006627e4fe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc656000000006627e501000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc657000000006627e504000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc658000000006627e507000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc659000000006627e50a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65a000000006627e50d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65b000000006627e510000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65c000000006627e513000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65d000000006627e516000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65e000000006627e519000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc65f000000006627e51c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc660000000006627e51f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc661000000006627e522000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc662000000006627e525000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc663000000006627e529000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc664000000006627e52c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc665000000006627e52f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc666000000006627e532000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc667000000006627e535000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc668000000006627e538000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc669000000006627e53b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66a000000006627e53e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66b000000006627e541000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66c000000006627e544000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66d000000006627e547000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66e000000006627e54a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc66f000000006627e54d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc670000000006627e550000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc671000000006627e553000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc672000000006627e556000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc673000000006627e559000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc674000000006627e55c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc675000000006627e55f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc676000000006627e562000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc677000000006627e565000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc678000000006627e568000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc679000000006627e56b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67a000000006627e56e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67b000000006627e571000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67c000000006627e574000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67d000000006627e577000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc67e000000006627e57a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc67f000000006627e57d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc680000000006627e580000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc681000000006627e583000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc682000000006627e586000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc683000000006627e589000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc684000000006627e58c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc685000000006627e58f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc686000000006627e592000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc687000000006627e595000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc688000000006627e598000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc689000000006627e59b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68a000000006627e59e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68b000000006627e5a1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68c000000006627e5a5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68d000000006627e5a8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc68e000000006627e5ab000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc68f000000006627e5ae000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc690000000006627e5b1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc691000000006627e5b4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc692000000006627e5b7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc693000000006627e5ba000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc694000000006627e5bd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc695000000006627e5c0000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc696000000006627e5c3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc697000000006627e5c6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc698000000006627e5c9000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc699000000006627e5cc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc69a000000006627e5cf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc69b000000006627e5d2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc69c000000006627e5d5000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc69d000000006627e5d8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc69e000000006627e5db000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012854f00000000003cc69f000000006627e5de000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a0000000006627e5e1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a1000000006627e5e4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a2000000006627e5e7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a3000000006627e5ea000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a4000000006627e5ed000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a5000000006627e5f0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a6000000006627e5f3000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc6a7000000006627e5f6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a8000000006627e5f9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6a9000000006627e5fc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6aa000000006627e5ff000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ab000000006627e602000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ac000000006627e605000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ad000000006627e608000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6ae000000006627e60b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6af000000006627e60e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b0000000006627e612000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b1000000006627e615000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6b2000000006627e618000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b3000000006627e61b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b4000000006627e61e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b5000000006627e621000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b6000000006627e624000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6b7000000006627e627000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b8000000006627e62a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6b9000000006627e62d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ba000000006627e630000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6bb000000006627e633000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6bc000000006627e636000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6bd000000006627e639000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6be000000006627e63c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6bf000000006627e63f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c0000000006627e642000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c1000000006627e645000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c2000000006627e648000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c3000000006627e64b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c4000000006627e64e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c5000000006627e651000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6c6000000006627e654000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc6c7000000006627e657000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c8000000006627e65a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6c9000000006627e65d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ca000000006627e660000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc6cb000000006627e663000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6cc000000006627e666000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6cd000000006627e669000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ce000000006627e66c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6cf000000006627e66f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6d0000000006627e672000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d1000000006627e675000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d2000000006627e679000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d3000000006627e67c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d4000000006627e67f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d5000000006627e682000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d6000000006627e685000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d7000000006627e688000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d8000000006627e68b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6d9000000006627e68e000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6da000000006627e691000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6db000000006627e694000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6dc000000006627e697000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6dd000000006627e69a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6de000000006627e69d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6df000000006627e6a0000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6e0000000006627e6a3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e1000000006627e6a6000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6e2000000006627e6a9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e3000000006627e6ac000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e4000000006627e6af000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e5000000006627e6b2000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6e6000000006627e6b5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e7000000006627e6b8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6e8000000006627e6bb000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6e9000000006627e6be000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ea000000006627e6c1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6eb000000006627e6c4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ec000000006627e6c7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ed000000006627e6ca000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d14c00000000003cc6ee000000006627e6cd000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6ef000000006627e6d0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f0000000006627e6d3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f1000000006627e6d6000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6f2000000006627e6d9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f3000000006627e6dc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f4000000006627e6df000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f5000000006627e6e2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f6000000006627e6e6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f7000000006627e6e9000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6f8000000006627e6ec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6f9000000006627e6ef000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6fa000000006627e6f2000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6fb000000006627e6f5000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc6fc000000006627e6f8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6fd000000006627e6fb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6fe000000006627e6fe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc6ff000000006627e701000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc700000000006627e704000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc701000000006627e707000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc702000000006627e70a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc703000000006627e70d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc704000000006627e710000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc705000000006627e713000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc706000000006627e716000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc707000000006627e719000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc708000000006627e71c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc709000000006627e71f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc70a000000006627e722000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc70b000000006627e725000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc70c000000006627e728000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc70d000000006627e72b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc70e000000006627e72e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc70f000000006627e731000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc710000000006627e734000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc711000000006627e737000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc712000000006627e73a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc713000000006627e73d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc714000000006627e740000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc715000000006627e743000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc716000000006627e746000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc717000000006627e749000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc718000000006627e74c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc719000000006627e74f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc71a000000006627e752000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc71b000000006627e755000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc71c000000006627e759000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc71d000000006627e75c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc71e000000006627e75f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc71f000000006627e762000000000000000000000000000000000000000000000000000000000000000000000000009896800002000100000000003cc720000000006627e765000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc721000000006627e768000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc722000000006627e76b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc723000000006627e76e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc724000000006627e771000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc725000000006627e774000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc726000000006627e777000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc727000000006627e77a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc728000000006627e77d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc729000000006627e780000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72a000000006627e783000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72b000000006627e786000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72c000000006627e789000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72d000000006627e78c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72e000000006627e78f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc72f000000006627e792000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc730000000006627e795000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc731000000006627e798000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc732000000006627e79b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc733000000006627e79e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc734000000006627e7a1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc735000000006627e7a4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc736000000006627e7a7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc737000000006627e7aa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc738000000006627e7ad000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc739000000006627e7b000000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fb54300000000003cc73a000000006627e7b3000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc73b000000006627e7b6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc73c000000006627e7b9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc73d000000006627e7bc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc73e000000006627e7bf000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc73f000000006627e7c2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc740000000006627e7c5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc741000000006627e7c8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc742000000006627e7cb000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc743000000006627e7ce000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc744000000006627e7d1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc745000000006627e7d4000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc746000000006627e7d7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc747000000006627e7da000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc748000000006627e7dd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc749000000006627e7e0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc74a000000006627e7e3000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc74b000000006627e7e6000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc74c000000006627e7e9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc74d000000006627e7ec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc74e000000006627e7ef000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc74f000000006627e7f2000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc750000000006627e7f5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc751000000006627e7f8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc752000000006627e7fb000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc753000000006627e7fe000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc754000000006627e801000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc755000000006627e804000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc756000000006627e807000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc757000000006627e80a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc758000000006627e80d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc759000000006627e810000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75a000000006627e813000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75b000000006627e816000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75c000000006627e819000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75d000000006627e81c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75e000000006627e81f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc75f000000006627e822000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc760000000006627e825000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc761000000006627e828000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc762000000006627e82b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc763000000006627e82e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc764000000006627e831000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc765000000006627e834000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc766000000006627e837000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc767000000006627e83a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc768000000006627e83d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc769000000006627e840000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76a000000006627e843000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76b000000006627e846000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc76c000000006627e849000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76d000000006627e84c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76e000000006627e84f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc76f000000006627e852000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc770000000006627e855000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc771000000006627e858000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc772000000006627e85b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc773000000006627e85e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc774000000006627e861000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc775000000006627e864000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc776000000006627e867000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc777000000006627e86a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc778000000006627e86d000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc779000000006627e870000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc77a000000006627e874000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc77b000000006627e877000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc77c000000006627e87a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c313400000000003cc77d000000006627e87d000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc77e000000006627e880000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc77f000000006627e883000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc780000000006627e886000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc781000000006627e889000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc782000000006627e88c000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc783000000006627e88f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc784000000006627e892000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc785000000006627e895000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc786000000006627e898000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc787000000006627e89b000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc788000000006627e89e000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc789000000006627e8a1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78a000000006627e8a4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78b000000006627e8a7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78c000000006627e8aa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78d000000006627e8ad000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc78e000000006627e8b0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc78f000000006627e8b4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc790000000006627e8b7000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc791000000006627e8ba000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc792000000006627e8bd000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc793000000006627e8c0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc794000000006627e8c3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc795000000006627e8c6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc796000000006627e8c9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc797000000006627e8cc000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc798000000006627e8cf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc799000000006627e8d2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc79a000000006627e8d5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc79b000000006627e8d8000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc79c000000006627e8db000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc79d000000006627e8de000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc79e000000006627e8e1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc79f000000006627e8e4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a0000000006627e8e7000000000000000000000000000000000000000000000000000000000000000000000000009896800004000300000000003cc7a1000000006627e8ed000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a2000000006627e8f0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a3000000006627e8f3000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7a4000000006627e8f6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a5000000006627e8f9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a6000000006627e8fc000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7a7000000006627e8ff000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a8000000006627e902000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7a9000000006627e906000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7aa000000006627e909000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7ab000000006627e90c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ac000000006627e90f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ad000000006627e912000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7ae000000006627e915000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7af000000006627e918000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7b0000000006627e91b000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011594a00000000003cc7b1000000006627e91e000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7b2000000006627e921000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b3000000006627e924000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b4000000006627e927000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b5000000006627e92a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7b6000000006627e92d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b7000000006627e930000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b8000000006627e933000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7b9000000006627e936000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ba000000006627e939000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7bb000000006627e93c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7bc000000006627e93f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7bd000000006627e942000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7be000000006627e945000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7bf000000006627e948000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c0000000006627e94b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c1000000006627e94e000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7c2000000006627e951000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7c3000000006627e954000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c4000000006627e957000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c5000000006627e95a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c6000000006627e95d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c7000000006627e960000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c8000000006627e963000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7c9000000006627e966000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ca000000006627e96a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7cb000000006627e96d000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc7cc000000006627e970000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7cd000000006627e973000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ce000000006627e976000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7cf000000006627e979000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d0000000006627e97c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d1000000006627e97f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d2000000006627e982000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d3000000006627e985000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7d4000000006627e988000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d5000000006627e98b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d6000000006627e98e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7d7000000006627e991000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7d8000000006627e994000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7d9000000006627e997000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7da000000006627e99a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7db000000006627e99d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7dc000000006627e9a0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7dd000000006627e9a3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7de000000006627e9a6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7df000000006627e9a9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e0000000006627e9ac000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e1000000006627e9af000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e2000000006627e9b2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e3000000006627e9b5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e4000000006627e9b8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e5000000006627e9bb000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7e6000000006627e9be000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e7000000006627e9c1000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e8000000006627e9c4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7e9000000006627e9c7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ea000000006627e9ca000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7eb000000006627e9ce000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ec000000006627e9d1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7ed000000006627e9d4000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7ee000000006627e9d7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ef000000006627e9da000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f0000000006627e9dd000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f1000000006627e9e0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f2000000006627e9e3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f3000000006627e9e6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f4000000006627e9e9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f5000000006627e9ec000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f6000000006627e9ef000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc7f7000000006627e9f2000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f8000000006627e9f5000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7f9000000006627e9f8000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7fa000000006627e9fb000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000000000000000000000000000000000000000000000000000000000000000000000102d4500000000003cc7fb000000006627e9fe000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7fc000000006627ea01000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7fd000000006627ea04000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7fe000000006627ea07000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc7ff000000006627ea0a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc800000000006627ea0d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc801000000006627ea10000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc802000000006627ea13000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc803000000006627ea16000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc804000000006627ea19000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc805000000006627ea1c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc806000000006627ea1f000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc807000000006627ea22000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc808000000006627ea25000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc809000000006627ea28000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc80a000000006627ea2b000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc80b000000006627ea2e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc80c000000006627ea31000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc80d000000006627ea34000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc80e000000006627ea37000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc80f000000006627ea3a000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc810000000006627ea3d000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc811000000006627ea40000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc812000000006627ea43000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc813000000006627ea46000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc814000000006627ea49000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc815000000006627ea4c000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc816000000006627ea4f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc817000000006627ea52000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc818000000006627ea55000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc819000000006627ea58000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc81a000000006627ea5b000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc81b000000006627ea5e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc81c000000006627ea61000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc81d000000006627ea64000000000000000000000000000000000000000000000000000000000000000000000000009896800002000100000000003cc81e000000006627ea67000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc81f000000006627ea6a000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc820000000006627ea6d000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc821000000006627ea70000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc822000000006627ea73000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc823000000006627ea76000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc824000000006627ea79000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc825000000006627ea7c000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc826000000006627ea80000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc827000000006627ea83000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc828000000006627ea86000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc829000000006627ea89000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc82a000000006627ea8c000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc82b000000006627ea8f000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc82c000000006627ea92000000000000000000000000000000000000000000000000000000000000000000000000009896800003000000000000003cc82d000000006627ea95000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc82e000000006627ea98000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc82f000000006627ea9b000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc830000000006627ea9e000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc831000000006627eaa1000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc832000000006627eaa4000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc833000000006627eaa7000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc834000000006627eaaa000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc835000000006627eaad000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc836000000006627eab0000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc837000000006627eab3000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc838000000006627eab6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc839000000006627eab9000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc83a000000006627eabc000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc83b000000006627eabf000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc83c000000006627eac2000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc83d000000006627eac6000000000000000000000000000000000000000000000000000000000000000000000000009896800001000000000000003cc83e000000006627eac9000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000003cc83f000000006627eacc00000000000000000000000000000000000000000000000000000000000000000000000000989680000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000",
"batch_index": 70133,
"message_hashes": {
"1041413": "0x2309c1909b298c03f5b2c4531b75ce924a18f8f01ecd11706c046bf5be121121",
"1041414": "0x5a10e631df8a1843b077d6bfa04157a9e4ebcad949c594bec13fd5fc91987e9a",
"1041415": "0xb01db83451d4edab828943ad9dea86ac05b50d1f6bcedd4a2fde88d6d598d102",
"1041416": "0x6cd3b0b235cd2b5170a37871354a31847ed5caa21320d59fcdbe89d532fcc161",
"1041417": "0xe11ab5fae2c94c6a509afebbdadc0104ef1d560000275a8532b18571e4886e33"
},
"blob_versioned_hash": "0x0127c42381cb4014aeaa54fcc188be37d9aa9a5aa1e79fd01aaad7dd37c8575d"
}
}"#;
serde_json::from_str::<Data<Scroll, Wasm<Union>>>(json).unwrap();
}
}