x
903
1755
parameter (or (or (or (or (or (pair %approve (address %spender) (nat %value)) (unit %calculateLbPrice)) (or (unit %default) (nat %depositLending))) (or (or (unit %disableOnchainLiquidation) (pair %flashloan (contract %callback unit) (nat %requested_shares))) (or (unit %flashloanFinalize) (or (nat %flashloanReturn) (pair %getAdministrator unit (contract address)))))) (or (or (or (pair %getAllowance (pair (address %owner) (address %spender)) (contract nat)) (pair %getBalance address (contract nat))) (or (pair %getTotalSupply unit (contract nat)) (or (pair %investLB (mutez %amount2tzBTC) (pair (nat %mintzBTCTokensBought) (pair (nat %tzBTC2xtz) (pair (mutez %minXtzBought) (pair (mutez %amount2Lqt) (nat %minLqtMinted)))))) (pair %investLBFinalize (address %address) (pair (nat %initial_lb_shares) (pair (nat %initial_tzBTC_shares) (nat %tzBTC2xtz))))))) (or (or (pair %liquidateLB (address %address) (nat %payment_shares)) (pair %liquidateLBFinalize (address %address) (pair (address %sender) (nat %payment_shares)))) (or (address %liquidateOnchainLB) (or (pair %liquidateOnchainLBFinalize (address %address) (nat %initial_tzBTC_shares)) (pair %redeemLB (nat %lqtBurned) (pair (nat %minTokensWithdrawn) (mutez %xtz_to_token_amount)))))))) (or (or (or (or (pair %redeemLBFinalize (address %address) (pair (nat %lqtBurned) (nat %initial_tzBTC_shares))) (nat %redeemLending)) (or (unit %sellXtz) (or (address %sendBalance) (address %setAdministrator)))) (or (or (address %setDexContract) (pair %setFlashloanParams (nat %flashloan_admin_commission) (pair (nat %flashloan_deposit_commission) (bool %flashloan_available)))) (or (bool %setIsWorkingStatus) (or (nat %setLbPriceChangeRate) (pair %setLeverageParams (nat %max_leverage) (pair (nat %onchain_liquidation_percent) (pair (nat %onchain_liquidation_comm) (pair (nat %liquidation_percent) (pair (nat %liquidation_price_percent) (pair (nat %liquidation_comm) (address %oracle_address))))))))))) (or (or (or (pair %setRateParams (nat %rate_1) (pair (nat %rate_diff) (pair (nat %threshold_percent_1) (nat %threshold_percent_2)))) (nat %setUpfrontCommission)) (or (pair %transfer (address %from) (pair (address %to) (nat %value))) (or (unit %updateIndexes) (nat %updateLBCallback)))) (or (or (nat %updateLqtTotalCallback) (nat %updateTzBTCCallback)) (or (nat %updateTzbtcPoolCallback) (or (pair %update_metadata (string %key) (bytes %value)) (unit %withdrawCommission)))))));storage (pair (pair (pair (pair (pair (address %administrator) (nat %deposit_index)) (pair (address %dex_contract_address) (address %fa_lb_address))) (pair (pair (address %fa_tzBTC_address) (nat %flashloan_admin_commission)) (pair (bool %flashloan_available) (pair (nat %flashloan_deposit_commission) (nat %flashloan_shares))))) (pair (pair (pair (nat %gross_credit_index) (nat %index_delta)) (pair (timestamp %index_update_dttm) (bool %is_working))) (pair (pair (nat %lb_price) (nat %lb_price_change_rate)) (pair (nat %lb_shares) (pair (big_map %ledger address (pair (map %approvals address nat) (nat %balance))) (nat %liquidation_comm)))))) (pair (pair (pair (pair (nat %liquidation_percent) (nat %liquidation_price_percent)) (pair (address %liquidity_baking_address) (big_map %liquidity_book address (pair (nat %gross_credit) (pair (nat %lb_shares) (nat %net_credit)))))) (pair (pair (pair %local_params (pair (bool %fa_lb_callback_status) (bool %fa_tzBTC_callback_status)) (pair (nat %lqt_total) (nat %tzbtc_pool))) (nat %max_leverage)) (pair (big_map %metadata string bytes) (pair (nat %net_credit_index) (bool %onchain_liquidation_available))))) (pair (pair (pair (nat %onchain_liquidation_comm) (nat %onchain_liquidation_percent)) (pair (address %oracle_address) (pair (pair %rate_params (pair (nat %rate_1) (nat %rate_diff)) (pair (nat %threshold_percent_1) (nat %threshold_percent_2))) (big_map %token_metadata nat (pair (nat %token_id) (map %token_info string bytes)))))) (pair (pair (nat %totalSupply) (nat %total_gross_credit)) (pair (nat %total_net_credit) (pair (nat %tzBTC_shares) (nat %upfront_commission)))))));code { LAMBDA (pair unit (pair (pair (pair (pair (pair address nat) (pair address address)) (pair (pair address nat) (pair bool (pair nat nat)))) (pair (pair (pair nat nat) (pair timestamp bool)) (pair (pair nat nat) (pair nat (pair (big_map address (pair (map address nat) nat)) nat))))) (pair (pair (pair (pair nat nat) (pair address (big_map address (pair nat (pair nat nat))))) (pair (pair (pair (pair bool bool) (pair nat nat)) nat) (pair (big_map string bytes) (pair nat bool)))) (pair (pair (pair nat nat) (pair address (pair (pair (pair nat nat) (pair nat nat)) (big_map nat (pair nat (map string bytes)))))) (pair (pair nat nat) (pair nat (pair nat nat))))))) (pair unit (pair (pair (pair (pair (pair address nat) (pair address address)) (pair (pair address nat) (pair bool (pair nat nat)))) (pair (pair (pair nat nat) (pair timestamp bool)) (pair (pair nat nat) (pair nat (pair (big_map address (pair (map address nat) nat)) nat))))) (pair (pair (pair (pair nat nat) (pair address (big_map address (pair nat (pair nat nat))))) (pair (pair (pair (pair bool bool) (pair nat nat)) nat) (pair (big_map string bytes) (pair nat bool)))) (pair (pair (pair nat nat) (pair address (pair (pair (pair nat nat) (pair nat nat)) (big_map nat (pair nat (map string bytes)))))) (pair (pair nat nat) (pair nat (pair nat nat))))))) { CDR ; DUP ; GET 3 ; GET 7 ; SWAP ; DUP ; DUG 2 ; GET 9 ; MUL ; SWAP ; DUP ; CAR ; CAR ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 3 ; GET 7 ; CAR ; MUL ; COMPARE ; GE ; IF {} { PUSH string "total deposit and net credit inequation error" ; FAILWITH } ; UNIT ; PAIR } ; SWAP ; LAMBDA (pair (pair mutez nat) (pair (list operation) (pair (pair (pair (pair (pair address nat) (pair address address)) (pair (pair address nat) (pair bool (pair nat nat)))) (pair (pair (pair nat nat) (pair timestamp bool)) (pair (pair nat nat) (pair nat (pair (big_map address (pair (map address nat) nat)) nat))))) (pair (pair (pair (pair nat nat) (pair address (big_map address (pair nat (pair nat nat))))) (pair (pair (pair (pair bool bool) (pair nat nat)) nat) (pair (big_map string bytes) (pair nat bool)))) (pair (pair (pair nat nat) (pair address (pair (pair (pair nat nat) (pair nat nat)) (big_map nat (pair nat (map string bytes)))))) (pair (pair nat nat) (pair nat (pair nat nat)))))))) (pair unit (pair (list operation) (pair (pair (pair (pair (pair address nat) (pair address address)) (pair (pair address nat) (pair bool (pair nat nat)))) (pair (pair (pair nat nat) (pair timestamp bool)) (pair (pair nat nat) (pair nat (pair (big_map address (pair (map address nat) nat)) nat))))) (pair (pair (pair (pair nat nat) (pair address (big_map address (pair nat (pair nat nat))))) (pair (pair (pair (pair bool bool) (pair nat nat)) nat) (pair (big_map string bytes) (pair nat bool)))) (pair (pair (pair nat nat) (pair address (pair (pair (pair nat nat) (pair nat nat)) (big_map nat (pair nat (map string bytes)))))) (pair (pair nat nat) (pair nat (pair nat nat)))))))) { UNPAIR 3 ; SWAP ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %approve (pair (address %spender) (nat %value)) ; IF_NONE { PUSH string "cant call approve for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; CDR ; DUP 6 ; CAR ; CAR ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP ; DUP 4 ; CAR ; CAR ; CAR ; GET 3 ; CONTRACT %tokenToXtz (pair (address %to) (pair (nat %tokensSold) (pair (mutez %minXtzBought) (timestamp %deadline)))) ; IF_NONE { PUSH string "cant call tokenToXtz" ; FAILWITH } {} ; PUSH mutez 0 ; PUSH int 1 ; NOW ; ADD ; DIG 5 ; DUP ; CAR ; SWAP ; DUP ; DUG 7 ; CDR ; SELF_ADDRESS ; PAIR 4 ; DIG 4 ; DROP ; DIG 4 ; DROP ; TRANSFER_TOKENS ; CONS ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %approve (pair (address %spender) (nat %value)) ; IF_NONE { PUSH string "cant call approve for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; PUSH nat 0 ; DUP 5 ; CAR ; CAR ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; UNIT ; PAIR 3 } ; SWAP ; LAMBDA (pair unit (pair (list operation) (pair (pair (pair (pair (pair address nat) (pair address address)) (pair (pair address nat) (pair bool (pair nat nat)))) (pair (pair (pair nat nat) (pair timestamp bool)) (pair (pair nat nat) (pair nat (pair (big_map address (pair (map address nat) nat)) nat))))) (pair (pair (pair (pair nat nat) (pair address (big_map address (pair nat (pair nat nat))))) (pair (pair (pair (pair bool bool) (pair nat nat)) nat) (pair (big_map string bytes) (pair nat bool)))) (pair (pair (pair nat nat) (pair address (pair (pair (pair nat nat) (pair nat nat)) (big_map nat (pair nat (map string bytes)))))) (pair (pair nat nat) (pair nat (pair nat nat)))))))) (pair unit (pair (list operation) (pair (pair (pair (pair (pair address nat) (pair address address)) (pair (pair address nat) (pair bool (pair nat nat)))) (pair (pair (pair nat nat) (pair timestamp bool)) (pair (pair nat nat) (pair nat (pair (big_map address (pair (map address nat) nat)) nat))))) (pair (pair (pair (pair nat nat) (pair address (big_map address (pair nat (pair nat nat))))) (pair (pair (pair (pair bool bool) (pair nat nat)) nat) (pair (big_map string bytes) (pair nat bool)))) (pair (pair (pair nat nat) (pair address (pair (pair (pair nat nat) (pair nat nat)) (big_map nat (pair nat (map string bytes)))))) (pair (pair nat nat) (pair nat (pair nat nat)))))))) { UNPAIR 3 ; SWAP ; DUP 3 ; CAR ; GET 3 ; GET 3 ; NOW ; SUB ; ISNAT ; IF_NONE { PUSH int 589 ; FAILWITH } {} ; PUSH nat 0 ; PUSH nat 0 ; DUP 6 ; GET 7 ; CAR ; COMPARE ; GT ; IF { DROP ; DIG 3 ; DUP ; CAR ; CAR ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 5 ; GET 7 ; CAR ; MUL ; PUSH nat 1000000000000 ; DIG 5 ; DUP ; GET 3 ; GET 7 ; SWAP ; DUP ; DUG 7 ; GET 9 ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 594 ; FAILWITH } { CAR } } {} ; PUSH nat 0 ; PUSH nat 0 ; DUP 7 ; GET 7 ; CAR ; COMPARE ; GT ; IF { DROP ; DIG 4 ; DUP ; CAR ; CAR ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 6 ; GET 7 ; CAR ; MUL ; PUSH nat 1000000000000 ; DIG 6 ; DUP ; CAR ; GET 3 ; CAR ; CAR ; SWAP ; DUP ; DUG 8 ; GET 7 ; CDR ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 548 ; FAILWITH } { CAR } } {} ; PUSH nat 10000000000 ; DUP 7 ; GET 5 ; GET 5 ; GET 3 ; MUL ; PUSH nat 10000000000 ; DUP 8 ; GET 5 ; GET 5 ; GET 4 ; MUL ; SWAP ; DUP ; DUG 2 ; DUP 4 ; COMPARE ; LT ; IF { SWAP ; DUP ; DUG 2 ; DUP 4 ; DUP 10 ; GET 5 ; GET 5 ; CAR ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 561 ; FAILWITH } { CAR } ; DUG 2 } { DUP ; DUP 4 ; COMPARE ; LT ; IF { DUP 8 ; GET 5 ; GET 5 ; CAR ; CAR ; DUG 2 } { PUSH nat 1000000000000 ; DUP 4 ; COMPARE ; LT ; IF { DUP ; PUSH nat 1000000000000 ; SUB ; ISNAT ; IF_NONE { PUSH int 575 ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; DUP 5 ; SUB ; ISNAT ; IF_NONE { PUSH int 573 ; FAILWITH } {} ; DUP 10 ; GET 5 ; GET 5 ; CAR ; CDR ; MUL ; EDIV ; IF_NONE { PUSH int 573 ; FAILWITH } { CAR } ; DUP 9 ; GET 5 ; GET 5 ; CAR ; CAR ; ADD ; DUG 2 } { DIG 7 ; DUP ; GET 5 ; GET 5 ; CAR ; CDR ; SWAP ; DUP ; DUG 9 ; GET 5 ; GET 5 ; CAR ; CAR ; ADD ; DUG 2 } } } ; DUP 9 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; CDR ; PUSH nat 1000000000000 ; DUP 12 ; DUP 10 ; MUL ; PUSH nat 1000000000000 ; ADD ; DIG 15 ; CAR ; GET 3 ; CAR ; CAR ; MUL ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 8 ; PUSH nat 0 ; DUP 10 ; CAR ; GET 3 ; GET 4 ; IF { DROP 3 ; SWAP ; DROP ; DIG 4 ; DROP ; PUSH nat 10 ; PUSH nat 9 ; DIG 2 ; MUL ; EDIV ; IF_NONE { PUSH int 604 ; FAILWITH } { CAR } } { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 4 ; DROP } ; DUP 5 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CDR ; PUSH nat 1000000000000 ; DUP 10 ; DUP 9 ; MUL ; PUSH nat 1000000000000 ; ADD ; DIG 12 ; GET 3 ; GET 7 ; MUL ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 4 ; PUSH nat 1000000000000 ; DUG 2 ; MUL ; EDIV ; IF_NONE { PUSH int 607 ; FAILWITH } { CAR } ; DUP 4 ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; CAR ; PUSH nat 1000000000000 ; DIG 7 ; DIG 7 ; MUL ; PUSH nat 1000000000000 ; ADD ; DIG 8 ; CAR ; CAR ; CAR ; CAR ; CDR ; MUL ; EDIV ; IF_NONE { PUSH int 608 ; FAILWITH } { CAR } ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP ; UNIT ; PAIR 3 } ; SWAP ; UNPAIR ; IF_LEFT { IF_LEFT { IF_LEFT { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; IF_LEFT { SWAP ; DUP ; DUG 2 ; CAR ; GET 9 ; SENDER ; MEM ; IF {} { SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ; SENDER ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } ; PUSH nat 0 ; DUP 3 ; CAR ; GET 9 ; SENDER ; GET ; IF_NONE { PUSH int 95 ; FAILWITH } {} ; CAR ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH nat 0 } {} ; COMPARE ; EQ ; IF { PUSH bool True } { DUP ; CDR ; PUSH nat 0 ; COMPARE ; EQ } ; IF {} { PUSH string "UnsafeAllowanceChange" ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP ; SENDER ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 97 ; FAILWITH } {} ; DUP ; CAR ; DUP 11 ; CDR ; SOME ; DIG 11 ; CAR ; UPDATE ; UPDATE 1 ; SOME ; SWAP ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR } { DROP ; SENDER ; SELF_ADDRESS ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; DUP ; GET 3 ; GET 3 ; CAR ; GET 3 ; PUSH nat 0 ; COMPARE ; LT ; IF { DUP ; GET 3 ; GET 3 ; CAR ; GET 3 ; PUSH nat 1000000000000 ; DUP 3 ; GET 3 ; GET 3 ; CAR ; GET 4 ; MUL ; EDIV ; IF_NONE { PUSH int 627 ; FAILWITH } { CAR } ; SWAP ; DUP ; DUG 2 ; CAR ; GET 5 ; CAR ; SWAP ; DUP ; DUG 2 ; COMPARE ; GT ; IF { SWAP ; DUP ; DUG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CDR ; PUSH nat 1000000000000 ; DUP 8 ; CAR ; GET 3 ; GET 3 ; NOW ; SUB ; ISNAT ; IF_NONE { PUSH int 631 ; FAILWITH } {} ; DUP 9 ; CAR ; GET 5 ; CDR ; MUL ; PUSH nat 1000000000000 ; ADD ; DIG 8 ; CAR ; GET 5 ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 631 ; FAILWITH } { CAR } ; DIG 6 ; DUP ; DUP 3 ; COMPARE ; LE ; IF { DROP } { SWAP ; DROP } ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR } { SWAP ; DUP ; DUG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CDR ; PUSH nat 1000000000000 ; DUP 8 ; CAR ; GET 3 ; GET 3 ; NOW ; SUB ; ISNAT ; IF_NONE { PUSH int 637 ; FAILWITH } {} ; DUP 9 ; CAR ; GET 5 ; CDR ; MUL ; PUSH nat 1000000000000 ; SUB ; PUSH int 1 ; DUP ; DUP 3 ; COMPARE ; LE ; IF { SWAP ; DROP } { DROP } ; ISNAT ; IF_NONE { PUSH int 636 ; FAILWITH } {} ; DIG 8 ; CAR ; GET 5 ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 636 ; FAILWITH } { CAR } ; DIG 6 ; DUP ; DUP 3 ; COMPARE ; LE ; IF { SWAP ; DROP } { DROP } ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR } } {} ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; CDR ; NOW ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR } ; NIL operation } { IF_LEFT { DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; NIL operation } { NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { DIG 3 ; DROP ; DIG 3 ; DROP ; NIL operation ; DIG 3 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; SWAP ; DUP ; DUG 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ; DUP 3 ; CAR ; GET 9 ; SENDER ; MEM ; IF {} { DIG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ; SENDER ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 2 } ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CDR ; PUSH nat 1000000000000 ; DUP ; DUP 5 ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 662 ; FAILWITH } { CAR } ; DIG 3 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP ; SENDER ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 663 ; FAILWITH } {} ; DUP ; CDR ; DUP 11 ; ADD ; UPDATE 2 ; SOME ; SWAP ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; DIG 6 ; ADD ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUP ; DUG 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH string "cant call transfer for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; SELF_ADDRESS ; SENDER ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; DIG 2 ; DUP ; GET 11 ; DIG 3 ; ADD ; UPDATE 11 ; SWAP } } } { IF_LEFT { IF_LEFT { DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DUP ; CAR ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CAR ; PUSH bool False ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; NIL operation } { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; GET 5 ; IF {} { PUSH string "flashloan is not available" ; FAILWITH } ; DUP ; CDR ; PUSH nat 0 ; COMPARE ; LT ; IF {} { PUSH string "zero requested shares" ; FAILWITH } ; NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { DIG 3 ; DROP ; DIG 3 ; DROP ; NIL operation ; DIG 3 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; SWAP ; DUP ; DUG 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ; PUSH nat 100000 ; DIG 3 ; DUP ; CAR ; CAR ; GET 7 ; SWAP ; DUP ; DUG 5 ; CAR ; CAR ; GET 3 ; CDR ; ADD ; DUP 4 ; CDR ; MUL ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; DIG 3 ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP 8 ; DUP 11 ; CDR ; ADD ; ADD ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; DUP ; GET 11 ; DIG 2 ; ADD ; UPDATE 11 ; DUG 2 ; PUSH nat 0 ; DUP 4 ; GET 7 ; CAR ; COMPARE ; GT ; IF { DUP 3 ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; PUSH nat 100000 ; DUP 10 ; GET 7 ; CAR ; PUSH nat 1000000000000 ; DUP ; DUP 12 ; CDR ; MUL ; DIG 12 ; CAR ; CAR ; GET 7 ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 1264 ; FAILWITH } { CAR } ; EDIV ; IF_NONE { PUSH int 1264 ; FAILWITH } { CAR } ; ADD ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; PAIR ; DUG 2 } {} ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH string "cant call transfer for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; CDR ; SENDER ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; SWAP ; CAR ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS ; SELF %flashloanFinalize ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } } { DIG 3 ; DROP ; DIG 3 ; DROP ; IF_LEFT { DROP ; SWAP ; DROP ; DUP ; CAR ; CAR ; GET 8 ; PUSH nat 0 ; COMPARE ; EQ ; IF {} { PUSH string "loan error" ; FAILWITH } ; NIL operation } { IF_LEFT { NIL operation ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH string "cant call transfer for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; SELF_ADDRESS ; SENDER ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; SWAP ; DUP ; DUG 2 ; DUP 4 ; CAR ; CAR ; GET 8 ; SUB ; ISNAT ; DUP ; IF_NONE { DROP ; SWAP ; DROP ; DIG 2 ; DROP ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CAR ; PUSH nat 0 ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP } { DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 2 ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CAR ; DIG 6 ; IF_NONE { PUSH int 1287 ; FAILWITH } {} ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP } } { DIG 2 ; DROP ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; CAR ; CAR ; NIL operation ; DIG 2 ; CDR ; PUSH mutez 0 ; DIG 3 ; TRANSFER_TOKENS ; CONS } } } } } { IF_LEFT { IF_LEFT { DIG 3 ; DROP ; DIG 3 ; DROP ; IF_LEFT { DIG 2 ; DROP ; SWAP ; DUP ; DUG 2 ; CAR ; GET 9 ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; MEM ; IF { SWAP ; DUP ; DUG 2 ; CAR ; GET 9 ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; GET ; IF_NONE { PUSH int 113 ; FAILWITH } {} ; CAR ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; GET ; IF_NONE { PUSH nat 0 } {} } { PUSH nat 0 } ; NIL operation ; DIG 2 ; CDR ; PUSH mutez 0 ; DIG 3 ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DROP ; SWAP ; DUP ; DUG 2 ; CAR ; GET 9 ; SWAP ; DUP ; DUG 2 ; CAR ; MEM ; IF { SWAP ; DUP ; DUG 2 ; CAR ; GET 9 ; SWAP ; DUP ; DUG 2 ; CAR ; GET ; IF_NONE { PUSH int 106 ; FAILWITH } {} ; CDR } { PUSH nat 0 } ; NIL operation ; DIG 2 ; CDR ; PUSH mutez 0 ; DIG 3 ; TRANSFER_TOKENS ; CONS } } { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; SWAP ; DUP ; DUG 2 ; GET 7 ; CAR ; NIL operation ; DIG 2 ; CDR ; PUSH mutez 0 ; DIG 3 ; TRANSFER_TOKENS ; CONS } { IF_LEFT { NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { NIL operation ; DUP 4 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; DIG 5 ; DIG 5 ; DIG 5 ; DIG 4 ; DIG 5 ; DIG 5 ; DUP 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { NIL operation } ; PUSH mutez 0 ; AMOUNT ; PUSH nat 2 ; DUP 5 ; GET 9 ; MUL ; SUB_MUTEZ ; DUP ; IF_NONE {} { DROP ; SWAP ; DROP ; DUP 4 ; GET 12 ; PUSH nat 100000 ; SUB ; ISNAT ; IF_NONE { PUSH int 736 ; FAILWITH } {} ; DUP 5 ; GET 12 ; DUP 3 ; IF_NONE { PUSH int 734 ; FAILWITH } {} ; MUL ; EDIV ; IF_NONE { PUSH int 733 ; FAILWITH } {} ; CAR ; SWAP } ; PUSH mutez 0 ; DUP 3 ; COMPARE ; GT ; IF { DIG 2 ; DUP 5 ; CAR ; CAR ; CAR ; CAR ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 739 ; FAILWITH } {} ; DUP 4 ; UNIT ; TRANSFER_TOKENS ; CONS ; DUG 2 } {} ; SWAP ; DUP ; DUG 2 ; DIG 4 ; DUP ; GET 9 ; SWAP ; DUP ; DUG 6 ; CAR ; ADD ; ADD ; AMOUNT ; COMPARE ; LE ; IF {} { PUSH string "sent amount error" ; FAILWITH } ; PUSH int 1 ; NOW ; ADD ; PUSH mutez 0 ; DUP 6 ; CAR ; COMPARE ; GT ; IF { DIG 3 ; DUP 6 ; CAR ; CAR ; CAR ; GET 3 ; CONTRACT %xtzToToken (pair (address %to) (pair (nat %minTokensBought) (timestamp %deadline))) ; IF_NONE { PUSH string "cant call xtzToToken" ; FAILWITH } {} ; DUP 6 ; CAR ; DUP 4 ; DUP 8 ; GET 3 ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; DUG 3 } { PUSH nat 0 ; DUP 6 ; GET 5 ; COMPARE ; GT ; IF { DUP 8 ; DIG 5 ; DUP ; GET 5 ; SWAP ; DUP ; DUG 7 ; GET 7 ; PAIR ; SWAP ; DIG 7 ; DIG 6 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; DIG 8 ; DIG 8 ; DIG 8 ; DIG 4 ; DIG 8 ; DIG 5 ; DIG 8 ; DIG 8 ; DIG 8 } {} } ; DIG 3 ; DUP 6 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %approve (pair (address %spender) (nat %value)) ; IF_NONE { PUSH string "cant call approve for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; PUSH nat 1000000000000000000 ; DUP 9 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP ; DUG 4 ; DUP 7 ; GET 3 ; CAR ; GET 3 ; CONTRACT %addLiquidity (pair (address %owner) (pair (nat %minLqtMinted) (pair (nat %maxTokensDeposited) (timestamp %deadline)))) ; IF_NONE { PUSH string "cant call addLiquidity" ; FAILWITH } {} ; DUP 7 ; GET 9 ; DUP 4 ; PUSH nat 1000000000000000000 ; DUP 10 ; GET 10 ; SELF_ADDRESS ; PAIR 4 ; DIG 7 ; DROP ; TRANSFER_TOKENS ; CONS ; DUP 6 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %approve (pair (address %spender) (nat %value)) ; IF_NONE { PUSH string "cant call approve for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; PUSH nat 0 ; DUP 9 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %sellXtz ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS ; DUG 3 ; DIG 5 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; CDR ; PUSH bool True ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 5 ; DIG 3 ; DUP 6 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for LB shares" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLBCallback ; SELF_ADDRESS ; PAIR ; TRANSFER_TOKENS ; CONS ; DUG 3 ; DIG 5 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; CAR ; PUSH bool True ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 5 ; DIG 3 ; DUP 6 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzBTCCallback ; SELF_ADDRESS ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP ; DUG 4 ; SELF %investLBFinalize ; PUSH mutez 0 ; DUP 8 ; GET 5 ; DIG 9 ; DUP ; GET 11 ; SWAP ; DUP ; DUG 11 ; CAR ; GET 7 ; SENDER ; PAIR 4 ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; SENDER ; SELF_ADDRESS ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 11 ; SWAP ; DUP ; DUG 2 ; GET 5 ; SUB ; ISNAT ; IF_NONE { PUSH string "negative tzBTC delta error" ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; GET 3 ; DUP 4 ; CAR ; GET 7 ; SUB ; ISNAT ; IF_NONE { PUSH string "negative lb delta error" ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; PUSH nat 20 ; DUP 6 ; GET 3 ; GET 3 ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH int 820 ; FAILWITH } {} ; MUL ; DUP 4 ; GET 6 ; PUSH nat 10 ; DUP 7 ; GET 3 ; GET 3 ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH int 820 ; FAILWITH } {} ; PUSH nat 2 ; MUL ; MUL ; COMPARE ; LE ; IF {} { PUSH string "leverage error" ; FAILWITH } ; DUP 4 ; GET 3 ; CAR ; GET 4 ; DUP 4 ; CAR ; MEM ; IF {} { DIG 3 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; PUSH nat 0 ; DUP ; DUP ; PAIR 3 ; SOME ; DUP 10 ; CAR ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 3 } ; PUSH nat 1000000000000 ; DUP ; DIG 3 ; MUL ; MUL ; DUP 4 ; GET 3 ; GET 7 ; SWAP ; DUP ; DUG 2 ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; DIG 4 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP ; DUP 11 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 834 ; FAILWITH } {} ; DUP ; GET 4 ; DUP 10 ; ADD ; UPDATE 4 ; SOME ; SWAP ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUP ; GET 9 ; DIG 2 ; ADD ; UPDATE 9 ; DUP ; DUG 4 ; CAR ; GET 3 ; CAR ; CAR ; SWAP ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; DIG 3 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP ; DUP 10 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 838 ; FAILWITH } {} ; DUP ; CAR ; DUP 10 ; ADD ; UPDATE 1 ; SOME ; SWAP ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DIG 6 ; ADD ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP ; DIG 8 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 841 ; FAILWITH } {} ; DUP ; GET 3 ; DIG 9 ; ADD ; UPDATE 3 ; SOME ; SWAP ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; UNIT ; SWAP ; DUG 2 ; PAIR ; EXEC ; CDR ; NIL operation } } } } { IF_LEFT { IF_LEFT { NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { DIG 3 ; DROP ; DIG 3 ; DROP ; NIL operation ; DIG 3 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; SWAP ; DUP ; DUG 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ; DUP 3 ; GET 3 ; CAR ; GET 4 ; DUP 3 ; CAR ; MEM ; IF {} { PUSH string "Unknown Address." ; FAILWITH } ; PUSH nat 0 ; DUP 4 ; GET 3 ; CAR ; GET 4 ; DUP 4 ; CAR ; GET ; IF_NONE { PUSH int 1061 ; FAILWITH } {} ; GET 4 ; COMPARE ; GT ; IF {} { PUSH string "not loaned" ; FAILWITH } ; SELF %liquidateLBFinalize ; PUSH mutez 0 ; DUP 4 ; CDR ; SENDER ; DIG 5 ; CAR ; PAIR 3 ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; SENDER ; SELF_ADDRESS ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 3 ; CAR ; GET 4 ; SWAP ; DUP ; DUG 2 ; CAR ; GET ; IF_NONE { PUSH int 1095 ; FAILWITH } {} ; GET 3 ; PUSH nat 1000000000000 ; DUP ; DIG 4 ; DUP ; CAR ; GET 3 ; CAR ; CAR ; SWAP ; DUP ; DUG 6 ; GET 3 ; CAR ; GET 4 ; DUP 6 ; CAR ; GET ; IF_NONE { PUSH int 1100 ; FAILWITH } {} ; CAR ; MUL ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; DUP 4 ; GET 3 ; CAR ; CAR ; CAR ; SWAP ; DUP ; DUG 2 ; DUP 6 ; GET 5 ; GET 3 ; PUSH string "BTC" ; VIEW "get_price" nat ; IF_NONE { PUSH string "invalid view" ; FAILWITH } {} ; MUL ; MUL ; PUSH nat 100 ; PUSH nat 1000000000000 ; DUP 7 ; GET 5 ; GET 3 ; PUSH string "BTC" ; VIEW "get_price" nat ; IF_NONE { PUSH string "invalid view" ; FAILWITH } {} ; DUP 8 ; CAR ; GET 5 ; CAR ; PUSH nat 2 ; DUP 8 ; MUL ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 1098 ; FAILWITH } { CAR } ; MUL ; COMPARE ; LT ; IF {} { PUSH string "liquidation is not allowed" ; FAILWITH } ; DUP 4 ; GET 3 ; CAR ; GET 4 ; DUP 4 ; CAR ; GET ; IF_NONE { PUSH int 1111 ; FAILWITH } {} ; CAR ; DUP 5 ; CAR ; GET 3 ; CAR ; CAR ; PUSH nat 1000000000000 ; DUP ; DUP 5 ; DUP 9 ; GET 3 ; CAR ; CAR ; CDR ; PUSH nat 100 ; DUP 10 ; GET 4 ; MUL ; EDIV ; IF_NONE { PUSH int 1106 ; FAILWITH } { CAR } ; DUP ; DUP 3 ; COMPARE ; LE ; IF { DROP } { SWAP ; DROP } ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 1110 ; FAILWITH } { CAR } ; DUP ; DUP 3 ; COMPARE ; LE ; IF { DROP } { SWAP ; DROP } ; DUP 5 ; GET 3 ; CAR ; GET 4 ; DUP 5 ; CAR ; GET ; IF_NONE { PUSH int 1114 ; FAILWITH } {} ; CAR ; SWAP ; DUP ; DUG 2 ; DUP 7 ; GET 3 ; CAR ; GET 4 ; DUP 7 ; CAR ; GET ; IF_NONE { PUSH int 1114 ; FAILWITH } {} ; GET 4 ; MUL ; EDIV ; IF_NONE { PUSH int 1114 ; FAILWITH } { CAR } ; DUP 6 ; GET 3 ; CAR ; GET 4 ; DUP 6 ; CAR ; GET ; IF_NONE { PUSH int 1116 ; FAILWITH } {} ; CAR ; DUP 3 ; DUP 6 ; MUL ; EDIV ; IF_NONE { PUSH int 1116 ; FAILWITH } { CAR } ; DUP 7 ; DUP 3 ; DIG 8 ; GET 9 ; SUB ; ISNAT ; IF_NONE { PUSH int 1118 ; FAILWITH } {} ; UPDATE 9 ; DUP ; DUG 7 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CAR ; DUP 8 ; DIG 12 ; GET 7 ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH int 1119 ; FAILWITH } {} ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUP ; DUG 7 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP ; DUP 13 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 1120 ; FAILWITH } {} ; DIG 10 ; DIG 14 ; GET 3 ; CAR ; GET 4 ; DUP 15 ; CAR ; GET ; IF_NONE { PUSH int 1121 ; FAILWITH } {} ; CAR ; SUB ; ISNAT ; IF_NONE { PUSH string "wrong liquidated gross credit" ; FAILWITH } {} ; UPDATE 1 ; SOME ; SWAP ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUP ; DUG 6 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP ; DUP 12 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 1124 ; FAILWITH } {} ; DIG 9 ; DIG 13 ; GET 3 ; CAR ; GET 4 ; DUP 14 ; CAR ; GET ; IF_NONE { PUSH int 1125 ; FAILWITH } {} ; GET 4 ; SUB ; ISNAT ; IF_NONE { PUSH string "wrong liquidated net credit" ; FAILWITH } {} ; UPDATE 4 ; SOME ; SWAP ; UPDATE ; DUP ; DUP 11 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 1128 ; FAILWITH } {} ; DUP 9 ; DIG 11 ; SUB ; ISNAT ; IF_NONE { PUSH string "wrong liquidated shares" ; FAILWITH } {} ; UPDATE 3 ; SOME ; SWAP ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 3 ; NIL operation ; DUP 5 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH string "cant call transfer for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 6 ; GET 4 ; SELF_ADDRESS ; DUP 8 ; GET 3 ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; DIG 2 ; DUP 5 ; GET 3 ; CAR ; CAR ; CDR ; PUSH nat 100 ; DUP 6 ; GET 4 ; MUL ; EDIV ; IF_NONE { PUSH int 1106 ; FAILWITH } { CAR } ; DUP ; DUP 3 ; COMPARE ; LE ; IF { DROP } { SWAP ; DROP } ; DUP 4 ; GET 4 ; SUB ; ISNAT ; IF_NONE { PUSH string "wrong liquidation_price_percent" ; FAILWITH } {} ; PUSH nat 100 ; DUP 6 ; CAR ; GET 10 ; DUP 3 ; MUL ; EDIV ; IF_NONE { PUSH int 1136 ; FAILWITH } { CAR } ; DUP ; PUSH nat 0 ; COMPARE ; LT ; IF { DIG 2 ; DUP 6 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH string "cant call transfer for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; DUP 9 ; CAR ; CAR ; CAR ; CAR ; CAR ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; DUG 2 } {} ; DUP 6 ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; DIG 11 ; GET 7 ; CAR ; PUSH nat 1000000000000 ; DUP ; DUP 10 ; DIG 11 ; SUB ; ISNAT ; IF_NONE { PUSH string "admin commission error" ; FAILWITH } {} ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 1143 ; FAILWITH } { CAR } ; ADD ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; PAIR ; DUG 4 ; SWAP ; DUP 5 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH string "cant call transfer for LB shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 5 ; DUP 7 ; GET 3 ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; SWAP ; DUP 5 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CDR ; DIG 7 ; DIG 9 ; CAR ; GET 7 ; SUB ; ISNAT ; IF_NONE { PUSH int 1148 ; FAILWITH } {} ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUP ; DUG 4 ; SWAP ; DIG 3 ; GET 4 ; DIG 4 ; GET 11 ; ADD ; SUB ; ISNAT ; IF_NONE { PUSH int 1149 ; FAILWITH } {} ; UPDATE 11 ; SWAP } } { IF_LEFT { SENDER ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 3 ; GET 8 ; IF {} { PUSH string "Onchain liquidation disabled." ; FAILWITH } ; NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { NIL operation ; DUP 4 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; DIG 5 ; DIG 5 ; DIG 5 ; DIG 4 ; DIG 5 ; DIG 5 ; DUP 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { NIL operation } ; DUP 3 ; GET 3 ; CAR ; GET 4 ; DUP 3 ; MEM ; IF {} { PUSH string "Unknown Address." ; FAILWITH } ; PUSH nat 0 ; DUP 4 ; GET 3 ; CAR ; GET 4 ; DUP 4 ; GET ; IF_NONE { PUSH int 1161 ; FAILWITH } {} ; GET 4 ; COMPARE ; GT ; IF {} { PUSH string "not loaned" ; FAILWITH } ; DUP 3 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CDR ; DUP 8 ; GET 3 ; CAR ; GET 4 ; DUP 8 ; GET ; IF_NONE { PUSH int 1164 ; FAILWITH } {} ; GET 3 ; DIG 8 ; CAR ; GET 7 ; SUB ; ISNAT ; IF_NONE { PUSH int 956 ; FAILWITH } {} ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUP ; DUG 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %approve (pair (address %spender) (nat %value)) ; IF_NONE { PUSH string "cant call approve for LB shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 5 ; GET 3 ; CAR ; GET 4 ; DUP 5 ; GET ; IF_NONE { PUSH int 1164 ; FAILWITH } {} ; GET 3 ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP ; DUP 4 ; GET 3 ; CAR ; GET 3 ; CONTRACT %removeLiquidity (pair (address %to) (pair (nat %lqtBurned) (pair (mutez %minXtzWithdrawn) (pair (nat %minTokensWithdrawn) (timestamp %deadline))))) ; IF_NONE { PUSH string "cant call removeLiquidity" ; FAILWITH } {} ; PUSH mutez 0 ; PUSH int 1 ; NOW ; ADD ; PUSH nat 0 ; PUSH mutez 0 ; DUP 9 ; GET 3 ; CAR ; GET 4 ; DUP 9 ; GET ; IF_NONE { PUSH int 1164 ; FAILWITH } {} ; GET 3 ; SELF_ADDRESS ; PAIR 5 ; DIG 4 ; DROP ; DIG 6 ; DROP ; DIG 6 ; DROP ; DIG 6 ; DROP ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %approve (pair (address %spender) (nat %value)) ; IF_NONE { PUSH string "cant call approve for LB shares" ; FAILWITH } {} ; PUSH mutez 0 ; PUSH nat 0 ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %sellXtz ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS ; DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; CAR ; PUSH bool True ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; DUP ; DUG 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzBTCCallback ; SELF_ADDRESS ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %liquidateOnchainLBFinalize ; PUSH mutez 0 ; DUP 5 ; GET 11 ; DIG 4 ; PAIR ; TRANSFER_TOKENS ; CONS } { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; SENDER ; SELF_ADDRESS ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; DUP ; CDR ; DUP 3 ; GET 11 ; SUB ; ISNAT ; IF_NONE { PUSH string "negative tzBTC shares delta error" ; FAILWITH } {} ; PUSH nat 1000000000000 ; DUP ; DIG 4 ; DUP ; CAR ; GET 3 ; CAR ; CAR ; SWAP ; DUP ; DUG 6 ; GET 3 ; CAR ; GET 4 ; DUP 6 ; CAR ; GET ; IF_NONE { PUSH int 1009 ; FAILWITH } {} ; CAR ; MUL ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; DIG 3 ; DUP ; DUP ; DUG 5 ; GET 3 ; CAR ; GET 4 ; DUP 5 ; CAR ; GET ; IF_NONE { PUSH int 1011 ; FAILWITH } {} ; GET 4 ; DIG 5 ; GET 9 ; SUB ; ISNAT ; IF_NONE { PUSH int 1011 ; FAILWITH } {} ; UPDATE 9 ; DUP ; DUG 4 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CAR ; DUP 9 ; GET 3 ; CAR ; GET 4 ; DUP 9 ; CAR ; GET ; IF_NONE { PUSH int 1012 ; FAILWITH } {} ; CAR ; DIG 9 ; GET 7 ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH int 1012 ; FAILWITH } {} ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP ; DUP 10 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 1014 ; FAILWITH } {} ; PUSH nat 0 ; UPDATE 3 ; SOME ; SWAP ; UPDATE ; DUP ; DUP 10 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 1015 ; FAILWITH } {} ; PUSH nat 0 ; UPDATE 4 ; SOME ; SWAP ; UPDATE ; DUP ; DIG 9 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 1016 ; FAILWITH } {} ; PUSH nat 0 ; UPDATE 1 ; SOME ; SWAP ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 2 ; DUP ; DUP 4 ; GET 5 ; CAR ; CDR ; MUL ; DUP 3 ; PUSH nat 100 ; MUL ; COMPARE ; LT ; IF {} { PUSH string "liquidation is not allowed" ; FAILWITH } ; PUSH nat 1000000000000 ; SWAP ; MUL ; PUSH nat 1000000000000 ; DIG 2 ; MUL ; SUB ; DUP ; PUSH int 0 ; COMPARE ; LT ; IF { PUSH nat 1000000000000 ; PUSH nat 100 ; DUP 4 ; GET 5 ; CAR ; CAR ; DUP 4 ; ISNAT ; IF_NONE { PUSH int 1203 ; FAILWITH } {} ; MUL ; EDIV ; IF_NONE { PUSH int 1203 ; FAILWITH } { CAR } ; EDIV ; IF_NONE { PUSH int 35 ; FAILWITH } { CAR } ; DUP ; PUSH nat 0 ; COMPARE ; LT ; IF { NIL operation ; DUP 4 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH string "cant call transfer for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; DUP 7 ; CAR ; CAR ; CAR ; CAR ; CAR ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; DUP 4 ; DUP 3 ; DIG 5 ; GET 11 ; SUB ; ISNAT ; IF_NONE { PUSH int 1206 ; FAILWITH } {} ; UPDATE 11 ; DUG 3 } { NIL operation } ; DUP 4 ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; DIG 9 ; GET 7 ; CAR ; PUSH nat 1000000000000 ; DUP ; DIG 10 ; MUL ; DIG 10 ; ISNAT ; IF_NONE { PUSH int 1207 ; FAILWITH } {} ; SUB ; ISNAT ; IF_NONE { PUSH int 1207 ; FAILWITH } {} ; MUL ; EDIV ; IF_NONE { PUSH int 1207 ; FAILWITH } { CAR } ; ADD ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP } { SWAP ; DUP ; DUG 2 ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; CAR ; DUP 7 ; GET 7 ; CAR ; PUSH nat 1000000000000 ; DIG 7 ; NEG ; ISNAT ; IF_NONE { PUSH int 1212 ; FAILWITH } {} ; MUL ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; DIG 6 ; CAR ; CAR ; CAR ; CAR ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH int 1212 ; FAILWITH } {} ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; PAIR ; NIL operation } } { NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { NIL operation ; DUP 4 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; DIG 5 ; DIG 5 ; DIG 5 ; DIG 4 ; DIG 5 ; DIG 5 ; DUP 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { NIL operation } ; DUP 3 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CDR ; DUP 7 ; CAR ; DIG 8 ; CAR ; GET 7 ; SUB ; ISNAT ; IF_NONE { PUSH int 956 ; FAILWITH } {} ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUP ; DUG 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %approve (pair (address %spender) (nat %value)) ; IF_NONE { PUSH string "cant call approve for LB shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; CAR ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP ; DUP 4 ; GET 3 ; CAR ; GET 3 ; CONTRACT %removeLiquidity (pair (address %to) (pair (nat %lqtBurned) (pair (mutez %minXtzWithdrawn) (pair (nat %minTokensWithdrawn) (timestamp %deadline))))) ; IF_NONE { PUSH string "cant call removeLiquidity" ; FAILWITH } {} ; PUSH mutez 0 ; PUSH int 1 ; NOW ; ADD ; DUP 6 ; GET 3 ; PUSH mutez 0 ; DUP 8 ; CAR ; SELF_ADDRESS ; PAIR 5 ; DIG 4 ; DROP ; DIG 6 ; DROP ; DIG 6 ; DROP ; DIG 6 ; DROP ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %approve (pair (address %spender) (nat %value)) ; IF_NONE { PUSH string "cant call approve for LB shares" ; FAILWITH } {} ; PUSH mutez 0 ; PUSH nat 0 ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; PUSH mutez 0 ; DUP 3 ; GET 4 ; COMPARE ; GT ; IF { DUP 3 ; CAR ; CAR ; CAR ; GET 3 ; CONTRACT %xtzToToken (pair (address %to) (pair (nat %minTokensBought) (timestamp %deadline))) ; IF_NONE { PUSH string "cant call xtzToToken" ; FAILWITH } {} ; DUP 3 ; GET 4 ; PUSH int 1 ; NOW ; ADD ; PUSH nat 0 ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS } {} ; DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; CAR ; PUSH bool True ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; DUP ; DUG 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzBTCCallback ; SELF_ADDRESS ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %redeemLBFinalize ; PUSH mutez 0 ; DUP 5 ; GET 11 ; DIG 4 ; CAR ; SENDER ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; SELF_ADDRESS ; CONTRACT %sendBalance address ; IF_NONE { PUSH string "cant make selfcall sendBalance" ; FAILWITH } {} ; PUSH mutez 0 ; SENDER ; TRANSFER_TOKENS ; CONS } } } } } } { IF_LEFT { IF_LEFT { IF_LEFT { IF_LEFT { SENDER ; SELF_ADDRESS ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 3 ; CAR ; GET 4 ; SWAP ; DUP ; DUG 2 ; CAR ; GET ; IF_NONE { PUSH int 1024 ; FAILWITH } {} ; GET 3 ; DUP ; PUSH nat 1000000000000 ; SWAP ; PUSH nat 1000000000000 ; MUL ; DUP 4 ; GET 3 ; DIG 5 ; DUP ; CAR ; GET 3 ; CAR ; CAR ; SWAP ; DUP ; DUG 7 ; GET 3 ; CAR ; GET 4 ; DUP 7 ; CAR ; GET ; IF_NONE { PUSH int 1027 ; FAILWITH } {} ; CAR ; MUL ; MUL ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; SWAP ; DUP ; DUG 2 ; DUP 4 ; GET 3 ; DUP 6 ; GET 3 ; CAR ; GET 4 ; DUP 6 ; CAR ; GET ; IF_NONE { PUSH int 1030 ; FAILWITH } {} ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 1030 ; FAILWITH } { CAR } ; DUP 5 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CAR ; DUP 6 ; DIG 10 ; GET 7 ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH int 1031 ; FAILWITH } {} ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUP ; DUG 5 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP ; DUP 11 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 1032 ; FAILWITH } {} ; DUP 9 ; DIG 13 ; GET 3 ; CAR ; GET 4 ; DUP 14 ; CAR ; GET ; IF_NONE { PUSH int 1033 ; FAILWITH } {} ; CAR ; SUB ; ISNAT ; IF_NONE { PUSH string "wrong liquidated gross credit" ; FAILWITH } {} ; UPDATE 1 ; SOME ; SWAP ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 4 ; DUP 3 ; DUP 5 ; GET 3 ; DUP 7 ; GET 3 ; CAR ; GET 4 ; DUP 7 ; CAR ; GET ; IF_NONE { PUSH int 1037 ; FAILWITH } {} ; GET 4 ; MUL ; EDIV ; IF_NONE { PUSH int 1037 ; FAILWITH } { CAR } ; DUP 6 ; SWAP ; DUP ; DUG 2 ; DIG 7 ; GET 9 ; SUB ; ISNAT ; IF_NONE { PUSH int 1038 ; FAILWITH } {} ; UPDATE 9 ; DUP ; DUG 6 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP ; DUP 12 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 1039 ; FAILWITH } {} ; DUP 9 ; DIG 14 ; GET 3 ; CAR ; GET 4 ; DUP 15 ; CAR ; GET ; IF_NONE { PUSH int 1040 ; FAILWITH } {} ; GET 4 ; SUB ; ISNAT ; IF_NONE { PUSH string "wrong liquidated net credit" ; FAILWITH } {} ; UPDATE 4 ; SOME ; SWAP ; UPDATE ; DUP ; DUP 12 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 1044 ; FAILWITH } {} ; DUP 13 ; GET 3 ; DUP 13 ; SUB ; ISNAT ; IF_NONE { PUSH string "wrong liquidated shares" ; FAILWITH } {} ; UPDATE 3 ; SOME ; SWAP ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 5 ; DUP 3 ; DUP 6 ; GET 4 ; DUP 8 ; GET 11 ; SUB ; ISNAT ; IF_NONE { PUSH string "negative tzBTC delta error" ; FAILWITH } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "not enough collateral" ; FAILWITH } {} ; DUP ; PUSH nat 0 ; COMPARE ; LT ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; NIL operation ; DIG 3 ; DUP 3 ; PUSH mutez 0 ; PAIR ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; SWAP ; DUP ; DUG 3 ; DIG 2 ; DIG 3 ; GET 11 ; SUB ; ISNAT ; IF_NONE { PUSH int 953 ; FAILWITH } {} ; UPDATE 11 ; SWAP } { DROP 6 ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; NIL operation } } { SWAP ; DUP ; DUG 2 ; CAR ; GET 9 ; SENDER ; MEM ; IF {} { PUSH string "Unknown Address." ; FAILWITH } ; NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { DIG 3 ; DROP ; NIL operation ; DIG 3 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; DIG 3 ; DIG 2 ; DIG 3 ; DIG 3 ; DUP 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CDR ; PUSH nat 1000000000000 ; DUP ; DUP 5 ; MUL ; MUL ; NEG ; EDIV ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CAR ; ABS ; DUP 4 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP ; SENDER ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 682 ; FAILWITH } {} ; DUP 10 ; DIG 13 ; CAR ; GET 9 ; SENDER ; GET ; IF_NONE { PUSH int 683 ; FAILWITH } {} ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH string "too much amount" ; FAILWITH } {} ; UPDATE 2 ; SOME ; SWAP ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUP ; DUG 4 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CDR ; DIG 5 ; DIG 8 ; GET 7 ; CAR ; SUB ; ISNAT ; IF_NONE { PUSH string "wrong total deposit value" ; FAILWITH } {} ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUP ; DUG 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH string "cant call transfer for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; SENDER ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; DUP 3 ; DIG 2 ; DIG 3 ; GET 11 ; SUB ; ISNAT ; IF_NONE { PUSH int 693 ; FAILWITH } {} ; UPDATE 11 ; SWAP ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; SWAP } } { DIG 3 ; DROP ; DIG 3 ; DROP ; IF_LEFT { DROP ; SWAP ; DROP ; SENDER ; SELF_ADDRESS ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; PUSH mutez 0 ; BALANCE ; COMPARE ; GT ; IF { DUP ; CAR ; CAR ; CAR ; GET 3 ; CONTRACT %xtzToToken (pair (address %to) (pair (nat %minTokensBought) (timestamp %deadline))) ; IF_NONE { PUSH string "cant call xtzToToken" ; FAILWITH } {} ; NIL operation ; SWAP ; BALANCE ; PUSH int 1 ; NOW ; ADD ; PUSH nat 0 ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS } { NIL operation } } { IF_LEFT { DIG 2 ; DROP ; SENDER ; SELF_ADDRESS ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; PUSH mutez 0 ; BALANCE ; COMPARE ; GT ; IF { CONTRACT unit ; IF_NONE { PUSH int 876 ; FAILWITH } {} ; NIL operation ; SWAP ; BALANCE ; UNIT ; TRANSFER_TOKENS ; CONS } { DROP ; NIL operation } } { DIG 2 ; DROP ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NotAdmin" ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; CDR ; DIG 5 ; PAIR ; PAIR ; PAIR ; PAIR ; PAIR ; NIL operation } } } } { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; IF_LEFT { SENDER ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; CDR ; DIG 5 ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR } { SENDER ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; CAR ; DUP 6 ; CAR ; SWAP ; PAIR ; SWAP ; GET 4 ; DUP 6 ; GET 3 ; PAIR ; DIG 5 ; GET 4 ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR } ; NIL operation } { IF_LEFT { SENDER ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { DIG 3 ; DROP ; DIG 3 ; DROP ; NIL operation ; DIG 3 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; SWAP ; DUP ; DUG 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ; DIG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; CAR ; DIG 6 ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; IF_LEFT { SENDER ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; DUP ; PUSH nat 277777777 ; SWAP ; COMPARE ; LE ; IF {} { PUSH string "price change rate max value error" ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CAR ; DIG 5 ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR } { SENDER ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; DUP ; CAR ; PUSH nat 20 ; SWAP ; COMPARE ; GE ; IF {} { PUSH string "max_leverage min value error" ; FAILWITH } ; DUP ; CAR ; PUSH nat 100 ; SWAP ; COMPARE ; LE ; IF {} { PUSH string "max_leverage max value error" ; FAILWITH } ; DUP ; GET 3 ; PUSH nat 100 ; COMPARE ; LT ; IF {} { PUSH string "onchain_liquidation_percent min value error" ; FAILWITH } ; DUP ; GET 3 ; PUSH nat 200 ; SWAP ; COMPARE ; LE ; IF {} { PUSH string "onchain_liquidation_percent max value error" ; FAILWITH } ; DUP ; GET 5 ; PUSH nat 100 ; SWAP ; COMPARE ; LE ; IF {} { PUSH string "onchain_liquidation_comm max value error" ; FAILWITH } ; DUP ; GET 7 ; PUSH nat 100 ; COMPARE ; LT ; IF {} { PUSH string "liquidation_percent min value error" ; FAILWITH } ; DUP ; GET 7 ; PUSH nat 200 ; SWAP ; COMPARE ; LE ; IF {} { PUSH string "liquidation_percent max value error" ; FAILWITH } ; DUP ; GET 9 ; PUSH nat 100 ; COMPARE ; LT ; IF {} { PUSH string "liquidation_price_percent min value error" ; FAILWITH } ; DUP ; GET 7 ; SWAP ; DUP ; DUG 2 ; GET 9 ; COMPARE ; LE ; IF {} { PUSH string "liquidation_percent max value error" ; FAILWITH } ; DUP ; GET 11 ; PUSH nat 100 ; SWAP ; COMPARE ; LE ; IF {} { PUSH string "liquidation_comm max value error" ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; CAR ; DUP 6 ; CAR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; UNPAIR ; CDR ; DUP 5 ; GET 3 ; DUP 6 ; GET 5 ; PAIR ; PAIR ; PAIR ; SWAP ; UNPAIR ; CDR ; DUP 5 ; GET 7 ; DUP 6 ; GET 9 ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CAR ; DUP 7 ; GET 11 ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; CDR ; DIG 5 ; GET 12 ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR } ; NIL operation } } } } { IF_LEFT { IF_LEFT { IF_LEFT { SENDER ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { DIG 3 ; DROP ; DIG 3 ; DROP ; NIL operation ; DIG 3 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; SWAP ; DUP ; DUG 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ; PUSH nat 12857 ; DIG 2 ; DUP ; GET 3 ; SWAP ; DUP ; DUG 4 ; CAR ; ADD ; COMPARE ; LE ; IF {} { PUSH string "rate2 max value error" ; FAILWITH } ; PUSH nat 100 ; DUP 3 ; GET 6 ; COMPARE ; LE ; IF {} { PUSH string "wrong threshold percent" ; FAILWITH } ; SWAP ; DUP ; GET 6 ; SWAP ; DUP ; DUG 3 ; GET 5 ; COMPARE ; LE ; IF {} { PUSH string "wrong threshold percent" ; FAILWITH } ; DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CDR ; DUP 9 ; CAR ; DUP 10 ; GET 3 ; SWAP ; PAIR ; PAIR ; DUP 9 ; GET 5 ; UPDATE 3 ; DIG 8 ; GET 6 ; UPDATE 4 ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; SENDER ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; DUP ; PUSH nat 2000 ; SWAP ; COMPARE ; LE ; IF {} { PUSH string "upfront commission max value error" ; FAILWITH } ; UPDATE 12 ; NIL operation } } { DIG 3 ; DROP ; DIG 3 ; DROP ; IF_LEFT { DIG 2 ; DROP ; SWAP ; DUP ; DUG 2 ; CAR ; GET 9 ; SWAP ; DUP ; DUG 2 ; CAR ; MEM ; IF {} { SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ; DUP 9 ; CAR ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } ; SWAP ; DUP ; DUG 2 ; CAR ; GET 9 ; SWAP ; DUP ; DUG 2 ; GET 3 ; MEM ; IF {} { SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ; DUP 9 ; GET 3 ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } ; DUP ; CAR ; SENDER ; COMPARE ; NEQ ; IF { SWAP ; DUP ; DUG 2 ; CAR ; GET 9 ; SWAP ; DUP ; DUG 2 ; CAR ; GET ; IF_NONE { PUSH int 81 ; FAILWITH } {} ; CAR ; SENDER ; MEM ; IF { DUP ; GET 4 ; DUP 3 ; CAR ; GET 9 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 82 ; FAILWITH } {} ; CAR ; SENDER ; GET ; IF_NONE { PUSH int 82 ; FAILWITH } {} ; COMPARE ; GE } { PUSH bool False } ; IF {} { PUSH string "NotEnoughAllowance" ; FAILWITH } } {} ; DUP ; GET 4 ; DUP 3 ; CAR ; GET 9 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 85 ; FAILWITH } {} ; CDR ; COMPARE ; GE ; IF {} { PUSH string "NotEnoughBalance" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP ; DUP 9 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 86 ; FAILWITH } {} ; DUP 10 ; GET 4 ; DIG 11 ; CAR ; GET 9 ; DUP 12 ; CAR ; GET ; IF_NONE { PUSH int 86 ; FAILWITH } {} ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH int 86 ; FAILWITH } {} ; UPDATE 2 ; SOME ; SWAP ; UPDATE ; DUP ; DUP 9 ; GET 3 ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 87 ; FAILWITH } {} ; DUP ; CDR ; DUP 11 ; GET 4 ; ADD ; UPDATE 2 ; SOME ; SWAP ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; DUP ; CAR ; SENDER ; COMPARE ; NEQ ; IF { SWAP ; DUP ; DUG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP ; DUP 9 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 89 ; FAILWITH } {} ; DUP ; CAR ; DUP 11 ; GET 4 ; DIG 12 ; CAR ; GET 9 ; DIG 12 ; CAR ; GET ; IF_NONE { PUSH int 89 ; FAILWITH } {} ; CAR ; SENDER ; GET ; IF_NONE { PUSH int 89 ; FAILWITH } {} ; SUB ; ISNAT ; IF_NONE { PUSH int 89 ; FAILWITH } {} ; SOME ; SENDER ; UPDATE ; UPDATE 1 ; SOME ; SWAP ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR } { DROP } ; NIL operation } { IF_LEFT { DROP ; DUP ; CAR ; GET 3 ; GET 3 ; NOW ; COMPARE ; NEQ ; IF { NIL operation ; DIG 2 ; UNIT ; SWAP ; DUG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 5 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { SWAP ; DROP ; NIL operation } } { DIG 2 ; DROP ; SENDER ; DUP 3 ; CAR ; CAR ; CAR ; GET 4 ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; CAR ; CAR ; CAR ; IF {} { PUSH string "Bad status." ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; CDR ; PUSH bool False ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CDR ; DIG 5 ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; NIL operation } } } } { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; IF_LEFT { SENDER ; DUP 3 ; CAR ; CAR ; CAR ; GET 4 ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; DIG 6 ; UPDATE 3 ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR } { SENDER ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; CAR ; CAR ; CDR ; IF {} { PUSH string "Bad status." ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; CAR ; PUSH bool False ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; UPDATE 11 } ; NIL operation } { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; SENDER ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; DIG 6 ; UPDATE 4 ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; NIL operation } { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NotAdmin" ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP 7 ; CDR ; SOME ; DIG 7 ; CAR ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; NIL operation } { NOW ; DUP 3 ; CAR ; GET 3 ; GET 3 ; COMPARE ; NEQ ; IF { NIL operation ; DUP 4 ; UNIT ; SWAP ; DIG 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; DIG 5 ; DIG 5 ; DIG 5 ; DIG 4 ; DIG 5 ; DIG 5 ; DUP 3 ; CAR ; CAR ; CAR ; GET 4 ; CONTRACT %getTotalSupply (pair (unit %request) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getTotalSupply of lb token" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateLqtTotalCallback ; UNIT ; PAIR ; TRANSFER_TOKENS ; CONS ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %getBalance (pair (address %owner) (contract %callback nat)) ; IF_NONE { PUSH string "cant call getBalance for tzBTC" ; FAILWITH } {} ; PUSH mutez 0 ; SELF %updateTzbtcPoolCallback ; DUP 6 ; GET 3 ; CAR ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS ; SELF %calculateLbPrice ; PUSH mutez 0 ; UNIT ; TRANSFER_TOKENS ; CONS } { NIL operation } ; SENDER ; DUP 4 ; CAR ; CAR ; CAR ; CAR ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "Forbidden." ; FAILWITH } ; DIG 2 ; DUP ; CAR ; CAR ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 4 ; GET 7 ; CAR ; MUL ; DIG 3 ; DUP ; CAR ; GET 3 ; CAR ; CAR ; SWAP ; DUP ; DUG 5 ; GET 7 ; CDR ; MUL ; PUSH nat 1000000000000 ; DUP ; DUP 7 ; GET 11 ; MUL ; MUL ; ADD ; SUB ; DUP ; PUSH int 0 ; COMPARE ; LT ; IF { PUSH nat 1000000000000 ; DUP ; DUP 3 ; ISNAT ; IF_NONE { PUSH int 428 ; FAILWITH } {} ; EDIV ; IF_NONE { PUSH int 428 ; FAILWITH } { CAR } ; EDIV ; IF_NONE { PUSH int 35 ; FAILWITH } { CAR } ; DUP 5 ; GET 11 ; SWAP ; DUP ; DUG 2 ; COMPARE ; GT ; IF { DROP ; DUP 4 ; GET 11 } {} ; DUP ; PUSH nat 0 ; COMPARE ; LT ; IF { SWAP ; DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; SWAP ; DUP 3 ; CAR ; CAR ; GET 3 ; CAR ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH string "cant call transfer for tzBTC shares" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; DUP 6 ; CAR ; CAR ; CAR ; CAR ; CAR ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS ; SWAP ; DUP 3 ; SWAP ; DIG 3 ; GET 11 ; SUB ; ISNAT ; IF_NONE { PUSH int 434 ; FAILWITH } {} ; UPDATE 11 ; SWAP } { DROP 2 ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } } { DROP ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } } } } } } } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR }