tx · EGBLnMB1KVSq11AR38xr4j5WLjmgbqUdbv3iy4FYUxNb

3N8rRK2qY9gks7UiTZbno3oU9ZxHsjf6Nxg:  -0.03700000 Waves

2022.09.07 11:27 [2218451] smart account 3N8rRK2qY9gks7UiTZbno3oU9ZxHsjf6Nxg > SELF 0.00000000 Waves

{ "type": 13, "id": "EGBLnMB1KVSq11AR38xr4j5WLjmgbqUdbv3iy4FYUxNb", "fee": 3700000, "feeAssetId": null, "timestamp": 1662539241008, "version": 2, "chainId": 84, "sender": "3N8rRK2qY9gks7UiTZbno3oU9ZxHsjf6Nxg", "senderPublicKey": "BGaHqWWh2PA55UDpG3EMuoSRrrPo348kqpXax829kygz", "proofs": [ "4q3Pgr6iHPj5ndYABWUNWptEFtMeoGDKE2eJUn8cbj7nx6L5oVLoGd6vrmzHQJcnVydBuUZVHd2GKhjKagFwW7fs", "nt1WVLJCyHK17amPyX5BGTZFvgxB99XfvBBkKnuLwUsqSw637pUWkWHodp3ExhdX4qGqmQUHSG3Xjs2GXxQEv4K" ], "script": "base64:BgJjCAISBAoCEQESBgoECAEBBBIECgIBBBIDCgEBEgYKBAgIAQgSBAoCCAESAwoBERIECgIRARIFCgMBCAgSBAoCCAESBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIDCgEBXQAJUFJFQ0lTSU9OAMCEPQAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgAIREVDSU1BTFMABgANTUlOX1JBTVBfVElNRQkAaQIAgKMFADwAB3ZlcnNpb24CBTMuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0Fzc2V0cwIJYXNzZXRfaWRzAA1rQXNzZXRCYWxhbmNlAghfYmFsYW5jZQAHa0FjdGl2ZQIGYWN0aXZlAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rU2hhcmVBc3NldElkAg5zaGFyZV9hc3NldF9pZAARa1NoYXJlQXNzZXRTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAEa0ZlZQIKY29tbWlzc2lvbgASa0RBcHBUaHJlc2hvbGRDb2VmAhFkQXBwVGhyZXNob2xkQ29lZgAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQADWtGaXJzdEhhcnZlc3QCDWZpcnN0X2hhcnZlc3QAE2tGaXJzdEhhcnZlc3RIZWlnaHQCFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAtrU2hhcmVMaW1pdAIcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAALa0Jhc2VQZXJpb2QCC2Jhc2VfcGVyaW9kAA1rUGVyaW9kTGVuZ3RoAg1wZXJpb2RfbGVuZ3RoAAxrU3RhcnRIZWlnaHQCDHN0YXJ0X2hlaWdodAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwAGb3JhY2xlCQEHQWRkcmVzcwEBGgFU6UWqHpAvOq7xug7mLpqSXxqYhOHzYrMIARNnZXRCYXNlNThGcm9tT3JhY2xlAQNrZXkEByRtYXRjaDAJAJ0IAgUGb3JhY2xlBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAJANkEAQUGc3RyaW5nBAdub3RoaW5nBQckbWF0Y2gwCQACAQkArAICBQNrZXkCCGlzIGVtcHR5AAxhZG1pblB1YktleTEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MQAMYWRtaW5QdWJLZXkyCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTIADGFkbWluUHViS2V5MwkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkzABFhZG1pblB1YktleUludm9rZQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRJrQWRtaW5JbnZva2VQdWJLZXkAD21vbmV5Qm94QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEGtNb25leUJveEFkZHJlc3MACmdvdkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQtrR292QWRkcmVzcwASc3Rha2luZ1VTRE5BZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5BZGRyZXNzAA12b3RpbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUOa1ZvdGluZ0FkZHJlc3MADmZhcm1pbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUPa0Zhcm1pbmdBZGRyZXNzABJjYXBNb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQEaAVTpRaoekC86rvG6DuYumpJfGpiE4fNiswgABFVTRE4BIG8ko8qrMNxSKZjoLGFa7lp/I03CLXW76Z2qVODS0AfBAA1zdGFraW5nQXNzZXRzCQDMCAIJANgEAQUEVVNETgUDbmlsAApiYXNlUGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwULa0Jhc2VQZXJpb2QCEUVtcHR5IGtCYXNlUGVyaW9kAAtzdGFydEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFDGtTdGFydEhlaWdodAISRW1wdHkga1N0YXJ0SGVpZ2h0AAxwZXJpb2RMZW5ndGgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQ1rUGVyaW9kTGVuZ3RoAhNFbXB0eSBrUGVyaW9kTGVuZ3RoABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QJAGQCCQBkAgUKYmFzZVBlcmlvZAkAaQIJAGUCBQZoZWlnaHQFC3N0YXJ0SGVpZ2h0BQxwZXJpb2RMZW5ndGgAAwAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAxzaGFyZUFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa1NoYXJlQXNzZXRJZAALc2hhcmVTdXBwbHkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtTaGFyZUFzc2V0U3VwcGx5AAlmZWVTY2FsZTYAwIQ9AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDACgFCWZlZVNjYWxlNgBkAAlpbml0aWFsX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCWluaXRpYWxfQQAIZnV0dXJlX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCGZ1dHVyZV9BAA5pbml0aWFsX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg5pbml0aWFsX0FfdGltZQAAAA1mdXR1cmVfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDWZ1dHVyZV9BX3RpbWUAAAAIYXNzZXRJZHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUHa0Fzc2V0cwIBLAAGbkNvaW5zCQCQAwEFCGFzc2V0SWRzAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQ10aHJvd0lzQWN0aXZlAAkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUBCGlzQWN0aXZlAAMFBmFjdGl2ZQUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIFBHRoaXMIBQFpBmNhbGxlcgUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24ABGJpZzIJALYCAQACAA5ibG9ja1RpbWVzdGFtcAUGaGVpZ2h0AQZhc3NlcnQBAWEDBQFhBwYBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQh1c2VyQWRkcgQKc3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIJAKUIAQUIdXNlckFkZHIFDmtVc2VyU3dvcEluR292AAAEDmRpc2NvdW50VmFsdWVzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUPa0Rpc2NvdW50VmFsdWVzAgEsBAlkaXNjb3VudHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQprRGlzY291bnRzAgEsAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAAkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAAAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwABAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwACAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAEBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwADAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAECQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAQFCWZlZVNjYWxlNgECX0EABAJ0MQUNZnV0dXJlX0FfdGltZQQCQTEFCGZ1dHVyZV9BAwkAZgIFAnQxBQ5ibG9ja1RpbWVzdGFtcAQCQTAFCWluaXRpYWxfQQQCdDAFDmluaXRpYWxfQV90aW1lAwkAZgIFAkExBQJBMAkAZAIFAkEwCQBpAgkAaAIJAGUCBQJBMQUCQTAJAGUCBQ5ibG9ja1RpbWVzdGFtcAUCdDAJAGUCBQJ0MQUCdDAJAGUCBQJBMAkA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DSR0MDEwNTM0MTA1OTgCXzEEBWluZGV4CAUNJHQwMTA1MzQxMDU5OAJfMgQMeHBfcmVkdWNlZF9pCQCRAwIFCnhwX3JlZHVjZWQFAWkEAmR5CQBlAgkAZQIFDHhwX3JlZHVjZWRfaQkBB2dldF95X0QEBQNhbXAFAWkFCnhwX3JlZHVjZWQFAkQxAAEJAJQKAgUCZHkJAGUCBQRkeV8wBQJkeQENZ2V0U3RyQXNzZXRJZAEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA2AQBBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgVzdGFrZQdhc3NldElkAwUFc3Rha2UJAJQKAgIMbG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MJAJQKAgIOdW5sb2NrTmV1dHJpbm8FEnN0YWtpbmdVU0ROQWRkcmVzcwERY2FsY1N0YWtpbmdQYXJhbXMDBXN0YWtlBmFtb3VudAdhc3NldElkAwUFc3Rha2UEDSR0MDExMTYyMTEyMjgJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDExMTYyMTEyMjgCXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTExNjIxMTIyOAJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldElkBQZhbW91bnQFA25pbAQNJHQwMTEzMTQxMTM4MAkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAUNJHQwMTEzMTQxMTM4MAJfMQQLc3Rha2luZ0FkZHIIBQ0kdDAxMTMxNDExMzgwAl8yCQCWCgQFBGNhbGwFC3N0YWtpbmdBZGRyCQDMCAIFBmFtb3VudAkAzAgCCQDYBAEFB2Fzc2V0SWQFA25pbAUDbmlsAQVzdGFrZQIGYW1vdW50DWFzc2V0SWRTdHJpbmcDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUNYXNzZXRJZFN0cmluZwQNJHQwMTE1NjcxMTY2OQkBEWNhbGNTdGFraW5nUGFyYW1zAwYFBmFtb3VudAkA2QQBBQ1hc3NldElkU3RyaW5nBARjYWxsCAUNJHQwMTE1NjcxMTY2OQJfMQQEYWRkcggFDSR0MDExNTY3MTE2NjkCXzIEBnBhcmFtcwgFDSR0MDExNTY3MTE2NjkCXzMECHBheW1lbnRzCAUNJHQwMTE1NjcxMTY2OQJfNAkA/AcEBQRhZGRyBQRjYWxsBQZwYXJhbXMFCHBheW1lbnRzAAABB3Vuc3Rha2UCBmFtb3VudA1hc3NldElkU3RyaW5nAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDWFzc2V0SWRTdHJpbmcEDSR0MDExODU0MTE5NTcJARFjYWxjU3Rha2luZ1BhcmFtcwMHBQZhbW91bnQJANkEAQUNYXNzZXRJZFN0cmluZwQEY2FsbAgFDSR0MDExODU0MTE5NTcCXzEEBGFkZHIIBQ0kdDAxMTg1NDExOTU3Al8yBAZwYXJhbXMIBQ0kdDAxMTg1NDExOTU3Al8zBAhwYXltZW50cwgFDSR0MDExODU0MTE5NTcCXzQJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwAAAQxzdGFrZWRBbW91bnQBB2Fzc2V0SWQEFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQDYUlkBQckbWF0Y2gwAwkAAAIFA2FJZAUEVVNETgkAmggCBRJzdGFraW5nVVNETkFkZHJlc3MJAKwCAgkArAICCQCsAgICDHJwZF9iYWxhbmNlXwkA2AQBBQNhSWQCAV8JAKUIAQUEdGhpcwAAAwkAAQIFByRtYXRjaDACBFVuaXQAAAkAAgECC01hdGNoIGVycm9yBAckbWF0Y2gwBRZzdGFrZWRBbW91bnRDYWxjdWxhdGVkAwkAAQIFByRtYXRjaDACA0ludAQBaQUHJG1hdGNoMAUBaQAAAQ9jaGVja1N1c3BpY2lvdXMABBBjb250cmFjdEJhbGFuY2VzCQEDX3hwAAoBDGNoZWNrQmFsYW5jZQIDYWNjB2Fzc2V0SWQEDSR0MDEyNTY4MTI1OTMFA2FjYwQKc3VzcGljaW91cwgFDSR0MDEyNTY4MTI1OTMCXzEEAWkIBQ0kdDAxMjU2ODEyNTkzAl8yAwUKc3VzcGljaW91cwkAlAoCBQpzdXNwaWNpb3VzBQFpBAhhQmFsYW5jZQkAZAIJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkCQEMc3Rha2VkQW1vdW50AQkA2QQBBQdhc3NldElkAwkAZgIJAJEDAgUQY29udHJhY3RCYWxhbmNlcwUBaQUIYUJhbGFuY2UJAJQKAgYFAWkJAJQKAgcJAGQCBQFpAAEKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIHAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGNoZWNrQmFsYW5jZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8BEXN1c3BlbmRTdXNwaWNpb3VzAQFpCQEHc3VzcGVuZAEJAKwCAgIdU3VzcGljaW91cyBzdGF0ZSB3aXRoIGFzc2V0OiAJAJEDAgUIYXNzZXRJZHMFAWkBDnJldHVyblBheW1lbnRzAgZjYWxsZXIIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHcGF5bWVudAkAzQgCBQNhY2MJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcggFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkCgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1wYXJzZVBheW1lbnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwESY2hlY2tEQXBwVGhyZXNob2xkAQtuZXdCYWxhbmNlcwQRZEFwcFRocmVzaG9sZENvZWYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBRJrREFwcFRocmVzaG9sZENvZWYCGE5vIGRBcHBUaHJlc2hvbGRDb2VmIGtleQQOdGhyZXNob2xkU2NhbGUAkE4ECm1heEJhbGFuY2UJAJYDAQULbmV3QmFsYW5jZXMECm1pbkJhbGFuY2UJAJcDAQULbmV3QmFsYW5jZXMEBXJhdGlvCQBrAwUKbWF4QmFsYW5jZQUOdGhyZXNob2xkU2NhbGUFCm1pbkJhbGFuY2UDCQBmAgUFcmF0aW8JAGgCBRFkQXBwVGhyZXNob2xkQ29lZgUOdGhyZXNob2xkU2NhbGUJAAIBAjhOZXcgYmFsYW5jZSBpbiBhc3NldHMgb2YgdGhlIERBcHAgaXMgbGVzcyB0aGFuIHRocmVzaG9sZAcBCmNoZWNrQ29pbnMBCGFzc2V0SWRzBAVjb2lucwkAtQkCBQhhc3NldElkcwIBLAoBCWNoZWNrQ29pbgIFZXJyb3IHYXNzZXRJZAQFYXNzZXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA2QQBBQdhc3NldElkCQCsAgICEmZyb21CYXNlNThTdHJpbmc6IAUHYXNzZXRJZAQIZGVjaW1hbHMICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUFYXNzZXQJAKwCAgILYXNzZXRJbmZvOiAFB2Fzc2V0SWQIZGVjaW1hbHMDCQECIT0CBQhkZWNpbWFscwUIREVDSU1BTFMJAAIBAg53cm9uZyBkZWNpbWFscwcKAAIkbAUFY29pbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJY2hlY2tDb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADxMDbXNnAQFEAgJ4cANhbXAEAUQJAQ5nZXRfRF9pbnRlcm5hbAIFAnhwBQNhbXAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgIBRAUBRAUDbmlsBQFEA21zZwEEaW5pdAQIYXNzZXRJZHMCX0ESX2RBcHBUaHJlc2hvbGRDb2VmDGZpcnN0SGFydmVzdAMJAQEhAQkAnggBBQR0aGlzCQACAQITQWxyZWFkeSBpbml0aWFsaXplZAMJAGcCAAAFAl9BCQACAQIUQW1wIG11c3QgYmUgbXVzdCA+IDADCQBnAgAABRJfZEFwcFRocmVzaG9sZENvZWYJAAIBAh9kQXBwIFRocmVzaG9sZCBDb2VmIG11c3QgYmUgPiAwBAlzaGFyZU5hbWUCC3NfTXVsdGlfVVNEBBBzaGFyZURlc2NyaXB0aW9uCQCsAgICQlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciBNdWx0aVN0YWJsZSBVU0QgcG9vbCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBAppc3N1ZVRva2VuCQDCCAUFCXNoYXJlTmFtZQUQc2hhcmVEZXNjcmlwdGlvbgAAAAYGBAd0b2tlbklkCQC4CAEFCmlzc3VlVG9rZW4DCQEKY2hlY2tDb2lucwEFCGFzc2V0SWRzCQEFdGhyb3cABAliYXNlRW50cnkJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa1ZlcnNpb24FB3ZlcnNpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUHa0Fzc2V0cwUIYXNzZXRJZHMJAMwIAgkBDEludGVnZXJFbnRyeQICCWluaXRpYWxfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQJfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUGb3JhY2xlAg1iYXNlX2ZlZV9mbGF0CQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtTaGFyZUFzc2V0SWQJANgEAQUHdG9rZW5JZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa0RBcHBUaHJlc2hvbGRDb2VmBRJfZEFwcFRocmVzaG9sZENvZWYJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIFCmlzc3VlVG9rZW4FA25pbAMFDGZpcnN0SGFydmVzdAkAzggCBQliYXNlRW50cnkJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtGaXJzdEhhcnZlc3QFDGZpcnN0SGFydmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa0ZpcnN0SGFydmVzdEhlaWdodAkAZAIFC3N0YXJ0SGVpZ2h0CQBoAgUVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kBQxwZXJpb2RMZW5ndGgFA25pbAUJYmFzZUVudHJ5A21zZwEMYWRkTGlxdWlkaXR5Ag1taW5NaW50QW1vdW50DHN0YWtlRmFybWluZwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQDYW1wCQECX0EABAJ4cAkBA194cAAEAkQwAwkAAAIFC3NoYXJlU3VwcGx5AAAAAAkBB2dldERNZW0CBQJ4cAUDYW1wBAhwYXltZW50cwgFA21zZwhwYXltZW50cwQMcGF5bWVudHNTaXplCQCQAwEFCHBheW1lbnRzCgENdmFsaWRQYXltZW50cwEBbgMJAGYCBQxwYXltZW50c1NpemUFBm5Db2lucwkAAgEJAKwCAgIQcGF5bWVudHMgc2l6ZSA+IAkApAMBBQZuQ29pbnMDCQBmAgABBQxwYXltZW50c1NpemUJAAIBAhFwYXltZW50cyBzaXplIDwgMQMDCQAAAgULc2hhcmVTdXBwbHkAAAkBAiE9AgUGbkNvaW5zBQxwYXltZW50c1NpemUHCQACAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwoBDHBheW1hbnRWYWxpZAIDYWNjB3BheW1lbnQDCQEPY29udGFpbnNFbGVtZW50AgUIYXNzZXRJZHMJAQ1nZXRTdHJBc3NldElkAQgFB3BheW1lbnQHYXNzZXRJZAYJAAIBAhhJbnZhbGlkIGFzc2V0IGluIHBheW1lbnQKAAIkbAUIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMcGF5bWFudFZhbGlkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwMJAQEhAQkBDXZhbGlkUGF5bWVudHMBBQxwYXltZW50c1NpemUJAQV0aHJvdwAECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyBQhwYXltZW50cwoBDXBhcnNlUGF5bWVudHMCA2FjYwdhc3NldElkBA0kdDAxNjkwMTE2OTMwBQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMTY5MDExNjkzMAJfMQQBaQgFDSR0MDE2OTAxMTY5MzACXzIEAWoIBQ0kdDAxNjkwMTE2OTMwAl8zAwMJAGYCBQxwYXltZW50c1NpemUFAWoJAAACCQENZ2V0U3RyQXNzZXRJZAEICQCRAwIFCHBheW1lbnRzBQFqB2Fzc2V0SWQFB2Fzc2V0SWQHCQCVCgMJAM0IAgULbmV3QmFsYW5jZXMJAGQCCQCRAwIFAnhwBQFpCAkAkQMCBQhwYXltZW50cwUBagZhbW91bnQJAGQCBQFpAAEJAGQCBQFqAAEJAJUKAwkAzQgCBQtuZXdCYWxhbmNlcwkAkQMCBQJ4cAUBaQkAZAIFAWkAAQUBagQNJHQwMTcxNTAxNzIzNgoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENcGFyc2VQYXltZW50cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC25ld0JhbGFuY2VzCAUNJHQwMTcxNTAxNzIzNgJfMQQBawgFDSR0MDE3MTUwMTcyMzYCXzIEDnBhcnNlZFBheW1lbnRzCAUNJHQwMTcxNTAxNzIzNgJfMwMJAGYCBQxwYXltZW50c1NpemUFDnBhcnNlZFBheW1lbnRzCQACAQIXSW5jb3JlY3QgcGF5bWVudHMgb3JkZXIDCQESY2hlY2tEQXBwVGhyZXNob2xkAQULbmV3QmFsYW5jZXMJAQV0aHJvdwAEAkQxCQEHZ2V0RE1lbQIFC25ld0JhbGFuY2VzBQNhbXADCQEGYXNzZXJ0AQkAZgIFAkQxBQJEMAkAAgECB0QxID4gRDAEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCAUDbXNnBmNhbGxlcgoBEWNhbGNTY3JpcHRBY3Rpb25zAgNhY2MKbmV3QmFsYW5jZQQNJHQwMTc2MzcxNzY3OAUDYWNjBAtpbnZCYWxhbmNlcwgFDSR0MDE3NjM3MTc2NzgCXzEEDXNjcmlwdEFjdGlvbnMIBQ0kdDAxNzYzNzE3Njc4Al8yBAFpCAUNJHQwMTc2MzcxNzY3OAJfMwMJAGYCBQtzaGFyZVN1cHBseQAABARfZmVlCQBpAgkAaAIJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFBm5Db2lucwkAaAIABAkAZQIFBm5Db2lucwABBARmZWVzBAxpZGVhbEJhbGFuY2UJAGsDBQJEMQkAkQMCBQJ4cAUBaQUCRDAECmRpZmZlcmVuY2UDCQBmAgUMaWRlYWxCYWxhbmNlBQpuZXdCYWxhbmNlCQBlAgUMaWRlYWxCYWxhbmNlBQpuZXdCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUMaWRlYWxCYWxhbmNlCQBrAwUEX2ZlZQUKZGlmZmVyZW5jZQUJZmVlU2NhbGU2BA5nb3Zlcm5hbmNlRmVlcwkAawMFBGZlZXMFDWZlZUdvdmVybmFuY2UFCWZlZVNjYWxlNgQMZmluYWxCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUEZmVlcwQQaW52YXJpYW50QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMEA3BtdAkAZQIFCm5ld0JhbGFuY2UJAJEDAgUCeHAFAWkEA2ludgMJAGYCBQNwbXQAAAkBBXN0YWtlAgkAZQIFA3BtdAUEZmVlcwkAkQMCBQhhc3NldElkcwUBaQkBB3Vuc3Rha2UCBQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFA2ludgUDaW52CQCVCgMJAM0IAgULaW52QmFsYW5jZXMFEGludmFyaWFudEJhbGFuY2UJAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRJjYXBNb25leUJveEFkZHJlc3MJAGUCBQRmZWVzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMJANkEAQkAkQMCBQhhc3NldElkcwUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQxmaW5hbEJhbGFuY2UFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQDaW52CQEFc3Rha2UCBQpuZXdCYWxhbmNlCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFA2ludgUDaW52CQCVCgMJAM0IAgULaW52QmFsYW5jZXMFCm5ld0JhbGFuY2UJAM0IAgUNc2NyaXB0QWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUBaQUNa0Fzc2V0QmFsYW5jZQUKbmV3QmFsYW5jZQkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMTkyMjYxOTMxNAoAAiRsBQtuZXdCYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2FsY1NjcmlwdEFjdGlvbnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtpbnZCYWxhbmNlcwgFDSR0MDE5MjI2MTkzMTQCXzEEDXNjcmlwdEFjdGlvbnMIBQ0kdDAxOTIyNjE5MzE0Al8yBAJEMgkBB2dldERNZW0CBQtpbnZCYWxhbmNlcwUDYW1wBAttaW50X2Ftb3VudAMJAAACBQtzaGFyZVN1cHBseQAABQJEMQkAawMFC3NoYXJlU3VwcGx5CQBlAgUCRDIFAkQwBQJEMAMJAQZhc3NlcnQBCQBnAgULbWludF9hbW91bnQFDW1pbk1pbnRBbW91bnQJAAIBAhRTbGlwcGFnZSBzY3Jld2VkIHlvdQMFDHN0YWtlRmFybWluZwQCcmUJAPwHBAUEdGhpcwIMcmVpc3N1ZVNoYXJlCQDMCAIFC21pbnRfYW1vdW50BQNuaWwFA25pbAMJAAACBQJyZQUCcmUEAXMJAPwHBAUOZmFybWluZ0FkZHJlc3MCD2xvY2tTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQttaW50X2Ftb3VudAUDbmlsAwkAAAIFAXMFAXMJAM0IAgUNc2NyaXB0QWN0aW9ucwkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgULc2hhcmVTdXBwbHkFC21pbnRfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgULbWludF9hbW91bnQFDHNoYXJlQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQFA25pbANtc2cBDHJlaXNzdWVTaGFyZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFA21zZwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUGYW1vdW50BgUDbmlsA21zZwEFZ2V0RHkECWFzc2V0RnJvbQdhc3NldFRvAmR4C3VzZXJBZGRyZXNzBAJ4cAkBA194cAAECWZyb21JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQlhc3NldEZyb20CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHYXNzZXRUbwIRdW5rbm93biB0b2tlbiBvdXQEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEAmR5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEJAQdBZGRyZXNzAQkA2QQBBQt1c2VyQWRkcmVzcwQEX2ZlZQkAawMJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFAmR5BQlmZWVTY2FsZTYJAJQKAgUDbmlsCQCUCgIJAGUCBQJkeQUEX2ZlZQUEX2ZlZQNtc2cBCGV4Y2hhbmdlAgh0b2tlbk91dAZtaW5fZHkJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAQHdG9rZW5JbgkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQCZHgIBQdwYXltZW50BmFtb3VudAQJZnJvbUluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFB3Rva2VuSW4CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAJ4cAkBA194cAAEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEA19keQkAZQIJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQF5AAEEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCAUDbXNnBmNhbGxlcgQEX2ZlZQkAawMFA19keQkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAJkeQkAZQIFA19keQUEX2ZlZQQOZ292ZXJuYW5jZUZlZXMJAGsDBQRfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYDCQEGYXNzZXJ0AQkAZwIFAmR5BQZtaW5fZHkJAAIBAi5FeGNoYW5nZSByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyMjAyNjIyMDUyBQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjIwMjYyMjA1MgJfMQQBaQgFDSR0MDIyMDI2MjIwNTICXzIDCQAAAgUBaQUJZnJvbUluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGQCBQx0b2tlbkJhbGFuY2UFAmR4CQBkAgUBaQABAwkAAAIFAWkFB3RvSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUDX2R5CQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjIzMDMyMjM2NAoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC25ld0JhbGFuY2VzCAUNJHQwMjIzMDMyMjM2NAJfMQQBaQgFDSR0MDIyMzAzMjIzNjQCXzIDCQESY2hlY2tEQXBwVGhyZXNob2xkAQULbmV3QmFsYW5jZXMJAQV0aHJvdwAEAXMJAQVzdGFrZQIIBQdwYXltZW50BmFtb3VudAkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkAwkAAAIFAXMFAXMEAnVzCQEHdW5zdGFrZQIFA19keQUIdG9rZW5PdXQDCQAAAgUCdXMFAnVzCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JbgUNa0Fzc2V0QmFsYW5jZQUBeAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQh0b2tlbk91dAUNa0Fzc2V0QmFsYW5jZQkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFA19keQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgUCZHkFC3Rva2VuT3V0QjU4CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFEmNhcE1vbmV5Qm94QWRkcmVzcwkAZQIFBF9mZWUFDmdvdmVybmFuY2VGZWVzBQt0b2tlbk91dEI1OAUDbmlsCQDMCAIFAmR5CQDMCAIFC3Rva2VuT3V0QjU4BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQh3aXRoZHJhdwEKbWluQW1vdW50cwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQJcG10QW1vdW50CAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50BApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbgQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwxvcmlnaW5DYWxsZXIIBQNtc2cIcGF5bWVudHMKARFjYWxjU2NyaXB0QWN0aW9ucwIDYWNjB2JhbGFuY2UEDSR0MDIzNTA1MjM1MzMFA2FjYwQNc2NyaXB0QWN0aW9ucwgFDSR0MDIzNTA1MjM1MzMCXzEEAWkIBQ0kdDAyMzUwNTIzNTMzAl8yBAd3QW1vdW50CQBrAwUHYmFsYW5jZQUJcG10QW1vdW50BQtzaGFyZVN1cHBseQMJAQZhc3NlcnQBCQBnAgUHd0Ftb3VudAkAkQMCBQptaW5BbW91bnRzBQFpCQACAQIwV2l0aGRyYXdhbCByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkBAJ1cwkBB3Vuc3Rha2UCBQd3QW1vdW50CQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFAnVzBQJ1cwkAlAoCCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUBaQUNa0Fzc2V0QmFsYW5jZQkAZQIFB2JhbGFuY2UFB3dBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFA21zZwxvcmlnaW5DYWxsZXIFB3dBbW91bnQJANkEAQkAkQMCBQhhc3NldElkcwUBaQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAyNDAyMzI0MDkxCgACJGwJAQNfeHAACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2FsY1NjcmlwdEFjdGlvbnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBA1zY3JpcHRBY3Rpb25zCAUNJHQwMjQwMjMyNDA5MQJfMQQBaQgFDSR0MDI0MDIzMjQwOTECXzIJAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFC3NoYXJlU3VwcGx5BQlwbXRBbW91bnQFA25pbANtc2cBEndpdGhkcmF3V2l0aFVubG9jawIKbWluQW1vdW50cwx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQBnAgAABQx1bmxvY2tBbW91bnQJAAIBAh5VbmxvY2sgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQDCQBmAgkAkAMBCAUDbXNnCHBheW1lbnRzAAADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUMc2hhcmVBc3NldElkBQpwbXRBc3NldElkCQACAQIVdW5rbm93biBwYXltZW50IHRva2VuCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50AAAEBnVubG9jawkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQDaW52CQD8BwQFBHRoaXMCCHdpdGhkcmF3CQDMCAIFCm1pbkFtb3VudHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnARNjYWxjV2l0aGRyYXdPbmVDb2luAwt0b2tlbkFtb3VudAh0b2tlbk91dAR1c2VyBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAkAlAoCBQNuaWwICQEUX2NhbGNXaXRoZHJhd09uZUNvaW4ECQEDX3hwAAULdG9rZW5BbW91bnQFAWkJAQdBZGRyZXNzAQkA2QQBBQR1c2VyAl8xA21zZwEPd2l0aGRyYXdPbmVDb2luAgh0b2tlbk91dAltaW5BbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cMb3JpZ2luQ2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUKcG10QXNzZXRJZAUMc2hhcmVBc3NldElkCQACAQINdW5rbm93biB0b2tlbgQIb3V0SW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAJ4cAkBA194cAAEDSR0MDI2MDA1MjYwODcJARRfY2FsY1dpdGhkcmF3T25lQ29pbgQFAnhwBQlwbXRBbW91bnQFCG91dEluZGV4CAUDbXNnDG9yaWdpbkNhbGxlcgQCZHkIBQ0kdDAyNjAwNTI2MDg3Al8xBAZkeV9mZWUIBQ0kdDAyNjAwNTI2MDg3Al8yAwkBBmFzc2VydAEJAGcCBQJkeQUJbWluQW1vdW50CQACAQIYTm90IGVub3VnaCBjb2lucyByZW1vdmVkBA5nb3Zlcm5hbmNlRmVlcwkAawMFBmR5X2ZlZQUNZmVlR292ZXJuYW5jZQUJZmVlU2NhbGU2BApkeV9hbmRfZmVlCQBkAgUCZHkFBmR5X2ZlZQoBD21ha2VOZXdCYWxhbmNlcwIDYWNjDHRva2VuQmFsYW5jZQQNJHQwMjYzNDUyNjM3MQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDI2MzQ1MjYzNzECXzEEAWkIBQ0kdDAyNjM0NTI2MzcxAl8yAwkAAAIFAWkFCG91dEluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGUCBQx0b2tlbkJhbGFuY2UFCmR5X2FuZF9mZWUJAGQCBQFpAAEJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUMdG9rZW5CYWxhbmNlCQBkAgUBaQABBA0kdDAyNjUzODI2NTk5CgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPbWFrZU5ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQLbmV3QmFsYW5jZXMIBQ0kdDAyNjUzODI2NTk5Al8xBAF2CAUNJHQwMjY1MzgyNjU5OQJfMgMJARJjaGVja0RBcHBUaHJlc2hvbGQBBQtuZXdCYWxhbmNlcwkBBXRocm93AAQCdXMJAQd1bnN0YWtlAgUKZHlfYW5kX2ZlZQUIdG9rZW5PdXQDCQAAAgUCdXMFAnVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQJkeQkA2QQBBQh0b2tlbk91dAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQhvdXRJbmRleAUNa0Fzc2V0QmFsYW5jZQkAZQIJAJEDAgUCeHAFCG91dEluZGV4BQpkeV9hbmRfZmVlCQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQlwbXRBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBBQh0b2tlbk91dAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRJjYXBNb25leUJveEFkZHJlc3MJAGUCBQZkeV9mZWUFDmdvdmVybmFuY2VGZWVzCQDZBAEFCHRva2VuT3V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFC3NoYXJlU3VwcGx5BQlwbXRBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBGXdpdGhkcmF3T25lQ29pbldpdGhVbmxvY2sDCHRva2VuT3V0CW1pbkFtb3VudAx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQBnAgAABQx1bmxvY2tBbW91bnQJAAIBAh5VbmxvY2sgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQDCQBmAgkAkAMBCAUDbXNnCHBheW1lbnRzAAADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUMc2hhcmVBc3NldElkBQpwbXRBc3NldElkCQACAQIVdW5rbm93biBwYXltZW50IHRva2VuCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50AAAEBnVubG9jawkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQDaW52CQD8BwQFBHRoaXMCD3dpdGhkcmF3T25lQ29pbgkAzAgCBQh0b2tlbk91dAkAzAgCBQltaW5BbW91bnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQFBAAkAlAoCBQNuaWwJAQJfQQADbXNnAQ9nZXRWaXJ0dWFsUHJpY2UABAFECQEFZ2V0X0QCCQEDX3hwAAkBAl9BAAkAlAoCBQNuaWwJAGsDBQFEBQlQUkVDSVNJT04FC3NoYXJlU3VwcGx5A21zZwEPY2FsY1Rva2VuQW1vdW50AgdhbW91bnRzB2RlcG9zaXQEA2FtcAkBAl9BAAQIYmFsYW5jZXMJAQNfeHAABAJEMAkBB2dldERNZW0CBQhiYWxhbmNlcwUDYW1wCgEPY2FsY05ld0JhbGFuY2VzAgNhY2MHYmFsYW5jZQQNJHQwMjg1MjMyODU0OQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDI4NTIzMjg1NDkCXzEEAWkIBQ0kdDAyODUyMzI4NTQ5Al8yBApuZXdCYWxhbmNlCQBkAgUHYmFsYW5jZQMFB2RlcG9zaXQJAJEDAgUHYW1vdW50cwUBaQkBAS0BCQCRAwIFB2Ftb3VudHMFAWkJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUKbmV3QmFsYW5jZQkAZAIFAWkAAQQLbmV3QmFsYW5jZXMICgACJGwFCGJhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY2FsY05ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARhrZWVwTGltaXRGb3JGaXJzdEhhcnZlc3QBCnNoYXJlTGltaXQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwkAzAgCCQEMSW50ZWdlckVudHJ5AgULa1NoYXJlTGltaXQFCnNoYXJlTGltaXQFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQTY2FsbFRha2VJbnRvQWNjb3VudAMJAAACCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQNc2lnbmVkQnlBZG1pbgMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkyBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkzBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAURYWRtaW5QdWJLZXlJbnZva2UDAwUTY2FsbFRha2VJbnRvQWNjb3VudAUNc2lnbmVkQnlBZG1pbgcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5z2XIpEg==", "height": 2218451, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5YdwjdmbsLb2JEDf8wDCL6akoENR8wpxrPuiSRFpuTWC Next: 2de1y9tzD6ABXeXDSppAMtJnkocxi3rQoWAXaxcMzfem Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "3.0.0"
4+let a = 1000000
55
66 let b = 1000000
77
8-let c = 1000000
8+let c = 10
99
10-let d = 10
10+let d = 6
1111
12-let e = 6
12+let e = (86400 / 60)
1313
14-let f = (86400 / 60)
14+let f = "3.0.0"
1515
16-let g = "asset_ids"
16+let g = "version"
1717
18-let h = "_balance"
18+let h = "asset_ids"
1919
20-let i = "active"
20+let i = "_balance"
2121
22-let j = "shutdown_cause"
22+let j = "active"
2323
24-let k = "share_asset_id"
24+let k = "shutdown_cause"
2525
26-let l = "share_asset_supply"
26+let l = "share_asset_id"
2727
28-let m = "commission"
28+let m = "share_asset_supply"
2929
30-let n = "dAppThresholdCoef"
30+let n = "commission"
3131
32-let o = "staking_usdnnsbt_address"
32+let o = "dAppThresholdCoef"
3333
34-let p = "discounts"
34+let p = "staking_usdnnsbt_address"
3535
36-let q = "discount_values"
36+let q = "discounts"
3737
38-let r = "_SWOP_amount"
38+let r = "discount_values"
3939
40-let s = "first_harvest"
40+let s = "_SWOP_amount"
4141
42-let t = "first_harvest_height"
42+let t = "first_harvest"
4343
44-let u = "share_limit_on_first_harvest"
44+let u = "first_harvest_height"
4545
46-let v = "base_period"
46+let v = "share_limit_on_first_harvest"
4747
48-let w = "period_length"
48+let w = "base_period"
4949
50-let x = "start_height"
50+let x = "period_length"
5151
52-let y = "admin_pub_1"
52+let y = "start_height"
5353
54-let z = "admin_pub_2"
54+let z = "admin_pub_1"
5555
56-let B = "admin_pub_3"
56+let B = "admin_pub_2"
5757
58-let C = "admin_invoke_pub"
58+let C = "admin_pub_3"
5959
60-let E = "money_box_address"
60+let E = "admin_invoke_pub"
6161
62-let F = "governance_address"
62+let F = "money_box_address"
6363
64-let G = "voting_address"
64+let G = "governance_address"
6565
66-let H = "farming_address"
66+let H = "voting_address"
6767
68-let I = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
68+let I = "farming_address"
6969
70-func J (K) = {
71- let L = getString(I, K)
72- if ($isInstanceOf(L, "String"))
70+let J = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
71+
72+func K (L) = {
73+ let M = getString(J, L)
74+ if ($isInstanceOf(M, "String"))
7375 then {
74- let M = L
75- fromBase58String(M)
76+ let N = M
77+ fromBase58String(N)
7678 }
7779 else {
78- let N = L
79- throw((K + "is empty"))
80+ let O = M
81+ throw((L + "is empty"))
8082 }
8183 }
8284
8385
84-let O = J(y)
86+let P = K(z)
8587
86-let P = J(z)
88+let Q = K(B)
8789
88-let Q = J(B)
90+let R = K(C)
8991
90-let R = J(C)
92+let S = K(E)
9193
92-let S = Address(J(E))
94+let T = Address(K(F))
9395
94-let T = Address(J(F))
96+let U = Address(K(G))
9597
96-let U = Address(J(o))
98+let V = Address(K(p))
9799
98-let V = Address(J(G))
100+let W = Address(K(H))
99101
100-let W = Address(J(H))
102+let X = Address(K(I))
101103
102-let X = Address(base58'3MxXHaGvmKQHH3kNrPBunhve1sDXf7M5RZt')
104+let Y = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
103105
104-let Y = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
106+let Z = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
105107
106-let Z = [toBase58String(Y)]
108+let aa = [toBase58String(Z)]
107109
108-let aa = valueOrErrorMessage(getInteger(V, v), "Empty kBasePeriod")
110+let ab = valueOrErrorMessage(getInteger(W, w), "Empty kBasePeriod")
109111
110-let ab = valueOrErrorMessage(getInteger(V, x), "Empty kStartHeight")
112+let ac = valueOrErrorMessage(getInteger(W, y), "Empty kStartHeight")
111113
112-let ac = valueOrErrorMessage(getInteger(V, w), "Empty kPeriodLength")
114+let ad = valueOrErrorMessage(getInteger(W, x), "Empty kPeriodLength")
113115
114-let ad = ((aa + ((height - ab) / ac)) + 3)
116+let ae = ((ab + ((height - ac) / ad)) + 3)
115117
116-let ae = getBooleanValue(this, i)
118+let af = getBooleanValue(this, j)
117119
118-let af = fromBase58String(getStringValue(this, k))
120+let ag = fromBase58String(getStringValue(this, l))
119121
120-let ag = getIntegerValue(this, l)
122+let ah = getIntegerValue(this, m)
121123
122-let ah = 1000000
124+let ai = 1000000
123125
124-let ai = getIntegerValue(this, m)
126+let aj = getIntegerValue(this, n)
125127
126-let aj = fraction(40, ah, 100)
128+let ak = fraction(40, ai, 100)
127129
128-let ak = getIntegerValue(this, "initial_A")
130+let al = getIntegerValue(this, "initial_A")
129131
130-let al = getIntegerValue(this, "future_A")
132+let am = getIntegerValue(this, "future_A")
131133
132-let am = valueOrElse(getInteger(this, "initial_A_time"), 0)
134+let an = valueOrElse(getInteger(this, "initial_A_time"), 0)
133135
134-let an = valueOrElse(getInteger(this, "future_A_time"), 0)
136+let ao = valueOrElse(getInteger(this, "future_A_time"), 0)
135137
136-let ao = split(getStringValue(this, g), ",")
138+let ap = split(getStringValue(this, h), ",")
137139
138-let ap = size(ao)
140+let aq = size(ap)
139141
140-func aq (ar) = [BooleanEntry(i, false), StringEntry(j, ar)]
142+func ar (as) = [BooleanEntry(j, false), StringEntry(k, as)]
141143
142144
143-func as () = throw("DApp is already active")
145+func at () = throw("DApp is already active")
144146
145147
146-func at () = if (ae)
148+func au () = if (af)
147149 then unit
148150 else throw("DApp is inactive at this moment")
149151
150152
151-func au (av) = if (containsElement([O, P, Q], av.callerPublicKey))
153+func av (aw) = if (containsElement([P, Q, R], aw.callerPublicKey))
152154 then unit
153155 else throw("Only admin can call this function")
154156
155157
156-func aw (av) = if ((this == av.caller))
158+func ax (aw) = if ((this == aw.caller))
157159 then unit
158160 else throw("Only contract itself can call this function")
159161
160162
161-let ax = toBigInt(2)
163+let ay = toBigInt(2)
162164
163-let ay = height
165+let az = height
164166
165-func az (aA) = if (aA)
167+func aA (aB) = if (aB)
166168 then false
167169 else true
168170
169171
170-func aB (aC) = {
171- let aD = valueOrElse(getInteger(T, (toString(aC) + r)), 0)
172- let aE = split(getStringValue(I, q), ",")
173- let aF = split(getStringValue(I, p), ",")
174- if (if ((aD >= parseIntValue(aE[0])))
175- then (parseIntValue(aE[1]) > aD)
172+func aC (aD) = {
173+ let aE = valueOrElse(getInteger(U, (toString(aD) + s)), 0)
174+ let aF = split(getStringValue(J, r), ",")
175+ let aG = split(getStringValue(J, q), ",")
176+ if (if ((aE >= parseIntValue(aF[0])))
177+ then (parseIntValue(aF[1]) > aE)
176178 else false)
177- then (ah - parseIntValue(aF[0]))
178- else if (if ((aD >= parseIntValue(aE[1])))
179- then (parseIntValue(aE[2]) > aD)
179+ then (ai - parseIntValue(aG[0]))
180+ else if (if ((aE >= parseIntValue(aF[1])))
181+ then (parseIntValue(aF[2]) > aE)
180182 else false)
181- then (ah - parseIntValue(aF[1]))
182- else if (if ((aD >= parseIntValue(aE[2])))
183- then (parseIntValue(aE[3]) > aD)
183+ then (ai - parseIntValue(aG[1]))
184+ else if (if ((aE >= parseIntValue(aF[2])))
185+ then (parseIntValue(aF[3]) > aE)
184186 else false)
185- then (ah - parseIntValue(aF[2]))
186- else if (if ((aD >= parseIntValue(aE[3])))
187- then (parseIntValue(aE[4]) > aD)
187+ then (ai - parseIntValue(aG[2]))
188+ else if (if ((aE >= parseIntValue(aF[3])))
189+ then (parseIntValue(aF[4]) > aE)
188190 else false)
189- then (ah - parseIntValue(aF[3]))
190- else if ((aD >= parseIntValue(aE[4])))
191- then (ah - parseIntValue(aF[4]))
192- else ah
191+ then (ai - parseIntValue(aG[3]))
192+ else if ((aE >= parseIntValue(aF[4])))
193+ then (ai - parseIntValue(aG[4]))
194+ else ai
193195 }
194196
195197
196-func aG () = {
197- let aH = an
198- let aI = al
199- if ((aH > ay))
198+func aH () = {
199+ let aI = ao
200+ let aJ = am
201+ if ((aI > az))
200202 then {
201- let aJ = ak
202- let aK = am
203- if ((aI > aJ))
204- then (aJ + (((aI - aJ) * (ay - aK)) / (aH - aK)))
205- else (aJ - (((aJ - aI) * (ay - aK)) / (aH - aK)))
203+ let aK = al
204+ let aL = an
205+ if ((aJ > aK))
206+ then (aK + (((aJ - aK) * (az - aL)) / (aI - aL)))
207+ else (aK - (((aK - aJ) * (az - aL)) / (aI - aL)))
206208 }
207- else aI
209+ else aJ
208210 }
209211
210212
211-func aL () = {
212- func aM (aN,aO) = (aN :+ valueOrElse(getInteger(this, (aO + h)), 0))
213+func aM () = {
214+ func aN (aO,aP) = (aO :+ valueOrElse(getInteger(this, (aP + i)), 0))
213215
214- let aP = ao
215- let aQ = size(aP)
216- let aR = nil
217- func aS (aT,aU) = if ((aU >= aQ))
218- then aT
219- else aM(aT, aP[aU])
216+ let aQ = ap
217+ let aR = size(aQ)
218+ let aS = nil
219+ func aT (aU,aV) = if ((aV >= aR))
220+ then aU
221+ else aN(aU, aQ[aV])
220222
221- func aV (aT,aU) = if ((aU >= aQ))
222- then aT
223+ func aW (aU,aV) = if ((aV >= aR))
224+ then aU
223225 else throw("List size exceeds 15")
224226
225- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
227+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
226228 }
227229
228230
229-func aW (aX) = aX
231+func aX (aY) = aY
230232
231233
232-func aY (aN,aZ) = (aN + aZ)
234+func aZ (aO,ba) = (aO + ba)
233235
234236
235-func ba (aX,bb) = {
236- let bc = invoke(this, "D", [aX, bb], nil)
237- if ($isInstanceOf(bc, "Int"))
238- then bc
239- else throw(($getType(invoke(this, "D", [aX, bb], nil)) + " couldn't be cast to Int"))
237+func bb (aY,bc) = {
238+ let bd = invoke(this, "D", [aY, bc], nil)
239+ if ($isInstanceOf(bd, "Int"))
240+ then bd
241+ else throw(($getType(invoke(this, "D", [aY, bc], nil)) + " couldn't be cast to Int"))
240242 }
241243
242244
243-func bd (aX,bb) = {
244- let be = {
245- let aP = aX
246- let aQ = size(aP)
247- let aR = 0
248- func aS (aT,aU) = if ((aU >= aQ))
249- then aT
250- else aY(aT, aP[aU])
245+func be (aY,bc) = {
246+ let bf = {
247+ let aQ = aY
248+ let aR = size(aQ)
249+ let aS = 0
250+ func aT (aU,aV) = if ((aV >= aR))
251+ then aU
252+ else aZ(aU, aQ[aV])
251253
252- func aV (aT,aU) = if ((aU >= aQ))
253- then aT
254+ func aW (aU,aV) = if ((aV >= aR))
255+ then aU
254256 else throw("List size exceeds 15")
255257
256- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
258+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
257259 }
258- if ((be == 0))
260+ if ((bf == 0))
259261 then 0
260262 else {
261- let bf = (bb * ap)
262- let bg = (toBigInt(bf) * toBigInt(be))
263- let bh = toBigInt((bf - 1))
264- func bi (aN,av) = if ((aN._2 == true))
265- then aN
263+ let bg = (bc * aq)
264+ let bh = (toBigInt(bg) * toBigInt(bf))
265+ let bi = toBigInt((bg - 1))
266+ func bj (aO,aw) = if ((aO._2 == true))
267+ then aO
266268 else {
267- let bj = aN._1
268- func bk (bl,av) = if ((ap > av))
269- then ((bl * bj) / (toBigInt(aX[av]) * toBigInt(ap)))
270- else bl
269+ let bk = aO._1
270+ func bl (bm,aw) = if ((aq > aw))
271+ then ((bm * bk) / (toBigInt(aY[aw]) * toBigInt(aq)))
272+ else bm
271273
272- let bl = {
273- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
274- let aQ = size(aP)
275- let aR = bj
276- func bm (aT,aU) = if ((aU >= aQ))
277- then aT
278- else bk(aT, aP[aU])
274+ let bm = {
275+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
276+ let aR = size(aQ)
277+ let aS = bk
278+ func bn (aU,aV) = if ((aV >= aR))
279+ then aU
280+ else bl(aU, aQ[aV])
279281
280- func bn (aT,aU) = if ((aU >= aQ))
281- then aT
282+ func bo (aU,aV) = if ((aV >= aR))
283+ then aU
282284 else throw("List size exceeds 15")
283285
284- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
286+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
285287 }
286- let bo = fraction((bg + (toBigInt(ap) * bl)), bj, ((bh * bj) + (toBigInt((ap + 1)) * bl)))
287- if ((bo > bj))
288- then if ((1 >= toInt((bo - bj))))
289- then $Tuple2(bo, true)
290- else $Tuple2(bo, false)
291- else if ((1 >= toInt((bj - bo))))
292- then $Tuple2(bo, true)
293- else $Tuple2(bo, false)
288+ let bp = fraction((bh + (toBigInt(aq) * bm)), bk, ((bi * bk) + (toBigInt((aq + 1)) * bm)))
289+ if ((bp > bk))
290+ then if ((1 >= toInt((bp - bk))))
291+ then $Tuple2(bp, true)
292+ else $Tuple2(bp, false)
293+ else if ((1 >= toInt((bk - bp))))
294+ then $Tuple2(bp, true)
295+ else $Tuple2(bp, false)
294296 }
295297
296- let bp = {
297- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
298- let aQ = size(aP)
299- let aR = $Tuple2(toBigInt(be), false)
300- func bm (aT,aU) = if ((aU >= aQ))
301- then aT
302- else bi(aT, aP[aU])
298+ let bq = {
299+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
300+ let aR = size(aQ)
301+ let aS = $Tuple2(toBigInt(bf), false)
302+ func bn (aU,aV) = if ((aV >= aR))
303+ then aU
304+ else bj(aU, aQ[aV])
303305
304- func bn (aT,aU) = if ((aU >= aQ))
305- then aT
306+ func bo (aU,aV) = if ((aV >= aR))
307+ then aU
306308 else throw("List size exceeds 15")
307309
308- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
310+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
309311 }
310- let bo = bp._1
311- let bq = bp._2
312- if ((bq == false))
313- then throw(("get_D() not finished with " + toString(bo)))
314- else toInt(bo)
312+ let bp = bq._1
313+ let br = bq._2
314+ if ((br == false))
315+ then throw(("get_D() not finished with " + toString(bp)))
316+ else toInt(bp)
315317 }
316318 }
317319
318320
319-func br (aX,bb) = ba(aW(aX), bb)
321+func bs (aY,bc) = bb(aX(aY), bc)
320322
321323
322-func bs (bt,bu,bv,bw) = if (az((bt != bu)))
324+func bt (bu,bv,bw,bx) = if (aA((bu != bv)))
323325 then throw("same coin")
324- else if (az(if ((bu >= 0))
325- then (bt >= 0)
326+ else if (aA(if ((bv >= 0))
327+ then (bu >= 0)
326328 else false))
327329 then throw("below zero")
328- else if (az(if ((ap > bu))
329- then (ap > bt)
330+ else if (aA(if ((aq > bv))
331+ then (aq > bu)
330332 else false))
331333 then throw("above N_COINS")
332334 else {
333- let bb = aG()
334- let bo = ba(bw, bb)
335- let bf = (bb * ap)
336- func bx (aN,av) = {
337- let by = aN
338- let bz = by._1
339- let bA = by._2
340- let bB = if ((bt == av))
341- then bv
342- else bw[av]
343- if (if ((av != bu))
344- then (ap > av)
335+ let bc = aH()
336+ let bp = bb(bx, bc)
337+ let bg = (bc * aq)
338+ func by (aO,aw) = {
339+ let bz = aO
340+ let bA = bz._1
341+ let bB = bz._2
342+ let bC = if ((bu == aw))
343+ then bw
344+ else bx[aw]
345+ if (if ((aw != bv))
346+ then (aq > aw)
345347 else false)
346- then $Tuple2((bz + bB), fraction(bA, toBigInt(bo), toBigInt((bB * ap))))
347- else $Tuple2(bz, bA)
348+ then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
349+ else $Tuple2(bA, bB)
348350 }
349351
350- let bC = {
351- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
352- let aQ = size(aP)
353- let aR = $Tuple2(0, toBigInt(bo))
354- func aS (aT,aU) = if ((aU >= aQ))
355- then aT
356- else bx(aT, aP[aU])
352+ let bD = {
353+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
354+ let aR = size(aQ)
355+ let aS = $Tuple2(0, toBigInt(bp))
356+ func aT (aU,aV) = if ((aV >= aR))
357+ then aU
358+ else by(aU, aQ[aV])
357359
358- func aV (aT,aU) = if ((aU >= aQ))
359- then aT
360+ func aW (aU,aV) = if ((aV >= aR))
361+ then aU
360362 else throw("List size exceeds 15")
361363
362- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
364+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
363365 }
364- let bz = bC._1
365- let bD = bC._2
366- let bA = fraction(bD, toBigInt(bo), toBigInt((bf * ap)))
367- let bE = toBigInt(((bz + (bo / bf)) - bo))
368- func bF (aN,bG) = if ((aN._2 == true))
369- then aN
366+ let bA = bD._1
367+ let bE = bD._2
368+ let bB = fraction(bE, toBigInt(bp), toBigInt((bg * aq)))
369+ let bF = toBigInt(((bA + (bp / bg)) - bp))
370+ func bG (aO,bH) = if ((aO._2 == true))
371+ then aO
370372 else {
371- let bH = aN._1
372- let bI = (((bH * bH) + bA) / ((ax * bH) + bE))
373- if ((bI > bH))
374- then if ((1 >= toInt((bI - bH))))
375- then $Tuple2(bI, true)
376- else $Tuple2(bI, false)
377- else if ((1 >= toInt((bH - bI))))
378- then $Tuple2(bI, true)
379- else $Tuple2(bI, false)
373+ let bI = aO._1
374+ let bJ = (((bI * bI) + bB) / ((ay * bI) + bF))
375+ if ((bJ > bI))
376+ then if ((1 >= toInt((bJ - bI))))
377+ then $Tuple2(bJ, true)
378+ else $Tuple2(bJ, false)
379+ else if ((1 >= toInt((bI - bJ))))
380+ then $Tuple2(bJ, true)
381+ else $Tuple2(bJ, false)
380382 }
381383
382- let bJ = {
383- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
384- let aQ = size(aP)
385- let aR = $Tuple2(toBigInt(bo), false)
386- func bm (aT,aU) = if ((aU >= aQ))
387- then aT
388- else bF(aT, aP[aU])
384+ let bK = {
385+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
386+ let aR = size(aQ)
387+ let aS = $Tuple2(toBigInt(bp), false)
388+ func bn (aU,aV) = if ((aV >= aR))
389+ then aU
390+ else bG(aU, aQ[aV])
389391
390- func bn (aT,aU) = if ((aU >= aQ))
391- then aT
392+ func bo (aU,aV) = if ((aV >= aR))
393+ then aU
392394 else throw("List size exceeds 16")
393395
394- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
396+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
395397 }
396- let bI = bJ._1
397- let bq = bJ._2
398- if ((bq == false))
399- then throw(("getY() not finished with " + toString(bI)))
400- else toInt(bI)
398+ let bJ = bK._1
399+ let br = bK._2
400+ if ((br == false))
401+ then throw(("getY() not finished with " + toString(bJ)))
402+ else toInt(bJ)
401403 }
402404
403405
404-func bK (bL,bt,aX,bo) = if (az((bt >= 0)))
406+func bL (bM,bu,aY,bp) = if (aA((bu >= 0)))
405407 then throw("i below zero")
406- else if (az((ap > bt)))
408+ else if (aA((aq > bu)))
407409 then throw("i above N_COINS")
408410 else {
409- let bf = (bL * ap)
410- func bx (aN,av) = {
411- let bM = aN
412- let bz = bM._1
413- let bA = bM._2
414- let bB = if (if ((bt != av))
415- then (ap > av)
411+ let bg = (bM * aq)
412+ func by (aO,aw) = {
413+ let bN = aO
414+ let bA = bN._1
415+ let bB = bN._2
416+ let bC = if (if ((bu != aw))
417+ then (aq > aw)
416418 else false)
417- then aX[av]
419+ then aY[aw]
418420 else 0
419- if (if ((ap > av))
420- then (bt != av)
421+ if (if ((aq > aw))
422+ then (bu != aw)
421423 else false)
422- then $Tuple2((bz + bB), fraction(bA, toBigInt(bo), toBigInt((bB * ap))))
423- else $Tuple2(bz, bA)
424+ then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
425+ else $Tuple2(bA, bB)
424426 }
425427
426- let bN = {
427- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
428- let aQ = size(aP)
429- let aR = $Tuple2(0, toBigInt(bo))
430- func aS (aT,aU) = if ((aU >= aQ))
431- then aT
432- else bx(aT, aP[aU])
428+ let bO = {
429+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
430+ let aR = size(aQ)
431+ let aS = $Tuple2(0, toBigInt(bp))
432+ func aT (aU,aV) = if ((aV >= aR))
433+ then aU
434+ else by(aU, aQ[aV])
433435
434- func aV (aT,aU) = if ((aU >= aQ))
435- then aT
436+ func aW (aU,aV) = if ((aV >= aR))
437+ then aU
436438 else throw("List size exceeds 15")
437439
438- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
440+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
439441 }
440- let bz = bN._1
441- let bD = bN._2
442- let bA = fraction(bD, toBigInt(bo), toBigInt((bf * ap)))
443- let bE = toBigInt(((bz + (bo / bf)) - bo))
444- func bO (aN,av) = if ((aN._2 == true))
445- then aN
442+ let bA = bO._1
443+ let bE = bO._2
444+ let bB = fraction(bE, toBigInt(bp), toBigInt((bg * aq)))
445+ let bF = toBigInt(((bA + (bp / bg)) - bp))
446+ func bP (aO,aw) = if ((aO._2 == true))
447+ then aO
446448 else {
447- let bH = aN._1
448- let bI = (((bH * bH) + bA) / ((ax * bH) + bE))
449- if ((bI > bH))
450- then if ((1 >= toInt((bI - bH))))
451- then $Tuple2(bI, true)
452- else $Tuple2(bI, false)
453- else if ((1 >= toInt((bH - bI))))
454- then $Tuple2(bI, true)
455- else $Tuple2(bI, false)
449+ let bI = aO._1
450+ let bJ = (((bI * bI) + bB) / ((ay * bI) + bF))
451+ if ((bJ > bI))
452+ then if ((1 >= toInt((bJ - bI))))
453+ then $Tuple2(bJ, true)
454+ else $Tuple2(bJ, false)
455+ else if ((1 >= toInt((bI - bJ))))
456+ then $Tuple2(bJ, true)
457+ else $Tuple2(bJ, false)
456458 }
457459
458- let bP = {
459- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
460- let aQ = size(aP)
461- let aR = $Tuple2(toBigInt(bo), false)
462- func bm (aT,aU) = if ((aU >= aQ))
463- then aT
464- else bO(aT, aP[aU])
460+ let bQ = {
461+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
462+ let aR = size(aQ)
463+ let aS = $Tuple2(toBigInt(bp), false)
464+ func bn (aU,aV) = if ((aV >= aR))
465+ then aU
466+ else bP(aU, aQ[aV])
465467
466- func bn (aT,aU) = if ((aU >= aQ))
467- then aT
468+ func bo (aU,aV) = if ((aV >= aR))
469+ then aU
468470 else throw("List size exceeds 16")
469471
470- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
472+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
471473 }
472- let bI = bP._1
473- let bq = bP._2
474- if ((bq == false))
475- then throw(("get_y_D() not finished with " + toString(bI)))
476- else toInt(bI)
474+ let bJ = bQ._1
475+ let br = bQ._2
476+ if ((br == false))
477+ then throw(("get_y_D() not finished with " + toString(bJ)))
478+ else toInt(bJ)
477479 }
478480
479481
480-func bQ (aX,bR,av,bS) = {
481- let bT = aB(bS)
482- let bb = aG()
483- let bU = ((fraction(ai, bT, ah, CEILING) * ap) / (4 * (ap - 1)))
484- let bV = ag
485- let bW = ba(aX, bb)
486- let bX = (bW - fraction(bR, bW, bV))
487- let bY = bK(bb, av, aX, bX)
488- let bZ = (aX[av] - bY)
489- func ca (aN,cb) = {
490- let cc = aN
491- let cd = cc._1
492- let ce = cc._2
493- let cf = if ((ce == av))
494- then (fraction(cb, bX, bW) - bY)
495- else (cb - fraction(cb, bX, bW))
496- $Tuple2((cd :+ (cb - fraction(bU, cf, ah))), (ce + 1))
482+func bR (aY,bS,aw,bT) = {
483+ let bU = aC(bT)
484+ let bc = aH()
485+ let bV = ((fraction(aj, bU, ai, CEILING) * aq) / (4 * (aq - 1)))
486+ let bW = ah
487+ let bX = bb(aY, bc)
488+ let bY = (bX - fraction(bS, bX, bW))
489+ let bZ = bL(bc, aw, aY, bY)
490+ let ca = (aY[aw] - bZ)
491+ func cb (aO,cc) = {
492+ let cd = aO
493+ let ce = cd._1
494+ let cf = cd._2
495+ let cg = if ((cf == aw))
496+ then (fraction(cc, bY, bX) - bZ)
497+ else (cc - fraction(cc, bY, bX))
498+ $Tuple2((ce :+ (cc - fraction(bV, cg, ai))), (cf + 1))
497499 }
498500
499- let cg = {
500- let aP = aX
501- let aQ = size(aP)
502- let aR = $Tuple2(nil, 0)
503- func aS (aT,aU) = if ((aU >= aQ))
504- then aT
505- else ca(aT, aP[aU])
501+ let ch = {
502+ let aQ = aY
503+ let aR = size(aQ)
504+ let aS = $Tuple2(nil, 0)
505+ func aT (aU,aV) = if ((aV >= aR))
506+ then aU
507+ else cb(aU, aQ[aV])
506508
507- func aV (aT,aU) = if ((aU >= aQ))
508- then aT
509+ func aW (aU,aV) = if ((aV >= aR))
510+ then aU
509511 else throw("List size exceeds 15")
510512
511- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
513+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
512514 }
513- let cd = cg._1
514- let ce = cg._2
515- let ch = cd[av]
516- let ci = ((ch - bK(bb, av, cd, bX)) - 1)
517- $Tuple2(ci, (bZ - ci))
515+ let ce = ch._1
516+ let cf = ch._2
517+ let ci = ce[aw]
518+ let cj = ((ci - bL(bc, aw, ce, bY)) - 1)
519+ $Tuple2(cj, (ca - cj))
518520 }
519521
520522
521-func cj (aO) = {
522- let L = aO
523- if ($isInstanceOf(L, "ByteVector"))
523+func ck (aP) = {
524+ let M = aP
525+ if ($isInstanceOf(M, "ByteVector"))
524526 then {
525- let ck = L
526- toBase58String(ck)
527+ let cl = M
528+ toBase58String(cl)
527529 }
528- else if ($isInstanceOf(L, "Unit"))
530+ else if ($isInstanceOf(M, "Unit"))
529531 then {
530- let cl = L
532+ let cm = M
531533 "WAVES"
532534 }
533535 else throw("Match error")
534536 }
535537
536538
537-func cm (cn,aO) = if (cn)
538- then $Tuple2("lockNeutrino", U)
539- else $Tuple2("unlockNeutrino", U)
539+func cn (co,aP) = if (co)
540+ then $Tuple2("lockNeutrino", V)
541+ else $Tuple2("unlockNeutrino", V)
540542
541543
542-func co (cn,cp,aO) = if (cn)
544+func cp (co,cq,aP) = if (co)
543545 then {
544- let cq = cm(cn, aO)
545- let cr = cq._1
546- let cs = cq._2
547- $Tuple4(cr, cs, nil, [AttachedPayment(aO, cp)])
546+ let cr = cn(co, aP)
547+ let cs = cr._1
548+ let ct = cr._2
549+ $Tuple4(cs, ct, nil, [AttachedPayment(aP, cq)])
548550 }
549551 else {
550- let ct = cm(cn, aO)
551- let cr = ct._1
552- let cs = ct._2
553- $Tuple4(cr, cs, [cp, toBase58String(aO)], nil)
552+ let cu = cn(co, aP)
553+ let cs = cu._1
554+ let ct = cu._2
555+ $Tuple4(cs, ct, [cq, toBase58String(aP)], nil)
554556 }
555557
556558
557-func cn (cp,cu) = if (containsElement(Z, cu))
559+func co (cq,cv) = if (containsElement(aa, cv))
558560 then {
559- let cv = co(true, cp, fromBase58String(cu))
560- let cr = cv._1
561- let cw = cv._2
562- let cx = cv._3
563- let cy = cv._4
564- invoke(cw, cr, cx, cy)
561+ let cw = cp(true, cq, fromBase58String(cv))
562+ let cs = cw._1
563+ let cx = cw._2
564+ let cy = cw._3
565+ let cz = cw._4
566+ invoke(cx, cs, cy, cz)
565567 }
566568 else 0
567569
568570
569-func cz (cp,cu) = if (containsElement(Z, cu))
571+func cA (cq,cv) = if (containsElement(aa, cv))
570572 then {
571- let cA = co(false, cp, fromBase58String(cu))
572- let cr = cA._1
573- let cw = cA._2
574- let cx = cA._3
575- let cy = cA._4
576- invoke(cw, cr, cx, cy)
573+ let cB = cp(false, cq, fromBase58String(cv))
574+ let cs = cB._1
575+ let cx = cB._2
576+ let cy = cB._3
577+ let cz = cB._4
578+ invoke(cx, cs, cy, cz)
577579 }
578580 else 0
579581
580582
581-func cB (aO) = {
582- let cC = {
583- let L = aO
584- if ($isInstanceOf(L, "ByteVector"))
583+func cC (aP) = {
584+ let cD = {
585+ let M = aP
586+ if ($isInstanceOf(M, "ByteVector"))
585587 then {
586- let cD = L
587- if ((cD == Y))
588- then getInteger(U, ((("rpd_balance_" + toBase58String(cD)) + "_") + toString(this)))
588+ let cE = M
589+ if ((cE == Z))
590+ then getInteger(V, ((("rpd_balance_" + toBase58String(cE)) + "_") + toString(this)))
589591 else 0
590592 }
591- else if ($isInstanceOf(L, "Unit"))
593+ else if ($isInstanceOf(M, "Unit"))
592594 then 0
593595 else throw("Match error")
594596 }
595- let L = cC
596- if ($isInstanceOf(L, "Int"))
597+ let M = cD
598+ if ($isInstanceOf(M, "Int"))
597599 then {
598- let av = L
599- av
600+ let aw = M
601+ aw
600602 }
601603 else 0
602604 }
603605
604606
605-func cE () = {
606- let cF = aL()
607- func cG (aN,aO) = {
608- let cH = aN
609- let cI = cH._1
610- let av = cH._2
611- if (cI)
612- then $Tuple2(cI, av)
607+func cF () = {
608+ let cG = aM()
609+ func cH (aO,aP) = {
610+ let cI = aO
611+ let cJ = cI._1
612+ let aw = cI._2
613+ if (cJ)
614+ then $Tuple2(cJ, aw)
613615 else {
614- let cJ = (assetBalance(this, fromBase58String(aO)) + cB(fromBase58String(aO)))
615- if ((cF[av] > cJ))
616- then $Tuple2(true, av)
617- else $Tuple2(false, (av + 1))
616+ let cK = (assetBalance(this, fromBase58String(aP)) + cC(fromBase58String(aP)))
617+ if ((cG[aw] > cK))
618+ then $Tuple2(true, aw)
619+ else $Tuple2(false, (aw + 1))
618620 }
619621 }
620622
621- let aP = ao
622- let aQ = size(aP)
623- let aR = $Tuple2(false, 0)
624- func aS (aT,aU) = if ((aU >= aQ))
625- then aT
626- else cG(aT, aP[aU])
623+ let aQ = ap
624+ let aR = size(aQ)
625+ let aS = $Tuple2(false, 0)
626+ func aT (aU,aV) = if ((aV >= aR))
627+ then aU
628+ else cH(aU, aQ[aV])
627629
628- func aV (aT,aU) = if ((aU >= aQ))
629- then aT
630+ func aW (aU,aV) = if ((aV >= aR))
631+ then aU
630632 else throw("List size exceeds 15")
631633
632- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
634+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
633635 }
634636
635637
636-func cK (av) = aq(("Suspicious state with asset: " + ao[av]))
638+func cL (aw) = ar(("Suspicious state with asset: " + ap[aw]))
637639
638640
639-func cL (bS,cy) = {
640- func cM (aN,cN) = (aN :+ ScriptTransfer(bS, cN.amount, cN.assetId))
641+func cM (bT,cz) = {
642+ func cN (aO,cO) = (aO :+ ScriptTransfer(bT, cO.amount, cO.assetId))
641643
642- let aP = cy
643- let aQ = size(aP)
644- let aR = nil
645- func aS (aT,aU) = if ((aU >= aQ))
646- then aT
647- else cM(aT, aP[aU])
644+ let aQ = cz
645+ let aR = size(aQ)
646+ let aS = nil
647+ func aT (aU,aV) = if ((aV >= aR))
648+ then aU
649+ else cN(aU, aQ[aV])
648650
649- func aV (aT,aU) = if ((aU >= aQ))
650- then aT
651+ func aW (aU,aV) = if ((aV >= aR))
652+ then aU
651653 else throw("List size exceeds 15")
652654
653- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
655+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
654656 }
655657
656658
657-func cO (cP) = {
658- let cQ = valueOrErrorMessage(getInteger(this, n), "No dAppThresholdCoef key")
659- let cR = 10000
660- let cS = max(cP)
661- let cT = min(cP)
662- let cU = fraction(cS, cR, cT)
663- if ((cU > (cQ * cR)))
659+func cP (cQ) = {
660+ let cR = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
661+ let cS = 10000
662+ let cT = max(cQ)
663+ let cU = min(cQ)
664+ let cV = fraction(cT, cS, cU)
665+ if ((cV > (cR * cS)))
664666 then throw("New balance in assets of the DApp is less than threshold")
665667 else false
666668 }
667669
668670
669-func cV (ao) = {
670- let cW = split(ao, ",")
671- func cX (cY,aO) = {
672- let cZ = valueOrErrorMessage(fromBase58String(aO), ("fromBase58String: " + aO))
673- let da = valueOrErrorMessage(assetInfo(cZ), ("assetInfo: " + aO)).decimals
674- if ((da != e))
671+func cW (ap) = {
672+ let cX = split(ap, ",")
673+ func cY (cZ,aP) = {
674+ let da = valueOrErrorMessage(fromBase58String(aP), ("fromBase58String: " + aP))
675+ let db = valueOrErrorMessage(assetInfo(da), ("assetInfo: " + aP)).decimals
676+ if ((db != d))
675677 then throw("wrong decimals")
676678 else false
677679 }
678680
679- let aP = cW
680- let aQ = size(aP)
681- let aR = false
682- func aS (aT,aU) = if ((aU >= aQ))
683- then aT
684- else cX(aT, aP[aU])
681+ let aQ = cX
682+ let aR = size(aQ)
683+ let aS = false
684+ func aT (aU,aV) = if ((aV >= aR))
685+ then aU
686+ else cY(aU, aQ[aV])
685687
686- func aV (aT,aU) = if ((aU >= aQ))
687- then aT
688+ func aW (aU,aV) = if ((aV >= aR))
689+ then aU
688690 else throw("List size exceeds 15")
689691
690- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
692+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
691693 }
692694
693695
694-@Callable(db)
695-func D (aX,bb) = {
696- let bo = bd(aX, bb)
697- $Tuple2([IntegerEntry("D", bo)], bo)
696+@Callable(dc)
697+func D (aY,bc) = {
698+ let bp = be(aY, bc)
699+ $Tuple2([IntegerEntry("D", bp)], bp)
698700 }
699701
700702
701703
702-@Callable(db)
703-func init (ao,aG,dc) = if (!(isDataStorageUntouched(this)))
704+@Callable(dc)
705+func init (ap,aH,dd,de) = if (!(isDataStorageUntouched(this)))
704706 then throw("Already initialized")
705- else {
706- let dd = "s_Multi_USD"
707- let de = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
708- let df = Issue(dd, de, 0, 6, true)
709- let dg = calculateAssetId(df)
710- if (cV(ao))
711- then throw()
707+ else if ((0 >= aH))
708+ then throw("Amp must be must > 0")
709+ else if ((0 >= dd))
710+ then throw("dApp Threshold Coef must be > 0")
712711 else {
713- let dh = [StringEntry(g, ao), IntegerEntry("initial_A", aG), IntegerEntry("future_A", aG), IntegerEntry(m, getIntegerValue(I, "base_fee_flat")), StringEntry(k, toBase58String(dg)), IntegerEntry(l, 0), IntegerEntry(n, 15), BooleanEntry(i, true), df]
714- if (dc)
715- then (dh ++ [BooleanEntry(s, dc), IntegerEntry(t, (ab + (ad * ac)))])
716- else dh
712+ let df = "s_Multi_USD"
713+ let dg = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
714+ let dh = Issue(df, dg, 0, 6, true)
715+ let di = calculateAssetId(dh)
716+ if (cW(ap))
717+ then throw()
718+ else {
719+ let dj = [StringEntry(g, f), StringEntry(h, ap), IntegerEntry("initial_A", aH), IntegerEntry("future_A", aH), IntegerEntry(n, getIntegerValue(J, "base_fee_flat")), StringEntry(l, toBase58String(di)), IntegerEntry(m, 0), IntegerEntry(o, dd), BooleanEntry(j, true), dh]
720+ if (de)
721+ then (dj ++ [BooleanEntry(t, de), IntegerEntry(u, (ac + (ae * ad)))])
722+ else dj
723+ }
717724 }
718- }
719725
720726
721727
722-@Callable(db)
723-func addLiquidity (di,dj) = valueOrElse(at(), {
724- let bb = aG()
725- let aX = aL()
726- let bW = if ((ag == 0))
728+@Callable(dc)
729+func addLiquidity (dk,dl) = valueOrElse(au(), {
730+ let bc = aH()
731+ let aY = aM()
732+ let bX = if ((ah == 0))
727733 then 0
728- else br(aX, bb)
729- let cy = db.payments
730- let dk = size(cy)
731- func dl (dk) = if ((dk > ap))
732- then throw(("payments size > " + toString(ap)))
733- else if ((1 > dk))
734+ else bs(aY, bc)
735+ let cz = dc.payments
736+ let dm = size(cz)
737+ func dn (do) = if ((dm > aq))
738+ then throw(("payments size > " + toString(aq)))
739+ else if ((1 > dm))
734740 then throw("payments size < 1")
735- else if (if ((ag == 0))
736- then (ap != dk)
741+ else if (if ((ah == 0))
742+ then (aq != dm)
737743 else false)
738744 then throw("initial deposit requires all coins")
739745 else {
740- func dm (aN,cN) = if (containsElement(ao, cj(cN.assetId)))
746+ func dp (aO,cO) = if (containsElement(ap, ck(cO.assetId)))
741747 then true
742748 else throw("Invalid asset in payment")
743749
744- let aP = cy
745- let aQ = size(aP)
746- let aR = false
747- func aS (aT,aU) = if ((aU >= aQ))
748- then aT
749- else dm(aT, aP[aU])
750+ let aQ = cz
751+ let aR = size(aQ)
752+ let aS = false
753+ func aT (aU,aV) = if ((aV >= aR))
754+ then aU
755+ else dp(aU, aQ[aV])
750756
751- func aV (aT,aU) = if ((aU >= aQ))
752- then aT
757+ func aW (aU,aV) = if ((aV >= aR))
758+ then aU
753759 else throw("List size exceeds 15")
754760
755- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
761+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
756762 }
757763
758- if (!(dl(dk)))
764+ if (!(dn(dm)))
759765 then throw()
760766 else {
761- let cI = cE()
762- if (cI._1)
763- then (cK(cI._2) ++ cL(db.caller, cy))
767+ let cJ = cF()
768+ if (cJ._1)
769+ then (cL(cJ._2) ++ cM(dc.caller, cz))
764770 else {
765- let dn = size(cy)
766- func cM (aN,aO) = {
767- let do = aN
768- let cP = do._1
769- let av = do._2
770- let dp = do._3
771- if (if ((dn > dp))
772- then (cj(cy[dp].assetId) == aO)
771+ func cN (aO,aP) = {
772+ let dq = aO
773+ let cQ = dq._1
774+ let aw = dq._2
775+ let dr = dq._3
776+ if (if ((dm > dr))
777+ then (ck(cz[dr].assetId) == aP)
773778 else false)
774- then {
775- let dq = cn(cy[dp].amount, cj(cy[dp].assetId))
776- if ((dq == dq))
777- then $Tuple3((cP :+ (aX[av] + cy[dp].amount)), (av + 1), (dp + 1))
778- else throw("Strict value is not equal to itself.")
779- }
780- else $Tuple3((cP :+ aX[av]), (av + 1), dp)
779+ then $Tuple3((cQ :+ (aY[aw] + cz[dr].amount)), (aw + 1), (dr + 1))
780+ else $Tuple3((cQ :+ aY[aw]), (aw + 1), dr)
781781 }
782782
783- let dr = {
784- let aP = ao
785- let aQ = size(aP)
786- let aR = $Tuple3(nil, 0, 0)
787- func aS (aT,aU) = if ((aU >= aQ))
788- then aT
789- else cM(aT, aP[aU])
783+ let ds = {
784+ let aQ = ap
785+ let aR = size(aQ)
786+ let aS = $Tuple3(nil, 0, 0)
787+ func aT (aU,aV) = if ((aV >= aR))
788+ then aU
789+ else cN(aU, aQ[aV])
790790
791- func aV (aT,aU) = if ((aU >= aQ))
792- then aT
791+ func aW (aU,aV) = if ((aV >= aR))
792+ then aU
793793 else throw("List size exceeds 15")
794794
795- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
795+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
796796 }
797- let cP = dr._1
798- let ds = dr._2
799- let dt = dr._3
800- if (((dn - 1) > dt))
797+ let cQ = ds._1
798+ let dt = ds._2
799+ let du = ds._3
800+ if ((dm > du))
801801 then throw("Incorect payments order")
802- else if (cO(cP))
802+ else if (cP(cQ))
803803 then throw()
804804 else {
805- let bX = br(cP, bb)
806- if (az((bX > bW)))
805+ let bY = bs(cQ, bc)
806+ if (aA((bY > bX)))
807807 then throw("D1 > D0")
808808 else {
809- let bT = aB(db.caller)
810- func du (aN,dv) = {
811- let dw = aN
812- let dx = dw._1
813- let dy = dw._2
814- let av = dw._3
815- if ((ag > 0))
809+ let bU = aC(dc.caller)
810+ func dv (aO,dw) = {
811+ let dx = aO
812+ let dy = dx._1
813+ let dz = dx._2
814+ let aw = dx._3
815+ if ((ah > 0))
816816 then {
817- let bU = ((fraction(ai, bT, ah, CEILING) * ap) / (4 * (ap - 1)))
818- let dz = {
819- let dA = fraction(bX, aX[av], bW)
820- let dB = if ((dA > dv))
821- then (dA - dv)
822- else (dv - dA)
823- fraction(bU, dB, ah)
817+ let bV = ((fraction(aj, bU, ai, CEILING) * aq) / (4 * (aq - 1)))
818+ let dA = {
819+ let dB = fraction(bY, aY[aw], bX)
820+ let dC = if ((dB > dw))
821+ then (dB - dw)
822+ else (dw - dB)
823+ fraction(bV, dC, ai)
824824 }
825- let dC = fraction(dz, aj, ah)
826- let dD = (dv - dC)
827- let dE = (dv - dz)
828- let dF = cz(dz, ao[av])
829- if ((dF == dF))
830- then $Tuple3((dx :+ dE), (dy ++ [ScriptTransfer(X, (dz - dC), fromBase58String(ao[av])), ScriptTransfer(S, dC, fromBase58String(ao[av])), IntegerEntry((ao[av] + h), dD)]), (av + 1))
825+ let dD = fraction(dA, ak, ai)
826+ let dE = (dw - dA)
827+ let dF = (dw - dA)
828+ let dG = (dw - aY[aw])
829+ let dH = if ((dG > 0))
830+ then co((dG - dA), ap[aw])
831+ else cA(dA, ap[aw])
832+ if ((dH == dH))
833+ then $Tuple3((dy :+ dF), (dz ++ [ScriptTransfer(Y, (dA - dD), fromBase58String(ap[aw])), ScriptTransfer(T, dD, fromBase58String(ap[aw])), IntegerEntry((ap[aw] + i), dE)]), (aw + 1))
831834 else throw("Strict value is not equal to itself.")
832835 }
833- else $Tuple3((dx :+ dv), (dy :+ IntegerEntry((ao[av] + h), dv)), (av + 1))
836+ else {
837+ let dH = co(dw, ap[aw])
838+ if ((dH == dH))
839+ then $Tuple3((dy :+ dw), (dz :+ IntegerEntry((ap[aw] + i), dw)), (aw + 1))
840+ else throw("Strict value is not equal to itself.")
841+ }
834842 }
835843
836- let dG = {
837- let aP = cP
838- let aQ = size(aP)
839- let aR = $Tuple3(nil, nil, 0)
840- func bm (aT,aU) = if ((aU >= aQ))
841- then aT
842- else du(aT, aP[aU])
844+ let dI = {
845+ let aQ = cQ
846+ let aR = size(aQ)
847+ let aS = $Tuple3(nil, nil, 0)
848+ func bn (aU,aV) = if ((aV >= aR))
849+ then aU
850+ else dv(aU, aQ[aV])
843851
844- func bn (aT,aU) = if ((aU >= aQ))
845- then aT
852+ func bo (aU,aV) = if ((aV >= aR))
853+ then aU
846854 else throw("List size exceeds 15")
847855
848- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
856+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
849857 }
850- let dx = dG._1
851- let dy = dG._2
852- let dH = br(dx, bb)
853- let dI = if ((ag == 0))
854- then bX
855- else fraction(ag, (dH - bW), bW)
856- if (az((dI >= di)))
858+ let dy = dI._1
859+ let dz = dI._2
860+ let dJ = bs(dy, bc)
861+ let dK = if ((ah == 0))
862+ then bY
863+ else fraction(ah, (dJ - bX), bX)
864+ if (aA((dK >= dk)))
857865 then throw("Slippage screwed you")
858- else if (dj)
866+ else if (dl)
859867 then {
860- let dJ = invoke(this, "reissueShare", [dI], nil)
861- if ((dJ == dJ))
868+ let dL = invoke(this, "reissueShare", [dK], nil)
869+ if ((dL == dL))
862870 then {
863- let dq = invoke(W, "lockShareTokens", [toString(this)], [AttachedPayment(af, dI)])
864- if ((dq == dq))
865- then (dy :+ IntegerEntry(l, (ag + dI)))
871+ let dM = invoke(X, "lockShareTokens", [toString(this)], [AttachedPayment(ag, dK)])
872+ if ((dM == dM))
873+ then (dz :+ IntegerEntry(m, (ah + dK)))
866874 else throw("Strict value is not equal to itself.")
867875 }
868876 else throw("Strict value is not equal to itself.")
869877 }
870- else (dy ++ [Reissue(af, dI, true), ScriptTransfer(db.caller, dI, af), IntegerEntry(l, (ag + dI))])
878+ else (dz ++ [Reissue(ag, dK, true), ScriptTransfer(dc.caller, dK, ag), IntegerEntry(m, (ah + dK))])
871879 }
872880 }
873881 }
876884
877885
878886
879-@Callable(db)
880-func reissueShare (cp) = valueOrElse(aw(db), [Reissue(af, cp, true)])
887+@Callable(dc)
888+func reissueShare (cq) = valueOrElse(ax(dc), [Reissue(ag, cq, true)])
881889
882890
883891
884-@Callable(db)
885-func getDy (dK,dL,dM,dN) = {
886- let aX = aL()
887- let dO = valueOrErrorMessage(indexOf(ao, dK), "unknown token in")
888- let dP = valueOrErrorMessage(indexOf(ao, dL), "unknown token out")
889- let bv = (aX[dO] + dM)
890- let bI = bs(dO, dP, bv, aX)
891- let ci = ((aX[dP] - bI) - 1)
892- let bT = aB(Address(fromBase58String(dN)))
893- let bU = fraction(fraction(ai, bT, ah, CEILING), ci, ah)
894- $Tuple2(nil, $Tuple2((ci - bU), bU))
892+@Callable(dc)
893+func getDy (dN,dO,dP,dQ) = {
894+ let aY = aM()
895+ let dR = valueOrErrorMessage(indexOf(ap, dN), "unknown token in")
896+ let dS = valueOrErrorMessage(indexOf(ap, dO), "unknown token out")
897+ let bw = (aY[dR] + dP)
898+ let bJ = bt(dR, dS, bw, aY)
899+ let cj = ((aY[dS] - bJ) - 1)
900+ let bU = aC(Address(fromBase58String(dQ)))
901+ let bV = fraction(fraction(aj, bU, ai, CEILING), cj, ai)
902+ $Tuple2(nil, $Tuple2((cj - bV), bV))
895903 }
896904
897905
898906
899-@Callable(db)
900-func exchange (dQ,dR) = valueOrElse(at(), if ((size(db.payments) != 1))
907+@Callable(dc)
908+func exchange (dT,dU) = valueOrElse(au(), if ((size(dc.payments) != 1))
901909 then throw("size(payments) != 1")
902910 else {
903- let cI = cE()
904- if (cI._1)
905- then (cK(cI._2) ++ cL(db.caller, db.payments))
911+ let cJ = cF()
912+ if (cJ._1)
913+ then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
906914 else {
907- let cN = db.payments[0]
908- let dS = cj(cN.assetId)
909- let dT = fromBase58String(dQ)
910- let dM = cN.amount
911- let dO = valueOrErrorMessage(indexOf(ao, dS), "unknown token in")
912- let dP = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
913- let aX = aL()
914- let bv = (aX[dO] + dM)
915- let bI = bs(dO, dP, bv, aX)
916- let dU = ((aX[dP] - bI) - 1)
917- let bT = aB(db.caller)
918- let bU = fraction(dU, fraction(ai, bT, ah, CEILING), ah)
919- let ci = (dU - bU)
920- let dC = fraction(bU, aj, ah)
921- if (az((ci >= dR)))
915+ let cO = dc.payments[0]
916+ let dV = ck(cO.assetId)
917+ let dW = fromBase58String(dT)
918+ let dP = cO.amount
919+ let dR = valueOrErrorMessage(indexOf(ap, dV), "unknown token in")
920+ let dS = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
921+ let aY = aM()
922+ let bw = (aY[dR] + dP)
923+ let bJ = bt(dR, dS, bw, aY)
924+ let dX = ((aY[dS] - bJ) - 1)
925+ let bU = aC(dc.caller)
926+ let bV = fraction(dX, fraction(aj, bU, ai, CEILING), ai)
927+ let cj = (dX - bV)
928+ let dD = fraction(bV, ak, ai)
929+ if (aA((cj >= dU)))
922930 then throw("Exchange resulted in fewer coins than expected")
923931 else {
924- func dV (aN,dW) = {
925- let dX = aN
926- let cP = dX._1
927- let av = dX._2
928- if ((av == dO))
929- then $Tuple2((cP :+ (dW + dM)), (av + 1))
930- else if ((av == dP))
931- then $Tuple2((cP :+ (dW - dU)), (av + 1))
932- else $Tuple2((cP :+ dW), (av + 1))
932+ func dY (aO,dZ) = {
933+ let ea = aO
934+ let cQ = ea._1
935+ let aw = ea._2
936+ if ((aw == dR))
937+ then $Tuple2((cQ :+ (dZ + dP)), (aw + 1))
938+ else if ((aw == dS))
939+ then $Tuple2((cQ :+ (dZ - dX)), (aw + 1))
940+ else $Tuple2((cQ :+ dZ), (aw + 1))
933941 }
934942
935- let dY = {
936- let aP = aX
937- let aQ = size(aP)
938- let aR = $Tuple2(nil, 0)
939- func aS (aT,aU) = if ((aU >= aQ))
940- then aT
941- else dV(aT, aP[aU])
943+ let eb = {
944+ let aQ = aY
945+ let aR = size(aQ)
946+ let aS = $Tuple2(nil, 0)
947+ func aT (aU,aV) = if ((aV >= aR))
948+ then aU
949+ else dY(aU, aQ[aV])
942950
943- func aV (aT,aU) = if ((aU >= aQ))
944- then aT
951+ func aW (aU,aV) = if ((aV >= aR))
952+ then aU
945953 else throw("List size exceeds 15")
946954
947- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
955+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
948956 }
949- let cP = dY._1
950- let av = dY._2
951- if (cO(cP))
957+ let cQ = eb._1
958+ let aw = eb._2
959+ if (cP(cQ))
952960 then throw()
953961 else {
954- let dq = cn(cN.amount, cj(cN.assetId))
955- if ((dq == dq))
962+ let dM = co(cO.amount, ck(cO.assetId))
963+ if ((dM == dM))
956964 then {
957- let dF = cz(dU, dQ)
958- if ((dF == dF))
959- then $Tuple2([IntegerEntry((dS + h), bv), IntegerEntry((dQ + h), (aX[dP] - dU)), ScriptTransfer(db.caller, ci, dT), ScriptTransfer(S, dC, dT), ScriptTransfer(X, (bU - dC), dT)], $Tuple2(ci, dT))
965+ let ec = cA(dX, dT)
966+ if ((ec == ec))
967+ then $Tuple2([IntegerEntry((dV + i), bw), IntegerEntry((dT + i), (aY[dS] - dX)), ScriptTransfer(dc.caller, cj, dW), ScriptTransfer(T, dD, dW), ScriptTransfer(Y, (bV - dD), dW)], [cj, dW])
960968 else throw("Strict value is not equal to itself.")
961969 }
962970 else throw("Strict value is not equal to itself.")
967975
968976
969977
970-@Callable(db)
971-func withdraw (dZ,ea) = valueOrElse(at(), if ((size(db.payments) != 1))
978+@Callable(dc)
979+func withdraw (ed) = valueOrElse(au(), if ((size(dc.payments) != 1))
972980 then throw("size(payments) != 1")
973981 else {
974- let cI = cE()
975- if (cI._1)
976- then (cK(cI._2) ++ cL(db.caller, db.payments))
982+ let ee = dc.payments[0].amount
983+ let ef = dc.payments[0].assetId
984+ if ((ag != ef))
985+ then throw("unknown payment token")
977986 else {
978- let cN = db.payments[0]
979- let dS = cN.assetId
980- if ((dS != af))
981- then throw("unknown token")
987+ let cJ = cF()
988+ if (cJ._1)
989+ then (cL(cJ._2) ++ cM(dc.originCaller, dc.payments))
982990 else {
983- let eb = cN.amount
984- let bV = ag
985- let ec = if ((ea > 0))
986- then invoke(W, "withdrawShareTokens", [toString(this), ea], nil)
987- else 0
988- if ((ec == ec))
989- then {
990- let ed = (eb + ea)
991- func du (aN,ee) = {
992- let ef = aN
993- let dy = ef._1
994- let av = ef._2
995- let eg = fraction(ee, ed, bV)
996- if (az((eg >= dZ[av])))
997- then throw("Withdrawal resulted in fewer coins than expected")
998- else {
999- let dF = cz(eg, ao[av])
1000- if ((dF == dF))
1001- then $Tuple2((dy ++ [IntegerEntry((ao[av] + h), (ee - eg)), ScriptTransfer(db.caller, eg, fromBase58String(ao[av]))]), (av + 1))
1002- else throw("Strict value is not equal to itself.")
1003- }
991+ func dv (aO,eg) = {
992+ let eh = aO
993+ let dz = eh._1
994+ let aw = eh._2
995+ let ei = fraction(eg, ee, ah)
996+ if (aA((ei >= ed[aw])))
997+ then throw("Withdrawal resulted in fewer coins than expected")
998+ else {
999+ let ec = cA(ei, ap[aw])
1000+ if ((ec == ec))
1001+ then $Tuple2((dz ++ [IntegerEntry((ap[aw] + i), (eg - ei)), ScriptTransfer(dc.originCaller, ei, fromBase58String(ap[aw]))]), (aw + 1))
1002+ else throw("Strict value is not equal to itself.")
10041003 }
1004+ }
10051005
1006- let eh = {
1007- let aP = aL()
1008- let aQ = size(aP)
1009- let aR = $Tuple2(nil, 0)
1010- func aS (aT,aU) = if ((aU >= aQ))
1011- then aT
1012- else du(aT, aP[aU])
1006+ let ej = {
1007+ let aQ = aM()
1008+ let aR = size(aQ)
1009+ let aS = $Tuple2(nil, 0)
1010+ func aT (aU,aV) = if ((aV >= aR))
1011+ then aU
1012+ else dv(aU, aQ[aV])
10131013
1014- func aV (aT,aU) = if ((aU >= aQ))
1015- then aT
1016- else throw("List size exceeds 15")
1014+ func aW (aU,aV) = if ((aV >= aR))
1015+ then aU
1016+ else throw("List size exceeds 15")
10171017
1018- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1019- }
1020- let dy = eh._1
1021- let av = eh._2
1022- (dy ++ [Burn(af, ed), IntegerEntry(l, (ag - ed))])
1023- }
1024- else throw("Strict value is not equal to itself.")
1018+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1019+ }
1020+ let dz = ej._1
1021+ let aw = ej._2
1022+ (dz ++ [Burn(ag, ee), IntegerEntry(m, (ah - ee))])
10251023 }
10261024 }
10271025 })
10281026
10291027
10301028
1031-@Callable(db)
1032-func calcWithdrawOneCoin (ei,dQ,ej) = {
1033- let av = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
1034- $Tuple2(nil, bQ(aL(), ei, av, Address(fromBase58String(ej)))._1)
1029+@Callable(dc)
1030+func withdrawWithUnlock (ed,ek) = valueOrElse(au(), if ((0 >= ek))
1031+ then throw("Unlock amount must be positive")
1032+ else {
1033+ let cJ = cF()
1034+ if (cJ._1)
1035+ then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
1036+ else {
1037+ let ee = if ((size(dc.payments) > 0))
1038+ then if ((size(dc.payments) != 1))
1039+ then throw("size(payments) != 1")
1040+ else {
1041+ let ef = dc.payments[0].assetId
1042+ if ((ag != ef))
1043+ then throw("unknown payment token")
1044+ else dc.payments[0].amount
1045+ }
1046+ else 0
1047+ let el = invoke(X, "withdrawShareTokens", [toString(this), ek], nil)
1048+ if ((el == el))
1049+ then {
1050+ let em = (ee + ek)
1051+ let dH = invoke(this, "withdraw", [ed], [AttachedPayment(ag, em)])
1052+ if ((dH == dH))
1053+ then nil
1054+ else throw("Strict value is not equal to itself.")
1055+ }
1056+ else throw("Strict value is not equal to itself.")
1057+ }
1058+ })
1059+
1060+
1061+
1062+@Callable(dc)
1063+func calcWithdrawOneCoin (en,dT,eo) = {
1064+ let aw = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
1065+ $Tuple2(nil, bR(aM(), en, aw, Address(fromBase58String(eo)))._1)
10351066 }
10361067
10371068
10381069
1039-@Callable(db)
1040-func withdrawOneCoin (dQ,ek,ea) = valueOrElse(at(), if ((size(db.payments) != 1))
1070+@Callable(dc)
1071+func withdrawOneCoin (dT,ep) = valueOrElse(au(), if ((size(dc.payments) != 1))
10411072 then throw("size(payments) != 1")
10421073 else {
1043- let cI = cE()
1044- if (cI._1)
1045- then (cK(cI._2) ++ cL(db.caller, db.payments))
1074+ let cJ = cF()
1075+ if (cJ._1)
1076+ then (cL(cJ._2) ++ cM(dc.originCaller, dc.payments))
10461077 else {
1047- let cN = db.payments[0]
1048- let dS = cN.assetId
1049- if ((dS != af))
1078+ let ee = dc.payments[0].amount
1079+ let ef = dc.payments[0].assetId
1080+ if ((ef != ag))
10501081 then throw("unknown token")
10511082 else {
1052- let el = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
1053- let em = cN.amount
1054- let ec = if ((ea > 0))
1055- then invoke(W, "withdrawShareTokens", [toString(this), ea], nil)
1056- else 0
1057- if ((ec == ec))
1058- then {
1059- let ed = (em + ea)
1060- let aX = aL()
1061- let en = bQ(aX, ed, el, db.caller)
1062- let ci = en._1
1063- let eo = en._2
1064- if (az((ci >= ek)))
1065- then throw("Not enough coins removed")
1083+ let eq = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
1084+ let aY = aM()
1085+ let er = bR(aY, ee, eq, dc.originCaller)
1086+ let cj = er._1
1087+ let es = er._2
1088+ if (aA((cj >= ep)))
1089+ then throw("Not enough coins removed")
1090+ else {
1091+ let dD = fraction(es, ak, ai)
1092+ let et = (cj + es)
1093+ func dY (aO,dZ) = {
1094+ let eu = aO
1095+ let cQ = eu._1
1096+ let aw = eu._2
1097+ if ((aw == eq))
1098+ then $Tuple2((cQ :+ (dZ - et)), (aw + 1))
1099+ else $Tuple2((cQ :+ dZ), (aw + 1))
1100+ }
1101+
1102+ let ev = {
1103+ let aQ = aY
1104+ let aR = size(aQ)
1105+ let aS = $Tuple2(nil, 0)
1106+ func aT (aU,aV) = if ((aV >= aR))
1107+ then aU
1108+ else dY(aU, aQ[aV])
1109+
1110+ func aW (aU,aV) = if ((aV >= aR))
1111+ then aU
1112+ else throw("List size exceeds 15")
1113+
1114+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1115+ }
1116+ let cQ = ev._1
1117+ let ew = ev._2
1118+ if (cP(cQ))
1119+ then throw()
10661120 else {
1067- let dC = fraction(eo, aj, ah)
1068- let ep = (ci + eo)
1069- func dV (aN,dW) = {
1070- let eq = aN
1071- let cP = eq._1
1072- let av = eq._2
1073- if ((av == el))
1074- then $Tuple2((cP :+ (dW - ep)), (av + 1))
1075- else $Tuple2((cP :+ dW), (av + 1))
1076- }
1077-
1078- let er = {
1079- let aP = aX
1080- let aQ = size(aP)
1081- let aR = $Tuple2(nil, 0)
1082- func aS (aT,aU) = if ((aU >= aQ))
1083- then aT
1084- else dV(aT, aP[aU])
1085-
1086- func aV (aT,aU) = if ((aU >= aQ))
1087- then aT
1088- else throw("List size exceeds 15")
1089-
1090- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1091- }
1092- let cP = er._1
1093- let av = er._2
1094- if (cO(cP))
1095- then throw()
1096- else {
1097- let dF = cz(ep, dQ)
1098- if ((dF == dF))
1099- then [ScriptTransfer(db.caller, ci, fromBase58String(dQ)), IntegerEntry((ao[av] + h), (aX[av] - ep)), Burn(af, ed), ScriptTransfer(S, dC, fromBase58String(dQ)), ScriptTransfer(X, (eo - dC), fromBase58String(dQ)), IntegerEntry(l, (ag - ed))]
1100- else throw("Strict value is not equal to itself.")
1101- }
1121+ let ec = cA(et, dT)
1122+ if ((ec == ec))
1123+ then [ScriptTransfer(dc.originCaller, cj, fromBase58String(dT)), IntegerEntry((ap[eq] + i), (aY[eq] - et)), Burn(ag, ee), ScriptTransfer(T, dD, fromBase58String(dT)), ScriptTransfer(Y, (es - dD), fromBase58String(dT)), IntegerEntry(m, (ah - ee))]
1124+ else throw("Strict value is not equal to itself.")
11021125 }
11031126 }
1104- else throw("Strict value is not equal to itself.")
11051127 }
11061128 }
11071129 })
11081130
11091131
11101132
1111-@Callable(db)
1112-func A () = $Tuple2(nil, aG())
1133+@Callable(dc)
1134+func withdrawOneCoinWithUnlock (dT,ep,ek) = valueOrElse(au(), if ((0 >= ek))
1135+ then throw("Unlock amount must be positive")
1136+ else {
1137+ let cJ = cF()
1138+ if (cJ._1)
1139+ then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
1140+ else {
1141+ let ee = if ((size(dc.payments) > 0))
1142+ then if ((size(dc.payments) != 1))
1143+ then throw("size(payments) != 1")
1144+ else {
1145+ let ef = dc.payments[0].assetId
1146+ if ((ag != ef))
1147+ then throw("unknown payment token")
1148+ else dc.payments[0].amount
1149+ }
1150+ else 0
1151+ let el = invoke(X, "withdrawShareTokens", [toString(this), ek], nil)
1152+ if ((el == el))
1153+ then {
1154+ let em = (ee + ek)
1155+ let dH = invoke(this, "withdrawOneCoin", [dT, ep], [AttachedPayment(ag, em)])
1156+ if ((dH == dH))
1157+ then nil
1158+ else throw("Strict value is not equal to itself.")
1159+ }
1160+ else throw("Strict value is not equal to itself.")
1161+ }
1162+ })
11131163
11141164
11151165
1116-@Callable(db)
1166+@Callable(dc)
1167+func A () = $Tuple2(nil, aH())
1168+
1169+
1170+
1171+@Callable(dc)
11171172 func getVirtualPrice () = {
1118- let bo = ba(aL(), aG())
1119- $Tuple2(nil, fraction(bo, b, ag))
1173+ let bp = bb(aM(), aH())
1174+ $Tuple2(nil, fraction(bp, a, ah))
11201175 }
11211176
11221177
11231178
1124-@Callable(db)
1125-func calcTokenAmount (es,et) = {
1126- let bb = aG()
1127- let eu = aL()
1128- let bW = br(eu, bb)
1129- func ev (aN,ee) = {
1130- let ew = aN
1131- let cP = ew._1
1132- let av = ew._2
1133- let dv = (ee + (if (et)
1134- then es[av]
1135- else -(es[av])))
1136- $Tuple2((cP :+ dv), (av + 1))
1179+@Callable(dc)
1180+func calcTokenAmount (ex,ey) = {
1181+ let bc = aH()
1182+ let ez = aM()
1183+ let bX = bs(ez, bc)
1184+ func eA (aO,eg) = {
1185+ let eB = aO
1186+ let cQ = eB._1
1187+ let aw = eB._2
1188+ let dw = (eg + (if (ey)
1189+ then ex[aw]
1190+ else -(ex[aw])))
1191+ $Tuple2((cQ :+ dw), (aw + 1))
11371192 }
11381193
1139- let cP = ( let aP = eu
1140- let aQ = size(aP)
1141- let aR = $Tuple2(nil, 0)
1142- func aS (aT,aU) = if ((aU >= aQ))
1143- then aT
1144- else ev(aT, aP[aU])
1194+ let cQ = ( let aQ = ez
1195+ let aR = size(aQ)
1196+ let aS = $Tuple2(nil, 0)
1197+ func aT (aU,aV) = if ((aV >= aR))
1198+ then aU
1199+ else eA(aU, aQ[aV])
11451200
1146- func aV (aT,aU) = if ((aU >= aQ))
1147- then aT
1201+ func aW (aU,aV) = if ((aV >= aR))
1202+ then aU
11481203 else throw("List size exceeds 15")
11491204
1150- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1151- let bX = br(cP, bb)
1152- let ex = if (et)
1153- then (bX - bW)
1154- else (bW - bX)
1155- $Tuple2(nil, fraction(ex, ag, bW))
1205+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1206+ let bY = bs(cQ, bc)
1207+ let eC = if (ey)
1208+ then (bY - bX)
1209+ else (bX - bY)
1210+ $Tuple2(nil, fraction(eC, ah, bX))
11561211 }
11571212
11581213
11591214
1160-@Callable(db)
1161-func rampA (ey,ez) = valueOrElse(at(), valueOrElse(au(db), if (az((ay >= (am + f))))
1215+@Callable(dc)
1216+func rampA (eD,eE) = valueOrElse(au(), valueOrElse(av(dc), if (aA((az >= (an + e))))
11621217 then throw("too often")
1163- else if (az((ez >= (ay + f))))
1218+ else if (aA((eE >= (az + e))))
11641219 then throw("insufficient time")
11651220 else {
1166- let eA = aG()
1167- if (az(if ((ey > 0))
1168- then (c > ey)
1221+ let eF = aH()
1222+ if (aA(if ((eD > 0))
1223+ then (b > eD)
11691224 else false))
11701225 then throw("out of base range")
1171- else if (az(if (if ((ey >= eA))
1172- then ((eA * d) >= ey)
1226+ else if (aA(if (if ((eD >= eF))
1227+ then ((eF * c) >= eD)
11731228 else false)
11741229 then true
1175- else if ((eA > ey))
1176- then ((ey * d) >= eA)
1230+ else if ((eF > eD))
1231+ then ((eD * c) >= eF)
11771232 else false))
11781233 then throw("out of range")
1179- else [IntegerEntry("initial_A", eA), IntegerEntry("future_A", ey), IntegerEntry("initial_A_time", ay), IntegerEntry("future_A_time", ez)]
1234+ else [IntegerEntry("initial_A", eF), IntegerEntry("future_A", eD), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", eE)]
11801235 }))
11811236
11821237
11831238
1184-@Callable(db)
1185-func stopRampA () = valueOrElse(at(), valueOrElse(au(db), {
1186- let eB = aG()
1187-[IntegerEntry("initial_A", eB), IntegerEntry("future_A", eB), IntegerEntry("initial_A_time", ay), IntegerEntry("future_A_time", ay)]
1239+@Callable(dc)
1240+func stopRampA () = valueOrElse(au(), valueOrElse(av(dc), {
1241+ let eG = aH()
1242+[IntegerEntry("initial_A", eG), IntegerEntry("future_A", eG), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", az)]
11881243 }))
11891244
11901245
11911246
1192-@Callable(db)
1193-func shutdown () = valueOrElse(au(db), if (!(ae))
1194- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, j), "the cause wasn't specified")))
1195- else aq("Paused by admin"))
1247+@Callable(dc)
1248+func shutdown () = valueOrElse(av(dc), if (!(af))
1249+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
1250+ else ar("Paused by admin"))
11961251
11971252
11981253
1199-@Callable(db)
1200-func activate () = valueOrElse(au(db), if (ae)
1201- then as()
1202- else [BooleanEntry(i, true), DeleteEntry(j)])
1254+@Callable(dc)
1255+func activate () = valueOrElse(av(dc), if (af)
1256+ then at()
1257+ else [BooleanEntry(j, true), DeleteEntry(k)])
12031258
12041259
12051260
1206-@Callable(db)
1207-func keepLimitForFirstHarvest (eC) = valueOrElse(at(), valueOrElse(au(db), [IntegerEntry(u, eC)]))
1261+@Callable(dc)
1262+func keepLimitForFirstHarvest (eH) = valueOrElse(au(), valueOrElse(av(dc), [IntegerEntry(v, eH)]))
12081263
12091264
1210-@Verifier(eD)
1211-func eE () = {
1212- let eF = {
1213- let eG = if (sigVerify(eD.bodyBytes, eD.proofs[0], O))
1265+@Verifier(eI)
1266+func eJ () = {
1267+ let eK = {
1268+ let eL = if (sigVerify(eI.bodyBytes, eI.proofs[0], P))
12141269 then 1
12151270 else 0
1216- let eH = if (sigVerify(eD.bodyBytes, eD.proofs[1], P))
1271+ let eM = if (sigVerify(eI.bodyBytes, eI.proofs[1], Q))
12171272 then 1
12181273 else 0
1219- let eI = if (sigVerify(eD.bodyBytes, eD.proofs[2], Q))
1274+ let eN = if (sigVerify(eI.bodyBytes, eI.proofs[2], R))
12201275 then 1
12211276 else 0
1222- (((eG + eH) + eI) >= 2)
1277+ (((eL + eM) + eN) >= 2)
12231278 }
1224- let L = eD
1225- if ($isInstanceOf(L, "InvokeScriptTransaction"))
1279+ let M = eI
1280+ if ($isInstanceOf(M, "InvokeScriptTransaction"))
12261281 then {
1227- let eJ = L
1228- let eK = if ((eJ.dApp == this))
1229- then (eJ.function == "takeIntoAccountExtraFunds")
1282+ let dH = M
1283+ let eO = if ((dH.dApp == this))
1284+ then (dH.function == "takeIntoAccountExtraFunds")
12301285 else false
1231- let eL = if (if (if (sigVerify(eD.bodyBytes, eD.proofs[0], O))
1286+ let eP = if (if (if (sigVerify(eI.bodyBytes, eI.proofs[0], P))
12321287 then true
1233- else sigVerify(eD.bodyBytes, eD.proofs[0], P))
1288+ else sigVerify(eI.bodyBytes, eI.proofs[0], Q))
12341289 then true
1235- else sigVerify(eD.bodyBytes, eD.proofs[0], Q))
1290+ else sigVerify(eI.bodyBytes, eI.proofs[0], R))
12361291 then true
1237- else sigVerify(eD.bodyBytes, eD.proofs[0], R)
1238- if (if (eK)
1239- then eL
1292+ else sigVerify(eI.bodyBytes, eI.proofs[0], S)
1293+ if (if (eO)
1294+ then eP
12401295 else false)
12411296 then true
1242- else eF
1297+ else eK
12431298 }
1244- else eF
1299+ else eK
12451300 }
12461301
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "3.0.0"
4+let a = 1000000
55
66 let b = 1000000
77
8-let c = 1000000
8+let c = 10
99
10-let d = 10
10+let d = 6
1111
12-let e = 6
12+let e = (86400 / 60)
1313
14-let f = (86400 / 60)
14+let f = "3.0.0"
1515
16-let g = "asset_ids"
16+let g = "version"
1717
18-let h = "_balance"
18+let h = "asset_ids"
1919
20-let i = "active"
20+let i = "_balance"
2121
22-let j = "shutdown_cause"
22+let j = "active"
2323
24-let k = "share_asset_id"
24+let k = "shutdown_cause"
2525
26-let l = "share_asset_supply"
26+let l = "share_asset_id"
2727
28-let m = "commission"
28+let m = "share_asset_supply"
2929
30-let n = "dAppThresholdCoef"
30+let n = "commission"
3131
32-let o = "staking_usdnnsbt_address"
32+let o = "dAppThresholdCoef"
3333
34-let p = "discounts"
34+let p = "staking_usdnnsbt_address"
3535
36-let q = "discount_values"
36+let q = "discounts"
3737
38-let r = "_SWOP_amount"
38+let r = "discount_values"
3939
40-let s = "first_harvest"
40+let s = "_SWOP_amount"
4141
42-let t = "first_harvest_height"
42+let t = "first_harvest"
4343
44-let u = "share_limit_on_first_harvest"
44+let u = "first_harvest_height"
4545
46-let v = "base_period"
46+let v = "share_limit_on_first_harvest"
4747
48-let w = "period_length"
48+let w = "base_period"
4949
50-let x = "start_height"
50+let x = "period_length"
5151
52-let y = "admin_pub_1"
52+let y = "start_height"
5353
54-let z = "admin_pub_2"
54+let z = "admin_pub_1"
5555
56-let B = "admin_pub_3"
56+let B = "admin_pub_2"
5757
58-let C = "admin_invoke_pub"
58+let C = "admin_pub_3"
5959
60-let E = "money_box_address"
60+let E = "admin_invoke_pub"
6161
62-let F = "governance_address"
62+let F = "money_box_address"
6363
64-let G = "voting_address"
64+let G = "governance_address"
6565
66-let H = "farming_address"
66+let H = "voting_address"
6767
68-let I = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
68+let I = "farming_address"
6969
70-func J (K) = {
71- let L = getString(I, K)
72- if ($isInstanceOf(L, "String"))
70+let J = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
71+
72+func K (L) = {
73+ let M = getString(J, L)
74+ if ($isInstanceOf(M, "String"))
7375 then {
74- let M = L
75- fromBase58String(M)
76+ let N = M
77+ fromBase58String(N)
7678 }
7779 else {
78- let N = L
79- throw((K + "is empty"))
80+ let O = M
81+ throw((L + "is empty"))
8082 }
8183 }
8284
8385
84-let O = J(y)
86+let P = K(z)
8587
86-let P = J(z)
88+let Q = K(B)
8789
88-let Q = J(B)
90+let R = K(C)
8991
90-let R = J(C)
92+let S = K(E)
9193
92-let S = Address(J(E))
94+let T = Address(K(F))
9395
94-let T = Address(J(F))
96+let U = Address(K(G))
9597
96-let U = Address(J(o))
98+let V = Address(K(p))
9799
98-let V = Address(J(G))
100+let W = Address(K(H))
99101
100-let W = Address(J(H))
102+let X = Address(K(I))
101103
102-let X = Address(base58'3MxXHaGvmKQHH3kNrPBunhve1sDXf7M5RZt')
104+let Y = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
103105
104-let Y = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
106+let Z = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
105107
106-let Z = [toBase58String(Y)]
108+let aa = [toBase58String(Z)]
107109
108-let aa = valueOrErrorMessage(getInteger(V, v), "Empty kBasePeriod")
110+let ab = valueOrErrorMessage(getInteger(W, w), "Empty kBasePeriod")
109111
110-let ab = valueOrErrorMessage(getInteger(V, x), "Empty kStartHeight")
112+let ac = valueOrErrorMessage(getInteger(W, y), "Empty kStartHeight")
111113
112-let ac = valueOrErrorMessage(getInteger(V, w), "Empty kPeriodLength")
114+let ad = valueOrErrorMessage(getInteger(W, x), "Empty kPeriodLength")
113115
114-let ad = ((aa + ((height - ab) / ac)) + 3)
116+let ae = ((ab + ((height - ac) / ad)) + 3)
115117
116-let ae = getBooleanValue(this, i)
118+let af = getBooleanValue(this, j)
117119
118-let af = fromBase58String(getStringValue(this, k))
120+let ag = fromBase58String(getStringValue(this, l))
119121
120-let ag = getIntegerValue(this, l)
122+let ah = getIntegerValue(this, m)
121123
122-let ah = 1000000
124+let ai = 1000000
123125
124-let ai = getIntegerValue(this, m)
126+let aj = getIntegerValue(this, n)
125127
126-let aj = fraction(40, ah, 100)
128+let ak = fraction(40, ai, 100)
127129
128-let ak = getIntegerValue(this, "initial_A")
130+let al = getIntegerValue(this, "initial_A")
129131
130-let al = getIntegerValue(this, "future_A")
132+let am = getIntegerValue(this, "future_A")
131133
132-let am = valueOrElse(getInteger(this, "initial_A_time"), 0)
134+let an = valueOrElse(getInteger(this, "initial_A_time"), 0)
133135
134-let an = valueOrElse(getInteger(this, "future_A_time"), 0)
136+let ao = valueOrElse(getInteger(this, "future_A_time"), 0)
135137
136-let ao = split(getStringValue(this, g), ",")
138+let ap = split(getStringValue(this, h), ",")
137139
138-let ap = size(ao)
140+let aq = size(ap)
139141
140-func aq (ar) = [BooleanEntry(i, false), StringEntry(j, ar)]
142+func ar (as) = [BooleanEntry(j, false), StringEntry(k, as)]
141143
142144
143-func as () = throw("DApp is already active")
145+func at () = throw("DApp is already active")
144146
145147
146-func at () = if (ae)
148+func au () = if (af)
147149 then unit
148150 else throw("DApp is inactive at this moment")
149151
150152
151-func au (av) = if (containsElement([O, P, Q], av.callerPublicKey))
153+func av (aw) = if (containsElement([P, Q, R], aw.callerPublicKey))
152154 then unit
153155 else throw("Only admin can call this function")
154156
155157
156-func aw (av) = if ((this == av.caller))
158+func ax (aw) = if ((this == aw.caller))
157159 then unit
158160 else throw("Only contract itself can call this function")
159161
160162
161-let ax = toBigInt(2)
163+let ay = toBigInt(2)
162164
163-let ay = height
165+let az = height
164166
165-func az (aA) = if (aA)
167+func aA (aB) = if (aB)
166168 then false
167169 else true
168170
169171
170-func aB (aC) = {
171- let aD = valueOrElse(getInteger(T, (toString(aC) + r)), 0)
172- let aE = split(getStringValue(I, q), ",")
173- let aF = split(getStringValue(I, p), ",")
174- if (if ((aD >= parseIntValue(aE[0])))
175- then (parseIntValue(aE[1]) > aD)
172+func aC (aD) = {
173+ let aE = valueOrElse(getInteger(U, (toString(aD) + s)), 0)
174+ let aF = split(getStringValue(J, r), ",")
175+ let aG = split(getStringValue(J, q), ",")
176+ if (if ((aE >= parseIntValue(aF[0])))
177+ then (parseIntValue(aF[1]) > aE)
176178 else false)
177- then (ah - parseIntValue(aF[0]))
178- else if (if ((aD >= parseIntValue(aE[1])))
179- then (parseIntValue(aE[2]) > aD)
179+ then (ai - parseIntValue(aG[0]))
180+ else if (if ((aE >= parseIntValue(aF[1])))
181+ then (parseIntValue(aF[2]) > aE)
180182 else false)
181- then (ah - parseIntValue(aF[1]))
182- else if (if ((aD >= parseIntValue(aE[2])))
183- then (parseIntValue(aE[3]) > aD)
183+ then (ai - parseIntValue(aG[1]))
184+ else if (if ((aE >= parseIntValue(aF[2])))
185+ then (parseIntValue(aF[3]) > aE)
184186 else false)
185- then (ah - parseIntValue(aF[2]))
186- else if (if ((aD >= parseIntValue(aE[3])))
187- then (parseIntValue(aE[4]) > aD)
187+ then (ai - parseIntValue(aG[2]))
188+ else if (if ((aE >= parseIntValue(aF[3])))
189+ then (parseIntValue(aF[4]) > aE)
188190 else false)
189- then (ah - parseIntValue(aF[3]))
190- else if ((aD >= parseIntValue(aE[4])))
191- then (ah - parseIntValue(aF[4]))
192- else ah
191+ then (ai - parseIntValue(aG[3]))
192+ else if ((aE >= parseIntValue(aF[4])))
193+ then (ai - parseIntValue(aG[4]))
194+ else ai
193195 }
194196
195197
196-func aG () = {
197- let aH = an
198- let aI = al
199- if ((aH > ay))
198+func aH () = {
199+ let aI = ao
200+ let aJ = am
201+ if ((aI > az))
200202 then {
201- let aJ = ak
202- let aK = am
203- if ((aI > aJ))
204- then (aJ + (((aI - aJ) * (ay - aK)) / (aH - aK)))
205- else (aJ - (((aJ - aI) * (ay - aK)) / (aH - aK)))
203+ let aK = al
204+ let aL = an
205+ if ((aJ > aK))
206+ then (aK + (((aJ - aK) * (az - aL)) / (aI - aL)))
207+ else (aK - (((aK - aJ) * (az - aL)) / (aI - aL)))
206208 }
207- else aI
209+ else aJ
208210 }
209211
210212
211-func aL () = {
212- func aM (aN,aO) = (aN :+ valueOrElse(getInteger(this, (aO + h)), 0))
213+func aM () = {
214+ func aN (aO,aP) = (aO :+ valueOrElse(getInteger(this, (aP + i)), 0))
213215
214- let aP = ao
215- let aQ = size(aP)
216- let aR = nil
217- func aS (aT,aU) = if ((aU >= aQ))
218- then aT
219- else aM(aT, aP[aU])
216+ let aQ = ap
217+ let aR = size(aQ)
218+ let aS = nil
219+ func aT (aU,aV) = if ((aV >= aR))
220+ then aU
221+ else aN(aU, aQ[aV])
220222
221- func aV (aT,aU) = if ((aU >= aQ))
222- then aT
223+ func aW (aU,aV) = if ((aV >= aR))
224+ then aU
223225 else throw("List size exceeds 15")
224226
225- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
227+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
226228 }
227229
228230
229-func aW (aX) = aX
231+func aX (aY) = aY
230232
231233
232-func aY (aN,aZ) = (aN + aZ)
234+func aZ (aO,ba) = (aO + ba)
233235
234236
235-func ba (aX,bb) = {
236- let bc = invoke(this, "D", [aX, bb], nil)
237- if ($isInstanceOf(bc, "Int"))
238- then bc
239- else throw(($getType(invoke(this, "D", [aX, bb], nil)) + " couldn't be cast to Int"))
237+func bb (aY,bc) = {
238+ let bd = invoke(this, "D", [aY, bc], nil)
239+ if ($isInstanceOf(bd, "Int"))
240+ then bd
241+ else throw(($getType(invoke(this, "D", [aY, bc], nil)) + " couldn't be cast to Int"))
240242 }
241243
242244
243-func bd (aX,bb) = {
244- let be = {
245- let aP = aX
246- let aQ = size(aP)
247- let aR = 0
248- func aS (aT,aU) = if ((aU >= aQ))
249- then aT
250- else aY(aT, aP[aU])
245+func be (aY,bc) = {
246+ let bf = {
247+ let aQ = aY
248+ let aR = size(aQ)
249+ let aS = 0
250+ func aT (aU,aV) = if ((aV >= aR))
251+ then aU
252+ else aZ(aU, aQ[aV])
251253
252- func aV (aT,aU) = if ((aU >= aQ))
253- then aT
254+ func aW (aU,aV) = if ((aV >= aR))
255+ then aU
254256 else throw("List size exceeds 15")
255257
256- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
258+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
257259 }
258- if ((be == 0))
260+ if ((bf == 0))
259261 then 0
260262 else {
261- let bf = (bb * ap)
262- let bg = (toBigInt(bf) * toBigInt(be))
263- let bh = toBigInt((bf - 1))
264- func bi (aN,av) = if ((aN._2 == true))
265- then aN
263+ let bg = (bc * aq)
264+ let bh = (toBigInt(bg) * toBigInt(bf))
265+ let bi = toBigInt((bg - 1))
266+ func bj (aO,aw) = if ((aO._2 == true))
267+ then aO
266268 else {
267- let bj = aN._1
268- func bk (bl,av) = if ((ap > av))
269- then ((bl * bj) / (toBigInt(aX[av]) * toBigInt(ap)))
270- else bl
269+ let bk = aO._1
270+ func bl (bm,aw) = if ((aq > aw))
271+ then ((bm * bk) / (toBigInt(aY[aw]) * toBigInt(aq)))
272+ else bm
271273
272- let bl = {
273- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
274- let aQ = size(aP)
275- let aR = bj
276- func bm (aT,aU) = if ((aU >= aQ))
277- then aT
278- else bk(aT, aP[aU])
274+ let bm = {
275+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
276+ let aR = size(aQ)
277+ let aS = bk
278+ func bn (aU,aV) = if ((aV >= aR))
279+ then aU
280+ else bl(aU, aQ[aV])
279281
280- func bn (aT,aU) = if ((aU >= aQ))
281- then aT
282+ func bo (aU,aV) = if ((aV >= aR))
283+ then aU
282284 else throw("List size exceeds 15")
283285
284- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
286+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
285287 }
286- let bo = fraction((bg + (toBigInt(ap) * bl)), bj, ((bh * bj) + (toBigInt((ap + 1)) * bl)))
287- if ((bo > bj))
288- then if ((1 >= toInt((bo - bj))))
289- then $Tuple2(bo, true)
290- else $Tuple2(bo, false)
291- else if ((1 >= toInt((bj - bo))))
292- then $Tuple2(bo, true)
293- else $Tuple2(bo, false)
288+ let bp = fraction((bh + (toBigInt(aq) * bm)), bk, ((bi * bk) + (toBigInt((aq + 1)) * bm)))
289+ if ((bp > bk))
290+ then if ((1 >= toInt((bp - bk))))
291+ then $Tuple2(bp, true)
292+ else $Tuple2(bp, false)
293+ else if ((1 >= toInt((bk - bp))))
294+ then $Tuple2(bp, true)
295+ else $Tuple2(bp, false)
294296 }
295297
296- let bp = {
297- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
298- let aQ = size(aP)
299- let aR = $Tuple2(toBigInt(be), false)
300- func bm (aT,aU) = if ((aU >= aQ))
301- then aT
302- else bi(aT, aP[aU])
298+ let bq = {
299+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
300+ let aR = size(aQ)
301+ let aS = $Tuple2(toBigInt(bf), false)
302+ func bn (aU,aV) = if ((aV >= aR))
303+ then aU
304+ else bj(aU, aQ[aV])
303305
304- func bn (aT,aU) = if ((aU >= aQ))
305- then aT
306+ func bo (aU,aV) = if ((aV >= aR))
307+ then aU
306308 else throw("List size exceeds 15")
307309
308- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
310+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
309311 }
310- let bo = bp._1
311- let bq = bp._2
312- if ((bq == false))
313- then throw(("get_D() not finished with " + toString(bo)))
314- else toInt(bo)
312+ let bp = bq._1
313+ let br = bq._2
314+ if ((br == false))
315+ then throw(("get_D() not finished with " + toString(bp)))
316+ else toInt(bp)
315317 }
316318 }
317319
318320
319-func br (aX,bb) = ba(aW(aX), bb)
321+func bs (aY,bc) = bb(aX(aY), bc)
320322
321323
322-func bs (bt,bu,bv,bw) = if (az((bt != bu)))
324+func bt (bu,bv,bw,bx) = if (aA((bu != bv)))
323325 then throw("same coin")
324- else if (az(if ((bu >= 0))
325- then (bt >= 0)
326+ else if (aA(if ((bv >= 0))
327+ then (bu >= 0)
326328 else false))
327329 then throw("below zero")
328- else if (az(if ((ap > bu))
329- then (ap > bt)
330+ else if (aA(if ((aq > bv))
331+ then (aq > bu)
330332 else false))
331333 then throw("above N_COINS")
332334 else {
333- let bb = aG()
334- let bo = ba(bw, bb)
335- let bf = (bb * ap)
336- func bx (aN,av) = {
337- let by = aN
338- let bz = by._1
339- let bA = by._2
340- let bB = if ((bt == av))
341- then bv
342- else bw[av]
343- if (if ((av != bu))
344- then (ap > av)
335+ let bc = aH()
336+ let bp = bb(bx, bc)
337+ let bg = (bc * aq)
338+ func by (aO,aw) = {
339+ let bz = aO
340+ let bA = bz._1
341+ let bB = bz._2
342+ let bC = if ((bu == aw))
343+ then bw
344+ else bx[aw]
345+ if (if ((aw != bv))
346+ then (aq > aw)
345347 else false)
346- then $Tuple2((bz + bB), fraction(bA, toBigInt(bo), toBigInt((bB * ap))))
347- else $Tuple2(bz, bA)
348+ then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
349+ else $Tuple2(bA, bB)
348350 }
349351
350- let bC = {
351- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
352- let aQ = size(aP)
353- let aR = $Tuple2(0, toBigInt(bo))
354- func aS (aT,aU) = if ((aU >= aQ))
355- then aT
356- else bx(aT, aP[aU])
352+ let bD = {
353+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
354+ let aR = size(aQ)
355+ let aS = $Tuple2(0, toBigInt(bp))
356+ func aT (aU,aV) = if ((aV >= aR))
357+ then aU
358+ else by(aU, aQ[aV])
357359
358- func aV (aT,aU) = if ((aU >= aQ))
359- then aT
360+ func aW (aU,aV) = if ((aV >= aR))
361+ then aU
360362 else throw("List size exceeds 15")
361363
362- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
364+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
363365 }
364- let bz = bC._1
365- let bD = bC._2
366- let bA = fraction(bD, toBigInt(bo), toBigInt((bf * ap)))
367- let bE = toBigInt(((bz + (bo / bf)) - bo))
368- func bF (aN,bG) = if ((aN._2 == true))
369- then aN
366+ let bA = bD._1
367+ let bE = bD._2
368+ let bB = fraction(bE, toBigInt(bp), toBigInt((bg * aq)))
369+ let bF = toBigInt(((bA + (bp / bg)) - bp))
370+ func bG (aO,bH) = if ((aO._2 == true))
371+ then aO
370372 else {
371- let bH = aN._1
372- let bI = (((bH * bH) + bA) / ((ax * bH) + bE))
373- if ((bI > bH))
374- then if ((1 >= toInt((bI - bH))))
375- then $Tuple2(bI, true)
376- else $Tuple2(bI, false)
377- else if ((1 >= toInt((bH - bI))))
378- then $Tuple2(bI, true)
379- else $Tuple2(bI, false)
373+ let bI = aO._1
374+ let bJ = (((bI * bI) + bB) / ((ay * bI) + bF))
375+ if ((bJ > bI))
376+ then if ((1 >= toInt((bJ - bI))))
377+ then $Tuple2(bJ, true)
378+ else $Tuple2(bJ, false)
379+ else if ((1 >= toInt((bI - bJ))))
380+ then $Tuple2(bJ, true)
381+ else $Tuple2(bJ, false)
380382 }
381383
382- let bJ = {
383- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
384- let aQ = size(aP)
385- let aR = $Tuple2(toBigInt(bo), false)
386- func bm (aT,aU) = if ((aU >= aQ))
387- then aT
388- else bF(aT, aP[aU])
384+ let bK = {
385+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
386+ let aR = size(aQ)
387+ let aS = $Tuple2(toBigInt(bp), false)
388+ func bn (aU,aV) = if ((aV >= aR))
389+ then aU
390+ else bG(aU, aQ[aV])
389391
390- func bn (aT,aU) = if ((aU >= aQ))
391- then aT
392+ func bo (aU,aV) = if ((aV >= aR))
393+ then aU
392394 else throw("List size exceeds 16")
393395
394- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
396+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
395397 }
396- let bI = bJ._1
397- let bq = bJ._2
398- if ((bq == false))
399- then throw(("getY() not finished with " + toString(bI)))
400- else toInt(bI)
398+ let bJ = bK._1
399+ let br = bK._2
400+ if ((br == false))
401+ then throw(("getY() not finished with " + toString(bJ)))
402+ else toInt(bJ)
401403 }
402404
403405
404-func bK (bL,bt,aX,bo) = if (az((bt >= 0)))
406+func bL (bM,bu,aY,bp) = if (aA((bu >= 0)))
405407 then throw("i below zero")
406- else if (az((ap > bt)))
408+ else if (aA((aq > bu)))
407409 then throw("i above N_COINS")
408410 else {
409- let bf = (bL * ap)
410- func bx (aN,av) = {
411- let bM = aN
412- let bz = bM._1
413- let bA = bM._2
414- let bB = if (if ((bt != av))
415- then (ap > av)
411+ let bg = (bM * aq)
412+ func by (aO,aw) = {
413+ let bN = aO
414+ let bA = bN._1
415+ let bB = bN._2
416+ let bC = if (if ((bu != aw))
417+ then (aq > aw)
416418 else false)
417- then aX[av]
419+ then aY[aw]
418420 else 0
419- if (if ((ap > av))
420- then (bt != av)
421+ if (if ((aq > aw))
422+ then (bu != aw)
421423 else false)
422- then $Tuple2((bz + bB), fraction(bA, toBigInt(bo), toBigInt((bB * ap))))
423- else $Tuple2(bz, bA)
424+ then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * aq))))
425+ else $Tuple2(bA, bB)
424426 }
425427
426- let bN = {
427- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
428- let aQ = size(aP)
429- let aR = $Tuple2(0, toBigInt(bo))
430- func aS (aT,aU) = if ((aU >= aQ))
431- then aT
432- else bx(aT, aP[aU])
428+ let bO = {
429+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
430+ let aR = size(aQ)
431+ let aS = $Tuple2(0, toBigInt(bp))
432+ func aT (aU,aV) = if ((aV >= aR))
433+ then aU
434+ else by(aU, aQ[aV])
433435
434- func aV (aT,aU) = if ((aU >= aQ))
435- then aT
436+ func aW (aU,aV) = if ((aV >= aR))
437+ then aU
436438 else throw("List size exceeds 15")
437439
438- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
440+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
439441 }
440- let bz = bN._1
441- let bD = bN._2
442- let bA = fraction(bD, toBigInt(bo), toBigInt((bf * ap)))
443- let bE = toBigInt(((bz + (bo / bf)) - bo))
444- func bO (aN,av) = if ((aN._2 == true))
445- then aN
442+ let bA = bO._1
443+ let bE = bO._2
444+ let bB = fraction(bE, toBigInt(bp), toBigInt((bg * aq)))
445+ let bF = toBigInt(((bA + (bp / bg)) - bp))
446+ func bP (aO,aw) = if ((aO._2 == true))
447+ then aO
446448 else {
447- let bH = aN._1
448- let bI = (((bH * bH) + bA) / ((ax * bH) + bE))
449- if ((bI > bH))
450- then if ((1 >= toInt((bI - bH))))
451- then $Tuple2(bI, true)
452- else $Tuple2(bI, false)
453- else if ((1 >= toInt((bH - bI))))
454- then $Tuple2(bI, true)
455- else $Tuple2(bI, false)
449+ let bI = aO._1
450+ let bJ = (((bI * bI) + bB) / ((ay * bI) + bF))
451+ if ((bJ > bI))
452+ then if ((1 >= toInt((bJ - bI))))
453+ then $Tuple2(bJ, true)
454+ else $Tuple2(bJ, false)
455+ else if ((1 >= toInt((bI - bJ))))
456+ then $Tuple2(bJ, true)
457+ else $Tuple2(bJ, false)
456458 }
457459
458- let bP = {
459- let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
460- let aQ = size(aP)
461- let aR = $Tuple2(toBigInt(bo), false)
462- func bm (aT,aU) = if ((aU >= aQ))
463- then aT
464- else bO(aT, aP[aU])
460+ let bQ = {
461+ let aQ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
462+ let aR = size(aQ)
463+ let aS = $Tuple2(toBigInt(bp), false)
464+ func bn (aU,aV) = if ((aV >= aR))
465+ then aU
466+ else bP(aU, aQ[aV])
465467
466- func bn (aT,aU) = if ((aU >= aQ))
467- then aT
468+ func bo (aU,aV) = if ((aV >= aR))
469+ then aU
468470 else throw("List size exceeds 16")
469471
470- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
472+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
471473 }
472- let bI = bP._1
473- let bq = bP._2
474- if ((bq == false))
475- then throw(("get_y_D() not finished with " + toString(bI)))
476- else toInt(bI)
474+ let bJ = bQ._1
475+ let br = bQ._2
476+ if ((br == false))
477+ then throw(("get_y_D() not finished with " + toString(bJ)))
478+ else toInt(bJ)
477479 }
478480
479481
480-func bQ (aX,bR,av,bS) = {
481- let bT = aB(bS)
482- let bb = aG()
483- let bU = ((fraction(ai, bT, ah, CEILING) * ap) / (4 * (ap - 1)))
484- let bV = ag
485- let bW = ba(aX, bb)
486- let bX = (bW - fraction(bR, bW, bV))
487- let bY = bK(bb, av, aX, bX)
488- let bZ = (aX[av] - bY)
489- func ca (aN,cb) = {
490- let cc = aN
491- let cd = cc._1
492- let ce = cc._2
493- let cf = if ((ce == av))
494- then (fraction(cb, bX, bW) - bY)
495- else (cb - fraction(cb, bX, bW))
496- $Tuple2((cd :+ (cb - fraction(bU, cf, ah))), (ce + 1))
482+func bR (aY,bS,aw,bT) = {
483+ let bU = aC(bT)
484+ let bc = aH()
485+ let bV = ((fraction(aj, bU, ai, CEILING) * aq) / (4 * (aq - 1)))
486+ let bW = ah
487+ let bX = bb(aY, bc)
488+ let bY = (bX - fraction(bS, bX, bW))
489+ let bZ = bL(bc, aw, aY, bY)
490+ let ca = (aY[aw] - bZ)
491+ func cb (aO,cc) = {
492+ let cd = aO
493+ let ce = cd._1
494+ let cf = cd._2
495+ let cg = if ((cf == aw))
496+ then (fraction(cc, bY, bX) - bZ)
497+ else (cc - fraction(cc, bY, bX))
498+ $Tuple2((ce :+ (cc - fraction(bV, cg, ai))), (cf + 1))
497499 }
498500
499- let cg = {
500- let aP = aX
501- let aQ = size(aP)
502- let aR = $Tuple2(nil, 0)
503- func aS (aT,aU) = if ((aU >= aQ))
504- then aT
505- else ca(aT, aP[aU])
501+ let ch = {
502+ let aQ = aY
503+ let aR = size(aQ)
504+ let aS = $Tuple2(nil, 0)
505+ func aT (aU,aV) = if ((aV >= aR))
506+ then aU
507+ else cb(aU, aQ[aV])
506508
507- func aV (aT,aU) = if ((aU >= aQ))
508- then aT
509+ func aW (aU,aV) = if ((aV >= aR))
510+ then aU
509511 else throw("List size exceeds 15")
510512
511- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
513+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
512514 }
513- let cd = cg._1
514- let ce = cg._2
515- let ch = cd[av]
516- let ci = ((ch - bK(bb, av, cd, bX)) - 1)
517- $Tuple2(ci, (bZ - ci))
515+ let ce = ch._1
516+ let cf = ch._2
517+ let ci = ce[aw]
518+ let cj = ((ci - bL(bc, aw, ce, bY)) - 1)
519+ $Tuple2(cj, (ca - cj))
518520 }
519521
520522
521-func cj (aO) = {
522- let L = aO
523- if ($isInstanceOf(L, "ByteVector"))
523+func ck (aP) = {
524+ let M = aP
525+ if ($isInstanceOf(M, "ByteVector"))
524526 then {
525- let ck = L
526- toBase58String(ck)
527+ let cl = M
528+ toBase58String(cl)
527529 }
528- else if ($isInstanceOf(L, "Unit"))
530+ else if ($isInstanceOf(M, "Unit"))
529531 then {
530- let cl = L
532+ let cm = M
531533 "WAVES"
532534 }
533535 else throw("Match error")
534536 }
535537
536538
537-func cm (cn,aO) = if (cn)
538- then $Tuple2("lockNeutrino", U)
539- else $Tuple2("unlockNeutrino", U)
539+func cn (co,aP) = if (co)
540+ then $Tuple2("lockNeutrino", V)
541+ else $Tuple2("unlockNeutrino", V)
540542
541543
542-func co (cn,cp,aO) = if (cn)
544+func cp (co,cq,aP) = if (co)
543545 then {
544- let cq = cm(cn, aO)
545- let cr = cq._1
546- let cs = cq._2
547- $Tuple4(cr, cs, nil, [AttachedPayment(aO, cp)])
546+ let cr = cn(co, aP)
547+ let cs = cr._1
548+ let ct = cr._2
549+ $Tuple4(cs, ct, nil, [AttachedPayment(aP, cq)])
548550 }
549551 else {
550- let ct = cm(cn, aO)
551- let cr = ct._1
552- let cs = ct._2
553- $Tuple4(cr, cs, [cp, toBase58String(aO)], nil)
552+ let cu = cn(co, aP)
553+ let cs = cu._1
554+ let ct = cu._2
555+ $Tuple4(cs, ct, [cq, toBase58String(aP)], nil)
554556 }
555557
556558
557-func cn (cp,cu) = if (containsElement(Z, cu))
559+func co (cq,cv) = if (containsElement(aa, cv))
558560 then {
559- let cv = co(true, cp, fromBase58String(cu))
560- let cr = cv._1
561- let cw = cv._2
562- let cx = cv._3
563- let cy = cv._4
564- invoke(cw, cr, cx, cy)
561+ let cw = cp(true, cq, fromBase58String(cv))
562+ let cs = cw._1
563+ let cx = cw._2
564+ let cy = cw._3
565+ let cz = cw._4
566+ invoke(cx, cs, cy, cz)
565567 }
566568 else 0
567569
568570
569-func cz (cp,cu) = if (containsElement(Z, cu))
571+func cA (cq,cv) = if (containsElement(aa, cv))
570572 then {
571- let cA = co(false, cp, fromBase58String(cu))
572- let cr = cA._1
573- let cw = cA._2
574- let cx = cA._3
575- let cy = cA._4
576- invoke(cw, cr, cx, cy)
573+ let cB = cp(false, cq, fromBase58String(cv))
574+ let cs = cB._1
575+ let cx = cB._2
576+ let cy = cB._3
577+ let cz = cB._4
578+ invoke(cx, cs, cy, cz)
577579 }
578580 else 0
579581
580582
581-func cB (aO) = {
582- let cC = {
583- let L = aO
584- if ($isInstanceOf(L, "ByteVector"))
583+func cC (aP) = {
584+ let cD = {
585+ let M = aP
586+ if ($isInstanceOf(M, "ByteVector"))
585587 then {
586- let cD = L
587- if ((cD == Y))
588- then getInteger(U, ((("rpd_balance_" + toBase58String(cD)) + "_") + toString(this)))
588+ let cE = M
589+ if ((cE == Z))
590+ then getInteger(V, ((("rpd_balance_" + toBase58String(cE)) + "_") + toString(this)))
589591 else 0
590592 }
591- else if ($isInstanceOf(L, "Unit"))
593+ else if ($isInstanceOf(M, "Unit"))
592594 then 0
593595 else throw("Match error")
594596 }
595- let L = cC
596- if ($isInstanceOf(L, "Int"))
597+ let M = cD
598+ if ($isInstanceOf(M, "Int"))
597599 then {
598- let av = L
599- av
600+ let aw = M
601+ aw
600602 }
601603 else 0
602604 }
603605
604606
605-func cE () = {
606- let cF = aL()
607- func cG (aN,aO) = {
608- let cH = aN
609- let cI = cH._1
610- let av = cH._2
611- if (cI)
612- then $Tuple2(cI, av)
607+func cF () = {
608+ let cG = aM()
609+ func cH (aO,aP) = {
610+ let cI = aO
611+ let cJ = cI._1
612+ let aw = cI._2
613+ if (cJ)
614+ then $Tuple2(cJ, aw)
613615 else {
614- let cJ = (assetBalance(this, fromBase58String(aO)) + cB(fromBase58String(aO)))
615- if ((cF[av] > cJ))
616- then $Tuple2(true, av)
617- else $Tuple2(false, (av + 1))
616+ let cK = (assetBalance(this, fromBase58String(aP)) + cC(fromBase58String(aP)))
617+ if ((cG[aw] > cK))
618+ then $Tuple2(true, aw)
619+ else $Tuple2(false, (aw + 1))
618620 }
619621 }
620622
621- let aP = ao
622- let aQ = size(aP)
623- let aR = $Tuple2(false, 0)
624- func aS (aT,aU) = if ((aU >= aQ))
625- then aT
626- else cG(aT, aP[aU])
623+ let aQ = ap
624+ let aR = size(aQ)
625+ let aS = $Tuple2(false, 0)
626+ func aT (aU,aV) = if ((aV >= aR))
627+ then aU
628+ else cH(aU, aQ[aV])
627629
628- func aV (aT,aU) = if ((aU >= aQ))
629- then aT
630+ func aW (aU,aV) = if ((aV >= aR))
631+ then aU
630632 else throw("List size exceeds 15")
631633
632- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
634+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
633635 }
634636
635637
636-func cK (av) = aq(("Suspicious state with asset: " + ao[av]))
638+func cL (aw) = ar(("Suspicious state with asset: " + ap[aw]))
637639
638640
639-func cL (bS,cy) = {
640- func cM (aN,cN) = (aN :+ ScriptTransfer(bS, cN.amount, cN.assetId))
641+func cM (bT,cz) = {
642+ func cN (aO,cO) = (aO :+ ScriptTransfer(bT, cO.amount, cO.assetId))
641643
642- let aP = cy
643- let aQ = size(aP)
644- let aR = nil
645- func aS (aT,aU) = if ((aU >= aQ))
646- then aT
647- else cM(aT, aP[aU])
644+ let aQ = cz
645+ let aR = size(aQ)
646+ let aS = nil
647+ func aT (aU,aV) = if ((aV >= aR))
648+ then aU
649+ else cN(aU, aQ[aV])
648650
649- func aV (aT,aU) = if ((aU >= aQ))
650- then aT
651+ func aW (aU,aV) = if ((aV >= aR))
652+ then aU
651653 else throw("List size exceeds 15")
652654
653- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
655+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
654656 }
655657
656658
657-func cO (cP) = {
658- let cQ = valueOrErrorMessage(getInteger(this, n), "No dAppThresholdCoef key")
659- let cR = 10000
660- let cS = max(cP)
661- let cT = min(cP)
662- let cU = fraction(cS, cR, cT)
663- if ((cU > (cQ * cR)))
659+func cP (cQ) = {
660+ let cR = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
661+ let cS = 10000
662+ let cT = max(cQ)
663+ let cU = min(cQ)
664+ let cV = fraction(cT, cS, cU)
665+ if ((cV > (cR * cS)))
664666 then throw("New balance in assets of the DApp is less than threshold")
665667 else false
666668 }
667669
668670
669-func cV (ao) = {
670- let cW = split(ao, ",")
671- func cX (cY,aO) = {
672- let cZ = valueOrErrorMessage(fromBase58String(aO), ("fromBase58String: " + aO))
673- let da = valueOrErrorMessage(assetInfo(cZ), ("assetInfo: " + aO)).decimals
674- if ((da != e))
671+func cW (ap) = {
672+ let cX = split(ap, ",")
673+ func cY (cZ,aP) = {
674+ let da = valueOrErrorMessage(fromBase58String(aP), ("fromBase58String: " + aP))
675+ let db = valueOrErrorMessage(assetInfo(da), ("assetInfo: " + aP)).decimals
676+ if ((db != d))
675677 then throw("wrong decimals")
676678 else false
677679 }
678680
679- let aP = cW
680- let aQ = size(aP)
681- let aR = false
682- func aS (aT,aU) = if ((aU >= aQ))
683- then aT
684- else cX(aT, aP[aU])
681+ let aQ = cX
682+ let aR = size(aQ)
683+ let aS = false
684+ func aT (aU,aV) = if ((aV >= aR))
685+ then aU
686+ else cY(aU, aQ[aV])
685687
686- func aV (aT,aU) = if ((aU >= aQ))
687- then aT
688+ func aW (aU,aV) = if ((aV >= aR))
689+ then aU
688690 else throw("List size exceeds 15")
689691
690- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
692+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
691693 }
692694
693695
694-@Callable(db)
695-func D (aX,bb) = {
696- let bo = bd(aX, bb)
697- $Tuple2([IntegerEntry("D", bo)], bo)
696+@Callable(dc)
697+func D (aY,bc) = {
698+ let bp = be(aY, bc)
699+ $Tuple2([IntegerEntry("D", bp)], bp)
698700 }
699701
700702
701703
702-@Callable(db)
703-func init (ao,aG,dc) = if (!(isDataStorageUntouched(this)))
704+@Callable(dc)
705+func init (ap,aH,dd,de) = if (!(isDataStorageUntouched(this)))
704706 then throw("Already initialized")
705- else {
706- let dd = "s_Multi_USD"
707- let de = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
708- let df = Issue(dd, de, 0, 6, true)
709- let dg = calculateAssetId(df)
710- if (cV(ao))
711- then throw()
707+ else if ((0 >= aH))
708+ then throw("Amp must be must > 0")
709+ else if ((0 >= dd))
710+ then throw("dApp Threshold Coef must be > 0")
712711 else {
713- let dh = [StringEntry(g, ao), IntegerEntry("initial_A", aG), IntegerEntry("future_A", aG), IntegerEntry(m, getIntegerValue(I, "base_fee_flat")), StringEntry(k, toBase58String(dg)), IntegerEntry(l, 0), IntegerEntry(n, 15), BooleanEntry(i, true), df]
714- if (dc)
715- then (dh ++ [BooleanEntry(s, dc), IntegerEntry(t, (ab + (ad * ac)))])
716- else dh
712+ let df = "s_Multi_USD"
713+ let dg = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
714+ let dh = Issue(df, dg, 0, 6, true)
715+ let di = calculateAssetId(dh)
716+ if (cW(ap))
717+ then throw()
718+ else {
719+ let dj = [StringEntry(g, f), StringEntry(h, ap), IntegerEntry("initial_A", aH), IntegerEntry("future_A", aH), IntegerEntry(n, getIntegerValue(J, "base_fee_flat")), StringEntry(l, toBase58String(di)), IntegerEntry(m, 0), IntegerEntry(o, dd), BooleanEntry(j, true), dh]
720+ if (de)
721+ then (dj ++ [BooleanEntry(t, de), IntegerEntry(u, (ac + (ae * ad)))])
722+ else dj
723+ }
717724 }
718- }
719725
720726
721727
722-@Callable(db)
723-func addLiquidity (di,dj) = valueOrElse(at(), {
724- let bb = aG()
725- let aX = aL()
726- let bW = if ((ag == 0))
728+@Callable(dc)
729+func addLiquidity (dk,dl) = valueOrElse(au(), {
730+ let bc = aH()
731+ let aY = aM()
732+ let bX = if ((ah == 0))
727733 then 0
728- else br(aX, bb)
729- let cy = db.payments
730- let dk = size(cy)
731- func dl (dk) = if ((dk > ap))
732- then throw(("payments size > " + toString(ap)))
733- else if ((1 > dk))
734+ else bs(aY, bc)
735+ let cz = dc.payments
736+ let dm = size(cz)
737+ func dn (do) = if ((dm > aq))
738+ then throw(("payments size > " + toString(aq)))
739+ else if ((1 > dm))
734740 then throw("payments size < 1")
735- else if (if ((ag == 0))
736- then (ap != dk)
741+ else if (if ((ah == 0))
742+ then (aq != dm)
737743 else false)
738744 then throw("initial deposit requires all coins")
739745 else {
740- func dm (aN,cN) = if (containsElement(ao, cj(cN.assetId)))
746+ func dp (aO,cO) = if (containsElement(ap, ck(cO.assetId)))
741747 then true
742748 else throw("Invalid asset in payment")
743749
744- let aP = cy
745- let aQ = size(aP)
746- let aR = false
747- func aS (aT,aU) = if ((aU >= aQ))
748- then aT
749- else dm(aT, aP[aU])
750+ let aQ = cz
751+ let aR = size(aQ)
752+ let aS = false
753+ func aT (aU,aV) = if ((aV >= aR))
754+ then aU
755+ else dp(aU, aQ[aV])
750756
751- func aV (aT,aU) = if ((aU >= aQ))
752- then aT
757+ func aW (aU,aV) = if ((aV >= aR))
758+ then aU
753759 else throw("List size exceeds 15")
754760
755- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
761+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
756762 }
757763
758- if (!(dl(dk)))
764+ if (!(dn(dm)))
759765 then throw()
760766 else {
761- let cI = cE()
762- if (cI._1)
763- then (cK(cI._2) ++ cL(db.caller, cy))
767+ let cJ = cF()
768+ if (cJ._1)
769+ then (cL(cJ._2) ++ cM(dc.caller, cz))
764770 else {
765- let dn = size(cy)
766- func cM (aN,aO) = {
767- let do = aN
768- let cP = do._1
769- let av = do._2
770- let dp = do._3
771- if (if ((dn > dp))
772- then (cj(cy[dp].assetId) == aO)
771+ func cN (aO,aP) = {
772+ let dq = aO
773+ let cQ = dq._1
774+ let aw = dq._2
775+ let dr = dq._3
776+ if (if ((dm > dr))
777+ then (ck(cz[dr].assetId) == aP)
773778 else false)
774- then {
775- let dq = cn(cy[dp].amount, cj(cy[dp].assetId))
776- if ((dq == dq))
777- then $Tuple3((cP :+ (aX[av] + cy[dp].amount)), (av + 1), (dp + 1))
778- else throw("Strict value is not equal to itself.")
779- }
780- else $Tuple3((cP :+ aX[av]), (av + 1), dp)
779+ then $Tuple3((cQ :+ (aY[aw] + cz[dr].amount)), (aw + 1), (dr + 1))
780+ else $Tuple3((cQ :+ aY[aw]), (aw + 1), dr)
781781 }
782782
783- let dr = {
784- let aP = ao
785- let aQ = size(aP)
786- let aR = $Tuple3(nil, 0, 0)
787- func aS (aT,aU) = if ((aU >= aQ))
788- then aT
789- else cM(aT, aP[aU])
783+ let ds = {
784+ let aQ = ap
785+ let aR = size(aQ)
786+ let aS = $Tuple3(nil, 0, 0)
787+ func aT (aU,aV) = if ((aV >= aR))
788+ then aU
789+ else cN(aU, aQ[aV])
790790
791- func aV (aT,aU) = if ((aU >= aQ))
792- then aT
791+ func aW (aU,aV) = if ((aV >= aR))
792+ then aU
793793 else throw("List size exceeds 15")
794794
795- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
795+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
796796 }
797- let cP = dr._1
798- let ds = dr._2
799- let dt = dr._3
800- if (((dn - 1) > dt))
797+ let cQ = ds._1
798+ let dt = ds._2
799+ let du = ds._3
800+ if ((dm > du))
801801 then throw("Incorect payments order")
802- else if (cO(cP))
802+ else if (cP(cQ))
803803 then throw()
804804 else {
805- let bX = br(cP, bb)
806- if (az((bX > bW)))
805+ let bY = bs(cQ, bc)
806+ if (aA((bY > bX)))
807807 then throw("D1 > D0")
808808 else {
809- let bT = aB(db.caller)
810- func du (aN,dv) = {
811- let dw = aN
812- let dx = dw._1
813- let dy = dw._2
814- let av = dw._3
815- if ((ag > 0))
809+ let bU = aC(dc.caller)
810+ func dv (aO,dw) = {
811+ let dx = aO
812+ let dy = dx._1
813+ let dz = dx._2
814+ let aw = dx._3
815+ if ((ah > 0))
816816 then {
817- let bU = ((fraction(ai, bT, ah, CEILING) * ap) / (4 * (ap - 1)))
818- let dz = {
819- let dA = fraction(bX, aX[av], bW)
820- let dB = if ((dA > dv))
821- then (dA - dv)
822- else (dv - dA)
823- fraction(bU, dB, ah)
817+ let bV = ((fraction(aj, bU, ai, CEILING) * aq) / (4 * (aq - 1)))
818+ let dA = {
819+ let dB = fraction(bY, aY[aw], bX)
820+ let dC = if ((dB > dw))
821+ then (dB - dw)
822+ else (dw - dB)
823+ fraction(bV, dC, ai)
824824 }
825- let dC = fraction(dz, aj, ah)
826- let dD = (dv - dC)
827- let dE = (dv - dz)
828- let dF = cz(dz, ao[av])
829- if ((dF == dF))
830- then $Tuple3((dx :+ dE), (dy ++ [ScriptTransfer(X, (dz - dC), fromBase58String(ao[av])), ScriptTransfer(S, dC, fromBase58String(ao[av])), IntegerEntry((ao[av] + h), dD)]), (av + 1))
825+ let dD = fraction(dA, ak, ai)
826+ let dE = (dw - dA)
827+ let dF = (dw - dA)
828+ let dG = (dw - aY[aw])
829+ let dH = if ((dG > 0))
830+ then co((dG - dA), ap[aw])
831+ else cA(dA, ap[aw])
832+ if ((dH == dH))
833+ then $Tuple3((dy :+ dF), (dz ++ [ScriptTransfer(Y, (dA - dD), fromBase58String(ap[aw])), ScriptTransfer(T, dD, fromBase58String(ap[aw])), IntegerEntry((ap[aw] + i), dE)]), (aw + 1))
831834 else throw("Strict value is not equal to itself.")
832835 }
833- else $Tuple3((dx :+ dv), (dy :+ IntegerEntry((ao[av] + h), dv)), (av + 1))
836+ else {
837+ let dH = co(dw, ap[aw])
838+ if ((dH == dH))
839+ then $Tuple3((dy :+ dw), (dz :+ IntegerEntry((ap[aw] + i), dw)), (aw + 1))
840+ else throw("Strict value is not equal to itself.")
841+ }
834842 }
835843
836- let dG = {
837- let aP = cP
838- let aQ = size(aP)
839- let aR = $Tuple3(nil, nil, 0)
840- func bm (aT,aU) = if ((aU >= aQ))
841- then aT
842- else du(aT, aP[aU])
844+ let dI = {
845+ let aQ = cQ
846+ let aR = size(aQ)
847+ let aS = $Tuple3(nil, nil, 0)
848+ func bn (aU,aV) = if ((aV >= aR))
849+ then aU
850+ else dv(aU, aQ[aV])
843851
844- func bn (aT,aU) = if ((aU >= aQ))
845- then aT
852+ func bo (aU,aV) = if ((aV >= aR))
853+ then aU
846854 else throw("List size exceeds 15")
847855
848- bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
856+ bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
849857 }
850- let dx = dG._1
851- let dy = dG._2
852- let dH = br(dx, bb)
853- let dI = if ((ag == 0))
854- then bX
855- else fraction(ag, (dH - bW), bW)
856- if (az((dI >= di)))
858+ let dy = dI._1
859+ let dz = dI._2
860+ let dJ = bs(dy, bc)
861+ let dK = if ((ah == 0))
862+ then bY
863+ else fraction(ah, (dJ - bX), bX)
864+ if (aA((dK >= dk)))
857865 then throw("Slippage screwed you")
858- else if (dj)
866+ else if (dl)
859867 then {
860- let dJ = invoke(this, "reissueShare", [dI], nil)
861- if ((dJ == dJ))
868+ let dL = invoke(this, "reissueShare", [dK], nil)
869+ if ((dL == dL))
862870 then {
863- let dq = invoke(W, "lockShareTokens", [toString(this)], [AttachedPayment(af, dI)])
864- if ((dq == dq))
865- then (dy :+ IntegerEntry(l, (ag + dI)))
871+ let dM = invoke(X, "lockShareTokens", [toString(this)], [AttachedPayment(ag, dK)])
872+ if ((dM == dM))
873+ then (dz :+ IntegerEntry(m, (ah + dK)))
866874 else throw("Strict value is not equal to itself.")
867875 }
868876 else throw("Strict value is not equal to itself.")
869877 }
870- else (dy ++ [Reissue(af, dI, true), ScriptTransfer(db.caller, dI, af), IntegerEntry(l, (ag + dI))])
878+ else (dz ++ [Reissue(ag, dK, true), ScriptTransfer(dc.caller, dK, ag), IntegerEntry(m, (ah + dK))])
871879 }
872880 }
873881 }
874882 }
875883 })
876884
877885
878886
879-@Callable(db)
880-func reissueShare (cp) = valueOrElse(aw(db), [Reissue(af, cp, true)])
887+@Callable(dc)
888+func reissueShare (cq) = valueOrElse(ax(dc), [Reissue(ag, cq, true)])
881889
882890
883891
884-@Callable(db)
885-func getDy (dK,dL,dM,dN) = {
886- let aX = aL()
887- let dO = valueOrErrorMessage(indexOf(ao, dK), "unknown token in")
888- let dP = valueOrErrorMessage(indexOf(ao, dL), "unknown token out")
889- let bv = (aX[dO] + dM)
890- let bI = bs(dO, dP, bv, aX)
891- let ci = ((aX[dP] - bI) - 1)
892- let bT = aB(Address(fromBase58String(dN)))
893- let bU = fraction(fraction(ai, bT, ah, CEILING), ci, ah)
894- $Tuple2(nil, $Tuple2((ci - bU), bU))
892+@Callable(dc)
893+func getDy (dN,dO,dP,dQ) = {
894+ let aY = aM()
895+ let dR = valueOrErrorMessage(indexOf(ap, dN), "unknown token in")
896+ let dS = valueOrErrorMessage(indexOf(ap, dO), "unknown token out")
897+ let bw = (aY[dR] + dP)
898+ let bJ = bt(dR, dS, bw, aY)
899+ let cj = ((aY[dS] - bJ) - 1)
900+ let bU = aC(Address(fromBase58String(dQ)))
901+ let bV = fraction(fraction(aj, bU, ai, CEILING), cj, ai)
902+ $Tuple2(nil, $Tuple2((cj - bV), bV))
895903 }
896904
897905
898906
899-@Callable(db)
900-func exchange (dQ,dR) = valueOrElse(at(), if ((size(db.payments) != 1))
907+@Callable(dc)
908+func exchange (dT,dU) = valueOrElse(au(), if ((size(dc.payments) != 1))
901909 then throw("size(payments) != 1")
902910 else {
903- let cI = cE()
904- if (cI._1)
905- then (cK(cI._2) ++ cL(db.caller, db.payments))
911+ let cJ = cF()
912+ if (cJ._1)
913+ then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
906914 else {
907- let cN = db.payments[0]
908- let dS = cj(cN.assetId)
909- let dT = fromBase58String(dQ)
910- let dM = cN.amount
911- let dO = valueOrErrorMessage(indexOf(ao, dS), "unknown token in")
912- let dP = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
913- let aX = aL()
914- let bv = (aX[dO] + dM)
915- let bI = bs(dO, dP, bv, aX)
916- let dU = ((aX[dP] - bI) - 1)
917- let bT = aB(db.caller)
918- let bU = fraction(dU, fraction(ai, bT, ah, CEILING), ah)
919- let ci = (dU - bU)
920- let dC = fraction(bU, aj, ah)
921- if (az((ci >= dR)))
915+ let cO = dc.payments[0]
916+ let dV = ck(cO.assetId)
917+ let dW = fromBase58String(dT)
918+ let dP = cO.amount
919+ let dR = valueOrErrorMessage(indexOf(ap, dV), "unknown token in")
920+ let dS = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
921+ let aY = aM()
922+ let bw = (aY[dR] + dP)
923+ let bJ = bt(dR, dS, bw, aY)
924+ let dX = ((aY[dS] - bJ) - 1)
925+ let bU = aC(dc.caller)
926+ let bV = fraction(dX, fraction(aj, bU, ai, CEILING), ai)
927+ let cj = (dX - bV)
928+ let dD = fraction(bV, ak, ai)
929+ if (aA((cj >= dU)))
922930 then throw("Exchange resulted in fewer coins than expected")
923931 else {
924- func dV (aN,dW) = {
925- let dX = aN
926- let cP = dX._1
927- let av = dX._2
928- if ((av == dO))
929- then $Tuple2((cP :+ (dW + dM)), (av + 1))
930- else if ((av == dP))
931- then $Tuple2((cP :+ (dW - dU)), (av + 1))
932- else $Tuple2((cP :+ dW), (av + 1))
932+ func dY (aO,dZ) = {
933+ let ea = aO
934+ let cQ = ea._1
935+ let aw = ea._2
936+ if ((aw == dR))
937+ then $Tuple2((cQ :+ (dZ + dP)), (aw + 1))
938+ else if ((aw == dS))
939+ then $Tuple2((cQ :+ (dZ - dX)), (aw + 1))
940+ else $Tuple2((cQ :+ dZ), (aw + 1))
933941 }
934942
935- let dY = {
936- let aP = aX
937- let aQ = size(aP)
938- let aR = $Tuple2(nil, 0)
939- func aS (aT,aU) = if ((aU >= aQ))
940- then aT
941- else dV(aT, aP[aU])
943+ let eb = {
944+ let aQ = aY
945+ let aR = size(aQ)
946+ let aS = $Tuple2(nil, 0)
947+ func aT (aU,aV) = if ((aV >= aR))
948+ then aU
949+ else dY(aU, aQ[aV])
942950
943- func aV (aT,aU) = if ((aU >= aQ))
944- then aT
951+ func aW (aU,aV) = if ((aV >= aR))
952+ then aU
945953 else throw("List size exceeds 15")
946954
947- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
955+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
948956 }
949- let cP = dY._1
950- let av = dY._2
951- if (cO(cP))
957+ let cQ = eb._1
958+ let aw = eb._2
959+ if (cP(cQ))
952960 then throw()
953961 else {
954- let dq = cn(cN.amount, cj(cN.assetId))
955- if ((dq == dq))
962+ let dM = co(cO.amount, ck(cO.assetId))
963+ if ((dM == dM))
956964 then {
957- let dF = cz(dU, dQ)
958- if ((dF == dF))
959- then $Tuple2([IntegerEntry((dS + h), bv), IntegerEntry((dQ + h), (aX[dP] - dU)), ScriptTransfer(db.caller, ci, dT), ScriptTransfer(S, dC, dT), ScriptTransfer(X, (bU - dC), dT)], $Tuple2(ci, dT))
965+ let ec = cA(dX, dT)
966+ if ((ec == ec))
967+ then $Tuple2([IntegerEntry((dV + i), bw), IntegerEntry((dT + i), (aY[dS] - dX)), ScriptTransfer(dc.caller, cj, dW), ScriptTransfer(T, dD, dW), ScriptTransfer(Y, (bV - dD), dW)], [cj, dW])
960968 else throw("Strict value is not equal to itself.")
961969 }
962970 else throw("Strict value is not equal to itself.")
963971 }
964972 }
965973 }
966974 })
967975
968976
969977
970-@Callable(db)
971-func withdraw (dZ,ea) = valueOrElse(at(), if ((size(db.payments) != 1))
978+@Callable(dc)
979+func withdraw (ed) = valueOrElse(au(), if ((size(dc.payments) != 1))
972980 then throw("size(payments) != 1")
973981 else {
974- let cI = cE()
975- if (cI._1)
976- then (cK(cI._2) ++ cL(db.caller, db.payments))
982+ let ee = dc.payments[0].amount
983+ let ef = dc.payments[0].assetId
984+ if ((ag != ef))
985+ then throw("unknown payment token")
977986 else {
978- let cN = db.payments[0]
979- let dS = cN.assetId
980- if ((dS != af))
981- then throw("unknown token")
987+ let cJ = cF()
988+ if (cJ._1)
989+ then (cL(cJ._2) ++ cM(dc.originCaller, dc.payments))
982990 else {
983- let eb = cN.amount
984- let bV = ag
985- let ec = if ((ea > 0))
986- then invoke(W, "withdrawShareTokens", [toString(this), ea], nil)
987- else 0
988- if ((ec == ec))
989- then {
990- let ed = (eb + ea)
991- func du (aN,ee) = {
992- let ef = aN
993- let dy = ef._1
994- let av = ef._2
995- let eg = fraction(ee, ed, bV)
996- if (az((eg >= dZ[av])))
997- then throw("Withdrawal resulted in fewer coins than expected")
998- else {
999- let dF = cz(eg, ao[av])
1000- if ((dF == dF))
1001- then $Tuple2((dy ++ [IntegerEntry((ao[av] + h), (ee - eg)), ScriptTransfer(db.caller, eg, fromBase58String(ao[av]))]), (av + 1))
1002- else throw("Strict value is not equal to itself.")
1003- }
991+ func dv (aO,eg) = {
992+ let eh = aO
993+ let dz = eh._1
994+ let aw = eh._2
995+ let ei = fraction(eg, ee, ah)
996+ if (aA((ei >= ed[aw])))
997+ then throw("Withdrawal resulted in fewer coins than expected")
998+ else {
999+ let ec = cA(ei, ap[aw])
1000+ if ((ec == ec))
1001+ then $Tuple2((dz ++ [IntegerEntry((ap[aw] + i), (eg - ei)), ScriptTransfer(dc.originCaller, ei, fromBase58String(ap[aw]))]), (aw + 1))
1002+ else throw("Strict value is not equal to itself.")
10041003 }
1004+ }
10051005
1006- let eh = {
1007- let aP = aL()
1008- let aQ = size(aP)
1009- let aR = $Tuple2(nil, 0)
1010- func aS (aT,aU) = if ((aU >= aQ))
1011- then aT
1012- else du(aT, aP[aU])
1006+ let ej = {
1007+ let aQ = aM()
1008+ let aR = size(aQ)
1009+ let aS = $Tuple2(nil, 0)
1010+ func aT (aU,aV) = if ((aV >= aR))
1011+ then aU
1012+ else dv(aU, aQ[aV])
10131013
1014- func aV (aT,aU) = if ((aU >= aQ))
1015- then aT
1016- else throw("List size exceeds 15")
1014+ func aW (aU,aV) = if ((aV >= aR))
1015+ then aU
1016+ else throw("List size exceeds 15")
10171017
1018- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1019- }
1020- let dy = eh._1
1021- let av = eh._2
1022- (dy ++ [Burn(af, ed), IntegerEntry(l, (ag - ed))])
1023- }
1024- else throw("Strict value is not equal to itself.")
1018+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1019+ }
1020+ let dz = ej._1
1021+ let aw = ej._2
1022+ (dz ++ [Burn(ag, ee), IntegerEntry(m, (ah - ee))])
10251023 }
10261024 }
10271025 })
10281026
10291027
10301028
1031-@Callable(db)
1032-func calcWithdrawOneCoin (ei,dQ,ej) = {
1033- let av = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
1034- $Tuple2(nil, bQ(aL(), ei, av, Address(fromBase58String(ej)))._1)
1029+@Callable(dc)
1030+func withdrawWithUnlock (ed,ek) = valueOrElse(au(), if ((0 >= ek))
1031+ then throw("Unlock amount must be positive")
1032+ else {
1033+ let cJ = cF()
1034+ if (cJ._1)
1035+ then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
1036+ else {
1037+ let ee = if ((size(dc.payments) > 0))
1038+ then if ((size(dc.payments) != 1))
1039+ then throw("size(payments) != 1")
1040+ else {
1041+ let ef = dc.payments[0].assetId
1042+ if ((ag != ef))
1043+ then throw("unknown payment token")
1044+ else dc.payments[0].amount
1045+ }
1046+ else 0
1047+ let el = invoke(X, "withdrawShareTokens", [toString(this), ek], nil)
1048+ if ((el == el))
1049+ then {
1050+ let em = (ee + ek)
1051+ let dH = invoke(this, "withdraw", [ed], [AttachedPayment(ag, em)])
1052+ if ((dH == dH))
1053+ then nil
1054+ else throw("Strict value is not equal to itself.")
1055+ }
1056+ else throw("Strict value is not equal to itself.")
1057+ }
1058+ })
1059+
1060+
1061+
1062+@Callable(dc)
1063+func calcWithdrawOneCoin (en,dT,eo) = {
1064+ let aw = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
1065+ $Tuple2(nil, bR(aM(), en, aw, Address(fromBase58String(eo)))._1)
10351066 }
10361067
10371068
10381069
1039-@Callable(db)
1040-func withdrawOneCoin (dQ,ek,ea) = valueOrElse(at(), if ((size(db.payments) != 1))
1070+@Callable(dc)
1071+func withdrawOneCoin (dT,ep) = valueOrElse(au(), if ((size(dc.payments) != 1))
10411072 then throw("size(payments) != 1")
10421073 else {
1043- let cI = cE()
1044- if (cI._1)
1045- then (cK(cI._2) ++ cL(db.caller, db.payments))
1074+ let cJ = cF()
1075+ if (cJ._1)
1076+ then (cL(cJ._2) ++ cM(dc.originCaller, dc.payments))
10461077 else {
1047- let cN = db.payments[0]
1048- let dS = cN.assetId
1049- if ((dS != af))
1078+ let ee = dc.payments[0].amount
1079+ let ef = dc.payments[0].assetId
1080+ if ((ef != ag))
10501081 then throw("unknown token")
10511082 else {
1052- let el = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
1053- let em = cN.amount
1054- let ec = if ((ea > 0))
1055- then invoke(W, "withdrawShareTokens", [toString(this), ea], nil)
1056- else 0
1057- if ((ec == ec))
1058- then {
1059- let ed = (em + ea)
1060- let aX = aL()
1061- let en = bQ(aX, ed, el, db.caller)
1062- let ci = en._1
1063- let eo = en._2
1064- if (az((ci >= ek)))
1065- then throw("Not enough coins removed")
1083+ let eq = valueOrErrorMessage(indexOf(ap, dT), "unknown token out")
1084+ let aY = aM()
1085+ let er = bR(aY, ee, eq, dc.originCaller)
1086+ let cj = er._1
1087+ let es = er._2
1088+ if (aA((cj >= ep)))
1089+ then throw("Not enough coins removed")
1090+ else {
1091+ let dD = fraction(es, ak, ai)
1092+ let et = (cj + es)
1093+ func dY (aO,dZ) = {
1094+ let eu = aO
1095+ let cQ = eu._1
1096+ let aw = eu._2
1097+ if ((aw == eq))
1098+ then $Tuple2((cQ :+ (dZ - et)), (aw + 1))
1099+ else $Tuple2((cQ :+ dZ), (aw + 1))
1100+ }
1101+
1102+ let ev = {
1103+ let aQ = aY
1104+ let aR = size(aQ)
1105+ let aS = $Tuple2(nil, 0)
1106+ func aT (aU,aV) = if ((aV >= aR))
1107+ then aU
1108+ else dY(aU, aQ[aV])
1109+
1110+ func aW (aU,aV) = if ((aV >= aR))
1111+ then aU
1112+ else throw("List size exceeds 15")
1113+
1114+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1115+ }
1116+ let cQ = ev._1
1117+ let ew = ev._2
1118+ if (cP(cQ))
1119+ then throw()
10661120 else {
1067- let dC = fraction(eo, aj, ah)
1068- let ep = (ci + eo)
1069- func dV (aN,dW) = {
1070- let eq = aN
1071- let cP = eq._1
1072- let av = eq._2
1073- if ((av == el))
1074- then $Tuple2((cP :+ (dW - ep)), (av + 1))
1075- else $Tuple2((cP :+ dW), (av + 1))
1076- }
1077-
1078- let er = {
1079- let aP = aX
1080- let aQ = size(aP)
1081- let aR = $Tuple2(nil, 0)
1082- func aS (aT,aU) = if ((aU >= aQ))
1083- then aT
1084- else dV(aT, aP[aU])
1085-
1086- func aV (aT,aU) = if ((aU >= aQ))
1087- then aT
1088- else throw("List size exceeds 15")
1089-
1090- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1091- }
1092- let cP = er._1
1093- let av = er._2
1094- if (cO(cP))
1095- then throw()
1096- else {
1097- let dF = cz(ep, dQ)
1098- if ((dF == dF))
1099- then [ScriptTransfer(db.caller, ci, fromBase58String(dQ)), IntegerEntry((ao[av] + h), (aX[av] - ep)), Burn(af, ed), ScriptTransfer(S, dC, fromBase58String(dQ)), ScriptTransfer(X, (eo - dC), fromBase58String(dQ)), IntegerEntry(l, (ag - ed))]
1100- else throw("Strict value is not equal to itself.")
1101- }
1121+ let ec = cA(et, dT)
1122+ if ((ec == ec))
1123+ then [ScriptTransfer(dc.originCaller, cj, fromBase58String(dT)), IntegerEntry((ap[eq] + i), (aY[eq] - et)), Burn(ag, ee), ScriptTransfer(T, dD, fromBase58String(dT)), ScriptTransfer(Y, (es - dD), fromBase58String(dT)), IntegerEntry(m, (ah - ee))]
1124+ else throw("Strict value is not equal to itself.")
11021125 }
11031126 }
1104- else throw("Strict value is not equal to itself.")
11051127 }
11061128 }
11071129 })
11081130
11091131
11101132
1111-@Callable(db)
1112-func A () = $Tuple2(nil, aG())
1133+@Callable(dc)
1134+func withdrawOneCoinWithUnlock (dT,ep,ek) = valueOrElse(au(), if ((0 >= ek))
1135+ then throw("Unlock amount must be positive")
1136+ else {
1137+ let cJ = cF()
1138+ if (cJ._1)
1139+ then (cL(cJ._2) ++ cM(dc.caller, dc.payments))
1140+ else {
1141+ let ee = if ((size(dc.payments) > 0))
1142+ then if ((size(dc.payments) != 1))
1143+ then throw("size(payments) != 1")
1144+ else {
1145+ let ef = dc.payments[0].assetId
1146+ if ((ag != ef))
1147+ then throw("unknown payment token")
1148+ else dc.payments[0].amount
1149+ }
1150+ else 0
1151+ let el = invoke(X, "withdrawShareTokens", [toString(this), ek], nil)
1152+ if ((el == el))
1153+ then {
1154+ let em = (ee + ek)
1155+ let dH = invoke(this, "withdrawOneCoin", [dT, ep], [AttachedPayment(ag, em)])
1156+ if ((dH == dH))
1157+ then nil
1158+ else throw("Strict value is not equal to itself.")
1159+ }
1160+ else throw("Strict value is not equal to itself.")
1161+ }
1162+ })
11131163
11141164
11151165
1116-@Callable(db)
1166+@Callable(dc)
1167+func A () = $Tuple2(nil, aH())
1168+
1169+
1170+
1171+@Callable(dc)
11171172 func getVirtualPrice () = {
1118- let bo = ba(aL(), aG())
1119- $Tuple2(nil, fraction(bo, b, ag))
1173+ let bp = bb(aM(), aH())
1174+ $Tuple2(nil, fraction(bp, a, ah))
11201175 }
11211176
11221177
11231178
1124-@Callable(db)
1125-func calcTokenAmount (es,et) = {
1126- let bb = aG()
1127- let eu = aL()
1128- let bW = br(eu, bb)
1129- func ev (aN,ee) = {
1130- let ew = aN
1131- let cP = ew._1
1132- let av = ew._2
1133- let dv = (ee + (if (et)
1134- then es[av]
1135- else -(es[av])))
1136- $Tuple2((cP :+ dv), (av + 1))
1179+@Callable(dc)
1180+func calcTokenAmount (ex,ey) = {
1181+ let bc = aH()
1182+ let ez = aM()
1183+ let bX = bs(ez, bc)
1184+ func eA (aO,eg) = {
1185+ let eB = aO
1186+ let cQ = eB._1
1187+ let aw = eB._2
1188+ let dw = (eg + (if (ey)
1189+ then ex[aw]
1190+ else -(ex[aw])))
1191+ $Tuple2((cQ :+ dw), (aw + 1))
11371192 }
11381193
1139- let cP = ( let aP = eu
1140- let aQ = size(aP)
1141- let aR = $Tuple2(nil, 0)
1142- func aS (aT,aU) = if ((aU >= aQ))
1143- then aT
1144- else ev(aT, aP[aU])
1194+ let cQ = ( let aQ = ez
1195+ let aR = size(aQ)
1196+ let aS = $Tuple2(nil, 0)
1197+ func aT (aU,aV) = if ((aV >= aR))
1198+ then aU
1199+ else eA(aU, aQ[aV])
11451200
1146- func aV (aT,aU) = if ((aU >= aQ))
1147- then aT
1201+ func aW (aU,aV) = if ((aV >= aR))
1202+ then aU
11481203 else throw("List size exceeds 15")
11491204
1150- aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1151- let bX = br(cP, bb)
1152- let ex = if (et)
1153- then (bX - bW)
1154- else (bW - bX)
1155- $Tuple2(nil, fraction(ex, ag, bW))
1205+ aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1206+ let bY = bs(cQ, bc)
1207+ let eC = if (ey)
1208+ then (bY - bX)
1209+ else (bX - bY)
1210+ $Tuple2(nil, fraction(eC, ah, bX))
11561211 }
11571212
11581213
11591214
1160-@Callable(db)
1161-func rampA (ey,ez) = valueOrElse(at(), valueOrElse(au(db), if (az((ay >= (am + f))))
1215+@Callable(dc)
1216+func rampA (eD,eE) = valueOrElse(au(), valueOrElse(av(dc), if (aA((az >= (an + e))))
11621217 then throw("too often")
1163- else if (az((ez >= (ay + f))))
1218+ else if (aA((eE >= (az + e))))
11641219 then throw("insufficient time")
11651220 else {
1166- let eA = aG()
1167- if (az(if ((ey > 0))
1168- then (c > ey)
1221+ let eF = aH()
1222+ if (aA(if ((eD > 0))
1223+ then (b > eD)
11691224 else false))
11701225 then throw("out of base range")
1171- else if (az(if (if ((ey >= eA))
1172- then ((eA * d) >= ey)
1226+ else if (aA(if (if ((eD >= eF))
1227+ then ((eF * c) >= eD)
11731228 else false)
11741229 then true
1175- else if ((eA > ey))
1176- then ((ey * d) >= eA)
1230+ else if ((eF > eD))
1231+ then ((eD * c) >= eF)
11771232 else false))
11781233 then throw("out of range")
1179- else [IntegerEntry("initial_A", eA), IntegerEntry("future_A", ey), IntegerEntry("initial_A_time", ay), IntegerEntry("future_A_time", ez)]
1234+ else [IntegerEntry("initial_A", eF), IntegerEntry("future_A", eD), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", eE)]
11801235 }))
11811236
11821237
11831238
1184-@Callable(db)
1185-func stopRampA () = valueOrElse(at(), valueOrElse(au(db), {
1186- let eB = aG()
1187-[IntegerEntry("initial_A", eB), IntegerEntry("future_A", eB), IntegerEntry("initial_A_time", ay), IntegerEntry("future_A_time", ay)]
1239+@Callable(dc)
1240+func stopRampA () = valueOrElse(au(), valueOrElse(av(dc), {
1241+ let eG = aH()
1242+[IntegerEntry("initial_A", eG), IntegerEntry("future_A", eG), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", az)]
11881243 }))
11891244
11901245
11911246
1192-@Callable(db)
1193-func shutdown () = valueOrElse(au(db), if (!(ae))
1194- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, j), "the cause wasn't specified")))
1195- else aq("Paused by admin"))
1247+@Callable(dc)
1248+func shutdown () = valueOrElse(av(dc), if (!(af))
1249+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
1250+ else ar("Paused by admin"))
11961251
11971252
11981253
1199-@Callable(db)
1200-func activate () = valueOrElse(au(db), if (ae)
1201- then as()
1202- else [BooleanEntry(i, true), DeleteEntry(j)])
1254+@Callable(dc)
1255+func activate () = valueOrElse(av(dc), if (af)
1256+ then at()
1257+ else [BooleanEntry(j, true), DeleteEntry(k)])
12031258
12041259
12051260
1206-@Callable(db)
1207-func keepLimitForFirstHarvest (eC) = valueOrElse(at(), valueOrElse(au(db), [IntegerEntry(u, eC)]))
1261+@Callable(dc)
1262+func keepLimitForFirstHarvest (eH) = valueOrElse(au(), valueOrElse(av(dc), [IntegerEntry(v, eH)]))
12081263
12091264
1210-@Verifier(eD)
1211-func eE () = {
1212- let eF = {
1213- let eG = if (sigVerify(eD.bodyBytes, eD.proofs[0], O))
1265+@Verifier(eI)
1266+func eJ () = {
1267+ let eK = {
1268+ let eL = if (sigVerify(eI.bodyBytes, eI.proofs[0], P))
12141269 then 1
12151270 else 0
1216- let eH = if (sigVerify(eD.bodyBytes, eD.proofs[1], P))
1271+ let eM = if (sigVerify(eI.bodyBytes, eI.proofs[1], Q))
12171272 then 1
12181273 else 0
1219- let eI = if (sigVerify(eD.bodyBytes, eD.proofs[2], Q))
1274+ let eN = if (sigVerify(eI.bodyBytes, eI.proofs[2], R))
12201275 then 1
12211276 else 0
1222- (((eG + eH) + eI) >= 2)
1277+ (((eL + eM) + eN) >= 2)
12231278 }
1224- let L = eD
1225- if ($isInstanceOf(L, "InvokeScriptTransaction"))
1279+ let M = eI
1280+ if ($isInstanceOf(M, "InvokeScriptTransaction"))
12261281 then {
1227- let eJ = L
1228- let eK = if ((eJ.dApp == this))
1229- then (eJ.function == "takeIntoAccountExtraFunds")
1282+ let dH = M
1283+ let eO = if ((dH.dApp == this))
1284+ then (dH.function == "takeIntoAccountExtraFunds")
12301285 else false
1231- let eL = if (if (if (sigVerify(eD.bodyBytes, eD.proofs[0], O))
1286+ let eP = if (if (if (sigVerify(eI.bodyBytes, eI.proofs[0], P))
12321287 then true
1233- else sigVerify(eD.bodyBytes, eD.proofs[0], P))
1288+ else sigVerify(eI.bodyBytes, eI.proofs[0], Q))
12341289 then true
1235- else sigVerify(eD.bodyBytes, eD.proofs[0], Q))
1290+ else sigVerify(eI.bodyBytes, eI.proofs[0], R))
12361291 then true
1237- else sigVerify(eD.bodyBytes, eD.proofs[0], R)
1238- if (if (eK)
1239- then eL
1292+ else sigVerify(eI.bodyBytes, eI.proofs[0], S)
1293+ if (if (eO)
1294+ then eP
12401295 else false)
12411296 then true
1242- else eF
1297+ else eK
12431298 }
1244- else eF
1299+ else eK
12451300 }
12461301

github/deemru/w8io/169f3d6 
488.29 ms