tx · 8RNgNfcgEaTa2xFKxju4TtbWCN3HLPFF5ZkwJCv1gXMq

3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk:  -0.04300000 Waves

2023.11.15 10:14 [3910014] smart account 3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk > SELF 0.00000000 Waves

{ "type": 13, "id": "8RNgNfcgEaTa2xFKxju4TtbWCN3HLPFF5ZkwJCv1gXMq", "fee": 4300000, "feeAssetId": null, "timestamp": 1700032553636, "version": 2, "chainId": 87, "sender": "3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk", "senderPublicKey": "46pxd1r6gmScNqdp82uEJMs2AZ1F9q2z1VtXZPFAtHYy", "proofs": [ "5M4CrVsqdMJ3RWtQL611qMxAnS8Am334cHVozuDkaf2PgeNZdsLfSDSMWHpNFguBKCAavXyLQmzEfwJXKJSRXkkv" ], "script": "base64:BgICCAI2AAVXYXZlcwIFV0FWRVMABlNjYWxlNgDAhD0ABlNjYWxlOACAwtcvAAlTY2FsZThCaWcJALYCAQCAwtcvAAdTY2FsZTEwAIDIr6AlAAdTY2FsZTE2AICAhP6m3uERAApTY2FsZTE2QmlnCQC2AgEAgICE/qbe4REACWRheUJsb2NrcwCgCwAKeWVhckJsb2NrcwCgiiAADXllYXJCbG9ja3NCaWcJALYCAQCgiiAAC3Jlc2VydmVGdW5kABQABWFycjEyCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALBQNuaWwACXVzZHRJZFN0cgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kACXVzZGNJZFN0cgIsSEdnYWJUcVVTOFd0VkZVSnpmbXJURE1nRWNjSnVaTEJQaEZnUUZ4dm5zb1cACXJvbWVJZFN0cgIsQVA0Q2I1eExZR0g2WmlnSHJlQ1pIb1hwUVRXRGtQc0cyQkhxZkRVeDZ0YUoADW9yYWNsZUFkZHJlc3MJAQdBZGRyZXNzAQEaAVdJZtDL84r1V3qt/CFvccVbiYgr0IGzsX8AC2F4bHlBZGRyZXNzCQEHQWRkcmVzcwEBGgFXz8h13gt2/Imb93uvCUhEZwkqUEc/D0ItAAdheGx5TFBzCQDMCAICLDdLWmJKclZvcHdKaGtkd2JlMWVGREJiZXg0ZGtZNjNNeGpUTmpxWHRyemoxCQDMCAICLEJ0dzNHMWo0d1FnZHA0OVBUeGFGa052bjc1ZFF0cUdETTdlalFwcEhuV0MxCQDMCAICLEJpU3pGZThuU0w3OG9aYWViZm9pbjV2Qlo1UHplNmQ3a2FlaWpMcXI1eFplCQDMCAICLEYyQUtrQTUxM2s1eUhFSmtMc1U2dld4Q1lZazgxMUdwakxod0V2MldHd1o5CQDMCAICLDRDUTVDUEdMWExiV0JVczJKQmpLVWFScUY0OUNtS0hrd3p2UGdTdlFwQVFWCQDMCAICLDZpTUI2TEtTcmd2OXdhRXZFbk42WWR5eDdkZnhQbkdjVHc4MzE4V1ZtNWJSBQNuaWwBDGdldFJhdGVDdXJ2ZQIKYXNzZXRJZFN0cgltYXJrZXRTdHIEByRtYXRjaDAFCW1hcmtldFN0cgMJAAACAiMzUDR1QTVldG5aaTRBbUJhYktpbnEyYk1pV1U4S2NuSFpkSAUHJG1hdGNoMAQHJG1hdGNoMQUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMQkAlgoEAAAAgMLXLwCA6JImAICI3r4BAwkAAAICBVdBVkVTBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCAlfUqAwkAAAICLEF0cXY1OUVZempGR3VpdEtWbk1SazZIOEZ1a2pvVjNrdFBvcmJFeXMyNW9uBQckbWF0Y2gxCQCWCgQAAACA2sQJAIDokiYAgLSJEwMJAAACAixEU2JiaExzU1RlRGc1THNpdWZrMkFuZWgzRGpWcUp1UHIyTTl1VTFnd3k1cAUHJG1hdGNoMQkAlgoEAAAAgNrECQCA6JImAIDC1y8DCQAAAgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEFByRtYXRjaDEJAJYKBAAAAICHpw4AgOiSJgCAtIkTAwkAAAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQckbWF0Y2gxCQCWCgQAAADA8PULAIDokiYAgLSJEwMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw0NzRqVGVZeDJyMlZhMzU3OTR0Q1NjQVhXSkc5aFUySGNneHpNb3dhWlVudQUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw1VVlCUHBxNFdvVTVuNE13cEZrZ0puVzNGcTRCMXUzdWtwSzMzaWs0UWVyUgUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiwydGhzQUN1SG16RE11TmV6UE0zMndnOWEzQndVekJXRGVTS2FrZ3ozY3cyMQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgMLXLwMJAAACAitZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3BQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gxCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMQkAlgoEAAAAgMLXLwCA6JImAICI3r4BCQCWCgQAAACA2sQJAIDokiYAgOiSJgMJAAACAiMzUDRESzVWekR3TDN2ZmM1YWhVRWh0b2U1QnlaTnlhY0ozWAUHJG1hdGNoMAQHJG1hdGNoMQUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMQkAlgoEAAAAgOHrFwCA6JImAICI3r4BAwkAAAICBVdBVkVTBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLEF0cXY1OUVZempGR3VpdEtWbk1SazZIOEZ1a2pvVjNrdFBvcmJFeXMyNW9uBQckbWF0Y2gxCQCWCgQAAACA2sQJAIDokiYAgLSJEwMJAAACAixEU2JiaExzU1RlRGc1THNpdWZrMkFuZWgzRGpWcUp1UHIyTTl1VTFnd3k1cAUHJG1hdGNoMQkAlgoEAAAAgNrECQCA6JImAIDC1y8DCQAAAgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEFByRtYXRjaDEJAJYKBAAAAICHpw4AgOiSJgCAtIkTAwkAAAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQckbWF0Y2gxCQCWCgQAAADA8PULAIDokiYAgLSJEwMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw0NzRqVGVZeDJyMlZhMzU3OTR0Q1NjQVhXSkc5aFUySGNneHpNb3dhWlVudQUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw1VVlCUHBxNFdvVTVuNE13cEZrZ0puVzNGcTRCMXUzdWtwSzMzaWs0UWVyUgUHJG1hdGNoMQkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiwydGhzQUN1SG16RE11TmV6UE0zMndnOWEzQndVekJXRGVTS2FrZ3ozY3cyMQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgMLXLwMJAAACAitZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3BQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gxCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMQkAlgoEAAAAgMLXLwCA6JImAICI3r4BCQCWCgQAAACA2sQJAIDokiYAgOiSJgMJAAACAiMzUEhwdVFVUFZVb1IzQVl6RmVKemVXSmZZTHNMVG1Xc3NWSAUHJG1hdGNoMAkAlgoEAIDaxAkAgMLXLwCAjs4cAICI3r4BAwkAAAICIzNQOERmMmI3eXdIdExCSEJlOFBCVlFZZDNBNU1kRUVKQW91BQckbWF0Y2gwBAckbWF0Y2gxBQphc3NldElkU3RyAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLEhHZ2FiVHFVUzhXdFZGVUp6Zm1yVERNZ0VjY0p1WkxCUGhGZ1FGeHZuc29XBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLDM0TjlZY0VFVExXbjkzcVlRNjRFc1AxeDg5dFNydUpVNDRSckVNU1hYRVBKBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLDZYdEhqcFhiczlSUkpQMlNyOUdVeVZxekFDY2J5OVRrVGhIWG5qVkM1Q0RKBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBQckbWF0Y2gxCQCWCgQAgIl6AMDw9QsAgOiSJgCAwtcvAwkAAAICLEFqc282blRUanB0dTJVSEx4NmhmU1hWdEhGdFJCSkNrS1lkNVNBeWo3emY1BQckbWF0Y2gxCQCWCgQAgIl6AIC0iRMAgOiSJgCAo8NHAwkAAAICLEhFQjhRYXc5eHJXcFdzOHRIc2lBVFlHQldEQnRQMlM3a2NQQUxyTXU0M0FTBQckbWF0Y2gxCQCWCgQAAACAwtcvAIDokiYAgIjevgEDCQAAAgIsQXRxdjU5RVl6akZHdWl0S1ZuTVJrNkg4RnVram9WM2t0UG9yYkV5czI1b24FByRtYXRjaDEJAJYKBAAAAIDaxAkAgOiSJgCAtIkTAwkAAAICLERTYmJoTHNTVGVEZzVMc2l1ZmsyQW5laDNEalZxSnVQcjJNOXVVMWd3eTVwBQckbWF0Y2gxCQCWCgQAAACA2sQJAIDokiYAgMLXLwMJAAACAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQUHJG1hdGNoMQkAlgoEAAAAgIenDgCA6JImAIC0iRMDCQAAAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wFByRtYXRjaDEJAJYKBAAAAMDw9QsAgOiSJgCAtIkTAwkAAAICLDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51BQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDVVWUJQcHE0V29VNW40TXdwRmtnSm5XM0ZxNEIxdTN1a3BLMzNpazRRZXJSBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gxCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMQkAlgoEAAAAgMLXLwCA6JImAICI3r4BAwkAAAICLDJ0aHNBQ3VIbXpETXVOZXpQTTMyd2c5YTNCd1V6QldEZVNLYWtnejNjdzIxBQckbWF0Y2gxCQCWCgQAgIl6AIC0iRMAgOiSJgCAwtcvAwkAAAICK1lpTmJvZkZ6QzE3akVISENNd3JSY3B5OU1ycmphYk1NTFp4ZzhnNXhtZjcFByRtYXRjaDEJAJYKBACAiXoAgIenDgCA6JImAIDokiYDCQAAAgIFV0FWRVMFByRtYXRjaDEJAJYKBACAiXoAgOHrFwCA6JImAIDC1y8JAJYKBACA2sQJAIDC1y8AgI7OHACAiN6+AQMJAAACAiMzUEFkOUFxZzNjUVN6dTI2TUZZV1FZY2pTWFBWQ0p0dWY1VgUHJG1hdGNoMAQHJG1hdGNoMQUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMQkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMQkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMQkAlgoEAAAAgNrECQCA6JImAIC0iRMDCQAAAgIFV0FWRVMFByRtYXRjaDEJAJYKBACAiXoAgIenDgCA6JImAIDh6xcDCQAAAgIsQXRxdjU5RVl6akZHdWl0S1ZuTVJrNkg4RnVram9WM2t0UG9yYkV5czI1b24FByRtYXRjaDEJAJYKBAAAAIDaxAkAgOiSJgCAtIkTAwkAAAICLERTYmJoTHNTVGVEZzVMc2l1ZmsyQW5laDNEalZxSnVQcjJNOXVVMWd3eTVwBQckbWF0Y2gxCQCWCgQAAACA2sQJAIDokiYAgMLXLwMJAAACAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQUHJG1hdGNoMQkAlgoEAAAAgIenDgCA6JImAIC0iRMDCQAAAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wFByRtYXRjaDEJAJYKBAAAAMDw9QsAgOiSJgCAtIkTAwkAAAICLDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51BQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDVVWUJQcHE0V29VNW40TXdwRmtnSm5XM0ZxNEIxdTN1a3BLMzNpazRRZXJSBQckbWF0Y2gxCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDJ0aHNBQ3VIbXpETXVOZXpQTTMyd2c5YTNCd1V6QldEZVNLYWtnejNjdzIxBQckbWF0Y2gxCQCWCgQAgIl6AIC0iRMAgOiSJgCAwtcvAwkAAAICK1lpTmJvZkZ6QzE3akVISENNd3JSY3B5OU1ycmphYk1NTFp4ZzhnNXhtZjcFByRtYXRjaDEJAJYKBACAiXoAgIenDgCA6JImAIDokiYJAJYKBAAAAIDaxAkAgOiSJgCA6JImCQACAQIOVW5rbm93biBtYXJrZXQBA3N1bQIEc2l6ZQRkYXRhCgEEZm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQRzaXplBQVhY2N1bQkAZAIFBWFjY3VtCQCRAwIFBGRhdGEFBG5leHQKAAIkbAUFYXJyMTIKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAQ5nZXRTZXR1cFRva2VucwENbWFya2V0QWRkcmVzcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAgxzZXR1cF90b2tlbnMCASwBDWdldFRva2VuUHJpY2UBCmFzc2V0SWRTdHIDAwMJAAACBQphc3NldElkU3RyBQl1c2R0SWRTdHIGCQAAAgUKYXNzZXRJZFN0cgUJdXNkY0lkU3RyBgkAAAIFCmFzc2V0SWRTdHIFCXJvbWVJZFN0cgDAhD0DCQEPY29udGFpbnNFbGVtZW50AgUHYXhseUxQcwUKYXNzZXRJZFN0cgoAAUAJAPwHBAULYXhseUFkZHJlc3MCGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZCQDMCAIFCmFzc2V0SWRTdHIFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQFcHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDW9yYWNsZUFkZHJlc3MJAKwCAgUKYXNzZXRJZFN0cgIHX3R3YXA1QgUFcHJpY2UBDWdldEFzc2V0U2NhbGUBCmFzc2V0SWRTdHIECGRlY2ltYWxzAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTAAgICQEFdmFsdWUBCQDsBwEJANkEAQUKYXNzZXRJZFN0cghkZWNpbWFscwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04BEWdldExhc3RSYXRlSGVpZ2h0AQ1tYXJrZXRBZGRyZXNzCQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MCDmxhc3RSYXRlSGVpZ2h0AAABFmdldE91dGRhdGVkVG90YWxTdXBwbHkCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgAAARZnZXRPdXRkYXRlZFRvdGFsQm9ycm93Ag1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIAAAEQZ2V0T3V0ZGF0ZWRTUmF0ZQINbWFya2V0QWRkcmVzcwphc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlAAABEGdldE91dGRhdGVkQlJhdGUCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQAAAQ1nZXRPdXRkYXRlZFVyBBNvdXRkYXRlZFRvdGFsU3VwcGx5E291dGRhdGVkVG90YWxCb3Jyb3cNb3V0ZGF0ZWRTUmF0ZQ1vdXRkYXRlZEJSYXRlBARkb3duCQBrAwUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUNb3V0ZGF0ZWRTUmF0ZQUHU2NhbGUxNgMJAAACBQRkb3duAAAAAAkAawMFBlNjYWxlOAkAawMFE291dGRhdGVkVG90YWxCb3Jyb3cFDW91dGRhdGVkQlJhdGUFB1NjYWxlMTYFBGRvd24BB2dldFJhdGUDCm91dGRhdGVkVXIKYXNzZXRJZFN0cgltYXJrZXRTdHIEBWN1cnZlCQEMZ2V0UmF0ZUN1cnZlAgUKYXNzZXRJZFN0cgUJbWFya2V0U3RyCQBkAggFBWN1cnZlAl8xAwkAZwIIBQVjdXJ2ZQJfMwUKb3V0ZGF0ZWRVcgkAawMFCm91dGRhdGVkVXIIBQVjdXJ2ZQJfMggFBWN1cnZlAl8zCQBkAggFBWN1cnZlAl8yCQBrAwkAZQIFCm91dGRhdGVkVXIIBQVjdXJ2ZQJfMwgFBWN1cnZlAl80CQBlAgCAwtcvCAUFY3VydmUCXzMBC2dldEludGVyZXN0AQRyYXRlCQCWAwEJAMwIAgkAawMFBHJhdGUFBlNjYWxlOAUKeWVhckJsb2NrcwkAzAgCAAEFA25pbAENZ2V0QXNzZXRJbmRleAILc2V0dXBUb2tlbnMKYXNzZXRJZFN0cgkBBXZhbHVlAQkAzwgCBQtzZXR1cFRva2VucwUKYXNzZXRJZFN0cgERZ2V0QXNzZXRQYXJhbXRlcnMCEG1hcmtldFBhcmFtZXRlcnMKYXNzZXRJbmRleAkAlQoDCQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl8xBQphc3NldEluZGV4CQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl8yBQphc3NldEluZGV4CQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl8zBQphc3NldEluZGV4ARNnZXRNYXJrZXRQYXJhbWV0ZXJzAg1tYXJrZXRBZGRyZXNzC3NldHVwVG9rZW5zBAdzZXR1cENmCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCnNldHVwX2x0dnMCASwEB3NldHVwTHQJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIJc2V0dXBfbHRzAgEsBAxzZXR1cFBlbmFsdHkJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIPc2V0dXBfcGVuYWx0aWVzAgEsBAp0b2tlbnNTaXplCQCQAwEFC3NldHVwVG9rZW5zCgEEZm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQp0b2tlbnNTaXplBQVhY2N1bQkAlQoDCQDNCAIIBQVhY2N1bQJfMQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwQ2YFBG5leHQJAM0IAggFBWFjY3VtAl8yCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBMdAUEbmV4dAkAzQgCCAUFYWNjdW0CXzMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxzZXR1cFBlbmFsdHkFBG5leHQKAAIkbAUFYXJyMTIKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAQxnZXRNYXhTdXBwbHkCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBDXBhcnNlSW50VmFsdWUBCQELdmFsdWVPckVsc2UCCQCdCAIFDW1hcmtldEFkZHJlc3MJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUKYXNzZXRJZFN0cgIBMAEOZ2V0QWN0dWFsU1JhdGUEDmxhc3RSYXRlSGVpZ2h0CGludGVyZXN0Cm91dGRhdGVkVXINb3V0ZGF0ZWRTUmF0ZQQJbGFzdFNSYXRlCQCWAwEJAMwIAgUNb3V0ZGF0ZWRTUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld1NSYXRlCQBkAgUJbGFzdFNSYXRlCQBpAgkAaAIJAGgCCQBlAgUGaGVpZ2h0BQ5sYXN0UmF0ZUhlaWdodAkAawMFCGludGVyZXN0BQpvdXRkYXRlZFVyBQZTY2FsZTgJAGUCAGQFC3Jlc2VydmVGdW5kAGQFCG5ld1NSYXRlAQ5nZXRBY3R1YWxCUmF0ZQMObGFzdFJhdGVIZWlnaHQIaW50ZXJlc3QNb3V0ZGF0ZWRCUmF0ZQQJbGFzdEJSYXRlCQCWAwEJAMwIAgUNb3V0ZGF0ZWRCUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld0JSYXRlCQBkAgUJbGFzdEJSYXRlCQBoAgkAZQIFBmhlaWdodAUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQhuZXdCUmF0ZQELZ2V0QWN0dWFsVXICDGFjdHVhbFN1cHBseQxhY3R1YWxCb3Jyb3cJAGsDBQxhY3R1YWxCb3Jyb3cFBlNjYWxlOAUMYWN0dWFsU3VwcGx5AQ9nZXRBY3R1YWxBbW91bnQCDm91dGRhdGVkQW1vdW50CmFjdHVhbFJhdGUJAGsDBQ5vdXRkYXRlZEFtb3VudAUKYWN0dWFsUmF0ZQUHU2NhbGUxNgEIZ2V0SW5Vc2QDDGFjdHVhbEFtb3VudAphc3NldFNjYWxlBXByaWNlCQBrAwUMYWN0dWFsQW1vdW50BQVwcmljZQUKYXNzZXRTY2FsZQEMZ2V0U3VwcGx5QXB5AgRyYXRlCGFjdHVhbFVyBApzdXBwbHlSYXRlCQBrAwkAawMFBHJhdGUAUABkBQhhY3R1YWxVcgUGU2NhbGU4CQBlAgkAoAMBCQB2BgkAtwICBQpTY2FsZTE2QmlnCQC8AgMJALYCAQUKc3VwcGx5UmF0ZQUJU2NhbGU4QmlnBQ15ZWFyQmxvY2tzQmlnABAFDXllYXJCbG9ja3NCaWcAAAAIBQRET1dOBQZTY2FsZTgBDGdldEJvcnJvd0FweQEEcmF0ZQkAZQIJAKADAQkAdgYJALcCAgUKU2NhbGUxNkJpZwkAvAIDCQC2AgEFBHJhdGUFCVNjYWxlOEJpZwUNeWVhckJsb2Nrc0JpZwAQBQ15ZWFyQmxvY2tzQmlnAAAACAUERE9XTgUGU2NhbGU4AQ9nZXRXYWxsZXRTdXBwbHkEDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgZ3YWxsZXQLYWN0dWFsU1JhdGUEFG91dGRhdGVkV2FsbGV0U3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgkArAICBQZ3YWxsZXQCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIAAAkBD2dldEFjdHVhbEFtb3VudAIFFG91dGRhdGVkV2FsbGV0U3VwcGx5BQthY3R1YWxTUmF0ZQEPZ2V0V2FsbGV0Qm9ycm93BA1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIGd2FsbGV0C2FjdHVhbEJSYXRlBBRvdXRkYXRlZFdhbGxldEJvcnJvdwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIJAKwCAgUGd2FsbGV0AgpfYm9ycm93ZWRfBQphc3NldElkU3RyAAAJAQ9nZXRBY3R1YWxBbW91bnQCBRRvdXRkYXRlZFdhbGxldEJvcnJvdwULYWN0dWFsQlJhdGUBEGdldERhaWx5UGVyY2VudHMCA2FweQhxdWFudGl0eQkAawMJAGsDCQBlAgkAoAMBCQB2BgkAtwICBQlTY2FsZThCaWcJALYCAQUDYXB5AAgJALoCAgUKU2NhbGUxNkJpZwUNeWVhckJsb2Nrc0JpZwAQABAFBERPV04FB1NjYWxlMTYFCWRheUJsb2NrcwUGU2NhbGU4BQhxdWFudGl0eQUGU2NhbGU4ARBnZXRBY2NvdW50SGVhbHRoAht0b3RhbFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkAwkAAAIFG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAAABQZTY2FsZTgJAGUCBQZTY2FsZTgJAGsDBRt0b3RhbFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QFBlNjYWxlOAUbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkAQlnZXROZXRBcHkDFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QWdG90YWxXYWxsZXRCb3Jyb3dJblVzZBZ0b3RhbFdhbGxldE1hcmdpbkluVXNkAwkAAAIFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QAAAAAAwkAZgIFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QAAAkAawMFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QFBlNjYWxlOAUWdG90YWxXYWxsZXRTdXBwbHlJblVzZAkAawMFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QFBlNjYWxlOAUWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAELYXNzZXRUb0pzb24CCmFzc2V0SWRTdHIIcXVhbnRpdHkEDSR0MDE2MzQzMTY1MzgDCQAAAgUKYXNzZXRJZFN0cgUFV2F2ZXMJAJQKAgAIAgVXQVZFUwQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQphc3NldElkU3RyCQCUCgIIBQVhc3NldAhkZWNpbWFscwgFBWFzc2V0BG5hbWUECGRlY2ltYWxzCAUNJHQwMTYzNDMxNjUzOAJfMQQEbmFtZQgFDSR0MDE2MzQzMTY1MzgCXzIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx7InF1YW50aXR5IjoJAKQDAQUIcXVhbnRpdHkCDCwiZGVjaW1hbHMiOgkApAMBBQhkZWNpbWFscwIJLCJuYW1lIjoiBQRuYW1lAggiLCJpZCI6IgUKYXNzZXRJZFN0cgICIn0BD2Ftb3VudFRvRGVjaW1hbAIGYW1vdW50CGRlY2ltYWxzCQCsAgIJAKwCAgkArAICCQCsAgICDHsicXVhbnRpdHkiOgkApAMBBQZhbW91bnQCDCwiZGVjaW1hbHMiOgkApAMBBQhkZWNpbWFscwITLCJuYW1lIjoiIiwiaWQiOiIifQENZ2V0TWFya2V0SnNvbgMLbWFya2V0SW5kZXgGd2FsbGV0BWRlYnVnBAltYXJrZXRTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIHbWFya2V0XwkApAMBBQttYXJrZXRJbmRleAQNbWFya2V0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbWFya2V0U3RyBAptYXJrZXROYW1lCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICDG1hcmtldF9uYW1lXwUJbWFya2V0U3RyBAZhY3RpdmUJAQt2YWx1ZU9yRWxzZQIJAJsIAgUNbWFya2V0QWRkcmVzcwIMc2V0dXBfYWN0aXZlBgQLc2V0dXBUb2tlbnMJAQ5nZXRTZXR1cFRva2VucwEFDW1hcmtldEFkZHJlc3MEC2Fzc2V0c0NvdW50CQCQAwEFC3NldHVwVG9rZW5zBA5sYXN0UmF0ZUhlaWdodAkBEWdldExhc3RSYXRlSGVpZ2h0AQUNbWFya2V0QWRkcmVzcwoBCmFzc2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAULYXNzZXRzQ291bnQFBWFjY3VtBAphc3NldElkU3RyCQCRAwIFC3NldHVwVG9rZW5zBQRuZXh0BAVwcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBAphc3NldFNjYWxlCQENZ2V0QXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZFNSYXRlCQEQZ2V0T3V0ZGF0ZWRTUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQKb3V0ZGF0ZWRVcgkBDWdldE91dGRhdGVkVXIEBRNvdXRkYXRlZFRvdGFsU3VwcGx5BRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZFNSYXRlBQ1vdXRkYXRlZEJSYXRlBARyYXRlCQEHZ2V0UmF0ZQMFCm91dGRhdGVkVXIFCmFzc2V0SWRTdHIFCW1hcmtldFN0cgQIaW50ZXJlc3QJAQtnZXRJbnRlcmVzdAEFBHJhdGUEBXNSYXRlCQEOZ2V0QWN0dWFsU1JhdGUEBQ5sYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFCm91dGRhdGVkVXIFDW91dGRhdGVkU1JhdGUEBWJSYXRlCQEOZ2V0QWN0dWFsQlJhdGUDBQ5sYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFDW91dGRhdGVkQlJhdGUEBnN1cHBseQkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxTdXBwbHkFBXNSYXRlBAZib3Jyb3cJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsQm9ycm93BQViUmF0ZQQLc3VwcGx5SW5Vc2QJAQhnZXRJblVzZAMFBnN1cHBseQUKYXNzZXRTY2FsZQUFcHJpY2UEC2JvcnJvd0luVXNkCQEIZ2V0SW5Vc2QDBQZib3Jyb3cFCmFzc2V0U2NhbGUFBXByaWNlBAhyZXNlcnZlcwkAZQIFBnN1cHBseQUGYm9ycm93BA1yZXNlcnZlc0luVXNkCQEIZ2V0SW5Vc2QDBQhyZXNlcnZlcwUKYXNzZXRTY2FsZQUFcHJpY2UEAnVyCQELZ2V0QWN0dWFsVXICBQZzdXBwbHkFBmJvcnJvdwQJc3VwcGx5QXB5CQEMZ2V0U3VwcGx5QXB5AgUEcmF0ZQUCdXIECWJvcnJvd0FweQkBDGdldEJvcnJvd0FweQEFBHJhdGUED21hcmtldEFzc2V0SnNvbgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7Agkic3VwcGx5IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFBnN1cHBseQIPLCJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFC3N1cHBseUluVXNkAgosImJvcnJvdyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQZib3Jyb3cCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQtib3Jyb3dJblVzZAIMLCJyZXNlcnZlcyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQhyZXNlcnZlcwIRLCJyZXNlcnZlc0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUNcmVzZXJ2ZXNJblVzZAIJLCJwcmljZSI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFBXByaWNlAg0sInN1cHBseUFweSI6CQEPYW1vdW50VG9EZWNpbWFsAgUJc3VwcGx5QXB5AAgCDSwiYm9ycm93QXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCBQlib3Jyb3dBcHkACAIULCJ1dGlsaXphdGlvblJhdGlvIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQJ1cgAIAgksInNSYXRlIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQVzUmF0ZQAQAgksImJSYXRlIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQViUmF0ZQAQAgF9CQCWCgQJAGQCCAUFYWNjdW0CXzEFC3N1cHBseUluVXNkCQBkAggFBWFjY3VtAl8yBQtib3Jyb3dJblVzZAkAZAIIBQVhY2N1bQJfMwUNcmVzZXJ2ZXNJblVzZAkAzQgCCAUFYWNjdW0CXzQFD21hcmtldEFzc2V0SnNvbgQNJHQwMTk5MzYyMDA0NAoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAAAAAAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQphc3NldHNGb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAQLc3VwcGx5SW5Vc2QIBQ0kdDAxOTkzNjIwMDQ0Al8xBAtib3Jyb3dJblVzZAgFDSR0MDE5OTM2MjAwNDQCXzIEDXJlc2VydmVzSW5Vc2QIBQ0kdDAxOTkzNjIwMDQ0Al8zBBBtYXJrZXRBc3NldHNKc29uCAUNJHQwMTk5MzYyMDA0NAJfNAQMbWFya2V0c0NvdW50CQERQGV4dHJOYXRpdmUoMTA1NSkBAgdtYXJrZXRzCgELbWFya2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUMbWFya2V0c0NvdW50BQVhY2N1bQQXY3VycmVudE1hcmtldEFkZHJlc3NTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIHbWFya2V0XwkApAMBBQRuZXh0BBFjdXJyZW50TWFya2V0TmFtZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAgxtYXJrZXRfbmFtZV8FF2N1cnJlbnRNYXJrZXRBZGRyZXNzU3RyBApzaW1wbGVKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCCJpbmRleCI6CQCkAwEFBG5leHQCCSwibmFtZSI6IgURY3VycmVudE1hcmtldE5hbWUCASICDywic3VwcGx5SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyAAACESwiYWNjb3VudEhlYWx0aCI6CQEPYW1vdW50VG9EZWNpbWFsAgAAAAgCAX0DCQAAAgUGd2FsbGV0AgAJAM0IAgUFYWNjdW0FCnNpbXBsZUpzb24EFGN1cnJlbnRNYXJrZXRBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBRdjdXJyZW50TWFya2V0QWRkcmVzc1N0cgQSY3VycmVudFNldHVwVG9rZW5zCQEOZ2V0U2V0dXBUb2tlbnMBBRRjdXJyZW50TWFya2V0QWRkcmVzcwQSY3VycmVudEFzc2V0c0NvdW50CQCQAwEFEmN1cnJlbnRTZXR1cFRva2VucwQWY3VycmVudE1hcmtldFNob3J0TmFtZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAhFtYXJrZXRfc2hvcnRuYW1lXwUXY3VycmVudE1hcmtldEFkZHJlc3NTdHIEB3NldHVwQ2YJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUUY3VycmVudE1hcmtldEFkZHJlc3MCCnNldHVwX2x0dnMCASwEB3NldHVwTHQJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUUY3VycmVudE1hcmtldEFkZHJlc3MCCXNldHVwX2x0cwIBLAQVY3VycmVudExhc3RSYXRlSGVpZ2h0CQERZ2V0TGFzdFJhdGVIZWlnaHQBBRRjdXJyZW50TWFya2V0QWRkcmVzcwoBEG1hcmtldEFzc2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUSY3VycmVudEFzc2V0c0NvdW50BQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBRJjdXJyZW50U2V0dXBUb2tlbnMFBG5leHQEAmNmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBDZgUEbmV4dAQCbHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cEx0BQRuZXh0BAVwcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBAphc3NldFNjYWxlCQENZ2V0QXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxCb3Jyb3cJARZnZXRPdXRkYXRlZFRvdGFsQm9ycm93AgUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkU1JhdGUJARBnZXRPdXRkYXRlZFNSYXRlAgUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIECm91dGRhdGVkVXIJAQ1nZXRPdXRkYXRlZFVyBAUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwUNb3V0ZGF0ZWRTUmF0ZQUNb3V0ZGF0ZWRCUmF0ZQQEcmF0ZQkBB2dldFJhdGUDBQpvdXRkYXRlZFVyBQphc3NldElkU3RyBQltYXJrZXRTdHIECGludGVyZXN0CQELZ2V0SW50ZXJlc3QBBQRyYXRlBAVzUmF0ZQkBDmdldEFjdHVhbFNSYXRlBAUVY3VycmVudExhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUKb3V0ZGF0ZWRVcgUNb3V0ZGF0ZWRTUmF0ZQQFYlJhdGUJAQ5nZXRBY3R1YWxCUmF0ZQMFFWN1cnJlbnRMYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFDW91dGRhdGVkQlJhdGUEDHdhbGxldFN1cHBseQkBD2dldFdhbGxldFN1cHBseQQFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFBXNSYXRlBBF3YWxsZXRTdXBwbHlJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0U3VwcGx5BQphc3NldFNjYWxlBQVwcmljZQQMd2FsbGV0Qm9ycm93CQEPZ2V0V2FsbGV0Qm9ycm93BAUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIFBndhbGxldAUFYlJhdGUEEXdhbGxldEJvcnJvd0luVXNkCQEIZ2V0SW5Vc2QDBQx3YWxsZXRCb3Jyb3cFCmFzc2V0U2NhbGUFBXByaWNlBBZ3YWxsZXRCb3Jyb3dMaW1pdEluVXNkCQBrAwURd2FsbGV0U3VwcGx5SW5Vc2QFAmNmBQZTY2FsZTgEFndhbGxldEJvcnJvd1VzYWdlSW5Vc2QJAGsDBRF3YWxsZXRCb3Jyb3dJblVzZAUGU2NhbGU4BQJsdAkAlgoECQBkAggFBWFjY3VtAl8xBRF3YWxsZXRTdXBwbHlJblVzZAkAZAIIBQVhY2N1bQJfMgURd2FsbGV0Qm9ycm93SW5Vc2QJAGQCCAUFYWNjdW0CXzMFFndhbGxldEJvcnJvd0xpbWl0SW5Vc2QJAGQCCAUFYWNjdW0CXzQFFndhbGxldEJvcnJvd1VzYWdlSW5Vc2QEDSR0MDIzNjAwMjM3NjAKAAIkbAUFYXJyMTIKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAAAAAAAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQbWFya2V0QXNzZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QIBQ0kdDAyMzYwMDIzNzYwAl8xBBZ0b3RhbFdhbGxldEJvcnJvd0luVXNkCAUNJHQwMjM2MDAyMzc2MAJfMgQbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkCAUNJHQwMjM2MDAyMzc2MAJfMwQbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkCAUNJHQwMjM2MDAyMzc2MAJfNAQNYWNjb3VudEhlYWx0aAkBEGdldEFjY291bnRIZWFsdGgCBRt0b3RhbFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QFG3RvdGFsV2FsbGV0Qm9ycm93VXNhZ2VJblVzZAQIZnVsbEpzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCCJpbmRleCI6CQCkAwEFBG5leHQCCSwibmFtZSI6IgUWY3VycmVudE1hcmtldFNob3J0TmFtZQIBIgIPLCJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkAhEsImFjY291bnRIZWFsdGgiOgkBD2Ftb3VudFRvRGVjaW1hbAIFDWFjY291bnRIZWFsdGgACAIBfQkAzQgCBQVhY2N1bQUIZnVsbEpzb24EC21hcmtldHNKc29uCgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQttYXJrZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEBGpzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7AggiaW5kZXgiOgkApAMBBQttYXJrZXRJbmRleAIJLCJuYW1lIjoiBQptYXJrZXROYW1lAgEiAgwsImFkZHJlc3MiOiIFCW1hcmtldFN0cgIBIgIKLCJhY3RpdmUiOgkApQMBBQZhY3RpdmUCDywic3VwcGx5SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQtzdXBwbHlJblVzZAIPLCJib3Jyb3dJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFC2JvcnJvd0luVXNkAhEsInJlc2VydmVzSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQ1yZXNlcnZlc0luVXNkAgssImFzc2V0cyI6WwkAuwkCBRBtYXJrZXRBc3NldHNKc29uAgEsAgFdAgwsIm1hcmtldHMiOlsJALsJAgULbWFya2V0c0pzb24CASwCAV0CAX0DBQVkZWJ1ZwkAAgEFBGpzb24FBGpzb24BC2dldE1lbnVKc29uAQVkZWJ1ZwQMbWFya2V0c0NvdW50CQERQGV4dHJOYXRpdmUoMTA1NSkBAgdtYXJrZXRzCgELbWFya2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUMbWFya2V0c0NvdW50BQVhY2N1bQQJbWFya2V0U3RyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICB21hcmtldF8JAKQDAQUEbmV4dAQNbWFya2V0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbWFya2V0U3RyBAtzZXR1cFRva2VucwkBDmdldFNldHVwVG9rZW5zAQUNbWFya2V0QWRkcmVzcwQLYXNzZXRzQ291bnQJAJADAQULc2V0dXBUb2tlbnMEDmxhc3RSYXRlSGVpZ2h0CQERZ2V0TGFzdFJhdGVIZWlnaHQBBQ1tYXJrZXRBZGRyZXNzCgEKYXNzZXRzRm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQthc3NldHNDb3VudAUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgULc2V0dXBUb2tlbnMFBG5leHQEBXByaWNlCQENZ2V0VG9rZW5QcmljZQEFCmFzc2V0SWRTdHIECmFzc2V0U2NhbGUJAQ1nZXRBc3NldFNjYWxlAQUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbFN1cHBseQkBFmdldE91dGRhdGVkVG90YWxTdXBwbHkCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsQm9ycm93CQEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkU1JhdGUJARBnZXRPdXRkYXRlZFNSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRCUmF0ZQkBEGdldE91dGRhdGVkQlJhdGUCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBApvdXRkYXRlZFVyCQENZ2V0T3V0ZGF0ZWRVcgQFE291dGRhdGVkVG90YWxTdXBwbHkFE291dGRhdGVkVG90YWxCb3Jyb3cFDW91dGRhdGVkU1JhdGUFDW91dGRhdGVkQlJhdGUEBHJhdGUJAQdnZXRSYXRlAwUKb3V0ZGF0ZWRVcgUKYXNzZXRJZFN0cgUJbWFya2V0U3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUEcmF0ZQQFc1JhdGUJAQ5nZXRBY3R1YWxTUmF0ZQQFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUKb3V0ZGF0ZWRVcgUNb3V0ZGF0ZWRTUmF0ZQQFYlJhdGUJAQ5nZXRBY3R1YWxCUmF0ZQMFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUNb3V0ZGF0ZWRCUmF0ZQQGc3VwcGx5CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUFc1JhdGUEBmJvcnJvdwkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxCb3Jyb3cFBWJSYXRlBAtzdXBwbHlJblVzZAkBCGdldEluVXNkAwUGc3VwcGx5BQphc3NldFNjYWxlBQVwcmljZQQLYm9ycm93SW5Vc2QJAQhnZXRJblVzZAMFBmJvcnJvdwUKYXNzZXRTY2FsZQUFcHJpY2UECHJlc2VydmVzCQBlAgUGc3VwcGx5BQZib3Jyb3cEDXJlc2VydmVzSW5Vc2QJAQhnZXRJblVzZAMFCHJlc2VydmVzBQphc3NldFNjYWxlBQVwcmljZQQPbWFya2V0QXNzZXRKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7AggiYXNzZXQiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgAAAgksInByaWNlIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUFcHJpY2UCCSwic1JhdGUiOgkBD2Ftb3VudFRvRGVjaW1hbAIFBXNSYXRlABACCSwiYlJhdGUiOgkBD2Ftb3VudFRvRGVjaW1hbAIFBWJSYXRlABACAX0JAJYKBAkAZAIIBQVhY2N1bQJfMQULc3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFC2JvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBQ1yZXNlcnZlc0luVXNkCQDNCAIIBQVhY2N1bQJfNAUPbWFya2V0QXNzZXRKc29uBA0kdDAyNzY3OTI3Nzg3CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAAAAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmFzc2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBAtzdXBwbHlJblVzZAgFDSR0MDI3Njc5Mjc3ODcCXzEEC2JvcnJvd0luVXNkCAUNJHQwMjc2NzkyNzc4NwJfMgQNcmVzZXJ2ZXNJblVzZAgFDSR0MDI3Njc5Mjc3ODcCXzMEEG1hcmtldEFzc2V0c0pzb24IBQ0kdDAyNzY3OTI3Nzg3Al80BAptYXJrZXRKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCyJhZGRyZXNzIjoiBQltYXJrZXRTdHICASICCywiYXNzZXRzIjpbCQC7CQIFEG1hcmtldEFzc2V0c0pzb24CASwCAV0CAX0JAJYKBAkAZAIIBQVhY2N1bQJfMQULc3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFC2JvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBQ1yZXNlcnZlc0luVXNkCQDNCAIIBQVhY2N1bQJfNAUKbWFya2V0SnNvbgQNJHQwMjgxNzgyODI5NwoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAAAAAAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQttYXJrZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEEHRvdGFsU3VwcGx5SW5Vc2QIBQ0kdDAyODE3ODI4Mjk3Al8xBBB0b3RhbEJvcnJvd0luVXNkCAUNJHQwMjgxNzgyODI5NwJfMgQSdG90YWxSZXNlcnZlc0luVXNkCAUNJHQwMjgxNzgyODI5NwJfMwQLbWFya2V0c0pzb24IBQ0kdDAyODE3ODI4Mjk3Al80BARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCDiJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEHRvdGFsU3VwcGx5SW5Vc2QCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRB0b3RhbEJvcnJvd0luVXNkAhEsInJlc2VydmVzSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRJ0b3RhbFJlc2VydmVzSW5Vc2QCDCwibWFya2V0cyI6WwkAuwkCBQttYXJrZXRzSnNvbgIBLAIBXQIBfQMFBWRlYnVnCQACAQUEanNvbgUEanNvbgENZ2V0V2FsbGV0SnNvbgMLbWFya2V0SW5kZXgGd2FsbGV0BWRlYnVnBAltYXJrZXRTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIHbWFya2V0XwkApAMBBQttYXJrZXRJbmRleAQNbWFya2V0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbWFya2V0U3RyBAptYXJrZXROYW1lCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICDG1hcmtldF9uYW1lXwUJbWFya2V0U3RyBAxtYXJrZXRzQ291bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQECB21hcmtldHMKAQttYXJrZXRzRm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQxtYXJrZXRzQ291bnQFBWFjY3VtBBdjdXJyZW50TWFya2V0QWRkcmVzc1N0cgkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAgdtYXJrZXRfCQCkAwEFBG5leHQEEWN1cnJlbnRNYXJrZXROYW1lCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICDG1hcmtldF9uYW1lXwUXY3VycmVudE1hcmtldEFkZHJlc3NTdHIEFGN1cnJlbnRNYXJrZXRBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBRdjdXJyZW50TWFya2V0QWRkcmVzc1N0cgQSY3VycmVudFNldHVwVG9rZW5zCQEOZ2V0U2V0dXBUb2tlbnMBBRRjdXJyZW50TWFya2V0QWRkcmVzcwQSY3VycmVudEFzc2V0c0NvdW50CQCQAwEFEmN1cnJlbnRTZXR1cFRva2VucwQWY3VycmVudE1hcmtldFNob3J0TmFtZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAhFtYXJrZXRfc2hvcnRuYW1lXwUXY3VycmVudE1hcmtldEFkZHJlc3NTdHIEB3NldHVwQ2YJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUUY3VycmVudE1hcmtldEFkZHJlc3MCCnNldHVwX2x0dnMCASwEB3NldHVwTHQJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUUY3VycmVudE1hcmtldEFkZHJlc3MCCXNldHVwX2x0cwIBLAQVY3VycmVudExhc3RSYXRlSGVpZ2h0CQERZ2V0TGFzdFJhdGVIZWlnaHQBBRRjdXJyZW50TWFya2V0QWRkcmVzcwoBEG1hcmtldEFzc2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUSY3VycmVudEFzc2V0c0NvdW50BQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBRJjdXJyZW50U2V0dXBUb2tlbnMFBG5leHQEAmNmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBDZgUEbmV4dAQCbHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cEx0BQRuZXh0BAVwcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBAphc3NldFNjYWxlCQENZ2V0QXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxCb3Jyb3cJARZnZXRPdXRkYXRlZFRvdGFsQm9ycm93AgUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkU1JhdGUJARBnZXRPdXRkYXRlZFNSYXRlAgUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIECm91dGRhdGVkVXIJAQ1nZXRPdXRkYXRlZFVyBAUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwUNb3V0ZGF0ZWRTUmF0ZQUNb3V0ZGF0ZWRCUmF0ZQQEcmF0ZQkBB2dldFJhdGUDBQpvdXRkYXRlZFVyBQphc3NldElkU3RyBQltYXJrZXRTdHIECGludGVyZXN0CQELZ2V0SW50ZXJlc3QBBQRyYXRlBAVzUmF0ZQkBDmdldEFjdHVhbFNSYXRlBAUVY3VycmVudExhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUKb3V0ZGF0ZWRVcgUNb3V0ZGF0ZWRTUmF0ZQQFYlJhdGUJAQ5nZXRBY3R1YWxCUmF0ZQMFFWN1cnJlbnRMYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFDW91dGRhdGVkQlJhdGUEBnN1cHBseQkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxTdXBwbHkFBXNSYXRlBAZib3Jyb3cJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsQm9ycm93BQViUmF0ZQQCdXIJAQtnZXRBY3R1YWxVcgIFBnN1cHBseQUGYm9ycm93BAlzdXBwbHlBcHkJAQxnZXRTdXBwbHlBcHkCBQRyYXRlBQJ1cgQJYm9ycm93QXB5CQEMZ2V0Qm9ycm93QXB5AQUEcmF0ZQQMd2FsbGV0U3VwcGx5CQEPZ2V0V2FsbGV0U3VwcGx5BAUUY3VycmVudE1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIFBndhbGxldAUFc1JhdGUEEXdhbGxldFN1cHBseUluVXNkCQEIZ2V0SW5Vc2QDBQx3YWxsZXRTdXBwbHkFCmFzc2V0U2NhbGUFBXByaWNlBAx3YWxsZXRCb3Jyb3cJAQ9nZXRXYWxsZXRCb3Jyb3cEBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgUGd2FsbGV0BQViUmF0ZQQRd2FsbGV0Qm9ycm93SW5Vc2QJAQhnZXRJblVzZAMFDHdhbGxldEJvcnJvdwUKYXNzZXRTY2FsZQUFcHJpY2UEFndhbGxldEJvcnJvd0xpbWl0SW5Vc2QJAGsDBRF3YWxsZXRTdXBwbHlJblVzZAUCY2YFBlNjYWxlOAQWd2FsbGV0Qm9ycm93VXNhZ2VJblVzZAkAawMFEXdhbGxldEJvcnJvd0luVXNkBQZTY2FsZTgFAmx0BBF3YWxsZXREYWlseUluY29tZQkBEGdldERhaWx5UGVyY2VudHMCBQlzdXBwbHlBcHkFDHdhbGxldFN1cHBseQQWd2FsbGV0RGFpbHlJbmNvbWVJblVzZAkBCGdldEluVXNkAwURd2FsbGV0RGFpbHlJbmNvbWUFCmFzc2V0U2NhbGUFBXByaWNlBBd3YWxsZXREYWlseUxvYW5JbnRlcmVzdAkBEGdldERhaWx5UGVyY2VudHMCBQlib3Jyb3dBcHkFDHdhbGxldEJvcnJvdwQcd2FsbGV0RGFpbHlMb2FuSW50ZXJlc3RJblVzZAkBCGdldEluVXNkAwUXd2FsbGV0RGFpbHlMb2FuSW50ZXJlc3QFCmFzc2V0U2NhbGUFBXByaWNlBBF3YWxsZXRNYXJnaW5JblVzZAkAZQIJAGsDBRF3YWxsZXRTdXBwbHlJblVzZAUJc3VwcGx5QXB5BQZTY2FsZTgJAGsDBRF3YWxsZXRCb3Jyb3dJblVzZAUJYm9ycm93QXB5BQZTY2FsZTgJAJkKBwkAZAIIBQVhY2N1bQJfMQURd2FsbGV0U3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFEXdhbGxldEJvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBRZ3YWxsZXRCb3Jyb3dMaW1pdEluVXNkCQBkAggFBWFjY3VtAl80BRZ3YWxsZXRCb3Jyb3dVc2FnZUluVXNkCQBkAggFBWFjY3VtAl81BRZ3YWxsZXREYWlseUluY29tZUluVXNkCQBkAggFBWFjY3VtAl82BRx3YWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkCQBkAggFBWFjY3VtAl83BRF3YWxsZXRNYXJnaW5JblVzZAQNJHQwMzMxMDYzMzQ2MQoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJkKBwAAAAAAAAAAAAAAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARBtYXJrZXRBc3NldHNGb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAQWdG90YWxXYWxsZXRTdXBwbHlJblVzZAgFDSR0MDMzMTA2MzM0NjECXzEEFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QIBQ0kdDAzMzEwNjMzNDYxAl8yBBt0b3RhbFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QIBQ0kdDAzMzEwNjMzNDYxAl8zBBt0b3RhbFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QIBQ0kdDAzMzEwNjMzNDYxAl80BBt0b3RhbFdhbGxldERhaWx5SW5jb21lSW5Vc2QIBQ0kdDAzMzEwNjMzNDYxAl81BCF0b3RhbFdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QIBQ0kdDAzMzEwNjMzNDYxAl82BBZ0b3RhbFdhbGxldE1hcmdpbkluVXNkCAUNJHQwMzMxMDYzMzQ2MQJfNwQXdG90YWxXYWxsZXRCYWREZWJ0SW5Vc2QDCQBmAgUWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAUWdG90YWxXYWxsZXRTdXBwbHlJblVzZAkAZQIFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QAAAQNYWNjb3VudEhlYWx0aAkBEGdldEFjY291bnRIZWFsdGgCBRt0b3RhbFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QFG3RvdGFsV2FsbGV0Qm9ycm93VXNhZ2VJblVzZAQGbmV0QXB5CQEJZ2V0TmV0QXB5AwUWdG90YWxXYWxsZXRTdXBwbHlJblVzZAUWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAUWdG90YWxXYWxsZXRNYXJnaW5JblVzZAQLbWFya2V0c0pzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCCJpbmRleCI6CQCkAwEFBG5leHQCCSwibmFtZSI6IgUWY3VycmVudE1hcmtldFNob3J0TmFtZQIBIgIPLCJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkAhEsImFjY291bnRIZWFsdGgiOgkBD2Ftb3VudFRvRGVjaW1hbAIFDWFjY291bnRIZWFsdGgACAIBfQoBEHdhbGxldEFzc2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUSY3VycmVudEFzc2V0c0NvdW50BQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBRJjdXJyZW50U2V0dXBUb2tlbnMFBG5leHQEBXByaWNlCQENZ2V0VG9rZW5QcmljZQEFCmFzc2V0SWRTdHIECmFzc2V0U2NhbGUJAQ1nZXRBc3NldFNjYWxlAQUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbFN1cHBseQkBFmdldE91dGRhdGVkVG90YWxTdXBwbHkCBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRTUmF0ZQkBEGdldE91dGRhdGVkU1JhdGUCBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRCUmF0ZQkBEGdldE91dGRhdGVkQlJhdGUCBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQKb3V0ZGF0ZWRVcgkBDWdldE91dGRhdGVkVXIEBRNvdXRkYXRlZFRvdGFsU3VwcGx5BRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZFNSYXRlBQ1vdXRkYXRlZEJSYXRlBARyYXRlCQEHZ2V0UmF0ZQMFCm91dGRhdGVkVXIFCmFzc2V0SWRTdHIFCW1hcmtldFN0cgQIaW50ZXJlc3QJAQtnZXRJbnRlcmVzdAEFBHJhdGUEBXNSYXRlCQEOZ2V0QWN0dWFsU1JhdGUEBRVjdXJyZW50TGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQpvdXRkYXRlZFVyBQ1vdXRkYXRlZFNSYXRlBAViUmF0ZQkBDmdldEFjdHVhbEJSYXRlAwUVY3VycmVudExhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUNb3V0ZGF0ZWRCUmF0ZQQGc3VwcGx5CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUFc1JhdGUEBmJvcnJvdwkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxCb3Jyb3cFBWJSYXRlBAJ1cgkBC2dldEFjdHVhbFVyAgUGc3VwcGx5BQZib3Jyb3cECXN1cHBseUFweQkBDGdldFN1cHBseUFweQIFBHJhdGUFAnVyBAlib3Jyb3dBcHkJAQxnZXRCb3Jyb3dBcHkBBQRyYXRlBAx3YWxsZXRTdXBwbHkJAQ9nZXRXYWxsZXRTdXBwbHkEBRRjdXJyZW50TWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgUGd2FsbGV0BQVzUmF0ZQQRd2FsbGV0U3VwcGx5SW5Vc2QJAQhnZXRJblVzZAMFDHdhbGxldFN1cHBseQUKYXNzZXRTY2FsZQUFcHJpY2UEDHdhbGxldEJvcnJvdwkBD2dldFdhbGxldEJvcnJvdwQFFGN1cnJlbnRNYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFBWJSYXRlBBF3YWxsZXRCb3Jyb3dJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0Qm9ycm93BQphc3NldFNjYWxlBQVwcmljZQQRd2FsbGV0RGFpbHlJbmNvbWUJARBnZXREYWlseVBlcmNlbnRzAgUJc3VwcGx5QXB5BQx3YWxsZXRTdXBwbHkEFndhbGxldERhaWx5SW5jb21lSW5Vc2QJAQhnZXRJblVzZAMFEXdhbGxldERhaWx5SW5jb21lBQphc3NldFNjYWxlBQVwcmljZQQXd2FsbGV0RGFpbHlMb2FuSW50ZXJlc3QJARBnZXREYWlseVBlcmNlbnRzAgUJYm9ycm93QXB5BQx3YWxsZXRCb3Jyb3cEHHdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QJAQhnZXRJblVzZAMFF3dhbGxldERhaWx5TG9hbkludGVyZXN0BQphc3NldFNjYWxlBQVwcmljZQQQc3VwcGx5QXNzZXRzSnNvbgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7AgkiYW1vdW50IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFDHdhbGxldFN1cHBseQIPLCJhbW91bnRJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEXdhbGxldFN1cHBseUluVXNkAgksInByaWNlIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUFcHJpY2UCBywiYXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCBQlzdXBwbHlBcHkACAIRLCJkYWlseVBlcmNlbnRzIjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIFEXdhbGxldERhaWx5SW5jb21lAhYsImRhaWx5UGVyY2VudHNJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFFndhbGxldERhaWx5SW5jb21lSW5Vc2QCAX0EEGJvcnJvd0Fzc2V0c0pzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewIJImFtb3VudCI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQx3YWxsZXRCb3Jyb3cCDywiYW1vdW50SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRF3YWxsZXRCb3Jyb3dJblVzZAIJLCJwcmljZSI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFBXByaWNlAgcsImFweSI6CQEPYW1vdW50VG9EZWNpbWFsAgUJYm9ycm93QXB5AAgCESwiZGFpbHlQZXJjZW50cyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBRd3YWxsZXREYWlseUxvYW5JbnRlcmVzdAIWLCJkYWlseVBlcmNlbnRzSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRx3YWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkAgF9CQCUCgIJAM0IAggFBWFjY3VtAl8xBRBzdXBwbHlBc3NldHNKc29uCQDNCAIIBQVhY2N1bQJfMgUQYm9ycm93QXNzZXRzSnNvbgQNJHQwMzc4NDgzNzkzNAoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHdhbGxldEFzc2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBBBzdXBwbHlBc3NldHNKc29uCAUNJHQwMzc4NDgzNzkzNAJfMQQQYm9ycm93QXNzZXRzSnNvbggFDSR0MDM3ODQ4Mzc5MzQCXzIDCQAAAgULbWFya2V0SW5kZXgFBG5leHQJAKEKDwkAZAIIBQVhY2N1bQJfMQUWdG90YWxXYWxsZXRTdXBwbHlJblVzZAkAZAIIBQVhY2N1bQJfMgUWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAkAZAIIBQVhY2N1bQJfMwUXdG90YWxXYWxsZXRCYWREZWJ0SW5Vc2QJAGQCCAUFYWNjdW0CXzQFG3RvdGFsV2FsbGV0RGFpbHlJbmNvbWVJblVzZAkAZAIIBQVhY2N1bQJfNQUhdG90YWxXYWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkBRd0b3RhbFdhbGxldEJhZERlYnRJblVzZAUbdG90YWxXYWxsZXREYWlseUluY29tZUluVXNkBSF0b3RhbFdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QFDWFjY291bnRIZWFsdGgFBm5ldEFweQkAzQgCCAUFYWNjdW0DXzEzBQttYXJrZXRzSnNvbgUQc3VwcGx5QXNzZXRzSnNvbgUQYm9ycm93QXNzZXRzSnNvbgkAoQoPCQBkAggFBWFjY3VtAl8xBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkCQBkAggFBWFjY3VtAl8yBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBRd0b3RhbFdhbGxldEJhZERlYnRJblVzZAkAZAIIBQVhY2N1bQJfNAUbdG90YWxXYWxsZXREYWlseUluY29tZUluVXNkCQBkAggFBWFjY3VtAl81BSF0b3RhbFdhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QIBQVhY2N1bQJfNggFBWFjY3VtAl83CAUFYWNjdW0CXzgIBQVhY2N1bQJfOQgFBWFjY3VtA18xMAgFBWFjY3VtA18xMQgFBWFjY3VtA18xMgkAzQgCCAUFYWNjdW0DXzEzBQttYXJrZXRzSnNvbggFBWFjY3VtA18xNAgFBWFjY3VtA18xNQQNJHQwMzkzOTEzOTg3NQoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAKEKDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUDbmlsBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELbWFya2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBBZ0b3RhbFdhbGxldFN1cHBseUluVXNkCAUNJHQwMzkzOTEzOTg3NQJfMQQWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAgFDSR0MDM5MzkxMzk4NzUCXzIEF3RvdGFsV2FsbGV0QmFkRGVidEluVXNkCAUNJHQwMzkzOTEzOTg3NQJfMwQbdG90YWxXYWxsZXREYWlseUluY29tZUluVXNkCAUNJHQwMzkzOTEzOTg3NQJfNAQhdG90YWxXYWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkCAUNJHQwMzkzOTEzOTg3NQJfNQQRd2FsbGV0U3VwcGx5SW5Vc2QIBQ0kdDAzOTM5MTM5ODc1Al82BBF3YWxsZXRCb3Jyb3dJblVzZAgFDSR0MDM5MzkxMzk4NzUCXzcEEndhbGxldEJhZERlYnRJblVzZAgFDSR0MDM5MzkxMzk4NzUCXzgEFndhbGxldERhaWx5SW5jb21lSW5Vc2QIBQ0kdDAzOTM5MTM5ODc1Al85BBx3YWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkCAUNJHQwMzkzOTEzOTg3NQNfMTAEE3dhbGxldEFjY291bnRIZWFsdGgIBQ0kdDAzOTM5MTM5ODc1A18xMQQMd2FsbGV0TmV0QXB5CAUNJHQwMzkzOTEzOTg3NQNfMTIEC21hcmtldHNKc29uCAUNJHQwMzkzOTEzOTg3NQNfMTMEEHN1cHBseUFzc2V0c0pzb24IBQ0kdDAzOTM5MTM5ODc1A18xNAQQYm9ycm93QXNzZXRzSnNvbggFDSR0MDM5MzkxMzk4NzUDXzE1BARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7Ag4ibWFya2V0SW5kZXgiOgkApAMBBQttYXJrZXRJbmRleAIJLCJuYW1lIjoiBQptYXJrZXROYW1lAgEiAhQsInRvdGFsU3VwcGx5SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkAhQsInRvdGFsQm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkAhUsInRvdGFsQmFkRGVidEluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUXdG90YWxXYWxsZXRCYWREZWJ0SW5Vc2QCGSwidG90YWxEYWlseUluY29tZUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUbdG90YWxXYWxsZXREYWlseUluY29tZUluVXNkAh8sInRvdGFsRGFpbHlMb2FuSW50ZXJlc3RJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFIXRvdGFsV2FsbGV0RGFpbHlMb2FuSW50ZXJlc3RJblVzZAIPLCJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEXdhbGxldFN1cHBseUluVXNkAg8sImJvcnJvd0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgURd2FsbGV0Qm9ycm93SW5Vc2QCECwiYmFkRGVidEluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUSd2FsbGV0QmFkRGVidEluVXNkAhQsImRhaWx5SW5jb21lSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRZ3YWxsZXREYWlseUluY29tZUluVXNkAhosImRhaWx5TG9hbkludGVyZXN0SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRx3YWxsZXREYWlseUxvYW5JbnRlcmVzdEluVXNkAhEsImFjY291bnRIZWFsdGgiOgkBD2Ftb3VudFRvRGVjaW1hbAIFE3dhbGxldEFjY291bnRIZWFsdGgACAIKLCJuZXRBcHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIFDHdhbGxldE5ldEFweQAIAhEsInN1cHBseUFzc2V0cyI6WwkAuwkCBRBzdXBwbHlBc3NldHNKc29uAgEsAgFdAhEsImJvcnJvd0Fzc2V0cyI6WwkAuwkCBRBib3Jyb3dBc3NldHNKc29uAgEsAgFdAgwsIm1hcmtldHMiOlsJALsJAgULbWFya2V0c0pzb24CASwCAV0CAX0DBQVkZWJ1ZwkAAgEFBGpzb24FBGpzb24BF2dldFdhbGxldE9wZXJhdGlvbnNKc29uBAttYXJrZXRJbmRleAphc3NldElkU3RyBndhbGxldAVkZWJ1ZwQJbWFya2V0U3RyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICB21hcmtldF8JAKQDAQULbWFya2V0SW5kZXgEDW1hcmtldEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCW1hcmtldFN0cgQKbWFya2V0TmFtZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAgxtYXJrZXRfbmFtZV8FCW1hcmtldFN0cgQGYWN0aXZlCQELdmFsdWVPckVsc2UCCQCbCAIFDW1hcmtldEFkZHJlc3MCDHNldHVwX2FjdGl2ZQYEC3NldHVwVG9rZW5zCQEOZ2V0U2V0dXBUb2tlbnMBBQ1tYXJrZXRBZGRyZXNzBAdzZXR1cENmCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCnNldHVwX2x0dnMCASwEB3NldHVwTHQJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIJc2V0dXBfbHRzAgEsBAxzZXR1cFBlbmFsdHkJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIPc2V0dXBfcGVuYWx0aWVzAgEsBAphc3NldEluZGV4CQENZ2V0QXNzZXRJbmRleAIFC3NldHVwVG9rZW5zBQphc3NldElkU3RyBAJjZgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwQ2YFCmFzc2V0SW5kZXgEAmx0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBMdAUKYXNzZXRJbmRleAQHcGVuYWx0eQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDHNldHVwUGVuYWx0eQUKYXNzZXRJbmRleAQLYXNzZXRzQ291bnQJAJADAQULc2V0dXBUb2tlbnMEDmxhc3RSYXRlSGVpZ2h0CQERZ2V0TGFzdFJhdGVIZWlnaHQBBQ1tYXJrZXRBZGRyZXNzBAVwcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBAphc3NldFNjYWxlCQENZ2V0QXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZFNSYXRlCQEQZ2V0T3V0ZGF0ZWRTUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQKb3V0ZGF0ZWRVcgkBDWdldE91dGRhdGVkVXIEBRNvdXRkYXRlZFRvdGFsU3VwcGx5BRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZFNSYXRlBQ1vdXRkYXRlZEJSYXRlBARyYXRlCQEHZ2V0UmF0ZQMFCm91dGRhdGVkVXIFCmFzc2V0SWRTdHIFCW1hcmtldFN0cgQIaW50ZXJlc3QJAQtnZXRJbnRlcmVzdAEFBHJhdGUEBXNSYXRlCQEOZ2V0QWN0dWFsU1JhdGUEBQ5sYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFCm91dGRhdGVkVXIFDW91dGRhdGVkU1JhdGUEBWJSYXRlCQEOZ2V0QWN0dWFsQlJhdGUDBQ5sYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFDW91dGRhdGVkQlJhdGUEBnN1cHBseQkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxTdXBwbHkFBXNSYXRlBAZib3Jyb3cJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsQm9ycm93BQViUmF0ZQQLc3VwcGx5SW5Vc2QJAQhnZXRJblVzZAMFBnN1cHBseQUKYXNzZXRTY2FsZQUFcHJpY2UEC2JvcnJvd0luVXNkCQEIZ2V0SW5Vc2QDBQZib3Jyb3cFCmFzc2V0U2NhbGUFBXByaWNlBAhyZXNlcnZlcwkAZQIFBnN1cHBseQUGYm9ycm93BA1yZXNlcnZlc0luVXNkCQEIZ2V0SW5Vc2QDBQhyZXNlcnZlcwUKYXNzZXRTY2FsZQUFcHJpY2UEAnVyCQELZ2V0QWN0dWFsVXICBQZzdXBwbHkFBmJvcnJvdwQJc3VwcGx5QXB5CQEMZ2V0U3VwcGx5QXB5AgUEcmF0ZQUCdXIECWJvcnJvd0FweQkBDGdldEJvcnJvd0FweQEFBHJhdGUECW1heFN1cHBseQkBDGdldE1heFN1cHBseQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDHdhbGxldFN1cHBseQkBD2dldFdhbGxldFN1cHBseQQFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIFBndhbGxldAUFc1JhdGUEEXdhbGxldFN1cHBseUluVXNkCQEIZ2V0SW5Vc2QDBQx3YWxsZXRTdXBwbHkFCmFzc2V0U2NhbGUFBXByaWNlBBF3YWxsZXREYWlseUluY29tZQkBEGdldERhaWx5UGVyY2VudHMCBQlzdXBwbHlBcHkFDHdhbGxldFN1cHBseQQWd2FsbGV0RGFpbHlJbmNvbWVJblVzZAkBCGdldEluVXNkAwURd2FsbGV0RGFpbHlJbmNvbWUFCmFzc2V0U2NhbGUFBXByaWNlBAx3YWxsZXRCb3Jyb3cJAQ9nZXRXYWxsZXRCb3Jyb3cEBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFBWJSYXRlBBF3YWxsZXRCb3Jyb3dJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0Qm9ycm93BQphc3NldFNjYWxlBQVwcmljZQQXd2FsbGV0RGFpbHlMb2FuUGVyY2VudHMJARBnZXREYWlseVBlcmNlbnRzAgUJYm9ycm93QXB5BQx3YWxsZXRCb3Jyb3cEHHdhbGxldERhaWx5TG9hblBlcmNlbnRzSW5Vc2QJAQhnZXRJblVzZAMFF3dhbGxldERhaWx5TG9hblBlcmNlbnRzBQphc3NldFNjYWxlBQVwcmljZQoBCmFzc2V0c0ZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAULYXNzZXRzQ291bnQFBWFjY3VtBBFjdXJyZW50QXNzZXRJZFN0cgkAkQMCBQtzZXR1cFRva2VucwUEbmV4dAQJY3VycmVudENmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBDZgUEbmV4dAQJY3VycmVudEx0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBMdAUEbmV4dAQMY3VycmVudFByaWNlCQENZ2V0VG9rZW5QcmljZQEFEWN1cnJlbnRBc3NldElkU3RyBBFjdXJyZW50QXNzZXRTY2FsZQkBDWdldEFzc2V0U2NhbGUBBRFjdXJyZW50QXNzZXRJZFN0cgQaY3VycmVudE91dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUNbWFya2V0QWRkcmVzcwURY3VycmVudEFzc2V0SWRTdHIEGmN1cnJlbnRPdXRkYXRlZFRvdGFsQm9ycm93CQEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwIFDW1hcmtldEFkZHJlc3MFEWN1cnJlbnRBc3NldElkU3RyBBRjdXJyZW50T3V0ZGF0ZWRTUmF0ZQkBEGdldE91dGRhdGVkU1JhdGUCBQ1tYXJrZXRBZGRyZXNzBRFjdXJyZW50QXNzZXRJZFN0cgQUY3VycmVudE91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUNbWFya2V0QWRkcmVzcwURY3VycmVudEFzc2V0SWRTdHIEEWN1cnJlbnRPdXRkYXRlZFVyCQENZ2V0T3V0ZGF0ZWRVcgQFGmN1cnJlbnRPdXRkYXRlZFRvdGFsU3VwcGx5BRpjdXJyZW50T3V0ZGF0ZWRUb3RhbEJvcnJvdwUUY3VycmVudE91dGRhdGVkU1JhdGUFFGN1cnJlbnRPdXRkYXRlZEJSYXRlBAtjdXJyZW50UmF0ZQkBB2dldFJhdGUDBRFjdXJyZW50T3V0ZGF0ZWRVcgURY3VycmVudEFzc2V0SWRTdHIFCW1hcmtldFN0cgQPY3VycmVudEludGVyZXN0CQELZ2V0SW50ZXJlc3QBBQtjdXJyZW50UmF0ZQQMY3VycmVudFNSYXRlCQEOZ2V0QWN0dWFsU1JhdGUEBQ5sYXN0UmF0ZUhlaWdodAUPY3VycmVudEludGVyZXN0BRFjdXJyZW50T3V0ZGF0ZWRVcgUUY3VycmVudE91dGRhdGVkU1JhdGUEDGN1cnJlbnRCUmF0ZQkBDmdldEFjdHVhbEJSYXRlAwUObGFzdFJhdGVIZWlnaHQFD2N1cnJlbnRJbnRlcmVzdAUUY3VycmVudE91dGRhdGVkQlJhdGUEDWN1cnJlbnRTdXBwbHkJAQ9nZXRBY3R1YWxBbW91bnQCBRpjdXJyZW50T3V0ZGF0ZWRUb3RhbFN1cHBseQUFc1JhdGUEDWN1cnJlbnRCb3Jyb3cJAQ9nZXRBY3R1YWxBbW91bnQCBRpjdXJyZW50T3V0ZGF0ZWRUb3RhbEJvcnJvdwUFYlJhdGUECWN1cnJlbnRVcgkBC2dldEFjdHVhbFVyAgUNY3VycmVudFN1cHBseQUNY3VycmVudEJvcnJvdwQQY3VycmVudFN1cHBseUFweQkBDGdldFN1cHBseUFweQIFC2N1cnJlbnRSYXRlBQljdXJyZW50VXIEEGN1cnJlbnRCb3Jyb3dBcHkJAQxnZXRCb3Jyb3dBcHkBBQtjdXJyZW50UmF0ZQQTY3VycmVudFdhbGxldFN1cHBseQkBD2dldFdhbGxldFN1cHBseQQFDW1hcmtldEFkZHJlc3MFEWN1cnJlbnRBc3NldElkU3RyBQZ3YWxsZXQFDGN1cnJlbnRTUmF0ZQQYY3VycmVudFdhbGxldFN1cHBseUluVXNkCQEIZ2V0SW5Vc2QDBRNjdXJyZW50V2FsbGV0U3VwcGx5BRFjdXJyZW50QXNzZXRTY2FsZQUMY3VycmVudFByaWNlBBNjdXJyZW50V2FsbGV0Qm9ycm93CQEPZ2V0V2FsbGV0Qm9ycm93BAUNbWFya2V0QWRkcmVzcwURY3VycmVudEFzc2V0SWRTdHIFBndhbGxldAUMY3VycmVudEJSYXRlBBhjdXJyZW50V2FsbGV0Qm9ycm93SW5Vc2QJAQhnZXRJblVzZAMFE2N1cnJlbnRXYWxsZXRCb3Jyb3cFEWN1cnJlbnRBc3NldFNjYWxlBQxjdXJyZW50UHJpY2UEHWN1cnJlbnRXYWxsZXRCb3Jyb3dMaW1pdEluVXNkCQBrAwUYY3VycmVudFdhbGxldFN1cHBseUluVXNkBQljdXJyZW50Q2YFBlNjYWxlOAQdY3VycmVudFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QJAGsDBRhjdXJyZW50V2FsbGV0Qm9ycm93SW5Vc2QFBlNjYWxlOAUJY3VycmVudEx0BBF3YWxsZXRNYXJnaW5JblVzZAkAZQIJAGsDBRhjdXJyZW50V2FsbGV0U3VwcGx5SW5Vc2QFEGN1cnJlbnRTdXBwbHlBcHkFBlNjYWxlOAkAawMFGGN1cnJlbnRXYWxsZXRCb3Jyb3dJblVzZAUQY3VycmVudEJvcnJvd0FweQUGU2NhbGU4CQCXCgUJAGQCCAUFYWNjdW0CXzEFGGN1cnJlbnRXYWxsZXRTdXBwbHlJblVzZAkAZAIIBQVhY2N1bQJfMgUYY3VycmVudFdhbGxldEJvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBR1jdXJyZW50V2FsbGV0Qm9ycm93TGltaXRJblVzZAkAZAIIBQVhY2N1bQJfNAUdY3VycmVudFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QJAGQCCAUFYWNjdW0CXzUFEXdhbGxldE1hcmdpbkluVXNkBA0kdDA0Njg0NzQ3MDI4CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlwoFAAAAAAAAAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKYXNzZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QIBQ0kdDA0Njg0NzQ3MDI4Al8xBBZ0b3RhbFdhbGxldEJvcnJvd0luVXNkCAUNJHQwNDY4NDc0NzAyOAJfMgQbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkCAUNJHQwNDY4NDc0NzAyOAJfMwQbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkCAUNJHQwNDY4NDc0NzAyOAJfNAQWdG90YWxXYWxsZXRNYXJnaW5JblVzZAgFDSR0MDQ2ODQ3NDcwMjgCXzUEDWFjY291bnRIZWFsdGgJARBnZXRBY2NvdW50SGVhbHRoAgUbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkBRt0b3RhbFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QEBm5ldEFweQkBCWdldE5ldEFweQMFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QFFnRvdGFsV2FsbGV0TWFyZ2luSW5Vc2QEBGpzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCDiJtYXJrZXRJbmRleCI6CQCkAwEFC21hcmtldEluZGV4Ag8sIm1hcmtldE5hbWUiOiIFCm1hcmtldE5hbWUCASICDCwiYWRkcmVzcyI6IgUJbWFya2V0U3RyAgEiAg4sImFzc2V0UHJpY2UiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQVwcmljZQIKLCJzdXBwbHkiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgUGc3VwcGx5Ag8sInN1cHBseUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgULc3VwcGx5SW5Vc2QCDSwic3VwcGx5QXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCBQlzdXBwbHlBcHkACAIKLCJib3Jyb3ciOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgUGYm9ycm93Ag8sImJvcnJvd0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgULYm9ycm93SW5Vc2QCDSwiYm9ycm93QXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCBQlib3Jyb3dBcHkACAIMLCJyZXNlcnZlcyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQhyZXNlcnZlcwIRLCJyZXNlcnZlc0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUNcmVzZXJ2ZXNJblVzZAIULCJ1dGlsaXphdGlvblJhdGlvIjoJAQ9hbW91bnRUb0RlY2ltYWwCBQJ1cgAIAhQsImNvbGxhdGVyYWxGYWN0b3IiOgkBD2Ftb3VudFRvRGVjaW1hbAIFAmNmAAgCGCwibGlxdWlkYXRpb25UaHJlc2hvbGQiOgkBD2Ftb3VudFRvRGVjaW1hbAIFAmx0AAgCFiwibGlxdWlkYXRpb25QZW5hbHR5IjoJAQ9hbW91bnRUb0RlY2ltYWwCBQdwZW5hbHR5AAgCDSwibWF4U3VwcGx5IjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUJbWF4U3VwcGx5AhAsIndhbGxldFN1cHBseSI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBQx3YWxsZXRTdXBwbHkCFSwid2FsbGV0U3VwcGx5SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRF3YWxsZXRTdXBwbHlJblVzZAIVLCJ3YWxsZXREYWlseUluY29tZSI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyBRF3YWxsZXREYWlseUluY29tZQIaLCJ3YWxsZXREYWlseUluY29tZUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUWd2FsbGV0RGFpbHlJbmNvbWVJblVzZAIQLCJ3YWxsZXRCb3Jyb3ciOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgUMd2FsbGV0Qm9ycm93AhUsIndhbGxldEJvcnJvd0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgURd2FsbGV0Qm9ycm93SW5Vc2QCGywid2FsbGV0RGFpbHlMb2FuSW50ZXJlc3QiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgUXd2FsbGV0RGFpbHlMb2FuUGVyY2VudHMCICwid2FsbGV0RGFpbHlMb2FuSW50ZXJlc3RJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFHHdhbGxldERhaWx5TG9hblBlcmNlbnRzSW5Vc2QCESwiYWNjb3VudEhlYWx0aCI6CQEPYW1vdW50VG9EZWNpbWFsAgUNYWNjb3VudEhlYWx0aAAIAgosIm5ldEFweSI6CQEPYW1vdW50VG9EZWNpbWFsAgUGbmV0QXB5AAgCAX0DBQVkZWJ1ZwkAAgEFBGpzb24FBGpzb24BF2dldE1hcmtldFBhcmFtZXRlcnNKc29uAgttYXJrZXRJbmRleAVkZWJ1ZwQJbWFya2V0U3RyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICB21hcmtldF8JAKQDAQULbWFya2V0SW5kZXgEDW1hcmtldEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCW1hcmtldFN0cgQKbWFya2V0TmFtZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAgxtYXJrZXRfbmFtZV8FCW1hcmtldFN0cgQLc2V0dXBUb2tlbnMJAQ5nZXRTZXR1cFRva2VucwEFDW1hcmtldEFkZHJlc3MEB3NldHVwQ2YJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIKc2V0dXBfbHR2cwIBLAQHc2V0dXBMdAkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAglzZXR1cF9sdHMCASwEDHNldHVwUGVuYWx0eQkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAg9zZXR1cF9wZW5hbHRpZXMCASwEC2Fzc2V0c0NvdW50CQCQAwEFC3NldHVwVG9rZW5zCgEKYXNzZXRzRm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQthc3NldHNDb3VudAUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgULc2V0dXBUb2tlbnMFBG5leHQECW1heFN1cHBseQkBDGdldE1heFN1cHBseQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEAmNmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBDZgUEbmV4dAQCbHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cEx0BQRuZXh0BAdwZW5hbHR5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMc2V0dXBQZW5hbHR5BQRuZXh0BARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewIIImFzc2V0IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIAAAINLCJtYXhTdXBwbHkiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBQltYXhTdXBwbHkCFCwiY29sbGF0ZXJhbEZhY3RvciI6CQEPYW1vdW50VG9EZWNpbWFsAgUCY2YACAIYLCJsaXF1aWRhdGlvblRocmVzaG9sZCI6CQEPYW1vdW50VG9EZWNpbWFsAgUCbHQACAIWLCJsaXF1aWRhdGlvblBlbmFsdHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIFB3BlbmFsdHkACAIBfQkAzQgCBQVhY2N1bQUEanNvbgQKYXNzZXRzSnNvbgoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKYXNzZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEBGpzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewIIIm5hbWUiOiIFCm1hcmtldE5hbWUCASICCywiYXNzZXRzIjpbCQC7CQIFCmFzc2V0c0pzb24CASwCAV0CAX0DBQVkZWJ1ZwkAAgEFBGpzb24FBGpzb24AAHfY98g=", "height": 3910014, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BJXzRUcWojiBYpnLJwLfLWQz1KXWoGVJmrdj7B7FjvV1 Next: e4HDkm9dvKW7RPuy4sSBsWBNrSaWuj9AEymXYkPKjR2 Diff:
OldNewDifferences
2828 let usdtIdStr = "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi"
2929
3030 let usdcIdStr = "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW"
31+
32+let romeIdStr = "AP4Cb5xLYGH6ZigHreCZHoXpQTWDkPsG2BHqfDUx6taJ"
3133
3234 let oracleAddress = Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t')
3335
234236 func getSetupTokens (marketAddress) = split(getStringValue(marketAddress, "setup_tokens"), ",")
235237
236238
237-func getTokenPrice (assetIdStr) = if (if ((assetIdStr == usdtIdStr))
239+func getTokenPrice (assetIdStr) = if (if (if ((assetIdStr == usdtIdStr))
238240 then true
239241 else (assetIdStr == usdcIdStr))
242+ then true
243+ else (assetIdStr == romeIdStr))
240244 then 1000000
241245 else if (containsElement(axlyLPs, assetIdStr))
242246 then {
386390
387391
388392 func assetToJson (assetIdStr,quantity) = {
389- let $t01622316438 = if ((assetIdStr == Waves))
393+ let $t01634316538 = if ((assetIdStr == Waves))
390394 then $Tuple2(8, "WAVES")
391395 else {
392396 let asset = value(assetInfo(fromBase58String(assetIdStr)))
393397 $Tuple2(asset.decimals, asset.name)
394398 }
395- let decimals = $t01622316438._1
396- let name = $t01622316438._2
399+ let decimals = $t01634316538._1
400+ let name = $t01634316538._2
397401 (((((((("{\"quantity\":" + toString(quantity)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"") + name) + "\",\"id\":\"") + assetIdStr) + "\"}")
398402 }
399403
437441 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
438442 }
439443
440- let $t01967319781 = {
444+ let $t01993620044 = {
441445 let $l = arr12
442446 let $s = size($l)
443447 let $acc0 = $Tuple4(0, 0, 0, nil)
451455
452456 $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)
453457 }
454- let supplyInUsd = $t01967319781._1
455- let borrowInUsd = $t01967319781._2
456- let reservesInUsd = $t01967319781._3
457- let marketAssetsJson = $t01967319781._4
458+ let supplyInUsd = $t01993620044._1
459+ let borrowInUsd = $t01993620044._2
460+ let reservesInUsd = $t01993620044._3
461+ let marketAssetsJson = $t01993620044._4
458462 let marketsCount = getIntegerValue("markets")
459463 func marketsFold (accum,next) = if ((next >= marketsCount))
460464 then accum
498502 $Tuple4((accum._1 + walletSupplyInUsd), (accum._2 + walletBorrowInUsd), (accum._3 + walletBorrowLimitInUsd), (accum._4 + walletBorrowUsageInUsd))
499503 }
500504
501- let $t02291623076 = {
505+ let $t02360023760 = {
502506 let $l = arr12
503507 let $s = size($l)
504508 let $acc0 = $Tuple4(0, 0, 0, 0)
512516
513517 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
514518 }
515- let totalWalletSupplyInUsd = $t02291623076._1
516- let totalWalletBorrowInUsd = $t02291623076._2
517- let totalWalletBorrowLimitInUsd = $t02291623076._3
518- let totalWalletBorrowUsageInUsd = $t02291623076._4
519+ let totalWalletSupplyInUsd = $t02360023760._1
520+ let totalWalletBorrowInUsd = $t02360023760._2
521+ let totalWalletBorrowLimitInUsd = $t02360023760._3
522+ let totalWalletBorrowUsageInUsd = $t02360023760._4
519523 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
520524 let fullJson = (((((((((((("{" + "\"index\":") + toString(next)) + ",\"name\":\"") + currentMarketShortName) + "\"") + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + "}")
521525 (accum :+ fullJson)
578582 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
579583 }
580584
581- let $t02665026758 = {
585+ let $t02767927787 = {
582586 let $l = arr12
583587 let $s = size($l)
584588 let $acc0 = $Tuple4(0, 0, 0, nil)
592596
593597 $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)
594598 }
595- let supplyInUsd = $t02665026758._1
596- let borrowInUsd = $t02665026758._2
597- let reservesInUsd = $t02665026758._3
598- let marketAssetsJson = $t02665026758._4
599+ let supplyInUsd = $t02767927787._1
600+ let borrowInUsd = $t02767927787._2
601+ let reservesInUsd = $t02767927787._3
602+ let marketAssetsJson = $t02767927787._4
599603 let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_11C(marketAssetsJson, ",")) + "]") + "}")
600604 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketJson))
601605 }
602606
603- let $t02710627225 = {
607+ let $t02817828297 = {
604608 let $l = arr12
605609 let $s = size($l)
606610 let $acc0 = $Tuple4(0, 0, 0, nil)
614618
615619 $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)
616620 }
617- let totalSupplyInUsd = $t02710627225._1
618- let totalBorrowInUsd = $t02710627225._2
619- let totalReservesInUsd = $t02710627225._3
620- let marketsJson = $t02710627225._4
621+ let totalSupplyInUsd = $t02817828297._1
622+ let totalBorrowInUsd = $t02817828297._2
623+ let totalReservesInUsd = $t02817828297._3
624+ let marketsJson = $t02817828297._4
621625 let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
622626 if (debug)
623627 then throw(json)
678682 $Tuple7((accum._1 + walletSupplyInUsd), (accum._2 + walletBorrowInUsd), (accum._3 + walletBorrowLimitInUsd), (accum._4 + walletBorrowUsageInUsd), (accum._5 + walletDailyIncomeInUsd), (accum._6 + walletDailyLoanInterestInUsd), (accum._7 + walletMarginInUsd))
679683 }
680684
681- let $t03168732041 = {
685+ let $t03310633461 = {
682686 let $l = arr12
683687 let $s = size($l)
684688 let $acc0 = $Tuple7(0, 0, 0, 0, 0, 0, 0)
692696
693697 $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)
694698 }
695- let totalWalletSupplyInUsd = $t03168732041._1
696- let totalWalletBorrowInUsd = $t03168732041._2
697- let totalWalletBorrowLimitInUsd = $t03168732041._3
698- let totalWalletBorrowUsageInUsd = $t03168732041._4
699- let totalWalletDailyIncomeInUsd = $t03168732041._5
700- let totalWalletDailyLoanInterestInUsd = $t03168732041._6
701- let totalWalletMarginInUsd = $t03168732041._7
699+ let totalWalletSupplyInUsd = $t03310633461._1
700+ let totalWalletBorrowInUsd = $t03310633461._2
701+ let totalWalletBorrowLimitInUsd = $t03310633461._3
702+ let totalWalletBorrowUsageInUsd = $t03310633461._4
703+ let totalWalletDailyIncomeInUsd = $t03310633461._5
704+ let totalWalletDailyLoanInterestInUsd = $t03310633461._6
705+ let totalWalletMarginInUsd = $t03310633461._7
702706 let totalWalletBadDebtInUsd = if ((totalWalletBorrowInUsd > totalWalletSupplyInUsd))
703707 then (totalWalletBorrowInUsd - totalWalletSupplyInUsd)
704708 else 0
738742 $Tuple2((accum._1 :+ supplyAssetsJson), (accum._2 :+ borrowAssetsJson))
739743 }
740744
741- let $t03600936095 = {
745+ let $t03784837934 = {
742746 let $l = arr12
743747 let $s = size($l)
744748 let $acc0 = $Tuple2(nil, nil)
752756
753757 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
754758 }
755- let supplyAssetsJson = $t03600936095._1
756- let borrowAssetsJson = $t03600936095._2
759+ let supplyAssetsJson = $t03784837934._1
760+ let borrowAssetsJson = $t03784837934._2
757761 if ((marketIndex == next))
758762 then $Tuple15((accum._1 + totalWalletSupplyInUsd), (accum._2 + totalWalletBorrowInUsd), (accum._3 + totalWalletBadDebtInUsd), (accum._4 + totalWalletDailyIncomeInUsd), (accum._5 + totalWalletDailyLoanInterestInUsd), totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletBadDebtInUsd, totalWalletDailyIncomeInUsd, totalWalletDailyLoanInterestInUsd, accountHealth, netApy, (accum._13 :+ marketsJson), supplyAssetsJson, borrowAssetsJson)
759763 else $Tuple15((accum._1 + totalWalletSupplyInUsd), (accum._2 + totalWalletBorrowInUsd), (accum._3 + totalWalletBadDebtInUsd), (accum._4 + totalWalletDailyIncomeInUsd), (accum._5 + totalWalletDailyLoanInterestInUsd), accum._6, accum._7, accum._8, accum._9, accum._10, accum._11, accum._12, (accum._13 :+ marketsJson), accum._14, accum._15)
760764 }
761765
762- let $t03727837822 = {
766+ let $t03939139875 = {
763767 let $l = arr12
764768 let $s = size($l)
765769 let $acc0 = $Tuple15(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, nil, nil)
773777
774778 $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)
775779 }
776- let totalWalletSupplyInUsd = $t03727837822._1
777- let totalWalletBorrowInUsd = $t03727837822._2
778- let totalWalletBadDebtInUsd = $t03727837822._3
779- let totalWalletDailyIncomeInUsd = $t03727837822._4
780- let totalWalletDailyLoanInterestInUsd = $t03727837822._5
781- let walletSupplyInUsd = $t03727837822._6
782- let walletBorrowInUsd = $t03727837822._7
783- let walletBadDebtInUsd = $t03727837822._8
784- let walletDailyIncomeInUsd = $t03727837822._9
785- let walletDailyLoanInterestInUsd = $t03727837822._10
786- let walletAccountHealth = $t03727837822._11
787- let walletNetApy = $t03727837822._12
788- let marketsJson = $t03727837822._13
789- let supplyAssetsJson = $t03727837822._14
790- let borrowAssetsJson = $t03727837822._15
780+ let totalWalletSupplyInUsd = $t03939139875._1
781+ let totalWalletBorrowInUsd = $t03939139875._2
782+ let totalWalletBadDebtInUsd = $t03939139875._3
783+ let totalWalletDailyIncomeInUsd = $t03939139875._4
784+ let totalWalletDailyLoanInterestInUsd = $t03939139875._5
785+ let walletSupplyInUsd = $t03939139875._6
786+ let walletBorrowInUsd = $t03939139875._7
787+ let walletBadDebtInUsd = $t03939139875._8
788+ let walletDailyIncomeInUsd = $t03939139875._9
789+ let walletDailyLoanInterestInUsd = $t03939139875._10
790+ let walletAccountHealth = $t03939139875._11
791+ let walletNetApy = $t03939139875._12
792+ let marketsJson = $t03939139875._13
793+ let supplyAssetsJson = $t03939139875._14
794+ let borrowAssetsJson = $t03939139875._15
791795 let json = ((((((((((((((((((((((((((((((((((((((("{" + "\"marketIndex\":") + toString(marketIndex)) + ",\"name\":\"") + marketName) + "\"") + ",\"totalSupplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"totalBorrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"totalBadDebtInUsd\":") + assetToJson(usdtIdStr, totalWalletBadDebtInUsd)) + ",\"totalDailyIncomeInUsd\":") + assetToJson(usdtIdStr, totalWalletDailyIncomeInUsd)) + ",\"totalDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, totalWalletDailyLoanInterestInUsd)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"badDebtInUsd\":") + assetToJson(usdtIdStr, walletBadDebtInUsd)) + ",\"dailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + ",\"dailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanInterestInUsd)) + ",\"accountHealth\":") + amountToDecimal(walletAccountHealth, 8)) + ",\"netApy\":") + amountToDecimal(walletNetApy, 8)) + ",\"supplyAssets\":[") + makeString_11C(supplyAssetsJson, ",")) + "]") + ",\"borrowAssets\":[") + makeString_11C(borrowAssetsJson, ",")) + "]") + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
792796 if (debug)
793797 then throw(json)
871875 $Tuple5((accum._1 + currentWalletSupplyInUsd), (accum._2 + currentWalletBorrowInUsd), (accum._3 + currentWalletBorrowLimitInUsd), (accum._4 + currentWalletBorrowUsageInUsd), (accum._5 + walletMarginInUsd))
872876 }
873877
874- let $t04467644857 = {
878+ let $t04684747028 = {
875879 let $l = arr12
876880 let $s = size($l)
877881 let $acc0 = $Tuple5(0, 0, 0, 0, 0)
885889
886890 $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)
887891 }
888- let totalWalletSupplyInUsd = $t04467644857._1
889- let totalWalletBorrowInUsd = $t04467644857._2
890- let totalWalletBorrowLimitInUsd = $t04467644857._3
891- let totalWalletBorrowUsageInUsd = $t04467644857._4
892- let totalWalletMarginInUsd = $t04467644857._5
892+ let totalWalletSupplyInUsd = $t04684747028._1
893+ let totalWalletBorrowInUsd = $t04684747028._2
894+ let totalWalletBorrowLimitInUsd = $t04684747028._3
895+ let totalWalletBorrowUsageInUsd = $t04684747028._4
896+ let totalWalletMarginInUsd = $t04684747028._5
893897 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
894898 let netApy = getNetApy(totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletMarginInUsd)
895899 let json = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"marketIndex\":") + toString(marketIndex)) + ",\"marketName\":\"") + marketName) + "\"") + ",\"address\":\"") + marketStr) + "\"") + ",\"assetPrice\":") + assetToJson(usdtIdStr, price)) + ",\"supply\":") + assetToJson(assetIdStr, supply)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"supplyApy\":") + amountToDecimal(supplyApy, 8)) + ",\"borrow\":") + assetToJson(assetIdStr, borrow)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"borrowApy\":") + amountToDecimal(borrowApy, 8)) + ",\"reserves\":") + assetToJson(assetIdStr, reserves)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"utilizationRatio\":") + amountToDecimal(ur, 8)) + ",\"collateralFactor\":") + amountToDecimal(cf, 8)) + ",\"liquidationThreshold\":") + amountToDecimal(lt, 8)) + ",\"liquidationPenalty\":") + amountToDecimal(penalty, 8)) + ",\"maxSupply\":") + assetToJson(usdtIdStr, maxSupply)) + ",\"walletSupply\":") + assetToJson(assetIdStr, walletSupply)) + ",\"walletSupplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"walletDailyIncome\":") + assetToJson(assetIdStr, walletDailyIncome)) + ",\"walletDailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + ",\"walletBorrow\":") + assetToJson(assetIdStr, walletBorrow)) + ",\"walletBorrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"walletDailyLoanInterest\":") + assetToJson(assetIdStr, walletDailyLoanPercents)) + ",\"walletDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanPercentsInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + ",\"netApy\":") + amountToDecimal(netApy, 8)) + "}")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
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"
31+
32+let romeIdStr = "AP4Cb5xLYGH6ZigHreCZHoXpQTWDkPsG2BHqfDUx6taJ"
3133
3234 let oracleAddress = Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t')
3335
3436 let axlyAddress = Address(base58'3PLsYkBw7taejV1J3qWPCN2yeyVRu31d5HW')
3537
3638 let axlyLPs = ["7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1", "Btw3G1j4wQgdp49PTxaFkNvn75dQtqGDM7ejQppHnWC1", "BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe", "F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", "4CQ5CPGLXLbWBUs2JBjKUaRqF49CmKHkwzvPgSvQpAQV", "6iMB6LKSrgv9waEvEnN6Ydyx7dfxPnGcTw8318WVm5bR"]
3739
3840 func getRateCurve (assetIdStr,marketStr) = match marketStr {
3941 case _ =>
4042 if (("3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" == $match0))
4143 then match assetIdStr {
4244 case _ =>
4345 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
4446 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4547 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
4648 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4749 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
4850 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4951 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
5052 then $Tuple4(2000000, 25000000, 80000000, 100000000)
5153 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
5254 then $Tuple4(2000000, 25000000, 80000000, 100000000)
5355 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
5456 then $Tuple4(2000000, 40000000, 80000000, 150000000)
5557 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
5658 then $Tuple4(0, 100000000, 80000000, 400000000)
5759 else if (("WAVES" == $match1))
5860 then $Tuple4(2000000, 30000000, 80000000, 90000000)
5961 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
6062 then $Tuple4(0, 20000000, 80000000, 40000000)
6163 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
6264 then $Tuple4(0, 20000000, 80000000, 100000000)
6365 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
6466 then $Tuple4(0, 30000000, 80000000, 40000000)
6567 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
6668 then $Tuple4(0, 25000000, 80000000, 40000000)
6769 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
6870 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6971 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
7072 then $Tuple4(2000000, 30000000, 80000000, 50000000)
7173 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
7274 then $Tuple4(2000000, 30000000, 80000000, 50000000)
7375 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
7476 then $Tuple4(2000000, 40000000, 80000000, 100000000)
7577 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
7678 then $Tuple4(2000000, 30000000, 80000000, 80000000)
7779 else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
7880 then $Tuple4(0, 50000000, 80000000, 200000000)
7981 else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match1))
8082 then $Tuple4(0, 100000000, 80000000, 400000000)
8183 else $Tuple4(0, 20000000, 80000000, 80000000)
8284 }
8385 else if (("3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X" == $match0))
8486 then match assetIdStr {
8587 case _ =>
8688 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
8789 then $Tuple4(2000000, 25000000, 80000000, 100000000)
8890 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
8991 then $Tuple4(2000000, 25000000, 80000000, 100000000)
9092 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
9193 then $Tuple4(2000000, 25000000, 80000000, 100000000)
9294 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
9395 then $Tuple4(2000000, 25000000, 80000000, 100000000)
9496 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
9597 then $Tuple4(2000000, 25000000, 80000000, 100000000)
9698 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
9799 then $Tuple4(2000000, 40000000, 80000000, 150000000)
98100 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
99101 then $Tuple4(0, 50000000, 80000000, 400000000)
100102 else if (("WAVES" == $match1))
101103 then $Tuple4(2000000, 30000000, 80000000, 80000000)
102104 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
103105 then $Tuple4(0, 20000000, 80000000, 40000000)
104106 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
105107 then $Tuple4(0, 20000000, 80000000, 100000000)
106108 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
107109 then $Tuple4(0, 30000000, 80000000, 40000000)
108110 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
109111 then $Tuple4(0, 25000000, 80000000, 40000000)
110112 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
111113 then $Tuple4(2000000, 30000000, 80000000, 50000000)
112114 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
113115 then $Tuple4(2000000, 30000000, 80000000, 50000000)
114116 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
115117 then $Tuple4(2000000, 30000000, 80000000, 50000000)
116118 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
117119 then $Tuple4(2000000, 40000000, 80000000, 100000000)
118120 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
119121 then $Tuple4(2000000, 30000000, 80000000, 80000000)
120122 else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
121123 then $Tuple4(0, 50000000, 80000000, 200000000)
122124 else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match1))
123125 then $Tuple4(0, 100000000, 80000000, 400000000)
124126 else $Tuple4(0, 20000000, 80000000, 80000000)
125127 }
126128 else if (("3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH" == $match0))
127129 then $Tuple4(20000000, 100000000, 60000000, 400000000)
128130 else if (("3P8Df2b7ywHtLBHBe8PBVQYd3A5MdEEJAou" == $match0))
129131 then match assetIdStr {
130132 case _ =>
131133 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
132134 then $Tuple4(2000000, 25000000, 80000000, 100000000)
133135 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
134136 then $Tuple4(2000000, 25000000, 80000000, 100000000)
135137 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
136138 then $Tuple4(2000000, 25000000, 80000000, 100000000)
137139 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
138140 then $Tuple4(2000000, 25000000, 80000000, 100000000)
139141 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
140142 then $Tuple4(2000000, 25000000, 80000000, 100000000)
141143 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
142144 then $Tuple4(2000000, 40000000, 80000000, 150000000)
143145 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
144146 then $Tuple4(0, 100000000, 80000000, 400000000)
145147 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
146148 then $Tuple4(0, 20000000, 80000000, 40000000)
147149 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
148150 then $Tuple4(0, 20000000, 80000000, 100000000)
149151 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
150152 then $Tuple4(0, 30000000, 80000000, 40000000)
151153 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
152154 then $Tuple4(0, 25000000, 80000000, 40000000)
153155 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
154156 then $Tuple4(2000000, 30000000, 80000000, 50000000)
155157 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
156158 then $Tuple4(2000000, 30000000, 80000000, 50000000)
157159 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
158160 then $Tuple4(2000000, 30000000, 80000000, 50000000)
159161 else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
160162 then $Tuple4(0, 50000000, 80000000, 200000000)
161163 else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match1))
162164 then $Tuple4(0, 100000000, 80000000, 400000000)
163165 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
164166 then $Tuple4(2000000, 40000000, 80000000, 100000000)
165167 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
166168 then $Tuple4(2000000, 30000000, 80000000, 80000000)
167169 else if (("WAVES" == $match1))
168170 then $Tuple4(2000000, 50000000, 80000000, 100000000)
169171 else $Tuple4(20000000, 100000000, 60000000, 400000000)
170172 }
171173 else if (("3PAd9Aqg3cQSzu26MFYWQYcjSXPVCJtuf5V" == $match0))
172174 then match assetIdStr {
173175 case _ =>
174176 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match1))
175177 then $Tuple4(2000000, 25000000, 80000000, 100000000)
176178 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match1))
177179 then $Tuple4(2000000, 25000000, 80000000, 100000000)
178180 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match1))
179181 then $Tuple4(2000000, 25000000, 80000000, 100000000)
180182 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match1))
181183 then $Tuple4(2000000, 25000000, 80000000, 100000000)
182184 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match1))
183185 then $Tuple4(2000000, 25000000, 80000000, 100000000)
184186 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match1))
185187 then $Tuple4(2000000, 40000000, 80000000, 150000000)
186188 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match1))
187189 then $Tuple4(0, 20000000, 80000000, 40000000)
188190 else if (("WAVES" == $match1))
189191 then $Tuple4(2000000, 30000000, 80000000, 50000000)
190192 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match1))
191193 then $Tuple4(0, 20000000, 80000000, 40000000)
192194 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match1))
193195 then $Tuple4(0, 20000000, 80000000, 100000000)
194196 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match1))
195197 then $Tuple4(0, 30000000, 80000000, 40000000)
196198 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match1))
197199 then $Tuple4(0, 25000000, 80000000, 40000000)
198200 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match1))
199201 then $Tuple4(2000000, 30000000, 80000000, 50000000)
200202 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match1))
201203 then $Tuple4(2000000, 30000000, 80000000, 50000000)
202204 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match1))
203205 then $Tuple4(2000000, 30000000, 80000000, 50000000)
204206 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match1))
205207 then $Tuple4(2000000, 40000000, 80000000, 100000000)
206208 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match1))
207209 then $Tuple4(2000000, 30000000, 80000000, 80000000)
208210 else $Tuple4(0, 20000000, 80000000, 80000000)
209211 }
210212 else throw("Unknown market")
211213 }
212214
213215
214216 func sum (size,data) = {
215217 func fold (accum,next) = if ((next >= size))
216218 then accum
217219 else (accum + data[next])
218220
219221 let $l = arr12
220222 let $s = size($l)
221223 let $acc0 = 0
222224 func $f0_1 ($a,$i) = if (($i >= $s))
223225 then $a
224226 else fold($a, $l[$i])
225227
226228 func $f0_2 ($a,$i) = if (($i >= $s))
227229 then $a
228230 else throw("List size exceeds 12")
229231
230232 $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)
231233 }
232234
233235
234236 func getSetupTokens (marketAddress) = split(getStringValue(marketAddress, "setup_tokens"), ",")
235237
236238
237-func getTokenPrice (assetIdStr) = if (if ((assetIdStr == usdtIdStr))
239+func getTokenPrice (assetIdStr) = if (if (if ((assetIdStr == usdtIdStr))
238240 then true
239241 else (assetIdStr == usdcIdStr))
242+ then true
243+ else (assetIdStr == romeIdStr))
240244 then 1000000
241245 else if (containsElement(axlyLPs, assetIdStr))
242246 then {
243247 let @ = invoke(axlyAddress, "getShareAssetPriceREADONLY", [assetIdStr], nil)
244248 if ($isInstanceOf(@, "Int"))
245249 then @
246250 else throw(($getType(@) + " couldn't be cast to Int"))
247251 }
248252 else {
249253 let price = getIntegerValue(oracleAddress, (assetIdStr + "_twap5B"))
250254 price
251255 }
252256
253257
254258 func getAssetScale (assetIdStr) = {
255259 let decimals = if ((assetIdStr == "WAVES"))
256260 then 8
257261 else value(assetInfo(fromBase58String(assetIdStr))).decimals
258262 pow(10, 0, decimals, 0, 0, DOWN)
259263 }
260264
261265
262266 func getLastRateHeight (marketAddress) = valueOrElse(getInteger(marketAddress, "lastRateHeight"), 0)
263267
264268
265269 func getOutdatedTotalSupply (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_supplied_" + assetIdStr)), 0)
266270
267271
268272 func getOutdatedTotalBorrow (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_borrowed_" + assetIdStr)), 0)
269273
270274
271275 func getOutdatedSRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_sRate")), 0)
272276
273277
274278 func getOutdatedBRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_bRate")), 0)
275279
276280
277281 func getOutdatedUr (outdatedTotalSupply,outdatedTotalBorrow,outdatedSRate,outdatedBRate) = {
278282 let down = fraction(outdatedTotalSupply, outdatedSRate, Scale16)
279283 if ((down == 0))
280284 then 0
281285 else fraction(Scale8, fraction(outdatedTotalBorrow, outdatedBRate, Scale16), down)
282286 }
283287
284288
285289 func getRate (outdatedUr,assetIdStr,marketStr) = {
286290 let curve = getRateCurve(assetIdStr, marketStr)
287291 (curve._1 + (if ((curve._3 >= outdatedUr))
288292 then fraction(outdatedUr, curve._2, curve._3)
289293 else (curve._2 + fraction((outdatedUr - curve._3), curve._4, (100000000 - curve._3)))))
290294 }
291295
292296
293297 func getInterest (rate) = max([fraction(rate, Scale8, yearBlocks), 1])
294298
295299
296300 func getAssetIndex (setupTokens,assetIdStr) = value(indexOf(setupTokens, assetIdStr))
297301
298302
299303 func getAssetParamters (marketParameters,assetIndex) = $Tuple3(marketParameters._1[assetIndex], marketParameters._2[assetIndex], marketParameters._3[assetIndex])
300304
301305
302306 func getMarketParameters (marketAddress,setupTokens) = {
303307 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
304308 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
305309 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
306310 let tokensSize = size(setupTokens)
307311 func fold (accum,next) = if ((next >= tokensSize))
308312 then accum
309313 else $Tuple3((accum._1 :+ parseIntValue(setupCf[next])), (accum._2 :+ parseIntValue(setupLt[next])), (accum._3 :+ parseIntValue(setupPenalty[next])))
310314
311315 let $l = arr12
312316 let $s = size($l)
313317 let $acc0 = $Tuple3(nil, nil, nil)
314318 func $f0_1 ($a,$i) = if (($i >= $s))
315319 then $a
316320 else fold($a, $l[$i])
317321
318322 func $f0_2 ($a,$i) = if (($i >= $s))
319323 then $a
320324 else throw("List size exceeds 12")
321325
322326 $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)
323327 }
324328
325329
326330 func getMaxSupply (marketAddress,assetIdStr) = parseIntValue(valueOrElse(getString(marketAddress, ("setup_maxSupply_" + assetIdStr)), "0"))
327331
328332
329333 func getActualSRate (lastRateHeight,interest,outdatedUr,outdatedSRate) = {
330334 let lastSRate = max([outdatedSRate, Scale16])
331335 let newSRate = (lastSRate + ((((height - lastRateHeight) * fraction(interest, outdatedUr, Scale8)) * (100 - reserveFund)) / 100))
332336 newSRate
333337 }
334338
335339
336340 func getActualBRate (lastRateHeight,interest,outdatedBRate) = {
337341 let lastBRate = max([outdatedBRate, Scale16])
338342 let newBRate = (lastBRate + ((height - lastRateHeight) * interest))
339343 newBRate
340344 }
341345
342346
343347 func getActualUr (actualSupply,actualBorrow) = fraction(actualBorrow, Scale8, actualSupply)
344348
345349
346350 func getActualAmount (outdatedAmount,actualRate) = fraction(outdatedAmount, actualRate, Scale16)
347351
348352
349353 func getInUsd (actualAmount,assetScale,price) = fraction(actualAmount, price, assetScale)
350354
351355
352356 func getSupplyApy (rate,actualUr) = {
353357 let supplyRate = fraction(fraction(rate, 80, 100), actualUr, Scale8)
354358 (toInt(pow((Scale16Big + fraction(toBigInt(supplyRate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
355359 }
356360
357361
358362 func getBorrowApy (rate) = (toInt(pow((Scale16Big + fraction(toBigInt(rate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
359363
360364
361365 func getWalletSupply (marketAddress,assetIdStr,wallet,actualSRate) = {
362366 let outdatedWalletSupply = valueOrElse(getInteger(marketAddress, ((wallet + "_supplied_") + assetIdStr)), 0)
363367 getActualAmount(outdatedWalletSupply, actualSRate)
364368 }
365369
366370
367371 func getWalletBorrow (marketAddress,assetIdStr,wallet,actualBRate) = {
368372 let outdatedWalletBorrow = valueOrElse(getInteger(marketAddress, ((wallet + "_borrowed_") + assetIdStr)), 0)
369373 getActualAmount(outdatedWalletBorrow, actualBRate)
370374 }
371375
372376
373377 func getDailyPercents (apy,quantity) = fraction(fraction((toInt(pow((Scale8Big + toBigInt(apy)), 8, (Scale16Big / yearBlocksBig), 16, 16, DOWN)) - Scale16), dayBlocks, Scale8), quantity, Scale8)
374378
375379
376380 func getAccountHealth (totalWalletBorrowLimitInUsd,totalWalletBorrowUsageInUsd) = if ((totalWalletBorrowLimitInUsd == 0))
377381 then Scale8
378382 else (Scale8 - fraction(totalWalletBorrowUsageInUsd, Scale8, totalWalletBorrowLimitInUsd))
379383
380384
381385 func getNetApy (totalWalletSupplyInUsd,totalWalletBorrowInUsd,totalWalletMarginInUsd) = if ((totalWalletMarginInUsd == 0))
382386 then 0
383387 else if ((totalWalletMarginInUsd > 0))
384388 then fraction(totalWalletMarginInUsd, Scale8, totalWalletSupplyInUsd)
385389 else fraction(totalWalletMarginInUsd, Scale8, totalWalletBorrowInUsd)
386390
387391
388392 func assetToJson (assetIdStr,quantity) = {
389- let $t01622316438 = if ((assetIdStr == Waves))
393+ let $t01634316538 = if ((assetIdStr == Waves))
390394 then $Tuple2(8, "WAVES")
391395 else {
392396 let asset = value(assetInfo(fromBase58String(assetIdStr)))
393397 $Tuple2(asset.decimals, asset.name)
394398 }
395- let decimals = $t01622316438._1
396- let name = $t01622316438._2
399+ let decimals = $t01634316538._1
400+ let name = $t01634316538._2
397401 (((((((("{\"quantity\":" + toString(quantity)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"") + name) + "\",\"id\":\"") + assetIdStr) + "\"}")
398402 }
399403
400404
401405 func amountToDecimal (amount,decimals) = (((("{\"quantity\":" + toString(amount)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"\",\"id\":\"\"}")
402406
403407
404408 func getMarketJson (marketIndex,wallet,debug) = {
405409 let marketStr = getStringValue(("market_" + toString(marketIndex)))
406410 let marketAddress = addressFromStringValue(marketStr)
407411 let marketName = getStringValue(("market_name_" + marketStr))
408412 let active = valueOrElse(getBoolean(marketAddress, "setup_active"), true)
409413 let setupTokens = getSetupTokens(marketAddress)
410414 let assetsCount = size(setupTokens)
411415 let lastRateHeight = getLastRateHeight(marketAddress)
412416 func assetsFold (accum,next) = if ((next >= assetsCount))
413417 then accum
414418 else {
415419 let assetIdStr = setupTokens[next]
416420 let price = getTokenPrice(assetIdStr)
417421 let assetScale = getAssetScale(assetIdStr)
418422 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
419423 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
420424 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
421425 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
422426 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
423427 let rate = getRate(outdatedUr, assetIdStr, marketStr)
424428 let interest = getInterest(rate)
425429 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
426430 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
427431 let supply = getActualAmount(outdatedTotalSupply, sRate)
428432 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
429433 let supplyInUsd = getInUsd(supply, assetScale, price)
430434 let borrowInUsd = getInUsd(borrow, assetScale, price)
431435 let reserves = (supply - borrow)
432436 let reservesInUsd = getInUsd(reserves, assetScale, price)
433437 let ur = getActualUr(supply, borrow)
434438 let supplyApy = getSupplyApy(rate, ur)
435439 let borrowApy = getBorrowApy(rate)
436440 let marketAssetJson = ((((((((((((((((((((((((("{" + "\"supply\":") + assetToJson(assetIdStr, supply)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"borrow\":") + assetToJson(assetIdStr, borrow)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"reserves\":") + assetToJson(assetIdStr, reserves)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"supplyApy\":") + amountToDecimal(supplyApy, 8)) + ",\"borrowApy\":") + amountToDecimal(borrowApy, 8)) + ",\"utilizationRatio\":") + amountToDecimal(ur, 8)) + ",\"sRate\":") + amountToDecimal(sRate, 16)) + ",\"bRate\":") + amountToDecimal(bRate, 16)) + "}")
437441 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
438442 }
439443
440- let $t01967319781 = {
444+ let $t01993620044 = {
441445 let $l = arr12
442446 let $s = size($l)
443447 let $acc0 = $Tuple4(0, 0, 0, nil)
444448 func $f0_1 ($a,$i) = if (($i >= $s))
445449 then $a
446450 else assetsFold($a, $l[$i])
447451
448452 func $f0_2 ($a,$i) = if (($i >= $s))
449453 then $a
450454 else throw("List size exceeds 12")
451455
452456 $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)
453457 }
454- let supplyInUsd = $t01967319781._1
455- let borrowInUsd = $t01967319781._2
456- let reservesInUsd = $t01967319781._3
457- let marketAssetsJson = $t01967319781._4
458+ let supplyInUsd = $t01993620044._1
459+ let borrowInUsd = $t01993620044._2
460+ let reservesInUsd = $t01993620044._3
461+ let marketAssetsJson = $t01993620044._4
458462 let marketsCount = getIntegerValue("markets")
459463 func marketsFold (accum,next) = if ((next >= marketsCount))
460464 then accum
461465 else {
462466 let currentMarketAddressStr = getStringValue(("market_" + toString(next)))
463467 let currentMarketName = getStringValue(("market_name_" + currentMarketAddressStr))
464468 let simpleJson = (((((((((("{" + "\"index\":") + toString(next)) + ",\"name\":\"") + currentMarketName) + "\"") + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, 0)) + ",\"accountHealth\":") + amountToDecimal(0, 8)) + "}")
465469 if ((wallet == ""))
466470 then (accum :+ simpleJson)
467471 else {
468472 let currentMarketAddress = addressFromStringValue(currentMarketAddressStr)
469473 let currentSetupTokens = getSetupTokens(currentMarketAddress)
470474 let currentAssetsCount = size(currentSetupTokens)
471475 let currentMarketShortName = getStringValue(("market_shortname_" + currentMarketAddressStr))
472476 let setupCf = split(getStringValue(currentMarketAddress, "setup_ltvs"), ",")
473477 let setupLt = split(getStringValue(currentMarketAddress, "setup_lts"), ",")
474478 let currentLastRateHeight = getLastRateHeight(currentMarketAddress)
475479 func marketAssetsFold (accum,next) = if ((next >= currentAssetsCount))
476480 then accum
477481 else {
478482 let assetIdStr = currentSetupTokens[next]
479483 let cf = parseIntValue(setupCf[next])
480484 let lt = parseIntValue(setupLt[next])
481485 let price = getTokenPrice(assetIdStr)
482486 let assetScale = getAssetScale(assetIdStr)
483487 let outdatedTotalSupply = getOutdatedTotalSupply(currentMarketAddress, assetIdStr)
484488 let outdatedTotalBorrow = getOutdatedTotalBorrow(currentMarketAddress, assetIdStr)
485489 let outdatedSRate = getOutdatedSRate(currentMarketAddress, assetIdStr)
486490 let outdatedBRate = getOutdatedBRate(currentMarketAddress, assetIdStr)
487491 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
488492 let rate = getRate(outdatedUr, assetIdStr, marketStr)
489493 let interest = getInterest(rate)
490494 let sRate = getActualSRate(currentLastRateHeight, interest, outdatedUr, outdatedSRate)
491495 let bRate = getActualBRate(currentLastRateHeight, interest, outdatedBRate)
492496 let walletSupply = getWalletSupply(currentMarketAddress, assetIdStr, wallet, sRate)
493497 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
494498 let walletBorrow = getWalletBorrow(currentMarketAddress, assetIdStr, wallet, bRate)
495499 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
496500 let walletBorrowLimitInUsd = fraction(walletSupplyInUsd, cf, Scale8)
497501 let walletBorrowUsageInUsd = fraction(walletBorrowInUsd, Scale8, lt)
498502 $Tuple4((accum._1 + walletSupplyInUsd), (accum._2 + walletBorrowInUsd), (accum._3 + walletBorrowLimitInUsd), (accum._4 + walletBorrowUsageInUsd))
499503 }
500504
501- let $t02291623076 = {
505+ let $t02360023760 = {
502506 let $l = arr12
503507 let $s = size($l)
504508 let $acc0 = $Tuple4(0, 0, 0, 0)
505509 func $f1_1 ($a,$i) = if (($i >= $s))
506510 then $a
507511 else marketAssetsFold($a, $l[$i])
508512
509513 func $f1_2 ($a,$i) = if (($i >= $s))
510514 then $a
511515 else throw("List size exceeds 12")
512516
513517 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
514518 }
515- let totalWalletSupplyInUsd = $t02291623076._1
516- let totalWalletBorrowInUsd = $t02291623076._2
517- let totalWalletBorrowLimitInUsd = $t02291623076._3
518- let totalWalletBorrowUsageInUsd = $t02291623076._4
519+ let totalWalletSupplyInUsd = $t02360023760._1
520+ let totalWalletBorrowInUsd = $t02360023760._2
521+ let totalWalletBorrowLimitInUsd = $t02360023760._3
522+ let totalWalletBorrowUsageInUsd = $t02360023760._4
519523 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
520524 let fullJson = (((((((((((("{" + "\"index\":") + toString(next)) + ",\"name\":\"") + currentMarketShortName) + "\"") + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + "}")
521525 (accum :+ fullJson)
522526 }
523527 }
524528
525529 let marketsJson = {
526530 let $l = arr12
527531 let $s = size($l)
528532 let $acc0 = nil
529533 func $f1_1 ($a,$i) = if (($i >= $s))
530534 then $a
531535 else marketsFold($a, $l[$i])
532536
533537 func $f1_2 ($a,$i) = if (($i >= $s))
534538 then $a
535539 else throw("List size exceeds 12")
536540
537541 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
538542 }
539543 let json = ((((((((((((((((((((((("{" + "\"index\":") + toString(marketIndex)) + ",\"name\":\"") + marketName) + "\"") + ",\"address\":\"") + marketStr) + "\"") + ",\"active\":") + toString(active)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"assets\":[") + makeString_11C(marketAssetsJson, ",")) + "]") + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
540544 if (debug)
541545 then throw(json)
542546 else json
543547 }
544548
545549
546550 func getMenuJson (debug) = {
547551 let marketsCount = getIntegerValue("markets")
548552 func marketsFold (accum,next) = if ((next >= marketsCount))
549553 then accum
550554 else {
551555 let marketStr = getStringValue(("market_" + toString(next)))
552556 let marketAddress = addressFromStringValue(marketStr)
553557 let setupTokens = getSetupTokens(marketAddress)
554558 let assetsCount = size(setupTokens)
555559 let lastRateHeight = getLastRateHeight(marketAddress)
556560 func assetsFold (accum,next) = if ((next >= assetsCount))
557561 then accum
558562 else {
559563 let assetIdStr = setupTokens[next]
560564 let price = getTokenPrice(assetIdStr)
561565 let assetScale = getAssetScale(assetIdStr)
562566 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
563567 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
564568 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
565569 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
566570 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
567571 let rate = getRate(outdatedUr, assetIdStr, marketStr)
568572 let interest = getInterest(rate)
569573 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
570574 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
571575 let supply = getActualAmount(outdatedTotalSupply, sRate)
572576 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
573577 let supplyInUsd = getInUsd(supply, assetScale, price)
574578 let borrowInUsd = getInUsd(borrow, assetScale, price)
575579 let reserves = (supply - borrow)
576580 let reservesInUsd = getInUsd(reserves, assetScale, price)
577581 let marketAssetJson = ((((((((("{" + "\"asset\":") + assetToJson(assetIdStr, 0)) + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"sRate\":") + amountToDecimal(sRate, 16)) + ",\"bRate\":") + amountToDecimal(bRate, 16)) + "}")
578582 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
579583 }
580584
581- let $t02665026758 = {
585+ let $t02767927787 = {
582586 let $l = arr12
583587 let $s = size($l)
584588 let $acc0 = $Tuple4(0, 0, 0, nil)
585589 func $f0_1 ($a,$i) = if (($i >= $s))
586590 then $a
587591 else assetsFold($a, $l[$i])
588592
589593 func $f0_2 ($a,$i) = if (($i >= $s))
590594 then $a
591595 else throw("List size exceeds 12")
592596
593597 $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)
594598 }
595- let supplyInUsd = $t02665026758._1
596- let borrowInUsd = $t02665026758._2
597- let reservesInUsd = $t02665026758._3
598- let marketAssetsJson = $t02665026758._4
599+ let supplyInUsd = $t02767927787._1
600+ let borrowInUsd = $t02767927787._2
601+ let reservesInUsd = $t02767927787._3
602+ let marketAssetsJson = $t02767927787._4
599603 let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_11C(marketAssetsJson, ",")) + "]") + "}")
600604 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketJson))
601605 }
602606
603- let $t02710627225 = {
607+ let $t02817828297 = {
604608 let $l = arr12
605609 let $s = size($l)
606610 let $acc0 = $Tuple4(0, 0, 0, nil)
607611 func $f0_1 ($a,$i) = if (($i >= $s))
608612 then $a
609613 else marketsFold($a, $l[$i])
610614
611615 func $f0_2 ($a,$i) = if (($i >= $s))
612616 then $a
613617 else throw("List size exceeds 12")
614618
615619 $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)
616620 }
617- let totalSupplyInUsd = $t02710627225._1
618- let totalBorrowInUsd = $t02710627225._2
619- let totalReservesInUsd = $t02710627225._3
620- let marketsJson = $t02710627225._4
621+ let totalSupplyInUsd = $t02817828297._1
622+ let totalBorrowInUsd = $t02817828297._2
623+ let totalReservesInUsd = $t02817828297._3
624+ let marketsJson = $t02817828297._4
621625 let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
622626 if (debug)
623627 then throw(json)
624628 else json
625629 }
626630
627631
628632 func getWalletJson (marketIndex,wallet,debug) = {
629633 let marketStr = getStringValue(("market_" + toString(marketIndex)))
630634 let marketAddress = addressFromStringValue(marketStr)
631635 let marketName = getStringValue(("market_name_" + marketStr))
632636 let marketsCount = getIntegerValue("markets")
633637 func marketsFold (accum,next) = if ((next >= marketsCount))
634638 then accum
635639 else {
636640 let currentMarketAddressStr = getStringValue(("market_" + toString(next)))
637641 let currentMarketName = getStringValue(("market_name_" + currentMarketAddressStr))
638642 let currentMarketAddress = addressFromStringValue(currentMarketAddressStr)
639643 let currentSetupTokens = getSetupTokens(currentMarketAddress)
640644 let currentAssetsCount = size(currentSetupTokens)
641645 let currentMarketShortName = getStringValue(("market_shortname_" + currentMarketAddressStr))
642646 let setupCf = split(getStringValue(currentMarketAddress, "setup_ltvs"), ",")
643647 let setupLt = split(getStringValue(currentMarketAddress, "setup_lts"), ",")
644648 let currentLastRateHeight = getLastRateHeight(currentMarketAddress)
645649 func marketAssetsFold (accum,next) = if ((next >= currentAssetsCount))
646650 then accum
647651 else {
648652 let assetIdStr = currentSetupTokens[next]
649653 let cf = parseIntValue(setupCf[next])
650654 let lt = parseIntValue(setupLt[next])
651655 let price = getTokenPrice(assetIdStr)
652656 let assetScale = getAssetScale(assetIdStr)
653657 let outdatedTotalSupply = getOutdatedTotalSupply(currentMarketAddress, assetIdStr)
654658 let outdatedTotalBorrow = getOutdatedTotalBorrow(currentMarketAddress, assetIdStr)
655659 let outdatedSRate = getOutdatedSRate(currentMarketAddress, assetIdStr)
656660 let outdatedBRate = getOutdatedBRate(currentMarketAddress, assetIdStr)
657661 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
658662 let rate = getRate(outdatedUr, assetIdStr, marketStr)
659663 let interest = getInterest(rate)
660664 let sRate = getActualSRate(currentLastRateHeight, interest, outdatedUr, outdatedSRate)
661665 let bRate = getActualBRate(currentLastRateHeight, interest, outdatedBRate)
662666 let supply = getActualAmount(outdatedTotalSupply, sRate)
663667 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
664668 let ur = getActualUr(supply, borrow)
665669 let supplyApy = getSupplyApy(rate, ur)
666670 let borrowApy = getBorrowApy(rate)
667671 let walletSupply = getWalletSupply(currentMarketAddress, assetIdStr, wallet, sRate)
668672 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
669673 let walletBorrow = getWalletBorrow(currentMarketAddress, assetIdStr, wallet, bRate)
670674 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
671675 let walletBorrowLimitInUsd = fraction(walletSupplyInUsd, cf, Scale8)
672676 let walletBorrowUsageInUsd = fraction(walletBorrowInUsd, Scale8, lt)
673677 let walletDailyIncome = getDailyPercents(supplyApy, walletSupply)
674678 let walletDailyIncomeInUsd = getInUsd(walletDailyIncome, assetScale, price)
675679 let walletDailyLoanInterest = getDailyPercents(borrowApy, walletBorrow)
676680 let walletDailyLoanInterestInUsd = getInUsd(walletDailyLoanInterest, assetScale, price)
677681 let walletMarginInUsd = (fraction(walletSupplyInUsd, supplyApy, Scale8) - fraction(walletBorrowInUsd, borrowApy, Scale8))
678682 $Tuple7((accum._1 + walletSupplyInUsd), (accum._2 + walletBorrowInUsd), (accum._3 + walletBorrowLimitInUsd), (accum._4 + walletBorrowUsageInUsd), (accum._5 + walletDailyIncomeInUsd), (accum._6 + walletDailyLoanInterestInUsd), (accum._7 + walletMarginInUsd))
679683 }
680684
681- let $t03168732041 = {
685+ let $t03310633461 = {
682686 let $l = arr12
683687 let $s = size($l)
684688 let $acc0 = $Tuple7(0, 0, 0, 0, 0, 0, 0)
685689 func $f0_1 ($a,$i) = if (($i >= $s))
686690 then $a
687691 else marketAssetsFold($a, $l[$i])
688692
689693 func $f0_2 ($a,$i) = if (($i >= $s))
690694 then $a
691695 else throw("List size exceeds 12")
692696
693697 $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)
694698 }
695- let totalWalletSupplyInUsd = $t03168732041._1
696- let totalWalletBorrowInUsd = $t03168732041._2
697- let totalWalletBorrowLimitInUsd = $t03168732041._3
698- let totalWalletBorrowUsageInUsd = $t03168732041._4
699- let totalWalletDailyIncomeInUsd = $t03168732041._5
700- let totalWalletDailyLoanInterestInUsd = $t03168732041._6
701- let totalWalletMarginInUsd = $t03168732041._7
699+ let totalWalletSupplyInUsd = $t03310633461._1
700+ let totalWalletBorrowInUsd = $t03310633461._2
701+ let totalWalletBorrowLimitInUsd = $t03310633461._3
702+ let totalWalletBorrowUsageInUsd = $t03310633461._4
703+ let totalWalletDailyIncomeInUsd = $t03310633461._5
704+ let totalWalletDailyLoanInterestInUsd = $t03310633461._6
705+ let totalWalletMarginInUsd = $t03310633461._7
702706 let totalWalletBadDebtInUsd = if ((totalWalletBorrowInUsd > totalWalletSupplyInUsd))
703707 then (totalWalletBorrowInUsd - totalWalletSupplyInUsd)
704708 else 0
705709 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
706710 let netApy = getNetApy(totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletMarginInUsd)
707711 let marketsJson = (((((((((((("{" + "\"index\":") + toString(next)) + ",\"name\":\"") + currentMarketShortName) + "\"") + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + "}")
708712 func walletAssetsFold (accum,next) = if ((next >= currentAssetsCount))
709713 then accum
710714 else {
711715 let assetIdStr = currentSetupTokens[next]
712716 let price = getTokenPrice(assetIdStr)
713717 let assetScale = getAssetScale(assetIdStr)
714718 let outdatedTotalSupply = getOutdatedTotalSupply(currentMarketAddress, assetIdStr)
715719 let outdatedTotalBorrow = getOutdatedTotalBorrow(currentMarketAddress, assetIdStr)
716720 let outdatedSRate = getOutdatedSRate(currentMarketAddress, assetIdStr)
717721 let outdatedBRate = getOutdatedBRate(currentMarketAddress, assetIdStr)
718722 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
719723 let rate = getRate(outdatedUr, assetIdStr, marketStr)
720724 let interest = getInterest(rate)
721725 let sRate = getActualSRate(currentLastRateHeight, interest, outdatedUr, outdatedSRate)
722726 let bRate = getActualBRate(currentLastRateHeight, interest, outdatedBRate)
723727 let supply = getActualAmount(outdatedTotalSupply, sRate)
724728 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
725729 let ur = getActualUr(supply, borrow)
726730 let supplyApy = getSupplyApy(rate, ur)
727731 let borrowApy = getBorrowApy(rate)
728732 let walletSupply = getWalletSupply(currentMarketAddress, assetIdStr, wallet, sRate)
729733 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
730734 let walletBorrow = getWalletBorrow(currentMarketAddress, assetIdStr, wallet, bRate)
731735 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
732736 let walletDailyIncome = getDailyPercents(supplyApy, walletSupply)
733737 let walletDailyIncomeInUsd = getInUsd(walletDailyIncome, assetScale, price)
734738 let walletDailyLoanInterest = getDailyPercents(borrowApy, walletBorrow)
735739 let walletDailyLoanInterestInUsd = getInUsd(walletDailyLoanInterest, assetScale, price)
736740 let supplyAssetsJson = ((((((((((((("{" + "\"amount\":") + assetToJson(assetIdStr, walletSupply)) + ",\"amountInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"apy\":") + amountToDecimal(supplyApy, 8)) + ",\"dailyPercents\":") + assetToJson(assetIdStr, walletDailyIncome)) + ",\"dailyPercentsInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + "}")
737741 let borrowAssetsJson = ((((((((((((("{" + "\"amount\":") + assetToJson(assetIdStr, walletBorrow)) + ",\"amountInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"apy\":") + amountToDecimal(borrowApy, 8)) + ",\"dailyPercents\":") + assetToJson(assetIdStr, walletDailyLoanInterest)) + ",\"dailyPercentsInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanInterestInUsd)) + "}")
738742 $Tuple2((accum._1 :+ supplyAssetsJson), (accum._2 :+ borrowAssetsJson))
739743 }
740744
741- let $t03600936095 = {
745+ let $t03784837934 = {
742746 let $l = arr12
743747 let $s = size($l)
744748 let $acc0 = $Tuple2(nil, nil)
745749 func $f1_1 ($a,$i) = if (($i >= $s))
746750 then $a
747751 else walletAssetsFold($a, $l[$i])
748752
749753 func $f1_2 ($a,$i) = if (($i >= $s))
750754 then $a
751755 else throw("List size exceeds 12")
752756
753757 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
754758 }
755- let supplyAssetsJson = $t03600936095._1
756- let borrowAssetsJson = $t03600936095._2
759+ let supplyAssetsJson = $t03784837934._1
760+ let borrowAssetsJson = $t03784837934._2
757761 if ((marketIndex == next))
758762 then $Tuple15((accum._1 + totalWalletSupplyInUsd), (accum._2 + totalWalletBorrowInUsd), (accum._3 + totalWalletBadDebtInUsd), (accum._4 + totalWalletDailyIncomeInUsd), (accum._5 + totalWalletDailyLoanInterestInUsd), totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletBadDebtInUsd, totalWalletDailyIncomeInUsd, totalWalletDailyLoanInterestInUsd, accountHealth, netApy, (accum._13 :+ marketsJson), supplyAssetsJson, borrowAssetsJson)
759763 else $Tuple15((accum._1 + totalWalletSupplyInUsd), (accum._2 + totalWalletBorrowInUsd), (accum._3 + totalWalletBadDebtInUsd), (accum._4 + totalWalletDailyIncomeInUsd), (accum._5 + totalWalletDailyLoanInterestInUsd), accum._6, accum._7, accum._8, accum._9, accum._10, accum._11, accum._12, (accum._13 :+ marketsJson), accum._14, accum._15)
760764 }
761765
762- let $t03727837822 = {
766+ let $t03939139875 = {
763767 let $l = arr12
764768 let $s = size($l)
765769 let $acc0 = $Tuple15(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, nil, nil)
766770 func $f0_1 ($a,$i) = if (($i >= $s))
767771 then $a
768772 else marketsFold($a, $l[$i])
769773
770774 func $f0_2 ($a,$i) = if (($i >= $s))
771775 then $a
772776 else throw("List size exceeds 12")
773777
774778 $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)
775779 }
776- let totalWalletSupplyInUsd = $t03727837822._1
777- let totalWalletBorrowInUsd = $t03727837822._2
778- let totalWalletBadDebtInUsd = $t03727837822._3
779- let totalWalletDailyIncomeInUsd = $t03727837822._4
780- let totalWalletDailyLoanInterestInUsd = $t03727837822._5
781- let walletSupplyInUsd = $t03727837822._6
782- let walletBorrowInUsd = $t03727837822._7
783- let walletBadDebtInUsd = $t03727837822._8
784- let walletDailyIncomeInUsd = $t03727837822._9
785- let walletDailyLoanInterestInUsd = $t03727837822._10
786- let walletAccountHealth = $t03727837822._11
787- let walletNetApy = $t03727837822._12
788- let marketsJson = $t03727837822._13
789- let supplyAssetsJson = $t03727837822._14
790- let borrowAssetsJson = $t03727837822._15
780+ let totalWalletSupplyInUsd = $t03939139875._1
781+ let totalWalletBorrowInUsd = $t03939139875._2
782+ let totalWalletBadDebtInUsd = $t03939139875._3
783+ let totalWalletDailyIncomeInUsd = $t03939139875._4
784+ let totalWalletDailyLoanInterestInUsd = $t03939139875._5
785+ let walletSupplyInUsd = $t03939139875._6
786+ let walletBorrowInUsd = $t03939139875._7
787+ let walletBadDebtInUsd = $t03939139875._8
788+ let walletDailyIncomeInUsd = $t03939139875._9
789+ let walletDailyLoanInterestInUsd = $t03939139875._10
790+ let walletAccountHealth = $t03939139875._11
791+ let walletNetApy = $t03939139875._12
792+ let marketsJson = $t03939139875._13
793+ let supplyAssetsJson = $t03939139875._14
794+ let borrowAssetsJson = $t03939139875._15
791795 let json = ((((((((((((((((((((((((((((((((((((((("{" + "\"marketIndex\":") + toString(marketIndex)) + ",\"name\":\"") + marketName) + "\"") + ",\"totalSupplyInUsd\":") + assetToJson(usdtIdStr, totalWalletSupplyInUsd)) + ",\"totalBorrowInUsd\":") + assetToJson(usdtIdStr, totalWalletBorrowInUsd)) + ",\"totalBadDebtInUsd\":") + assetToJson(usdtIdStr, totalWalletBadDebtInUsd)) + ",\"totalDailyIncomeInUsd\":") + assetToJson(usdtIdStr, totalWalletDailyIncomeInUsd)) + ",\"totalDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, totalWalletDailyLoanInterestInUsd)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"badDebtInUsd\":") + assetToJson(usdtIdStr, walletBadDebtInUsd)) + ",\"dailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + ",\"dailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanInterestInUsd)) + ",\"accountHealth\":") + amountToDecimal(walletAccountHealth, 8)) + ",\"netApy\":") + amountToDecimal(walletNetApy, 8)) + ",\"supplyAssets\":[") + makeString_11C(supplyAssetsJson, ",")) + "]") + ",\"borrowAssets\":[") + makeString_11C(borrowAssetsJson, ",")) + "]") + ",\"markets\":[") + makeString_11C(marketsJson, ",")) + "]") + "}")
792796 if (debug)
793797 then throw(json)
794798 else json
795799 }
796800
797801
798802 func getWalletOperationsJson (marketIndex,assetIdStr,wallet,debug) = {
799803 let marketStr = getStringValue(("market_" + toString(marketIndex)))
800804 let marketAddress = addressFromStringValue(marketStr)
801805 let marketName = getStringValue(("market_name_" + marketStr))
802806 let active = valueOrElse(getBoolean(marketAddress, "setup_active"), true)
803807 let setupTokens = getSetupTokens(marketAddress)
804808 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
805809 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
806810 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
807811 let assetIndex = getAssetIndex(setupTokens, assetIdStr)
808812 let cf = parseIntValue(setupCf[assetIndex])
809813 let lt = parseIntValue(setupLt[assetIndex])
810814 let penalty = parseIntValue(setupPenalty[assetIndex])
811815 let assetsCount = size(setupTokens)
812816 let lastRateHeight = getLastRateHeight(marketAddress)
813817 let price = getTokenPrice(assetIdStr)
814818 let assetScale = getAssetScale(assetIdStr)
815819 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
816820 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
817821 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
818822 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
819823 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
820824 let rate = getRate(outdatedUr, assetIdStr, marketStr)
821825 let interest = getInterest(rate)
822826 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
823827 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
824828 let supply = getActualAmount(outdatedTotalSupply, sRate)
825829 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
826830 let supplyInUsd = getInUsd(supply, assetScale, price)
827831 let borrowInUsd = getInUsd(borrow, assetScale, price)
828832 let reserves = (supply - borrow)
829833 let reservesInUsd = getInUsd(reserves, assetScale, price)
830834 let ur = getActualUr(supply, borrow)
831835 let supplyApy = getSupplyApy(rate, ur)
832836 let borrowApy = getBorrowApy(rate)
833837 let maxSupply = getMaxSupply(marketAddress, assetIdStr)
834838 let walletSupply = getWalletSupply(marketAddress, assetIdStr, wallet, sRate)
835839 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
836840 let walletDailyIncome = getDailyPercents(supplyApy, walletSupply)
837841 let walletDailyIncomeInUsd = getInUsd(walletDailyIncome, assetScale, price)
838842 let walletBorrow = getWalletBorrow(marketAddress, assetIdStr, wallet, bRate)
839843 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
840844 let walletDailyLoanPercents = getDailyPercents(borrowApy, walletBorrow)
841845 let walletDailyLoanPercentsInUsd = getInUsd(walletDailyLoanPercents, assetScale, price)
842846 func assetsFold (accum,next) = if ((next >= assetsCount))
843847 then accum
844848 else {
845849 let currentAssetIdStr = setupTokens[next]
846850 let currentCf = parseIntValue(setupCf[next])
847851 let currentLt = parseIntValue(setupLt[next])
848852 let currentPrice = getTokenPrice(currentAssetIdStr)
849853 let currentAssetScale = getAssetScale(currentAssetIdStr)
850854 let currentOutdatedTotalSupply = getOutdatedTotalSupply(marketAddress, currentAssetIdStr)
851855 let currentOutdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, currentAssetIdStr)
852856 let currentOutdatedSRate = getOutdatedSRate(marketAddress, currentAssetIdStr)
853857 let currentOutdatedBRate = getOutdatedBRate(marketAddress, currentAssetIdStr)
854858 let currentOutdatedUr = getOutdatedUr(currentOutdatedTotalSupply, currentOutdatedTotalBorrow, currentOutdatedSRate, currentOutdatedBRate)
855859 let currentRate = getRate(currentOutdatedUr, currentAssetIdStr, marketStr)
856860 let currentInterest = getInterest(currentRate)
857861 let currentSRate = getActualSRate(lastRateHeight, currentInterest, currentOutdatedUr, currentOutdatedSRate)
858862 let currentBRate = getActualBRate(lastRateHeight, currentInterest, currentOutdatedBRate)
859863 let currentSupply = getActualAmount(currentOutdatedTotalSupply, sRate)
860864 let currentBorrow = getActualAmount(currentOutdatedTotalBorrow, bRate)
861865 let currentUr = getActualUr(currentSupply, currentBorrow)
862866 let currentSupplyApy = getSupplyApy(currentRate, currentUr)
863867 let currentBorrowApy = getBorrowApy(currentRate)
864868 let currentWalletSupply = getWalletSupply(marketAddress, currentAssetIdStr, wallet, currentSRate)
865869 let currentWalletSupplyInUsd = getInUsd(currentWalletSupply, currentAssetScale, currentPrice)
866870 let currentWalletBorrow = getWalletBorrow(marketAddress, currentAssetIdStr, wallet, currentBRate)
867871 let currentWalletBorrowInUsd = getInUsd(currentWalletBorrow, currentAssetScale, currentPrice)
868872 let currentWalletBorrowLimitInUsd = fraction(currentWalletSupplyInUsd, currentCf, Scale8)
869873 let currentWalletBorrowUsageInUsd = fraction(currentWalletBorrowInUsd, Scale8, currentLt)
870874 let walletMarginInUsd = (fraction(currentWalletSupplyInUsd, currentSupplyApy, Scale8) - fraction(currentWalletBorrowInUsd, currentBorrowApy, Scale8))
871875 $Tuple5((accum._1 + currentWalletSupplyInUsd), (accum._2 + currentWalletBorrowInUsd), (accum._3 + currentWalletBorrowLimitInUsd), (accum._4 + currentWalletBorrowUsageInUsd), (accum._5 + walletMarginInUsd))
872876 }
873877
874- let $t04467644857 = {
878+ let $t04684747028 = {
875879 let $l = arr12
876880 let $s = size($l)
877881 let $acc0 = $Tuple5(0, 0, 0, 0, 0)
878882 func $f0_1 ($a,$i) = if (($i >= $s))
879883 then $a
880884 else assetsFold($a, $l[$i])
881885
882886 func $f0_2 ($a,$i) = if (($i >= $s))
883887 then $a
884888 else throw("List size exceeds 12")
885889
886890 $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)
887891 }
888- let totalWalletSupplyInUsd = $t04467644857._1
889- let totalWalletBorrowInUsd = $t04467644857._2
890- let totalWalletBorrowLimitInUsd = $t04467644857._3
891- let totalWalletBorrowUsageInUsd = $t04467644857._4
892- let totalWalletMarginInUsd = $t04467644857._5
892+ let totalWalletSupplyInUsd = $t04684747028._1
893+ let totalWalletBorrowInUsd = $t04684747028._2
894+ let totalWalletBorrowLimitInUsd = $t04684747028._3
895+ let totalWalletBorrowUsageInUsd = $t04684747028._4
896+ let totalWalletMarginInUsd = $t04684747028._5
893897 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
894898 let netApy = getNetApy(totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletMarginInUsd)
895899 let json = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"marketIndex\":") + toString(marketIndex)) + ",\"marketName\":\"") + marketName) + "\"") + ",\"address\":\"") + marketStr) + "\"") + ",\"assetPrice\":") + assetToJson(usdtIdStr, price)) + ",\"supply\":") + assetToJson(assetIdStr, supply)) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, supplyInUsd)) + ",\"supplyApy\":") + amountToDecimal(supplyApy, 8)) + ",\"borrow\":") + assetToJson(assetIdStr, borrow)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, borrowInUsd)) + ",\"borrowApy\":") + amountToDecimal(borrowApy, 8)) + ",\"reserves\":") + assetToJson(assetIdStr, reserves)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, reservesInUsd)) + ",\"utilizationRatio\":") + amountToDecimal(ur, 8)) + ",\"collateralFactor\":") + amountToDecimal(cf, 8)) + ",\"liquidationThreshold\":") + amountToDecimal(lt, 8)) + ",\"liquidationPenalty\":") + amountToDecimal(penalty, 8)) + ",\"maxSupply\":") + assetToJson(usdtIdStr, maxSupply)) + ",\"walletSupply\":") + assetToJson(assetIdStr, walletSupply)) + ",\"walletSupplyInUsd\":") + assetToJson(usdtIdStr, walletSupplyInUsd)) + ",\"walletDailyIncome\":") + assetToJson(assetIdStr, walletDailyIncome)) + ",\"walletDailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletDailyIncomeInUsd)) + ",\"walletBorrow\":") + assetToJson(assetIdStr, walletBorrow)) + ",\"walletBorrowInUsd\":") + assetToJson(usdtIdStr, walletBorrowInUsd)) + ",\"walletDailyLoanInterest\":") + assetToJson(assetIdStr, walletDailyLoanPercents)) + ",\"walletDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletDailyLoanPercentsInUsd)) + ",\"accountHealth\":") + amountToDecimal(accountHealth, 8)) + ",\"netApy\":") + amountToDecimal(netApy, 8)) + "}")
896900 if (debug)
897901 then throw(json)
898902 else json
899903 }
900904
901905
902906 func getMarketParametersJson (marketIndex,debug) = {
903907 let marketStr = getStringValue(("market_" + toString(marketIndex)))
904908 let marketAddress = addressFromStringValue(marketStr)
905909 let marketName = getStringValue(("market_name_" + marketStr))
906910 let setupTokens = getSetupTokens(marketAddress)
907911 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
908912 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
909913 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
910914 let assetsCount = size(setupTokens)
911915 func assetsFold (accum,next) = if ((next >= assetsCount))
912916 then accum
913917 else {
914918 let assetIdStr = setupTokens[next]
915919 let maxSupply = getMaxSupply(marketAddress, assetIdStr)
916920 let cf = parseIntValue(setupCf[next])
917921 let lt = parseIntValue(setupLt[next])
918922 let penalty = parseIntValue(setupPenalty[next])
919923 let json = ((((((((((("{" + "\"asset\":") + assetToJson(assetIdStr, 0)) + ",\"maxSupply\":") + assetToJson(usdtIdStr, maxSupply)) + ",\"collateralFactor\":") + amountToDecimal(cf, 8)) + ",\"liquidationThreshold\":") + amountToDecimal(lt, 8)) + ",\"liquidationPenalty\":") + amountToDecimal(penalty, 8)) + "}")
920924 (accum :+ json)
921925 }
922926
923927 let assetsJson = {
924928 let $l = arr12
925929 let $s = size($l)
926930 let $acc0 = nil
927931 func $f0_1 ($a,$i) = if (($i >= $s))
928932 then $a
929933 else assetsFold($a, $l[$i])
930934
931935 func $f0_2 ($a,$i) = if (($i >= $s))
932936 then $a
933937 else throw("List size exceeds 12")
934938
935939 $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)
936940 }
937941 let json = ((((((("{" + "\"name\":\"") + marketName) + "\"") + ",\"assets\":[") + makeString_11C(assetsJson, ",")) + "]") + "}")
938942 if (debug)
939943 then throw(json)
940944 else json
941945 }
942946
943947
944948

github/deemru/w8io/3ef1775 
198.66 ms