forked from 0xPolygonHermez/zkevm-contracts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPolygonZkEVMBridgeMock.json
874 lines (874 loc) · 115 KB
/
PolygonZkEVMBridgeMock.json
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
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
{
"_format": "hh-sol-artifact-1",
"contractName": "PolygonZkEVMBridgeMock",
"sourceName": "contracts/mocks/PolygonZkEVMBridgeMock.sol",
"abi": [
{
"inputs": [],
"name": "AlreadyClaimed",
"type": "error"
},
{
"inputs": [],
"name": "AmountDoesNotMatchMsgValue",
"type": "error"
},
{
"inputs": [],
"name": "DestinationNetworkInvalid",
"type": "error"
},
{
"inputs": [],
"name": "EtherTransferFailed",
"type": "error"
},
{
"inputs": [],
"name": "GlobalExitRootInvalid",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSmtProof",
"type": "error"
},
{
"inputs": [],
"name": "MerkleTreeFull",
"type": "error"
},
{
"inputs": [],
"name": "MessageFailed",
"type": "error"
},
{
"inputs": [],
"name": "MsgValueNotZero",
"type": "error"
},
{
"inputs": [],
"name": "NotValidAmount",
"type": "error"
},
{
"inputs": [],
"name": "NotValidOwner",
"type": "error"
},
{
"inputs": [],
"name": "NotValidSignature",
"type": "error"
},
{
"inputs": [],
"name": "NotValidSpender",
"type": "error"
},
{
"inputs": [],
"name": "OnlyEmergencyState",
"type": "error"
},
{
"inputs": [],
"name": "OnlyNotEmergencyState",
"type": "error"
},
{
"inputs": [],
"name": "OnlyPolygonZkEVM",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "leafType",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"indexed": false,
"internalType": "address",
"name": "originAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"indexed": false,
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
},
{
"indexed": false,
"internalType": "uint32",
"name": "depositCount",
"type": "uint32"
}
],
"name": "BridgeEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"indexed": false,
"internalType": "address",
"name": "originAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "ClaimEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "EmergencyStateActivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "EmergencyStateDeactivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"indexed": false,
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "wrappedTokenAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
}
],
"name": "NewWrappedToken",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"inputs": [],
"name": "activateEmergencyState",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "bool",
"name": "forceUpdateGlobalExitRoot",
"type": "bool"
},
{
"internalType": "bytes",
"name": "permitData",
"type": "bytes"
}
],
"name": "bridgeAsset",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "bool",
"name": "forceUpdateGlobalExitRoot",
"type": "bool"
},
{
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
}
],
"name": "bridgeMessage",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[32]",
"name": "smtProof",
"type": "bytes32[32]"
},
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "mainnetExitRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "rollupExitRoot",
"type": "bytes32"
},
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
},
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
}
],
"name": "claimAsset",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[32]",
"name": "smtProof",
"type": "bytes32[32]"
},
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "mainnetExitRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "rollupExitRoot",
"type": "bytes32"
},
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originAddress",
"type": "address"
},
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
}
],
"name": "claimMessage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "claimedBitMap",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deactivateEmergencyState",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "depositCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDepositRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "leafType",
"type": "uint8"
},
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originAddress",
"type": "address"
},
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "metadataHash",
"type": "bytes32"
}
],
"name": "getLeafValue",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
}
],
"name": "getTokenWrappedAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "globalExitRootManager",
"outputs": [
{
"internalType": "contract IBasePolygonZkEVMGlobalExitRoot",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_networkID",
"type": "uint32"
},
{
"internalType": "contract IBasePolygonZkEVMGlobalExitRoot",
"name": "_globalExitRootManager",
"type": "address"
},
{
"internalType": "address",
"name": "_polygonZkEVMaddress",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "isClaimed",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isEmergencyState",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastUpdatedDepositCount",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxEtherBridge",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "networkID",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "polygonZkEVMaddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
}
],
"name": "precalculatedWrapperAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_maxEtherBridge",
"type": "uint256"
}
],
"name": "setMaxEtherBridge",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_networkID",
"type": "uint32"
}
],
"name": "setNetworkID",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "tokenInfoToWrappedToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "updateGlobalExitRoot",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "leafHash",
"type": "bytes32"
},
{
"internalType": "bytes32[32]",
"name": "smtProof",
"type": "bytes32[32]"
},
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "root",
"type": "bytes32"
}
],
"name": "verifyMerkleProof",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "wrappedTokenToTokenInfo",
"outputs": [
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b506160a1806100206000396000f3fe608060405260043610620001e75760003560e01c8063715018a6116200010b578063bab161bf11620000a1578063dbc16976116200006c578063dbc169761462000728578063ee25560b1462000740578063f2fde38b1462000771578063fb570834146200079657600080fd5b8063bab161bf1462000663578063be5831c7146200069d578063cd58657914620006d9578063d02103ca14620006f057600080fd5b80638da5cb5b11620000e25780638da5cb5b14620005b457806391e57e2d14620005e15780639e34070f14620005f9578063aaa13cc2146200063e57600080fd5b8063715018a6146200053d57806379e2cf97146200055557806381b1c174146200056d57600080fd5b80632d2c9d94116200018157806334ac9cf2116200015857806334ac9cf214620003dd5780633ae05047146200040c5780633e1970431462000424578063647c576c146200051857600080fd5b80632d2c9d9414620003085780632dfdf0b5146200032d578063318aee3d146200035457600080fd5b8063240ff37811620001c2578063240ff37814620002825780632b5e42e714620002995780632c3f58cd14620002be5780632cffd02e14620002e357600080fd5b806315064c9614620001ec5780632072f6c5146200021d57806322e95f2c1462000237575b600080fd5b348015620001f957600080fd5b50606854620002089060ff1681565b60405190151581526020015b60405180910390f35b3480156200022a57600080fd5b5062000235620007bb565b005b3480156200024457600080fd5b506200025c62000256366004620036db565b62000819565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000214565b620002356200029336600462003772565b620008bc565b348015620002a657600080fd5b5062000235620002b8366004620037f6565b62000ae4565b348015620002cb57600080fd5b5062000235620002dd36600462003810565b62000af3565b348015620002f057600080fd5b50620002356200030236600462003848565b62000b39565b3480156200031557600080fd5b50620002356200032736600462003848565b620010dd565b3480156200033a57600080fd5b506200034560535481565b60405190815260200162000214565b3480156200036157600080fd5b50620003ab620003733660046200392e565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000214565b348015620003ea57600080fd5b50606c546200025c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200041957600080fd5b5062000345620012e1565b3480156200043157600080fd5b5062000345620004433660046200395e565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200052557600080fd5b506200023562000537366004620039e8565b620013c7565b3480156200054a57600080fd5b506200023562001622565b3480156200056257600080fd5b506200023562001638565b3480156200057a57600080fd5b506200025c6200058c366004620037f6565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620005c157600080fd5b50609f5473ffffffffffffffffffffffffffffffffffffffff166200025c565b348015620005ee57600080fd5b506200034560d15481565b3480156200060657600080fd5b506200020862000618366004620037f6565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200064b57600080fd5b506200025c6200065d36600462003a38565b62001672565b3480156200067057600080fd5b506068546200068790610100900463ffffffff1681565b60405163ffffffff909116815260200162000214565b348015620006aa57600080fd5b506068546200068790790100000000000000000000000000000000000000000000000000900463ffffffff1681565b62000235620006ea36600462003aec565b6200185e565b348015620006fd57600080fd5b506068546200025c9065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200073557600080fd5b506200023562001932565b3480156200074d57600080fd5b50620003456200075f366004620037f6565b60696020526000908152604090205481565b3480156200077e57600080fd5b5062000235620007903660046200392e565b6200198e565b348015620007a357600080fd5b5062000208620007b536600462003b8e565b62001a4b565b606c5473ffffffffffffffffffffffffffffffffffffffff1633146200080d576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200081762001b34565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b60685460ff1615620008fa576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff868116610100909204161480620009205750600263ffffffff861610155b1562000958576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff16338888348888605354604051620009ae9998979695949392919062003c24565b60405180910390a162000acc62000ac66001606860019054906101000a900463ffffffff16338989348989604051620009e992919062003c9f565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62001bc8565b821562000add5762000add62001cdf565b5050505050565b62000aee62001db4565b60d155565b62000afd62001db4565b6068805463ffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909216919091179055565b60685460ff161562000b77576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000b8e8b8b8b8b8b8b8b8b8b8b8b600062001e37565b73ffffffffffffffffffffffffffffffffffffffff861662000c6a576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000be3919062003d04565b60006040518083038185875af1925050503d806000811462000c22576040519150601f19603f3d011682016040523d82523d6000602084013e62000c27565b606091505b505090508062000c63576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062001065565b60685463ffffffff61010090910481169088160362000cac5762000ca673ffffffffffffffffffffffffffffffffffffffff8716858562002028565b62001065565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff168062000fd7576000808062000d818688018862003e19565b92509250925060008584848460405162000d9b9062003695565b62000da99392919062003edb565b8190604051809103906000f590508015801562000dca573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000e4057600080fd5b505af115801562000e55573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b60405162000fc595949392919062003f18565b60405180910390a15050505062001062565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b1580156200104857600080fd5b505af11580156200105d573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff16156200111b576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620011328b8b8b8b8b8b8b8b8b8b8b600162001e37565b60008473ffffffffffffffffffffffffffffffffffffffff1684888a868660405160240162001165949392919062003f60565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620011e8919062003d04565b60006040518083038185875af1925050503d806000811462001227576040519150601f19603f3d011682016040523d82523d6000602084013e6200122c565b606091505b505090508062001268576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b605354600090819081805b6020811015620013be578083901c6001166001036200134f57603381602081106200131b576200131b62003fa8565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200137c565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b60408051602081018490529081018390526060016040516020818303038152906040528051906020012091508080620013b59062004006565b915050620012ec565b50919392505050565b600054610100900460ff1615808015620013e85750600054600160ff909116105b80620014045750303b15801562001404575060005460ff166001145b62001496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620014f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606880547fffffffffffffff000000000000000000000000000000000000000000000000ff1661010063ffffffff8716027fffffffffffffff0000000000000000000000000000000000000000ffffffffff16176501000000000073ffffffffffffffffffffffffffffffffffffffff8681169190910291909117909155606c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790556703782dace9d9000060d155620015b8620020fe565b80156200161c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6200162c62001db4565b6200081760006200219d565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff16101562000817576200081762001cdf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620017089062003695565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081905262001753908d908d908d908d908d9060200162004041565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001791929160200162004082565b604051602081830303815290604052805190602001206040516020016200181a94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60d15434111562001918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d61784574686560648201527f7242726964676500000000000000000000000000000000000000000000000000608482015260a4016200148d565b620019298787878787878762002214565b50505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001984576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620008176200276f565b6200199862001db4565b73ffffffffffffffffffffffffffffffffffffffff811662001a3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200148d565b62001a48816200219d565b50565b600084815b602081101562001b2657600163ffffffff8616821c8116900362001ac25785816020811062001a835762001a8362003fa8565b60200201358260405160200162001aa4929190918252602082015260400190565b60405160208183030381529060405280519060200120915062001b11565b8186826020811062001ad85762001ad862003fa8565b602002013560405160200162001af8929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b8062001b1d8162004006565b91505062001a50565b50821490505b949350505050565b60685460ff161562001b72576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b80600162001bd960206002620041ee565b62001be59190620041fc565b6053541062001c20576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462001c339062004006565b9182905550905060005b602081101562001ccf578082901c60011660010362001c7557826033826020811062001c6d5762001c6d62003fa8565b015550505050565b6033816020811062001c8b5762001c8b62003fa8565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062001cc69062004006565b91505062001c3d565b5062001cda62004212565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62001d65620012e1565b6040518263ffffffff1660e01b815260040162001d8491815260200190565b600060405180830381600087803b15801562001d9f57600080fd5b505af11580156200161c573d6000803e3d6000fd5b609f5473ffffffffffffffffffffffffffffffffffffffff16331462000817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200148d565b62001e488b63ffffffff16620027ff565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af115801562001eeb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f11919062004241565b90508060000362001f4d576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff888116610100909204161462001f97576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff1662001fb557508962001fb8565b508a5b62001fe162001fd8848c8c8c8c8c8c8c604051620009e992919062003c9f565b8f8f8462001a4b565b62002018576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001cda9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002864565b600054610100900460ff1662002197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200148d565b62000817335b609f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60685460ff161562002252576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200225c62002977565b60685463ffffffff888116610100909204161480620022825750600263ffffffff881610155b15620022ba576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff8816620023205788341462002316576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600092506200261a565b341562002359576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562002449576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b1580156200241c57600080fd5b505af115801562002431573d6000803e3d6000fd5b50505050806020015194508060000151935062002618565b85156200245e576200245e898b8989620029ec565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015620024cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024f2919062004241565b90506200251873ffffffffffffffffffffffffffffffffffffffff8b1633308e62002f0a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa15801562002586573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ac919062004241565b9050620025ba8282620041fc565b6068548c9850610100900463ffffffff1696509350620025da8762002f6a565b620025e58c62003082565b620025f08d6200318f565b604051602001620026049392919062003edb565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e86886053546040516200265c9897969594939291906200425b565b60405180910390a16200275062000ac6600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b861562002761576200276162001cdf565b505050506200192960018055565b60685460ff16620027ac576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600881901c60008181526069602052604081208054600160ff861690811b9182189283905592909190818316900362000add576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000620028c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200328b9092919063ffffffff16565b80519091501562001cda5780806020019051810190620028e99190620042d4565b62001cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200148d565b600260015403620029e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200148d565b6002600155565b6000620029fd6004828486620042f4565b62002a089162004320565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002c8757600080808080808062002a6b896004818d620042f4565b81019062002a7a919062004369565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002aee576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616301462002b3e576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002b78576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c33919062003d04565b6000604051808303816000865af19150503d806000811462002c72576040519150601f19603f3d011682016040523d82523d6000602084013e62002c77565b606091505b5050505050505050505062000add565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d03576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008080808080808062002d1b8a6004818e620042f4565b81019062002d2a9190620043c4565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002da0576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716301462002df0576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002eb4919062003d04565b6000604051808303816000865af19150503d806000811462002ef3576040519150601f19603f3d011682016040523d82523d6000602084013e62002ef8565b606091505b50505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200161c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200207b565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162002fee919062003d04565b600060405180830381855afa9150503d80600081146200302b576040519150601f19603f3d011682016040523d82523d6000602084013e62003030565b606091505b50915091508162003077576040518060400160405280600781526020017f4e4f5f4e414d450000000000000000000000000000000000000000000000000081525062001b2c565b62001b2c816200329c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162003106919062003d04565b600060405180830381855afa9150503d806000811462003143576040519150601f19603f3d011682016040523d82523d6000602084013e62003148565b606091505b50915091508162003077576040518060400160405280600981526020017f4e4f5f53594d424f4c000000000000000000000000000000000000000000000081525062001b2c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169162003212919062003d04565b600060405180830381855afa9150503d80600081146200324f576040519150601f19603f3d011682016040523d82523d6000602084013e62003254565b606091505b509150915081801562003268575080516020145b6200327557601262001b2c565b8080602001905181019062001b2c919062004450565b606062001b2c84846000856200348c565b60606040825110620032be5781806020019051810190620008b6919062004470565b81516020036200344e5760005b602081108015620033165750828181518110620032ec57620032ec62003fa8565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b15620033315780620033288162004006565b915050620032cb565b806000036200337557505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003393576200339362003caf565b6040519080825280601f01601f191660200182016040528015620033be576020820181803683370190505b50905060005b828110156200344657848181518110620033e257620033e262003fa8565b602001015160f81c60f81b82828151811062003402576200340262003fa8565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806200343d8162004006565b915050620033c4565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b60608247101562003520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200148d565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200354b919062003d04565b60006040518083038185875af1925050503d80600081146200358a576040519150601f19603f3d011682016040523d82523d6000602084013e6200358f565b606091505b5091509150620035a287838387620035ad565b979650505050505050565b6060831562003648578251600003620036405773ffffffffffffffffffffffffffffffffffffffff85163b62003640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200148d565b508162001b2c565b62001b2c83838151156200365f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200148d9190620044f0565b611b66806200450683390190565b803563ffffffff811681146200348757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811462001a4857600080fd5b60008060408385031215620036ef57600080fd5b620036fa83620036a3565b915060208301356200370c81620036b8565b809150509250929050565b801515811462001a4857600080fd5b60008083601f8401126200373957600080fd5b50813567ffffffffffffffff8111156200375257600080fd5b6020830191508360208285010111156200376b57600080fd5b9250929050565b6000806000806000608086880312156200378b57600080fd5b6200379686620036a3565b94506020860135620037a881620036b8565b93506040860135620037ba8162003717565b9250606086013567ffffffffffffffff811115620037d757600080fd5b620037e58882890162003726565b969995985093965092949392505050565b6000602082840312156200380957600080fd5b5035919050565b6000602082840312156200382357600080fd5b6200382e82620036a3565b9392505050565b806104008101831015620008b657600080fd5b60008060008060008060008060008060006105208c8e0312156200386b57600080fd5b620038778d8d62003835565b9a50620038886104008d01620036a3565b99506104208c013598506104408c01359750620038a96104608d01620036a3565b96506104808c0135620038bc81620036b8565b9550620038cd6104a08d01620036a3565b94506104c08c0135620038e081620036b8565b93506104e08c013592506105008c013567ffffffffffffffff8111156200390657600080fd5b620039148e828f0162003726565b915080935050809150509295989b509295989b9093969950565b6000602082840312156200394157600080fd5b81356200382e81620036b8565b60ff8116811462001a4857600080fd5b600080600080600080600060e0888a0312156200397a57600080fd5b873562003987816200394e565b96506200399760208901620036a3565b95506040880135620039a981620036b8565b9450620039b960608901620036a3565b93506080880135620039cb81620036b8565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215620039fe57600080fd5b62003a0984620036a3565b9250602084013562003a1b81620036b8565b9150604084013562003a2d81620036b8565b809150509250925092565b600080600080600080600060a0888a03121562003a5457600080fd5b62003a5f88620036a3565b9650602088013562003a7181620036b8565b9550604088013567ffffffffffffffff8082111562003a8f57600080fd5b62003a9d8b838c0162003726565b909750955060608a013591508082111562003ab757600080fd5b5062003ac68a828b0162003726565b909450925050608088013562003adc816200394e565b8091505092959891949750929550565b600080600080600080600060c0888a03121562003b0857600080fd5b62003b1388620036a3565b9650602088013562003b2581620036b8565b955060408801359450606088013562003b3e81620036b8565b9350608088013562003b508162003717565b925060a088013567ffffffffffffffff81111562003b6d57600080fd5b62003b7b8a828b0162003726565b989b979a50959850939692959293505050565b600080600080610460858703121562003ba657600080fd5b8435935062003bb9866020870162003835565b925062003bca6104208601620036a3565b939692955092936104400135925050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c085015262003c85828501878962003bdb565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381101562003cfb57818101518382015260200162003ce1565b50506000910152565b6000825162003d1881846020870162003cde565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003d6c5762003d6c62003caf565b604052919050565b600067ffffffffffffffff82111562003d915762003d9162003caf565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003dcf57600080fd5b813562003de662003de08262003d74565b62003d22565b81815284602083860101111562003dfc57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121562003e2f57600080fd5b833567ffffffffffffffff8082111562003e4857600080fd5b62003e568783880162003dbd565b9450602086013591508082111562003e6d57600080fd5b5062003e7c8682870162003dbd565b925050604084013562003a2d816200394e565b6000815180845262003ea981602086016020860162003cde565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003ef0606083018662003e8f565b828103602084015262003f04818662003e8f565b91505060ff83166040830152949350505050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff808716602084015280861660408401525060806060830152620035a260808301848662003bdb565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff8416602082015260606040820152600062003f9e60608301848662003bdb565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200403a576200403a62003fd7565b5060010190565b6060815260006200405760608301878962003bdb565b82810360208401526200406c81868862003bdb565b91505060ff831660408301529695505050505050565b600083516200409681846020880162003cde565b835190830190620040ac81836020880162003cde565b01949350505050565b600181815b808511156200411457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620040f857620040f862003fd7565b808516156200410657918102915b93841c9390800290620040ba565b509250929050565b6000826200412d57506001620008b6565b816200413c57506000620008b6565b8160018114620041555760028114620041605762004180565b6001915050620008b6565b60ff84111562004174576200417462003fd7565b50506001821b620008b6565b5060208310610133831016604e8410600b8410161715620041a5575081810a620008b6565b620041b18383620040b5565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620041e657620041e662003fd7565b029392505050565b60006200382e83836200411c565b81810381811115620008b657620008b662003fd7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000602082840312156200425457600080fd5b5051919050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620042bb8285018762003e8f565b925080851660e085015250509998505050505050505050565b600060208284031215620042e757600080fd5b81516200382e8162003717565b600080858511156200430557600080fd5b838611156200431357600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015620043615780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a0312156200438557600080fd5b87356200439281620036b8565b96506020880135620043a481620036b8565b955060408801359450606088013593506080880135620039cb816200394e565b600080600080600080600080610100898b031215620043e257600080fd5b8835620043ef81620036b8565b975060208901356200440181620036b8565b965060408901359550606089013594506080890135620044218162003717565b935060a089013562004433816200394e565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200446357600080fd5b81516200382e816200394e565b6000602082840312156200448357600080fd5b815167ffffffffffffffff8111156200449b57600080fd5b8201601f81018413620044ad57600080fd5b8051620044be62003de08262003d74565b818152856020838501011115620044d457600080fd5b620044e782602083016020860162003cde565b95945050505050565b6020815260006200382e602083018462003e8f56fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212208d88fee561cff7120d381c345cfc534cef8229a272dc5809d4bbb685ad67141164736f6c63430008110033a264697066735822122016ad07a7802cfbda560163ff9e48aa2a91dc22fe2fe0ad7b1a0a705f26729f0a64736f6c63430008110033",
"deployedBytecode": "0x608060405260043610620001e75760003560e01c8063715018a6116200010b578063bab161bf11620000a1578063dbc16976116200006c578063dbc169761462000728578063ee25560b1462000740578063f2fde38b1462000771578063fb570834146200079657600080fd5b8063bab161bf1462000663578063be5831c7146200069d578063cd58657914620006d9578063d02103ca14620006f057600080fd5b80638da5cb5b11620000e25780638da5cb5b14620005b457806391e57e2d14620005e15780639e34070f14620005f9578063aaa13cc2146200063e57600080fd5b8063715018a6146200053d57806379e2cf97146200055557806381b1c174146200056d57600080fd5b80632d2c9d94116200018157806334ac9cf2116200015857806334ac9cf214620003dd5780633ae05047146200040c5780633e1970431462000424578063647c576c146200051857600080fd5b80632d2c9d9414620003085780632dfdf0b5146200032d578063318aee3d146200035457600080fd5b8063240ff37811620001c2578063240ff37814620002825780632b5e42e714620002995780632c3f58cd14620002be5780632cffd02e14620002e357600080fd5b806315064c9614620001ec5780632072f6c5146200021d57806322e95f2c1462000237575b600080fd5b348015620001f957600080fd5b50606854620002089060ff1681565b60405190151581526020015b60405180910390f35b3480156200022a57600080fd5b5062000235620007bb565b005b3480156200024457600080fd5b506200025c62000256366004620036db565b62000819565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000214565b620002356200029336600462003772565b620008bc565b348015620002a657600080fd5b5062000235620002b8366004620037f6565b62000ae4565b348015620002cb57600080fd5b5062000235620002dd36600462003810565b62000af3565b348015620002f057600080fd5b50620002356200030236600462003848565b62000b39565b3480156200031557600080fd5b50620002356200032736600462003848565b620010dd565b3480156200033a57600080fd5b506200034560535481565b60405190815260200162000214565b3480156200036157600080fd5b50620003ab620003733660046200392e565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000214565b348015620003ea57600080fd5b50606c546200025c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200041957600080fd5b5062000345620012e1565b3480156200043157600080fd5b5062000345620004433660046200395e565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200052557600080fd5b506200023562000537366004620039e8565b620013c7565b3480156200054a57600080fd5b506200023562001622565b3480156200056257600080fd5b506200023562001638565b3480156200057a57600080fd5b506200025c6200058c366004620037f6565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620005c157600080fd5b50609f5473ffffffffffffffffffffffffffffffffffffffff166200025c565b348015620005ee57600080fd5b506200034560d15481565b3480156200060657600080fd5b506200020862000618366004620037f6565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200064b57600080fd5b506200025c6200065d36600462003a38565b62001672565b3480156200067057600080fd5b506068546200068790610100900463ffffffff1681565b60405163ffffffff909116815260200162000214565b348015620006aa57600080fd5b506068546200068790790100000000000000000000000000000000000000000000000000900463ffffffff1681565b62000235620006ea36600462003aec565b6200185e565b348015620006fd57600080fd5b506068546200025c9065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200073557600080fd5b506200023562001932565b3480156200074d57600080fd5b50620003456200075f366004620037f6565b60696020526000908152604090205481565b3480156200077e57600080fd5b5062000235620007903660046200392e565b6200198e565b348015620007a357600080fd5b5062000208620007b536600462003b8e565b62001a4b565b606c5473ffffffffffffffffffffffffffffffffffffffff1633146200080d576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200081762001b34565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b60685460ff1615620008fa576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff868116610100909204161480620009205750600263ffffffff861610155b1562000958576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff16338888348888605354604051620009ae9998979695949392919062003c24565b60405180910390a162000acc62000ac66001606860019054906101000a900463ffffffff16338989348989604051620009e992919062003c9f565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62001bc8565b821562000add5762000add62001cdf565b5050505050565b62000aee62001db4565b60d155565b62000afd62001db4565b6068805463ffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909216919091179055565b60685460ff161562000b77576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000b8e8b8b8b8b8b8b8b8b8b8b8b600062001e37565b73ffffffffffffffffffffffffffffffffffffffff861662000c6a576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000be3919062003d04565b60006040518083038185875af1925050503d806000811462000c22576040519150601f19603f3d011682016040523d82523d6000602084013e62000c27565b606091505b505090508062000c63576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062001065565b60685463ffffffff61010090910481169088160362000cac5762000ca673ffffffffffffffffffffffffffffffffffffffff8716858562002028565b62001065565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff168062000fd7576000808062000d818688018862003e19565b92509250925060008584848460405162000d9b9062003695565b62000da99392919062003edb565b8190604051809103906000f590508015801562000dca573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000e4057600080fd5b505af115801562000e55573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b60405162000fc595949392919062003f18565b60405180910390a15050505062001062565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b1580156200104857600080fd5b505af11580156200105d573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff16156200111b576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620011328b8b8b8b8b8b8b8b8b8b8b600162001e37565b60008473ffffffffffffffffffffffffffffffffffffffff1684888a868660405160240162001165949392919062003f60565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620011e8919062003d04565b60006040518083038185875af1925050503d806000811462001227576040519150601f19603f3d011682016040523d82523d6000602084013e6200122c565b606091505b505090508062001268576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b605354600090819081805b6020811015620013be578083901c6001166001036200134f57603381602081106200131b576200131b62003fa8565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200137c565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b60408051602081018490529081018390526060016040516020818303038152906040528051906020012091508080620013b59062004006565b915050620012ec565b50919392505050565b600054610100900460ff1615808015620013e85750600054600160ff909116105b80620014045750303b15801562001404575060005460ff166001145b62001496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620014f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606880547fffffffffffffff000000000000000000000000000000000000000000000000ff1661010063ffffffff8716027fffffffffffffff0000000000000000000000000000000000000000ffffffffff16176501000000000073ffffffffffffffffffffffffffffffffffffffff8681169190910291909117909155606c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790556703782dace9d9000060d155620015b8620020fe565b80156200161c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6200162c62001db4565b6200081760006200219d565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff16101562000817576200081762001cdf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620017089062003695565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081905262001753908d908d908d908d908d9060200162004041565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001791929160200162004082565b604051602081830303815290604052805190602001206040516020016200181a94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60d15434111562001918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d61784574686560648201527f7242726964676500000000000000000000000000000000000000000000000000608482015260a4016200148d565b620019298787878787878762002214565b50505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001984576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620008176200276f565b6200199862001db4565b73ffffffffffffffffffffffffffffffffffffffff811662001a3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200148d565b62001a48816200219d565b50565b600084815b602081101562001b2657600163ffffffff8616821c8116900362001ac25785816020811062001a835762001a8362003fa8565b60200201358260405160200162001aa4929190918252602082015260400190565b60405160208183030381529060405280519060200120915062001b11565b8186826020811062001ad85762001ad862003fa8565b602002013560405160200162001af8929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b8062001b1d8162004006565b91505062001a50565b50821490505b949350505050565b60685460ff161562001b72576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b80600162001bd960206002620041ee565b62001be59190620041fc565b6053541062001c20576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462001c339062004006565b9182905550905060005b602081101562001ccf578082901c60011660010362001c7557826033826020811062001c6d5762001c6d62003fa8565b015550505050565b6033816020811062001c8b5762001c8b62003fa8565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062001cc69062004006565b91505062001c3d565b5062001cda62004212565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62001d65620012e1565b6040518263ffffffff1660e01b815260040162001d8491815260200190565b600060405180830381600087803b15801562001d9f57600080fd5b505af11580156200161c573d6000803e3d6000fd5b609f5473ffffffffffffffffffffffffffffffffffffffff16331462000817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200148d565b62001e488b63ffffffff16620027ff565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af115801562001eeb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f11919062004241565b90508060000362001f4d576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff888116610100909204161462001f97576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff1662001fb557508962001fb8565b508a5b62001fe162001fd8848c8c8c8c8c8c8c604051620009e992919062003c9f565b8f8f8462001a4b565b62002018576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001cda9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002864565b600054610100900460ff1662002197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200148d565b62000817335b609f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60685460ff161562002252576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200225c62002977565b60685463ffffffff888116610100909204161480620022825750600263ffffffff881610155b15620022ba576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff8816620023205788341462002316576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600092506200261a565b341562002359576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562002449576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b1580156200241c57600080fd5b505af115801562002431573d6000803e3d6000fd5b50505050806020015194508060000151935062002618565b85156200245e576200245e898b8989620029ec565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015620024cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024f2919062004241565b90506200251873ffffffffffffffffffffffffffffffffffffffff8b1633308e62002f0a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa15801562002586573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ac919062004241565b9050620025ba8282620041fc565b6068548c9850610100900463ffffffff1696509350620025da8762002f6a565b620025e58c62003082565b620025f08d6200318f565b604051602001620026049392919062003edb565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e86886053546040516200265c9897969594939291906200425b565b60405180910390a16200275062000ac6600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b861562002761576200276162001cdf565b505050506200192960018055565b60685460ff16620027ac576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600881901c60008181526069602052604081208054600160ff861690811b9182189283905592909190818316900362000add576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000620028c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200328b9092919063ffffffff16565b80519091501562001cda5780806020019051810190620028e99190620042d4565b62001cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200148d565b600260015403620029e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200148d565b6002600155565b6000620029fd6004828486620042f4565b62002a089162004320565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002c8757600080808080808062002a6b896004818d620042f4565b81019062002a7a919062004369565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002aee576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616301462002b3e576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002b78576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c33919062003d04565b6000604051808303816000865af19150503d806000811462002c72576040519150601f19603f3d011682016040523d82523d6000602084013e62002c77565b606091505b5050505050505050505062000add565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d03576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008080808080808062002d1b8a6004818e620042f4565b81019062002d2a9190620043c4565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002da0576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716301462002df0576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002eb4919062003d04565b6000604051808303816000865af19150503d806000811462002ef3576040519150601f19603f3d011682016040523d82523d6000602084013e62002ef8565b606091505b50505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200161c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200207b565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162002fee919062003d04565b600060405180830381855afa9150503d80600081146200302b576040519150601f19603f3d011682016040523d82523d6000602084013e62003030565b606091505b50915091508162003077576040518060400160405280600781526020017f4e4f5f4e414d450000000000000000000000000000000000000000000000000081525062001b2c565b62001b2c816200329c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162003106919062003d04565b600060405180830381855afa9150503d806000811462003143576040519150601f19603f3d011682016040523d82523d6000602084013e62003148565b606091505b50915091508162003077576040518060400160405280600981526020017f4e4f5f53594d424f4c000000000000000000000000000000000000000000000081525062001b2c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169162003212919062003d04565b600060405180830381855afa9150503d80600081146200324f576040519150601f19603f3d011682016040523d82523d6000602084013e62003254565b606091505b509150915081801562003268575080516020145b6200327557601262001b2c565b8080602001905181019062001b2c919062004450565b606062001b2c84846000856200348c565b60606040825110620032be5781806020019051810190620008b6919062004470565b81516020036200344e5760005b602081108015620033165750828181518110620032ec57620032ec62003fa8565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b15620033315780620033288162004006565b915050620032cb565b806000036200337557505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003393576200339362003caf565b6040519080825280601f01601f191660200182016040528015620033be576020820181803683370190505b50905060005b828110156200344657848181518110620033e257620033e262003fa8565b602001015160f81c60f81b82828151811062003402576200340262003fa8565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806200343d8162004006565b915050620033c4565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b60608247101562003520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200148d565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200354b919062003d04565b60006040518083038185875af1925050503d80600081146200358a576040519150601f19603f3d011682016040523d82523d6000602084013e6200358f565b606091505b5091509150620035a287838387620035ad565b979650505050505050565b6060831562003648578251600003620036405773ffffffffffffffffffffffffffffffffffffffff85163b62003640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200148d565b508162001b2c565b62001b2c83838151156200365f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200148d9190620044f0565b611b66806200450683390190565b803563ffffffff811681146200348757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811462001a4857600080fd5b60008060408385031215620036ef57600080fd5b620036fa83620036a3565b915060208301356200370c81620036b8565b809150509250929050565b801515811462001a4857600080fd5b60008083601f8401126200373957600080fd5b50813567ffffffffffffffff8111156200375257600080fd5b6020830191508360208285010111156200376b57600080fd5b9250929050565b6000806000806000608086880312156200378b57600080fd5b6200379686620036a3565b94506020860135620037a881620036b8565b93506040860135620037ba8162003717565b9250606086013567ffffffffffffffff811115620037d757600080fd5b620037e58882890162003726565b969995985093965092949392505050565b6000602082840312156200380957600080fd5b5035919050565b6000602082840312156200382357600080fd5b6200382e82620036a3565b9392505050565b806104008101831015620008b657600080fd5b60008060008060008060008060008060006105208c8e0312156200386b57600080fd5b620038778d8d62003835565b9a50620038886104008d01620036a3565b99506104208c013598506104408c01359750620038a96104608d01620036a3565b96506104808c0135620038bc81620036b8565b9550620038cd6104a08d01620036a3565b94506104c08c0135620038e081620036b8565b93506104e08c013592506105008c013567ffffffffffffffff8111156200390657600080fd5b620039148e828f0162003726565b915080935050809150509295989b509295989b9093969950565b6000602082840312156200394157600080fd5b81356200382e81620036b8565b60ff8116811462001a4857600080fd5b600080600080600080600060e0888a0312156200397a57600080fd5b873562003987816200394e565b96506200399760208901620036a3565b95506040880135620039a981620036b8565b9450620039b960608901620036a3565b93506080880135620039cb81620036b8565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215620039fe57600080fd5b62003a0984620036a3565b9250602084013562003a1b81620036b8565b9150604084013562003a2d81620036b8565b809150509250925092565b600080600080600080600060a0888a03121562003a5457600080fd5b62003a5f88620036a3565b9650602088013562003a7181620036b8565b9550604088013567ffffffffffffffff8082111562003a8f57600080fd5b62003a9d8b838c0162003726565b909750955060608a013591508082111562003ab757600080fd5b5062003ac68a828b0162003726565b909450925050608088013562003adc816200394e565b8091505092959891949750929550565b600080600080600080600060c0888a03121562003b0857600080fd5b62003b1388620036a3565b9650602088013562003b2581620036b8565b955060408801359450606088013562003b3e81620036b8565b9350608088013562003b508162003717565b925060a088013567ffffffffffffffff81111562003b6d57600080fd5b62003b7b8a828b0162003726565b989b979a50959850939692959293505050565b600080600080610460858703121562003ba657600080fd5b8435935062003bb9866020870162003835565b925062003bca6104208601620036a3565b939692955092936104400135925050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c085015262003c85828501878962003bdb565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381101562003cfb57818101518382015260200162003ce1565b50506000910152565b6000825162003d1881846020870162003cde565b9190910192915050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003d6c5762003d6c62003caf565b604052919050565b600067ffffffffffffffff82111562003d915762003d9162003caf565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003dcf57600080fd5b813562003de662003de08262003d74565b62003d22565b81815284602083860101111562003dfc57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121562003e2f57600080fd5b833567ffffffffffffffff8082111562003e4857600080fd5b62003e568783880162003dbd565b9450602086013591508082111562003e6d57600080fd5b5062003e7c8682870162003dbd565b925050604084013562003a2d816200394e565b6000815180845262003ea981602086016020860162003cde565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003ef0606083018662003e8f565b828103602084015262003f04818662003e8f565b91505060ff83166040830152949350505050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff808716602084015280861660408401525060806060830152620035a260808301848662003bdb565b73ffffffffffffffffffffffffffffffffffffffff8516815263ffffffff8416602082015260606040820152600062003f9e60608301848662003bdb565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200403a576200403a62003fd7565b5060010190565b6060815260006200405760608301878962003bdb565b82810360208401526200406c81868862003bdb565b91505060ff831660408301529695505050505050565b600083516200409681846020880162003cde565b835190830190620040ac81836020880162003cde565b01949350505050565b600181815b808511156200411457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620040f857620040f862003fd7565b808516156200410657918102915b93841c9390800290620040ba565b509250929050565b6000826200412d57506001620008b6565b816200413c57506000620008b6565b8160018114620041555760028114620041605762004180565b6001915050620008b6565b60ff84111562004174576200417462003fd7565b50506001821b620008b6565b5060208310610133831016604e8410600b8410161715620041a5575081810a620008b6565b620041b18383620040b5565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620041e657620041e662003fd7565b029392505050565b60006200382e83836200411c565b81810381811115620008b657620008b662003fd7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000602082840312156200425457600080fd5b5051919050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620042bb8285018762003e8f565b925080851660e085015250509998505050505050505050565b600060208284031215620042e757600080fd5b81516200382e8162003717565b600080858511156200430557600080fd5b838611156200431357600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015620043615780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a0312156200438557600080fd5b87356200439281620036b8565b96506020880135620043a481620036b8565b955060408801359450606088013593506080880135620039cb816200394e565b600080600080600080600080610100898b031215620043e257600080fd5b8835620043ef81620036b8565b975060208901356200440181620036b8565b965060408901359550606089013594506080890135620044218162003717565b935060a089013562004433816200394e565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200446357600080fd5b81516200382e816200394e565b6000602082840312156200448357600080fd5b815167ffffffffffffffff8111156200449b57600080fd5b8201601f81018413620044ad57600080fd5b8051620044be62003de08262003d74565b818152856020838501011115620044d457600080fd5b620044e782602083016020860162003cde565b95945050505050565b6020815260006200382e602083018462003e8f56fe6101006040523480156200001257600080fd5b5060405162001b6638038062001b6683398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516116aa620004bc6000396000610237015260008181610307015281816105c001526106a70152600061053a015260008181610379015261050401526116aa6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf1461039b578063dd62ed3e146103ae578063ffa1ad74146103f457600080fd5b8063a457c2d71461034e578063a9059cbb14610361578063cd0d00961461037457600080fd5b806395d89b41116100bd57806395d89b41146102e75780639dc29fac146102ef578063a3c573eb1461030257600080fd5b806370a08231146102915780637ecebe00146102c757600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610261578063395093511461026957806340c10f191461027c57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610430565b60405161019191906113e4565b60405180910390f35b6101ad6101a8366004611479565b6104c2565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad6102043660046114a3565b6104dc565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610191565b6101c1610500565b6101ad610277366004611479565b61055c565b61028f61028a366004611479565b6105a8565b005b6101c161029f3660046114df565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d53660046114df565b60056020526000908152604090205481565b610184610680565b61028f6102fd366004611479565b61068f565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad61035c366004611479565b61075e565b6101ad61036f366004611479565b61082f565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b61028f6103a9366004611501565b61083d565b6101c16103bc366004611574565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043f906115a7565b80601f016020809104026020016040519081016040528092919081815260200182805461046b906115a7565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b6000336104d0818585610b73565b60019150505b92915050565b6000336104ea858285610d27565b6104f5858585610dfe565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610537576105324661106d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104d090829086906105a3908790611629565b610b73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d4272696467650000000000000000000000000000000060648201526084015b60405180910390fd5b61067c8282611135565b5050565b60606004805461043f906115a7565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60448201527f6c79676f6e5a6b45564d427269646765000000000000000000000000000000006064820152608401610669565b61067c8282611228565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610669565b6104f58286868403610b73565b6000336104d0818585610dfe565b834211156108cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866109268361163c565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610991610500565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610a55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610ad057508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610669565b610b678a8a8a610b73565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df85781811015610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610669565b610df88484848403610b73565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff8216610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610df8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611098610430565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610669565b80600260008282546111c49190611629565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610669565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d1a565b600060208083528351808285015260005b81811015611411578581018301518582016040015282016113f5565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461147457600080fd5b919050565b6000806040838503121561148c57600080fd5b61149583611450565b946020939093013593505050565b6000806000606084860312156114b857600080fd5b6114c184611450565b92506114cf60208501611450565b9150604084013590509250925092565b6000602082840312156114f157600080fd5b6114fa82611450565b9392505050565b600080600080600080600060e0888a03121561151c57600080fd5b61152588611450565b965061153360208901611450565b95506040880135945060608801359350608088013560ff8116811461155757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561158757600080fd5b61159083611450565b915061159e60208401611450565b90509250929050565b600181811c908216806115bb57607f821691505b6020821081036115f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104d6576104d66115fa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361166d5761166d6115fa565b506001019056fea26469706673582212208d88fee561cff7120d381c345cfc534cef8229a272dc5809d4bbb685ad67141164736f6c63430008110033a264697066735822122016ad07a7802cfbda560163ff9e48aa2a91dc22fe2fe0ad7b1a0a705f26729f0a64736f6c63430008110033",
"linkReferences": {},
"deployedLinkReferences": {}
}