tx · 9i6sRGSJvNp8dr3dni5wFiiAcacCuFxEui5VGSPL2CM6

3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr:  -0.02000000 Waves

2023.10.03 10:12 [3847957] smart account 3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr > SELF 0.00000000 Waves

{ "type": 13, "id": "9i6sRGSJvNp8dr3dni5wFiiAcacCuFxEui5VGSPL2CM6", "fee": 2000000, "feeAssetId": null, "timestamp": 1696317274262, "version": 2, "chainId": 87, "sender": "3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr", "senderPublicKey": "A5AvSRrbVauQKBhPtuWTLTQdE5ka4nVCSDaVANpFur26", "proofs": [ "5kVXqbVHtmGarvo7FYK5gAVuMxXciHbtqRBaSMyy5T59ZcMJLtEfX2aNyWeWZ6HFRy7j3yLnGV8gmvhhFLVEFFi4" ], "script": "base64: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AQdBZGRyZXNzAQUGcG9vbElkAhdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAAIZXRod2F2ZXMJAGsDBQJkOAULd2F2ZXNpbnBvb2wFCWV0aGlucG9vbAEIX2xvYWRJbnQCBGtleV8IZGVmYXVsdF8EByRtYXRjaDAJAJoIAgUMU1dBVkVTX3N0YWtlBQRrZXlfAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQUIZGVmYXVsdF8BC19sb2FkQmlnSW50AgRrZXlfCGRlZmF1bHRfBAckbWF0Y2gwCQCcCAIFDFNXQVZFU19zdGFrZQUEa2V5XwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwCQCeAwEFAWEFCGRlZmF1bHRfAAhsYXN0UmF0ZQkBC19sb2FkQmlnSW50AgIJTEFTVF9SQVRFCQC2AgEAgKCUpY0dAAtjdXJyZW50UmF0ZQkBC19sb2FkQmlnSW50AgIMQ1VSUkVOVF9SQVRFCQC2AgEAAAAKbGFzdEhlaWdodAkBCF9sb2FkSW50AgILTEFTVF9IRUlHSFQAAAAMdGFyZ2V0SGVpZ2h0CQCXAwEJAMwIAgkBCF9sb2FkSW50AgINVEFSR0VUX0hFSUdIVAAACQDMCAIFBmhlaWdodAUDbmlsAA9sYXN0UmF0ZVVwZGF0ZWQJALcCAgUIbGFzdFJhdGUJALkCAgULY3VycmVudFJhdGUJALYCAQkAZQIFDHRhcmdldEhlaWdodAUKbGFzdEhlaWdodAAKYmFzZUFtb3VudAkAoAMBCQC9AgQJALYCAQkA8AcCBQ1XWF9XQVZFU19FQVNUBQZzd2F2ZXMFD2xhc3RSYXRlVXBkYXRlZAkAtgIBAICglKWNHQUFRkxPT1IACXdhdmVzaW5XWAkAZAIICQDvBwEFDVdYX1dBVkVTX0VBU1QHcmVndWxhcgUKYmFzZUFtb3VudAAIZWFzdGluV1gJAPAHAgUNV1hfV0FWRVNfRUFTVAUEZWFzdAAJd2F2ZXNlYXN0CQBrAwkAaAIFAmQ4AGQFCGVhc3RpbldYBQl3YXZlc2luV1gAEHdhdmVzaW53aGlybHBvb2wJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQV3YXZlcwIIX2JhbGFuY2UAEHdoaXJsaW53aGlybHBvb2wJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQl3aGlybHBvb2wCCF9iYWxhbmNlABFwcm9qZWN0c3Rha2V3aGlybAkBEUBleHRyTmF0aXZlKDEwNTApAgkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQJAKwCAgIjM1BBa21KbmlNZ25uQWVqNXBZZjJqRllrQ2Jab3c1cHQ5dHICDF9pbmRleFN0YWtlZAAPdG90YWxzdGFrZXdoaXJsCQERQGV4dHJOYXRpdmUoMTA1MCkCCQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQADXN0RUFTVGlud2F2ZXMJAGgCCQBrAwkAaQIJAG4ECQDwBwIFBHRoaXMFBnN0ZWFzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUKRUFTVF9zdGFrZQIIJXNfX3JhdGUAgKCUpY0dBQhIQUxGRVZFTgBkBQJkOAUJd2F2ZXNlYXN0AGQADUVBU1RpbnN0YWtpbmcJAGkCCQBuBAkA8AcCBQR0aGlzBQZzdGVhc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCkVBU1Rfc3Rha2UCCCVzX19yYXRlAICglKWNHQUISEFMRkVWRU4AZAAKdHZsaW53YXZlcwkAZAIJAGQCCQBkAgkAawMJAGgCBQt3YXZlc2lucG9vbAAKBQxwcm9qZWN0c3Rha2UFCnRvdGFsc3Rha2UJAGsDCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgFCGV0aHdhdmVzBQJkOAkAawMJAGgCBRB3YXZlc2lud2hpcmxwb29sAAoFEXByb2plY3RzdGFrZXdoaXJsBQ90b3RhbHN0YWtld2hpcmwFDXN0RUFTVGlud2F2ZXMAD3doaXJscG9vbHN1cHBseQQHJG1hdGNoMAkA7AcBBQl3aGlybHBvb2wDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIcXVhbnRpdHkJAAIBAhBDYW4ndCBmaW5kIGFzc2V0AAVwcmljZQMJAGcCCQBkAgkAawMJAGQCBQp0dmxpbndhdmVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBQJkOAUPd2hpcmxwb29sc3VwcGx5BQJkOAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzCQBkAgkAawMJAGQCBQp0dmxpbndhdmVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBQJkOAUPd2hpcmxwb29sc3VwcGx5BQJkOAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzAQ50cnlHZXRJbnRlZ2VyUAEDa2V5BAckbWF0Y2gwCQCaCAIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDXRyeUdldFN0cmluZ1ABA2tleQQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAAQ1nZXRBc3NldEJ5dGVzAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTBQR1bml0CQDZBAEFCmFzc2V0SWRTdHIBDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBE2FkZEFzc2V0Qnl0ZXNUb0xpc3QCBWFjY3VtBGl0ZW0JAM4IAgUFYWNjdW0JAMwIAgkBDWdldEFzc2V0Qnl0ZXMBBQRpdGVtBQNuaWwBFGFkZEFzc2V0V2VpZ2h0VG9MaXN0AgVhY2N1bQRpdGVtCQDOCAIFBWFjY3VtCQDMCAIJAQ50cnlHZXRJbnRlZ2VyUAEJAKwCAgkArAICAgdzdGF0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ZDgFBXByaWNlCQACAQIwcGxlYXNlIGNvbnRhY3QgcHJvamVjdCBvd25lcjogaXNzdWUgYW1vdW50IGVycm9yBAxzdXBwbHlhbW91bnQJAGkCCQBlAggFA3BtdAZhbW91bnQFB3N1cnBsdXMAAwQIQW1vdW50SW4IBQNwbXQGYW1vdW50BA5Bc3NldEluQmFsYW5jZQUQd2F2ZXNpbndoaXJscG9vbAQPQXNzZXRPdXRCYWxhbmNlBRB3aGlybGlud2hpcmxwb29sBAtmZWVBbW91bnRJbgkAawMFCEFtb3VudEluAMgBAJBOBA1jbGVhbkFtb3VudEluCQBlAgUIQW1vdW50SW4FC2ZlZUFtb3VudEluBAdJbmRleEluCQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQR1bml0BAhJbmRleE91dAkBBXZhbHVlAQkAzwgCBQhhc3NldElkcwUJd2hpcmxwb29sBAlBbW91bnRPdXQJAG4EBQ9Bc3NldE91dEJhbGFuY2UJAGUCCQBoAgUCZDgFAmQ4CQCgAwEJAHYGCQC9AgQJALYCAQUOQXNzZXRJbkJhbGFuY2UJALYCAQkAaAIFAmQ4BQJkOAkAtgIBCQBkAgUOQXNzZXRJbkJhbGFuY2UFDWNsZWFuQW1vdW50SW4FBkhBTEZVUAAQCQC2AgEJAGsDCQCRAwIFDUFzc2V0c1dlaWdodHMFB0luZGV4SW4AkE4JAJEDAgUNQXNzZXRzV2VpZ2h0cwUISW5kZXhPdXQABAAQBQdDRUlMSU5HCQBoAgUCZDgFAmQ4BQRET1dOBBZXaGlybHBvb2xCYWxhbmNlQmVmb3JlCQDwBwIFBHRoaXMFCXdoaXJscG9vbAMJAAACBRZXaGlybHBvb2xCYWxhbmNlQmVmb3JlBRZXaGlybHBvb2xCYWxhbmNlQmVmb3JlAwkBAiE9AggFA3BtdAdhc3NldElkBQR1bml0CQACAQIXYXR0YWNoIFdBVkVTIHRva2VuIG9ubHkEBHN3YXADCQBmAgUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIEc3dhcAkAzAgCBQ93aGlybHBvb2xzdHJpbmcJAMwIAgkAZAIFC0lzc3VlQW1vdW50AAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUIQW1vdW50SW4FA25pbAUEdW5pdAMJAAACBQRzd2FwBQRzd2FwBBNTdXBwbHlXYXZlc01haW5Qb29sAwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQJAPwHBAkBB0FkZHJlc3MBARoBVyCUXEqtz/RIOTuIQLO/2+6MUKCnas/a6AIGc3VwcGx5BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFDHN1cHBseWFtb3VudAUDbmlsBQR1bml0AwkAAAIFE1N1cHBseVdhdmVzTWFpblBvb2wFE1N1cHBseVdhdmVzTWFpblBvb2wEGFN1cHBseVdhdmVzV2F2ZXNEZWZpUG9vbAMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0CQD8BwQJAQdBZGRyZXNzAQEaAVcZCzuPP83F9QBSQ7jrpozIrL8UOTE+JL4CBnN1cHBseQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQxzdXBwbHlhbW91bnQFA25pbAUEdW5pdAMJAAACBRhTdXBwbHlXYXZlc1dhdmVzRGVmaVBvb2wFGFN1cHBseVdhdmVzV2F2ZXNEZWZpUG9vbAQRU3VwcGx5V2F2ZXNMb3dDYXADCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkA/AcECQEHQWRkcmVzcwEBGgFXrmAU0mZwDPA/3HTF0nTmGr6p4FLB6guQAgZzdXBwbHkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUMc3VwcGx5YW1vdW50BQNuaWwFBHVuaXQDCQAAAgURU3VwcGx5V2F2ZXNMb3dDYXAFEVN1cHBseVdhdmVzTG93Q2FwBBVXaGlybHBvb2xCYWxhbmNlQWZ0ZXIJAPAHAgUEdGhpcwUJd2hpcmxwb29sAwkAAAIFFVdoaXJscG9vbEJhbGFuY2VBZnRlcgUVV2hpcmxwb29sQmFsYW5jZUFmdGVyBBFXaGlybHBvb2xGcm9tU3dhcAkAZQIFFldoaXJscG9vbEJhbGFuY2VCZWZvcmUFFVdoaXJscG9vbEJhbGFuY2VBZnRlcgkAzAgCCQEHUmVpc3N1ZQMFCXdoaXJscG9vbAMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAAABgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAULSXNzdWVBbW91bnQFEVdoaXJscG9vbEZyb21Td2FwBQl3aGlybHBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQICIVdISVJMUE9PTCBpc3N1ZSBwcmljZSBpbiB3YXZlbGV0cwUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQICJldISVJMUE9PTCBidXkgbWFya2V0IHByaWNlIGluIHdhdmVsZXRzCQBrAwUCZDgFCEFtb3VudEluBQlBbW91bnRPdXQJAMwIAgkBDEludGVnZXJFbnRyeQICIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzAwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQIBQNwbXQGYW1vdW50CQBkAgAACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0BQdzdXJwbHVzCQBkAgAACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkAZQIFC0lzc3VlQW1vdW50BQdzdXJwbHVzCQBkAgAACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJQcmljZVN1cnBsdXNTdXBwbHkACQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpQTCBCVCBNYWluCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUEwgQlQgRGVmaQkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICCVBMIEJUIExvdwkBCFBMX3ZhbHVlAgUGUExfTG93BQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQUEwgYmFzZSB0cmVhc3VyeQkAZAIJAGQCCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAQhQTF92YWx1ZQIFBlBMX0xvdwUFd2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICMHN1cnBsdXMgdHJlYXN1cnkgQlVSTi1YVE4geCBQZXBlVGVhbSBpbiB3YXZlbGV0cwkAawMJAGgCBQt3YXZlc2lucG9vbAAKBQxwcm9qZWN0c3Rha2UFCnRvdGFsc3Rha2UJAMwIAgkBDEludGVnZXJFbnRyeQICGUVUSCBQdXp6bGUgTGVuZCBtYWluIHBvb2wJAQhQTF92YWx1ZQIFB1BMX01haW4FA2V0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgI2c3VycGx1cyB0cmVhc3VyeSBFVEggUHV6emxlIExlbmQgbWFpbiBwb29sIGluIHdhdmVsZXRzCQBrAwkBCFBMX3ZhbHVlAgUHUExfTWFpbgUDZXRoBQhldGh3YXZlcwUCZDgJAMwIAgkBDEludGVnZXJFbnRyeQICKnN1cnBsdXMgdHJlYXN1cnkgV0hJUkxQT09MIEFNTSBpbiB3YXZlbGV0cwkAawMJAGgCBRB3YXZlc2lud2hpcmxwb29sAAoFEXByb2plY3RzdGFrZXdoaXJsBQ90b3RhbHN0YWtld2hpcmwJAMwIAgkBDEludGVnZXJFbnRyeQICElNUIEVBU1QgaW4gc3Rha2luZwUNRUFTVGluc3Rha2luZwkAzAgCCQEMSW50ZWdlckVudHJ5AgISU1Qgc3RFQVNUIGluIHdhdmVzBQ1zdEVBU1RpbndhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAihUb3RhbCBzdXJwbHVzIHRyZWFzdXJ5IHZhbHVlIGluIHdhdmVsZXRzBQp0dmxpbndhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAiFXSElSTFBPT0wgaXNzdWUgcHJpY2UgaW4gd2F2ZWxldHMFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhpXSElSTFBPT0wgbWlkIG1hcmtldCBwcmljZQkAawMFAmQ4CQBoAgUQd2F2ZXNpbndoaXJscG9vbAAJBRB3aGlybGlud2hpcmxwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhZXSElSTFBPT0wgdG90YWwgc3VwcGx5BQ93aGlybHBvb2xzdXBwbHkJAMwIAgkBDEludGVnZXJFbnRyeQICDlRvdGFsIHRyZWFzdXJ5CQBkAgkAZAIJAGQCCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAQhQTF92YWx1ZQIFBlBMX0xvdwUFd2F2ZXMFCnR2bGlud2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICDU5BViBXSElSTFBPT0wJAGsDBQJkOAUPd2hpcmxwb29sc3VwcGx5CQBkAgkAZAIJAGQCCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAQhQTF92YWx1ZQIFBlBMX0xvdwUFd2F2ZXMFCnR2bGlud2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkJAMwIAgkBDEludGVnZXJFbnRyeQICIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQUk9JIGJhc2lzIHBvaW50cwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIQUk9JIGJhc2lzIHBvaW50cwUDbmlsAWkBE1Bvb2xPbmVUb2tlblN1cnBsdXMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQNc3VycGx1c2Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwQTUG9vbE9uZVRva2VuU3VycGx1cwkA/AcECQEHQWRkcmVzcwEBGgFX/SXDvU5hlEHvul4SY4/FOW9JtYg69eltAiFnZW5lcmF0ZUluZGV4V2l0aE9uZVRva2VuQW5kU3Rha2UJAMwIAgUKcG9vbFN0cmluZwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQ1zdXJwbHVzYW1vdW50BQNuaWwDCQAAAgUTUG9vbE9uZVRva2VuU3VycGx1cwUTUG9vbE9uZVRva2VuU3VycGx1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAZQIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMFDXN1cnBsdXNhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxCb29zdFBvb2xBUFkAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQSd2F2ZXNCYWxhbmNlQmVmb3JlCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQMJAAACBRJ3YXZlc0JhbGFuY2VCZWZvcmUFEndhdmVzQmFsYW5jZUJlZm9yZQQFY2xhaW0JAPwHBAkBB0FkZHJlc3MBBQZwb29sSWQCEWNsYWltSW5kZXhSZXdhcmRzBQNuaWwFA25pbAMJAAACBQVjbGFpbQUFY2xhaW0EC3N3YXBidXJueHRuCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQlidXJueHRuSWQJAPAHAgUEdGhpcwUJYnVybnh0bklkBQNuaWwDCQAAAgULc3dhcGJ1cm54dG4FC3N3YXBidXJueHRuBAtzd2FwdXNkdGVyYwkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHdXNkdGVyYwkA8AcCBQR0aGlzBQd1c2R0ZXJjBQNuaWwDCQAAAgULc3dhcHVzZHRlcmMFC3N3YXB1c2R0ZXJjBAtzd2FwdXNkdGJzYwkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHdXNkdGJzYwkA8AcCBQR0aGlzBQd1c2R0YnNjBQNuaWwDCQAAAgULc3dhcHVzZHRic2MFC3N3YXB1c2R0YnNjBAtzd2FwdXNkY2VyYwkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHdXNkY2VyYwkA8AcCBQR0aGlzBQd1c2RjZXJjBQNuaWwDCQAAAgULc3dhcHVzZGNlcmMFC3N3YXB1c2RjZXJjBAtzd2FwdXNkY2JzYwkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHdXNkY2JzYwkA8AcCBQR0aGlzBQd1c2RjYnNjBQNuaWwDCQAAAgULc3dhcHVzZGNic2MFC3N3YXB1c2RjYnNjBAdzd2FwZXRoCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQNldGgJAPAHAgUEdGhpcwUDZXRoBQNuaWwDCQAAAgUHc3dhcGV0aAUHc3dhcGV0aAQHc3dhcGJuYgkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUDYm5iCQDwBwIFBHRoaXMFA2JuYgUDbmlsAwkAAAIFB3N3YXBibmIFB3N3YXBibmIECHN3YXB3YnRjCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR3YnRjCQDwBwIFBHRoaXMFBHdidGMFA25pbAMJAAACBQhzd2Fwd2J0YwUIc3dhcHdidGMECHN3YXBidGNiCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRidGNiCQDwBwIFBHRoaXMFBGJ0Y2IFA25pbAMJAAACBQhzd2FwYnRjYgUIc3dhcGJ0Y2IEEXdhdmVzQmFsYW5jZUFmdGVyCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQQPd2F2ZXNEaWZmZXJlbmNlCQBlAgURd2F2ZXNCYWxhbmNlQWZ0ZXIFEndhdmVzQmFsYW5jZUJlZm9yZQQQd2F2ZXNBbW91bnRCb29zdAkAawMFD3dhdmVzRGlmZmVyZW5jZQBQAGQEC2Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50T3duZXIJAGsDBQ93YXZlc0RpZmZlcmVuY2UAFABkBAVib29zdAkA/AcECQEHQWRkcmVzcwEFC3Bvb2xib29zdFNDAgthZGRCb29zdGluZwkAzAgCBQ93aGlybHBvb2xzdHJpbmcJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC2Ftb3VudEJvb3N0BQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUMcHJvamVjdG93bmVyBQthbW91bnRPd25lcgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAGQCBRB3YXZlc0Ftb3VudEJvb3N0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQUk9JIGJhc2lzIHBvaW50cwkAawMJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzAJBOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFEJvb3N0UG9vbEFQWXdFVEhtYWluAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEE2NhbGN1bGF0ZVRva2VuUmF0ZXMJAPwHBAUHUExfTWFpbgITY2FsY3VsYXRlVG9rZW5SYXRlcwkAzAgCBwUDbmlsBQNuaWwDCQAAAgUTY2FsY3VsYXRlVG9rZW5SYXRlcwUTY2FsY3VsYXRlVG9rZW5SYXRlcwQOd2l0aGRyYXdhbW91bnQJAGUCCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgJAQ10cnlHZXRJbnRlZ2VyAQIMRVRIIHN1cHBsaWVkBBJ3YXZlc0JhbGFuY2VCZWZvcmUICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBAh3aXRoZHJhdwkA/AcECQEHQWRkcmVzcwEBGgFXIJRcSq3P9Eg5O4hAs7/b7oxQoKdqz9roAgh3aXRoZHJhdwkAzAgCCQDYBAEFA2V0aAkAzAgCBQ53aXRoZHJhd2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUId2l0aGRyYXcFCHdpdGhkcmF3BAdzd2FwZXRoCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQNldGgJAPAHAgUEdGhpcwUDZXRoBQNuaWwDCQAAAgUHc3dhcGV0aAUHc3dhcGV0aAQRd2F2ZXNCYWxhbmNlQWZ0ZXIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBA93YXZlc0RpZmZlcmVuY2UJAGUCBRF3YXZlc0JhbGFuY2VBZnRlcgUSd2F2ZXNCYWxhbmNlQmVmb3JlBAthbW91bnRCb29zdAkAawMFD3dhdmVzRGlmZmVyZW5jZQBQAGQEC2Ftb3VudE93bmVyCQBrAwUPd2F2ZXNEaWZmZXJlbmNlABQAZAQFYm9vc3QJAPwHBAkBB0FkZHJlc3MBBQtwb29sYm9vc3RTQwILYWRkQm9vc3RpbmcJAMwIAgUPd2hpcmxwb29sc3RyaW5nCQDMCAIABwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQthbW91bnRCb29zdAUDbmlsAwkAAAIFBWJvb3N0BQVib29zdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFDHByb2plY3Rvd25lcgULYW1vdW50T3duZXIFBHVuaXQJAMwIAgkBDEludGVnZXJFbnRyeQICIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQBkAgULYW1vdW50Qm9vc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBST0kgYmFzaXMgcG9pbnRzCQBrAwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMAkE4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWQm9vc3RQb29sQVBZd1doaXJscG9vbAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBBJ3YXZlc0JhbGFuY2VCZWZvcmUICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBAVjbGFpbQkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIRY2xhaW1JbmRleFJld2FyZHMFA25pbAUDbmlsAwkAAAIFBWNsYWltBQVjbGFpbQQNc3dhcHdoaXJscG9vbAkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUJd2hpcmxwb29sCQDwBwIFBHRoaXMFCXdoaXJscG9vbAUDbmlsAwkAAAIFDXN3YXB3aGlybHBvb2wFDXN3YXB3aGlybHBvb2wEEXdhdmVzQmFsYW5jZUFmdGVyCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQQPd2F2ZXNEaWZmZXJlbmNlCQBlAgURd2F2ZXNCYWxhbmNlQWZ0ZXIFEndhdmVzQmFsYW5jZUJlZm9yZQQQd2F2ZXNBbW91bnRCb29zdAkAawMFD3dhdmVzRGlmZmVyZW5jZQBQAGQEC2Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50T3duZXIJAGsDBQ93YXZlc0RpZmZlcmVuY2UAFABkBAVib29zdAkA/AcECQEHQWRkcmVzcwEFC3Bvb2xib29zdFNDAgthZGRCb29zdGluZwkAzAgCBQ93aGlybHBvb2xzdHJpbmcJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC2Ftb3VudEJvb3N0BQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUMcHJvamVjdG93bmVyBQthbW91bnRPd25lcgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAGQCBRB3YXZlc0Ftb3VudEJvb3N0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQUk9JIGJhc2lzIHBvaW50cwkAawMJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzAJBOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDVN1cHBseUVUSG1haW4AAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQMc3VwcGx5YW1vdW50CQDwBwIFBHRoaXMFA2V0aAQNU3VwcGx5RVRIbWFpbgMJAGYCBQxzdXBwbHlhbW91bnQAAAkA/AcECQEHQWRkcmVzcwEBGgFXIJRcSq3P9Eg5O4hAs7/b7oxQoKdqz9roAgZzdXBwbHkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUDZXRoBQxzdXBwbHlhbW91bnQFA25pbAUEdW5pdAMJAAACBQ1TdXBwbHlFVEhtYWluBQ1TdXBwbHlFVEhtYWluCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxFVEggc3VwcGxpZWQJAGQCBQxzdXBwbHlhbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQIMRVRIIHN1cHBsaWVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESd2l0aGRyYXdXQVZFU19NYWluAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEEndpdGhkcmF3YW1vdW50TWFpbgkAZQIJAQhQTF92YWx1ZQIFB1BMX01haW4FBXdhdmVzCQBpAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5AAMECndpdGhkcmF3V00JAPwHBAUHUExfTWFpbgIId2l0aGRyYXcJAMwIAgkA2AQBBQV3YXZlcwkAzAgCBRJ3aXRoZHJhd2Ftb3VudE1haW4FA25pbAUDbmlsAwkAAAIFCndpdGhkcmF3V00FCndpdGhkcmF3V00FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJ3aXRoZHJhd1dBVkVTX0RlZmkAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQSd2l0aGRyYXdhbW91bnREZWZpCQBlAgkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAGkCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkAAwQKd2l0aGRyYXdXRAkA/AcEBQdQTF9EZWZpAgh3aXRoZHJhdwkAzAgCCQDYBAEFBXdhdmVzCQDMCAIFEndpdGhkcmF3YW1vdW50RGVmaQUDbmlsBQNuaWwDCQAAAgUKd2l0aGRyYXdXRAUKd2l0aGRyYXdXRAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEXdpdGhkcmF3V0FWRVNfTG93AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEEXdpdGhkcmF3YW1vdW50TG93CQBlAgkBCFBMX3ZhbHVlAgUGUExfTG93BQV3YXZlcwkAaQIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCHndhdmVsZXRzIHJlY2VpdmVkIGZvciB0cmVhc3VyeQADBAp3aXRoZHJhd1dMCQD8BwQFBlBMX0xvdwIId2l0aGRyYXcJAMwIAgkA2AQBBQV3YXZlcwkAzAgCBRF3aXRoZHJhd2Ftb3VudExvdwUDbmlsBQNuaWwDCQAAAgUKd2l0aGRyYXdXTAUKd2l0aGRyYXdXTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCXN0YWtlRUFTVAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBAxzdXBwbHlhbW91bnQJAPAHAgUEdGhpcwUEZWFzdAQJc3Rha2VFQVNUAwkAZgIFDHN1cHBseWFtb3VudAAACQD8BwQFCkVBU1Rfc3Rha2UCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBGVhc3QFDHN1cHBseWFtb3VudAUDbmlsBQR1bml0AwkAAAIFCXN0YWtlRUFTVAUJc3Rha2VFQVNUCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtFQVNUIHN0YWtlZAkAZAIFDHN1cHBseWFtb3VudAkBDXRyeUdldEludGVnZXIBAgtFQVNUIHN0YWtlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEkNoYW5nZUludGVnZXJFbnRyeQIDa2V5B2ludGVnZXIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkFB2ludGVnZXIFA25pbABCkbRS", "height": 3847957, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5m4rnqQCPL9PGiyjHEgXB2SgUUUfCJGvt6zWwpijHvQx Next: 4WLgJJ4eYiW2bi1YBtxpsWHzkE3Sa9WtKVBLJhBBGgwR Diff:
OldNewDifferences
317317
318318
319319 @Callable(i)
320-func PriceSupplyTreasury () = [IntegerEntry("PL BT Main", PL_value(PL_Main, waves)), IntegerEntry("PL BT Defi", PL_value(PL_Defi, waves)), IntegerEntry("PL BT Low", PL_value(PL_Low, waves)), IntegerEntry("PL base treasury", ((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves))), IntegerEntry("surplus treasury BURN-XTN x PepeTeam in wavelets", fraction((wavesinpool * 10), projectstake, totalstake)), IntegerEntry("ETH Puzzle Lend main pool", PL_value(PL_Main, eth)), IntegerEntry("surplus treasury ETH Puzzle Lend main pool in wavelets", fraction(PL_value(PL_Main, eth), ethwaves, d8)), IntegerEntry("surplus treasury WHIRLPOOL AMM in wavelets", fraction((wavesinwhirlpool * 10), projectstakewhirl, totalstakewhirl)), IntegerEntry("ST EAST in staking", EASTinstaking), IntegerEntry("ST stEAST in waves", stEASTinwaves), IntegerEntry("Total surplus treasury value in wavelets", tvlinwaves), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL mid market price", fraction(d8, (wavesinwhirlpool * 9), whirlinwhirlpool)), IntegerEntry("WHIRLPOOL total supply", whirlpoolsupply), IntegerEntry("Total treasury", (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves)), IntegerEntry("NAV WHIRLPOOL", fraction(d8, whirlpoolsupply, (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves))), IntegerEntry("total WAVES received in wavelets", getIntegerValue(this, "total WAVES received in wavelets")), IntegerEntry("surplus received in wavelets", getIntegerValue(this, "surplus received in wavelets")), IntegerEntry("wavelets received for treasury", getIntegerValue(this, "wavelets received for treasury")), IntegerEntry("total WAVES paid out in wavelets", getIntegerValue(this, "total WAVES paid out in wavelets")), IntegerEntry("ROI basis points", getIntegerValue(this, "ROI basis points"))]
320+func PriceSurplusSupply () = [IntegerEntry("PL BT Main", PL_value(PL_Main, waves)), IntegerEntry("PL BT Defi", PL_value(PL_Defi, waves)), IntegerEntry("PL BT Low", PL_value(PL_Low, waves)), IntegerEntry("PL base treasury", ((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves))), IntegerEntry("surplus treasury BURN-XTN x PepeTeam in wavelets", fraction((wavesinpool * 10), projectstake, totalstake)), IntegerEntry("ETH Puzzle Lend main pool", PL_value(PL_Main, eth)), IntegerEntry("surplus treasury ETH Puzzle Lend main pool in wavelets", fraction(PL_value(PL_Main, eth), ethwaves, d8)), IntegerEntry("surplus treasury WHIRLPOOL AMM in wavelets", fraction((wavesinwhirlpool * 10), projectstakewhirl, totalstakewhirl)), IntegerEntry("ST EAST in staking", EASTinstaking), IntegerEntry("ST stEAST in waves", stEASTinwaves), IntegerEntry("Total surplus treasury value in wavelets", tvlinwaves), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL mid market price", fraction(d8, (wavesinwhirlpool * 9), whirlinwhirlpool)), IntegerEntry("WHIRLPOOL total supply", whirlpoolsupply), IntegerEntry("Total treasury", (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves)), IntegerEntry("NAV WHIRLPOOL", fraction(d8, whirlpoolsupply, (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves))), IntegerEntry("total WAVES received in wavelets", getIntegerValue(this, "total WAVES received in wavelets")), IntegerEntry("surplus received in wavelets", getIntegerValue(this, "surplus received in wavelets")), IntegerEntry("wavelets received for treasury", getIntegerValue(this, "wavelets received for treasury")), IntegerEntry("total WAVES paid out in wavelets", getIntegerValue(this, "total WAVES paid out in wavelets")), IntegerEntry("ROI basis points", getIntegerValue(this, "ROI basis points"))]
321321
322322
323323
335335
336336
337337 @Callable(i)
338-func BoostPoolAPYwBURNxtnPPT () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
339- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
338+func BoostPoolAPY () = if ((i.caller != this))
339+ then throw("access only by project owner")
340340 else {
341341 let wavesBalanceBefore = wavesBalance(this).available
342342 if ((wavesBalanceBefore == wavesBalanceBefore))
378378 let amountOwner = fraction(wavesDifference, 20, 100)
379379 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
380380 if ((boost == boost))
381- then {
382- let activated = if ((i.caller == this))
383- then IntegerEntry("Activated blockheight", height)
384- else IntegerEntry("Activated by anybody blockheight", height)
385-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
386- }
381+ then [ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets")))]
387382 else throw("Strict value is not equal to itself.")
388383 }
389384 else throw("Strict value is not equal to itself.")
412407
413408
414409 @Callable(i)
415-func BoostPoolAPYwETHmain () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
416- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
410+func BoostPoolAPYwETHmain () = if ((i.caller != this))
411+ then throw("access only by project owner")
417412 else {
418413 let calculateTokenRates = invoke(PL_Main, "calculateTokenRates", [false], nil)
419414 if ((calculateTokenRates == calculateTokenRates))
434429 let amountOwner = fraction(wavesDifference, 20, 100)
435430 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
436431 if ((boost == boost))
437- then {
438- let activated = if ((i.caller == this))
439- then IntegerEntry("Activated blockheight", height)
440- else IntegerEntry("Activated by anybody blockheight", height)
441-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (amountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
442- }
432+ then [ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (amountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets")))]
443433 else throw("Strict value is not equal to itself.")
444434 }
445435 else throw("Strict value is not equal to itself.")
454444
455445
456446 @Callable(i)
457-func BoostPoolAPYwWhirlpool () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
458- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
447+func BoostPoolAPYwWhirlpool () = if ((i.caller != this))
448+ then throw("access only by project owner")
459449 else {
460450 let wavesBalanceBefore = wavesBalance(this).available
461451 if ((wavesBalanceBefore == wavesBalanceBefore))
473463 let amountOwner = fraction(wavesDifference, 20, 100)
474464 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
475465 if ((boost == boost))
476- then {
477- let activated = if ((i.caller == this))
478- then IntegerEntry("Activated blockheight", height)
479- else IntegerEntry("Activated by anybody blockheight", height)
480-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
481- }
466+ then [ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets")))]
482467 else throw("Strict value is not equal to itself.")
483468 }
484469 else throw("Strict value is not equal to itself.")
506491
507492
508493 @Callable(i)
509-func BoostPoolAPYwWAVES_Main () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
510- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
494+func withdrawWAVES_Main () = if ((i.caller != this))
495+ then throw("access only by project owner")
511496 else {
512- let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
513- then d8
514- else wavesBalance(this).available
515- if ((wavesBalanceBefore == wavesBalanceBefore))
516- then {
517- let withdrawamountMain = (PL_value(PL_Main, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
518- let withdrawWM = invoke(PL_Main, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
519- if ((withdrawWM == withdrawWM))
520- then {
521- let wavesBalanceAfter = wavesBalance(this).available
522- let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
523- let wavesAmountBoost = fraction(wavesDifference, 80, 100)
524- let amountBoost = fraction(wavesDifference, 80, 100)
525- let amountOwner = fraction(wavesDifference, 20, 100)
526- let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
527- if ((boost == boost))
528- then {
529- let activated = if ((i.caller == this))
530- then IntegerEntry("Activated blockheight", height)
531- else IntegerEntry("Activated by anybody blockheight", height)
532-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
533- }
534- else throw("Strict value is not equal to itself.")
535- }
536- else throw("Strict value is not equal to itself.")
537- }
497+ let withdrawamountMain = (PL_value(PL_Main, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
498+ let withdrawWM = invoke(PL_Main, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
499+ if ((withdrawWM == withdrawWM))
500+ then nil
538501 else throw("Strict value is not equal to itself.")
539502 }
540503
541504
542505
543506 @Callable(i)
544-func BoostPoolAPYwWAVES_Defi () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
545- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
507+func withdrawWAVES_Defi () = if ((i.caller != this))
508+ then throw("access only by project owner")
546509 else {
547- let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
548- then d8
549- else wavesBalance(this).available
550- if ((wavesBalanceBefore == wavesBalanceBefore))
551- then {
552- let withdrawamountMain = (PL_value(PL_Defi, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
553- let withdrawWM = invoke(PL_Defi, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
554- if ((withdrawWM == withdrawWM))
555- then {
556- let wavesBalanceAfter = wavesBalance(this).available
557- let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
558- let wavesAmountBoost = fraction(wavesDifference, 80, 100)
559- let amountBoost = fraction(wavesDifference, 80, 100)
560- let amountOwner = fraction(wavesDifference, 20, 100)
561- let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
562- if ((boost == boost))
563- then {
564- let activated = if ((i.caller == this))
565- then IntegerEntry("Activated blockheight", height)
566- else IntegerEntry("Activated by anybody blockheight", height)
567-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
568- }
569- else throw("Strict value is not equal to itself.")
570- }
571- else throw("Strict value is not equal to itself.")
572- }
510+ let withdrawamountDefi = (PL_value(PL_Defi, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
511+ let withdrawWD = invoke(PL_Defi, "withdraw", [toBase58String(waves), withdrawamountDefi], nil)
512+ if ((withdrawWD == withdrawWD))
513+ then nil
573514 else throw("Strict value is not equal to itself.")
574515 }
575516
576517
577518
578519 @Callable(i)
579-func BoostPoolAPYwWAVES_Low () = if (if ((i.caller != this))
580- then ((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)
581- else false)
582- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
520+func withdrawWAVES_Low () = if ((i.caller != this))
521+ then throw("access only by project owner")
583522 else {
584- let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
585- then d8
586- else wavesBalance(this).available
587- if ((wavesBalanceBefore == wavesBalanceBefore))
588- then {
589- let withdrawamountMain = (PL_value(PL_Low, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
590- let withdrawWM = invoke(PL_Low, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
591- if ((withdrawWM == withdrawWM))
592- then {
593- let wavesBalanceAfter = wavesBalance(this).available
594- let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
595- let wavesAmountBoost = fraction(wavesDifference, 80, 100)
596- let amountBoost = fraction(wavesDifference, 80, 100)
597- let amountOwner = fraction(wavesDifference, 20, 100)
598- let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
599- if ((boost == boost))
600- then {
601- let activated = if ((i.caller == this))
602- then IntegerEntry("Activated blockheight", height)
603- else IntegerEntry("Activated by anybody blockheight", height)
604-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
605- }
606- else throw("Strict value is not equal to itself.")
607- }
608- else throw("Strict value is not equal to itself.")
609- }
523+ let withdrawamountLow = (PL_value(PL_Low, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
524+ let withdrawWL = invoke(PL_Low, "withdraw", [toBase58String(waves), withdrawamountLow], nil)
525+ if ((withdrawWL == withdrawWL))
526+ then nil
610527 else throw("Strict value is not equal to itself.")
611528 }
612529
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let d8 = 100000000
55
66 let d16 = (d8 * d8)
77
88 let poolId = base58'3PQHndCUVrv3wBuQjbvVP9SnGmfbfitGxfx'
99
1010 let poolString = toBase58String(poolId)
1111
1212 let projectowner = base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'
1313
1414 let whirlpoolPoolId = base58'3P2myTbd5zpEHcYmNpdWTp5gXS5B8tL1RCY'
1515
1616 let whirlpoolstring = toBase58String(whirlpoolPoolId)
1717
1818 let poolboostSC = base58'3PAeY7RgwuNUZNscGqahqJxFTFDkh7fbNwJ'
1919
2020 let project = base58'3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr'
2121
2222 let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi'
2323
2424 let waves = base58'WAVES'
2525
2626 let usdterc = base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2727
2828 let usdcerc = base58'HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW'
2929
3030 let usdtbsc = base58'A81p1LTRyoq2rDR2TNxB2dWYxsiNwCSSi8sXef2SEkwb'
3131
3232 let usdcbsc = base58'4BKKSp6NoNcrFHyorZogDyctq1fq6w7114Ym1pw6HUtC'
3333
3434 let burnxtnId = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns'
3535
3636 let eth = base58'3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13'
3737
3838 let bnb = base58'66a1br3BrkoaJgP7yEar9hJcSTvJPoH6PYBLqscXcMGo'
3939
4040 let wbtc = base58'2Fge5HEBRD3XTeg7Xg3FW5yiB9HVJFQtMXiWMQo72Up6'
4141
4242 let btcb = base58'EW1uGLVo21Wd9i2Rhq8o4VKDTCQTGCGXE8DqayHGrLg8'
4343
4444 let east = base58'6phK22ztGBW127gUFmdMEHKB3CVd6ZhWox2WtwJkbqTq'
4545
4646 let steast = base58'GAB8JowY9UANZ4TQy2TzJyhxjPqXX3DUrb2cdMWrrJus'
4747
4848 let swaves = base58'YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7'
4949
5050 func tryGetInteger (key) = match getInteger(this, key) {
5151 case b: Int =>
5252 b
5353 case _ =>
5454 0
5555 }
5656
5757
5858 let PL_Main = Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH')
5959
6060 let PL_Defi = Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X')
6161
6262 let PL_Low = Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH')
6363
6464 let EAST_stake = Address(base58'3P2hbtheN5apNppqqUK7L7qAwmRFXy91CNa')
6565
6666 let WX_WAVES_EAST = Address(base58'3PJVwjfi2fF5Jv9AauayU6xLxrYBn8bpGH1')
6767
6868 let SWAVES_stake = Address(base58'3PDPzZVLhN1EuzGy4xAxjjTVkawKDLEaHiV')
6969
7070 let address = toString(Address(project))
7171
7272 func PL_value (dAppAddress,asset) = fraction(getIntegerValue(dAppAddress, ((address + "_supplied_") + toBase58String(asset))), getIntegerValue(dAppAddress, (toBase58String(asset) + "_sRate")), d16)
7373
7474
7575 let ethinpool = getIntegerValue(Address(poolId), (("global_" + toBase58String(eth)) + "_balance"))
7676
7777 let wavesinpool = getIntegerValue(Address(poolId), (("global_" + toBase58String(waves)) + "_balance"))
7878
7979 let projectstake = getIntegerValue(Address(poolId), ("3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr" + "_indexStaked"))
8080
8181 let totalstake = getIntegerValue(Address(poolId), "global_poolToken_amount")
8282
8383 let ethwaves = fraction(d8, wavesinpool, ethinpool)
8484
8585 func _loadInt (key_,default_) = match getInteger(SWAVES_stake, key_) {
8686 case a: Int =>
8787 a
8888 case _ =>
8989 default_
9090 }
9191
9292
9393 func _loadBigInt (key_,default_) = match getBinary(SWAVES_stake, key_) {
9494 case a: ByteVector =>
9595 toBigInt(a)
9696 case _ =>
9797 default_
9898 }
9999
100100
101101 let lastRate = _loadBigInt("LAST_RATE", toBigInt(1000000000000))
102102
103103 let currentRate = _loadBigInt("CURRENT_RATE", toBigInt(0))
104104
105105 let lastHeight = _loadInt("LAST_HEIGHT", 0)
106106
107107 let targetHeight = min([_loadInt("TARGET_HEIGHT", 0), height])
108108
109109 let lastRateUpdated = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight))))
110110
111111 let baseAmount = toInt(fraction(toBigInt(assetBalance(WX_WAVES_EAST, swaves)), lastRateUpdated, toBigInt(1000000000000), FLOOR))
112112
113113 let wavesinWX = (wavesBalance(WX_WAVES_EAST).regular + baseAmount)
114114
115115 let eastinWX = assetBalance(WX_WAVES_EAST, east)
116116
117117 let waveseast = fraction((d8 * 100), eastinWX, wavesinWX)
118118
119119 let wavesinwhirlpool = getIntegerValue(Address(whirlpoolPoolId), (("global_" + toBase58String(waves)) + "_balance"))
120120
121121 let whirlinwhirlpool = getIntegerValue(Address(whirlpoolPoolId), (("global_" + toBase58String(whirlpool)) + "_balance"))
122122
123123 let projectstakewhirl = getIntegerValue(Address(whirlpoolPoolId), ("3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr" + "_indexStaked"))
124124
125125 let totalstakewhirl = getIntegerValue(Address(whirlpoolPoolId), "global_poolToken_amount")
126126
127127 let stEASTinwaves = (fraction((fraction(assetBalance(this, steast), getIntegerValue(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100), d8, waveseast) * 100)
128128
129129 let EASTinstaking = (fraction(assetBalance(this, steast), getIntegerValue(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100)
130130
131131 let tvlinwaves = (((fraction((wavesinpool * 10), projectstake, totalstake) + fraction(PL_value(PL_Main, eth), ethwaves, d8)) + fraction((wavesinwhirlpool * 10), projectstakewhirl, totalstakewhirl)) + stEASTinwaves)
132132
133133 let whirlpoolsupply = match assetInfo(whirlpool) {
134134 case asset: Asset =>
135135 asset.quantity
136136 case _ =>
137137 throw("Can't find asset")
138138 }
139139
140140 let price = if (((fraction((tvlinwaves + getIntegerValue(this, "surplus received in wavelets")), d8, whirlpoolsupply) + d8) >= getIntegerValue(this, "WHIRLPOOL issue price in wavelets")))
141141 then (fraction((tvlinwaves + getIntegerValue(this, "surplus received in wavelets")), d8, whirlpoolsupply) + d8)
142142 else getIntegerValue(this, "WHIRLPOOL issue price in wavelets")
143143
144144 func tryGetIntegerP (key) = match getInteger(Address(whirlpoolPoolId), key) {
145145 case b: Int =>
146146 b
147147 case _ =>
148148 0
149149 }
150150
151151
152152 func tryGetStringP (key) = match getString(Address(whirlpoolPoolId), key) {
153153 case b: String =>
154154 b
155155 case _ =>
156156 ""
157157 }
158158
159159
160160 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
161161 then unit
162162 else fromBase58String(assetIdStr)
163163
164164
165165 func getAssetString (assetId) = match assetId {
166166 case b: ByteVector =>
167167 toBase58String(b)
168168 case _ =>
169169 "WAVES"
170170 }
171171
172172
173173 func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)])
174174
175175
176176 func addAssetWeightToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_weight"))])
177177
178178
179179 func addAssetDecimalsToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_decimals"))])
180180
181181
182182 func addAssetScaleToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_scale"))])
183183
184184
185185 let T = tryGetIntegerP("static_tokensAmount")
186186
187187 let assetIds = {
188188 let $l = split(tryGetStringP("static_tokenIds"), ",")
189189 let $s = size($l)
190190 let $acc0 = nil
191191 func $f0_1 ($a,$i) = if (($i >= $s))
192192 then $a
193193 else addAssetBytesToList($a, $l[$i])
194194
195195 func $f0_2 ($a,$i) = if (($i >= $s))
196196 then $a
197197 else throw("List size exceeds 10")
198198
199199 $f0_2($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)
200200 }
201201
202202 let AssetsWeights = {
203203 let $l = assetIds
204204 let $s = size($l)
205205 let $acc0 = nil
206206 func $f1_1 ($a,$i) = if (($i >= $s))
207207 then $a
208208 else addAssetWeightToList($a, $l[$i])
209209
210210 func $f1_2 ($a,$i) = if (($i >= $s))
211211 then $a
212212 else throw("List size exceeds 10")
213213
214214 $f1_2($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)
215215 }
216216
217217 let Decimals = {
218218 let $l = assetIds
219219 let $s = size($l)
220220 let $acc0 = nil
221221 func $f2_1 ($a,$i) = if (($i >= $s))
222222 then $a
223223 else addAssetDecimalsToList($a, $l[$i])
224224
225225 func $f2_2 ($a,$i) = if (($i >= $s))
226226 then $a
227227 else throw("List size exceeds 10")
228228
229229 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
230230 }
231231
232232 let Scales = {
233233 let $l = assetIds
234234 let $s = size($l)
235235 let $acc0 = nil
236236 func $f3_1 ($a,$i) = if (($i >= $s))
237237 then $a
238238 else addAssetScaleToList($a, $l[$i])
239239
240240 func $f3_2 ($a,$i) = if (($i >= $s))
241241 then $a
242242 else throw("List size exceeds 10")
243243
244244 $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
245245 }
246246
247247 @Callable(i)
248248 func buyWHIRLPOOLwithWAVES () = {
249249 let pmt = value(i.payments[0])
250250 let surplus = fraction((price - d8), pmt.amount, d8)
251251 let IssueAmount = if ((pmt.amount > fraction(pmt.amount, d8, price)))
252252 then fraction(pmt.amount, d8, price)
253253 else throw("please contact project owner: issue amount error")
254254 let supplyamount = ((pmt.amount - surplus) / 3)
255255 let AmountIn = pmt.amount
256256 let AssetInBalance = wavesinwhirlpool
257257 let AssetOutBalance = whirlinwhirlpool
258258 let feeAmountIn = fraction(AmountIn, 200, 10000)
259259 let cleanAmountIn = (AmountIn - feeAmountIn)
260260 let IndexIn = value(indexOf(assetIds, unit))
261261 let IndexOut = value(indexOf(assetIds, whirlpool))
262262 let AmountOut = fraction(AssetOutBalance, ((d8 * d8) - toInt(pow(fraction(toBigInt(AssetInBalance), toBigInt((d8 * d8)), toBigInt((AssetInBalance + cleanAmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (d8 * d8), DOWN)
263263 let WhirlpoolBalanceBefore = assetBalance(this, whirlpool)
264264 if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore))
265265 then if ((pmt.assetId != unit))
266266 then throw("attach WAVES token only")
267267 else {
268268 let swap = if ((AmountOut > IssueAmount))
269269 then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolstring, (IssueAmount + 1)], [AttachedPayment(unit, AmountIn)])
270270 else unit
271271 if ((swap == swap))
272272 then {
273273 let SupplyWavesMainPool = if ((IssueAmount >= AmountOut))
274274 then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
275275 else unit
276276 if ((SupplyWavesMainPool == SupplyWavesMainPool))
277277 then {
278278 let SupplyWavesWavesDefiPool = if ((IssueAmount >= AmountOut))
279279 then invoke(Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X'), "supply", nil, [AttachedPayment(unit, supplyamount)])
280280 else unit
281281 if ((SupplyWavesWavesDefiPool == SupplyWavesWavesDefiPool))
282282 then {
283283 let SupplyWavesLowCap = if ((IssueAmount >= AmountOut))
284284 then invoke(Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
285285 else unit
286286 if ((SupplyWavesLowCap == SupplyWavesLowCap))
287287 then {
288288 let WhirlpoolBalanceAfter = assetBalance(this, whirlpool)
289289 if ((WhirlpoolBalanceAfter == WhirlpoolBalanceAfter))
290290 then {
291291 let WhirlpoolFromSwap = (WhirlpoolBalanceBefore - WhirlpoolBalanceAfter)
292292 [Reissue(whirlpool, if ((IssueAmount >= AmountOut))
293293 then IssueAmount
294294 else 0, true), ScriptTransfer(i.caller, if ((IssueAmount >= AmountOut))
295295 then IssueAmount
296296 else WhirlpoolFromSwap, whirlpool), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL buy market price in wavelets", fraction(d8, AmountIn, AmountOut)), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut))
297297 then pmt.amount
298298 else (0 + getIntegerValue(this, "total WAVES received in wavelets"))), IntegerEntry("surplus received in wavelets", if ((IssueAmount >= AmountOut))
299299 then surplus
300300 else (0 + getIntegerValue(this, "surplus received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut))
301301 then (IssueAmount - surplus)
302302 else (0 + getIntegerValue(this, "wavelets received for treasury")))]
303303 }
304304 else throw("Strict value is not equal to itself.")
305305 }
306306 else throw("Strict value is not equal to itself.")
307307 }
308308 else throw("Strict value is not equal to itself.")
309309 }
310310 else throw("Strict value is not equal to itself.")
311311 }
312312 else throw("Strict value is not equal to itself.")
313313 }
314314 else throw("Strict value is not equal to itself.")
315315 }
316316
317317
318318
319319 @Callable(i)
320-func PriceSupplyTreasury () = [IntegerEntry("PL BT Main", PL_value(PL_Main, waves)), IntegerEntry("PL BT Defi", PL_value(PL_Defi, waves)), IntegerEntry("PL BT Low", PL_value(PL_Low, waves)), IntegerEntry("PL base treasury", ((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves))), IntegerEntry("surplus treasury BURN-XTN x PepeTeam in wavelets", fraction((wavesinpool * 10), projectstake, totalstake)), IntegerEntry("ETH Puzzle Lend main pool", PL_value(PL_Main, eth)), IntegerEntry("surplus treasury ETH Puzzle Lend main pool in wavelets", fraction(PL_value(PL_Main, eth), ethwaves, d8)), IntegerEntry("surplus treasury WHIRLPOOL AMM in wavelets", fraction((wavesinwhirlpool * 10), projectstakewhirl, totalstakewhirl)), IntegerEntry("ST EAST in staking", EASTinstaking), IntegerEntry("ST stEAST in waves", stEASTinwaves), IntegerEntry("Total surplus treasury value in wavelets", tvlinwaves), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL mid market price", fraction(d8, (wavesinwhirlpool * 9), whirlinwhirlpool)), IntegerEntry("WHIRLPOOL total supply", whirlpoolsupply), IntegerEntry("Total treasury", (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves)), IntegerEntry("NAV WHIRLPOOL", fraction(d8, whirlpoolsupply, (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves))), IntegerEntry("total WAVES received in wavelets", getIntegerValue(this, "total WAVES received in wavelets")), IntegerEntry("surplus received in wavelets", getIntegerValue(this, "surplus received in wavelets")), IntegerEntry("wavelets received for treasury", getIntegerValue(this, "wavelets received for treasury")), IntegerEntry("total WAVES paid out in wavelets", getIntegerValue(this, "total WAVES paid out in wavelets")), IntegerEntry("ROI basis points", getIntegerValue(this, "ROI basis points"))]
320+func PriceSurplusSupply () = [IntegerEntry("PL BT Main", PL_value(PL_Main, waves)), IntegerEntry("PL BT Defi", PL_value(PL_Defi, waves)), IntegerEntry("PL BT Low", PL_value(PL_Low, waves)), IntegerEntry("PL base treasury", ((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves))), IntegerEntry("surplus treasury BURN-XTN x PepeTeam in wavelets", fraction((wavesinpool * 10), projectstake, totalstake)), IntegerEntry("ETH Puzzle Lend main pool", PL_value(PL_Main, eth)), IntegerEntry("surplus treasury ETH Puzzle Lend main pool in wavelets", fraction(PL_value(PL_Main, eth), ethwaves, d8)), IntegerEntry("surplus treasury WHIRLPOOL AMM in wavelets", fraction((wavesinwhirlpool * 10), projectstakewhirl, totalstakewhirl)), IntegerEntry("ST EAST in staking", EASTinstaking), IntegerEntry("ST stEAST in waves", stEASTinwaves), IntegerEntry("Total surplus treasury value in wavelets", tvlinwaves), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL mid market price", fraction(d8, (wavesinwhirlpool * 9), whirlinwhirlpool)), IntegerEntry("WHIRLPOOL total supply", whirlpoolsupply), IntegerEntry("Total treasury", (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves)), IntegerEntry("NAV WHIRLPOOL", fraction(d8, whirlpoolsupply, (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves))), IntegerEntry("total WAVES received in wavelets", getIntegerValue(this, "total WAVES received in wavelets")), IntegerEntry("surplus received in wavelets", getIntegerValue(this, "surplus received in wavelets")), IntegerEntry("wavelets received for treasury", getIntegerValue(this, "wavelets received for treasury")), IntegerEntry("total WAVES paid out in wavelets", getIntegerValue(this, "total WAVES paid out in wavelets")), IntegerEntry("ROI basis points", getIntegerValue(this, "ROI basis points"))]
321321
322322
323323
324324 @Callable(i)
325325 func PoolOneTokenSurplus () = if ((i.caller != this))
326326 then throw("access only by project owner")
327327 else {
328328 let surplusamount = getIntegerValue(this, "surplus received in wavelets")
329329 let PoolOneTokenSurplus = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [poolString], [AttachedPayment(unit, surplusamount)])
330330 if ((PoolOneTokenSurplus == PoolOneTokenSurplus))
331331 then [IntegerEntry("surplus received in wavelets", (getIntegerValue(this, "surplus received in wavelets") - surplusamount))]
332332 else throw("Strict value is not equal to itself.")
333333 }
334334
335335
336336
337337 @Callable(i)
338-func BoostPoolAPYwBURNxtnPPT () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
339- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
338+func BoostPoolAPY () = if ((i.caller != this))
339+ then throw("access only by project owner")
340340 else {
341341 let wavesBalanceBefore = wavesBalance(this).available
342342 if ((wavesBalanceBefore == wavesBalanceBefore))
343343 then {
344344 let claim = invoke(Address(poolId), "claimIndexRewards", nil, nil)
345345 if ((claim == claim))
346346 then {
347347 let swapburnxtn = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(burnxtnId, assetBalance(this, burnxtnId))])
348348 if ((swapburnxtn == swapburnxtn))
349349 then {
350350 let swapusdterc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdterc, assetBalance(this, usdterc))])
351351 if ((swapusdterc == swapusdterc))
352352 then {
353353 let swapusdtbsc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdtbsc, assetBalance(this, usdtbsc))])
354354 if ((swapusdtbsc == swapusdtbsc))
355355 then {
356356 let swapusdcerc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdcerc, assetBalance(this, usdcerc))])
357357 if ((swapusdcerc == swapusdcerc))
358358 then {
359359 let swapusdcbsc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdcbsc, assetBalance(this, usdcbsc))])
360360 if ((swapusdcbsc == swapusdcbsc))
361361 then {
362362 let swapeth = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(eth, assetBalance(this, eth))])
363363 if ((swapeth == swapeth))
364364 then {
365365 let swapbnb = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(bnb, assetBalance(this, bnb))])
366366 if ((swapbnb == swapbnb))
367367 then {
368368 let swapwbtc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(wbtc, assetBalance(this, wbtc))])
369369 if ((swapwbtc == swapwbtc))
370370 then {
371371 let swapbtcb = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(btcb, assetBalance(this, btcb))])
372372 if ((swapbtcb == swapbtcb))
373373 then {
374374 let wavesBalanceAfter = wavesBalance(this).available
375375 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
376376 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
377377 let amountBoost = fraction(wavesDifference, 80, 100)
378378 let amountOwner = fraction(wavesDifference, 20, 100)
379379 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
380380 if ((boost == boost))
381- then {
382- let activated = if ((i.caller == this))
383- then IntegerEntry("Activated blockheight", height)
384- else IntegerEntry("Activated by anybody blockheight", height)
385-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
386- }
381+ then [ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets")))]
387382 else throw("Strict value is not equal to itself.")
388383 }
389384 else throw("Strict value is not equal to itself.")
390385 }
391386 else throw("Strict value is not equal to itself.")
392387 }
393388 else throw("Strict value is not equal to itself.")
394389 }
395390 else throw("Strict value is not equal to itself.")
396391 }
397392 else throw("Strict value is not equal to itself.")
398393 }
399394 else throw("Strict value is not equal to itself.")
400395 }
401396 else throw("Strict value is not equal to itself.")
402397 }
403398 else throw("Strict value is not equal to itself.")
404399 }
405400 else throw("Strict value is not equal to itself.")
406401 }
407402 else throw("Strict value is not equal to itself.")
408403 }
409404 else throw("Strict value is not equal to itself.")
410405 }
411406
412407
413408
414409 @Callable(i)
415-func BoostPoolAPYwETHmain () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
416- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
410+func BoostPoolAPYwETHmain () = if ((i.caller != this))
411+ then throw("access only by project owner")
417412 else {
418413 let calculateTokenRates = invoke(PL_Main, "calculateTokenRates", [false], nil)
419414 if ((calculateTokenRates == calculateTokenRates))
420415 then {
421416 let withdrawamount = (PL_value(PL_Main, eth) - tryGetInteger("ETH supplied"))
422417 let wavesBalanceBefore = wavesBalance(this).available
423418 if ((wavesBalanceBefore == wavesBalanceBefore))
424419 then {
425420 let withdraw = invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "withdraw", [toBase58String(eth), withdrawamount], nil)
426421 if ((withdraw == withdraw))
427422 then {
428423 let swapeth = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(eth, assetBalance(this, eth))])
429424 if ((swapeth == swapeth))
430425 then {
431426 let wavesBalanceAfter = wavesBalance(this).available
432427 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
433428 let amountBoost = fraction(wavesDifference, 80, 100)
434429 let amountOwner = fraction(wavesDifference, 20, 100)
435430 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
436431 if ((boost == boost))
437- then {
438- let activated = if ((i.caller == this))
439- then IntegerEntry("Activated blockheight", height)
440- else IntegerEntry("Activated by anybody blockheight", height)
441-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (amountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
442- }
432+ then [ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (amountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets")))]
443433 else throw("Strict value is not equal to itself.")
444434 }
445435 else throw("Strict value is not equal to itself.")
446436 }
447437 else throw("Strict value is not equal to itself.")
448438 }
449439 else throw("Strict value is not equal to itself.")
450440 }
451441 else throw("Strict value is not equal to itself.")
452442 }
453443
454444
455445
456446 @Callable(i)
457-func BoostPoolAPYwWhirlpool () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
458- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
447+func BoostPoolAPYwWhirlpool () = if ((i.caller != this))
448+ then throw("access only by project owner")
459449 else {
460450 let wavesBalanceBefore = wavesBalance(this).available
461451 if ((wavesBalanceBefore == wavesBalanceBefore))
462452 then {
463453 let claim = invoke(Address(whirlpoolPoolId), "claimIndexRewards", nil, nil)
464454 if ((claim == claim))
465455 then {
466456 let swapwhirlpool = invoke(Address(whirlpoolPoolId), "swap", ["WAVES", 0], [AttachedPayment(whirlpool, assetBalance(this, whirlpool))])
467457 if ((swapwhirlpool == swapwhirlpool))
468458 then {
469459 let wavesBalanceAfter = wavesBalance(this).available
470460 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
471461 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
472462 let amountBoost = fraction(wavesDifference, 80, 100)
473463 let amountOwner = fraction(wavesDifference, 20, 100)
474464 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
475465 if ((boost == boost))
476- then {
477- let activated = if ((i.caller == this))
478- then IntegerEntry("Activated blockheight", height)
479- else IntegerEntry("Activated by anybody blockheight", height)
480-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
481- }
466+ then [ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets")))]
482467 else throw("Strict value is not equal to itself.")
483468 }
484469 else throw("Strict value is not equal to itself.")
485470 }
486471 else throw("Strict value is not equal to itself.")
487472 }
488473 else throw("Strict value is not equal to itself.")
489474 }
490475
491476
492477
493478 @Callable(i)
494479 func SupplyETHmain () = if ((i.caller != this))
495480 then throw("access only by project owner")
496481 else {
497482 let supplyamount = assetBalance(this, eth)
498483 let SupplyETHmain = if ((supplyamount > 0))
499484 then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(eth, supplyamount)])
500485 else unit
501486 if ((SupplyETHmain == SupplyETHmain))
502487 then [IntegerEntry("ETH supplied", (supplyamount + tryGetInteger("ETH supplied")))]
503488 else throw("Strict value is not equal to itself.")
504489 }
505490
506491
507492
508493 @Callable(i)
509-func BoostPoolAPYwWAVES_Main () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
510- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
494+func withdrawWAVES_Main () = if ((i.caller != this))
495+ then throw("access only by project owner")
511496 else {
512- let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
513- then d8
514- else wavesBalance(this).available
515- if ((wavesBalanceBefore == wavesBalanceBefore))
516- then {
517- let withdrawamountMain = (PL_value(PL_Main, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
518- let withdrawWM = invoke(PL_Main, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
519- if ((withdrawWM == withdrawWM))
520- then {
521- let wavesBalanceAfter = wavesBalance(this).available
522- let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
523- let wavesAmountBoost = fraction(wavesDifference, 80, 100)
524- let amountBoost = fraction(wavesDifference, 80, 100)
525- let amountOwner = fraction(wavesDifference, 20, 100)
526- let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
527- if ((boost == boost))
528- then {
529- let activated = if ((i.caller == this))
530- then IntegerEntry("Activated blockheight", height)
531- else IntegerEntry("Activated by anybody blockheight", height)
532-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
533- }
534- else throw("Strict value is not equal to itself.")
535- }
536- else throw("Strict value is not equal to itself.")
537- }
497+ let withdrawamountMain = (PL_value(PL_Main, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
498+ let withdrawWM = invoke(PL_Main, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
499+ if ((withdrawWM == withdrawWM))
500+ then nil
538501 else throw("Strict value is not equal to itself.")
539502 }
540503
541504
542505
543506 @Callable(i)
544-func BoostPoolAPYwWAVES_Defi () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
545- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
507+func withdrawWAVES_Defi () = if ((i.caller != this))
508+ then throw("access only by project owner")
546509 else {
547- let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
548- then d8
549- else wavesBalance(this).available
550- if ((wavesBalanceBefore == wavesBalanceBefore))
551- then {
552- let withdrawamountMain = (PL_value(PL_Defi, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
553- let withdrawWM = invoke(PL_Defi, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
554- if ((withdrawWM == withdrawWM))
555- then {
556- let wavesBalanceAfter = wavesBalance(this).available
557- let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
558- let wavesAmountBoost = fraction(wavesDifference, 80, 100)
559- let amountBoost = fraction(wavesDifference, 80, 100)
560- let amountOwner = fraction(wavesDifference, 20, 100)
561- let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
562- if ((boost == boost))
563- then {
564- let activated = if ((i.caller == this))
565- then IntegerEntry("Activated blockheight", height)
566- else IntegerEntry("Activated by anybody blockheight", height)
567-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
568- }
569- else throw("Strict value is not equal to itself.")
570- }
571- else throw("Strict value is not equal to itself.")
572- }
510+ let withdrawamountDefi = (PL_value(PL_Defi, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
511+ let withdrawWD = invoke(PL_Defi, "withdraw", [toBase58String(waves), withdrawamountDefi], nil)
512+ if ((withdrawWD == withdrawWD))
513+ then nil
573514 else throw("Strict value is not equal to itself.")
574515 }
575516
576517
577518
578519 @Callable(i)
579-func BoostPoolAPYwWAVES_Low () = if (if ((i.caller != this))
580- then ((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)
581- else false)
582- then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
520+func withdrawWAVES_Low () = if ((i.caller != this))
521+ then throw("access only by project owner")
583522 else {
584- let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
585- then d8
586- else wavesBalance(this).available
587- if ((wavesBalanceBefore == wavesBalanceBefore))
588- then {
589- let withdrawamountMain = (PL_value(PL_Low, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
590- let withdrawWM = invoke(PL_Low, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
591- if ((withdrawWM == withdrawWM))
592- then {
593- let wavesBalanceAfter = wavesBalance(this).available
594- let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
595- let wavesAmountBoost = fraction(wavesDifference, 80, 100)
596- let amountBoost = fraction(wavesDifference, 80, 100)
597- let amountOwner = fraction(wavesDifference, 20, 100)
598- let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
599- if ((boost == boost))
600- then {
601- let activated = if ((i.caller == this))
602- then IntegerEntry("Activated blockheight", height)
603- else IntegerEntry("Activated by anybody blockheight", height)
604-[ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets"))), activated]
605- }
606- else throw("Strict value is not equal to itself.")
607- }
608- else throw("Strict value is not equal to itself.")
609- }
523+ let withdrawamountLow = (PL_value(PL_Low, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
524+ let withdrawWL = invoke(PL_Low, "withdraw", [toBase58String(waves), withdrawamountLow], nil)
525+ if ((withdrawWL == withdrawWL))
526+ then nil
610527 else throw("Strict value is not equal to itself.")
611528 }
612529
613530
614531
615532 @Callable(i)
616533 func stakeEAST () = if ((i.caller != this))
617534 then throw("access only by project owner")
618535 else {
619536 let supplyamount = assetBalance(this, east)
620537 let stakeEAST = if ((supplyamount > 0))
621538 then invoke(EAST_stake, "stake", nil, [AttachedPayment(east, supplyamount)])
622539 else unit
623540 if ((stakeEAST == stakeEAST))
624541 then [IntegerEntry("EAST staked", (supplyamount + tryGetInteger("EAST staked")))]
625542 else throw("Strict value is not equal to itself.")
626543 }
627544
628545
629546
630547 @Callable(i)
631548 func ChangeIntegerEntry (key,integer) = if ((i.caller != this))
632549 then throw("access only by project owner")
633550 else [IntegerEntry(key, integer)]
634551
635552

github/deemru/w8io/3ef1775 
104.90 ms