BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Kord.Fi legacy tez deposit
DelegatableFA1FA1.2
operations (34.1K)Storage Code Interact Tokens Fork Statistics Details
Latest
​x
892
1731
 
1
parameter (or
2
            (or
3
              (or
4
                (or
5
                  (or (pair %approve (address %spender) (nat %value))
6
                      (unit %calculateLbPrice))
7
                  (or (unit %default) (unit %depositLending)))
8
                (or
9
                  (or (unit %disableOnchainLiquidation)
10
                      (pair %flashloan (contract %callback unit) (mutez %requested_xtz)))
11
                  (or (unit %flashloanFinalize)
12
                      (or (unit %flashloanReturn)
13
                          (pair %getAdministrator unit (contract address))))))
14
              (or
15
                (or
16
                  (or
17
                    (pair %getAllowance (pair (address %owner) (address %spender))
18
                                        (contract nat))
19
                    (pair %getBalance address (contract nat)))
20
                  (or (pair %getTotalSupply unit (contract nat))
21
                      (or
22
                        (pair %investLB (mutez %amount2tzBTC)
23
                                        (pair (nat %mintzBTCTokensBought)
24
                                              (pair (mutez %amount2Lqt)
25
                                                    (pair (nat %minLqtMinted)
26
                                                          (nat %tzBTCShares)))))
27
                        (pair %investLBFinalize (address %address)
28
                                                (pair (mutez %initial_balance)
29
                                                      (nat %initial_lb_shares))))))
30
                (or
31
                  (or (address %liquidateLB)
32
                      (pair %liquidateLBFinalize (address %address)
33
                                                 (pair (address %sender)
34
                                                       (mutez %sent_amount))))
35
                  (or (address %liquidateOnchainLB)
36
                      (or
37
                        (pair %liquidateOnchainLBFinalize (address %address)
38
                                                          (mutez %initial_balance))
39
                        (pair %redeemLB (nat %lqtBurned) (nat %minTokensWithdrawn)))))))
40
            (or
41
              (or
42
                (or
43
                  (or
44
                    (pair %redeemLBFinalize (address %address)
45
                                            (pair (nat %lqtBurned)
46
                                                  (mutez %initial_balance)))
47
                    (mutez %redeemLending))
48
                  (or (nat %sellTzBTC) (address %setAdministrator)))
49
                (or (or (option %setDelegate key_hash) (address %setDexContract))
50
                    (or
51
                      (pair %setFlashloanParams (nat %flashloan_admin_commission)
52
                                                (pair
53
                                                  (nat %flashloan_deposit_commission)
54
                                                  (bool %flashloan_available)))
55
                      (or (bool %setIsWorkingStatus) (nat %setLbPriceChangeRate)))))
56
              (or
57
                (or
58
                  (or
59
                    (pair %setLeverageParams (nat %max_leverage)
60
                                             (pair (nat %onchain_liquidation_percent)
61
                                                   (pair (nat %onchain_liquidation_comm)
62
                                                         (pair
63
                                                           (nat %liquidation_percent)
64
                                                           (pair
65
                                                             (nat %liquidation_price_percent)
66
                                                             (pair
67
                                                               (nat %liquidation_comm)
68
                                                               (address %oracle_address)))))))
69
                    (pair %setRateParams (nat %rate_1)
70
                                         (pair (nat %rate_diff)
71
                                               (pair (nat %threshold_percent_1)
72
                                                     (nat %threshold_percent_2)))))
73
                  (or (nat %setUpfrontCommission)
74
                      (or
75
                        (pair %transfer (address %from)
76
                                        (pair (address %to) (nat %value)))
77
                        (unit %updateIndexes))))
78
                (or (or (nat %updateLBCallback) (nat %updateLqtTotalCallback))
79
                    (or (nat %updateTzbtcPoolCallback)
80
                        (or (pair %update_metadata (string %key) (bytes %value))
81
                            (unit %withdrawCommission)))))));
82
storage (pair
83
          (pair
84
            (pair
85
              (pair (pair (address %administrator) (nat %deposit_index))
86
                    (pair (address %dex_contract_address) (address %fa_lb_address)))
87
              (pair (pair (address %fa_tzBTC_address) (nat %flashloan_admin_commission))
88
                    (pair (mutez %flashloan_amount)
89
                          (pair (bool %flashloan_available)
90
                                (nat %flashloan_deposit_commission)))))
91
            (pair
92
              (pair (pair (nat %gross_credit_index) (nat %index_delta))
93
                    (pair (timestamp %index_update_dttm) (bool %is_working)))
94
              (pair (pair (nat %lb_price) (nat %lb_price_change_rate))
95
                    (pair (nat %lb_shares)
96
                          (pair
97
                            (big_map %ledger address
98
                                             (pair (map %approvals address nat)
99
                                                   (nat %balance)))
100
                            (nat %liquidation_comm))))))
101
          (pair
102
            (pair
103
              (pair (pair (nat %liquidation_percent) (nat %liquidation_price_percent))
104
                    (pair (address %liquidity_baking_address)
105
                          (big_map %liquidity_book address
106
                                                   (pair (nat %gross_credit)
107
                                                         (pair (nat %lb_shares)
108
                                                               (nat %net_credit))))))
109
              (pair
110
                (pair
111
                  (pair %local_params
112
                    (pair (bool %fa_lb_callback_status) (bool %fa_tzBTC_callback_status))
113
                    (pair (nat %lqt_total) (nat %tzbtc_pool)))
114
                  (nat %max_leverage))
115
                (pair (big_map %metadata string bytes)
116
                      (pair (nat %net_credit_index)
117
                            (bool %onchain_liquidation_available)))))
118
            (pair
119
              (pair
120
                (pair (nat %onchain_liquidation_comm) (nat %onchain_liquidation_percent))
121
                (pair (address %oracle_address)
122
                      (pair %rate_params (pair (nat %rate_1) (nat %rate_diff))
123
                                         (pair (nat %threshold_percent_1)
124
                                               (nat %threshold_percent_2)))))
125
              (pair
126
                (pair
127
                  (big_map %token_metadata nat
128
                                           (pair (nat %token_id)
129
                                                 (map %token_info string bytes)))
130
                  (nat %totalSupply))
131
                (pair (nat %total_gross_credit)
132
                      (pair (nat %total_net_credit) (nat %upfront_commission)))))));
133
code { LAMBDA
134
         (pair unit
135
               (pair
136
                 (pair
137
                   (pair (pair (pair address nat) (pair address address))
138
                         (pair (pair address nat) (pair mutez (pair bool nat))))
139
                   (pair (pair (pair nat nat) (pair timestamp bool))
140
                         (pair (pair nat nat)
141
                               (pair nat
142
                                     (pair
143
                                       (big_map address (pair (map address nat) nat))
144
                                       nat)))))
145
                 (pair
146
                   (pair
147
                     (pair (pair nat nat)
148
                           (pair address (big_map address (pair nat (pair nat nat)))))
149
                     (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
150
                           (pair (big_map string bytes) (pair nat bool))))
151
                   (pair
152
                     (pair (pair nat nat)
153
                           (pair address (pair (pair nat nat) (pair nat nat))))
154
                     (pair (pair (big_map nat (pair nat (map string bytes))) nat)
155
                           (pair nat (pair nat nat)))))))
156
         (pair unit
157
               (pair
158
                 (pair
159
                   (pair (pair (pair address nat) (pair address address))
160
                         (pair (pair address nat) (pair mutez (pair bool nat))))
161
                   (pair (pair (pair nat nat) (pair timestamp bool))
162
                         (pair (pair nat nat)
163
                               (pair nat
164
                                     (pair
165
                                       (big_map address (pair (map address nat) nat))
166
                                       nat)))))
167
                 (pair
168
                   (pair
169
                     (pair (pair nat nat)
170
                           (pair address (big_map address (pair nat (pair nat nat)))))
171
                     (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
172
                           (pair (big_map string bytes) (pair nat bool))))
173
                   (pair
174
                     (pair (pair nat nat)
175
                           (pair address (pair (pair nat nat) (pair nat nat))))
176
                     (pair (pair (big_map nat (pair nat (map string bytes))) nat)
177
                           (pair nat (pair nat nat)))))))
178
         { CDR ;
179
           DUP ;
180
           GET 3 ;
181
           GET 7 ;
182
           SWAP ;
183
           DUP ;
184
           DUG 2 ;
185
           GET 11 ;
186
           MUL ;
187
           SWAP ;
188
           DUP ;
189
           CAR ;
190
           CAR ;
191
           CAR ;
192
           CAR ;
193
           CDR ;
194
           SWAP ;
195
           DUP ;
196
           DUG 3 ;
197
           GET 7 ;
198
           CDR ;
199
           MUL ;
200
           COMPARE ;
201
           GE ;
202
           IF
203
             {}
204
             { PUSH string "total deposit and net credit inequation error" ; FAILWITH } ;
205
           UNIT ;
206
           PAIR } ;
207
       SWAP ;
208
       LAMBDA
209
         (pair unit
210
               (pair (list operation)
211
                     (pair
212
                       (pair
213
                         (pair (pair (pair address nat) (pair address address))
214
                               (pair (pair address nat) (pair mutez (pair bool nat))))
215
                         (pair (pair (pair nat nat) (pair timestamp bool))
216
                               (pair (pair nat nat)
217
                                     (pair nat
218
                                           (pair
219
                                             (big_map address
220
                                                      (pair (map address nat) nat))
221
                                             nat)))))
222
                       (pair
223
                         (pair
224
                           (pair (pair nat nat)
225
                                 (pair address
226
                                       (big_map address (pair nat (pair nat nat)))))
227
                           (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
228
                                 (pair (big_map string bytes) (pair nat bool))))
229
                         (pair
230
                           (pair (pair nat nat)
231
                                 (pair address (pair (pair nat nat) (pair nat nat))))
232
                           (pair (pair (big_map nat (pair nat (map string bytes))) nat)
233
                                 (pair nat (pair nat nat))))))))
234
         (pair unit
235
               (pair (list operation)
236
                     (pair
237
                       (pair
238
                         (pair (pair (pair address nat) (pair address address))
239
                               (pair (pair address nat) (pair mutez (pair bool nat))))
240
                         (pair (pair (pair nat nat) (pair timestamp bool))
241
                               (pair (pair nat nat)
242
                                     (pair nat
243
                                           (pair
244
                                             (big_map address
245
                                                      (pair (map address nat) nat))
246
                                             nat)))))
247
                       (pair
248
                         (pair
249
                           (pair (pair nat nat)
250
                                 (pair address
251
                                       (big_map address (pair nat (pair nat nat)))))
252
                           (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
253
                                 (pair (big_map string bytes) (pair nat bool))))
254
                         (pair
255
                           (pair (pair nat nat)
256
                                 (pair address (pair (pair nat nat) (pair nat nat))))
257
                           (pair (pair (big_map nat (pair nat (map string bytes))) nat)
258
                                 (pair nat (pair nat nat))))))))
259
         { UNPAIR 3 ;
260
           SWAP ;
261
           DUP 3 ;
262
           CAR ;
263
           GET 3 ;
264
           GET 3 ;
265
           NOW ;
266
           SUB ;
267
           ISNAT ;
268
           IF_NONE { PUSH int 568 ; FAILWITH } {} ;
269
           PUSH nat 0 ;
270
           PUSH nat 0 ;
271
           DUP 6 ;
272
           GET 7 ;
273
           CDR ;
274
           COMPARE ;
275
           GT ;
276
           IF
277
             { DROP ;
278
               DIG 3 ;
279
               DUP ;
280
               CAR ;
281
               CAR ;
282
               CAR ;
283
               CAR ;
284
               CDR ;
285
               SWAP ;
286
               DUP ;
287
               DUG 5 ;
288
               GET 7 ;
289
               CDR ;
290
               MUL ;
291
               PUSH nat 1000000000000 ;
292
               DIG 5 ;
293
               DUP ;
294
               GET 3 ;
295
               GET 7 ;
296
               SWAP ;
297
               DUP ;
298
               DUG 7 ;
299
               GET 11 ;
300
               MUL ;
301
               MUL ;
302
               EDIV ;
303
               IF_NONE { PUSH int 573 ; FAILWITH } { CAR } }
304
             {} ;
305
           PUSH nat 0 ;
306
           PUSH nat 0 ;
307
           DUP 7 ;
308
           GET 7 ;
309
           CDR ;
310
           COMPARE ;
311
           GT ;
312
           IF
313
             { DROP ;
314
               DIG 4 ;
315
               DUP ;
316
               CAR ;
317
               CAR ;
318
               CAR ;
319
               CAR ;
320
               CDR ;
321
               SWAP ;
322
               DUP ;
323
               DUG 6 ;
324
               GET 7 ;
325
               CDR ;
326
               MUL ;
327
               PUSH nat 1000000000000 ;
328
               DIG 6 ;
329
               DUP ;
330
               CAR ;
331
               GET 3 ;
332
               CAR ;
333
               CAR ;
334
               SWAP ;
335
               DUP ;
336
               DUG 8 ;
337
               GET 9 ;
338
               MUL ;
339
               MUL ;
340
               EDIV ;
341
               IF_NONE { PUSH int 527 ; FAILWITH } { CAR } }
342
             {} ;
343
           PUSH nat 10000000000 ;
344
           DUP 7 ;
345
           GET 5 ;
346
           GET 7 ;
347
           MUL ;
348
           PUSH nat 10000000000 ;
349
           DUP 8 ;
350
           GET 5 ;
351
           GET 8 ;
352
           MUL ;
353
           SWAP ;
354
           DUP ;
355
           DUG 2 ;
356
           DUP 4 ;
357
           COMPARE ;
358
           LT ;
359
           IF
360
             { SWAP ;
361
               DUP ;
362
               DUG 2 ;
363
               DUP 4 ;
364
               DUP 10 ;
365
               GET 5 ;
366
               GET 5 ;
367
               CAR ;
368
               MUL ;
369
               EDIV ;
370
               IF_NONE { PUSH int 540 ; FAILWITH } { CAR } ;
371
               DUG 2 }
372
             { DUP ;
373
               DUP 4 ;
374
               COMPARE ;
375
               LT ;
376
               IF
377
                 { DUP 8 ; GET 5 ; GET 5 ; CAR ; DUG 2 }
378
                 { PUSH nat 1000000000000 ;
379
                   DUP 4 ;
380
                   COMPARE ;
381
                   LT ;
382
                   IF
383
                     { DUP ;
384
                       PUSH nat 1000000000000 ;
385
                       SUB ;
386
                       ISNAT ;
387
                       IF_NONE { PUSH int 554 ; FAILWITH } {} ;
388
                       SWAP ;
389
                       DUP ;
390
                       DUG 2 ;
391
                       DUP 5 ;
392
                       SUB ;
393
                       ISNAT ;
394
                       IF_NONE { PUSH int 552 ; FAILWITH } {} ;
395
                       DUP 10 ;
396
                       GET 5 ;
397
                       GET 5 ;
398
                       CDR ;
399
                       MUL ;
400
                       EDIV ;
401
                       IF_NONE { PUSH int 552 ; FAILWITH } { CAR } ;
402
                       DUP 9 ;
403
                       GET 5 ;
404
                       GET 5 ;
405
                       CAR ;
406
                       ADD ;
407
                       DUG 2 }
408
                     { DIG 7 ; DUP ; GET 5 ; GET 5 ; CDR ; SWAP ; DUP ; DUG 9 ; GET 5 ; GET 5 ; CAR ; ADD ; DUG 2 } } } ;
409
           DUP 9 ;
410
           UNPAIR ;
411
           UNPAIR ;
412
           SWAP ;
413
           UNPAIR ;
414
           UNPAIR ;
415
           CDR ;
416
           PUSH nat 1000000000000 ;
417
           DUP 12 ;
418
           DUP 10 ;
419
           MUL ;
420
           PUSH nat 1000000000000 ;
421
           ADD ;
422
           DIG 15 ;
423
           CAR ;
424
           GET 3 ;
425
           CAR ;
426
           CAR ;
427
           MUL ;
428
           NEG ;
429
           EDIV ;
430
           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
431
           CAR ;
432
           ABS ;
433
           PAIR ;
434
           PAIR ;
435
           PAIR ;
436
           SWAP ;
437
           PAIR ;
438
           PAIR ;
439
           DUG 8 ;
440
           PUSH nat 0 ;
441
           DUP 10 ;
442
           CAR ;
443
           GET 3 ;
444
           GET 4 ;
445
           IF
446
             { DROP 3 ;
447
               SWAP ;
448
               DROP ;
449
               DIG 4 ;
450
               DROP ;
451
               PUSH nat 10 ;
452
               PUSH nat 9 ;
453
               DIG 2 ;
454
               MUL ;
455
               EDIV ;
456
               IF_NONE { PUSH int 583 ; FAILWITH } { CAR } }
457
             { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 4 ; DROP } ;
458
           DUP 5 ;
459
           UNPAIR ;
460
           SWAP ;
461
           UNPAIR ;
462
           UNPAIR ;
463
           SWAP ;
464
           UNPAIR ;
465
           SWAP ;
466
           UNPAIR ;
467
           SWAP ;
468
           CDR ;
469
           PUSH nat 1000000000000 ;
470
           DUP 10 ;
471
           DUP 9 ;
472
           MUL ;
473
           PUSH nat 1000000000000 ;
474
           ADD ;
475
           DIG 12 ;
476
           GET 3 ;
477
           GET 7 ;
478
           MUL ;
479
           NEG ;
480
           EDIV ;
481
           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
482
           CAR ;
483
           ABS ;
484
           PAIR ;
485
           SWAP ;
486
           PAIR ;
487
           SWAP ;
488
           PAIR ;
489
           SWAP ;
490
           PAIR ;
491
           PAIR ;
492
           SWAP ;
493
           PAIR ;
494
           DUG 4 ;
495
           PUSH nat 1000000000000 ;
496
           DUG 2 ;
497
           MUL ;
498
           EDIV ;
499
           IF_NONE { PUSH int 586 ; FAILWITH } { CAR } ;
500
           DUP 4 ;
501
           UNPAIR ;
502
           UNPAIR ;
503
           UNPAIR ;
504
           UNPAIR ;
505
           CAR ;
506
           PUSH nat 1000000000000 ;
507
           DIG 7 ;
508
           DIG 7 ;
509
           MUL ;
510
           PUSH nat 1000000000000 ;
511
           ADD ;
512
           DIG 8 ;
513
           CAR ;
514
           CAR ;
515
           CAR ;
516
           CAR ;
517
           CDR ;
518
           MUL ;
519
           EDIV ;
520
           IF_NONE { PUSH int 587 ; FAILWITH } { CAR } ;
521
           SWAP ;
522
           PAIR ;
523
           PAIR ;
524
           PAIR ;
525
           PAIR ;
526
           PAIR ;
527
           SWAP ;
528
           UNIT ;
529
           PAIR 3 } ;
530
       SWAP ;
531
       UNPAIR ;
532
       IF_LEFT
533
         { IF_LEFT
534
             { IF_LEFT
535
                 { DIG 3 ;
536
                   DROP ;
537
                   IF_LEFT
538
                     { DIG 2 ;
539
                       DROP ;
540
                       IF_LEFT
541
                         { SWAP ;
542
                           DUP ;
543
                           DUG 2 ;
544
                           CAR ;
545
                           GET 9 ;
546
                           SENDER ;
547
                           MEM ;
548
                           IF
549
                             {}
550
                             { SWAP ;
551
                               UNPAIR ;
552
                               UNPAIR ;
553
                               SWAP ;
554
                               UNPAIR ;
555
                               SWAP ;
556
                               UNPAIR ;
557
                               SWAP ;
558
                               UNPAIR ;
559
                               SWAP ;
560
                               UNPAIR ;
561
                               PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ;
562
                               SENDER ;
563
                               UPDATE ;
564
                               PAIR ;
565
                               SWAP ;
566
                               PAIR ;
567
                               SWAP ;
568
                               PAIR ;
569
                               SWAP ;
570
                               PAIR ;
571
                               SWAP ;
572
                               PAIR ;
573
                               PAIR ;
574
                               SWAP } ;
575
                           PUSH nat 0 ;
576
                           DUP 3 ;
577
                           CAR ;
578
                           GET 9 ;
579
                           SENDER ;
580
                           GET ;
581
                           IF_NONE { PUSH int 95 ; FAILWITH } {} ;
582
                           CAR ;
583
                           DUP 3 ;
584
                           CAR ;
585
                           GET ;
586
                           IF_NONE { PUSH nat 0 } {} ;
587
                           COMPARE ;
588
                           EQ ;
589
                           IF
590
                             { PUSH bool True }
591
                             { DUP ; CDR ; PUSH nat 0 ; COMPARE ; EQ } ;
592
                           IF {} { PUSH string "UnsafeAllowanceChange" ; FAILWITH } ;
593
                           SWAP ;
594
                           UNPAIR ;
595
                           UNPAIR ;
596
                           SWAP ;
597
                           UNPAIR ;
598
                           SWAP ;
599
                           UNPAIR ;
600
                           SWAP ;
601
                           UNPAIR ;
602
                           SWAP ;
603
                           UNPAIR ;
604
                           DUP ;
605
                           SENDER ;
606
                           DUP ;
607
                           DUG 2 ;
608
                           GET ;
609
                           IF_NONE { PUSH int 97 ; FAILWITH } {} ;
610
                           DUP ;
611
                           CAR ;
612
                           DUP 11 ;
613
                           CDR ;
614
                           SOME ;
615
                           DIG 11 ;
616
                           CAR ;
617
                           UPDATE ;
618
                           UPDATE 1 ;
619
                           SOME ;
620
                           SWAP ;
621
                           UPDATE ;
622
                           PAIR ;
623
                           SWAP ;
624
                           PAIR ;
625
                           SWAP ;
626
                           PAIR ;
627
                           SWAP ;
628
                           PAIR ;
629
                           SWAP ;
630
                           PAIR ;
631
                           PAIR }
632
                         { DROP ;
633
                           SENDER ;
634
                           SELF_ADDRESS ;
635
                           COMPARE ;
636
                           EQ ;
637
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
638
                           DUP ;
639
                           GET 3 ;
640
                           GET 3 ;
641
                           CAR ;
642
                           GET 3 ;
643
                           PUSH nat 0 ;
644
                           COMPARE ;
645
                           LT ;
646
                           IF
647
                             { DUP ;
648
                               GET 3 ;
649
                               GET 3 ;
650
                               CAR ;
651
                               GET 3 ;
652
                               PUSH nat 1000000000000 ;
653
                               DUP 3 ;
654
                               GET 3 ;
655
                               GET 3 ;
656
                               CAR ;
657
                               GET 4 ;
658
                               MUL ;
659
                               EDIV ;
660
                               IF_NONE { PUSH int 606 ; FAILWITH } { CAR } ;
661
                               SWAP ;
662
                               DUP ;
663
                               DUG 2 ;
664
                               CAR ;
665
                               GET 5 ;
666
                               CAR ;
667
                               SWAP ;
668
                               DUP ;
669
                               DUG 2 ;
670
                               COMPARE ;
671
                               GT ;
672
                               IF
673
                                 { SWAP ;
674
                                   DUP ;
675
                                   DUG 2 ;
676
                                   UNPAIR ;
677
                                   UNPAIR ;
678
                                   SWAP ;
679
                                   UNPAIR ;
680
                                   SWAP ;
681
                                   UNPAIR ;
682
                                   CDR ;
683
                                   PUSH nat 1000000000000 ;
684
                                   DUP 8 ;
685
                                   CAR ;
686
                                   GET 3 ;
687
                                   GET 3 ;
688
                                   NOW ;
689
                                   SUB ;
690
                                   ISNAT ;
691
                                   IF_NONE { PUSH int 610 ; FAILWITH } {} ;
692
                                   DUP 9 ;
693
                                   CAR ;
694
                                   GET 5 ;
695
                                   CDR ;
696
                                   MUL ;
697
                                   PUSH nat 1000000000000 ;
698
                                   ADD ;
699
                                   DIG 8 ;
700
                                   CAR ;
701
                                   GET 5 ;
702
                                   CAR ;
703
                                   MUL ;
704
                                   EDIV ;
705
                                   IF_NONE { PUSH int 610 ; FAILWITH } { CAR } ;
706
                                   DIG 6 ;
707
                                   DUP ;
708
                                   DUP 3 ;
709
                                   COMPARE ;
710
                                   LE ;
711
                                   IF { DROP } { SWAP ; DROP } ;
712
                                   PAIR ;
713
                                   PAIR ;
714
                                   SWAP ;
715
                                   PAIR ;
716
                                   SWAP ;
717
                                   PAIR ;
718
                                   PAIR }
719
                                 { SWAP ;
720
                                   DUP ;
721
                                   DUG 2 ;
722
                                   UNPAIR ;
723
                                   UNPAIR ;
724
                                   SWAP ;
725
                                   UNPAIR ;
726
                                   SWAP ;
727
                                   UNPAIR ;
728
                                   CDR ;
729
                                   PUSH nat 1000000000000 ;
730
                                   DUP 8 ;
731
                                   CAR ;
732
                                   GET 3 ;
733
                                   GET 3 ;
734
                                   NOW ;
735
                                   SUB ;
736
                                   ISNAT ;
737
                                   IF_NONE { PUSH int 616 ; FAILWITH } {} ;
738
                                   DUP 9 ;
739
                                   CAR ;
740
                                   GET 5 ;
741
                                   CDR ;
742
                                   MUL ;
743
                                   PUSH nat 1000000000000 ;
744
                                   SUB ;
745
                                   PUSH int 1 ;
746
                                   DUP ;
747
                                   DUP 3 ;
748
                                   COMPARE ;
749
                                   LE ;
750
                                   IF { SWAP ; DROP } { DROP } ;
751
                                   ISNAT ;
752
                                   IF_NONE { PUSH int 615 ; FAILWITH } {} ;
753
                                   DIG 8 ;
754
                                   CAR ;
755
                                   GET 5 ;
756
                                   CAR ;
757
                                   MUL ;
758
                                   EDIV ;
759
                                   IF_NONE { PUSH int 615 ; FAILWITH } { CAR } ;
760
                                   DIG 6 ;
761
                                   DUP ;
762
                                   DUP 3 ;
763
                                   COMPARE ;
764
                                   LE ;
765
                                   IF { SWAP ; DROP } { DROP } ;
766
                                   PAIR ;
767
                                   PAIR ;
768
                                   SWAP ;
769
                                   PAIR ;
770
                                   SWAP ;
771
                                   PAIR ;
772
                                   PAIR } }
773
                             {} ;
774
                           UNPAIR ;
775
                           UNPAIR ;
776
                           SWAP ;
777
                           UNPAIR ;
778
                           UNPAIR ;
779
                           SWAP ;
780
                           CDR ;
781
                           NOW ;
782
                           PAIR ;
783
                           SWAP ;
784
                           PAIR ;
785
                           PAIR ;
786
                           SWAP ;
787
                           PAIR ;
788
                           PAIR } ;
789
                       NIL operation }
790
                     { IF_LEFT
791
                         { DROP ;
792
                           DUP ;
793
                           GET 3 ;
794
                           CAR ;
795
                           GET 3 ;
796
                           SENDER ;
797
                           COMPARE ;
798
                           NEQ ;
799
                           IF
800
                             { DUP ; CAR ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; NEQ }
801
                             { PUSH bool False } ;
802
                           IF
803
                             { DUP ; GET 7 ; CDR ; PUSH nat 0 ; COMPARE ; LT }
804
                             { PUSH bool False } ;
805
                           IF
806
                             { DUP ;
807
                               CAR ;
808
                               GET 3 ;
809
                               GET 3 ;
810
                               NOW ;
811
                               COMPARE ;
812
                               NEQ ;
813
                               IF
814
                                 { NIL operation ;
815
                                   DIG 2 ;
816
                                   UNIT ;
817
                                   SWAP ;
818
                                   DUG 3 ;
819
                                   PAIR 3 ;
820
                                   EXEC ;
821
                                   CDR ;
822
                                   UNPAIR ;
823
                                   SWAP ;
824
                                   DUP ;
825
                                   DUG 2 ;
826
                                   CAR ;
827
                                   CAR ;
828
                                   CAR ;
829
                                   GET 4 ;
830
                                   CONTRACT %getTotalSupply (pair (unit %request)
831
                                                                  (contract %callback nat)) ;
832
                                   IF_NONE
833
                                     { PUSH string "cant call getTotalSupply of lb token" ;
834
                                       FAILWITH }
835
                                     {} ;
836
                                   PUSH mutez 0 ;
837
                                   SELF %updateLqtTotalCallback ;
838
                                   UNIT ;
839
                                   PAIR ;
840
                                   TRANSFER_TOKENS ;
841
                                   CONS ;
842
                                   SWAP ;
843
                                   DUP ;
844
                                   DUG 2 ;
845
                                   CAR ;
846
                                   CAR ;
847
                                   GET 3 ;
848
                                   CAR ;
849
                                   CONTRACT %getBalance (pair (address %owner)
850
                                                              (contract %callback nat)) ;
851
                                   IF_NONE
852
                                     { PUSH string "cant call getBalance for tzBTC" ;
853
                                       FAILWITH }
854
                                     {} ;
855
                                   PUSH mutez 0 ;
856
                                   SELF %updateTzbtcPoolCallback ;
857
                                   DUP 5 ;
858
                                   GET 3 ;
859
                                   CAR ;
860
                                   GET 3 ;
861
                                   PAIR ;
862
                                   TRANSFER_TOKENS ;
863
                                   CONS ;
864
                                   SELF %calculateLbPrice ;
865
                                   PUSH mutez 0 ;
866
                                   UNIT ;
867
                                   TRANSFER_TOKENS ;
868
                                   CONS }
869
                                 { SWAP ; DROP ; NIL operation } ;
870
                               SWAP ;
871
                               DUP ;
872
                               DUG 2 ;
873
                               UNPAIR ;
874
                               UNPAIR ;
875
                               UNPAIR ;
876
                               UNPAIR ;
877
                               UNPAIR ;
878
                               SWAP ;
879
                               DIG 7 ;
880
                               GET 7 ;
881
                               CDR ;
882
                               PUSH nat 1000000000000 ;
883
                               PUSH nat 1000000 ;
884
                               PUSH mutez 1 ;
885
                               AMOUNT ;
886
                               EDIV ;
887
                               IF_NONE { UNIT ; FAILWITH } {} ;
888
                               CAR ;
889
                               MUL ;
890
                               MUL ;
891
                               EDIV ;
892
                               IF_NONE { PUSH int 128 ; FAILWITH } { CAR } ;
893
                               ADD ;
894
                               SWAP ;
895
                               PAIR ;
896
                               PAIR ;
897
                               PAIR ;
898
                               PAIR ;
899
                               PAIR ;
900
                               SWAP }
901
                             { SWAP ; DROP ; NIL operation } }
902
                         { DROP ;
903
                           DUP ;
904
                           CAR ;
905
                           GET 3 ;
906
                           GET 3 ;
907
                           NOW ;
908
                           COMPARE ;
909
                           NEQ ;
910
                           IF
911
                             { NIL operation ;
912
                               DIG 2 ;
913
                               UNIT ;
914
                               SWAP ;
915
                               DUG 3 ;
916
                               PAIR 3 ;
917
                               EXEC ;
918
                               CDR ;
919
                               UNPAIR ;
920
                               SWAP ;
921
                               DUP ;
922
                               DUG 2 ;
923
                               CAR ;
924
                               CAR ;
925
                               CAR ;
926
                               GET 4 ;
927
                               CONTRACT %getTotalSupply (pair (unit %request)
928
                                                              (contract %callback nat)) ;
929
                               IF_NONE
930
                                 { PUSH string "cant call getTotalSupply of lb token" ;
931
                                   FAILWITH }
932
                                 {} ;
933
                               PUSH mutez 0 ;
934
                               SELF %updateLqtTotalCallback ;
935
                               UNIT ;
936
                               PAIR ;
937
                               TRANSFER_TOKENS ;
938
                               CONS ;
939
                               SWAP ;
940
                               DUP ;
941
                               DUG 2 ;
942
                               CAR ;
943
                               CAR ;
944
                               GET 3 ;
945
                               CAR ;
946
                               CONTRACT %getBalance (pair (address %owner)
947
                                                          (contract %callback nat)) ;
948
                               IF_NONE
949
                                 { PUSH string "cant call getBalance for tzBTC" ;
950
                                   FAILWITH }
951
                                 {} ;
952
                               PUSH mutez 0 ;
953
                               SELF %updateTzbtcPoolCallback ;
954
                               DUP 5 ;
955
                               GET 3 ;
956
                               CAR ;
957
                               GET 3 ;
958
                               PAIR ;
959
                               TRANSFER_TOKENS ;
960
                               CONS ;
961
                               SELF %calculateLbPrice ;
962
                               PUSH mutez 0 ;
963
                               UNIT ;
964
                               TRANSFER_TOKENS ;
965
                               CONS }
966
                             { SWAP ; DROP ; NIL operation } ;
967
                           SWAP ;
968
                           DUP ;
969
                           DUG 2 ;
970
                           CAR ;
971
                           GET 9 ;
972
                           SENDER ;
973
                           MEM ;
974
                           IF
975
                             {}
976
                             { SWAP ;
977
                               UNPAIR ;
978
                               UNPAIR ;
979
                               SWAP ;
980
                               UNPAIR ;
981
                               SWAP ;
982
                               UNPAIR ;
983
                               SWAP ;
984
                               UNPAIR ;
985
                               SWAP ;
986
                               UNPAIR ;
987
                               PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ;
988
                               SENDER ;
989
                               UPDATE ;
990
                               PAIR ;
991
                               SWAP ;
992
                               PAIR ;
993
                               SWAP ;
994
                               PAIR ;
995
                               SWAP ;
996
                               PAIR ;
997
                               SWAP ;
998
                               PAIR ;
999
                               PAIR ;
1000
                               SWAP } ;
1001
                           SWAP ;
1002
                           DUP ;
1003
                           DUG 2 ;
1004
                           CAR ;
1005
                           CAR ;
1006
                           CAR ;
1007
                           CAR ;
1008
                           CDR ;
1009
                           PUSH nat 1000000000000 ;
1010
                           PUSH nat 1000000 ;
1011
                           PUSH mutez 1 ;
1012
                           AMOUNT ;
1013
                           EDIV ;
1014
                           IF_NONE { UNIT ; FAILWITH } {} ;
1015
                           CAR ;
1016
                           MUL ;
1017
                           MUL ;
1018
                           EDIV ;
1019
                           IF_NONE { PUSH int 639 ; FAILWITH } { CAR } ;
1020
                           DIG 2 ;
1021
                           UNPAIR ;
1022
                           UNPAIR ;
1023
                           SWAP ;
1024
                           UNPAIR ;
1025
                           SWAP ;
1026
                           UNPAIR ;
1027
                           SWAP ;
1028
                           UNPAIR ;
1029
                           SWAP ;
1030
                           UNPAIR ;
1031
                           DUP ;
1032
                           SENDER ;
1033
                           DUP ;
1034
                           DUG 2 ;
1035
                           GET ;
1036
                           IF_NONE { PUSH int 640 ; FAILWITH } {} ;
1037
                           DUP ;
1038
                           CDR ;
1039
                           DUP 11 ;
1040
                           ADD ;
1041
                           UPDATE 2 ;
1042
                           SOME ;
1043
                           SWAP ;
1044
                           UPDATE ;
1045
                           PAIR ;
1046
                           SWAP ;
1047
                           PAIR ;
1048
                           SWAP ;
1049
                           PAIR ;
1050
                           SWAP ;
1051
                           PAIR ;
1052
                           SWAP ;
1053
                           PAIR ;
1054
                           SWAP ;
1055
                           UNPAIR ;
1056
                           SWAP ;
1057
                           UNPAIR ;
1058
                           SWAP ;
1059
                           UNPAIR ;
1060
                           UNPAIR ;
1061
                           SWAP ;
1062
                           DIG 6 ;
1063
                           ADD ;
1064
                           SWAP ;
1065
                           PAIR ;
1066
                           PAIR ;
1067
                           SWAP ;
1068
                           PAIR ;
1069
                           SWAP ;
1070
                           PAIR ;
1071
                           SWAP ;
1072
                           PAIR ;
1073
                           SWAP } } }
1074
                 { IF_LEFT
1075
                     { IF_LEFT
1076
                         { DROP ;
1077
                           SWAP ;
1078
                           DROP ;
1079
                           SWAP ;
1080
                           DROP ;
1081
                           DUP ;
1082
                           CAR ;
1083
                           CAR ;
1084
                           CAR ;
1085
                           CAR ;
1086
                           CAR ;
1087
                           SENDER ;
1088
                           COMPARE ;
1089
                           EQ ;
1090
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
1091
                           UNPAIR ;
1092
                           SWAP ;
1093
                           UNPAIR ;
1094
                           UNPAIR ;
1095
                           SWAP ;
1096
                           UNPAIR ;
1097
                           SWAP ;
1098
                           UNPAIR ;
1099
                           SWAP ;
1100
                           CAR ;
1101
                           PUSH bool False ;
1102
                           SWAP ;
1103
                           PAIR ;
1104
                           SWAP ;
1105
                           PAIR ;
1106
                           SWAP ;
1107
                           PAIR ;
1108
                           SWAP ;
1109
                           PAIR ;
1110
                           PAIR ;
1111
                           SWAP ;
1112
                           PAIR ;
1113
                           NIL operation }
1114
                         { SWAP ;
1115
                           DUP ;
1116
                           DUG 2 ;
1117
                           CAR ;
1118
                           CAR ;
1119
                           GET 7 ;
1120
                           IF
1121
                             {}
1122
                             { PUSH string "flashloan is not available" ; FAILWITH } ;
1123
                           DUP ;
1124
                           CDR ;
1125
                           PUSH mutez 0 ;
1126
                           COMPARE ;
1127
                           LT ;
1128
                           IF {} { PUSH string "zero requested amount" ; FAILWITH } ;
1129
                           NOW ;
1130
                           DUP 3 ;
1131
                           CAR ;
1132
                           GET 3 ;
1133
                           GET 3 ;
1134
                           COMPARE ;
1135
                           NEQ ;
1136
                           IF
1137
                             { DIG 3 ;
1138
                               DROP ;
1139
                               NIL operation ;
1140
                               DIG 3 ;
1141
                               UNIT ;
1142
                               SWAP ;
1143
                               DIG 4 ;
1144
                               DIG 3 ;
1145
                               DIG 3 ;
1146
                               PAIR 3 ;
1147
                               EXEC ;
1148
                               CDR ;
1149
                               UNPAIR ;
1150
                               SWAP ;
1151
                               DUP ;
1152
                               DUG 3 ;
1153
                               CAR ;
1154
                               CAR ;
1155
                               CAR ;
1156
                               GET 4 ;
1157
                               CONTRACT %getTotalSupply (pair (unit %request)
1158
                                                              (contract %callback nat)) ;
1159
                               IF_NONE
1160
                                 { PUSH string "cant call getTotalSupply of lb token" ;
1161
                                   FAILWITH }
1162
                                 {} ;
1163
                               PUSH mutez 0 ;
1164
                               SELF %updateLqtTotalCallback ;
1165
                               UNIT ;
1166
                               PAIR ;
1167
                               TRANSFER_TOKENS ;
1168
                               CONS ;
1169
                               DUP 3 ;
1170
                               CAR ;
1171
                               CAR ;
1172
                               GET 3 ;
1173
                               CAR ;
1174
                               CONTRACT %getBalance (pair (address %owner)
1175
                                                          (contract %callback nat)) ;
1176
                               IF_NONE
1177
                                 { PUSH string "cant call getBalance for tzBTC" ;
1178
                                   FAILWITH }
1179
                                 {} ;
1180
                               PUSH mutez 0 ;
1181
                               SELF %updateTzbtcPoolCallback ;
1182
                               DUP 6 ;
1183
                               GET 3 ;
1184
                               CAR ;
1185
                               GET 3 ;
1186
                               PAIR ;
1187
                               TRANSFER_TOKENS ;
1188
                               CONS ;
1189
                               SELF %calculateLbPrice ;
1190
                               PUSH mutez 0 ;
1191
                               UNIT ;
1192
                               TRANSFER_TOKENS ;
1193
                               CONS }
1194
                             { DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
1195
                           DUP 3 ;
1196
                           UNPAIR ;
1197
                           UNPAIR ;
1198
                           UNPAIR ;
1199
                           SWAP ;
1200
                           UNPAIR ;
1201
                           SWAP ;
1202
                           UNPAIR ;
1203
                           PUSH mutez 1 ;
1204
                           PUSH nat 100000 ;
1205
                           DIG 10 ;
1206
                           DUP ;
1207
                           CAR ;
1208
                           CAR ;
1209
                           GET 8 ;
1210
                           SWAP ;
1211
                           CAR ;
1212
                           CAR ;
1213
                           GET 3 ;
1214
                           CDR ;
1215
                           PUSH nat 100000 ;
1216
                           ADD ;
1217
                           ADD ;
1218
                           PUSH mutez 1 ;
1219
                           DUP 12 ;
1220
                           CDR ;
1221
                           EDIV ;
1222
                           IF_NONE { UNIT ; FAILWITH } {} ;
1223
                           CAR ;
1224
                           MUL ;
1225
                           NEG ;
1226
                           EDIV ;
1227
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
1228
                           CAR ;
1229
                           ABS ;
1230
                           MUL ;
1231
                           ADD ;
1232
                           PAIR ;
1233
                           SWAP ;
1234
                           PAIR ;
1235
                           SWAP ;
1236
                           PAIR ;
1237
                           PAIR ;
1238
                           PAIR ;
1239
                           DUG 2 ;
1240
                           PUSH nat 0 ;
1241
                           DUP 4 ;
1242
                           GET 7 ;
1243
                           CDR ;
1244
                           COMPARE ;
1245
                           GT ;
1246
                           IF
1247
                             { DUP 3 ;
1248
                               UNPAIR ;
1249
                               UNPAIR ;
1250
                               UNPAIR ;
1251
                               UNPAIR ;
1252
                               UNPAIR ;
1253
                               SWAP ;
1254
                               PUSH nat 100000 ;
1255
                               DUP 10 ;
1256
                               GET 7 ;
1257
                               CDR ;
1258
                               PUSH nat 1000000000000 ;
1259
                               PUSH nat 1000000 ;
1260
                               PUSH mutez 1 ;
1261
                               DUP 13 ;
1262
                               CDR ;
1263
                               EDIV ;
1264
                               IF_NONE { UNIT ; FAILWITH } {} ;
1265
                               CAR ;
1266
                               MUL ;
1267
                               DIG 12 ;
1268
                               CAR ;
1269
                               CAR ;
1270
                               GET 8 ;
1271
                               MUL ;
1272
                               MUL ;
1273
                               EDIV ;
1274
                               IF_NONE { PUSH int 1162 ; FAILWITH } { CAR } ;
1275
                               EDIV ;
1276
                               IF_NONE { PUSH int 1162 ; FAILWITH } { CAR } ;
1277
                               ADD ;
1278
                               SWAP ;
1279
                               PAIR ;
1280
                               PAIR ;
1281
                               PAIR ;
1282
                               PAIR ;
1283
                               PAIR ;
1284
                               DUG 2 }
1285
                             {} ;
1286
                           SWAP ;
1287
                           UNPAIR ;
1288
                           SWAP ;
1289
                           UNIT ;
1290
                           TRANSFER_TOKENS ;
1291
                           CONS ;
1292
                           SELF %flashloanFinalize ;
1293
                           PUSH mutez 0 ;
1294
                           UNIT ;
1295
                           TRANSFER_TOKENS ;
1296
                           CONS } }
1297
                     { DIG 3 ;
1298
                       DROP ;
1299
                       IF_LEFT
1300
                         { DROP ;
1301
                           SWAP ;
1302
                           DROP ;
1303
                           DUP ;
1304
                           CAR ;
1305
                           CAR ;
1306
                           GET 5 ;
1307
                           PUSH mutez 0 ;
1308
                           COMPARE ;
1309
                           EQ ;
1310
                           IF {} { PUSH string "loan error" ; FAILWITH } ;
1311
                           NIL operation }
1312
                         { IF_LEFT
1313
                             { AMOUNT ;
1314
                               DUP 3 ;
1315
                               CAR ;
1316
                               CAR ;
1317
                               GET 5 ;
1318
                               SUB_MUTEZ ;
1319
                               DUP ;
1320
                               IF_NONE
1321
                                 { DROP 2 ;
1322
                                   SWAP ;
1323
                                   DROP ;
1324
                                   UNPAIR ;
1325
                                   UNPAIR ;
1326
                                   UNPAIR ;
1327
                                   SWAP ;
1328
                                   UNPAIR ;
1329
                                   SWAP ;
1330
                                   CDR ;
1331
                                   PUSH mutez 0 ;
1332
                                   PAIR ;
1333
                                   SWAP ;
1334
                                   PAIR ;
1335
                                   SWAP ;
1336
                                   PAIR ;
1337
                                   PAIR ;
1338
                                   PAIR }
1339
                                 { DROP ;
1340
                                   SWAP ;
1341
                                   DROP ;
1342
                                   DIG 2 ;
1343
                                   DROP ;
1344
                                   SWAP ;
1345
                                   UNPAIR ;
1346
                                   UNPAIR ;
1347
                                   UNPAIR ;
1348
                                   SWAP ;
1349
                                   UNPAIR ;
1350
                                   SWAP ;
1351
                                   CDR ;
1352
                                   DIG 5 ;
1353
                                   IF_NONE { PUSH int 1172 ; FAILWITH } {} ;
1354
                                   PAIR ;
1355
                                   SWAP ;
1356
                                   PAIR ;
1357
                                   SWAP ;
1358
                                   PAIR ;
1359
                                   PAIR ;
1360
                                   PAIR } ;
1361
                               NIL operation }
1362
                             { DIG 2 ;
1363
                               DROP ;
1364
                               SWAP ;
1365
                               DUP ;
1366
                               DUG 2 ;
1367
                               CAR ;
1368
                               CAR ;
1369
                               CAR ;
1370
                               CAR ;
1371
                               CAR ;
1372
                               NIL operation ;
1373
                               DIG 2 ;
1374
                               CDR ;
1375
                               PUSH mutez 0 ;
1376
                               DIG 3 ;
1377
                               TRANSFER_TOKENS ;
1378
                               CONS } } } } }
1379
             { IF_LEFT
1380
                 { IF_LEFT
1381
                     { DIG 3 ;
1382
                       DROP ;
1383
                       IF_LEFT
1384
                         { DIG 2 ;
1385
                           DROP ;
1386
                           SWAP ;
1387
                           DUP ;
1388
                           DUG 2 ;
1389
                           CAR ;
1390
                           GET 9 ;
1391
                           SWAP ;
1392
                           DUP ;
1393
                           DUG 2 ;
1394
                           CAR ;
1395
                           CAR ;
1396
                           MEM ;
1397
                           IF
1398
                             { SWAP ;
1399
                               DUP ;
1400
                               DUG 2 ;
1401
                               CAR ;
1402
                               GET 9 ;
1403
                               SWAP ;
1404
                               DUP ;
1405
                               DUG 2 ;
1406
                               CAR ;
1407
                               CAR ;
1408
                               GET ;
1409
                               IF_NONE { PUSH int 113 ; FAILWITH } {} ;
1410
                               CAR ;
1411
                               SWAP ;
1412
                               DUP ;
1413
                               DUG 2 ;
1414
                               CAR ;
1415
                               CDR ;
1416
                               GET ;
1417
                               IF_NONE { PUSH nat 0 } {} }
1418
                             { PUSH nat 0 } ;
1419
                           NIL operation ;
1420
                           DIG 2 ;
1421
                           CDR ;
1422
                           PUSH mutez 0 ;
1423
                           DIG 3 ;
1424
                           TRANSFER_TOKENS ;
1425
                           CONS }
1426
                         { DIG 2 ;
1427
                           DROP ;
1428
                           SWAP ;
1429
                           DUP ;
1430
                           DUG 2 ;
1431
                           CAR ;
1432
                           GET 9 ;
1433
                           SWAP ;
1434
                           DUP ;
1435
                           DUG 2 ;
1436
                           CAR ;
1437
                           MEM ;
1438
                           IF
1439
                             { SWAP ;
1440
                               DUP ;
1441
                               DUG 2 ;
1442
                               CAR ;
1443
                               GET 9 ;
1444
                               SWAP ;
1445
                               DUP ;
1446
                               DUG 2 ;
1447
                               CAR ;
1448
                               GET ;
1449
                               IF_NONE { PUSH int 106 ; FAILWITH } {} ;
1450
                               CDR }
1451
                             { PUSH nat 0 } ;
1452
                           NIL operation ;
1453
                           DIG 2 ;
1454
                           CDR ;
1455
                           PUSH mutez 0 ;
1456
                           DIG 3 ;
1457
                           TRANSFER_TOKENS ;
1458
                           CONS } }
1459
                     { IF_LEFT
1460
                         { DIG 2 ;
1461
                           DROP ;
1462
                           DIG 2 ;
1463
                           DROP ;
1464
                           SWAP ;
1465
                           DUP ;
1466
                           DUG 2 ;
1467
                           GET 7 ;
1468
                           CDR ;
1469
                           NIL operation ;
1470
                           DIG 2 ;
1471
                           CDR ;
1472
                           PUSH mutez 0 ;
1473
                           DIG 3 ;
1474
                           TRANSFER_TOKENS ;
1475
                           CONS }
1476
                         { IF_LEFT
1477
                             { NOW ;
1478
                               DUP 3 ;
1479
                               CAR ;
1480
                               GET 3 ;
1481
                               GET 3 ;
1482
                               COMPARE ;
1483
                               NEQ ;
1484
                               IF
1485
                                 { NIL operation ;
1486
                                   DUP 4 ;
1487
                                   UNIT ;
1488
                                   SWAP ;
1489
                                   DIG 4 ;
1490
                                   DIG 3 ;
1491
                                   DIG 3 ;
1492
                                   PAIR 3 ;
1493
                                   EXEC ;
1494
                                   CDR ;
1495
                                   UNPAIR ;
1496
                                   DIG 4 ;
1497
                                   DIG 4 ;
1498
                                   DIG 3 ;
1499
                                   DIG 4 ;
1500
                                   DIG 4 ;
1501
                                   DUP 3 ;
1502
                                   CAR ;
1503
                                   CAR ;
1504
                                   CAR ;
1505
                                   GET 4 ;
1506
                                   CONTRACT %getTotalSupply (pair (unit %request)
1507
                                                                  (contract %callback nat)) ;
1508
                                   IF_NONE
1509
                                     { PUSH string "cant call getTotalSupply of lb token" ;
1510
                                       FAILWITH }
1511
                                     {} ;
1512
                                   PUSH mutez 0 ;
1513
                                   SELF %updateLqtTotalCallback ;
1514
                                   UNIT ;
1515
                                   PAIR ;
1516
                                   TRANSFER_TOKENS ;
1517
                                   CONS ;
1518
                                   DUP 3 ;
1519
                                   CAR ;
1520
                                   CAR ;
1521
                                   GET 3 ;
1522
                                   CAR ;
1523
                                   CONTRACT %getBalance (pair (address %owner)
1524
                                                              (contract %callback nat)) ;
1525
                                   IF_NONE
1526
                                     { PUSH string "cant call getBalance for tzBTC" ;
1527
                                       FAILWITH }
1528
                                     {} ;
1529
                                   PUSH mutez 0 ;
1530
                                   SELF %updateTzbtcPoolCallback ;
1531
                                   DUP 6 ;
1532
                                   GET 3 ;
1533
                                   CAR ;
1534
                                   GET 3 ;
1535
                                   PAIR ;
1536
                                   TRANSFER_TOKENS ;
1537
                                   CONS ;
1538
                                   SELF %calculateLbPrice ;
1539
                                   PUSH mutez 0 ;
1540
                                   UNIT ;
1541
                                   TRANSFER_TOKENS ;
1542
                                   CONS }
1543
                                 { NIL operation } ;
1544
                               DUP 3 ;
1545
                               GET 12 ;
1546
                               PUSH nat 100000 ;
1547
                               SUB ;
1548
                               ISNAT ;
1549
                               IF_NONE { PUSH int 804 ; FAILWITH } {} ;
1550
                               DUP 4 ;
1551
                               GET 12 ;
1552
                               AMOUNT ;
1553
                               DIG 4 ;
1554
                               DUP ;
1555
                               CAR ;
1556
                               SWAP ;
1557
                               DUP ;
1558
                               DUG 6 ;
1559
                               GET 5 ;
1560
                               ADD ;
1561
                               SUB_MUTEZ ;
1562
                               IF_NONE { PUSH int 802 ; FAILWITH } {} ;
1563
                               MUL ;
1564
                               EDIV ;
1565
                               IF_NONE { PUSH int 801 ; FAILWITH } {} ;
1566
                               CAR ;
1567
                               DUP ;
1568
                               PUSH mutez 0 ;
1569
                               COMPARE ;
1570
                               LT ;
1571
                               IF
1572
                                 { SWAP ;
1573
                                   DUP 4 ;
1574
                                   CAR ;
1575
                                   CAR ;
1576
                                   CAR ;
1577
                                   CAR ;
1578
                                   CAR ;
1579
                                   CONTRACT unit ;
1580
                                   IF_NONE { PUSH int 808 ; FAILWITH } {} ;
1581
                                   DUP 3 ;
1582
                                   UNIT ;
1583
                                   TRANSFER_TOKENS ;
1584
                                   CONS ;
1585
                                   SWAP }
1586
                                 {} ;
1587
                               DUP 4 ;
1588
                               GET 3 ;
1589
                               GET 3 ;
1590
                               CDR ;
1591
                               SWAP ;
1592
                               DUP ;
1593
                               DUG 2 ;
1594
                               AMOUNT ;
1595
                               SUB_MUTEZ ;
1596
                               IF_NONE { PUSH int 813 ; FAILWITH } {} ;
1597
                               MUL ;
1598
                               PUSH nat 10 ;
1599
                               DIG 4 ;
1600
                               DUP ;
1601
                               CAR ;
1602
                               SWAP ;
1603
                               DUP ;
1604
                               DUG 6 ;
1605
                               GET 5 ;
1606
                               ADD ;
1607
                               MUL ;
1608
                               COMPARE ;
1609
                               LE ;
1610
                               IF {} { PUSH string "leverage error" ; FAILWITH } ;
1611
                               PUSH nat 0 ;
1612
                               DUP 4 ;
1613
                               GET 8 ;
1614
                               COMPARE ;
1615
                               GT ;
1616
                               IF
1617
                                 { SWAP ;
1618
                                   DUP 4 ;
1619
                                   CAR ;
1620
                                   CAR ;
1621
                                   GET 3 ;
1622
                                   CAR ;
1623
                                   CONTRACT %transfer (pair (address %from)
1624
                                                            (pair (address %to)
1625
                                                                  (nat %value))) ;
1626
                                   IF_NONE
1627
                                     { PUSH string "cant call transfer for tzBTC shares" ;
1628
                                       FAILWITH }
1629
                                     {} ;
1630
                                   PUSH mutez 0 ;
1631
                                   DUP 5 ;
1632
                                   GET 8 ;
1633
                                   SELF_ADDRESS ;
1634
                                   SENDER ;
1635
                                   PAIR 3 ;
1636
                                   TRANSFER_TOKENS ;
1637
                                   CONS ;
1638
                                   SWAP }
1639
                                 {} ;
1640
                               PUSH mutez 0 ;
1641
                               DUP 4 ;
1642
                               CAR ;
1643
                               COMPARE ;
1644
                               GT ;
1645
                               IF
1646
                                 { SWAP ;
1647
                                   DUP 4 ;
1648
                                   CAR ;
1649
                                   CAR ;
1650
                                   CAR ;
1651
                                   GET 3 ;
1652
                                   CONTRACT %xtzToToken (pair (address %to)
1653
                                                              (pair
1654
                                                                (nat %minTokensBought)
1655
                                                                (timestamp %deadline))) ;
1656
                                   IF_NONE
1657
                                     { PUSH string "cant call xtzToToken" ; FAILWITH }
1658
                                     {} ;
1659
                                   DUP 4 ;
1660
                                   CAR ;
1661
                                   PUSH int 1 ;
1662
                                   NOW ;
1663
                                   ADD ;
1664
                                   DUP 6 ;
1665
                                   GET 3 ;
1666
                                   SELF_ADDRESS ;
1667
                                   PAIR 3 ;
1668
                                   TRANSFER_TOKENS ;
1669
                                   CONS ;
1670
                                   SWAP }
1671
                                 {} ;
1672
                               SWAP ;
1673
                               DUP 4 ;
1674
                               CAR ;
1675
                               CAR ;
1676
                               GET 3 ;
1677
                               CAR ;
1678
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
1679
                               IF_NONE
1680
                                 { PUSH string "cant call approve for tzBTC shares" ;
1681
                                   FAILWITH }
1682
                                 {} ;
1683
                               PUSH mutez 0 ;
1684
                               PUSH nat 1000000000000000000 ;
1685
                               DUP 7 ;
1686
                               GET 3 ;
1687
                               CAR ;
1688
                               GET 3 ;
1689
                               PAIR ;
1690
                               TRANSFER_TOKENS ;
1691
                               CONS ;
1692
                               DUP ;
1693
                               DUG 2 ;
1694
                               DUP 5 ;
1695
                               GET 3 ;
1696
                               CAR ;
1697
                               GET 3 ;
1698
                               CONTRACT %addLiquidity (pair (address %owner)
1699
                                                            (pair (nat %minLqtMinted)
1700
                                                                  (pair
1701
                                                                    (nat %maxTokensDeposited)
1702
                                                                    (timestamp %deadline)))) ;
1703
                               IF_NONE
1704
                                 { PUSH string "cant call addLiquidity" ; FAILWITH }
1705
                                 {} ;
1706
                               DUP 5 ;
1707
                               GET 5 ;
1708
                               PUSH int 1 ;
1709
                               NOW ;
1710
                               ADD ;
1711
                               PUSH nat 1000000000000000000 ;
1712
                               DUP 8 ;
1713
                               GET 7 ;
1714
                               SELF_ADDRESS ;
1715
                               PAIR 4 ;
1716
                               DIG 4 ;
1717
                               DROP ;
1718
                               DIG 4 ;
1719
                               DROP ;
1720
                               DIG 4 ;
1721
                               DROP ;
1722
                               DIG 5 ;
1723
                               DROP ;
1724
                               DIG 5 ;
1725
                               DROP ;
1726
                               TRANSFER_TOKENS ;
1727
                               CONS ;
1728
                               SWAP ;
1729
                               DUP ;
1730
                               DUG 2 ;
1731
                               CAR ;
1732
                               CAR ;
1733
                               GET 3 ;
1734
                               CAR ;
1735
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
1736
                               IF_NONE
1737
                                 { PUSH string "cant call approve for tzBTC shares" ;
1738
                                   FAILWITH }
1739
                                 {} ;
1740
                               PUSH mutez 0 ;
1741
                               PUSH nat 0 ;
1742
                               DUP 5 ;
1743
                               GET 3 ;
1744
                               CAR ;
1745
                               GET 3 ;
1746
                               PAIR ;
1747
                               TRANSFER_TOKENS ;
1748
                               CONS ;
1749
                               SWAP ;
1750
                               UNPAIR ;
1751
                               SWAP ;
1752
                               UNPAIR ;
1753
                               UNPAIR ;
1754
                               SWAP ;
1755
                               UNPAIR ;
1756
                               UNPAIR ;
1757
                               UNPAIR ;
1758
                               CDR ;
1759
                               PUSH bool True ;
1760
                               PAIR ;
1761
                               PAIR ;
1762
                               PAIR ;
1763
                               PAIR ;
1764
                               SWAP ;
1765
                               PAIR ;
1766
                               PAIR ;
1767
                               SWAP ;
1768
                               PAIR ;
1769
                               DUP ;
1770
                               DUG 2 ;
1771
                               CAR ;
1772
                               CAR ;
1773
                               CAR ;
1774
                               GET 4 ;
1775
                               CONTRACT %getBalance (pair (address %owner)
1776
                                                          (contract %callback nat)) ;
1777
                               IF_NONE
1778
                                 { PUSH string "cant call getBalance for LB shares" ;
1779
                                   FAILWITH }
1780
                                 {} ;
1781
                               PUSH mutez 0 ;
1782
                               SELF %updateLBCallback ;
1783
                               SELF_ADDRESS ;
1784
                               PAIR ;
1785
                               TRANSFER_TOKENS ;
1786
                               CONS ;
1787
                               SWAP ;
1788
                               UNPAIR ;
1789
                               SWAP ;
1790
                               UNPAIR ;
1791
                               UNPAIR ;
1792
                               SWAP ;
1793
                               UNPAIR ;
1794
                               UNPAIR ;
1795
                               UNPAIR ;
1796
                               CAR ;
1797
                               PUSH bool True ;
1798
                               SWAP ;
1799
                               PAIR ;
1800
                               PAIR ;
1801
                               PAIR ;
1802
                               PAIR ;
1803
                               SWAP ;
1804
                               PAIR ;
1805
                               PAIR ;
1806
                               SWAP ;
1807
                               PAIR ;
1808
                               DUP ;
1809
                               DUG 2 ;
1810
                               CAR ;
1811
                               CAR ;
1812
                               GET 3 ;
1813
                               CAR ;
1814
                               CONTRACT %getBalance (pair (address %owner)
1815
                                                          (contract %callback nat)) ;
1816
                               IF_NONE
1817
                                 { PUSH string "cant call getBalance for tzBTC shares" ;
1818
                                   FAILWITH }
1819
                                 {} ;
1820
                               PUSH mutez 0 ;
1821
                               SELF %sellTzBTC ;
1822
                               SELF_ADDRESS ;
1823
                               PAIR ;
1824
                               TRANSFER_TOKENS ;
1825
                               CONS ;
1826
                               SELF %investLBFinalize ;
1827
                               PUSH mutez 0 ;
1828
                               DUP 4 ;
1829
                               CAR ;
1830
                               GET 7 ;
1831
                               AMOUNT ;
1832
                               BALANCE ;
1833
                               SUB_MUTEZ ;
1834
                               IF_NONE { PUSH int 857 ; FAILWITH } {} ;
1835
                               SENDER ;
1836
                               PAIR 3 ;
1837
                               TRANSFER_TOKENS ;
1838
                               CONS }
1839
                             { DIG 2 ;
1840
                               DROP ;
1841
                               SENDER ;
1842
                               SELF_ADDRESS ;
1843
                               COMPARE ;
1844
                               EQ ;
1845
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
1846
                               SWAP ;
1847
                               DUP ;
1848
                               DUG 2 ;
1849
                               GET 3 ;
1850
                               CAR ;
1851
                               GET 4 ;
1852
                               SWAP ;
1853
                               DUP ;
1854
                               DUG 2 ;
1855
                               CAR ;
1856
                               MEM ;
1857
                               IF
1858
                                 {}
1859
                                 { SWAP ;
1860
                                   UNPAIR ;
1861
                                   SWAP ;
1862
                                   UNPAIR ;
1863
                                   UNPAIR ;
1864
                                   UNPAIR ;
1865
                                   SWAP ;
1866
                                   UNPAIR ;
1867
                                   SWAP ;
1868
                                   PUSH nat 0 ;
1869
                                   DUP ;
1870
                                   DUP ;
1871
                                   PAIR 3 ;
1872
                                   SOME ;
1873
                                   DUP 8 ;
1874
                                   CAR ;
1875
                                   UPDATE ;
1876
                                   SWAP ;
1877
                                   PAIR ;
1878
                                   SWAP ;
1879
                                   PAIR ;
1880
                                   PAIR ;
1881
                                   PAIR ;
1882
                                   SWAP ;
1883
                                   PAIR ;
1884
                                   SWAP } ;
1885
                               PUSH nat 1000000000000 ;
1886
                               PUSH nat 1000000 ;
1887
                               PUSH mutez 1 ;
1888
                               BALANCE ;
1889
                               DUP 5 ;
1890
                               GET 3 ;
1891
                               SUB_MUTEZ ;
1892
                               IF_NONE
1893
                                 { PUSH string "negative balance delta error" ; FAILWITH }
1894
                                 {} ;
1895
                               EDIV ;
1896
                               IF_NONE { UNIT ; FAILWITH } {} ;
1897
                               CAR ;
1898
                               MUL ;
1899
                               MUL ;
1900
                               DUP 3 ;
1901
                               GET 3 ;
1902
                               GET 7 ;
1903
                               SWAP ;
1904
                               DUP ;
1905
                               DUG 2 ;
1906
                               NEG ;
1907
                               EDIV ;
1908
                               IF_NONE { PUSH int 39 ; FAILWITH } {} ;
1909
                               CAR ;
1910
                               ABS ;
1911
                               DIG 3 ;
1912
                               UNPAIR ;
1913
                               SWAP ;
1914
                               UNPAIR ;
1915
                               UNPAIR ;
1916
                               UNPAIR ;
1917
                               SWAP ;
1918
                               UNPAIR ;
1919
                               SWAP ;
1920
                               DUP ;
1921
                               DUP 10 ;
1922
                               CAR ;
1923
                               DUP ;
1924
                               DUG 2 ;
1925
                               GET ;
1926
                               IF_NONE { PUSH int 894 ; FAILWITH } {} ;
1927
                               DUP ;
1928
                               GET 4 ;
1929
                               DUP 10 ;
1930
                               ADD ;
1931
                               UPDATE 4 ;
1932
                               SOME ;
1933
                               SWAP ;
1934
                               UPDATE ;
1935
                               SWAP ;
1936
                               PAIR ;
1937
                               SWAP ;
1938
                               PAIR ;
1939
                               PAIR ;
1940
                               PAIR ;
1941
                               SWAP ;
1942
                               PAIR ;
1943
                               DUP ;
1944
                               GET 11 ;
1945
                               DIG 2 ;
1946
                               ADD ;
1947
                               UPDATE 11 ;
1948
                               DUP ;
1949
                               DUG 3 ;
1950
                               CAR ;
1951
                               GET 3 ;
1952
                               CAR ;
1953
                               CAR ;
1954
                               SWAP ;
1955
                               NEG ;
1956
                               EDIV ;
1957
                               IF_NONE { PUSH int 39 ; FAILWITH } {} ;
1958
                               CAR ;
1959
                               ABS ;
1960
                               DIG 2 ;
1961
                               UNPAIR ;
1962
                               SWAP ;
1963
                               UNPAIR ;
1964
                               UNPAIR ;
1965
                               UNPAIR ;
1966
                               SWAP ;
1967
                               UNPAIR ;
1968
                               SWAP ;
1969
                               DUP ;
1970
                               DUP 9 ;
1971
                               CAR ;
1972
                               DUP ;
1973
                               DUG 2 ;
1974
                               GET ;
1975
                               IF_NONE { PUSH int 898 ; FAILWITH } {} ;
1976
                               DUP ;
1977
                               CAR ;
1978
                               DUP 10 ;
1979
                               ADD ;
1980
                               UPDATE 1 ;
1981
                               SOME ;
1982
                               SWAP ;
1983
                               UPDATE ;
1984
                               SWAP ;
1985
                               PAIR ;
1986
                               SWAP ;
1987
                               PAIR ;
1988
                               PAIR ;
1989
                               PAIR ;
1990
                               SWAP ;
1991
                               PAIR ;
1992
                               DUP ;
1993
                               GET 9 ;
1994
                               DIG 2 ;
1995
                               ADD ;
1996
                               UPDATE 9 ;
1997
                               SWAP ;
1998
                               DUP ;
1999
                               GET 4 ;
2000
                               DUP 3 ;
2001
                               CAR ;
2002
                               GET 7 ;
2003
                               SUB ;
2004
                               ISNAT ;
2005
                               IF_NONE
2006
                                 { PUSH string "negative lb delta error" ; FAILWITH }
2007
                                 {} ;
2008
                               DIG 2 ;
2009
                               UNPAIR ;
2010
                               SWAP ;
2011
                               UNPAIR ;
2012
                               UNPAIR ;
2013
                               UNPAIR ;
2014
                               SWAP ;
2015
                               UNPAIR ;
2016
                               SWAP ;
2017
                               DUP ;
2018
                               DIG 8 ;
2019
                               CAR ;
2020
                               DUP ;
2021
                               DUG 2 ;
2022
                               GET ;
2023
                               IF_NONE { PUSH int 902 ; FAILWITH } {} ;
2024
                               DUP ;
2025
                               GET 3 ;
2026
                               DIG 9 ;
2027
                               ADD ;
2028
                               UPDATE 3 ;
2029
                               SOME ;
2030
                               SWAP ;
2031
                               UPDATE ;
2032
                               SWAP ;
2033
                               PAIR ;
2034
                               SWAP ;
2035
                               PAIR ;
2036
                               PAIR ;
2037
                               PAIR ;
2038
                               SWAP ;
2039
                               PAIR ;
2040
                               SWAP ;
2041
                               UNIT ;
2042
                               SWAP ;
2043
                               DUG 2 ;
2044
                               PAIR ;
2045
                               EXEC ;
2046
                               CDR ;
2047
                               NIL operation } } } }
2048
                 { IF_LEFT
2049
                     { IF_LEFT
2050
                         { NOW ;
2051
                           DUP 3 ;
2052
                           CAR ;
2053
                           GET 3 ;
2054
                           GET 3 ;
2055
                           COMPARE ;
2056
                           NEQ ;
2057
                           IF
2058
                             { DIG 3 ;
2059
                               DROP ;
2060
                               NIL operation ;
2061
                               DIG 3 ;
2062
                               UNIT ;
2063
                               SWAP ;
2064
                               DIG 4 ;
2065
                               DIG 3 ;
2066
                               DIG 3 ;
2067
                               PAIR 3 ;
2068
                               EXEC ;
2069
                               CDR ;
2070
                               UNPAIR ;
2071
                               SWAP ;
2072
                               DUP ;
2073
                               DUG 3 ;
2074
                               CAR ;
2075
                               CAR ;
2076
                               CAR ;
2077
                               GET 4 ;
2078
                               CONTRACT %getTotalSupply (pair (unit %request)
2079
                                                              (contract %callback nat)) ;
2080
                               IF_NONE
2081
                                 { PUSH string "cant call getTotalSupply of lb token" ;
2082
                                   FAILWITH }
2083
                                 {} ;
2084
                               PUSH mutez 0 ;
2085
                               SELF %updateLqtTotalCallback ;
2086
                               UNIT ;
2087
                               PAIR ;
2088
                               TRANSFER_TOKENS ;
2089
                               CONS ;
2090
                               DUP 3 ;
2091
                               CAR ;
2092
                               CAR ;
2093
                               GET 3 ;
2094
                               CAR ;
2095
                               CONTRACT %getBalance (pair (address %owner)
2096
                                                          (contract %callback nat)) ;
2097
                               IF_NONE
2098
                                 { PUSH string "cant call getBalance for tzBTC" ;
2099
                                   FAILWITH }
2100
                                 {} ;
2101
                               PUSH mutez 0 ;
2102
                               SELF %updateTzbtcPoolCallback ;
2103
                               DUP 6 ;
2104
                               GET 3 ;
2105
                               CAR ;
2106
                               GET 3 ;
2107
                               PAIR ;
2108
                               TRANSFER_TOKENS ;
2109
                               CONS ;
2110
                               SELF %calculateLbPrice ;
2111
                               PUSH mutez 0 ;
2112
                               UNIT ;
2113
                               TRANSFER_TOKENS ;
2114
                               CONS }
2115
                             { DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
2116
                           DUP 3 ;
2117
                           GET 3 ;
2118
                           CAR ;
2119
                           GET 4 ;
2120
                           DUP 3 ;
2121
                           MEM ;
2122
                           IF {} { PUSH string "Unknown Address." ; FAILWITH } ;
2123
                           PUSH nat 0 ;
2124
                           DUP 4 ;
2125
                           GET 3 ;
2126
                           CAR ;
2127
                           GET 4 ;
2128
                           DUP 4 ;
2129
                           GET ;
2130
                           IF_NONE { PUSH int 974 ; FAILWITH } {} ;
2131
                           GET 4 ;
2132
                           COMPARE ;
2133
                           GT ;
2134
                           IF {} { PUSH string "not loaned" ; FAILWITH } ;
2135
                           SELF %liquidateLBFinalize ;
2136
                           PUSH mutez 0 ;
2137
                           AMOUNT ;
2138
                           SENDER ;
2139
                           DIG 5 ;
2140
                           PAIR 3 ;
2141
                           TRANSFER_TOKENS ;
2142
                           CONS }
2143
                         { DIG 2 ;
2144
                           DROP ;
2145
                           DIG 2 ;
2146
                           DROP ;
2147
                           SENDER ;
2148
                           SELF_ADDRESS ;
2149
                           COMPARE ;
2150
                           EQ ;
2151
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
2152
                           SWAP ;
2153
                           DUP ;
2154
                           DUG 2 ;
2155
                           GET 3 ;
2156
                           CAR ;
2157
                           GET 4 ;
2158
                           SWAP ;
2159
                           DUP ;
2160
                           DUG 2 ;
2161
                           CAR ;
2162
                           GET ;
2163
                           IF_NONE { PUSH int 1008 ; FAILWITH } {} ;
2164
                           GET 3 ;
2165
                           PUSH mutez 1 ;
2166
                           PUSH nat 1000000 ;
2167
                           PUSH nat 1000000000000 ;
2168
                           DIG 5 ;
2169
                           DUP ;
2170
                           CAR ;
2171
                           GET 3 ;
2172
                           CAR ;
2173
                           CAR ;
2174
                           SWAP ;
2175
                           DUP ;
2176
                           DUG 7 ;
2177
                           GET 3 ;
2178
                           CAR ;
2179
                           GET 4 ;
2180
                           DUP 7 ;
2181
                           CAR ;
2182
                           GET ;
2183
                           IF_NONE { PUSH int 1013 ; FAILWITH } {} ;
2184
                           CAR ;
2185
                           MUL ;
2186
                           NEG ;
2187
                           EDIV ;
2188
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
2189
                           CAR ;
2190
                           ABS ;
2191
                           NEG ;
2192
                           EDIV ;
2193
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
2194
                           CAR ;
2195
                           ABS ;
2196
                           MUL ;
2197
                           DUP 4 ;
2198
                           GET 3 ;
2199
                           CAR ;
2200
                           CAR ;
2201
                           CAR ;
2202
                           PUSH nat 100 ;
2203
                           PUSH mutez 1 ;
2204
                           DIG 3 ;
2205
                           EDIV ;
2206
                           IF_NONE { UNIT ; FAILWITH } {} ;
2207
                           CAR ;
2208
                           DUP 6 ;
2209
                           GET 5 ;
2210
                           GET 3 ;
2211
                           PUSH string "XTZ" ;
2212
                           VIEW "get_price" nat ;
2213
                           IF_NONE { PUSH string "invalid view" ; FAILWITH } {} ;
2214
                           MUL ;
2215
                           MUL ;
2216
                           MUL ;
2217
                           PUSH nat 100 ;
2218
                           PUSH nat 1000000000000 ;
2219
                           DUP 6 ;
2220
                           GET 5 ;
2221
                           GET 3 ;
2222
                           PUSH string "BTC" ;
2223
                           VIEW "get_price" nat ;
2224
                           IF_NONE { PUSH string "invalid view" ; FAILWITH } {} ;
2225
                           DUP 7 ;
2226
                           CAR ;
2227
                           GET 5 ;
2228
                           CAR ;
2229
                           PUSH nat 2 ;
2230
                           DUP 7 ;
2231
                           MUL ;
2232
                           MUL ;
2233
                           MUL ;
2234
                           EDIV ;
2235
                           IF_NONE { PUSH int 1011 ; FAILWITH } { CAR } ;
2236
                           MUL ;
2237
                           COMPARE ;
2238
                           LT ;
2239
                           IF
2240
                             {}
2241
                             { PUSH string "liquidation is not allowed" ; FAILWITH } ;
2242
                           DUP 3 ;
2243
                           GET 3 ;
2244
                           CAR ;
2245
                           GET 4 ;
2246
                           DUP 3 ;
2247
                           CAR ;
2248
                           GET ;
2249
                           IF_NONE { PUSH int 1022 ; FAILWITH } {} ;
2250
                           CAR ;
2251
                           DUP 4 ;
2252
                           CAR ;
2253
                           GET 3 ;
2254
                           CAR ;
2255
                           CAR ;
2256
                           PUSH nat 1000000000000 ;
2257
                           PUSH nat 1000000 ;
2258
                           PUSH mutez 1 ;
2259
                           DUP 8 ;
2260
                           GET 3 ;
2261
                           CAR ;
2262
                           CAR ;
2263
                           CDR ;
2264
                           PUSH nat 100 ;
2265
                           DUP 9 ;
2266
                           GET 4 ;
2267
                           MUL ;
2268
                           EDIV ;
2269
                           IF_NONE { PUSH int 1019 ; FAILWITH } {} ;
2270
                           CAR ;
2271
                           EDIV ;
2272
                           IF_NONE { UNIT ; FAILWITH } {} ;
2273
                           CAR ;
2274
                           MUL ;
2275
                           MUL ;
2276
                           EDIV ;
2277
                           IF_NONE { PUSH int 1021 ; FAILWITH } { CAR } ;
2278
                           DUP ;
2279
                           DUP 3 ;
2280
                           COMPARE ;
2281
                           LE ;
2282
                           IF { DROP } { SWAP ; DROP } ;
2283
                           DUP 4 ;
2284
                           GET 3 ;
2285
                           CAR ;
2286
                           GET 4 ;
2287
                           DUP 4 ;
2288
                           CAR ;
2289
                           GET ;
2290
                           IF_NONE { PUSH int 1024 ; FAILWITH } {} ;
2291
                           CAR ;
2292
                           SWAP ;
2293
                           DUP ;
2294
                           DUG 2 ;
2295
                           DUP 6 ;
2296
                           GET 3 ;
2297
                           CAR ;
2298
                           GET 4 ;
2299
                           DUP 6 ;
2300
                           CAR ;
2301
                           GET ;
2302
                           IF_NONE { PUSH int 1024 ; FAILWITH } {} ;
2303
                           GET 4 ;
2304
                           MUL ;
2305
                           EDIV ;
2306
                           IF_NONE { PUSH int 1024 ; FAILWITH } { CAR } ;
2307
                           DUP 5 ;
2308
                           GET 3 ;
2309
                           CAR ;
2310
                           GET 4 ;
2311
                           DUP 5 ;
2312
                           CAR ;
2313
                           GET ;
2314
                           IF_NONE { PUSH int 1025 ; FAILWITH } {} ;
2315
                           CAR ;
2316
                           DUP 3 ;
2317
                           DUP 5 ;
2318
                           MUL ;
2319
                           EDIV ;
2320
                           IF_NONE { PUSH int 1025 ; FAILWITH } { CAR } ;
2321
                           DUP 6 ;
2322
                           DUP 3 ;
2323
                           DIG 7 ;
2324
                           GET 11 ;
2325
                           SUB ;
2326
                           ISNAT ;
2327
                           IF_NONE { PUSH int 1027 ; FAILWITH } {} ;
2328
                           UPDATE 11 ;
2329
                           DUP ;
2330
                           DUG 6 ;
2331
                           DUP 4 ;
2332
                           DIG 7 ;
2333
                           GET 9 ;
2334
                           SUB ;
2335
                           ISNAT ;
2336
                           IF_NONE { PUSH int 1028 ; FAILWITH } {} ;
2337
                           UPDATE 9 ;
2338
                           DUP ;
2339
                           DUG 6 ;
2340
                           UNPAIR ;
2341
                           SWAP ;
2342
                           UNPAIR ;
2343
                           UNPAIR ;
2344
                           UNPAIR ;
2345
                           SWAP ;
2346
                           UNPAIR ;
2347
                           SWAP ;
2348
                           DUP ;
2349
                           DUP 12 ;
2350
                           CAR ;
2351
                           DUP ;
2352
                           DUG 2 ;
2353
                           GET ;
2354
                           IF_NONE { PUSH int 1029 ; FAILWITH } {} ;
2355
                           DIG 10 ;
2356
                           DIG 13 ;
2357
                           GET 3 ;
2358
                           CAR ;
2359
                           GET 4 ;
2360
                           DUP 14 ;
2361
                           CAR ;
2362
                           GET ;
2363
                           IF_NONE { PUSH int 1030 ; FAILWITH } {} ;
2364
                           CAR ;
2365
                           SUB ;
2366
                           ISNAT ;
2367
                           IF_NONE
2368
                             { PUSH string "wrong liquidated gross credit" ; FAILWITH }
2369
                             {} ;
2370
                           UPDATE 1 ;
2371
                           SOME ;
2372
                           SWAP ;
2373
                           UPDATE ;
2374
                           SWAP ;
2375
                           PAIR ;
2376
                           SWAP ;
2377
                           PAIR ;
2378
                           PAIR ;
2379
                           PAIR ;
2380
                           SWAP ;
2381
                           PAIR ;
2382
                           DUP ;
2383
                           DUG 5 ;
2384
                           UNPAIR ;
2385
                           SWAP ;
2386
                           UNPAIR ;
2387
                           UNPAIR ;
2388
                           UNPAIR ;
2389
                           SWAP ;
2390
                           UNPAIR ;
2391
                           SWAP ;
2392
                           DUP ;
2393
                           DUP 11 ;
2394
                           CAR ;
2395
                           DUP ;
2396
                           DUG 2 ;
2397
                           GET ;
2398
                           IF_NONE { PUSH int 1033 ; FAILWITH } {} ;
2399
                           DIG 9 ;
2400
                           DIG 12 ;
2401
                           GET 3 ;
2402
                           CAR ;
2403
                           GET 4 ;
2404
                           DUP 13 ;
2405
                           CAR ;
2406
                           GET ;
2407
                           IF_NONE { PUSH int 1034 ; FAILWITH } {} ;
2408
                           GET 4 ;
2409
                           SUB ;
2410
                           ISNAT ;
2411
                           IF_NONE
2412
                             { PUSH string "wrong liquidated net credit" ; FAILWITH }
2413
                             {} ;
2414
                           UPDATE 4 ;
2415
                           SOME ;
2416
                           SWAP ;
2417
                           UPDATE ;
2418
                           DUP ;
2419
                           DUP 10 ;
2420
                           CAR ;
2421
                           DUP ;
2422
                           DUG 2 ;
2423
                           GET ;
2424
                           IF_NONE { PUSH int 1037 ; FAILWITH } {} ;
2425
                           DUP 9 ;
2426
                           DIG 10 ;
2427
                           SUB ;
2428
                           ISNAT ;
2429
                           IF_NONE
2430
                             { PUSH string "wrong liquidated shares" ; FAILWITH }
2431
                             {} ;
2432
                           UPDATE 3 ;
2433
                           SOME ;
2434
                           SWAP ;
2435
                           UPDATE ;
2436
                           SWAP ;
2437
                           PAIR ;
2438
                           SWAP ;
2439
                           PAIR ;
2440
                           PAIR ;
2441
                           PAIR ;
2442
                           SWAP ;
2443
                           PAIR ;
2444
                           DUP ;
2445
                           DUG 3 ;
2446
                           GET 3 ;
2447
                           CAR ;
2448
                           CAR ;
2449
                           CDR ;
2450
                           PUSH nat 100 ;
2451
                           DUP 4 ;
2452
                           GET 4 ;
2453
                           MUL ;
2454
                           EDIV ;
2455
                           IF_NONE { PUSH int 1019 ; FAILWITH } {} ;
2456
                           CAR ;
2457
                           DUP 3 ;
2458
                           GET 4 ;
2459
                           SUB_MUTEZ ;
2460
                           IF_NONE
2461
                             { PUSH string "negative balance delta error" ; FAILWITH }
2462
                             {} ;
2463
                           PUSH nat 100 ;
2464
                           DUP 5 ;
2465
                           CAR ;
2466
                           GET 10 ;
2467
                           DUP 3 ;
2468
                           MUL ;
2469
                           EDIV ;
2470
                           IF_NONE { PUSH int 1044 ; FAILWITH } {} ;
2471
                           CAR ;
2472
                           DUP ;
2473
                           PUSH mutez 0 ;
2474
                           COMPARE ;
2475
                           LT ;
2476
                           IF
2477
                             { NIL operation ;
2478
                               DUP 6 ;
2479
                               CAR ;
2480
                               CAR ;
2481
                               CAR ;
2482
                               CAR ;
2483
                               CAR ;
2484
                               CONTRACT unit ;
2485
                               IF_NONE { PUSH int 1046 ; FAILWITH } {} ;
2486
                               DUP 3 ;
2487
                               UNIT ;
2488
                               TRANSFER_TOKENS ;
2489
                               CONS }
2490
                             { NIL operation } ;
2491
                           DUP 6 ;
2492
                           UNPAIR ;
2493
                           UNPAIR ;
2494
                           UNPAIR ;
2495
                           UNPAIR ;
2496
                           UNPAIR ;
2497
                           SWAP ;
2498
                           DIG 11 ;
2499
                           GET 7 ;
2500
                           CDR ;
2501
                           PUSH nat 1000000000000 ;
2502
                           PUSH nat 1000000 ;
2503
                           PUSH mutez 1 ;
2504
                           DIG 11 ;
2505
                           DIG 12 ;
2506
                           SUB_MUTEZ ;
2507
                           IF_NONE
2508
                             { PUSH string "admin commission error" ; FAILWITH }
2509
                             {} ;
2510
                           EDIV ;
2511
                           IF_NONE { UNIT ; FAILWITH } {} ;
2512
                           CAR ;
2513
                           MUL ;
2514
                           MUL ;
2515
                           EDIV ;
2516
                           IF_NONE { PUSH int 1047 ; FAILWITH } { CAR } ;
2517
                           ADD ;
2518
                           SWAP ;
2519
                           PAIR ;
2520
                           PAIR ;
2521
                           PAIR ;
2522
                           PAIR ;
2523
                           PAIR ;
2524
                           DUP ;
2525
                           DUG 4 ;
2526
                           CAR ;
2527
                           CAR ;
2528
                           CAR ;
2529
                           GET 4 ;
2530
                           CONTRACT %transfer (pair (address %from)
2531
                                                    (pair (address %to) (nat %value))) ;
2532
                           IF_NONE
2533
                             { PUSH string "cant call transfer for LB shares" ; FAILWITH }
2534
                             {} ;
2535
                           PUSH mutez 0 ;
2536
                           DUP 4 ;
2537
                           DIG 5 ;
2538
                           GET 3 ;
2539
                           SELF_ADDRESS ;
2540
                           PAIR 3 ;
2541
                           TRANSFER_TOKENS ;
2542
                           CONS ;
2543
                           DUP 3 ;
2544
                           UNPAIR ;
2545
                           UNPAIR ;
2546
                           SWAP ;
2547
                           UNPAIR ;
2548
                           SWAP ;
2549
                           UNPAIR ;
2550
                           SWAP ;
2551
                           CDR ;
2552
                           DIG 6 ;
2553
                           DIG 7 ;
2554
                           CAR ;
2555
                           GET 7 ;
2556
                           SUB ;
2557
                           ISNAT ;
2558
                           IF_NONE { PUSH int 1051 ; FAILWITH } {} ;
2559
                           PAIR ;
2560
                           SWAP ;
2561
                           PAIR ;
2562
                           SWAP ;
2563
                           PAIR ;
2564
                           SWAP ;
2565
                           PAIR ;
2566
                           PAIR ;
2567
                           SWAP } }
2568
                     { IF_LEFT
2569
                         { SENDER ;
2570
                           DUP 3 ;
2571
                           CAR ;
2572
                           CAR ;
2573
                           CAR ;
2574
                           CAR ;
2575
                           CAR ;
2576
                           COMPARE ;
2577
                           EQ ;
2578
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
2579
                           SWAP ;
2580
                           DUP ;
2581
                           DUG 2 ;
2582
                           GET 3 ;
2583
                           GET 8 ;
2584
                           IF
2585
                             {}
2586
                             { PUSH string "Onchain liquidation disabled." ; FAILWITH } ;
2587
                           NOW ;
2588
                           DUP 3 ;
2589
                           CAR ;
2590
                           GET 3 ;
2591
                           GET 3 ;
2592
                           COMPARE ;
2593
                           NEQ ;
2594
                           IF
2595
                             { NIL operation ;
2596
                               DUP 4 ;
2597
                               UNIT ;
2598
                               SWAP ;
2599
                               DIG 4 ;
2600
                               DIG 3 ;
2601
                               DIG 3 ;
2602
                               PAIR 3 ;
2603
                               EXEC ;
2604
                               CDR ;
2605
                               UNPAIR ;
2606
                               DIG 4 ;
2607
                               DIG 4 ;
2608
                               DIG 3 ;
2609
                               DIG 4 ;
2610
                               DIG 4 ;
2611
                               DUP 3 ;
2612
                               CAR ;
2613
                               CAR ;
2614
                               CAR ;
2615
                               GET 4 ;
2616
                               CONTRACT %getTotalSupply (pair (unit %request)
2617
                                                              (contract %callback nat)) ;
2618
                               IF_NONE
2619
                                 { PUSH string "cant call getTotalSupply of lb token" ;
2620
                                   FAILWITH }
2621
                                 {} ;
2622
                               PUSH mutez 0 ;
2623
                               SELF %updateLqtTotalCallback ;
2624
                               UNIT ;
2625
                               PAIR ;
2626
                               TRANSFER_TOKENS ;
2627
                               CONS ;
2628
                               DUP 3 ;
2629
                               CAR ;
2630
                               CAR ;
2631
                               GET 3 ;
2632
                               CAR ;
2633
                               CONTRACT %getBalance (pair (address %owner)
2634
                                                          (contract %callback nat)) ;
2635
                               IF_NONE
2636
                                 { PUSH string "cant call getBalance for tzBTC" ;
2637
                                   FAILWITH }
2638
                                 {} ;
2639
                               PUSH mutez 0 ;
2640
                               SELF %updateTzbtcPoolCallback ;
2641
                               DUP 6 ;
2642
                               GET 3 ;
2643
                               CAR ;
2644
                               GET 3 ;
2645
                               PAIR ;
2646
                               TRANSFER_TOKENS ;
2647
                               CONS ;
2648
                               SELF %calculateLbPrice ;
2649
                               PUSH mutez 0 ;
2650
                               UNIT ;
2651
                               TRANSFER_TOKENS ;
2652
                               CONS }
2653
                             { NIL operation } ;
2654
                           DUP 3 ;
2655
                           GET 3 ;
2656
                           CAR ;
2657
                           GET 4 ;
2658
                           DUP 3 ;
2659
                           MEM ;
2660
                           IF {} { PUSH string "Unknown Address." ; FAILWITH } ;
2661
                           PUSH nat 0 ;
2662
                           DUP 4 ;
2663
                           GET 3 ;
2664
                           CAR ;
2665
                           GET 4 ;
2666
                           DUP 4 ;
2667
                           GET ;
2668
                           IF_NONE { PUSH int 1063 ; FAILWITH } {} ;
2669
                           GET 4 ;
2670
                           COMPARE ;
2671
                           GT ;
2672
                           IF {} { PUSH string "not loaned" ; FAILWITH } ;
2673
                           DUP 3 ;
2674
                           UNPAIR ;
2675
                           UNPAIR ;
2676
                           SWAP ;
2677
                           UNPAIR ;
2678
                           SWAP ;
2679
                           UNPAIR ;
2680
                           SWAP ;
2681
                           CDR ;
2682
                           DUP 8 ;
2683
                           GET 3 ;
2684
                           CAR ;
2685
                           GET 4 ;
2686
                           DUP 8 ;
2687
                           GET ;
2688
                           IF_NONE { PUSH int 1066 ; FAILWITH } {} ;
2689
                           GET 3 ;
2690
                           DIG 8 ;
2691
                           CAR ;
2692
                           GET 7 ;
2693
                           SUB ;
2694
                           ISNAT ;
2695
                           IF_NONE { PUSH int 709 ; FAILWITH } {} ;
2696
                           PAIR ;
2697
                           SWAP ;
2698
                           PAIR ;
2699
                           SWAP ;
2700
                           PAIR ;
2701
                           SWAP ;
2702
                           PAIR ;
2703
                           PAIR ;
2704
                           DUP ;
2705
                           DUG 3 ;
2706
                           CAR ;
2707
                           CAR ;
2708
                           CAR ;
2709
                           GET 4 ;
2710
                           CONTRACT %approve (pair (address %spender) (nat %value)) ;
2711
                           IF_NONE
2712
                             { PUSH string "cant call approve for LB shares" ; FAILWITH }
2713
                             {} ;
2714
                           PUSH mutez 0 ;
2715
                           DUP 5 ;
2716
                           GET 3 ;
2717
                           CAR ;
2718
                           GET 4 ;
2719
                           DUP 5 ;
2720
                           GET ;
2721
                           IF_NONE { PUSH int 1066 ; FAILWITH } {} ;
2722
                           GET 3 ;
2723
                           DUP 6 ;
2724
                           GET 3 ;
2725
                           CAR ;
2726
                           GET 3 ;
2727
                           PAIR ;
2728
                           TRANSFER_TOKENS ;
2729
                           CONS ;
2730
                           DUP ;
2731
                           DUP 4 ;
2732
                           GET 3 ;
2733
                           CAR ;
2734
                           GET 3 ;
2735
                           CONTRACT %removeLiquidity (pair (address %to)
2736
                                                           (pair (nat %lqtBurned)
2737
                                                                 (pair
2738
                                                                   (mutez %minXtzWithdrawn)
2739
                                                                   (pair
2740
                                                                     (nat %minTokensWithdrawn)
2741
                                                                     (timestamp %deadline))))) ;
2742
                           IF_NONE
2743
                             { PUSH string "cant call removeLiquidity" ; FAILWITH }
2744
                             {} ;
2745
                           PUSH mutez 0 ;
2746
                           PUSH int 1 ;
2747
                           NOW ;
2748
                           ADD ;
2749
                           PUSH nat 0 ;
2750
                           PUSH mutez 0 ;
2751
                           DUP 9 ;
2752
                           GET 3 ;
2753
                           CAR ;
2754
                           GET 4 ;
2755
                           DUP 9 ;
2756
                           GET ;
2757
                           IF_NONE { PUSH int 1066 ; FAILWITH } {} ;
2758
                           GET 3 ;
2759
                           SELF_ADDRESS ;
2760
                           PAIR 5 ;
2761
                           DIG 4 ;
2762
                           DROP ;
2763
                           DIG 6 ;
2764
                           DROP ;
2765
                           DIG 6 ;
2766
                           DROP ;
2767
                           TRANSFER_TOKENS ;
2768
                           CONS ;
2769
                           DUP 3 ;
2770
                           CAR ;
2771
                           CAR ;
2772
                           CAR ;
2773
                           GET 4 ;
2774
                           CONTRACT %approve (pair (address %spender) (nat %value)) ;
2775
                           IF_NONE
2776
                             { PUSH string "cant call approve for LB shares" ; FAILWITH }
2777
                             {} ;
2778
                           PUSH mutez 0 ;
2779
                           PUSH nat 0 ;
2780
                           DUP 6 ;
2781
                           GET 3 ;
2782
                           CAR ;
2783
                           GET 3 ;
2784
                           PAIR ;
2785
                           TRANSFER_TOKENS ;
2786
                           CONS ;
2787
                           DIG 2 ;
2788
                           UNPAIR ;
2789
                           SWAP ;
2790
                           UNPAIR ;
2791
                           UNPAIR ;
2792
                           SWAP ;
2793
                           UNPAIR ;
2794
                           UNPAIR ;
2795
                           UNPAIR ;
2796
                           CAR ;
2797
                           PUSH bool True ;
2798
                           SWAP ;
2799
                           PAIR ;
2800
                           PAIR ;
2801
                           PAIR ;
2802
                           PAIR ;
2803
                           SWAP ;
2804
                           PAIR ;
2805
                           PAIR ;
2806
                           SWAP ;
2807
                           PAIR ;
2808
                           DUP ;
2809
                           DUG 3 ;
2810
                           CAR ;
2811
                           CAR ;
2812
                           GET 3 ;
2813
                           CAR ;
2814
                           CONTRACT %getBalance (pair (address %owner)
2815
                                                      (contract %callback nat)) ;
2816
                           IF_NONE
2817
                             { PUSH string "cant call getBalance for tzBTC shares" ;
2818
                               FAILWITH }
2819
                             {} ;
2820
                           PUSH mutez 0 ;
2821
                           SELF %sellTzBTC ;
2822
                           SELF_ADDRESS ;
2823
                           PAIR ;
2824
                           TRANSFER_TOKENS ;
2825
                           CONS ;
2826
                           SELF %liquidateOnchainLBFinalize ;
2827
                           PUSH mutez 0 ;
2828
                           BALANCE ;
2829
                           DIG 4 ;
2830
                           PAIR ;
2831
                           TRANSFER_TOKENS ;
2832
                           CONS }
2833
                         { IF_LEFT
2834
                             { DIG 2 ;
2835
                               DROP ;
2836
                               DIG 2 ;
2837
                               DROP ;
2838
                               SENDER ;
2839
                               SELF_ADDRESS ;
2840
                               COMPARE ;
2841
                               EQ ;
2842
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
2843
                               DUP ;
2844
                               CDR ;
2845
                               BALANCE ;
2846
                               SUB_MUTEZ ;
2847
                               IF_NONE
2848
                                 { PUSH string "negative balance delta error" ; FAILWITH }
2849
                                 {} ;
2850
                               PUSH mutez 1 ;
2851
                               PUSH nat 1000000 ;
2852
                               PUSH nat 1000000000000 ;
2853
                               DIG 5 ;
2854
                               DUP ;
2855
                               CAR ;
2856
                               GET 3 ;
2857
                               CAR ;
2858
                               CAR ;
2859
                               SWAP ;
2860
                               DUP ;
2861
                               DUG 7 ;
2862
                               GET 3 ;
2863
                               CAR ;
2864
                               GET 4 ;
2865
                               DUP 7 ;
2866
                               CAR ;
2867
                               GET ;
2868
                               IF_NONE { PUSH int 733 ; FAILWITH } {} ;
2869
                               CAR ;
2870
                               MUL ;
2871
                               NEG ;
2872
                               EDIV ;
2873
                               IF_NONE { PUSH int 39 ; FAILWITH } {} ;
2874
                               CAR ;
2875
                               ABS ;
2876
                               NEG ;
2877
                               EDIV ;
2878
                               IF_NONE { PUSH int 39 ; FAILWITH } {} ;
2879
                               CAR ;
2880
                               ABS ;
2881
                               MUL ;
2882
                               DIG 3 ;
2883
                               DUP ;
2884
                               DUP ;
2885
                               DUG 5 ;
2886
                               GET 3 ;
2887
                               CAR ;
2888
                               GET 4 ;
2889
                               DUP 5 ;
2890
                               CAR ;
2891
                               GET ;
2892
                               IF_NONE { PUSH int 735 ; FAILWITH } {} ;
2893
                               GET 4 ;
2894
                               DIG 5 ;
2895
                               GET 11 ;
2896
                               SUB ;
2897
                               ISNAT ;
2898
                               IF_NONE { PUSH int 735 ; FAILWITH } {} ;
2899
                               UPDATE 11 ;
2900
                               DUP ;
2901
                               DUP ;
2902
                               DUG 5 ;
2903
                               GET 3 ;
2904
                               CAR ;
2905
                               GET 4 ;
2906
                               DUP 5 ;
2907
                               CAR ;
2908
                               GET ;
2909
                               IF_NONE { PUSH int 736 ; FAILWITH } {} ;
2910
                               CAR ;
2911
                               DIG 5 ;
2912
                               GET 9 ;
2913
                               SUB ;
2914
                               ISNAT ;
2915
                               IF_NONE { PUSH int 736 ; FAILWITH } {} ;
2916
                               UPDATE 9 ;
2917
                               UNPAIR ;
2918
                               SWAP ;
2919
                               UNPAIR ;
2920
                               UNPAIR ;
2921
                               UNPAIR ;
2922
                               SWAP ;
2923
                               UNPAIR ;
2924
                               SWAP ;
2925
                               DUP ;
2926
                               DUP 10 ;
2927
                               CAR ;
2928
                               DUP ;
2929
                               DUG 2 ;
2930
                               GET ;
2931
                               IF_NONE { PUSH int 738 ; FAILWITH } {} ;
2932
                               PUSH nat 0 ;
2933
                               UPDATE 3 ;
2934
                               SOME ;
2935
                               SWAP ;
2936
                               UPDATE ;
2937
                               DUP ;
2938
                               DUP 10 ;
2939
                               CAR ;
2940
                               DUP ;
2941
                               DUG 2 ;
2942
                               GET ;
2943
                               IF_NONE { PUSH int 739 ; FAILWITH } {} ;
2944
                               PUSH nat 0 ;
2945
                               UPDATE 4 ;
2946
                               SOME ;
2947
                               SWAP ;
2948
                               UPDATE ;
2949
                               DUP ;
2950
                               DIG 9 ;
2951
                               CAR ;
2952
                               DUP ;
2953
                               DUG 2 ;
2954
                               GET ;
2955
                               IF_NONE { PUSH int 740 ; FAILWITH } {} ;
2956
                               PUSH nat 0 ;
2957
                               UPDATE 1 ;
2958
                               SOME ;
2959
                               SWAP ;
2960
                               UPDATE ;
2961
                               SWAP ;
2962
                               PAIR ;
2963
                               SWAP ;
2964
                               PAIR ;
2965
                               PAIR ;
2966
                               PAIR ;
2967
                               SWAP ;
2968
                               PAIR ;
2969
                               DUP ;
2970
                               DUG 3 ;
2971
                               GET 5 ;
2972
                               CAR ;
2973
                               CDR ;
2974
                               SWAP ;
2975
                               DUP ;
2976
                               DUG 2 ;
2977
                               MUL ;
2978
                               PUSH nat 100 ;
2979
                               DUP 4 ;
2980
                               MUL ;
2981
                               COMPARE ;
2982
                               LT ;
2983
                               IF
2984
                                 {}
2985
                                 { PUSH string "liquidation is not allowed" ; FAILWITH } ;
2986
                               PUSH nat 1000000 ;
2987
                               PUSH mutez 1 ;
2988
                               DIG 2 ;
2989
                               EDIV ;
2990
                               IF_NONE { UNIT ; FAILWITH } {} ;
2991
                               CAR ;
2992
                               MUL ;
2993
                               PUSH nat 1000000 ;
2994
                               PUSH mutez 1 ;
2995
                               DIG 3 ;
2996
                               EDIV ;
2997
                               IF_NONE { UNIT ; FAILWITH } {} ;
2998
                               CAR ;
2999
                               MUL ;
3000
                               SUB ;
3001
                               DUP ;
3002
                               PUSH int 0 ;
3003
                               COMPARE ;
3004
                               LT ;
3005
                               IF
3006
                                 { PUSH mutez 1 ;
3007
                                   PUSH nat 1000000 ;
3008
                                   PUSH nat 100 ;
3009
                                   DUP 5 ;
3010
                                   GET 5 ;
3011
                                   CAR ;
3012
                                   CAR ;
3013
                                   DUP 5 ;
3014
                                   ISNAT ;
3015
                                   IF_NONE { PUSH int 1106 ; FAILWITH } {} ;
3016
                                   MUL ;
3017
                                   EDIV ;
3018
                                   IF_NONE { PUSH int 1106 ; FAILWITH } { CAR } ;
3019
                                   EDIV ;
3020
                                   IF_NONE { PUSH int 35 ; FAILWITH } { CAR } ;
3021
                                   MUL ;
3022
                                   DUP ;
3023
                                   PUSH mutez 0 ;
3024
                                   COMPARE ;
3025
                                   LT ;
3026
                                   IF
3027
                                     { NIL operation ;
3028
                                       DUP 4 ;
3029
                                       CAR ;
3030
                                       CAR ;
3031
                                       CAR ;
3032
                                       CAR ;
3033
                                       CAR ;
3034
                                       CONTRACT unit ;
3035
                                       IF_NONE { PUSH int 1108 ; FAILWITH } {} ;
3036
                                       DUP 3 ;
3037
                                       UNIT ;
3038
                                       TRANSFER_TOKENS ;
3039
                                       CONS }
3040
                                     { NIL operation } ;
3041
                                   DUP 4 ;
3042
                                   UNPAIR ;
3043
                                   UNPAIR ;
3044
                                   UNPAIR ;
3045
                                   UNPAIR ;
3046
                                   UNPAIR ;
3047
                                   SWAP ;
3048
                                   DIG 9 ;
3049
                                   GET 7 ;
3050
                                   CDR ;
3051
                                   PUSH nat 1000000000000 ;
3052
                                   PUSH nat 1000000 ;
3053
                                   PUSH mutez 1 ;
3054
                                   DIG 11 ;
3055
                                   EDIV ;
3056
                                   IF_NONE { UNIT ; FAILWITH } {} ;
3057
                                   CAR ;
3058
                                   MUL ;
3059
                                   DIG 10 ;
3060
                                   ISNAT ;
3061
                                   IF_NONE { PUSH int 1109 ; FAILWITH } {} ;
3062
                                   SUB ;
3063
                                   ISNAT ;
3064
                                   IF_NONE { PUSH int 1109 ; FAILWITH } {} ;
3065
                                   MUL ;
3066
                                   EDIV ;
3067
                                   IF_NONE { PUSH int 1109 ; FAILWITH } { CAR } ;
3068
                                   ADD ;
3069
                                   SWAP ;
3070
                                   PAIR ;
3071
                                   PAIR ;
3072
                                   PAIR ;
3073
                                   PAIR ;
3074
                                   PAIR ;
3075
                                   SWAP }
3076
                                 { SWAP ;
3077
                                   DUP ;
3078
                                   DUG 2 ;
3079
                                   UNPAIR ;
3080
                                   UNPAIR ;
3081
                                   UNPAIR ;
3082
                                   UNPAIR ;
3083
                                   CAR ;
3084
                                   DUP 7 ;
3085
                                   GET 7 ;
3086
                                   CDR ;
3087
                                   PUSH nat 1000000000000 ;
3088
                                   DIG 7 ;
3089
                                   NEG ;
3090
                                   ISNAT ;
3091
                                   IF_NONE { PUSH int 1114 ; FAILWITH } {} ;
3092
                                   MUL ;
3093
                                   NEG ;
3094
                                   EDIV ;
3095
                                   IF_NONE { PUSH int 39 ; FAILWITH } {} ;
3096
                                   CAR ;
3097
                                   ABS ;
3098
                                   DIG 6 ;
3099
                                   CAR ;
3100
                                   CAR ;
3101
                                   CAR ;
3102
                                   CAR ;
3103
                                   CDR ;
3104
                                   SUB ;
3105
                                   ISNAT ;
3106
                                   IF_NONE { PUSH int 1114 ; FAILWITH } {} ;
3107
                                   SWAP ;
3108
                                   PAIR ;
3109
                                   PAIR ;
3110
                                   PAIR ;
3111
                                   PAIR ;
3112
                                   PAIR ;
3113
                                   NIL operation } }
3114
                             { PUSH mutez 0 ;
3115
                               AMOUNT ;
3116
                               COMPARE ;
3117
                               EQ ;
3118
                               IF
3119
                                 {}
3120
                                 { PUSH string "Amount is not allowed." ; FAILWITH } ;
3121
                               NOW ;
3122
                               DUP 3 ;
3123
                               CAR ;
3124
                               GET 3 ;
3125
                               GET 3 ;
3126
                               COMPARE ;
3127
                               NEQ ;
3128
                               IF
3129
                                 { NIL operation ;
3130
                                   DUP 4 ;
3131
                                   UNIT ;
3132
                                   SWAP ;
3133
                                   DIG 4 ;
3134
                                   DIG 3 ;
3135
                                   DIG 3 ;
3136
                                   PAIR 3 ;
3137
                                   EXEC ;
3138
                                   CDR ;
3139
                                   UNPAIR ;
3140
                                   DIG 4 ;
3141
                                   DIG 4 ;
3142
                                   DIG 3 ;
3143
                                   DIG 4 ;
3144
                                   DIG 4 ;
3145
                                   DUP 3 ;
3146
                                   CAR ;
3147
                                   CAR ;
3148
                                   CAR ;
3149
                                   GET 4 ;
3150
                                   CONTRACT %getTotalSupply (pair (unit %request)
3151
                                                                  (contract %callback nat)) ;
3152
                                   IF_NONE
3153
                                     { PUSH string "cant call getTotalSupply of lb token" ;
3154
                                       FAILWITH }
3155
                                     {} ;
3156
                                   PUSH mutez 0 ;
3157
                                   SELF %updateLqtTotalCallback ;
3158
                                   UNIT ;
3159
                                   PAIR ;
3160
                                   TRANSFER_TOKENS ;
3161
                                   CONS ;
3162
                                   DUP 3 ;
3163
                                   CAR ;
3164
                                   CAR ;
3165
                                   GET 3 ;
3166
                                   CAR ;
3167
                                   CONTRACT %getBalance (pair (address %owner)
3168
                                                              (contract %callback nat)) ;
3169
                                   IF_NONE
3170
                                     { PUSH string "cant call getBalance for tzBTC" ;
3171
                                       FAILWITH }
3172
                                     {} ;
3173
                                   PUSH mutez 0 ;
3174
                                   SELF %updateTzbtcPoolCallback ;
3175
                                   DUP 6 ;
3176
                                   GET 3 ;
3177
                                   CAR ;
3178
                                   GET 3 ;
3179
                                   PAIR ;
3180
                                   TRANSFER_TOKENS ;
3181
                                   CONS ;
3182
                                   SELF %calculateLbPrice ;
3183
                                   PUSH mutez 0 ;
3184
                                   UNIT ;
3185
                                   TRANSFER_TOKENS ;
3186
                                   CONS }
3187
                                 { NIL operation } ;
3188
                               DUP 3 ;
3189
                               UNPAIR ;
3190
                               UNPAIR ;
3191
                               SWAP ;
3192
                               UNPAIR ;
3193
                               SWAP ;
3194
                               UNPAIR ;
3195
                               SWAP ;
3196
                               CDR ;
3197
                               DUP 7 ;
3198
                               CAR ;
3199
                               DIG 8 ;
3200
                               CAR ;
3201
                               GET 7 ;
3202
                               SUB ;
3203
                               ISNAT ;
3204
                               IF_NONE { PUSH int 709 ; FAILWITH } {} ;
3205
                               PAIR ;
3206
                               SWAP ;
3207
                               PAIR ;
3208
                               SWAP ;
3209
                               PAIR ;
3210
                               SWAP ;
3211
                               PAIR ;
3212
                               PAIR ;
3213
                               DUP ;
3214
                               DUG 3 ;
3215
                               CAR ;
3216
                               CAR ;
3217
                               CAR ;
3218
                               GET 4 ;
3219
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
3220
                               IF_NONE
3221
                                 { PUSH string "cant call approve for LB shares" ;
3222
                                   FAILWITH }
3223
                                 {} ;
3224
                               PUSH mutez 0 ;
3225
                               DUP 4 ;
3226
                               CAR ;
3227
                               DUP 6 ;
3228
                               GET 3 ;
3229
                               CAR ;
3230
                               GET 3 ;
3231
                               PAIR ;
3232
                               TRANSFER_TOKENS ;
3233
                               CONS ;
3234
                               DUP ;
3235
                               DUP 4 ;
3236
                               GET 3 ;
3237
                               CAR ;
3238
                               GET 3 ;
3239
                               CONTRACT %removeLiquidity (pair (address %to)
3240
                                                               (pair (nat %lqtBurned)
3241
                                                                     (pair
3242
                                                                       (mutez %minXtzWithdrawn)
3243
                                                                       (pair
3244
                                                                         (nat %minTokensWithdrawn)
3245
                                                                         (timestamp %deadline))))) ;
3246
                               IF_NONE
3247
                                 { PUSH string "cant call removeLiquidity" ; FAILWITH }
3248
                                 {} ;
3249
                               PUSH mutez 0 ;
3250
                               PUSH int 1 ;
3251
                               NOW ;
3252
                               ADD ;
3253
                               DUP 6 ;
3254
                               CDR ;
3255
                               PUSH mutez 0 ;
3256
                               DUP 8 ;
3257
                               CAR ;
3258
                               SELF_ADDRESS ;
3259
                               PAIR 5 ;
3260
                               DIG 4 ;
3261
                               DROP ;
3262
                               DIG 6 ;
3263
                               DROP ;
3264
                               DIG 6 ;
3265
                               DROP ;
3266
                               TRANSFER_TOKENS ;
3267
                               CONS ;
3268
                               DUP 3 ;
3269
                               CAR ;
3270
                               CAR ;
3271
                               CAR ;
3272
                               GET 4 ;
3273
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
3274
                               IF_NONE
3275
                                 { PUSH string "cant call approve for LB shares" ;
3276
                                   FAILWITH }
3277
                                 {} ;
3278
                               PUSH mutez 0 ;
3279
                               PUSH nat 0 ;
3280
                               DUP 6 ;
3281
                               GET 3 ;
3282
                               CAR ;
3283
                               GET 3 ;
3284
                               PAIR ;
3285
                               TRANSFER_TOKENS ;
3286
                               CONS ;
3287
                               DIG 2 ;
3288
                               UNPAIR ;
3289
                               SWAP ;
3290
                               UNPAIR ;
3291
                               UNPAIR ;
3292
                               SWAP ;
3293
                               UNPAIR ;
3294
                               UNPAIR ;
3295
                               UNPAIR ;
3296
                               CAR ;
3297
                               PUSH bool True ;
3298
                               SWAP ;
3299
                               PAIR ;
3300
                               PAIR ;
3301
                               PAIR ;
3302
                               PAIR ;
3303
                               SWAP ;
3304
                               PAIR ;
3305
                               PAIR ;
3306
                               SWAP ;
3307
                               PAIR ;
3308
                               DUP ;
3309
                               DUG 3 ;
3310
                               CAR ;
3311
                               CAR ;
3312
                               GET 3 ;
3313
                               CAR ;
3314
                               CONTRACT %getBalance (pair (address %owner)
3315
                                                          (contract %callback nat)) ;
3316
                               IF_NONE
3317
                                 { PUSH string "cant call getBalance for tzBTC shares" ;
3318
                                   FAILWITH }
3319
                                 {} ;
3320
                               PUSH mutez 0 ;
3321
                               SELF %sellTzBTC ;
3322
                               SELF_ADDRESS ;
3323
                               PAIR ;
3324
                               TRANSFER_TOKENS ;
3325
                               CONS ;
3326
                               SELF %redeemLBFinalize ;
3327
                               PUSH mutez 0 ;
3328
                               BALANCE ;
3329
                               DIG 4 ;
3330
                               CAR ;
3331
                               SENDER ;
3332
                               PAIR 3 ;
3333
                               TRANSFER_TOKENS ;
3334
                               CONS } } } } } }
3335
         { IF_LEFT
3336
             { IF_LEFT
3337
                 { IF_LEFT
3338
                     { IF_LEFT
3339
                         { DIG 2 ;
3340
                           DROP ;
3341
                           DIG 2 ;
3342
                           DROP ;
3343
                           SENDER ;
3344
                           SELF_ADDRESS ;
3345
                           COMPARE ;
3346
                           EQ ;
3347
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
3348
                           DUP ;
3349
                           GET 4 ;
3350
                           BALANCE ;
3351
                           SUB_MUTEZ ;
3352
                           IF_NONE
3353
                             { PUSH string "negative balance delta error" ; FAILWITH }
3354
                             {} ;
3355
                           DUP 3 ;
3356
                           GET 3 ;
3357
                           CAR ;
3358
                           GET 4 ;
3359
                           DUP 3 ;
3360
                           CAR ;
3361
                           GET ;
3362
                           IF_NONE { PUSH int 748 ; FAILWITH } {} ;
3363
                           GET 3 ;
3364
                           PUSH mutez 1 ;
3365
                           PUSH nat 1000000 ;
3366
                           DUP 3 ;
3367
                           PUSH nat 1000000000000 ;
3368
                           MUL ;
3369
                           DUP 6 ;
3370
                           GET 3 ;
3371
                           DIG 7 ;
3372
                           DUP ;
3373
                           CAR ;
3374
                           GET 3 ;
3375
                           CAR ;
3376
                           CAR ;
3377
                           SWAP ;
3378
                           DUP ;
3379
                           DUG 9 ;
3380
                           GET 3 ;
3381
                           CAR ;
3382
                           GET 4 ;
3383
                           DUP 9 ;
3384
                           CAR ;
3385
                           GET ;
3386
                           IF_NONE { PUSH int 751 ; FAILWITH } {} ;
3387
                           CAR ;
3388
                           MUL ;
3389
                           MUL ;
3390
                           NEG ;
3391
                           EDIV ;
3392
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
3393
                           CAR ;
3394
                           ABS ;
3395
                           NEG ;
3396
                           EDIV ;
3397
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
3398
                           CAR ;
3399
                           ABS ;
3400
                           MUL ;
3401
                           SWAP ;
3402
                           DUP ;
3403
                           DUG 2 ;
3404
                           DUP 5 ;
3405
                           GET 3 ;
3406
                           DUP 7 ;
3407
                           GET 3 ;
3408
                           CAR ;
3409
                           GET 4 ;
3410
                           DUP 7 ;
3411
                           CAR ;
3412
                           GET ;
3413
                           IF_NONE { PUSH int 754 ; FAILWITH } {} ;
3414
                           CAR ;
3415
                           MUL ;
3416
                           EDIV ;
3417
                           IF_NONE { PUSH int 754 ; FAILWITH } { CAR } ;
3418
                           DUP 6 ;
3419
                           SWAP ;
3420
                           DUP ;
3421
                           DUG 2 ;
3422
                           DIG 7 ;
3423
                           GET 9 ;
3424
                           SUB ;
3425
                           ISNAT ;
3426
                           IF_NONE { PUSH int 755 ; FAILWITH } {} ;
3427
                           UPDATE 9 ;
3428
                           DUP ;
3429
                           DUG 6 ;
3430
                           UNPAIR ;
3431
                           SWAP ;
3432
                           UNPAIR ;
3433
                           UNPAIR ;
3434
                           UNPAIR ;
3435
                           SWAP ;
3436
                           UNPAIR ;
3437
                           SWAP ;
3438
                           DUP ;
3439
                           DUP 12 ;
3440
                           CAR ;
3441
                           DUP ;
3442
                           DUG 2 ;
3443
                           GET ;
3444
                           IF_NONE { PUSH int 756 ; FAILWITH } {} ;
3445
                           DIG 8 ;
3446
                           DIG 13 ;
3447
                           GET 3 ;
3448
                           CAR ;
3449
                           GET 4 ;
3450
                           DUP 14 ;
3451
                           CAR ;
3452
                           GET ;
3453
                           IF_NONE { PUSH int 757 ; FAILWITH } {} ;
3454
                           CAR ;
3455
                           SUB ;
3456
                           ISNAT ;
3457
                           IF_NONE
3458
                             { PUSH string "wrong liquidated gross credit" ; FAILWITH }
3459
                             {} ;
3460
                           UPDATE 1 ;
3461
                           SOME ;
3462
                           SWAP ;
3463
                           UPDATE ;
3464
                           SWAP ;
3465
                           PAIR ;
3466
                           SWAP ;
3467
                           PAIR ;
3468
                           PAIR ;
3469
                           PAIR ;
3470
                           SWAP ;
3471
                           PAIR ;
3472
                           DUG 4 ;
3473
                           SWAP ;
3474
                           DUP ;
3475
                           DUG 2 ;
3476
                           DUP 5 ;
3477
                           GET 3 ;
3478
                           DUP 7 ;
3479
                           GET 3 ;
3480
                           CAR ;
3481
                           GET 4 ;
3482
                           DUP 7 ;
3483
                           CAR ;
3484
                           GET ;
3485
                           IF_NONE { PUSH int 761 ; FAILWITH } {} ;
3486
                           GET 4 ;
3487
                           MUL ;
3488
                           EDIV ;
3489
                           IF_NONE { PUSH int 761 ; FAILWITH } { CAR } ;
3490
                           DUP 6 ;
3491
                           SWAP ;
3492
                           DUP ;
3493
                           DUG 2 ;
3494
                           DIG 7 ;
3495
                           GET 11 ;
3496
                           SUB ;
3497
                           ISNAT ;
3498
                           IF_NONE { PUSH int 762 ; FAILWITH } {} ;
3499
                           UPDATE 11 ;
3500
                           DUP ;
3501
                           DUG 6 ;
3502
                           UNPAIR ;
3503
                           SWAP ;
3504
                           UNPAIR ;
3505
                           UNPAIR ;
3506
                           UNPAIR ;
3507
                           SWAP ;
3508
                           UNPAIR ;
3509
                           SWAP ;
3510
                           DUP ;
3511
                           DUP 12 ;
3512
                           CAR ;
3513
                           DUP ;
3514
                           DUG 2 ;
3515
                           GET ;
3516
                           IF_NONE { PUSH int 763 ; FAILWITH } {} ;
3517
                           DIG 8 ;
3518
                           DIG 13 ;
3519
                           GET 3 ;
3520
                           CAR ;
3521
                           GET 4 ;
3522
                           DUP 14 ;
3523
                           CAR ;
3524
                           GET ;
3525
                           IF_NONE { PUSH int 764 ; FAILWITH } {} ;
3526
                           GET 4 ;
3527
                           SUB ;
3528
                           ISNAT ;
3529
                           IF_NONE
3530
                             { PUSH string "wrong liquidated net credit" ; FAILWITH }
3531
                             {} ;
3532
                           UPDATE 4 ;
3533
                           SOME ;
3534
                           SWAP ;
3535
                           UPDATE ;
3536
                           DUP ;
3537
                           DUP 11 ;
3538
                           CAR ;
3539
                           DUP ;
3540
                           DUG 2 ;
3541
                           GET ;
3542
                           IF_NONE { PUSH int 768 ; FAILWITH } {} ;
3543
                           DUP 12 ;
3544
                           GET 3 ;
3545
                           DIG 10 ;
3546
                           SUB ;
3547
                           ISNAT ;
3548
                           IF_NONE
3549
                             { PUSH string "wrong liquidated shares" ; FAILWITH }
3550
                             {} ;
3551
                           UPDATE 3 ;
3552
                           SOME ;
3553
                           SWAP ;
3554
                           UPDATE ;
3555
                           SWAP ;
3556
                           PAIR ;
3557
                           SWAP ;
3558
                           PAIR ;
3559
                           PAIR ;
3560
                           PAIR ;
3561
                           SWAP ;
3562
                           PAIR ;
3563
                           DUG 3 ;
3564
                           NIL operation ;
3565
                           DIG 3 ;
3566
                           CAR ;
3567
                           CONTRACT unit ;
3568
                           IF_NONE { PUSH int 966 ; FAILWITH } {} ;
3569
                           DIG 2 ;
3570
                           DIG 3 ;
3571
                           SUB_MUTEZ ;
3572
                           IF_NONE { PUSH int 966 ; FAILWITH } {} ;
3573
                           UNIT ;
3574
                           TRANSFER_TOKENS ;
3575
                           CONS }
3576
                         { PUSH mutez 0 ;
3577
                           AMOUNT ;
3578
                           COMPARE ;
3579
                           EQ ;
3580
                           IF {} { PUSH string "Amount is not allowed." ; FAILWITH } ;
3581
                           SWAP ;
3582
                           DUP ;
3583
                           DUG 2 ;
3584
                           CAR ;
3585
                           GET 9 ;
3586
                           SENDER ;
3587
                           MEM ;
3588
                           IF {} { PUSH string "Unknown Address." ; FAILWITH } ;
3589
                           DUP ;
3590
                           BALANCE ;
3591
                           COMPARE ;
3592
                           GE ;
3593
                           IF {} { PUSH string "Not enough balance" ; FAILWITH } ;
3594
                           NOW ;
3595
                           DUP 3 ;
3596
                           CAR ;
3597
                           GET 3 ;
3598
                           GET 3 ;
3599
                           COMPARE ;
3600
                           NEQ ;
3601
                           IF
3602
                             { NIL operation ;
3603
                               DIG 3 ;
3604
                               UNIT ;
3605
                               SWAP ;
3606
                               DIG 4 ;
3607
                               DIG 3 ;
3608
                               DIG 3 ;
3609
                               PAIR 3 ;
3610
                               EXEC ;
3611
                               CDR ;
3612
                               UNPAIR ;
3613
                               DIG 3 ;
3614
                               DIG 2 ;
3615
                               DIG 3 ;
3616
                               DIG 3 ;
3617
                               DUP 3 ;
3618
                               CAR ;
3619
                               CAR ;
3620
                               CAR ;
3621
                               GET 4 ;
3622
                               CONTRACT %getTotalSupply (pair (unit %request)
3623
                                                              (contract %callback nat)) ;
3624
                               IF_NONE
3625
                                 { PUSH string "cant call getTotalSupply of lb token" ;
3626
                                   FAILWITH }
3627
                                 {} ;
3628
                               PUSH mutez 0 ;
3629
                               SELF %updateLqtTotalCallback ;
3630
                               UNIT ;
3631
                               PAIR ;
3632
                               TRANSFER_TOKENS ;
3633
                               CONS ;
3634
                               DUP 3 ;
3635
                               CAR ;
3636
                               CAR ;
3637
                               GET 3 ;
3638
                               CAR ;
3639
                               CONTRACT %getBalance (pair (address %owner)
3640
                                                          (contract %callback nat)) ;
3641
                               IF_NONE
3642
                                 { PUSH string "cant call getBalance for tzBTC" ;
3643
                                   FAILWITH }
3644
                                 {} ;
3645
                               PUSH mutez 0 ;
3646
                               SELF %updateTzbtcPoolCallback ;
3647
                               DUP 6 ;
3648
                               GET 3 ;
3649
                               CAR ;
3650
                               GET 3 ;
3651
                               PAIR ;
3652
                               TRANSFER_TOKENS ;
3653
                               CONS ;
3654
                               SELF %calculateLbPrice ;
3655
                               PUSH mutez 0 ;
3656
                               UNIT ;
3657
                               TRANSFER_TOKENS ;
3658
                               CONS }
3659
                             { DIG 2 ; DROP ; NIL operation } ;
3660
                           DUP 3 ;
3661
                           CAR ;
3662
                           CAR ;
3663
                           CAR ;
3664
                           CAR ;
3665
                           CDR ;
3666
                           PUSH nat 1000000000000 ;
3667
                           PUSH nat 1000000 ;
3668
                           PUSH mutez 1 ;
3669
                           DUP 6 ;
3670
                           EDIV ;
3671
                           IF_NONE { UNIT ; FAILWITH } {} ;
3672
                           CAR ;
3673
                           MUL ;
3674
                           MUL ;
3675
                           NEG ;
3676
                           EDIV ;
3677
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
3678
                           CAR ;
3679
                           ABS ;
3680
                           DUP 4 ;
3681
                           UNPAIR ;
3682
                           UNPAIR ;
3683
                           SWAP ;
3684
                           UNPAIR ;
3685
                           SWAP ;
3686
                           UNPAIR ;
3687
                           SWAP ;
3688
                           UNPAIR ;
3689
                           SWAP ;
3690
                           UNPAIR ;
3691
                           DUP ;
3692
                           SENDER ;
3693
                           DUP ;
3694
                           DUG 2 ;
3695
                           GET ;
3696
                           IF_NONE { PUSH int 654 ; FAILWITH } {} ;
3697
                           DUP 10 ;
3698
                           DIG 13 ;
3699
                           CAR ;
3700
                           GET 9 ;
3701
                           SENDER ;
3702
                           GET ;
3703
                           IF_NONE { PUSH int 655 ; FAILWITH } {} ;
3704
                           CDR ;
3705
                           SUB ;
3706
                           ISNAT ;
3707
                           IF_NONE { PUSH string "too much amount" ; FAILWITH } {} ;
3708
                           UPDATE 2 ;
3709
                           SOME ;
3710
                           SWAP ;
3711
                           UPDATE ;
3712
                           PAIR ;
3713
                           SWAP ;
3714
                           PAIR ;
3715
                           SWAP ;
3716
                           PAIR ;
3717
                           SWAP ;
3718
                           PAIR ;
3719
                           SWAP ;
3720
                           PAIR ;
3721
                           PAIR ;
3722
                           DUP ;
3723
                           DUG 4 ;
3724
                           UNPAIR ;
3725
                           SWAP ;
3726
                           UNPAIR ;
3727
                           SWAP ;
3728
                           UNPAIR ;
3729
                           SWAP ;
3730
                           UNPAIR ;
3731
                           CAR ;
3732
                           DIG 5 ;
3733
                           DIG 8 ;
3734
                           GET 7 ;
3735
                           CDR ;
3736
                           SUB ;
3737
                           ISNAT ;
3738
                           IF_NONE
3739
                             { PUSH string "wrong total deposit value" ; FAILWITH }
3740
                             {} ;
3741
                           SWAP ;
3742
                           PAIR ;
3743
                           PAIR ;
3744
                           SWAP ;
3745
                           PAIR ;
3746
                           SWAP ;
3747
                           PAIR ;
3748
                           SWAP ;
3749
                           PAIR ;
3750
                           DUG 2 ;
3751
                           SENDER ;
3752
                           CONTRACT unit ;
3753
                           IF_NONE { PUSH int 659 ; FAILWITH } {} ;
3754
                           DIG 2 ;
3755
                           UNIT ;
3756
                           TRANSFER_TOKENS ;
3757
                           CONS ;
3758
                           DIG 2 ;
3759
                           UNIT ;
3760
                           SWAP ;
3761
                           DIG 3 ;
3762
                           DIG 2 ;
3763
                           PAIR ;
3764
                           EXEC ;
3765
                           CDR ;
3766
                           SWAP } }
3767
                     { DIG 3 ;
3768
                       DROP ;
3769
                       IF_LEFT
3770
                         { DIG 2 ;
3771
                           DROP ;
3772
                           SENDER ;
3773
                           DUP 3 ;
3774
                           CAR ;
3775
                           CAR ;
3776
                           GET 3 ;
3777
                           CAR ;
3778
                           COMPARE ;
3779
                           EQ ;
3780
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
3781
                           SWAP ;
3782
                           DUP ;
3783
                           DUG 2 ;
3784
                           GET 3 ;
3785
                           GET 3 ;
3786
                           CAR ;
3787
                           CAR ;
3788
                           CDR ;
3789
                           IF {} { PUSH string "Bad status." ; FAILWITH } ;
3790
                           SWAP ;
3791
                           UNPAIR ;
3792
                           SWAP ;
3793
                           UNPAIR ;
3794
                           UNPAIR ;
3795
                           SWAP ;
3796
                           UNPAIR ;
3797
                           UNPAIR ;
3798
                           UNPAIR ;
3799
                           CAR ;
3800
                           PUSH bool False ;
3801
                           SWAP ;
3802
                           PAIR ;
3803
                           PAIR ;
3804
                           PAIR ;
3805
                           PAIR ;
3806
                           SWAP ;
3807
                           PAIR ;
3808
                           PAIR ;
3809
                           SWAP ;
3810
                           PAIR ;
3811
                           SWAP ;
3812
                           DUP ;
3813
                           PUSH nat 0 ;
3814
                           COMPARE ;
3815
                           LT ;
3816
                           IF
3817
                             { NIL operation ;
3818
                               DUP 3 ;
3819
                               CAR ;
3820
                               CAR ;
3821
                               GET 3 ;
3822
                               CAR ;
3823
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
3824
                               IF_NONE
3825
                                 { PUSH string "cant call approve for tzBTC shares" ;
3826
                                   FAILWITH }
3827
                                 {} ;
3828
                               PUSH mutez 0 ;
3829
                               PUSH nat 1000000000000000000 ;
3830
                               DUP 6 ;
3831
                               CAR ;
3832
                               CAR ;
3833
                               CAR ;
3834
                               GET 3 ;
3835
                               PAIR ;
3836
                               TRANSFER_TOKENS ;
3837
                               CONS ;
3838
                               DUP ;
3839
                               DUP 4 ;
3840
                               CAR ;
3841
                               CAR ;
3842
                               CAR ;
3843
                               GET 3 ;
3844
                               CONTRACT %tokenToXtz (pair (address %to)
3845
                                                          (pair (nat %tokensSold)
3846
                                                                (pair
3847
                                                                  (mutez %minXtzBought)
3848
                                                                  (timestamp %deadline)))) ;
3849
                               IF_NONE
3850
                                 { PUSH string "cant call tokenToXtz" ; FAILWITH }
3851
                                 {} ;
3852
                               PUSH mutez 0 ;
3853
                               PUSH int 1 ;
3854
                               NOW ;
3855
                               ADD ;
3856
                               PUSH mutez 0 ;
3857
                               DUP 7 ;
3858
                               SELF_ADDRESS ;
3859
                               PAIR 4 ;
3860
                               DIG 4 ;
3861
                               DROP ;
3862
                               DIG 4 ;
3863
                               DROP ;
3864
                               TRANSFER_TOKENS ;
3865
                               CONS ;
3866
                               SWAP ;
3867
                               DUP ;
3868
                               DUG 2 ;
3869
                               CAR ;
3870
                               CAR ;
3871
                               GET 3 ;
3872
                               CAR ;
3873
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
3874
                               IF_NONE
3875
                                 { PUSH string "cant call approve for tzBTC shares" ;
3876
                                   FAILWITH }
3877
                                 {} ;
3878
                               PUSH mutez 0 ;
3879
                               PUSH nat 0 ;
3880
                               DUP 5 ;
3881
                               CAR ;
3882
                               CAR ;
3883
                               CAR ;
3884
                               GET 3 ;
3885
                               PAIR ;
3886
                               TRANSFER_TOKENS ;
3887
                               CONS }
3888
                             { DROP ; NIL operation } }
3889
                         { DIG 2 ;
3890
                           DROP ;
3891
                           SWAP ;
3892
                           DUP ;
3893
                           DUG 2 ;
3894
                           CAR ;
3895
                           CAR ;
3896
                           CAR ;
3897
                           CAR ;
3898
                           CAR ;
3899
                           SENDER ;
3900
                           COMPARE ;
3901
                           EQ ;
3902
                           IF {} { PUSH string "NotAdmin" ; FAILWITH } ;
3903
                           SWAP ;
3904
                           UNPAIR ;
3905
                           UNPAIR ;
3906
                           UNPAIR ;
3907
                           UNPAIR ;
3908
                           CDR ;
3909
                           DIG 5 ;
3910
                           PAIR ;
3911
                           PAIR ;
3912
                           PAIR ;
3913
                           PAIR ;
3914
                           PAIR ;
3915
                           NIL operation } } }
3916
                 { IF_LEFT
3917
                     { DIG 3 ;
3918
                       DROP ;
3919
                       IF_LEFT
3920
                         { DIG 2 ;
3921
                           DROP ;
3922
                           SENDER ;
3923
                           DUP 3 ;
3924
                           CAR ;
3925
                           CAR ;
3926
                           CAR ;
3927
                           CAR ;
3928
                           CAR ;
3929
                           COMPARE ;
3930
                           EQ ;
3931
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
3932
                           SET_DELEGATE ;
3933
                           NIL operation ;
3934
                           SWAP ;
3935
                           CONS }
3936
                         { DIG 2 ;
3937
                           DROP ;
3938
                           SENDER ;
3939
                           DUP 3 ;
3940
                           CAR ;
3941
                           CAR ;
3942
                           CAR ;
3943
                           CAR ;
3944
                           CAR ;
3945
                           COMPARE ;
3946
                           EQ ;
3947
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
3948
                           SWAP ;
3949
                           UNPAIR ;
3950
                           UNPAIR ;
3951
                           UNPAIR ;
3952
                           UNPAIR ;
3953
                           SWAP ;
3954
                           CDR ;
3955
                           DIG 5 ;
3956
                           PAIR ;
3957
                           SWAP ;
3958
                           PAIR ;
3959
                           PAIR ;
3960
                           PAIR ;
3961
                           PAIR ;
3962
                           NIL operation } }
3963
                     { IF_LEFT
3964
                         { DIG 2 ;
3965
                           DROP ;
3966
                           DIG 2 ;
3967
                           DROP ;
3968
                           SENDER ;
3969
                           DUP 3 ;
3970
                           CAR ;
3971
                           CAR ;
3972
                           CAR ;
3973
                           CAR ;
3974
                           CAR ;
3975
                           COMPARE ;
3976
                           EQ ;
3977
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
3978
                           SWAP ;
3979
                           UNPAIR ;
3980
                           UNPAIR ;
3981
                           UNPAIR ;
3982
                           SWAP ;
3983
                           UNPAIR ;
3984
                           CAR ;
3985
                           DUP 6 ;
3986
                           CAR ;
3987
                           SWAP ;
3988
                           PAIR ;
3989
                           SWAP ;
3990
                           CAR ;
3991
                           DUP 6 ;
3992
                           GET 3 ;
3993
                           DIG 6 ;
3994
                           GET 4 ;
3995
                           PAIR ;
3996
                           SWAP ;
3997
                           PAIR ;
3998
                           SWAP ;
3999
                           PAIR ;
4000
                           SWAP ;
4001
                           PAIR ;
4002
                           PAIR ;
4003
                           PAIR ;
4004
                           NIL operation }
4005
                         { IF_LEFT
4006
                             { SENDER ;
4007
                               DUP 3 ;
4008
                               CAR ;
4009
                               CAR ;
4010
                               CAR ;
4011
                               CAR ;
4012
                               CAR ;
4013
                               COMPARE ;
4014
                               EQ ;
4015
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4016
                               NOW ;
4017
                               DUP 3 ;
4018
                               CAR ;
4019
                               GET 3 ;
4020
                               GET 3 ;
4021
                               COMPARE ;
4022
                               NEQ ;
4023
                               IF
4024
                                 { DIG 3 ;
4025
                                   DROP ;
4026
                                   NIL operation ;
4027
                                   DIG 3 ;
4028
                                   UNIT ;
4029
                                   SWAP ;
4030
                                   DIG 4 ;
4031
                                   DIG 3 ;
4032
                                   DIG 3 ;
4033
                                   PAIR 3 ;
4034
                                   EXEC ;
4035
                                   CDR ;
4036
                                   UNPAIR ;
4037
                                   SWAP ;
4038
                                   DUP ;
4039
                                   DUG 3 ;
4040
                                   CAR ;
4041
                                   CAR ;
4042
                                   CAR ;
4043
                                   GET 4 ;
4044
                                   CONTRACT %getTotalSupply (pair (unit %request)
4045
                                                                  (contract %callback nat)) ;
4046
                                   IF_NONE
4047
                                     { PUSH string "cant call getTotalSupply of lb token" ;
4048
                                       FAILWITH }
4049
                                     {} ;
4050
                                   PUSH mutez 0 ;
4051
                                   SELF %updateLqtTotalCallback ;
4052
                                   UNIT ;
4053
                                   PAIR ;
4054
                                   TRANSFER_TOKENS ;
4055
                                   CONS ;
4056
                                   DUP 3 ;
4057
                                   CAR ;
4058
                                   CAR ;
4059
                                   GET 3 ;
4060
                                   CAR ;
4061
                                   CONTRACT %getBalance (pair (address %owner)
4062
                                                              (contract %callback nat)) ;
4063
                                   IF_NONE
4064
                                     { PUSH string "cant call getBalance for tzBTC" ;
4065
                                       FAILWITH }
4066
                                     {} ;
4067
                                   PUSH mutez 0 ;
4068
                                   SELF %updateTzbtcPoolCallback ;
4069
                                   DUP 6 ;
4070
                                   GET 3 ;
4071
                                   CAR ;
4072
                                   GET 3 ;
4073
                                   PAIR ;
4074
                                   TRANSFER_TOKENS ;
4075
                                   CONS ;
4076
                                   SELF %calculateLbPrice ;
4077
                                   PUSH mutez 0 ;
4078
                                   UNIT ;
4079
                                   TRANSFER_TOKENS ;
4080
                                   CONS }
4081
                                 { DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
4082
                               DIG 2 ;
4083
                               UNPAIR ;
4084
                               UNPAIR ;
4085
                               SWAP ;
4086
                               UNPAIR ;
4087
                               UNPAIR ;
4088
                               SWAP ;
4089
                               CAR ;
4090
                               DIG 6 ;
4091
                               SWAP ;
4092
                               PAIR ;
4093
                               SWAP ;
4094
                               PAIR ;
4095
                               PAIR ;
4096
                               SWAP ;
4097
                               PAIR ;
4098
                               PAIR ;
4099
                               SWAP }
4100
                             { DIG 2 ;
4101
                               DROP ;
4102
                               DIG 2 ;
4103
                               DROP ;
4104
                               SENDER ;
4105
                               DUP 3 ;
4106
                               CAR ;
4107
                               CAR ;
4108
                               CAR ;
4109
                               CAR ;
4110
                               CAR ;
4111
                               COMPARE ;
4112
                               EQ ;
4113
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4114
                               DUP ;
4115
                               PUSH nat 277777777 ;
4116
                               SWAP ;
4117
                               COMPARE ;
4118
                               LE ;
4119
                               IF
4120
                                 {}
4121
                                 { PUSH string "price change rate max value error" ;
4122
                                   FAILWITH } ;
4123
                               SWAP ;
4124
                               UNPAIR ;
4125
                               UNPAIR ;
4126
                               SWAP ;
4127
                               UNPAIR ;
4128
                               SWAP ;
4129
                               UNPAIR ;
4130
                               CAR ;
4131
                               DIG 5 ;
4132
                               SWAP ;
4133
                               PAIR ;
4134
                               PAIR ;
4135
                               SWAP ;
4136
                               PAIR ;
4137
                               SWAP ;
4138
                               PAIR ;
4139
                               PAIR ;
4140
                               NIL operation } } } } }
4141
             { IF_LEFT
4142
                 { IF_LEFT
4143
                     { IF_LEFT
4144
                         { DIG 2 ;
4145
                           DROP ;
4146
                           DIG 2 ;
4147
                           DROP ;
4148
                           SENDER ;
4149
                           DUP 3 ;
4150
                           CAR ;
4151
                           CAR ;
4152
                           CAR ;
4153
                           CAR ;
4154
                           CAR ;
4155
                           COMPARE ;
4156
                           EQ ;
4157
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4158
                           DUP ;
4159
                           CAR ;
4160
                           PUSH nat 20 ;
4161
                           SWAP ;
4162
                           COMPARE ;
4163
                           GE ;
4164
                           IF
4165
                             {}
4166
                             { PUSH string "max_leverage min value error" ; FAILWITH } ;
4167
                           DUP ;
4168
                           CAR ;
4169
                           PUSH nat 100 ;
4170
                           SWAP ;
4171
                           COMPARE ;
4172
                           LE ;
4173
                           IF
4174
                             {}
4175
                             { PUSH string "max_leverage max value error" ; FAILWITH } ;
4176
                           DUP ;
4177
                           GET 3 ;
4178
                           PUSH nat 100 ;
4179
                           COMPARE ;
4180
                           LT ;
4181
                           IF
4182
                             {}
4183
                             { PUSH string "onchain_liquidation_percent min value error" ;
4184
                               FAILWITH } ;
4185
                           DUP ;
4186
                           GET 3 ;
4187
                           PUSH nat 200 ;
4188
                           SWAP ;
4189
                           COMPARE ;
4190
                           LE ;
4191
                           IF
4192
                             {}
4193
                             { PUSH string "onchain_liquidation_percent max value error" ;
4194
                               FAILWITH } ;
4195
                           DUP ;
4196
                           GET 5 ;
4197
                           PUSH nat 100 ;
4198
                           SWAP ;
4199
                           COMPARE ;
4200
                           LE ;
4201
                           IF
4202
                             {}
4203
                             { PUSH string "onchain_liquidation_comm max value error" ;
4204
                               FAILWITH } ;
4205
                           DUP ;
4206
                           GET 7 ;
4207
                           PUSH nat 100 ;
4208
                           COMPARE ;
4209
                           LT ;
4210
                           IF
4211
                             {}
4212
                             { PUSH string "liquidation_percent min value error" ;
4213
                               FAILWITH } ;
4214
                           DUP ;
4215
                           GET 7 ;
4216
                           PUSH nat 200 ;
4217
                           SWAP ;
4218
                           COMPARE ;
4219
                           LE ;
4220
                           IF
4221
                             {}
4222
                             { PUSH string "liquidation_percent max value error" ;
4223
                               FAILWITH } ;
4224
                           DUP ;
4225
                           GET 9 ;
4226
                           PUSH nat 100 ;
4227
                           COMPARE ;
4228
                           LT ;
4229
                           IF
4230
                             {}
4231
                             { PUSH string "liquidation_price_percent min value error" ;
4232
                               FAILWITH } ;
4233
                           DUP ;
4234
                           GET 7 ;
4235
                           SWAP ;
4236
                           DUP ;
4237
                           DUG 2 ;
4238
                           GET 9 ;
4239
                           COMPARE ;
4240
                           LE ;
4241
                           IF
4242
                             {}
4243
                             { PUSH string "liquidation_percent max value error" ;
4244
                               FAILWITH } ;
4245
                           DUP ;
4246
                           GET 11 ;
4247
                           PUSH nat 100 ;
4248
                           SWAP ;
4249
                           COMPARE ;
4250
                           LE ;
4251
                           IF
4252
                             {}
4253
                             { PUSH string "liquidation_comm max value error" ; FAILWITH } ;
4254
                           SWAP ;
4255
                           UNPAIR ;
4256
                           SWAP ;
4257
                           UNPAIR ;
4258
                           UNPAIR ;
4259
                           SWAP ;
4260
                           UNPAIR ;
4261
                           CAR ;
4262
                           DUP 6 ;
4263
                           CAR ;
4264
                           SWAP ;
4265
                           PAIR ;
4266
                           PAIR ;
4267
                           SWAP ;
4268
                           PAIR ;
4269
                           SWAP ;
4270
                           UNPAIR ;
4271
                           CDR ;
4272
                           DUP 5 ;
4273
                           GET 3 ;
4274
                           DUP 6 ;
4275
                           GET 5 ;
4276
                           PAIR ;
4277
                           PAIR ;
4278
                           PAIR ;
4279
                           SWAP ;
4280
                           UNPAIR ;
4281
                           CDR ;
4282
                           DUP 5 ;
4283
                           GET 7 ;
4284
                           DUP 6 ;
4285
                           GET 9 ;
4286
                           SWAP ;
4287
                           PAIR ;
4288
                           PAIR ;
4289
                           PAIR ;
4290
                           PAIR ;
4291
                           SWAP ;
4292
                           UNPAIR ;
4293
                           SWAP ;
4294
                           UNPAIR ;
4295
                           SWAP ;
4296
                           UNPAIR ;
4297
                           SWAP ;
4298
                           UNPAIR ;
4299
                           SWAP ;
4300
                           CAR ;
4301
                           DUP 7 ;
4302
                           GET 11 ;
4303
                           SWAP ;
4304
                           PAIR ;
4305
                           SWAP ;
4306
                           PAIR ;
4307
                           SWAP ;
4308
                           PAIR ;
4309
                           SWAP ;
4310
                           PAIR ;
4311
                           SWAP ;
4312
                           PAIR ;
4313
                           SWAP ;
4314
                           UNPAIR ;
4315
                           SWAP ;
4316
                           UNPAIR ;
4317
                           UNPAIR ;
4318
                           SWAP ;
4319
                           CDR ;
4320
                           DIG 5 ;
4321
                           GET 12 ;
4322
                           PAIR ;
4323
                           SWAP ;
4324
                           PAIR ;
4325
                           PAIR ;
4326
                           SWAP ;
4327
                           PAIR ;
4328
                           SWAP ;
4329
                           PAIR ;
4330
                           NIL operation }
4331
                         { SENDER ;
4332
                           DUP 3 ;
4333
                           CAR ;
4334
                           CAR ;
4335
                           CAR ;
4336
                           CAR ;
4337
                           CAR ;
4338
                           COMPARE ;
4339
                           EQ ;
4340
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4341
                           NOW ;
4342
                           DUP 3 ;
4343
                           CAR ;
4344
                           GET 3 ;
4345
                           GET 3 ;
4346
                           COMPARE ;
4347
                           NEQ ;
4348
                           IF
4349
                             { DIG 3 ;
4350
                               DROP ;
4351
                               NIL operation ;
4352
                               DIG 3 ;
4353
                               UNIT ;
4354
                               SWAP ;
4355
                               DIG 4 ;
4356
                               DIG 3 ;
4357
                               DIG 3 ;
4358
                               PAIR 3 ;
4359
                               EXEC ;
4360
                               CDR ;
4361
                               UNPAIR ;
4362
                               SWAP ;
4363
                               DUP ;
4364
                               DUG 3 ;
4365
                               CAR ;
4366
                               CAR ;
4367
                               CAR ;
4368
                               GET 4 ;
4369
                               CONTRACT %getTotalSupply (pair (unit %request)
4370
                                                              (contract %callback nat)) ;
4371
                               IF_NONE
4372
                                 { PUSH string "cant call getTotalSupply of lb token" ;
4373
                                   FAILWITH }
4374
                                 {} ;
4375
                               PUSH mutez 0 ;
4376
                               SELF %updateLqtTotalCallback ;
4377
                               UNIT ;
4378
                               PAIR ;
4379
                               TRANSFER_TOKENS ;
4380
                               CONS ;
4381
                               DUP 3 ;
4382
                               CAR ;
4383
                               CAR ;
4384
                               GET 3 ;
4385
                               CAR ;
4386
                               CONTRACT %getBalance (pair (address %owner)
4387
                                                          (contract %callback nat)) ;
4388
                               IF_NONE
4389
                                 { PUSH string "cant call getBalance for tzBTC" ;
4390
                                   FAILWITH }
4391
                                 {} ;
4392
                               PUSH mutez 0 ;
4393
                               SELF %updateTzbtcPoolCallback ;
4394
                               DUP 6 ;
4395
                               GET 3 ;
4396
                               CAR ;
4397
                               GET 3 ;
4398
                               PAIR ;
4399
                               TRANSFER_TOKENS ;
4400
                               CONS ;
4401
                               SELF %calculateLbPrice ;
4402
                               PUSH mutez 0 ;
4403
                               UNIT ;
4404
                               TRANSFER_TOKENS ;
4405
                               CONS }
4406
                             { DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
4407
                           PUSH nat 12857 ;
4408
                           DIG 2 ;
4409
                           DUP ;
4410
                           GET 3 ;
4411
                           SWAP ;
4412
                           DUP ;
4413
                           DUG 4 ;
4414
                           CAR ;
4415
                           ADD ;
4416
                           COMPARE ;
4417
                           LE ;
4418
                           IF {} { PUSH string "rate2 max value error" ; FAILWITH } ;
4419
                           PUSH nat 100 ;
4420
                           DUP 3 ;
4421
                           GET 6 ;
4422
                           COMPARE ;
4423
                           LE ;
4424
                           IF {} { PUSH string "wrong threshold percent" ; FAILWITH } ;
4425
                           SWAP ;
4426
                           DUP ;
4427
                           GET 6 ;
4428
                           SWAP ;
4429
                           DUP ;
4430
                           DUG 3 ;
4431
                           GET 5 ;
4432
                           COMPARE ;
4433
                           LE ;
4434
                           IF {} { PUSH string "wrong threshold percent" ; FAILWITH } ;
4435
                           DIG 2 ;
4436
                           UNPAIR ;
4437
                           SWAP ;
4438
                           UNPAIR ;
4439
                           SWAP ;
4440
                           UNPAIR ;
4441
                           UNPAIR ;
4442
                           SWAP ;
4443
                           UNPAIR ;
4444
                           SWAP ;
4445
                           CDR ;
4446
                           DUP 8 ;
4447
                           CAR ;
4448
                           DUP 9 ;
4449
                           GET 3 ;
4450
                           SWAP ;
4451
                           PAIR ;
4452
                           PAIR ;
4453
                           DUP 8 ;
4454
                           GET 5 ;
4455
                           UPDATE 3 ;
4456
                           DIG 7 ;
4457
                           GET 6 ;
4458
                           UPDATE 4 ;
4459
                           SWAP ;
4460
                           PAIR ;
4461
                           SWAP ;
4462
                           PAIR ;
4463
                           PAIR ;
4464
                           SWAP ;
4465
                           PAIR ;
4466
                           SWAP ;
4467
                           PAIR ;
4468
                           SWAP } }
4469
                     { DIG 3 ;
4470
                       DROP ;
4471
                       IF_LEFT
4472
                         { DIG 2 ;
4473
                           DROP ;
4474
                           SENDER ;
4475
                           DUP 3 ;
4476
                           CAR ;
4477
                           CAR ;
4478
                           CAR ;
4479
                           CAR ;
4480
                           CAR ;
4481
                           COMPARE ;
4482
                           EQ ;
4483
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4484
                           DUP ;
4485
                           PUSH nat 2000 ;
4486
                           SWAP ;
4487
                           COMPARE ;
4488
                           LE ;
4489
                           IF
4490
                             {}
4491
                             { PUSH string "upfront commission max value error" ;
4492
                               FAILWITH } ;
4493
                           UPDATE 12 ;
4494
                           NIL operation }
4495
                         { IF_LEFT
4496
                             { DIG 2 ;
4497
                               DROP ;
4498
                               SWAP ;
4499
                               DUP ;
4500
                               DUG 2 ;
4501
                               CAR ;
4502
                               GET 9 ;
4503
                               SWAP ;
4504
                               DUP ;
4505
                               DUG 2 ;
4506
                               CAR ;
4507
                               MEM ;
4508
                               IF
4509
                                 {}
4510
                                 { SWAP ;
4511
                                   UNPAIR ;
4512
                                   UNPAIR ;
4513
                                   SWAP ;
4514
                                   UNPAIR ;
4515
                                   SWAP ;
4516
                                   UNPAIR ;
4517
                                   SWAP ;
4518
                                   UNPAIR ;
4519
                                   SWAP ;
4520
                                   UNPAIR ;
4521
                                   PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ;
4522
                                   DUP 9 ;
4523
                                   CAR ;
4524
                                   UPDATE ;
4525
                                   PAIR ;
4526
                                   SWAP ;
4527
                                   PAIR ;
4528
                                   SWAP ;
4529
                                   PAIR ;
4530
                                   SWAP ;
4531
                                   PAIR ;
4532
                                   SWAP ;
4533
                                   PAIR ;
4534
                                   PAIR ;
4535
                                   SWAP } ;
4536
                               SWAP ;
4537
                               DUP ;
4538
                               DUG 2 ;
4539
                               CAR ;
4540
                               GET 9 ;
4541
                               SWAP ;
4542
                               DUP ;
4543
                               DUG 2 ;
4544
                               GET 3 ;
4545
                               MEM ;
4546
                               IF
4547
                                 {}
4548
                                 { SWAP ;
4549
                                   UNPAIR ;
4550
                                   UNPAIR ;
4551
                                   SWAP ;
4552
                                   UNPAIR ;
4553
                                   SWAP ;
4554
                                   UNPAIR ;
4555
                                   SWAP ;
4556
                                   UNPAIR ;
4557
                                   SWAP ;
4558
                                   UNPAIR ;
4559
                                   PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ;
4560
                                   DUP 9 ;
4561
                                   GET 3 ;
4562
                                   UPDATE ;
4563
                                   PAIR ;
4564
                                   SWAP ;
4565
                                   PAIR ;
4566
                                   SWAP ;
4567
                                   PAIR ;
4568
                                   SWAP ;
4569
                                   PAIR ;
4570
                                   SWAP ;
4571
                                   PAIR ;
4572
                                   PAIR ;
4573
                                   SWAP } ;
4574
                               DUP ;
4575
                               CAR ;
4576
                               SENDER ;
4577
                               COMPARE ;
4578
                               NEQ ;
4579
                               IF
4580
                                 { SWAP ;
4581
                                   DUP ;
4582
                                   DUG 2 ;
4583
                                   CAR ;
4584
                                   GET 9 ;
4585
                                   SWAP ;
4586
                                   DUP ;
4587
                                   DUG 2 ;
4588
                                   CAR ;
4589
                                   GET ;
4590
                                   IF_NONE { PUSH int 81 ; FAILWITH } {} ;
4591
                                   CAR ;
4592
                                   SENDER ;
4593
                                   MEM ;
4594
                                   IF
4595
                                     { DUP ;
4596
                                       GET 4 ;
4597
                                       DUP 3 ;
4598
                                       CAR ;
4599
                                       GET 9 ;
4600
                                       DUP 3 ;
4601
                                       CAR ;
4602
                                       GET ;
4603
                                       IF_NONE { PUSH int 82 ; FAILWITH } {} ;
4604
                                       CAR ;
4605
                                       SENDER ;
4606
                                       GET ;
4607
                                       IF_NONE { PUSH int 82 ; FAILWITH } {} ;
4608
                                       COMPARE ;
4609
                                       GE }
4610
                                     { PUSH bool False } ;
4611
                                   IF
4612
                                     {}
4613
                                     { PUSH string "NotEnoughAllowance" ; FAILWITH } }
4614
                                 {} ;
4615
                               DUP ;
4616
                               GET 4 ;
4617
                               DUP 3 ;
4618
                               CAR ;
4619
                               GET 9 ;
4620
                               DUP 3 ;
4621
                               CAR ;
4622
                               GET ;
4623
                               IF_NONE { PUSH int 85 ; FAILWITH } {} ;
4624
                               CDR ;
4625
                               COMPARE ;
4626
                               GE ;
4627
                               IF {} { PUSH string "NotEnoughBalance" ; FAILWITH } ;
4628
                               SWAP ;
4629
                               DUP ;
4630
                               DUG 2 ;
4631
                               UNPAIR ;
4632
                               UNPAIR ;
4633
                               SWAP ;
4634
                               UNPAIR ;
4635
                               SWAP ;
4636
                               UNPAIR ;
4637
                               SWAP ;
4638
                               UNPAIR ;
4639
                               SWAP ;
4640
                               UNPAIR ;
4641
                               DUP ;
4642
                               DUP 9 ;
4643
                               CAR ;
4644
                               DUP ;
4645
                               DUG 2 ;
4646
                               GET ;
4647
                               IF_NONE { PUSH int 86 ; FAILWITH } {} ;
4648
                               DUP 10 ;
4649
                               GET 4 ;
4650
                               DIG 11 ;
4651
                               CAR ;
4652
                               GET 9 ;
4653
                               DUP 12 ;
4654
                               CAR ;
4655
                               GET ;
4656
                               IF_NONE { PUSH int 86 ; FAILWITH } {} ;
4657
                               CDR ;
4658
                               SUB ;
4659
                               ISNAT ;
4660
                               IF_NONE { PUSH int 86 ; FAILWITH } {} ;
4661
                               UPDATE 2 ;
4662
                               SOME ;
4663
                               SWAP ;
4664
                               UPDATE ;
4665
                               DUP ;
4666
                               DUP 9 ;
4667
                               GET 3 ;
4668
                               DUP ;
4669
                               DUG 2 ;
4670
                               GET ;
4671
                               IF_NONE { PUSH int 87 ; FAILWITH } {} ;
4672
                               DUP ;
4673
                               CDR ;
4674
                               DUP 11 ;
4675
                               GET 4 ;
4676
                               ADD ;
4677
                               UPDATE 2 ;
4678
                               SOME ;
4679
                               SWAP ;
4680
                               UPDATE ;
4681
                               PAIR ;
4682
                               SWAP ;
4683
                               PAIR ;
4684
                               SWAP ;
4685
                               PAIR ;
4686
                               SWAP ;
4687
                               PAIR ;
4688
                               SWAP ;
4689
                               PAIR ;
4690
                               PAIR ;
4691
                               SWAP ;
4692
                               DUP ;
4693
                               CAR ;
4694
                               SENDER ;
4695
                               COMPARE ;
4696
                               NEQ ;
4697
                               IF
4698
                                 { SWAP ;
4699
                                   DUP ;
4700
                                   DUG 2 ;
4701
                                   UNPAIR ;
4702
                                   UNPAIR ;
4703
                                   SWAP ;
4704
                                   UNPAIR ;
4705
                                   SWAP ;
4706
                                   UNPAIR ;
4707
                                   SWAP ;
4708
                                   UNPAIR ;
4709
                                   SWAP ;
4710
                                   UNPAIR ;
4711
                                   DUP ;
4712
                                   DUP 9 ;
4713
                                   CAR ;
4714
                                   DUP ;
4715
                                   DUG 2 ;
4716
                                   GET ;
4717
                                   IF_NONE { PUSH int 89 ; FAILWITH } {} ;
4718
                                   DUP ;
4719
                                   CAR ;
4720
                                   DUP 11 ;
4721
                                   GET 4 ;
4722
                                   DIG 12 ;
4723
                                   CAR ;
4724
                                   GET 9 ;
4725
                                   DIG 12 ;
4726
                                   CAR ;
4727
                                   GET ;
4728
                                   IF_NONE { PUSH int 89 ; FAILWITH } {} ;
4729
                                   CAR ;
4730
                                   SENDER ;
4731
                                   GET ;
4732
                                   IF_NONE { PUSH int 89 ; FAILWITH } {} ;
4733
                                   SUB ;
4734
                                   ISNAT ;
4735
                                   IF_NONE { PUSH int 89 ; FAILWITH } {} ;
4736
                                   SOME ;
4737
                                   SENDER ;
4738
                                   UPDATE ;
4739
                                   UPDATE 1 ;
4740
                                   SOME ;
4741
                                   SWAP ;
4742
                                   UPDATE ;
4743
                                   PAIR ;
4744
                                   SWAP ;
4745
                                   PAIR ;
4746
                                   SWAP ;
4747
                                   PAIR ;
4748
                                   SWAP ;
4749
                                   PAIR ;
4750
                                   SWAP ;
4751
                                   PAIR ;
4752
                                   PAIR }
4753
                                 { DROP } ;
4754
                               NIL operation }
4755
                             { DROP ;
4756
                               DUP ;
4757
                               CAR ;
4758
                               GET 3 ;
4759
                               GET 3 ;
4760
                               NOW ;
4761
                               COMPARE ;
4762
                               NEQ ;
4763
                               IF
4764
                                 { NIL operation ;
4765
                                   DIG 2 ;
4766
                                   UNIT ;
4767
                                   SWAP ;
4768
                                   DUG 3 ;
4769
                                   PAIR 3 ;
4770
                                   EXEC ;
4771
                                   CDR ;
4772
                                   UNPAIR ;
4773
                                   SWAP ;
4774
                                   DUP ;
4775
                                   DUG 2 ;
4776
                                   CAR ;
4777
                                   CAR ;
4778
                                   CAR ;
4779
                                   GET 4 ;
4780
                                   CONTRACT %getTotalSupply (pair (unit %request)
4781
                                                                  (contract %callback nat)) ;
4782
                                   IF_NONE
4783
                                     { PUSH string "cant call getTotalSupply of lb token" ;
4784
                                       FAILWITH }
4785
                                     {} ;
4786
                                   PUSH mutez 0 ;
4787
                                   SELF %updateLqtTotalCallback ;
4788
                                   UNIT ;
4789
                                   PAIR ;
4790
                                   TRANSFER_TOKENS ;
4791
                                   CONS ;
4792
                                   SWAP ;
4793
                                   DUP ;
4794
                                   DUG 2 ;
4795
                                   CAR ;
4796
                                   CAR ;
4797
                                   GET 3 ;
4798
                                   CAR ;
4799
                                   CONTRACT %getBalance (pair (address %owner)
4800
                                                              (contract %callback nat)) ;
4801
                                   IF_NONE
4802
                                     { PUSH string "cant call getBalance for tzBTC" ;
4803
                                       FAILWITH }
4804
                                     {} ;
4805
                                   PUSH mutez 0 ;
4806
                                   SELF %updateTzbtcPoolCallback ;
4807
                                   DUP 5 ;
4808
                                   GET 3 ;
4809
                                   CAR ;
4810
                                   GET 3 ;
4811
                                   PAIR ;
4812
                                   TRANSFER_TOKENS ;
4813
                                   CONS ;
4814
                                   SELF %calculateLbPrice ;
4815
                                   PUSH mutez 0 ;
4816
                                   UNIT ;
4817
                                   TRANSFER_TOKENS ;
4818
                                   CONS }
4819
                                 { SWAP ; DROP ; NIL operation } } } } }
4820
                 { IF_LEFT
4821
                     { DIG 2 ;
4822
                       DROP ;
4823
                       DIG 2 ;
4824
                       DROP ;
4825
                       IF_LEFT
4826
                         { SENDER ;
4827
                           DUP 3 ;
4828
                           CAR ;
4829
                           CAR ;
4830
                           CAR ;
4831
                           GET 4 ;
4832
                           COMPARE ;
4833
                           EQ ;
4834
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4835
                           SWAP ;
4836
                           DUP ;
4837
                           DUG 2 ;
4838
                           GET 3 ;
4839
                           GET 3 ;
4840
                           CAR ;
4841
                           CAR ;
4842
                           CAR ;
4843
                           IF {} { PUSH string "Bad status." ; FAILWITH } ;
4844
                           SWAP ;
4845
                           UNPAIR ;
4846
                           SWAP ;
4847
                           UNPAIR ;
4848
                           UNPAIR ;
4849
                           SWAP ;
4850
                           UNPAIR ;
4851
                           UNPAIR ;
4852
                           UNPAIR ;
4853
                           CDR ;
4854
                           PUSH bool False ;
4855
                           PAIR ;
4856
                           PAIR ;
4857
                           PAIR ;
4858
                           PAIR ;
4859
                           SWAP ;
4860
                           PAIR ;
4861
                           PAIR ;
4862
                           SWAP ;
4863
                           UNPAIR ;
4864
                           SWAP ;
4865
                           UNPAIR ;
4866
                           SWAP ;
4867
                           UNPAIR ;
4868
                           SWAP ;
4869
                           CDR ;
4870
                           DIG 5 ;
4871
                           PAIR ;
4872
                           SWAP ;
4873
                           PAIR ;
4874
                           SWAP ;
4875
                           PAIR ;
4876
                           SWAP ;
4877
                           PAIR ;
4878
                           PAIR }
4879
                         { SENDER ;
4880
                           DUP 3 ;
4881
                           CAR ;
4882
                           CAR ;
4883
                           CAR ;
4884
                           GET 4 ;
4885
                           COMPARE ;
4886
                           EQ ;
4887
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4888
                           SWAP ;
4889
                           UNPAIR ;
4890
                           SWAP ;
4891
                           UNPAIR ;
4892
                           UNPAIR ;
4893
                           SWAP ;
4894
                           UNPAIR ;
4895
                           UNPAIR ;
4896
                           DIG 6 ;
4897
                           UPDATE 3 ;
4898
                           PAIR ;
4899
                           PAIR ;
4900
                           SWAP ;
4901
                           PAIR ;
4902
                           PAIR ;
4903
                           SWAP ;
4904
                           PAIR } ;
4905
                       NIL operation }
4906
                     { IF_LEFT
4907
                         { DIG 2 ;
4908
                           DROP ;
4909
                           DIG 2 ;
4910
                           DROP ;
4911
                           SENDER ;
4912
                           DUP 3 ;
4913
                           CAR ;
4914
                           CAR ;
4915
                           GET 3 ;
4916
                           CAR ;
4917
                           COMPARE ;
4918
                           EQ ;
4919
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4920
                           SWAP ;
4921
                           UNPAIR ;
4922
                           SWAP ;
4923
                           UNPAIR ;
4924
                           UNPAIR ;
4925
                           SWAP ;
4926
                           UNPAIR ;
4927
                           UNPAIR ;
4928
                           DIG 6 ;
4929
                           UPDATE 4 ;
4930
                           PAIR ;
4931
                           PAIR ;
4932
                           SWAP ;
4933
                           PAIR ;
4934
                           PAIR ;
4935
                           SWAP ;
4936
                           PAIR ;
4937
                           NIL operation }
4938
                         { IF_LEFT
4939
                             { DIG 2 ;
4940
                               DROP ;
4941
                               DIG 2 ;
4942
                               DROP ;
4943
                               SWAP ;
4944
                               DUP ;
4945
                               DUG 2 ;
4946
                               CAR ;
4947
                               CAR ;
4948
                               CAR ;
4949
                               CAR ;
4950
                               CAR ;
4951
                               SENDER ;
4952
                               COMPARE ;
4953
                               EQ ;
4954
                               IF {} { PUSH string "NotAdmin" ; FAILWITH } ;
4955
                               SWAP ;
4956
                               UNPAIR ;
4957
                               SWAP ;
4958
                               UNPAIR ;
4959
                               UNPAIR ;
4960
                               SWAP ;
4961
                               UNPAIR ;
4962
                               SWAP ;
4963
                               UNPAIR ;
4964
                               DUP 7 ;
4965
                               CDR ;
4966
                               SOME ;
4967
                               DIG 7 ;
4968
                               CAR ;
4969
                               UPDATE ;
4970
                               PAIR ;
4971
                               SWAP ;
4972
                               PAIR ;
4973
                               SWAP ;
4974
                               PAIR ;
4975
                               PAIR ;
4976
                               SWAP ;
4977
                               PAIR ;
4978
                               NIL operation }
4979
                             { NOW ;
4980
                               DUP 3 ;
4981
                               CAR ;
4982
                               GET 3 ;
4983
                               GET 3 ;
4984
                               COMPARE ;
4985
                               NEQ ;
4986
                               IF
4987
                                 { NIL operation ;
4988
                                   DUP 4 ;
4989
                                   UNIT ;
4990
                                   SWAP ;
4991
                                   DIG 4 ;
4992
                                   DIG 3 ;
4993
                                   DIG 3 ;
4994
                                   PAIR 3 ;
4995
                                   EXEC ;
4996
                                   CDR ;
4997
                                   UNPAIR ;
4998
                                   DIG 4 ;
4999
                                   DIG 4 ;
5000
                                   DIG 3 ;
5001
                                   DIG 4 ;
5002
                                   DIG 4 ;
5003
                                   DUP 3 ;
5004
                                   CAR ;
5005
                                   CAR ;
5006
                                   CAR ;
5007
                                   GET 4 ;
5008
                                   CONTRACT %getTotalSupply (pair (unit %request)
5009
                                                                  (contract %callback nat)) ;
5010
                                   IF_NONE
5011
                                     { PUSH string "cant call getTotalSupply of lb token" ;
5012
                                       FAILWITH }
5013
                                     {} ;
5014
                                   PUSH mutez 0 ;
5015
                                   SELF %updateLqtTotalCallback ;
5016
                                   UNIT ;
5017
                                   PAIR ;
5018
                                   TRANSFER_TOKENS ;
5019
                                   CONS ;
5020
                                   DUP 3 ;
5021
                                   CAR ;
5022
                                   CAR ;
5023
                                   GET 3 ;
5024
                                   CAR ;
5025
                                   CONTRACT %getBalance (pair (address %owner)
5026
                                                              (contract %callback nat)) ;
5027
                                   IF_NONE
5028
                                     { PUSH string "cant call getBalance for tzBTC" ;
5029
                                       FAILWITH }
5030
                                     {} ;
5031
                                   PUSH mutez 0 ;
5032
                                   SELF %updateTzbtcPoolCallback ;
5033
                                   DUP 6 ;
5034
                                   GET 3 ;
5035
                                   CAR ;
5036
                                   GET 3 ;
5037
                                   PAIR ;
5038
                                   TRANSFER_TOKENS ;
5039
                                   CONS ;
5040
                                   SELF %calculateLbPrice ;
5041
                                   PUSH mutez 0 ;
5042
                                   UNIT ;
5043
                                   TRANSFER_TOKENS ;
5044
                                   CONS }
5045
                                 { NIL operation } ;
5046
                               SENDER ;
5047
                               DUP 4 ;
5048
                               CAR ;
5049
                               CAR ;
5050
                               CAR ;
5051
                               CAR ;
5052
                               CAR ;
5053
                               COMPARE ;
5054
                               EQ ;
5055
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
5056
                               DIG 2 ;
5057
                               DUP ;
5058
                               CAR ;
5059
                               CAR ;
5060
                               CAR ;
5061
                               CAR ;
5062
                               CDR ;
5063
                               SWAP ;
5064
                               DUP ;
5065
                               DUG 4 ;
5066
                               GET 7 ;
5067
                               CDR ;
5068
                               MUL ;
5069
                               DIG 3 ;
5070
                               DUP ;
5071
                               CAR ;
5072
                               GET 3 ;
5073
                               CAR ;
5074
                               CAR ;
5075
                               SWAP ;
5076
                               DUP ;
5077
                               DUG 5 ;
5078
                               GET 9 ;
5079
                               MUL ;
5080
                               PUSH nat 1000000000000 ;
5081
                               PUSH nat 1000000 ;
5082
                               PUSH mutez 1 ;
5083
                               BALANCE ;
5084
                               EDIV ;
5085
                               IF_NONE { UNIT ; FAILWITH } {} ;
5086
                               CAR ;
5087
                               MUL ;
5088
                               MUL ;
5089
                               ADD ;
5090
                               SUB ;
5091
                               DUP ;
5092
                               PUSH int 0 ;
5093
                               COMPARE ;
5094
                               LT ;
5095
                               IF
5096
                                 { PUSH mutez 1 ;
5097
                                   PUSH nat 1000000 ;
5098
                                   PUSH nat 1000000000000 ;
5099
                                   DUP 4 ;
5100
                                   ISNAT ;
5101
                                   IF_NONE { PUSH int 408 ; FAILWITH } {} ;
5102
                                   EDIV ;
5103
                                   IF_NONE { PUSH int 408 ; FAILWITH } { CAR } ;
5104
                                   EDIV ;
5105
                                   IF_NONE { PUSH int 35 ; FAILWITH } { CAR } ;
5106
                                   MUL ;
5107
                                   DUP ;
5108
                                   PUSH mutez 0 ;
5109
                                   COMPARE ;
5110
                                   LT ;
5111
                                   IF
5112
                                     { DUP ;
5113
                                       BALANCE ;
5114
                                       COMPARE ;
5115
                                       GT ;
5116
                                       IF
5117
                                         { SWAP ;
5118
                                           DROP ;
5119
                                           DIG 2 ;
5120
                                           DROP ;
5121
                                           DIG 3 ;
5122
                                           DROP ;
5123
                                           DIG 3 ;
5124
                                           DROP ;
5125
                                           SWAP ;
5126
                                           DUP 3 ;
5127
                                           CAR ;
5128
                                           CAR ;
5129
                                           CAR ;
5130
                                           CAR ;
5131
                                           CAR ;
5132
                                           CONTRACT unit ;
5133
                                           IF_NONE { PUSH int 411 ; FAILWITH } {} ;
5134
                                           DIG 2 ;
5135
                                           UNIT ;
5136
                                           TRANSFER_TOKENS ;
5137
                                           CONS }
5138
                                         { DROP 2 ;
5139
                                           SWAP ;
5140
                                           DROP ;
5141
                                           DIG 2 ;
5142
                                           DROP ;
5143
                                           DIG 2 ;
5144
                                           DROP ;
5145
                                           SWAP ;
5146
                                           DUP ;
5147
                                           DUG 2 ;
5148
                                           CAR ;
5149
                                           CAR ;
5150
                                           CAR ;
5151
                                           CAR ;
5152
                                           CAR ;
5153
                                           CONTRACT unit ;
5154
                                           IF_NONE { PUSH int 413 ; FAILWITH } {} ;
5155
                                           BALANCE ;
5156
                                           UNIT ;
5157
                                           TRANSFER_TOKENS ;
5158
                                           CONS } }
5159
                                     { DROP 2 ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } }
5160
                                 { DROP ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } } } } } } } ;
5161
       NIL operation ;
5162
       SWAP ;
5163
       ITER { CONS } ;
5164
       PAIR }