tx · A4M2XwRuqXLP7pp7kJDKQimfC84j324vAv5Ebut3wLEr

3MsiDDiKMkC62yDJeMdU4LgPFdqb5WvvBF9:  -0.01000000 Waves

2019.10.11 19:51 [715477] smart account 3MsiDDiKMkC62yDJeMdU4LgPFdqb5WvvBF9 > SELF 0.00000000 Waves

{ "type": 13, "id": "A4M2XwRuqXLP7pp7kJDKQimfC84j324vAv5Ebut3wLEr", "fee": 1000000, "feeAssetId": null, "timestamp": 1570812708999, "version": 1, "sender": "3MsiDDiKMkC62yDJeMdU4LgPFdqb5WvvBF9", "senderPublicKey": "ByZgTAFRaFK8NtXbScgUwDbNSkYZnZ8ERnMD7fLpfGzY", "proofs": [ "4GkvsK7mTCsLU3an97SCxniigNGNAvkYRsucbtuHsyvuH4soVEip1HVDFiYZzpFuuFkDAPjyxVhTpm5Sd8mBfz48" ], "script": "base64:AAIDAAAAAAAAAD8IARIDCgEIEgMKAQgSBQoDAQEIEgQKAggBEgQKAggIEgQKAggBEgMKAQgSAwoBCBIECgIICBIDCgEIEgMKAQgAAAAlAAAAAANkYXkAAAAAAAAABaAAAAAABVdBVkVTBQAAAAR1bml0AAAAAAR3QlRDAQAAACBs+mr/xe2qjAt/tSqT0qIML4KC23R6BIxT+/0TH3Og/wAAAAAEd0VVUgEAAAAg7BZhBF97kSFBBjs38+fX1Pjz08YOqoCX85C/0PoVupkAAAAABHdVU0QBAAAAIN0cvQHwz3UFMHgHsqi2OJjRRd1cH7ozWuNAb/pmWXD9AAAAAAlzdGF0ZU9wZW4CAAAABk9wZW5lZAAAAAAOc3RhdGVTdWdnZXN0ZWQCAAAACVN1Z2dlc3RlZAAAAAALc3RhdGVDYW5jZWwCAAAACENhbmNlbGVkAAAAAA9zdGF0ZUluUHJvZ3Jlc3MCAAAACkluUHJvZ3Jlc3MAAAAAEXN0YXRlV2FpdDRDb25maXJtAgAAABNXYWl0Rm9yQ29uZmlybWF0aW9uAAAAAA1zdGF0ZUNvbXBsZXRlAgAAAAlDb21wbGV0ZWQAAAAADHN0YXRlRGlzcHV0ZQIAAAAHRGlzcHV0ZQAAAAAUc3RhdGVEaXNwdXRlUmVzb2x2ZWQCAAAAD0Rpc3B1dGVSZXNvbHZlZAAAAAAGY2xpZW50AgAAAANDTVIAAAAACmZyZWVsYW5jZXICAAAAAkZMAAAAAAthbWJhc3NhZG9yMQEAAAABAAAAAAALYW1iYXNzYWRvcjIBAAAAAQAAAAAAC2FtYmFzc2Fkb3IzAQAAAAEAAAAAAAthbWJhc3NhZG9yNAEAAAABAAAAAAALYW1iYXNzYWRvcjUBAAAAAQABAAAAEEF1Y3Rpb25JZERhdGFLZXkAAAABAAAACWF1Y3Rpb25JZAkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADF9BdWN0aW9uRGF0YQEAAAAGZ2V0SW50AAAAAQAAAANrZXkEAAAAEHZhbHVlSm9ic09uR29pbmcJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5BAAAAAckbWF0Y2gwBQAAABB2YWx1ZUpvYnNPbkdvaW5nAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAEUFzc2V0TmFtZVRvQmFzZTU4AAAAAQAAABBhdWN0aW9uQXNzZXROYW1lAwkAAAAAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAVXQVZFUwUAAAAFV0FWRVMDCQAAAAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAAA0JUQwUAAAAEd0JUQwMJAAAAAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAADRVVSBQAAAAR3RVVSAwkAAAAAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAANVU0QFAAAABHdVU0QJAAACAAAAAQIAAAASSW5jb3JyZWN0IEFzc2V0IElkAQAAAAl0aW1lQ2hlY2sAAAADAAAAC2N1cnJlbnRUaW1lAAAACXN0YXJ0VGltZQAAAA5leHBpcmF0aW9uVGltZQkAAGYAAAACCQAAZQAAAAIFAAAAC2N1cnJlbnRUaW1lBQAAAAlzdGFydFRpbWUFAAAADmV4cGlyYXRpb25UaW1lAQAAAA5iaWRBbW91bnRDaGVjawAAAAIAAAAGYW1vdW50AAAADGF1Y3Rpb25QcmljZQMJAABmAAAAAgUAAAAGYW1vdW50BQAAAAxhdWN0aW9uUHJpY2UJAAACAAAAAQIAAAAzQmlkIGFtb3VudCBtdXN0IGJlIGxvd2VyIG9yIGVxdWFsIHRoYW4gYXVjdGlvblByaWNlBQAAAAZhbW91bnQBAAAAFmluY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACAAAADHBtdEFzc2V0TmFtZQAAAAxhdWN0aW9uUHJpY2UEAAAAD2tleUZyZWV6ZWRGdW5kcwkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAADHBtdEFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQEAAAAFWN1cnJlbnRGcmVlemVkQmFsYW5jZQQAAAAHJG1hdGNoMAUAAAAPa2V5RnJlZXplZEZ1bmRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAJAABkAAAAAgUAAAAVY3VycmVudEZyZWV6ZWRCYWxhbmNlBQAAAAxhdWN0aW9uUHJpY2UBAAAAFmRlY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACAAAADHBtdEFzc2V0TmFtZQAAAAxhdWN0aW9uUHJpY2UEAAAAD2tleUZyZWV6ZWRGdW5kcwkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAADHBtdEFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQEAAAAFWN1cnJlbnRGcmVlemVkQmFsYW5jZQQAAAAHJG1hdGNoMAUAAAAPa2V5RnJlZXplZEZ1bmRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAAWEJAABlAAAAAgUAAAAVY3VycmVudEZyZWV6ZWRCYWxhbmNlBQAAAAxhdWN0aW9uUHJpY2UDCQAAZwAAAAIFAAAAAWEAAAAAAAAAAAAFAAAAAWEJAAACAAAAAQIAAAAmRnJlZXplZCBhbW91bnQgY291bGRuJ3QgYmUgbGVzcyB0aGFuIDABAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQAAAABAAAACWNhbGxlclB1YgQAAAAWZnJlZWxhbmNlcklzUmVnaXN0ZXJlZAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWNhbGxlclB1YgIAAAALX0ZyZWVsYW5jZXIEAAAAByRtYXRjaDAFAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAAJY2FsbGVyUHViCQAAAgAAAAECAAAAI09ubHkgcmVnaXN0ZXJlZCB1c2VycyBjYW4gbWFrZSBiZXRzAQAAABdjcmVhdGVBdWN0aW9uUHJpY2VDaGVjawAAAAEAAAAJcG10QW1vdW50AwkAAGYAAAACBQAAAAlwbXRBbW91bnQAAAAAAAAAAAAFAAAACXBtdEFtb3VudAkAAAIAAAABAgAAABxBbW91bnQgbXVzdCBiZSBoaWdoZXIgdGhlbiAwAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABAAAACWF1Y3Rpb25JZAQAAAAKdmFsdWVTdGF0ZQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBAAAAAckbWF0Y2gwBQAAAAp2YWx1ZVN0YXRlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAbQXVjdGlvbiBTdGF0ZSB3YXMgbm90IGZvdW5kAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQAAAAlhdWN0aW9uSWQEAAAAC3ZhbHVlQ2xpZW50CQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA5fQXVjdGlvbkNsaWVudAQAAAAJY2xpZW50UHViBAAAAAckbWF0Y2gwBQAAAAt2YWx1ZUNsaWVudAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAHEF1Y3Rpb24gQ2xpZW50IHdhcyBub3QgZm91bmQJAAJZAAAAAQUAAAAJY2xpZW50UHViAQAAABNnZXRBdWN0aW9uU3RhcnRUaW1lAAAAAQAAAAlhdWN0aW9uSWQEAAAAEXZhbHVlQXVjdGlvblN0YXJ0CQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA1fQXVjdGlvblN0YXJ0BAAAAAckbWF0Y2gwBQAAABF2YWx1ZUF1Y3Rpb25TdGFydAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAIEF1Y3Rpb24gU3RhcnQgdGltZSB3YXMgbm90IGZvdW5kAQAAABZnZXRBdWN0aW9uRHVyYXRpb25UaW1lAAAAAQAAAAlhdWN0aW9uSWQEAAAAFHZhbHVlYXVjdGlvbkR1cmF0aW9uCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfQXVjdGlvbkR1cmF0aW9uBAAAAAckbWF0Y2gwBQAAABR2YWx1ZWF1Y3Rpb25EdXJhdGlvbgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAI0F1Y3Rpb24gZHVyYXRpb24gdGltZSB3YXMgbm90IGZvdW5kAQAAABxnZXRBdWN0aW9uSm9iUGVyZm9ybWFuY2VUaW1lAAAAAQAAAAlhdWN0aW9uSWQEAAAAF3ZhbHVlQmxvY2tzRm9yRXhlY3V0aW9uCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA9fSm9iUGVyZm9ybWFuY2UEAAAAByRtYXRjaDAFAAAAF3ZhbHVlQmxvY2tzRm9yRXhlY3V0aW9uAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAqQXVjdGlvbiBqb2IgcGVyZm9ybWFuY2UgdGltZSB3YXMgbm90IGZvdW5kAQAAABNnZXRBdWN0aW9uQXNzZXROYW1lAAAAAQAAAAlhdWN0aW9uSWQEAAAADnZhbHVlQXNzZXROYW1lCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAApfQXNzZXROYW1lBAAAAAckbWF0Y2gwBQAAAA52YWx1ZUFzc2V0TmFtZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAIEF1Y3Rpb24gYXNzZXQgbmFtZSB3YXMgbm90IGZvdW5kAQAAAA9nZXRBdWN0aW9uUHJpY2UAAAABAAAACWF1Y3Rpb25JZAQAAAAKdmFsdWVQcmljZQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1ByaWNlBAAAAAckbWF0Y2gwBQAAAAp2YWx1ZVByaWNlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAbQXVjdGlvbiBwcmljZSB3YXMgbm90IGZvdW5kAQAAABdnZXRBdWN0aW9uRnJlZWxhbmNlclB1YgAAAAEAAAAJYXVjdGlvbklkBAAAAAt2YWx1ZUNsaWVudAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAQX0hpcmVkRnJlZWxhbmNlcgQAAAABYQQAAAAHJG1hdGNo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CURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA1fQXVjdGlvblN0YXJ0BQAAAAxhdWN0aW9uU3RhcnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfQXVjdGlvbkR1cmF0aW9uBQAAABVhdWN0aW9uRHVyYXRpb25CbG9ja3MJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA9fSm9iUGVyZm9ybWFuY2UFAAAAEmJsb2Nrc0ZvckV4ZWN1dGlvbgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAACl9Bc3NldE5hbWUFAAAADHBtdEFzc2V0TmFtZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9QcmljZQUAAAAMYXVjdGlvblByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADHBtdEFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQFAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADWF1Y3Rpb25DbGllbnQCAAAADF9Kb2JzQ3JlYXRlZAkAAGQAAAACBQAAAAtqb2JzQ3JlYXRlZAAAAAAAAAAAAQUAAAADbmlsAAAAAWkBAAAAB21ha2VCaWQAAAACAAAACWF1Y3Rpb25JZAAAAAZhbW91bnQEAAAACWNhbGxlclB1YgkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAB2JldFRpbWUFAAAABmhlaWdodAQAAAAMYXVjdGlvblN0YXRlCQEAAAAPZ2V0QXVjdGlvblN0YXRlAAAAAQUAAAAJYXVjdGlvbklkBAAAAA1hdWN0aW9uQ2xpZW50CQEAAAATZ2V0QXVjdGlvbkNsaWVudFB1YgAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblN0YXJ0CQEAAAATZ2V0QXVjdGlvblN0YXJ0VGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAAWZ2V0QXVjdGlvbkR1cmF0aW9uVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgkBAAAAHGdldEF1Y3Rpb25Kb2JQZXJmb3JtYW5jZVRpbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAQAAABNnZXRBdWN0aW9uQXNzZXROYW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA9nZXRBdWN0aW9uUHJpY2UAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldElkNTgJAQAAABFBc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAAEGF1Y3Rpb25Bc3NldE5hbWUEAAAADW5ld0ZyZWVsYW5jZXIJAQAAABZmcmVlbGFuY2VySXNSZWdpc3RlcmVkAAAAAQUAAAAJY2FsbGVyUHViBAAAAA5kQXBwQ29tbWlzc2lvbgkAAGkAAAACCQAAaAAAAAIFAAAADGF1Y3Rpb25QcmljZQAAAAAAAAAAAwAAAAAAAAAAZAQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAMYXVjdGlvblByaWNlBAAAAAliaWRBbW91bnQJAQAAAA5iaWRBbW91bnRDaGVjawAAAAIFAAAABmFtb3VudAUAAAAMYXVjdGlvblByaWNlBAAAABFhdWN0aW9uVGltZWlzT3ZlcgkBAAAACXRpbWVDaGVjawAAAAMFAAAAB2JldFRpbWUFAAAADGF1Y3Rpb25TdGFydAUAAAAPYXVjdGlvbkR1cmF0aW9uAwUAAAARYXVjdGlvblRpbWVpc092ZXIDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAJc3RhdGVPcGVuCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAALc3RhdGVDYW5jZWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQFAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAANYXVjdGlvbkNsaWVudAkAAGUAAAACBQAAAAxhdWN0aW9uUHJpY2UFAAAADmRBcHBDb21taXNzaW9uBQAAABBhdWN0aW9uQXNzZXRJZDU4BQAAAANuaWwDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAOc3RhdGVTdWdnZXN0ZWQEAAAAE2F1Y3Rpb25Mb3dlc3RCaWRkZXIEAAAAEXZhbHVlTG93ZXN0QmlkZGVyCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfTG93ZXN0QmlkZGVyUHViBAAAAAckbWF0Y2gwBQAAABF2YWx1ZUxvd2VzdEJpZGRlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAI0F1Y3Rpb24gbG93ZXN0IGJpZGRlciB3YXMgbm90IGZvdW5kBAAAAA9uZXdBdWN0aW9uUHJpY2UEAAAAFHZhbHVlTmV3QXVjdGlvblByaWNlCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABV9CaWRfBQAAABNhdWN0aW9uTG93ZXN0QmlkZGVyBAAAAAckbWF0Y2gwBQAAABR2YWx1ZU5ld0F1Y3Rpb25QcmljZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAIEF1Y3Rpb24gbG93ZXN0IGJpZCB3YXMgbm90IGZvdW5kBAAAABBhbW91bnREaWZmZXJlbmNlCQAAZQAAAAIJAABlAAAAAgUAAAAMYXVjdGlvblByaWNlBQAAAA9uZXdBdWN0aW9uUHJpY2UFAAAADmRBcHBDb21taXNzaW9uCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAAPc3RhdGVJblByb2dyZXNzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAQX0hpcmVkRnJlZWxhbmNlcgUAAAATYXVjdGlvbkxvd2VzdEJpZGRlcgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9QcmljZQUAAAAPbmV3QXVjdGlvblByaWNlBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAANYXVjdGlvbkNsaWVudAUAAAAQYW1vdW50RGlmZmVyZW5jZQUAAAAQYXVjdGlvbkFzc2V0SWQ1OAUAAAADbmlsCQAAAgAAAAECAAAAF0luY29ycmVjdCBhdWN0aW9uIHN0YXRlAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAACXN0YXRlT3BlbgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAFX0JpZF8FAAAADW5ld0ZyZWVsYW5jZXIFAAAACWJpZEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAAOc3RhdGVTdWdnZXN0ZWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfTG93ZXN0QmlkZGVyUHViBQAAAAljYWxsZXJQdWIFAAAAA25pbAMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAA5zdGF0ZVN1Z2dlc3RlZAQAAAAWY3VycmVudExvd2VzdEJpZGRlclB1YgQAAAAMbG93ZXN0QmlkZGVyCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfTG93ZXN0QmlkZGVyUHViBAAAAAckbWF0Y2gwBQAAAAxsb3dlc3RCaWRkZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAACNBdWN0aW9uIGxvd2VzdCBiaWRkZXIgd2FzIG5vdCBmb3VuZAQAAAASbmV3TG93ZXN0QmlkZGVyUHViBAAAABV2YWx1ZUN1cnJlbnRMb3dlc3RCaWQJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAFX0JpZF8FAAAAFmN1cnJlbnRMb3dlc3RCaWRkZXJQdWIEAAAAEGN1cnJlbnRMb3dlc3RCaWQEAAAAByRtYXRjaDAFAAAAFXZhbHVlQ3VycmVudExvd2VzdEJpZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAIEF1Y3Rpb24gbG93ZXN0IGJpZCB3YXMgbm90IGZvdW5kAwkAAGYAAAACBQAAABBjdXJyZW50TG93ZXN0QmlkBQAAAAliaWRBbW91bnQFAAAADW5ld0ZyZWVsYW5jZXIFAAAAFmN1cnJlbnRMb3dlc3RCaWRkZXJQdWIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfTG93ZXN0QmlkZGVyUHViBQAAABJuZXdMb3dlc3RCaWRkZXJQdWIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABV9CaWRfBQAAAA1uZXdGcmVlbGFuY2VyBQAAAAliaWRBbW91bnQFAAAAA25pbAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAcSW5jb3JyZWN0IGpvYklkIHN0YXRlLiBOb3c6IAUAAAAMYXVjdGlvblN0YXRlAgAAAAssIG11c3QgYmU6IAUAAAAJc3RhdGVPcGVuAgAAAAQgb3IgBQAAAA5zdGF0ZVN1Z2dlc3RlZAAAAAFpAQAAABBjaG9vc2VGcmVlbGFuY2VyAAAAAgAAAAlhdWN0aW9uSWQAAAANZnJlZWxhbmNlclB1YgQAAAAJY2FsbGVyUHViCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAHYmV0VGltZQUAAAAGaGVpZ2h0BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uU3RhcnQJAQAAABNnZXRBdWN0aW9uU3RhcnRUaW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAABZnZXRBdWN0aW9uRHVyYXRpb25UaW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAABBhdWN0aW9uQXNzZXROYW1lCQEAAAATZ2V0QXVjdGlvbkFzc2V0TmFtZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblByaWNlCQEAAAAPZ2V0QXVjdGlvblByaWNlAAAAAQUAAAAJYXVjdGlvbklkBAAAABBhdWN0aW9uQXNzZXRJZDU4CQEAAAARQXNzZXROYW1lVG9CYXNlNTgAAAABBQAAABBhdWN0aW9uQXNzZXROYW1lBAAAAAtqb2JzT25Hb2luZwkBAAAABmdldEludAAAAAEJAAEsAAAAAgkAAlgAAAABBQAAAA1hdWN0aW9uQ2xpZW50AgAAAAxfSm9ic09uR29pbmcEAAAAGWZyZWVsYW5jZXJQZW5kaW5nRWFybmluZ3MJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIFAAAADWZyZWVsYW5jZXJQdWICAAAAEF9QZW5kaW5nRWFybmluZ3MEAAAAF2ZyZWVsYW5jZXJUb3RhbEVhcm5pbmdzCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACBQAAAA1mcmVlbGFuY2VyUHViAgAAAA5fVG90YWxFYXJuaW5ncwQAAAATZnJlZWxhbmNlckJpZEFtb3VudAQAAAAQa2V5RnJlZWxhbmNlckJpZAkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAFX0JpZF8FAAAADWZyZWVsYW5jZXJQdWIEAAAAEXZhbHVlRnJlZWxhY2VyQmlkCQAEGgAAAAIFAAAABHRoaXMFAAAAEGtleUZyZWVsYW5jZXJCaWQEAAAAByRtYXRjaDAFAAAAEXZhbHVlRnJlZWxhY2VyQmlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAeRnJlZWxhbmNlcidzIGJldCB3YXMgbm90IGZvdW5kBAAAABFhdWN0aW9uVGltZWlzT3ZlcgkBAAAACXRpbWVDaGVjawAAAAMFAAAAB2JldFRpbWUFAAAADGF1Y3Rpb25TdGFydAUAAAAPYXVjdGlvbkR1cmF0aW9uAwkAAAAAAAACBQAAAAljYWxsZXJQdWIFAAAADWF1Y3Rpb25DbGllbnQDBQAAABFhdWN0aW9uVGltZWlzT3ZlcgMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAlzdGF0ZU9wZW4EAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQEAAAAWZGVjcmVhc2VGcmVlemVkQmFsYW5jZQAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUFAAAADGF1Y3Rpb25QcmljZQQAAAAOZEFwcENvbW1pc3Npb24JAABpAAAAAgkAAGgAAAACBQAAAAxhdWN0aW9uUHJpY2UAAAAAAAAAAAMAAAAAAAAAAGQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBQAAAAtzdGF0ZUNhbmNlbAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAhfRnJlZXplZAUAAAARbmV3RnJlZXplZEJhbGFuY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA1hdWN0aW9uQ2xpZW50CQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUAAAAOZEFwcENvbW1pc3Npb24FAAAAEGF1Y3Rpb25Bc3NldElkNTgFAAAAA25pbAMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAA5zdGF0ZVN1Z2dlc3RlZAQAAAATYXVjdGlvbkxvd2VzdEJpZGRlcgQAAAARdmFsdWVMb3dlc3RCaWRkZXIJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9Mb3dlc3RCaWRkZXJQdWIEAAAAByRtYXRjaDAFAAAAEXZhbHVlTG93ZXN0QmlkZGVyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAjQXVjdGlvbiBsb3dlc3QgYmlkZGVyIHdhcyBub3QgZm91bmQEAAAAD25ld0F1Y3Rpb25QcmljZQQAAAAUdmFsdWVOZXdBdWN0aW9uUHJpY2UJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAFX0JpZF8FAAAAE2F1Y3Rpb25Mb3dlc3RCaWRkZXIEAAAAByRtYXRjaDAFAAAAFHZhbHVlTmV3QXVjdGlvblByaWNlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAgQXVjdGlvbiBsb3dlc3QgYmlkIHdhcyBub3QgZm91bmQEAAAAEGFtb3VudERpZmZlcmVuY2UJAABlAAAAAgUAAAAMYXVjdGlvblByaWNlBQAAAA9uZXdBdWN0aW9uUHJpY2UEAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQEAAAAWZGVjcmVhc2VGcmVlemVkQmFsYW5jZQAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUFAAAAEGFtb3VudERpZmZlcmVuY2UJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBQAAAA9zdGF0ZUluUHJvZ3Jlc3MJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfSGlyZWRGcmVlbGFuY2VyBQAAABNhdWN0aW9uTG93ZXN0QmlkZGVyCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1ByaWNlBQAAAA9uZXdBdWN0aW9uUHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQFAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAJYAAAAAQUAAAANYXVjdGlvbkNsaWVudAIAAAAMX0pvYnNPbkdvaW5nCQAAZAAAAAIFAAAAC2pvYnNPbkdvaW5nAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADWZyZWVsYW5jZXJQdWICAAAAEF9QZW5kaW5nRWFybmluZ3MJAABkAAAAAgUAAAAZZnJlZWxhbmNlclBlbmRpbmdFYXJuaW5ncwUAAAAPbmV3QXVjdGlvblByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADWZyZWVsYW5jZXJQdWICAAAADl9Ub3RhbEVhcm5pbmdzCQAAZAAAAAIFAAAAF2ZyZWVsYW5jZXJUb3RhbEVhcm5pbmdzBQAAAA9uZXdBdWN0aW9uUHJpY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA1hdWN0aW9uQ2xpZW50BQAAABBhbW91bnREaWZmZXJlbmNlBQAAABBhdWN0aW9uQXNzZXRJZDU4BQAAAANuaWwJAAACAAAAAQIAAAAXSW5jb3JyZWN0IGF1Y3Rpb24gc3RhdGUEAAAAEHNldE5ld0ZyZWVsYW5jZXIEAAAADW5ld0ZyZWVsYW5jZXIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAFX0JpZF8FAAAADWZyZWVsYW5jZXJQdWIEAAAAByRtYXRjaDAFAAAADW5ld0ZyZWVsYW5jZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAANZnJlZWxhbmNlclB1YgkAAAIAAAABAgAAAB5FcnJvcjogSW5jb3JyZWN0IGZyZWVsYW5jZXJQdWIEAAAAD25ld0F1Y3Rpb25QcmljZQQAAAANZnJlZWxhbmNlckJpZAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfQmlkXwUAAAANZnJlZWxhbmNlclB1YgQAAAAHJG1hdGNoMAUAAAANZnJlZWxhbmNlckJpZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAI0F1Y3Rpb24gbG93ZXN0IGJpZGRlciB3YXMgbm90IGZvdW5kBAAAABBhbW91bnREaWZmZXJlbmNlCQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUAAAATZnJlZWxhbmNlckJpZEFtb3VudAQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAQYW1vdW50RGlmZmVyZW5jZQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAAD3N0YXRlSW5Qcm9ncmVzcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9IaXJlZEZyZWVsYW5jZXIFAAAAEHNldE5ld0ZyZWVsYW5jZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfUHJpY2UFAAAAD25ld0F1Y3Rpb25QcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAhfRnJlZXplZAUAAAARbmV3RnJlZXplZEJhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAAlgAAAABBQAAAA1hdWN0aW9uQ2xpZW50AgAAAAxfSm9ic09uR29pbmcJAABkAAAAAgUAAAALam9ic09uR29pbmcAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANZnJlZWxhbmNlclB1YgIAAAAQX1BlbmRpbmdFYXJuaW5ncwkAAGQAAAACBQAAABlmcmVlbGFuY2VyUGVuZGluZ0Vhcm5pbmdzBQAAAA9uZXdBdWN0aW9uUHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANZnJlZWxhbmNlclB1YgIAAAAOX1RvdGFsRWFybmluZ3MJAABkAAAAAgUAAAAXZnJlZWxhbmNlclRvdGFsRWFybmluZ3MFAAAAD25ld0F1Y3Rpb25QcmljZQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAADWF1Y3Rpb25DbGllbnQJAABkAAAAAgUAAAAQYW1vdW50RGlmZmVyZW5jZQAAAAAAAAAAAQUAAAAQYXVjdGlvbkFzc2V0SWQ1OAUAAAADbmlsCQAAAgAAAAECAAAALU9ubHkgYXVjdGlvbiBjdXN0b21lciBjYW4gY2hvb3NlIGEgZnJlZWxhbmNlcgAAAAFpAQAAABVpbmNyZWFzZUV4ZWN1dGlvblRpbWUAAAACAAAACWF1Y3Rpb25JZAAAAA1leGVjdXRpb25EYXlzBAAAAAZjYWxsZXIJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAAcZ2V0QXVjdGlvbkpvYlBlcmZvcm1hbmNlVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAXbmV3QXVjdGlvbkV4ZWN1dGlvblRpbWUEAAAAHG5ld0F1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAABoAAAAAgUAAAANZXhlY3V0aW9uRGF5cwUAAAADZGF5AwkAAGYAAAACBQAAABxuZXdBdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uBQAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uBQAAABxuZXdBdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQAAAgAAAAECAAAAOE5ldyBleGVjdXRpb24gdGltZSBtdXN0IG1vcmUgdGhhbiBjdXJyZW50IGV4ZWN1dGlvbiB0aW1lAwkAAAAAAAACBQAAAAZjYWxsZXIFAAAADWF1Y3Rpb25DbGllbnQDAwMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAlzdGF0ZU9wZW4GCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAOc3RhdGVTdWdnZXN0ZWQGCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAPc3RhdGVJblByb2dyZXNzCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAPX0pvYlBlcmZvcm1hbmNlBQAAABduZXdBdWN0aW9uRXhlY3V0aW9uVGltZQUAAAADbmlsCQAAAgAAAAECAAAAD0luY29ycmVjdCBzdGF0ZQkAAAIAAAABAgAAACdPbmx5IENsaWVudCBjYW4gaW5jcmVhc2UgZXhlY3V0aW9uIHRpbWUAAAABaQEAAAANY2FuY2VsQXVjdGlvbgAAAAEAAAAJYXVjdGlvbklkBAAAAAljYWxsZXJQdWIJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABBhdWN0aW9uQXNzZXROYW1lCQEAAAATZ2V0QXVjdGlvbkFzc2V0TmFtZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblByaWNlCQEAAAAPZ2V0QXVjdGlvblByaWNlAAAAAQUAAAAJYXVjdGlvbklkBAAAABBhdWN0aW9uQXNzZXRJZDU4CQEAAAARQXNzZXROYW1lVG9CYXNlNTgAAAABBQAAABBhdWN0aW9uQXNzZXROYW1lBAAAAA5kQXBwQ29tbWlzc2lvbgkAAGkAAAACCQAAaAAAAAIFAAAADGF1Y3Rpb25QcmljZQAAAAAAAAAAAwAAAAAAAAAAZAQAAAARYW1vdW50V2l0aG91dENvbW0JAABlAAAAAgUAAAAMYXVjdGlvblByaWNlBQAAAA5kQXBwQ29tbWlzc2lvbgQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAMYXVjdGlvblByaWNlAwkAAAAAAAACBQAAAAljYWxsZXJQdWIFAAAADWF1Y3Rpb25DbGllbnQDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAJc3RhdGVPcGVuCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAALc3RhdGVDYW5jZWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQFAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAANYXVjdGlvbkNsaWVudAUAAAARYW1vdW50V2l0aG91dENvbW0FAAAAEGF1Y3Rpb25Bc3NldElkNTgFAAAAA25pbAkAAAIAAAABAgAAAC5BdWN0aW9uIGNhbiBiZSBjYW5jZWxlZCBvbmx5IGJ5IGF1Y3Rpb24gb3duZXIuCQAAAgAAAAECAAAAHk9ubHkgQ2xpZW50IGNhbiBjYW5jZWwgYXVjdGlvbgAAAAFpAQAAAAtvcGVuRGlzcHV0ZQAAAAEAAAAJYXVjdGlvbklkBAAAAAZjYWxsZXIJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABFhdWN0aW9uRnJlZWxhbmNlcgkBAAAAF2dldEF1Y3Rpb25GcmVlbGFuY2VyUHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABNjbGllbnRKb2JzSW5EaXNwdXRlCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACCQACWAAAAAEFAAAADWF1Y3Rpb25DbGllbnQCAAAADl9Kb2JzSW5EaXNwdXRlAwMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAlzdGF0ZU9wZW4GCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAOc3RhdGVTdWdnZXN0ZWQJAAACAAAAAQIAAAArSW5jb3JyZWN0IGF1Y3Rpb24gc3RhdGUgZm9yIGRpc3B1dGUgb3BlbmluZwMDCQAAAAAAAAIFAAAABmNhbGxlcgUAAAANYXVjdGlvbkNsaWVudAYJAAAAAAAAAgUAAAAGY2FsbGVyBQAAABFhdWN0aW9uRnJlZWxhbmNlcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAAMc3RhdGVEaXNwdXRlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAANX0Rpc3B1dGVWb3RlcwAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQACWAAAAAEFAAAADWF1Y3Rpb25DbGllbnQCAAAADV9Kb2JJbkRpc3B1dGUJAABkAAAAAgUAAAATY2xpZW50Sm9ic0luRGlzcHV0ZQAAAAAAAAAAAQUAAAADbmlsCQAAAgAAAAECAAAAK09ubHkgQ2xpZW50IGFuZCBGcmVlbGFuY2VyIGNhbiBvcGVuIGRpc3B1dGUAAAABaQEAAAALdm90ZURpc3B1dGUAAAACAAAACWF1Y3Rpb25JZAAAAAR2b3RlBAAAAAljYWxsZXJQdWIJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAABBhdWN0aW9uQXNzZXROYW1lCQEAAAATZ2V0QXVjdGlvbkFzc2V0TmFtZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblByaWNlCQEAAAAPZ2V0QXVjdGlvblByaWNlAAAAAQUAAAAJYXVjdGlvbklkBAAAABFhdWN0aW9uRnJlZWxhbmNlcgkBAAAAF2dldEF1Y3Rpb25GcmVlbGFuY2VyUHViAAAAAQUAAAAJYXVjdGlvbklkBAAAAApjb21taXNzaW9uCQAAaQAAAAIJAABoAAAAAgUAAAAMYXVjdGlvblByaWNlAAAAAAAAAAADAAAAAAAAAABkBAAAABBhdWN0aW9uQXNzZXRJZDU4CQEAAAARQXNzZXROYW1lVG9CYXNlNTgAAAABBQAAABBhdWN0aW9uQXNzZXROYW1lBAAAABNjbGllbnRKb2JzSW5EaXNwdXRlCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACCQACWAAAAAEFAAAADWF1Y3Rpb25DbGllbnQCAAAADl9Kb2JzSW5EaXNwdXRlBAAAABJjYWxsZXJJ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AAIFAAAACWF1Y3Rpb25JZAIAAAAMX0RpcHV0ZVZvdGVfBQAAABJjYWxsZXJJc0FtYmFzc2Fkb3IFAAAAB25ld1ZvdGUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQFAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAJYAAAAAQUAAAANYXVjdGlvbkNsaWVudAIAAAANX0pvYkluRGlzcHV0ZQkAAGUAAAACBQAAABNjbGllbnRKb2JzSW5EaXNwdXRlAAAAAAAAAAABBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAANZGlzcHV0ZVdpbm5lcgUAAAAScGF5bWVudFdpdGhvdXRDb21tBQAAABBhdWN0aW9uQXNzZXRJZDU4BQAAAANuaWwJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA1fRGlzcHV0ZVZvdGVzCQAAZAAAAAIFAAAAC3ZvdGVzTnVtYmVyAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAxfRGlwdXRlVm90ZV8FAAAAEmNhbGxlcklzQW1iYXNzYWRvcgUAAAAHbmV3Vm90ZQUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAaSW5jb3JyZWN0IHN0YXRlLiBNdXN0IGJlOiAFAAAADHN0YXRlRGlzcHV0ZQAAAAFpAQAAAAx3b3JrSGFuZE92ZXIAAAABAAAACWF1Y3Rpb25JZAQAAAAJY2FsbGVyUHViCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMYXVjdGlvblN0YXRlCQEAAAAPZ2V0QXVjdGlvblN0YXRlAAAAAQUAAAAJYXVjdGlvbklkBAAAAA1hdWN0aW9uQ2xpZW50CQEAAAATZ2V0QXVjdGlvbkNsaWVudFB1YgAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblN0YXJ0CQEAAAATZ2V0QXVjdGlvblN0YXJ0VGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAAWZ2V0QXVjdGlvbkR1cmF0aW9uVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgkBAAAAHGdldEF1Y3Rpb25Kb2JQZXJmb3JtYW5jZVRpbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAAEWF1Y3Rpb25GcmVlbGFuY2VyCQEAAAAXZ2V0QXVjdGlvbkZyZWVsYW5jZXJQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAAE2NsaWVudEpvYnNJbkRpc3B1dGUJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIJAAJYAAAAAQUAAAANYXVjdGlvbkNsaWVudAIAAAAOX0pvYnNJbkRpc3B1dGUEAAAAC2N1cnJlbnRUaW1lBQAAAAZoZWlnaHQEAAAAEmZyZWVsYW5jZXJQdWJDaGVjawMJAAAAAAAAAgUAAAAJY2FsbGVyUHViBQAAABFhdWN0aW9uRnJlZWxhbmNlcgUAAAAJY2FsbGVyUHViCQAAAgAAAAECAAAANE9ubHkgYSBmcmVlbGFuY2VyIGNhbiBpbmRpY2F0ZSB0aGF0IHRoZSB3b3JrIGlzIGRvbmUEAAAACnRpbWVJc092ZXIJAABmAAAAAgkAAGUAAAACBQAAAAtjdXJyZW50VGltZQUAAAAMYXVjdGlvblN0YXJ0BQAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAAD3N0YXRlSW5Qcm9ncmVzcwMFAAAACnRpbWVJc092ZXIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAADHN0YXRlRGlzcHV0ZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADV9EaXNwdXRlVm90ZXMCAAAAATAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAAlgAAAABBQAAAA1hdWN0aW9uQ2xpZW50AgAAAA1fSm9iSW5EaXNwdXRlCQAAZAAAAAIFAAAAE2NsaWVudEpvYnNJbkRpc3B1dGUAAAAAAAAAAAEFAAAAA25pbAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAARc3RhdGVXYWl0NENvbmZpcm0FAAAAA25pbAkAAAIAAAABAgAAABpBdWN0aW9uIHN0YXRlIGlzIGluY29ycmVjdAAAAAFpAQAAAAphY2NlcHRXb3JrAAAAAQAAAAlhdWN0aW9uSWQEAAAACWNhbGxlclB1YgkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADGF1Y3Rpb25TdGF0ZQkBAAAAD2dldEF1Y3Rpb25TdGF0ZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAANYXVjdGlvbkNsaWVudAkBAAAAE2dldEF1Y3Rpb25DbGllbnRQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAADGF1Y3Rpb25TdGFydAkBAAAAE2dldEF1Y3Rpb25TdGFydFRpbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAAD2F1Y3Rpb25EdXJhdGlvbgkBAAAAFmdldEF1Y3Rpb25EdXJhdGlvblRpbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAQAAABNnZXRBdWN0aW9uQXNzZXROYW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA9nZXRBdWN0aW9uUHJpY2UAAAABBQAAAAlhdWN0aW9uSWQEAAAAEWF1Y3Rpb25GcmVlbGFuY2VyCQEAAAAXZ2V0QXVjdGlvbkZyZWVsYW5jZXJQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAAC2pvYnNPbkdvaW5nCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACCQACWAAAAAEFAAAADWF1Y3Rpb25DbGllbnQCAAAADF9Kb2JzT25Hb2luZwQAAAAZZnJlZWxhbmNlclBlbmRpbmdFYXJuaW5ncwkBAAAABmdldEludAAAAAEJAAEsAAAAAgkAAlgAAAABBQAAABFhdWN0aW9uRnJlZWxhbmNlcgIAAAAQX1BlbmRpbmdFYXJuaW5ncwQAAAAWZnJlZWxhbmNlclBhaWRFYXJuaW5ncwkBAAAABmdldEludAAAAAEJAAEsAAAAAgkAAlgAAAABBQAAABFhdWN0aW9uRnJlZWxhbmNlcgIAAAANX1BhaWRFYXJuaW5ncwQAAAAOZEFwcENvbW1pc3Npb24JAABpAAAAAgkAAGgAAAACBQAAAAxhdWN0aW9uUHJpY2UAAAAAAAAAAAMAAAAAAAAAAGQEAAAAEWFtb3VudFdpdGhvdXRDb21tCQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUAAAAOZEFwcENvbW1pc3Npb24EAAAAEGF1Y3Rpb25Bc3NldElkNTgJAQAAABFBc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAAEGF1Y3Rpb25Bc3NldE5hbWUEAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQEAAAAWZGVjcmVhc2VGcmVlemVkQmFsYW5jZQAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUFAAAADGF1Y3Rpb25QcmljZQQAAAAJbmV3UmF0aW5nBAAAAAt2YWx1ZVJhdGluZwkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAJYAAAAAQUAAAARYXVjdGlvbkZyZWVsYW5jZXICAAAAB19SYXRpbmcEAAAADWN1cnJlbnRSYXRpbmcEAAAAByRtYXRjaDAFAAAAC3ZhbHVlUmF0aW5nAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAJAABkAAAAAgUAAAANY3VycmVudFJhdGluZwAAAAAAAAAAAQMJAAAAAAAAAgUAAAAJY2FsbGVyUHViBQAAAA1hdWN0aW9uQ2xpZW50AwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAAEXN0YXRlV2FpdDRDb25maXJtCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAANc3RhdGVDb21wbGV0ZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQACWAAAAAEFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyAgAAAAdfUmF0aW5nBQAAAAluZXdSYXRpbmcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQFAAAAEW5ld0ZyZWV6ZWRCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAJYAAAAAQUAAAANYXVjdGlvbkNsaWVudAIAAAAMX0pvYnNPbkdvaW5nCQAAZQAAAAIFAAAAC2pvYnNPbkdvaW5nAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAJYAAAAAQUAAAARYXVjdGlvbkZyZWVsYW5jZXICAAAAEF9QZW5kaW5nRWFybmluZ3MJAABlAAAAAgUAAAAZZnJlZWxhbmNlclBlbmRpbmdFYXJuaW5ncwUAAAAMYXVjdGlvblByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAJYAAAAAQUAAAARYXVjdGlvbkZyZWVsYW5jZXICAAAADV9QYWlkRWFybmluZ3MJAABkAAAAAgUAAAAWZnJlZWxhbmNlclBhaWRFYXJuaW5ncwUAAAAMYXVjdGlvblByaWNlBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAARYXVjdGlvbkZyZWVsYW5jZXIFAAAAEWFtb3VudFdpdGhvdXRDb21tBQAAABBhdWN0aW9uQXNzZXRJZDU4BQAAAANuaWwJAAACAAAAAQkAASwAAAACAgAAABpJbmNvcnJlY3Qgc3RhdGUuIE11c3QgYmU6IAUAAAARc3RhdGVXYWl0NENvbmZpcm0JAAACAAAAAQIAAAArT25seSBhdWN0aW9uIGN1c3RvbWVyIGNhbiB1c2UgdGhpcyBmdW5jdGlvbgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAA3R0eAUAAAAHJG1hdGNoMAYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBAAAAANzdHgFAAAAByRtYXRjaDAGBwc2d5uX", "chainId": 84, "height": 715477, "spentComplexity": 0 } View: original | compacted Prev: none Next: FpVXVAC6vhtNJpBSsoFZqGiGQPMxnAcPTxrLJxCdWM2z Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let day = 1440
5+
6+let WAVES = unit
7+
8+let wBTC = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
9+
10+let wEUR = base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'
11+
12+let wUSD = base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'
13+
14+let stateOpen = "Opened"
15+
16+let stateSuggested = "Suggested"
17+
18+let stateCancel = "Canceled"
19+
20+let stateInProgress = "InProgress"
21+
22+let stateWait4Confirm = "WaitForConfirmation"
23+
24+let stateComplete = "Completed"
25+
26+let stateDispute = "Dispute"
27+
28+let stateDisputeResolved = "DisputeResolved"
29+
30+let client = "CMR"
31+
32+let freelancer = "FL"
33+
34+let ambassador1 = base58'1'
35+
36+let ambassador2 = base58'1'
37+
38+let ambassador3 = base58'1'
39+
40+let ambassador4 = base58'1'
41+
42+let ambassador5 = base58'1'
43+
44+func AuctionIdDataKey (auctionId) = (auctionId + "_AuctionData")
45+
46+
47+func getInt (key) = {
48+ let valueJobsOnGoing = getInteger(this, key)
49+ match valueJobsOnGoing {
50+ case a: Int =>
51+ a
52+ case _ =>
53+ 0
54+ }
55+ }
56+
57+
58+func AssetNameToBase58 (auctionAssetName) = if ((auctionAssetName == "WAVES"))
59+ then WAVES
60+ else if ((auctionAssetName == "BTC"))
61+ then wBTC
62+ else if ((auctionAssetName == "EUR"))
63+ then wEUR
64+ else if ((auctionAssetName == "USD"))
65+ then wUSD
66+ else throw("Incorrect Asset Id")
67+
68+
69+func timeCheck (currentTime,startTime,expirationTime) = ((currentTime - startTime) > expirationTime)
70+
71+
72+func bidAmountCheck (amount,auctionPrice) = if ((amount > auctionPrice))
73+ then throw("Bid amount must be lower or equal than auctionPrice")
74+ else amount
75+
76+
77+func increaseFreezedBalance (pmtAssetName,auctionPrice) = {
78+ let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
79+ let currentFreezedBalance = match keyFreezedFunds {
80+ case a: Int =>
81+ a
82+ case _ =>
83+ 0
84+ }
85+ (currentFreezedBalance + auctionPrice)
86+ }
87+
88+
89+func decreaseFreezedBalance (pmtAssetName,auctionPrice) = {
90+ let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
91+ let currentFreezedBalance = match keyFreezedFunds {
92+ case a: Int =>
93+ a
94+ case _ =>
95+ 0
96+ }
97+ let a = (currentFreezedBalance - auctionPrice)
98+ if ((a >= 0))
99+ then a
100+ else throw("Freezed amount couldn't be less than 0")
101+ }
102+
103+
104+func freelancerIsRegistered (callerPub) = {
105+ let freelancerIsRegistered = getString(this, (callerPub + "_Freelancer"))
106+ match freelancerIsRegistered {
107+ case a: String =>
108+ callerPub
109+ case _ =>
110+ throw("Only registered users can make bets")
111+ }
112+ }
113+
114+
115+func createAuctionPriceCheck (pmtAmount) = if ((pmtAmount > 0))
116+ then pmtAmount
117+ else throw("Amount must be higher then 0")
118+
119+
120+func getAuctionState (auctionId) = {
121+ let valueState = getString(this, (auctionId + "_State"))
122+ match valueState {
123+ case a: String =>
124+ a
125+ case _ =>
126+ throw("Auction State was not found")
127+ }
128+ }
129+
130+
131+func getAuctionClientPub (auctionId) = {
132+ let valueClient = getString(this, (auctionId + "_AuctionClient"))
133+ let clientPub = match valueClient {
134+ case a: String =>
135+ a
136+ case _ =>
137+ throw("Auction Client was not found")
138+ }
139+ fromBase58String(clientPub)
140+ }
141+
142+
143+func getAuctionStartTime (auctionId) = {
144+ let valueAuctionStart = getInteger(this, (auctionId + "_AuctionStart"))
145+ match valueAuctionStart {
146+ case a: Int =>
147+ a
148+ case _ =>
149+ throw("Auction Start time was not found")
150+ }
151+ }
152+
153+
154+func getAuctionDurationTime (auctionId) = {
155+ let valueauctionDuration = getInteger(this, (auctionId + "_AuctionDuration"))
156+ match valueauctionDuration {
157+ case a: Int =>
158+ a
159+ case _ =>
160+ throw("Auction duration time was not found")
161+ }
162+ }
163+
164+
165+func getAuctionJobPerformanceTime (auctionId) = {
166+ let valueBlocksForExecution = getInteger(this, (auctionId + "_JobPerformance"))
167+ match valueBlocksForExecution {
168+ case a: Int =>
169+ a
170+ case _ =>
171+ throw("Auction job performance time was not found")
172+ }
173+ }
174+
175+
176+func getAuctionAssetName (auctionId) = {
177+ let valueAssetName = getString(this, (auctionId + "_AssetName"))
178+ match valueAssetName {
179+ case a: String =>
180+ a
181+ case _ =>
182+ throw("Auction asset name was not found")
183+ }
184+ }
185+
186+
187+func getAuctionPrice (auctionId) = {
188+ let valuePrice = getInteger(this, (auctionId + "_Price"))
189+ match valuePrice {
190+ case a: Int =>
191+ a
192+ case _ =>
193+ throw("Auction price was not found")
194+ }
195+ }
196+
197+
198+func getAuctionFreelancerPub (auctionId) = {
199+ let valueClient = getString(this, (auctionId + "_HiredFreelancer"))
200+ let a = match valueClient {
201+ case a: String =>
202+ a
203+ case _ =>
204+ throw("Auction Client was not found")
205+ }
206+ fromBase58String(a)
207+ }
208+
209+
210+@Callable(i)
211+func freelancerSignUp (info) = {
212+ let userPublicKey = toBase58String(i.callerPublicKey)
213+ let alreadyRegistered = getString(this, (userPublicKey + "_Freelancer"))
214+ if (isDefined(alreadyRegistered))
215+ then throw("User already registered")
216+ else WriteSet([DataEntry((userPublicKey + "_Freelancer"), info), DataEntry((userPublicKey + "_PendingEarnings"), 0), DataEntry((userPublicKey + "_PaidEarnings"), 0), DataEntry((userPublicKey + "_TotalEarnings"), 0), DataEntry((userPublicKey + "_JobsPending"), 0), DataEntry((userPublicKey + "_JobsCompleted"), 0), DataEntry((userPublicKey + "_JobsTotal"), 0)])
217+ }
218+
219+
220+
221+@Callable(i)
222+func clientSignUp (info) = {
223+ let userPublicKey = toBase58String(i.callerPublicKey)
224+ let alreadyRegistered = getString(this, (userPublicKey + "_Client"))
225+ if (isDefined(alreadyRegistered))
226+ then throw("User already registered")
227+ else WriteSet([DataEntry((userPublicKey + "_Client"), info), DataEntry((userPublicKey + "_JobsCreated"), 0), DataEntry((userPublicKey + "_JobsOnGoing"), 0), DataEntry((userPublicKey + "_JobInDispute"), 0)])
228+ }
229+
230+
231+
232+@Callable(i)
233+func createAuction (jobExecutionDays,auctionDurationDays,auctionInfo) = {
234+ let auctionId = toBase58String(i.transactionId)
235+ let auctionClient = toBase58String(i.callerPublicKey)
236+ let pmt = extract(i.payment)
237+ let pmtAmount = pmt.amount
238+ let auctionPrice = createAuctionPriceCheck(pmtAmount)
239+ let auctionStart = height
240+ let auctionDurationBlocks = (auctionDurationDays * day)
241+ let blocksForExecution = (jobExecutionDays * day)
242+ let pmtAssetName = if (!(isDefined(pmt.assetId)))
243+ then "WAVES"
244+ else if ((pmt.assetId == wBTC))
245+ then "BTC"
246+ else if ((pmt.assetId == wEUR))
247+ then "EUR"
248+ else if ((pmt.assetId == wUSD))
249+ then "USD"
250+ else throw("AssetId is incorrect")
251+ let jobsCreated = getInt((auctionClient + "_JobsCreated"))
252+ let newFreezedBalance = increaseFreezedBalance(pmtAssetName, auctionPrice)
253+ WriteSet([DataEntry((auctionId + "_State"), stateOpen), DataEntry((auctionId + "_Info"), auctionInfo), DataEntry((auctionId + "_AuctionClient"), auctionClient), DataEntry((auctionId + "_AuctionStart"), auctionStart), DataEntry((auctionId + "_AuctionDuration"), auctionDurationBlocks), DataEntry((auctionId + "_JobPerformance"), blocksForExecution), DataEntry((auctionId + "_AssetName"), pmtAssetName), DataEntry((auctionId + "_Price"), auctionPrice), DataEntry((pmtAssetName + "_Freezed"), newFreezedBalance), DataEntry((auctionClient + "_JobsCreated"), (jobsCreated + 1))])
254+ }
255+
256+
257+
258+@Callable(i)
259+func makeBid (auctionId,amount) = {
260+ let callerPub = toBase58String(i.callerPublicKey)
261+ let betTime = height
262+ let auctionState = getAuctionState(auctionId)
263+ let auctionClient = getAuctionClientPub(auctionId)
264+ let auctionStart = getAuctionStartTime(auctionId)
265+ let auctionDuration = getAuctionDurationTime(auctionId)
266+ let auctionBlocksForExecution = getAuctionJobPerformanceTime(auctionId)
267+ let auctionAssetName = getAuctionAssetName(auctionId)
268+ let auctionPrice = getAuctionPrice(auctionId)
269+ let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
270+ let newFreelancer = freelancerIsRegistered(callerPub)
271+ let dAppCommission = ((auctionPrice * 3) / 100)
272+ let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
273+ let bidAmount = bidAmountCheck(amount, auctionPrice)
274+ let auctionTimeisOver = timeCheck(betTime, auctionStart, auctionDuration)
275+ if (auctionTimeisOver)
276+ then if ((auctionState == stateOpen))
277+ then ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateCancel), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), (auctionPrice - dAppCommission), auctionAssetId58)]))
278+ else if ((auctionState == stateSuggested))
279+ then {
280+ let auctionLowestBidder = {
281+ let valueLowestBidder = getString(this, (auctionId + "_LowestBidderPub"))
282+ match valueLowestBidder {
283+ case a: String =>
284+ a
285+ case _ =>
286+ throw("Auction lowest bidder was not found")
287+ }
288+ }
289+ let newAuctionPrice = {
290+ let valueNewAuctionPrice = getInteger(this, ((auctionId + "_Bid_") + auctionLowestBidder))
291+ match valueNewAuctionPrice {
292+ case a: Int =>
293+ a
294+ case _ =>
295+ throw("Auction lowest bid was not found")
296+ }
297+ }
298+ let amountDifference = ((auctionPrice - newAuctionPrice) - dAppCommission)
299+ ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateInProgress), DataEntry((auctionId + "_HiredFreelancer"), auctionLowestBidder), DataEntry((auctionId + "_Price"), newAuctionPrice)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), amountDifference, auctionAssetId58)]))
300+ }
301+ else throw("Incorrect auction state")
302+ else if ((auctionState == stateOpen))
303+ then WriteSet([DataEntry(((auctionId + "_Bid_") + newFreelancer), bidAmount), DataEntry((auctionId + "_State"), stateSuggested), DataEntry((auctionId + "_LowestBidderPub"), callerPub)])
304+ else if ((auctionState == stateSuggested))
305+ then {
306+ let currentLowestBidderPub = {
307+ let lowestBidder = getString(this, (auctionId + "_LowestBidderPub"))
308+ match lowestBidder {
309+ case a: String =>
310+ a
311+ case _ =>
312+ throw("Auction lowest bidder was not found")
313+ }
314+ }
315+ let newLowestBidderPub = {
316+ let valueCurrentLowestBid = getInteger(this, ((auctionId + "_Bid_") + currentLowestBidderPub))
317+ let currentLowestBid = match valueCurrentLowestBid {
318+ case a: Int =>
319+ a
320+ case _ =>
321+ throw("Auction lowest bid was not found")
322+ }
323+ if ((currentLowestBid > bidAmount))
324+ then newFreelancer
325+ else currentLowestBidderPub
326+ }
327+ WriteSet([DataEntry((auctionId + "_LowestBidderPub"), newLowestBidderPub), DataEntry(((auctionId + "_Bid_") + newFreelancer), bidAmount)])
328+ }
329+ else throw(((((("Incorrect jobId state. Now: " + auctionState) + ", must be: ") + stateOpen) + " or ") + stateSuggested))
330+ }
331+
332+
333+
334+@Callable(i)
335+func chooseFreelancer (auctionId,freelancerPub) = {
336+ let callerPub = extract(i.callerPublicKey)
337+ let betTime = height
338+ let auctionState = getAuctionState(auctionId)
339+ let auctionClient = getAuctionClientPub(auctionId)
340+ let auctionStart = getAuctionStartTime(auctionId)
341+ let auctionDuration = getAuctionDurationTime(auctionId)
342+ let auctionAssetName = getAuctionAssetName(auctionId)
343+ let auctionPrice = getAuctionPrice(auctionId)
344+ let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
345+ let jobsOnGoing = getInt((toBase58String(auctionClient) + "_JobsOnGoing"))
346+ let freelancerPendingEarnings = getInt((freelancerPub + "_PendingEarnings"))
347+ let freelancerTotalEarnings = getInt((freelancerPub + "_TotalEarnings"))
348+ let freelancerBidAmount = {
349+ let keyFreelancerBid = ((auctionId + "_Bid_") + freelancerPub)
350+ let valueFreelacerBid = getInteger(this, keyFreelancerBid)
351+ match valueFreelacerBid {
352+ case a: Int =>
353+ a
354+ case _ =>
355+ throw("Freelancer's bet was not found")
356+ }
357+ }
358+ let auctionTimeisOver = timeCheck(betTime, auctionStart, auctionDuration)
359+ if ((callerPub == auctionClient))
360+ then if (auctionTimeisOver)
361+ then if ((auctionState == stateOpen))
362+ then {
363+ let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
364+ let dAppCommission = ((auctionPrice * 3) / 100)
365+ ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateCancel), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), (auctionPrice - dAppCommission), auctionAssetId58)]))
366+ }
367+ else if ((auctionState == stateSuggested))
368+ then {
369+ let auctionLowestBidder = {
370+ let valueLowestBidder = getString(this, (auctionId + "_LowestBidderPub"))
371+ match valueLowestBidder {
372+ case a: String =>
373+ a
374+ case _ =>
375+ throw("Auction lowest bidder was not found")
376+ }
377+ }
378+ let newAuctionPrice = {
379+ let valueNewAuctionPrice = getInteger(this, ((auctionId + "_Bid_") + auctionLowestBidder))
380+ match valueNewAuctionPrice {
381+ case a: Int =>
382+ a
383+ case _ =>
384+ throw("Auction lowest bid was not found")
385+ }
386+ }
387+ let amountDifference = (auctionPrice - newAuctionPrice)
388+ let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, amountDifference)
389+ ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateInProgress), DataEntry((auctionId + "_HiredFreelancer"), auctionLowestBidder), DataEntry((auctionId + "_Price"), newAuctionPrice), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobsOnGoing"), (jobsOnGoing + 1)), DataEntry((freelancerPub + "_PendingEarnings"), (freelancerPendingEarnings + newAuctionPrice)), DataEntry((freelancerPub + "_TotalEarnings"), (freelancerTotalEarnings + newAuctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), amountDifference, auctionAssetId58)]))
390+ }
391+ else throw("Incorrect auction state")
392+ else {
393+ let setNewFreelancer = {
394+ let newFreelancer = getInteger(this, ((auctionId + "_Bid_") + freelancerPub))
395+ match newFreelancer {
396+ case a: Int =>
397+ freelancerPub
398+ case _ =>
399+ throw("Error: Incorrect freelancerPub")
400+ }
401+ }
402+ let newAuctionPrice = {
403+ let freelancerBid = getInteger(this, ((auctionId + "_Bid_") + freelancerPub))
404+ match freelancerBid {
405+ case a: Int =>
406+ a
407+ case _ =>
408+ throw("Auction lowest bidder was not found")
409+ }
410+ }
411+ let amountDifference = (auctionPrice - freelancerBidAmount)
412+ let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, amountDifference)
413+ ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateInProgress), DataEntry((auctionId + "_HiredFreelancer"), setNewFreelancer), DataEntry((auctionId + "_Price"), newAuctionPrice), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobsOnGoing"), (jobsOnGoing + 1)), DataEntry((freelancerPub + "_PendingEarnings"), (freelancerPendingEarnings + newAuctionPrice)), DataEntry((freelancerPub + "_TotalEarnings"), (freelancerTotalEarnings + newAuctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), (amountDifference + 1), auctionAssetId58)]))
414+ }
415+ else throw("Only auction customer can choose a freelancer")
416+ }
417+
418+
419+
420+@Callable(i)
421+func increaseExecutionTime (auctionId,executionDays) = {
422+ let caller = extract(i.callerPublicKey)
423+ let auctionState = getAuctionState(auctionId)
424+ let auctionClient = getAuctionClientPub(auctionId)
425+ let auctionBlocksForExecution = getAuctionJobPerformanceTime(auctionId)
426+ let newAuctionExecutionTime = {
427+ let newAuctionBlocksForExecution = (executionDays * day)
428+ if ((newAuctionBlocksForExecution > auctionBlocksForExecution))
429+ then newAuctionBlocksForExecution
430+ else throw("New execution time must more than current execution time")
431+ }
432+ if ((caller == auctionClient))
433+ then if (if (if ((auctionState == stateOpen))
434+ then true
435+ else (auctionState == stateSuggested))
436+ then true
437+ else (auctionState == stateInProgress))
438+ then WriteSet([DataEntry((auctionId + "_JobPerformance"), newAuctionExecutionTime)])
439+ else throw("Incorrect state")
440+ else throw("Only Client can increase execution time")
441+ }
442+
443+
444+
445+@Callable(i)
446+func cancelAuction (auctionId) = {
447+ let callerPub = extract(i.callerPublicKey)
448+ let auctionState = getAuctionState(auctionId)
449+ let auctionClient = getAuctionClientPub(auctionId)
450+ let auctionAssetName = getAuctionAssetName(auctionId)
451+ let auctionPrice = getAuctionPrice(auctionId)
452+ let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
453+ let dAppCommission = ((auctionPrice * 3) / 100)
454+ let amountWithoutComm = (auctionPrice - dAppCommission)
455+ let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
456+ if ((callerPub == auctionClient))
457+ then if ((auctionState == stateOpen))
458+ then ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateCancel), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), amountWithoutComm, auctionAssetId58)]))
459+ else throw("Auction can be canceled only by auction owner.")
460+ else throw("Only Client can cancel auction")
461+ }
462+
463+
464+
465+@Callable(i)
466+func openDispute (auctionId) = {
467+ let caller = extract(i.callerPublicKey)
468+ let auctionState = getAuctionState(auctionId)
469+ let auctionClient = getAuctionClientPub(auctionId)
470+ let auctionFreelancer = getAuctionFreelancerPub(auctionId)
471+ let clientJobsInDispute = getInt((toBase58String(auctionClient) + "_JobsInDispute"))
472+ if (if ((auctionState == stateOpen))
473+ then true
474+ else (auctionState == stateSuggested))
475+ then throw("Incorrect auction state for dispute opening")
476+ else if (if ((caller == auctionClient))
477+ then true
478+ else (caller == auctionFreelancer))
479+ then WriteSet([DataEntry((auctionId + "_State"), stateDispute), DataEntry((auctionId + "_DisputeVotes"), 0), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute + 1))])
480+ else throw("Only Client and Freelancer can open dispute")
481+ }
482+
483+
484+
485+@Callable(i)
486+func voteDispute (auctionId,vote) = {
487+ let callerPub = extract(i.callerPublicKey)
488+ let auctionState = getAuctionState(auctionId)
489+ let auctionClient = getAuctionClientPub(auctionId)
490+ let auctionAssetName = getAuctionAssetName(auctionId)
491+ let auctionPrice = getAuctionPrice(auctionId)
492+ let auctionFreelancer = getAuctionFreelancerPub(auctionId)
493+ let commission = ((auctionPrice * 3) / 100)
494+ let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
495+ let clientJobsInDispute = getInt((toBase58String(auctionClient) + "_JobsInDispute"))
496+ let callerIsAmbassador = if (if (if (if (if ((callerPub == ambassador1))
497+ then true
498+ else (callerPub == ambassador2))
499+ then true
500+ else (callerPub == ambassador3))
501+ then true
502+ else (callerPub == ambassador4))
503+ then true
504+ else (callerPub == ambassador5))
505+ then toBase58String(callerPub)
506+ else throw("Only defined ambassadors can vote in disputes")
507+ let newVote = if (if ((vote == client))
508+ then true
509+ else (vote == freelancer))
510+ then vote
511+ else throw(((("Vote is incorrect. Must be: " + client) + " or ") + freelancer))
512+ let newVoter = {
513+ let keyVoter = ((auctionId + "_DiputeVote_") + callerIsAmbassador)
514+ let valueVoter = getString(this, keyVoter)
515+ match valueVoter {
516+ case a: String =>
517+ throw("User already voted")
518+ case _ =>
519+ callerIsAmbassador
520+ }
521+ }
522+ let votesNumber = {
523+ let valueVotesNumber = getInteger(this, (auctionId + "_DisputeVotes"))
524+ match valueVotesNumber {
525+ case a: Int =>
526+ a
527+ case _ =>
528+ throw("VotesNumber was not found")
529+ }
530+ }
531+ if ((auctionState == stateDispute))
532+ then if ((votesNumber == 4))
533+ then {
534+ let disputeWinner = {
535+ let ambassador1Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador1)))
536+ let ambassador2Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador2)))
537+ let ambassador3Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador3)))
538+ let ambassador4Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador4)))
539+ let ambassador5Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador5)))
540+ let v1 = if ((ambassador1Vote == client))
541+ then 1
542+ else 0
543+ let v2 = if ((ambassador2Vote == client))
544+ then 1
545+ else 0
546+ let v3 = if ((ambassador3Vote == client))
547+ then 1
548+ else 0
549+ let v4 = if ((ambassador4Vote == client))
550+ then 1
551+ else 0
552+ let v5 = if ((ambassador5Vote == client))
553+ then 1
554+ else 0
555+ let currentVote = if ((newVote == client))
556+ then 1
557+ else 0
558+ let votesForClient = (((((v1 + v2) + v3) + v4) + v5) + currentVote)
559+ if ((votesForClient > 2))
560+ then auctionClient
561+ else auctionFreelancer
562+ }
563+ let paymentWithoutComm = if ((disputeWinner == auctionClient))
564+ then (auctionPrice - commission)
565+ else (auctionPrice - (commission * 2))
566+ let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
567+ ScriptResult(WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry((auctionId + "_State"), stateDisputeResolved), DataEntry(((auctionId + "_DiputeVote_") + callerIsAmbassador), newVote), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute - 1))]), TransferSet([ScriptTransfer(addressFromPublicKey(disputeWinner), paymentWithoutComm, auctionAssetId58)]))
568+ }
569+ else WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry(((auctionId + "_DiputeVote_") + callerIsAmbassador), newVote)])
570+ else throw(("Incorrect state. Must be: " + stateDispute))
571+ }
572+
573+
574+
575+@Callable(i)
576+func workHandOver (auctionId) = {
577+ let callerPub = extract(i.callerPublicKey)
578+ let auctionState = getAuctionState(auctionId)
579+ let auctionClient = getAuctionClientPub(auctionId)
580+ let auctionStart = getAuctionStartTime(auctionId)
581+ let auctionDuration = getAuctionDurationTime(auctionId)
582+ let auctionBlocksForExecution = getAuctionJobPerformanceTime(auctionId)
583+ let auctionFreelancer = getAuctionFreelancerPub(auctionId)
584+ let clientJobsInDispute = getInt((toBase58String(auctionClient) + "_JobsInDispute"))
585+ let currentTime = height
586+ let freelancerPubCheck = if ((callerPub == auctionFreelancer))
587+ then callerPub
588+ else throw("Only a freelancer can indicate that the work is done")
589+ let timeIsOver = ((currentTime - auctionStart) > auctionBlocksForExecution)
590+ if ((auctionState == stateInProgress))
591+ then if (timeIsOver)
592+ then WriteSet([DataEntry((auctionId + "_State"), stateDispute), DataEntry((auctionId + "_DisputeVotes"), "0"), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute + 1))])
593+ else WriteSet([DataEntry((auctionId + "_State"), stateWait4Confirm)])
594+ else throw("Auction state is incorrect")
595+ }
596+
597+
598+
599+@Callable(i)
600+func acceptWork (auctionId) = {
601+ let callerPub = extract(i.callerPublicKey)
602+ let auctionState = getAuctionState(auctionId)
603+ let auctionClient = getAuctionClientPub(auctionId)
604+ let auctionStart = getAuctionStartTime(auctionId)
605+ let auctionDuration = getAuctionDurationTime(auctionId)
606+ let auctionAssetName = getAuctionAssetName(auctionId)
607+ let auctionPrice = getAuctionPrice(auctionId)
608+ let auctionFreelancer = getAuctionFreelancerPub(auctionId)
609+ let jobsOnGoing = getInt((toBase58String(auctionClient) + "_JobsOnGoing"))
610+ let freelancerPendingEarnings = getInt((toBase58String(auctionFreelancer) + "_PendingEarnings"))
611+ let freelancerPaidEarnings = getInt((toBase58String(auctionFreelancer) + "_PaidEarnings"))
612+ let dAppCommission = ((auctionPrice * 3) / 100)
613+ let amountWithoutComm = (auctionPrice - dAppCommission)
614+ let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
615+ let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
616+ let newRating = {
617+ let valueRating = getInteger(this, (toBase58String(auctionFreelancer) + "_Rating"))
618+ let currentRating = match valueRating {
619+ case a: Int =>
620+ a
621+ case _ =>
622+ 0
623+ }
624+ (currentRating + 1)
625+ }
626+ if ((callerPub == auctionClient))
627+ then if ((auctionState == stateWait4Confirm))
628+ then ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateComplete), DataEntry((toBase58String(auctionFreelancer) + "_Rating"), newRating), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobsOnGoing"), (jobsOnGoing - 1)), DataEntry((toBase58String(auctionFreelancer) + "_PendingEarnings"), (freelancerPendingEarnings - auctionPrice)), DataEntry((toBase58String(auctionFreelancer) + "_PaidEarnings"), (freelancerPaidEarnings + auctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionFreelancer), amountWithoutComm, auctionAssetId58)]))
629+ else throw(("Incorrect state. Must be: " + stateWait4Confirm))
630+ else throw("Only auction customer can use this function")
631+ }
632+
633+
634+@Verifier(tx)
635+func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
636+ then match tx {
637+ case ttx: TransferTransaction =>
638+ true
639+ case stx: SetScriptTransaction =>
640+ true
641+ case _ =>
642+ false
643+ }
644+ else false
645+

github/deemru/w8io/026f985 
451.63 ms