tx · GPDrfDQ2Jpsvk5nSwYoCMcd5MEHcZSCcD2kGPSNpoy1M 3MsqKJ6o1ABE37676cHHBxJRs6huYTt72ch: -0.03900000 Waves 2024.07.17 11:33 [3197802] smart account 3MsqKJ6o1ABE37676cHHBxJRs6huYTt72ch > SELF 0.00000000 Waves
{ "type": 13, "id": "GPDrfDQ2Jpsvk5nSwYoCMcd5MEHcZSCcD2kGPSNpoy1M", "fee": 3900000, "feeAssetId": null, "timestamp": 1721205202912, "version": 2, "chainId": 84, "sender": "3MsqKJ6o1ABE37676cHHBxJRs6huYTt72ch", "senderPublicKey": "3xjN6fjYDXBGUE1mcRw2Fvr4R6tEZnuJA98QFGF99sXd", "proofs": [ "QoQeusH8EtnYwzXqbgxXGrJcMojwK5Tuf7siG3cDENWuqH6KU1zqjkiYNZPYH46mrhXeXPWzaLVT5wymvA7Fe76" ], "script": "base64:CAJbCAISBAoCCAgSBQoDCAgIEgUKAwgIARIGCgQICAEIEgUKAwgIARIGCgQICAEIEgYKBAEICAESBwoFAQgIAQgSAwoBAhIAEgYKBAgSAQESBgoECAEICBIECgIBCE4AB0lOVF9NQVgA//////////9/AAVXQVZFUwCAwtcvAAtNSU5fQkFMQU5DRQkAaAIAoJwBBQVXQVZFUwADU0VQAgEsAA9CTE9DS19IQVNIX1NJWkUAIAAMQUREUkVTU19TSVpFABoAFFBVQkxJQ19LRVlfSEFTSF9TSVpFABQACXplcm9lc1N0cgKACDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAEHRoaXNFcG9jaERhdGFLZXkCDXRoaXNFcG9jaERhdGEADGFsbE1pbmVyc0tleQIJYWxsTWluZXJzAA5tYWluQ2hhaW5JZEtleQILbWFpbkNoYWluSWQADmxhc3RDaGFpbklkS2V5AgtsYXN0Q2hhaW5JZAAXZmlyc3RWYWxpZEFsdENoYWluSWRLZXkCFGZpcnN0VmFsaWRBbHRDaGFpbklkAA5taW5lclJld2FyZEtleQILbWluZXJSZXdhcmQAGXN0YWtpbmdDb250cmFjdEFkZHJlc3NLZXkCFnN0YWtpbmdDb250cmFjdEFkZHJlc3MACmJsb2NrTWV0YUsCCGJsb2NrXzB4ABFmaW5hbGl6ZWRCbG9ja0tleQIOZmluYWxpemVkQmxvY2sACnRva2VuSWRLZXkCB3Rva2VuSWQAEmVsQnJpZGdlQWRkcmVzc0tleQIPZWxCcmlkZ2VBZGRyZXNzABNwcmV2UmFuZGFvSGVpZ2h0S2V5AhBwcmV2UmFuZGFvSGVpZ2h0ABdlbFRvQ2xUcmFuc2ZlcnNFcG9jaEtleQIUZWxUb0NsVHJhbnNmZXJzRXBvY2gBA3BhZAEBaQQBcwkApAMBBQFpBAckbWF0Y2gwCQCxAgEFAXMDCQAAAgABBQckbWF0Y2gwCQCsAgICBzAwMDAwMDAFAXMDCQAAAgACBQckbWF0Y2gwCQCsAgICBjAwMDAwMAUBcwMJAAACAAMFByRtYXRjaDAJAKwCAgIFMDAwMDAFAXMDCQAAAgAEBQckbWF0Y2gwCQCsAgICBDAwMDAFAXMDCQAAAgAFBQckbWF0Y2gwCQCsAgICAzAwMAUBcwMJAAACAAYFByRtYXRjaDAJAKwCAgICMDAFAXMDCQAAAgAHBQckbWF0Y2gwCQCsAgICATAFAXMFAXMBF2Jsb2NrRWxUb0NsVHJhbnNmZXJzS2V5AQxibG9ja0hhc2hIZXgJAKwCAgISZWxUb0NsVHJhbnNmZXJzXzB4BQxibG9ja0hhc2hIZXgBDGVwb2NoTWV0YUtleQEFZXBvY2gJAKwCAgIGZXBvY2hfCQEDcGFkAQUFZXBvY2gBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQdjaGFpbklkCQCsAgIJAKwCAgIFY2hhaW4JAKQDAQUHY2hhaW5JZAIKRmlyc3RCbG9jawEMY2hhaW5NZXRhS2V5AQdjaGFpbklkCQCsAgICBmNoYWluXwkBA3BhZAEFB2NoYWluSWQBEmNoYWluTGFzdEhlaWdodEtleQIHY2hhaW5JZAVtaW5lcgkArAICCQCsAgIJAKwCAgIGY2hhaW5fCQEDcGFkAQUHY2hhaW5JZAIBXwkApQgBBQVtaW5lcgEUY2hhaW5Gb3JrZWRIZWlnaHRLZXkBB2NoYWluSWQJAKwCAgkArAICAgZjaGFpbl8JAQNwYWQBBQdjaGFpbklkAgxGb3JrZWRIZWlnaHQBDXN1cHBvcnRlcnNLZXkBB2NoYWluSWQJAKwCAgkArAICAgVjaGFpbgkApAMBBQdjaGFpbklkAgpTdXBwb3J0ZXJzARVtaW5lclJld2FyZEFkZHJlc3NLZXkBCW1pbmVyQWRkcgkArAICCQCsAgICBm1pbmVyXwUJbWluZXJBZGRyAg5fUmV3YXJkQWRkcmVzcwEKbWluZXJQa0tleQENcmV3YXJkQWRkcmVzcwkArAICCQCsAgICCG1pbmVyXzB4BQ1yZXdhcmRBZGRyZXNzAgNfUEsBD21pbmVyQ2hhaW5JZEtleQEFbWluZXIJAKwCAgkArAICAgZtaW5lcl8JAKUIAQUFbWluZXICCF9DaGFpbklkABRlbFRvQ2xUcmFuc2ZlcnNFcG9jaAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRdlbFRvQ2xUcmFuc2ZlcnNFcG9jaEtleQUHSU5UX01BWAEecmVxdWlyZUVsVG9DbFRyYW5zZmVyc0Rpc2FibGVkAAMJAGYCBRRlbFRvQ2xUcmFuc2ZlcnNFcG9jaAUGaGVpZ2h0BQR1bml0CQACAQkArAICCQCsAgICJ0VMIHRvIENMIHRyYW5zZmVycyBhY3RpdmF0ZWQgb24gZXBvY2ggIwkApAMBBQZoZWlnaHQCFS4gVXBncmFkZSB5b3VyIGNsaWVudAEdcmVxdWlyZUVsVG9DbFRyYW5zZmVyc0VuYWJsZWQAAwkAZwIFBmhlaWdodAUUZWxUb0NsVHJhbnNmZXJzRXBvY2gFBHVuaXQJAAIBCQCsAgIJAKwCAgkArAICAi9FTCB0byBDTCB0cmFuc2ZlcnMgaGF2ZW4ndCBhY3RpdmF0ZWQgb24gZXBvY2ggIwkApAMBBQZoZWlnaHQCGi4gV2FpdCBmb3IgYWN0aXZhdGlvbiBvbiAjCQCkAwEFFGVsVG9DbFRyYW5zZmVyc0Vwb2NoABZzdGFraW5nQ29udHJhY3RBZGRyZXNzBAckbWF0Y2gwCQCdCAIFBHRoaXMFGXN0YWtpbmdDb250cmFjdEFkZHJlc3NLZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUBcwkArAICAiJpbnZhbGlkIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzczogBQFzCQEHQWRkcmVzcwEJARFAZXh0ck5hdGl2ZSgxMDUyKQIFBHRoaXMFGXN0YWtpbmdDb250cmFjdEFkZHJlc3NLZXkBEWdlbmVyYXRpbmdCYWxhbmNlAQdhZGRyZXNzBAckbWF0Y2gwCQCdCAIFFnN0YWtpbmdDb250cmFjdEFkZHJlc3MJAKwCAgIEJXNfXwkApQgBBQdhZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQDc3RyBQckbWF0Y2gwBAlwYXJhbUxpc3QJALUJAgUDc3RyAgJfXwQKcHJldkhlaWdodAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCXBhcmFtTGlzdAABBAtwcmV2QmFsYW5jZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCXBhcmFtTGlzdAACBApuZXh0SGVpZ2h0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJcGFyYW1MaXN0AAMEC25leHRCYWxhbmNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJcGFyYW1MaXN0AAQDCQBnAgUGaGVpZ2h0BQpuZXh0SGVpZ2h0BQtuZXh0QmFsYW5jZQMJAGcCBQZoZWlnaHQFCnByZXZIZWlnaHQFC3ByZXZCYWxhbmNlAAAAAAEJY2hhaW5NZXRhAQdjaGFpbklkBAFzCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEMY2hhaW5NZXRhS2V5AQUHY2hhaW5JZAQFaXRlbXMJALUJAgUBcwUDU0VQCQCUCgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVpdGVtcwAACQCRAwIFBWl0ZW1zAAEAC21haW5DaGFpbklkCQELdmFsdWVPckVsc2UCCQCfCAEFDm1haW5DaGFpbklkS2V5AAAACyR0MDQ5MTE0OTc3CQEJY2hhaW5NZXRhAQULbWFpbkNoYWluSWQAD21haW5DaGFpbkhlaWdodAgFCyR0MDQ5MTE0OTc3Al8xABJtYWluQ2hhaW5MYXN0QmxvY2sIBQskdDA0OTExNDk3NwJfMgEJZXBvY2hNZXRhAQVlcG9jaAQHJG1hdGNoMAkAoggBCQEMZXBvY2hNZXRhS2V5AQUFZXBvY2gDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBAlmcmFnbWVudHMJALUJAgUBcwUDU0VQCQCVCgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUJZnJhZ21lbnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmcmFnbWVudHMAAQkAkQMCBQlmcmFnbWVudHMAAgUEdW5pdAALJHQwNTIwODU2NzIEByRtYXRjaDAJAQllcG9jaE1ldGEBBQZoZWlnaHQDCQABAgUHJG1hdGNoMAIWKEFkZHJlc3MsIEludCwgU3RyaW5nKQQBbQUHJG1hdGNoMAUBbQQHJG1hdGNoMQkAoggBBRB0aGlzRXBvY2hEYXRhS2V5AwkAAQIFByRtYXRjaDECBlN0cmluZwQQcmF3VGhpc0Vwb2NoRGF0YQUHJG1hdGNoMQQNdGhpc0Vwb2NoRGF0YQkAtQkCBRByYXdUaGlzRXBvY2hEYXRhBQNTRVAECXRoaXNFcG9jaAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDXRoaXNFcG9jaERhdGEAAAkAlQoDAwkAAAIFCXRoaXNFcG9jaAUGaGVpZ2h0CQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFDXRoaXNFcG9jaERhdGEAAQUEdW5pdAAAAgAJAJUKAwUEdW5pdAAAAgAADnRoaXNFcG9jaE1pbmVyCAULJHQwNTIwODU2NzICXzEADHRoaXNFcG9jaFJlZggFCyR0MDUyMDg1NjcyAl8yABJ0aGlzRXBvY2hMYXN0QmxvY2sIBQskdDA1MjA4NTY3MgJfMwAMYWxsTWluZXJzU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFDGFsbE1pbmVyc0tleQIAAAlhbGxNaW5lcnMEByRtYXRjaDAFDGFsbE1pbmVyc1N0cgMJAAACAgAFByRtYXRjaDAFA25pbAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEA3JhdwUHJG1hdGNoMAkAvAkCBQNyYXcFA1NFUAkAAgECC01hdGNoIGVycm9yAQlibG9ja01ldGEBB2Jsb2NrSWQEBG1ldGEJARFAZXh0ck5hdGl2ZSgxMDU3KQEJAKwCAgUKYmxvY2tNZXRhSwUHYmxvY2tJZAQLYmxvY2tIZWlnaHQJALEJAQUEbWV0YQQKYmxvY2tFcG9jaAkAsgkCBQRtZXRhAAgEC2Jsb2NrUGFyZW50CQDJAQIJAMoBAgUEbWV0YQAQBQ9CTE9DS19IQVNIX1NJWkUEDmJsb2NrR2VuZXJhdG9yCQDJAQIJAMoBAgUEbWV0YQkAZAIAEAUPQkxPQ0tfSEFTSF9TSVpFBQxBRERSRVNTX1NJWkUDCQBmAgUUZWxUb0NsVHJhbnNmZXJzRXBvY2gFCmJsb2NrRXBvY2gJAJgKBgULYmxvY2tIZWlnaHQFCmJsb2NrRXBvY2gFC2Jsb2NrUGFyZW50BQ5ibG9ja0dlbmVyYXRvcgAAAQAEB2NoYWluSWQJALEJAQkAygECBQRtZXRhCQBkAgkAZAIAEAUPQkxPQ0tfSEFTSF9TSVpFBQxBRERSRVNTX1NJWkUEF2VsVG9DbFRyYW5zZmVyc1Jvb3RIYXNoCQDKAQIFBG1ldGEJAGQCCQBkAgAYBQ9CTE9DS19IQVNIX1NJWkUFDEFERFJFU1NfU0laRQkAmAoGBQtibG9ja0hlaWdodAUKYmxvY2tFcG9jaAULYmxvY2tQYXJlbnQFDmJsb2NrR2VuZXJhdG9yBQdjaGFpbklkBRdlbFRvQ2xUcmFuc2ZlcnNSb290SGFzaAEQbWtCbG9ja01ldGFFbnRyeQYMYmxvY2tIYXNoSGV4C2Jsb2NrSGVpZ2h0DmJsb2NrUGFyZW50SGV4DmJsb2NrR2VuZXJhdG9yB2NoYWluSWQaZWxUb0NsVHJhbnNmZXJzUm9vdEhhc2hIZXgED2Jsb2NrRXBvY2hCeXRlcwkAmgMBBQZoZWlnaHQEDmJsb2NrTWV0YUJ5dGVzCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgkAmgMBBQtibG9ja0hlaWdodAUPYmxvY2tFcG9jaEJ5dGVzCQDdBAEFDmJsb2NrUGFyZW50SGV4CAUOYmxvY2tHZW5lcmF0b3IFYnl0ZXMJAJoDAQUHY2hhaW5JZAkA3QQBBRplbFRvQ2xUcmFuc2ZlcnNSb290SGFzaEhleAkBC0JpbmFyeUVudHJ5AgkArAICBQpibG9ja01ldGFLBQxibG9ja0hhc2hIZXgFDmJsb2NrTWV0YUJ5dGVzAQxsYXN0SGVpZ2h0QnkCBW1pbmVyB2NoYWluSWQEByRtYXRjaDAJAJ8IAQkBEmNoYWluTGFzdEhlaWdodEtleQIFB2NoYWluSWQFBW1pbmVyAwkAAQIFByRtYXRjaDACA0ludAQBaAUHJG1hdGNoMAUBaAQJYmxvY2tIYXNoCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIJAKwCAgkArAICAgVjaGFpbgkApAMBBQdjaGFpbklkAgtMYXN0TWluZWRCeQkApQgBBQVtaW5lcggJAQlibG9ja01ldGEBBQlibG9ja0hhc2gCXzEACyR0MDczMjA4Mjg2BAloaXRTb3VyY2UEByRtYXRjaDAIBQlsYXN0QmxvY2sDdnJmAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA3ZyZgUHJG1hdGNoMAUDdnJmCAUJbGFzdEJsb2NrE2dlbmVyYXRpb25TaWduYXR1cmUKAQxwcm9jZXNzTWluZXICBHByZXYFbWluZXIECyR0MDc2MTg3NjgxBQRwcmV2BAlwcmV2RGVsYXkIBQskdDA3NjE4NzY4MQJfMQQJcHJldk1pbmVyCAULJHQwNzYxODc2ODECXzIEEHByZXZUb3RhbEJhbGFuY2UIBQskdDA3NjE4NzY4MQJfMwQKcHJldk1pbmVycwgFCyR0MDc2MTg3NjgxAl80BAxtaW5lckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW1pbmVyBA93YXZlc0dlbkJhbGFuY2UICQDvBwEFDG1pbmVyQWRkcmVzcwpnZW5lcmF0aW5nBAxtaW5lckJhbGFuY2UJARFnZW5lcmF0aW5nQmFsYW5jZQEFDG1pbmVyQWRkcmVzcwMDCQBmAgULTUlOX0JBTEFOQ0UFD3dhdmVzR2VuQmFsYW5jZQYJAGcCAAAFDG1pbmVyQmFsYW5jZQUEcHJldgQJbmV4dERlbGF5CQCFBwIFDG1pbmVyQWRkcmVzcwUMbWluZXJCYWxhbmNlAwkAZgIFCXByZXZEZWxheQUJbmV4dERlbGF5CQCWCgQFCW5leHREZWxheQUFbWluZXIJAGQCBRBwcmV2VG90YWxCYWxhbmNlBQxtaW5lckJhbGFuY2UJAM0IAgUKcHJldk1pbmVycwUFbWluZXIJAJYKBAUJcHJldkRlbGF5BQlwcmV2TWluZXIJAGQCBRBwcmV2VG90YWxCYWxhbmNlBQxtaW5lckJhbGFuY2UJAM0IAgUKcHJldk1pbmVycwUFbWluZXIKAAIkbAUJYWxsTWluZXJzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQdJTlRfTUFYAgAAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxwcm9jZXNzTWluZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgANY29tcHV0ZWREZWxheQgFCyR0MDczMjA4Mjg2Al8xABFjb21wdXRlZEdlbmVyYXRvcggFCyR0MDczMjA4Mjg2Al8yABRjb21wdXRlZFRvdGFsQmFsYW5jZQgFCyR0MDczMjA4Mjg2Al8zAA5maWx0ZXJlZE1pbmVycwgFCyR0MDczMjA4Mjg2Al80ARNnZXRDaGFpbkxhc3RCbG9ja0lkAQdjaGFpbklkCAkBCWNoYWluTWV0YQEFB2NoYWluSWQCXzIACyR0MDgzNTI4NDg3CQEJYmxvY2tNZXRhAQUSbWFpbkNoYWluTGFzdEJsb2NrAAxtY2xiSWdub3JlZDEIBQskdDA4MzUyODQ4NwJfMQAObWFpbkNoYWluRXBvY2gIBQskdDA4MzUyODQ4NwJfMgATbWFpbkNoYWluUGFyZW50SGFzaAgFCyR0MDgzNTI4NDg3Al8zABJtYWluQ2hhaW5HZW5lcmF0b3IIBQskdDA4MzUyODQ4NwJfNAAMbWNsYklnbm9yZWQyCAULJHQwODM1Mjg0ODcCXzUADG1jbGJJZ25vcmVkMwgFCyR0MDgzNTI4NDg3Al82ARtjYWxjdWxhdGVGaW5hbGl6ZWRCbG9ja0hhc2gDCGN1ck1pbmVyDGN1clByZXZFcG9jaBBjdXJMYXN0QmxvY2tIYXNoBAtvZmZzZXRzXzEwMAkAvAkCAmQ6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6AgAEC2hhbGZCYWxhbmNlCQBpAgUUY29tcHV0ZWRUb3RhbEJhbGFuY2UAAgoBBHN0ZXACBHByZXYEbmV4dAQLJHQwODg1Mzg5MTcFBHByZXYECXRoaXNFcG9jaAgFCyR0MDg4NTM4OTE3Al8xBAx0b3RhbEJhbGFuY2UIBQskdDA4ODUzODkxNwJfMgQObWF5YmVTYWZlRXBvY2gIBQskdDA4ODUzODkxNwJfMwQKcHJldk1pbmVycwgFCyR0MDg4NTM4OTE3Al80BAckbWF0Y2gwBQ5tYXliZVNhZmVFcG9jaAMJAAECBQckbWF0Y2gwAgRVbml0BAskdDA4OTc1OTE0MQMJAAACBQl0aGlzRXBvY2gFBmhlaWdodAkAlQoDBQhjdXJNaW5lcgUMY3VyUHJldkVwb2NoBRBjdXJMYXN0QmxvY2tIYXNoCQEFdmFsdWUBCQEJZXBvY2hNZXRhAQUJdGhpc0Vwb2NoBAVtaW5lcggFCyR0MDg5NzU5MTQxAl8xBAlwcmV2RXBvY2gIBQskdDA4OTc1OTE0MQJfMgQNbGFzdEJsb2NrSGFzaAgFCyR0MDg5NzU5MTQxAl8zAwkAAAIFCXByZXZFcG9jaAAACQCWCgQFCXRoaXNFcG9jaAUMdG90YWxCYWxhbmNlBQ1sYXN0QmxvY2tIYXNoBQlhbGxNaW5lcnMECyR0MDkyNjY5NDY4AwkBD2NvbnRhaW5zRWxlbWVudAIFCnByZXZNaW5lcnMFBW1pbmVyCQCUCgIFDHRvdGFsQmFsYW5jZQUKcHJldk1pbmVycwkAlAoCCQBkAgUMdG90YWxCYWxhbmNlCQERZ2VuZXJhdGluZ0JhbGFuY2UBBQVtaW5lcgkAzAgCBQVtaW5lcgUKcHJldk1pbmVycwQPbmV3VG90YWxCYWxhbmNlCAULJHQwOTI2Njk0NjgCXzEECW5ld01pbmVycwgFCyR0MDkyNjY5NDY4Al8yAwkAZgIFD25ld1RvdGFsQmFsYW5jZQULaGFsZkJhbGFuY2UJAJYKBAUJdGhpc0Vwb2NoBQ9uZXdUb3RhbEJhbGFuY2UFDWxhc3RCbG9ja0hhc2gFCWFsbE1pbmVycwkAlgoEBQlwcmV2RXBvY2gFD25ld1RvdGFsQmFsYW5jZQUEdW5pdAUJbmV3TWluZXJzBQRwcmV2BAskdDA5NzAxOTgzNAoAAiRsCQDOCAIFC29mZnNldHNfMTAwBQtvZmZzZXRzXzEwMAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUGaGVpZ2h0AAAFBHVuaXQFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEc3RlcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMjAwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgAEAgQEAggEAgwEAhAEAhQEAhgEAhwEAiAEAiQEAigEAiwEAjAEAjQEAjgEAjwEAkAEAkQEAkgEAkwEAlAEAlQEAlgEAlwEAmAEAmQEAmgEAmwEAnAEAnQEAngEAnwEAoAEAoQEAogEAowEApAEApQEApgEApwEAqAEAqQEAqgEAqwEArAEArQEArgEArwEAsAEAsQEAsgEAswEAtAEAtQEAtgEAtwEAuAEAuQEAugEAuwEAvAEAvQEAvgEAvwEAwAEAwQEAwgEAwwEAxAEAxQEAxgEAxwEAyAEEDWZhbGxiYWNrRXBvY2gIBQskdDA5NzAxOTgzNAJfMQQMdG90YWxCYWxhbmNlCAULJHQwOTcwMTk4MzQCXzIEFWZpbmFsaXplZEJsb2NrSGFzaE9wdAgFCyR0MDk3MDE5ODM0Al8zBAZtaW5lcnMIBQskdDA5NzAxOTgzNAJfNAQHJG1hdGNoMAUVZmluYWxpemVkQmxvY2tIYXNoT3B0AwkAAQIFByRtYXRjaDACBlN0cmluZwQSZmluYWxpemVkQmxvY2tIYXNoBQckbWF0Y2gwBRJmaW5hbGl6ZWRCbG9ja0hhc2gICQEFdmFsdWUBCQEJZXBvY2hNZXRhAQUNZmFsbGJhY2tFcG9jaAJfMwERc3VwcG9ydGluZ0JhbGFuY2UBB2NoYWluSWQKAQphZGRCYWxhbmNlAgNhY2MMZ2VuZXJhdG9yU3RyBA0kdDAxMDEwNDEwMTQwBQNhY2MEDHRvdGFsQmFsYW5jZQgFDSR0MDEwMTA0MTAxNDACXzEECmdlbmVyYXRvcnMIBQ0kdDAxMDEwNDEwMTQwAl8yBAlnZW5lcmF0b3IJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDGdlbmVyYXRvclN0cgMJAQ9jb250YWluc0VsZW1lbnQCBQpnZW5lcmF0b3JzBQlnZW5lcmF0b3IFA2FjYwQHYmFsYW5jZQkBEWdlbmVyYXRpbmdCYWxhbmNlAQUJZ2VuZXJhdG9yCQCUCgIJAGQCBQx0b3RhbEJhbGFuY2UFB2JhbGFuY2UJAM0IAgUKZ2VuZXJhdG9ycwUJZ2VuZXJhdG9yBA1hbGxHZW5lcmF0b3JzCQC8CQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQ1zdXBwb3J0ZXJzS2V5AQUHY2hhaW5JZAUDU0VQBA0kdDAxMDQ2MjEwNTI3CgACJGwFDWFsbEdlbmVyYXRvcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQphZGRCYWxhbmNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAQHYmFsYW5jZQgFDSR0MDEwNDYyMTA1MjcCXzEEAl9nCAUNJHQwMTA0NjIxMDUyNwJfMgUHYmFsYW5jZQEPaXNDb250cmFjdFNldHVwAAkBCWlzRGVmaW5lZAEJAJ8IAQUObWluZXJSZXdhcmRLZXkBEWVuc3VyZU1pbmluZ0Vwb2NoAQlnZW5lcmF0b3IDCQECIT0CCQClCAEFCWdlbmVyYXRvcgURY29tcHV0ZWRHZW5lcmF0b3IJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJANgEAQgFCWdlbmVyYXRvcgVieXRlcwIbIGlzIG5vdCBhbGxvd2VkIHRvIG1pbmUgaW4gCQCkAwEFBmhlaWdodAIRIGVwb2NoLiBFeHBlY3RlZCAFEWNvbXB1dGVkR2VuZXJhdG9yBQR1bml0ARJpc1JlZmVyZW5jZUNvcnJlY3QCCXJlZmVyZW5jZQlsYXN0QmxvY2sDCQAAAgUJcmVmZXJlbmNlBQlsYXN0QmxvY2sFBHVuaXQJAAIBCQCsAgIJAKwCAgkArAICAjBFeHBlY3RlZCBhIHJlZmVyZW5jZSB0byB0aGUgY2hhaW4gbGFzdCBibG9jazogMHgFCWxhc3RCbG9jawIJLiBHb3Q6IDB4BQlyZWZlcmVuY2UBD2NoYWluSXNJbmFjdGl2ZQEHY2hhaW5JZAQMZmlyc3RCbG9ja0lkCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEUY2hhaW5GaXJzdEJsb2NrSWRLZXkBBQdjaGFpbklkBBRmaXJzdFZhbGlkQWx0Q2hhaW5JZAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRdmaXJzdFZhbGlkQWx0Q2hhaW5JZEtleQAAAwkAZgIFFGZpcnN0VmFsaWRBbHRDaGFpbklkBQdjaGFpbklkBgkAZgIICQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkCXzEICQEJYmxvY2tNZXRhAQUMZmlyc3RCbG9ja0lkAl8xAQxtaW5lckNoYWluSWQBBW1pbmVyCQELdmFsdWVPckVsc2UCCQCfCAEJAQ9taW5lckNoYWluSWRLZXkBBQVtaW5lcgkAnwgBCQCsAgICCWNoYWluSWRPZgkApQgBBQVtaW5lcgEdZW5zdXJlRXhwZWN0ZWRPckluYWN0aXZlQ2hhaW4DCWdlbmVyYXRvcg9leHBlY3RlZENoYWluSWQQY2hlY2tIZWlnaHRCbG9jawQPaGVpZ2h0SXNDb3JyZWN0BAckbWF0Y2gwBRBjaGVja0hlaWdodEJsb2NrAwkAAQIFByRtYXRjaDACBlN0cmluZwQJYmxvY2tIYXNoBQckbWF0Y2gwBBRsYXN0TWluZWRCbG9ja0hlaWdodAkBDGxhc3RIZWlnaHRCeQIFCWdlbmVyYXRvcgULbWFpbkNoYWluSWQJAGYCCQBkAggJAQlibG9ja01ldGEBBQlibG9ja0hhc2gCXzEAAQUUbGFzdE1pbmVkQmxvY2tIZWlnaHQGBAckbWF0Y2gwCQEMbWluZXJDaGFpbklkAQUJZ2VuZXJhdG9yAwkAAQIFByRtYXRjaDACA0ludAQJY3VycmVudElkBQckbWF0Y2gwAwMJAAACBQljdXJyZW50SWQFD2V4cGVjdGVkQ2hhaW5JZAYDCQEPY2hhaW5Jc0luYWN0aXZlAQUJY3VycmVudElkBQ9oZWlnaHRJc0NvcnJlY3QHBQR1bml0CQACAQkArAICAhxtaW5lciBpcyBtaW5pbmcgb3RoZXIgY2hhaW4gCQCkAwEFCWN1cnJlbnRJZAUEdW5pdAESZW5zdXJlQ29ycmVjdEVwb2NoAQVlcG9jaAMJAAACBQVlcG9jaAUGaGVpZ2h0BQR1bml0CQACAQkArAICCQCsAgIJAKwCAgIaRXhwZWN0ZWQgYmxvY2sgZnJvbSBlcG9jaCAJAKQDAQUGaGVpZ2h0AgYuIEdvdCAJAKQDAQUFZXBvY2gBDGFkZFN1cHBvcnRlcgIHY2hhaW5JZAlnZW5lcmF0b3IEDXN1cHBvcnRlcnNTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQ1zdXBwb3J0ZXJzS2V5AQUHY2hhaW5JZAQKc3VwcG9ydGVycwkAvAkCBQ1zdXBwb3J0ZXJzU3RyBQNTRVADCQEPY29udGFpbnNFbGVtZW50AgUKc3VwcG9ydGVycwkApQgBBQlnZW5lcmF0b3IFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQENc3VwcG9ydGVyc0tleQEFB2NoYWluSWQJAKwCAgkArAICBQ1zdXBwb3J0ZXJzU3RyBQNTRVAJAKUIAQUJZ2VuZXJhdG9yBQNuaWwBCXNldE9yRmFpbAIFZmxhZ3MFaW5kZXgDCQBmAgAABQVpbmRleAkAAgEJAKwCAgIiQ2FuJ3Qgd2l0aGRyYXcgYXQgbmVnYXRpdmUgaW5kZXg6IAkApAMBBQVpbmRleAQJZmxhZ3NTaXplCQCxAgEFBWZsYWdzAwkAZwIFBWluZGV4BQlmbGFnc1NpemUECWFkZFplcm9lcwkAZQIFBWluZGV4BQlmbGFnc1NpemUDCQBmAgUJYWRkWmVyb2VzCQCxAgEFCXplcm9lc1N0cgkAAgEJAKwCAgkArAICAgpDYW4ndCBhZGQgCQCkAwEFCWFkZFplcm9lcwIlIGVtcHR5IGZsYWdzLiBDb250YWN0IHdpdGggZGV2ZWxvcGVycwkArAICCQCsAgIFBWZsYWdzCQCvAgIFCXplcm9lc1N0cgUJYWRkWmVyb2VzAgExBAR0YWlsCQCwAgIFBWZsYWdzBQVpbmRleAQHYXRJbmRleAkArwICBQR0YWlsAAEDCQAAAgUHYXRJbmRleAIBMAkArAICCQCsAgIJAK8CAgUFZmxhZ3MFBWluZGV4AgExCQCwAgIFBHRhaWwAAQkAAgEJAKwCAgkArAICAgpUcmFuc2ZlciAjCQCkAwEFBWluZGV4AhcgaGFzIGJlZW4gYWxyZWFkeSB0YWtlbgERdmFsaWRhdGVCbG9ja0hhc2gBBmhleFN0cgQMZGVjb2RlZEJ5dGVzCQDdBAEFBmhleFN0cgMJAQIhPQIJAMgBAQUMZGVjb2RlZEJ5dGVzACAJAAIBAhdpbnZhbGlkIGJsb2NrIGlkIGxlbmd0aAUGaGV4U3RyAR1nZXRVcGRhdGVGaW5hbGl6ZWRCbG9ja0FjdGlvbgMGY2FsbGVyD25ld0Jsb2NrSGFzaEhleAlwcmV2RXBvY2gEF2N1ckZpbmFsaXplZEJsb2NrSGVpZ2h0CAkBCWJsb2NrTWV0YQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFEWZpbmFsaXplZEJsb2NrS2V5Al8xBBVuZXdGaW5hbGl6ZWRCbG9ja0hhc2gJARtjYWxjdWxhdGVGaW5hbGl6ZWRCbG9ja0hhc2gDBQZjYWxsZXIFCXByZXZFcG9jaAUPbmV3QmxvY2tIYXNoSGV4AwMJAAACBRVuZXdGaW5hbGl6ZWRCbG9ja0hhc2gFD25ld0Jsb2NrSGFzaEhleAYJAGYCCAkBCWJsb2NrTWV0YQEFFW5ld0ZpbmFsaXplZEJsb2NrSGFzaAJfMQUXY3VyRmluYWxpemVkQmxvY2tIZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgURZmluYWxpemVkQmxvY2tLZXkFFW5ld0ZpbmFsaXplZEJsb2NrSGFzaAUDbmlsBQNuaWwNAWkBC2FwcGVuZEJsb2NrAgxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BAxjaGVja1ZlcnNpb24JAR5yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRGlzYWJsZWQAAwkAAAIFDGNoZWNrVmVyc2lvbgUMY2hlY2tWZXJzaW9uAwkBAiE9AgUOdGhpc0Vwb2NoTWluZXIIBQFpDG9yaWdpbkNhbGxlcgQHJG1hdGNoMAUOdGhpc0Vwb2NoTWluZXIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQKZXBvY2hNaW5lcgUHJG1hdGNoMAkAAgEJAKwCAgI5bm90IGFsbG93ZWQgdG8gZm9yZ2UgYmxvY2tzIGluIHRoaXMgZXBvY2gsIGV4cGVjdGVkIGZyb20gCQClCAEFCmVwb2NoTWluZXIJAAIBAkBub3QgYWxsb3dlZCB0byBmb3JnZSBibG9ja3MgaW4gdGhpcyBlcG9jaCwgZXBvY2ggbWluZXIgaXMgYWJzZW50BAdjaGFpbklkCQELdmFsdWVPckVsc2UCCQEMbWluZXJDaGFpbklkAQgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAQNJHQwMTQ2NDQxNDY5NQkBCWNoYWluTWV0YQEFB2NoYWluSWQEC2NoYWluSGVpZ2h0CAUNJHQwMTQ2NDQxNDY5NQJfMQQLbGFzdEJsb2NrSWQIBQ0kdDAxNDY0NDE0Njk1Al8yBA5jaGVja1JlZmVyZW5jZQkBEmlzUmVmZXJlbmNlQ29ycmVjdAIFDHJlZmVyZW5jZUhleAULbGFzdEJsb2NrSWQDCQAAAgUOY2hlY2tSZWZlcmVuY2UFDmNoZWNrUmVmZXJlbmNlBA5uZXdDaGFpbkhlaWdodAkAZAIFC2NoYWluSGVpZ2h0AAEEDG5ld0Jsb2NrTWV0YQkAywECCQDLAQIJAMsBAgkAmgMBBQ5uZXdDaGFpbkhlaWdodAkAmgMBBQZoZWlnaHQJAN0EAQULbGFzdEJsb2NrSWQICAUBaQxvcmlnaW5DYWxsZXIFYnl0ZXMEDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoCQDMCAIJAQtCaW5hcnlFbnRyeQIJAKwCAgUKYmxvY2tNZXRhSwUMYmxvY2tIYXNoSGV4BQxuZXdCbG9ja01ldGEJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQdjaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxjaGFpbk1ldGFLZXkBBQdjaGFpbklkCQCsAgIJAKwCAgkApAMBBQ5uZXdDaGFpbkhlaWdodAUDU0VQBQxibG9ja0hhc2hIZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGVwb2NoTWV0YUtleQEFBmhlaWdodAkArAICCQCsAgIJAKwCAgkArAICCQClCAEJAQV2YWx1ZQEFDnRoaXNFcG9jaE1pbmVyBQNTRVAJAKQDAQUMdGhpc0Vwb2NoUmVmBQNTRVAFDGJsb2NrSGFzaEhleAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmFwcGVuZEJsb2NrX3YyAwxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4GmVsVG9DbFRyYW5zZmVyc1Jvb3RIYXNoSGV4BAxjaGVja1ZlcnNpb24JAR1yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRW5hYmxlZAADCQAAAgUMY2hlY2tWZXJzaW9uBQxjaGVja1ZlcnNpb24DCQECIT0CBQ50aGlzRXBvY2hNaW5lcggFAWkMb3JpZ2luQ2FsbGVyBAckbWF0Y2gwBQ50aGlzRXBvY2hNaW5lcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAplcG9jaE1pbmVyBQckbWF0Y2gwCQACAQkArAICAjlub3QgYWxsb3dlZCB0byBmb3JnZSBibG9ja3MgaW4gdGhpcyBlcG9jaCwgZXhwZWN0ZWQgZnJvbSAJAKUIAQUKZXBvY2hNaW5lcgkAAgECQG5vdCBhbGxvd2VkIHRvIGZvcmdlIGJsb2NrcyBpbiB0aGlzIGVwb2NoLCBlcG9jaCBtaW5lciBpcyBhYnNlbnQEB2NoYWluSWQJAQt2YWx1ZU9yRWxzZQIJAQxtaW5lckNoYWluSWQBCAUBaQxvcmlnaW5DYWxsZXIFC21haW5DaGFpbklkBA0kdDAxNTk2OTE2MDIwCQEJY2hhaW5NZXRhAQUHY2hhaW5JZAQLY2hhaW5IZWlnaHQIBQ0kdDAxNTk2OTE2MDIwAl8xBAtsYXN0QmxvY2tJZAgFDSR0MDE1OTY5MTYwMjACXzIEDmNoZWNrUmVmZXJlbmNlCQESaXNSZWZlcmVuY2VDb3JyZWN0AgUMcmVmZXJlbmNlSGV4BQtsYXN0QmxvY2tJZAMJAAACBQ5jaGVja1JlZmVyZW5jZQUOY2hlY2tSZWZlcmVuY2UEDm5ld0NoYWluSGVpZ2h0CQBkAgULY2hhaW5IZWlnaHQAAQQOY2hlY2tCbG9ja0hhc2gJARF2YWxpZGF0ZUJsb2NrSGFzaAEFDGJsb2NrSGFzaEhleAMJAAACBQ5jaGVja0Jsb2NrSGFzaAUOY2hlY2tCbG9ja0hhc2gJAMwIAgkBEG1rQmxvY2tNZXRhRW50cnkGBQxibG9ja0hhc2hIZXgFDm5ld0NoYWluSGVpZ2h0BQtsYXN0QmxvY2tJZAgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkBRplbFRvQ2xUcmFuc2ZlcnNSb290SGFzaEhleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmNoYWluTGFzdEhlaWdodEtleQIFB2NoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGNoYWluTWV0YUtleQEFB2NoYWluSWQJAKwCAgkArAICCQCkAwEFDm5ld0NoYWluSGVpZ2h0BQNTRVAFDGJsb2NrSGFzaEhleAkAzAgCCQELU3RyaW5nRW50cnkCCQEMZXBvY2hNZXRhS2V5AQUGaGVpZ2h0CQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQkBBXZhbHVlAQUOdGhpc0Vwb2NoTWluZXIFA1NFUAkApAMBBQx0aGlzRXBvY2hSZWYFA1NFUAUMYmxvY2tIYXNoSGV4BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPZXh0ZW5kTWFpbkNoYWluAwxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BWVwb2NoBAxjaGVja1ZlcnNpb24JAR5yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRGlzYWJsZWQAAwkAAAIFDGNoZWNrVmVyc2lvbgUMY2hlY2tWZXJzaW9uBA5jaGVja0Jsb2NrSGFzaAkBEXZhbGlkYXRlQmxvY2tIYXNoAQUMYmxvY2tIYXNoSGV4AwkAAAIFDmNoZWNrQmxvY2tIYXNoBQ5jaGVja0Jsb2NrSGFzaAQKY2hlY2tFcG9jaAkBEmVuc3VyZUNvcnJlY3RFcG9jaAEFBWVwb2NoAwkAAAIFCmNoZWNrRXBvY2gFCmNoZWNrRXBvY2gEDmNoZWNrR2VuZXJhdG9yCQERZW5zdXJlTWluaW5nRXBvY2gBCAUBaQxvcmlnaW5DYWxsZXIDCQAAAgUOY2hlY2tHZW5lcmF0b3IFDmNoZWNrR2VuZXJhdG9yBApjaGVja0NoYWluCQEdZW5zdXJlRXhwZWN0ZWRPckluYWN0aXZlQ2hhaW4DCAUBaQxvcmlnaW5DYWxsZXIFC21haW5DaGFpbklkBQR1bml0AwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4EDmNoZWNrUmVmZXJlbmNlCQESaXNSZWZlcmVuY2VDb3JyZWN0AgUMcmVmZXJlbmNlSGV4BRJtYWluQ2hhaW5MYXN0QmxvY2sDCQAAAgUOY2hlY2tSZWZlcmVuY2UFDmNoZWNrUmVmZXJlbmNlBA10aGlzRXBvY2hNZXRhBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACBFVuaXQJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFA1NFUAkApAMBBQ5tYWluQ2hhaW5FcG9jaAUDU0VQBQxibG9ja0hhc2hIZXgEBW90aGVyBQckbWF0Y2gwCQACAQIVRXBvY2ggYWxyZWFkeSBzdGFydGVkBBR1cGRhdGVGaW5hbGl6ZWRCbG9jawkBHWdldFVwZGF0ZUZpbmFsaXplZEJsb2NrQWN0aW9uAwgFAWkMb3JpZ2luQ2FsbGVyBQxibG9ja0hhc2hIZXgFDm1haW5DaGFpbkVwb2NoBA5uZXdDaGFpbkhlaWdodAkAZAIFD21haW5DaGFpbkhlaWdodAABBAxuZXdCbG9ja01ldGEJAMsBAgkAywECCQDLAQIJAJoDAQUObmV3Q2hhaW5IZWlnaHQJAJoDAQUGaGVpZ2h0CQDdBAEFEm1haW5DaGFpbkxhc3RCbG9jawgIBQFpDG9yaWdpbkNhbGxlcgVieXRlcwkAzggCCQDMCAIJAQtCaW5hcnlFbnRyeQIJAKwCAgUKYmxvY2tNZXRhSwUMYmxvY2tIYXNoSGV4BQxuZXdCbG9ja01ldGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGNoYWluTWV0YUtleQEFC21haW5DaGFpbklkCQCsAgIJAKwCAgkApAMBBQ5uZXdDaGFpbkhlaWdodAUDU0VQBQxibG9ja0hhc2hIZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFC21haW5DaGFpbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgULbWFpbkNoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgUNdGhpc0Vwb2NoTWV0YQUDbmlsBRR1cGRhdGVGaW5hbGl6ZWRCbG9jawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJleHRlbmRNYWluQ2hhaW5fdjIEDGJsb2NrSGFzaEhleAxyZWZlcmVuY2VIZXgFZXBvY2gaZWxUb0NsVHJhbnNmZXJzUm9vdEhhc2hIZXgEDGNoZWNrVmVyc2lvbgkBHXJlcXVpcmVFbFRvQ2xUcmFuc2ZlcnNFbmFibGVkAAMJAAACBQxjaGVja1ZlcnNpb24FDGNoZWNrVmVyc2lvbgQOY2hlY2tCbG9ja0hhc2gJARF2YWxpZGF0ZUJsb2NrSGFzaAEFDGJsb2NrSGFzaEhleAMJAAACBQ5jaGVja0Jsb2NrSGFzaAUOY2hlY2tCbG9ja0hhc2gECmNoZWNrRXBvY2gJARJlbnN1cmVDb3JyZWN0RXBvY2gBBQVlcG9jaAMJAAACBQpjaGVja0Vwb2NoBQpjaGVja0Vwb2NoBA5jaGVja0dlbmVyYXRvcgkBEWVuc3VyZU1pbmluZ0Vwb2NoAQgFAWkMb3JpZ2luQ2FsbGVyAwkAAAIFDmNoZWNrR2VuZXJhdG9yBQ5jaGVja0dlbmVyYXRvcgQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAUEdW5pdAMJAAACBQpjaGVja0NoYWluBQpjaGVja0NoYWluBA5jaGVja1JlZmVyZW5jZQkBEmlzUmVmZXJlbmNlQ29ycmVjdAIFDHJlZmVyZW5jZUhleAUSbWFpbkNoYWluTGFzdEJsb2NrAwkAAAIFDmNoZWNrUmVmZXJlbmNlBQ5jaGVja1JlZmVyZW5jZQQNdGhpc0Vwb2NoTWV0YQQHJG1hdGNoMAkBCWVwb2NoTWV0YQEFBmhlaWdodAMJAAECBQckbWF0Y2gwAgRVbml0CQELU3RyaW5nRW50cnkCCQEMZXBvY2hNZXRhS2V5AQUGaGVpZ2h0CQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBQNTRVAJAKQDAQUObWFpbkNoYWluRXBvY2gFA1NFUAUMYmxvY2tIYXNoSGV4BAVvdGhlcgUHJG1hdGNoMAkAAgECFUVwb2NoIGFscmVhZHkgc3RhcnRlZAQUdXBkYXRlRmluYWxpemVkQmxvY2sJAR1nZXRVcGRhdGVGaW5hbGl6ZWRCbG9ja0FjdGlvbgMIBQFpDG9yaWdpbkNhbGxlcgUMYmxvY2tIYXNoSGV4BQ5tYWluQ2hhaW5FcG9jaAQObmV3Q2hhaW5IZWlnaHQJAGQCBQ9tYWluQ2hhaW5IZWlnaHQAAQkAzggCCQDMCAIJARBta0Jsb2NrTWV0YUVudHJ5BgUMYmxvY2tIYXNoSGV4BQ5uZXdDaGFpbkhlaWdodAUSbWFpbkNoYWluTGFzdEJsb2NrCAUBaQxvcmlnaW5DYWxsZXIFC21haW5DaGFpbklkBRplbFRvQ2xUcmFuc2ZlcnNSb290SGFzaEhleAkAzAgCCQELU3RyaW5nRW50cnkCCQEMY2hhaW5NZXRhS2V5AQULbWFpbkNoYWluSWQJAKwCAgkArAICCQCkAwEFDm5ld0NoYWluSGVpZ2h0BQNTRVAFDGJsb2NrSGFzaEhleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD21pbmVyQ2hhaW5JZEtleQEIBQFpDG9yaWdpbkNhbGxlcgULbWFpbkNoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQttYWluQ2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBQ5uZXdDaGFpbkhlaWdodAkAzAgCBQ10aGlzRXBvY2hNZXRhBQNuaWwFFHVwZGF0ZUZpbmFsaXplZEJsb2NrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDXN0YXJ0QWx0Q2hhaW4DDGJsb2NrSGFzaEhleAxyZWZlcmVuY2VIZXgFZXBvY2gEDGNoZWNrVmVyc2lvbgkBHnJlcXVpcmVFbFRvQ2xUcmFuc2ZlcnNEaXNhYmxlZAADCQAAAgUMY2hlY2tWZXJzaW9uBQxjaGVja1ZlcnNpb24EDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoBApjaGVja0Vwb2NoCQESZW5zdXJlQ29ycmVjdEVwb2NoAQUFZXBvY2gDCQAAAgUKY2hlY2tFcG9jaAUKY2hlY2tFcG9jaAQOY2hlY2tHZW5lcmF0b3IJARFlbnN1cmVNaW5pbmdFcG9jaAEIBQFpDG9yaWdpbkNhbGxlcgMJAAACBQ5jaGVja0dlbmVyYXRvcgUOY2hlY2tHZW5lcmF0b3IEDSR0MDE5Njk4MTk4MDIJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgEDnJlZkNoYWluSGVpZ2h0CAUNJHQwMTk2OTgxOTgwMgJfMQQIcmVmRXBvY2gIBQ0kdDAxOTY5ODE5ODAyAl8yBAZyZWZSZWYIBQ0kdDAxOTY5ODE5ODAyAl8zBAxyZWZHZW5lcmF0b3IIBQ0kdDAxOTY5ODE5ODAyAl80BAtyZWZJZ25vcmVkMQgFDSR0MDE5Njk4MTk4MDICXzUEC3JlZklnbm9yZWQyCAUNJHQwMTk2OTgxOTgwMgJfNgQOZmluYWxpemVkRXBvY2gICQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkCXzIECGVwb2NoUmVmAwkAZwIFCHJlZkVwb2NoBQ5maW5hbGl6ZWRFcG9jaAUIcmVmRXBvY2gJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICI2NhbiBub3Qgc3RhcnQgYWx0IGNoYWluIGZyb20gZXBvY2ggCQCkAwEFCHJlZkVwb2NoAggsIGVwb2NoIAkApAMBBQ5maW5hbGl6ZWRFcG9jaAINIGlzIGZpbmFsaXplZAQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAUMcmVmZXJlbmNlSGV4AwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4ECm5ld0NoYWluSWQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFDmxhc3RDaGFpbklkS2V5AAAAAQQObmV3Q2hhaW5IZWlnaHQJAGQCCAkBCWJsb2NrTWV0YQEFDHJlZmVyZW5jZUhleAJfMQABBAxuZXdCbG9ja01ldGEJAMsBAgkAywECCQDLAQIJAJoDAQUObmV3Q2hhaW5IZWlnaHQJAJoDAQUGaGVpZ2h0CQDdBAEFDHJlZmVyZW5jZUhleAgIBQFpDG9yaWdpbkNhbGxlcgVieXRlcwQNdGhpc0Vwb2NoTWV0YQQHJG1hdGNoMAkBCWVwb2NoTWV0YQEFBmhlaWdodAMJAAECBQckbWF0Y2gwAgRVbml0CQELU3RyaW5nRW50cnkCCQEMZXBvY2hNZXRhS2V5AQUGaGVpZ2h0CQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBQNTRVAJAKQDAQUIZXBvY2hSZWYFA1NFUAUMYmxvY2tIYXNoSGV4BAVvdGhlcgUHJG1hdGNoMAkAAgECFUVwb2NoIGFscmVhZHkgc3RhcnRlZAkAzAgCBQ10aGlzRXBvY2hNZXRhCQDMCAIJAQtCaW5hcnlFbnRyeQIJAKwCAgUKYmxvY2tNZXRhSwUMYmxvY2tIYXNoSGV4BQxuZXdCbG9ja01ldGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQUKbmV3Q2hhaW5JZAUMYmxvY2tIYXNoSGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxjaGFpbk1ldGFLZXkBBQpuZXdDaGFpbklkCQCsAgIJAKwCAgkApAMBBQ5uZXdDaGFpbkhlaWdodAUDU0VQBQxibG9ja0hhc2hIZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFCm5ld0NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQpuZXdDaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgULbWFpbkNoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDXN1cHBvcnRlcnNLZXkBBQpuZXdDaGFpbklkCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUObGFzdENoYWluSWRLZXkFCm5ld0NoYWluSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBzdGFydEFsdENoYWluX3YyBAxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BWVwb2NoGmVsVG9DbFRyYW5zZmVyc1Jvb3RIYXNoSGV4BAxjaGVja1ZlcnNpb24JAR1yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRW5hYmxlZAADCQAAAgUMY2hlY2tWZXJzaW9uBQxjaGVja1ZlcnNpb24EDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoBApjaGVja0Vwb2NoCQESZW5zdXJlQ29ycmVjdEVwb2NoAQUFZXBvY2gDCQAAAgUKY2hlY2tFcG9jaAUKY2hlY2tFcG9jaAQOY2hlY2tHZW5lcmF0b3IJARFlbnN1cmVNaW5pbmdFcG9jaAEIBQFpDG9yaWdpbkNhbGxlcgMJAAACBQ5jaGVja0dlbmVyYXRvcgUOY2hlY2tHZW5lcmF0b3IEDSR0MDIxNjEyMjE3MTYJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgEDnJlZkNoYWluSGVpZ2h0CAUNJHQwMjE2MTIyMTcxNgJfMQQIcmVmRXBvY2gIBQ0kdDAyMTYxMjIxNzE2Al8yBAZyZWZSZWYIBQ0kdDAyMTYxMjIxNzE2Al8zBAxyZWZHZW5lcmF0b3IIBQ0kdDAyMTYxMjIxNzE2Al80BAtyZWZJZ25vcmVkMQgFDSR0MDIxNjEyMjE3MTYCXzUEC3JlZklnbm9yZWQyCAUNJHQwMjE2MTIyMTcxNgJfNgQOZmluYWxpemVkRXBvY2gICQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkCXzIECGVwb2NoUmVmAwkAZwIFCHJlZkVwb2NoBQ5maW5hbGl6ZWRFcG9jaAUIcmVmRXBvY2gJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICI2NhbiBub3Qgc3RhcnQgYWx0IGNoYWluIGZyb20gZXBvY2ggCQCkAwEFCHJlZkVwb2NoAggsIGVwb2NoIAkApAMBBQ5maW5hbGl6ZWRFcG9jaAINIGlzIGZpbmFsaXplZAQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAUMcmVmZXJlbmNlSGV4AwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4ECm5ld0NoYWluSWQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFDmxhc3RDaGFpbklkS2V5AAAAAQQObmV3Q2hhaW5IZWlnaHQJAGQCCAkBCWJsb2NrTWV0YQEFDHJlZmVyZW5jZUhleAJfMQABBA10aGlzRXBvY2hNZXRhBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACBFVuaXQJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFA1NFUAkApAMBBQhlcG9jaFJlZgUDU0VQBQxibG9ja0hhc2hIZXgEBW90aGVyBQckbWF0Y2gwCQACAQIVRXBvY2ggYWxyZWFkeSBzdGFydGVkCQDMCAIFDXRoaXNFcG9jaE1ldGEJAMwIAgkBEG1rQmxvY2tNZXRhRW50cnkGBQxibG9ja0hhc2hIZXgFDm5ld0NoYWluSGVpZ2h0BQxyZWZlcmVuY2VIZXgIBQFpDG9yaWdpbkNhbGxlcgUKbmV3Q2hhaW5JZAUaZWxUb0NsVHJhbnNmZXJzUm9vdEhhc2hIZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQUKbmV3Q2hhaW5JZAUMYmxvY2tIYXNoSGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxjaGFpbk1ldGFLZXkBBQpuZXdDaGFpbklkCQCsAgIJAKwCAgkApAMBBQ5uZXdDaGFpbkhlaWdodAUDU0VQBQxibG9ja0hhc2hIZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFCm5ld0NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQpuZXdDaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgULbWFpbkNoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDXN1cHBvcnRlcnNLZXkBBQpuZXdDaGFpbklkCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUObGFzdENoYWluSWRLZXkFCm5ld0NoYWluSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5leHRlbmRBbHRDaGFpbgQHY2hhaW5JZAxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BWVwb2NoBAxjaGVja1ZlcnNpb24JAR5yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRGlzYWJsZWQAAwkAAAIFDGNoZWNrVmVyc2lvbgUMY2hlY2tWZXJzaW9uBA5jaGVja0Jsb2NrSGFzaAkBEXZhbGlkYXRlQmxvY2tIYXNoAQUMYmxvY2tIYXNoSGV4AwkAAAIFDmNoZWNrQmxvY2tIYXNoBQ5jaGVja0Jsb2NrSGFzaAQKY2hlY2tFcG9jaAkBEmVuc3VyZUNvcnJlY3RFcG9jaAEFBWVwb2NoAwkAAAIFCmNoZWNrRXBvY2gFCmNoZWNrRXBvY2gEDmNoZWNrR2VuZXJhdG9yCQERZW5zdXJlTWluaW5nRXBvY2gBCAUBaQxvcmlnaW5DYWxsZXIDCQAAAgUOY2hlY2tHZW5lcmF0b3IFDmNoZWNrR2VuZXJhdG9yBBNjaGFpbkZpcnN0QmxvY2tNZXRhCQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQUHY2hhaW5JZAQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkCQDcBAEIBRNjaGFpbkZpcnN0QmxvY2tNZXRhAl8zAwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4EDSR0MDIzOTU1MjQwMDkJAQljaGFpbk1ldGEBBQdjaGFpbklkBAtjaGFpbkhlaWdodAgFDSR0MDIzOTU1MjQwMDkCXzEEDmNoYWluTGFzdEJsb2NrCAUNJHQwMjM5NTUyNDAwOQJfMgQOY2hlY2tSZWZlcmVuY2UJARJpc1JlZmVyZW5jZUNvcnJlY3QCBQxyZWZlcmVuY2VIZXgFDmNoYWluTGFzdEJsb2NrAwkAAAIFDmNoZWNrUmVmZXJlbmNlBQ5jaGVja1JlZmVyZW5jZQQObmV3Q2hhaW5IZWlnaHQJAGQCBQtjaGFpbkhlaWdodAABBAlwcmV2RXBvY2gICQEJYmxvY2tNZXRhAQUMcmVmZXJlbmNlSGV4Al8yBBN1cGRhdGVNYWluQ2hhaW5EYXRhAwkAZgIJARFzdXBwb3J0aW5nQmFsYW5jZQEFB2NoYWluSWQJAGkCBRRjb21wdXRlZFRvdGFsQmFsYW5jZQACBAtsYXN0Q2hhaW5JZAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ5sYXN0Q2hhaW5JZEtleQAABBR1cGRhdGVGaW5hbGl6ZWRCbG9jawkBHWdldFVwZGF0ZUZpbmFsaXplZEJsb2NrQWN0aW9uAwgFAWkMb3JpZ2luQ2FsbGVyBQxibG9ja0hhc2hIZXgFCXByZXZFcG9jaAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUY2hhaW5Gb3JrZWRIZWlnaHRLZXkBBQttYWluQ2hhaW5JZAgFE2NoYWluRmlyc3RCbG9ja01ldGECXzEJAMwIAgkBDEludGVnZXJFbnRyeQIFDm1haW5DaGFpbklkS2V5BQdjaGFpbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdmaXJzdFZhbGlkQWx0Q2hhaW5JZEtleQkAZAIFC2xhc3RDaGFpbklkAAEFA25pbAUUdXBkYXRlRmluYWxpemVkQmxvY2sFA25pbAQNdGhpc0Vwb2NoTWV0YQQHJG1hdGNoMAkBCWVwb2NoTWV0YQEFBmhlaWdodAMJAAECBQckbWF0Y2gwAgRVbml0CQELU3RyaW5nRW50cnkCCQEMZXBvY2hNZXRhS2V5AQUGaGVpZ2h0CQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBQNTRVAJAKQDAQUJcHJldkVwb2NoBQNTRVAFDGJsb2NrSGFzaEhleAQFb3RoZXIFByRtYXRjaDAJAAIBAhVFcG9jaCBhbHJlYWR5IHN0YXJ0ZWQEHXVwZGF0ZU1haW5DaGFpbkxhc3RNaW5lZEJsb2NrAwMJAAACBRN1cGRhdGVNYWluQ2hhaW5EYXRhBQNuaWwJAQIhPQIJAQt2YWx1ZU9yRWxzZQIJAQxtaW5lckNoYWluSWQBCAUBaQxvcmlnaW5DYWxsZXIAAAUHY2hhaW5JZAcJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQttYWluQ2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyCAUTY2hhaW5GaXJzdEJsb2NrTWV0YQJfMQUDbmlsBQNuaWwEDG5ld0Jsb2NrTWV0YQkAywECCQDLAQIJAMsBAgkAmgMBBQ5uZXdDaGFpbkhlaWdodAkAmgMBBQZoZWlnaHQJAN0EAQUMcmVmZXJlbmNlSGV4CAgFAWkMb3JpZ2luQ2FsbGVyBWJ5dGVzCQDOCAIJAM4IAgkAzggCCQDMCAIJAQtCaW5hcnlFbnRyeQIJAKwCAgUKYmxvY2tNZXRhSwUMYmxvY2tIYXNoSGV4BQxuZXdCbG9ja01ldGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGNoYWluTWV0YUtleQEFB2NoYWluSWQJAKwCAgkArAICCQCkAwEFDm5ld0NoYWluSGVpZ2h0BQNTRVAFDGJsb2NrSGFzaEhleAkAzAgCBQ10aGlzRXBvY2hNZXRhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPbWluZXJDaGFpbklkS2V5AQgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgUHY2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBQ5uZXdDaGFpbkhlaWdodAUDbmlsBRN1cGRhdGVNYWluQ2hhaW5EYXRhCQEMYWRkU3VwcG9ydGVyAgUHY2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBR11cGRhdGVNYWluQ2hhaW5MYXN0TWluZWRCbG9jawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleHRlbmRBbHRDaGFpbl92MgUHY2hhaW5JZAxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4BWVwb2NoGmVsVG9DbFRyYW5zZmVyc1Jvb3RIYXNoSGV4BAxjaGVja1ZlcnNpb24JAR1yZXF1aXJlRWxUb0NsVHJhbnNmZXJzRW5hYmxlZAADCQAAAgUMY2hlY2tWZXJzaW9uBQxjaGVja1ZlcnNpb24EDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoBApjaGVja0Vwb2NoCQESZW5zdXJlQ29ycmVjdEVwb2NoAQUFZXBvY2gDCQAAAgUKY2hlY2tFcG9jaAUKY2hlY2tFcG9jaAQOY2hlY2tHZW5lcmF0b3IJARFlbnN1cmVNaW5pbmdFcG9jaAEIBQFpDG9yaWdpbkNhbGxlcgMJAAACBQ5jaGVja0dlbmVyYXRvcgUOY2hlY2tHZW5lcmF0b3IEE2NoYWluRmlyc3RCbG9ja01ldGEJAQlibG9ja01ldGEBCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEUY2hhaW5GaXJzdEJsb2NrSWRLZXkBBQdjaGFpbklkBApjaGVja0NoYWluCQEdZW5zdXJlRXhwZWN0ZWRPckluYWN0aXZlQ2hhaW4DCAUBaQxvcmlnaW5DYWxsZXIFB2NoYWluSWQJANwEAQgFE2NoYWluRmlyc3RCbG9ja01ldGECXzMDCQAAAgUKY2hlY2tDaGFpbgUKY2hlY2tDaGFpbgQNJHQwMjY2MTIyNjY2NgkBCWNoYWluTWV0YQEFB2NoYWluSWQEC2NoYWluSGVpZ2h0CAUNJHQwMjY2MTIyNjY2NgJfMQQOY2hhaW5MYXN0QmxvY2sIBQ0kdDAyNjYxMjI2NjY2Al8yBA5jaGVja1JlZmVyZW5jZQkBEmlzUmVmZXJlbmNlQ29ycmVjdAIFDHJlZmVyZW5jZUhleAUOY2hhaW5MYXN0QmxvY2sDCQAAAgUOY2hlY2tSZWZlcmVuY2UFDmNoZWNrUmVmZXJlbmNlBA5uZXdDaGFpbkhlaWdodAkAZAIFC2NoYWluSGVpZ2h0AAEECXByZXZFcG9jaAgJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgCXzIEE3VwZGF0ZU1haW5DaGFpbkRhdGEDCQBmAgkBEXN1cHBvcnRpbmdCYWxhbmNlAQUHY2hhaW5JZAkAaQIFFGNvbXB1dGVkVG90YWxCYWxhbmNlAAIEC2xhc3RDaGFpbklkCQELdmFsdWVPckVsc2UCCQCfCAEFDmxhc3RDaGFpbklkS2V5AAAEFHVwZGF0ZUZpbmFsaXplZEJsb2NrCQEdZ2V0VXBkYXRlRmluYWxpemVkQmxvY2tBY3Rpb24DCAUBaQxvcmlnaW5DYWxsZXIFDGJsb2NrSGFzaEhleAUJcHJldkVwb2NoCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARRjaGFpbkZvcmtlZEhlaWdodEtleQEFC21haW5DaGFpbklkCAUTY2hhaW5GaXJzdEJsb2NrTWV0YQJfMQkAzAgCCQEMSW50ZWdlckVudHJ5AgUObWFpbkNoYWluSWRLZXkFB2NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFF2ZpcnN0VmFsaWRBbHRDaGFpbklkS2V5CQBkAgULbGFzdENoYWluSWQAAQUDbmlsBRR1cGRhdGVGaW5hbGl6ZWRCbG9jawUDbmlsBA10aGlzRXBvY2hNZXRhBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACBFVuaXQJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFA1NFUAkApAMBBQlwcmV2RXBvY2gFA1NFUAUMYmxvY2tIYXNoSGV4BAVvdGhlcgUHJG1hdGNoMAkAAgECFUVwb2NoIGFscmVhZHkgc3RhcnRlZAQddXBkYXRlTWFpbkNoYWluTGFzdE1pbmVkQmxvY2sDAwkAAAIFE3VwZGF0ZU1haW5DaGFpbkRhdGEFA25pbAkBAiE9AgkBC3ZhbHVlT3JFbHNlAgkBDG1pbmVyQ2hhaW5JZAEIBQFpDG9yaWdpbkNhbGxlcgAABQdjaGFpbklkBwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmNoYWluTGFzdEhlaWdodEtleQIFC21haW5DaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIIBRNjaGFpbkZpcnN0QmxvY2tNZXRhAl8xBQNuaWwFA25pbAkAzggCCQDOCAIJAM4IAgkAzAgCCQEQbWtCbG9ja01ldGFFbnRyeQYFDGJsb2NrSGFzaEhleAUObmV3Q2hhaW5IZWlnaHQFDHJlZmVyZW5jZUhleAgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkBRplbFRvQ2xUcmFuc2ZlcnNSb290SGFzaEhleAkAzAgCCQELU3RyaW5nRW50cnkCCQEMY2hhaW5NZXRhS2V5AQUHY2hhaW5JZAkArAICCQCsAgIJAKQDAQUObmV3Q2hhaW5IZWlnaHQFA1NFUAUMYmxvY2tIYXNoSGV4CQDMCAIFDXRoaXNFcG9jaE1ldGEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFB2NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQdjaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0BQNuaWwFE3VwZGF0ZU1haW5DaGFpbkRhdGEJAQxhZGRTdXBwb3J0ZXICBQdjaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFHXVwZGF0ZU1haW5DaGFpbkxhc3RNaW5lZEJsb2NrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBGpvaW4BDXJld2FyZEFkZHJlc3MKARJjaGVja1Jld2FyZEFkZHJlc3MBB2FkZHJlc3MEByRtYXRjaDAJAKEIAQkBCm1pbmVyUGtLZXkBBQdhZGRyZXNzAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwAwkAAAIFAnBrCAUBaRVvcmlnaW5DYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBCQCsAgIJAKwCAgkArAICAhFMMiBtaW5lciBhZGRyZXNzIAUHYWRkcmVzcwIYIGlzIGFscmVhZHkgbGlua2VkIHdpdGggCQDYBAEFAnBrBQR1bml0AwkBASEBCQEPaXNDb250cmFjdFNldHVwAAkAAgECH1RoZSBjb250cmFjdCBoYXMgbm90IHlldCBzZXQgdXADCQBmAgULTUlOX0JBTEFOQ0UICQDvBwEIBQFpDG9yaWdpbkNhbGxlcgpnZW5lcmF0aW5nCQACAQkArAICCQCsAgIJAKwCAgIhSW5zdWZmaWNpZW50IGdlbmVyYXRpbmcgYmFsYW5jZTogCQCkAwEICQDvBwEIBQFpDG9yaWdpbkNhbGxlcgpnZW5lcmF0aW5nAgwuIFJlcXVpcmVkOiAJAKQDAQULTUlOX0JBTEFOQ0UDCQECIT0CCQDIAQEFDXJld2FyZEFkZHJlc3MAFAkAAgECJXJld2FyZEFkZHJlc3Mgc2hvdWxkIGJlIGFuIEwyIGFkZHJlc3MDCQBnAgkAkAMBBQlhbGxNaW5lcnMAMgkAAgECD3RvbyBtYW55IG1pbmVycwoBDmNoZWNrRXhpc3RlbmNlAgZleGlzdHMFbWluZXIDBQZleGlzdHMGCQAAAgUFbWluZXIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBA1hbHJlYWR5RXhpc3RzCgACJGwFCWFsbE1pbmVycwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ5jaGVja0V4aXN0ZW5jZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAwUNYWxyZWFkeUV4aXN0cwUDbmlsBAhuZXdNaW5lcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEEHJld2FyZEFkZHJlc3NIZXgJANwEAQUNcmV3YXJkQWRkcmVzcwQFY2hlY2sJARJjaGVja1Jld2FyZEFkZHJlc3MBBRByZXdhcmRBZGRyZXNzSGV4AwkAAAIFBWNoZWNrBQVjaGVjawQJbmV3TWluZXJzAwkAAAIJAJADAQUJYWxsTWluZXJzAAAFCG5ld01pbmVyCQCsAgIJAKwCAgUMYWxsTWluZXJzU3RyBQNTRVAFCG5ld01pbmVyBBhkZWxldGVPbGRSZXdhcmRBZGRyZXNzUGsEByRtYXRjaDAJAKIIAQkBFW1pbmVyUmV3YXJkQWRkcmVzc0tleQEFCG5ld01pbmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQKb2xkQWRkcmVzcwUHJG1hdGNoMAMJAAACBQpvbGRBZGRyZXNzCQDcBAEFDXJld2FyZEFkZHJlc3MFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBCQEKbWluZXJQa0tleQEFCm9sZEFkZHJlc3MFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMYWxsTWluZXJzS2V5BQluZXdNaW5lcnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFW1pbmVyUmV3YXJkQWRkcmVzc0tleQEFCG5ld01pbmVyCQCsAgICAjB4BRByZXdhcmRBZGRyZXNzSGV4CQDMCAIJAQtCaW5hcnlFbnRyeQIJAQptaW5lclBrS2V5AQUQcmV3YXJkQWRkcmVzc0hleAgFAWkVb3JpZ2luQ2FsbGVyUHVibGljS2V5BQNuaWwFGGRlbGV0ZU9sZFJld2FyZEFkZHJlc3NQawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVsZWF2ZQAEDGxlYXZpbmdNaW5lcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIKARBza2lwTGVhdmluZ01pbmVyAgNhY2MFbWluZXIDCQAAAgUFbWluZXIFDGxlYXZpbmdNaW5lcgUDYWNjCQDNCAIFA2FjYwUFbWluZXIED3JlbWFpbmluZ01pbmVycwoAAiRsBQlhbGxNaW5lcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHNraXBMZWF2aW5nTWluZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQNcmV3YXJkQWRkcktleQkBFW1pbmVyUmV3YXJkQWRkcmVzc0tleQEFDGxlYXZpbmdNaW5lcgQRcHJldlJld2FyZEFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ1yZXdhcmRBZGRyS2V5AhZtaW5lciBoYXMgbmV2ZXIgam9pbmVkAwkAAAIFDnRoaXNFcG9jaE1pbmVyCAUBaQxvcmlnaW5DYWxsZXIJAAIBAhxkZXNpZ25hdGVkIG1pbmVyIGNhbid0IGxlYXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGFsbE1pbmVyc0tleQkAugkCBQ9yZW1haW5pbmdNaW5lcnMFA1NFUAkAzAgCCQELRGVsZXRlRW50cnkBBQ1yZXdhcmRBZGRyS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEJAQptaW5lclBrS2V5AQURcHJldlJld2FyZEFkZHJlc3MFA25pbAFpAQh3aXRoZHJhdwQMYmxvY2tIYXNoSGV4C21lcmtsZVByb29mFHRyYW5zZmVySW5kZXhJbkJsb2NrBmFtb3VudAQPY2hlY2tBY3RpdmF0aW9uCQEdcmVxdWlyZUVsVG9DbFRyYW5zZmVyc0VuYWJsZWQAAwkAAAIFD2NoZWNrQWN0aXZhdGlvbgUPY2hlY2tBY3RpdmF0aW9uBBF3aXRoZHJhd0Jsb2NrTWV0YQkBCWJsb2NrTWV0YQEFDGJsb2NrSGFzaEhleAQTd2l0aGRyYXdCbG9ja0hlaWdodAgFEXdpdGhkcmF3QmxvY2tNZXRhAl8xBBRmaW5hbGl6ZWRCbG9ja0hlaWdodAgJAQlibG9ja01ldGEBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRFmaW5hbGl6ZWRCbG9ja0tleQJfMQQYbWFpbkNoYWluTGFzdEJsb2NrSGVpZ2h0CAkBCWJsb2NrTWV0YQEFEm1haW5DaGFpbkxhc3RCbG9jawJfMQMJAGYCBRN3aXRoZHJhd0Jsb2NrSGVpZ2h0BRRmaW5hbGl6ZWRCbG9ja0hlaWdodAkAAgEJAKwCAgkArAICCQCsAgICCkVMIGJsb2NrICMJAKQDAQUTd2l0aGRyYXdCbG9ja0hlaWdodAItIGlzIG5vdCBmaW5hbGl6ZWQuIFRoZSBjdXJyZW50IGZpbmFsaXplZCBpcyAjCQCkAwEFFGZpbmFsaXplZEJsb2NrSGVpZ2h0BBR3aXRoZHJhd0Jsb2NrQ2hhaW5JZAgFEXdpdGhkcmF3QmxvY2tNZXRhAl81BAtpc01haW5DaGFpbgkAAAIFFHdpdGhkcmF3QmxvY2tDaGFpbklkBQttYWluQ2hhaW5JZAQScmVsYXRlc1RvTWFpbkNoYWluBAckbWF0Y2gwCQCfCAEJARRjaGFpbkZvcmtlZEhlaWdodEtleQEFFHdpdGhkcmF3QmxvY2tDaGFpbklkAwkAAQIFByRtYXRjaDACA0ludAQMZm9ya2VkSGVpZ2h0BQckbWF0Y2gwCQBmAgUMZm9ya2VkSGVpZ2h0BRN3aXRoZHJhd0Jsb2NrSGVpZ2h0CQACAQkArAICCQCsAgIJAKwCAgUMYmxvY2tIYXNoSGV4Ah0gaXMgb24gYW4gYWx0ZXJuYXRpdmUgY2hhaW4gIwkApAMBBRR3aXRoZHJhd0Jsb2NrQ2hhaW5JZAI4IHRoYXQgd2FzIG5vdCBhcHByb3ZlZCBieSBtYWpvcml0eS4gV2FpdCBmb3Igc29tZSBibG9ja3MDAwULaXNNYWluQ2hhaW4GBRJyZWxhdGVzVG9NYWluQ2hhaW4ECXJlY2lwaWVudAgFAWkMb3JpZ2luQ2FsbGVyBA9yZWNpcGllbnRQa0hhc2gJAMkBAgkAygECCAUJcmVjaXBpZW50BWJ5dGVzAAIFFFBVQkxJQ19LRVlfSEFTSF9TSVpFBA96ZXJvQW1vdW50Qnl0ZXMBLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAthbW91bnRCeXRlcwkAmgMBBQZhbW91bnQEC2VsRXZlbnREYXRhCQDLAQIJAMsBAgUPcmVjaXBpZW50UGtIYXNoCQDJAQIFD3plcm9BbW91bnRCeXRlcwkAZQIJAMgBAQUPemVyb0Ftb3VudEJ5dGVzCQDIAQEFC2Ftb3VudEJ5dGVzBQthbW91bnRCeXRlcwQRZWxFdmVudERhdGFEaWdlc3QJAPAVAQULZWxFdmVudERhdGEEEmNhbGN1bGF0ZWRSb290SGFzaAkAvQUDBQttZXJrbGVQcm9vZgURZWxFdmVudERhdGFEaWdlc3QFFHRyYW5zZmVySW5kZXhJbkJsb2NrBBBleHBlY3RlZFJvb3RIYXNoCAURd2l0aGRyYXdCbG9ja01ldGECXzYDCQAAAgUSY2FsY3VsYXRlZFJvb3RIYXNoBRBleHBlY3RlZFJvb3RIYXNoBAd0b2tlbklkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFCnRva2VuSWRLZXkEDHRyYW5zZmVyc0tleQkBF2Jsb2NrRWxUb0NsVHJhbnNmZXJzS2V5AQUMYmxvY2tIYXNoSGV4CQDMCAIJAQdSZWlzc3VlAwUHdG9rZW5JZAUGYW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQlyZWNpcGllbnQFBmFtb3VudAUHdG9rZW5JZAkAzAgCCQELU3RyaW5nRW50cnkCBQx0cmFuc2ZlcnNLZXkJAQlzZXRPckZhaWwCCQELdmFsdWVPckVsc2UCCQCiCAEFDHRyYW5zZmVyc0tleQIABRR0cmFuc2ZlckluZGV4SW5CbG9jawUDbmlsCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFEV4cGVjdGVkIHJvb3QgaGFzaDogCQDcBAEFEGV4cGVjdGVkUm9vdEhhc2gCBywgZ290OiAJANwEAQUSY2FsY3VsYXRlZFJvb3RIYXNoAhUuIEV2ZW50IGRhdGEgZGlnZXN0OiAJANoEAQURZWxFdmVudERhdGFEaWdlc3QJAAIBCQCsAgIJAKwCAgIJRXhwZWN0ZWQgBQxibG9ja0hhc2hIZXgCLyB0byBiZSBlaXRoZXIgb24gdGhlIG1haW4gY2hhaW4gb3IgcmVsYXRlIHRvIGl0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXNldHVwBBNnZW5lc2lzQmxvY2tIYXNoSGV4EW1pbmVyUmV3YXJkSW5Hd2VpGXN0YWtpbmdDb250cmFjdEFkZHJlc3NCNTgSZWxCcmlkZ2VBZGRyZXNzSGV4AwkBD2lzQ29udHJhY3RTZXR1cAAJAAIBAiRUaGUgY29udHJhY3QgaGFzIGJlZW4gYWxyZWFkeSBzZXQgdXADCQBmAgAABRFtaW5lclJld2FyZEluR3dlaQkAAgECJFRoZSBtaW5lciByZXdhcmQgbXVzdCBiZSBub25uZWdhdGl2ZQQQZ2VuZXNpc0Jsb2NrSGFzaAkA3QQBBRNnZW5lc2lzQmxvY2tIYXNoSGV4BAdlbXB0eVBrASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQTZ2VuZXNpc01pbmVyQWRkcmVzcwkApwgBBQdlbXB0eVBrBBdnZW5lc2lzRXRoUmV3YXJkQWRkcmVzcwEUAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWdlbmVzaXNCbG9ja1JlZmVyZW5jZUhhc2gCQDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEBWlzc3VlCQDCCAUCBVVOSVQwAgxOYXRpdmUgdG9rZW4AAAAIBgQHdG9rZW5JZAkAuAgBBQVpc3N1ZQkAzAgCCQEQbWtCbG9ja01ldGFFbnRyeQYFE2dlbmVzaXNCbG9ja0hhc2hIZXgAAAUZZ2VuZXNpc0Jsb2NrUmVmZXJlbmNlSGFzaAUTZ2VuZXNpc01pbmVyQWRkcmVzcwULbWFpbkNoYWluSWQCAAkAzAgCCQELU3RyaW5nRW50cnkCCQEUY2hhaW5GaXJzdEJsb2NrSWRLZXkBAAAFE2dlbmVzaXNCbG9ja0hhc2hIZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGNoYWluTWV0YUtleQEAAAkArAICAgIwLAUTZ2VuZXNpc0Jsb2NrSGFzaEhleAkAzAgCCQEMSW50ZWdlckVudHJ5AgUObWluZXJSZXdhcmRLZXkFEW1pbmVyUmV3YXJkSW5Hd2VpCQDMCAIJAQtTdHJpbmdFbnRyeQIFGXN0YWtpbmdDb250cmFjdEFkZHJlc3NLZXkFGXN0YWtpbmdDb250cmFjdEFkZHJlc3NCNTgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGVwb2NoTWV0YUtleQEFBmhlaWdodAkArAICCQCsAgIJAKUIAQUTZ2VuZXNpc01pbmVyQWRkcmVzcwIDLDAsBRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIFEWZpbmFsaXplZEJsb2NrS2V5BRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNwcmV2UmFuZGFvSGVpZ2h0S2V5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFF2VsVG9DbFRyYW5zZmVyc0Vwb2NoS2V5AAAJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUKdG9rZW5JZEtleQkA2AQBBQd0b2tlbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEmVsQnJpZGdlQWRkcmVzc0tleQkArAICAgIweAUSZWxCcmlkZ2VBZGRyZXNzSGV4BQNuaWwBaQEUc2V0dXBFbFRvQ2xUcmFuc2ZlcnMCEGFjdGl2YXRpb25IZWlnaHQSZWxCcmlkZ2VBZGRyZXNzSGV4AwkBCWlzRGVmaW5lZAEJAJ8IAQUXZWxUb0NsVHJhbnNmZXJzRXBvY2hLZXkJAAIBAiVFTCB0byBDTCB0cmFuc2ZlcnMgZmVhdHVyZSB3YXMgc2V0IHVwBAVpc3N1ZQkAwggFAgVVTklUMAIMTmF0aXZlIHRva2VuAAAACAYEB3Rva2VuSWQJALgIAQUFaXNzdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFF2VsVG9DbFRyYW5zZmVyc0Vwb2NoS2V5BRBhY3RpdmF0aW9uSGVpZ2h0CQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCnRva2VuSWRLZXkJANgEAQUHdG9rZW5JZAkAzAgCCQELU3RyaW5nRW50cnkCBRJlbEJyaWRnZUFkZHJlc3NLZXkJAKwCAgICMHgFEmVsQnJpZGdlQWRkcmVzc0hleAUDbmlsACfyX+E=", "height": 3197802, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FNjNKot193WRkSkpK9FPbckjMik1WXVhi6NsfbDPkqLL Next: Eh7NKbyaoxgEJ4BwqmwtiBQho4gcdExwKQ9ZwLmSAcYj Diff:
Old | New | Differences | |
---|---|---|---|
13 | 13 | ||
14 | 14 | let f = 26 | |
15 | 15 | ||
16 | - | let g = | |
16 | + | let g = 20 | |
17 | 17 | ||
18 | - | let h = " | |
18 | + | let h = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" | |
19 | 19 | ||
20 | - | let i = " | |
20 | + | let i = "thisEpochData" | |
21 | 21 | ||
22 | - | let j = " | |
22 | + | let j = "allMiners" | |
23 | 23 | ||
24 | - | let k = " | |
24 | + | let k = "mainChainId" | |
25 | 25 | ||
26 | - | let l = " | |
26 | + | let l = "lastChainId" | |
27 | 27 | ||
28 | - | let m = " | |
28 | + | let m = "firstValidAltChainId" | |
29 | 29 | ||
30 | - | let n = " | |
30 | + | let n = "minerReward" | |
31 | 31 | ||
32 | - | let o = " | |
32 | + | let o = "stakingContractAddress" | |
33 | 33 | ||
34 | - | func p (q) = { | |
35 | - | let r = toString(q) | |
36 | - | let s = size(r) | |
37 | - | if ((1 == s)) | |
38 | - | then ("0000000" + r) | |
39 | - | else if ((2 == s)) | |
40 | - | then ("000000" + r) | |
41 | - | else if ((3 == s)) | |
42 | - | then ("00000" + r) | |
43 | - | else if ((4 == s)) | |
44 | - | then ("0000" + r) | |
45 | - | else if ((5 == s)) | |
46 | - | then ("000" + r) | |
47 | - | else if ((6 == s)) | |
48 | - | then ("00" + r) | |
49 | - | else if ((7 == s)) | |
50 | - | then ("0" + r) | |
51 | - | else r | |
34 | + | let p = "block_0x" | |
35 | + | ||
36 | + | let q = "finalizedBlock" | |
37 | + | ||
38 | + | let r = "tokenId" | |
39 | + | ||
40 | + | let s = "elBridgeAddress" | |
41 | + | ||
42 | + | let t = "prevRandaoHeight" | |
43 | + | ||
44 | + | let u = "elToClTransfersEpoch" | |
45 | + | ||
46 | + | func v (w) = { | |
47 | + | let x = toString(w) | |
48 | + | let y = size(x) | |
49 | + | if ((1 == y)) | |
50 | + | then ("0000000" + x) | |
51 | + | else if ((2 == y)) | |
52 | + | then ("000000" + x) | |
53 | + | else if ((3 == y)) | |
54 | + | then ("00000" + x) | |
55 | + | else if ((4 == y)) | |
56 | + | then ("0000" + x) | |
57 | + | else if ((5 == y)) | |
58 | + | then ("000" + x) | |
59 | + | else if ((6 == y)) | |
60 | + | then ("00" + x) | |
61 | + | else if ((7 == y)) | |
62 | + | then ("0" + x) | |
63 | + | else x | |
52 | 64 | } | |
53 | 65 | ||
54 | 66 | ||
55 | - | func | |
67 | + | func z (A) = ("elToClTransfers_0x" + A) | |
56 | 68 | ||
57 | 69 | ||
58 | - | func | |
70 | + | func B (C) = ("epoch_" + v(C)) | |
59 | 71 | ||
60 | 72 | ||
61 | - | func | |
73 | + | func D (E) = (("chain" + toString(E)) + "FirstBlock") | |
62 | 74 | ||
63 | 75 | ||
64 | - | func | |
76 | + | func F (E) = ("chain_" + v(E)) | |
65 | 77 | ||
66 | 78 | ||
67 | - | func | |
79 | + | func G (E,H) = ((("chain_" + v(E)) + "_") + toString(H)) | |
68 | 80 | ||
69 | 81 | ||
70 | - | func | |
82 | + | func I (E) = (("chain_" + v(E)) + "ForkedHeight") | |
71 | 83 | ||
72 | 84 | ||
73 | - | func | |
85 | + | func J (E) = (("chain" + toString(E)) + "Supporters") | |
74 | 86 | ||
75 | 87 | ||
76 | - | func | |
88 | + | func K (L) = (("miner_" + L) + "_RewardAddress") | |
77 | 89 | ||
78 | 90 | ||
79 | - | let G = { | |
80 | - | let s = getString(this, m) | |
81 | - | if ($isInstanceOf(s, "String")) | |
91 | + | func M (N) = (("miner_0x" + N) + "_PK") | |
92 | + | ||
93 | + | ||
94 | + | func O (H) = (("miner_" + toString(H)) + "_ChainId") | |
95 | + | ||
96 | + | ||
97 | + | let P = valueOrElse(getInteger(this, u), a) | |
98 | + | ||
99 | + | func Q () = if ((P > height)) | |
100 | + | then unit | |
101 | + | else throw((("EL to CL transfers activated on epoch #" + toString(height)) + ". Upgrade your client")) | |
102 | + | ||
103 | + | ||
104 | + | func R () = if ((height >= P)) | |
105 | + | then unit | |
106 | + | else throw(((("EL to CL transfers haven't activated on epoch #" + toString(height)) + ". Wait for activation on #") + toString(P))) | |
107 | + | ||
108 | + | ||
109 | + | let S = { | |
110 | + | let y = getString(this, o) | |
111 | + | if ($isInstanceOf(y, "String")) | |
82 | 112 | then { | |
83 | - | let | |
84 | - | valueOrErrorMessage(addressFromString( | |
113 | + | let x = y | |
114 | + | valueOrErrorMessage(addressFromString(x), ("invalid staking contract address: " + x)) | |
85 | 115 | } | |
86 | - | else Address(getBinaryValue(this, | |
116 | + | else Address(getBinaryValue(this, o)) | |
87 | 117 | } | |
88 | 118 | ||
89 | - | func | |
90 | - | let | |
91 | - | if ($isInstanceOf( | |
119 | + | func T (U) = { | |
120 | + | let y = getString(S, ("%s__" + toString(U))) | |
121 | + | if ($isInstanceOf(y, "String")) | |
92 | 122 | then { | |
93 | - | let | |
94 | - | let | |
95 | - | let | |
96 | - | let | |
97 | - | let | |
98 | - | let | |
99 | - | if ((height >= | |
100 | - | then | |
101 | - | else if ((height >= | |
102 | - | then | |
123 | + | let V = y | |
124 | + | let W = split(V, "__") | |
125 | + | let X = parseIntValue(W[1]) | |
126 | + | let Y = parseIntValue(W[2]) | |
127 | + | let Z = parseIntValue(W[3]) | |
128 | + | let aa = parseIntValue(W[4]) | |
129 | + | if ((height >= Z)) | |
130 | + | then aa | |
131 | + | else if ((height >= X)) | |
132 | + | then Y | |
103 | 133 | else 0 | |
104 | 134 | } | |
105 | 135 | else 0 | |
106 | 136 | } | |
107 | 137 | ||
108 | 138 | ||
109 | - | func | |
110 | - | let | |
111 | - | let | |
112 | - | $Tuple2(parseIntValue( | |
139 | + | func ab (E) = { | |
140 | + | let x = getStringValue(F(E)) | |
141 | + | let ac = split(x, d) | |
142 | + | $Tuple2(parseIntValue(ac[0]), ac[1]) | |
113 | 143 | } | |
114 | 144 | ||
115 | 145 | ||
116 | - | let | |
146 | + | let ad = valueOrElse(getInteger(k), 0) | |
117 | 147 | ||
118 | - | let | |
148 | + | let ae = ab(ad) | |
119 | 149 | ||
120 | - | let | |
150 | + | let af = ae._1 | |
121 | 151 | ||
122 | - | let | |
152 | + | let ag = ae._2 | |
123 | 153 | ||
124 | - | func | |
125 | - | let | |
126 | - | if ($isInstanceOf( | |
154 | + | func ah (C) = { | |
155 | + | let y = getString(B(C)) | |
156 | + | if ($isInstanceOf(y, "String")) | |
127 | 157 | then { | |
128 | - | let | |
129 | - | let | |
130 | - | $Tuple3(addressFromStringValue( | |
158 | + | let x = y | |
159 | + | let ai = split(x, d) | |
160 | + | $Tuple3(addressFromStringValue(ai[0]), parseIntValue(ai[1]), ai[2]) | |
131 | 161 | } | |
132 | 162 | else unit | |
133 | 163 | } | |
134 | 164 | ||
135 | 165 | ||
136 | - | let | |
137 | - | let | |
138 | - | if ($isInstanceOf( | |
166 | + | let aj = { | |
167 | + | let y = ah(height) | |
168 | + | if ($isInstanceOf(y, "(Address, Int, String)")) | |
139 | 169 | then { | |
140 | - | let | |
141 | - | | |
170 | + | let ak = y | |
171 | + | ak | |
142 | 172 | } | |
143 | 173 | else { | |
144 | - | let | |
145 | - | if ($isInstanceOf( | |
174 | + | let al = getString(i) | |
175 | + | if ($isInstanceOf(al, "String")) | |
146 | 176 | then { | |
147 | - | let | |
148 | - | let | |
149 | - | let | |
150 | - | $Tuple3(if (( | |
151 | - | then addressFromStringValue( | |
177 | + | let am = al | |
178 | + | let an = split(am, d) | |
179 | + | let ao = parseIntValue(an[0]) | |
180 | + | $Tuple3(if ((ao == height)) | |
181 | + | then addressFromStringValue(an[1]) | |
152 | 182 | else unit, 0, "") | |
153 | 183 | } | |
154 | 184 | else $Tuple3(unit, 0, "") | |
155 | 185 | } | |
156 | 186 | } | |
157 | 187 | ||
158 | - | let | |
188 | + | let ap = aj._1 | |
159 | 189 | ||
160 | - | let | |
190 | + | let aq = aj._2 | |
161 | 191 | ||
162 | - | let | |
192 | + | let ar = aj._3 | |
163 | 193 | ||
164 | - | let | |
194 | + | let as = valueOrElse(getString(j), "") | |
165 | 195 | ||
166 | - | let | |
167 | - | let | |
168 | - | if (("" == | |
196 | + | let at = { | |
197 | + | let y = as | |
198 | + | if (("" == y)) | |
169 | 199 | then nil | |
170 | - | else if ($isInstanceOf( | |
200 | + | else if ($isInstanceOf(y, "String")) | |
171 | 201 | then { | |
172 | - | let | |
173 | - | split_4C( | |
202 | + | let au = y | |
203 | + | split_4C(au, d) | |
174 | 204 | } | |
175 | 205 | else throw("Match error") | |
176 | 206 | } | |
177 | 207 | ||
178 | - | func aj (ak) = { | |
179 | - | let al = getBinaryValue((n + ak)) | |
180 | - | let am = toInt(al) | |
181 | - | let an = toInt(al, 8) | |
182 | - | let ao = take(drop(al, 16), e) | |
183 | - | let ap = takeRight(al, f) | |
184 | - | $Tuple4(am, an, ao, ap) | |
185 | - | } | |
186 | - | ||
187 | - | ||
188 | - | func aq (z,w) = { | |
189 | - | let s = getInteger(y(w, z)) | |
190 | - | if ($isInstanceOf(s, "Int")) | |
191 | - | then { | |
192 | - | let ar = s | |
193 | - | ar | |
194 | - | } | |
208 | + | func av (aw) = { | |
209 | + | let ax = getBinaryValue((p + aw)) | |
210 | + | let ay = toInt(ax) | |
211 | + | let az = toInt(ax, 8) | |
212 | + | let aA = take(drop(ax, 16), e) | |
213 | + | let aB = take(drop(ax, (16 + e)), f) | |
214 | + | if ((P > az)) | |
215 | + | then $Tuple6(ay, az, aA, aB, 0, base58'') | |
195 | 216 | else { | |
196 | - | let as = getStringValue(((("chain" + toString(w)) + "LastMinedBy") + toString(z))) | |
197 | - | aj(as)._1 | |
217 | + | let E = toInt(drop(ax, ((16 + e) + f))) | |
218 | + | let aC = drop(ax, ((24 + e) + f)) | |
219 | + | $Tuple6(ay, az, aA, aB, E, aC) | |
198 | 220 | } | |
199 | 221 | } | |
200 | 222 | ||
201 | 223 | ||
202 | - | let at = { | |
203 | - | let au = { | |
204 | - | let s = lastBlock.vrf | |
205 | - | if ($isInstanceOf(s, "ByteVector")) | |
224 | + | func aD (A,ay,aE,aB,E,aF) = { | |
225 | + | let aG = toBytes(height) | |
226 | + | let aH = (((((toBytes(ay) + aG) + fromBase16String(aE)) + aB.bytes) + toBytes(E)) + fromBase16String(aF)) | |
227 | + | BinaryEntry((p + A), aH) | |
228 | + | } | |
229 | + | ||
230 | + | ||
231 | + | func aI (H,E) = { | |
232 | + | let y = getInteger(G(E, H)) | |
233 | + | if ($isInstanceOf(y, "Int")) | |
234 | + | then { | |
235 | + | let aJ = y | |
236 | + | aJ | |
237 | + | } | |
238 | + | else { | |
239 | + | let aK = getStringValue(((("chain" + toString(E)) + "LastMinedBy") + toString(H))) | |
240 | + | av(aK)._1 | |
241 | + | } | |
242 | + | } | |
243 | + | ||
244 | + | ||
245 | + | let aL = { | |
246 | + | let aM = { | |
247 | + | let y = lastBlock.vrf | |
248 | + | if ($isInstanceOf(y, "ByteVector")) | |
206 | 249 | then { | |
207 | - | let | |
208 | - | | |
250 | + | let aN = y | |
251 | + | aN | |
209 | 252 | } | |
210 | 253 | else lastBlock.generationSignature | |
211 | 254 | } | |
212 | - | func | |
213 | - | let | |
214 | - | let | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | let | |
220 | - | let | |
221 | - | if (if ((c > | |
255 | + | func aO (aP,H) = { | |
256 | + | let aQ = aP | |
257 | + | let aR = aQ._1 | |
258 | + | let aS = aQ._2 | |
259 | + | let aT = aQ._3 | |
260 | + | let aU = aQ._4 | |
261 | + | let aV = addressFromStringValue(H) | |
262 | + | let aW = wavesBalance(aV).generating | |
263 | + | let aX = T(aV) | |
264 | + | if (if ((c > aW)) | |
222 | 265 | then true | |
223 | - | else (0 >= | |
224 | - | then | |
266 | + | else (0 >= aX)) | |
267 | + | then aP | |
225 | 268 | else { | |
226 | - | let | |
227 | - | if (( | |
228 | - | then $Tuple4( | |
229 | - | else $Tuple4( | |
269 | + | let aY = calculateDelay(aV, aX) | |
270 | + | if ((aR > aY)) | |
271 | + | then $Tuple4(aY, H, (aT + aX), (aU :+ H)) | |
272 | + | else $Tuple4(aR, aS, (aT + aX), (aU :+ H)) | |
230 | 273 | } | |
231 | 274 | } | |
232 | 275 | ||
233 | - | let | |
234 | - | let | |
235 | - | let | |
236 | - | func | |
237 | - | then | |
238 | - | else | |
276 | + | let aZ = at | |
277 | + | let ba = size(aZ) | |
278 | + | let bb = $Tuple4(a, "", 0, nil) | |
279 | + | func bc (bd,be) = if ((be >= ba)) | |
280 | + | then bd | |
281 | + | else aO(bd, aZ[be]) | |
239 | 282 | ||
240 | - | func | |
241 | - | then | |
283 | + | func bf (bd,be) = if ((be >= ba)) | |
284 | + | then bd | |
242 | 285 | else throw("List size exceeds 50") | |
243 | 286 | ||
244 | - | | |
287 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
245 | 288 | } | |
246 | 289 | ||
247 | - | let | |
290 | + | let bg = aL._1 | |
248 | 291 | ||
249 | - | let | |
292 | + | let bh = aL._2 | |
250 | 293 | ||
251 | - | let | |
294 | + | let bi = aL._3 | |
252 | 295 | ||
253 | - | let | |
296 | + | let bj = aL._4 | |
254 | 297 | ||
255 | - | func | |
298 | + | func bk (E) = ab(E)._2 | |
256 | 299 | ||
257 | 300 | ||
258 | - | let | |
301 | + | let bl = av(ag) | |
259 | 302 | ||
260 | - | let | |
303 | + | let bm = bl._1 | |
261 | 304 | ||
262 | - | let | |
305 | + | let bn = bl._2 | |
263 | 306 | ||
264 | - | let | |
307 | + | let bo = bl._3 | |
265 | 308 | ||
266 | - | let | |
309 | + | let bp = bl._4 | |
267 | 310 | ||
268 | - | func aY (aZ,ba,bb) = { | |
269 | - | let bc = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "") | |
270 | - | let bd = (aQ / 2) | |
271 | - | func be (ax,bf) = { | |
272 | - | let bg = ax | |
273 | - | let ac = bg._1 | |
274 | - | let bh = bg._2 | |
275 | - | let bi = bg._3 | |
276 | - | let aC = bg._4 | |
277 | - | let s = bi | |
278 | - | if ($isInstanceOf(s, "Unit")) | |
311 | + | let bq = bl._5 | |
312 | + | ||
313 | + | let br = bl._6 | |
314 | + | ||
315 | + | func bs (bt,bu,bv) = { | |
316 | + | let bw = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "") | |
317 | + | let bx = (bi / 2) | |
318 | + | func by (aP,bz) = { | |
319 | + | let bA = aP | |
320 | + | let ao = bA._1 | |
321 | + | let bB = bA._2 | |
322 | + | let bC = bA._3 | |
323 | + | let aU = bA._4 | |
324 | + | let y = bC | |
325 | + | if ($isInstanceOf(y, "Unit")) | |
279 | 326 | then { | |
280 | - | let | |
281 | - | then $Tuple3( | |
282 | - | else value( | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | if (( | |
287 | - | then $Tuple4( | |
327 | + | let bD = if ((ao == height)) | |
328 | + | then $Tuple3(bt, bu, bv) | |
329 | + | else value(ah(ao)) | |
330 | + | let H = bD._1 | |
331 | + | let bE = bD._2 | |
332 | + | let bF = bD._3 | |
333 | + | if ((bE == 0)) | |
334 | + | then $Tuple4(ao, bB, bF, at) | |
288 | 335 | else { | |
289 | - | let | |
290 | - | then $Tuple2( | |
291 | - | else $Tuple2(( | |
292 | - | let | |
293 | - | let | |
294 | - | if (( | |
295 | - | then $Tuple4( | |
296 | - | else $Tuple4( | |
336 | + | let bG = if (containsElement(aU, H)) | |
337 | + | then $Tuple2(bB, aU) | |
338 | + | else $Tuple2((bB + T(H)), H :: aU) | |
339 | + | let bH = bG._1 | |
340 | + | let bI = bG._2 | |
341 | + | if ((bH > bx)) | |
342 | + | then $Tuple4(ao, bH, bF, at) | |
343 | + | else $Tuple4(bE, bH, unit, bI) | |
297 | 344 | } | |
298 | 345 | } | |
299 | - | else | |
346 | + | else aP | |
300 | 347 | } | |
301 | 348 | ||
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | func | |
307 | - | then | |
308 | - | else | |
349 | + | let bJ = { | |
350 | + | let aZ = (bw ++ bw) | |
351 | + | let ba = size(aZ) | |
352 | + | let bb = $Tuple4(height, 0, unit, nil) | |
353 | + | func bc (bd,be) = if ((be >= ba)) | |
354 | + | then bd | |
355 | + | else by(bd, aZ[be]) | |
309 | 356 | ||
310 | - | func | |
311 | - | then | |
357 | + | func bf (bd,be) = if ((be >= ba)) | |
358 | + | then bd | |
312 | 359 | else throw("List size exceeds 200") | |
313 | 360 | ||
314 | - | | |
361 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120), 121), 122), 123), 124), 125), 126), 127), 128), 129), 130), 131), 132), 133), 134), 135), 136), 137), 138), 139), 140), 141), 142), 143), 144), 145), 146), 147), 148), 149), 150), 151), 152), 153), 154), 155), 156), 157), 158), 159), 160), 161), 162), 163), 164), 165), 166), 167), 168), 169), 170), 171), 172), 173), 174), 175), 176), 177), 178), 179), 180), 181), 182), 183), 184), 185), 186), 187), 188), 189), 190), 191), 192), 193), 194), 195), 196), 197), 198), 199), 200) | |
315 | 362 | } | |
316 | - | let | |
317 | - | let | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | if ($isInstanceOf( | |
363 | + | let bK = bJ._1 | |
364 | + | let bB = bJ._2 | |
365 | + | let bL = bJ._3 | |
366 | + | let bM = bJ._4 | |
367 | + | let y = bL | |
368 | + | if ($isInstanceOf(y, "String")) | |
322 | 369 | then { | |
323 | - | let | |
324 | - | | |
370 | + | let bN = y | |
371 | + | bN | |
325 | 372 | } | |
326 | - | else value( | |
373 | + | else value(ah(bK))._3 | |
327 | 374 | } | |
328 | 375 | ||
329 | 376 | ||
330 | - | func | |
331 | - | func | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | if (containsElement( | |
337 | - | then | |
377 | + | func bO (E) = { | |
378 | + | func bP (bQ,bR) = { | |
379 | + | let bS = bQ | |
380 | + | let bB = bS._1 | |
381 | + | let bT = bS._2 | |
382 | + | let bU = addressFromStringValue(bR) | |
383 | + | if (containsElement(bT, bU)) | |
384 | + | then bQ | |
338 | 385 | else { | |
339 | - | let | |
340 | - | $Tuple2(( | |
386 | + | let bV = T(bU) | |
387 | + | $Tuple2((bB + bV), (bT :+ bU)) | |
341 | 388 | } | |
342 | 389 | } | |
343 | 390 | ||
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | func | |
350 | - | then | |
351 | - | else | |
391 | + | let bW = split_4C(getStringValue(J(E)), d) | |
392 | + | let bX = { | |
393 | + | let aZ = bW | |
394 | + | let ba = size(aZ) | |
395 | + | let bb = $Tuple2(0, nil) | |
396 | + | func bc (bd,be) = if ((be >= ba)) | |
397 | + | then bd | |
398 | + | else bP(bd, aZ[be]) | |
352 | 399 | ||
353 | - | func | |
354 | - | then | |
400 | + | func bf (bd,be) = if ((be >= ba)) | |
401 | + | then bd | |
355 | 402 | else throw("List size exceeds 100") | |
356 | 403 | ||
357 | - | | |
404 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
358 | 405 | } | |
359 | - | let | |
360 | - | let | |
361 | - | | |
406 | + | let bV = bX._1 | |
407 | + | let bY = bX._2 | |
408 | + | bV | |
362 | 409 | } | |
363 | 410 | ||
364 | 411 | ||
365 | - | func | |
412 | + | func bZ () = isDefined(getInteger(n)) | |
366 | 413 | ||
367 | 414 | ||
368 | - | func | |
369 | - | then throw(((((toBase58String( | |
415 | + | func ca (bU) = if ((toString(bU) != bh)) | |
416 | + | then throw(((((toBase58String(bU.bytes) + " is not allowed to mine in ") + toString(height)) + " epoch. Expected ") + bh)) | |
370 | 417 | else unit | |
371 | 418 | ||
372 | 419 | ||
373 | - | func | |
420 | + | func cb (cc,cd) = if ((cc == cd)) | |
374 | 421 | then unit | |
375 | - | else throw(((("Expected a reference to the chain last block: 0x" + | |
422 | + | else throw(((("Expected a reference to the chain last block: 0x" + cd) + ". Got: 0x") + cc)) | |
376 | 423 | ||
377 | 424 | ||
378 | - | func | |
379 | - | let | |
380 | - | let | |
381 | - | if (( | |
425 | + | func ce (E) = { | |
426 | + | let cf = getStringValue(D(E)) | |
427 | + | let cg = valueOrElse(getInteger(m), 0) | |
428 | + | if ((cg > E)) | |
382 | 429 | then true | |
383 | - | else ( | |
430 | + | else (av(getStringValue(q))._1 > av(cf)._1) | |
384 | 431 | } | |
385 | 432 | ||
386 | 433 | ||
387 | - | func | |
434 | + | func ch (H) = valueOrElse(getInteger(O(H)), getInteger(("chainIdOf" + toString(H)))) | |
388 | 435 | ||
389 | 436 | ||
390 | - | func | |
391 | - | let | |
392 | - | let | |
393 | - | if ($isInstanceOf( | |
437 | + | func ci (bU,cj,ck) = { | |
438 | + | let cl = { | |
439 | + | let y = ck | |
440 | + | if ($isInstanceOf(y, "String")) | |
394 | 441 | then { | |
395 | - | let | |
396 | - | let | |
397 | - | (( | |
442 | + | let aK = y | |
443 | + | let cm = aI(bU, ad) | |
444 | + | ((av(aK)._1 + 1) > cm) | |
398 | 445 | } | |
399 | 446 | else true | |
400 | 447 | } | |
401 | - | let | |
402 | - | if ($isInstanceOf( | |
448 | + | let y = ch(bU) | |
449 | + | if ($isInstanceOf(y, "Int")) | |
403 | 450 | then { | |
404 | - | let | |
405 | - | if (if (( | |
451 | + | let cn = y | |
452 | + | if (if ((cn == cj)) | |
406 | 453 | then true | |
407 | - | else if ( | |
408 | - | then | |
454 | + | else if (ce(cn)) | |
455 | + | then cl | |
409 | 456 | else false) | |
410 | 457 | then unit | |
411 | - | else throw(("miner is mining other chain " + toString( | |
458 | + | else throw(("miner is mining other chain " + toString(cn))) | |
412 | 459 | } | |
413 | 460 | else unit | |
414 | 461 | } | |
415 | 462 | ||
416 | 463 | ||
417 | - | func | |
464 | + | func co (C) = if ((C == height)) | |
418 | 465 | then unit | |
419 | - | else throw(((("Expected block from epoch " + toString(height)) + ". Got ") + toString( | |
466 | + | else throw(((("Expected block from epoch " + toString(height)) + ". Got ") + toString(C))) | |
420 | 467 | ||
421 | 468 | ||
422 | - | func | |
423 | - | let | |
424 | - | let | |
425 | - | if (containsElement( | |
469 | + | func cp (E,bU) = { | |
470 | + | let cq = getStringValue(J(E)) | |
471 | + | let cr = split_4C(cq, d) | |
472 | + | if (containsElement(cr, toString(bU))) | |
426 | 473 | then nil | |
427 | - | else [StringEntry( | |
474 | + | else [StringEntry(J(E), ((cq + d) + toString(bU)))] | |
428 | 475 | } | |
429 | 476 | ||
430 | 477 | ||
431 | - | func bY (bZ) = { | |
432 | - | let ca = fromBase16String(bZ) | |
433 | - | if ((size(ca) != 32)) | |
478 | + | func cs (ct,cu) = if ((0 > cu)) | |
479 | + | then throw(("Can't withdraw at negative index: " + toString(cu))) | |
480 | + | else { | |
481 | + | let cv = size(ct) | |
482 | + | if ((cu >= cv)) | |
483 | + | then { | |
484 | + | let cw = (cu - cv) | |
485 | + | if ((cw > size(h))) | |
486 | + | then throw((("Can't add " + toString(cw)) + " empty flags. Contact with developers")) | |
487 | + | else ((ct + take(h, cw)) + "1") | |
488 | + | } | |
489 | + | else { | |
490 | + | let cx = drop(ct, cu) | |
491 | + | let cy = take(cx, 1) | |
492 | + | if ((cy == "0")) | |
493 | + | then ((take(ct, cu) + "1") + drop(cx, 1)) | |
494 | + | else throw((("Transfer #" + toString(cu)) + " has been already taken")) | |
495 | + | } | |
496 | + | } | |
497 | + | ||
498 | + | ||
499 | + | func cz (cA) = { | |
500 | + | let cB = fromBase16String(cA) | |
501 | + | if ((size(cB) != 32)) | |
434 | 502 | then throw("invalid block id length") | |
435 | - | else | |
503 | + | else cA | |
436 | 504 | } | |
437 | 505 | ||
438 | 506 | ||
439 | - | func | |
440 | - | let | |
441 | - | let | |
442 | - | if (( | |
443 | - | then | |
444 | - | else | |
445 | - | ||
446 | - | ||
507 | + | func cC (cD,cE,bE) = { | |
508 | + | let cF = av(getStringValue(q))._1 | |
509 | + | let cG = bs(cD, bE, cE) | |
510 | + | if (if ((cG == cE)) | |
511 | + | then true | |
512 | + | else (av(cG)._1 > cF)) | |
513 | + | then [StringEntry(q, cG)] | |
514 | + | else nil | |
447 | 515 | } | |
448 | 516 | ||
449 | 517 | ||
450 | - | @Callable( | |
451 | - | func appendBlock ( | |
452 | - | | |
453 | - | | |
454 | - | if ( | |
518 | + | @Callable(w) | |
519 | + | func appendBlock (A,cH) = { | |
520 | + | let cI = Q() | |
521 | + | if ((cI == cI)) | |
522 | + | then if ((ap != w.originCaller)) | |
455 | 523 | then { | |
456 | - | let ci = s | |
457 | - | throw(("not allowed to forge blocks in this epoch, expected from " + toString(ci))) | |
524 | + | let y = ap | |
525 | + | if ($isInstanceOf(y, "Address")) | |
526 | + | then { | |
527 | + | let cJ = y | |
528 | + | throw(("not allowed to forge blocks in this epoch, expected from " + toString(cJ))) | |
529 | + | } | |
530 | + | else throw("not allowed to forge blocks in this epoch, epoch miner is absent") | |
458 | 531 | } | |
459 | - | else throw("not allowed to forge blocks in this epoch, epoch miner is absent") | |
460 | - | } | |
461 | - | else { | |
462 | - | let w = valueOrElse(bN(q.originCaller), R) | |
463 | - | let cj = P(w) | |
464 | - | let ck = cj._1 | |
465 | - | let cl = cj._2 | |
466 | - | let cm = bH(ch, cl) | |
467 | - | if ((cm == cm)) | |
468 | - | then { | |
469 | - | let cn = (ck + 1) | |
470 | - | let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(cl)) + q.originCaller.bytes) | |
471 | - | let as = bY(cg) | |
472 | - | [BinaryEntry((n + cg), co), IntegerEntry(y(w, q.originCaller), cn), StringEntry(x(w), ((toString(cn) + d) + cg)), StringEntry(t(height), ((((toString(value(ad)) + d) + toString(ae)) + d) + cg))] | |
532 | + | else { | |
533 | + | let E = valueOrElse(ch(w.originCaller), ad) | |
534 | + | let cK = ab(E) | |
535 | + | let cL = cK._1 | |
536 | + | let cM = cK._2 | |
537 | + | let cN = cb(cH, cM) | |
538 | + | if ((cN == cN)) | |
539 | + | then { | |
540 | + | let cO = (cL + 1) | |
541 | + | let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cM)) + w.originCaller.bytes) | |
542 | + | let cQ = cz(A) | |
543 | + | if ((cQ == cQ)) | |
544 | + | then [BinaryEntry((p + A), cP), IntegerEntry(G(E, w.originCaller), cO), StringEntry(F(E), ((toString(cO) + d) + A)), StringEntry(B(height), ((((toString(value(ap)) + d) + toString(aq)) + d) + A))] | |
545 | + | else throw("Strict value is not equal to itself.") | |
546 | + | } | |
547 | + | else throw("Strict value is not equal to itself.") | |
473 | 548 | } | |
474 | - | ||
475 | - | ||
549 | + | else throw("Strict value is not equal to itself.") | |
550 | + | } | |
476 | 551 | ||
477 | 552 | ||
478 | 553 | ||
479 | - | @Callable(q) | |
480 | - | func extendMainChain (cg,ch,u) = { | |
481 | - | let cp = bU(u) | |
482 | - | if ((cp == cp)) | |
554 | + | @Callable(w) | |
555 | + | func appendBlock_v2 (A,cH,aF) = { | |
556 | + | let cI = R() | |
557 | + | if ((cI == cI)) | |
558 | + | then if ((ap != w.originCaller)) | |
559 | + | then { | |
560 | + | let y = ap | |
561 | + | if ($isInstanceOf(y, "Address")) | |
562 | + | then { | |
563 | + | let cJ = y | |
564 | + | throw(("not allowed to forge blocks in this epoch, expected from " + toString(cJ))) | |
565 | + | } | |
566 | + | else throw("not allowed to forge blocks in this epoch, epoch miner is absent") | |
567 | + | } | |
568 | + | else { | |
569 | + | let E = valueOrElse(ch(w.originCaller), ad) | |
570 | + | let cR = ab(E) | |
571 | + | let cL = cR._1 | |
572 | + | let cM = cR._2 | |
573 | + | let cN = cb(cH, cM) | |
574 | + | if ((cN == cN)) | |
575 | + | then { | |
576 | + | let cO = (cL + 1) | |
577 | + | let cQ = cz(A) | |
578 | + | if ((cQ == cQ)) | |
579 | + | then [aD(A, cO, cM, w.originCaller, E, aF), IntegerEntry(G(E, w.originCaller), cO), StringEntry(F(E), ((toString(cO) + d) + A)), StringEntry(B(height), ((((toString(value(ap)) + d) + toString(aq)) + d) + A))] | |
580 | + | else throw("Strict value is not equal to itself.") | |
581 | + | } | |
582 | + | else throw("Strict value is not equal to itself.") | |
583 | + | } | |
584 | + | else throw("Strict value is not equal to itself.") | |
585 | + | } | |
586 | + | ||
587 | + | ||
588 | + | ||
589 | + | @Callable(w) | |
590 | + | func extendMainChain (A,cH,C) = { | |
591 | + | let cI = Q() | |
592 | + | if ((cI == cI)) | |
483 | 593 | then { | |
484 | - | let | |
485 | - | if (( | |
594 | + | let cQ = cz(A) | |
595 | + | if ((cQ == cQ)) | |
486 | 596 | then { | |
487 | - | let | |
488 | - | if (( | |
597 | + | let cS = co(C) | |
598 | + | if ((cS == cS)) | |
489 | 599 | then { | |
490 | - | let | |
491 | - | if (( | |
600 | + | let cT = ca(w.originCaller) | |
601 | + | if ((cT == cT)) | |
492 | 602 | then { | |
493 | - | let cs = { | |
494 | - | let s = V(height) | |
495 | - | if ($isInstanceOf(s, "Unit")) | |
496 | - | then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(aV)) + d) + cg)) | |
497 | - | else { | |
498 | - | let ct = s | |
499 | - | throw("Epoch already started") | |
500 | - | } | |
501 | - | } | |
502 | - | let cu = cb(q.originCaller, cg, aV) | |
503 | - | let cn = (T + 1) | |
504 | - | let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(U)) + q.originCaller.bytes) | |
505 | - | ([BinaryEntry((n + cg), co), StringEntry(x(R), ((toString(cn) + d) + cg)), IntegerEntry(F(q.originCaller), R), IntegerEntry(y(R, q.originCaller), cn), cs] ++ cu) | |
603 | + | let cU = ci(w.originCaller, ad, unit) | |
604 | + | if ((cU == cU)) | |
605 | + | then { | |
606 | + | let cN = cb(cH, ag) | |
607 | + | if ((cN == cN)) | |
608 | + | then { | |
609 | + | let cV = { | |
610 | + | let y = ah(height) | |
611 | + | if ($isInstanceOf(y, "Unit")) | |
612 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bn)) + d) + A)) | |
613 | + | else { | |
614 | + | let cW = y | |
615 | + | throw("Epoch already started") | |
616 | + | } | |
617 | + | } | |
618 | + | let cX = cC(w.originCaller, A, bn) | |
619 | + | let cO = (af + 1) | |
620 | + | let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(ag)) + w.originCaller.bytes) | |
621 | + | ([BinaryEntry((p + A), cP), StringEntry(F(ad), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), ad), IntegerEntry(G(ad, w.originCaller), cO), cV] ++ cX) | |
622 | + | } | |
623 | + | else throw("Strict value is not equal to itself.") | |
624 | + | } | |
625 | + | else throw("Strict value is not equal to itself.") | |
506 | 626 | } | |
507 | 627 | else throw("Strict value is not equal to itself.") | |
508 | 628 | } | |
515 | 635 | ||
516 | 636 | ||
517 | 637 | ||
518 | - | @Callable( | |
519 | - | func | |
520 | - | let | |
521 | - | if (( | |
638 | + | @Callable(w) | |
639 | + | func extendMainChain_v2 (A,cH,C,aF) = { | |
640 | + | let cI = R() | |
641 | + | if ((cI == cI)) | |
522 | 642 | then { | |
523 | - | let | |
524 | - | if (( | |
643 | + | let cQ = cz(A) | |
644 | + | if ((cQ == cQ)) | |
525 | 645 | then { | |
526 | - | let cv = aj(ch) | |
527 | - | let cw = cv._1 | |
528 | - | let cx = cv._2 | |
529 | - | let cy = cv._3 | |
530 | - | let cz = cv._4 | |
531 | - | let cA = aj(getStringValue(o))._2 | |
532 | - | let cB = if ((cx >= cA)) | |
533 | - | then cx | |
534 | - | else throw((((("can not start alt chain from epoch " + toString(cx)) + ", epoch ") + toString(cA)) + " is finalized")) | |
535 | - | let cr = bO(q.originCaller, R, ch) | |
536 | - | if ((cr == cr)) | |
646 | + | let cS = co(C) | |
647 | + | if ((cS == cS)) | |
537 | 648 | then { | |
538 | - | let cC = (valueOrElse(getInteger(j), 0) + 1) | |
539 | - | let cD = aj(ch)._1 | |
540 | - | let cn = (cD + 1) | |
541 | - | let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(ch)) + q.originCaller.bytes) | |
542 | - | let cs = { | |
543 | - | let s = V(height) | |
544 | - | if ($isInstanceOf(s, "Unit")) | |
545 | - | then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(cB)) + d) + cg)) | |
546 | - | else { | |
547 | - | let ct = s | |
548 | - | throw("Epoch already started") | |
549 | - | } | |
550 | - | } | |
551 | - | [cs, BinaryEntry((n + cg), co), StringEntry(v(cC), cg), StringEntry(x(cC), ((toString(cn) + d) + cg)), IntegerEntry(F(q.originCaller), cC), IntegerEntry(y(cC, q.originCaller), cn), IntegerEntry(y(R, q.originCaller), cD), StringEntry(A(cC), toString(q.originCaller)), IntegerEntry(j, cC)] | |
552 | - | } | |
553 | - | else throw("Strict value is not equal to itself.") | |
554 | - | } | |
555 | - | else throw("Strict value is not equal to itself.") | |
556 | - | } | |
557 | - | else throw("Strict value is not equal to itself.") | |
558 | - | } | |
559 | - | ||
560 | - | ||
561 | - | ||
562 | - | @Callable(q) | |
563 | - | func extendAltChain (w,cg,ch,u) = { | |
564 | - | let cp = bU(u) | |
565 | - | if ((cp == cp)) | |
566 | - | then { | |
567 | - | let cq = bG(q.originCaller) | |
568 | - | if ((cq == cq)) | |
569 | - | then { | |
570 | - | let cr = bO(q.originCaller, w, toBase16String(aj(getStringValue(v(w)))._3)) | |
571 | - | if ((cr == cr)) | |
572 | - | then { | |
573 | - | let cE = P(w) | |
574 | - | let ck = cE._1 | |
575 | - | let cF = cE._2 | |
576 | - | let cm = bH(ch, cF) | |
577 | - | if ((cm == cm)) | |
649 | + | let cT = ca(w.originCaller) | |
650 | + | if ((cT == cT)) | |
578 | 651 | then { | |
579 | - | let cn = (ck + 1) | |
580 | - | let bk = aj(ch)._2 | |
581 | - | let cG = if ((bu(w) > (aQ / 2))) | |
652 | + | let cU = ci(w.originCaller, ad, unit) | |
653 | + | if ((cU == cU)) | |
582 | 654 | then { | |
583 | - | let cu = cb(q.originCaller, cg, bk) | |
584 | - | ([IntegerEntry(i, w), IntegerEntry(k, (valueOrElse(getInteger(j), 0) + 1))] ++ cu) | |
655 | + | let cN = cb(cH, ag) | |
656 | + | if ((cN == cN)) | |
657 | + | then { | |
658 | + | let cV = { | |
659 | + | let y = ah(height) | |
660 | + | if ($isInstanceOf(y, "Unit")) | |
661 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bn)) + d) + A)) | |
662 | + | else { | |
663 | + | let cW = y | |
664 | + | throw("Epoch already started") | |
665 | + | } | |
666 | + | } | |
667 | + | let cX = cC(w.originCaller, A, bn) | |
668 | + | let cO = (af + 1) | |
669 | + | ([aD(A, cO, ag, w.originCaller, ad, aF), StringEntry(F(ad), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), ad), IntegerEntry(G(ad, w.originCaller), cO), cV] ++ cX) | |
670 | + | } | |
671 | + | else throw("Strict value is not equal to itself.") | |
585 | 672 | } | |
586 | - | else nil | |
587 | - | let cs = { | |
588 | - | let s = V(height) | |
589 | - | if ($isInstanceOf(s, "Unit")) | |
590 | - | then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(bk)) + d) + cg)) | |
591 | - | else { | |
592 | - | let ct = s | |
593 | - | throw("Epoch already started") | |
594 | - | } | |
595 | - | } | |
596 | - | let cH = if (if ((cG == nil)) | |
597 | - | then (valueOrElse(bN(q.originCaller), 0) != w) | |
598 | - | else false) | |
599 | - | then [IntegerEntry(y(R, q.originCaller), aj(getStringValue(v(w)))._1)] | |
600 | - | else nil | |
601 | - | let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(ch)) + q.originCaller.bytes) | |
602 | - | ((([BinaryEntry((n + cg), co), StringEntry(x(w), ((toString(cn) + d) + cg)), cs, IntegerEntry(F(q.originCaller), w), IntegerEntry(y(w, q.originCaller), cn)] ++ cG) ++ bV(w, q.originCaller)) ++ cH) | |
673 | + | else throw("Strict value is not equal to itself.") | |
603 | 674 | } | |
604 | 675 | else throw("Strict value is not equal to itself.") | |
605 | 676 | } | |
612 | 683 | ||
613 | 684 | ||
614 | 685 | ||
615 | - | @Callable(q) | |
616 | - | func join (E) = { | |
617 | - | func cI (I) = { | |
618 | - | let s = getBinary(D(I)) | |
619 | - | if ($isInstanceOf(s, "ByteVector")) | |
686 | + | @Callable(w) | |
687 | + | func startAltChain (A,cH,C) = { | |
688 | + | let cI = Q() | |
689 | + | if ((cI == cI)) | |
690 | + | then { | |
691 | + | let cQ = cz(A) | |
692 | + | if ((cQ == cQ)) | |
693 | + | then { | |
694 | + | let cS = co(C) | |
695 | + | if ((cS == cS)) | |
696 | + | then { | |
697 | + | let cT = ca(w.originCaller) | |
698 | + | if ((cT == cT)) | |
699 | + | then { | |
700 | + | let cY = av(cH) | |
701 | + | let cZ = cY._1 | |
702 | + | let da = cY._2 | |
703 | + | let db = cY._3 | |
704 | + | let dc = cY._4 | |
705 | + | let dd = cY._5 | |
706 | + | let de = cY._6 | |
707 | + | let df = av(getStringValue(q))._2 | |
708 | + | let dg = if ((da >= df)) | |
709 | + | then da | |
710 | + | else throw((((("can not start alt chain from epoch " + toString(da)) + ", epoch ") + toString(df)) + " is finalized")) | |
711 | + | let cU = ci(w.originCaller, ad, cH) | |
712 | + | if ((cU == cU)) | |
713 | + | then { | |
714 | + | let dh = (valueOrElse(getInteger(l), 0) + 1) | |
715 | + | let cO = (av(cH)._1 + 1) | |
716 | + | let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cH)) + w.originCaller.bytes) | |
717 | + | let cV = { | |
718 | + | let y = ah(height) | |
719 | + | if ($isInstanceOf(y, "Unit")) | |
720 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(dg)) + d) + A)) | |
721 | + | else { | |
722 | + | let cW = y | |
723 | + | throw("Epoch already started") | |
724 | + | } | |
725 | + | } | |
726 | + | [cV, BinaryEntry((p + A), cP), StringEntry(D(dh), A), StringEntry(F(dh), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), dh), IntegerEntry(G(dh, w.originCaller), cO), IntegerEntry(G(ad, w.originCaller), cO), StringEntry(J(dh), toString(w.originCaller)), IntegerEntry(l, dh)] | |
727 | + | } | |
728 | + | else throw("Strict value is not equal to itself.") | |
729 | + | } | |
730 | + | else throw("Strict value is not equal to itself.") | |
731 | + | } | |
732 | + | else throw("Strict value is not equal to itself.") | |
733 | + | } | |
734 | + | else throw("Strict value is not equal to itself.") | |
735 | + | } | |
736 | + | else throw("Strict value is not equal to itself.") | |
737 | + | } | |
738 | + | ||
739 | + | ||
740 | + | ||
741 | + | @Callable(w) | |
742 | + | func startAltChain_v2 (A,cH,C,aF) = { | |
743 | + | let cI = R() | |
744 | + | if ((cI == cI)) | |
745 | + | then { | |
746 | + | let cQ = cz(A) | |
747 | + | if ((cQ == cQ)) | |
748 | + | then { | |
749 | + | let cS = co(C) | |
750 | + | if ((cS == cS)) | |
751 | + | then { | |
752 | + | let cT = ca(w.originCaller) | |
753 | + | if ((cT == cT)) | |
754 | + | then { | |
755 | + | let di = av(cH) | |
756 | + | let cZ = di._1 | |
757 | + | let da = di._2 | |
758 | + | let db = di._3 | |
759 | + | let dc = di._4 | |
760 | + | let dd = di._5 | |
761 | + | let de = di._6 | |
762 | + | let df = av(getStringValue(q))._2 | |
763 | + | let dg = if ((da >= df)) | |
764 | + | then da | |
765 | + | else throw((((("can not start alt chain from epoch " + toString(da)) + ", epoch ") + toString(df)) + " is finalized")) | |
766 | + | let cU = ci(w.originCaller, ad, cH) | |
767 | + | if ((cU == cU)) | |
768 | + | then { | |
769 | + | let dh = (valueOrElse(getInteger(l), 0) + 1) | |
770 | + | let cO = (av(cH)._1 + 1) | |
771 | + | let cV = { | |
772 | + | let y = ah(height) | |
773 | + | if ($isInstanceOf(y, "Unit")) | |
774 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(dg)) + d) + A)) | |
775 | + | else { | |
776 | + | let cW = y | |
777 | + | throw("Epoch already started") | |
778 | + | } | |
779 | + | } | |
780 | + | [cV, aD(A, cO, cH, w.originCaller, dh, aF), StringEntry(D(dh), A), StringEntry(F(dh), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), dh), IntegerEntry(G(dh, w.originCaller), cO), IntegerEntry(G(ad, w.originCaller), cO), StringEntry(J(dh), toString(w.originCaller)), IntegerEntry(l, dh)] | |
781 | + | } | |
782 | + | else throw("Strict value is not equal to itself.") | |
783 | + | } | |
784 | + | else throw("Strict value is not equal to itself.") | |
785 | + | } | |
786 | + | else throw("Strict value is not equal to itself.") | |
787 | + | } | |
788 | + | else throw("Strict value is not equal to itself.") | |
789 | + | } | |
790 | + | else throw("Strict value is not equal to itself.") | |
791 | + | } | |
792 | + | ||
793 | + | ||
794 | + | ||
795 | + | @Callable(w) | |
796 | + | func extendAltChain (E,A,cH,C) = { | |
797 | + | let cI = Q() | |
798 | + | if ((cI == cI)) | |
799 | + | then { | |
800 | + | let cQ = cz(A) | |
801 | + | if ((cQ == cQ)) | |
802 | + | then { | |
803 | + | let cS = co(C) | |
804 | + | if ((cS == cS)) | |
805 | + | then { | |
806 | + | let cT = ca(w.originCaller) | |
807 | + | if ((cT == cT)) | |
808 | + | then { | |
809 | + | let dj = av(getStringValue(D(E))) | |
810 | + | let cU = ci(w.originCaller, E, toBase16String(dj._3)) | |
811 | + | if ((cU == cU)) | |
812 | + | then { | |
813 | + | let dk = ab(E) | |
814 | + | let cL = dk._1 | |
815 | + | let dl = dk._2 | |
816 | + | let cN = cb(cH, dl) | |
817 | + | if ((cN == cN)) | |
818 | + | then { | |
819 | + | let cO = (cL + 1) | |
820 | + | let bE = av(cH)._2 | |
821 | + | let dm = if ((bO(E) > (bi / 2))) | |
822 | + | then { | |
823 | + | let dn = valueOrElse(getInteger(l), 0) | |
824 | + | let cX = cC(w.originCaller, A, bE) | |
825 | + | ([IntegerEntry(I(ad), dj._1), IntegerEntry(k, E), IntegerEntry(m, (dn + 1))] ++ cX) | |
826 | + | } | |
827 | + | else nil | |
828 | + | let cV = { | |
829 | + | let y = ah(height) | |
830 | + | if ($isInstanceOf(y, "Unit")) | |
831 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bE)) + d) + A)) | |
832 | + | else { | |
833 | + | let cW = y | |
834 | + | throw("Epoch already started") | |
835 | + | } | |
836 | + | } | |
837 | + | let do = if (if ((dm == nil)) | |
838 | + | then (valueOrElse(ch(w.originCaller), 0) != E) | |
839 | + | else false) | |
840 | + | then [IntegerEntry(G(ad, w.originCaller), dj._1)] | |
841 | + | else nil | |
842 | + | let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cH)) + w.originCaller.bytes) | |
843 | + | ((([BinaryEntry((p + A), cP), StringEntry(F(E), ((toString(cO) + d) + A)), cV, IntegerEntry(O(w.originCaller), E), IntegerEntry(G(E, w.originCaller), cO)] ++ dm) ++ cp(E, w.originCaller)) ++ do) | |
844 | + | } | |
845 | + | else throw("Strict value is not equal to itself.") | |
846 | + | } | |
847 | + | else throw("Strict value is not equal to itself.") | |
848 | + | } | |
849 | + | else throw("Strict value is not equal to itself.") | |
850 | + | } | |
851 | + | else throw("Strict value is not equal to itself.") | |
852 | + | } | |
853 | + | else throw("Strict value is not equal to itself.") | |
854 | + | } | |
855 | + | else throw("Strict value is not equal to itself.") | |
856 | + | } | |
857 | + | ||
858 | + | ||
859 | + | ||
860 | + | @Callable(w) | |
861 | + | func extendAltChain_v2 (E,A,cH,C,aF) = { | |
862 | + | let cI = R() | |
863 | + | if ((cI == cI)) | |
864 | + | then { | |
865 | + | let cQ = cz(A) | |
866 | + | if ((cQ == cQ)) | |
867 | + | then { | |
868 | + | let cS = co(C) | |
869 | + | if ((cS == cS)) | |
870 | + | then { | |
871 | + | let cT = ca(w.originCaller) | |
872 | + | if ((cT == cT)) | |
873 | + | then { | |
874 | + | let dj = av(getStringValue(D(E))) | |
875 | + | let cU = ci(w.originCaller, E, toBase16String(dj._3)) | |
876 | + | if ((cU == cU)) | |
877 | + | then { | |
878 | + | let dp = ab(E) | |
879 | + | let cL = dp._1 | |
880 | + | let dl = dp._2 | |
881 | + | let cN = cb(cH, dl) | |
882 | + | if ((cN == cN)) | |
883 | + | then { | |
884 | + | let cO = (cL + 1) | |
885 | + | let bE = av(cH)._2 | |
886 | + | let dm = if ((bO(E) > (bi / 2))) | |
887 | + | then { | |
888 | + | let dn = valueOrElse(getInteger(l), 0) | |
889 | + | let cX = cC(w.originCaller, A, bE) | |
890 | + | ([IntegerEntry(I(ad), dj._1), IntegerEntry(k, E), IntegerEntry(m, (dn + 1))] ++ cX) | |
891 | + | } | |
892 | + | else nil | |
893 | + | let cV = { | |
894 | + | let y = ah(height) | |
895 | + | if ($isInstanceOf(y, "Unit")) | |
896 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bE)) + d) + A)) | |
897 | + | else { | |
898 | + | let cW = y | |
899 | + | throw("Epoch already started") | |
900 | + | } | |
901 | + | } | |
902 | + | let do = if (if ((dm == nil)) | |
903 | + | then (valueOrElse(ch(w.originCaller), 0) != E) | |
904 | + | else false) | |
905 | + | then [IntegerEntry(G(ad, w.originCaller), dj._1)] | |
906 | + | else nil | |
907 | + | ((([aD(A, cO, cH, w.originCaller, E, aF), StringEntry(F(E), ((toString(cO) + d) + A)), cV, IntegerEntry(O(w.originCaller), E), IntegerEntry(G(E, w.originCaller), cO)] ++ dm) ++ cp(E, w.originCaller)) ++ do) | |
908 | + | } | |
909 | + | else throw("Strict value is not equal to itself.") | |
910 | + | } | |
911 | + | else throw("Strict value is not equal to itself.") | |
912 | + | } | |
913 | + | else throw("Strict value is not equal to itself.") | |
914 | + | } | |
915 | + | else throw("Strict value is not equal to itself.") | |
916 | + | } | |
917 | + | else throw("Strict value is not equal to itself.") | |
918 | + | } | |
919 | + | else throw("Strict value is not equal to itself.") | |
920 | + | } | |
921 | + | ||
922 | + | ||
923 | + | ||
924 | + | @Callable(w) | |
925 | + | func join (N) = { | |
926 | + | func dq (U) = { | |
927 | + | let y = getBinary(M(U)) | |
928 | + | if ($isInstanceOf(y, "ByteVector")) | |
620 | 929 | then { | |
621 | - | let | |
622 | - | if (( | |
930 | + | let dr = y | |
931 | + | if ((dr == w.originCallerPublicKey)) | |
623 | 932 | then unit | |
624 | - | else throw(((("L2 miner address " + | |
933 | + | else throw(((("L2 miner address " + U) + " is already linked with ") + toBase58String(dr))) | |
625 | 934 | } | |
626 | 935 | else unit | |
627 | 936 | } | |
628 | 937 | ||
629 | - | if (!( | |
938 | + | if (!(bZ())) | |
630 | 939 | then throw("The contract has not yet set up") | |
631 | - | else if ((c > wavesBalance( | |
632 | - | then throw(((("Insufficient generating balance: " + toString(wavesBalance( | |
633 | - | else if ((size( | |
940 | + | else if ((c > wavesBalance(w.originCaller).generating)) | |
941 | + | then throw(((("Insufficient generating balance: " + toString(wavesBalance(w.originCaller).generating)) + ". Required: ") + toString(c))) | |
942 | + | else if ((size(N) != 20)) | |
634 | 943 | then throw("rewardAddress should be an L2 address") | |
635 | - | else if ((size( | |
944 | + | else if ((size(at) >= 50)) | |
636 | 945 | then throw("too many miners") | |
637 | 946 | else { | |
638 | - | func | |
947 | + | func ds (dt,H) = if (dt) | |
639 | 948 | then true | |
640 | - | else ( | |
949 | + | else (H == toString(w.originCaller)) | |
641 | 950 | ||
642 | - | let | |
643 | - | let | |
644 | - | let | |
645 | - | let | |
646 | - | func | |
647 | - | then | |
648 | - | else | |
951 | + | let du = { | |
952 | + | let aZ = at | |
953 | + | let ba = size(aZ) | |
954 | + | let bb = false | |
955 | + | func bc (bd,be) = if ((be >= ba)) | |
956 | + | then bd | |
957 | + | else ds(bd, aZ[be]) | |
649 | 958 | ||
650 | - | func | |
651 | - | then | |
959 | + | func bf (bd,be) = if ((be >= ba)) | |
960 | + | then bd | |
652 | 961 | else throw("List size exceeds 50") | |
653 | 962 | ||
654 | - | | |
963 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
655 | 964 | } | |
656 | - | if ( | |
965 | + | if (du) | |
657 | 966 | then nil | |
658 | 967 | else { | |
659 | - | let | |
660 | - | let | |
661 | - | let | |
662 | - | if (( | |
968 | + | let dv = toString(w.originCaller) | |
969 | + | let dw = toBase16String(N) | |
970 | + | let dx = dq(dw) | |
971 | + | if ((dx == dx)) | |
663 | 972 | then { | |
664 | - | let | |
665 | - | then | |
666 | - | else (( | |
667 | - | let | |
668 | - | let | |
669 | - | if ($isInstanceOf( | |
973 | + | let bI = if ((size(at) == 0)) | |
974 | + | then dv | |
975 | + | else ((as + d) + dv) | |
976 | + | let dy = { | |
977 | + | let y = getString(K(dv)) | |
978 | + | if ($isInstanceOf(y, "String")) | |
670 | 979 | then { | |
671 | - | let | |
672 | - | if (( | |
980 | + | let dz = y | |
981 | + | if ((dz == toBase16String(N))) | |
673 | 982 | then nil | |
674 | - | else [DeleteEntry( | |
983 | + | else [DeleteEntry(M(dz))] | |
675 | 984 | } | |
676 | 985 | else nil | |
677 | 986 | } | |
678 | - | ([StringEntry( | |
987 | + | ([StringEntry(j, bI), StringEntry(K(dv), ("0x" + dw)), BinaryEntry(M(dw), w.originCallerPublicKey)] ++ dy) | |
679 | 988 | } | |
680 | 989 | else throw("Strict value is not equal to itself.") | |
681 | 990 | } | |
684 | 993 | ||
685 | 994 | ||
686 | 995 | ||
687 | - | @Callable( | |
996 | + | @Callable(w) | |
688 | 997 | func leave () = { | |
689 | - | let | |
690 | - | func | |
691 | - | then | |
692 | - | else ( | |
998 | + | let dA = toString(w.originCaller) | |
999 | + | func dB (bQ,H) = if ((H == dA)) | |
1000 | + | then bQ | |
1001 | + | else (bQ :+ H) | |
693 | 1002 | ||
694 | - | let | |
695 | - | let | |
696 | - | let | |
697 | - | let | |
698 | - | func | |
699 | - | then | |
700 | - | else | |
1003 | + | let dC = { | |
1004 | + | let aZ = at | |
1005 | + | let ba = size(aZ) | |
1006 | + | let bb = nil | |
1007 | + | func bc (bd,be) = if ((be >= ba)) | |
1008 | + | then bd | |
1009 | + | else dB(bd, aZ[be]) | |
701 | 1010 | ||
702 | - | func | |
703 | - | then | |
1011 | + | func bf (bd,be) = if ((be >= ba)) | |
1012 | + | then bd | |
704 | 1013 | else throw("List size exceeds 50") | |
705 | 1014 | ||
706 | - | | |
1015 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
707 | 1016 | } | |
708 | - | let | |
709 | - | let | |
710 | - | if (( | |
1017 | + | let dD = K(dA) | |
1018 | + | let dE = valueOrErrorMessage(getString(this, dD), "miner has never joined") | |
1019 | + | if ((ap == w.originCaller)) | |
711 | 1020 | then throw("designated miner can't leave") | |
712 | - | else [StringEntry( | |
1021 | + | else [StringEntry(j, makeString_2C(dC, d)), DeleteEntry(dD), DeleteEntry(M(dE))] | |
713 | 1022 | } | |
714 | 1023 | ||
715 | 1024 | ||
716 | 1025 | ||
717 | - | @Callable(q) | |
718 | - | func setup (cX,cY,cZ) = if (bF()) | |
1026 | + | @Callable(w) | |
1027 | + | func withdraw (A,dF,dG,dH) = { | |
1028 | + | let dI = R() | |
1029 | + | if ((dI == dI)) | |
1030 | + | then { | |
1031 | + | let dJ = av(A) | |
1032 | + | let dK = dJ._1 | |
1033 | + | let dL = av(getStringValue(q))._1 | |
1034 | + | let dM = av(ag)._1 | |
1035 | + | if ((dK > dL)) | |
1036 | + | then throw(((("EL block #" + toString(dK)) + " is not finalized. The current finalized is #") + toString(dL))) | |
1037 | + | else { | |
1038 | + | let dN = dJ._5 | |
1039 | + | let dO = (dN == ad) | |
1040 | + | let dP = { | |
1041 | + | let y = getInteger(I(dN)) | |
1042 | + | if ($isInstanceOf(y, "Int")) | |
1043 | + | then { | |
1044 | + | let dQ = y | |
1045 | + | (dQ > dK) | |
1046 | + | } | |
1047 | + | else throw((((A + " is on an alternative chain #") + toString(dN)) + " that was not approved by majority. Wait for some blocks")) | |
1048 | + | } | |
1049 | + | if (if (dO) | |
1050 | + | then true | |
1051 | + | else dP) | |
1052 | + | then { | |
1053 | + | let dR = w.originCaller | |
1054 | + | let dS = take(drop(dR.bytes, 2), g) | |
1055 | + | let dT = base58'11111111111111111111111111111111111111111111' | |
1056 | + | let dU = toBytes(dH) | |
1057 | + | let dV = ((dS + take(dT, (size(dT) - size(dU)))) + dU) | |
1058 | + | let dW = blake2b256_16Kb(dV) | |
1059 | + | let dX = createMerkleRoot(dF, dW, dG) | |
1060 | + | let dY = dJ._6 | |
1061 | + | if ((dX == dY)) | |
1062 | + | then { | |
1063 | + | let dZ = fromBase58String(getStringValue(r)) | |
1064 | + | let ea = z(A) | |
1065 | + | [Reissue(dZ, dH, true), ScriptTransfer(dR, dH, dZ), StringEntry(ea, cs(valueOrElse(getString(ea), ""), dG))] | |
1066 | + | } | |
1067 | + | else throw(((((("Expected root hash: " + toBase16String(dY)) + ", got: ") + toBase16String(dX)) + ". Event data digest: ") + toBase64String(dW))) | |
1068 | + | } | |
1069 | + | else throw((("Expected " + A) + " to be either on the main chain or relate to it")) | |
1070 | + | } | |
1071 | + | } | |
1072 | + | else throw("Strict value is not equal to itself.") | |
1073 | + | } | |
1074 | + | ||
1075 | + | ||
1076 | + | ||
1077 | + | @Callable(w) | |
1078 | + | func setup (eb,ec,ed,ee) = if (bZ()) | |
719 | 1079 | then throw("The contract has been already set up") | |
1080 | + | else if ((0 > ec)) | |
1081 | + | then throw("The miner reward must be nonnegative") | |
1082 | + | else { | |
1083 | + | let ef = fromBase16String(eb) | |
1084 | + | let eg = base58'11111111111111111111111111111111' | |
1085 | + | let eh = addressFromPublicKey(eg) | |
1086 | + | let ei = base58'11111111111111111111' | |
1087 | + | let ej = "0000000000000000000000000000000000000000000000000000000000000000" | |
1088 | + | let ek = Issue("UNIT0", "Native token", 0, 8, true) | |
1089 | + | let dZ = calculateAssetId(ek) | |
1090 | + | [aD(eb, 0, ej, eh, ad, ""), StringEntry(D(0), eb), StringEntry(F(0), ("0," + eb)), IntegerEntry(n, ec), StringEntry(o, ed), StringEntry(B(height), ((toString(eh) + ",0,") + eb)), StringEntry(q, eb), IntegerEntry(t, 0), IntegerEntry(u, 0), ek, StringEntry(r, toBase58String(dZ)), StringEntry(s, ("0x" + ee))] | |
1091 | + | } | |
1092 | + | ||
1093 | + | ||
1094 | + | ||
1095 | + | @Callable(w) | |
1096 | + | func setupElToClTransfers (el,ee) = if (isDefined(getInteger(u))) | |
1097 | + | then throw("EL to CL transfers feature was set up") | |
720 | 1098 | else { | |
721 | - | let da = fromBase16String(cX) | |
722 | - | let db = base58'11111111111111111111111111111111' | |
723 | - | let dc = addressFromPublicKey(db) | |
724 | - | let dd = base58'11111111111111111111' | |
725 | - | let de = base58'11111111111111111111111111111111' | |
726 | - | let df = (((toBytes(0) + toBytes(height)) + de) + dc.bytes) | |
727 | - | [BinaryEntry((n + cX), df), StringEntry(v(0), cX), StringEntry(x(0), ("0," + cX)), IntegerEntry(l, cY), StringEntry(m, cZ), StringEntry(t(height), ((toString(dc) + ",0,") + cX)), StringEntry(o, cX)] | |
1099 | + | let ek = Issue("UNIT0", "Native token", 0, 8, true) | |
1100 | + | let dZ = calculateAssetId(ek) | |
1101 | + | [IntegerEntry(u, el), ek, StringEntry(r, toBase58String(dZ)), StringEntry(s, ("0x" + ee))] | |
728 | 1102 | } | |
729 | 1103 | ||
730 | 1104 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 8 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 9223372036854775807 | |
5 | 5 | ||
6 | 6 | let b = 100000000 | |
7 | 7 | ||
8 | 8 | let c = (20000 * b) | |
9 | 9 | ||
10 | 10 | let d = "," | |
11 | 11 | ||
12 | 12 | let e = 32 | |
13 | 13 | ||
14 | 14 | let f = 26 | |
15 | 15 | ||
16 | - | let g = | |
16 | + | let g = 20 | |
17 | 17 | ||
18 | - | let h = " | |
18 | + | let h = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" | |
19 | 19 | ||
20 | - | let i = " | |
20 | + | let i = "thisEpochData" | |
21 | 21 | ||
22 | - | let j = " | |
22 | + | let j = "allMiners" | |
23 | 23 | ||
24 | - | let k = " | |
24 | + | let k = "mainChainId" | |
25 | 25 | ||
26 | - | let l = " | |
26 | + | let l = "lastChainId" | |
27 | 27 | ||
28 | - | let m = " | |
28 | + | let m = "firstValidAltChainId" | |
29 | 29 | ||
30 | - | let n = " | |
30 | + | let n = "minerReward" | |
31 | 31 | ||
32 | - | let o = " | |
32 | + | let o = "stakingContractAddress" | |
33 | 33 | ||
34 | - | func p (q) = { | |
35 | - | let r = toString(q) | |
36 | - | let s = size(r) | |
37 | - | if ((1 == s)) | |
38 | - | then ("0000000" + r) | |
39 | - | else if ((2 == s)) | |
40 | - | then ("000000" + r) | |
41 | - | else if ((3 == s)) | |
42 | - | then ("00000" + r) | |
43 | - | else if ((4 == s)) | |
44 | - | then ("0000" + r) | |
45 | - | else if ((5 == s)) | |
46 | - | then ("000" + r) | |
47 | - | else if ((6 == s)) | |
48 | - | then ("00" + r) | |
49 | - | else if ((7 == s)) | |
50 | - | then ("0" + r) | |
51 | - | else r | |
34 | + | let p = "block_0x" | |
35 | + | ||
36 | + | let q = "finalizedBlock" | |
37 | + | ||
38 | + | let r = "tokenId" | |
39 | + | ||
40 | + | let s = "elBridgeAddress" | |
41 | + | ||
42 | + | let t = "prevRandaoHeight" | |
43 | + | ||
44 | + | let u = "elToClTransfersEpoch" | |
45 | + | ||
46 | + | func v (w) = { | |
47 | + | let x = toString(w) | |
48 | + | let y = size(x) | |
49 | + | if ((1 == y)) | |
50 | + | then ("0000000" + x) | |
51 | + | else if ((2 == y)) | |
52 | + | then ("000000" + x) | |
53 | + | else if ((3 == y)) | |
54 | + | then ("00000" + x) | |
55 | + | else if ((4 == y)) | |
56 | + | then ("0000" + x) | |
57 | + | else if ((5 == y)) | |
58 | + | then ("000" + x) | |
59 | + | else if ((6 == y)) | |
60 | + | then ("00" + x) | |
61 | + | else if ((7 == y)) | |
62 | + | then ("0" + x) | |
63 | + | else x | |
52 | 64 | } | |
53 | 65 | ||
54 | 66 | ||
55 | - | func | |
67 | + | func z (A) = ("elToClTransfers_0x" + A) | |
56 | 68 | ||
57 | 69 | ||
58 | - | func | |
70 | + | func B (C) = ("epoch_" + v(C)) | |
59 | 71 | ||
60 | 72 | ||
61 | - | func | |
73 | + | func D (E) = (("chain" + toString(E)) + "FirstBlock") | |
62 | 74 | ||
63 | 75 | ||
64 | - | func | |
76 | + | func F (E) = ("chain_" + v(E)) | |
65 | 77 | ||
66 | 78 | ||
67 | - | func | |
79 | + | func G (E,H) = ((("chain_" + v(E)) + "_") + toString(H)) | |
68 | 80 | ||
69 | 81 | ||
70 | - | func | |
82 | + | func I (E) = (("chain_" + v(E)) + "ForkedHeight") | |
71 | 83 | ||
72 | 84 | ||
73 | - | func | |
85 | + | func J (E) = (("chain" + toString(E)) + "Supporters") | |
74 | 86 | ||
75 | 87 | ||
76 | - | func | |
88 | + | func K (L) = (("miner_" + L) + "_RewardAddress") | |
77 | 89 | ||
78 | 90 | ||
79 | - | let G = { | |
80 | - | let s = getString(this, m) | |
81 | - | if ($isInstanceOf(s, "String")) | |
91 | + | func M (N) = (("miner_0x" + N) + "_PK") | |
92 | + | ||
93 | + | ||
94 | + | func O (H) = (("miner_" + toString(H)) + "_ChainId") | |
95 | + | ||
96 | + | ||
97 | + | let P = valueOrElse(getInteger(this, u), a) | |
98 | + | ||
99 | + | func Q () = if ((P > height)) | |
100 | + | then unit | |
101 | + | else throw((("EL to CL transfers activated on epoch #" + toString(height)) + ". Upgrade your client")) | |
102 | + | ||
103 | + | ||
104 | + | func R () = if ((height >= P)) | |
105 | + | then unit | |
106 | + | else throw(((("EL to CL transfers haven't activated on epoch #" + toString(height)) + ". Wait for activation on #") + toString(P))) | |
107 | + | ||
108 | + | ||
109 | + | let S = { | |
110 | + | let y = getString(this, o) | |
111 | + | if ($isInstanceOf(y, "String")) | |
82 | 112 | then { | |
83 | - | let | |
84 | - | valueOrErrorMessage(addressFromString( | |
113 | + | let x = y | |
114 | + | valueOrErrorMessage(addressFromString(x), ("invalid staking contract address: " + x)) | |
85 | 115 | } | |
86 | - | else Address(getBinaryValue(this, | |
116 | + | else Address(getBinaryValue(this, o)) | |
87 | 117 | } | |
88 | 118 | ||
89 | - | func | |
90 | - | let | |
91 | - | if ($isInstanceOf( | |
119 | + | func T (U) = { | |
120 | + | let y = getString(S, ("%s__" + toString(U))) | |
121 | + | if ($isInstanceOf(y, "String")) | |
92 | 122 | then { | |
93 | - | let | |
94 | - | let | |
95 | - | let | |
96 | - | let | |
97 | - | let | |
98 | - | let | |
99 | - | if ((height >= | |
100 | - | then | |
101 | - | else if ((height >= | |
102 | - | then | |
123 | + | let V = y | |
124 | + | let W = split(V, "__") | |
125 | + | let X = parseIntValue(W[1]) | |
126 | + | let Y = parseIntValue(W[2]) | |
127 | + | let Z = parseIntValue(W[3]) | |
128 | + | let aa = parseIntValue(W[4]) | |
129 | + | if ((height >= Z)) | |
130 | + | then aa | |
131 | + | else if ((height >= X)) | |
132 | + | then Y | |
103 | 133 | else 0 | |
104 | 134 | } | |
105 | 135 | else 0 | |
106 | 136 | } | |
107 | 137 | ||
108 | 138 | ||
109 | - | func | |
110 | - | let | |
111 | - | let | |
112 | - | $Tuple2(parseIntValue( | |
139 | + | func ab (E) = { | |
140 | + | let x = getStringValue(F(E)) | |
141 | + | let ac = split(x, d) | |
142 | + | $Tuple2(parseIntValue(ac[0]), ac[1]) | |
113 | 143 | } | |
114 | 144 | ||
115 | 145 | ||
116 | - | let | |
146 | + | let ad = valueOrElse(getInteger(k), 0) | |
117 | 147 | ||
118 | - | let | |
148 | + | let ae = ab(ad) | |
119 | 149 | ||
120 | - | let | |
150 | + | let af = ae._1 | |
121 | 151 | ||
122 | - | let | |
152 | + | let ag = ae._2 | |
123 | 153 | ||
124 | - | func | |
125 | - | let | |
126 | - | if ($isInstanceOf( | |
154 | + | func ah (C) = { | |
155 | + | let y = getString(B(C)) | |
156 | + | if ($isInstanceOf(y, "String")) | |
127 | 157 | then { | |
128 | - | let | |
129 | - | let | |
130 | - | $Tuple3(addressFromStringValue( | |
158 | + | let x = y | |
159 | + | let ai = split(x, d) | |
160 | + | $Tuple3(addressFromStringValue(ai[0]), parseIntValue(ai[1]), ai[2]) | |
131 | 161 | } | |
132 | 162 | else unit | |
133 | 163 | } | |
134 | 164 | ||
135 | 165 | ||
136 | - | let | |
137 | - | let | |
138 | - | if ($isInstanceOf( | |
166 | + | let aj = { | |
167 | + | let y = ah(height) | |
168 | + | if ($isInstanceOf(y, "(Address, Int, String)")) | |
139 | 169 | then { | |
140 | - | let | |
141 | - | | |
170 | + | let ak = y | |
171 | + | ak | |
142 | 172 | } | |
143 | 173 | else { | |
144 | - | let | |
145 | - | if ($isInstanceOf( | |
174 | + | let al = getString(i) | |
175 | + | if ($isInstanceOf(al, "String")) | |
146 | 176 | then { | |
147 | - | let | |
148 | - | let | |
149 | - | let | |
150 | - | $Tuple3(if (( | |
151 | - | then addressFromStringValue( | |
177 | + | let am = al | |
178 | + | let an = split(am, d) | |
179 | + | let ao = parseIntValue(an[0]) | |
180 | + | $Tuple3(if ((ao == height)) | |
181 | + | then addressFromStringValue(an[1]) | |
152 | 182 | else unit, 0, "") | |
153 | 183 | } | |
154 | 184 | else $Tuple3(unit, 0, "") | |
155 | 185 | } | |
156 | 186 | } | |
157 | 187 | ||
158 | - | let | |
188 | + | let ap = aj._1 | |
159 | 189 | ||
160 | - | let | |
190 | + | let aq = aj._2 | |
161 | 191 | ||
162 | - | let | |
192 | + | let ar = aj._3 | |
163 | 193 | ||
164 | - | let | |
194 | + | let as = valueOrElse(getString(j), "") | |
165 | 195 | ||
166 | - | let | |
167 | - | let | |
168 | - | if (("" == | |
196 | + | let at = { | |
197 | + | let y = as | |
198 | + | if (("" == y)) | |
169 | 199 | then nil | |
170 | - | else if ($isInstanceOf( | |
200 | + | else if ($isInstanceOf(y, "String")) | |
171 | 201 | then { | |
172 | - | let | |
173 | - | split_4C( | |
202 | + | let au = y | |
203 | + | split_4C(au, d) | |
174 | 204 | } | |
175 | 205 | else throw("Match error") | |
176 | 206 | } | |
177 | 207 | ||
178 | - | func aj (ak) = { | |
179 | - | let al = getBinaryValue((n + ak)) | |
180 | - | let am = toInt(al) | |
181 | - | let an = toInt(al, 8) | |
182 | - | let ao = take(drop(al, 16), e) | |
183 | - | let ap = takeRight(al, f) | |
184 | - | $Tuple4(am, an, ao, ap) | |
185 | - | } | |
186 | - | ||
187 | - | ||
188 | - | func aq (z,w) = { | |
189 | - | let s = getInteger(y(w, z)) | |
190 | - | if ($isInstanceOf(s, "Int")) | |
191 | - | then { | |
192 | - | let ar = s | |
193 | - | ar | |
194 | - | } | |
208 | + | func av (aw) = { | |
209 | + | let ax = getBinaryValue((p + aw)) | |
210 | + | let ay = toInt(ax) | |
211 | + | let az = toInt(ax, 8) | |
212 | + | let aA = take(drop(ax, 16), e) | |
213 | + | let aB = take(drop(ax, (16 + e)), f) | |
214 | + | if ((P > az)) | |
215 | + | then $Tuple6(ay, az, aA, aB, 0, base58'') | |
195 | 216 | else { | |
196 | - | let as = getStringValue(((("chain" + toString(w)) + "LastMinedBy") + toString(z))) | |
197 | - | aj(as)._1 | |
217 | + | let E = toInt(drop(ax, ((16 + e) + f))) | |
218 | + | let aC = drop(ax, ((24 + e) + f)) | |
219 | + | $Tuple6(ay, az, aA, aB, E, aC) | |
198 | 220 | } | |
199 | 221 | } | |
200 | 222 | ||
201 | 223 | ||
202 | - | let at = { | |
203 | - | let au = { | |
204 | - | let s = lastBlock.vrf | |
205 | - | if ($isInstanceOf(s, "ByteVector")) | |
224 | + | func aD (A,ay,aE,aB,E,aF) = { | |
225 | + | let aG = toBytes(height) | |
226 | + | let aH = (((((toBytes(ay) + aG) + fromBase16String(aE)) + aB.bytes) + toBytes(E)) + fromBase16String(aF)) | |
227 | + | BinaryEntry((p + A), aH) | |
228 | + | } | |
229 | + | ||
230 | + | ||
231 | + | func aI (H,E) = { | |
232 | + | let y = getInteger(G(E, H)) | |
233 | + | if ($isInstanceOf(y, "Int")) | |
234 | + | then { | |
235 | + | let aJ = y | |
236 | + | aJ | |
237 | + | } | |
238 | + | else { | |
239 | + | let aK = getStringValue(((("chain" + toString(E)) + "LastMinedBy") + toString(H))) | |
240 | + | av(aK)._1 | |
241 | + | } | |
242 | + | } | |
243 | + | ||
244 | + | ||
245 | + | let aL = { | |
246 | + | let aM = { | |
247 | + | let y = lastBlock.vrf | |
248 | + | if ($isInstanceOf(y, "ByteVector")) | |
206 | 249 | then { | |
207 | - | let | |
208 | - | | |
250 | + | let aN = y | |
251 | + | aN | |
209 | 252 | } | |
210 | 253 | else lastBlock.generationSignature | |
211 | 254 | } | |
212 | - | func | |
213 | - | let | |
214 | - | let | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | let | |
220 | - | let | |
221 | - | if (if ((c > | |
255 | + | func aO (aP,H) = { | |
256 | + | let aQ = aP | |
257 | + | let aR = aQ._1 | |
258 | + | let aS = aQ._2 | |
259 | + | let aT = aQ._3 | |
260 | + | let aU = aQ._4 | |
261 | + | let aV = addressFromStringValue(H) | |
262 | + | let aW = wavesBalance(aV).generating | |
263 | + | let aX = T(aV) | |
264 | + | if (if ((c > aW)) | |
222 | 265 | then true | |
223 | - | else (0 >= | |
224 | - | then | |
266 | + | else (0 >= aX)) | |
267 | + | then aP | |
225 | 268 | else { | |
226 | - | let | |
227 | - | if (( | |
228 | - | then $Tuple4( | |
229 | - | else $Tuple4( | |
269 | + | let aY = calculateDelay(aV, aX) | |
270 | + | if ((aR > aY)) | |
271 | + | then $Tuple4(aY, H, (aT + aX), (aU :+ H)) | |
272 | + | else $Tuple4(aR, aS, (aT + aX), (aU :+ H)) | |
230 | 273 | } | |
231 | 274 | } | |
232 | 275 | ||
233 | - | let | |
234 | - | let | |
235 | - | let | |
236 | - | func | |
237 | - | then | |
238 | - | else | |
276 | + | let aZ = at | |
277 | + | let ba = size(aZ) | |
278 | + | let bb = $Tuple4(a, "", 0, nil) | |
279 | + | func bc (bd,be) = if ((be >= ba)) | |
280 | + | then bd | |
281 | + | else aO(bd, aZ[be]) | |
239 | 282 | ||
240 | - | func | |
241 | - | then | |
283 | + | func bf (bd,be) = if ((be >= ba)) | |
284 | + | then bd | |
242 | 285 | else throw("List size exceeds 50") | |
243 | 286 | ||
244 | - | | |
287 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
245 | 288 | } | |
246 | 289 | ||
247 | - | let | |
290 | + | let bg = aL._1 | |
248 | 291 | ||
249 | - | let | |
292 | + | let bh = aL._2 | |
250 | 293 | ||
251 | - | let | |
294 | + | let bi = aL._3 | |
252 | 295 | ||
253 | - | let | |
296 | + | let bj = aL._4 | |
254 | 297 | ||
255 | - | func | |
298 | + | func bk (E) = ab(E)._2 | |
256 | 299 | ||
257 | 300 | ||
258 | - | let | |
301 | + | let bl = av(ag) | |
259 | 302 | ||
260 | - | let | |
303 | + | let bm = bl._1 | |
261 | 304 | ||
262 | - | let | |
305 | + | let bn = bl._2 | |
263 | 306 | ||
264 | - | let | |
307 | + | let bo = bl._3 | |
265 | 308 | ||
266 | - | let | |
309 | + | let bp = bl._4 | |
267 | 310 | ||
268 | - | func aY (aZ,ba,bb) = { | |
269 | - | let bc = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "") | |
270 | - | let bd = (aQ / 2) | |
271 | - | func be (ax,bf) = { | |
272 | - | let bg = ax | |
273 | - | let ac = bg._1 | |
274 | - | let bh = bg._2 | |
275 | - | let bi = bg._3 | |
276 | - | let aC = bg._4 | |
277 | - | let s = bi | |
278 | - | if ($isInstanceOf(s, "Unit")) | |
311 | + | let bq = bl._5 | |
312 | + | ||
313 | + | let br = bl._6 | |
314 | + | ||
315 | + | func bs (bt,bu,bv) = { | |
316 | + | let bw = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "") | |
317 | + | let bx = (bi / 2) | |
318 | + | func by (aP,bz) = { | |
319 | + | let bA = aP | |
320 | + | let ao = bA._1 | |
321 | + | let bB = bA._2 | |
322 | + | let bC = bA._3 | |
323 | + | let aU = bA._4 | |
324 | + | let y = bC | |
325 | + | if ($isInstanceOf(y, "Unit")) | |
279 | 326 | then { | |
280 | - | let | |
281 | - | then $Tuple3( | |
282 | - | else value( | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | if (( | |
287 | - | then $Tuple4( | |
327 | + | let bD = if ((ao == height)) | |
328 | + | then $Tuple3(bt, bu, bv) | |
329 | + | else value(ah(ao)) | |
330 | + | let H = bD._1 | |
331 | + | let bE = bD._2 | |
332 | + | let bF = bD._3 | |
333 | + | if ((bE == 0)) | |
334 | + | then $Tuple4(ao, bB, bF, at) | |
288 | 335 | else { | |
289 | - | let | |
290 | - | then $Tuple2( | |
291 | - | else $Tuple2(( | |
292 | - | let | |
293 | - | let | |
294 | - | if (( | |
295 | - | then $Tuple4( | |
296 | - | else $Tuple4( | |
336 | + | let bG = if (containsElement(aU, H)) | |
337 | + | then $Tuple2(bB, aU) | |
338 | + | else $Tuple2((bB + T(H)), H :: aU) | |
339 | + | let bH = bG._1 | |
340 | + | let bI = bG._2 | |
341 | + | if ((bH > bx)) | |
342 | + | then $Tuple4(ao, bH, bF, at) | |
343 | + | else $Tuple4(bE, bH, unit, bI) | |
297 | 344 | } | |
298 | 345 | } | |
299 | - | else | |
346 | + | else aP | |
300 | 347 | } | |
301 | 348 | ||
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | func | |
307 | - | then | |
308 | - | else | |
349 | + | let bJ = { | |
350 | + | let aZ = (bw ++ bw) | |
351 | + | let ba = size(aZ) | |
352 | + | let bb = $Tuple4(height, 0, unit, nil) | |
353 | + | func bc (bd,be) = if ((be >= ba)) | |
354 | + | then bd | |
355 | + | else by(bd, aZ[be]) | |
309 | 356 | ||
310 | - | func | |
311 | - | then | |
357 | + | func bf (bd,be) = if ((be >= ba)) | |
358 | + | then bd | |
312 | 359 | else throw("List size exceeds 200") | |
313 | 360 | ||
314 | - | | |
361 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120), 121), 122), 123), 124), 125), 126), 127), 128), 129), 130), 131), 132), 133), 134), 135), 136), 137), 138), 139), 140), 141), 142), 143), 144), 145), 146), 147), 148), 149), 150), 151), 152), 153), 154), 155), 156), 157), 158), 159), 160), 161), 162), 163), 164), 165), 166), 167), 168), 169), 170), 171), 172), 173), 174), 175), 176), 177), 178), 179), 180), 181), 182), 183), 184), 185), 186), 187), 188), 189), 190), 191), 192), 193), 194), 195), 196), 197), 198), 199), 200) | |
315 | 362 | } | |
316 | - | let | |
317 | - | let | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | if ($isInstanceOf( | |
363 | + | let bK = bJ._1 | |
364 | + | let bB = bJ._2 | |
365 | + | let bL = bJ._3 | |
366 | + | let bM = bJ._4 | |
367 | + | let y = bL | |
368 | + | if ($isInstanceOf(y, "String")) | |
322 | 369 | then { | |
323 | - | let | |
324 | - | | |
370 | + | let bN = y | |
371 | + | bN | |
325 | 372 | } | |
326 | - | else value( | |
373 | + | else value(ah(bK))._3 | |
327 | 374 | } | |
328 | 375 | ||
329 | 376 | ||
330 | - | func | |
331 | - | func | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | if (containsElement( | |
337 | - | then | |
377 | + | func bO (E) = { | |
378 | + | func bP (bQ,bR) = { | |
379 | + | let bS = bQ | |
380 | + | let bB = bS._1 | |
381 | + | let bT = bS._2 | |
382 | + | let bU = addressFromStringValue(bR) | |
383 | + | if (containsElement(bT, bU)) | |
384 | + | then bQ | |
338 | 385 | else { | |
339 | - | let | |
340 | - | $Tuple2(( | |
386 | + | let bV = T(bU) | |
387 | + | $Tuple2((bB + bV), (bT :+ bU)) | |
341 | 388 | } | |
342 | 389 | } | |
343 | 390 | ||
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | func | |
350 | - | then | |
351 | - | else | |
391 | + | let bW = split_4C(getStringValue(J(E)), d) | |
392 | + | let bX = { | |
393 | + | let aZ = bW | |
394 | + | let ba = size(aZ) | |
395 | + | let bb = $Tuple2(0, nil) | |
396 | + | func bc (bd,be) = if ((be >= ba)) | |
397 | + | then bd | |
398 | + | else bP(bd, aZ[be]) | |
352 | 399 | ||
353 | - | func | |
354 | - | then | |
400 | + | func bf (bd,be) = if ((be >= ba)) | |
401 | + | then bd | |
355 | 402 | else throw("List size exceeds 100") | |
356 | 403 | ||
357 | - | | |
404 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
358 | 405 | } | |
359 | - | let | |
360 | - | let | |
361 | - | | |
406 | + | let bV = bX._1 | |
407 | + | let bY = bX._2 | |
408 | + | bV | |
362 | 409 | } | |
363 | 410 | ||
364 | 411 | ||
365 | - | func | |
412 | + | func bZ () = isDefined(getInteger(n)) | |
366 | 413 | ||
367 | 414 | ||
368 | - | func | |
369 | - | then throw(((((toBase58String( | |
415 | + | func ca (bU) = if ((toString(bU) != bh)) | |
416 | + | then throw(((((toBase58String(bU.bytes) + " is not allowed to mine in ") + toString(height)) + " epoch. Expected ") + bh)) | |
370 | 417 | else unit | |
371 | 418 | ||
372 | 419 | ||
373 | - | func | |
420 | + | func cb (cc,cd) = if ((cc == cd)) | |
374 | 421 | then unit | |
375 | - | else throw(((("Expected a reference to the chain last block: 0x" + | |
422 | + | else throw(((("Expected a reference to the chain last block: 0x" + cd) + ". Got: 0x") + cc)) | |
376 | 423 | ||
377 | 424 | ||
378 | - | func | |
379 | - | let | |
380 | - | let | |
381 | - | if (( | |
425 | + | func ce (E) = { | |
426 | + | let cf = getStringValue(D(E)) | |
427 | + | let cg = valueOrElse(getInteger(m), 0) | |
428 | + | if ((cg > E)) | |
382 | 429 | then true | |
383 | - | else ( | |
430 | + | else (av(getStringValue(q))._1 > av(cf)._1) | |
384 | 431 | } | |
385 | 432 | ||
386 | 433 | ||
387 | - | func | |
434 | + | func ch (H) = valueOrElse(getInteger(O(H)), getInteger(("chainIdOf" + toString(H)))) | |
388 | 435 | ||
389 | 436 | ||
390 | - | func | |
391 | - | let | |
392 | - | let | |
393 | - | if ($isInstanceOf( | |
437 | + | func ci (bU,cj,ck) = { | |
438 | + | let cl = { | |
439 | + | let y = ck | |
440 | + | if ($isInstanceOf(y, "String")) | |
394 | 441 | then { | |
395 | - | let | |
396 | - | let | |
397 | - | (( | |
442 | + | let aK = y | |
443 | + | let cm = aI(bU, ad) | |
444 | + | ((av(aK)._1 + 1) > cm) | |
398 | 445 | } | |
399 | 446 | else true | |
400 | 447 | } | |
401 | - | let | |
402 | - | if ($isInstanceOf( | |
448 | + | let y = ch(bU) | |
449 | + | if ($isInstanceOf(y, "Int")) | |
403 | 450 | then { | |
404 | - | let | |
405 | - | if (if (( | |
451 | + | let cn = y | |
452 | + | if (if ((cn == cj)) | |
406 | 453 | then true | |
407 | - | else if ( | |
408 | - | then | |
454 | + | else if (ce(cn)) | |
455 | + | then cl | |
409 | 456 | else false) | |
410 | 457 | then unit | |
411 | - | else throw(("miner is mining other chain " + toString( | |
458 | + | else throw(("miner is mining other chain " + toString(cn))) | |
412 | 459 | } | |
413 | 460 | else unit | |
414 | 461 | } | |
415 | 462 | ||
416 | 463 | ||
417 | - | func | |
464 | + | func co (C) = if ((C == height)) | |
418 | 465 | then unit | |
419 | - | else throw(((("Expected block from epoch " + toString(height)) + ". Got ") + toString( | |
466 | + | else throw(((("Expected block from epoch " + toString(height)) + ". Got ") + toString(C))) | |
420 | 467 | ||
421 | 468 | ||
422 | - | func | |
423 | - | let | |
424 | - | let | |
425 | - | if (containsElement( | |
469 | + | func cp (E,bU) = { | |
470 | + | let cq = getStringValue(J(E)) | |
471 | + | let cr = split_4C(cq, d) | |
472 | + | if (containsElement(cr, toString(bU))) | |
426 | 473 | then nil | |
427 | - | else [StringEntry( | |
474 | + | else [StringEntry(J(E), ((cq + d) + toString(bU)))] | |
428 | 475 | } | |
429 | 476 | ||
430 | 477 | ||
431 | - | func bY (bZ) = { | |
432 | - | let ca = fromBase16String(bZ) | |
433 | - | if ((size(ca) != 32)) | |
478 | + | func cs (ct,cu) = if ((0 > cu)) | |
479 | + | then throw(("Can't withdraw at negative index: " + toString(cu))) | |
480 | + | else { | |
481 | + | let cv = size(ct) | |
482 | + | if ((cu >= cv)) | |
483 | + | then { | |
484 | + | let cw = (cu - cv) | |
485 | + | if ((cw > size(h))) | |
486 | + | then throw((("Can't add " + toString(cw)) + " empty flags. Contact with developers")) | |
487 | + | else ((ct + take(h, cw)) + "1") | |
488 | + | } | |
489 | + | else { | |
490 | + | let cx = drop(ct, cu) | |
491 | + | let cy = take(cx, 1) | |
492 | + | if ((cy == "0")) | |
493 | + | then ((take(ct, cu) + "1") + drop(cx, 1)) | |
494 | + | else throw((("Transfer #" + toString(cu)) + " has been already taken")) | |
495 | + | } | |
496 | + | } | |
497 | + | ||
498 | + | ||
499 | + | func cz (cA) = { | |
500 | + | let cB = fromBase16String(cA) | |
501 | + | if ((size(cB) != 32)) | |
434 | 502 | then throw("invalid block id length") | |
435 | - | else | |
503 | + | else cA | |
436 | 504 | } | |
437 | 505 | ||
438 | 506 | ||
439 | - | func | |
440 | - | let | |
441 | - | let | |
442 | - | if (( | |
443 | - | then | |
444 | - | else | |
445 | - | ||
446 | - | ||
507 | + | func cC (cD,cE,bE) = { | |
508 | + | let cF = av(getStringValue(q))._1 | |
509 | + | let cG = bs(cD, bE, cE) | |
510 | + | if (if ((cG == cE)) | |
511 | + | then true | |
512 | + | else (av(cG)._1 > cF)) | |
513 | + | then [StringEntry(q, cG)] | |
514 | + | else nil | |
447 | 515 | } | |
448 | 516 | ||
449 | 517 | ||
450 | - | @Callable( | |
451 | - | func appendBlock ( | |
452 | - | | |
453 | - | | |
454 | - | if ( | |
518 | + | @Callable(w) | |
519 | + | func appendBlock (A,cH) = { | |
520 | + | let cI = Q() | |
521 | + | if ((cI == cI)) | |
522 | + | then if ((ap != w.originCaller)) | |
455 | 523 | then { | |
456 | - | let ci = s | |
457 | - | throw(("not allowed to forge blocks in this epoch, expected from " + toString(ci))) | |
524 | + | let y = ap | |
525 | + | if ($isInstanceOf(y, "Address")) | |
526 | + | then { | |
527 | + | let cJ = y | |
528 | + | throw(("not allowed to forge blocks in this epoch, expected from " + toString(cJ))) | |
529 | + | } | |
530 | + | else throw("not allowed to forge blocks in this epoch, epoch miner is absent") | |
458 | 531 | } | |
459 | - | else throw("not allowed to forge blocks in this epoch, epoch miner is absent") | |
460 | - | } | |
461 | - | else { | |
462 | - | let w = valueOrElse(bN(q.originCaller), R) | |
463 | - | let cj = P(w) | |
464 | - | let ck = cj._1 | |
465 | - | let cl = cj._2 | |
466 | - | let cm = bH(ch, cl) | |
467 | - | if ((cm == cm)) | |
468 | - | then { | |
469 | - | let cn = (ck + 1) | |
470 | - | let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(cl)) + q.originCaller.bytes) | |
471 | - | let as = bY(cg) | |
472 | - | [BinaryEntry((n + cg), co), IntegerEntry(y(w, q.originCaller), cn), StringEntry(x(w), ((toString(cn) + d) + cg)), StringEntry(t(height), ((((toString(value(ad)) + d) + toString(ae)) + d) + cg))] | |
532 | + | else { | |
533 | + | let E = valueOrElse(ch(w.originCaller), ad) | |
534 | + | let cK = ab(E) | |
535 | + | let cL = cK._1 | |
536 | + | let cM = cK._2 | |
537 | + | let cN = cb(cH, cM) | |
538 | + | if ((cN == cN)) | |
539 | + | then { | |
540 | + | let cO = (cL + 1) | |
541 | + | let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cM)) + w.originCaller.bytes) | |
542 | + | let cQ = cz(A) | |
543 | + | if ((cQ == cQ)) | |
544 | + | then [BinaryEntry((p + A), cP), IntegerEntry(G(E, w.originCaller), cO), StringEntry(F(E), ((toString(cO) + d) + A)), StringEntry(B(height), ((((toString(value(ap)) + d) + toString(aq)) + d) + A))] | |
545 | + | else throw("Strict value is not equal to itself.") | |
546 | + | } | |
547 | + | else throw("Strict value is not equal to itself.") | |
473 | 548 | } | |
474 | - | ||
475 | - | ||
549 | + | else throw("Strict value is not equal to itself.") | |
550 | + | } | |
476 | 551 | ||
477 | 552 | ||
478 | 553 | ||
479 | - | @Callable(q) | |
480 | - | func extendMainChain (cg,ch,u) = { | |
481 | - | let cp = bU(u) | |
482 | - | if ((cp == cp)) | |
554 | + | @Callable(w) | |
555 | + | func appendBlock_v2 (A,cH,aF) = { | |
556 | + | let cI = R() | |
557 | + | if ((cI == cI)) | |
558 | + | then if ((ap != w.originCaller)) | |
559 | + | then { | |
560 | + | let y = ap | |
561 | + | if ($isInstanceOf(y, "Address")) | |
562 | + | then { | |
563 | + | let cJ = y | |
564 | + | throw(("not allowed to forge blocks in this epoch, expected from " + toString(cJ))) | |
565 | + | } | |
566 | + | else throw("not allowed to forge blocks in this epoch, epoch miner is absent") | |
567 | + | } | |
568 | + | else { | |
569 | + | let E = valueOrElse(ch(w.originCaller), ad) | |
570 | + | let cR = ab(E) | |
571 | + | let cL = cR._1 | |
572 | + | let cM = cR._2 | |
573 | + | let cN = cb(cH, cM) | |
574 | + | if ((cN == cN)) | |
575 | + | then { | |
576 | + | let cO = (cL + 1) | |
577 | + | let cQ = cz(A) | |
578 | + | if ((cQ == cQ)) | |
579 | + | then [aD(A, cO, cM, w.originCaller, E, aF), IntegerEntry(G(E, w.originCaller), cO), StringEntry(F(E), ((toString(cO) + d) + A)), StringEntry(B(height), ((((toString(value(ap)) + d) + toString(aq)) + d) + A))] | |
580 | + | else throw("Strict value is not equal to itself.") | |
581 | + | } | |
582 | + | else throw("Strict value is not equal to itself.") | |
583 | + | } | |
584 | + | else throw("Strict value is not equal to itself.") | |
585 | + | } | |
586 | + | ||
587 | + | ||
588 | + | ||
589 | + | @Callable(w) | |
590 | + | func extendMainChain (A,cH,C) = { | |
591 | + | let cI = Q() | |
592 | + | if ((cI == cI)) | |
483 | 593 | then { | |
484 | - | let | |
485 | - | if (( | |
594 | + | let cQ = cz(A) | |
595 | + | if ((cQ == cQ)) | |
486 | 596 | then { | |
487 | - | let | |
488 | - | if (( | |
597 | + | let cS = co(C) | |
598 | + | if ((cS == cS)) | |
489 | 599 | then { | |
490 | - | let | |
491 | - | if (( | |
600 | + | let cT = ca(w.originCaller) | |
601 | + | if ((cT == cT)) | |
492 | 602 | then { | |
493 | - | let cs = { | |
494 | - | let s = V(height) | |
495 | - | if ($isInstanceOf(s, "Unit")) | |
496 | - | then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(aV)) + d) + cg)) | |
497 | - | else { | |
498 | - | let ct = s | |
499 | - | throw("Epoch already started") | |
500 | - | } | |
501 | - | } | |
502 | - | let cu = cb(q.originCaller, cg, aV) | |
503 | - | let cn = (T + 1) | |
504 | - | let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(U)) + q.originCaller.bytes) | |
505 | - | ([BinaryEntry((n + cg), co), StringEntry(x(R), ((toString(cn) + d) + cg)), IntegerEntry(F(q.originCaller), R), IntegerEntry(y(R, q.originCaller), cn), cs] ++ cu) | |
603 | + | let cU = ci(w.originCaller, ad, unit) | |
604 | + | if ((cU == cU)) | |
605 | + | then { | |
606 | + | let cN = cb(cH, ag) | |
607 | + | if ((cN == cN)) | |
608 | + | then { | |
609 | + | let cV = { | |
610 | + | let y = ah(height) | |
611 | + | if ($isInstanceOf(y, "Unit")) | |
612 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bn)) + d) + A)) | |
613 | + | else { | |
614 | + | let cW = y | |
615 | + | throw("Epoch already started") | |
616 | + | } | |
617 | + | } | |
618 | + | let cX = cC(w.originCaller, A, bn) | |
619 | + | let cO = (af + 1) | |
620 | + | let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(ag)) + w.originCaller.bytes) | |
621 | + | ([BinaryEntry((p + A), cP), StringEntry(F(ad), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), ad), IntegerEntry(G(ad, w.originCaller), cO), cV] ++ cX) | |
622 | + | } | |
623 | + | else throw("Strict value is not equal to itself.") | |
624 | + | } | |
625 | + | else throw("Strict value is not equal to itself.") | |
506 | 626 | } | |
507 | 627 | else throw("Strict value is not equal to itself.") | |
508 | 628 | } | |
509 | 629 | else throw("Strict value is not equal to itself.") | |
510 | 630 | } | |
511 | 631 | else throw("Strict value is not equal to itself.") | |
512 | 632 | } | |
513 | 633 | else throw("Strict value is not equal to itself.") | |
514 | 634 | } | |
515 | 635 | ||
516 | 636 | ||
517 | 637 | ||
518 | - | @Callable( | |
519 | - | func | |
520 | - | let | |
521 | - | if (( | |
638 | + | @Callable(w) | |
639 | + | func extendMainChain_v2 (A,cH,C,aF) = { | |
640 | + | let cI = R() | |
641 | + | if ((cI == cI)) | |
522 | 642 | then { | |
523 | - | let | |
524 | - | if (( | |
643 | + | let cQ = cz(A) | |
644 | + | if ((cQ == cQ)) | |
525 | 645 | then { | |
526 | - | let cv = aj(ch) | |
527 | - | let cw = cv._1 | |
528 | - | let cx = cv._2 | |
529 | - | let cy = cv._3 | |
530 | - | let cz = cv._4 | |
531 | - | let cA = aj(getStringValue(o))._2 | |
532 | - | let cB = if ((cx >= cA)) | |
533 | - | then cx | |
534 | - | else throw((((("can not start alt chain from epoch " + toString(cx)) + ", epoch ") + toString(cA)) + " is finalized")) | |
535 | - | let cr = bO(q.originCaller, R, ch) | |
536 | - | if ((cr == cr)) | |
646 | + | let cS = co(C) | |
647 | + | if ((cS == cS)) | |
537 | 648 | then { | |
538 | - | let cC = (valueOrElse(getInteger(j), 0) + 1) | |
539 | - | let cD = aj(ch)._1 | |
540 | - | let cn = (cD + 1) | |
541 | - | let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(ch)) + q.originCaller.bytes) | |
542 | - | let cs = { | |
543 | - | let s = V(height) | |
544 | - | if ($isInstanceOf(s, "Unit")) | |
545 | - | then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(cB)) + d) + cg)) | |
546 | - | else { | |
547 | - | let ct = s | |
548 | - | throw("Epoch already started") | |
549 | - | } | |
550 | - | } | |
551 | - | [cs, BinaryEntry((n + cg), co), StringEntry(v(cC), cg), StringEntry(x(cC), ((toString(cn) + d) + cg)), IntegerEntry(F(q.originCaller), cC), IntegerEntry(y(cC, q.originCaller), cn), IntegerEntry(y(R, q.originCaller), cD), StringEntry(A(cC), toString(q.originCaller)), IntegerEntry(j, cC)] | |
552 | - | } | |
553 | - | else throw("Strict value is not equal to itself.") | |
554 | - | } | |
555 | - | else throw("Strict value is not equal to itself.") | |
556 | - | } | |
557 | - | else throw("Strict value is not equal to itself.") | |
558 | - | } | |
559 | - | ||
560 | - | ||
561 | - | ||
562 | - | @Callable(q) | |
563 | - | func extendAltChain (w,cg,ch,u) = { | |
564 | - | let cp = bU(u) | |
565 | - | if ((cp == cp)) | |
566 | - | then { | |
567 | - | let cq = bG(q.originCaller) | |
568 | - | if ((cq == cq)) | |
569 | - | then { | |
570 | - | let cr = bO(q.originCaller, w, toBase16String(aj(getStringValue(v(w)))._3)) | |
571 | - | if ((cr == cr)) | |
572 | - | then { | |
573 | - | let cE = P(w) | |
574 | - | let ck = cE._1 | |
575 | - | let cF = cE._2 | |
576 | - | let cm = bH(ch, cF) | |
577 | - | if ((cm == cm)) | |
649 | + | let cT = ca(w.originCaller) | |
650 | + | if ((cT == cT)) | |
578 | 651 | then { | |
579 | - | let cn = (ck + 1) | |
580 | - | let bk = aj(ch)._2 | |
581 | - | let cG = if ((bu(w) > (aQ / 2))) | |
652 | + | let cU = ci(w.originCaller, ad, unit) | |
653 | + | if ((cU == cU)) | |
582 | 654 | then { | |
583 | - | let cu = cb(q.originCaller, cg, bk) | |
584 | - | ([IntegerEntry(i, w), IntegerEntry(k, (valueOrElse(getInteger(j), 0) + 1))] ++ cu) | |
655 | + | let cN = cb(cH, ag) | |
656 | + | if ((cN == cN)) | |
657 | + | then { | |
658 | + | let cV = { | |
659 | + | let y = ah(height) | |
660 | + | if ($isInstanceOf(y, "Unit")) | |
661 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bn)) + d) + A)) | |
662 | + | else { | |
663 | + | let cW = y | |
664 | + | throw("Epoch already started") | |
665 | + | } | |
666 | + | } | |
667 | + | let cX = cC(w.originCaller, A, bn) | |
668 | + | let cO = (af + 1) | |
669 | + | ([aD(A, cO, ag, w.originCaller, ad, aF), StringEntry(F(ad), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), ad), IntegerEntry(G(ad, w.originCaller), cO), cV] ++ cX) | |
670 | + | } | |
671 | + | else throw("Strict value is not equal to itself.") | |
585 | 672 | } | |
586 | - | else nil | |
587 | - | let cs = { | |
588 | - | let s = V(height) | |
589 | - | if ($isInstanceOf(s, "Unit")) | |
590 | - | then StringEntry(t(height), ((((toString(q.originCaller) + d) + toString(bk)) + d) + cg)) | |
591 | - | else { | |
592 | - | let ct = s | |
593 | - | throw("Epoch already started") | |
594 | - | } | |
595 | - | } | |
596 | - | let cH = if (if ((cG == nil)) | |
597 | - | then (valueOrElse(bN(q.originCaller), 0) != w) | |
598 | - | else false) | |
599 | - | then [IntegerEntry(y(R, q.originCaller), aj(getStringValue(v(w)))._1)] | |
600 | - | else nil | |
601 | - | let co = (((toBytes(cn) + toBytes(height)) + fromBase16String(ch)) + q.originCaller.bytes) | |
602 | - | ((([BinaryEntry((n + cg), co), StringEntry(x(w), ((toString(cn) + d) + cg)), cs, IntegerEntry(F(q.originCaller), w), IntegerEntry(y(w, q.originCaller), cn)] ++ cG) ++ bV(w, q.originCaller)) ++ cH) | |
673 | + | else throw("Strict value is not equal to itself.") | |
603 | 674 | } | |
604 | 675 | else throw("Strict value is not equal to itself.") | |
605 | 676 | } | |
606 | 677 | else throw("Strict value is not equal to itself.") | |
607 | 678 | } | |
608 | 679 | else throw("Strict value is not equal to itself.") | |
609 | 680 | } | |
610 | 681 | else throw("Strict value is not equal to itself.") | |
611 | 682 | } | |
612 | 683 | ||
613 | 684 | ||
614 | 685 | ||
615 | - | @Callable(q) | |
616 | - | func join (E) = { | |
617 | - | func cI (I) = { | |
618 | - | let s = getBinary(D(I)) | |
619 | - | if ($isInstanceOf(s, "ByteVector")) | |
686 | + | @Callable(w) | |
687 | + | func startAltChain (A,cH,C) = { | |
688 | + | let cI = Q() | |
689 | + | if ((cI == cI)) | |
690 | + | then { | |
691 | + | let cQ = cz(A) | |
692 | + | if ((cQ == cQ)) | |
693 | + | then { | |
694 | + | let cS = co(C) | |
695 | + | if ((cS == cS)) | |
696 | + | then { | |
697 | + | let cT = ca(w.originCaller) | |
698 | + | if ((cT == cT)) | |
699 | + | then { | |
700 | + | let cY = av(cH) | |
701 | + | let cZ = cY._1 | |
702 | + | let da = cY._2 | |
703 | + | let db = cY._3 | |
704 | + | let dc = cY._4 | |
705 | + | let dd = cY._5 | |
706 | + | let de = cY._6 | |
707 | + | let df = av(getStringValue(q))._2 | |
708 | + | let dg = if ((da >= df)) | |
709 | + | then da | |
710 | + | else throw((((("can not start alt chain from epoch " + toString(da)) + ", epoch ") + toString(df)) + " is finalized")) | |
711 | + | let cU = ci(w.originCaller, ad, cH) | |
712 | + | if ((cU == cU)) | |
713 | + | then { | |
714 | + | let dh = (valueOrElse(getInteger(l), 0) + 1) | |
715 | + | let cO = (av(cH)._1 + 1) | |
716 | + | let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cH)) + w.originCaller.bytes) | |
717 | + | let cV = { | |
718 | + | let y = ah(height) | |
719 | + | if ($isInstanceOf(y, "Unit")) | |
720 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(dg)) + d) + A)) | |
721 | + | else { | |
722 | + | let cW = y | |
723 | + | throw("Epoch already started") | |
724 | + | } | |
725 | + | } | |
726 | + | [cV, BinaryEntry((p + A), cP), StringEntry(D(dh), A), StringEntry(F(dh), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), dh), IntegerEntry(G(dh, w.originCaller), cO), IntegerEntry(G(ad, w.originCaller), cO), StringEntry(J(dh), toString(w.originCaller)), IntegerEntry(l, dh)] | |
727 | + | } | |
728 | + | else throw("Strict value is not equal to itself.") | |
729 | + | } | |
730 | + | else throw("Strict value is not equal to itself.") | |
731 | + | } | |
732 | + | else throw("Strict value is not equal to itself.") | |
733 | + | } | |
734 | + | else throw("Strict value is not equal to itself.") | |
735 | + | } | |
736 | + | else throw("Strict value is not equal to itself.") | |
737 | + | } | |
738 | + | ||
739 | + | ||
740 | + | ||
741 | + | @Callable(w) | |
742 | + | func startAltChain_v2 (A,cH,C,aF) = { | |
743 | + | let cI = R() | |
744 | + | if ((cI == cI)) | |
745 | + | then { | |
746 | + | let cQ = cz(A) | |
747 | + | if ((cQ == cQ)) | |
748 | + | then { | |
749 | + | let cS = co(C) | |
750 | + | if ((cS == cS)) | |
751 | + | then { | |
752 | + | let cT = ca(w.originCaller) | |
753 | + | if ((cT == cT)) | |
754 | + | then { | |
755 | + | let di = av(cH) | |
756 | + | let cZ = di._1 | |
757 | + | let da = di._2 | |
758 | + | let db = di._3 | |
759 | + | let dc = di._4 | |
760 | + | let dd = di._5 | |
761 | + | let de = di._6 | |
762 | + | let df = av(getStringValue(q))._2 | |
763 | + | let dg = if ((da >= df)) | |
764 | + | then da | |
765 | + | else throw((((("can not start alt chain from epoch " + toString(da)) + ", epoch ") + toString(df)) + " is finalized")) | |
766 | + | let cU = ci(w.originCaller, ad, cH) | |
767 | + | if ((cU == cU)) | |
768 | + | then { | |
769 | + | let dh = (valueOrElse(getInteger(l), 0) + 1) | |
770 | + | let cO = (av(cH)._1 + 1) | |
771 | + | let cV = { | |
772 | + | let y = ah(height) | |
773 | + | if ($isInstanceOf(y, "Unit")) | |
774 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(dg)) + d) + A)) | |
775 | + | else { | |
776 | + | let cW = y | |
777 | + | throw("Epoch already started") | |
778 | + | } | |
779 | + | } | |
780 | + | [cV, aD(A, cO, cH, w.originCaller, dh, aF), StringEntry(D(dh), A), StringEntry(F(dh), ((toString(cO) + d) + A)), IntegerEntry(O(w.originCaller), dh), IntegerEntry(G(dh, w.originCaller), cO), IntegerEntry(G(ad, w.originCaller), cO), StringEntry(J(dh), toString(w.originCaller)), IntegerEntry(l, dh)] | |
781 | + | } | |
782 | + | else throw("Strict value is not equal to itself.") | |
783 | + | } | |
784 | + | else throw("Strict value is not equal to itself.") | |
785 | + | } | |
786 | + | else throw("Strict value is not equal to itself.") | |
787 | + | } | |
788 | + | else throw("Strict value is not equal to itself.") | |
789 | + | } | |
790 | + | else throw("Strict value is not equal to itself.") | |
791 | + | } | |
792 | + | ||
793 | + | ||
794 | + | ||
795 | + | @Callable(w) | |
796 | + | func extendAltChain (E,A,cH,C) = { | |
797 | + | let cI = Q() | |
798 | + | if ((cI == cI)) | |
799 | + | then { | |
800 | + | let cQ = cz(A) | |
801 | + | if ((cQ == cQ)) | |
802 | + | then { | |
803 | + | let cS = co(C) | |
804 | + | if ((cS == cS)) | |
805 | + | then { | |
806 | + | let cT = ca(w.originCaller) | |
807 | + | if ((cT == cT)) | |
808 | + | then { | |
809 | + | let dj = av(getStringValue(D(E))) | |
810 | + | let cU = ci(w.originCaller, E, toBase16String(dj._3)) | |
811 | + | if ((cU == cU)) | |
812 | + | then { | |
813 | + | let dk = ab(E) | |
814 | + | let cL = dk._1 | |
815 | + | let dl = dk._2 | |
816 | + | let cN = cb(cH, dl) | |
817 | + | if ((cN == cN)) | |
818 | + | then { | |
819 | + | let cO = (cL + 1) | |
820 | + | let bE = av(cH)._2 | |
821 | + | let dm = if ((bO(E) > (bi / 2))) | |
822 | + | then { | |
823 | + | let dn = valueOrElse(getInteger(l), 0) | |
824 | + | let cX = cC(w.originCaller, A, bE) | |
825 | + | ([IntegerEntry(I(ad), dj._1), IntegerEntry(k, E), IntegerEntry(m, (dn + 1))] ++ cX) | |
826 | + | } | |
827 | + | else nil | |
828 | + | let cV = { | |
829 | + | let y = ah(height) | |
830 | + | if ($isInstanceOf(y, "Unit")) | |
831 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bE)) + d) + A)) | |
832 | + | else { | |
833 | + | let cW = y | |
834 | + | throw("Epoch already started") | |
835 | + | } | |
836 | + | } | |
837 | + | let do = if (if ((dm == nil)) | |
838 | + | then (valueOrElse(ch(w.originCaller), 0) != E) | |
839 | + | else false) | |
840 | + | then [IntegerEntry(G(ad, w.originCaller), dj._1)] | |
841 | + | else nil | |
842 | + | let cP = (((toBytes(cO) + toBytes(height)) + fromBase16String(cH)) + w.originCaller.bytes) | |
843 | + | ((([BinaryEntry((p + A), cP), StringEntry(F(E), ((toString(cO) + d) + A)), cV, IntegerEntry(O(w.originCaller), E), IntegerEntry(G(E, w.originCaller), cO)] ++ dm) ++ cp(E, w.originCaller)) ++ do) | |
844 | + | } | |
845 | + | else throw("Strict value is not equal to itself.") | |
846 | + | } | |
847 | + | else throw("Strict value is not equal to itself.") | |
848 | + | } | |
849 | + | else throw("Strict value is not equal to itself.") | |
850 | + | } | |
851 | + | else throw("Strict value is not equal to itself.") | |
852 | + | } | |
853 | + | else throw("Strict value is not equal to itself.") | |
854 | + | } | |
855 | + | else throw("Strict value is not equal to itself.") | |
856 | + | } | |
857 | + | ||
858 | + | ||
859 | + | ||
860 | + | @Callable(w) | |
861 | + | func extendAltChain_v2 (E,A,cH,C,aF) = { | |
862 | + | let cI = R() | |
863 | + | if ((cI == cI)) | |
864 | + | then { | |
865 | + | let cQ = cz(A) | |
866 | + | if ((cQ == cQ)) | |
867 | + | then { | |
868 | + | let cS = co(C) | |
869 | + | if ((cS == cS)) | |
870 | + | then { | |
871 | + | let cT = ca(w.originCaller) | |
872 | + | if ((cT == cT)) | |
873 | + | then { | |
874 | + | let dj = av(getStringValue(D(E))) | |
875 | + | let cU = ci(w.originCaller, E, toBase16String(dj._3)) | |
876 | + | if ((cU == cU)) | |
877 | + | then { | |
878 | + | let dp = ab(E) | |
879 | + | let cL = dp._1 | |
880 | + | let dl = dp._2 | |
881 | + | let cN = cb(cH, dl) | |
882 | + | if ((cN == cN)) | |
883 | + | then { | |
884 | + | let cO = (cL + 1) | |
885 | + | let bE = av(cH)._2 | |
886 | + | let dm = if ((bO(E) > (bi / 2))) | |
887 | + | then { | |
888 | + | let dn = valueOrElse(getInteger(l), 0) | |
889 | + | let cX = cC(w.originCaller, A, bE) | |
890 | + | ([IntegerEntry(I(ad), dj._1), IntegerEntry(k, E), IntegerEntry(m, (dn + 1))] ++ cX) | |
891 | + | } | |
892 | + | else nil | |
893 | + | let cV = { | |
894 | + | let y = ah(height) | |
895 | + | if ($isInstanceOf(y, "Unit")) | |
896 | + | then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bE)) + d) + A)) | |
897 | + | else { | |
898 | + | let cW = y | |
899 | + | throw("Epoch already started") | |
900 | + | } | |
901 | + | } | |
902 | + | let do = if (if ((dm == nil)) | |
903 | + | then (valueOrElse(ch(w.originCaller), 0) != E) | |
904 | + | else false) | |
905 | + | then [IntegerEntry(G(ad, w.originCaller), dj._1)] | |
906 | + | else nil | |
907 | + | ((([aD(A, cO, cH, w.originCaller, E, aF), StringEntry(F(E), ((toString(cO) + d) + A)), cV, IntegerEntry(O(w.originCaller), E), IntegerEntry(G(E, w.originCaller), cO)] ++ dm) ++ cp(E, w.originCaller)) ++ do) | |
908 | + | } | |
909 | + | else throw("Strict value is not equal to itself.") | |
910 | + | } | |
911 | + | else throw("Strict value is not equal to itself.") | |
912 | + | } | |
913 | + | else throw("Strict value is not equal to itself.") | |
914 | + | } | |
915 | + | else throw("Strict value is not equal to itself.") | |
916 | + | } | |
917 | + | else throw("Strict value is not equal to itself.") | |
918 | + | } | |
919 | + | else throw("Strict value is not equal to itself.") | |
920 | + | } | |
921 | + | ||
922 | + | ||
923 | + | ||
924 | + | @Callable(w) | |
925 | + | func join (N) = { | |
926 | + | func dq (U) = { | |
927 | + | let y = getBinary(M(U)) | |
928 | + | if ($isInstanceOf(y, "ByteVector")) | |
620 | 929 | then { | |
621 | - | let | |
622 | - | if (( | |
930 | + | let dr = y | |
931 | + | if ((dr == w.originCallerPublicKey)) | |
623 | 932 | then unit | |
624 | - | else throw(((("L2 miner address " + | |
933 | + | else throw(((("L2 miner address " + U) + " is already linked with ") + toBase58String(dr))) | |
625 | 934 | } | |
626 | 935 | else unit | |
627 | 936 | } | |
628 | 937 | ||
629 | - | if (!( | |
938 | + | if (!(bZ())) | |
630 | 939 | then throw("The contract has not yet set up") | |
631 | - | else if ((c > wavesBalance( | |
632 | - | then throw(((("Insufficient generating balance: " + toString(wavesBalance( | |
633 | - | else if ((size( | |
940 | + | else if ((c > wavesBalance(w.originCaller).generating)) | |
941 | + | then throw(((("Insufficient generating balance: " + toString(wavesBalance(w.originCaller).generating)) + ". Required: ") + toString(c))) | |
942 | + | else if ((size(N) != 20)) | |
634 | 943 | then throw("rewardAddress should be an L2 address") | |
635 | - | else if ((size( | |
944 | + | else if ((size(at) >= 50)) | |
636 | 945 | then throw("too many miners") | |
637 | 946 | else { | |
638 | - | func | |
947 | + | func ds (dt,H) = if (dt) | |
639 | 948 | then true | |
640 | - | else ( | |
949 | + | else (H == toString(w.originCaller)) | |
641 | 950 | ||
642 | - | let | |
643 | - | let | |
644 | - | let | |
645 | - | let | |
646 | - | func | |
647 | - | then | |
648 | - | else | |
951 | + | let du = { | |
952 | + | let aZ = at | |
953 | + | let ba = size(aZ) | |
954 | + | let bb = false | |
955 | + | func bc (bd,be) = if ((be >= ba)) | |
956 | + | then bd | |
957 | + | else ds(bd, aZ[be]) | |
649 | 958 | ||
650 | - | func | |
651 | - | then | |
959 | + | func bf (bd,be) = if ((be >= ba)) | |
960 | + | then bd | |
652 | 961 | else throw("List size exceeds 50") | |
653 | 962 | ||
654 | - | | |
963 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
655 | 964 | } | |
656 | - | if ( | |
965 | + | if (du) | |
657 | 966 | then nil | |
658 | 967 | else { | |
659 | - | let | |
660 | - | let | |
661 | - | let | |
662 | - | if (( | |
968 | + | let dv = toString(w.originCaller) | |
969 | + | let dw = toBase16String(N) | |
970 | + | let dx = dq(dw) | |
971 | + | if ((dx == dx)) | |
663 | 972 | then { | |
664 | - | let | |
665 | - | then | |
666 | - | else (( | |
667 | - | let | |
668 | - | let | |
669 | - | if ($isInstanceOf( | |
973 | + | let bI = if ((size(at) == 0)) | |
974 | + | then dv | |
975 | + | else ((as + d) + dv) | |
976 | + | let dy = { | |
977 | + | let y = getString(K(dv)) | |
978 | + | if ($isInstanceOf(y, "String")) | |
670 | 979 | then { | |
671 | - | let | |
672 | - | if (( | |
980 | + | let dz = y | |
981 | + | if ((dz == toBase16String(N))) | |
673 | 982 | then nil | |
674 | - | else [DeleteEntry( | |
983 | + | else [DeleteEntry(M(dz))] | |
675 | 984 | } | |
676 | 985 | else nil | |
677 | 986 | } | |
678 | - | ([StringEntry( | |
987 | + | ([StringEntry(j, bI), StringEntry(K(dv), ("0x" + dw)), BinaryEntry(M(dw), w.originCallerPublicKey)] ++ dy) | |
679 | 988 | } | |
680 | 989 | else throw("Strict value is not equal to itself.") | |
681 | 990 | } | |
682 | 991 | } | |
683 | 992 | } | |
684 | 993 | ||
685 | 994 | ||
686 | 995 | ||
687 | - | @Callable( | |
996 | + | @Callable(w) | |
688 | 997 | func leave () = { | |
689 | - | let | |
690 | - | func | |
691 | - | then | |
692 | - | else ( | |
998 | + | let dA = toString(w.originCaller) | |
999 | + | func dB (bQ,H) = if ((H == dA)) | |
1000 | + | then bQ | |
1001 | + | else (bQ :+ H) | |
693 | 1002 | ||
694 | - | let | |
695 | - | let | |
696 | - | let | |
697 | - | let | |
698 | - | func | |
699 | - | then | |
700 | - | else | |
1003 | + | let dC = { | |
1004 | + | let aZ = at | |
1005 | + | let ba = size(aZ) | |
1006 | + | let bb = nil | |
1007 | + | func bc (bd,be) = if ((be >= ba)) | |
1008 | + | then bd | |
1009 | + | else dB(bd, aZ[be]) | |
701 | 1010 | ||
702 | - | func | |
703 | - | then | |
1011 | + | func bf (bd,be) = if ((be >= ba)) | |
1012 | + | then bd | |
704 | 1013 | else throw("List size exceeds 50") | |
705 | 1014 | ||
706 | - | | |
1015 | + | bf(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bc(bb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
707 | 1016 | } | |
708 | - | let | |
709 | - | let | |
710 | - | if (( | |
1017 | + | let dD = K(dA) | |
1018 | + | let dE = valueOrErrorMessage(getString(this, dD), "miner has never joined") | |
1019 | + | if ((ap == w.originCaller)) | |
711 | 1020 | then throw("designated miner can't leave") | |
712 | - | else [StringEntry( | |
1021 | + | else [StringEntry(j, makeString_2C(dC, d)), DeleteEntry(dD), DeleteEntry(M(dE))] | |
713 | 1022 | } | |
714 | 1023 | ||
715 | 1024 | ||
716 | 1025 | ||
717 | - | @Callable(q) | |
718 | - | func setup (cX,cY,cZ) = if (bF()) | |
1026 | + | @Callable(w) | |
1027 | + | func withdraw (A,dF,dG,dH) = { | |
1028 | + | let dI = R() | |
1029 | + | if ((dI == dI)) | |
1030 | + | then { | |
1031 | + | let dJ = av(A) | |
1032 | + | let dK = dJ._1 | |
1033 | + | let dL = av(getStringValue(q))._1 | |
1034 | + | let dM = av(ag)._1 | |
1035 | + | if ((dK > dL)) | |
1036 | + | then throw(((("EL block #" + toString(dK)) + " is not finalized. The current finalized is #") + toString(dL))) | |
1037 | + | else { | |
1038 | + | let dN = dJ._5 | |
1039 | + | let dO = (dN == ad) | |
1040 | + | let dP = { | |
1041 | + | let y = getInteger(I(dN)) | |
1042 | + | if ($isInstanceOf(y, "Int")) | |
1043 | + | then { | |
1044 | + | let dQ = y | |
1045 | + | (dQ > dK) | |
1046 | + | } | |
1047 | + | else throw((((A + " is on an alternative chain #") + toString(dN)) + " that was not approved by majority. Wait for some blocks")) | |
1048 | + | } | |
1049 | + | if (if (dO) | |
1050 | + | then true | |
1051 | + | else dP) | |
1052 | + | then { | |
1053 | + | let dR = w.originCaller | |
1054 | + | let dS = take(drop(dR.bytes, 2), g) | |
1055 | + | let dT = base58'11111111111111111111111111111111111111111111' | |
1056 | + | let dU = toBytes(dH) | |
1057 | + | let dV = ((dS + take(dT, (size(dT) - size(dU)))) + dU) | |
1058 | + | let dW = blake2b256_16Kb(dV) | |
1059 | + | let dX = createMerkleRoot(dF, dW, dG) | |
1060 | + | let dY = dJ._6 | |
1061 | + | if ((dX == dY)) | |
1062 | + | then { | |
1063 | + | let dZ = fromBase58String(getStringValue(r)) | |
1064 | + | let ea = z(A) | |
1065 | + | [Reissue(dZ, dH, true), ScriptTransfer(dR, dH, dZ), StringEntry(ea, cs(valueOrElse(getString(ea), ""), dG))] | |
1066 | + | } | |
1067 | + | else throw(((((("Expected root hash: " + toBase16String(dY)) + ", got: ") + toBase16String(dX)) + ". Event data digest: ") + toBase64String(dW))) | |
1068 | + | } | |
1069 | + | else throw((("Expected " + A) + " to be either on the main chain or relate to it")) | |
1070 | + | } | |
1071 | + | } | |
1072 | + | else throw("Strict value is not equal to itself.") | |
1073 | + | } | |
1074 | + | ||
1075 | + | ||
1076 | + | ||
1077 | + | @Callable(w) | |
1078 | + | func setup (eb,ec,ed,ee) = if (bZ()) | |
719 | 1079 | then throw("The contract has been already set up") | |
1080 | + | else if ((0 > ec)) | |
1081 | + | then throw("The miner reward must be nonnegative") | |
1082 | + | else { | |
1083 | + | let ef = fromBase16String(eb) | |
1084 | + | let eg = base58'11111111111111111111111111111111' | |
1085 | + | let eh = addressFromPublicKey(eg) | |
1086 | + | let ei = base58'11111111111111111111' | |
1087 | + | let ej = "0000000000000000000000000000000000000000000000000000000000000000" | |
1088 | + | let ek = Issue("UNIT0", "Native token", 0, 8, true) | |
1089 | + | let dZ = calculateAssetId(ek) | |
1090 | + | [aD(eb, 0, ej, eh, ad, ""), StringEntry(D(0), eb), StringEntry(F(0), ("0," + eb)), IntegerEntry(n, ec), StringEntry(o, ed), StringEntry(B(height), ((toString(eh) + ",0,") + eb)), StringEntry(q, eb), IntegerEntry(t, 0), IntegerEntry(u, 0), ek, StringEntry(r, toBase58String(dZ)), StringEntry(s, ("0x" + ee))] | |
1091 | + | } | |
1092 | + | ||
1093 | + | ||
1094 | + | ||
1095 | + | @Callable(w) | |
1096 | + | func setupElToClTransfers (el,ee) = if (isDefined(getInteger(u))) | |
1097 | + | then throw("EL to CL transfers feature was set up") | |
720 | 1098 | else { | |
721 | - | let da = fromBase16String(cX) | |
722 | - | let db = base58'11111111111111111111111111111111' | |
723 | - | let dc = addressFromPublicKey(db) | |
724 | - | let dd = base58'11111111111111111111' | |
725 | - | let de = base58'11111111111111111111111111111111' | |
726 | - | let df = (((toBytes(0) + toBytes(height)) + de) + dc.bytes) | |
727 | - | [BinaryEntry((n + cX), df), StringEntry(v(0), cX), StringEntry(x(0), ("0," + cX)), IntegerEntry(l, cY), StringEntry(m, cZ), StringEntry(t(height), ((toString(dc) + ",0,") + cX)), StringEntry(o, cX)] | |
1099 | + | let ek = Issue("UNIT0", "Native token", 0, 8, true) | |
1100 | + | let dZ = calculateAssetId(ek) | |
1101 | + | [IntegerEntry(u, el), ek, StringEntry(r, toBase58String(dZ)), StringEntry(s, ("0x" + ee))] | |
728 | 1102 | } | |
729 | 1103 | ||
730 | 1104 |
github/deemru/w8io/169f3d6 1049.32 ms ◑![]()