@ensuro/core 2.0.0-beta1 → 2.0.0-beta11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +36 -14
  2. package/build/contracts/AccessManager.sol/AccessManager.json +564 -0
  3. package/build/contracts/ERC4626AssetManager.sol/ERC4626AssetManager.json +238 -0
  4. package/build/contracts/EToken.sol/EToken.json +147 -46
  5. package/build/contracts/LPManualWhitelist.sol/LPManualWhitelist.json +23 -4
  6. package/build/contracts/LiquidityThresholdAssetManager.sol/LiquidityThresholdAssetManager.json +222 -0
  7. package/build/contracts/Policy.sol/Policy.json +2 -2
  8. package/build/contracts/PolicyPool.sol/PolicyPool.json +437 -61
  9. package/build/contracts/PolicyPoolComponent.sol/PolicyPoolComponent.json +21 -2
  10. package/build/contracts/PremiumsAccount.sol/PremiumsAccount.json +142 -16
  11. package/build/contracts/Reserve.sol/Reserve.json +85 -8
  12. package/build/contracts/RiskModule.sol/RiskModule.json +21 -2
  13. package/build/contracts/SignedQuoteRiskModule.sol/SignedQuoteRiskModule.json +979 -0
  14. package/build/contracts/TimeScaled.sol/TimeScaled.json +3 -17
  15. package/build/contracts/TrustfulRiskModule.sol/TrustfulRiskModule.json +24 -5
  16. package/build/contracts/{WadRayMath.sol → dependencies/WadRayMath.sol}/WadRayMath.json +3 -3
  17. package/build/contracts/interfaces/{IPolicyPoolConfig.sol/IPolicyPoolConfig.json → IAccessManager.sol/IAccessManager.json} +77 -59
  18. package/build/contracts/interfaces/IAssetManager.sol/IAssetManager.json +128 -0
  19. package/build/contracts/interfaces/IEToken.sol/IEToken.json +13 -0
  20. package/build/contracts/interfaces/IPolicyPool.sol/IPolicyPool.json +40 -16
  21. package/build/contracts/interfaces/IPolicyPoolComponent.sol/IPolicyPoolComponent.json +19 -0
  22. package/build/contracts/interfaces/IPremiumsAccount.sol/IPremiumsAccount.json +13 -0
  23. package/build/contracts/mocks/FixedRateVault.sol/FixedRateVault.json +736 -0
  24. package/build/contracts/mocks/ForwardProxy.sol/ForwardProxy.json +2 -2
  25. package/build/contracts/mocks/InterfaceIdCalculator.sol/InterfaceIdCalculator.json +180 -0
  26. package/build/contracts/mocks/PolicyHolderMock.sol/PolicyHolderMock.json +28 -2
  27. package/build/contracts/mocks/PolicyPoolComponentMock.sol/PolicyPoolComponentMock.json +21 -2
  28. package/build/contracts/mocks/PolicyPoolMock.sol/PolicyPoolMock.json +118 -19
  29. package/build/contracts/mocks/PolicyPoolMock.sol/PolicyPoolMockForward.json +6 -6
  30. package/build/contracts/mocks/RiskModuleMock.sol/RiskModuleMock.json +783 -0
  31. package/build/contracts/mocks/TestCurrency.sol/TestCurrency.json +2 -2
  32. package/build/contracts/mocks/TestNFT.sol/TestNFT.json +2 -2
  33. package/contracts/AccessManager.sol +132 -0
  34. package/contracts/ERC4626AssetManager.sol +55 -0
  35. package/contracts/EToken.sol +208 -102
  36. package/contracts/LPManualWhitelist.sol +19 -3
  37. package/contracts/LiquidityThresholdAssetManager.sol +175 -0
  38. package/contracts/Policy.sol +5 -3
  39. package/contracts/PolicyPool.sol +381 -116
  40. package/contracts/PolicyPoolComponent.sol +61 -44
  41. package/contracts/PremiumsAccount.sol +324 -86
  42. package/contracts/Reserve.sol +199 -4
  43. package/contracts/RiskModule.sol +62 -31
  44. package/contracts/SignedQuoteRiskModule.sol +248 -0
  45. package/contracts/TimeScaled.sol +19 -15
  46. package/contracts/TrustfulRiskModule.sol +69 -2
  47. package/contracts/dependencies/WadRayMath.sol +126 -0
  48. package/contracts/interfaces/IAccessManager.sol +148 -0
  49. package/contracts/interfaces/IAssetManager.sol +89 -0
  50. package/contracts/interfaces/IEToken.sol +25 -2
  51. package/contracts/interfaces/ILPWhitelist.sol +17 -0
  52. package/contracts/interfaces/IPolicyPool.sol +21 -14
  53. package/contracts/interfaces/IPolicyPoolComponent.sol +5 -1
  54. package/contracts/interfaces/IPremiumsAccount.sol +5 -0
  55. package/contracts/interfaces/IRiskModule.sol +67 -4
  56. package/contracts/mocks/FixedRateVault.sol +85 -0
  57. package/contracts/mocks/InterfaceIdCalculator.sol +32 -0
  58. package/contracts/mocks/PolicyHolderMock.sol +21 -0
  59. package/contracts/mocks/PolicyPoolComponentMock.sol +10 -0
  60. package/contracts/mocks/PolicyPoolMock.sol +41 -15
  61. package/contracts/mocks/RiskModuleMock.sol +75 -0
  62. package/js/deploy.js +704 -0
  63. package/js/test-utils.js +339 -159
  64. package/package.json +1 -1
  65. package/build/contracts/FlightDelayRiskModule.sol/FlightDelayRiskModule.json +0 -890
  66. package/build/contracts/PolicyNFT.sol/PolicyNFT.json +0 -583
  67. package/build/contracts/PolicyPoolConfig.sol/PolicyPoolConfig.json +0 -691
  68. package/build/contracts/dependencies/ChainlinkClientUpgradeable.sol/ChainlinkClientUpgradeable.json +0 -63
  69. package/build/contracts/interfaces/IPolicyNFT.sol/IPolicyNFT.json +0 -321
  70. package/build/contracts/mocks/LinkTokenMock.sol/LinkTokenMock.json +0 -370
  71. package/build/contracts/mocks/TestCurrencyUUPS.sol/TestCurrencyUUPS.json +0 -353
  72. package/build/contracts/upgraded/IPolicyNFTv1.sol/IPolicyNFTv1.json +0 -322
  73. package/build/contracts/upgraded/PolicyNFTv1.sol/PolicyNFTv1.json +0 -584
  74. package/build/contracts/upgraded/PolicyNFTv1.sol/PolicyNFTv1_Upgrade.json +0 -615
  75. package/contracts/FlightDelayRiskModule.sol +0 -217
  76. package/contracts/PolicyNFT.sol +0 -96
  77. package/contracts/PolicyPoolConfig.sol +0 -204
  78. package/contracts/WadRayMath.sol +0 -135
  79. package/contracts/dependencies/ChainlinkClientUpgradeable.sol +0 -371
  80. package/contracts/interfaces/IPolicyNFT.sol +0 -15
  81. package/contracts/interfaces/IPolicyPoolConfig.sol +0 -96
  82. package/contracts/mocks/LinkTokenMock.sol +0 -30
  83. package/contracts/upgraded/IPolicyNFTv1.sol +0 -15
  84. package/contracts/upgraded/PolicyNFTv1.sol +0 -126
@@ -0,0 +1,564 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "AccessManager",
4
+ "sourceName": "contracts/AccessManager.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "stateMutability": "nonpayable",
9
+ "type": "constructor"
10
+ },
11
+ {
12
+ "anonymous": false,
13
+ "inputs": [
14
+ {
15
+ "indexed": false,
16
+ "internalType": "address",
17
+ "name": "previousAdmin",
18
+ "type": "address"
19
+ },
20
+ {
21
+ "indexed": false,
22
+ "internalType": "address",
23
+ "name": "newAdmin",
24
+ "type": "address"
25
+ }
26
+ ],
27
+ "name": "AdminChanged",
28
+ "type": "event"
29
+ },
30
+ {
31
+ "anonymous": false,
32
+ "inputs": [
33
+ {
34
+ "indexed": true,
35
+ "internalType": "address",
36
+ "name": "beacon",
37
+ "type": "address"
38
+ }
39
+ ],
40
+ "name": "BeaconUpgraded",
41
+ "type": "event"
42
+ },
43
+ {
44
+ "anonymous": false,
45
+ "inputs": [
46
+ {
47
+ "indexed": false,
48
+ "internalType": "uint8",
49
+ "name": "version",
50
+ "type": "uint8"
51
+ }
52
+ ],
53
+ "name": "Initialized",
54
+ "type": "event"
55
+ },
56
+ {
57
+ "anonymous": false,
58
+ "inputs": [
59
+ {
60
+ "indexed": true,
61
+ "internalType": "bytes32",
62
+ "name": "role",
63
+ "type": "bytes32"
64
+ },
65
+ {
66
+ "indexed": true,
67
+ "internalType": "bytes32",
68
+ "name": "previousAdminRole",
69
+ "type": "bytes32"
70
+ },
71
+ {
72
+ "indexed": true,
73
+ "internalType": "bytes32",
74
+ "name": "newAdminRole",
75
+ "type": "bytes32"
76
+ }
77
+ ],
78
+ "name": "RoleAdminChanged",
79
+ "type": "event"
80
+ },
81
+ {
82
+ "anonymous": false,
83
+ "inputs": [
84
+ {
85
+ "indexed": true,
86
+ "internalType": "bytes32",
87
+ "name": "role",
88
+ "type": "bytes32"
89
+ },
90
+ {
91
+ "indexed": true,
92
+ "internalType": "address",
93
+ "name": "account",
94
+ "type": "address"
95
+ },
96
+ {
97
+ "indexed": true,
98
+ "internalType": "address",
99
+ "name": "sender",
100
+ "type": "address"
101
+ }
102
+ ],
103
+ "name": "RoleGranted",
104
+ "type": "event"
105
+ },
106
+ {
107
+ "anonymous": false,
108
+ "inputs": [
109
+ {
110
+ "indexed": true,
111
+ "internalType": "bytes32",
112
+ "name": "role",
113
+ "type": "bytes32"
114
+ },
115
+ {
116
+ "indexed": true,
117
+ "internalType": "address",
118
+ "name": "account",
119
+ "type": "address"
120
+ },
121
+ {
122
+ "indexed": true,
123
+ "internalType": "address",
124
+ "name": "sender",
125
+ "type": "address"
126
+ }
127
+ ],
128
+ "name": "RoleRevoked",
129
+ "type": "event"
130
+ },
131
+ {
132
+ "anonymous": false,
133
+ "inputs": [
134
+ {
135
+ "indexed": true,
136
+ "internalType": "address",
137
+ "name": "implementation",
138
+ "type": "address"
139
+ }
140
+ ],
141
+ "name": "Upgraded",
142
+ "type": "event"
143
+ },
144
+ {
145
+ "inputs": [],
146
+ "name": "DEFAULT_ADMIN_ROLE",
147
+ "outputs": [
148
+ {
149
+ "internalType": "bytes32",
150
+ "name": "",
151
+ "type": "bytes32"
152
+ }
153
+ ],
154
+ "stateMutability": "view",
155
+ "type": "function"
156
+ },
157
+ {
158
+ "inputs": [],
159
+ "name": "GUARDIAN_ROLE",
160
+ "outputs": [
161
+ {
162
+ "internalType": "bytes32",
163
+ "name": "",
164
+ "type": "bytes32"
165
+ }
166
+ ],
167
+ "stateMutability": "view",
168
+ "type": "function"
169
+ },
170
+ {
171
+ "inputs": [],
172
+ "name": "LEVEL1_ROLE",
173
+ "outputs": [
174
+ {
175
+ "internalType": "bytes32",
176
+ "name": "",
177
+ "type": "bytes32"
178
+ }
179
+ ],
180
+ "stateMutability": "view",
181
+ "type": "function"
182
+ },
183
+ {
184
+ "inputs": [],
185
+ "name": "LEVEL2_ROLE",
186
+ "outputs": [
187
+ {
188
+ "internalType": "bytes32",
189
+ "name": "",
190
+ "type": "bytes32"
191
+ }
192
+ ],
193
+ "stateMutability": "view",
194
+ "type": "function"
195
+ },
196
+ {
197
+ "inputs": [],
198
+ "name": "LEVEL3_ROLE",
199
+ "outputs": [
200
+ {
201
+ "internalType": "bytes32",
202
+ "name": "",
203
+ "type": "bytes32"
204
+ }
205
+ ],
206
+ "stateMutability": "view",
207
+ "type": "function"
208
+ },
209
+ {
210
+ "inputs": [
211
+ {
212
+ "internalType": "address",
213
+ "name": "component",
214
+ "type": "address"
215
+ },
216
+ {
217
+ "internalType": "bytes32",
218
+ "name": "role",
219
+ "type": "bytes32"
220
+ },
221
+ {
222
+ "internalType": "address",
223
+ "name": "account",
224
+ "type": "address"
225
+ },
226
+ {
227
+ "internalType": "bool",
228
+ "name": "alsoGlobal",
229
+ "type": "bool"
230
+ }
231
+ ],
232
+ "name": "checkComponentRole",
233
+ "outputs": [],
234
+ "stateMutability": "view",
235
+ "type": "function"
236
+ },
237
+ {
238
+ "inputs": [
239
+ {
240
+ "internalType": "address",
241
+ "name": "component",
242
+ "type": "address"
243
+ },
244
+ {
245
+ "internalType": "bytes32",
246
+ "name": "role1",
247
+ "type": "bytes32"
248
+ },
249
+ {
250
+ "internalType": "bytes32",
251
+ "name": "role2",
252
+ "type": "bytes32"
253
+ },
254
+ {
255
+ "internalType": "address",
256
+ "name": "account",
257
+ "type": "address"
258
+ },
259
+ {
260
+ "internalType": "bool",
261
+ "name": "alsoGlobal",
262
+ "type": "bool"
263
+ }
264
+ ],
265
+ "name": "checkComponentRole2",
266
+ "outputs": [],
267
+ "stateMutability": "view",
268
+ "type": "function"
269
+ },
270
+ {
271
+ "inputs": [
272
+ {
273
+ "internalType": "bytes32",
274
+ "name": "role",
275
+ "type": "bytes32"
276
+ },
277
+ {
278
+ "internalType": "address",
279
+ "name": "account",
280
+ "type": "address"
281
+ }
282
+ ],
283
+ "name": "checkRole",
284
+ "outputs": [],
285
+ "stateMutability": "view",
286
+ "type": "function"
287
+ },
288
+ {
289
+ "inputs": [
290
+ {
291
+ "internalType": "bytes32",
292
+ "name": "role1",
293
+ "type": "bytes32"
294
+ },
295
+ {
296
+ "internalType": "bytes32",
297
+ "name": "role2",
298
+ "type": "bytes32"
299
+ },
300
+ {
301
+ "internalType": "address",
302
+ "name": "account",
303
+ "type": "address"
304
+ }
305
+ ],
306
+ "name": "checkRole2",
307
+ "outputs": [],
308
+ "stateMutability": "view",
309
+ "type": "function"
310
+ },
311
+ {
312
+ "inputs": [
313
+ {
314
+ "internalType": "address",
315
+ "name": "component",
316
+ "type": "address"
317
+ },
318
+ {
319
+ "internalType": "bytes32",
320
+ "name": "role",
321
+ "type": "bytes32"
322
+ }
323
+ ],
324
+ "name": "getComponentRole",
325
+ "outputs": [
326
+ {
327
+ "internalType": "bytes32",
328
+ "name": "",
329
+ "type": "bytes32"
330
+ }
331
+ ],
332
+ "stateMutability": "pure",
333
+ "type": "function"
334
+ },
335
+ {
336
+ "inputs": [
337
+ {
338
+ "internalType": "bytes32",
339
+ "name": "role",
340
+ "type": "bytes32"
341
+ }
342
+ ],
343
+ "name": "getRoleAdmin",
344
+ "outputs": [
345
+ {
346
+ "internalType": "bytes32",
347
+ "name": "",
348
+ "type": "bytes32"
349
+ }
350
+ ],
351
+ "stateMutability": "view",
352
+ "type": "function"
353
+ },
354
+ {
355
+ "inputs": [
356
+ {
357
+ "internalType": "address",
358
+ "name": "component",
359
+ "type": "address"
360
+ },
361
+ {
362
+ "internalType": "bytes32",
363
+ "name": "role",
364
+ "type": "bytes32"
365
+ },
366
+ {
367
+ "internalType": "address",
368
+ "name": "account",
369
+ "type": "address"
370
+ }
371
+ ],
372
+ "name": "grantComponentRole",
373
+ "outputs": [],
374
+ "stateMutability": "nonpayable",
375
+ "type": "function"
376
+ },
377
+ {
378
+ "inputs": [
379
+ {
380
+ "internalType": "bytes32",
381
+ "name": "role",
382
+ "type": "bytes32"
383
+ },
384
+ {
385
+ "internalType": "address",
386
+ "name": "account",
387
+ "type": "address"
388
+ }
389
+ ],
390
+ "name": "grantRole",
391
+ "outputs": [],
392
+ "stateMutability": "nonpayable",
393
+ "type": "function"
394
+ },
395
+ {
396
+ "inputs": [
397
+ {
398
+ "internalType": "address",
399
+ "name": "component",
400
+ "type": "address"
401
+ },
402
+ {
403
+ "internalType": "bytes32",
404
+ "name": "role",
405
+ "type": "bytes32"
406
+ },
407
+ {
408
+ "internalType": "address",
409
+ "name": "account",
410
+ "type": "address"
411
+ },
412
+ {
413
+ "internalType": "bool",
414
+ "name": "alsoGlobal",
415
+ "type": "bool"
416
+ }
417
+ ],
418
+ "name": "hasComponentRole",
419
+ "outputs": [
420
+ {
421
+ "internalType": "bool",
422
+ "name": "",
423
+ "type": "bool"
424
+ }
425
+ ],
426
+ "stateMutability": "view",
427
+ "type": "function"
428
+ },
429
+ {
430
+ "inputs": [
431
+ {
432
+ "internalType": "bytes32",
433
+ "name": "role",
434
+ "type": "bytes32"
435
+ },
436
+ {
437
+ "internalType": "address",
438
+ "name": "account",
439
+ "type": "address"
440
+ }
441
+ ],
442
+ "name": "hasRole",
443
+ "outputs": [
444
+ {
445
+ "internalType": "bool",
446
+ "name": "",
447
+ "type": "bool"
448
+ }
449
+ ],
450
+ "stateMutability": "view",
451
+ "type": "function"
452
+ },
453
+ {
454
+ "inputs": [],
455
+ "name": "initialize",
456
+ "outputs": [],
457
+ "stateMutability": "nonpayable",
458
+ "type": "function"
459
+ },
460
+ {
461
+ "inputs": [],
462
+ "name": "proxiableUUID",
463
+ "outputs": [
464
+ {
465
+ "internalType": "bytes32",
466
+ "name": "",
467
+ "type": "bytes32"
468
+ }
469
+ ],
470
+ "stateMutability": "view",
471
+ "type": "function"
472
+ },
473
+ {
474
+ "inputs": [
475
+ {
476
+ "internalType": "bytes32",
477
+ "name": "role",
478
+ "type": "bytes32"
479
+ },
480
+ {
481
+ "internalType": "address",
482
+ "name": "account",
483
+ "type": "address"
484
+ }
485
+ ],
486
+ "name": "renounceRole",
487
+ "outputs": [],
488
+ "stateMutability": "nonpayable",
489
+ "type": "function"
490
+ },
491
+ {
492
+ "inputs": [
493
+ {
494
+ "internalType": "bytes32",
495
+ "name": "role",
496
+ "type": "bytes32"
497
+ },
498
+ {
499
+ "internalType": "address",
500
+ "name": "account",
501
+ "type": "address"
502
+ }
503
+ ],
504
+ "name": "revokeRole",
505
+ "outputs": [],
506
+ "stateMutability": "nonpayable",
507
+ "type": "function"
508
+ },
509
+ {
510
+ "inputs": [
511
+ {
512
+ "internalType": "bytes4",
513
+ "name": "interfaceId",
514
+ "type": "bytes4"
515
+ }
516
+ ],
517
+ "name": "supportsInterface",
518
+ "outputs": [
519
+ {
520
+ "internalType": "bool",
521
+ "name": "",
522
+ "type": "bool"
523
+ }
524
+ ],
525
+ "stateMutability": "view",
526
+ "type": "function"
527
+ },
528
+ {
529
+ "inputs": [
530
+ {
531
+ "internalType": "address",
532
+ "name": "newImplementation",
533
+ "type": "address"
534
+ }
535
+ ],
536
+ "name": "upgradeTo",
537
+ "outputs": [],
538
+ "stateMutability": "nonpayable",
539
+ "type": "function"
540
+ },
541
+ {
542
+ "inputs": [
543
+ {
544
+ "internalType": "address",
545
+ "name": "newImplementation",
546
+ "type": "address"
547
+ },
548
+ {
549
+ "internalType": "bytes",
550
+ "name": "data",
551
+ "type": "bytes"
552
+ }
553
+ ],
554
+ "name": "upgradeToAndCall",
555
+ "outputs": [],
556
+ "stateMutability": "payable",
557
+ "type": "function"
558
+ }
559
+ ],
560
+ "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100e2565b600054610100900460ff161561008e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100e0576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516117326101196000396000818161059b015281816105db01528181610693015281816106d3015261076201526117326000f3fe6080604052600436106101355760003560e01c806352d1902d116100ab578063a217fddf1161006f578063a217fddf14610388578063b3efcbd21461039d578063c5b8f5cf146103bd578063d547741f146103dd578063f67b2bad146103fd578063f6a421fc1461043157600080fd5b806352d1902d146102ea5780635b494dd5146102ff5780635ff57d20146103335780638129fc1c1461035357806391d148541461036857600080fd5b80632f2ff15d116100fd5780632f2ff15d1461022357806336568abe146102435780633659cfe614610263578063374c96c8146102835780634a47a3e0146102a35780634f1ef286146102d757600080fd5b806301ffc9a71461013a57806312d9a6ad1461016f578063248a9ca31461019157806324ea54f4146101cf5780632b1cff1f14610203575b600080fd5b34801561014657600080fd5b5061015a610155366004611198565b610451565b60405190151581526020015b60405180910390f35b34801561017b57600080fd5b5061018f61018a3660046111de565b61047d565b005b34801561019d57600080fd5b506101c16101ac36600461120a565b60009081526065602052604090206001015490565b604051908152602001610166565b3480156101db57600080fd5b506101c17f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b34801561020f57600080fd5b5061018f61021e366004611233565b61048b565b34801561022f57600080fd5b5061018f61023e3660046111de565b6104e8565b34801561024f57600080fd5b5061018f61025e3660046111de565b610512565b34801561026f57600080fd5b5061018f61027e36600461128a565b610591565b34801561028f57600080fd5b506101c161029e3660046112a5565b610670565b3480156102af57600080fd5b506101c17fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b61018f6102e53660046112e5565b610689565b3480156102f657600080fd5b506101c1610755565b34801561030b57600080fd5b506101c17f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b34801561033f57600080fd5b5061018f61034e3660046113a7565b610808565b34801561035f57600080fd5b5061018f610834565b34801561037457600080fd5b5061015a6103833660046111de565b610954565b34801561039457600080fd5b506101c1600081565b3480156103a957600080fd5b5061015a6103b83660046113a7565b61097f565b3480156103c957600080fd5b5061018f6103d83660046113f4565b6109b5565b3480156103e957600080fd5b5061018f6103f83660046111de565b6109cd565b34801561040957600080fd5b506101c17fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb281565b34801561043d57600080fd5b5061018f61044c366004611429565b6109f2565b600061045c82610a1b565b8061047757506001600160e01b0319821663272b8c4760e01b145b92915050565b6104878282610a50565b5050565b80801561049d575061049d8483610954565b6104e1576104b46104ae8686610670565b83610954565b6104e1578080156104ca57506104ca8383610954565b6104e1576104e16104db8685610670565b83610a50565b5050505050565b60008281526065602052604090206001015461050381610ab4565b61050d8383610abe565b505050565b6001600160a01b03811633146105875760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104878282610b44565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105d95760405162461bcd60e51b815260040161057e9061145c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106226000805160206116b6833981519152546001600160a01b031690565b6001600160a01b0316146106485760405162461bcd60e51b815260040161057e906114a8565b61065181610bab565b6040805160008082526020820190925261066d91839190610c05565b50565b60609190911b6bffffffffffffffffffffffff19161890565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106d15760405162461bcd60e51b815260040161057e9061145c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661071a6000805160206116b6833981519152546001600160a01b031690565b6001600160a01b0316146107405760405162461bcd60e51b815260040161057e906114a8565b61074982610bab565b61048782826001610c05565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107f55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161057e565b506000805160206116b683398151915290565b80158061081c575061081a8383610954565b155b1561082e5761082e6104db8585610670565b50505050565b600054610100900460ff16158080156108545750600054600160ff909116105b8061086e5750303b15801561086e575060005460ff166001145b6108d15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161057e565b6000805460ff1916600117905580156108f4576000805461ff0019166101001790555b6108fc610d70565b610904610d70565b61090c610d99565b801561066d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081801561099357506109938484610954565b806109ac57506109ac6109a68686610670565b84610954565b95945050505050565b6109bf8382610954565b61050d5761050d8282610a50565b6000828152606560205260409020600101546109e881610ab4565b61050d8383610b44565b6109ff6101ac8484610670565b610a0881610ab4565b61082e610a158585610670565b83610abe565b60006001600160e01b03198216637965db0b60e01b148061047757506301ffc9a760e01b6001600160e01b0319831614610477565b610a5a8282610954565b61048757610a72816001600160a01b03166014610dcb565b610a7d836020610dcb565b604051602001610a8e929190611518565b60408051601f198184030181529082905262461bcd60e51b825261057e9160040161158d565b61066d8133610a50565b610ac88282610954565b6104875760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610b003390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610b4e8282610954565b156104875760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50417fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2610bf78233610954565b61050d5761050d8133610a50565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610c385761050d83610f6e565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c92575060408051601f3d908101601f19168201909252610c8f918101906115c0565b60015b610cf55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161057e565b6000805160206116b68339815191528114610d645760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161057e565b5061050d83838361100a565b600054610100900460ff16610d975760405162461bcd60e51b815260040161057e906115d9565b565b600054610100900460ff16610dc05760405162461bcd60e51b815260040161057e906115d9565b610d9760003361102f565b60606000610dda83600261163a565b610de5906002611659565b67ffffffffffffffff811115610dfd57610dfd6112cf565b6040519080825280601f01601f191660200182016040528015610e27576020820181803683370190505b509050600360fc1b81600081518110610e4257610e4261166c565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610e7157610e7161166c565b60200101906001600160f81b031916908160001a9053506000610e9584600261163a565b610ea0906001611659565b90505b6001811115610f18576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610ed457610ed461166c565b1a60f81b828281518110610eea57610eea61166c565b60200101906001600160f81b031916908160001a90535060049490941c93610f1181611682565b9050610ea3565b508315610f675760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161057e565b9392505050565b6001600160a01b0381163b610fdb5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161057e565b6000805160206116b683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61101383611039565b6000825111806110205750805b1561050d5761082e8383611079565b6104878282610abe565b61104281610f6e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6110e15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161057e565b600080846001600160a01b0316846040516110fc9190611699565b600060405180830381855af49150503d8060008114611137576040519150601f19603f3d011682016040523d82523d6000602084013e61113c565b606091505b50915091506109ac82826040518060600160405280602781526020016116d6602791396060831561116e575081610f67565b82511561117e5782518084602001fd5b8160405162461bcd60e51b815260040161057e919061158d565b6000602082840312156111aa57600080fd5b81356001600160e01b031981168114610f6757600080fd5b80356001600160a01b03811681146111d957600080fd5b919050565b600080604083850312156111f157600080fd5b82359150611201602084016111c2565b90509250929050565b60006020828403121561121c57600080fd5b5035919050565b803580151581146111d957600080fd5b600080600080600060a0868803121561124b57600080fd5b611254866111c2565b94506020860135935060408601359250611270606087016111c2565b915061127e60808701611223565b90509295509295909350565b60006020828403121561129c57600080fd5b610f67826111c2565b600080604083850312156112b857600080fd5b6112c1836111c2565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156112f857600080fd5b611301836111c2565b9150602083013567ffffffffffffffff8082111561131e57600080fd5b818501915085601f83011261133257600080fd5b813581811115611344576113446112cf565b604051601f8201601f19908116603f0116810190838211818310171561136c5761136c6112cf565b8160405282815288602084870101111561138557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080608085870312156113bd57600080fd5b6113c6856111c2565b9350602085013592506113db604086016111c2565b91506113e960608601611223565b905092959194509250565b60008060006060848603121561140957600080fd5b8335925060208401359150611420604085016111c2565b90509250925092565b60008060006060848603121561143e57600080fd5b611447846111c2565b925060208401359150611420604085016111c2565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60005b8381101561150f5781810151838201526020016114f7565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516115508160178501602088016114f4565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516115818160288401602088016114f4565b01602801949350505050565b60208152600082518060208401526115ac8160408501602087016114f4565b601f01601f19169190910160400192915050565b6000602082840312156115d257600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561165457611654611624565b500290565b8082018082111561047757610477611624565b634e487b7160e01b600052603260045260246000fd5b60008161169157611691611624565b506000190190565b600082516116ab8184602087016114f4565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207b6cd96e751d2488889bf9761127fef07ba538dc0d49e8a1b01c4d08140d58d364736f6c63430008100033",
561
+ "deployedBytecode": "0x6080604052600436106101355760003560e01c806352d1902d116100ab578063a217fddf1161006f578063a217fddf14610388578063b3efcbd21461039d578063c5b8f5cf146103bd578063d547741f146103dd578063f67b2bad146103fd578063f6a421fc1461043157600080fd5b806352d1902d146102ea5780635b494dd5146102ff5780635ff57d20146103335780638129fc1c1461035357806391d148541461036857600080fd5b80632f2ff15d116100fd5780632f2ff15d1461022357806336568abe146102435780633659cfe614610263578063374c96c8146102835780634a47a3e0146102a35780634f1ef286146102d757600080fd5b806301ffc9a71461013a57806312d9a6ad1461016f578063248a9ca31461019157806324ea54f4146101cf5780632b1cff1f14610203575b600080fd5b34801561014657600080fd5b5061015a610155366004611198565b610451565b60405190151581526020015b60405180910390f35b34801561017b57600080fd5b5061018f61018a3660046111de565b61047d565b005b34801561019d57600080fd5b506101c16101ac36600461120a565b60009081526065602052604090206001015490565b604051908152602001610166565b3480156101db57600080fd5b506101c17f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b34801561020f57600080fd5b5061018f61021e366004611233565b61048b565b34801561022f57600080fd5b5061018f61023e3660046111de565b6104e8565b34801561024f57600080fd5b5061018f61025e3660046111de565b610512565b34801561026f57600080fd5b5061018f61027e36600461128a565b610591565b34801561028f57600080fd5b506101c161029e3660046112a5565b610670565b3480156102af57600080fd5b506101c17fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b61018f6102e53660046112e5565b610689565b3480156102f657600080fd5b506101c1610755565b34801561030b57600080fd5b506101c17f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b34801561033f57600080fd5b5061018f61034e3660046113a7565b610808565b34801561035f57600080fd5b5061018f610834565b34801561037457600080fd5b5061015a6103833660046111de565b610954565b34801561039457600080fd5b506101c1600081565b3480156103a957600080fd5b5061015a6103b83660046113a7565b61097f565b3480156103c957600080fd5b5061018f6103d83660046113f4565b6109b5565b3480156103e957600080fd5b5061018f6103f83660046111de565b6109cd565b34801561040957600080fd5b506101c17fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb281565b34801561043d57600080fd5b5061018f61044c366004611429565b6109f2565b600061045c82610a1b565b8061047757506001600160e01b0319821663272b8c4760e01b145b92915050565b6104878282610a50565b5050565b80801561049d575061049d8483610954565b6104e1576104b46104ae8686610670565b83610954565b6104e1578080156104ca57506104ca8383610954565b6104e1576104e16104db8685610670565b83610a50565b5050505050565b60008281526065602052604090206001015461050381610ab4565b61050d8383610abe565b505050565b6001600160a01b03811633146105875760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104878282610b44565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105d95760405162461bcd60e51b815260040161057e9061145c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106226000805160206116b6833981519152546001600160a01b031690565b6001600160a01b0316146106485760405162461bcd60e51b815260040161057e906114a8565b61065181610bab565b6040805160008082526020820190925261066d91839190610c05565b50565b60609190911b6bffffffffffffffffffffffff19161890565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106d15760405162461bcd60e51b815260040161057e9061145c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661071a6000805160206116b6833981519152546001600160a01b031690565b6001600160a01b0316146107405760405162461bcd60e51b815260040161057e906114a8565b61074982610bab565b61048782826001610c05565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107f55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161057e565b506000805160206116b683398151915290565b80158061081c575061081a8383610954565b155b1561082e5761082e6104db8585610670565b50505050565b600054610100900460ff16158080156108545750600054600160ff909116105b8061086e5750303b15801561086e575060005460ff166001145b6108d15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161057e565b6000805460ff1916600117905580156108f4576000805461ff0019166101001790555b6108fc610d70565b610904610d70565b61090c610d99565b801561066d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081801561099357506109938484610954565b806109ac57506109ac6109a68686610670565b84610954565b95945050505050565b6109bf8382610954565b61050d5761050d8282610a50565b6000828152606560205260409020600101546109e881610ab4565b61050d8383610b44565b6109ff6101ac8484610670565b610a0881610ab4565b61082e610a158585610670565b83610abe565b60006001600160e01b03198216637965db0b60e01b148061047757506301ffc9a760e01b6001600160e01b0319831614610477565b610a5a8282610954565b61048757610a72816001600160a01b03166014610dcb565b610a7d836020610dcb565b604051602001610a8e929190611518565b60408051601f198184030181529082905262461bcd60e51b825261057e9160040161158d565b61066d8133610a50565b610ac88282610954565b6104875760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610b003390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610b4e8282610954565b156104875760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50417fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2610bf78233610954565b61050d5761050d8133610a50565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610c385761050d83610f6e565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c92575060408051601f3d908101601f19168201909252610c8f918101906115c0565b60015b610cf55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161057e565b6000805160206116b68339815191528114610d645760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161057e565b5061050d83838361100a565b600054610100900460ff16610d975760405162461bcd60e51b815260040161057e906115d9565b565b600054610100900460ff16610dc05760405162461bcd60e51b815260040161057e906115d9565b610d9760003361102f565b60606000610dda83600261163a565b610de5906002611659565b67ffffffffffffffff811115610dfd57610dfd6112cf565b6040519080825280601f01601f191660200182016040528015610e27576020820181803683370190505b509050600360fc1b81600081518110610e4257610e4261166c565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610e7157610e7161166c565b60200101906001600160f81b031916908160001a9053506000610e9584600261163a565b610ea0906001611659565b90505b6001811115610f18576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610ed457610ed461166c565b1a60f81b828281518110610eea57610eea61166c565b60200101906001600160f81b031916908160001a90535060049490941c93610f1181611682565b9050610ea3565b508315610f675760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161057e565b9392505050565b6001600160a01b0381163b610fdb5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161057e565b6000805160206116b683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61101383611039565b6000825111806110205750805b1561050d5761082e8383611079565b6104878282610abe565b61104281610f6e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6110e15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161057e565b600080846001600160a01b0316846040516110fc9190611699565b600060405180830381855af49150503d8060008114611137576040519150601f19603f3d011682016040523d82523d6000602084013e61113c565b606091505b50915091506109ac82826040518060600160405280602781526020016116d6602791396060831561116e575081610f67565b82511561117e5782518084602001fd5b8160405162461bcd60e51b815260040161057e919061158d565b6000602082840312156111aa57600080fd5b81356001600160e01b031981168114610f6757600080fd5b80356001600160a01b03811681146111d957600080fd5b919050565b600080604083850312156111f157600080fd5b82359150611201602084016111c2565b90509250929050565b60006020828403121561121c57600080fd5b5035919050565b803580151581146111d957600080fd5b600080600080600060a0868803121561124b57600080fd5b611254866111c2565b94506020860135935060408601359250611270606087016111c2565b915061127e60808701611223565b90509295509295909350565b60006020828403121561129c57600080fd5b610f67826111c2565b600080604083850312156112b857600080fd5b6112c1836111c2565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156112f857600080fd5b611301836111c2565b9150602083013567ffffffffffffffff8082111561131e57600080fd5b818501915085601f83011261133257600080fd5b813581811115611344576113446112cf565b604051601f8201601f19908116603f0116810190838211818310171561136c5761136c6112cf565b8160405282815288602084870101111561138557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080608085870312156113bd57600080fd5b6113c6856111c2565b9350602085013592506113db604086016111c2565b91506113e960608601611223565b905092959194509250565b60008060006060848603121561140957600080fd5b8335925060208401359150611420604085016111c2565b90509250925092565b60008060006060848603121561143e57600080fd5b611447846111c2565b925060208401359150611420604085016111c2565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60005b8381101561150f5781810151838201526020016114f7565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516115508160178501602088016114f4565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516115818160288401602088016114f4565b01602801949350505050565b60208152600082518060208401526115ac8160408501602087016114f4565b601f01601f19169190910160400192915050565b6000602082840312156115d257600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561165457611654611624565b500290565b8082018082111561047757610477611624565b634e487b7160e01b600052603260045260246000fd5b60008161169157611691611624565b506000190190565b600082516116ab8184602087016114f4565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207b6cd96e751d2488889bf9761127fef07ba538dc0d49e8a1b01c4d08140d58d364736f6c63430008100033",
562
+ "linkReferences": {},
563
+ "deployedLinkReferences": {}
564
+ }