tx · wQqeHB3jR8k1L9HLbaQWGpm6CkrrV4fJb6SUmmx3Qco

3N8p4dscxCN8XkfWopQP55a2AyvFD9cJx8a:  -0.02900000 Waves

2022.10.31 13:15 [2296459] smart account 3N8p4dscxCN8XkfWopQP55a2AyvFD9cJx8a > SELF 0.00000000 Waves

{ "type": 13, "id": "wQqeHB3jR8k1L9HLbaQWGpm6CkrrV4fJb6SUmmx3Qco", "fee": 2900000, "feeAssetId": null, "timestamp": 1667211145745, "version": 1, "sender": "3N8p4dscxCN8XkfWopQP55a2AyvFD9cJx8a", "senderPublicKey": "3JAonT9h65iAMaQegaHVE8pCbEPHPXoARiimB7edrrTb", "proofs": [ "2MDkp3fmSVvymSvi5RZkNffou8gUDkHQorjxYnKKi9NcXBc8GmVBZKZUtV21iQCtsgEkmCFJiRELm2vip5quj9K8" ], "script": "base64:BgJvCAISCAoGCAgIAQEBEgMKAQESBQoDAQEBEgQKAgEBEgMKAQgSBAoCAQESBAoCAQESABIAEgMKAQgSBAoCAQESABIECgIBARIAEgASAwoBCBIAEgASAwoBARIAEgASAwoBBBIAEgASAwoBCBIDCgEIRQAHTl9DT0lOUwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIHTl9DT0lOUwALTl9DT0lOU19iaWcJALYCAQUHTl9DT0lOUwALTl9DT0lOU19NQVgACgAOVE9LRU5fREVDSU1BTFMABgAKVE9LRU5fUkFURQDAhD0AD0ZFRV9ERU5PTUlOQVRPUgCAyK+gJQAJUFJFQ0lTSU9OAMCEPQAIREVDSU1BTFMABgANTUFYX0FETUlOX0ZFRQCAyK+gJQAHTUFYX0ZFRQCA5JfQEgAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgATQURNSU5fQUNUSU9OU19ERUxBWQkAaQIJAGgCAAMAgKMFADwADU1JTl9SQU1QX1RJTUUJAGkCAICjBQA8AA1WUF9MT0dfUEVSSU9EAIC4mSkADFZQX1BSRUNJU0lPTgCAoJSljR0ABWNvaW5zCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCBWNvaW5zAgEsAANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCA2ZlZQAJYWRtaW5fZmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAglhZG1pbl9mZWUADGlzX2F1dG9fZmVlcwkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwIMaXNfYXV0b19mZWVzAAVvd25lcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIFb3duZXIABXRva2VuCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCBXRva2VuAA50b2tlbl9xdWFudGl0eQgJAQV2YWx1ZQEJAOwHAQUFdG9rZW4IcXVhbnRpdHkACWluaXRpYWxfQQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIJaW5pdGlhbF9BAAhmdXR1cmVfQQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIIZnV0dXJlX0EADmluaXRpYWxfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDmluaXRpYWxfQV90aW1lAAAADWZ1dHVyZV9BX3RpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwINZnV0dXJlX0FfdGltZQAAABZhZG1pbl9hY3Rpb25zX2RlYWRsaW5lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCFmFkbWluX2FjdGlvbnNfZGVhZGxpbmUAAAAbdHJhbnNmZXJfb3duZXJzaGlwX2RlYWRsaW5lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCG3RyYW5zZmVyX293bmVyc2hpcF9kZWFkbGluZQAAAApmdXR1cmVfZmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAgpmdXR1cmVfZmVlABBmdXR1cmVfYWRtaW5fZmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhBmdXR1cmVfYWRtaW5fZmVlAAxmdXR1cmVfb3duZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCDGZ1dHVyZV9vd25lcgAJaXNfa2lsbGVkCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzAglpc19raWxsZWQADWtpbGxfZGVhZGxpbmUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCDWtpbGxfZGVhZGxpbmUAEEtJTExfREVBRExJTkVfRFQJAGkCCQBoAgkAaAIAAgAeAICjBQA8AARiaWcwCQC2AgEAAAAEYmlnMQkAtgIBAAEABGJpZzIJALYCAQACAA1oZWlnaHRBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMCDWhlaWdodEFkZHJlc3MCE25vIHNldHRpbmdzIGRlZmluZWQCFGJhZCBzZXR0aW5ncyBhZGRyZXNzAAZIRUlHSFQFBmhlaWdodAAPYmxvY2tfdGltZXN0YW1wBQZIRUlHSFQBBmFzc2VydAEBYQMFAWEHBgEJbGlzdF9pdG9zAQRsaXN0AwkAZgIJAJADAQUEbGlzdAULTl9DT0lOU19NQVgJAAIBAiRsaXN0X2l0b3M6IGxpc3Quc2l6ZSgpID4gTl9D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//////8BCQDMCAIA9///////////AQkAzAgCAPb//////////wEJAMwIAgD1//////////8BCQDMCAIA9P//////////AQkAzAgCAPP//////////wEJAMwIAgDy//////////8BCQDMCAIA8f//////////AQkAzAgCAPD//////////wEJAMwIAgDv//////////8BCQDMCAIA7v//////////AQkAzAgCAO3//////////wEJAMwIAgDs//////////8BCQDMCAIA6///////////AQkAzAgCAOr//////////wEJAMwIAgDp//////////8BCQDMCAIA6P//////////AQkAzAgCAOf//////////wEJAMwIAgDm//////////8BCQDMCAIA5f//////////AQkAzAgCAOT//////////wEJAMwIAgDj//////////8BCQDMCAIA4v//////////AQUDbmlsBAh2YWx1ZTMwcAoAAiRsBQdsaXN0MzBwCgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAzMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgMJAQIhPQIFCHZhbHVlMzBwAgAFCHZhbHVlMzBwCgACJGwFB2xpc3QzMG0KAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDMwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeARZnZXRfdmlydHVhbF9wcmljZV9kaWZmAQNfdDAEA3ZwMQkBDXZpcnR1YWxfcHJpY2UBCQEFZ2V0X0QCCQEIYmlnX2xpc3QBBQhiYWxhbmNlcwUDYW1wBA12cDFfdGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQCdDADCQBnAgAABQNfdDAJAGQCBQ12cDFfdGltZXN0YW1wBQNfdDAFA190MAQJdDBfcGVyaW9kCQBpAgUCdDAFDVZQX0xPR19QRVJJT0QECWxvZ192YWx1ZQkBD2dldF9uZWFyZXN0X2xvZwEFCXQwX3BlcmlvZAMJAAACBQlsb2dfdmFsdWUCAAkAlQoDBQN2cDEFA3ZwMQAABAhsb2dfbGlzdAkAtQkCBQlsb2dfdmFsdWUCAV8EA3ZwMAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGxvZ19saXN0AAAEDXZwMF90aW1lc3RhbXAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhsb2dfbGlzdAACCQCVCgMFA3ZwMQUDdnAwCQBlAgUNdnAxX3RpbWVzdGFtcAUNdnAwX3RpbWVzdGFtcAEPZ2V0X3ZvbHVtZV9kaWZmAQNfdDAEBHZvbDEJAKcDAQkBC3ZhbHVlT3JFbHNlAgkAoggBAgN2b2wCATAEDnZvbDFfdGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQCdDADCQBnAgAABQNfdDAJAGQCBQ52b2wxX3RpbWVzdGFtcAUDX3QwBQNfdDAECXQwX3BlcmlvZAkAaQIFAnQwBQ1WUF9MT0dfUEVSSU9EBAlsb2dfdmFsdWUJAQ9nZXRfbmVhcmVzdF9sb2cBBQl0MF9wZXJpb2QDCQAAAgUJbG9nX3ZhbHVlAgAJAJUKAwUEdm9sMQUEdm9sMQAABAhsb2dfbGlzdAkAtQkCBQlsb2dfdmFsdWUCAV8EBHZvbDAJAKcDAQkAkQMCBQhsb2dfbGlzdAABBA52b2wwX3RpbWVzdGFtcAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGxvZ19saXN0AAIJAJUKAwUEdm9sMQUEdm9sMAkAZQIFDnZvbDFfdGltZXN0YW1wBQ52b2wwX3RpbWVzdGFtcAESX2NhbGNfdG9rZW5fYW1vdW50AQxuZXdfYmFsYW5jZXMEAkQwAwkAAAIFDnRva2VuX3F1YW50aXR5AAAAAAkBBWdldF9EAgkBCGJpZ19saXN0AQUIYmFsYW5jZXMFA2FtcAQCRDEJAQVnZXRfRAIJAQhiaWdfbGlzdAEFDG5ld19iYWxhbmNlcwUDYW1wAwkBBmFzc2VydAEJAGYCBQJEMQUCRDAJAAIBAgdEMSA+IEQwBA0kdDAxMjg5OTE0OTAyAwkAZgIFDnRva2VuX3F1YW50aXR5AAAKAQxmZWVfYmFsYW5jZXMCA29sZANuZXcEBF9mZWUJAGkCCQBoAgUDZmVlBQdOX0NPSU5TCQBoAgAECQBlAgUHTl9DT0lOUwABBAFuCQCQAwEFA29sZAoBBGZvbGQCA2FjYwVpbmRleAQLb2xkX2JhbGFuY2UJAJEDAgUDb2xkBQVpbmRleAQLbmV3X2JhbGFuY2UJAJEDAgUDbmV3BQVpbmRleAQNaWRlYWxfYmFsYW5jZQkAawMFAkQxBQtvbGRfYmFsYW5jZQUCRDAECmRpZmZlcmVuY2UDCQBmAgUNaWRlYWxfYmFsYW5jZQULbmV3X2JhbGFuY2UJAGUCBQ1pZGVhbF9iYWxhbmNlBQtuZXdfYmFsYW5jZQkAZQIFC25ld19iYWxhbmNlBQ1pZGVhbF9iYWxhbmNlBAphbW91bnRfZmVlCQBrAwUEX2ZlZQUKZGlmZmVyZW5jZQUPRkVFX0RFTk9NSU5BVE9SBBBhbW91bnRfYWRtaW5fZmVlCQBrAwUKYW1vdW50X2ZlZQUJYWRtaW5fZmVlBQ9GRUVfREVOT01JTkFUT1IJAJYKBAkAzQgCCAUDYWNjAl8xCQBlAgULbmV3X2JhbGFuY2UFEGFtb3VudF9hZG1pbl9mZWUJAM0IAggFA2FjYwJfMgkAZQIFC25ld19iYWxhbmNlBQphbW91bnRfZmVlAwMFDGlzX2F1dG9fZmVlcwkAZgIFEGFtb3VudF9hZG1pbl9mZWUAAAcJAM0IAggFA2FjYwJfMwkBDlNjcmlwdFRyYW5zZmVyAwUFb3duZXIFEGFtb3VudF9hZG1pbl9mZWUJANkEAQkAkQMCBQVjb2lucwUFaW5kZXgIBQNhY2MCXzMJAGQCCAUDYWNjAl80CQBrAwUKYW1vdW50X2ZlZQUKVE9LRU5fUkFURQkAkQMCBQVyYXRlcwUFaW5kZXgKAAIkbAUNaW5kZXhfTl9DT0lOUwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUDbmlsBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBA0kdDAxNDQ3MzE0NTU1CQEMZmVlX2JhbGFuY2VzAgUIYmFsYW5jZXMFDG5ld19iYWxhbmNlcwQGZmluYWxzCAUNJHQwMTQ0NzMxNDU1NQJfMQQHbm9fZmVlcwgFDSR0MDE0NDczMTQ1NTUCXzIEB2FjdGlvbnMIBQ0kdDAxNDQ3MzE0NTU1Al8zBAdmZWVfc3VtCAUNJHQwMTQ0NzMxNDU1NQJfNAkAlQoDBQZmaW5hbHMJAQVnZXRfRAIJAQhiaWdfbGlzdAEFB25vX2ZlZXMFA2FtcAkAzggCBQdhY3Rpb25zCQEIbG9nX2RhdGECBQJEMAkAawMFB2ZlZV9zdW0FD0ZFRV9ERU5PTUlOQVRPUgUDZmVlCQCVCgMFDG5ld19iYWxhbmNlcwUCRDEFA25pbAQOZmluYWxfYmFsYW5jZXMIBQ0kdDAxMjg5OTE0OTAyAl8xBAJEMggFDSR0MDEyODk5MTQ5MDICXzIEDGZlZXNfYWN0aW9ucwgFDSR0MDEyODk5MTQ5MDICXzMEC21pbnRfYW1vdW50AwkAAAIFDnRva2VuX3F1YW50aXR5AAAFAkQxCQBrAwUOdG9rZW5fcXVhbnRpdHkJAGUCBQJEMgUCRDAFAkQwCQCVCgMFDmZpbmFsX2JhbGFuY2VzBQttaW50X2Ftb3VudAUMZmVlc19hY3Rpb25zGgNtc2cBBGluaXQGBl9vd25lcgZfY29pbnMLX3Bvb2xfdG9rZW4CX0EEX2ZlZQpfYWRtaW5fZmVlAwkBASEBCQCeCAEFBHRoaXMJAAIBAhNhbHJlYWR5IGluaXRpYWxpemVkAwkBAiE9AggFA21zZwZjYWxsZXIFBHRoaXMJAAIBAhhzZWxmIGluaXRpYWxpemF0aW9uIG9ubHkECmNvaW5zX2xpc3QJALUJAgUGX2NvaW5zAgEsBAFuCQCQAwEFCmNvaW5zX2xpc3QDCQBmAgACBQFuCQACAQIPdG9vIHNtYWxsIGNvaW5zAwkAZgIFAW4FC05fQ09JTlNfTUFYCQACAQIOdG9vIG1hbnkgY29pbnMKAQpkdXBsaWNhdGVzAgNhY2MFaW5kZXgDAwkAZwIFBWluZGV4BQFuBgkAAAIFA2FjYwcFA2FjYwkAAAIJAM8IAgUKY29pbnNfbGlzdAkAkQMCBQpjb2luc19saXN0BQVpbmRleAUFaW5kZXgDCQAAAgcKAAIkbAURaW5kZXhfTl9DT0lOU19NQVgKAAIkcwkAkAMBBQIkbAoABSRhY2MwBgoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZHVwbGljYXRlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAAgECF2R1cGxpY2F0ZSBjb2luIGRldGVjdGVkCgEIZGVjaW1hbHMBBGNvaW4ICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDZBAEFBGNvaW4JAKwCAgISZnJvbUJhc2U1OFN0cmluZzogBQRjb2luCQCsAgICC2Fzc2V0SW5mbzogBQRjb2luCGRlY2ltYWxzCgEEZm9sZAIDYWNjBGNvaW4JAJUKAwkAZAIIBQNhY2MCXzEAAQkAzQgCCAUDYWNjAl8yAAAJAM0IAggFA2FjYwJfMwkAbAYACgAACQEIZGVjaW1hbHMBBQRjb2luAAAAAAUERE9XTgQNJHQwMTYxNTYxNjI1MQoAAiRsBQpjb2luc19saXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDAAAFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAhfTl9DT0lOUwgFDSR0MDE2MTU2MTYyNTECXzEEBXplcm9zCAUNJHQwMTYxNTYxNjI1MQJfMgQGX3JhdGVzCAUNJHQwMTYxNTYxNjI1MQJfMwQKaXNzdWVUb2tlbgkAwggFBQtfcG9vbF90b2tlbgkArAICAg1MUCB0b2tlbiBmb3IgBQZfY29pbnMAAAUOVE9LRU5fREVDSU1BTFMGBAd0b2tlbklkCQDYBAEJALgIAQUKaXNzdWVUb2tlbgkAzAgCCQELU3RyaW5nRW50cnkCAgVjb2lucwUGX2NvaW5zCQDMCAIJAQtTdHJpbmdFbnRyeQICBXJhdGVzCQC5CQIJAQlsaXN0X2l0b3MBBQZfcmF0ZXMCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgIIYmFsYW5jZXMJALkJAgkBCWxpc3RfaXRvcwEFBXplcm9zAgEsCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgdOX0NPSU5TBQhfTl9DT0lOUwkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQJfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgNmZWUFBF9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQICCWFkbWluX2ZlZQUKX2FkbWluX2ZlZQkAzAgCCQELU3RyaW5nRW50cnkCAgVvd25lcgkBDGNoZWNrQWRkcmVzcwEFBl9vd25lcgkAzAgCCQEMSW50ZWdlckVudHJ5AgINa2lsbF9kZWFkbGluZQkAZAIFBmhlaWdodAUQS0lMTF9ERUFETElORV9EVAkAzAgCCQELU3RyaW5nRW50cnkCAgV0b2tlbgUHdG9rZW5JZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgIJaXNfa2lsbGVkBwkAzAgCCQEMQm9vbGVhbkVudHJ5AgIMaXNfYXV0b19mZWVzBgkAzAgCBQppc3N1ZVRva2VuBQNuaWwDbXNnAQ1hZGRfbGlxdWlkaXR5AQ9taW5fbWludF9hbW91bnQDCQEGYXNzZXJ0AQkBASEBBQlpc19raWxsZWQJAAIBAglpcyBraWxsZWQKARB1cGRhdGVfMV9iYWxhbmNlAwRiYXNlBnRhcmdldAZhbW91bnQKAQRmb2xkAgNhY2MFaW5kZXgJAM0IAgUDYWNjCQBkAgkAkQMCBQRiYXNlBQVpbmRleAMJAAACBQVpbmRleAUGdGFyZ2V0BQZhbW91bnQAAAoAAiRsBQ1pbmRleF9OX0NPSU5TCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCgELdXBfYmFsYW5jZXMCBGJhc2UIcGF5bWVudHMEAW4JAJADAQUIcGF5bWVudHMDCQBmAgABBQFuCQACAQIRcGF5bWVudHMgc2l6ZSA8IDEDCQBmAgUBbgULTl9DT0lOU19NQVgJAAIBAhtwYXltZW50cyBzaXplID4gTl9DT0lOU19NQVgKAQRmb2xkAgNhY2MHcGF5bWVudAkBEHVwZGF0ZV8xX2JhbGFuY2UDBQNhY2MJAQpjb2luX2luZGV4AQUHcGF5bWVudAgFB3BheW1lbnQGYW1vdW50CgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUEYmFzZQoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQMbmV3X2JhbGFuY2VzCQELdXBfYmFsYW5jZXMCBQhiYWxhbmNlcwgFA21zZwhwYXltZW50cwMDCQAAAgUOdG9rZW5fcXVhbnRpdHkAAAkAAAIJAJcDAQUMbmV3X2JhbGFuY2VzAAAHCQACAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwQNJHQwMTgxMzIxODIxOAkBEl9jYWxjX3Rva2VuX2Ftb3VudAEFDG5ld19iYWxhbmNlcwQOZmluYWxfYmFsYW5jZXMIBQ0kdDAxODEzMjE4MjE4Al8xBAttaW50X2Ftb3VudAgFDSR0MDE4MTMyMTgyMTgCXzIEDGZlZXNfYWN0aW9ucwgFDSR0MDE4MTMyMTgyMTgCXzMDCQEGYXNzZXJ0AQkAZwIFC21pbnRfYW1vdW50BQ9taW5fbWludF9hbW91bnQJAAIBAhRzbGlwcGFnZSBzY3Jld2VkIHlvdQkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQICCGJhbGFuY2VzCQC5CQIJAQlsaXN0X2l0b3MBBQ5maW5hbF9iYWxhbmNlcwIBLAkAzAgCCQEHUmVpc3N1ZQMFBXRva2VuBQttaW50X2Ftb3VudAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFA21zZwZjYWxsZXIFC21pbnRfYW1vdW50BQV0b2tlbgUDbmlsBQxmZWVzX2FjdGlvbnMDbXNnAQZnZXRfZHkDAWkBagJkeAQEeHBfaQkAkQMCBQhiYWxhbmNlcwUBaQQEeHBfagkAkQMCBQhiYWxhbmNlcwUBagQBeAkAZAIFBHhwX2kFAmR4BA0kdDAxODY3ODE4NzMxCQEFZ2V0X3kEBQFpBQFqBQF4CQEIYmlnX2xpc3QBBQhiYWxhbmNlcwQBeQgFDSR0MDE4Njc4MTg3MzECXzEEAUQIBQ0kdDAxODY3ODE4NzMxAl8yBANfZHkJAGUCCQBlAgUEeHBfagUBeQABBAZkeV9mZWUJAGsDBQNfZHkFA2ZlZQUPRkVFX0RFTk9NSU5BVE9SBAJkeQkAZQIFA19keQUGZHlfZmVlCQCUCgIFA25pbAUCZHkDbXNnAQhleGNoYW5nZQIBagZtaW5fZHkDCQEGYXNzZXJ0AQkBASEBBQlpc19raWxsZWQJAAIBAglpcyBraWxsZWQDCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECFXNpemUoIHBheW1lbnRzICkgIT0gMQQHcGF5bWVudAkAkQMCCAUDbXNnCHBheW1lbnRzAAAEAmR4CAUHcGF5bWVudAZhbW91bnQEAWkJAQpjb2luX2luZGV4AQUHcGF5bWVudAQEeHBfaQkAkQMCBQhiYWxhbmNlcwUBaQQEeHBfagkAkQMCBQhiYWxhbmNlcwUBagQBeAkAZAIFBHhwX2kFAmR4BA0kdDAxOTIzNzE5MjkwCQEFZ2V0X3kEBQFpBQFqBQF4CQEIYmlnX2xpc3QBBQhiYWxhbmNlcwQBeQgFDSR0MDE5MjM3MTkyOTACXzEEAUQIBQ0kdDAxOTIzNzE5MjkwAl8yBANfZHkJAGUCCQBlAgUEeHBfagUBeQABBAZkeV9mZWUJAGsDBQNfZHkFA2ZlZQUPRkVFX0RFTk9NSU5BVE9SBAJkeQkAZQIFA19keQUGZHlfZmVlAwkBBmFzc2VydAEJAGcCBQJkeQUGbWluX2R5CQACAQIuZXhjaGFuZ2UgcmVzdWx0ZWQgaW4gZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAQMZHlfYWRtaW5fZmVlCQBrAwUGZHlfZmVlBQlhZG1pbl9mZWUFD0ZFRV9ERU5PTUlOQVRPUgoBBGZvbGQCA2FjYwVpbmRleAkAzQgCBQNhY2MDCQAAAgUFaW5kZXgFAWkJAGQCCQCRAwIFCGJhbGFuY2VzBQVpbmRleAUCZHgDCQAAAgUFaW5kZXgFAWoJAGUCCQBlAgkAkQMCBQhiYWxhbmNlcwUFaW5kZXgFAmR5BQxkeV9hZG1pbl9mZWUJAJEDAgUIYmFsYW5jZXMFBWluZGV4BA5maW5hbF9iYWxhbmNlcwoAAiRsBQ1pbmRleF9OX0NPSU5TCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAh0b2tlbk91dAkA2QQBCQCRAwIFBWNvaW5zBQFqCQCUCgIJAM4IAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQICCGJhbGFuY2VzCQC5CQIJAQlsaXN0X2l0b3MBBQ5maW5hbF9iYWxhbmNlcwIBLAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgUCZHkFCHRva2VuT3V0BQNuaWwDAwUMaXNfYXV0b19mZWVzCQBmAgUMZHlfYWRtaW5fZmVlAAAHCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBW93bmVyBQxkeV9hZG1pbl9mZWUFCHRva2VuT3V0BQNuaWwFA25pbAkBCGxvZ19kYXRhAgUBRAkAawMFAmR4BQpUT0tFTl9SQVRFCQCRAwIFBXJhdGVzBQFpBQJkeQNtc2cBEHJlbW92ZV9saXF1aWRpdHkBDF9taW5fYW1vdW50cwMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQIVc2l6ZSggcGF5bWVudHMgKSAhPSAxBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQFBXRva2VuCQACAQINdW5rbm93biB0b2tlbgQLbWluX2Ftb3VudHMDCQAAAgUMX21pbl9hbW91bnRzAgEwBQNuaWwJAQlsaXN0X3N0b2kBCQC1CQIFDF9taW5fYW1vdW50cwIBLAMDCQECIT0CBQxfbWluX2Ftb3VudHMCATAJAQIhPQIJAJADAQULbWluX2Ftb3VudHMFB05fQ09JTlMHCQACAQIdbWluX2Ftb3VudHMuc2l6ZSgpICE9IE5fQ09JTlMEBmFtb3VudAgFB3BheW1lbnQGYW1vdW50BAZjYWxsZXIIBQNtc2cGY2FsbGVyCgEEZm9sZAIDYWNjBWluZGV4BAdiYWxhbmNlCQCRAwIFCGJhbGFuY2VzBQVpbmRleAQKYW1vdW50X291dAkAawMFB2JhbGFuY2UFBmFtb3VudAUOdG9rZW5fcXVhbnRpdHkDAwkBAiE9AgUMX21pbl9hbW91bnRzAgEwCQBmAgkAkQMCBQttaW5fYW1vdW50cwUFaW5kZXgFCmFtb3VudF9vdXQHCQACAQIwd2l0aGRyYXdhbCByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkCQCUCgIJAM0IAggFA2FjYwJfMQkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQphbW91bnRfb3V0CQDZBAEJAJEDAgUFY29pbnMFBWluZGV4CQDNCAIIBQNhY2MCXzIJAGUCBQdiYWxhbmNlBQphbW91bnRfb3V0BA0kdDAyMTQwNjIxNDg1CgACJGwFDWluZGV4X05fQ09JTlMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAl0cmFuc2ZlcnMIBQ0kdDAyMTQwNjIxNDg1Al8xBA5maW5hbF9iYWxhbmNlcwgFDSR0MDIxNDA2MjE0ODUCXzIJAM4IAgUJdHJhbnNmZXJzCQDMCAIJAQtTdHJpbmdFbnRyeQICCGJhbGFuY2VzCQC5CQIJAQlsaXN0X2l0b3MBBQ5maW5hbF9iYWxhbmNlcwIBLAkAzAgCCQEEQnVybgIFBXRva2VuBQZhbW91bnQFA25pbANtc2cBFmNhbGNfd2l0aGRyYXdfb25lX2NvaW4CDV90b2tlbl9hbW91bnQBaQkAlAoCBQNuaWwICQEXX2NhbGNfd2l0aGRyYXdfb25lX2NvaW4CBQ1fdG9rZW5fYW1vdW50BQFpAl8xA21zZwEZcmVtb3ZlX2xpcXVpZGl0eV9vbmVfY29pbgIBaQptaW5fYW1vdW50AwkBBmFzc2VydAEJAQEhAQUJaXNfa2lsbGVkCQACAQIJaXMga2lsbGVkAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhVzaXplKCBwYXltZW50cyApICE9IDEEB3BheW1lbnQJAJEDAggFA21zZwhwYXltZW50cwAAAwkBAiE9AggFB3BheW1lbnQHYXNzZXRJZAUFdG9rZW4JAAIBAg11bmtub3duIHRva2VuBA1fdG9rZW5fYW1vdW50CAUHcGF5bWVudAZhbW91bnQEDSR0MDIyMTQ2MjIyMTMJARdfY2FsY193aXRoZHJhd19vbmVfY29pbgIFDV90b2tlbl9hbW91bnQFAWkEAmR5CAUNJHQwMjIxNDYyMjIxMwJfMQQGZHlfZmVlCAUNJHQwMjIxNDYyMjIxMwJfMgQBRAgFDSR0MDIyMTQ2MjIyMTMCXzMDCQEGYXNzZXJ0AQkAZwIFAmR5BQptaW5fYW1vdW50CQACAQIYbm90IGVub3VnaCBjb2lucyByZW1vdmVkBAxkeV9hZG1pbl9mZWUJAGsDBQZkeV9mZWUFCWFkbWluX2ZlZQUPRkVFX0RFTk9NSU5BVE9SBApkeV9hbmRfZmVlCQBkAgUCZHkFDGR5X2FkbWluX2ZlZQoBBGZvbGQCA2FjYwVpbmRleAkAzQgCBQNhY2MJAGUCCQCRAwIFCGJhbGFuY2VzBQVpbmRleAMJAAACBQVpbmRleAUBaQUKZHlfYW5kX2ZlZQAABA5maW5hbF9iYWxhbmNlcwoAAiRsBQ1pbmRleF9OX0NPSU5TCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAh0b2tlbk91dAkA2QQBCQCRAwIFBWNvaW5zBQFpCQCUCgIJAM4IAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQICCGJhbGFuY2VzCQC5CQIJAQlsaXN0X2l0b3MBBQ5maW5hbF9iYWxhbmNlcwIBLAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgUCZHkFCHRva2VuT3V0CQDMCAIJAQRCdXJuAgUFdG9rZW4FDV90b2tlbl9hbW91bnQFA25pbAMDBQxpc19hdXRvX2ZlZXMJAGYCBQxkeV9hZG1pbl9mZWUAAAcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFb3duZXIFDGR5X2FkbWluX2ZlZQUIdG9rZW5PdXQFA25pbAUDbmlsCQEIbG9nX2RhdGECBQFECQBrAwkAawMFBmR5X2ZlZQUKVE9LRU5fUkFURQkAkQMCBQVyYXRlcwUBaQUPRkVFX0RFTk9NSU5BVE9SBQNmZWUFAmR5A21zZwEBQQAJAJQKAgUDbmlsBQNhbXADbXNnARFnZXRfdmlydHVhbF9wcmljZQAEAUQJAQVnZXRfRAIJAQhiaWdfbGlzdAEFCGJhbGFuY2VzBQNhbXAJAJQKAgUDbmlsCQENdmlydHVhbF9wcmljZQEFAUQDbXNnARFjYWxjX3Rva2VuX2Ftb3VudAEIX2Ftb3VudHMEB2Ftb3VudHMJAQlsaXN0X3N0b2kBCQC1CQIFCF9hbW91bnRzAgEsAwkBAiE9AgkAkAMBBQdhbW91bnRzBQdOX0NPSU5TCQACAQITbm90IGVub3VnaHQgYW1vdW50cwoBBGZvbGQCA2FjYwVpbmRleAkAzQgCBQNhY2MJAGQCCQCRAwIFCGJhbGFuY2VzBQVpbmRleAkAkQMCBQdhbW91bnRzBQVpbmRleAQMbmV3X2JhbGFuY2VzCgACJGwFDWluZGV4X05fQ09JTlMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEDSR0MDIzNjYwMjM3NDYJARJfY2FsY190b2tlbl9hbW91bnQBBQxuZXdfYmFsYW5jZXMEDmZpbmFsX2JhbGFuY2VzCAUNJHQwMjM2NjAyMzc0NgJfMQQLbWludF9hbW91bnQIBQ0kdDAyMzY2MDIzNzQ2Al8yBAxmZWVzX2FjdGlvbnMIBQ0kdDAyMzY2MDIzNzQ2Al8zCQCUCgIFA25pbAULbWludF9hbW91bnQDbXNnAQZyYW1wX0ECCV9mdXR1cmVfQQxfZnV0dXJlX3RpbWUDCQEGYXNzZXJ0AQkAAAIIBQNtc2cGY2FsbGVyBQVvd25lcgkAAgECCm9ubHkgb3duZXIDCQEGYXNzZXJ0AQkAZwIFD2Jsb2NrX3RpbWVzdGFtcAkAZAIFDmluaXRpYWxfQV90aW1lBQ1NSU5fUkFNUF9USU1FCQACAQIJdG9vIG9mdGVuAwkBBmFzc2VydAEJAGcCBQxfZnV0dXJlX3RpbWUJAGQCBQ9ibG9ja190aW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQUDYW1wAwkBBmFzc2VydAEDCQBmAgUJX2Z1dHVyZV9BAAAJAGYCBQVNQVhfQQUJX2Z1dHVyZV9BBwkAAgECEW91dCBvZiBiYXNlIHJhbmdlAwkBBmFzc2VydAEDAwkAZwIFCV9mdXR1cmVfQQUKX2luaXRpYWxfQQkAZwIJAGgCBQpfaW5pdGlhbF9BBQxNQVhfQV9DSEFOR0UFCV9mdXR1cmVfQQcGAwkAZgIFCl9pbml0aWFsX0EFCV9mdXR1cmVfQQkAZwIJAGgCBQlfZnV0dXJlX0EFDE1BWF9BX0NIQU5HRQUKX2luaXRpYWxfQQcJAAIBAgxvdXQgb2YgcmFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQICCWluaXRpYWxfQQUKX2luaXRpYWxfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCV9mdXR1cmVfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFD2Jsb2NrX3RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgINZnV0dXJlX0FfdGltZQUMX2Z1dHVyZV90aW1lBQNuaWwDbXNnAQtzdG9wX3JhbXBfQQADCQEGYXNzZXJ0AQkAAAIIBQNtc2cGY2FsbGVyBQVvd25lcgkAAgECCm9ubHkgb3duZXIECWN1cnJlbnRfQQUDYW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCWN1cnJlbnRfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCWN1cnJlbnRfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFD2Jsb2NrX3RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgINZnV0dXJlX0FfdGltZQUPYmxvY2tfdGltZXN0YW1wBQNuaWwDbXNnAQ5jb21taXRfbmV3X2ZlZQIHbmV3X2ZlZQ1uZXdfYWRtaW5fZmVlAwkBBmFzc2VydAEJAAACCAUDbXNnBmNhbGxlcgUFb3duZXIJAAIBAgpvbmx5IG93bmVyAwkBBmFzc2VydAEJAAACBRZhZG1pbl9hY3Rpb25zX2RlYWRsaW5lAAAJAAIBAg1hY3RpdmUgYWN0aW9uAwkBBmFzc2VydAEJAGcCBQdNQVhfRkVFBQduZXdfZmVlCQACAQITZmVlIGV4Y2VlZHMgbWF4aW11bQMJAQZhc3NlcnQBCQBnAgUNTUFYX0FETUlOX0ZFRQUNbmV3X2FkbWluX2ZlZQkAAgECGWFkbWluIGZlZSBleGNlZWRzIG1heGltdW0ECV9kZWFkbGluZQkAZAIFD2Jsb2NrX3RpbWVzdGFtcAUTQURNSU5fQUNUSU9OU19ERUxBWQkAzAgCCQEMSW50ZWdlckVudHJ5AgIWYWRtaW5fYWN0aW9uc19kZWFkbGluZQUJX2RlYWRsaW5lCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpmdXR1cmVfZmVlBQduZXdfZmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBmdXR1cmVfYWRtaW5fZmVlBQ1uZXdfYWRtaW5fZmVlBQNuaWwDbXNnAQ1hcHBseV9uZXdfZmVlAAMJAQZhc3NlcnQBCQAAAggFA21zZwZjYWxsZXIFBW93bmVyCQACAQIKb25seSBvd25lcgMJAQZhc3NlcnQBCQBnAgUPYmxvY2tfdGltZXN0YW1wBRZhZG1pbl9hY3Rpb25zX2RlYWRsaW5lCQACAQIRaW5zdWZmaWNpZW50IHRpbWUDCQEGYXNzZXJ0AQkBAiE9AgUWYWRtaW5fYWN0aW9uc19kZWFkbGluZQAACQACAQIQbm8gYWN0aXZlIGFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgIWYWRtaW5fYWN0aW9uc19kZWFkbGluZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCAgNmZWUFCmZ1dHVyZV9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQICCWFkbWluX2ZlZQUQZnV0dXJlX2FkbWluX2ZlZQUDbmlsA21zZwEVcmV2ZXJ0X25ld19wYXJhbWV0ZXJzAAMJAQZhc3NlcnQBCQAAAggFA21zZwZjYWxsZXIFBW93bmVyCQACAQIKb25seSBvd25lcgkAzAgCCQEMSW50ZWdlckVudHJ5AgIWYWRtaW5fYWN0aW9uc19kZWFkbGluZQAABQNuaWwDbXNnARljb21taXRfdHJhbnNmZXJfb3duZXJzaGlwAQZfb3duZXIDCQEGYXNzZXJ0AQkAAAIIBQNtc2cGY2FsbGVyBQVvd25lcgkAAgECCm9ubHkgb3duZXIDCQEGYXNzZXJ0AQkAAAIFG3RyYW5zZmVyX293bmVyc2hpcF9kZWFkbGluZQAACQACAQIPYWN0aXZlIHRyYW5zZmVyBAlfZGVhZGxpbmUJAGQCBQ9ibG9ja190aW1lc3RhbXAFE0FETUlOX0FDVElPTlNfREVMQVkJAMwIAgkBDEludGVnZXJFbnRyeQICG3RyYW5zZmVyX293bmVyc2hpcF9kZWFkbGluZQUJX2RlYWRsaW5lCQDMCAIJAQtTdHJpbmdFbnRyeQICDGZ1dHVyZV9vd25lcgkBDGNoZWNrQWRkcmVzcwEFBl9vd25lcgUDbmlsA21zZwEYYXBwbHlfdHJhbnNmZXJfb3duZXJzaGlwAAMJAQZhc3NlcnQBCQAAAggFA21zZwZjYWxsZXIFBW93bmVyCQACAQIKb25seSBvd25lcgMJAQZhc3NlcnQBCQBnAgUPYmxvY2tfdGltZXN0YW1wBRt0cmFuc2Zlcl9vd25lcnNoaXBfZGVhZGxpbmUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQMJAQZhc3NlcnQBCQECIT0CBRt0cmFuc2Zlcl9vd25lcnNoaXBfZGVhZGxpbmUAAAkAAgECEm5vIGFjdGl2ZSB0cmFuc2ZlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgIbdHJhbnNmZXJfb3duZXJzaGlwX2RlYWRsaW5lAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgIFb3duZXIFDGZ1dHVyZV9vd25lcgUDbmlsA21zZwEZcmV2ZXJ0X3RyYW5zZmVyX293bmVyc2hpcAADCQEGYXNzZXJ0AQkAAAIIBQNtc2cGY2FsbGVyBQVvd25lcgkAAgECCm9ubHkgb3duZXIJAMwIAgkBDEludGVnZXJFbnRyeQICG3RyYW5zZmVyX293bmVyc2hpcF9kZWFkbGluZQAABQNuaWwDbXNnAQ5hZG1pbl9iYWxhbmNlcwEBaQkAlAoCBQNuaWwJAQ1hZG1pbl9iYWxhbmNlAQUBaQNtc2cBE3dpdGhkcmF3X2FkbWluX2ZlZXMAAwkBBmFzc2VydAEJAAACCAUDbXNnBmNhbGxlcgUFb3duZXIJAAIBAgpvbmx5IG93bmVyCgEEZm9sZAIDYWNjBWluZGV4CQDNCAIFA2FjYwkBDlNjcmlwdFRyYW5zZmVyAwUFb3duZXIJAQ1hZG1pbl9iYWxhbmNlAQUFaW5kZXgJANkEAQkAkQMCBQVjb2lucwUFaW5kZXgKAAIkbAUNaW5kZXhfTl9DT0lOUwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgNtc2cBEWRvbmF0ZV9hZG1pbl9mZWVzAAMJAQZhc3NlcnQBCQAAAggFA21zZwZjYWxsZXIFBW93bmVyCQACAQIKb25seSBvd25lcgoBBGZvbGQCA2FjYwVpbmRleAkAzQgCBQNhY2MJAGQCCQCRAwIFCGJhbGFuY2VzBQVpbmRleAkBDWFkbWluX2JhbGFuY2UBBQVpbmRleAQMbmV3X2JhbGFuY2VzCgACJGwFDWluZGV4X05fQ09JTlMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAMwIAgkBC1N0cmluZ0VudHJ5AgIIYmFsYW5jZXMJALkJAgkBCWxpc3RfaXRvcwEFDG5ld19iYWxhbmNlcwIBLAUDbmlsA21zZwENc2V0X2F1dG9fZmVlcwENX2lzX2F1dG9fZmVlcwMJAQZhc3NlcnQBCQAAAggFA21zZwZjYWxsZXIFBW93bmVyCQACAQIKb25seSBvd25lcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgIMaXNfYXV0b19mZWVzBQ1faXNfYXV0b19mZWVzBQNuaWwDbXNnAQdraWxsX21lAAMJAQZhc3NlcnQBCQAAAggFA21zZwZjYWxsZXIFBW93bmVyCQACAQIKb25seSBvd25lcgMJAQZhc3NlcnQBCQBmAgUNa2lsbF9kZWFkbGluZQUPYmxvY2tfdGltZXN0YW1wCQACAQITZGVhZGxpbmUgaGFzIHBhc3NlZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgIJaXNfa2lsbGVkBgUDbmlsA21zZwEJdW5raWxsX21lAAMJAQZhc3NlcnQBCQAAAggFA21zZwZjYWxsZXIFBW93bmVyCQACAQIKb25seSBvd25lcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgIJaXNfa2lsbGVkBwUDbmlsA21zZwESc2V0X2hlaWdodF9hZGRyZXNzAQ5faGVpZ2h0QWRkcmVzcwMJAQIhPQIIBQNtc2cGY2FsbGVyBQVvd25lcgkAAgECCm9ubHkgb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgINaGVpZ2h0QWRkcmVzcwkBDGNoZWNrQWRkcmVzcwEFDl9oZWlnaHRBZGRyZXNzBQNuaWwBaQEMc2V0X3ZlcmlmaWVyAQh2ZXJpZmllcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDnNlbGYgY2FsbCBvbmx5BAlhZGRyZXNzT0sEByRtYXRjaDAJAKYIAQUIdmVyaWZpZXIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAwkBASEBBQlhZGRyZXNzT0sJAAIBCQCsAgICF3ZlcmlmaWVyIHdyb25nIGFkZHJlc3MgBQh2ZXJpZmllcgMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMCCHZlcmlmaWVyCQACAQIYdmVyaWZpZXIgYWxyZWFkeSBkZWZpbmVkCQDMCAIJAQtTdHJpbmdFbnRyeQICCHZlcmlmaWVyBQh2ZXJpZmllcgUDbmlsAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAkAnQgCBQR0aGlzAgh2ZXJpZmllcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcECHZlcmlmaWVyBQckbWF0Y2gwCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCHZlcmlmaWVyCQCsAgIJAKwCAgkArAICAgdzdGF0dXNfCQClCAEFBHRoaXMCAV8JANgEAQgFAnR4AmlkBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleWNwgbA=", "chainId": 84, "height": 2296459, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AmkwiMwGk537QJXeqwLRYHMS59Y6nM6nsfnoYV8Zxcou Next: none Diff:
OldNewDifferences
206206 }
207207
208208
209-func ax () = {
209+let ax = {
210210 let ay = B
211211 let az = y
212212 if ((ay > P))
219219 }
220220 else az
221221 }
222-
223222
224223 func aC (T) = {
225224 func U (V,W) = (V + W)
259258
260259 let aE = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
261260
262-func aF (aG,aH) = {
263- let aI = aC(aG)
264- if ((toInt(aI) == 0))
261+func aF (aG,ax) = {
262+ let aH = aC(aG)
263+ if ((toInt(aH) == 0))
265264 then 0
266265 else {
267- let aJ = (aH * a)
268- let aK = fraction(toBigInt(aJ), aI, L)
269- let aL = toBigInt((aJ - 1))
270- let aM = aD(aG)
271- let aN = (a + 1)
272- let aO = toBigInt(aN)
273- func aP (W) = {
266+ let aI = (ax * a)
267+ let aJ = fraction(toBigInt(aI), aH, L)
268+ let aK = toBigInt((aI - 1))
269+ let aL = aD(aG)
270+ let aM = (a + 1)
271+ let aN = toBigInt(aM)
272+ func aO (W) = {
274273 func U (V,al) = fraction(V, W, L)
275274
276275 let X = an
287286 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
288287 }
289288
290- func aQ (V,aR) = if ((V._2 == true))
289+ func aP (V,aQ) = if ((V._2 == true))
291290 then V
292291 else {
293- let aS = V._1
294- let aT = fraction(aP(aS), L, aM)
295- let aU = fraction((aK + fraction(b, aT, L)), aS, (fraction(aL, aS, L) + fraction(aO, aT, L)))
296- if ((aU > aS))
297- then if ((1 >= toInt((aU - aS))))
298- then $Tuple2(aU, true)
299- else $Tuple2(aU, false)
300- else if ((1 >= toInt((aS - aU))))
301- then $Tuple2(aU, true)
302- else $Tuple2(aU, false)
292+ let aR = V._1
293+ let aS = fraction(aO(aR), L, aL)
294+ let aT = fraction((aJ + fraction(b, aS, L)), aR, (fraction(aK, aR, L) + fraction(aN, aS, L)))
295+ if ((aT > aR))
296+ then if ((1 >= toInt((aT - aR))))
297+ then $Tuple2(aT, true)
298+ else $Tuple2(aT, false)
299+ else if ((1 >= toInt((aR - aT))))
300+ then $Tuple2(aT, true)
301+ else $Tuple2(aT, false)
303302 }
304303
305- let aV = {
304+ let aU = {
306305 let X = aE
307306 let Y = size(X)
308- let Z = $Tuple2(aI, false)
307+ let Z = $Tuple2(aH, false)
309308 func aa (ab,ac) = if ((ac >= Y))
310309 then ab
311- else aQ(ab, X[ac])
310+ else aP(ab, X[ac])
312311
313312 func ad (ab,ac) = if ((ac >= Y))
314313 then ab
316315
317316 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
318317 }
319- let aU = aV._1
320- let aW = aV._2
321- if ((aW == false))
322- then throw(("D_proc() not finished with " + toString(aU)))
323- else toInt(aU)
318+ let aT = aU._1
319+ let aV = aU._2
320+ if ((aV == false))
321+ then throw(("D_proc() not finished with " + toString(aT)))
322+ else toInt(aT)
324323 }
325324 }
326325
327326
328-func aX (au,aY,aZ,aG) = if (Q((au != aY)))
327+func aW (au,aX,aY,aG) = if (Q((au != aX)))
329328 then throw("same coin")
330- else if (Q(if ((aY >= 0))
329+ else if (Q(if ((aX >= 0))
331330 then (au >= 0)
332331 else false))
333332 then throw("below zero")
334- else if (Q(if ((a > aY))
333+ else if (Q(if ((a > aX))
335334 then (a > au)
336335 else false))
337336 then throw("above N_COINS")
338337 else {
339- let aH = ax()
340- let aU = aF(aG, aH)
341- let ba = toBigInt(aU)
342- let bb = toBigInt((aH * a))
343- func bc (V,al) = {
344- let bd = V
345- let be = bd._1
346- let bf = bd._2
347- let bg = if ((al == au))
348- then toBigInt(fraction(aZ, e, ag[al]))
338+ let aT = aF(aG, ax)
339+ let aZ = toBigInt(aT)
340+ let ba = toBigInt((ax * a))
341+ func bb (V,al) = {
342+ let bc = V
343+ let bd = bc._1
344+ let be = bc._2
345+ let bf = if ((al == au))
346+ then toBigInt(fraction(aY, e, ag[al]))
349347 else aG[al]
350- if ((al != aY))
351- then $Tuple2((be + bg), fraction(bf, ba, fraction(bg, b, L)))
352- else $Tuple2(be, bf)
348+ if ((al != aX))
349+ then $Tuple2((bd + bf), fraction(be, aZ, fraction(bf, b, L)))
350+ else $Tuple2(bd, be)
353351 }
354352
355- let bh = {
353+ let bg = {
356354 let X = am
357355 let Y = size(X)
358- let Z = $Tuple2(K, ba)
356+ let Z = $Tuple2(K, aZ)
359357 func aa (ab,ac) = if ((ac >= Y))
360358 then ab
361- else bc(ab, X[ac])
359+ else bb(ab, X[ac])
362360
363361 func ad (ab,ac) = if ((ac >= Y))
364362 then ab
366364
367365 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
368366 }
369- let be = bh._1
370- let bi = bh._2
371- let bf = fraction(bi, ba, fraction(bb, b, L))
372- let bj = ((be + fraction(ba, L, bb)) - ba)
373- func bk (V,aR) = if ((V._2 == true))
367+ let bd = bg._1
368+ let bh = bg._2
369+ let be = fraction(bh, aZ, fraction(ba, b, L))
370+ let bi = ((bd + fraction(aZ, L, ba)) - aZ)
371+ func bj (V,aQ) = if ((V._2 == true))
374372 then V
375373 else {
376- let bl = V._1
377- let bm = fraction((fraction(bl, bl, L) + bf), L, (fraction(M, bl, L) + bj))
378- if ((bm > bl))
379- then if ((1 >= toInt((bm - bl))))
380- then $Tuple2(bm, true)
381- else $Tuple2(bm, false)
382- else if ((1 >= toInt((bl - bm))))
383- then $Tuple2(bm, true)
384- else $Tuple2(bm, false)
374+ let bk = V._1
375+ let bl = fraction((fraction(bk, bk, L) + be), L, (fraction(M, bk, L) + bi))
376+ if ((bl > bk))
377+ then if ((1 >= toInt((bl - bk))))
378+ then $Tuple2(bl, true)
379+ else $Tuple2(bl, false)
380+ else if ((1 >= toInt((bk - bl))))
381+ then $Tuple2(bl, true)
382+ else $Tuple2(bl, false)
385383 }
386384
387- let bn = {
385+ let bm = {
388386 let X = aE
389387 let Y = size(X)
390- let Z = $Tuple2(ba, false)
388+ let Z = $Tuple2(aZ, false)
389+ func bn (ab,ac) = if ((ac >= Y))
390+ then ab
391+ else bj(ab, X[ac])
392+
391393 func bo (ab,ac) = if ((ac >= Y))
392- then ab
393- else bk(ab, X[ac])
394-
395- func bp (ab,ac) = if ((ac >= Y))
396394 then ab
397395 else throw("List size exceeds 16")
398396
399- bp(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
397+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
400398 }
401- let bm = bn._1
402- let aW = bn._2
403- if ((aW == false))
404- then throw(("y_proc() not finished with " + toString(bm)))
405- else $Tuple2(fraction(toInt(bm), ag[aY], e), aU)
399+ let bl = bm._1
400+ let aV = bm._2
401+ if ((aV == false))
402+ then throw(("y_proc() not finished with " + toString(bl)))
403+ else $Tuple2(fraction(toInt(bl), ag[aX], e), aT)
406404 }
407405
408406
409-func bq (aH,au,aG,aU) = if (Q((au >= 0)))
407+func bp (ax,au,aG,aT) = if (Q((au >= 0)))
410408 then throw("i below zero")
411409 else if (Q((a > au)))
412410 then throw("i above N_COINS")
413411 else {
414- let ba = toBigInt(aU)
415- let bb = toBigInt((aH * a))
416- func bc (V,al) = {
417- let br = V
418- let be = br._1
419- let bf = br._2
420- let bg = if ((al == au))
412+ let aZ = toBigInt(aT)
413+ let ba = toBigInt((ax * a))
414+ func bb (V,al) = {
415+ let bq = V
416+ let bd = bq._1
417+ let be = bq._2
418+ let bf = if ((al == au))
421419 then K
422420 else aG[al]
423421 if ((al != au))
424- then $Tuple2((be + bg), fraction(bf, ba, fraction(bg, b, L)))
425- else $Tuple2(be, bf)
422+ then $Tuple2((bd + bf), fraction(be, aZ, fraction(bf, b, L)))
423+ else $Tuple2(bd, be)
426424 }
427425
428- let bs = {
426+ let br = {
429427 let X = am
430428 let Y = size(X)
431- let Z = $Tuple2(K, ba)
429+ let Z = $Tuple2(K, aZ)
432430 func aa (ab,ac) = if ((ac >= Y))
433431 then ab
434- else bc(ab, X[ac])
432+ else bb(ab, X[ac])
435433
436434 func ad (ab,ac) = if ((ac >= Y))
437435 then ab
439437
440438 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
441439 }
442- let be = bs._1
443- let bi = bs._2
444- let bf = fraction(bi, ba, fraction(bb, b, L))
445- let bj = ((be + fraction(ba, L, bb)) - ba)
446- func bk (V,aR) = if ((V._2 == true))
440+ let bd = br._1
441+ let bh = br._2
442+ let be = fraction(bh, aZ, fraction(ba, b, L))
443+ let bi = ((bd + fraction(aZ, L, ba)) - aZ)
444+ func bj (V,aQ) = if ((V._2 == true))
447445 then V
448446 else {
449- let bl = V._1
450- let bm = fraction((fraction(bl, bl, L) + bf), L, (fraction(M, bl, L) + bj))
451- if ((bm > bl))
452- then if ((1 >= toInt((bm - bl))))
453- then $Tuple2(bm, true)
454- else $Tuple2(bm, false)
455- else if ((1 >= toInt((bl - bm))))
456- then $Tuple2(bm, true)
457- else $Tuple2(bm, false)
447+ let bk = V._1
448+ let bl = fraction((fraction(bk, bk, L) + be), L, (fraction(M, bk, L) + bi))
449+ if ((bl > bk))
450+ then if ((1 >= toInt((bl - bk))))
451+ then $Tuple2(bl, true)
452+ else $Tuple2(bl, false)
453+ else if ((1 >= toInt((bk - bl))))
454+ then $Tuple2(bl, true)
455+ else $Tuple2(bl, false)
458456 }
459457
460- let bt = {
458+ let bs = {
461459 let X = aE
462460 let Y = size(X)
463- let Z = $Tuple2(ba, false)
461+ let Z = $Tuple2(aZ, false)
462+ func bn (ab,ac) = if ((ac >= Y))
463+ then ab
464+ else bj(ab, X[ac])
465+
464466 func bo (ab,ac) = if ((ac >= Y))
465- then ab
466- else bk(ab, X[ac])
467-
468- func bp (ab,ac) = if ((ac >= Y))
469467 then ab
470468 else throw("List size exceeds 16")
471469
472- bp(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
470+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
473471 }
474- let bm = bt._1
475- let aW = bt._2
476- if ((aW == false))
477- then throw(("y_proc() not finished with " + toString(bm)))
478- else fraction(toInt(bm), ag[au], e)
472+ let bl = bs._1
473+ let aV = bs._2
474+ if ((aV == false))
475+ then throw(("y_proc() not finished with " + toString(bl)))
476+ else fraction(toInt(bl), ag[au], e)
479477 }
480478
481479
482-func bu (bv,au) = {
483- let aH = ax()
484- let bw = ((r * a) / (4 * (a - 1)))
480+func bt (bu,au) = {
481+ let bv = ((r * a) / (4 * (a - 1)))
485482 let aG = ao(af)
486- let bx = aF(aG, aH)
487- let by = (bx - fraction(bv, bx, w))
488- let bz = bq(aH, au, aG, by)
489- let bA = (af[au] - bz)
483+ let bw = aF(aG, ax)
484+ let bx = (bw - fraction(bu, bw, w))
485+ let by = bp(ax, au, aG, bx)
486+ let bz = (af[au] - by)
490487 func U (V,al) = {
491- let bB = af[al]
492- let bC = if ((al == au))
493- then (fraction(bB, by, bx) - bz)
494- else (bB - fraction(bB, by, bx))
495- (V :+ (bB - fraction(bw, bC, f)))
488+ let bA = af[al]
489+ let bB = if ((al == au))
490+ then (fraction(bA, bx, bw) - by)
491+ else (bA - fraction(bA, bx, bw))
492+ (V :+ (bA - fraction(bv, bB, f)))
496493 }
497494
498- let bD = {
495+ let bC = {
499496 let X = am
500497 let Y = size(X)
501498 let Z = nil
509506
510507 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
511508 }
512- let bE = bD[au]
513- let bF = ((bE - bq(aH, au, ao(bD), by)) - 1)
514- $Tuple3(bF, (bA - bF), bx)
509+ let bD = bC[au]
510+ let bE = ((bD - bp(ax, au, ao(bC), bx)) - 1)
511+ $Tuple3(bE, (bz - bE), bw)
515512 }
516513
517514
518-func bG (aU) = fraction(aU, p, w)
515+func bF (aT) = fraction(aT, p, w)
519516
520517
521-func bH (aU,bI) = {
522- let bJ = (parseBigIntValue(valueOrElse(getString("vol"), "0")) + toBigInt(bI))
523- let bK = toString(bJ)
524- ([StringEntry("vol", bK)] ++ {
525- let bL = toString((lastBlock.timestamp / o))
526- let bM = ("log_" + bL)
527- if (isDefined(getString(bM)))
518+func bG (aT,bH) = {
519+ let bI = (parseBigIntValue(valueOrElse(getString("vol"), "0")) + toBigInt(bH))
520+ let bJ = toString(bI)
521+ ([StringEntry("vol", bJ)] ++ {
522+ let bK = toString((lastBlock.timestamp / o))
523+ let bL = ("log_" + bK)
524+ if (isDefined(getString(bL)))
528525 then nil
529- else [StringEntry(bM, ((((toString(bG(aU)) + "_") + bK) + "_") + toString(lastBlock.timestamp)))]
526+ else [StringEntry(bL, ((((toString(bF(aT)) + "_") + bJ) + "_") + toString(lastBlock.timestamp)))]
530527 })
531528 }
532529
533530
534-func bN (bO) = {
535- func U (bP,bQ) = if ((bP != ""))
536- then bP
531+func bM (bN) = {
532+ func U (bO,bP) = if ((bO != ""))
533+ then bO
537534 else {
538- let bM = ("log_" + toString((bO - bQ)))
539- valueOrElse(getString(bM), "")
535+ let bL = ("log_" + toString((bN - bP)))
536+ valueOrElse(getString(bL), "")
540537 }
541538
542- let bR = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
543- let bS = [-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30]
544- let bT = {
545- let X = bR
539+ let bQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
540+ let bR = [-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30]
541+ let bS = {
542+ let X = bQ
546543 let Y = size(X)
547544 let Z = ""
548545 func aa (ab,ac) = if ((ac >= Y))
555552
556553 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
557554 }
558- if ((bT != ""))
559- then bT
555+ if ((bS != ""))
556+ then bS
560557 else {
561- let X = bS
558+ let X = bR
562559 let Y = size(X)
563560 let Z = ""
564- func bo (ab,ac) = if ((ac >= Y))
561+ func bn (ab,ac) = if ((ac >= Y))
565562 then ab
566563 else U(ab, X[ac])
567564
568- func bp (ab,ac) = if ((ac >= Y))
565+ func bo (ab,ac) = if ((ac >= Y))
569566 then ab
570567 else throw("List size exceeds 30")
571568
572- bp(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
569+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
573570 }
574571 }
575572
576573
577-func bU (bV) = {
578- let bW = bG(aF(ao(af), ax()))
579- let bX = lastBlock.timestamp
580- let aB = if ((0 >= bV))
581- then (bX + bV)
582- else bV
583- let bY = (aB / o)
584- let bP = bN(bY)
585- if ((bP == ""))
586- then $Tuple3(bW, bW, 0)
574+func bT (bU) = {
575+ let bV = bF(aF(ao(af), ax))
576+ let bW = lastBlock.timestamp
577+ let aB = if ((0 >= bU))
578+ then (bW + bU)
579+ else bU
580+ let bX = (aB / o)
581+ let bO = bM(bX)
582+ if ((bO == ""))
583+ then $Tuple3(bV, bV, 0)
587584 else {
588- let bZ = split(bP, "_")
589- let ca = parseIntValue(bZ[0])
590- let cb = parseIntValue(bZ[2])
591- $Tuple3(bW, ca, (bX - cb))
585+ let bY = split(bO, "_")
586+ let bZ = parseIntValue(bY[0])
587+ let ca = parseIntValue(bY[2])
588+ $Tuple3(bV, bZ, (bW - ca))
592589 }
593590 }
594591
595592
596-func cc (bV) = {
597- let cd = parseBigIntValue(valueOrElse(getString("vol"), "0"))
598- let ce = lastBlock.timestamp
599- let aB = if ((0 >= bV))
600- then (ce + bV)
601- else bV
602- let bY = (aB / o)
603- let bP = bN(bY)
604- if ((bP == ""))
605- then $Tuple3(cd, cd, 0)
593+func cb (bU) = {
594+ let cc = parseBigIntValue(valueOrElse(getString("vol"), "0"))
595+ let cd = lastBlock.timestamp
596+ let aB = if ((0 >= bU))
597+ then (cd + bU)
598+ else bU
599+ let bX = (aB / o)
600+ let bO = bM(bX)
601+ if ((bO == ""))
602+ then $Tuple3(cc, cc, 0)
606603 else {
607- let bZ = split(bP, "_")
608- let cf = parseBigIntValue(bZ[1])
609- let cg = parseIntValue(bZ[2])
610- $Tuple3(cd, cf, (ce - cg))
604+ let bY = split(bO, "_")
605+ let ce = parseBigIntValue(bY[1])
606+ let cf = parseIntValue(bY[2])
607+ $Tuple3(cc, ce, (cd - cf))
611608 }
612609 }
613610
614611
615-@Callable(ch)
616-func init (ci,cj,ck,ax,bw,cl) = if (!(isDataStorageUntouched(this)))
612+func cg (ch) = {
613+ let bw = if ((w == 0))
614+ then 0
615+ else aF(ao(af), ax)
616+ let bx = aF(ao(ch), ax)
617+ if (Q((bx > bw)))
618+ then throw("D1 > D0")
619+ else {
620+ let ci = if ((w > 0))
621+ then {
622+ func cj (ck,cl) = {
623+ let bv = ((r * a) / (4 * (a - 1)))
624+ let ak = size(ck)
625+ func U (V,al) = {
626+ let cm = ck[al]
627+ let cn = cl[al]
628+ let co = fraction(bx, cm, bw)
629+ let cp = if ((co > cn))
630+ then (co - cn)
631+ else (cn - co)
632+ let cq = fraction(bv, cp, f)
633+ let cr = fraction(cq, s, f)
634+ $Tuple4((V._1 :+ (cn - cr)), (V._2 :+ (cn - cq)), if (if (t)
635+ then (cr > 0)
636+ else false)
637+ then (V._3 :+ ScriptTransfer(u, cr, fromBase58String(q[al])))
638+ else V._3, (V._4 + fraction(cq, e, ag[al])))
639+ }
640+
641+ let X = am
642+ let Y = size(X)
643+ let Z = $Tuple4(nil, nil, nil, 0)
644+ func aa (ab,ac) = if ((ac >= Y))
645+ then ab
646+ else U(ab, X[ac])
647+
648+ func ad (ab,ac) = if ((ac >= Y))
649+ then ab
650+ else throw("List size exceeds 10")
651+
652+ ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
653+ }
654+
655+ let cs = cj(af, ch)
656+ let ct = cs._1
657+ let cu = cs._2
658+ let cv = cs._3
659+ let cw = cs._4
660+ $Tuple3(ct, aF(ao(cu), ax), (cv ++ bG(bw, fraction(cw, f, r))))
661+ }
662+ else $Tuple3(ch, bx, nil)
663+ let cx = ci._1
664+ let cy = ci._2
665+ let cz = ci._3
666+ let cA = if ((w == 0))
667+ then bx
668+ else fraction(w, (cy - bw), bw)
669+ $Tuple3(cx, cA, cz)
670+ }
671+ }
672+
673+
674+@Callable(cB)
675+func init (cC,cD,cE,cF,bv,cG) = if (!(isDataStorageUntouched(this)))
617676 then throw("already initialized")
618- else if ((ch.caller != this))
677+ else if ((cB.caller != this))
619678 then throw("self initialization only")
620679 else {
621- let cm = split(cj, ",")
622- let ak = size(cm)
680+ let cH = split(cD, ",")
681+ let ak = size(cH)
623682 if ((2 > ak))
624683 then throw("too small coins")
625684 else if ((ak > c))
626685 then throw("too many coins")
627686 else {
628- func cn (V,al) = if (if ((al >= ak))
687+ func cI (V,al) = if (if ((al >= ak))
629688 then true
630689 else (V == false))
631690 then V
632- else (indexOf(cm, cm[al]) == al)
691+ else (indexOf(cH, cH[al]) == al)
633692
634693 if ((false == {
635694 let X = ai
637696 let Z = true
638697 func aa (ab,ac) = if ((ac >= Y))
639698 then ab
640- else cn(ab, X[ac])
699+ else cI(ab, X[ac])
641700
642701 func ad (ab,ac) = if ((ac >= Y))
643702 then ab
647706 }))
648707 then throw("duplicate coin detected")
649708 else {
650- func co (cp) = valueOrErrorMessage(assetInfo(valueOrErrorMessage(fromBase58String(cp), ("fromBase58String: " + cp))), ("assetInfo: " + cp)).decimals
709+ func cJ (cK) = valueOrErrorMessage(assetInfo(valueOrErrorMessage(fromBase58String(cK), ("fromBase58String: " + cK))), ("assetInfo: " + cK)).decimals
651710
652- func U (V,cp) = $Tuple3((V._1 + 1), (V._2 :+ 0), (V._3 :+ pow(10, 0, co(cp), 0, 0, DOWN)))
711+ func U (V,cK) = $Tuple3((V._1 + 1), (V._2 :+ 0), (V._3 :+ pow(10, 0, cJ(cK), 0, 0, DOWN)))
653712
654- let cq = {
655- let X = cm
713+ let cL = {
714+ let X = cH
656715 let Y = size(X)
657716 let Z = $Tuple3(0, nil, nil)
658717 func aa (ab,ac) = if ((ac >= Y))
665724
666725 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
667726 }
668- let cr = cq._1
669- let cs = cq._2
670- let ct = cq._3
671- let cu = Issue(ck, ("LP token for " + cj), 0, d, true)
672- let cv = toBase58String(calculateAssetId(cu))
673-[StringEntry("coins", cj), StringEntry("rates", makeString(S(ct), ",")), StringEntry("balances", makeString(S(cs), ",")), IntegerEntry("N_COINS", cr), IntegerEntry("initial_A", ax), IntegerEntry("future_A", ax), IntegerEntry("fee", bw), IntegerEntry("admin_fee", cl), StringEntry("owner", av(ci)), IntegerEntry("kill_deadline", (height + J)), StringEntry("token", cv), BooleanEntry("is_killed", false), BooleanEntry("is_auto_fees", true), cu]
727+ let cM = cL._1
728+ let cN = cL._2
729+ let cO = cL._3
730+ let cP = Issue(cE, ("LP token for " + cD), 0, d, true)
731+ let cQ = toBase58String(calculateAssetId(cP))
732+[StringEntry("coins", cD), StringEntry("rates", makeString(S(cO), ",")), StringEntry("balances", makeString(S(cN), ",")), IntegerEntry("N_COINS", cM), IntegerEntry("initial_A", cF), IntegerEntry("future_A", cF), IntegerEntry("fee", bv), IntegerEntry("admin_fee", cG), StringEntry("owner", av(cC)), IntegerEntry("kill_deadline", (height + J)), StringEntry("token", cQ), BooleanEntry("is_killed", false), BooleanEntry("is_auto_fees", true), cP]
674733 }
675734 }
676735 }
677736
678737
679738
680-@Callable(ch)
681-func add_liquidity (cw) = if (Q(!(H)))
739+@Callable(cB)
740+func add_liquidity (cR) = if (Q(!(H)))
682741 then throw("is killed")
683742 else {
684- let aH = ax()
685- let cx = w
686- let bx = if ((cx == 0))
687- then 0
688- else aF(ao(af), aH)
689- func cy (cz,cA,cB) = {
690- func U (V,al) = (V :+ (cz[al] + (if ((al == cA))
691- then cB
743+ func cS (cT,cU,cV) = {
744+ func U (V,al) = (V :+ (cT[al] + (if ((al == cU))
745+ then cV
692746 else 0)))
693747
694748 let X = am
705759 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
706760 }
707761
708- func cC (cz,cD) = {
709- let ak = size(cD)
762+ func cW (cT,cX) = {
763+ let ak = size(cX)
710764 if ((1 > ak))
711765 then throw("payments size < 1")
712766 else if ((ak > c))
713767 then throw("payments size > N_COINS_MAX")
714768 else {
715- func U (V,aq) = cy(V, ap(aq), aq.amount)
769+ func U (V,aq) = cS(V, ap(aq), aq.amount)
716770
717- let X = cD
771+ let X = cX
718772 let Y = size(X)
719- let Z = cz
773+ let Z = cT
720774 func aa (ab,ac) = if ((ac >= Y))
721775 then ab
722776 else U(ab, X[ac])
729783 }
730784 }
731785
732- let cE = cC(af, ch.payments)
733- if (if ((cx == 0))
734- then (min(cE) == 0)
786+ let ch = cW(af, cB.payments)
787+ if (if ((w == 0))
788+ then (min(ch) == 0)
735789 else false)
736790 then throw("initial deposit requires all coins")
737791 else {
738- let by = aF(ao(cE), aH)
739- if (Q((by > bx)))
740- then throw("D1 > D0")
741- else {
742- let cF = if ((cx > 0))
743- then {
744- func cG (cH,cI) = {
745- let bw = ((r * a) / (4 * (a - 1)))
746- let ak = size(cH)
747- func U (V,al) = {
748- let cJ = cH[al]
749- let cK = cI[al]
750- let cL = fraction(by, cJ, bx)
751- let cM = if ((cL > cK))
752- then (cL - cK)
753- else (cK - cL)
754- let cN = fraction(bw, cM, f)
755- let cO = fraction(cN, s, f)
756- $Tuple4((V._1 :+ (cK - cO)), (V._2 :+ (cK - cN)), if (if (t)
757- then (cO > 0)
758- else false)
759- then (V._3 :+ ScriptTransfer(u, cO, fromBase58String(q[al])))
760- else V._3, (V._4 + fraction(cN, e, ag[al])))
761- }
762-
763- let X = am
764- let Y = size(X)
765- let Z = $Tuple4(nil, nil, nil, 0)
766- func aa (ab,ac) = if ((ac >= Y))
767- then ab
768- else U(ab, X[ac])
769-
770- func ad (ab,ac) = if ((ac >= Y))
771- then ab
772- else throw("List size exceeds 10")
773-
774- ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
775- }
776-
777- let cP = cG(af, cE)
778- let cQ = cP._1
779- let cR = cP._2
780- let cS = cP._3
781- let cT = cP._4
782- $Tuple3(cQ, aF(ao(cR), aH), (cS ++ bH(bx, fraction(cT, f, r))))
783- }
784- else $Tuple3(cE, by, nil)
785- let cU = cF._1
786- let cV = cF._2
787- let cW = cF._3
788- let cX = if ((cx == 0))
789- then by
790- else fraction(cx, (cV - bx), bx)
791- if (Q((cX >= cw)))
792- then throw("slippage screwed you")
793- else ([StringEntry("balances", makeString(S(cU), ",")), Reissue(v, cX, true), ScriptTransfer(ch.caller, cX, v)] ++ cW)
794- }
792+ let cY = cg(ch)
793+ let cx = cY._1
794+ let cA = cY._2
795+ let cz = cY._3
796+ if (Q((cA >= cR)))
797+ then throw("slippage screwed you")
798+ else ([StringEntry("balances", makeString(S(cx), ",")), Reissue(v, cA, true), ScriptTransfer(cB.caller, cA, v)] ++ cz)
795799 }
796800 }
797801
798802
799803
800-@Callable(ch)
801-func get_dy (au,aY,cY) = {
802- let cZ = af[au]
803- let bB = af[aY]
804- let aZ = (cZ + cY)
805- let da = aX(au, aY, aZ, ao(af))
806- let bm = da._1
807- let aU = da._2
808- let db = ((bB - bm) - 1)
809- let dc = fraction(db, r, f)
810- let bF = (db - dc)
811- $Tuple2(nil, bF)
804+@Callable(cB)
805+func get_dy (au,aX,cZ) = {
806+ let da = af[au]
807+ let bA = af[aX]
808+ let aY = (da + cZ)
809+ let db = aW(au, aX, aY, ao(af))
810+ let bl = db._1
811+ let aT = db._2
812+ let dc = ((bA - bl) - 1)
813+ let dd = fraction(dc, r, f)
814+ let bE = (dc - dd)
815+ $Tuple2(nil, bE)
812816 }
813817
814818
815819
816-@Callable(ch)
817-func exchange (aY,dd) = if (Q(!(H)))
820+@Callable(cB)
821+func exchange (aX,de) = if (Q(!(H)))
818822 then throw("is killed")
819- else if ((size(ch.payments) != 1))
823+ else if ((size(cB.payments) != 1))
820824 then throw("size( payments ) != 1")
821825 else {
822- let aq = ch.payments[0]
823- let cY = aq.amount
826+ let aq = cB.payments[0]
827+ let cZ = aq.amount
824828 let au = ap(aq)
825- let cZ = af[au]
826- let bB = af[aY]
827- let aZ = (cZ + cY)
828- let de = aX(au, aY, aZ, ao(af))
829- let bm = de._1
830- let aU = de._2
831- let db = ((bB - bm) - 1)
832- let dc = fraction(db, r, f)
833- let bF = (db - dc)
834- if (Q((bF >= dd)))
829+ let da = af[au]
830+ let bA = af[aX]
831+ let aY = (da + cZ)
832+ let df = aW(au, aX, aY, ao(af))
833+ let bl = df._1
834+ let aT = df._2
835+ let dc = ((bA - bl) - 1)
836+ let dd = fraction(dc, r, f)
837+ let bE = (dc - dd)
838+ if (Q((bE >= de)))
835839 then throw("exchange resulted in fewer coins than expected")
836840 else {
837- let df = fraction(dc, s, f)
841+ let dg = fraction(dd, s, f)
838842 func U (V,al) = (V :+ (if ((al == au))
839- then (af[al] + cY)
840- else if ((al == aY))
841- then ((af[al] - bF) - df)
843+ then (af[al] + cZ)
844+ else if ((al == aX))
845+ then ((af[al] - bE) - dg)
842846 else af[al]))
843847
844- let cU = {
848+ let cx = {
845849 let X = am
846850 let Y = size(X)
847851 let Z = nil
855859
856860 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
857861 }
858- let dg = fromBase58String(q[aY])
859- $Tuple2((([StringEntry("balances", makeString(S(cU), ",")), ScriptTransfer(ch.caller, bF, dg)] ++ (if (if (t)
860- then (df > 0)
862+ let dh = fromBase58String(q[aX])
863+ $Tuple2((([StringEntry("balances", makeString(S(cx), ",")), ScriptTransfer(cB.caller, bE, dh)] ++ (if (if (t)
864+ then (dg > 0)
861865 else false)
862- then [ScriptTransfer(u, df, dg)]
863- else nil)) ++ bH(aU, fraction(cY, e, ag[au]))), bF)
866+ then [ScriptTransfer(u, dg, dh)]
867+ else nil)) ++ bG(aT, fraction(cZ, e, ag[au]))), bE)
864868 }
865869 }
866870
867871
868872
869-@Callable(ch)
870-func remove_liquidity (dh) = if ((size(ch.payments) != 1))
873+@Callable(cB)
874+func remove_liquidity (di) = if ((size(cB.payments) != 1))
871875 then throw("size( payments ) != 1")
872876 else {
873- let aq = ch.payments[0]
877+ let aq = cB.payments[0]
874878 if ((aq.assetId != v))
875879 then throw("unknown token")
876880 else {
877- let di = if ((dh == "0"))
881+ let dj = if ((di == "0"))
878882 then nil
879- else ae(split(dh, ","))
880- if (if ((dh != "0"))
881- then (size(di) != a)
883+ else ae(split(di, ","))
884+ if (if ((di != "0"))
885+ then (size(dj) != a)
882886 else false)
883887 then throw("min_amounts.size() != N_COINS")
884888 else {
885- let cB = aq.amount
886- let dj = ch.caller
889+ let cV = aq.amount
890+ let dk = cB.caller
887891 func U (V,al) = {
888- let dk = af[al]
889- let dl = fraction(dk, cB, w)
890- if (if ((dh != "0"))
891- then (di[al] > dl)
892+ let dl = af[al]
893+ let dm = fraction(dl, cV, w)
894+ if (if ((di != "0"))
895+ then (dj[al] > dm)
892896 else false)
893897 then throw("withdrawal resulted in fewer coins than expected")
894- else $Tuple2((V._1 :+ ScriptTransfer(dj, dl, fromBase58String(q[al]))), (V._2 :+ (dk - dl)))
898+ else $Tuple2((V._1 :+ ScriptTransfer(dk, dm, fromBase58String(q[al]))), (V._2 :+ (dl - dm)))
895899 }
896900
897- let dm = {
901+ let dn = {
898902 let X = am
899903 let Y = size(X)
900904 let Z = $Tuple2(nil, nil)
908912
909913 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
910914 }
911- let dn = dm._1
912- let cU = dm._2
913- (dn ++ [StringEntry("balances", makeString(S(cU), ",")), Burn(v, cB)])
915+ let do = dn._1
916+ let cx = dn._2
917+ (do ++ [StringEntry("balances", makeString(S(cx), ",")), Burn(v, cV)])
914918 }
915919 }
916920 }
917921
918922
919923
920-@Callable(ch)
921-func calc_withdraw_one_coin (bv,au) = $Tuple2(nil, bu(bv, au)._1)
924+@Callable(cB)
925+func calc_withdraw_one_coin (bu,au) = $Tuple2(nil, bt(bu, au)._1)
922926
923927
924928
925-@Callable(ch)
926-func remove_liquidity_one_coin (au,do) = if (Q(!(H)))
929+@Callable(cB)
930+func remove_liquidity_one_coin (au,dp) = if (Q(!(H)))
927931 then throw("is killed")
928- else if ((size(ch.payments) != 1))
932+ else if ((size(cB.payments) != 1))
929933 then throw("size( payments ) != 1")
930934 else {
931- let aq = ch.payments[0]
935+ let aq = cB.payments[0]
932936 if ((aq.assetId != v))
933937 then throw("unknown token")
934938 else {
935- let bv = aq.amount
936- let dp = bu(bv, au)
937- let bF = dp._1
938- let dc = dp._2
939- let aU = dp._3
940- if (Q((bF >= do)))
939+ let bu = aq.amount
940+ let dq = bt(bu, au)
941+ let bE = dq._1
942+ let dd = dq._2
943+ let aT = dq._3
944+ if (Q((bE >= dp)))
941945 then throw("not enough coins removed")
942946 else {
943- let df = fraction(dc, s, f)
944- let dq = (bF + df)
947+ let dg = fraction(dd, s, f)
948+ let dr = (bE + dg)
945949 func U (V,al) = (V :+ (af[al] - (if ((al == au))
946- then dq
950+ then dr
947951 else 0)))
948952
949- let cU = {
953+ let cx = {
950954 let X = am
951955 let Y = size(X)
952956 let Z = nil
960964
961965 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
962966 }
963- let dg = fromBase58String(q[au])
964- $Tuple2((([StringEntry("balances", makeString(S(cU), ",")), ScriptTransfer(ch.caller, bF, dg), Burn(v, bv)] ++ (if (if (t)
965- then (df > 0)
967+ let dh = fromBase58String(q[au])
968+ $Tuple2((([StringEntry("balances", makeString(S(cx), ",")), ScriptTransfer(cB.caller, bE, dh), Burn(v, bu)] ++ (if (if (t)
969+ then (dg > 0)
966970 else false)
967- then [ScriptTransfer(u, df, dg)]
968- else nil)) ++ bH(aU, fraction(fraction(dc, e, ag[au]), f, r))), bF)
971+ then [ScriptTransfer(u, dg, dh)]
972+ else nil)) ++ bG(aT, fraction(fraction(dd, e, ag[au]), f, r))), bE)
969973 }
970974 }
971975 }
972976
973977
974978
975-@Callable(ch)
976-func A () = $Tuple2(nil, ax())
979+@Callable(cB)
980+func A () = $Tuple2(nil, ax)
977981
978982
979983
980-@Callable(ch)
984+@Callable(cB)
981985 func get_virtual_price () = {
982- let aU = aF(ao(af), ax())
983- $Tuple2(nil, bG(aU))
986+ let aT = aF(ao(af), ax)
987+ $Tuple2(nil, bF(aT))
984988 }
985989
986990
987991
988-@Callable(ch)
989-func calc_token_amount (dr,ds) = {
990- let dt = ae(split(dr, ","))
992+@Callable(cB)
993+func calc_token_amount (ds) = {
994+ let dt = ae(split(ds, ","))
991995 if ((size(dt) != a))
992996 then throw("not enought amounts")
993997 else {
994- let aH = ax()
995- let bx = aF(ao(dt), aH)
996- func U (V,al) = (V :+ (af[al] + (if (ds)
997- then dt[al]
998- else -(dt[al]))))
998+ func U (V,al) = (V :+ (af[al] + dt[al]))
999999
1000- let cE = {
1000+ let ch = {
10011001 let X = am
10021002 let Y = size(X)
10031003 let Z = nil
10111011
10121012 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10131013 }
1014- let by = aF(ao(cE), aH)
1015- let du = w
1016- let dv = if (ds)
1017- then (by - bx)
1018- else (bx - by)
1019- $Tuple2(nil, fraction(dv, du, bx))
1014+ let du = cg(ch)
1015+ let cx = du._1
1016+ let cA = du._2
1017+ let cz = du._3
1018+ $Tuple2(nil, cA)
10201019 }
10211020 }
10221021
10231022
10241023
1025-@Callable(ch)
1026-func ramp_A (dw,dx) = if (Q((ch.caller == u)))
1024+@Callable(cB)
1025+func ramp_A (dv,dw) = if (Q((cB.caller == u)))
10271026 then throw("only owner")
10281027 else if (Q((P >= (z + n))))
10291028 then throw("too often")
1030- else if (Q((dx >= (P + n))))
1029+ else if (Q((dw >= (P + n))))
10311030 then throw("insufficient time")
10321031 else {
1033- let dy = ax()
1034- if (Q(if ((dw > 0))
1035- then (k > dw)
1032+ let dx = ax
1033+ if (Q(if ((dv > 0))
1034+ then (k > dv)
10361035 else false))
10371036 then throw("out of base range")
1038- else if (Q(if (if ((dw >= dy))
1039- then ((dy * l) >= dw)
1037+ else if (Q(if (if ((dv >= dx))
1038+ then ((dx * l) >= dv)
10401039 else false)
10411040 then true
1042- else if ((dy > dw))
1043- then ((dw * l) >= dy)
1041+ else if ((dx > dv))
1042+ then ((dv * l) >= dx)
10441043 else false))
10451044 then throw("out of range")
1046- else [IntegerEntry("initial_A", dy), IntegerEntry("future_A", dw), IntegerEntry("initial_A_time", P), IntegerEntry("future_A_time", dx)]
1045+ else [IntegerEntry("initial_A", dx), IntegerEntry("future_A", dv), IntegerEntry("initial_A_time", P), IntegerEntry("future_A_time", dw)]
10471046 }
10481047
10491048
10501049
1051-@Callable(ch)
1052-func stop_ramp_A () = if (Q((ch.caller == u)))
1050+@Callable(cB)
1051+func stop_ramp_A () = if (Q((cB.caller == u)))
10531052 then throw("only owner")
10541053 else {
1055- let dz = ax()
1056-[IntegerEntry("initial_A", dz), IntegerEntry("future_A", dz), IntegerEntry("initial_A_time", P), IntegerEntry("future_A_time", P)]
1054+ let dy = ax
1055+[IntegerEntry("initial_A", dy), IntegerEntry("future_A", dy), IntegerEntry("initial_A_time", P), IntegerEntry("future_A_time", P)]
10571056 }
10581057
10591058
10601059
1061-@Callable(ch)
1062-func commit_new_fee (dA,dB) = if (Q((ch.caller == u)))
1060+@Callable(cB)
1061+func commit_new_fee (dz,dA) = if (Q((cB.caller == u)))
10631062 then throw("only owner")
10641063 else if (Q((C == 0)))
10651064 then throw("active action")
1066- else if (Q((j >= dA)))
1065+ else if (Q((j >= dz)))
10671066 then throw("fee exceeds maximum")
1068- else if (Q((i >= dB)))
1067+ else if (Q((i >= dA)))
10691068 then throw("admin fee exceeds maximum")
10701069 else {
1071- let dC = (P + m)
1072-[IntegerEntry("admin_actions_deadline", dC), IntegerEntry("future_fee", dA), IntegerEntry("future_admin_fee", dB)]
1070+ let dB = (P + m)
1071+[IntegerEntry("admin_actions_deadline", dB), IntegerEntry("future_fee", dz), IntegerEntry("future_admin_fee", dA)]
10731072 }
10741073
10751074
10761075
1077-@Callable(ch)
1078-func apply_new_fee () = if (Q((ch.caller == u)))
1076+@Callable(cB)
1077+func apply_new_fee () = if (Q((cB.caller == u)))
10791078 then throw("only owner")
10801079 else if (Q((P >= C)))
10811080 then throw("insufficient time")
10851084
10861085
10871086
1088-@Callable(ch)
1089-func revert_new_parameters () = if (Q((ch.caller == u)))
1087+@Callable(cB)
1088+func revert_new_parameters () = if (Q((cB.caller == u)))
10901089 then throw("only owner")
10911090 else [IntegerEntry("admin_actions_deadline", 0)]
10921091
10931092
10941093
1095-@Callable(ch)
1096-func commit_transfer_ownership (ci) = if (Q((ch.caller == u)))
1094+@Callable(cB)
1095+func commit_transfer_ownership (cC) = if (Q((cB.caller == u)))
10971096 then throw("only owner")
10981097 else if (Q((D == 0)))
10991098 then throw("active transfer")
11001099 else {
1101- let dC = (P + m)
1102-[IntegerEntry("transfer_ownership_deadline", dC), StringEntry("future_owner", av(ci))]
1100+ let dB = (P + m)
1101+[IntegerEntry("transfer_ownership_deadline", dB), StringEntry("future_owner", av(cC))]
11031102 }
11041103
11051104
11061105
1107-@Callable(ch)
1108-func apply_transfer_ownership () = if (Q((ch.caller == u)))
1106+@Callable(cB)
1107+func apply_transfer_ownership () = if (Q((cB.caller == u)))
11091108 then throw("only owner")
11101109 else if (Q((P >= D)))
11111110 then throw("insufficient time")
11151114
11161115
11171116
1118-@Callable(ch)
1119-func revert_transfer_ownership () = if (Q((ch.caller == u)))
1117+@Callable(cB)
1118+func revert_transfer_ownership () = if (Q((cB.caller == u)))
11201119 then throw("only owner")
11211120 else [IntegerEntry("transfer_ownership_deadline", 0)]
11221121
11231122
11241123
1125-@Callable(ch)
1124+@Callable(cB)
11261125 func admin_balances (au) = $Tuple2(nil, at(au))
11271126
11281127
11291128
1130-@Callable(ch)
1131-func withdraw_admin_fees () = if (Q((ch.caller == u)))
1129+@Callable(cB)
1130+func withdraw_admin_fees () = if (Q((cB.caller == u)))
11321131 then throw("only owner")
11331132 else {
11341133 func U (V,al) = (V :+ ScriptTransfer(u, at(al), fromBase58String(q[al])))
11491148
11501149
11511150
1152-@Callable(ch)
1153-func donate_admin_fees () = if (Q((ch.caller == u)))
1151+@Callable(cB)
1152+func donate_admin_fees () = if (Q((cB.caller == u)))
11541153 then throw("only owner")
11551154 else {
11561155 func U (V,al) = (V :+ (af[al] + at(al)))
11571156
1158- let cE = {
1157+ let ch = {
11591158 let X = am
11601159 let Y = size(X)
11611160 let Z = nil
11691168
11701169 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11711170 }
1172-[StringEntry("balances", makeString(S(cE), ","))]
1171+[StringEntry("balances", makeString(S(ch), ","))]
11731172 }
11741173
11751174
11761175
1177-@Callable(ch)
1178-func set_auto_fees (dD) = if (Q((ch.caller == u)))
1176+@Callable(cB)
1177+func set_auto_fees (dC) = if (Q((cB.caller == u)))
11791178 then throw("only owner")
1180- else [BooleanEntry("is_auto_fees", dD)]
1179+ else [BooleanEntry("is_auto_fees", dC)]
11811180
11821181
11831182
1184-@Callable(ch)
1185-func kill_me () = if (Q((ch.caller == u)))
1183+@Callable(cB)
1184+func kill_me () = if (Q((cB.caller == u)))
11861185 then throw("only owner")
11871186 else if (Q((I > P)))
11881187 then throw("deadline has passed")
11901189
11911190
11921191
1193-@Callable(ch)
1194-func unkill_me () = if (Q((ch.caller == u)))
1192+@Callable(cB)
1193+func unkill_me () = if (Q((cB.caller == u)))
11951194 then throw("only owner")
11961195 else [BooleanEntry("is_killed", false)]
11971196
11981197
11991198
1200-@Callable(ch)
1201-func set_height_address (dE) = if ((ch.caller != u))
1199+@Callable(cB)
1200+func set_height_address (dD) = if ((cB.caller != u))
12021201 then throw("only owner")
1203- else [StringEntry("heightAddress", av(dE))]
1202+ else [StringEntry("heightAddress", av(dD))]
12041203
12051204
12061205
12071206 @Callable(au)
1208-func set_verifier (dF) = if ((au.caller != this))
1207+func set_verifier (dE) = if ((au.caller != this))
12091208 then throw("self call only")
12101209 else {
1211- let dG = {
1212- let ar = addressFromString(dF)
1210+ let dF = {
1211+ let ar = addressFromString(dE)
12131212 if ($isInstanceOf(ar, "Address"))
12141213 then {
12151214 let R = ar
12171216 }
12181217 else false
12191218 }
1220- if (!(dG))
1221- then throw(("verifier wrong address " + dF))
1219+ if (!(dF))
1220+ then throw(("verifier wrong address " + dE))
12221221 else if (isDefined(getString(this, "verifier")))
12231222 then throw("verifier already defined")
1224- else [StringEntry("verifier", dF)]
1223+ else [StringEntry("verifier", dE)]
12251224 }
12261225
12271226
1228-@Verifier(dH)
1229-func dI () = {
1227+@Verifier(dG)
1228+func dH () = {
12301229 let ar = getString(this, "verifier")
12311230 if ($isInstanceOf(ar, "String"))
12321231 then {
1233- let dF = ar
1234- valueOrElse(getBoolean(addressFromStringValue(dF), ((("status_" + toString(this)) + "_") + toBase58String(dH.id))), false)
1232+ let dE = ar
1233+ valueOrElse(getBoolean(addressFromStringValue(dE), ((("status_" + toString(this)) + "_") + toBase58String(dG.id))), false)
12351234 }
1236- else sigVerify(dH.bodyBytes, dH.proofs[0], dH.senderPublicKey)
1235+ else sigVerify(dG.bodyBytes, dG.proofs[0], dG.senderPublicKey)
12371236 }
12381237
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = getIntegerValue(this, "N_COINS")
55
66 let b = toBigInt(a)
77
88 let c = 10
99
1010 let d = 6
1111
1212 let e = 1000000
1313
1414 let f = 10000000000
1515
1616 let g = 1000000
1717
1818 let h = 6
1919
2020 let i = 10000000000
2121
2222 let j = 5000000000
2323
2424 let k = 1000000
2525
2626 let l = 10
2727
2828 let m = ((3 * 86400) / 60)
2929
3030 let n = (86400 / 60)
3131
3232 let o = 86400000
3333
3434 let p = 1000000000000
3535
3636 let q = split(getStringValue(this, "coins"), ",")
3737
3838 let r = getIntegerValue(this, "fee")
3939
4040 let s = getIntegerValue(this, "admin_fee")
4141
4242 let t = getBooleanValue(this, "is_auto_fees")
4343
4444 let u = addressFromStringValue(getStringValue(this, "owner"))
4545
4646 let v = fromBase58String(getStringValue(this, "token"))
4747
4848 let w = value(assetInfo(v)).quantity
4949
5050 let x = getIntegerValue(this, "initial_A")
5151
5252 let y = getIntegerValue(this, "future_A")
5353
5454 let z = valueOrElse(getInteger(this, "initial_A_time"), 0)
5555
5656 let B = valueOrElse(getInteger(this, "future_A_time"), 0)
5757
5858 let C = valueOrElse(getInteger(this, "admin_actions_deadline"), 0)
5959
6060 let D = valueOrElse(getInteger(this, "transfer_ownership_deadline"), 0)
6161
6262 let E = getIntegerValue(this, "future_fee")
6363
6464 let F = getIntegerValue(this, "future_admin_fee")
6565
6666 let G = getStringValue(this, "future_owner")
6767
6868 let H = getBooleanValue(this, "is_killed")
6969
7070 let I = getIntegerValue(this, "kill_deadline")
7171
7272 let J = (((2 * 30) * 86400) / 60)
7373
7474 let K = toBigInt(0)
7575
7676 let L = toBigInt(1)
7777
7878 let M = toBigInt(2)
7979
8080 let N = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, "heightAddress"), "no settings defined")), "bad settings address")
8181
8282 let O = height
8383
8484 let P = O
8585
8686 func Q (R) = if (R)
8787 then false
8888 else true
8989
9090
9191 func S (T) = if ((size(T) > c))
9292 then throw("list_itos: list.size() > N_COINS_MAX")
9393 else {
9494 func U (V,W) = (V :+ toString(W))
9595
9696 let X = T
9797 let Y = size(X)
9898 let Z = nil
9999 func aa (ab,ac) = if ((ac >= Y))
100100 then ab
101101 else U(ab, X[ac])
102102
103103 func ad (ab,ac) = if ((ac >= Y))
104104 then ab
105105 else throw("List size exceeds 10")
106106
107107 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
108108 }
109109
110110
111111 func ae (T) = if ((size(T) > c))
112112 then throw("list_stoi: list.size() > N_COINS_MAX")
113113 else {
114114 func U (V,W) = (V :+ parseIntValue(W))
115115
116116 let X = T
117117 let Y = size(X)
118118 let Z = nil
119119 func aa (ab,ac) = if ((ac >= Y))
120120 then ab
121121 else U(ab, X[ac])
122122
123123 func ad (ab,ac) = if ((ac >= Y))
124124 then ab
125125 else throw("List size exceeds 10")
126126
127127 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
128128 }
129129
130130
131131 let af = ae(split(getStringValue(this, "balances"), ","))
132132
133133 let ag = ae(split(getStringValue(this, "rates"), ","))
134134
135135 let ah = size(ag)
136136
137137 let ai = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
138138
139139 func aj (ak) = if ((ak > c))
140140 then throw("index_n: n > N_COINS_MAX")
141141 else {
142142 func U (V,al) = if ((ak > al))
143143 then (V :+ al)
144144 else V
145145
146146 let X = ai
147147 let Y = size(X)
148148 let Z = nil
149149 func aa (ab,ac) = if ((ac >= Y))
150150 then ab
151151 else U(ab, X[ac])
152152
153153 func ad (ab,ac) = if ((ac >= Y))
154154 then ab
155155 else throw("List size exceeds 10")
156156
157157 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
158158 }
159159
160160
161161 let am = aj(a)
162162
163163 let an = (am :+ a)
164164
165165 func ao (T) = if ((size(T) != a))
166166 then throw("big_list: list.size() != N_COINS")
167167 else {
168168 func U (V,al) = (V :+ toBigInt(fraction(T[al], e, ag[al])))
169169
170170 let X = am
171171 let Y = size(X)
172172 let Z = nil
173173 func aa (ab,ac) = if ((ac >= Y))
174174 then ab
175175 else U(ab, X[ac])
176176
177177 func ad (ab,ac) = if ((ac >= Y))
178178 then ab
179179 else throw("List size exceeds 10")
180180
181181 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
182182 }
183183
184184
185185 func ap (aq) = {
186186 let ar = aq.assetId
187187 if ($isInstanceOf(ar, "ByteVector"))
188188 then {
189189 let as = ar
190190 valueOrErrorMessage(indexOf(q, toBase58String(as)), (toBase58String(as) + " out of pool"))
191191 }
192192 else throw("unsupported assetId")
193193 }
194194
195195
196196 func at (au) = if (if ((0 > au))
197197 then true
198198 else (au > a))
199199 then throw("i out of index")
200200 else (assetBalance(this, fromBase58String(q[au])) - af[au])
201201
202202
203203 func av (aw) = {
204204 let R = addressFromStringValue(aw)
205205 toString(R)
206206 }
207207
208208
209-func ax () = {
209+let ax = {
210210 let ay = B
211211 let az = y
212212 if ((ay > P))
213213 then {
214214 let aA = x
215215 let aB = z
216216 if ((az > aA))
217217 then (aA + (((az - aA) * (P - aB)) / (ay - aB)))
218218 else (aA - (((aA - az) * (P - aB)) / (ay - aB)))
219219 }
220220 else az
221221 }
222-
223222
224223 func aC (T) = {
225224 func U (V,W) = (V + W)
226225
227226 let X = T
228227 let Y = size(X)
229228 let Z = K
230229 func aa (ab,ac) = if ((ac >= Y))
231230 then ab
232231 else U(ab, X[ac])
233232
234233 func ad (ab,ac) = if ((ac >= Y))
235234 then ab
236235 else throw("List size exceeds 10")
237236
238237 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
239238 }
240239
241240
242241 func aD (T) = {
243242 func U (V,W) = fraction(fraction(V, W, L), b, L)
244243
245244 let X = T
246245 let Y = size(X)
247246 let Z = L
248247 func aa (ab,ac) = if ((ac >= Y))
249248 then ab
250249 else U(ab, X[ac])
251250
252251 func ad (ab,ac) = if ((ac >= Y))
253252 then ab
254253 else throw("List size exceeds 10")
255254
256255 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
257256 }
258257
259258
260259 let aE = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
261260
262-func aF (aG,aH) = {
263- let aI = aC(aG)
264- if ((toInt(aI) == 0))
261+func aF (aG,ax) = {
262+ let aH = aC(aG)
263+ if ((toInt(aH) == 0))
265264 then 0
266265 else {
267- let aJ = (aH * a)
268- let aK = fraction(toBigInt(aJ), aI, L)
269- let aL = toBigInt((aJ - 1))
270- let aM = aD(aG)
271- let aN = (a + 1)
272- let aO = toBigInt(aN)
273- func aP (W) = {
266+ let aI = (ax * a)
267+ let aJ = fraction(toBigInt(aI), aH, L)
268+ let aK = toBigInt((aI - 1))
269+ let aL = aD(aG)
270+ let aM = (a + 1)
271+ let aN = toBigInt(aM)
272+ func aO (W) = {
274273 func U (V,al) = fraction(V, W, L)
275274
276275 let X = an
277276 let Y = size(X)
278277 let Z = L
279278 func aa (ab,ac) = if ((ac >= Y))
280279 then ab
281280 else U(ab, X[ac])
282281
283282 func ad (ab,ac) = if ((ac >= Y))
284283 then ab
285284 else throw("List size exceeds 10")
286285
287286 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
288287 }
289288
290- func aQ (V,aR) = if ((V._2 == true))
289+ func aP (V,aQ) = if ((V._2 == true))
291290 then V
292291 else {
293- let aS = V._1
294- let aT = fraction(aP(aS), L, aM)
295- let aU = fraction((aK + fraction(b, aT, L)), aS, (fraction(aL, aS, L) + fraction(aO, aT, L)))
296- if ((aU > aS))
297- then if ((1 >= toInt((aU - aS))))
298- then $Tuple2(aU, true)
299- else $Tuple2(aU, false)
300- else if ((1 >= toInt((aS - aU))))
301- then $Tuple2(aU, true)
302- else $Tuple2(aU, false)
292+ let aR = V._1
293+ let aS = fraction(aO(aR), L, aL)
294+ let aT = fraction((aJ + fraction(b, aS, L)), aR, (fraction(aK, aR, L) + fraction(aN, aS, L)))
295+ if ((aT > aR))
296+ then if ((1 >= toInt((aT - aR))))
297+ then $Tuple2(aT, true)
298+ else $Tuple2(aT, false)
299+ else if ((1 >= toInt((aR - aT))))
300+ then $Tuple2(aT, true)
301+ else $Tuple2(aT, false)
303302 }
304303
305- let aV = {
304+ let aU = {
306305 let X = aE
307306 let Y = size(X)
308- let Z = $Tuple2(aI, false)
307+ let Z = $Tuple2(aH, false)
309308 func aa (ab,ac) = if ((ac >= Y))
310309 then ab
311- else aQ(ab, X[ac])
310+ else aP(ab, X[ac])
312311
313312 func ad (ab,ac) = if ((ac >= Y))
314313 then ab
315314 else throw("List size exceeds 16")
316315
317316 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
318317 }
319- let aU = aV._1
320- let aW = aV._2
321- if ((aW == false))
322- then throw(("D_proc() not finished with " + toString(aU)))
323- else toInt(aU)
318+ let aT = aU._1
319+ let aV = aU._2
320+ if ((aV == false))
321+ then throw(("D_proc() not finished with " + toString(aT)))
322+ else toInt(aT)
324323 }
325324 }
326325
327326
328-func aX (au,aY,aZ,aG) = if (Q((au != aY)))
327+func aW (au,aX,aY,aG) = if (Q((au != aX)))
329328 then throw("same coin")
330- else if (Q(if ((aY >= 0))
329+ else if (Q(if ((aX >= 0))
331330 then (au >= 0)
332331 else false))
333332 then throw("below zero")
334- else if (Q(if ((a > aY))
333+ else if (Q(if ((a > aX))
335334 then (a > au)
336335 else false))
337336 then throw("above N_COINS")
338337 else {
339- let aH = ax()
340- let aU = aF(aG, aH)
341- let ba = toBigInt(aU)
342- let bb = toBigInt((aH * a))
343- func bc (V,al) = {
344- let bd = V
345- let be = bd._1
346- let bf = bd._2
347- let bg = if ((al == au))
348- then toBigInt(fraction(aZ, e, ag[al]))
338+ let aT = aF(aG, ax)
339+ let aZ = toBigInt(aT)
340+ let ba = toBigInt((ax * a))
341+ func bb (V,al) = {
342+ let bc = V
343+ let bd = bc._1
344+ let be = bc._2
345+ let bf = if ((al == au))
346+ then toBigInt(fraction(aY, e, ag[al]))
349347 else aG[al]
350- if ((al != aY))
351- then $Tuple2((be + bg), fraction(bf, ba, fraction(bg, b, L)))
352- else $Tuple2(be, bf)
348+ if ((al != aX))
349+ then $Tuple2((bd + bf), fraction(be, aZ, fraction(bf, b, L)))
350+ else $Tuple2(bd, be)
353351 }
354352
355- let bh = {
353+ let bg = {
356354 let X = am
357355 let Y = size(X)
358- let Z = $Tuple2(K, ba)
356+ let Z = $Tuple2(K, aZ)
359357 func aa (ab,ac) = if ((ac >= Y))
360358 then ab
361- else bc(ab, X[ac])
359+ else bb(ab, X[ac])
362360
363361 func ad (ab,ac) = if ((ac >= Y))
364362 then ab
365363 else throw("List size exceeds 10")
366364
367365 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
368366 }
369- let be = bh._1
370- let bi = bh._2
371- let bf = fraction(bi, ba, fraction(bb, b, L))
372- let bj = ((be + fraction(ba, L, bb)) - ba)
373- func bk (V,aR) = if ((V._2 == true))
367+ let bd = bg._1
368+ let bh = bg._2
369+ let be = fraction(bh, aZ, fraction(ba, b, L))
370+ let bi = ((bd + fraction(aZ, L, ba)) - aZ)
371+ func bj (V,aQ) = if ((V._2 == true))
374372 then V
375373 else {
376- let bl = V._1
377- let bm = fraction((fraction(bl, bl, L) + bf), L, (fraction(M, bl, L) + bj))
378- if ((bm > bl))
379- then if ((1 >= toInt((bm - bl))))
380- then $Tuple2(bm, true)
381- else $Tuple2(bm, false)
382- else if ((1 >= toInt((bl - bm))))
383- then $Tuple2(bm, true)
384- else $Tuple2(bm, false)
374+ let bk = V._1
375+ let bl = fraction((fraction(bk, bk, L) + be), L, (fraction(M, bk, L) + bi))
376+ if ((bl > bk))
377+ then if ((1 >= toInt((bl - bk))))
378+ then $Tuple2(bl, true)
379+ else $Tuple2(bl, false)
380+ else if ((1 >= toInt((bk - bl))))
381+ then $Tuple2(bl, true)
382+ else $Tuple2(bl, false)
385383 }
386384
387- let bn = {
385+ let bm = {
388386 let X = aE
389387 let Y = size(X)
390- let Z = $Tuple2(ba, false)
388+ let Z = $Tuple2(aZ, false)
389+ func bn (ab,ac) = if ((ac >= Y))
390+ then ab
391+ else bj(ab, X[ac])
392+
391393 func bo (ab,ac) = if ((ac >= Y))
392- then ab
393- else bk(ab, X[ac])
394-
395- func bp (ab,ac) = if ((ac >= Y))
396394 then ab
397395 else throw("List size exceeds 16")
398396
399- bp(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
397+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
400398 }
401- let bm = bn._1
402- let aW = bn._2
403- if ((aW == false))
404- then throw(("y_proc() not finished with " + toString(bm)))
405- else $Tuple2(fraction(toInt(bm), ag[aY], e), aU)
399+ let bl = bm._1
400+ let aV = bm._2
401+ if ((aV == false))
402+ then throw(("y_proc() not finished with " + toString(bl)))
403+ else $Tuple2(fraction(toInt(bl), ag[aX], e), aT)
406404 }
407405
408406
409-func bq (aH,au,aG,aU) = if (Q((au >= 0)))
407+func bp (ax,au,aG,aT) = if (Q((au >= 0)))
410408 then throw("i below zero")
411409 else if (Q((a > au)))
412410 then throw("i above N_COINS")
413411 else {
414- let ba = toBigInt(aU)
415- let bb = toBigInt((aH * a))
416- func bc (V,al) = {
417- let br = V
418- let be = br._1
419- let bf = br._2
420- let bg = if ((al == au))
412+ let aZ = toBigInt(aT)
413+ let ba = toBigInt((ax * a))
414+ func bb (V,al) = {
415+ let bq = V
416+ let bd = bq._1
417+ let be = bq._2
418+ let bf = if ((al == au))
421419 then K
422420 else aG[al]
423421 if ((al != au))
424- then $Tuple2((be + bg), fraction(bf, ba, fraction(bg, b, L)))
425- else $Tuple2(be, bf)
422+ then $Tuple2((bd + bf), fraction(be, aZ, fraction(bf, b, L)))
423+ else $Tuple2(bd, be)
426424 }
427425
428- let bs = {
426+ let br = {
429427 let X = am
430428 let Y = size(X)
431- let Z = $Tuple2(K, ba)
429+ let Z = $Tuple2(K, aZ)
432430 func aa (ab,ac) = if ((ac >= Y))
433431 then ab
434- else bc(ab, X[ac])
432+ else bb(ab, X[ac])
435433
436434 func ad (ab,ac) = if ((ac >= Y))
437435 then ab
438436 else throw("List size exceeds 10")
439437
440438 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
441439 }
442- let be = bs._1
443- let bi = bs._2
444- let bf = fraction(bi, ba, fraction(bb, b, L))
445- let bj = ((be + fraction(ba, L, bb)) - ba)
446- func bk (V,aR) = if ((V._2 == true))
440+ let bd = br._1
441+ let bh = br._2
442+ let be = fraction(bh, aZ, fraction(ba, b, L))
443+ let bi = ((bd + fraction(aZ, L, ba)) - aZ)
444+ func bj (V,aQ) = if ((V._2 == true))
447445 then V
448446 else {
449- let bl = V._1
450- let bm = fraction((fraction(bl, bl, L) + bf), L, (fraction(M, bl, L) + bj))
451- if ((bm > bl))
452- then if ((1 >= toInt((bm - bl))))
453- then $Tuple2(bm, true)
454- else $Tuple2(bm, false)
455- else if ((1 >= toInt((bl - bm))))
456- then $Tuple2(bm, true)
457- else $Tuple2(bm, false)
447+ let bk = V._1
448+ let bl = fraction((fraction(bk, bk, L) + be), L, (fraction(M, bk, L) + bi))
449+ if ((bl > bk))
450+ then if ((1 >= toInt((bl - bk))))
451+ then $Tuple2(bl, true)
452+ else $Tuple2(bl, false)
453+ else if ((1 >= toInt((bk - bl))))
454+ then $Tuple2(bl, true)
455+ else $Tuple2(bl, false)
458456 }
459457
460- let bt = {
458+ let bs = {
461459 let X = aE
462460 let Y = size(X)
463- let Z = $Tuple2(ba, false)
461+ let Z = $Tuple2(aZ, false)
462+ func bn (ab,ac) = if ((ac >= Y))
463+ then ab
464+ else bj(ab, X[ac])
465+
464466 func bo (ab,ac) = if ((ac >= Y))
465- then ab
466- else bk(ab, X[ac])
467-
468- func bp (ab,ac) = if ((ac >= Y))
469467 then ab
470468 else throw("List size exceeds 16")
471469
472- bp(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
470+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
473471 }
474- let bm = bt._1
475- let aW = bt._2
476- if ((aW == false))
477- then throw(("y_proc() not finished with " + toString(bm)))
478- else fraction(toInt(bm), ag[au], e)
472+ let bl = bs._1
473+ let aV = bs._2
474+ if ((aV == false))
475+ then throw(("y_proc() not finished with " + toString(bl)))
476+ else fraction(toInt(bl), ag[au], e)
479477 }
480478
481479
482-func bu (bv,au) = {
483- let aH = ax()
484- let bw = ((r * a) / (4 * (a - 1)))
480+func bt (bu,au) = {
481+ let bv = ((r * a) / (4 * (a - 1)))
485482 let aG = ao(af)
486- let bx = aF(aG, aH)
487- let by = (bx - fraction(bv, bx, w))
488- let bz = bq(aH, au, aG, by)
489- let bA = (af[au] - bz)
483+ let bw = aF(aG, ax)
484+ let bx = (bw - fraction(bu, bw, w))
485+ let by = bp(ax, au, aG, bx)
486+ let bz = (af[au] - by)
490487 func U (V,al) = {
491- let bB = af[al]
492- let bC = if ((al == au))
493- then (fraction(bB, by, bx) - bz)
494- else (bB - fraction(bB, by, bx))
495- (V :+ (bB - fraction(bw, bC, f)))
488+ let bA = af[al]
489+ let bB = if ((al == au))
490+ then (fraction(bA, bx, bw) - by)
491+ else (bA - fraction(bA, bx, bw))
492+ (V :+ (bA - fraction(bv, bB, f)))
496493 }
497494
498- let bD = {
495+ let bC = {
499496 let X = am
500497 let Y = size(X)
501498 let Z = nil
502499 func aa (ab,ac) = if ((ac >= Y))
503500 then ab
504501 else U(ab, X[ac])
505502
506503 func ad (ab,ac) = if ((ac >= Y))
507504 then ab
508505 else throw("List size exceeds 10")
509506
510507 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
511508 }
512- let bE = bD[au]
513- let bF = ((bE - bq(aH, au, ao(bD), by)) - 1)
514- $Tuple3(bF, (bA - bF), bx)
509+ let bD = bC[au]
510+ let bE = ((bD - bp(ax, au, ao(bC), bx)) - 1)
511+ $Tuple3(bE, (bz - bE), bw)
515512 }
516513
517514
518-func bG (aU) = fraction(aU, p, w)
515+func bF (aT) = fraction(aT, p, w)
519516
520517
521-func bH (aU,bI) = {
522- let bJ = (parseBigIntValue(valueOrElse(getString("vol"), "0")) + toBigInt(bI))
523- let bK = toString(bJ)
524- ([StringEntry("vol", bK)] ++ {
525- let bL = toString((lastBlock.timestamp / o))
526- let bM = ("log_" + bL)
527- if (isDefined(getString(bM)))
518+func bG (aT,bH) = {
519+ let bI = (parseBigIntValue(valueOrElse(getString("vol"), "0")) + toBigInt(bH))
520+ let bJ = toString(bI)
521+ ([StringEntry("vol", bJ)] ++ {
522+ let bK = toString((lastBlock.timestamp / o))
523+ let bL = ("log_" + bK)
524+ if (isDefined(getString(bL)))
528525 then nil
529- else [StringEntry(bM, ((((toString(bG(aU)) + "_") + bK) + "_") + toString(lastBlock.timestamp)))]
526+ else [StringEntry(bL, ((((toString(bF(aT)) + "_") + bJ) + "_") + toString(lastBlock.timestamp)))]
530527 })
531528 }
532529
533530
534-func bN (bO) = {
535- func U (bP,bQ) = if ((bP != ""))
536- then bP
531+func bM (bN) = {
532+ func U (bO,bP) = if ((bO != ""))
533+ then bO
537534 else {
538- let bM = ("log_" + toString((bO - bQ)))
539- valueOrElse(getString(bM), "")
535+ let bL = ("log_" + toString((bN - bP)))
536+ valueOrElse(getString(bL), "")
540537 }
541538
542- let bR = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
543- let bS = [-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30]
544- let bT = {
545- let X = bR
539+ let bQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
540+ let bR = [-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30]
541+ let bS = {
542+ let X = bQ
546543 let Y = size(X)
547544 let Z = ""
548545 func aa (ab,ac) = if ((ac >= Y))
549546 then ab
550547 else U(ab, X[ac])
551548
552549 func ad (ab,ac) = if ((ac >= Y))
553550 then ab
554551 else throw("List size exceeds 30")
555552
556553 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
557554 }
558- if ((bT != ""))
559- then bT
555+ if ((bS != ""))
556+ then bS
560557 else {
561- let X = bS
558+ let X = bR
562559 let Y = size(X)
563560 let Z = ""
564- func bo (ab,ac) = if ((ac >= Y))
561+ func bn (ab,ac) = if ((ac >= Y))
565562 then ab
566563 else U(ab, X[ac])
567564
568- func bp (ab,ac) = if ((ac >= Y))
565+ func bo (ab,ac) = if ((ac >= Y))
569566 then ab
570567 else throw("List size exceeds 30")
571568
572- bp(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
569+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
573570 }
574571 }
575572
576573
577-func bU (bV) = {
578- let bW = bG(aF(ao(af), ax()))
579- let bX = lastBlock.timestamp
580- let aB = if ((0 >= bV))
581- then (bX + bV)
582- else bV
583- let bY = (aB / o)
584- let bP = bN(bY)
585- if ((bP == ""))
586- then $Tuple3(bW, bW, 0)
574+func bT (bU) = {
575+ let bV = bF(aF(ao(af), ax))
576+ let bW = lastBlock.timestamp
577+ let aB = if ((0 >= bU))
578+ then (bW + bU)
579+ else bU
580+ let bX = (aB / o)
581+ let bO = bM(bX)
582+ if ((bO == ""))
583+ then $Tuple3(bV, bV, 0)
587584 else {
588- let bZ = split(bP, "_")
589- let ca = parseIntValue(bZ[0])
590- let cb = parseIntValue(bZ[2])
591- $Tuple3(bW, ca, (bX - cb))
585+ let bY = split(bO, "_")
586+ let bZ = parseIntValue(bY[0])
587+ let ca = parseIntValue(bY[2])
588+ $Tuple3(bV, bZ, (bW - ca))
592589 }
593590 }
594591
595592
596-func cc (bV) = {
597- let cd = parseBigIntValue(valueOrElse(getString("vol"), "0"))
598- let ce = lastBlock.timestamp
599- let aB = if ((0 >= bV))
600- then (ce + bV)
601- else bV
602- let bY = (aB / o)
603- let bP = bN(bY)
604- if ((bP == ""))
605- then $Tuple3(cd, cd, 0)
593+func cb (bU) = {
594+ let cc = parseBigIntValue(valueOrElse(getString("vol"), "0"))
595+ let cd = lastBlock.timestamp
596+ let aB = if ((0 >= bU))
597+ then (cd + bU)
598+ else bU
599+ let bX = (aB / o)
600+ let bO = bM(bX)
601+ if ((bO == ""))
602+ then $Tuple3(cc, cc, 0)
606603 else {
607- let bZ = split(bP, "_")
608- let cf = parseBigIntValue(bZ[1])
609- let cg = parseIntValue(bZ[2])
610- $Tuple3(cd, cf, (ce - cg))
604+ let bY = split(bO, "_")
605+ let ce = parseBigIntValue(bY[1])
606+ let cf = parseIntValue(bY[2])
607+ $Tuple3(cc, ce, (cd - cf))
611608 }
612609 }
613610
614611
615-@Callable(ch)
616-func init (ci,cj,ck,ax,bw,cl) = if (!(isDataStorageUntouched(this)))
612+func cg (ch) = {
613+ let bw = if ((w == 0))
614+ then 0
615+ else aF(ao(af), ax)
616+ let bx = aF(ao(ch), ax)
617+ if (Q((bx > bw)))
618+ then throw("D1 > D0")
619+ else {
620+ let ci = if ((w > 0))
621+ then {
622+ func cj (ck,cl) = {
623+ let bv = ((r * a) / (4 * (a - 1)))
624+ let ak = size(ck)
625+ func U (V,al) = {
626+ let cm = ck[al]
627+ let cn = cl[al]
628+ let co = fraction(bx, cm, bw)
629+ let cp = if ((co > cn))
630+ then (co - cn)
631+ else (cn - co)
632+ let cq = fraction(bv, cp, f)
633+ let cr = fraction(cq, s, f)
634+ $Tuple4((V._1 :+ (cn - cr)), (V._2 :+ (cn - cq)), if (if (t)
635+ then (cr > 0)
636+ else false)
637+ then (V._3 :+ ScriptTransfer(u, cr, fromBase58String(q[al])))
638+ else V._3, (V._4 + fraction(cq, e, ag[al])))
639+ }
640+
641+ let X = am
642+ let Y = size(X)
643+ let Z = $Tuple4(nil, nil, nil, 0)
644+ func aa (ab,ac) = if ((ac >= Y))
645+ then ab
646+ else U(ab, X[ac])
647+
648+ func ad (ab,ac) = if ((ac >= Y))
649+ then ab
650+ else throw("List size exceeds 10")
651+
652+ ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
653+ }
654+
655+ let cs = cj(af, ch)
656+ let ct = cs._1
657+ let cu = cs._2
658+ let cv = cs._3
659+ let cw = cs._4
660+ $Tuple3(ct, aF(ao(cu), ax), (cv ++ bG(bw, fraction(cw, f, r))))
661+ }
662+ else $Tuple3(ch, bx, nil)
663+ let cx = ci._1
664+ let cy = ci._2
665+ let cz = ci._3
666+ let cA = if ((w == 0))
667+ then bx
668+ else fraction(w, (cy - bw), bw)
669+ $Tuple3(cx, cA, cz)
670+ }
671+ }
672+
673+
674+@Callable(cB)
675+func init (cC,cD,cE,cF,bv,cG) = if (!(isDataStorageUntouched(this)))
617676 then throw("already initialized")
618- else if ((ch.caller != this))
677+ else if ((cB.caller != this))
619678 then throw("self initialization only")
620679 else {
621- let cm = split(cj, ",")
622- let ak = size(cm)
680+ let cH = split(cD, ",")
681+ let ak = size(cH)
623682 if ((2 > ak))
624683 then throw("too small coins")
625684 else if ((ak > c))
626685 then throw("too many coins")
627686 else {
628- func cn (V,al) = if (if ((al >= ak))
687+ func cI (V,al) = if (if ((al >= ak))
629688 then true
630689 else (V == false))
631690 then V
632- else (indexOf(cm, cm[al]) == al)
691+ else (indexOf(cH, cH[al]) == al)
633692
634693 if ((false == {
635694 let X = ai
636695 let Y = size(X)
637696 let Z = true
638697 func aa (ab,ac) = if ((ac >= Y))
639698 then ab
640- else cn(ab, X[ac])
699+ else cI(ab, X[ac])
641700
642701 func ad (ab,ac) = if ((ac >= Y))
643702 then ab
644703 else throw("List size exceeds 10")
645704
646705 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
647706 }))
648707 then throw("duplicate coin detected")
649708 else {
650- func co (cp) = valueOrErrorMessage(assetInfo(valueOrErrorMessage(fromBase58String(cp), ("fromBase58String: " + cp))), ("assetInfo: " + cp)).decimals
709+ func cJ (cK) = valueOrErrorMessage(assetInfo(valueOrErrorMessage(fromBase58String(cK), ("fromBase58String: " + cK))), ("assetInfo: " + cK)).decimals
651710
652- func U (V,cp) = $Tuple3((V._1 + 1), (V._2 :+ 0), (V._3 :+ pow(10, 0, co(cp), 0, 0, DOWN)))
711+ func U (V,cK) = $Tuple3((V._1 + 1), (V._2 :+ 0), (V._3 :+ pow(10, 0, cJ(cK), 0, 0, DOWN)))
653712
654- let cq = {
655- let X = cm
713+ let cL = {
714+ let X = cH
656715 let Y = size(X)
657716 let Z = $Tuple3(0, nil, nil)
658717 func aa (ab,ac) = if ((ac >= Y))
659718 then ab
660719 else U(ab, X[ac])
661720
662721 func ad (ab,ac) = if ((ac >= Y))
663722 then ab
664723 else throw("List size exceeds 10")
665724
666725 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
667726 }
668- let cr = cq._1
669- let cs = cq._2
670- let ct = cq._3
671- let cu = Issue(ck, ("LP token for " + cj), 0, d, true)
672- let cv = toBase58String(calculateAssetId(cu))
673-[StringEntry("coins", cj), StringEntry("rates", makeString(S(ct), ",")), StringEntry("balances", makeString(S(cs), ",")), IntegerEntry("N_COINS", cr), IntegerEntry("initial_A", ax), IntegerEntry("future_A", ax), IntegerEntry("fee", bw), IntegerEntry("admin_fee", cl), StringEntry("owner", av(ci)), IntegerEntry("kill_deadline", (height + J)), StringEntry("token", cv), BooleanEntry("is_killed", false), BooleanEntry("is_auto_fees", true), cu]
727+ let cM = cL._1
728+ let cN = cL._2
729+ let cO = cL._3
730+ let cP = Issue(cE, ("LP token for " + cD), 0, d, true)
731+ let cQ = toBase58String(calculateAssetId(cP))
732+[StringEntry("coins", cD), StringEntry("rates", makeString(S(cO), ",")), StringEntry("balances", makeString(S(cN), ",")), IntegerEntry("N_COINS", cM), IntegerEntry("initial_A", cF), IntegerEntry("future_A", cF), IntegerEntry("fee", bv), IntegerEntry("admin_fee", cG), StringEntry("owner", av(cC)), IntegerEntry("kill_deadline", (height + J)), StringEntry("token", cQ), BooleanEntry("is_killed", false), BooleanEntry("is_auto_fees", true), cP]
674733 }
675734 }
676735 }
677736
678737
679738
680-@Callable(ch)
681-func add_liquidity (cw) = if (Q(!(H)))
739+@Callable(cB)
740+func add_liquidity (cR) = if (Q(!(H)))
682741 then throw("is killed")
683742 else {
684- let aH = ax()
685- let cx = w
686- let bx = if ((cx == 0))
687- then 0
688- else aF(ao(af), aH)
689- func cy (cz,cA,cB) = {
690- func U (V,al) = (V :+ (cz[al] + (if ((al == cA))
691- then cB
743+ func cS (cT,cU,cV) = {
744+ func U (V,al) = (V :+ (cT[al] + (if ((al == cU))
745+ then cV
692746 else 0)))
693747
694748 let X = am
695749 let Y = size(X)
696750 let Z = nil
697751 func aa (ab,ac) = if ((ac >= Y))
698752 then ab
699753 else U(ab, X[ac])
700754
701755 func ad (ab,ac) = if ((ac >= Y))
702756 then ab
703757 else throw("List size exceeds 10")
704758
705759 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
706760 }
707761
708- func cC (cz,cD) = {
709- let ak = size(cD)
762+ func cW (cT,cX) = {
763+ let ak = size(cX)
710764 if ((1 > ak))
711765 then throw("payments size < 1")
712766 else if ((ak > c))
713767 then throw("payments size > N_COINS_MAX")
714768 else {
715- func U (V,aq) = cy(V, ap(aq), aq.amount)
769+ func U (V,aq) = cS(V, ap(aq), aq.amount)
716770
717- let X = cD
771+ let X = cX
718772 let Y = size(X)
719- let Z = cz
773+ let Z = cT
720774 func aa (ab,ac) = if ((ac >= Y))
721775 then ab
722776 else U(ab, X[ac])
723777
724778 func ad (ab,ac) = if ((ac >= Y))
725779 then ab
726780 else throw("List size exceeds 10")
727781
728782 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
729783 }
730784 }
731785
732- let cE = cC(af, ch.payments)
733- if (if ((cx == 0))
734- then (min(cE) == 0)
786+ let ch = cW(af, cB.payments)
787+ if (if ((w == 0))
788+ then (min(ch) == 0)
735789 else false)
736790 then throw("initial deposit requires all coins")
737791 else {
738- let by = aF(ao(cE), aH)
739- if (Q((by > bx)))
740- then throw("D1 > D0")
741- else {
742- let cF = if ((cx > 0))
743- then {
744- func cG (cH,cI) = {
745- let bw = ((r * a) / (4 * (a - 1)))
746- let ak = size(cH)
747- func U (V,al) = {
748- let cJ = cH[al]
749- let cK = cI[al]
750- let cL = fraction(by, cJ, bx)
751- let cM = if ((cL > cK))
752- then (cL - cK)
753- else (cK - cL)
754- let cN = fraction(bw, cM, f)
755- let cO = fraction(cN, s, f)
756- $Tuple4((V._1 :+ (cK - cO)), (V._2 :+ (cK - cN)), if (if (t)
757- then (cO > 0)
758- else false)
759- then (V._3 :+ ScriptTransfer(u, cO, fromBase58String(q[al])))
760- else V._3, (V._4 + fraction(cN, e, ag[al])))
761- }
762-
763- let X = am
764- let Y = size(X)
765- let Z = $Tuple4(nil, nil, nil, 0)
766- func aa (ab,ac) = if ((ac >= Y))
767- then ab
768- else U(ab, X[ac])
769-
770- func ad (ab,ac) = if ((ac >= Y))
771- then ab
772- else throw("List size exceeds 10")
773-
774- ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
775- }
776-
777- let cP = cG(af, cE)
778- let cQ = cP._1
779- let cR = cP._2
780- let cS = cP._3
781- let cT = cP._4
782- $Tuple3(cQ, aF(ao(cR), aH), (cS ++ bH(bx, fraction(cT, f, r))))
783- }
784- else $Tuple3(cE, by, nil)
785- let cU = cF._1
786- let cV = cF._2
787- let cW = cF._3
788- let cX = if ((cx == 0))
789- then by
790- else fraction(cx, (cV - bx), bx)
791- if (Q((cX >= cw)))
792- then throw("slippage screwed you")
793- else ([StringEntry("balances", makeString(S(cU), ",")), Reissue(v, cX, true), ScriptTransfer(ch.caller, cX, v)] ++ cW)
794- }
792+ let cY = cg(ch)
793+ let cx = cY._1
794+ let cA = cY._2
795+ let cz = cY._3
796+ if (Q((cA >= cR)))
797+ then throw("slippage screwed you")
798+ else ([StringEntry("balances", makeString(S(cx), ",")), Reissue(v, cA, true), ScriptTransfer(cB.caller, cA, v)] ++ cz)
795799 }
796800 }
797801
798802
799803
800-@Callable(ch)
801-func get_dy (au,aY,cY) = {
802- let cZ = af[au]
803- let bB = af[aY]
804- let aZ = (cZ + cY)
805- let da = aX(au, aY, aZ, ao(af))
806- let bm = da._1
807- let aU = da._2
808- let db = ((bB - bm) - 1)
809- let dc = fraction(db, r, f)
810- let bF = (db - dc)
811- $Tuple2(nil, bF)
804+@Callable(cB)
805+func get_dy (au,aX,cZ) = {
806+ let da = af[au]
807+ let bA = af[aX]
808+ let aY = (da + cZ)
809+ let db = aW(au, aX, aY, ao(af))
810+ let bl = db._1
811+ let aT = db._2
812+ let dc = ((bA - bl) - 1)
813+ let dd = fraction(dc, r, f)
814+ let bE = (dc - dd)
815+ $Tuple2(nil, bE)
812816 }
813817
814818
815819
816-@Callable(ch)
817-func exchange (aY,dd) = if (Q(!(H)))
820+@Callable(cB)
821+func exchange (aX,de) = if (Q(!(H)))
818822 then throw("is killed")
819- else if ((size(ch.payments) != 1))
823+ else if ((size(cB.payments) != 1))
820824 then throw("size( payments ) != 1")
821825 else {
822- let aq = ch.payments[0]
823- let cY = aq.amount
826+ let aq = cB.payments[0]
827+ let cZ = aq.amount
824828 let au = ap(aq)
825- let cZ = af[au]
826- let bB = af[aY]
827- let aZ = (cZ + cY)
828- let de = aX(au, aY, aZ, ao(af))
829- let bm = de._1
830- let aU = de._2
831- let db = ((bB - bm) - 1)
832- let dc = fraction(db, r, f)
833- let bF = (db - dc)
834- if (Q((bF >= dd)))
829+ let da = af[au]
830+ let bA = af[aX]
831+ let aY = (da + cZ)
832+ let df = aW(au, aX, aY, ao(af))
833+ let bl = df._1
834+ let aT = df._2
835+ let dc = ((bA - bl) - 1)
836+ let dd = fraction(dc, r, f)
837+ let bE = (dc - dd)
838+ if (Q((bE >= de)))
835839 then throw("exchange resulted in fewer coins than expected")
836840 else {
837- let df = fraction(dc, s, f)
841+ let dg = fraction(dd, s, f)
838842 func U (V,al) = (V :+ (if ((al == au))
839- then (af[al] + cY)
840- else if ((al == aY))
841- then ((af[al] - bF) - df)
843+ then (af[al] + cZ)
844+ else if ((al == aX))
845+ then ((af[al] - bE) - dg)
842846 else af[al]))
843847
844- let cU = {
848+ let cx = {
845849 let X = am
846850 let Y = size(X)
847851 let Z = nil
848852 func aa (ab,ac) = if ((ac >= Y))
849853 then ab
850854 else U(ab, X[ac])
851855
852856 func ad (ab,ac) = if ((ac >= Y))
853857 then ab
854858 else throw("List size exceeds 10")
855859
856860 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
857861 }
858- let dg = fromBase58String(q[aY])
859- $Tuple2((([StringEntry("balances", makeString(S(cU), ",")), ScriptTransfer(ch.caller, bF, dg)] ++ (if (if (t)
860- then (df > 0)
862+ let dh = fromBase58String(q[aX])
863+ $Tuple2((([StringEntry("balances", makeString(S(cx), ",")), ScriptTransfer(cB.caller, bE, dh)] ++ (if (if (t)
864+ then (dg > 0)
861865 else false)
862- then [ScriptTransfer(u, df, dg)]
863- else nil)) ++ bH(aU, fraction(cY, e, ag[au]))), bF)
866+ then [ScriptTransfer(u, dg, dh)]
867+ else nil)) ++ bG(aT, fraction(cZ, e, ag[au]))), bE)
864868 }
865869 }
866870
867871
868872
869-@Callable(ch)
870-func remove_liquidity (dh) = if ((size(ch.payments) != 1))
873+@Callable(cB)
874+func remove_liquidity (di) = if ((size(cB.payments) != 1))
871875 then throw("size( payments ) != 1")
872876 else {
873- let aq = ch.payments[0]
877+ let aq = cB.payments[0]
874878 if ((aq.assetId != v))
875879 then throw("unknown token")
876880 else {
877- let di = if ((dh == "0"))
881+ let dj = if ((di == "0"))
878882 then nil
879- else ae(split(dh, ","))
880- if (if ((dh != "0"))
881- then (size(di) != a)
883+ else ae(split(di, ","))
884+ if (if ((di != "0"))
885+ then (size(dj) != a)
882886 else false)
883887 then throw("min_amounts.size() != N_COINS")
884888 else {
885- let cB = aq.amount
886- let dj = ch.caller
889+ let cV = aq.amount
890+ let dk = cB.caller
887891 func U (V,al) = {
888- let dk = af[al]
889- let dl = fraction(dk, cB, w)
890- if (if ((dh != "0"))
891- then (di[al] > dl)
892+ let dl = af[al]
893+ let dm = fraction(dl, cV, w)
894+ if (if ((di != "0"))
895+ then (dj[al] > dm)
892896 else false)
893897 then throw("withdrawal resulted in fewer coins than expected")
894- else $Tuple2((V._1 :+ ScriptTransfer(dj, dl, fromBase58String(q[al]))), (V._2 :+ (dk - dl)))
898+ else $Tuple2((V._1 :+ ScriptTransfer(dk, dm, fromBase58String(q[al]))), (V._2 :+ (dl - dm)))
895899 }
896900
897- let dm = {
901+ let dn = {
898902 let X = am
899903 let Y = size(X)
900904 let Z = $Tuple2(nil, nil)
901905 func aa (ab,ac) = if ((ac >= Y))
902906 then ab
903907 else U(ab, X[ac])
904908
905909 func ad (ab,ac) = if ((ac >= Y))
906910 then ab
907911 else throw("List size exceeds 10")
908912
909913 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
910914 }
911- let dn = dm._1
912- let cU = dm._2
913- (dn ++ [StringEntry("balances", makeString(S(cU), ",")), Burn(v, cB)])
915+ let do = dn._1
916+ let cx = dn._2
917+ (do ++ [StringEntry("balances", makeString(S(cx), ",")), Burn(v, cV)])
914918 }
915919 }
916920 }
917921
918922
919923
920-@Callable(ch)
921-func calc_withdraw_one_coin (bv,au) = $Tuple2(nil, bu(bv, au)._1)
924+@Callable(cB)
925+func calc_withdraw_one_coin (bu,au) = $Tuple2(nil, bt(bu, au)._1)
922926
923927
924928
925-@Callable(ch)
926-func remove_liquidity_one_coin (au,do) = if (Q(!(H)))
929+@Callable(cB)
930+func remove_liquidity_one_coin (au,dp) = if (Q(!(H)))
927931 then throw("is killed")
928- else if ((size(ch.payments) != 1))
932+ else if ((size(cB.payments) != 1))
929933 then throw("size( payments ) != 1")
930934 else {
931- let aq = ch.payments[0]
935+ let aq = cB.payments[0]
932936 if ((aq.assetId != v))
933937 then throw("unknown token")
934938 else {
935- let bv = aq.amount
936- let dp = bu(bv, au)
937- let bF = dp._1
938- let dc = dp._2
939- let aU = dp._3
940- if (Q((bF >= do)))
939+ let bu = aq.amount
940+ let dq = bt(bu, au)
941+ let bE = dq._1
942+ let dd = dq._2
943+ let aT = dq._3
944+ if (Q((bE >= dp)))
941945 then throw("not enough coins removed")
942946 else {
943- let df = fraction(dc, s, f)
944- let dq = (bF + df)
947+ let dg = fraction(dd, s, f)
948+ let dr = (bE + dg)
945949 func U (V,al) = (V :+ (af[al] - (if ((al == au))
946- then dq
950+ then dr
947951 else 0)))
948952
949- let cU = {
953+ let cx = {
950954 let X = am
951955 let Y = size(X)
952956 let Z = nil
953957 func aa (ab,ac) = if ((ac >= Y))
954958 then ab
955959 else U(ab, X[ac])
956960
957961 func ad (ab,ac) = if ((ac >= Y))
958962 then ab
959963 else throw("List size exceeds 10")
960964
961965 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
962966 }
963- let dg = fromBase58String(q[au])
964- $Tuple2((([StringEntry("balances", makeString(S(cU), ",")), ScriptTransfer(ch.caller, bF, dg), Burn(v, bv)] ++ (if (if (t)
965- then (df > 0)
967+ let dh = fromBase58String(q[au])
968+ $Tuple2((([StringEntry("balances", makeString(S(cx), ",")), ScriptTransfer(cB.caller, bE, dh), Burn(v, bu)] ++ (if (if (t)
969+ then (dg > 0)
966970 else false)
967- then [ScriptTransfer(u, df, dg)]
968- else nil)) ++ bH(aU, fraction(fraction(dc, e, ag[au]), f, r))), bF)
971+ then [ScriptTransfer(u, dg, dh)]
972+ else nil)) ++ bG(aT, fraction(fraction(dd, e, ag[au]), f, r))), bE)
969973 }
970974 }
971975 }
972976
973977
974978
975-@Callable(ch)
976-func A () = $Tuple2(nil, ax())
979+@Callable(cB)
980+func A () = $Tuple2(nil, ax)
977981
978982
979983
980-@Callable(ch)
984+@Callable(cB)
981985 func get_virtual_price () = {
982- let aU = aF(ao(af), ax())
983- $Tuple2(nil, bG(aU))
986+ let aT = aF(ao(af), ax)
987+ $Tuple2(nil, bF(aT))
984988 }
985989
986990
987991
988-@Callable(ch)
989-func calc_token_amount (dr,ds) = {
990- let dt = ae(split(dr, ","))
992+@Callable(cB)
993+func calc_token_amount (ds) = {
994+ let dt = ae(split(ds, ","))
991995 if ((size(dt) != a))
992996 then throw("not enought amounts")
993997 else {
994- let aH = ax()
995- let bx = aF(ao(dt), aH)
996- func U (V,al) = (V :+ (af[al] + (if (ds)
997- then dt[al]
998- else -(dt[al]))))
998+ func U (V,al) = (V :+ (af[al] + dt[al]))
999999
1000- let cE = {
1000+ let ch = {
10011001 let X = am
10021002 let Y = size(X)
10031003 let Z = nil
10041004 func aa (ab,ac) = if ((ac >= Y))
10051005 then ab
10061006 else U(ab, X[ac])
10071007
10081008 func ad (ab,ac) = if ((ac >= Y))
10091009 then ab
10101010 else throw("List size exceeds 10")
10111011
10121012 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10131013 }
1014- let by = aF(ao(cE), aH)
1015- let du = w
1016- let dv = if (ds)
1017- then (by - bx)
1018- else (bx - by)
1019- $Tuple2(nil, fraction(dv, du, bx))
1014+ let du = cg(ch)
1015+ let cx = du._1
1016+ let cA = du._2
1017+ let cz = du._3
1018+ $Tuple2(nil, cA)
10201019 }
10211020 }
10221021
10231022
10241023
1025-@Callable(ch)
1026-func ramp_A (dw,dx) = if (Q((ch.caller == u)))
1024+@Callable(cB)
1025+func ramp_A (dv,dw) = if (Q((cB.caller == u)))
10271026 then throw("only owner")
10281027 else if (Q((P >= (z + n))))
10291028 then throw("too often")
1030- else if (Q((dx >= (P + n))))
1029+ else if (Q((dw >= (P + n))))
10311030 then throw("insufficient time")
10321031 else {
1033- let dy = ax()
1034- if (Q(if ((dw > 0))
1035- then (k > dw)
1032+ let dx = ax
1033+ if (Q(if ((dv > 0))
1034+ then (k > dv)
10361035 else false))
10371036 then throw("out of base range")
1038- else if (Q(if (if ((dw >= dy))
1039- then ((dy * l) >= dw)
1037+ else if (Q(if (if ((dv >= dx))
1038+ then ((dx * l) >= dv)
10401039 else false)
10411040 then true
1042- else if ((dy > dw))
1043- then ((dw * l) >= dy)
1041+ else if ((dx > dv))
1042+ then ((dv * l) >= dx)
10441043 else false))
10451044 then throw("out of range")
1046- else [IntegerEntry("initial_A", dy), IntegerEntry("future_A", dw), IntegerEntry("initial_A_time", P), IntegerEntry("future_A_time", dx)]
1045+ else [IntegerEntry("initial_A", dx), IntegerEntry("future_A", dv), IntegerEntry("initial_A_time", P), IntegerEntry("future_A_time", dw)]
10471046 }
10481047
10491048
10501049
1051-@Callable(ch)
1052-func stop_ramp_A () = if (Q((ch.caller == u)))
1050+@Callable(cB)
1051+func stop_ramp_A () = if (Q((cB.caller == u)))
10531052 then throw("only owner")
10541053 else {
1055- let dz = ax()
1056-[IntegerEntry("initial_A", dz), IntegerEntry("future_A", dz), IntegerEntry("initial_A_time", P), IntegerEntry("future_A_time", P)]
1054+ let dy = ax
1055+[IntegerEntry("initial_A", dy), IntegerEntry("future_A", dy), IntegerEntry("initial_A_time", P), IntegerEntry("future_A_time", P)]
10571056 }
10581057
10591058
10601059
1061-@Callable(ch)
1062-func commit_new_fee (dA,dB) = if (Q((ch.caller == u)))
1060+@Callable(cB)
1061+func commit_new_fee (dz,dA) = if (Q((cB.caller == u)))
10631062 then throw("only owner")
10641063 else if (Q((C == 0)))
10651064 then throw("active action")
1066- else if (Q((j >= dA)))
1065+ else if (Q((j >= dz)))
10671066 then throw("fee exceeds maximum")
1068- else if (Q((i >= dB)))
1067+ else if (Q((i >= dA)))
10691068 then throw("admin fee exceeds maximum")
10701069 else {
1071- let dC = (P + m)
1072-[IntegerEntry("admin_actions_deadline", dC), IntegerEntry("future_fee", dA), IntegerEntry("future_admin_fee", dB)]
1070+ let dB = (P + m)
1071+[IntegerEntry("admin_actions_deadline", dB), IntegerEntry("future_fee", dz), IntegerEntry("future_admin_fee", dA)]
10731072 }
10741073
10751074
10761075
1077-@Callable(ch)
1078-func apply_new_fee () = if (Q((ch.caller == u)))
1076+@Callable(cB)
1077+func apply_new_fee () = if (Q((cB.caller == u)))
10791078 then throw("only owner")
10801079 else if (Q((P >= C)))
10811080 then throw("insufficient time")
10821081 else if (Q((C != 0)))
10831082 then throw("no active action")
10841083 else [IntegerEntry("admin_actions_deadline", 0), IntegerEntry("fee", E), IntegerEntry("admin_fee", F)]
10851084
10861085
10871086
1088-@Callable(ch)
1089-func revert_new_parameters () = if (Q((ch.caller == u)))
1087+@Callable(cB)
1088+func revert_new_parameters () = if (Q((cB.caller == u)))
10901089 then throw("only owner")
10911090 else [IntegerEntry("admin_actions_deadline", 0)]
10921091
10931092
10941093
1095-@Callable(ch)
1096-func commit_transfer_ownership (ci) = if (Q((ch.caller == u)))
1094+@Callable(cB)
1095+func commit_transfer_ownership (cC) = if (Q((cB.caller == u)))
10971096 then throw("only owner")
10981097 else if (Q((D == 0)))
10991098 then throw("active transfer")
11001099 else {
1101- let dC = (P + m)
1102-[IntegerEntry("transfer_ownership_deadline", dC), StringEntry("future_owner", av(ci))]
1100+ let dB = (P + m)
1101+[IntegerEntry("transfer_ownership_deadline", dB), StringEntry("future_owner", av(cC))]
11031102 }
11041103
11051104
11061105
1107-@Callable(ch)
1108-func apply_transfer_ownership () = if (Q((ch.caller == u)))
1106+@Callable(cB)
1107+func apply_transfer_ownership () = if (Q((cB.caller == u)))
11091108 then throw("only owner")
11101109 else if (Q((P >= D)))
11111110 then throw("insufficient time")
11121111 else if (Q((D != 0)))
11131112 then throw("no active transfer")
11141113 else [IntegerEntry("transfer_ownership_deadline", 0), StringEntry("owner", G)]
11151114
11161115
11171116
1118-@Callable(ch)
1119-func revert_transfer_ownership () = if (Q((ch.caller == u)))
1117+@Callable(cB)
1118+func revert_transfer_ownership () = if (Q((cB.caller == u)))
11201119 then throw("only owner")
11211120 else [IntegerEntry("transfer_ownership_deadline", 0)]
11221121
11231122
11241123
1125-@Callable(ch)
1124+@Callable(cB)
11261125 func admin_balances (au) = $Tuple2(nil, at(au))
11271126
11281127
11291128
1130-@Callable(ch)
1131-func withdraw_admin_fees () = if (Q((ch.caller == u)))
1129+@Callable(cB)
1130+func withdraw_admin_fees () = if (Q((cB.caller == u)))
11321131 then throw("only owner")
11331132 else {
11341133 func U (V,al) = (V :+ ScriptTransfer(u, at(al), fromBase58String(q[al])))
11351134
11361135 let X = am
11371136 let Y = size(X)
11381137 let Z = nil
11391138 func aa (ab,ac) = if ((ac >= Y))
11401139 then ab
11411140 else U(ab, X[ac])
11421141
11431142 func ad (ab,ac) = if ((ac >= Y))
11441143 then ab
11451144 else throw("List size exceeds 10")
11461145
11471146 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11481147 }
11491148
11501149
11511150
1152-@Callable(ch)
1153-func donate_admin_fees () = if (Q((ch.caller == u)))
1151+@Callable(cB)
1152+func donate_admin_fees () = if (Q((cB.caller == u)))
11541153 then throw("only owner")
11551154 else {
11561155 func U (V,al) = (V :+ (af[al] + at(al)))
11571156
1158- let cE = {
1157+ let ch = {
11591158 let X = am
11601159 let Y = size(X)
11611160 let Z = nil
11621161 func aa (ab,ac) = if ((ac >= Y))
11631162 then ab
11641163 else U(ab, X[ac])
11651164
11661165 func ad (ab,ac) = if ((ac >= Y))
11671166 then ab
11681167 else throw("List size exceeds 10")
11691168
11701169 ad(aa(aa(aa(aa(aa(aa(aa(aa(aa(aa(Z, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11711170 }
1172-[StringEntry("balances", makeString(S(cE), ","))]
1171+[StringEntry("balances", makeString(S(ch), ","))]
11731172 }
11741173
11751174
11761175
1177-@Callable(ch)
1178-func set_auto_fees (dD) = if (Q((ch.caller == u)))
1176+@Callable(cB)
1177+func set_auto_fees (dC) = if (Q((cB.caller == u)))
11791178 then throw("only owner")
1180- else [BooleanEntry("is_auto_fees", dD)]
1179+ else [BooleanEntry("is_auto_fees", dC)]
11811180
11821181
11831182
1184-@Callable(ch)
1185-func kill_me () = if (Q((ch.caller == u)))
1183+@Callable(cB)
1184+func kill_me () = if (Q((cB.caller == u)))
11861185 then throw("only owner")
11871186 else if (Q((I > P)))
11881187 then throw("deadline has passed")
11891188 else [BooleanEntry("is_killed", true)]
11901189
11911190
11921191
1193-@Callable(ch)
1194-func unkill_me () = if (Q((ch.caller == u)))
1192+@Callable(cB)
1193+func unkill_me () = if (Q((cB.caller == u)))
11951194 then throw("only owner")
11961195 else [BooleanEntry("is_killed", false)]
11971196
11981197
11991198
1200-@Callable(ch)
1201-func set_height_address (dE) = if ((ch.caller != u))
1199+@Callable(cB)
1200+func set_height_address (dD) = if ((cB.caller != u))
12021201 then throw("only owner")
1203- else [StringEntry("heightAddress", av(dE))]
1202+ else [StringEntry("heightAddress", av(dD))]
12041203
12051204
12061205
12071206 @Callable(au)
1208-func set_verifier (dF) = if ((au.caller != this))
1207+func set_verifier (dE) = if ((au.caller != this))
12091208 then throw("self call only")
12101209 else {
1211- let dG = {
1212- let ar = addressFromString(dF)
1210+ let dF = {
1211+ let ar = addressFromString(dE)
12131212 if ($isInstanceOf(ar, "Address"))
12141213 then {
12151214 let R = ar
12161215 true
12171216 }
12181217 else false
12191218 }
1220- if (!(dG))
1221- then throw(("verifier wrong address " + dF))
1219+ if (!(dF))
1220+ then throw(("verifier wrong address " + dE))
12221221 else if (isDefined(getString(this, "verifier")))
12231222 then throw("verifier already defined")
1224- else [StringEntry("verifier", dF)]
1223+ else [StringEntry("verifier", dE)]
12251224 }
12261225
12271226
1228-@Verifier(dH)
1229-func dI () = {
1227+@Verifier(dG)
1228+func dH () = {
12301229 let ar = getString(this, "verifier")
12311230 if ($isInstanceOf(ar, "String"))
12321231 then {
1233- let dF = ar
1234- valueOrElse(getBoolean(addressFromStringValue(dF), ((("status_" + toString(this)) + "_") + toBase58String(dH.id))), false)
1232+ let dE = ar
1233+ valueOrElse(getBoolean(addressFromStringValue(dE), ((("status_" + toString(this)) + "_") + toBase58String(dG.id))), false)
12351234 }
1236- else sigVerify(dH.bodyBytes, dH.proofs[0], dH.senderPublicKey)
1235+ else sigVerify(dG.bodyBytes, dG.proofs[0], dG.senderPublicKey)
12371236 }
12381237

github/deemru/w8io/169f3d6 
415.46 ms