tx · 6rpW3iAPADEmDjPxBeg5amRvsd9gFuXx14xU911FYo4D

3PQV9AUMU36fdDYMmMZw6urSYG3BuMahQuk:  -0.02700000 Waves

2022.09.13 09:41 [3292489] smart account 3PQV9AUMU36fdDYMmMZw6urSYG3BuMahQuk > SELF 0.00000000 Waves

{ "type": 13, "id": "6rpW3iAPADEmDjPxBeg5amRvsd9gFuXx14xU911FYo4D", "fee": 2700000, "feeAssetId": null, "timestamp": 1663051279423, "version": 2, "chainId": 87, "sender": "3PQV9AUMU36fdDYMmMZw6urSYG3BuMahQuk", "senderPublicKey": "8bMNZV1S5S2hfim2ZPy5hsSdC1AHBwPHUEXPBhdEF2Mk", "proofs": [ "5swXb8zJzwj4XqiYeyXeumZxpcLSCTBpZEB4a4UgJNAzD9eZU2BFtkNdNRMv8r1WVDfGACcFMsRphvrGpihDMbxg" ], "script": "base64:BgIwCAISABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAMAAKdXNkdFVzZG5MUAEgeKe/TORdN+2VIdfWflWy/q4Ef+gR/VrWL/1DGC+Wt8AADXVzZHRVc2RuTFBUQ0kBIBG6tC/qJMhI0cdjddgUOO1bmK5/To9FHcuj/RydMcYtAAh3eFVzZG5MUAEg0E+9UXQSGV1axWsKa7YHwYv2IAlKZCQciL72xq5U62gAC3d4VXNkbkxQVENJASDddUGqOmEiUy/NVjAevMO+tQmtTIa9lFOcEqHuPqPe+AAKdXNkY1VzZG5MUAEgA2kB/BsKmAqIzY/+EVmFhSaRMrNakvwm6Uhd05/eXHYADXVzZGNVc2RuTFBUQ0kBIPYCN93Tn++GRS9cI0cPlV/ROm2hK8KntJtUQQdS9W7GAAp1c2RjVXNkdExQASDG+KR0G1ZIVhCfkH7CM/Qxa4sESiwr/ZlLh/WFm3zkjAANdXNkY1VzZHRMUFRDSQEgAsaFfARLM8fi74dnh1L7VYL9s9+EI7agWsU13c9XSv4ADHB1enpsZVVzZG5MUAEgwzPGdM4jqqQi30kk5cSZa3gEsHdWgnT/uNEdSo0c0Z4AD3B1enpsZVVzZG5MUFRDSQEgvJT6zwcHAR1Xf2NHmqYN/fUF18bEe85zWm98KZKIR7UACm5zYnRVc2RuTFABIInE99XWShUNg3nT3abBvgxU04OeMx+XVP9DG3gXQxsuAA1uc2J0VXNkbkxQVENJASAoMV2i3pPLh7OoDl5CN06fo5Z0c5jxSbBacYujFiJ74wAJYnRjVXNkbkxQASBvnTGD7115O9yfbwnrrkfye1q7Q6w30uxRGWcrdhJZFAAMYnRjVXNkbkxQVENJASDcKb+1ZgRJVjLpTs28rEytAj8sbl/K1IhRJ2pystFysgAKZW5ub1VzZG5MUAEg+WL1H0qKE/YqGIUF9urWuk8SlptfMTDJlbqjiaU5hIoADWVubm9Vc2RuTFBUQ0kBID0pHPS701PG5Luu4DGhzVAAjQHakCyJLhBHhzfA2N8kAAt3YXZlc1VzZG5MUAEgXedtbkamxzmxtK4hQ1NqaJeqmQ+fWxX6vGpRDRxJGSAADndhdmVzVXNkbkxQVENJASDFcDo6U75MAThdBep88ScKUJh65v5zXYdqcbf7jCLYqQAJbHRjVXNkbkxQASCpA1AbZJnKzVyLuP7eAqYUv62+8B5hgZ72o/YA4yrO2QAMbHRjVXNkbkxQVENJASD3xkByilFq2uREcks7rpMAtqAxjenWLXmKfLMyH6M4lQAJaXNTdG9wcGVkBwAJa2V5U3Rha2VkAglTVEFLRURfTFAAC2tleUNvbXBvdW5kAg1Gcm9tX0NvbXBvdW5kABFrZXl3eFVzZG5Db21wb3VuZAIQV1hfVVNETl9jb21wb3VuZAAJa2V5V1hVU0ROAgdXWF9VU0ROABNrZXlVc2RjVXNkbkNvbXBvdW5kAhJVU0RDX1VTRE5fY29tcG91bmQAC2tleVVTRENVU0ROAglVU0RDX1VTRE4AE2tleVVzZGNVc2R0Q29tcG91bmQCElVTRENfVVNEVF9jb21wb3VuZAALa2V5VVNEQ1VTRFQCCVVTRENfVVNEVAAVa2V5UHV6emxlVXNkbkNvbXBvdW5kAhRQVVpaTEVfVVNETl9jb21wb3VuZAANa2V5UFVaWkxFVVNETgILUFVaWkxFX1VTRE4AE2tleU5zYnRVc2RuQ29tcG91bmQCEk5TQlRfVVNETl9jb21wb3VuZAALa2V5TlNCVFVTRE4CCU5TQlRfVVNETgAKa2V5QlRDVVNETgIIQlRDX1VTRE4AEmtleUJ0Y1VzZG5Db21wb3VuZAIRQlRDX1VTRE5fQ29tcG91bmQAC2tleUVOTk9VU0ROAglFTk5PX1VTRE4AE2tleUVubm9Vc2RuQ29tcG91bmQCEkVOTk9fVVNETl9Db21wb3VuZAAMa2V5V0FWRVNVU0ROAgpXQVZFU19VU0ROABRrZXlXYXZlc1VzZG5Db21wb3VuZAITV0FWRVNfVVNETl9Db21wb3VuZAAKa2V5TFRDVVNETgIITFRDX1VTRE4AEmtleUx0Y1VzZG5Db21wb3VuZAIRTFRDX1VTRE5fQ29tcG91bmQABHd4SWQBIJMBHKupx24lV85mnnG2vapr+DzoWAsq7tmgTrs83BSxAA5rZXlTcG9uc29yc2hpcAITU3BvbnNvcnNoaXBfaW5fbG9jawADZGVmAIDC1y8AB2ZlZVBlcmMAgMivoCUAAnR3ARoBV04EqfVyjN7n+dJSSt24a1NFjHqnmjh9nAAGb3JhY2xlARoBVzWtH6QdsRVtUfPPQcg6qbN4lGqDirxviQEMY2hlY2tBZGRyZXNzAQZjYWxsZXIDCQECIT0CBQZjYWxsZXIFBm9yYWNsZQcGFwFpAQ9kZXBvc2l0V3hVc2RuTFAABANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQJcG10QW1vdW50CAUDcG10BmFtb3VudAMJAQIhPQIIBQNwbXQHYXNzZXRJZAUId3hVc2RuTFAJAAIBAhthdHRhY2ggV1hVU0ROTFAgdG9rZW5zIG9ubHkDBQlpc1N0b3BwZWQJAAIBAhlzbWFydCBjb250cmFjdCBpcyBvbiBsb2NrBAh0a1N0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQlrZXlXWFVTRE4AAAQLdG90YWxJc3N1ZWQEByRtYXRjaDAJAOwHAQULd3hVc2RuTFBUQ0kDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIcXVhbnRpdHkJAAIBAhBDYW4ndCBmaW5kIGFzc2V0BANvbmUJAGsDBQt0b3RhbElzc3VlZACAwtcvBQh0a1N0YWtlZAQHdG9Jc3N1ZQkAawMFCXBtdEFtb3VudAUDb25lAIDC1y8EC3VwZGF0ZVN0YXRlCQEMSW50ZWdlckVudHJ5AgUJa2V5V1hVU0ROCQBkAgUIdGtTdGFrZWQFCXBtdEFtb3VudAQHTFBzdGFrZQkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgVzdGFrZQUDbmlsCQDMCAIFA3BtdAUDbmlsAwkAAAIFB0xQc3Rha2UFB0xQc3Rha2UEB0xQSXNzdWUJAQdSZWlzc3VlAwULd3hVc2RuTFBUQ0kFB3RvSXNzdWUGBAh0cmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQd0b0lzc3VlBQt3eFVzZG5MUFRDSQkAzAgCBQdMUElzc3VlCQDMCAIFCHRyYW5zZmVyCQDMCAIFC3VwZGF0ZVN0YXRlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERZGVwb3NpdFVzZHRVc2RuTFAABANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQJcG10QW1vdW50CAUDcG10BmFtb3VudAMJAQIhPQIIBQNwbXQHYXNzZXRJZAUKdXNkdFVzZG5MUAkAAgECHWF0dGFjaCBVU0RUVVNETkxQIHRva2VucyBvbmx5AwUJaXNTdG9wcGVkCQACAQIZc21hcnQgY29udHJhY3QgaXMgb24gbG9jawQIdGtTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUJa2V5U3Rha2VkAAAEC3RvdGFsSXNzdWVkBAckbWF0Y2gwCQDsBwEFDXVzZHRVc2RuTFBUQ0kDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIcXVhbnRpdHkJAAIBAhBDYW4ndCBmaW5kIGFzc2V0BAxmcm9tQ29tcG91bmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULa2V5Q29tcG91bmQAAAQGZm9yT25lCQBrAwULdG90YWxJc3N1ZWQAgMLXLwUIdGtTdGFrZWQEB3RvSXNzdWUJAGsDBQlwbXRBbW91bnQFBmZvck9uZQCAwtcvBAt1cGRhdGVTdGF0ZQkBDEludGVnZXJFbnRyeQIFCWtleVN0YWtlZAkAZAIFCHRrU3Rha2VkBQlwbXRBbW91bnQEB0xQc3Rha2UJAPwHBAkBB0FkZHJlc3MBARoBV+s7535uBRjCkaSYFhfhZtdFJyDuJUlWqAIFc3Rha2UFA25pbAkAzAgCBQNwbXQFA25pbAMJAAACBQdMUHN0YWtlBQdMUHN0YWtlBAdMUElzc3VlCQEHUmVpc3N1ZQMFDXVzZHRVc2RuTFBUQ0kFB3RvSXNzdWUGBAh0cmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQd0b0lzc3VlBQ11c2R0VXNkbkxQVENJCQDMCAIFB0xQSXNzdWUJAMwIAgUIdHJhbnNmZXIJAMwIAgULdXBkYXRlU3RhdGUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFkZXBvc2l0VXNkY1VzZG5MUAAEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAlwbXRBbW91bnQIBQNwbXQGYW1vdW50AwkBAiE9AggFA3BtdAdhc3NldElkBQp1c2RjVXNkbkxQCQACAQIdYXR0YWNoIFVTRENVU0ROTFAgdG9rZW5zIG9ubHkDBQlpc1N0b3BwZWQJAAIBAhlzbWFydCBjb250cmFjdCBpcyBvbiBsb2NrBAh0a1N0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQtrZXlVU0RDVVNETgAABAt0b3RhbElzc3VlZAQHJG1hdGNoMAkA7AcBBQ11c2RjVXNkbkxQVENJAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CHF1YW50aXR5CQACAQIQQ2FuJ3QgZmluZCBhc3NldAQMZnJvbUNvbXBvdW5kCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFE2tleVVzZGNVc2RuQ29tcG91bmQAAAQGZm9yT25lCQBrAwULdG90YWxJc3N1ZWQAgMLXLwUIdGtTdGFrZWQEB3RvSXNzdWUJAGsDBQlwbXRBbW91bnQFBmZvck9uZQCAwtcvBAt1cGRhdGVTdGF0ZQkBDEludGVnZXJFbnRyeQIFC2tleVVTRENVU0ROCQBkAgUIdGtTdGFrZWQFCXBtdEFtb3VudAQHTFBzdGFrZQkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgVzdGFrZQUDbmlsCQDMCAIFA3BtdAUDbmlsAwkAAAIFB0xQc3Rha2UFB0xQc3Rha2UEB0xQSXNzdWUJAQdSZWlzc3VlAwUNdXNkY1VzZG5MUFRDSQUHdG9Jc3N1ZQYECHRyYW5zZmVyCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB3RvSXNzdWUFDXVzZGNVc2RuTFBUQ0kJAMwIAgUHTFBJc3N1ZQkAzAgCBQh0cmFuc2ZlcgkAzAgCBQt1cGRhdGVTdGF0ZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWRlcG9zaXRVc2RjVXNkdExQAAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECXBtdEFtb3VudAgFA3BtdAZhbW91bnQDCQECIT0CCAUDcG10B2Fzc2V0SWQFCnVzZGNVc2R0TFAJAAIBAh1hdHRhY2ggVVNEQ1VTRFRMUCB0b2tlbnMgb25seQMFCWlzU3RvcHBlZAkAAgECGXNtYXJ0IGNvbnRyYWN0IGlzIG9uIGxvY2sECHRrU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tleVVTRENVU0RUAAAEC3RvdGFsSXNzdWVkBAckbWF0Y2gwCQDsBwEFDXVzZGNVc2R0TFBUQ0kDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIcXVhbnRpdHkJAAIBAhBDYW4ndCBmaW5kIGFzc2V0BAxmcm9tQ29tcG91bmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUTa2V5VXNkY1VzZHRDb21wb3VuZAAABAZmb3JPbmUJAGsDBQt0b3RhbElzc3VlZACAwtcvBQh0a1N0YWtlZAQHdG9Jc3N1ZQkAawMFCXBtdEFtb3VudAUGZm9yT25lAIDC1y8EC3VwZGF0ZVN0YXRlCQEMSW50ZWdlckVudHJ5AgULa2V5VVNEQ1VTRFQJAGQCBQh0a1N0YWtlZAUJcG10QW1vdW50BAdMUHN0YWtlCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUDcG10BQNuaWwDCQAAAgUHTFBzdGFrZQUHTFBzdGFrZQQHTFBJc3N1ZQkBB1JlaXNzdWUDBQ11c2RjVXNkdExQVENJBQd0b0lzc3VlBgQIdHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHdG9Jc3N1ZQUNdXNkY1VzZHRMUFRDSQkAzAgCBQdMUElzc3VlCQDMCAIFCHRyYW5zZmVyCQDMCAIFC3VwZGF0ZVN0YXRlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQETZGVwb3NpdFB1enpsZVVzZG5MUAAEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAlwbXRBbW91bnQIBQNwbXQGYW1vdW50AwkBAiE9AggFA3BtdAdhc3NldElkBQxwdXp6bGVVc2RuTFAJAAIBAh9hdHRhY2ggUFVaWkxFVURTTkxQIHRva2VucyBvbmx5AwUJaXNTdG9wcGVkCQACAQIZc21hcnQgY29udHJhY3QgaXMgb24gbG9jawQIdGtTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUNa2V5UFVaWkxFVVNETgAABAt0b3RhbElzc3VlZAQHJG1hdGNoMAkA7AcBBQ9wdXp6bGVVc2RuTFBUQ0kDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIcXVhbnRpdHkJAAIBAhBDYW4ndCBmaW5kIGFzc2V0BAxmcm9tQ29tcG91bmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUVa2V5UHV6emxlVXNkbkNvbXBvdW5kAAAEBmZvck9uZQkAawMFC3RvdGFsSXNzdWVkAIDC1y8FCHRrU3Rha2VkBAd0b0lzc3VlCQBrAwUJcG10QW1vdW50BQZmb3JPbmUAgMLXLwQLdXBkYXRlU3RhdGUJAQxJbnRlZ2VyRW50cnkCBQ1rZXlQVVpaTEVVU0ROCQBkAgUIdGtTdGFrZWQFCXBtdEFtb3VudAQHTFBzdGFrZQkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgVzdGFrZQUDbmlsCQDMCAIFA3BtdAUDbmlsAwkAAAIFB0xQc3Rha2UFB0xQc3Rha2UEB0xQSXNzdWUJAQdSZWlzc3VlAwUPcHV6emxlVXNkbkxQVENJBQd0b0lzc3VlBgQIdHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHdG9Jc3N1ZQUPcHV6emxlVXNkbkxQVENJCQDMCAIFB0xQSXNzdWUJAMwIAgUIdHJhbnNmZXIJAMwIAgULdXBkYXRlU3RhdGUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFkZXBvc2l0TnNidFVzZG5MUAAEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAlwbXRBbW91bnQIBQNwbXQGYW1vdW50AwkBAiE9AggFA3BtdAdhc3NldElkBQpuc2J0VXNkbkxQCQACAQIdYXR0YWNoIE5TQlRVU0ROTFAgdG9rZW5zIG9ubHkDBQlpc1N0b3BwZWQJAAIBAhlzbWFydCBjb250cmFjdCBpcyBvbiBsb2NrBAh0a1N0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQtrZXlOU0JUVVNETgAABAt0b3RhbElzc3VlZAQHJG1hdGNoMAkA7AcBBQ1uc2J0VXNkbkxQVENJAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CHF1YW50aXR5CQACAQIQQ2FuJ3QgZmluZCBhc3NldAQDb25lCQBrAwULdG90YWxJc3N1ZWQAgMLXLwUIdGtTdGFrZWQEB3RvSXNzdWUJAGsDBQlwbXRBbW91bnQFA29uZQCAwtcvBAt1cGRhdGVTdGF0ZQkBDEludGVnZXJFbnRyeQIFC2tleU5TQlRVU0ROCQBkAgUIdGtTdGFrZWQFCXBtdEFtb3VudAQHTFBzdGFrZQkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgVzdGFrZQUDbmlsCQDMCAIFA3BtdAUDbmlsAwkAAAIFB0xQc3Rha2UFB0xQc3Rha2UEB0xQSXNzdWUJAQdSZWlzc3VlAwUNbnNidFVzZG5MUFRDSQUHdG9Jc3N1ZQYECHRyYW5zZmVyCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB3RvSXNzdWUFDW5zYnRVc2RuTFBUQ0kJAMwIAgUHTFBJc3N1ZQkAzAgCBQh0cmFuc2ZlcgkAzAgCBQt1cGRhdGVTdGF0ZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGRlcG9zaXRCdGNVc2RuTFAABANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQJcG10QW1vdW50CAUDcG10BmFtb3VudAMJAQIhPQIIBQNwbXQHYXNzZXRJZAUJYnRjVXNkbkxQCQACAQIcYXR0YWNoIEJUQ1VTRE5MUCB0b2tlbnMgb25seQMFCWlzU3RvcHBlZAkAAgECGXNtYXJ0IGNvbnRyYWN0IGlzIG9uIGxvY2sECHRrU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCmtleUJUQ1VTRE4AAAQLdG90YWxJc3N1ZWQEByRtYXRjaDAJAOwHAQUMYnRjVXNkbkxQVENJAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CHF1YW50aXR5CQACAQIQQ2FuJ3QgZmluZCBhc3NldAQGZm9yT25lCQBrAwULdG90YWxJc3N1ZWQAgMLXLwUIdGtTdGFrZWQEB3RvSXNzdWUJAGsDBQlwbXRBbW91bnQFBmZvck9uZQCAwtcvBAt1cGRhdGVTdGF0ZQkBDEludGVnZXJFbnRyeQIFCmtleUJUQ1VTRE4JAGQCBQh0a1N0YWtlZAUJcG10QW1vdW50BAdMUHN0YWtlCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUDcG10BQNuaWwDCQAAAgUHTFBzdGFrZQUHTFBzdGFrZQQHTFBJc3N1ZQkBB1JlaXNzdWUDBQxidGNVc2RuTFBUQ0kFB3RvSXNzdWUGBAh0cmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQd0b0lzc3VlBQxidGNVc2RuTFBUQ0kJAMwIAgUHTFBJc3N1ZQkAzAgCBQh0cmFuc2ZlcgkAzAgCBQt1cGRhdGVTdGF0ZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWRlcG9zaXRFbm5vVXNkbkxQAAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECXBtdEFtb3VudAgFA3BtdAZhbW91bnQDCQECIT0CCAUDcG10B2Fzc2V0SWQFCmVubm9Vc2RuTFAJAAIBAh1hdHRhY2ggRU5OT1VTRE5MUCB0b2tlbnMgb25seQMFCWlzU3RvcHBlZAkAAgECGXNtYXJ0IGNvbnRyYWN0IGlzIG9uIGxvY2sECHRrU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tleUVOTk9VU0ROAAAEC3RvdGFsSXNzdWVkBAckbWF0Y2gwCQDsBwEFDWVubm9Vc2RuTFBUQ0kDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIcXVhbnRpdHkJAAIBAhBDYW4ndCBmaW5kIGFzc2V0BANvbmUJAGsDBQt0b3RhbElzc3VlZACAwtcvBQh0a1N0YWtlZAQHdG9Jc3N1ZQkAawMFCXBtdEFtb3VudAUDb25lAIDC1y8EC3VwZGF0ZVN0YXRlCQEMSW50ZWdlckVudHJ5AgULa2V5RU5OT1VTRE4JAGQCBQh0a1N0YWtlZAUJcG10QW1vdW50BAdMUHN0YWtlCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUDcG10BQNuaWwDCQAAAgUHTFBzdGFrZQUHTFBzdGFrZQQHTFBJc3N1ZQkBB1JlaXNzdWUDBQ1lbm5vVXNkbkxQVENJBQd0b0lzc3VlBgQIdHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHdG9Jc3N1ZQUNZW5ub1VzZG5MUFRDSQkAzAgCBQdMUElzc3VlCQDMCAIFCHRyYW5zZmVyCQDMCAIFC3VwZGF0ZVN0YXRlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESZGVwb3NpdFdhdmVzVXNkbkxQAAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECXBtdEFtb3VudAgFA3BtdAZhbW91bnQDCQECIT0CCAUDcG10B2Fzc2V0SWQFC3dhdmVzVXNkbkxQCQACAQIeYXR0YWNoIFdBVkVTVVNETkxQIHRva2VucyBvbmx5AwUJaXNTdG9wcGVkCQACAQIZc21hcnQgY29udHJhY3QgaXMgb24gbG9jawQIdGtTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUMa2V5V0FWRVNVU0ROAAAEC3RvdGFsSXNzdWVkBAckbWF0Y2gwCQDsBwEFDndhdmVzVXNkbkxQVENJAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CHF1YW50aXR5CQACAQIQQ2FuJ3QgZmluZCBhc3NldAQDb25lCQBrAwULdG90YWxJc3N1ZWQAgMLXLwUIdGtTdGFrZWQEB3RvSXNzdWUJAGsDBQlwbXRBbW91bnQFA29uZQCAwtcvBAt1cGRhdGVTdGF0ZQkBDEludGVnZXJFbnRyeQIFDGtleVdBVkVTVVNETgkAZAIFCHRrU3Rha2VkBQlwbXRBbW91bnQEB0xQc3Rha2UJAPwHBAkBB0FkZHJlc3MBARoBV+s7535uBRjCkaSYFhfhZtdFJyDuJUlWqAIFc3Rha2UFA25pbAkAzAgCBQNwbXQFA25pbAMJAAACBQdMUHN0YWtlBQdMUHN0YWtlBAdMUElzc3VlCQEHUmVpc3N1ZQMFDndhdmVzVXNkbkxQVENJBQd0b0lzc3VlBgQIdHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHdG9Jc3N1ZQUOd2F2ZXNVc2RuTFBUQ0kJAMwIAgUHTFBJc3N1ZQkAzAgCBQh0cmFuc2ZlcgkAzAgCBQt1cGRhdGVTdGF0ZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGRlcG9zaXRMdGNVc2RuTFAABANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQJcG10QW1vdW50CAUDcG10BmFtb3VudAMJAQIhPQIIBQNwbXQHYXNzZXRJZAUJbHRjVXNkbkxQCQACAQIcYXR0YWNoIExUQ1VTRE5MUCB0b2tlbnMgb25seQMFCWlzU3RvcHBlZAkAAgECGXNtYXJ0IGNvbnRyYWN0IGlzIG9uIGxvY2sECHRrU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCmtleUxUQ1VTRE4AAAQLdG90YWxJc3N1ZWQEByRtYXRjaDAJAOwHAQUMbHRjVXNkbkxQVENJAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CHF1YW50aXR5CQACAQIQQ2FuJ3QgZmluZCBhc3NldAQDb25lCQBrAwULdG90YWxJc3N1ZWQAgMLXLwUIdGtTdGFrZWQEB3RvSXNzdWUJAGsDBQlwbXRBbW91bnQFA29uZQCAwtcvBAt1cGRhdGVTdGF0ZQkBDEludGVnZXJFbnRyeQIFCmtleUxUQ1VTRE4JAGQCBQh0a1N0YWtlZAUJcG10QW1vdW50BAdMUHN0YWtlCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUDcG10BQNuaWwDCQAAAgUHTFBzdGFrZQUHTFBzdGFrZQQHTFBJc3N1ZQkBB1JlaXNzdWUDBQxsdGNVc2RuTFBUQ0kFB3RvSXNzdWUGBAh0cmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQd0b0lzc3VlBQxsdGNVc2RuTFBUQ0kJAMwIAgUHTFBJc3N1ZQkAzAgCBQh0cmFuc2ZlcgkAzAgCBQt1cGRhdGVTdGF0ZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3AAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAJhbQgFB3BheW1lbnQGYW1vdW50BAJpZAgFB3BheW1lbnQHYXNzZXRJZAMFCWlzU3RvcHBlZAkAAgECGXNtYXJ0IGNvbnRyYWN0IGlzIG9uIGxvY2sDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAgsxIHBtbnQgZXhwZAMJAAACBQJpZAUNdXNkdFVzZG5MUFRDSQQJVENJQW1vdW50BAckbWF0Y2gwCQDsBwEFDXVzZHRVc2RuTFBUQ0kDCQABAgUHJG1hdGNoMAIFQXNzZXQEAXEFByRtYXRjaDAIBQFxCHF1YW50aXR5AAAEDnVzZG5Vc2R0U3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCWtleVN0YWtlZAAABAxmb3JTaW5nbGVUQ0kJAGsDBQ51c2RuVXNkdFN0YWtlZAUDZGVmBQlUQ0lBbW91bnQEEHVzZG5McFRvV2l0aGRyYXcJAGsDBQxmb3JTaW5nbGVUQ0kFAmFtBQNkZWYEA2ZlZQkAawMFEHVzZG5McFRvV2l0aGRyYXcFA2RlZgUHZmVlUGVyYwQRdW5zdGFrZVVzZHRVc2RuTFAJAPwHBAkBB0FkZHJlc3MBARoBV+s7535uBRjCkaSYFhfhZtdFJyDuJUlWqAIHdW5zdGFrZQkAzAgCAiw5N3pIRnAxQzNjQjdxZnZ4OFh2NWYycldwOW5VU0c1VW5BYW1mUGNXNnR4ZgkAzAgCBRB1c2RuTHBUb1dpdGhkcmF3BQNuaWwFA25pbAMJAAACBRF1bnN0YWtlVXNkdFVzZG5MUAURdW5zdGFrZVVzZHRVc2RuTFAEEXVzZG5McGZlZVRyYW5zZmVyCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFAnR3BQNmZWUFCnVzZHRVc2RuTFAECHRyYW5zZmVyCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBRB1c2RuTHBUb1dpdGhkcmF3BQNmZWUFCnVzZHRVc2RuTFAEEnVwZGF0ZVVzZG5McFN0YWtlZAkBDEludGVnZXJFbnRyeQIFCWtleVN0YWtlZAkAZQIFDnVzZG5Vc2R0U3Rha2VkBRB1c2RuTHBUb1dpdGhkcmF3BANicm4JAQRCdXJuAgUNdXNkdFVzZG5MUFRDSQUCYW0JAMwIAgURdXNkbkxwZmVlVHJhbnNmZXIJAMwIAgUIdHJhbnNmZXIJAMwIAgUSdXBkYXRlVXNkbkxwU3Rha2VkCQDMCAIFA2JybgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFAmlkBQt3eFVzZG5MUFRDSQQHd3hUY2lBbQQHJG1hdGNoMAkA7AcBBQt3eFVzZG5MUFRDSQMJAAECBQckbWF0Y2gwAgVBc3NldAQBcQUHJG1hdGNoMAgFAXEIcXVhbnRpdHkAAAQMd3hVc2RuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCWtleVdYVVNETgAABApzaW5nbGVXWExQCQBrAwUMd3hVc2RuU3Rha2VkBQNkZWYFB3d4VGNpQW0EDnd4THBUb1dpdGhkcmF3CQBrAwUKc2luZ2xlV1hMUAUCYW0FA2RlZgQDZmVlCQBrAwUOd3hMcFRvV2l0aGRyYXcFA2RlZgUHZmVlUGVyYwQPdW5zdGFrZVd4VXNkbkxQCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCB3Vuc3Rha2UJAMwIAgIsRjJBS2tBNTEzazV5SEVKa0xzVTZ2V3hDWVlrODExR3BqTGh3RXYyV0d3WjkJAMwIAgUOd3hMcFRvV2l0aGRyYXcFA25pbAUDbmlsAwkAAAIFD3Vuc3Rha2VXeFVzZG5MUAUPdW5zdGFrZVd4VXNkbkxQBA93eExwRmVlVHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUCdHcFA2ZlZQUId3hVc2RuTFAEDHd4THBUcmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUOd3hMcFRvV2l0aGRyYXcFA2ZlZQUId3hVc2RuTFAEEHVwZGF0ZVd4THBTdGFrZWQJAQxJbnRlZ2VyRW50cnkCBQlrZXlXWFVTRE4JAGUCBQx3eFVzZG5TdGFrZWQFDnd4THBUb1dpdGhkcmF3BAtidXJuV3hMcFRjaQkBBEJ1cm4CBQt3eFVzZG5MUFRDSQUCYW0JAMwIAgUPd3hMcEZlZVRyYW5zZmVyCQDMCAIFDHd4THBUcmFuc2ZlcgkAzAgCBRB1cGRhdGVXeExwU3Rha2VkCQDMCAIFC2J1cm5XeExwVGNpBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUCaWQFDXVzZGNVc2RuTFBUQ0kEC3VzZGNVc2RuVENJBAckbWF0Y2gwCQDsBwEFDXVzZGNVc2RuTFBUQ0kDCQABAgUHJG1hdGNoMAIFQXNzZXQEAXEFByRtYXRjaDAIBQFxCHF1YW50aXR5AAAEDnVzZGNVc2RuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tleVVTRENVU0ROAAAEDHNpbmdsZVVzZGNMUAkAawMFDnVzZGNVc2RuU3Rha2VkBQNkZWYFC3VzZGNVc2RuVENJBBR1c2RjVXNkbkxwVG9XaXRoZHJhdwkAawMFDHNpbmdsZVVzZGNMUAUCYW0FA2RlZgQDZmVlCQBrAwUUdXNkY1VzZG5McFRvV2l0aGRyYXcFA2RlZgUHZmVlUGVyYwQRdW5zdGFrZVVzZGNVc2RuTFAJAPwHBAkBB0FkZHJlc3MBARoBV+s7535uBRjCkaSYFhfhZtdFJyDuJUlWqAIHdW5zdGFrZQkAzAgCAitFSzZON1MzOHhidEJUM1N4QXFvR2RETENpWDZyb2pYNkcxNjlDblN5dUU1CQDMCAIFFHVzZGNVc2RuTHBUb1dpdGhkcmF3BQNuaWwFA25pbAMJAAACBRF1bnN0YWtlVXNkY1VzZG5MUAURdW5zdGFrZVVzZGNVc2RuTFAEDXVzZGNVc2RuTFBGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUCdHcFA2ZlZQUKdXNkY1VzZG5MUAQQdXNkY1VzZG5UcmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUUdXNkY1VzZG5McFRvV2l0aGRyYXcFA2ZlZQUKdXNkY1VzZG5MUAQWdXBkYXRlVXNkY1VzZG5McFN0YWtlZAkBDEludGVnZXJFbnRyeQIFC2tleVVTRENVU0ROCQBlAgUOdXNkY1VzZG5TdGFrZWQFFHVzZGNVc2RuTHBUb1dpdGhkcmF3BBFidXJuVXNkY1VzZG5McFRjaQkBBEJ1cm4CBQ11c2RjVXNkbkxQVENJBQJhbQkAzAgCBQ11c2RjVXNkbkxQRmVlCQDMCAIFEHVzZGNVc2RuVHJhbnNmZXIJAMwIAgUWdXBkYXRlVXNkY1VzZG5McFN0YWtlZAkAzAgCBRFidXJuVXNkY1VzZG5McFRjaQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFAmlkBQ11c2RjVXNkdExQVENJBAt1c2RjVXNkdFRjaQQHJG1hdGNoMAkA7AcBBQ11c2RjVXNkdExQVENJAwkAAQIFByRtYXRjaDACBUFzc2V0BAFxBQckbWF0Y2gwCAUBcQhxdWFudGl0eQAABA51c2RjVXNkdFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQtrZXlVU0RDVVNEVAAABA5zaW5nbGVVc2RjVXNkdAkAawMFDnVzZGNVc2R0U3Rha2VkBQNkZWYFC3VzZGNVc2R0VGNpBBR1c2RjVXNkdExwVG9XaXRoZHJhdwkAawMFDnNpbmdsZVVzZGNVc2R0BQJhbQUDZGVmBANmZWUJAGsDBRR1c2RjVXNkdExwVG9XaXRoZHJhdwUDZGVmBQdmZWVQZXJjBBF1bnN0YWtlVXNkY1VzZHRMUAkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgd1bnN0YWtlCQDMCAICLEVQaGRFZm1RYU5jSHl2RG1SR2huTGhnY0p0S1oyYTRrM1pCbUtXdEFFV3lICQDMCAIFFHVzZGNVc2R0THBUb1dpdGhkcmF3BQNuaWwFA25pbAMJAAACBRF1bnN0YWtlVXNkY1VzZHRMUAURdW5zdGFrZVVzZGNVc2R0TFAEDXVzZGNVc2R0TFBGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUCdHcFA2ZlZQUKdXNkY1VzZHRMUAQQdXNkY1VzZHRUcmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUUdXNkY1VzZHRMcFRvV2l0aGRyYXcFA2ZlZQUKdXNkY1VzZHRMUAQWdXBkYXRlVXNkY1VzZHRMcFN0YWtlZAkBDEludGVnZXJFbnRyeQIFC2tleVVTRENVU0RUCQBlAgUOdXNkY1VzZHRTdGFrZWQFFHVzZGNVc2R0THBUb1dpdGhkcmF3BBFidXJuVXNkY1VzZHRMcFRjaQkBBEJ1cm4CBQ11c2RjVXNkdExQVENJBQJhbQkAzAgCBQ11c2RjVXNkdExQRmVlCQDMCAIFEHVzZGNVc2R0VHJhbnNmZXIJAMwIAgUWdXBkYXRlVXNkY1VzZHRMcFN0YWtlZAkAzAgCBRFidXJuVXNkY1VzZHRMcFRjaQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFAmlkBQ9wdXp6bGVVc2RuTFBUQ0kEDXB1enpsZVVzZG5UY2kEByRtYXRjaDAJAOwHAQUPcHV6emxlVXNkbkxQVENJAwkAAQIFByRtYXRjaDACBUFzc2V0BAFxBQckbWF0Y2gwCAUBcQhxdWFudGl0eQAABA5wdXp6bGVMUFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ1rZXlQVVpaTEVVU0ROAAAEEHNpbmdsZVB1enpsZVVzZG4JAGsDBQ5wdXp6bGVMUFN0YWtlZAUDZGVmBQ1wdXp6bGVVc2RuVGNpBBJwdXp6bGVVc2RuV2l0aGRyYXcJAGsDBRBzaW5nbGVQdXp6bGVVc2RuBQJhbQUDZGVmBANmZWUJAGsDBRJwdXp6bGVVc2RuV2l0aGRyYXcFA2RlZgUHZmVlUGVyYwQTdW5zdGFrZVB1enpsZVVzZG5MUAkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgd1bnN0YWtlCQDMCAICLEU4ekh1MzNHZmNOeUdMeXBYNzdnWmlVWGZ2dVpRZWFZbWlFZnN5N1ZZTndQCQDMCAIFEnB1enpsZVVzZG5XaXRoZHJhdwUDbmlsBQNuaWwDCQAAAgUTdW5zdGFrZVB1enpsZVVzZG5MUAUTdW5zdGFrZVB1enpsZVVzZG5MUAQPcHV6emxlVXNkbkxQRmVlCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFAnR3BQNmZWUFDHB1enpsZVVzZG5MUAQScHV6emxlVXNkblRyYW5zZmVyCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBRJwdXp6bGVVc2RuV2l0aGRyYXcFA2ZlZQUMcHV6emxlVXNkbkxQBBh1cGRhdGVQdXp6bGVVc2RuTHBTdGFrZWQJAQxJbnRlZ2VyRW50cnkCBQ1rZXlQVVpaTEVVU0ROCQBlAgUOcHV6emxlTFBTdGFrZWQFEnB1enpsZVVzZG5XaXRoZHJhdwQNYnVyblB1enpsZVRDSQkBBEJ1cm4CBQ9wdXp6bGVVc2RuTFBUQ0kFAmFtCQDMCAIFD3B1enpsZVVzZG5MUEZlZQkAzAgCBRJwdXp6bGVVc2RuVHJhbnNmZXIJAMwIAgUYdXBkYXRlUHV6emxlVXNkbkxwU3Rha2VkCQDMCAIFDWJ1cm5QdXp6bGVUQ0kFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQJpZAUMYnRjVXNkbkxQVENJBApidGNVc2RuVENJBAckbWF0Y2gwCQDsBwEFD3B1enpsZVVzZG5MUFRDSQMJAAECBQckbWF0Y2gwAgVBc3NldAQBcQUHJG1hdGNoMAgFAXEIcXVhbnRpdHkAAAQNYnRjVXNkblN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQprZXlCVENVU0ROAAAEDXNpbmdsZUJ0Y1VzZG4JAGsDBQ1idGNVc2RuU3Rha2VkBQNkZWYFCmJ0Y1VzZG5UQ0kED2J0Y1VzZG5XaXRoZHJhdwkAawMFDXNpbmdsZUJ0Y1VzZG4FAmFtBQNkZWYEA2ZlZQkAawMFD2J0Y1VzZG5XaXRoZHJhdwUDZGVmBQdmZWVQZXJjBA51bnN0YWtlQnRjVXNkbgkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgd1bnN0YWtlCQDMCAICLDhXaEg1Q0NKNk5ha1B2RXZBSmNpenFxRDdINmF4aHVwZFlIREZ1bVNEd3N5CQDMCAIFD2J0Y1VzZG5XaXRoZHJhdwUDbmlsBQNuaWwDCQAAAgUOdW5zdGFrZUJ0Y1VzZG4FDnVuc3Rha2VCdGNVc2RuBAxidGNVc2RuTFBGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUCdHcFA2ZlZQUJYnRjVXNkbkxQBA9idGNVc2RuVHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFD2J0Y1VzZG5XaXRoZHJhdwUDZmVlBQlidGNVc2RuTFAEFXVwZGF0ZUJ0Y1VzZG5MUFN0YWtlZAkBDEludGVnZXJFbnRyeQIFCmtleUJUQ1VTRE4JAGUCBQ1idGNVc2RuU3Rha2VkBQ9idGNVc2RuV2l0aGRyYXcEDmJ1cm5CdGNVc2RuVGNpCQEEQnVybgIFDGJ0Y1VzZG5MUFRDSQUCYW0JAMwIAgUMYnRjVXNkbkxQRmVlCQDMCAIFD2J0Y1VzZG5UcmFuc2ZlcgkAzAgCBRV1cGRhdGVCdGNVc2RuTFBTdGFrZWQJAMwIAgUOYnVybkJ0Y1VzZG5UY2kFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQJpZAUOd2F2ZXNVc2RuTFBUQ0kEDHdhdmVzVXNkblRDSQQHJG1hdGNoMAkA7AcBBQ53YXZlc1VzZG5MUFRDSQMJAAECBQckbWF0Y2gwAgVBc3NldAQBcQUHJG1hdGNoMAgFAXEIcXVhbnRpdHkAAAQPd2F2ZXNVc2RuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtleVdBVkVTVVNETgAABA9zaW5nbGVXYXZlc1VzZG4JAGsDBQ93YXZlc1VzZG5TdGFrZWQFA2RlZgUMd2F2ZXNVc2RuVENJBBF3YXZlc1VzZG5XaXRoZHJhdwkAawMFD3NpbmdsZVdhdmVzVXNkbgUCYW0FA2RlZgQDZmVlCQBrAwURd2F2ZXNVc2RuV2l0aGRyYXcFA2RlZgUHZmVlUGVyYwQQdW5zdGFrZVdhdmVzVXNkbgkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgd1bnN0YWtlCQDMCAICLDdLWmJKclZvcHdKaGtkd2JlMWVGREJiZXg0ZGtZNjNNeGpUTmpxWHRyemoxCQDMCAIFEXdhdmVzVXNkbldpdGhkcmF3BQNuaWwFA25pbAMJAAACBRB1bnN0YWtlV2F2ZXNVc2RuBRB1bnN0YWtlV2F2ZXNVc2RuBAx3YXZlc1VzbmRGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUCdHcFA2ZlZQULd2F2ZXNVc2RuTFAEEXdhdmVzVXNkblRyYW5zZmVyCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBRF3YXZlc1VzZG5XaXRoZHJhdwUDZmVlBQt3YXZlc1VzZG5MUAQXdXBkYXRlV2F2ZXNVc2RuTFBTdGFrZWQJAQxJbnRlZ2VyRW50cnkCBQxrZXlXQVZFU1VTRE4JAGUCBQ93YXZlc1VzZG5TdGFrZWQFEXdhdmVzVXNkbldpdGhkcmF3BBBidXJuV2F2ZXNVc2RuVENJCQEEQnVybgIFDndhdmVzVXNkbkxQVENJBQJhbQkAzAgCBQx3YXZlc1VzbmRGZWUJAMwIAgURd2F2ZXNVc2RuVHJhbnNmZXIJAMwIAgUXdXBkYXRlV2F2ZXNVc2RuTFBTdGFrZWQJAMwIAgUQYnVybldhdmVzVXNkblRDSQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFAmlkBQ1lbm5vVXNkbkxQVENJBAtlbm5vVXNkblRDSQQHJG1hdGNoMAkA7AcBBQ1lbm5vVXNkbkxQVENJAwkAAQIFByRtYXRjaDACBUFzc2V0BAFxBQckbWF0Y2gwCAUBcQhxdWFudGl0eQAABA5lbm5vVXNkblN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQtrZXlFTk5PVVNETgAABA5zaW5nbGVFbm5vVXNkbgkAawMFDmVubm9Vc2RuU3Rha2VkBQNkZWYFC2Vubm9Vc2RuVENJBBBlbm5vVXNkbldpdGhkcmF3CQBrAwUOc2luZ2xlRW5ub1VzZG4FAmFtBQNkZWYEA2ZlZQkAawMFEGVubm9Vc2RuV2l0aGRyYXcFA2RlZgUHZmVlUGVyYwQPdW5zdGFrZUVubm9Vc2RuCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCB3Vuc3Rha2UJAMwIAgIsSG5XMzNkY0VhZVVUY2dNTGQ4dkhvSlI1aUFGWjJuZ0hEQWE5RTk0OTZrRFgJAMwIAgUQZW5ub1VzZG5XaXRoZHJhdwUDbmlsBQNuaWwDCQAAAgUPdW5zdGFrZUVubm9Vc2RuBQ91bnN0YWtlRW5ub1VzZG4EC2Vubm9Vc2RuRmVlCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFAnR3BQNmZWUFCmVubm9Vc2RuTFAEEGVubm9Vc2RuVHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFEGVubm9Vc2RuV2l0aGRyYXcFA2ZlZQUKZW5ub1VzZG5MUAQWdXBkYXRlRW5ub1VzZG5MUFN0YWtlZAkBDEludGVnZXJFbnRyeQIFC2tleUVOTk9VU0ROCQBlAgUOZW5ub1VzZG5TdGFrZWQFEGVubm9Vc2RuV2l0aGRyYXcED2J1cm5Fbm5vVXNkblRDSQkBBEJ1cm4CBQ1lbm5vVXNkbkxQVENJBQJhbQkAzAgCBQtlbm5vVXNkbkZlZQkAzAgCBRBlbm5vVXNkblRyYW5zZmVyCQDMCAIFFnVwZGF0ZUVubm9Vc2RuTFBTdGFrZWQJAMwIAgUPYnVybkVubm9Vc2RuVENJBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUCaWQFDW5zYnRVc2RuTFBUQ0kEC25zYnRVc2RuVENJBAckbWF0Y2gwCQDsBwEFDW5zYnRVc2RuTFBUQ0kDCQABAgUHJG1hdGNoMAIFQXNzZXQEAXEFByRtYXRjaDAIBQFxCHF1YW50aXR5AAAEDm5zYnRVc2RuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tleU5TQlRVU0ROAAAEDnNpbmdsZU5zYnRVc2RuCQBrAwUObnNidFVzZG5TdGFrZWQFA2RlZgULbnNidFVzZG5UQ0kEEG5zYnRVc2RuV2l0aGRyYXcJAGsDBQ5zaW5nbGVOc2J0VXNkbgUCYW0FA2RlZgQDZmVlCQBrAwUQbnNidFVzZG5XaXRoZHJhdwUDZGVmBQdmZWVQZXJjBA91bnN0YWtlTnNidFVzZG4JAPwHBAkBB0FkZHJlc3MBARoBV+s7535uBRjCkaSYFhfhZtdFJyDuJUlWqAIHdW5zdGFrZQkAzAgCAixBR280OUhDdFFVZ2hmeEhTcFVYdWIzS0JhTVh5dW5KbVR4UTRhemdVNUF4NQkAzAgCBRBuc2J0VXNkbldpdGhkcmF3BQNuaWwFA25pbAMJAAACBQ91bnN0YWtlTnNidFVzZG4FD3Vuc3Rha2VOc2J0VXNkbgQLbnNidFVzZG5GZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUCdHcFA2ZlZQUKbnNidFVzZG5MUAQQbnNidFVzZG5UcmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUQbnNidFVzZG5XaXRoZHJhdwUDZmVlBQpuc2J0VXNkbkxQBBR1cGRhdGVOc2J0VXNkblN0YWtlZAkBDEludGVnZXJFbnRyeQIFC2tleU5TQlRVU0ROCQBlAgUObnNidFVzZG5TdGFrZWQFEG5zYnRVc2RuV2l0aGRyYXcED2J1cm5Oc2J0VXNkblRDSQkBBEJ1cm4CBQ1uc2J0VXNkbkxQVENJBQJhbQkAzAgCBQtuc2J0VXNkbkZlZQkAzAgCBRBuc2J0VXNkblRyYW5zZmVyCQDMCAIFFHVwZGF0ZU5zYnRVc2RuU3Rha2VkCQDMCAIFD2J1cm5Oc2J0VXNkblRDSQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFAmlkBQxsdGNVc2RuTFBUQ0kECmx0Y1VzZG5UQ0kEByRtYXRjaDAJAOwHAQUMbHRjVXNkbkxQVENJAwkAAQIFByRtYXRjaDACBUFzc2V0BAFxBQckbWF0Y2gwCAUBcQhxdWFudGl0eQAABA1sdGNVc2RuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCmtleUxUQ1VTRE4AAAQNc2luZ2xlTHRjVXNkbgkAawMFDWx0Y1VzZG5TdGFrZWQFA2RlZgUKbHRjVXNkblRDSQQPbHRjVXNkbldpdGhkcmF3CQBrAwUNc2luZ2xlTHRjVXNkbgUCYW0FA2RlZgQDZmVlCQBrAwUPbHRjVXNkbldpdGhkcmF3BQNkZWYFB2ZlZVBlcmMEDnVuc3Rha2VMdGNVc2RuCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCB3Vuc3Rha2UJAMwIAgIsQ05rcUM2R1BpODg4V2RKMUV1VnR1OUpHWjlWSHBBbjhlVEh3UjhZWnhYYnYJAMwIAgUPbHRjVXNkbldpdGhkcmF3BQNuaWwFA25pbAMJAAACBQ51bnN0YWtlTHRjVXNkbgUOdW5zdGFrZUx0Y1VzZG4ECmx0Y1VzZG5GZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUCdHcFA2ZlZQUJbHRjVXNkbkxQBA9sdGNVc2RuVHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFD2x0Y1VzZG5XaXRoZHJhdwUDZmVlBQlsdGNVc2RuTFAEE3VwZGF0ZUx0Y1VzZG5TdGFrZWQJAQxJbnRlZ2VyRW50cnkCBQprZXlMVENVU0ROCQBlAgUNbHRjVXNkblN0YWtlZAUPbHRjVXNkbldpdGhkcmF3BA5idXJuTHRjVXNkblRDSQkBBEJ1cm4CBQxsdGNVc2RuTFBUQ0kFAmFtCQDMCAIFCmx0Y1VzZG5GZWUJAMwIAgUPbHRjVXNkblRyYW5zZmVyCQDMCAIFE3VwZGF0ZUx0Y1VzZG5TdGFrZWQJAMwIAgUOYnVybkx0Y1VzZG5UQ0kFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECDUludmFsaWQgYXNzZXQBaQEQY29tcG91bmRXeFVzZG5MUAAECGNvbXBvdW5kCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEAmNhCAUIY29tcG91bmQGYW1vdW50BAhpc09yYWNsZQkBDGNoZWNrQWRkcmVzcwEICAUBaQZjYWxsZXIFYnl0ZXMDCQECIT0CCAUIY29tcG91bmQHYXNzZXRJZAUId3hVc2RuTFAJAAIBAhthdHRhY2ggV1hVU0ROTFAgdG9rZW5zIG9ubHkDCQEBIQEFCGlzT3JhY2xlCQACAQIsWW91IGFyZSBub3QgYXV0aG90aXplZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24EDGZyb21Db21wb3VuZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFrZXl3eFVzZG5Db21wb3VuZAAABAt0b3RhbFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQlrZXlXWFVTRE4AAAQGc3Rha2VDCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUIY29tcG91bmQFA25pbAMJAAACBQZzdGFrZUMFBnN0YWtlQwQLdXBkYXRlU3RhdGUJAQxJbnRlZ2VyRW50cnkCBQlrZXlXWFVTRE4JAGQCBQt0b3RhbFN0YWtlZAUCY2EEAnRjCQEMSW50ZWdlckVudHJ5AgURa2V5d3hVc2RuQ29tcG91bmQJAGQCBQxmcm9tQ29tcG91bmQFAmNhCQDMCAIFC3VwZGF0ZVN0YXRlCQDMCAIFAnRjBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESY29tcG91bmRVc2R0VXNkbkxQAAQIY29tcG91bmQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQCY2EIBQhjb21wb3VuZAZhbW91bnQECGlzT3JhY2xlCQEMY2hlY2tBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwMJAQIhPQIIBQhjb21wb3VuZAdhc3NldElkBQp1c2R0VXNkbkxQCQACAQIdYXR0YWNoIFVTRFRVU0ROTFAgdG9rZW5zIG9ubHkDCQEBIQEFCGlzT3JhY2xlCQACAQIsWW91IGFyZSBub3QgYXV0aG90aXplZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24EDGZyb21Db21wb3VuZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQtrZXlDb21wb3VuZAAABAt0b3RhbFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQlrZXlTdGFrZWQAAAQGc3Rha2VDCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUIY29tcG91bmQFA25pbAMJAAACBQZzdGFrZUMFBnN0YWtlQwQLdXBkYXRlU3RhdGUJAQxJbnRlZ2VyRW50cnkCBQlrZXlTdGFrZWQJAGQCBQt0b3RhbFN0YWtlZAUCY2EEAnRjCQEMSW50ZWdlckVudHJ5AgULa2V5Q29tcG91bmQJAGQCBQxmcm9tQ29tcG91bmQFAmNhCQDMCAIFC3VwZGF0ZVN0YXRlCQDMCAIFAnRjBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESY29tcG91bmRVc2RjVXNkbkxQAAQIY29tcG91bmQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQCY2EIBQhjb21wb3VuZAZhbW91bnQECGlzT3JhY2xlCQEMY2hlY2tBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwMJAQIhPQIIBQhjb21wb3VuZAdhc3NldElkBQp1c2RjVXNkbkxQCQACAQIdYXR0YWNoIFVTRENVU0ROTFAgdG9rZW5zIG9ubHkDCQEBIQEFCGlzT3JhY2xlCQACAQIsWW91IGFyZSBub3QgYXV0aG90aXplZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24EDGZyb21Db21wb3VuZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRNrZXlVc2RjVXNkbkNvbXBvdW5kAAAEC3RvdGFsU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tleVVTRENVU0ROAAAEBnN0YWtlQwkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgVzdGFrZQUDbmlsCQDMCAIFCGNvbXBvdW5kBQNuaWwDCQAAAgUGc3Rha2VDBQZzdGFrZUMEC3VwZGF0ZVN0YXRlCQEMSW50ZWdlckVudHJ5AgULa2V5VVNEQ1VTRE4JAGQCBQt0b3RhbFN0YWtlZAUCY2EEAnRjCQEMSW50ZWdlckVudHJ5AgUTa2V5VXNkY1VzZG5Db21wb3VuZAkAZAIFDGZyb21Db21wb3VuZAUCY2EJAMwIAgULdXBkYXRlU3RhdGUJAMwIAgUCdGMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJjb21wb3VuZFVzZGNVc2R0TFAABAhjb21wb3VuZAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAJjYQgFCGNvbXBvdW5kBmFtb3VudAQIaXNPcmFjbGUJAQxjaGVja0FkZHJlc3MBCAgFAWkGY2FsbGVyBWJ5dGVzAwkBAiE9AggFCGNvbXBvdW5kB2Fzc2V0SWQFCnVzZGNVc2R0TFAJAAIBAh1hdHRhY2ggVVNEQ1VTRFRMUCB0b2tlbnMgb25seQMJAQEhAQUIaXNPcmFjbGUJAAIBAixZb3UgYXJlIG5vdCBhdXRob3RpemVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgQMZnJvbUNvbXBvdW5kCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFE2tleVVzZGNVc2R0Q29tcG91bmQAAAQLdG90YWxTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULa2V5VVNEQ1VTRFQAAAQGc3Rha2VDCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUIY29tcG91bmQFA25pbAMJAAACBQZzdGFrZUMFBnN0YWtlQwQLdXBkYXRlU3RhdGUJAQxJbnRlZ2VyRW50cnkCBQtrZXlVU0RDVVNEVAkAZAIFC3RvdGFsU3Rha2VkBQJjYQQCdGMJAQxJbnRlZ2VyRW50cnkCBRNrZXlVc2RjVXNkdENvbXBvdW5kCQBkAgUMZnJvbUNvbXBvdW5kBQJjYQkAzAgCBQt1cGRhdGVTdGF0ZQkAzAgCBQJ0YwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFGNvbXBvdW5kUHV6emxlVXNkbkxQAAQIY29tcG91bmQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQCY2EIBQhjb21wb3VuZAZhbW91bnQECGlzT3JhY2xlCQEMY2hlY2tBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwMJAQIhPQIIBQhjb21wb3VuZAdhc3NldElkBQxwdXp6bGVVc2RuTFAJAAIBAh9hdHRhY2ggUFVaWkxFVVNETkxQIHRva2VucyBvbmx5AwkBASEBBQhpc09yYWNsZQkAAgECLFlvdSBhcmUgbm90IGF1dGhvdGl6ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uBAxmcm9tQ29tcG91bmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUVa2V5UHV6emxlVXNkbkNvbXBvdW5kAAAEC3RvdGFsU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDWtleVBVWlpMRVVTRE4AAAQGc3Rha2VDCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUIY29tcG91bmQFA25pbAMJAAACBQZzdGFrZUMFBnN0YWtlQwQLdXBkYXRlU3RhdGUJAQxJbnRlZ2VyRW50cnkCBQ1rZXlQVVpaTEVVU0ROCQBkAgULdG90YWxTdGFrZWQFAmNhBAJ0YwkBDEludGVnZXJFbnRyeQIFFWtleVB1enpsZVVzZG5Db21wb3VuZAkAZAIFDGZyb21Db21wb3VuZAUCY2EJAMwIAgULdXBkYXRlU3RhdGUJAMwIAgUCdGMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJjb21wb3VuZE5zYnRVc2RuTFAABAhjb21wb3VuZAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAJjYQgFCGNvbXBvdW5kBmFtb3VudAQIaXNPcmFjbGUJAQxjaGVja0FkZHJlc3MBCAgFAWkGY2FsbGVyBWJ5dGVzAwkBAiE9AggFCGNvbXBvdW5kB2Fzc2V0SWQFCm5zYnRVc2RuTFAJAAIBAh1hdHRhY2ggTlNCVFVTRE5MUCB0b2tlbnMgb25seQMJAQEhAQUIaXNPcmFjbGUJAAIBAixZb3UgYXJlIG5vdCBhdXRob3RpemVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgQMZnJvbUNvbXBvdW5kCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFE2tleU5zYnRVc2RuQ29tcG91bmQAAAQLdG90YWxTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULa2V5TlNCVFVTRE4AAAQGc3Rha2VDCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUIY29tcG91bmQFA25pbAMJAAACBQZzdGFrZUMFBnN0YWtlQwQLdXBkYXRlU3RhdGUJAQxJbnRlZ2VyRW50cnkCBQtrZXlOU0JUVVNETgkAZAIFC3RvdGFsU3Rha2VkBQJjYQQCdGMJAQxJbnRlZ2VyRW50cnkCBRNrZXlOc2J0VXNkbkNvbXBvdW5kCQBkAgUMZnJvbUNvbXBvdW5kBQJjYQkAzAgCBQt1cGRhdGVTdGF0ZQkAzAgCBQJ0YwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWNvbXBvdW5kQnRjVXNkbkxQAAQIY29tcG91bmQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQCY2EIBQhjb21wb3VuZAZhbW91bnQECGlzT3JhY2xlCQEMY2hlY2tBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwMJAQIhPQIIBQhjb21wb3VuZAdhc3NldElkBQlidGNVc2RuTFAJAAIBAhxhdHRhY2ggQlRDVVNETkxQIHRva2VucyBvbmx5AwkBASEBBQhpc09yYWNsZQkAAgECLFlvdSBhcmUgbm90IGF1dGhvdGl6ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uBAxmcm9tQ29tcG91bmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUSa2V5QnRjVXNkbkNvbXBvdW5kAAAEC3RvdGFsU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCmtleUJUQ1VTRE4AAAQGc3Rha2VDCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUIY29tcG91bmQFA25pbAMJAAACBQZzdGFrZUMFBnN0YWtlQwQLdXBkYXRlU3RhdGUJAQxJbnRlZ2VyRW50cnkCBQprZXlCVENVU0ROCQBkAgULdG90YWxTdGFrZWQFAmNhBAJ0YwkBDEludGVnZXJFbnRyeQIFEmtleUJ0Y1VzZG5Db21wb3VuZAkAZAIFDGZyb21Db21wb3VuZAUCY2EJAMwIAgULdXBkYXRlU3RhdGUJAMwIAgUCdGMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJjb21wb3VuZEVubm9Vc2RuTFAABAhjb21wb3VuZAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAJjYQgFCGNvbXBvdW5kBmFtb3VudAQIaXNPcmFjbGUJAQxjaGVja0FkZHJlc3MBCAgFAWkGY2FsbGVyBWJ5dGVzAwkBAiE9AggFCGNvbXBvdW5kB2Fzc2V0SWQFCmVubm9Vc2RuTFAJAAIBAh1hdHRhY2ggRU5OT1VTRE5MUCB0b2tlbnMgb25seQMJAQEhAQUIaXNPcmFjbGUJAAIBAixZb3UgYXJlIG5vdCBhdXRob3RpemVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgQMZnJvbUNvbXBvdW5kCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFE2tleUVubm9Vc2RuQ29tcG91bmQAAAQLdG90YWxTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULa2V5RU5OT1VTRE4AAAQGc3Rha2VDCQD8BwQJAQdBZGRyZXNzAQEaAVfrO+d+bgUYwpGkmBYX4WbXRScg7iVJVqgCBXN0YWtlBQNuaWwJAMwIAgUIY29tcG91bmQFA25pbAMJAAACBQZzdGFrZUMFBnN0YWtlQwQLdXBkYXRlU3RhdGUJAQxJbnRlZ2VyRW50cnkCBQtrZXlFTk5PVVNETgkAZAIFC3RvdGFsU3Rha2VkBQJjYQQCdGMJAQxJbnRlZ2VyRW50cnkCBRNrZXlFbm5vVXNkbkNvbXBvdW5kCQBkAgUMZnJvbUNvbXBvdW5kBQJjYQkAzAgCBQt1cGRhdGVTdGF0ZQkAzAgCBQJ0YwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE2NvbXBvdW5kV2F2ZXNVc2RuTFAABAhjb21wb3VuZAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAJjYQgFCGNvbXBvdW5kBmFtb3VudAQIaXNPcmFjbGUJAQxjaGVja0FkZHJlc3MBCAgFAWkGY2FsbGVyBWJ5dGVzAwkBAiE9AggFCGNvbXBvdW5kB2Fzc2V0SWQFC3dhdmVzVXNkbkxQCQACAQIeYXR0YWNoIFdBVkVTVVNETkxQIHRva2VucyBvbmx5AwkBASEBBQhpc09yYWNsZQkAAgECLFlvdSBhcmUgbm90IGF1dGhvdGl6ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uBAxmcm9tQ29tcG91bmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUUa2V5V2F2ZXNVc2RuQ29tcG91bmQAAAQLdG90YWxTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUMa2V5V0FWRVNVU0ROAAAEBnN0YWtlQwkA/AcECQEHQWRkcmVzcwEBGgFX6zvnfm4FGMKRpJgWF+Fm10UnIO4lSVaoAgVzdGFrZQUDbmlsCQDMCAIFCGNvbXBvdW5kBQNuaWwDCQAAAgUGc3Rha2VDBQZzdGFrZUMEC3VwZGF0ZVN0YXRlCQEMSW50ZWdlckVudHJ5AgUMa2V5V0FWRVNVU0ROCQBkAgULdG90YWxTdGFrZWQFAmNhBAJ0YwkBDEludGVnZXJFbnRyeQIFFGtleVdhdmVzVXNkbkNvbXBvdW5kCQBkAgUMZnJvbUNvbXBvdW5kBQJjYQkAzAgCBQt1cGRhdGVTdGF0ZQkAzAgCBQJ0YwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWNvbXBvdW5kTHRjVXNkbkxQAAQIY29tcG91bmQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQCY2EIBQhjb21wb3VuZAZhbW91bnQECGlzT3JhY2xlCQEMY2hlY2tBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwMJAQIhPQIIBQhjb21wb3VuZAdhc3NldElkBQlsdGNVc2RuTFAJAAIBAhxhdHRhY2ggTFRDVVNETkxQIHRva2VucyBvbmx5AwkBASEBBQhpc09yYWNsZQkAAgECLFlvdSBhcmUgbm90IGF1dGhvdGl6ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uBAxmcm9tQ29tcG91bmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUSa2V5THRjVXNkbkNvbXBvdW5kAAAEC3RvdGFsU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtleVdBVkVTVVNETgAABAZzdGFrZUMJAPwHBAkBB0FkZHJlc3MBARoBV+s7535uBRjCkaSYFhfhZtdFJyDuJUlWqAIFc3Rha2UFA25pbAkAzAgCBQhjb21wb3VuZAUDbmlsAwkAAAIFBnN0YWtlQwUGc3Rha2VDBAt1cGRhdGVTdGF0ZQkBDEludGVnZXJFbnRyeQIFCmtleUxUQ1VTRE4JAGQCBQt0b3RhbFN0YWtlZAUCY2EEAnRjCQEMSW50ZWdlckVudHJ5AgUSa2V5THRjVXNkbkNvbXBvdW5kCQBkAgUMZnJvbUNvbXBvdW5kBQJjYQkAzAgCBQt1cGRhdGVTdGF0ZQkAzAgCBQJ0YwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGluaXROU0JUVVNETgAEAnBtCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEAmFtCAUCcG0GYW1vdW50AwkBAiE9AggFAnBtB2Fzc2V0SWQFCm5zYnRVc2RuTFAJAAIBAhBVbmV4cGVjdGVkIHRva2VuBAFzCQD8BwQJAQdBZGRyZXNzAQEaAVRZQCeTa0sp7r6xoQ7m3EC4z6SNegzrtQ8CBXN0YWtlBQNuaWwJAMwIAgUCcG0FA25pbAMJAAACBQFzBQFzBAN1cGQJAQxJbnRlZ2VyRW50cnkCBQtrZXlOU0JUVVNETgCa15iJAgQEdXBkSwkBDEludGVnZXJFbnRyeQIFE2tleU5zYnRVc2RuQ29tcG91bmQAAAkAzAgCBQN1cGQJAMwIAgUEdXBkSwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHNwb25zb3JCb29zdAAEAnBtCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECmxvY2tQZXJpb2QAZAMJAQIhPQIIBQJwbQdhc3NldElkBQR3eElkCQACAQIFRXJyb3IECXNwb25zb3JlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rZXlTcG9uc29yc2hpcAAABARsb2NrCQD8BwQJAQdBZGRyZXNzAQEaAVez5uZVGBFpsOQzD4hRQ6ScrtbVSwNLEVgCDGluY3JlYXNlTG9jawkAzAgCBQpsb2NrUGVyaW9kBQNuaWwJAMwIAgUCcG0FA25pbAMJAAACBQRsb2NrBQRsb2NrBAFzCQEMSW50ZWdlckVudHJ5AgUOa2V5U3BvbnNvcnNoaXAJAGQCCAUCcG0GYW1vdW50BQlzcG9uc29yZWQJAMwIAgUBcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleYZWpH0=", "height": 3292489, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5JJW3ZDkPKbEBheZN5x4tfPn1G3cWA74DDwATj1vTueZ Next: HoLdfFMkpZEpSwyYA4Z5y1X12ZNTiDg7v8nnCMqC5siV Diff:
OldNewDifferences
8282 let keyLTCUSDN = "LTC_USDN"
8383
8484 let keyLtcUsdnCompound = "LTC_USDN_Compound"
85+
86+let wxId = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on'
87+
88+let keySponsorship = "Sponsorship_in_lock"
8589
8690 let def = 100000000
8791
425429 let payment = value(i.payments[0])
426430 let am = payment.amount
427431 let id = payment.assetId
428- if ((size(i.payments) != 1))
429- then throw("1 pmnt expd")
430- else if ((id == usdtUsdnLPTCI))
431- then {
432- let TCIAmount = match assetInfo(usdtUsdnLPTCI) {
433- case q: Asset =>
434- q.quantity
435- case _ =>
436- 0
437- }
438- let usdnUsdtStaked = valueOrElse(getInteger(this, keyStaked), 0)
439- let forSingleTCI = fraction(usdnUsdtStaked, def, TCIAmount)
440- let usdnLpToWithdraw = fraction(forSingleTCI, am, def)
441- let fee = fraction(usdnLpToWithdraw, def, feePerc)
442- let unstakeUsdtUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf", usdnLpToWithdraw], nil)
443- if ((unstakeUsdtUsdnLP == unstakeUsdtUsdnLP))
444- then {
445- let usdnLpfeeTransfer = ScriptTransfer(Address(tw), fee, usdtUsdnLP)
446- let transfer = ScriptTransfer(i.caller, (usdnLpToWithdraw - fee), usdtUsdnLP)
447- let updateUsdnLpStaked = IntegerEntry(keyStaked, (usdnUsdtStaked - usdnLpToWithdraw))
448- let brn = Burn(usdtUsdnLPTCI, am)
449-[usdnLpfeeTransfer, transfer, updateUsdnLpStaked, brn]
450- }
451- else throw("Strict value is not equal to itself.")
452- }
453- else if ((id == wxUsdnLPTCI))
432+ if (isStopped)
433+ then throw("smart contract is on lock")
434+ else if ((size(i.payments) != 1))
435+ then throw("1 pmnt expd")
436+ else if ((id == usdtUsdnLPTCI))
454437 then {
455- let wxTciAm = match assetInfo(wxUsdnLPTCI) {
438+ let TCIAmount = match assetInfo(usdtUsdnLPTCI) {
456439 case q: Asset =>
457440 q.quantity
458441 case _ =>
459442 0
460443 }
461- let wxUsdnStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
462- let singleWXLP = fraction(wxUsdnStaked, def, wxTciAm)
463- let wxLpToWithdraw = fraction(singleWXLP, am, def)
464- let fee = fraction(wxLpToWithdraw, def, feePerc)
465- let unstakeWxUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", wxLpToWithdraw], nil)
466- if ((unstakeWxUsdnLP == unstakeWxUsdnLP))
444+ let usdnUsdtStaked = valueOrElse(getInteger(this, keyStaked), 0)
445+ let forSingleTCI = fraction(usdnUsdtStaked, def, TCIAmount)
446+ let usdnLpToWithdraw = fraction(forSingleTCI, am, def)
447+ let fee = fraction(usdnLpToWithdraw, def, feePerc)
448+ let unstakeUsdtUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf", usdnLpToWithdraw], nil)
449+ if ((unstakeUsdtUsdnLP == unstakeUsdtUsdnLP))
467450 then {
468- let wxLpFeeTransfer = ScriptTransfer(Address(tw), fee, wxUsdnLP)
469- let wxLpTransfer = ScriptTransfer(i.caller, (wxLpToWithdraw - fee), wxUsdnLP)
470- let updateWxLpStaked = IntegerEntry(keyWXUSDN, (wxUsdnStaked - wxLpToWithdraw))
471- let burnWxLpTci = Burn(wxUsdnLPTCI, am)
472-[wxLpFeeTransfer, wxLpTransfer, updateWxLpStaked, burnWxLpTci]
451+ let usdnLpfeeTransfer = ScriptTransfer(Address(tw), fee, usdtUsdnLP)
452+ let transfer = ScriptTransfer(i.caller, (usdnLpToWithdraw - fee), usdtUsdnLP)
453+ let updateUsdnLpStaked = IntegerEntry(keyStaked, (usdnUsdtStaked - usdnLpToWithdraw))
454+ let brn = Burn(usdtUsdnLPTCI, am)
455+[usdnLpfeeTransfer, transfer, updateUsdnLpStaked, brn]
473456 }
474457 else throw("Strict value is not equal to itself.")
475458 }
476- else if ((id == usdcUsdnLPTCI))
459+ else if ((id == wxUsdnLPTCI))
477460 then {
478- let usdcUsdnTCI = match assetInfo(usdcUsdnLPTCI) {
461+ let wxTciAm = match assetInfo(wxUsdnLPTCI) {
479462 case q: Asset =>
480463 q.quantity
481464 case _ =>
482465 0
483466 }
484- let usdcUsdnStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
485- let singleUsdcLP = fraction(usdcUsdnStaked, def, usdcUsdnTCI)
486- let usdcUsdnLpToWithdraw = fraction(singleUsdcLP, am, def)
487- let fee = fraction(usdcUsdnLpToWithdraw, def, feePerc)
488- let unstakeUsdcUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5", usdcUsdnLpToWithdraw], nil)
489- if ((unstakeUsdcUsdnLP == unstakeUsdcUsdnLP))
467+ let wxUsdnStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
468+ let singleWXLP = fraction(wxUsdnStaked, def, wxTciAm)
469+ let wxLpToWithdraw = fraction(singleWXLP, am, def)
470+ let fee = fraction(wxLpToWithdraw, def, feePerc)
471+ let unstakeWxUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", wxLpToWithdraw], nil)
472+ if ((unstakeWxUsdnLP == unstakeWxUsdnLP))
490473 then {
491- let usdcUsdnLPFee = ScriptTransfer(Address(tw), fee, usdcUsdnLP)
492- let usdcUsdnTransfer = ScriptTransfer(i.caller, (usdcUsdnLpToWithdraw - fee), usdcUsdnLP)
493- let updateUsdcUsdnLpStaked = IntegerEntry(keyUSDCUSDN, (usdcUsdnStaked - usdcUsdnLpToWithdraw))
494- let burnUsdcUsdnLpTci = Burn(usdcUsdnLPTCI, am)
495-[usdcUsdnLPFee, usdcUsdnTransfer, updateUsdcUsdnLpStaked, burnUsdcUsdnLpTci]
474+ let wxLpFeeTransfer = ScriptTransfer(Address(tw), fee, wxUsdnLP)
475+ let wxLpTransfer = ScriptTransfer(i.caller, (wxLpToWithdraw - fee), wxUsdnLP)
476+ let updateWxLpStaked = IntegerEntry(keyWXUSDN, (wxUsdnStaked - wxLpToWithdraw))
477+ let burnWxLpTci = Burn(wxUsdnLPTCI, am)
478+[wxLpFeeTransfer, wxLpTransfer, updateWxLpStaked, burnWxLpTci]
496479 }
497480 else throw("Strict value is not equal to itself.")
498481 }
499- else if ((id == usdcUsdtLPTCI))
482+ else if ((id == usdcUsdnLPTCI))
500483 then {
501- let usdcUsdtTci = match assetInfo(usdcUsdtLPTCI) {
484+ let usdcUsdnTCI = match assetInfo(usdcUsdnLPTCI) {
502485 case q: Asset =>
503486 q.quantity
504487 case _ =>
505488 0
506489 }
507- let usdcUsdtStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
508- let singleUsdcUsdt = fraction(usdcUsdtStaked, def, usdcUsdtTci)
509- let usdcUsdtLpToWithdraw = fraction(singleUsdcUsdt, am, def)
510- let fee = fraction(usdcUsdtLpToWithdraw, def, feePerc)
511- let unstakeUsdcUsdtLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EPhdEfmQaNcHyvDmRGhnLhgcJtKZ2a4k3ZBmKWtAEWyH", usdcUsdtLpToWithdraw], nil)
512- if ((unstakeUsdcUsdtLP == unstakeUsdcUsdtLP))
490+ let usdcUsdnStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
491+ let singleUsdcLP = fraction(usdcUsdnStaked, def, usdcUsdnTCI)
492+ let usdcUsdnLpToWithdraw = fraction(singleUsdcLP, am, def)
493+ let fee = fraction(usdcUsdnLpToWithdraw, def, feePerc)
494+ let unstakeUsdcUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5", usdcUsdnLpToWithdraw], nil)
495+ if ((unstakeUsdcUsdnLP == unstakeUsdcUsdnLP))
513496 then {
514- let usdcUsdtLPFee = ScriptTransfer(Address(tw), fee, usdcUsdtLP)
515- let usdcUsdtTransfer = ScriptTransfer(i.caller, (usdcUsdtLpToWithdraw - fee), usdcUsdtLP)
516- let updateUsdcUsdtLpStaked = IntegerEntry(keyUSDCUSDT, (usdcUsdtStaked - usdcUsdtLpToWithdraw))
517- let burnUsdcUsdtLpTci = Burn(usdcUsdtLPTCI, am)
518-[usdcUsdtLPFee, usdcUsdtTransfer, updateUsdcUsdtLpStaked, burnUsdcUsdtLpTci]
497+ let usdcUsdnLPFee = ScriptTransfer(Address(tw), fee, usdcUsdnLP)
498+ let usdcUsdnTransfer = ScriptTransfer(i.caller, (usdcUsdnLpToWithdraw - fee), usdcUsdnLP)
499+ let updateUsdcUsdnLpStaked = IntegerEntry(keyUSDCUSDN, (usdcUsdnStaked - usdcUsdnLpToWithdraw))
500+ let burnUsdcUsdnLpTci = Burn(usdcUsdnLPTCI, am)
501+[usdcUsdnLPFee, usdcUsdnTransfer, updateUsdcUsdnLpStaked, burnUsdcUsdnLpTci]
519502 }
520503 else throw("Strict value is not equal to itself.")
521504 }
522- else if ((id == puzzleUsdnLPTCI))
505+ else if ((id == usdcUsdtLPTCI))
523506 then {
524- let puzzleUsdnTci = match assetInfo(puzzleUsdnLPTCI) {
507+ let usdcUsdtTci = match assetInfo(usdcUsdtLPTCI) {
525508 case q: Asset =>
526509 q.quantity
527510 case _ =>
528511 0
529512 }
530- let puzzleLPStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
531- let singlePuzzleUsdn = fraction(puzzleLPStaked, def, puzzleUsdnTci)
532- let puzzleUsdnWithdraw = fraction(singlePuzzleUsdn, am, def)
533- let fee = fraction(puzzleUsdnWithdraw, def, feePerc)
534- let unstakePuzzleUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["E8zHu33GfcNyGLypX77gZiUXfvuZQeaYmiEfsy7VYNwP", puzzleUsdnWithdraw], nil)
535- if ((unstakePuzzleUsdnLP == unstakePuzzleUsdnLP))
513+ let usdcUsdtStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
514+ let singleUsdcUsdt = fraction(usdcUsdtStaked, def, usdcUsdtTci)
515+ let usdcUsdtLpToWithdraw = fraction(singleUsdcUsdt, am, def)
516+ let fee = fraction(usdcUsdtLpToWithdraw, def, feePerc)
517+ let unstakeUsdcUsdtLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EPhdEfmQaNcHyvDmRGhnLhgcJtKZ2a4k3ZBmKWtAEWyH", usdcUsdtLpToWithdraw], nil)
518+ if ((unstakeUsdcUsdtLP == unstakeUsdcUsdtLP))
536519 then {
537- let puzzleUsdnLPFee = ScriptTransfer(Address(tw), fee, puzzleUsdnLP)
538- let puzzleUsdnTransfer = ScriptTransfer(i.caller, (puzzleUsdnWithdraw - fee), puzzleUsdnLP)
539- let updatePuzzleUsdnLpStaked = IntegerEntry(keyPUZZLEUSDN, (puzzleLPStaked - puzzleUsdnWithdraw))
540- let burnPuzzleTCI = Burn(puzzleUsdnLPTCI, am)
541-[puzzleUsdnLPFee, puzzleUsdnTransfer, updatePuzzleUsdnLpStaked, burnPuzzleTCI]
520+ let usdcUsdtLPFee = ScriptTransfer(Address(tw), fee, usdcUsdtLP)
521+ let usdcUsdtTransfer = ScriptTransfer(i.caller, (usdcUsdtLpToWithdraw - fee), usdcUsdtLP)
522+ let updateUsdcUsdtLpStaked = IntegerEntry(keyUSDCUSDT, (usdcUsdtStaked - usdcUsdtLpToWithdraw))
523+ let burnUsdcUsdtLpTci = Burn(usdcUsdtLPTCI, am)
524+[usdcUsdtLPFee, usdcUsdtTransfer, updateUsdcUsdtLpStaked, burnUsdcUsdtLpTci]
542525 }
543526 else throw("Strict value is not equal to itself.")
544527 }
545- else if ((id == btcUsdnLPTCI))
528+ else if ((id == puzzleUsdnLPTCI))
546529 then {
547- let btcUsdnTCI = match assetInfo(puzzleUsdnLPTCI) {
530+ let puzzleUsdnTci = match assetInfo(puzzleUsdnLPTCI) {
548531 case q: Asset =>
549532 q.quantity
550533 case _ =>
551534 0
552535 }
553- let btcUsdnStaked = valueOrElse(getInteger(this, keyBTCUSDN), 0)
554- let singleBtcUsdn = fraction(btcUsdnStaked, def, btcUsdnTCI)
555- let btcUsdnWithdraw = fraction(singleBtcUsdn, am, def)
556- let fee = fraction(btcUsdnWithdraw, def, feePerc)
557- let unstakeBtcUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["8WhH5CCJ6NakPvEvAJcizqqD7H6axhupdYHDFumSDwsy", btcUsdnWithdraw], nil)
558- if ((unstakeBtcUsdn == unstakeBtcUsdn))
536+ let puzzleLPStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
537+ let singlePuzzleUsdn = fraction(puzzleLPStaked, def, puzzleUsdnTci)
538+ let puzzleUsdnWithdraw = fraction(singlePuzzleUsdn, am, def)
539+ let fee = fraction(puzzleUsdnWithdraw, def, feePerc)
540+ let unstakePuzzleUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["E8zHu33GfcNyGLypX77gZiUXfvuZQeaYmiEfsy7VYNwP", puzzleUsdnWithdraw], nil)
541+ if ((unstakePuzzleUsdnLP == unstakePuzzleUsdnLP))
559542 then {
560- let btcUsdnLPFee = ScriptTransfer(Address(tw), fee, btcUsdnLP)
561- let btcUsdnTransfer = ScriptTransfer(i.caller, (btcUsdnWithdraw - fee), btcUsdnLP)
562- let updateBtcUsdnLPStaked = IntegerEntry(keyBTCUSDN, (btcUsdnStaked - btcUsdnWithdraw))
563- let burnBtcUsdnTci = Burn(btcUsdnLPTCI, am)
564-[btcUsdnLPFee, btcUsdnTransfer, updateBtcUsdnLPStaked, burnBtcUsdnTci]
543+ let puzzleUsdnLPFee = ScriptTransfer(Address(tw), fee, puzzleUsdnLP)
544+ let puzzleUsdnTransfer = ScriptTransfer(i.caller, (puzzleUsdnWithdraw - fee), puzzleUsdnLP)
545+ let updatePuzzleUsdnLpStaked = IntegerEntry(keyPUZZLEUSDN, (puzzleLPStaked - puzzleUsdnWithdraw))
546+ let burnPuzzleTCI = Burn(puzzleUsdnLPTCI, am)
547+[puzzleUsdnLPFee, puzzleUsdnTransfer, updatePuzzleUsdnLpStaked, burnPuzzleTCI]
565548 }
566549 else throw("Strict value is not equal to itself.")
567550 }
568- else if ((id == wavesUsdnLPTCI))
551+ else if ((id == btcUsdnLPTCI))
569552 then {
570- let wavesUsdnTCI = match assetInfo(wavesUsdnLPTCI) {
553+ let btcUsdnTCI = match assetInfo(puzzleUsdnLPTCI) {
571554 case q: Asset =>
572555 q.quantity
573556 case _ =>
574557 0
575558 }
576- let wavesUsdnStaked = valueOrElse(getInteger(this, keyWAVESUSDN), 0)
577- let singleWavesUsdn = fraction(wavesUsdnStaked, def, wavesUsdnTCI)
578- let wavesUsdnWithdraw = fraction(singleWavesUsdn, am, def)
579- let fee = fraction(wavesUsdnWithdraw, def, feePerc)
580- let unstakeWavesUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1", wavesUsdnWithdraw], nil)
581- if ((unstakeWavesUsdn == unstakeWavesUsdn))
559+ let btcUsdnStaked = valueOrElse(getInteger(this, keyBTCUSDN), 0)
560+ let singleBtcUsdn = fraction(btcUsdnStaked, def, btcUsdnTCI)
561+ let btcUsdnWithdraw = fraction(singleBtcUsdn, am, def)
562+ let fee = fraction(btcUsdnWithdraw, def, feePerc)
563+ let unstakeBtcUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["8WhH5CCJ6NakPvEvAJcizqqD7H6axhupdYHDFumSDwsy", btcUsdnWithdraw], nil)
564+ if ((unstakeBtcUsdn == unstakeBtcUsdn))
582565 then {
583- let wavesUsndFee = ScriptTransfer(Address(tw), fee, wavesUsdnLP)
584- let wavesUsdnTransfer = ScriptTransfer(i.caller, (wavesUsdnWithdraw - fee), wavesUsdnLP)
585- let updateWavesUsdnLPStaked = IntegerEntry(keyWAVESUSDN, (wavesUsdnStaked - wavesUsdnWithdraw))
586- let burnWavesUsdnTCI = Burn(wavesUsdnLPTCI, am)
587-[wavesUsndFee, wavesUsdnTransfer, updateWavesUsdnLPStaked, burnWavesUsdnTCI]
566+ let btcUsdnLPFee = ScriptTransfer(Address(tw), fee, btcUsdnLP)
567+ let btcUsdnTransfer = ScriptTransfer(i.caller, (btcUsdnWithdraw - fee), btcUsdnLP)
568+ let updateBtcUsdnLPStaked = IntegerEntry(keyBTCUSDN, (btcUsdnStaked - btcUsdnWithdraw))
569+ let burnBtcUsdnTci = Burn(btcUsdnLPTCI, am)
570+[btcUsdnLPFee, btcUsdnTransfer, updateBtcUsdnLPStaked, burnBtcUsdnTci]
588571 }
589572 else throw("Strict value is not equal to itself.")
590573 }
591- else if ((id == ennoUsdnLPTCI))
574+ else if ((id == wavesUsdnLPTCI))
592575 then {
593- let ennoUsdnTCI = match assetInfo(ennoUsdnLPTCI) {
576+ let wavesUsdnTCI = match assetInfo(wavesUsdnLPTCI) {
594577 case q: Asset =>
595578 q.quantity
596579 case _ =>
597580 0
598581 }
599- let ennoUsdnStaked = valueOrElse(getInteger(this, keyENNOUSDN), 0)
600- let singleEnnoUsdn = fraction(ennoUsdnStaked, def, ennoUsdnTCI)
601- let ennoUsdnWithdraw = fraction(singleEnnoUsdn, am, def)
602- let fee = fraction(ennoUsdnWithdraw, def, feePerc)
603- let unstakeEnnoUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["HnW33dcEaeUTcgMLd8vHoJR5iAFZ2ngHDAa9E9496kDX", ennoUsdnWithdraw], nil)
604- if ((unstakeEnnoUsdn == unstakeEnnoUsdn))
582+ let wavesUsdnStaked = valueOrElse(getInteger(this, keyWAVESUSDN), 0)
583+ let singleWavesUsdn = fraction(wavesUsdnStaked, def, wavesUsdnTCI)
584+ let wavesUsdnWithdraw = fraction(singleWavesUsdn, am, def)
585+ let fee = fraction(wavesUsdnWithdraw, def, feePerc)
586+ let unstakeWavesUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1", wavesUsdnWithdraw], nil)
587+ if ((unstakeWavesUsdn == unstakeWavesUsdn))
605588 then {
606- let ennoUsdnFee = ScriptTransfer(Address(tw), fee, ennoUsdnLP)
607- let ennoUsdnTransfer = ScriptTransfer(i.caller, (ennoUsdnWithdraw - fee), ennoUsdnLP)
608- let updateEnnoUsdnLPStaked = IntegerEntry(keyENNOUSDN, (ennoUsdnStaked - ennoUsdnWithdraw))
609- let burnEnnoUsdnTCI = Burn(ennoUsdnLPTCI, am)
610-[ennoUsdnFee, ennoUsdnTransfer, updateEnnoUsdnLPStaked, burnEnnoUsdnTCI]
589+ let wavesUsndFee = ScriptTransfer(Address(tw), fee, wavesUsdnLP)
590+ let wavesUsdnTransfer = ScriptTransfer(i.caller, (wavesUsdnWithdraw - fee), wavesUsdnLP)
591+ let updateWavesUsdnLPStaked = IntegerEntry(keyWAVESUSDN, (wavesUsdnStaked - wavesUsdnWithdraw))
592+ let burnWavesUsdnTCI = Burn(wavesUsdnLPTCI, am)
593+[wavesUsndFee, wavesUsdnTransfer, updateWavesUsdnLPStaked, burnWavesUsdnTCI]
611594 }
612595 else throw("Strict value is not equal to itself.")
613596 }
614- else if ((id == nsbtUsdnLPTCI))
597+ else if ((id == ennoUsdnLPTCI))
615598 then {
616- let nsbtUsdnTCI = match assetInfo(nsbtUsdnLPTCI) {
599+ let ennoUsdnTCI = match assetInfo(ennoUsdnLPTCI) {
617600 case q: Asset =>
618601 q.quantity
619602 case _ =>
620603 0
621604 }
622- let nsbtUsdnStaked = valueOrElse(getInteger(this, keyENNOUSDN), 0)
623- let singleNsbtUsdn = fraction(nsbtUsdnStaked, def, nsbtUsdnTCI)
624- let nsbtUsdnWithdraw = fraction(singleNsbtUsdn, am, def)
625- let fee = fraction(nsbtUsdnWithdraw, def, feePerc)
626- let unstakeNsbtUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["AGo49HCtQUghfxHSpUXub3KBaMXyunJmTxQ4azgU5Ax5", nsbtUsdnWithdraw], nil)
627- if ((unstakeNsbtUsdn == unstakeNsbtUsdn))
605+ let ennoUsdnStaked = valueOrElse(getInteger(this, keyENNOUSDN), 0)
606+ let singleEnnoUsdn = fraction(ennoUsdnStaked, def, ennoUsdnTCI)
607+ let ennoUsdnWithdraw = fraction(singleEnnoUsdn, am, def)
608+ let fee = fraction(ennoUsdnWithdraw, def, feePerc)
609+ let unstakeEnnoUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["HnW33dcEaeUTcgMLd8vHoJR5iAFZ2ngHDAa9E9496kDX", ennoUsdnWithdraw], nil)
610+ if ((unstakeEnnoUsdn == unstakeEnnoUsdn))
628611 then {
629- let nsbtUsdnFee = ScriptTransfer(Address(tw), fee, nsbtUsdnLP)
630- let nsbtUsdnTransfer = ScriptTransfer(i.caller, (nsbtUsdnWithdraw - fee), nsbtUsdnLP)
631- let updateNsbtUsdnStaked = IntegerEntry(keyNSBTUSDN, (nsbtUsdnStaked - nsbtUsdnWithdraw))
632- let burnNsbtUsdnTCI = Burn(nsbtUsdnLPTCI, am)
633-[nsbtUsdnFee, nsbtUsdnTransfer, updateNsbtUsdnStaked, burnNsbtUsdnTCI]
612+ let ennoUsdnFee = ScriptTransfer(Address(tw), fee, ennoUsdnLP)
613+ let ennoUsdnTransfer = ScriptTransfer(i.caller, (ennoUsdnWithdraw - fee), ennoUsdnLP)
614+ let updateEnnoUsdnLPStaked = IntegerEntry(keyENNOUSDN, (ennoUsdnStaked - ennoUsdnWithdraw))
615+ let burnEnnoUsdnTCI = Burn(ennoUsdnLPTCI, am)
616+[ennoUsdnFee, ennoUsdnTransfer, updateEnnoUsdnLPStaked, burnEnnoUsdnTCI]
634617 }
635618 else throw("Strict value is not equal to itself.")
636619 }
637- else if ((id == ltcUsdnLPTCI))
620+ else if ((id == nsbtUsdnLPTCI))
638621 then {
639- let ltcUsdnTCI = match assetInfo(ltcUsdnLPTCI) {
622+ let nsbtUsdnTCI = match assetInfo(nsbtUsdnLPTCI) {
640623 case q: Asset =>
641624 q.quantity
642625 case _ =>
643626 0
644627 }
645- let ltcUsdnStaked = valueOrElse(getInteger(this, keyLTCUSDN), 0)
646- let singleLtcUsdn = fraction(ltcUsdnStaked, def, ltcUsdnTCI)
647- let ltcUsdnWithdraw = fraction(singleLtcUsdn, am, def)
648- let fee = fraction(ltcUsdnWithdraw, def, feePerc)
649- let unstakeLtcUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["CNkqC6GPi888WdJ1EuVtu9JGZ9VHpAn8eTHwR8YZxXbv", ltcUsdnWithdraw], nil)
650- if ((unstakeLtcUsdn == unstakeLtcUsdn))
628+ let nsbtUsdnStaked = valueOrElse(getInteger(this, keyNSBTUSDN), 0)
629+ let singleNsbtUsdn = fraction(nsbtUsdnStaked, def, nsbtUsdnTCI)
630+ let nsbtUsdnWithdraw = fraction(singleNsbtUsdn, am, def)
631+ let fee = fraction(nsbtUsdnWithdraw, def, feePerc)
632+ let unstakeNsbtUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["AGo49HCtQUghfxHSpUXub3KBaMXyunJmTxQ4azgU5Ax5", nsbtUsdnWithdraw], nil)
633+ if ((unstakeNsbtUsdn == unstakeNsbtUsdn))
651634 then {
652- let ltcUsdnFee = ScriptTransfer(Address(tw), fee, ltcUsdnLP)
653- let ltcUsdnTransfer = ScriptTransfer(i.caller, (ltcUsdnWithdraw - fee), ltcUsdnLP)
654- let updateLtcUsdnStaked = IntegerEntry(keyLTCUSDN, (ltcUsdnStaked - ltcUsdnWithdraw))
655- let burnLtcUsdnTCI = Burn(ltcUsdnLPTCI, am)
656-[ltcUsdnFee, ltcUsdnTransfer, updateLtcUsdnStaked, burnLtcUsdnTCI]
635+ let nsbtUsdnFee = ScriptTransfer(Address(tw), fee, nsbtUsdnLP)
636+ let nsbtUsdnTransfer = ScriptTransfer(i.caller, (nsbtUsdnWithdraw - fee), nsbtUsdnLP)
637+ let updateNsbtUsdnStaked = IntegerEntry(keyNSBTUSDN, (nsbtUsdnStaked - nsbtUsdnWithdraw))
638+ let burnNsbtUsdnTCI = Burn(nsbtUsdnLPTCI, am)
639+[nsbtUsdnFee, nsbtUsdnTransfer, updateNsbtUsdnStaked, burnNsbtUsdnTCI]
657640 }
658641 else throw("Strict value is not equal to itself.")
659642 }
660- else throw("Invalid asset")
643+ else if ((id == ltcUsdnLPTCI))
644+ then {
645+ let ltcUsdnTCI = match assetInfo(ltcUsdnLPTCI) {
646+ case q: Asset =>
647+ q.quantity
648+ case _ =>
649+ 0
650+ }
651+ let ltcUsdnStaked = valueOrElse(getInteger(this, keyLTCUSDN), 0)
652+ let singleLtcUsdn = fraction(ltcUsdnStaked, def, ltcUsdnTCI)
653+ let ltcUsdnWithdraw = fraction(singleLtcUsdn, am, def)
654+ let fee = fraction(ltcUsdnWithdraw, def, feePerc)
655+ let unstakeLtcUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["CNkqC6GPi888WdJ1EuVtu9JGZ9VHpAn8eTHwR8YZxXbv", ltcUsdnWithdraw], nil)
656+ if ((unstakeLtcUsdn == unstakeLtcUsdn))
657+ then {
658+ let ltcUsdnFee = ScriptTransfer(Address(tw), fee, ltcUsdnLP)
659+ let ltcUsdnTransfer = ScriptTransfer(i.caller, (ltcUsdnWithdraw - fee), ltcUsdnLP)
660+ let updateLtcUsdnStaked = IntegerEntry(keyLTCUSDN, (ltcUsdnStaked - ltcUsdnWithdraw))
661+ let burnLtcUsdnTCI = Burn(ltcUsdnLPTCI, am)
662+[ltcUsdnFee, ltcUsdnTransfer, updateLtcUsdnStaked, burnLtcUsdnTCI]
663+ }
664+ else throw("Strict value is not equal to itself.")
665+ }
666+ else throw("Invalid asset")
661667 }
662668
663669
911917 }
912918
913919
920+
921+@Callable(i)
922+func initNSBTUSDN () = {
923+ let pm = value(i.payments[0])
924+ let am = pm.amount
925+ if ((pm.assetId != nsbtUsdnLP))
926+ then throw("Unexpected token")
927+ else {
928+ let s = invoke(Address(base58'3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz'), "stake", nil, [pm])
929+ if ((s == s))
930+ then {
931+ let upd = IntegerEntry(keyNSBTUSDN, 556149658)
932+ let updK = IntegerEntry(keyNsbtUsdnCompound, 0)
933+[upd, updK]
934+ }
935+ else throw("Strict value is not equal to itself.")
936+ }
937+ }
938+
939+
940+
941+@Callable(i)
942+func sponsorBoost () = {
943+ let pm = value(i.payments[0])
944+ let lockPeriod = 100
945+ if ((pm.assetId != wxId))
946+ then throw("Error")
947+ else {
948+ let sponsored = valueOrElse(getInteger(this, keySponsorship), 0)
949+ let lock = invoke(Address(base58'3PJL8Hn8LACaSBWLQ3UVhctA5cTQLBFwBAP'), "increaseLock", [lockPeriod], [pm])
950+ if ((lock == lock))
951+ then {
952+ let s = IntegerEntry(keySponsorship, (pm.amount + sponsored))
953+[s]
954+ }
955+ else throw("Strict value is not equal to itself.")
956+ }
957+ }
958+
959+
914960 @Verifier(tx)
915961 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
916962
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let usdtUsdnLP = base58'97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf'
55
66 let usdtUsdnLPTCI = base58'2CD44HANZzsdU7yqRsmz7L9eA2Foh4YYMC4azMbaZEj6'
77
88 let wxUsdnLP = base58'F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9'
99
1010 let wxUsdnLPTCI = base58'FuUobp3DcfARzDLcvtVW37i7FvMPvCCpgdcvWke8sBuh'
1111
1212 let usdcUsdnLP = base58'EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5'
1313
1414 let usdcUsdnLPTCI = base58'HZKFpNfyPG5gt4D6Nfy1zQSg2Ptmqv932GjNTCyBEeKP'
1515
1616 let usdcUsdtLP = base58'EPhdEfmQaNcHyvDmRGhnLhgcJtKZ2a4k3ZBmKWtAEWyH'
1717
1818 let usdcUsdtLPTCI = base58'BqPYkaiz7Le6fFu1rjZ54anrpT57EpvyugZCUqrsjXj'
1919
2020 let puzzleUsdnLP = base58'E8zHu33GfcNyGLypX77gZiUXfvuZQeaYmiEfsy7VYNwP'
2121
2222 let puzzleUsdnLPTCI = base58'Dh9QXSSABE5V6aRfu3mCbDAUokbpE7ER7pbZV6cvyg1A'
2323
2424 let nsbtUsdnLP = base58'AGo49HCtQUghfxHSpUXub3KBaMXyunJmTxQ4azgU5Ax5'
2525
2626 let nsbtUsdnLPTCI = base58'3hty6p21a9M4t9greh13nydX84bvaPyXDhKZ2FSmLNRg'
2727
2828 let btcUsdnLP = base58'8WhH5CCJ6NakPvEvAJcizqqD7H6axhupdYHDFumSDwsy'
2929
3030 let btcUsdnLPTCI = base58'FpRckcTCzfsfXwWhQCrL5rcrStRB6HxmRjP28qVFz4iu'
3131
3232 let ennoUsdnLP = base58'HnW33dcEaeUTcgMLd8vHoJR5iAFZ2ngHDAa9E9496kDX'
3333
3434 let ennoUsdnLPTCI = base58'57kEMQuVpmhsG9eCkcGRA3hTsZZGa6axKJfNwXEU4EM1'
3535
3636 let wavesUsdnLP = base58'7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1'
3737
3838 let wavesUsdnLPTCI = base58'EHia7oPmBSJyTd3Uix8sdpEvFXB9X18ioqreXiTaKyVJ'
3939
4040 let ltcUsdnLP = base58'CNkqC6GPi888WdJ1EuVtu9JGZ9VHpAn8eTHwR8YZxXbv'
4141
4242 let ltcUsdnLPTCI = base58'HgD36mcgHVF5beAQi6rPtatg4gVmMckvPExFR3jEDydW'
4343
4444 let isStopped = false
4545
4646 let keyStaked = "STAKED_LP"
4747
4848 let keyCompound = "From_Compound"
4949
5050 let keywxUsdnCompound = "WX_USDN_compound"
5151
5252 let keyWXUSDN = "WX_USDN"
5353
5454 let keyUsdcUsdnCompound = "USDC_USDN_compound"
5555
5656 let keyUSDCUSDN = "USDC_USDN"
5757
5858 let keyUsdcUsdtCompound = "USDC_USDT_compound"
5959
6060 let keyUSDCUSDT = "USDC_USDT"
6161
6262 let keyPuzzleUsdnCompound = "PUZZLE_USDN_compound"
6363
6464 let keyPUZZLEUSDN = "PUZZLE_USDN"
6565
6666 let keyNsbtUsdnCompound = "NSBT_USDN_compound"
6767
6868 let keyNSBTUSDN = "NSBT_USDN"
6969
7070 let keyBTCUSDN = "BTC_USDN"
7171
7272 let keyBtcUsdnCompound = "BTC_USDN_Compound"
7373
7474 let keyENNOUSDN = "ENNO_USDN"
7575
7676 let keyEnnoUsdnCompound = "ENNO_USDN_Compound"
7777
7878 let keyWAVESUSDN = "WAVES_USDN"
7979
8080 let keyWavesUsdnCompound = "WAVES_USDN_Compound"
8181
8282 let keyLTCUSDN = "LTC_USDN"
8383
8484 let keyLtcUsdnCompound = "LTC_USDN_Compound"
85+
86+let wxId = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on'
87+
88+let keySponsorship = "Sponsorship_in_lock"
8589
8690 let def = 100000000
8791
8892 let feePerc = 10000000000
8993
9094 let tw = base58'3P93R2GBkTGVehRPhytHr7sdxYww93jkbhm'
9195
9296 let oracle = base58'3P6phwFZFQtZFuc9dvdXsgvtg8JEFVgECPA'
9397
9498 func checkAddress (caller) = if ((caller != oracle))
9599 then false
96100 else true
97101
98102
99103 @Callable(i)
100104 func depositWxUsdnLP () = {
101105 let pmt = value(i.payments[0])
102106 let pmtAmount = pmt.amount
103107 if ((pmt.assetId != wxUsdnLP))
104108 then throw("attach WXUSDNLP tokens only")
105109 else if (isStopped)
106110 then throw("smart contract is on lock")
107111 else {
108112 let tkStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
109113 let totalIssued = match assetInfo(wxUsdnLPTCI) {
110114 case asset: Asset =>
111115 asset.quantity
112116 case _ =>
113117 throw("Can't find asset")
114118 }
115119 let one = fraction(totalIssued, 100000000, tkStaked)
116120 let toIssue = fraction(pmtAmount, one, 100000000)
117121 let updateState = IntegerEntry(keyWXUSDN, (tkStaked + pmtAmount))
118122 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
119123 if ((LPstake == LPstake))
120124 then {
121125 let LPIssue = Reissue(wxUsdnLPTCI, toIssue, true)
122126 let transfer = ScriptTransfer(i.caller, toIssue, wxUsdnLPTCI)
123127 [LPIssue, transfer, updateState]
124128 }
125129 else throw("Strict value is not equal to itself.")
126130 }
127131 }
128132
129133
130134
131135 @Callable(i)
132136 func depositUsdtUsdnLP () = {
133137 let pmt = value(i.payments[0])
134138 let pmtAmount = pmt.amount
135139 if ((pmt.assetId != usdtUsdnLP))
136140 then throw("attach USDTUSDNLP tokens only")
137141 else if (isStopped)
138142 then throw("smart contract is on lock")
139143 else {
140144 let tkStaked = valueOrElse(getInteger(this, keyStaked), 0)
141145 let totalIssued = match assetInfo(usdtUsdnLPTCI) {
142146 case asset: Asset =>
143147 asset.quantity
144148 case _ =>
145149 throw("Can't find asset")
146150 }
147151 let fromCompound = valueOrElse(getInteger(this, keyCompound), 0)
148152 let forOne = fraction(totalIssued, 100000000, tkStaked)
149153 let toIssue = fraction(pmtAmount, forOne, 100000000)
150154 let updateState = IntegerEntry(keyStaked, (tkStaked + pmtAmount))
151155 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
152156 if ((LPstake == LPstake))
153157 then {
154158 let LPIssue = Reissue(usdtUsdnLPTCI, toIssue, true)
155159 let transfer = ScriptTransfer(i.caller, toIssue, usdtUsdnLPTCI)
156160 [LPIssue, transfer, updateState]
157161 }
158162 else throw("Strict value is not equal to itself.")
159163 }
160164 }
161165
162166
163167
164168 @Callable(i)
165169 func depositUsdcUsdnLP () = {
166170 let pmt = value(i.payments[0])
167171 let pmtAmount = pmt.amount
168172 if ((pmt.assetId != usdcUsdnLP))
169173 then throw("attach USDCUSDNLP tokens only")
170174 else if (isStopped)
171175 then throw("smart contract is on lock")
172176 else {
173177 let tkStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
174178 let totalIssued = match assetInfo(usdcUsdnLPTCI) {
175179 case asset: Asset =>
176180 asset.quantity
177181 case _ =>
178182 throw("Can't find asset")
179183 }
180184 let fromCompound = valueOrElse(getInteger(this, keyUsdcUsdnCompound), 0)
181185 let forOne = fraction(totalIssued, 100000000, tkStaked)
182186 let toIssue = fraction(pmtAmount, forOne, 100000000)
183187 let updateState = IntegerEntry(keyUSDCUSDN, (tkStaked + pmtAmount))
184188 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
185189 if ((LPstake == LPstake))
186190 then {
187191 let LPIssue = Reissue(usdcUsdnLPTCI, toIssue, true)
188192 let transfer = ScriptTransfer(i.caller, toIssue, usdcUsdnLPTCI)
189193 [LPIssue, transfer, updateState]
190194 }
191195 else throw("Strict value is not equal to itself.")
192196 }
193197 }
194198
195199
196200
197201 @Callable(i)
198202 func depositUsdcUsdtLP () = {
199203 let pmt = value(i.payments[0])
200204 let pmtAmount = pmt.amount
201205 if ((pmt.assetId != usdcUsdtLP))
202206 then throw("attach USDCUSDTLP tokens only")
203207 else if (isStopped)
204208 then throw("smart contract is on lock")
205209 else {
206210 let tkStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
207211 let totalIssued = match assetInfo(usdcUsdtLPTCI) {
208212 case asset: Asset =>
209213 asset.quantity
210214 case _ =>
211215 throw("Can't find asset")
212216 }
213217 let fromCompound = valueOrElse(getInteger(this, keyUsdcUsdtCompound), 0)
214218 let forOne = fraction(totalIssued, 100000000, tkStaked)
215219 let toIssue = fraction(pmtAmount, forOne, 100000000)
216220 let updateState = IntegerEntry(keyUSDCUSDT, (tkStaked + pmtAmount))
217221 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
218222 if ((LPstake == LPstake))
219223 then {
220224 let LPIssue = Reissue(usdcUsdtLPTCI, toIssue, true)
221225 let transfer = ScriptTransfer(i.caller, toIssue, usdcUsdtLPTCI)
222226 [LPIssue, transfer, updateState]
223227 }
224228 else throw("Strict value is not equal to itself.")
225229 }
226230 }
227231
228232
229233
230234 @Callable(i)
231235 func depositPuzzleUsdnLP () = {
232236 let pmt = value(i.payments[0])
233237 let pmtAmount = pmt.amount
234238 if ((pmt.assetId != puzzleUsdnLP))
235239 then throw("attach PUZZLEUDSNLP tokens only")
236240 else if (isStopped)
237241 then throw("smart contract is on lock")
238242 else {
239243 let tkStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
240244 let totalIssued = match assetInfo(puzzleUsdnLPTCI) {
241245 case asset: Asset =>
242246 asset.quantity
243247 case _ =>
244248 throw("Can't find asset")
245249 }
246250 let fromCompound = valueOrElse(getInteger(this, keyPuzzleUsdnCompound), 0)
247251 let forOne = fraction(totalIssued, 100000000, tkStaked)
248252 let toIssue = fraction(pmtAmount, forOne, 100000000)
249253 let updateState = IntegerEntry(keyPUZZLEUSDN, (tkStaked + pmtAmount))
250254 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
251255 if ((LPstake == LPstake))
252256 then {
253257 let LPIssue = Reissue(puzzleUsdnLPTCI, toIssue, true)
254258 let transfer = ScriptTransfer(i.caller, toIssue, puzzleUsdnLPTCI)
255259 [LPIssue, transfer, updateState]
256260 }
257261 else throw("Strict value is not equal to itself.")
258262 }
259263 }
260264
261265
262266
263267 @Callable(i)
264268 func depositNsbtUsdnLP () = {
265269 let pmt = value(i.payments[0])
266270 let pmtAmount = pmt.amount
267271 if ((pmt.assetId != nsbtUsdnLP))
268272 then throw("attach NSBTUSDNLP tokens only")
269273 else if (isStopped)
270274 then throw("smart contract is on lock")
271275 else {
272276 let tkStaked = valueOrElse(getInteger(this, keyNSBTUSDN), 0)
273277 let totalIssued = match assetInfo(nsbtUsdnLPTCI) {
274278 case asset: Asset =>
275279 asset.quantity
276280 case _ =>
277281 throw("Can't find asset")
278282 }
279283 let one = fraction(totalIssued, 100000000, tkStaked)
280284 let toIssue = fraction(pmtAmount, one, 100000000)
281285 let updateState = IntegerEntry(keyNSBTUSDN, (tkStaked + pmtAmount))
282286 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
283287 if ((LPstake == LPstake))
284288 then {
285289 let LPIssue = Reissue(nsbtUsdnLPTCI, toIssue, true)
286290 let transfer = ScriptTransfer(i.caller, toIssue, nsbtUsdnLPTCI)
287291 [LPIssue, transfer, updateState]
288292 }
289293 else throw("Strict value is not equal to itself.")
290294 }
291295 }
292296
293297
294298
295299 @Callable(i)
296300 func depositBtcUsdnLP () = {
297301 let pmt = value(i.payments[0])
298302 let pmtAmount = pmt.amount
299303 if ((pmt.assetId != btcUsdnLP))
300304 then throw("attach BTCUSDNLP tokens only")
301305 else if (isStopped)
302306 then throw("smart contract is on lock")
303307 else {
304308 let tkStaked = valueOrElse(getInteger(this, keyBTCUSDN), 0)
305309 let totalIssued = match assetInfo(btcUsdnLPTCI) {
306310 case asset: Asset =>
307311 asset.quantity
308312 case _ =>
309313 throw("Can't find asset")
310314 }
311315 let forOne = fraction(totalIssued, 100000000, tkStaked)
312316 let toIssue = fraction(pmtAmount, forOne, 100000000)
313317 let updateState = IntegerEntry(keyBTCUSDN, (tkStaked + pmtAmount))
314318 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
315319 if ((LPstake == LPstake))
316320 then {
317321 let LPIssue = Reissue(btcUsdnLPTCI, toIssue, true)
318322 let transfer = ScriptTransfer(i.caller, toIssue, btcUsdnLPTCI)
319323 [LPIssue, transfer, updateState]
320324 }
321325 else throw("Strict value is not equal to itself.")
322326 }
323327 }
324328
325329
326330
327331 @Callable(i)
328332 func depositEnnoUsdnLP () = {
329333 let pmt = value(i.payments[0])
330334 let pmtAmount = pmt.amount
331335 if ((pmt.assetId != ennoUsdnLP))
332336 then throw("attach ENNOUSDNLP tokens only")
333337 else if (isStopped)
334338 then throw("smart contract is on lock")
335339 else {
336340 let tkStaked = valueOrElse(getInteger(this, keyENNOUSDN), 0)
337341 let totalIssued = match assetInfo(ennoUsdnLPTCI) {
338342 case asset: Asset =>
339343 asset.quantity
340344 case _ =>
341345 throw("Can't find asset")
342346 }
343347 let one = fraction(totalIssued, 100000000, tkStaked)
344348 let toIssue = fraction(pmtAmount, one, 100000000)
345349 let updateState = IntegerEntry(keyENNOUSDN, (tkStaked + pmtAmount))
346350 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
347351 if ((LPstake == LPstake))
348352 then {
349353 let LPIssue = Reissue(ennoUsdnLPTCI, toIssue, true)
350354 let transfer = ScriptTransfer(i.caller, toIssue, ennoUsdnLPTCI)
351355 [LPIssue, transfer, updateState]
352356 }
353357 else throw("Strict value is not equal to itself.")
354358 }
355359 }
356360
357361
358362
359363 @Callable(i)
360364 func depositWavesUsdnLP () = {
361365 let pmt = value(i.payments[0])
362366 let pmtAmount = pmt.amount
363367 if ((pmt.assetId != wavesUsdnLP))
364368 then throw("attach WAVESUSDNLP tokens only")
365369 else if (isStopped)
366370 then throw("smart contract is on lock")
367371 else {
368372 let tkStaked = valueOrElse(getInteger(this, keyWAVESUSDN), 0)
369373 let totalIssued = match assetInfo(wavesUsdnLPTCI) {
370374 case asset: Asset =>
371375 asset.quantity
372376 case _ =>
373377 throw("Can't find asset")
374378 }
375379 let one = fraction(totalIssued, 100000000, tkStaked)
376380 let toIssue = fraction(pmtAmount, one, 100000000)
377381 let updateState = IntegerEntry(keyWAVESUSDN, (tkStaked + pmtAmount))
378382 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
379383 if ((LPstake == LPstake))
380384 then {
381385 let LPIssue = Reissue(wavesUsdnLPTCI, toIssue, true)
382386 let transfer = ScriptTransfer(i.caller, toIssue, wavesUsdnLPTCI)
383387 [LPIssue, transfer, updateState]
384388 }
385389 else throw("Strict value is not equal to itself.")
386390 }
387391 }
388392
389393
390394
391395 @Callable(i)
392396 func depositLtcUsdnLP () = {
393397 let pmt = value(i.payments[0])
394398 let pmtAmount = pmt.amount
395399 if ((pmt.assetId != ltcUsdnLP))
396400 then throw("attach LTCUSDNLP tokens only")
397401 else if (isStopped)
398402 then throw("smart contract is on lock")
399403 else {
400404 let tkStaked = valueOrElse(getInteger(this, keyLTCUSDN), 0)
401405 let totalIssued = match assetInfo(ltcUsdnLPTCI) {
402406 case asset: Asset =>
403407 asset.quantity
404408 case _ =>
405409 throw("Can't find asset")
406410 }
407411 let one = fraction(totalIssued, 100000000, tkStaked)
408412 let toIssue = fraction(pmtAmount, one, 100000000)
409413 let updateState = IntegerEntry(keyLTCUSDN, (tkStaked + pmtAmount))
410414 let LPstake = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [pmt])
411415 if ((LPstake == LPstake))
412416 then {
413417 let LPIssue = Reissue(ltcUsdnLPTCI, toIssue, true)
414418 let transfer = ScriptTransfer(i.caller, toIssue, ltcUsdnLPTCI)
415419 [LPIssue, transfer, updateState]
416420 }
417421 else throw("Strict value is not equal to itself.")
418422 }
419423 }
420424
421425
422426
423427 @Callable(i)
424428 func withdraw () = {
425429 let payment = value(i.payments[0])
426430 let am = payment.amount
427431 let id = payment.assetId
428- if ((size(i.payments) != 1))
429- then throw("1 pmnt expd")
430- else if ((id == usdtUsdnLPTCI))
431- then {
432- let TCIAmount = match assetInfo(usdtUsdnLPTCI) {
433- case q: Asset =>
434- q.quantity
435- case _ =>
436- 0
437- }
438- let usdnUsdtStaked = valueOrElse(getInteger(this, keyStaked), 0)
439- let forSingleTCI = fraction(usdnUsdtStaked, def, TCIAmount)
440- let usdnLpToWithdraw = fraction(forSingleTCI, am, def)
441- let fee = fraction(usdnLpToWithdraw, def, feePerc)
442- let unstakeUsdtUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf", usdnLpToWithdraw], nil)
443- if ((unstakeUsdtUsdnLP == unstakeUsdtUsdnLP))
444- then {
445- let usdnLpfeeTransfer = ScriptTransfer(Address(tw), fee, usdtUsdnLP)
446- let transfer = ScriptTransfer(i.caller, (usdnLpToWithdraw - fee), usdtUsdnLP)
447- let updateUsdnLpStaked = IntegerEntry(keyStaked, (usdnUsdtStaked - usdnLpToWithdraw))
448- let brn = Burn(usdtUsdnLPTCI, am)
449-[usdnLpfeeTransfer, transfer, updateUsdnLpStaked, brn]
450- }
451- else throw("Strict value is not equal to itself.")
452- }
453- else if ((id == wxUsdnLPTCI))
432+ if (isStopped)
433+ then throw("smart contract is on lock")
434+ else if ((size(i.payments) != 1))
435+ then throw("1 pmnt expd")
436+ else if ((id == usdtUsdnLPTCI))
454437 then {
455- let wxTciAm = match assetInfo(wxUsdnLPTCI) {
438+ let TCIAmount = match assetInfo(usdtUsdnLPTCI) {
456439 case q: Asset =>
457440 q.quantity
458441 case _ =>
459442 0
460443 }
461- let wxUsdnStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
462- let singleWXLP = fraction(wxUsdnStaked, def, wxTciAm)
463- let wxLpToWithdraw = fraction(singleWXLP, am, def)
464- let fee = fraction(wxLpToWithdraw, def, feePerc)
465- let unstakeWxUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", wxLpToWithdraw], nil)
466- if ((unstakeWxUsdnLP == unstakeWxUsdnLP))
444+ let usdnUsdtStaked = valueOrElse(getInteger(this, keyStaked), 0)
445+ let forSingleTCI = fraction(usdnUsdtStaked, def, TCIAmount)
446+ let usdnLpToWithdraw = fraction(forSingleTCI, am, def)
447+ let fee = fraction(usdnLpToWithdraw, def, feePerc)
448+ let unstakeUsdtUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["97zHFp1C3cB7qfvx8Xv5f2rWp9nUSG5UnAamfPcW6txf", usdnLpToWithdraw], nil)
449+ if ((unstakeUsdtUsdnLP == unstakeUsdtUsdnLP))
467450 then {
468- let wxLpFeeTransfer = ScriptTransfer(Address(tw), fee, wxUsdnLP)
469- let wxLpTransfer = ScriptTransfer(i.caller, (wxLpToWithdraw - fee), wxUsdnLP)
470- let updateWxLpStaked = IntegerEntry(keyWXUSDN, (wxUsdnStaked - wxLpToWithdraw))
471- let burnWxLpTci = Burn(wxUsdnLPTCI, am)
472-[wxLpFeeTransfer, wxLpTransfer, updateWxLpStaked, burnWxLpTci]
451+ let usdnLpfeeTransfer = ScriptTransfer(Address(tw), fee, usdtUsdnLP)
452+ let transfer = ScriptTransfer(i.caller, (usdnLpToWithdraw - fee), usdtUsdnLP)
453+ let updateUsdnLpStaked = IntegerEntry(keyStaked, (usdnUsdtStaked - usdnLpToWithdraw))
454+ let brn = Burn(usdtUsdnLPTCI, am)
455+[usdnLpfeeTransfer, transfer, updateUsdnLpStaked, brn]
473456 }
474457 else throw("Strict value is not equal to itself.")
475458 }
476- else if ((id == usdcUsdnLPTCI))
459+ else if ((id == wxUsdnLPTCI))
477460 then {
478- let usdcUsdnTCI = match assetInfo(usdcUsdnLPTCI) {
461+ let wxTciAm = match assetInfo(wxUsdnLPTCI) {
479462 case q: Asset =>
480463 q.quantity
481464 case _ =>
482465 0
483466 }
484- let usdcUsdnStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
485- let singleUsdcLP = fraction(usdcUsdnStaked, def, usdcUsdnTCI)
486- let usdcUsdnLpToWithdraw = fraction(singleUsdcLP, am, def)
487- let fee = fraction(usdcUsdnLpToWithdraw, def, feePerc)
488- let unstakeUsdcUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5", usdcUsdnLpToWithdraw], nil)
489- if ((unstakeUsdcUsdnLP == unstakeUsdcUsdnLP))
467+ let wxUsdnStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
468+ let singleWXLP = fraction(wxUsdnStaked, def, wxTciAm)
469+ let wxLpToWithdraw = fraction(singleWXLP, am, def)
470+ let fee = fraction(wxLpToWithdraw, def, feePerc)
471+ let unstakeWxUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["F2AKkA513k5yHEJkLsU6vWxCYYk811GpjLhwEv2WGwZ9", wxLpToWithdraw], nil)
472+ if ((unstakeWxUsdnLP == unstakeWxUsdnLP))
490473 then {
491- let usdcUsdnLPFee = ScriptTransfer(Address(tw), fee, usdcUsdnLP)
492- let usdcUsdnTransfer = ScriptTransfer(i.caller, (usdcUsdnLpToWithdraw - fee), usdcUsdnLP)
493- let updateUsdcUsdnLpStaked = IntegerEntry(keyUSDCUSDN, (usdcUsdnStaked - usdcUsdnLpToWithdraw))
494- let burnUsdcUsdnLpTci = Burn(usdcUsdnLPTCI, am)
495-[usdcUsdnLPFee, usdcUsdnTransfer, updateUsdcUsdnLpStaked, burnUsdcUsdnLpTci]
474+ let wxLpFeeTransfer = ScriptTransfer(Address(tw), fee, wxUsdnLP)
475+ let wxLpTransfer = ScriptTransfer(i.caller, (wxLpToWithdraw - fee), wxUsdnLP)
476+ let updateWxLpStaked = IntegerEntry(keyWXUSDN, (wxUsdnStaked - wxLpToWithdraw))
477+ let burnWxLpTci = Burn(wxUsdnLPTCI, am)
478+[wxLpFeeTransfer, wxLpTransfer, updateWxLpStaked, burnWxLpTci]
496479 }
497480 else throw("Strict value is not equal to itself.")
498481 }
499- else if ((id == usdcUsdtLPTCI))
482+ else if ((id == usdcUsdnLPTCI))
500483 then {
501- let usdcUsdtTci = match assetInfo(usdcUsdtLPTCI) {
484+ let usdcUsdnTCI = match assetInfo(usdcUsdnLPTCI) {
502485 case q: Asset =>
503486 q.quantity
504487 case _ =>
505488 0
506489 }
507- let usdcUsdtStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
508- let singleUsdcUsdt = fraction(usdcUsdtStaked, def, usdcUsdtTci)
509- let usdcUsdtLpToWithdraw = fraction(singleUsdcUsdt, am, def)
510- let fee = fraction(usdcUsdtLpToWithdraw, def, feePerc)
511- let unstakeUsdcUsdtLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EPhdEfmQaNcHyvDmRGhnLhgcJtKZ2a4k3ZBmKWtAEWyH", usdcUsdtLpToWithdraw], nil)
512- if ((unstakeUsdcUsdtLP == unstakeUsdcUsdtLP))
490+ let usdcUsdnStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
491+ let singleUsdcLP = fraction(usdcUsdnStaked, def, usdcUsdnTCI)
492+ let usdcUsdnLpToWithdraw = fraction(singleUsdcLP, am, def)
493+ let fee = fraction(usdcUsdnLpToWithdraw, def, feePerc)
494+ let unstakeUsdcUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EK6N7S38xbtBT3SxAqoGdDLCiX6rojX6G169CnSyuE5", usdcUsdnLpToWithdraw], nil)
495+ if ((unstakeUsdcUsdnLP == unstakeUsdcUsdnLP))
513496 then {
514- let usdcUsdtLPFee = ScriptTransfer(Address(tw), fee, usdcUsdtLP)
515- let usdcUsdtTransfer = ScriptTransfer(i.caller, (usdcUsdtLpToWithdraw - fee), usdcUsdtLP)
516- let updateUsdcUsdtLpStaked = IntegerEntry(keyUSDCUSDT, (usdcUsdtStaked - usdcUsdtLpToWithdraw))
517- let burnUsdcUsdtLpTci = Burn(usdcUsdtLPTCI, am)
518-[usdcUsdtLPFee, usdcUsdtTransfer, updateUsdcUsdtLpStaked, burnUsdcUsdtLpTci]
497+ let usdcUsdnLPFee = ScriptTransfer(Address(tw), fee, usdcUsdnLP)
498+ let usdcUsdnTransfer = ScriptTransfer(i.caller, (usdcUsdnLpToWithdraw - fee), usdcUsdnLP)
499+ let updateUsdcUsdnLpStaked = IntegerEntry(keyUSDCUSDN, (usdcUsdnStaked - usdcUsdnLpToWithdraw))
500+ let burnUsdcUsdnLpTci = Burn(usdcUsdnLPTCI, am)
501+[usdcUsdnLPFee, usdcUsdnTransfer, updateUsdcUsdnLpStaked, burnUsdcUsdnLpTci]
519502 }
520503 else throw("Strict value is not equal to itself.")
521504 }
522- else if ((id == puzzleUsdnLPTCI))
505+ else if ((id == usdcUsdtLPTCI))
523506 then {
524- let puzzleUsdnTci = match assetInfo(puzzleUsdnLPTCI) {
507+ let usdcUsdtTci = match assetInfo(usdcUsdtLPTCI) {
525508 case q: Asset =>
526509 q.quantity
527510 case _ =>
528511 0
529512 }
530- let puzzleLPStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
531- let singlePuzzleUsdn = fraction(puzzleLPStaked, def, puzzleUsdnTci)
532- let puzzleUsdnWithdraw = fraction(singlePuzzleUsdn, am, def)
533- let fee = fraction(puzzleUsdnWithdraw, def, feePerc)
534- let unstakePuzzleUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["E8zHu33GfcNyGLypX77gZiUXfvuZQeaYmiEfsy7VYNwP", puzzleUsdnWithdraw], nil)
535- if ((unstakePuzzleUsdnLP == unstakePuzzleUsdnLP))
513+ let usdcUsdtStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
514+ let singleUsdcUsdt = fraction(usdcUsdtStaked, def, usdcUsdtTci)
515+ let usdcUsdtLpToWithdraw = fraction(singleUsdcUsdt, am, def)
516+ let fee = fraction(usdcUsdtLpToWithdraw, def, feePerc)
517+ let unstakeUsdcUsdtLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["EPhdEfmQaNcHyvDmRGhnLhgcJtKZ2a4k3ZBmKWtAEWyH", usdcUsdtLpToWithdraw], nil)
518+ if ((unstakeUsdcUsdtLP == unstakeUsdcUsdtLP))
536519 then {
537- let puzzleUsdnLPFee = ScriptTransfer(Address(tw), fee, puzzleUsdnLP)
538- let puzzleUsdnTransfer = ScriptTransfer(i.caller, (puzzleUsdnWithdraw - fee), puzzleUsdnLP)
539- let updatePuzzleUsdnLpStaked = IntegerEntry(keyPUZZLEUSDN, (puzzleLPStaked - puzzleUsdnWithdraw))
540- let burnPuzzleTCI = Burn(puzzleUsdnLPTCI, am)
541-[puzzleUsdnLPFee, puzzleUsdnTransfer, updatePuzzleUsdnLpStaked, burnPuzzleTCI]
520+ let usdcUsdtLPFee = ScriptTransfer(Address(tw), fee, usdcUsdtLP)
521+ let usdcUsdtTransfer = ScriptTransfer(i.caller, (usdcUsdtLpToWithdraw - fee), usdcUsdtLP)
522+ let updateUsdcUsdtLpStaked = IntegerEntry(keyUSDCUSDT, (usdcUsdtStaked - usdcUsdtLpToWithdraw))
523+ let burnUsdcUsdtLpTci = Burn(usdcUsdtLPTCI, am)
524+[usdcUsdtLPFee, usdcUsdtTransfer, updateUsdcUsdtLpStaked, burnUsdcUsdtLpTci]
542525 }
543526 else throw("Strict value is not equal to itself.")
544527 }
545- else if ((id == btcUsdnLPTCI))
528+ else if ((id == puzzleUsdnLPTCI))
546529 then {
547- let btcUsdnTCI = match assetInfo(puzzleUsdnLPTCI) {
530+ let puzzleUsdnTci = match assetInfo(puzzleUsdnLPTCI) {
548531 case q: Asset =>
549532 q.quantity
550533 case _ =>
551534 0
552535 }
553- let btcUsdnStaked = valueOrElse(getInteger(this, keyBTCUSDN), 0)
554- let singleBtcUsdn = fraction(btcUsdnStaked, def, btcUsdnTCI)
555- let btcUsdnWithdraw = fraction(singleBtcUsdn, am, def)
556- let fee = fraction(btcUsdnWithdraw, def, feePerc)
557- let unstakeBtcUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["8WhH5CCJ6NakPvEvAJcizqqD7H6axhupdYHDFumSDwsy", btcUsdnWithdraw], nil)
558- if ((unstakeBtcUsdn == unstakeBtcUsdn))
536+ let puzzleLPStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
537+ let singlePuzzleUsdn = fraction(puzzleLPStaked, def, puzzleUsdnTci)
538+ let puzzleUsdnWithdraw = fraction(singlePuzzleUsdn, am, def)
539+ let fee = fraction(puzzleUsdnWithdraw, def, feePerc)
540+ let unstakePuzzleUsdnLP = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["E8zHu33GfcNyGLypX77gZiUXfvuZQeaYmiEfsy7VYNwP", puzzleUsdnWithdraw], nil)
541+ if ((unstakePuzzleUsdnLP == unstakePuzzleUsdnLP))
559542 then {
560- let btcUsdnLPFee = ScriptTransfer(Address(tw), fee, btcUsdnLP)
561- let btcUsdnTransfer = ScriptTransfer(i.caller, (btcUsdnWithdraw - fee), btcUsdnLP)
562- let updateBtcUsdnLPStaked = IntegerEntry(keyBTCUSDN, (btcUsdnStaked - btcUsdnWithdraw))
563- let burnBtcUsdnTci = Burn(btcUsdnLPTCI, am)
564-[btcUsdnLPFee, btcUsdnTransfer, updateBtcUsdnLPStaked, burnBtcUsdnTci]
543+ let puzzleUsdnLPFee = ScriptTransfer(Address(tw), fee, puzzleUsdnLP)
544+ let puzzleUsdnTransfer = ScriptTransfer(i.caller, (puzzleUsdnWithdraw - fee), puzzleUsdnLP)
545+ let updatePuzzleUsdnLpStaked = IntegerEntry(keyPUZZLEUSDN, (puzzleLPStaked - puzzleUsdnWithdraw))
546+ let burnPuzzleTCI = Burn(puzzleUsdnLPTCI, am)
547+[puzzleUsdnLPFee, puzzleUsdnTransfer, updatePuzzleUsdnLpStaked, burnPuzzleTCI]
565548 }
566549 else throw("Strict value is not equal to itself.")
567550 }
568- else if ((id == wavesUsdnLPTCI))
551+ else if ((id == btcUsdnLPTCI))
569552 then {
570- let wavesUsdnTCI = match assetInfo(wavesUsdnLPTCI) {
553+ let btcUsdnTCI = match assetInfo(puzzleUsdnLPTCI) {
571554 case q: Asset =>
572555 q.quantity
573556 case _ =>
574557 0
575558 }
576- let wavesUsdnStaked = valueOrElse(getInteger(this, keyWAVESUSDN), 0)
577- let singleWavesUsdn = fraction(wavesUsdnStaked, def, wavesUsdnTCI)
578- let wavesUsdnWithdraw = fraction(singleWavesUsdn, am, def)
579- let fee = fraction(wavesUsdnWithdraw, def, feePerc)
580- let unstakeWavesUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1", wavesUsdnWithdraw], nil)
581- if ((unstakeWavesUsdn == unstakeWavesUsdn))
559+ let btcUsdnStaked = valueOrElse(getInteger(this, keyBTCUSDN), 0)
560+ let singleBtcUsdn = fraction(btcUsdnStaked, def, btcUsdnTCI)
561+ let btcUsdnWithdraw = fraction(singleBtcUsdn, am, def)
562+ let fee = fraction(btcUsdnWithdraw, def, feePerc)
563+ let unstakeBtcUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["8WhH5CCJ6NakPvEvAJcizqqD7H6axhupdYHDFumSDwsy", btcUsdnWithdraw], nil)
564+ if ((unstakeBtcUsdn == unstakeBtcUsdn))
582565 then {
583- let wavesUsndFee = ScriptTransfer(Address(tw), fee, wavesUsdnLP)
584- let wavesUsdnTransfer = ScriptTransfer(i.caller, (wavesUsdnWithdraw - fee), wavesUsdnLP)
585- let updateWavesUsdnLPStaked = IntegerEntry(keyWAVESUSDN, (wavesUsdnStaked - wavesUsdnWithdraw))
586- let burnWavesUsdnTCI = Burn(wavesUsdnLPTCI, am)
587-[wavesUsndFee, wavesUsdnTransfer, updateWavesUsdnLPStaked, burnWavesUsdnTCI]
566+ let btcUsdnLPFee = ScriptTransfer(Address(tw), fee, btcUsdnLP)
567+ let btcUsdnTransfer = ScriptTransfer(i.caller, (btcUsdnWithdraw - fee), btcUsdnLP)
568+ let updateBtcUsdnLPStaked = IntegerEntry(keyBTCUSDN, (btcUsdnStaked - btcUsdnWithdraw))
569+ let burnBtcUsdnTci = Burn(btcUsdnLPTCI, am)
570+[btcUsdnLPFee, btcUsdnTransfer, updateBtcUsdnLPStaked, burnBtcUsdnTci]
588571 }
589572 else throw("Strict value is not equal to itself.")
590573 }
591- else if ((id == ennoUsdnLPTCI))
574+ else if ((id == wavesUsdnLPTCI))
592575 then {
593- let ennoUsdnTCI = match assetInfo(ennoUsdnLPTCI) {
576+ let wavesUsdnTCI = match assetInfo(wavesUsdnLPTCI) {
594577 case q: Asset =>
595578 q.quantity
596579 case _ =>
597580 0
598581 }
599- let ennoUsdnStaked = valueOrElse(getInteger(this, keyENNOUSDN), 0)
600- let singleEnnoUsdn = fraction(ennoUsdnStaked, def, ennoUsdnTCI)
601- let ennoUsdnWithdraw = fraction(singleEnnoUsdn, am, def)
602- let fee = fraction(ennoUsdnWithdraw, def, feePerc)
603- let unstakeEnnoUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["HnW33dcEaeUTcgMLd8vHoJR5iAFZ2ngHDAa9E9496kDX", ennoUsdnWithdraw], nil)
604- if ((unstakeEnnoUsdn == unstakeEnnoUsdn))
582+ let wavesUsdnStaked = valueOrElse(getInteger(this, keyWAVESUSDN), 0)
583+ let singleWavesUsdn = fraction(wavesUsdnStaked, def, wavesUsdnTCI)
584+ let wavesUsdnWithdraw = fraction(singleWavesUsdn, am, def)
585+ let fee = fraction(wavesUsdnWithdraw, def, feePerc)
586+ let unstakeWavesUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1", wavesUsdnWithdraw], nil)
587+ if ((unstakeWavesUsdn == unstakeWavesUsdn))
605588 then {
606- let ennoUsdnFee = ScriptTransfer(Address(tw), fee, ennoUsdnLP)
607- let ennoUsdnTransfer = ScriptTransfer(i.caller, (ennoUsdnWithdraw - fee), ennoUsdnLP)
608- let updateEnnoUsdnLPStaked = IntegerEntry(keyENNOUSDN, (ennoUsdnStaked - ennoUsdnWithdraw))
609- let burnEnnoUsdnTCI = Burn(ennoUsdnLPTCI, am)
610-[ennoUsdnFee, ennoUsdnTransfer, updateEnnoUsdnLPStaked, burnEnnoUsdnTCI]
589+ let wavesUsndFee = ScriptTransfer(Address(tw), fee, wavesUsdnLP)
590+ let wavesUsdnTransfer = ScriptTransfer(i.caller, (wavesUsdnWithdraw - fee), wavesUsdnLP)
591+ let updateWavesUsdnLPStaked = IntegerEntry(keyWAVESUSDN, (wavesUsdnStaked - wavesUsdnWithdraw))
592+ let burnWavesUsdnTCI = Burn(wavesUsdnLPTCI, am)
593+[wavesUsndFee, wavesUsdnTransfer, updateWavesUsdnLPStaked, burnWavesUsdnTCI]
611594 }
612595 else throw("Strict value is not equal to itself.")
613596 }
614- else if ((id == nsbtUsdnLPTCI))
597+ else if ((id == ennoUsdnLPTCI))
615598 then {
616- let nsbtUsdnTCI = match assetInfo(nsbtUsdnLPTCI) {
599+ let ennoUsdnTCI = match assetInfo(ennoUsdnLPTCI) {
617600 case q: Asset =>
618601 q.quantity
619602 case _ =>
620603 0
621604 }
622- let nsbtUsdnStaked = valueOrElse(getInteger(this, keyENNOUSDN), 0)
623- let singleNsbtUsdn = fraction(nsbtUsdnStaked, def, nsbtUsdnTCI)
624- let nsbtUsdnWithdraw = fraction(singleNsbtUsdn, am, def)
625- let fee = fraction(nsbtUsdnWithdraw, def, feePerc)
626- let unstakeNsbtUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["AGo49HCtQUghfxHSpUXub3KBaMXyunJmTxQ4azgU5Ax5", nsbtUsdnWithdraw], nil)
627- if ((unstakeNsbtUsdn == unstakeNsbtUsdn))
605+ let ennoUsdnStaked = valueOrElse(getInteger(this, keyENNOUSDN), 0)
606+ let singleEnnoUsdn = fraction(ennoUsdnStaked, def, ennoUsdnTCI)
607+ let ennoUsdnWithdraw = fraction(singleEnnoUsdn, am, def)
608+ let fee = fraction(ennoUsdnWithdraw, def, feePerc)
609+ let unstakeEnnoUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["HnW33dcEaeUTcgMLd8vHoJR5iAFZ2ngHDAa9E9496kDX", ennoUsdnWithdraw], nil)
610+ if ((unstakeEnnoUsdn == unstakeEnnoUsdn))
628611 then {
629- let nsbtUsdnFee = ScriptTransfer(Address(tw), fee, nsbtUsdnLP)
630- let nsbtUsdnTransfer = ScriptTransfer(i.caller, (nsbtUsdnWithdraw - fee), nsbtUsdnLP)
631- let updateNsbtUsdnStaked = IntegerEntry(keyNSBTUSDN, (nsbtUsdnStaked - nsbtUsdnWithdraw))
632- let burnNsbtUsdnTCI = Burn(nsbtUsdnLPTCI, am)
633-[nsbtUsdnFee, nsbtUsdnTransfer, updateNsbtUsdnStaked, burnNsbtUsdnTCI]
612+ let ennoUsdnFee = ScriptTransfer(Address(tw), fee, ennoUsdnLP)
613+ let ennoUsdnTransfer = ScriptTransfer(i.caller, (ennoUsdnWithdraw - fee), ennoUsdnLP)
614+ let updateEnnoUsdnLPStaked = IntegerEntry(keyENNOUSDN, (ennoUsdnStaked - ennoUsdnWithdraw))
615+ let burnEnnoUsdnTCI = Burn(ennoUsdnLPTCI, am)
616+[ennoUsdnFee, ennoUsdnTransfer, updateEnnoUsdnLPStaked, burnEnnoUsdnTCI]
634617 }
635618 else throw("Strict value is not equal to itself.")
636619 }
637- else if ((id == ltcUsdnLPTCI))
620+ else if ((id == nsbtUsdnLPTCI))
638621 then {
639- let ltcUsdnTCI = match assetInfo(ltcUsdnLPTCI) {
622+ let nsbtUsdnTCI = match assetInfo(nsbtUsdnLPTCI) {
640623 case q: Asset =>
641624 q.quantity
642625 case _ =>
643626 0
644627 }
645- let ltcUsdnStaked = valueOrElse(getInteger(this, keyLTCUSDN), 0)
646- let singleLtcUsdn = fraction(ltcUsdnStaked, def, ltcUsdnTCI)
647- let ltcUsdnWithdraw = fraction(singleLtcUsdn, am, def)
648- let fee = fraction(ltcUsdnWithdraw, def, feePerc)
649- let unstakeLtcUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["CNkqC6GPi888WdJ1EuVtu9JGZ9VHpAn8eTHwR8YZxXbv", ltcUsdnWithdraw], nil)
650- if ((unstakeLtcUsdn == unstakeLtcUsdn))
628+ let nsbtUsdnStaked = valueOrElse(getInteger(this, keyNSBTUSDN), 0)
629+ let singleNsbtUsdn = fraction(nsbtUsdnStaked, def, nsbtUsdnTCI)
630+ let nsbtUsdnWithdraw = fraction(singleNsbtUsdn, am, def)
631+ let fee = fraction(nsbtUsdnWithdraw, def, feePerc)
632+ let unstakeNsbtUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["AGo49HCtQUghfxHSpUXub3KBaMXyunJmTxQ4azgU5Ax5", nsbtUsdnWithdraw], nil)
633+ if ((unstakeNsbtUsdn == unstakeNsbtUsdn))
651634 then {
652- let ltcUsdnFee = ScriptTransfer(Address(tw), fee, ltcUsdnLP)
653- let ltcUsdnTransfer = ScriptTransfer(i.caller, (ltcUsdnWithdraw - fee), ltcUsdnLP)
654- let updateLtcUsdnStaked = IntegerEntry(keyLTCUSDN, (ltcUsdnStaked - ltcUsdnWithdraw))
655- let burnLtcUsdnTCI = Burn(ltcUsdnLPTCI, am)
656-[ltcUsdnFee, ltcUsdnTransfer, updateLtcUsdnStaked, burnLtcUsdnTCI]
635+ let nsbtUsdnFee = ScriptTransfer(Address(tw), fee, nsbtUsdnLP)
636+ let nsbtUsdnTransfer = ScriptTransfer(i.caller, (nsbtUsdnWithdraw - fee), nsbtUsdnLP)
637+ let updateNsbtUsdnStaked = IntegerEntry(keyNSBTUSDN, (nsbtUsdnStaked - nsbtUsdnWithdraw))
638+ let burnNsbtUsdnTCI = Burn(nsbtUsdnLPTCI, am)
639+[nsbtUsdnFee, nsbtUsdnTransfer, updateNsbtUsdnStaked, burnNsbtUsdnTCI]
657640 }
658641 else throw("Strict value is not equal to itself.")
659642 }
660- else throw("Invalid asset")
643+ else if ((id == ltcUsdnLPTCI))
644+ then {
645+ let ltcUsdnTCI = match assetInfo(ltcUsdnLPTCI) {
646+ case q: Asset =>
647+ q.quantity
648+ case _ =>
649+ 0
650+ }
651+ let ltcUsdnStaked = valueOrElse(getInteger(this, keyLTCUSDN), 0)
652+ let singleLtcUsdn = fraction(ltcUsdnStaked, def, ltcUsdnTCI)
653+ let ltcUsdnWithdraw = fraction(singleLtcUsdn, am, def)
654+ let fee = fraction(ltcUsdnWithdraw, def, feePerc)
655+ let unstakeLtcUsdn = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "unstake", ["CNkqC6GPi888WdJ1EuVtu9JGZ9VHpAn8eTHwR8YZxXbv", ltcUsdnWithdraw], nil)
656+ if ((unstakeLtcUsdn == unstakeLtcUsdn))
657+ then {
658+ let ltcUsdnFee = ScriptTransfer(Address(tw), fee, ltcUsdnLP)
659+ let ltcUsdnTransfer = ScriptTransfer(i.caller, (ltcUsdnWithdraw - fee), ltcUsdnLP)
660+ let updateLtcUsdnStaked = IntegerEntry(keyLTCUSDN, (ltcUsdnStaked - ltcUsdnWithdraw))
661+ let burnLtcUsdnTCI = Burn(ltcUsdnLPTCI, am)
662+[ltcUsdnFee, ltcUsdnTransfer, updateLtcUsdnStaked, burnLtcUsdnTCI]
663+ }
664+ else throw("Strict value is not equal to itself.")
665+ }
666+ else throw("Invalid asset")
661667 }
662668
663669
664670
665671 @Callable(i)
666672 func compoundWxUsdnLP () = {
667673 let compound = value(i.payments[0])
668674 let ca = compound.amount
669675 let isOracle = checkAddress(i.caller.bytes)
670676 if ((compound.assetId != wxUsdnLP))
671677 then throw("attach WXUSDNLP tokens only")
672678 else if (!(isOracle))
673679 then throw("You are not authotized to call this function")
674680 else {
675681 let fromCompound = valueOrElse(getInteger(this, keywxUsdnCompound), 0)
676682 let totalStaked = valueOrElse(getInteger(this, keyWXUSDN), 0)
677683 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
678684 if ((stakeC == stakeC))
679685 then {
680686 let updateState = IntegerEntry(keyWXUSDN, (totalStaked + ca))
681687 let tc = IntegerEntry(keywxUsdnCompound, (fromCompound + ca))
682688 [updateState, tc]
683689 }
684690 else throw("Strict value is not equal to itself.")
685691 }
686692 }
687693
688694
689695
690696 @Callable(i)
691697 func compoundUsdtUsdnLP () = {
692698 let compound = value(i.payments[0])
693699 let ca = compound.amount
694700 let isOracle = checkAddress(i.caller.bytes)
695701 if ((compound.assetId != usdtUsdnLP))
696702 then throw("attach USDTUSDNLP tokens only")
697703 else if (!(isOracle))
698704 then throw("You are not authotized to call this function")
699705 else {
700706 let fromCompound = valueOrElse(getInteger(this, keyCompound), 0)
701707 let totalStaked = valueOrElse(getInteger(this, keyStaked), 0)
702708 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
703709 if ((stakeC == stakeC))
704710 then {
705711 let updateState = IntegerEntry(keyStaked, (totalStaked + ca))
706712 let tc = IntegerEntry(keyCompound, (fromCompound + ca))
707713 [updateState, tc]
708714 }
709715 else throw("Strict value is not equal to itself.")
710716 }
711717 }
712718
713719
714720
715721 @Callable(i)
716722 func compoundUsdcUsdnLP () = {
717723 let compound = value(i.payments[0])
718724 let ca = compound.amount
719725 let isOracle = checkAddress(i.caller.bytes)
720726 if ((compound.assetId != usdcUsdnLP))
721727 then throw("attach USDCUSDNLP tokens only")
722728 else if (!(isOracle))
723729 then throw("You are not authotized to call this function")
724730 else {
725731 let fromCompound = valueOrElse(getInteger(this, keyUsdcUsdnCompound), 0)
726732 let totalStaked = valueOrElse(getInteger(this, keyUSDCUSDN), 0)
727733 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
728734 if ((stakeC == stakeC))
729735 then {
730736 let updateState = IntegerEntry(keyUSDCUSDN, (totalStaked + ca))
731737 let tc = IntegerEntry(keyUsdcUsdnCompound, (fromCompound + ca))
732738 [updateState, tc]
733739 }
734740 else throw("Strict value is not equal to itself.")
735741 }
736742 }
737743
738744
739745
740746 @Callable(i)
741747 func compoundUsdcUsdtLP () = {
742748 let compound = value(i.payments[0])
743749 let ca = compound.amount
744750 let isOracle = checkAddress(i.caller.bytes)
745751 if ((compound.assetId != usdcUsdtLP))
746752 then throw("attach USDCUSDTLP tokens only")
747753 else if (!(isOracle))
748754 then throw("You are not authotized to call this function")
749755 else {
750756 let fromCompound = valueOrElse(getInteger(this, keyUsdcUsdtCompound), 0)
751757 let totalStaked = valueOrElse(getInteger(this, keyUSDCUSDT), 0)
752758 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
753759 if ((stakeC == stakeC))
754760 then {
755761 let updateState = IntegerEntry(keyUSDCUSDT, (totalStaked + ca))
756762 let tc = IntegerEntry(keyUsdcUsdtCompound, (fromCompound + ca))
757763 [updateState, tc]
758764 }
759765 else throw("Strict value is not equal to itself.")
760766 }
761767 }
762768
763769
764770
765771 @Callable(i)
766772 func compoundPuzzleUsdnLP () = {
767773 let compound = value(i.payments[0])
768774 let ca = compound.amount
769775 let isOracle = checkAddress(i.caller.bytes)
770776 if ((compound.assetId != puzzleUsdnLP))
771777 then throw("attach PUZZLEUSDNLP tokens only")
772778 else if (!(isOracle))
773779 then throw("You are not authotized to call this function")
774780 else {
775781 let fromCompound = valueOrElse(getInteger(this, keyPuzzleUsdnCompound), 0)
776782 let totalStaked = valueOrElse(getInteger(this, keyPUZZLEUSDN), 0)
777783 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
778784 if ((stakeC == stakeC))
779785 then {
780786 let updateState = IntegerEntry(keyPUZZLEUSDN, (totalStaked + ca))
781787 let tc = IntegerEntry(keyPuzzleUsdnCompound, (fromCompound + ca))
782788 [updateState, tc]
783789 }
784790 else throw("Strict value is not equal to itself.")
785791 }
786792 }
787793
788794
789795
790796 @Callable(i)
791797 func compoundNsbtUsdnLP () = {
792798 let compound = value(i.payments[0])
793799 let ca = compound.amount
794800 let isOracle = checkAddress(i.caller.bytes)
795801 if ((compound.assetId != nsbtUsdnLP))
796802 then throw("attach NSBTUSDNLP tokens only")
797803 else if (!(isOracle))
798804 then throw("You are not authotized to call this function")
799805 else {
800806 let fromCompound = valueOrElse(getInteger(this, keyNsbtUsdnCompound), 0)
801807 let totalStaked = valueOrElse(getInteger(this, keyNSBTUSDN), 0)
802808 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
803809 if ((stakeC == stakeC))
804810 then {
805811 let updateState = IntegerEntry(keyNSBTUSDN, (totalStaked + ca))
806812 let tc = IntegerEntry(keyNsbtUsdnCompound, (fromCompound + ca))
807813 [updateState, tc]
808814 }
809815 else throw("Strict value is not equal to itself.")
810816 }
811817 }
812818
813819
814820
815821 @Callable(i)
816822 func compoundBtcUsdnLP () = {
817823 let compound = value(i.payments[0])
818824 let ca = compound.amount
819825 let isOracle = checkAddress(i.caller.bytes)
820826 if ((compound.assetId != btcUsdnLP))
821827 then throw("attach BTCUSDNLP tokens only")
822828 else if (!(isOracle))
823829 then throw("You are not authotized to call this function")
824830 else {
825831 let fromCompound = valueOrElse(getInteger(this, keyBtcUsdnCompound), 0)
826832 let totalStaked = valueOrElse(getInteger(this, keyBTCUSDN), 0)
827833 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
828834 if ((stakeC == stakeC))
829835 then {
830836 let updateState = IntegerEntry(keyBTCUSDN, (totalStaked + ca))
831837 let tc = IntegerEntry(keyBtcUsdnCompound, (fromCompound + ca))
832838 [updateState, tc]
833839 }
834840 else throw("Strict value is not equal to itself.")
835841 }
836842 }
837843
838844
839845
840846 @Callable(i)
841847 func compoundEnnoUsdnLP () = {
842848 let compound = value(i.payments[0])
843849 let ca = compound.amount
844850 let isOracle = checkAddress(i.caller.bytes)
845851 if ((compound.assetId != ennoUsdnLP))
846852 then throw("attach ENNOUSDNLP tokens only")
847853 else if (!(isOracle))
848854 then throw("You are not authotized to call this function")
849855 else {
850856 let fromCompound = valueOrElse(getInteger(this, keyEnnoUsdnCompound), 0)
851857 let totalStaked = valueOrElse(getInteger(this, keyENNOUSDN), 0)
852858 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
853859 if ((stakeC == stakeC))
854860 then {
855861 let updateState = IntegerEntry(keyENNOUSDN, (totalStaked + ca))
856862 let tc = IntegerEntry(keyEnnoUsdnCompound, (fromCompound + ca))
857863 [updateState, tc]
858864 }
859865 else throw("Strict value is not equal to itself.")
860866 }
861867 }
862868
863869
864870
865871 @Callable(i)
866872 func compoundWavesUsdnLP () = {
867873 let compound = value(i.payments[0])
868874 let ca = compound.amount
869875 let isOracle = checkAddress(i.caller.bytes)
870876 if ((compound.assetId != wavesUsdnLP))
871877 then throw("attach WAVESUSDNLP tokens only")
872878 else if (!(isOracle))
873879 then throw("You are not authotized to call this function")
874880 else {
875881 let fromCompound = valueOrElse(getInteger(this, keyWavesUsdnCompound), 0)
876882 let totalStaked = valueOrElse(getInteger(this, keyWAVESUSDN), 0)
877883 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
878884 if ((stakeC == stakeC))
879885 then {
880886 let updateState = IntegerEntry(keyWAVESUSDN, (totalStaked + ca))
881887 let tc = IntegerEntry(keyWavesUsdnCompound, (fromCompound + ca))
882888 [updateState, tc]
883889 }
884890 else throw("Strict value is not equal to itself.")
885891 }
886892 }
887893
888894
889895
890896 @Callable(i)
891897 func compoundLtcUsdnLP () = {
892898 let compound = value(i.payments[0])
893899 let ca = compound.amount
894900 let isOracle = checkAddress(i.caller.bytes)
895901 if ((compound.assetId != ltcUsdnLP))
896902 then throw("attach LTCUSDNLP tokens only")
897903 else if (!(isOracle))
898904 then throw("You are not authotized to call this function")
899905 else {
900906 let fromCompound = valueOrElse(getInteger(this, keyLtcUsdnCompound), 0)
901907 let totalStaked = valueOrElse(getInteger(this, keyWAVESUSDN), 0)
902908 let stakeC = invoke(Address(base58'3PPNhHYkkEy13gRWDCaruQyhNbX2GrjYSyV'), "stake", nil, [compound])
903909 if ((stakeC == stakeC))
904910 then {
905911 let updateState = IntegerEntry(keyLTCUSDN, (totalStaked + ca))
906912 let tc = IntegerEntry(keyLtcUsdnCompound, (fromCompound + ca))
907913 [updateState, tc]
908914 }
909915 else throw("Strict value is not equal to itself.")
910916 }
911917 }
912918
913919
920+
921+@Callable(i)
922+func initNSBTUSDN () = {
923+ let pm = value(i.payments[0])
924+ let am = pm.amount
925+ if ((pm.assetId != nsbtUsdnLP))
926+ then throw("Unexpected token")
927+ else {
928+ let s = invoke(Address(base58'3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz'), "stake", nil, [pm])
929+ if ((s == s))
930+ then {
931+ let upd = IntegerEntry(keyNSBTUSDN, 556149658)
932+ let updK = IntegerEntry(keyNsbtUsdnCompound, 0)
933+[upd, updK]
934+ }
935+ else throw("Strict value is not equal to itself.")
936+ }
937+ }
938+
939+
940+
941+@Callable(i)
942+func sponsorBoost () = {
943+ let pm = value(i.payments[0])
944+ let lockPeriod = 100
945+ if ((pm.assetId != wxId))
946+ then throw("Error")
947+ else {
948+ let sponsored = valueOrElse(getInteger(this, keySponsorship), 0)
949+ let lock = invoke(Address(base58'3PJL8Hn8LACaSBWLQ3UVhctA5cTQLBFwBAP'), "increaseLock", [lockPeriod], [pm])
950+ if ((lock == lock))
951+ then {
952+ let s = IntegerEntry(keySponsorship, (pm.amount + sponsored))
953+[s]
954+ }
955+ else throw("Strict value is not equal to itself.")
956+ }
957+ }
958+
959+
914960 @Verifier(tx)
915961 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
916962

github/deemru/w8io/3ef1775 
196.14 ms