tx · FV1N11XkhFBJmABdcotbNmadCyrVvwLXhp5iY33upPf1

3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk:  -0.02100000 Waves

2023.10.10 22:20 [3858805] smart account 3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk > SELF 0.00000000 Waves

{ "type": 13, "id": "FV1N11XkhFBJmABdcotbNmadCyrVvwLXhp5iY33upPf1", "fee": 2100000, "feeAssetId": null, "timestamp": 1696965630121, "version": 1, "sender": "3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk", "senderPublicKey": "46pxd1r6gmScNqdp82uEJMs2AZ1F9q2z1VtXZPFAtHYy", "proofs": [ "2vEFXdpwhJkW7793xPVvcPpyEH1KzN3KHScRwAMpZm9S5rYKXb6hBPiXupGw2MeZ9R39ar9q2ZrHZbVDNkwLM1HJ" ], "script": "base64:BwICCAI1AAVXYXZlcwIFV0FWRVMABlNjYWxlNgDAhD0ABlNjYWxlOACAwtcvAAlTY2FsZThCaWcJALYCAQCAwtcvAAdTY2FsZTEwAIDIr6AlAAdTY2FsZTE2AICAhP6m3uERAApTY2FsZTE2QmlnCQC2AgEAgICE/qbe4REACWRheUJsb2NrcwCgCwAKeWVhckJsb2NrcwCgiiAADXllYXJCbG9ja3NCaWcJALYCAQCgiiAAC3Jlc2VydmVGdW5kABQABWFycjEyCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALBQNuaWwACXVzZHRJZFN0cgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kACXVzZGNJZFN0cgIsSEdnYWJUcVVTOFd0VkZVSnpmbXJURE1nRWNjSnVaTEJQaEZnUUZ4dm5zb1cADW9yYWNsZUFkZHJlc3MJAQdBZGRyZXNzAQEaAVdJZtDL84r1V3qt/CFvccVbiYgr0IGzsX8AC2F4bHlBZGRyZXNzCQEHQWRkcmVzcwEBGgFXz8h13gt2/Imb93uvCUhEZwkqUEc/D0ItAAdheGx5TFBzCQDMCAICLDdLWmJKclZvcHdKaGtkd2JlMWVGREJiZXg0ZGtZNjNNeGpUTmpxWHRyemoxCQDMCAICLEJ0dzNHMWo0d1FnZHA0OVBUeGFGa052bjc1ZFF0cUdETTdlalFwcEhuV0MxCQDMCAICLEJpU3pGZThuU0w3OG9aYWViZm9pbjV2Qlo1UHplNmQ3a2FlaWpMcXI1eFplCQDMCAICLEYyQUtrQTUxM2s1eUhFSmtMc1U2dld4Q1lZazgxMUdwakxod0V2MldHd1o5CQDMCAICLDRDUTVDUEdMWExiV0JVczJKQmpLVWFScUY0OUNtS0hrd3p2UGdTdlFwQVFWCQDMCAICLDZpTUI2TEtTcmd2OXdhRXZFbk42WWR5eDdkZnhQbkdjVHc4MzE4V1ZtNWJSBQNuaWwBDGdldFJhdGVDdXJ2ZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMAkAlgoEAAAAgMLXLwCA6JImAICI3r4BAwkAAAICBVdBVkVTBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCAlfUqAwkAAAICLEF0cXY1OUVZempGR3VpdEtWbk1SazZIOEZ1a2pvVjNrdFBvcmJFeXMyNW9uBQckbWF0Y2gwCQCWCgQAAACA2sQJAIDokiYAgLSJEwMJAAACAixEU2JiaExzU1RlRGc1THNpdWZrMkFuZWgzRGpWcUp1UHIyTTl1VTFnd3k1cAUHJG1hdGNoMAkAlgoEAAAAgNrECQCA6JImAIDC1y8DCQAAAgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEFByRtYXRjaDAJAJYKBAAAAICHpw4AgOiSJgCAtIkTAwkAAAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQckbWF0Y2gwCQCWCgQAAADA8PULAIDokiYAgLSJEwMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw0NzRqVGVZeDJyMlZhMzU3OTR0Q1NjQVhXSkc5aFUySGNneHpNb3dhWlVudQUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw1VVlCUHBxNFdvVTVuNE13cEZrZ0puVzNGcTRCMXUzdWtwSzMzaWs0UWVyUgUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiwydGhzQUN1SG16RE11TmV6UE0zMndnOWEzQndVekJXRGVTS2FrZ3ozY3cyMQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgMLXLwMJAAACAitZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3BQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gwCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMAkAlgoEAAAAgMLXLwCA6JImAICI3r4BCQCWCgQAAACA2sQJAIDokiYAgOiSJgEDc3VtAgRzaXplBGRhdGEKAQRmb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFBHNpemUFBWFjY3VtCQBkAgUFYWNjdW0JAJEDAgUEZGF0YQUEbmV4dAoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwBDmdldFNldHVwVG9rZW5zAQ1tYXJrZXRBZGRyZXNzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCDHNldHVwX3Rva2VucwIBLAENZ2V0VG9rZW5QcmljZQEKYXNzZXRJZFN0cgMDCQAAAgUKYXNzZXRJZFN0cgUJdXNkdElkU3RyBgkAAAIFCmFzc2V0SWRTdHIFCXVzZGNJZFN0cgDAhD0DCQEPY29udGFpbnNFbGVtZW50AgUHYXhseUxQcwUKYXNzZXRJZFN0cgoAAUAJAPwHBAULYXhseUFkZHJlc3MCGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZCQDMCAIFCmFzc2V0SWRTdHIFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQFcHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDW9yYWNsZUFkZHJlc3MJAKwCAgUKYXNzZXRJZFN0cgIHX3R3YXA1QgUFcHJpY2UBDWdldEFzc2V0U2NhbGUBCmFzc2V0SWRTdHIECGRlY2ltYWxzAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTAAgICQEFdmFsdWUBCQDsBwEJANkEAQUKYXNzZXRJZFN0cghkZWNpbWFscwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04BEWdldExhc3RSYXRlSGVpZ2h0AQ1tYXJrZXRBZGRyZXNzCQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MCDmxhc3RSYXRlSGVpZ2h0AAABFmdldE91dGRhdGVkVG90YWxTdXBwbHkCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgAAARZnZXRPdXRkYXRlZFRvdGFsQm9ycm93Ag1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIAAAEQZ2V0T3V0ZGF0ZWRTUmF0ZQINbWFya2V0QWRkcmVzcwphc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlAAABEGdldE91dGRhdGVkQlJhdGUCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQAAAQ1nZXRPdXRkYXRlZFVyBBNvdXRkYXRlZFRvdGFsU3VwcGx5E291dGRhdGVkVG90YWxCb3Jyb3cNb3V0ZGF0ZWRTUmF0ZQ1vdXRkYXRlZEJSYXRlBARkb3duCQBrAwUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUNb3V0ZGF0ZWRTUmF0ZQUHU2NhbGUxNgMJAAACBQRkb3duAAAAAAkAawMFBlNjYWxlOAkAawMFE291dGRhdGVkVG90YWxCb3Jyb3cFDW91dGRhdGVkQlJhdGUFB1NjYWxlMTYFBGRvd24BB2dldFJhdGUCCm91dGRhdGVkVXIKYXNzZXRJZFN0cgQFY3VydmUJAQxnZXRSYXRlQ3VydmUBBQphc3NldElkU3RyCQBkAggFBWN1cnZlAl8xAwkAZwIIBQVjdXJ2ZQJfMwUKb3V0ZGF0ZWRVcgkAawMFCm91dGRhdGVkVXIIBQVjdXJ2ZQJfMggFBWN1cnZlAl8zCQBkAggFBWN1cnZlAl8yCQBrAwkAZQIFCm91dGRhdGVkVXIIBQVjdXJ2ZQJfMwgFBWN1cnZlAl80CQBlAgCAwtcvCAUFY3VydmUCXzMBC2dldEludGVyZXN0AQRyYXRlCQCWAwEJAMwIAgkAawMFBHJhdGUFBlNjYWxlOAUKeWVhckJsb2NrcwkAzAgCAAEFA25pbAENZ2V0QXNzZXRJbmRleAILc2V0dXBUb2tlbnMKYXNzZXRJZFN0cgkBBXZhbHVlAQkAzwgCBQtzZXR1cFRva2VucwUKYXNzZXRJZFN0cgERZ2V0QXNzZXRQYXJhbXRlcnMCEG1hcmtldFBhcmFtZXRlcnMKYXNzZXRJbmRleAkAlQoDCQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl8xBQphc3NldEluZGV4CQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl8yBQphc3NldEluZGV4CQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl8zBQphc3NldEluZGV4ARNnZXRNYXJrZXRQYXJhbWV0ZXJzAg1tYXJrZXRBZGRyZXNzC3NldHVwVG9rZW5zBAdzZXR1cENmCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCnNldHVwX2x0dnMCASwEB3NldHVwTHQJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIJc2V0dXBfbHRzAgEsBAxzZXR1cFBlbmFsdHkJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIPc2V0dXBfcGVuYWx0aWVzAgEsBAp0b2tlbnNTaXplCQCQAwEFC3NldHVwVG9rZW5zCgEEZm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQp0b2tlbnNTaXplBQVhY2N1bQkAlQoDCQDNCAIIBQVhY2N1bQJfMQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwQ2YFBG5leHQJAM0IAggFBWFjY3VtAl8yCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBMdAUEbmV4dAkAzQgCCAUFYWNjdW0CXzMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxzZXR1cFBlbmFsdHkFBG5leHQKAAIkbAUFYXJyMTIKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAQxnZXRNYXhTdXBwbHkCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBDXBhcnNlSW50VmFsdWUBCQELdmFsdWVPckVsc2UCCQCdCAIFDW1hcmtldEFkZHJlc3MJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUKYXNzZXRJZFN0cgIBMAEOZ2V0QWN0dWFsU1JhdGUEDmxhc3RSYXRlSGVpZ2h0CGludGVyZXN0Cm91dGRhdGVkVXINb3V0ZGF0ZWRTUmF0ZQQJbGFzdFNSYXRlCQCWAwEJAMwIAgUNb3V0ZGF0ZWRTUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld1NSYXRlCQBkAgUJbGFzdFNSYXRlCQBpAgkAaAIJAGgCCQBlAgUGaGVpZ2h0BQ5sYXN0UmF0ZUhlaWdodAkAawMFCGludGVyZXN0BQpvdXRkYXRlZFVyBQZTY2FsZTgJAGUCAGQFC3Jlc2VydmVGdW5kAGQFCG5ld1NSYXRlAQ5nZXRBY3R1YWxCUmF0ZQMObGFzdFJhdGVIZWlnaHQIaW50ZXJlc3QNb3V0ZGF0ZWRCUmF0ZQQJbGFzdEJSYXRlCQCWAwEJAMwIAgUNb3V0ZGF0ZWRCUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld0JSYXRlCQBkAgUJbGFzdEJSYXRlCQBoAgkAZQIFBmhlaWdodAUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQhuZXdCUmF0ZQELZ2V0QWN0dWFsVXICDGFjdHVhbFN1cHBseQxhY3R1YWxCb3Jyb3cJAGsDBQxhY3R1YWxCb3Jyb3cFBlNjYWxlOAUMYWN0dWFsU3VwcGx5AQ9nZXRBY3R1YWxBbW91bnQCDm91dGRhdGVkQW1vdW50CmFjdHVhbFJhdGUJAGsDBQ5vdXRkYXRlZEFtb3VudAUKYWN0dWFsUmF0ZQUHU2NhbGUxNgEIZ2V0SW5Vc2QDDGFjdHVhbEFtb3VudAphc3NldFNjYWxlBXByaWNlCQBrAwUMYWN0dWFsQW1vdW50BQVwcmljZQUKYXNzZXRTY2FsZQEMZ2V0U3VwcGx5QXB5AgRyYXRlCGFjdHVhbFVyBApzdXBwbHlSYXRlCQBrAwkAawMFBHJhdGUAUABkBQhhY3R1YWxVcgUGU2NhbGU4CQBlAgkAoAMBCQB2BgkAtwICBQpTY2FsZTE2QmlnCQC8AgMJALYCAQUKc3VwcGx5UmF0ZQUJU2NhbGU4QmlnBQ15ZWFyQmxvY2tzQmlnABAFDXllYXJCbG9ja3NCaWcAAAAIBQRET1dOBQZTY2FsZTgBDGdldEJvcnJvd0FweQEEcmF0ZQkAZQIJAKADAQkAdgYJALcCAgUKU2NhbGUxNkJpZwkAvAIDCQC2AgEFBHJhdGUFCVNjYWxlOEJpZwUNeWVhckJsb2Nrc0JpZwAQBQ15ZWFyQmxvY2tzQmlnAAAACAUERE9XTgUGU2NhbGU4AQ9nZXRXYWxsZXRTdXBwbHkEDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgZ3YWxsZXQLYWN0dWFsU1JhdGUEFG91dGRhdGVkV2FsbGV0U3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgkArAICBQZ3YWxsZXQCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIAAAkBD2dldEFjdHVhbEFtb3VudAIFFG91dGRhdGVkV2FsbGV0U3VwcGx5BQthY3R1YWxTUmF0ZQEPZ2V0V2FsbGV0Qm9ycm93BA1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIGd2FsbGV0C2FjdHVhbEJSYXRlBBRvdXRkYXRlZFdhbGxldEJvcnJvdwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIJAKwCAgUGd2FsbGV0AgpfYm9ycm93ZWRfBQphc3NldElkU3RyAAAJAQ9nZXRBY3R1YWxBbW91bnQCBRRvdXRkYXRlZFdhbGxldEJvcnJvdwULYWN0dWFsQlJhdGUBEGdldERhaWx5UGVyY2VudHMCA2FweQhxdWFudGl0eQkAawMJAGsDCQBlAgkAoAMBCQB2BgkAtwICBQlTY2FsZThCaWcJALYCAQUDYXB5AAgJALoCAgUKU2NhbGUxNkJpZwUNeWVhckJsb2Nrc0JpZwAQABAFBERPV04FB1NjYWxlMTYFCWRheUJsb2NrcwUGU2NhbGU4BQhxdWFudGl0eQUGU2NhbGU4ARBnZXRBY2NvdW50SGVhbHRoAht0b3RhbFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkAwkAAAIFG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAAABQZTY2FsZTgJAGUCBQZTY2FsZTgJAGsDBRt0b3RhbFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QFBlNjYWxlOAUbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkAQlnZXROZXRBcHkDFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QWdG90YWxXYWxsZXRCb3Jyb3dJblVzZBZ0b3RhbFdhbGxldE1hcmdpbkluVXNkAwkAAAIFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QAAAAAAwkAZgIFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QAAAkAawMFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QFBlNjYWxlOAUWdG90YWxXYWxsZXRTdXBwbHlJblVzZAkAawMFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QFBlNjYWxlOAUWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAELYXNzZXRUb0pzb24CCmFzc2V0SWRTdHIIcXVhbnRpdHkECyR0MDkyMjY5NDQxAwkAAAIFCmFzc2V0SWRTdHIFBVdhdmVzCQCUCgIACAIFV0FWRVMEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUKYXNzZXRJZFN0cgkAlAoCCAUFYXNzZXQIZGVjaW1hbHMIBQVhc3NldARuYW1lBAhkZWNpbWFscwgFCyR0MDkyMjY5NDQxAl8xBARuYW1lCAULJHQwOTIyNjk0NDECXzIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx7InF1YW50aXR5IjoJAKQDAQUIcXVhbnRpdHkCDCwiZGVjaW1hbHMiOgkApAMBBQhkZWNpbWFscwIJLCJuYW1lIjoiBQRuYW1lAggiLCJpZCI6IgUKYXNzZXRJZFN0cgICIn0BD2Ftb3VudFRvRGVjaW1hbAIGYW1vdW50CmFzc2V0U2NhbGUEB2ludFBhcnQJAGkCBQZhbW91bnQFCmFzc2V0U2NhbGUECWZsb2F0UGFydAkAagIFBmFtb3VudAUKYXNzZXRTY2FsZQkArAICCQCsAgIJAKQDAQUHaW50UGFydAIBLgkApAMBBQlmbG9hdFBhcnQBDWdldE1hcmtldERhdGEBDW1hcmtldEFkZHJlc3MECW1hcmtldFN0cgkApQgBBQ1tYXJrZXRBZGRyZXNzBAptYXJrZXROYW1lCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICDG1hcmtldF9uYW1lXwUJbWFya2V0U3RyBA9tYXJrZXRTaG9ydE5hbWUJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIRbWFya2V0X3Nob3J0bmFtZV8FCW1hcmtldFN0cgQLc2V0dXBUb2tlbnMJAQ5nZXRTZXR1cFRva2VucwEFDW1hcmtldEFkZHJlc3MEB3NldHVwQ2YJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIKc2V0dXBfbHR2cwIBLAQHc2V0dXBMdAkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAglzZXR1cF9sdHMCASwEDHNldHVwUGVuYWx0eQkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAg9zZXR1cF9wZW5hbHRpZXMCASwEDmxhc3RSYXRlSGVpZ2h0CQERZ2V0TGFzdFJhdGVIZWlnaHQBBQ1tYXJrZXRBZGRyZXNzBAthc3NldHNDb3VudAkAkAMBBQtzZXR1cFRva2VucwoBBGZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAULYXNzZXRzQ291bnQFBWFjY3VtBAphc3NldElkU3RyCQCRAwIFC3NldHVwVG9rZW5zBQRuZXh0BAJjZgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwQ2YFBG5leHQEAmx0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBMdAUEbmV4dAQHcGVuYWx0eQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDHNldHVwUGVuYWx0eQUEbmV4dAQFcHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQKYXNzZXRTY2FsZQkBDWdldEFzc2V0U2NhbGUBBQphc3NldElkU3RyBAltYXhTdXBwbHkJAQxnZXRNYXhTdXBwbHkCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsU3VwcGx5CQEWZ2V0T3V0ZGF0ZWRUb3RhbFN1cHBseQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxCb3Jyb3cJARZnZXRPdXRkYXRlZFRvdGFsQm9ycm93AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRTUmF0ZQkBEGdldE91dGRhdGVkU1JhdGUCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZEJSYXRlCQEQZ2V0T3V0ZGF0ZWRCUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIECm91dGRhdGVkVXIJAQ1nZXRPdXRkYXRlZFVyBAUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwUNb3V0ZGF0ZWRTUmF0ZQUNb3V0ZGF0ZWRCUmF0ZQQEcmF0ZQkBB2dldFJhdGUCBQpvdXRkYXRlZFVyBQphc3NldElkU3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUEcmF0ZQQFc1JhdGUJAQ5nZXRBY3R1YWxTUmF0ZQQFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUKb3V0ZGF0ZWRVcgUNb3V0ZGF0ZWRTUmF0ZQQFYlJhdGUJAQ5nZXRBY3R1YWxCUmF0ZQMFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUNb3V0ZGF0ZWRCUmF0ZQQGc3VwcGx5CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUFc1JhdGUEBmJvcnJvdwkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxCb3Jyb3cFBWJSYXRlBAtzdXBwbHlJblVzZAkBCGdldEluVXNkAwUGc3VwcGx5BQphc3NldFNjYWxlBQVwcmljZQQLYm9ycm93SW5Vc2QJAQhnZXRJblVzZAMFBmJvcnJvdwUKYXNzZXRTY2FsZQUFcHJpY2UECHJlc2VydmVzCQBlAgUGc3VwcGx5BQZib3Jyb3cEDXJlc2VydmVzSW5Vc2QJAQhnZXRJblVzZAMFCHJlc2VydmVzBQphc3NldFNjYWxlBQVwcmljZQQCdXIJAQtnZXRBY3R1YWxVcgIFBnN1cHBseQUGYm9ycm93BAlzdXBwbHlBcHkJAQxnZXRTdXBwbHlBcHkCBQRyYXRlBQJ1cgQJYm9ycm93QXB5CQEMZ2V0Qm9ycm93QXB5AQUEcmF0ZQkApAoSCQDNCAIIBQVhY2N1bQJfMQUKYXNzZXRJZFN0cgkAzQgCCAUFYWNjdW0CXzIFAmNmCQDNCAIIBQVhY2N1bQJfMwUCbHQJAM0IAggFBWFjY3VtAl80BQdwZW5hbHR5CQDNCAIIBQVhY2N1bQJfNQUFcHJpY2UJAM0IAggFBWFjY3VtAl82BQphc3NldFNjYWxlCQDNCAIIBQVhY2N1bQJfNwUJbWF4U3VwcGx5CQDNCAIIBQVhY2N1bQJfOAUFc1JhdGUJAM0IAggFBWFjY3VtAl85BQViUmF0ZQkAzQgCCAUFYWNjdW0DXzEwBQZzdXBwbHkJAM0IAggFBWFjY3VtA18xMQULc3VwcGx5SW5Vc2QJAM0IAggFBWFjY3VtA18xMgUGYm9ycm93CQDNCAIIBQVhY2N1bQNfMTMFC2JvcnJvd0luVXNkCQDNCAIIBQVhY2N1bQNfMTQFCHJlc2VydmVzCQDNCAIIBQVhY2N1bQNfMTUFDXJlc2VydmVzSW5Vc2QJAM0IAggFBWFjY3VtA18xNgUCdXIJAM0IAggFBWFjY3VtA18xNwUJc3VwcGx5QXB5CQDNCAIIBQVhY2N1bQNfMTgFCWJvcnJvd0FweQQGYXNzZXRzCgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkApAoSBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAQQdG90YWxTdXBwbHlJblVzZAkBA3N1bQIFC2Fzc2V0c0NvdW50CAUGYXNzZXRzA18xMQQQdG90YWxCb3Jyb3dJblVzZAkBA3N1bQIFC2Fzc2V0c0NvdW50CAUGYXNzZXRzA18xMwQSdG90YWxSZXNlcnZlc0luVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMDXzE1CQCZCgcFBmFzc2V0cwULYXNzZXRzQ291bnQFCm1hcmtldE5hbWUFD21hcmtldFNob3J0TmFtZQUQdG90YWxTdXBwbHlJblVzZAUQdG90YWxCb3Jyb3dJblVzZAUSdG90YWxSZXNlcnZlc0luVXNkAQtnZXRMZW5kRGF0YQAEDG1hcmtldHNDb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQIHbWFya2V0cwoBBGZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUMbWFya2V0c0NvdW50BQVhY2N1bQQJbWFya2V0U3RyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICB21hcmtldF8JAKQDAQUEbmV4dAQNbWFya2V0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbWFya2V0U3RyBAptYXJrZXREYXRhCQENZ2V0TWFya2V0RGF0YQEFDW1hcmtldEFkZHJlc3MJAJoKCAkAzQgCCAUFYWNjdW0CXzEIBQptYXJrZXREYXRhAl8xCQDNCAIIBQVhY2N1bQJfMgUNbWFya2V0QWRkcmVzcwkAzQgCCAUFYWNjdW0CXzMIBQptYXJrZXREYXRhAl8yCQDNCAIIBQVhY2N1bQJfNAgFCm1hcmtldERhdGECXzMJAM0IAggFBWFjY3VtAl81CAUKbWFya2V0RGF0YQJfNAkAzQgCCAUFYWNjdW0CXzYIBQptYXJrZXREYXRhAl81CQDNCAIIBQVhY2N1bQJfNwgFCm1hcmtldERhdGECXzYJAM0IAggFBWFjY3VtAl84CAUKbWFya2V0RGF0YQJfNwQHbWFya2V0cwoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBA90b3RhbExlbmRTdXBwbHkJAQNzdW0CBQxtYXJrZXRzQ291bnQIBQdtYXJrZXRzAl82BA90b3RhbExlbmRCb3Jyb3cJAQNzdW0CBQxtYXJrZXRzQ291bnQIBQdtYXJrZXRzAl83BBF0b3RhbExlbmRSZXNlcnZlcwkBA3N1bQIFDG1hcmtldHNDb3VudAgFB21hcmtldHMCXzgJAJcKBQUHbWFya2V0cwUMbWFya2V0c0NvdW50BQ90b3RhbExlbmRTdXBwbHkFD3RvdGFsTGVuZEJvcnJvdwURdG90YWxMZW5kUmVzZXJ2ZXMBDWdldFdhbGxldERhdGEMDW1hcmtldEFkZHJlc3MGd2FsbGV0C2Fzc2V0c0NvdW50CmFzc2V0c0xpc3QGY2ZMaXN0Bmx0TGlzdAlwcmljZUxpc3QOYXNzZXRTY2FsZUxpc3QJc1JhdGVMaXN0CWJSYXRlTGlzdA1zdXBwbHlBcHlMaXN0DWJvcnJvd0FweUxpc3QKAQRmb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFC2Fzc2V0c0NvdW50BQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBQphc3NldHNMaXN0BQRuZXh0BAJjZgkAkQMCBQZjZkxpc3QFBG5leHQEAmx0CQCRAwIFBmx0TGlzdAUEbmV4dAQFcHJpY2UJAJEDAgUJcHJpY2VMaXN0BQRuZXh0BAphc3NldFNjYWxlCQCRAwIFDmFzc2V0U2NhbGVMaXN0BQRuZXh0BAVzUmF0ZQkAkQMCBQlzUmF0ZUxpc3QFBG5leHQEBWJSYXRlCQCRAwIFCWJSYXRlTGlzdAUEbmV4dAQJc3VwcGx5QXB5CQCRAwIFDXN1cHBseUFweUxpc3QFBG5leHQECWJvcnJvd0FweQkAkQMCBQ1ib3Jyb3dBcHlMaXN0BQRuZXh0BAx3YWxsZXRTdXBwbHkJAQ9nZXRXYWxsZXRTdXBwbHkEBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFBXNSYXRlBBF3YWxsZXRTdXBwbHlJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0U3VwcGx5BQphc3NldFNjYWxlBQVwcmljZQQRd2FsbGV0RGFpbHlJbmNvbWUJARBnZXREYWlseVBlcmNlbnRzAgUJc3VwcGx5QXB5BQx3YWxsZXRTdXBwbHkEFndhbGxldERhaWx5SW5jb21lSW5Vc2QJAQhnZXRJblVzZAMFEXdhbGxldERhaWx5SW5jb21lBQphc3NldFNjYWxlBQVwcmljZQQMd2FsbGV0Qm9ycm93CQEPZ2V0V2FsbGV0Qm9ycm93BAUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgUGd2FsbGV0BQViUmF0ZQQRd2FsbGV0Qm9ycm93SW5Vc2QJAQhnZXRJblVzZAMFDHdhbGxldEJvcnJvdwUKYXNzZXRTY2FsZQUFcHJpY2UEF3dhbGxldERhaWx5TG9hblBlcmNlbnRzCQEQZ2V0RGFpbHlQZXJjZW50cwIFCWJvcnJvd0FweQUMd2FsbGV0Qm9ycm93BBx3YWxsZXREYWlseUxvYW5QZXJjZW50c0luVXNkCQEIZ2V0SW5Vc2QDBRd3YWxsZXREYWlseUxvYW5QZXJjZW50cwUKYXNzZXRTY2FsZQUFcHJpY2UEFndhbGxldEJvcnJvd0xpbWl0SW5Vc2QJAGsDBRF3YWxsZXRTdXBwbHlJblVzZAUCY2YFBlNjYWxlOAQWd2FsbGV0Qm9ycm93VXNhZ2VJblVzZAkAawMFEXdhbGxldEJvcnJvd0luVXNkBQZTY2FsZTgFAmx0BBF3YWxsZXRNYXJnaW5JblVzZAkAZQIJAGsDBRF3YWxsZXRTdXBwbHlJblVzZAUJc3VwcGx5QXB5BQZTY2FsZTgJAGsDBRF3YWxsZXRCb3Jyb3dJblVzZAUJYm9ycm93QXB5BQZTY2FsZTgEDGJhZERlYnRJblVzZAMJAGYCBRF3YWxsZXRCb3Jyb3dJblVzZAURd2FsbGV0U3VwcGx5SW5Vc2QJAGUCBRF3YWxsZXRCb3Jyb3dJblVzZAURd2FsbGV0U3VwcGx5SW5Vc2QAAAkAngoMCQDNCAIIBQVhY2N1bQJfMQUMd2FsbGV0U3VwcGx5CQDNCAIIBQVhY2N1bQJfMgURd2FsbGV0U3VwcGx5SW5Vc2QJAM0IAggFBWFjY3VtAl8zBRF3YWxsZXREYWlseUluY29tZQkAzQgCCAUFYWNjdW0CXzQFFndhbGxldERhaWx5SW5jb21lSW5Vc2QJAM0IAggFBWFjY3VtAl81BQx3YWxsZXRCb3Jyb3cJAM0IAggFBWFjY3VtAl82BRF3YWxsZXRCb3Jyb3dJblVzZAkAzQgCCAUFYWNjdW0CXzcFF3dhbGxldERhaWx5TG9hblBlcmNlbnRzCQDNCAIIBQVhY2N1bQJfOAUcd2FsbGV0RGFpbHlMb2FuUGVyY2VudHNJblVzZAkAzQgCCAUFYWNjdW0CXzkFFndhbGxldEJvcnJvd0xpbWl0SW5Vc2QJAM0IAggFBWFjY3VtA18xMAUWd2FsbGV0Qm9ycm93VXNhZ2VJblVzZAkAzQgCCAUFYWNjdW0DXzExBRF3YWxsZXRNYXJnaW5JblVzZAkAzQgCCAUFYWNjdW0DXzEyBQxiYWREZWJ0SW5Vc2QEBmFzc2V0cwoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ4KDAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QJAQNzdW0CBQthc3NldHNDb3VudAgFBmFzc2V0cwJfMgQbdG90YWxXYWxsZXREYWlseUluY29tZUluVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMCXzQEFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QJAQNzdW0CBQthc3NldHNDb3VudAgFBmFzc2V0cwJfNgQhdG90YWxXYWxsZXREYWlseUxvYW5QZXJjZW50c0luVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMCXzgEG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAkBA3N1bQIFC2Fzc2V0c0NvdW50CAUGYXNzZXRzAl85BBt0b3RhbFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QJAQNzdW0CBQthc3NldHNDb3VudAgFBmFzc2V0cwNfMTAEFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QJAQNzdW0CBQthc3NldHNDb3VudAgFBmFzc2V0cwNfMTEEDWFjY291bnRIZWFsdGgJARBnZXRBY2NvdW50SGVhbHRoAgUbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkBRt0b3RhbFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QEBm5ldEFweQkBCWdldE5ldEFweQMFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QJAJkKBwUGYXNzZXRzBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkBRt0b3RhbFdhbGxldERhaWx5SW5jb21lSW5Vc2QFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QFIXRvdGFsV2FsbGV0RGFpbHlMb2FuUGVyY2VudHNJblVzZAUNYWNjb3VudEhlYWx0aAUGbmV0QXB5AQtnZXRNZW51SnNvbgEFZGVidWcEDG1hcmtldHNDb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQIHbWFya2V0cwoBC21hcmtldHNGb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFDG1hcmtldHNDb3VudAUFYWNjdW0ECW1hcmtldFN0cgkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAgdtYXJrZXRfCQCkAwEFBG5leHQEDW1hcmtldEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCW1hcmtldFN0cgQLc2V0dXBUb2tlbnMJAQ5nZXRTZXR1cFRva2VucwEFDW1hcmtldEFkZHJlc3MEC2Fzc2V0c0NvdW50CQCQAwEFC3NldHVwVG9rZW5zBA5sYXN0UmF0ZUhlaWdodAkBEWdldExhc3RSYXRlSGVpZ2h0AQUNbWFya2V0QWRkcmVzcwoBCmFzc2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAULYXNzZXRzQ291bnQFBWFjY3VtBAphc3NldElkU3RyCQCRAwIFC3NldHVwVG9rZW5zBQRuZXh0BAVwcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBAphc3NldFNjYWxlCQENZ2V0QXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZFNSYXRlCQEQZ2V0T3V0ZGF0ZWRTUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQKb3V0ZGF0ZWRVcgkBDWdldE91dGRhdGVkVXIEBRNvdXRkYXRlZFRvdGFsU3VwcGx5BRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZFNSYXRlBQ1vdXRkYXRlZEJSYXRlBARyYXRlCQEHZ2V0UmF0ZQIFCm91dGRhdGVkVXIFCmFzc2V0SWRTdHIECGludGVyZXN0CQELZ2V0SW50ZXJlc3QBBQRyYXRlBAVzUmF0ZQkBDmdldEFjdHVhbFNSYXRlBAUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQpvdXRkYXRlZFVyBQ1vdXRkYXRlZFNSYXRlBAViUmF0ZQkBDmdldEFjdHVhbEJSYXRlAwUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQ1vdXRkYXRlZEJSYXRlBAZzdXBwbHkJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsU3VwcGx5BQVzUmF0ZQQGYm9ycm93CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwUFYlJhdGUEC3N1cHBseUluVXNkCQEIZ2V0SW5Vc2QDBQZzdXBwbHkFCmFzc2V0U2NhbGUFBXByaWNlBAtib3Jyb3dJblVzZAkBCGdldEluVXNkAwUGYm9ycm93BQphc3NldFNjYWxlBQVwcmljZQQIcmVzZXJ2ZXMJAGUCBQZzdXBwbHkFBmJvcnJvdwQNcmVzZXJ2ZXNJblVzZAkBCGdldEluVXNkAwUIcmVzZXJ2ZXMFCmFzc2V0U2NhbGUFBXByaWNlBA9tYXJrZXRBc3NldEpzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewILImFzc2V0SWQiOiIFCmFzc2V0SWRTdHICASICCSwicHJpY2UiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQVwcmljZQIJLCJzUmF0ZSI6CQEPYW1vdW50VG9EZWNpbWFsAgUFc1JhdGUFBlNjYWxlOAIJLCJiUmF0ZSI6CQEPYW1vdW50VG9EZWNpbWFsAgUFYlJhdGUFBlNjYWxlOAIBfQkAlgoECQBkAggFBWFjY3VtAl8xBQtzdXBwbHlJblVzZAkAZAIIBQVhY2N1bQJfMgULYm9ycm93SW5Vc2QJAGQCCAUFYWNjdW0CXzMFDXJlc2VydmVzSW5Vc2QJAM0IAggFBWFjY3VtAl80BQ9tYXJrZXRBc3NldEpzb24EDSR0MDIwNTExMjA2MTkKAAIkbAUFYXJyMTIKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAAAAAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKYXNzZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEC3N1cHBseUluVXNkCAUNJHQwMjA1MTEyMDYxOQJfMQQLYm9ycm93SW5Vc2QIBQ0kdDAyMDUxMTIwNjE5Al8yBA1yZXNlcnZlc0luVXNkCAUNJHQwMjA1MTEyMDYxOQJfMwQQbWFya2V0QXNzZXRzSnNvbggFDSR0MDIwNTExMjA2MTkCXzQECm1hcmtldEpzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewILImFkZHJlc3MiOiIFCW1hcmtldFN0cgIBIgILLCJhc3NldHMiOlsJALsJAgUQbWFya2V0QXNzZXRzSnNvbgIBLAIBXQIBfQkAlgoECQBkAggFBWFjY3VtAl8xBQtzdXBwbHlJblVzZAkAZAIIBQVhY2N1bQJfMgULYm9ycm93SW5Vc2QJAGQCCAUFYWNjdW0CXzMFDXJlc2VydmVzSW5Vc2QJAM0IAggFBWFjY3VtAl80BQptYXJrZXRKc29uBA0kdDAyMDk2NzIxMDg2CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAAAAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC21hcmtldHNGb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAQQdG90YWxTdXBwbHlJblVzZAgFDSR0MDIwOTY3MjEwODYCXzEEEHRvdGFsQm9ycm93SW5Vc2QIBQ0kdDAyMDk2NzIxMDg2Al8yBBJ0b3RhbFJlc2VydmVzSW5Vc2QIBQ0kdDAyMDk2NzIxMDg2Al8zBAttYXJrZXRzSnNvbggFDSR0MDIwOTY3MjEwODYCXzQEBGpzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewIOInN1cHBseUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUQdG90YWxTdXBwbHlJblVzZAIPLCJib3Jyb3dJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEHRvdGFsQm9ycm93SW5Vc2QCESwicmVzZXJ2ZXNJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEnRvdGFsUmVzZXJ2ZXNJblVzZAIMLCJtYXJrZXRzIjpbCQC7CQIFC21hcmtldHNKc29uAgEsAgFdAgF9AwUFZGVidWcJAAIBBQRqc29uBQRqc29uARdnZXRXYWxsZXRPcGVyYXRpb25zSnNvbgQGbWFya2V0CmFzc2V0SWRTdHIGd2FsbGV0BWRlYnVnBA1tYXJrZXRBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQZtYXJrZXQECm1hcmtldERhdGEJAQ1nZXRNYXJrZXREYXRhAQUNbWFya2V0QWRkcmVzcwQKd2FsbGV0RGF0YQkBDWdldFdhbGxldERhdGEMBQ1tYXJrZXRBZGRyZXNzBQZ3YWxsZXQIBQptYXJrZXREYXRhAl8yCAgFCm1hcmtldERhdGECXzECXzEICAUKbWFya2V0RGF0YQJfMQJfMggIBQptYXJrZXREYXRhAl8xAl8zCAgFCm1hcmtldERhdGECXzECXzUICAUKbWFya2V0RGF0YQJfMQJfNggIBQptYXJrZXREYXRhAl8xAl84CAgFCm1hcmtldERhdGECXzECXzkICAUKbWFya2V0RGF0YQJfMQNfMTcICAUKbWFya2V0RGF0YQJfMQNfMTgECmFzc2V0SW5kZXgJAQ1nZXRBc3NldEluZGV4AggIBQptYXJrZXREYXRhAl8xAl8xBQphc3NldElkU3RyBARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCiJtYXJrZXQiOiIIBQptYXJrZXREYXRhAl8zAgEiAg4sImFzc2V0UHJpY2UiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyCQCRAwIICAUKbWFya2V0RGF0YQJfMQJfNQUKYXNzZXRJbmRleAIKLCJzdXBwbHkiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgkAkQMCCAgFCm1hcmtldERhdGECXzEDXzEwBQphc3NldEluZGV4Ag8sInN1cHBseUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgkAkQMCCAgFCm1hcmtldERhdGECXzEDXzExBQphc3NldEluZGV4Ag0sInN1cHBseUFweSI6CQEPYW1vdW50VG9EZWNpbWFsAgkAkQMCCAgFCm1hcmtldERhdGECXzEDXzE3BQphc3NldEluZGV4BQZTY2FsZTgCCiwiYm9ycm93IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIJAJEDAggIBQptYXJrZXREYXRhAl8xA18xMgUKYXNzZXRJbmRleAIPLCJib3Jyb3dJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIJAJEDAggIBQptYXJrZXREYXRhAl8xA18xMwUKYXNzZXRJbmRleAINLCJib3Jyb3dBcHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIJAJEDAggIBQptYXJrZXREYXRhAl8xA18xOAUKYXNzZXRJbmRleAUGU2NhbGU4AgwsInJlc2VydmVzIjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIJAJEDAggIBQptYXJrZXREYXRhAl8xA18xNAUKYXNzZXRJbmRleAIRLCJyZXNlcnZlc0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgkAkQMCCAgFCm1hcmtldERhdGECXzEDXzE1BQphc3NldEluZGV4AhQsInV0aWxpemF0aW9uUmF0aW8iOgkBD2Ftb3VudFRvRGVjaW1hbAIJAJEDAggIBQptYXJrZXREYXRhAl8xA18xNgUKYXNzZXRJbmRleAUGU2NhbGU4AhQsImNvbGxhdGVyYWxGYWN0b3IiOgkBD2Ftb3VudFRvRGVjaW1hbAIJAJEDAggIBQptYXJrZXREYXRhAl8xAl8yBQphc3NldEluZGV4BQZTY2FsZTgCGCwibGlxdWlkYXRpb25UaHJlc2hvbGQiOgkBD2Ftb3VudFRvRGVjaW1hbAIJAJEDAggIBQptYXJrZXREYXRhAl8xAl8zBQphc3NldEluZGV4BQZTY2FsZTgCFiwibGlxdWlkYXRpb25QZW5hbHR5IjoJAQ9hbW91bnRUb0RlY2ltYWwCCQCRAwIICAUKbWFya2V0RGF0YQJfMQJfNAUKYXNzZXRJbmRleAUGU2NhbGU4Ag0sIm1heFN1cHBseSI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIJAJEDAggIBQptYXJrZXREYXRhAl8xAl83BQphc3NldEluZGV4AhAsIndhbGxldFN1cHBseSI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyCQCRAwIICAUKd2FsbGV0RGF0YQJfMQJfMQUKYXNzZXRJbmRleAIVLCJ3YWxsZXRTdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIJAJEDAggIBQp3YWxsZXREYXRhAl8xAl8yBQphc3NldEluZGV4AhUsIndhbGxldERhaWx5SW5jb21lIjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIJAJEDAggIBQp3YWxsZXREYXRhAl8xAl8zBQphc3NldEluZGV4AhosIndhbGxldERhaWx5SW5jb21lSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyCQCRAwIICAUKd2FsbGV0RGF0YQJfMQJfNAUKYXNzZXRJbmRleAIQLCJ3YWxsZXRCb3Jyb3ciOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgkAkQMCCAgFCndhbGxldERhdGECXzECXzUFCmFzc2V0SW5kZXgCFSwid2FsbGV0Qm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyCQCRAwIICAUKd2FsbGV0RGF0YQJfMQJfNgUKYXNzZXRJbmRleAIbLCJ3YWxsZXREYWlseUxvYW5JbnRlcmVzdCI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyCQCRAwIICAUKd2FsbGV0RGF0YQJfMQJfNwUKYXNzZXRJbmRleAIgLCJ3YWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgkAkQMCCAgFCndhbGxldERhdGECXzECXzgFCmFzc2V0SW5kZXgCESwiYWNjb3VudEhlYWx0aCI6CQEPYW1vdW50VG9EZWNpbWFsAggFCndhbGxldERhdGECXzYFBlNjYWxlOAIKLCJuZXRBcHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIIBQp3YWxsZXREYXRhAl83BQZTY2FsZTgCAX0DBQVkZWJ1ZwkAAgEFBGpzb24FBGpzb24AAOcKIco=", "chainId": 87, "height": 3858805, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J4SPX4WxTsfwmXe3kcVbpP1fJjEM8yDv2zG3jVDtEew5 Next: 9ssVbTj6FKomq23eDNPMiUr8GXbfrSCgiZG71JxGsg9P Diff:
OldNewDifferences
477477 let borrowInUsd = $t02051120619._2
478478 let reservesInUsd = $t02051120619._3
479479 let marketAssetsJson = $t02051120619._4
480- let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_2C(marketAssetsJson, ",")) + "]") + "}")
480+ let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_11C(marketAssetsJson, ",")) + "]") + "}")
481481 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketJson))
482482 }
483483
484- let $t02096621085 = {
484+ let $t02096721086 = {
485485 let $l = arr12
486486 let $s = size($l)
487487 let $acc0 = $Tuple4(0, 0, 0, nil)
495495
496496 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
497497 }
498- let totalSupplyInUsd = $t02096621085._1
499- let totalBorrowInUsd = $t02096621085._2
500- let totalReservesInUsd = $t02096621085._3
501- let marketsJson = $t02096621085._4
502- let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_2C(marketsJson, ",")) + "]") + "}")
498+ let totalSupplyInUsd = $t02096721086._1
499+ let totalBorrowInUsd = $t02096721086._2
500+ let totalReservesInUsd = $t02096721086._3
501+ let marketsJson = $t02096721086._4
502+ let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
503503 if (debug)
504504 then throw(json)
505505 else json
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Waves = "WAVES"
55
66 let Scale6 = 1000000
77
88 let Scale8 = 100000000
99
1010 let Scale8Big = toBigInt(100000000)
1111
1212 let Scale10 = 10000000000
1313
1414 let Scale16 = 10000000000000000
1515
1616 let Scale16Big = toBigInt(10000000000000000)
1717
1818 let dayBlocks = 1440
1919
2020 let yearBlocks = 525600
2121
2222 let yearBlocksBig = toBigInt(525600)
2323
2424 let reserveFund = 20
2525
2626 let arr12 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
2727
2828 let usdtIdStr = "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi"
2929
3030 let usdcIdStr = "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW"
3131
3232 let oracleAddress = Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t')
3333
3434 let axlyAddress = Address(base58'3PLsYkBw7taejV1J3qWPCN2yeyVRu31d5HW')
3535
3636 let axlyLPs = ["7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1", "Btw3G1j4wQgdp49PTxaFkNvn75dQtqGDM7ejQppHnWC1", "BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe", "F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", "4CQ5CPGLXLbWBUs2JBjKUaRqF49CmKHkwzvPgSvQpAQV", "6iMB6LKSrgv9waEvEnN6Ydyx7dfxPnGcTw8318WVm5bR"]
3737
3838 func getRateCurve (assetIdStr) = match assetIdStr {
3939 case _ =>
4040 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
4141 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4242 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match0))
4343 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4444 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match0))
4545 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4646 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match0))
4747 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4848 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match0))
4949 then $Tuple4(2000000, 25000000, 80000000, 100000000)
5050 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match0))
5151 then $Tuple4(2000000, 40000000, 80000000, 150000000)
5252 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match0))
5353 then $Tuple4(0, 100000000, 80000000, 400000000)
5454 else if (("WAVES" == $match0))
5555 then $Tuple4(2000000, 30000000, 80000000, 90000000)
5656 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match0))
5757 then $Tuple4(0, 20000000, 80000000, 40000000)
5858 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match0))
5959 then $Tuple4(0, 20000000, 80000000, 100000000)
6060 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match0))
6161 then $Tuple4(0, 30000000, 80000000, 40000000)
6262 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match0))
6363 then $Tuple4(0, 25000000, 80000000, 40000000)
6464 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match0))
6565 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6666 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match0))
6767 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6868 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match0))
6969 then $Tuple4(2000000, 30000000, 80000000, 50000000)
7070 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match0))
7171 then $Tuple4(2000000, 40000000, 80000000, 100000000)
7272 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match0))
7373 then $Tuple4(2000000, 30000000, 80000000, 80000000)
7474 else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
7575 then $Tuple4(0, 50000000, 80000000, 200000000)
7676 else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match0))
7777 then $Tuple4(0, 100000000, 80000000, 400000000)
7878 else $Tuple4(0, 20000000, 80000000, 80000000)
7979 }
8080
8181
8282 func sum (size,data) = {
8383 func fold (accum,next) = if ((next >= size))
8484 then accum
8585 else (accum + data[next])
8686
8787 let $l = arr12
8888 let $s = size($l)
8989 let $acc0 = 0
9090 func $f0_1 ($a,$i) = if (($i >= $s))
9191 then $a
9292 else fold($a, $l[$i])
9393
9494 func $f0_2 ($a,$i) = if (($i >= $s))
9595 then $a
9696 else throw("List size exceeds 12")
9797
9898 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
9999 }
100100
101101
102102 func getSetupTokens (marketAddress) = split(getStringValue(marketAddress, "setup_tokens"), ",")
103103
104104
105105 func getTokenPrice (assetIdStr) = if (if ((assetIdStr == usdtIdStr))
106106 then true
107107 else (assetIdStr == usdcIdStr))
108108 then 1000000
109109 else if (containsElement(axlyLPs, assetIdStr))
110110 then {
111111 let @ = invoke(axlyAddress, "getShareAssetPriceREADONLY", [assetIdStr], nil)
112112 if ($isInstanceOf(@, "Int"))
113113 then @
114114 else throw(($getType(@) + " couldn't be cast to Int"))
115115 }
116116 else {
117117 let price = getIntegerValue(oracleAddress, (assetIdStr + "_twap5B"))
118118 price
119119 }
120120
121121
122122 func getAssetScale (assetIdStr) = {
123123 let decimals = if ((assetIdStr == "WAVES"))
124124 then 8
125125 else value(assetInfo(fromBase58String(assetIdStr))).decimals
126126 pow(10, 0, decimals, 0, 0, DOWN)
127127 }
128128
129129
130130 func getLastRateHeight (marketAddress) = valueOrElse(getInteger(marketAddress, "lastRateHeight"), 0)
131131
132132
133133 func getOutdatedTotalSupply (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_supplied_" + assetIdStr)), 0)
134134
135135
136136 func getOutdatedTotalBorrow (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_borrowed_" + assetIdStr)), 0)
137137
138138
139139 func getOutdatedSRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_sRate")), 0)
140140
141141
142142 func getOutdatedBRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_bRate")), 0)
143143
144144
145145 func getOutdatedUr (outdatedTotalSupply,outdatedTotalBorrow,outdatedSRate,outdatedBRate) = {
146146 let down = fraction(outdatedTotalSupply, outdatedSRate, Scale16)
147147 if ((down == 0))
148148 then 0
149149 else fraction(Scale8, fraction(outdatedTotalBorrow, outdatedBRate, Scale16), down)
150150 }
151151
152152
153153 func getRate (outdatedUr,assetIdStr) = {
154154 let curve = getRateCurve(assetIdStr)
155155 (curve._1 + (if ((curve._3 >= outdatedUr))
156156 then fraction(outdatedUr, curve._2, curve._3)
157157 else (curve._2 + fraction((outdatedUr - curve._3), curve._4, (100000000 - curve._3)))))
158158 }
159159
160160
161161 func getInterest (rate) = max([fraction(rate, Scale8, yearBlocks), 1])
162162
163163
164164 func getAssetIndex (setupTokens,assetIdStr) = value(indexOf(setupTokens, assetIdStr))
165165
166166
167167 func getAssetParamters (marketParameters,assetIndex) = $Tuple3(marketParameters._1[assetIndex], marketParameters._2[assetIndex], marketParameters._3[assetIndex])
168168
169169
170170 func getMarketParameters (marketAddress,setupTokens) = {
171171 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
172172 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
173173 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
174174 let tokensSize = size(setupTokens)
175175 func fold (accum,next) = if ((next >= tokensSize))
176176 then accum
177177 else $Tuple3((accum._1 :+ parseIntValue(setupCf[next])), (accum._2 :+ parseIntValue(setupLt[next])), (accum._3 :+ parseIntValue(setupPenalty[next])))
178178
179179 let $l = arr12
180180 let $s = size($l)
181181 let $acc0 = $Tuple3(nil, nil, nil)
182182 func $f0_1 ($a,$i) = if (($i >= $s))
183183 then $a
184184 else fold($a, $l[$i])
185185
186186 func $f0_2 ($a,$i) = if (($i >= $s))
187187 then $a
188188 else throw("List size exceeds 12")
189189
190190 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
191191 }
192192
193193
194194 func getMaxSupply (marketAddress,assetIdStr) = parseIntValue(valueOrElse(getString(marketAddress, ("setup_maxSupply_" + assetIdStr)), "0"))
195195
196196
197197 func getActualSRate (lastRateHeight,interest,outdatedUr,outdatedSRate) = {
198198 let lastSRate = max([outdatedSRate, Scale16])
199199 let newSRate = (lastSRate + ((((height - lastRateHeight) * fraction(interest, outdatedUr, Scale8)) * (100 - reserveFund)) / 100))
200200 newSRate
201201 }
202202
203203
204204 func getActualBRate (lastRateHeight,interest,outdatedBRate) = {
205205 let lastBRate = max([outdatedBRate, Scale16])
206206 let newBRate = (lastBRate + ((height - lastRateHeight) * interest))
207207 newBRate
208208 }
209209
210210
211211 func getActualUr (actualSupply,actualBorrow) = fraction(actualBorrow, Scale8, actualSupply)
212212
213213
214214 func getActualAmount (outdatedAmount,actualRate) = fraction(outdatedAmount, actualRate, Scale16)
215215
216216
217217 func getInUsd (actualAmount,assetScale,price) = fraction(actualAmount, price, assetScale)
218218
219219
220220 func getSupplyApy (rate,actualUr) = {
221221 let supplyRate = fraction(fraction(rate, 80, 100), actualUr, Scale8)
222222 (toInt(pow((Scale16Big + fraction(toBigInt(supplyRate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
223223 }
224224
225225
226226 func getBorrowApy (rate) = (toInt(pow((Scale16Big + fraction(toBigInt(rate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
227227
228228
229229 func getWalletSupply (marketAddress,assetIdStr,wallet,actualSRate) = {
230230 let outdatedWalletSupply = valueOrElse(getInteger(marketAddress, ((wallet + "_supplied_") + assetIdStr)), 0)
231231 getActualAmount(outdatedWalletSupply, actualSRate)
232232 }
233233
234234
235235 func getWalletBorrow (marketAddress,assetIdStr,wallet,actualBRate) = {
236236 let outdatedWalletBorrow = valueOrElse(getInteger(marketAddress, ((wallet + "_borrowed_") + assetIdStr)), 0)
237237 getActualAmount(outdatedWalletBorrow, actualBRate)
238238 }
239239
240240
241241 func getDailyPercents (apy,quantity) = fraction(fraction((toInt(pow((Scale8Big + toBigInt(apy)), 8, (Scale16Big / yearBlocksBig), 16, 16, DOWN)) - Scale16), dayBlocks, Scale8), quantity, Scale8)
242242
243243
244244 func getAccountHealth (totalWalletBorrowLimitInUsd,totalWalletBorrowUsageInUsd) = if ((totalWalletBorrowLimitInUsd == 0))
245245 then Scale8
246246 else (Scale8 - fraction(totalWalletBorrowUsageInUsd, Scale8, totalWalletBorrowLimitInUsd))
247247
248248
249249 func getNetApy (totalWalletSupplyInUsd,totalWalletBorrowInUsd,totalWalletMarginInUsd) = if ((totalWalletMarginInUsd == 0))
250250 then 0
251251 else if ((totalWalletMarginInUsd > 0))
252252 then fraction(totalWalletMarginInUsd, Scale8, totalWalletSupplyInUsd)
253253 else fraction(totalWalletMarginInUsd, Scale8, totalWalletBorrowInUsd)
254254
255255
256256 func assetToJson (assetIdStr,quantity) = {
257257 let $t092269441 = if ((assetIdStr == Waves))
258258 then $Tuple2(8, "WAVES")
259259 else {
260260 let asset = value(assetInfo(fromBase58String(assetIdStr)))
261261 $Tuple2(asset.decimals, asset.name)
262262 }
263263 let decimals = $t092269441._1
264264 let name = $t092269441._2
265265 (((((((("{\"quantity\":" + toString(quantity)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"") + name) + "\",\"id\":\"") + assetIdStr) + "\"}")
266266 }
267267
268268
269269 func amountToDecimal (amount,assetScale) = {
270270 let intPart = (amount / assetScale)
271271 let floatPart = (amount % assetScale)
272272 ((toString(intPart) + ".") + toString(floatPart))
273273 }
274274
275275
276276 func getMarketData (marketAddress) = {
277277 let marketStr = toString(marketAddress)
278278 let marketName = getStringValue(("market_name_" + marketStr))
279279 let marketShortName = getStringValue(("market_shortname_" + marketStr))
280280 let setupTokens = getSetupTokens(marketAddress)
281281 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
282282 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
283283 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
284284 let lastRateHeight = getLastRateHeight(marketAddress)
285285 let assetsCount = size(setupTokens)
286286 func fold (accum,next) = if ((next >= assetsCount))
287287 then accum
288288 else {
289289 let assetIdStr = setupTokens[next]
290290 let cf = parseIntValue(setupCf[next])
291291 let lt = parseIntValue(setupLt[next])
292292 let penalty = parseIntValue(setupPenalty[next])
293293 let price = getTokenPrice(assetIdStr)
294294 let assetScale = getAssetScale(assetIdStr)
295295 let maxSupply = getMaxSupply(marketAddress, assetIdStr)
296296 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
297297 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
298298 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
299299 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
300300 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
301301 let rate = getRate(outdatedUr, assetIdStr)
302302 let interest = getInterest(rate)
303303 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
304304 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
305305 let supply = getActualAmount(outdatedTotalSupply, sRate)
306306 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
307307 let supplyInUsd = getInUsd(supply, assetScale, price)
308308 let borrowInUsd = getInUsd(borrow, assetScale, price)
309309 let reserves = (supply - borrow)
310310 let reservesInUsd = getInUsd(reserves, assetScale, price)
311311 let ur = getActualUr(supply, borrow)
312312 let supplyApy = getSupplyApy(rate, ur)
313313 let borrowApy = getBorrowApy(rate)
314314 $Tuple18((accum._1 :+ assetIdStr), (accum._2 :+ cf), (accum._3 :+ lt), (accum._4 :+ penalty), (accum._5 :+ price), (accum._6 :+ assetScale), (accum._7 :+ maxSupply), (accum._8 :+ sRate), (accum._9 :+ bRate), (accum._10 :+ supply), (accum._11 :+ supplyInUsd), (accum._12 :+ borrow), (accum._13 :+ borrowInUsd), (accum._14 :+ reserves), (accum._15 :+ reservesInUsd), (accum._16 :+ ur), (accum._17 :+ supplyApy), (accum._18 :+ borrowApy))
315315 }
316316
317317 let assets = {
318318 let $l = arr12
319319 let $s = size($l)
320320 let $acc0 = $Tuple18(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
321321 func $f0_1 ($a,$i) = if (($i >= $s))
322322 then $a
323323 else fold($a, $l[$i])
324324
325325 func $f0_2 ($a,$i) = if (($i >= $s))
326326 then $a
327327 else throw("List size exceeds 12")
328328
329329 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
330330 }
331331 let totalSupplyInUsd = sum(assetsCount, assets._11)
332332 let totalBorrowInUsd = sum(assetsCount, assets._13)
333333 let totalReservesInUsd = sum(assetsCount, assets._15)
334334 $Tuple7(assets, assetsCount, marketName, marketShortName, totalSupplyInUsd, totalBorrowInUsd, totalReservesInUsd)
335335 }
336336
337337
338338 func getLendData () = {
339339 let marketsCount = getIntegerValue("markets")
340340 func fold (accum,next) = if ((next >= marketsCount))
341341 then accum
342342 else {
343343 let marketStr = getStringValue(("market_" + toString(next)))
344344 let marketAddress = addressFromStringValue(marketStr)
345345 let marketData = getMarketData(marketAddress)
346346 $Tuple8((accum._1 :+ marketData._1), (accum._2 :+ marketAddress), (accum._3 :+ marketData._2), (accum._4 :+ marketData._3), (accum._5 :+ marketData._4), (accum._6 :+ marketData._5), (accum._7 :+ marketData._6), (accum._8 :+ marketData._7))
347347 }
348348
349349 let markets = {
350350 let $l = arr12
351351 let $s = size($l)
352352 let $acc0 = $Tuple8(nil, nil, nil, nil, nil, nil, nil, nil)
353353 func $f0_1 ($a,$i) = if (($i >= $s))
354354 then $a
355355 else fold($a, $l[$i])
356356
357357 func $f0_2 ($a,$i) = if (($i >= $s))
358358 then $a
359359 else throw("List size exceeds 12")
360360
361361 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
362362 }
363363 let totalLendSupply = sum(marketsCount, markets._6)
364364 let totalLendBorrow = sum(marketsCount, markets._7)
365365 let totalLendReserves = sum(marketsCount, markets._8)
366366 $Tuple5(markets, marketsCount, totalLendSupply, totalLendBorrow, totalLendReserves)
367367 }
368368
369369
370370 func getWalletData (marketAddress,wallet,assetsCount,assetsList,cfList,ltList,priceList,assetScaleList,sRateList,bRateList,supplyApyList,borrowApyList) = {
371371 func fold (accum,next) = if ((next >= assetsCount))
372372 then accum
373373 else {
374374 let assetIdStr = assetsList[next]
375375 let cf = cfList[next]
376376 let lt = ltList[next]
377377 let price = priceList[next]
378378 let assetScale = assetScaleList[next]
379379 let sRate = sRateList[next]
380380 let bRate = bRateList[next]
381381 let supplyApy = supplyApyList[next]
382382 let borrowApy = borrowApyList[next]
383383 let walletSupply = getWalletSupply(marketAddress, assetIdStr, wallet, sRate)
384384 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
385385 let walletDailyIncome = getDailyPercents(supplyApy, walletSupply)
386386 let walletDailyIncomeInUsd = getInUsd(walletDailyIncome, assetScale, price)
387387 let walletBorrow = getWalletBorrow(marketAddress, assetIdStr, wallet, bRate)
388388 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
389389 let walletDailyLoanPercents = getDailyPercents(borrowApy, walletBorrow)
390390 let walletDailyLoanPercentsInUsd = getInUsd(walletDailyLoanPercents, assetScale, price)
391391 let walletBorrowLimitInUsd = fraction(walletSupplyInUsd, cf, Scale8)
392392 let walletBorrowUsageInUsd = fraction(walletBorrowInUsd, Scale8, lt)
393393 let walletMarginInUsd = (fraction(walletSupplyInUsd, supplyApy, Scale8) - fraction(walletBorrowInUsd, borrowApy, Scale8))
394394 let badDebtInUsd = if ((walletBorrowInUsd > walletSupplyInUsd))
395395 then (walletBorrowInUsd - walletSupplyInUsd)
396396 else 0
397397 $Tuple12((accum._1 :+ walletSupply), (accum._2 :+ walletSupplyInUsd), (accum._3 :+ walletDailyIncome), (accum._4 :+ walletDailyIncomeInUsd), (accum._5 :+ walletBorrow), (accum._6 :+ walletBorrowInUsd), (accum._7 :+ walletDailyLoanPercents), (accum._8 :+ walletDailyLoanPercentsInUsd), (accum._9 :+ walletBorrowLimitInUsd), (accum._10 :+ walletBorrowUsageInUsd), (accum._11 :+ walletMarginInUsd), (accum._12 :+ badDebtInUsd))
398398 }
399399
400400 let assets = {
401401 let $l = arr12
402402 let $s = size($l)
403403 let $acc0 = $Tuple12(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
404404 func $f0_1 ($a,$i) = if (($i >= $s))
405405 then $a
406406 else fold($a, $l[$i])
407407
408408 func $f0_2 ($a,$i) = if (($i >= $s))
409409 then $a
410410 else throw("List size exceeds 12")
411411
412412 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
413413 }
414414 let totalWalletSupplyInUsd = sum(assetsCount, assets._2)
415415 let totalWalletDailyIncomeInUsd = sum(assetsCount, assets._4)
416416 let totalWalletBorrowInUsd = sum(assetsCount, assets._6)
417417 let totalWalletDailyLoanPercentsInUsd = sum(assetsCount, assets._8)
418418 let totalWalletBorrowLimitInUsd = sum(assetsCount, assets._9)
419419 let totalWalletBorrowUsageInUsd = sum(assetsCount, assets._10)
420420 let totalWalletMarginInUsd = sum(assetsCount, assets._11)
421421 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
422422 let netApy = getNetApy(totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletMarginInUsd)
423423 $Tuple7(assets, totalWalletSupplyInUsd, totalWalletDailyIncomeInUsd, totalWalletBorrowInUsd, totalWalletDailyLoanPercentsInUsd, accountHealth, netApy)
424424 }
425425
426426
427427 func getMenuJson (debug) = {
428428 let marketsCount = getIntegerValue("markets")
429429 func marketsFold (accum,next) = if ((next >= marketsCount))
430430 then accum
431431 else {
432432 let marketStr = getStringValue(("market_" + toString(next)))
433433 let marketAddress = addressFromStringValue(marketStr)
434434 let setupTokens = getSetupTokens(marketAddress)
435435 let assetsCount = size(setupTokens)
436436 let lastRateHeight = getLastRateHeight(marketAddress)
437437 func assetsFold (accum,next) = if ((next >= assetsCount))
438438 then accum
439439 else {
440440 let assetIdStr = setupTokens[next]
441441 let price = getTokenPrice(assetIdStr)
442442 let assetScale = getAssetScale(assetIdStr)
443443 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
444444 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
445445 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
446446 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
447447 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
448448 let rate = getRate(outdatedUr, assetIdStr)
449449 let interest = getInterest(rate)
450450 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
451451 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
452452 let supply = getActualAmount(outdatedTotalSupply, sRate)
453453 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
454454 let supplyInUsd = getInUsd(supply, assetScale, price)
455455 let borrowInUsd = getInUsd(borrow, assetScale, price)
456456 let reserves = (supply - borrow)
457457 let reservesInUsd = getInUsd(reserves, assetScale, price)
458458 let marketAssetJson = (((((((((("{" + "\"assetId\":\"") + assetIdStr) + "\"") + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"sRate\":") + amountToDecimal(sRate, Scale8)) + ",\"bRate\":") + amountToDecimal(bRate, Scale8)) + "}")
459459 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
460460 }
461461
462462 let $t02051120619 = {
463463 let $l = arr12
464464 let $s = size($l)
465465 let $acc0 = $Tuple4(0, 0, 0, nil)
466466 func $f0_1 ($a,$i) = if (($i >= $s))
467467 then $a
468468 else assetsFold($a, $l[$i])
469469
470470 func $f0_2 ($a,$i) = if (($i >= $s))
471471 then $a
472472 else throw("List size exceeds 12")
473473
474474 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
475475 }
476476 let supplyInUsd = $t02051120619._1
477477 let borrowInUsd = $t02051120619._2
478478 let reservesInUsd = $t02051120619._3
479479 let marketAssetsJson = $t02051120619._4
480- let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_2C(marketAssetsJson, ",")) + "]") + "}")
480+ let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_11C(marketAssetsJson, ",")) + "]") + "}")
481481 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketJson))
482482 }
483483
484- let $t02096621085 = {
484+ let $t02096721086 = {
485485 let $l = arr12
486486 let $s = size($l)
487487 let $acc0 = $Tuple4(0, 0, 0, nil)
488488 func $f0_1 ($a,$i) = if (($i >= $s))
489489 then $a
490490 else marketsFold($a, $l[$i])
491491
492492 func $f0_2 ($a,$i) = if (($i >= $s))
493493 then $a
494494 else throw("List size exceeds 12")
495495
496496 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
497497 }
498- let totalSupplyInUsd = $t02096621085._1
499- let totalBorrowInUsd = $t02096621085._2
500- let totalReservesInUsd = $t02096621085._3
501- let marketsJson = $t02096621085._4
502- let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_2C(marketsJson, ",")) + "]") + "}")
498+ let totalSupplyInUsd = $t02096721086._1
499+ let totalBorrowInUsd = $t02096721086._2
500+ let totalReservesInUsd = $t02096721086._3
501+ let marketsJson = $t02096721086._4
502+ let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
503503 if (debug)
504504 then throw(json)
505505 else json
506506 }
507507
508508
509509 func getWalletOperationsJson (market,assetIdStr,wallet,debug) = {
510510 let marketAddress = addressFromStringValue(market)
511511 let marketData = getMarketData(marketAddress)
512512 let walletData = getWalletData(marketAddress, wallet, marketData._2, marketData._1._1, marketData._1._2, marketData._1._3, marketData._1._5, marketData._1._6, marketData._1._8, marketData._1._9, marketData._1._17, marketData._1._18)
513513 let assetIndex = getAssetIndex(marketData._1._1, assetIdStr)
514514 let json = (((((((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"market\":\"") + marketData._3) + "\"") + ",\"assetPrice\":") + assetToJson(usdtIdStr, marketData._1._5[assetIndex])) + ",\"supply\":") + assetToJson(assetIdStr, marketData._1._10[assetIndex])) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, marketData._1._11[assetIndex])) + ",\"supplyApy\":") + amountToDecimal(marketData._1._17[assetIndex], Scale8)) + ",\"borrow\":") + assetToJson(assetIdStr, marketData._1._12[assetIndex])) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, marketData._1._13[assetIndex])) + ",\"borrowApy\":") + amountToDecimal(marketData._1._18[assetIndex], Scale8)) + ",\"reserves\":") + assetToJson(assetIdStr, marketData._1._14[assetIndex])) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, marketData._1._15[assetIndex])) + ",\"utilizationRatio\":") + amountToDecimal(marketData._1._16[assetIndex], Scale8)) + ",\"collateralFactor\":") + amountToDecimal(marketData._1._2[assetIndex], Scale8)) + ",\"liquidationThreshold\":") + amountToDecimal(marketData._1._3[assetIndex], Scale8)) + ",\"liquidationPenalty\":") + amountToDecimal(marketData._1._4[assetIndex], Scale8)) + ",\"maxSupply\":") + assetToJson(usdtIdStr, marketData._1._7[assetIndex])) + ",\"walletSupply\":") + assetToJson(assetIdStr, walletData._1._1[assetIndex])) + ",\"walletSupplyInUsd\":") + assetToJson(usdtIdStr, walletData._1._2[assetIndex])) + ",\"walletDailyIncome\":") + assetToJson(assetIdStr, walletData._1._3[assetIndex])) + ",\"walletDailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletData._1._4[assetIndex])) + ",\"walletBorrow\":") + assetToJson(assetIdStr, walletData._1._5[assetIndex])) + ",\"walletBorrowInUsd\":") + assetToJson(usdtIdStr, walletData._1._6[assetIndex])) + ",\"walletDailyLoanInterest\":") + assetToJson(assetIdStr, walletData._1._7[assetIndex])) + ",\"walletDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletData._1._8[assetIndex])) + ",\"accountHealth\":") + amountToDecimal(walletData._6, Scale8)) + ",\"netApy\":") + amountToDecimal(walletData._7, Scale8)) + "}")
515515 if (debug)
516516 then throw(json)
517517 else json
518518 }
519519
520520
521521

github/deemru/w8io/3ef1775 
69.42 ms