tx · GovWwQwuVtCwDcw3X3AXQkfYN9495bgKL75pnnifBvC4

3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv:  -0.01800000 Waves

2024.11.25 15:54 [3386967] smart account 3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv > SELF 0.00000000 Waves

{ "type": 13, "id": "GovWwQwuVtCwDcw3X3AXQkfYN9495bgKL75pnnifBvC4", "fee": 1800000, "feeAssetId": null, "timestamp": 1732539242884, "version": 2, "chainId": 84, "sender": "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv", "senderPublicKey": "2fNSk5gmWbXBDTkSYSKd66xSgVvAYzrJnP9YSAFNvTwC", "proofs": [ "226W6kAG4dWrXQ5nBXuouHmEigdTuwTJEEJNgNsU6cLQGjHDtuctNKroCuPwrWU4rp1d5MCg3Eyjc8gwr1E5frwX" ], "script": "base64:BgIbCAISAwoBGBIDCgEIEgMKAQgSAwoBCBIDCgEIcwADU0VQAgJfXwAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEACkRBWV9CTE9DS1MEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAoAsDCQAAAgEBVAUHJG1hdGNoMAA8CQACAQINVW5rbm93biBjaGFpbgALV0VFS19CTE9DS1MEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAA4E4DCQAAAgEBVAUHJG1hdGNoMAC0AQkAAgECDVVua25vd24gY2hhaW4AClZSRl9PRkZTRVQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAAAMJAAACAQFUBQckbWF0Y2gwAJD5RQkAAgECDVVua25vd24gY2hhaW4AC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQRndZdGE4YmlFejMxenBlRmU1REpLOHdFNXRyU3BRVkY4AwkAAAIBAVQFByRtYXRjaDACIzNON1V1WWFyNjI2NFA1OEZCaFZXS1BRQWg0WXVhMmhnbmd2CQACAQINVW5rbm93biBjaGFpbgAVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUExuY1h0UzFVODNENmNRYkZEM0g4ckJIUExnenhTRktaMQMJAAACAQFUBQckbWF0Y2gwAiMzTkRDeUJHNXE4NUp1YVJpaWdVZUV0YWlueWpDUVQzWHBabQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABBJZHhDZmdBY3JlczJEYXBwAAEADUlkeENmZ1dsZ0RhcHAAAgAUSWR4Q2ZnUHV6emxlUG9vbERhcHAABAAUSWR4Q2ZnSW52ZXN0RnVuZERhcHAABQEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ9rZXlSZXN0MkFkZHJlc3MAAg0lc19fcmVzdDJBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIIcmVzdDJDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQhyZXN0MkNmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADXJlc3QyQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2tleVJlc3QyQWRkcmVzcwAFFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIACHJlc3QyQ2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQ1yZXN0MkNvbnRyYWN0AA5hY3JlczJDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRBJZHhDZmdBY3JlczJEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBQ1JZHhDZmdXbGdEYXBwABJwdXp6bGVQb29sQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUUSWR4Q2ZnUHV6emxlUG9vbERhcHAAEmludmVzdEZ1bmRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAATb2xkQWNyZXNDb250cmFjdEtleQIQb2xkQWNyZXNDb250cmFjdAEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQRhZGRyCQCsAgICE2xhc3RXZWVrVHhJZEJ5VXNlcl8FBGFkZHIBFGtleUN1cldlZWtUeElkQnlVc2VyAQRhZGRyCQCsAgICEmN1cldlZWtUeElkQnlVc2VyXwUEYWRkcgANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0AA9hY3Jlc0Fzc2V0SWRLZXkCDGFjcmVzQXNzZXRJZAAMYWNyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUOYWNyZXMyQ29udHJhY3QFD2FjcmVzQXNzZXRJZEtleQIXQUNSRVMgaXMgbm90IGlzc3VlZCB5ZXQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBGFkZHIJAKwCAgIYYWNjb3VudEN1c3RvbU5hbWVCeUFkZHJfBQRhZGRyAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBCmtleVVzZXJCZXQBBGFkZHIJAKwCAgIIdXNlckJldF8FBGFkZHIBEmtleVVzZXJXZWVrVGlja2V0cwIEYWRkcgR3ZWVrCQCsAgIJAKwCAgkArAICAhB1c2VyV2Vla1RpY2tldHNfBQRhZGRyAgFfCQCkAwEFBHdlZWsBE2tleVRvdGFsV2Vla1RpY2tldHMBBHdlZWsJAKwCAgIRdG90YWxXZWVrVGlja2V0c18JAKQDAQUEd2VlawEKd2lubmluZ0JldAEDZGF5CQBqAgkAsQkBCQEFdmFsdWUBCAkBBXZhbHVlAQkA7QcBCQBkAgkAaAIFA2RheQUKREFZX0JMT0NLUwUKVlJGX09GRlNFVAN2cmYABAEMYXNUdXBsZTRJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAhQoSW50LCBJbnQsIEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECJmZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCwgSW50LCBJbnQpAQxhc1R1cGxlM0ludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACDyhJbnQsIEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECIWZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCwgSW50KQEMYXNUdXBsZTJJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgooSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQIcZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50KQADTTZfAMCEPQADTThfAIDC1y8AClRFQU1fU0hBUkUAwJoMAA5BQ1RJVklUWV9TSEFSRQCgjQYADFBMQVlFUl9TSEFSRQCAtRgAC1lFQVJfTUlMTElTAICG68d1AAZEQVlfTVMAgLiZKQAHSVNTVUUxMACAlOvcAwAPUExBWUVSUzEwX1NIQVJFAIDqMAARTUFSS0VUSU5HMTBfU0hBUkUAoI0GAAxURUFNMTBfU0hBUkUAoI0GABFORVdfU1RBS0lOR19TVEFSVACA87jCsTIACnRlYW1BZHJLZXkCCHRlYW1BZGRyAA5sYXN0VGVhbVRpbUtleQIUbGFzdENsYWltZWRUaW1lX3RlYW0ADnRlYW1BbXRMZWZ0S2V5Ag50ZWFtQW1vdW50TGVmdAAUbGFzdEFjdGl2aXRpZXNUaW1LZXkCGmxhc3RDbGFpbWVkVGltZV9hY3Rpdml0aWVzAA1hY3RBbXRMZWZ0S2V5AhRhY3Rpdml0aWVzQW1vdW50TGVmdAARc3Rha2Vyc0FtdExlZnRLZXkCEXN0YWtlcnNBbW91bnRMZWZ0ARZrZXlMYXN0Q2xhaW1UaW1lQnlVc2VyAQRhZGRyCQCsAgICFGxhc3RDbGFpbWVkVGltZVVzZXJfBQRhZGRyAQ1kaXN0ckJ5UGVyaW9kAgxpc3N1ZWRBbW91bnQGcGVyaW9kCQBrAwUMaXNzdWVkQW1vdW50CQBoAgUMUExBWUVSX1NIQVJFCQBkAgUGcGVyaW9kAAEJAGgCAAYFA002XwARd2xnSXNzdWUxMFRpbWVLZXkCD3dsZ19pc3N1ZTEwVGltZQAOd2xnSXNzdWVUaW1LZXkCDXdsZ19pc3N1ZVRpbWUAD3dsZ0lzc3VlZEFtdEtleQIQd2xnX2lzc3VlZEFtb3VudAAOemJJc3N1ZWRBbXRLZXkCEnpiaWxsX2lzc3VlZEFtb3VudAEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBGFkZHIJAKwCAgIYYWNyZXNTdGFrZWRBbW91bnRCeVVzZXJfBQRhZGRyABJhY3Jlc1N0YWtkVG90YWxLZXkCFmFjcmVzU3Rha2VkQW1vdW50VG90YWwAFHRvdGFsRmFybWluZ1Bvd2VyS2V5AhF0b3RhbEZhcm1pbmdQb3dlcgAJZGFwcDJSZXN0AAAADGRhcHAyU3Rha2luZwABAAhkYXBwMldsZwACAAtkYXBwMlB1enpsZQADAA9kYXBwMkludmVzdEZ1bmQABAEQa2V5VXNlckZ1bGxCb251cwEEYWRkcgkArAICAg51c2VyRnVsbEJvbnVzXwUEYWRkcgAKbGV2ZWxBY3JlcwkAzAgCAAAJAMwIAgAKCQDMCAIAFAkAzAgCACgJAMwIAgBQCQDMCAIAlgEJAMwIAgD6AQkAzAgCAJADCQDMCAIAvAUJAMwIAgDoBwUDbmlsAQ9nZXRMZXZlbEJ5QWNyZXMBBWFjcmVzBANhY3IJAGkCCQBkAgUFYWNyZXMA/8HXLwUDTThfCgEHY2hlY2tlcgIDYWNjBGl0ZW0DCQBnAgUEaXRlbQUDYWNyBQNhY2MJAGQCBQNhY2MAAQoAAiRsBQpsZXZlbEFjcmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQVhY3JlcwkAaAIJAGgCBQVhY3JlcwAUCQBkAgkBD2dldExldmVsQnlBY3JlcwEFBWFjcmVzAAQBHmdldEZhcm1pbmdQb3dlckJ5QWNyZXNBbmRCb251cwIFYWNyZXMGYm9udXM2BApub3RCb251c2VkCQEWZ2V0RmFybWluZ1Bvd2VyQnlBY3JlcwEFBWFjcmVzCQCUCgIJAGsDBQpub3RCb251c2VkCQBkAgUDTTZfBQZib251czYFA002XwUKbm90Qm9udXNlZAEQZ2V0RmFybWluZ1Bvd2VycwISdXNlckFkZHJTdHJPckVtcHR5DmFjcmVzMkNvbnRyYWN0BAd0b3RhbEZQCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0BRR0b3RhbEZhcm1pbmdQb3dlcktleQAABAl1c2VyQWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFEnVzZXJBZGRyU3RyT3JFbXB0eQAABAl1c2VyQm9udXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARBrZXlVc2VyRnVsbEJvbnVzAQUSdXNlckFkZHJTdHJPckVtcHR5AAAECCR0MDc5MTE5CQEeZ2V0RmFybWluZ1Bvd2VyQnlBY3Jlc0FuZEJvbnVzAgUJdXNlckFjcmVzBQl1c2VyQm9udXMEDXVzZXJGUGJvbnVzZWQIBQgkdDA3OTExOQJfMQQQdXNlckZQbm90Qm9udXNlZAgFCCR0MDc5MTE5Al8yCQDMCAIFB3RvdGFsRlAJAMwIAgUNdXNlckZQYm9udXNlZAkAzAgCBRB1c2VyRlBub3RCb251c2VkCQDMCAIFCXVzZXJCb251cwUDbmlsAAppZHhUb3RhbEZQAAAAEGlkeFVzZXJGUGJvbnVzZWQAAQALaXhXbGdBbW91bnQAAAAIaXhXbGdXbGcAAQAKaXhXbGdQcmljZQACAAppeFdsZ0Z1bmRzAAMADWl4V2xnQWN0aXZpdHkABAALaXhXbGdBY3JlczIABQAOaXhXbGdBcmJpdHJhZ2UABgAJaXhXbGdQb29sAAcADml4V2xnSXNzdWVUaW1lAAgAFGl4V2xnTGFzdFRlYW1BY3RUaW1lAAkADml4V2xnVGVhbVRvdGFsAAoAD2l4V2xnVGVhbUFtTGVmdAALABNpeFdsZ1RlYW1BbUF2YWlsTm93AAwAD2l4V2xnVGVhbVdsZ29sZAANAA1peFdsZ0FjdFRvdGFsAA4ADml4V2xnQWN0QW1MZWZ0AA8AEml4V2xnQWN0QW1BdmFpbE5vdwAQAA5peFdsZ0FjdFdsZ29sZAARAA5peFdsZ0N1clBlcmlvZAASABBpeFdsZ0FtTGVmdFRvdGFsABMAGml4V2xnQ3VyUGVyaW9kRGlzdHJpYnV0aW9uABQAEWl4V2xnTGFzdFVzZXJUaW1lABUAFWl4V2xnSW52ZXN0RnVuZEFtb3VudAAWABNpeFdsZ1VzZXJBbUF2YWlsTm93ABcAEGl4V2xnRWZmVXNlclRpbWUAGAASaXhXbGdJc3N1ZTEwQW1vdW50ABkAG2l4V2xnTWFya2V0aW5nSXNzdWUxMEFtb3VudAAaABZpeFdsZ1RlYW1Jc3N1ZTEwQW1vdW50ABsAD2l4V2xnVXNlcjEwcGFydAAcABBpeFdsZ0lzc3VlMTBUaW1lAB0AFml4V2xnVG90YWxGYXJtaW5nUG93ZXIAHgAVaXhXbGdBY3Jlc1N0YWtlZFRvdGFsAB8BDGdldFdsZ1N0YXRzMgQLdXNlckFkZHJPcHQJY29udHJhY3RzBnVzZHRJZBV1c2R0QmFsYW5jZUNvcnJlY3Rpb24EDGlzc3VlZEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUPd2xnSXNzdWVkQW10S2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQEB3Jlc3RVc2QJAPAHAgkAkQMCBQljb250cmFjdHMFCWRhcHAyUmVzdAUGdXNkdElkBAZ3bGdVc2QJAGUCCQDwBwIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUGdXNkdElkBRV1c2R0QmFsYW5jZUNvcnJlY3Rpb24ECXB1enpsZVVzZAkA8AcCCQCRAwIFCWNvbnRyYWN0cwULZGFwcDJQdXp6bGUFBnVzZHRJZAQJYWNyZXMyVXNkCQDwBwIJAJEDAgUJY29udHJhY3RzBQxkYXBwMlN0YWtpbmcFBnVzZHRJZAQRaW52ZXN0Rm5kQ29udHJhY3QJAJEDAgUJY29udHJhY3RzBQ9kYXBwMkludmVzdEZ1bmQED2ludmVzdEZ1bmRUb3RhbAkAZAIJAPAHAgURaW52ZXN0Rm5kQ29udHJhY3QFBnVzZHRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRFpbnZlc3RGbmRDb250cmFjdAUOemJJc3N1ZWRBbXRLZXkAAAQNdG90YWxGdW5kc1VzZAkAZAIJAGQCBQlhY3JlczJVc2QFBndsZ1VzZAUPaW52ZXN0RnVuZFRvdGFsBAV3bGdJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwILd2xnX2Fzc2V0SWQCE05vdCBpbml0aWFsaXplZCB5ZXQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECWlzc3VlVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUOd2xnSXNzdWVUaW1LZXkCD05vdCBpbml0aWFsaXplZAQGd2xnV2xnCQDwBwIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUFd2xnSWQECXRlYW1Ub3RhbAkAawMFDGlzc3VlZEFtb3VudAUKVEVBTV9TSEFSRQUDTTZfBA50ZWFtQW1vdW50TGVmdAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDnRlYW1BbXRMZWZ0S2V5BQl0ZWFtVG90YWwEDGxhc3RUZWFtVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDmxhc3RUZWFtVGltS2V5BQlpc3N1ZVRpbWUECHRlYW1BZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCdCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUKdGVhbUFkcktleQQWdGVhbUFtb3VudEF2YWlsYWJsZU5vdwkAlwMBCQDMCAIJAGsDBQl0ZWFtVG90YWwJAGUCBQNub3cFDGxhc3RUZWFtVGltZQkAaAIAAwULWUVBUl9NSUxMSVMJAMwIAgUOdGVhbUFtb3VudExlZnQFA25pbAQKdGVhbVdsZ29sZAkA8AcCBQh0ZWFtQWRkcgUFd2xnSWQECGFjdFRvdGFsCQBrAwUMaXNzdWVkQW1vdW50BQ5BQ1RJVklUWV9TSEFSRQUDTTZfBA1hY3RBbW91bnRMZWZ0CQELdmFsdWVPckVsc2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUNYWN0QW10TGVmdEtleQUIYWN0VG90YWwEEmxhc3RBY3Rpdml0aWVzVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFFGxhc3RBY3Rpdml0aWVzVGltS2V5BQlpc3N1ZVRpbWUEFWFjdEFtb3VudEF2YWlsYWJsZU5vdwkAlwMBCQDMCAIJAGsDBQhhY3RUb3RhbAkAZQIFA25vdwUSbGFzdEFjdGl2aXRpZXNUaW1lCQBoAgADBQtZRUFSX01JTExJUwkAzAgCBQ1hY3RBbW91bnRMZWZ0BQNuaWwECWFjdFdsZ29sZAkA8AcCCQCRAwIFCWNvbnRyYWN0cwUJZGFwcDJSZXN0BQV3bGdJZAQMbGFzdFVzZXJUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwkBFmtleUxhc3RDbGFpbVRpbWVCeVVzZXIBBQt1c2VyQWRkck9wdAUJaXNzdWVUaW1lBA5sYXN0VXNlclBlcmlvZAkAaQIJAGUCBQxsYXN0VXNlclRpbWUFCWlzc3VlVGltZQULWUVBUl9NSUxMSVMECm5vd0xpbWl0ZWQJAJcDAQkAzAgCBQNub3cJAMwIAgkAZAIFCWlzc3VlVGltZQkAaAIAAwULWUVBUl9NSUxMSVMFA25pbAQJY3VyUGVyaW9kCQCXAwEJAMwIAgkAaQIJAGUCBQNub3cFCWlzc3VlVGltZQULWUVBUl9NSUxMSVMJAMwIAgACBQNuaWwEA2VmZgkBEGdldEZhcm1pbmdQb3dlcnMCBQt1c2VyQWRkck9wdAkAkQMCBQljb250cmFjdHMFDGRhcHAyU3Rha2luZwQVY3VyUGVyaW9kRGlzdHJpYnV0aW9uCQENZGlzdHJCeVBlcmlvZAIFDGlzc3VlZEFtb3VudAUJY3VyUGVyaW9kBA1wcmV2UGVyaW9kRW5kCQBkAgUJaXNzdWVUaW1lCQBoAgULWUVBUl9NSUxMSVMFCWN1clBlcmlvZAQRcHJldlByZXZQZXJpb2RFbmQJAGQCBQlpc3N1ZVRpbWUJAGgCBQtZRUFSX01JTExJUwkAZQIFCWN1clBlcmlvZAABBAJhMAkAawMFFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkAZQIFCm5vd0xpbWl0ZWQFDGxhc3RVc2VyVGltZQULWUVBUl9NSUxMSVMEDXVzZXJBdmFpbGFibGUDCQAAAgUObGFzdFVzZXJQZXJpb2QFCWN1clBlcmlvZAUCYTADCQAAAgUObGFzdFVzZXJQZXJpb2QJAGUCBQljdXJQZXJpb2QAAQQCYTEJAGsDCQENZGlzdHJCeVBlcmlvZAIFDGlzc3VlZEFtb3VudAkAZQIFCWN1clBlcmlvZAABCQBlAgUNcHJldlBlcmlvZEVuZAUMbGFzdFVzZXJUaW1lBQtZRUFSX01JTExJUwkAZAIFAmExBQJhMAQCYTIJAGsDCQENZGlzdHJCeVBlcmlvZAIFDGlzc3VlZEFtb3VudAkAZQIFCWN1clBlcmlvZAACCQBlAgURcHJldlByZXZQZXJpb2RFbmQFDGxhc3RVc2VyVGltZQULWUVBUl9NSUxMSVMEAmExCQENZGlzdHJCeVBlcmlvZAIFDGlzc3VlZEFtb3VudAkAZQIFCWN1clBlcmlvZAABCQBkAgkAZAIFAmEyBQJhMQUCYTAED2Ftb3VudExlZnRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFEXN0YWtlcnNBbXRMZWZ0S2V5AAAECnVzZXJBbW91bnQDCQECIT0CCQCRAwIFA2VmZgUKaWR4VG90YWxGUAAACQBrAwUNdXNlckF2YWlsYWJsZQkAkQMCBQNlZmYFEGlkeFVzZXJGUGJvbnVzZWQJAJEDAgUDZWZmBQppZHhUb3RhbEZQAAAED2xhc3RJc3N1ZTEwVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFEXdsZ0lzc3VlMTBUaW1lS2V5BRFORVdfU1RBS0lOR19TVEFSVAQNaXNzdWUxMEFtb3VudAkAawMFB0lTU1VFMTAJAJYDAQkAzAgCCQBlAgUDbm93BQ9sYXN0SXNzdWUxMFRpbWUJAMwIAgAABQNuaWwFBkRBWV9NUwQWbWFya2V0aW5nSXNzdWUxMEFtb3VudAkAawMFDWlzc3VlMTBBbW91bnQFEU1BUktFVElORzEwX1NIQVJFBQNNNl8EEXRlYW1Jc3N1ZTEwQW1vdW50CQBrAwUNaXNzdWUxMEFtb3VudAUMVEVBTTEwX1NIQVJFBQNNNl8EDnVzZXIxMEludGVydmFsCQCWAwEJAMwIAgkAZQIFA25vdwkAlgMBCQDMCAIFEU5FV19TVEFLSU5HX1NUQVJUCQDMCAIFDGxhc3RVc2VyVGltZQUDbmlsCQDMCAIAAAUDbmlsBAp1c2VyMTBwYXJ0AwkBAiE9AgkAkQMCBQNlZmYFCmlkeFRvdGFsRlAAAAkAawMJAGsDCQBrAwUHSVNTVUUxMAUOdXNlcjEwSW50ZXJ2YWwFBkRBWV9NUwkAkQMCBQNlZmYFEGlkeFVzZXJGUGJvbnVzZWQJAJEDAgUDZWZmBQppZHhUb3RhbEZQBQ9QTEFZRVJTMTBfU0hBUkUFA002XwAABA5uZXdJc3N1ZTEwVGltZQkAlgMBCQDMCAIFEU5FV19TVEFLSU5HX1NUQVJUCQDMCAIFA25vdwUDbmlsBBBhY3Jlc1N0YWtlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQxkYXBwMlN0YWtpbmcFEmFjcmVzU3Rha2RUb3RhbEtleQAACQDMCAIFDGlzc3VlZEFtb3VudAkAzAgCBQZ3bGdXbGcJAMwIAgkAawMFDXRvdGFsRnVuZHNVc2QFA004XwUMaXNzdWVkQW1vdW50CQDMCAIFDXRvdGFsRnVuZHNVc2QJAMwIAgUHcmVzdFVzZAkAzAgCBQlhY3JlczJVc2QJAMwIAgUGd2xnVXNkCQDMCAIFCXB1enpsZVVzZAkAzAgCBQlpc3N1ZVRpbWUJAMwIAgUMbGFzdFRlYW1UaW1lCQDMCAIFCXRlYW1Ub3RhbAkAzAgCBQ50ZWFtQW1vdW50TGVmdAkAzAgCBRZ0ZWFtQW1vdW50QXZhaWxhYmxlTm93CQDMCAIFCnRlYW1XbGdvbGQJAMwIAgUIYWN0VG90YWwJAMwIAgUNYWN0QW1vdW50TGVmdAkAzAgCBRVhY3RBbW91bnRBdmFpbGFibGVOb3cJAMwIAgUJYWN0V2xnb2xkCQDMCAIFCWN1clBlcmlvZAkAzAgCBQ9hbW91bnRMZWZ0VG90YWwJAMwIAgUVY3VyUGVyaW9kRGlzdHJpYnV0aW9uCQDMCAIFDGxhc3RVc2VyVGltZQkAzAgCBQ9pbnZlc3RGdW5kVG90YWwJAMwIAgUKdXNlckFtb3VudAkAzAgCBQpub3dMaW1pdGVkCQDMCAIFDWlzc3VlMTBBbW91bnQJAMwIAgUWbWFya2V0aW5nSXNzdWUxMEFtb3VudAkAzAgCBRF0ZWFtSXNzdWUxMEFtb3VudAkAzAgCBQp1c2VyMTBwYXJ0CQDMCAIFDm5ld0lzc3VlMTBUaW1lCQDMCAIJAJEDAgUDZWZmBQppZHhUb3RhbEZQCQDMCAIFEGFjcmVzU3Rha2VkVG90YWwFA25pbAEOd2FsbGV0SW50ZXJuYWwBDnVzZXJBZGRyZXNzT3B0BARhZGRyCQCmCAEFDnVzZXJBZGRyZXNzT3B0BAdiYWxhbmNlAwkBCWlzRGVmaW5lZAEFBGFkZHIJAO8HAQkBBXZhbHVlAQUEYWRkcgkBDkJhbGFuY2VEZXRhaWxzBAAAAAAAAAAABAt1c2R0QmFsYW5jZQMJAQlpc0RlZmluZWQBBQRhZGRyCQDwBwIJAQV2YWx1ZQEFBGFkZHIFC3VzZHRBc3NldElkAAAEDXdsZ29sZEJhbGFuY2UDCQEJaXNEZWZpbmVkAQUEYWRkcgkA8AcCCQEFdmFsdWUBBQRhZGRyBQp3bGdBc3NldElkAAAECmN1c3RvbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUOdXNlckFkZHJlc3NPcHQFDnVzZXJBZGRyZXNzT3B0BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFDnVzZXJBZGRyZXNzT3B0BAVyZWZCeQkAnQgCBQ5hY3JlczJDb250cmFjdAUIcmVmQnlLZXkEBHJlZnMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUOdXNlckFkZHJlc3NPcHQCAAQIbGFzdFR4SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQ51c2VyQWRkcmVzc09wdAIABAdjdXJUeElkCQELdmFsdWVPckVsc2UCCQCdCAIFDmFjcmVzMkNvbnRyYWN0CQEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBQ51c2VyQWRkcmVzc09wdAIABAxhY3Jlc0JhbGFuY2UDCQEJaXNEZWZpbmVkAQUEYWRkcgkA8AcCCQEFdmFsdWUBBQRhZGRyBQxhY3Jlc0Fzc2V0SWQAAAQLc3Rha2VkQWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFDnVzZXJBZGRyZXNzT3B0AAAEA2x2bAkBD2dldExldmVsQnlBY3JlcwEFC3N0YWtlZEFjcmVzBAJmcAkBEGdldEZhcm1pbmdQb3dlcnMCBQ51c2VyQWRkcmVzc09wdAUOYWNyZXMyQ29udHJhY3QEDmFjcmVzVG9OZXh0THZsAwkAZwIFA2x2bAkAkAMBBQpsZXZlbEFjcmVzAAAJAGUCCQBkAgkAaAIJAJEDAgUKbGV2ZWxBY3JlcwUDbHZsBQNNOF8AAQULc3Rha2VkQWNyZXMJAMwIAgkArAICAhIlcyVzX19jdXN0b21OYW1lX18FCmN1c3RvbU5hbWUJAMwIAgkArAICAhIlcyVzX19yZWZlcnJlZEJ5X18JAQt2YWx1ZU9yRWxzZQIFBXJlZkJ5AgAJAMwIAgkArAICAhElcyVzX19yZWZlcnJhbHNfXwUEcmVmcwkAzAgCCQCsAgICFCVzJXNfX2xhc3RXZWVrVHhJZF9fBQhsYXN0VHhJZAkAzAgCCQCsAgICEyVzJXNfX2N1cldlZWtUeElkX18FCGxhc3RUeElkCQDMCAIJAKwCAgIUJXMlZF9fd2F2ZXNCYWxhbmNlX18JAKQDAQgFB2JhbGFuY2UJYXZhaWxhYmxlCQDMCAIJAKwCAgITJXMlZF9fdXNkdEJhbGFuY2VfXwkApAMBBQt1c2R0QmFsYW5jZQkAzAgCCQCsAgICFSVzJWRfX3dsZ29sZEJhbGFuY2VfXwkApAMBBQ13bGdvbGRCYWxhbmNlCQDMCAIJAKwCAgIUJXMlZF9fYWNyZXNCYWxhbmNlX18JAKQDAQUMYWNyZXNCYWxhbmNlCQDMCAIJAKwCAgITJXMlZF9fc3Rha2VkQWNyZXNfXwkApAMBBQtzdGFrZWRBY3JlcwkAzAgCCQCsAgICEiVzJWRfX2N1cnJlbnRMdmxfXwkApAMBBQNsdmwJAMwIAgkArAICAhYlcyVkX19hY3Jlc1RvTmV4dEx2bF9fCQCkAwEFDmFjcmVzVG9OZXh0THZsCQDMCAIJAKwCAgIYJXMlZF9fdXNlckZhcm1pbmdQb3dlcl9fCQCkAwEJAJEDAgUCZnAFEGlkeFVzZXJGUGJvbnVzZWQJAMwIAgkArAICAhklcyVkX190b3RhbEZhcm1pbmdQb3dlcl9fCQCkAwEJAJEDAgUCZnAFCmlkeFRvdGFsRlAFA25pbAUBaQENY29uc3RydWN0b3JWMQEJY29udHJhY3RzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCgEKZGVzY3JpcHRvcgIDYWNjC2lnbm9yZWRJdGVtCQCsAgIFA2FjYwICJXMEBWRlc2NyCgACJGwFCWNvbnRyYWN0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZGVzY3JpcHRvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5UmVzdENmZwAJALkJAgkAzAgCBQVkZXNjcgUJY29udHJhY3RzBQNTRVAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVJlc3QyQWRkcmVzcwAJAKUIAQUEdGhpcwUDbmlsAWkBEndhbGxldEluZm9SRUFET05MWQEOdXNlckFkZHJlc3NPcHQJAJQKAgUDbmlsCQEOd2FsbGV0SW50ZXJuYWwBBQ51c2VyQWRkcmVzc09wdAFpARZjb252ZXJzaW9uSW5mb1JFQURPTkxZAQ51c2VyQWRkcmVzc09wdAQPb2xkQWNyZXNBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQ5hY3JlczJDb250cmFjdAUTb2xkQWNyZXNDb250cmFjdEtleQQLJHQwNDY5NTQ4MTcJAQxhc1R1cGxlMkludHMBCQD8BwQFD29sZEFjcmVzQWRkcmVzcwIXdW5zdGFrZUFsbEFjcmVzUkVBRE9OTFkJAMwIAgUOdXNlckFkZHJlc3NPcHQFA25pbAUDbmlsBA11bnN0YWtlZEFjcmVzCAULJHQwNDY5NTQ4MTcCXzEEDGNsYWltZWRBY3JlcwgFCyR0MDQ2OTU0ODE3Al8yBAskdDA0ODIwNDk2OQkBDGFzVHVwbGU0SW50cwEJAPwHBAUOYWNyZXMyQ29udHJhY3QCFHVuc3Rha2VMYW5kc1JFQURPTkxZCQDMCAIFDnVzZXJBZGRyZXNzT3B0BQNuaWwFA25pbAQPYWNyZXNGcm9tUGllY2VzCAULJHQwNDgyMDQ5NjkCXzEEDGFjcmVzRnJvbVJlcwgFCyR0MDQ4MjA0OTY5Al8yBAxhY3Jlc0Zyb21NYXQIBQskdDA0ODIwNDk2OQJfMwQNYWNyZXNGcm9tUHJvZAgFCyR0MDQ4MjA0OTY5Al80BBFvbGRTdGFraW5nQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAtkdWNrQXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBRFvbGRTdGFraW5nQWRkcmVzcwkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUOdXNlckFkZHJlc3NPcHQCAAQLJHQwNTE0NzUzNjkDCQECIT0CBQtkdWNrQXNzZXRJZAIACQEMYXNUdXBsZTNJbnRzAQkA/AcEBRFvbGRTdGFraW5nQWRkcmVzcwITdW5zdGFrZUR1Y2tSRUFET05MWQkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQ51c2VyQWRkcmVzc09wdAUDbmlsBQNuaWwJAJUKAwAAAAAAAAQQYWNyZXNGcm9tRHVja1JlcwgFCyR0MDUxNDc1MzY5Al8xBBBhY3Jlc0Zyb21EdWNrTWF0CAULJHQwNTE0NzUzNjkCXzIEEWFjcmVzRnJvbUR1Y2tQcm9kCAULJHQwNTE0NzUzNjkCXzMJAJQKAgUDbmlsCQDMCAIJAKwCAgIVJXMlZF9fdW5zdGFrZWRBY3Jlc19fCQCkAwEFDXVuc3Rha2VkQWNyZXMJAMwIAgkArAICAhQlcyVkX19jbGFpbWVkQWNyZXNfXwkApAMBBQxjbGFpbWVkQWNyZXMJAMwIAgkArAICAhclcyVkX19hY3Jlc0Zyb21QaWVjZXNfXwkApAMBBQ9hY3Jlc0Zyb21QaWVjZXMJAMwIAgkArAICAhQlcyVkX19hY3Jlc0Zyb21SZXNfXwkApAMBBQxhY3Jlc0Zyb21SZXMJAMwIAgkArAICAhQlcyVkX19hY3Jlc0Zyb21NYXRfXwkApAMBBQxhY3Jlc0Zyb21NYXQJAMwIAgkArAICAhUlcyVkX19hY3Jlc0Zyb21Qcm9kX18JAKQDAQUNYWNyZXNGcm9tUHJvZAkAzAgCCQCsAgICGCVzJWRfX2FjcmVzRnJvbUR1Y2tSZXNfXwkApAMBBRBhY3Jlc0Zyb21EdWNrUmVzCQDMCAIJAKwCAgIYJXMlZF9fYWNyZXNGcm9tRHVja01hdF9fCQCkAwEFEGFjcmVzRnJvbUR1Y2tNYXQJAMwIAgkArAICAhklcyVkX19hY3Jlc0Zyb21EdWNrUHJvZF9fCQCkAwEFEWFjcmVzRnJvbUR1Y2tQcm9kBQNuaWwBaQEQd2xnU3RhdHNSRUFET05MWQELdXNlckFkZHJPcHQECGN1clN0YXRzCQEMZ2V0V2xnU3RhdHMyBAULdXNlckFkZHJPcHQJAMwIAgUNcmVzdDJDb250cmFjdAkAzAgCBQ5hY3JlczJDb250cmFjdAkAzAgCBQt3bGdDb250cmFjdAkAzAgCBRJwdXp6bGVQb29sQ29udHJhY3QJAMwIAgUSaW52ZXN0RnVuZENvbnRyYWN0BQNuaWwFC3VzZHRBc3NldElkAAAJAJQKAgUDbmlsCQDMCAIJAKwCAgIRJXMlZF9fd2xnQW1vdW50X18JAKQDAQkAkQMCBQhjdXJTdGF0cwULaXhXbGdBbW91bnQJAMwIAgkArAICAg4lcyVkX193bGdXbGdfXwkApAMBCQCRAwIFCGN1clN0YXRzBQhpeFdsZ1dsZwkAzAgCCQCsAgICECVzJWRfX3dsZ1ByaWNlX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUKaXhXbGdQcmljZQkAzAgCCQCsAgICESVzJWRfX3VzZHRGdW5kc19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFCml4V2xnRnVuZHMJAMwIAgkArAICAhQlcyVkX191c2R0QWN0aXZpdHlfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ1peFdsZ0FjdGl2aXR5CQDMCAIJAKwCAgITJXMlZF9fdXNkdFN0YWtpbmdfXwkApAMBCQCRAwIFCGN1clN0YXRzBQtpeFdsZ0FjcmVzMgkAzAgCCQCsAgICFSVzJWRfX3VzZHRBcmJpdHJhZ2VfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FyYml0cmFnZQkAzAgCCQCsAgICECVzJWRfX3VzZHRQb29sX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUJaXhXbGdQb29sCQDMCAIJAKwCAgIUJXMlZF9fd2xnSXNzdWVUaW1lX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUOaXhXbGdJc3N1ZVRpbWUJAMwIAgkArAICAholcyVkX193bGdMYXN0VGVhbUFjdFRpbWVfXwkApAMBCQCRAwIFCGN1clN0YXRzBRRpeFdsZ0xhc3RUZWFtQWN0VGltZQkAzAgCCQCsAgICFCVzJWRfX3dsZ1RlYW1Ub3RhbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDml4V2xnVGVhbVRvdGFsCQDMCAIJAKwCAgIVJXMlZF9fd2xnVGVhbUFtTGVmdF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFD2l4V2xnVGVhbUFtTGVmdAkAzAgCCQCsAgICGSVzJWRfX3dsZ1RlYW1BbUF2YWlsTm93X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUTaXhXbGdUZWFtQW1BdmFpbE5vdwkAzAgCCQCsAgICFSVzJWRfX3dsZ1RlYW1XbGdvbGRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ9peFdsZ1RlYW1XbGdvbGQJAMwIAgkArAICAhMlcyVkX193bGdBY3RUb3RhbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDWl4V2xnQWN0VG90YWwJAMwIAgkArAICAhQlcyVkX193bGdBY3RBbUxlZnRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FjdEFtTGVmdAkAzAgCCQCsAgICGCVzJWRfX3dsZ0FjdEFtQXZhaWxOb3dfXwkApAMBCQCRAwIFCGN1clN0YXRzBRJpeFdsZ0FjdEFtQXZhaWxOb3cJAMwIAgkArAICAhQlcyVkX193bGdBY3RXbGdvbGRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FjdFdsZ29sZAkAzAgCCQCsAgICFCVzJWRfX3dsZ0N1clBlcmlvZF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDml4V2xnQ3VyUGVyaW9kCQDMCAIJAKwCAgIWJXMlZF9fd2xnQW1MZWZ0VG90YWxfXwkApAMBCQCRAwIFCGN1clN0YXRzBRBpeFdsZ0FtTGVmdFRvdGFsCQDMCAIJAKwCAgIgJXMlZF9fd2xnQ3VyUGVyaW9kRGlzdHJpYnV0aW9uX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUaaXhXbGdDdXJQZXJpb2REaXN0cmlidXRpb24JAMwIAgkArAICAhclcyVkX193bGdMYXN0VXNlclRpbWVfXwkApAMBCQCRAwIFCGN1clN0YXRzBRFpeFdsZ0xhc3RVc2VyVGltZQkAzAgCCQCsAgICGiVzJWRfX3dsZ0ludmVzdEZ1bmRUb3RhbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFFWl4V2xnSW52ZXN0RnVuZEFtb3VudAkAzAgCCQCsAgICGSVzJWRfX3dsZ1VzZXJBbUF2YWlsTm93X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUTaXhXbGdVc2VyQW1BdmFpbE5vdwkAzAgCCQCsAgICFiVzJWRfX3dsZ0VmZlVzZXJUaW1lX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUQaXhXbGdFZmZVc2VyVGltZQkAzAgCCQCsAgICGiVzJWRfX3dsZ0lzc3VlMTBBdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFEml4V2xnSXNzdWUxMEFtb3VudAkAzAgCCQCsAgICIyVzJWRfX3dsZ01hcmtldGluZ0lzc3VlMTBBdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFG2l4V2xnTWFya2V0aW5nSXNzdWUxMEFtb3VudAkAzAgCCQCsAgICHiVzJWRfX3dsZ1RlYW1Jc3N1ZTEwQXZhaWxOb3dfXwkApAMBCQCRAwIFCGN1clN0YXRzBRZpeFdsZ1RlYW1Jc3N1ZTEwQW1vdW50CQDMCAIJAKwCAgIeJXMlZF9fd2xnVXNlcklzc3VlMTBBdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFD2l4V2xnVXNlcjEwcGFydAkAzAgCCQCsAgICGiVzJWRfX3dsZ0xhc3RJc3N1ZTEwVGltZV9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFEGl4V2xnSXNzdWUxMFRpbWUJAMwIAgkArAICAhwlcyVkX193bGdUb3RhbEZhcm1pbmdQb3dlcl9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFFml4V2xnVG90YWxGYXJtaW5nUG93ZXIJAMwIAgkArAICAhslcyVkX193bGdBY3Jlc1N0YWtlZFRvdGFsX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUVaXhXbGdBY3Jlc1N0YWtlZFRvdGFsBQNuaWwBaQEUbG90dGVyeVN0YXRzUkVBRE9OTFkBC3VzZXJBZGRyT3B0BAV0b2RheQkAaQIFBmhlaWdodAUKREFZX0JMT0NLUwQEd2VlawkAaQIFBmhlaWdodAULV0VFS19CTE9DS1MECGxhc3RXZWVrCQBlAgUEd2VlawABBA5jdXJXZWVrVGlja2V0cwkBC3ZhbHVlT3JFbHNlAgkAmggCBQt3bGdDb250cmFjdAkBEmtleVVzZXJXZWVrVGlja2V0cwIFC3VzZXJBZGRyT3B0BQR3ZWVrAAAED2xhc3RXZWVrVGlja2V0cwkBC3ZhbHVlT3JFbHNlAgkAmggCBQt3bGdDb250cmFjdAkBEmtleVVzZXJXZWVrVGlja2V0cwIFC3VzZXJBZGRyT3B0BQhsYXN0V2VlawAABBNjdXJXZWVrVG90YWxUaWNrZXRzCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQETa2V5VG90YWxXZWVrVGlja2V0cwEFBHdlZWsAAAQUbGFzdFdlZWtUb3RhbFRpY2tldHMJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARNrZXlUb3RhbFdlZWtUaWNrZXRzAQUIbGFzdFdlZWsAAAQIdXNlcnNCZXQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgULd2xnQ29udHJhY3QJAQprZXlVc2VyQmV0AQULdXNlckFkZHJPcHQCAAkAlAoCBQNuaWwJAMwIAgkArAICCQCsAgIJAKwCAgIWJXMlZCVkX190b3RhbFRpY2tldHNfXwkApAMBBRRsYXN0V2Vla1RvdGFsVGlja2V0cwUDU0VQCQCkAwEFE2N1cldlZWtUb3RhbFRpY2tldHMJAMwIAgkArAICCQCsAgIJAKwCAgIVJXMlZCVkX191c2VyVGlja2V0c19fCQCkAwEFD2xhc3RXZWVrVGlja2V0cwUDU0VQCQCkAwEFDmN1cldlZWtUaWNrZXRzCQDMCAIJAKwCAgIWJXMlZF9fYmxvY2tjaGFpbldlZWtfXwkApAMBBQR3ZWVrCQDMCAIJAKwCAgIVJXMlZF9fYmxvY2tjaGFpbkRheV9fCQCkAwEFBXRvZGF5CQDMCAIJAKwCAgIYJXMlZF9fYmxvY2tjaGFpbk1pbnV0ZV9fCQCkAwEJAGoCBQZoZWlnaHQFCkRBWV9CTE9DS1MJAMwIAgkArAICAhclcyVkX193aW5uaW5nQmV0VG9kYXlfXwkApAMBCQEKd2lubmluZ0JldAEFBXRvZGF5CQDMCAIJAKwCAgIQJXMlc19fdXNlcnNCZXRfXwUIdXNlcnNCZXQFA25pbAD2RjMq", "height": 3386967, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FDnMCRWyZePgfpPFvSBZkWsgkxV8tgimVc9YqnuNCzfZ Next: 9jaF9N5DF3y3uosa7EGQZq4bjCL1uJX25fE82VQJrEoN Diff:
OldNewDifferences
2020 then 10080
2121 else if ((base58'2T' == $match0))
2222 then 180
23+ else throw("Unknown chain")
24+}
25+
26+let VRF_OFFSET = match chain {
27+ case _ =>
28+ if ((base58'2W' == $match0))
29+ then 0
30+ else if ((base58'2T' == $match0))
31+ then 1146000
2332 else throw("Unknown chain")
2433 }
2534
122131 func keyTotalWeekTickets (week) = ("totalWeekTickets_" + toString(week))
123132
124133
125-func winningBet (day) = (toInt(value(value(blockInfoByHeight((day * DAY_BLOCKS))).vrf)) % 4)
134+func winningBet (day) = (toInt(value(value(blockInfoByHeight(((day * DAY_BLOCKS) + VRF_OFFSET))).vrf)) % 4)
126135
127136
128137 func asTuple4Ints (val) = match val {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let chain = take(drop(this.bytes, 1), 1)
77
88 let DAY_BLOCKS = match chain {
99 case _ =>
1010 if ((base58'2W' == $match0))
1111 then 1440
1212 else if ((base58'2T' == $match0))
1313 then 60
1414 else throw("Unknown chain")
1515 }
1616
1717 let WEEK_BLOCKS = match chain {
1818 case _ =>
1919 if ((base58'2W' == $match0))
2020 then 10080
2121 else if ((base58'2T' == $match0))
2222 then 180
23+ else throw("Unknown chain")
24+}
25+
26+let VRF_OFFSET = match chain {
27+ case _ =>
28+ if ((base58'2W' == $match0))
29+ then 0
30+ else if ((base58'2T' == $match0))
31+ then 1146000
2332 else throw("Unknown chain")
2433 }
2534
2635 let usdtAssetId = match chain {
2736 case _ =>
2837 if ((base58'2W' == $match0))
2938 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
3039 else if ((base58'2T' == $match0))
3140 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
3241 else throw("Unknown chain")
3342 }
3443
3544 let defaultRest2AddressStr = match chain {
3645 case _ =>
3746 if ((base58'2W' == $match0))
3847 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
3948 else if ((base58'2T' == $match0))
4049 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
4150 else throw("Unknown chain")
4251 }
4352
4453 let oldStakingContractStr = match chain {
4554 case _ =>
4655 if ((base58'2W' == $match0))
4756 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
4857 else if ((base58'2T' == $match0))
4958 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
5059 else throw("Unknown chain")
5160 }
5261
5362 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
5463
5564
5665 let IdxCfgAcres2Dapp = 1
5766
5867 let IdxCfgWlgDapp = 2
5968
6069 let IdxCfgPuzzlePoolDapp = 4
6170
6271 let IdxCfgInvestFundDapp = 5
6372
6473 func keyRestCfg () = "%s__restConfig"
6574
6675
6776 func keyRest2Address () = "%s__rest2Addr"
6877
6978
7079 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
7180
7281
7382 func getContractAddressOrFail (rest2Cfg,idx) = valueOrErrorMessage(addressFromString(rest2Cfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
7483
7584
7685 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
7786
7887 let rest2Cfg = readRestCfgOrFail(rest2Contract)
7988
8089 let acres2Contract = getContractAddressOrFail(rest2Cfg, IdxCfgAcres2Dapp)
8190
8291 let wlgContract = getContractAddressOrFail(rest2Cfg, IdxCfgWlgDapp)
8392
8493 let puzzlePoolContract = getContractAddressOrFail(rest2Cfg, IdxCfgPuzzlePoolDapp)
8594
8695 let investFundContract = getContractAddressOrFail(rest2Cfg, IdxCfgInvestFundDapp)
8796
8897 let oldAcresContractKey = "oldAcresContract"
8998
9099 func keyLastWeekTxIdByUser (addr) = ("lastWeekTxIdByUser_" + addr)
91100
92101
93102 func keyCurWeekTxIdByUser (addr) = ("curWeekTxIdByUser_" + addr)
94103
95104
96105 let wlgAssetIdKey = "wlg_assetId"
97106
98107 let wlgAssetId = valueOrErrorMessage(getBinary(wlgContract, wlgAssetIdKey), "WLGOLD is not issued yet")
99108
100109 let acresAssetIdKey = "acresAssetId"
101110
102111 let acresAssetId = valueOrErrorMessage(getBinary(acres2Contract, acresAssetIdKey), "ACRES is not issued yet")
103112
104113 func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
105114
106115
107116 func keyAddressToCustomName (addr) = ("accountCustomNameByAddr_" + addr)
108117
109118
110119 func keyAddressRefBy (addr) = ("accRefBy_" + addr)
111120
112121
113122 func keyAddressReferrals (addr) = ("accReferrals_" + addr)
114123
115124
116125 func keyUserBet (addr) = ("userBet_" + addr)
117126
118127
119128 func keyUserWeekTickets (addr,week) = ((("userWeekTickets_" + addr) + "_") + toString(week))
120129
121130
122131 func keyTotalWeekTickets (week) = ("totalWeekTickets_" + toString(week))
123132
124133
125-func winningBet (day) = (toInt(value(value(blockInfoByHeight((day * DAY_BLOCKS))).vrf)) % 4)
134+func winningBet (day) = (toInt(value(value(blockInfoByHeight(((day * DAY_BLOCKS) + VRF_OFFSET))).vrf)) % 4)
126135
127136
128137 func asTuple4Ints (val) = match val {
129138 case t: (Int, Int, Int, Int) =>
130139 t
131140 case _ =>
132141 throw("fail to cast into (Int, Int, Int, Int)")
133142 }
134143
135144
136145 func asTuple3Ints (val) = match val {
137146 case t: (Int, Int, Int) =>
138147 t
139148 case _ =>
140149 throw("fail to cast into (Int, Int, Int)")
141150 }
142151
143152
144153 func asTuple2Ints (val) = match val {
145154 case t: (Int, Int) =>
146155 t
147156 case _ =>
148157 throw("fail to cast into (Int, Int)")
149158 }
150159
151160
152161 let M6_ = 1000000
153162
154163 let M8_ = 100000000
155164
156165 let TEAM_SHARE = 200000
157166
158167 let ACTIVITY_SHARE = 100000
159168
160169 let PLAYER_SHARE = 400000
161170
162171 let YEAR_MILLIS = 31557600000
163172
164173 let DAY_MS = 86400000
165174
166175 let ISSUE10 = 1000000000
167176
168177 let PLAYERS10_SHARE = 800000
169178
170179 let MARKETING10_SHARE = 100000
171180
172181 let TEAM10_SHARE = 100000
173182
174183 let NEW_STAKING_START = 1731279600000
175184
176185 let teamAdrKey = "teamAddr"
177186
178187 let lastTeamTimKey = "lastClaimedTime_team"
179188
180189 let teamAmtLeftKey = "teamAmountLeft"
181190
182191 let lastActivitiesTimKey = "lastClaimedTime_activities"
183192
184193 let actAmtLeftKey = "activitiesAmountLeft"
185194
186195 let stakersAmtLeftKey = "stakersAmountLeft"
187196
188197 func keyLastClaimTimeByUser (addr) = ("lastClaimedTimeUser_" + addr)
189198
190199
191200 func distrByPeriod (issuedAmount,period) = fraction(issuedAmount, (PLAYER_SHARE * (period + 1)), (6 * M6_))
192201
193202
194203 let wlgIssue10TimeKey = "wlg_issue10Time"
195204
196205 let wlgIssueTimKey = "wlg_issueTime"
197206
198207 let wlgIssuedAmtKey = "wlg_issuedAmount"
199208
200209 let zbIssuedAmtKey = "zbill_issuedAmount"
201210
202211 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
203212
204213
205214 let acresStakdTotalKey = "acresStakedAmountTotal"
206215
207216 let totalFarmingPowerKey = "totalFarmingPower"
208217
209218 let dapp2Rest = 0
210219
211220 let dapp2Staking = 1
212221
213222 let dapp2Wlg = 2
214223
215224 let dapp2Puzzle = 3
216225
217226 let dapp2InvestFund = 4
218227
219228 func keyUserFullBonus (addr) = ("userFullBonus_" + addr)
220229
221230
222231 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
223232
224233 func getLevelByAcres (acres) = {
225234 let acr = ((acres + 99999999) / M8_)
226235 func checker (acc,item) = if ((item >= acr))
227236 then acc
228237 else (acc + 1)
229238
230239 let $l = levelAcres
231240 let $s = size($l)
232241 let $acc0 = 0
233242 func $f0_1 ($a,$i) = if (($i >= $s))
234243 then $a
235244 else checker($a, $l[$i])
236245
237246 func $f0_2 ($a,$i) = if (($i >= $s))
238247 then $a
239248 else throw("List size exceeds 10")
240249
241250 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
242251 }
243252
244253
245254 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
246255
247256
248257 func getFarmingPowerByAcresAndBonus (acres,bonus6) = {
249258 let notBonused = getFarmingPowerByAcres(acres)
250259 $Tuple2(fraction(notBonused, (M6_ + bonus6), M6_), notBonused)
251260 }
252261
253262
254263 func getFarmingPowers (userAddrStrOrEmpty,acres2Contract) = {
255264 let totalFP = valueOrElse(getInteger(acres2Contract, totalFarmingPowerKey), 0)
256265 let userAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddrStrOrEmpty)), 0)
257266 let userBonus = valueOrElse(getInteger(acres2Contract, keyUserFullBonus(userAddrStrOrEmpty)), 0)
258267 let $t079119 = getFarmingPowerByAcresAndBonus(userAcres, userBonus)
259268 let userFPbonused = $t079119._1
260269 let userFPnotBonused = $t079119._2
261270 [totalFP, userFPbonused, userFPnotBonused, userBonus]
262271 }
263272
264273
265274 let idxTotalFP = 0
266275
267276 let idxUserFPbonused = 1
268277
269278 let ixWlgAmount = 0
270279
271280 let ixWlgWlg = 1
272281
273282 let ixWlgPrice = 2
274283
275284 let ixWlgFunds = 3
276285
277286 let ixWlgActivity = 4
278287
279288 let ixWlgAcres2 = 5
280289
281290 let ixWlgArbitrage = 6
282291
283292 let ixWlgPool = 7
284293
285294 let ixWlgIssueTime = 8
286295
287296 let ixWlgLastTeamActTime = 9
288297
289298 let ixWlgTeamTotal = 10
290299
291300 let ixWlgTeamAmLeft = 11
292301
293302 let ixWlgTeamAmAvailNow = 12
294303
295304 let ixWlgTeamWlgold = 13
296305
297306 let ixWlgActTotal = 14
298307
299308 let ixWlgActAmLeft = 15
300309
301310 let ixWlgActAmAvailNow = 16
302311
303312 let ixWlgActWlgold = 17
304313
305314 let ixWlgCurPeriod = 18
306315
307316 let ixWlgAmLeftTotal = 19
308317
309318 let ixWlgCurPeriodDistribution = 20
310319
311320 let ixWlgLastUserTime = 21
312321
313322 let ixWlgInvestFundAmount = 22
314323
315324 let ixWlgUserAmAvailNow = 23
316325
317326 let ixWlgEffUserTime = 24
318327
319328 let ixWlgIssue10Amount = 25
320329
321330 let ixWlgMarketingIssue10Amount = 26
322331
323332 let ixWlgTeamIssue10Amount = 27
324333
325334 let ixWlgUser10part = 28
326335
327336 let ixWlgIssue10Time = 29
328337
329338 let ixWlgTotalFarmingPower = 30
330339
331340 let ixWlgAcresStakedTotal = 31
332341
333342 func getWlgStats2 (userAddrOpt,contracts,usdtId,usdtBalanceCorrection) = {
334343 let issuedAmount = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssuedAmtKey), "WLGOLD is not issued yet")
335344 let restUsd = assetBalance(contracts[dapp2Rest], usdtId)
336345 let wlgUsd = (assetBalance(contracts[dapp2Wlg], usdtId) - usdtBalanceCorrection)
337346 let puzzleUsd = assetBalance(contracts[dapp2Puzzle], usdtId)
338347 let acres2Usd = assetBalance(contracts[dapp2Staking], usdtId)
339348 let investFndContract = contracts[dapp2InvestFund]
340349 let investFundTotal = (assetBalance(investFndContract, usdtId) + valueOrElse(getInteger(investFndContract, zbIssuedAmtKey), 0))
341350 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
342351 let wlgId = valueOrErrorMessage(getBinary(contracts[dapp2Wlg], "wlg_assetId"), "Not initialized yet")
343352 let now = lastBlock.timestamp
344353 let issueTime = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssueTimKey), "Not initialized")
345354 let wlgWlg = assetBalance(contracts[dapp2Wlg], wlgId)
346355 let teamTotal = fraction(issuedAmount, TEAM_SHARE, M6_)
347356 let teamAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], teamAmtLeftKey), teamTotal)
348357 let lastTeamTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastTeamTimKey), issueTime)
349358 let teamAddr = addressFromStringValue(value(getString(contracts[dapp2Wlg], teamAdrKey)))
350359 let teamAmountAvailableNow = min([fraction(teamTotal, (now - lastTeamTime), (3 * YEAR_MILLIS)), teamAmountLeft])
351360 let teamWlgold = assetBalance(teamAddr, wlgId)
352361 let actTotal = fraction(issuedAmount, ACTIVITY_SHARE, M6_)
353362 let actAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], actAmtLeftKey), actTotal)
354363 let lastActivitiesTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastActivitiesTimKey), issueTime)
355364 let actAmountAvailableNow = min([fraction(actTotal, (now - lastActivitiesTime), (3 * YEAR_MILLIS)), actAmountLeft])
356365 let actWlgold = assetBalance(contracts[dapp2Rest], wlgId)
357366 let lastUserTime = valueOrElse(getInteger(contracts[dapp2Wlg], keyLastClaimTimeByUser(userAddrOpt)), issueTime)
358367 let lastUserPeriod = ((lastUserTime - issueTime) / YEAR_MILLIS)
359368 let nowLimited = min([now, (issueTime + (3 * YEAR_MILLIS))])
360369 let curPeriod = min([((now - issueTime) / YEAR_MILLIS), 2])
361370 let eff = getFarmingPowers(userAddrOpt, contracts[dapp2Staking])
362371 let curPeriodDistribution = distrByPeriod(issuedAmount, curPeriod)
363372 let prevPeriodEnd = (issueTime + (YEAR_MILLIS * curPeriod))
364373 let prevPrevPeriodEnd = (issueTime + (YEAR_MILLIS * (curPeriod - 1)))
365374 let a0 = fraction(curPeriodDistribution, (nowLimited - lastUserTime), YEAR_MILLIS)
366375 let userAvailable = if ((lastUserPeriod == curPeriod))
367376 then a0
368377 else if ((lastUserPeriod == (curPeriod - 1)))
369378 then {
370379 let a1 = fraction(distrByPeriod(issuedAmount, (curPeriod - 1)), (prevPeriodEnd - lastUserTime), YEAR_MILLIS)
371380 (a1 + a0)
372381 }
373382 else {
374383 let a2 = fraction(distrByPeriod(issuedAmount, (curPeriod - 2)), (prevPrevPeriodEnd - lastUserTime), YEAR_MILLIS)
375384 let a1 = distrByPeriod(issuedAmount, (curPeriod - 1))
376385 ((a2 + a1) + a0)
377386 }
378387 let amountLeftTotal = valueOrElse(getInteger(contracts[dapp2Wlg], stakersAmtLeftKey), 0)
379388 let userAmount = if ((eff[idxTotalFP] != 0))
380389 then fraction(userAvailable, eff[idxUserFPbonused], eff[idxTotalFP])
381390 else 0
382391 let lastIssue10Time = valueOrElse(getInteger(contracts[dapp2Wlg], wlgIssue10TimeKey), NEW_STAKING_START)
383392 let issue10Amount = fraction(ISSUE10, max([(now - lastIssue10Time), 0]), DAY_MS)
384393 let marketingIssue10Amount = fraction(issue10Amount, MARKETING10_SHARE, M6_)
385394 let teamIssue10Amount = fraction(issue10Amount, TEAM10_SHARE, M6_)
386395 let user10Interval = max([(now - max([NEW_STAKING_START, lastUserTime])), 0])
387396 let user10part = if ((eff[idxTotalFP] != 0))
388397 then fraction(fraction(fraction(ISSUE10, user10Interval, DAY_MS), eff[idxUserFPbonused], eff[idxTotalFP]), PLAYERS10_SHARE, M6_)
389398 else 0
390399 let newIssue10Time = max([NEW_STAKING_START, now])
391400 let acresStakedTotal = valueOrElse(getInteger(contracts[dapp2Staking], acresStakdTotalKey), 0)
392401 [issuedAmount, wlgWlg, fraction(totalFundsUsd, M8_, issuedAmount), totalFundsUsd, restUsd, acres2Usd, wlgUsd, puzzleUsd, issueTime, lastTeamTime, teamTotal, teamAmountLeft, teamAmountAvailableNow, teamWlgold, actTotal, actAmountLeft, actAmountAvailableNow, actWlgold, curPeriod, amountLeftTotal, curPeriodDistribution, lastUserTime, investFundTotal, userAmount, nowLimited, issue10Amount, marketingIssue10Amount, teamIssue10Amount, user10part, newIssue10Time, eff[idxTotalFP], acresStakedTotal]
393402 }
394403
395404
396405 func walletInternal (userAddressOpt) = {
397406 let addr = addressFromString(userAddressOpt)
398407 let balance = if (isDefined(addr))
399408 then wavesBalance(value(addr))
400409 else BalanceDetails(0, 0, 0, 0)
401410 let usdtBalance = if (isDefined(addr))
402411 then assetBalance(value(addr), usdtAssetId)
403412 else 0
404413 let wlgoldBalance = if (isDefined(addr))
405414 then assetBalance(value(addr), wlgAssetId)
406415 else 0
407416 let customName = valueOrElse(getString(acres2Contract, keyAddressToCustomName(userAddressOpt)), userAddressOpt)
408417 let refByKey = keyAddressRefBy(userAddressOpt)
409418 let refBy = getString(acres2Contract, refByKey)
410419 let refs = valueOrElse(getString(acres2Contract, keyAddressReferrals(userAddressOpt)), "")
411420 let lastTxId = valueOrElse(getString(acres2Contract, keyLastWeekTxIdByUser(userAddressOpt)), "")
412421 let curTxId = valueOrElse(getString(acres2Contract, keyCurWeekTxIdByUser(userAddressOpt)), "")
413422 let acresBalance = if (isDefined(addr))
414423 then assetBalance(value(addr), acresAssetId)
415424 else 0
416425 let stakedAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddressOpt)), 0)
417426 let lvl = getLevelByAcres(stakedAcres)
418427 let fp = getFarmingPowers(userAddressOpt, acres2Contract)
419428 let acresToNextLvl = if ((lvl >= size(levelAcres)))
420429 then 0
421430 else (((levelAcres[lvl] * M8_) + 1) - stakedAcres)
422431 [("%s%s__customName__" + customName), ("%s%s__referredBy__" + valueOrElse(refBy, "")), ("%s%s__referrals__" + refs), ("%s%s__lastWeekTxId__" + lastTxId), ("%s%s__curWeekTxId__" + lastTxId), ("%s%d__wavesBalance__" + toString(balance.available)), ("%s%d__usdtBalance__" + toString(usdtBalance)), ("%s%d__wlgoldBalance__" + toString(wlgoldBalance)), ("%s%d__acresBalance__" + toString(acresBalance)), ("%s%d__stakedAcres__" + toString(stakedAcres)), ("%s%d__currentLvl__" + toString(lvl)), ("%s%d__acresToNextLvl__" + toString(acresToNextLvl)), ("%s%d__userFarmingPower__" + toString(fp[idxUserFPbonused])), ("%s%d__totalFarmingPower__" + toString(fp[idxTotalFP]))]
423432 }
424433
425434
426435 @Callable(i)
427436 func constructorV1 (contracts) = if ((i.caller != this))
428437 then throw("permissions denied")
429438 else {
430439 func descriptor (acc,ignoredItem) = (acc + "%s")
431440
432441 let descr = {
433442 let $l = contracts
434443 let $s = size($l)
435444 let $acc0 = ""
436445 func $f0_1 ($a,$i) = if (($i >= $s))
437446 then $a
438447 else descriptor($a, $l[$i])
439448
440449 func $f0_2 ($a,$i) = if (($i >= $s))
441450 then $a
442451 else throw("List size exceeds 10")
443452
444453 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
445454 }
446455 [StringEntry(keyRestCfg(), makeString(descr :: contracts, SEP)), StringEntry(keyRest2Address(), toString(this))]
447456 }
448457
449458
450459
451460 @Callable(i)
452461 func walletInfoREADONLY (userAddressOpt) = $Tuple2(nil, walletInternal(userAddressOpt))
453462
454463
455464
456465 @Callable(i)
457466 func conversionInfoREADONLY (userAddressOpt) = {
458467 let oldAcresAddress = addressFromStringValue(getStringValue(acres2Contract, oldAcresContractKey))
459468 let $t046954817 = asTuple2Ints(invoke(oldAcresAddress, "unstakeAllAcresREADONLY", [userAddressOpt], nil))
460469 let unstakedAcres = $t046954817._1
461470 let claimedAcres = $t046954817._2
462471 let $t048204969 = asTuple4Ints(invoke(acres2Contract, "unstakeLandsREADONLY", [userAddressOpt], nil))
463472 let acresFromPieces = $t048204969._1
464473 let acresFromRes = $t048204969._2
465474 let acresFromMat = $t048204969._3
466475 let acresFromProd = $t048204969._4
467476 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
468477 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(userAddressOpt)), "")
469478 let $t051475369 = if ((duckAssetId != ""))
470479 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckREADONLY", [duckAssetId, userAddressOpt], nil))
471480 else $Tuple3(0, 0, 0)
472481 let acresFromDuckRes = $t051475369._1
473482 let acresFromDuckMat = $t051475369._2
474483 let acresFromDuckProd = $t051475369._3
475484 $Tuple2(nil, [("%s%d__unstakedAcres__" + toString(unstakedAcres)), ("%s%d__claimedAcres__" + toString(claimedAcres)), ("%s%d__acresFromPieces__" + toString(acresFromPieces)), ("%s%d__acresFromRes__" + toString(acresFromRes)), ("%s%d__acresFromMat__" + toString(acresFromMat)), ("%s%d__acresFromProd__" + toString(acresFromProd)), ("%s%d__acresFromDuckRes__" + toString(acresFromDuckRes)), ("%s%d__acresFromDuckMat__" + toString(acresFromDuckMat)), ("%s%d__acresFromDuckProd__" + toString(acresFromDuckProd))])
476485 }
477486
478487
479488
480489 @Callable(i)
481490 func wlgStatsREADONLY (userAddrOpt) = {
482491 let curStats = getWlgStats2(userAddrOpt, [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
483492 $Tuple2(nil, [("%s%d__wlgAmount__" + toString(curStats[ixWlgAmount])), ("%s%d__wlgWlg__" + toString(curStats[ixWlgWlg])), ("%s%d__wlgPrice__" + toString(curStats[ixWlgPrice])), ("%s%d__usdtFunds__" + toString(curStats[ixWlgFunds])), ("%s%d__usdtActivity__" + toString(curStats[ixWlgActivity])), ("%s%d__usdtStaking__" + toString(curStats[ixWlgAcres2])), ("%s%d__usdtArbitrage__" + toString(curStats[ixWlgArbitrage])), ("%s%d__usdtPool__" + toString(curStats[ixWlgPool])), ("%s%d__wlgIssueTime__" + toString(curStats[ixWlgIssueTime])), ("%s%d__wlgLastTeamActTime__" + toString(curStats[ixWlgLastTeamActTime])), ("%s%d__wlgTeamTotal__" + toString(curStats[ixWlgTeamTotal])), ("%s%d__wlgTeamAmLeft__" + toString(curStats[ixWlgTeamAmLeft])), ("%s%d__wlgTeamAmAvailNow__" + toString(curStats[ixWlgTeamAmAvailNow])), ("%s%d__wlgTeamWlgold__" + toString(curStats[ixWlgTeamWlgold])), ("%s%d__wlgActTotal__" + toString(curStats[ixWlgActTotal])), ("%s%d__wlgActAmLeft__" + toString(curStats[ixWlgActAmLeft])), ("%s%d__wlgActAmAvailNow__" + toString(curStats[ixWlgActAmAvailNow])), ("%s%d__wlgActWlgold__" + toString(curStats[ixWlgActWlgold])), ("%s%d__wlgCurPeriod__" + toString(curStats[ixWlgCurPeriod])), ("%s%d__wlgAmLeftTotal__" + toString(curStats[ixWlgAmLeftTotal])), ("%s%d__wlgCurPeriodDistribution__" + toString(curStats[ixWlgCurPeriodDistribution])), ("%s%d__wlgLastUserTime__" + toString(curStats[ixWlgLastUserTime])), ("%s%d__wlgInvestFundTotal__" + toString(curStats[ixWlgInvestFundAmount])), ("%s%d__wlgUserAmAvailNow__" + toString(curStats[ixWlgUserAmAvailNow])), ("%s%d__wlgEffUserTime__" + toString(curStats[ixWlgEffUserTime])), ("%s%d__wlgIssue10AvailNow__" + toString(curStats[ixWlgIssue10Amount])), ("%s%d__wlgMarketingIssue10AvailNow__" + toString(curStats[ixWlgMarketingIssue10Amount])), ("%s%d__wlgTeamIssue10AvailNow__" + toString(curStats[ixWlgTeamIssue10Amount])), ("%s%d__wlgUserIssue10AvailNow__" + toString(curStats[ixWlgUser10part])), ("%s%d__wlgLastIssue10Time__" + toString(curStats[ixWlgIssue10Time])), ("%s%d__wlgTotalFarmingPower__" + toString(curStats[ixWlgTotalFarmingPower])), ("%s%d__wlgAcresStakedTotal__" + toString(curStats[ixWlgAcresStakedTotal]))])
484493 }
485494
486495
487496
488497 @Callable(i)
489498 func lotteryStatsREADONLY (userAddrOpt) = {
490499 let today = (height / DAY_BLOCKS)
491500 let week = (height / WEEK_BLOCKS)
492501 let lastWeek = (week - 1)
493502 let curWeekTickets = valueOrElse(getInteger(wlgContract, keyUserWeekTickets(userAddrOpt, week)), 0)
494503 let lastWeekTickets = valueOrElse(getInteger(wlgContract, keyUserWeekTickets(userAddrOpt, lastWeek)), 0)
495504 let curWeekTotalTickets = valueOrElse(getInteger(wlgContract, keyTotalWeekTickets(week)), 0)
496505 let lastWeekTotalTickets = valueOrElse(getInteger(wlgContract, keyTotalWeekTickets(lastWeek)), 0)
497506 let usersBet = valueOrElse(getString(wlgContract, keyUserBet(userAddrOpt)), "")
498507 $Tuple2(nil, [((("%s%d%d__totalTickets__" + toString(lastWeekTotalTickets)) + SEP) + toString(curWeekTotalTickets)), ((("%s%d%d__userTickets__" + toString(lastWeekTickets)) + SEP) + toString(curWeekTickets)), ("%s%d__blockchainWeek__" + toString(week)), ("%s%d__blockchainDay__" + toString(today)), ("%s%d__blockchainMinute__" + toString((height % DAY_BLOCKS))), ("%s%d__winningBetToday__" + toString(winningBet(today))), ("%s%s__usersBet__" + usersBet)])
499508 }
500509
501510

github/deemru/w8io/169f3d6 
54.00 ms