tx · 36fQejUN2YzRW7ooET6swSK1pmxdjwxwfafH8YBAXWyc

3Msx4Aq69zWUKy4d1wyKnQ4ofzEDAfv5Ngf:  -0.04300000 Waves

2024.09.19 13:24 [3290416] smart account 3Msx4Aq69zWUKy4d1wyKnQ4ofzEDAfv5Ngf > SELF 0.00000000 Waves

{ "type": 13, "id": "36fQejUN2YzRW7ooET6swSK1pmxdjwxwfafH8YBAXWyc", "fee": 4300000, "feeAssetId": null, "timestamp": 1726741448101, "version": 2, "chainId": 84, "sender": "3Msx4Aq69zWUKy4d1wyKnQ4ofzEDAfv5Ngf", "senderPublicKey": "62i1XasxLi9NJmrEaq9UaHEGfZaonGKUL6EmFaA7gosh", "proofs": [ "5DHP71DFYdijMx12NxTQxGiuXsR5ZKxVwhua2zUFaK8qP7fcqwhBpBporBxmkiufwQtQyEvVKEH6M9VzDyp7LmPi" ], "script": "base64:CAJACAISBwoFCAgCCAESBwoFCAgCCAESCAoGCAgCAQgBEgYKBAgICAESAwoBCBIAEgMKAQgSBgoECBIBARIECgIIAUoAB0lOVF9NQVgA//////////9/AAVXQVZFUwCAwtcvAAtNSU5fQkFMQU5DRQkAaAIAoJwBBQVXQVZFUwADU0VQAgEsAA9CTE9DS19IQVNIX1NJWkUAIAAUUFVCTElDX0tFWV9IQVNIX1NJWkUAFAAOUk9PVF9IQVNIX1NJWkUAIAAUV0lUSERSQVdfUFJPT0ZTX1NJWkUACgAURVRIX0FERFJFU1NfU1RSX1NJWkUAKAAWTUFYX0NMX1RPX0VMX1RSQU5TRkVSUwAQAAl6ZXJvZXNTdHICgAgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAxhbGxNaW5lcnNLZXkCCWFsbE1pbmVycwAObWFpbkNoYWluSWRLZXkCC21haW5DaGFpbklkAA5sYXN0Q2hhaW5JZEtleQILbGFzdENoYWluSWQAF2ZpcnN0VmFsaWRBbHRDaGFpbklkS2V5AhRmaXJzdFZhbGlkQWx0Q2hhaW5JZAAObWluZXJSZXdhcmRLZXkCC21pbmVyUmV3YXJkAApibG9ja01ldGFLAghibG9ja18weAARZmluYWxpemVkQmxvY2tLZXkCDmZpbmFsaXplZEJsb2NrAAp0b2tlbklkS2V5Agd0b2tlbklkABJlbEJyaWRnZUFkZHJlc3NLZXkCD2VsQnJpZGdlQWRkcmVzcwAXbmF0aXZlVHJhbnNmZXJzQ291bnRLZXkCFG5hdGl2ZVRyYW5zZmVyc0NvdW50AQNwYWQBAWkEAXMJAKQDAQUBaQQHJG1hdGNoMAkAsQIBBQFzAwkAAAIAAQUHJG1hdGNoMAkArAICAgcwMDAwMDAwBQFzAwkAAAIAAgUHJG1hdGNoMAkArAICAgYwMDAwMDAFAXMDCQAAAgADBQckbWF0Y2gwCQCsAgICBTAwMDAwBQFzAwkAAAIABAUHJG1hdGNoMAkArAICAgQwMDAwBQFzAwkAAAIABQUHJG1hdGNoMAkArAICAgMwMDAFAXMDCQAAAgAGBQckbWF0Y2gwCQCsAgICAjAwBQFzAwkAAAIABwUHJG1hdGNoMAkArAICAgEwBQFzBQFzARRibG9ja0UyQ1RyYW5zZmVyc0tleQEMYmxvY2tIYXNoSGV4CQCsAgICEmVsVG9DbFRyYW5zZmVyc18weAUMYmxvY2tIYXNoSGV4AQxlcG9jaE1ldGFLZXkBBWVwb2NoCQCsAgICBmVwb2NoXwkBA3BhZAEFBWVwb2NoARRjaGFpbkZpcnN0QmxvY2tJZEtleQEHY2hhaW5JZAkArAICCQCsAgICBWNoYWluCQCkAwEFB2NoYWluSWQCCkZpcnN0QmxvY2sBDGNoYWluTWV0YUtleQEHY2hhaW5JZAkArAICAgZjaGFpbl8JAQNwYWQBBQdjaGFpbklkARJjaGFpbkxhc3RIZWlnaHRLZXkCB2NoYWluSWQFbWluZXIJAKwCAgkArAICCQCsAgICBmNoYWluXwkBA3BhZAEFB2NoYWluSWQCAV8JAKUIAQUFbWluZXIBFGNoYWluRm9ya2VkSGVpZ2h0S2V5AQdjaGFpbklkCQCsAgIJAKwCAgIGY2hhaW5fCQEDcGFkAQUHY2hhaW5JZAIMRm9ya2VkSGVpZ2h0AQ1zdXBwb3J0ZXJzS2V5AQdjaGFpbklkCQCsAgIJAKwCAgIFY2hhaW4JAKQDAQUHY2hhaW5JZAIKU3VwcG9ydGVycwEVbWluZXJSZXdhcmRBZGRyZXNzS2V5AQltaW5lckFkZHIJAKwCAgkArAICAgZtaW5lcl8FCW1pbmVyQWRkcgIOX1Jld2FyZEFkZHJlc3MBCm1pbmVyUGtLZXkBDXJld2FyZEFkZHJlc3MJAKwCAgkArAICAghtaW5lcl8weAUNcmV3YXJkQWRkcmVzcwIDX1BLAQ9taW5lckNoYWluSWRLZXkBBW1pbmVyCQCsAgIJAKwCAgIGbWluZXJfCQClCAEFBW1pbmVyAghfQ2hhaW5JZAAUbmF0aXZlVHJhbnNmZXJzQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUXbmF0aXZlVHJhbnNmZXJzQ291bnRLZXkAAAERbmF0aXZlVHJhbnNmZXJLZXkBBWluZGV4CQCsAgICD25hdGl2ZVRyYW5zZmVyXwkApAMBBQVpbmRleAEVbWtOYXRpdmVUcmFuc2ZlckVudHJ5AwVpbmRleBBkZXN0RWxBZGRyZXNzSGV4BmFtb3VudAkBC1N0cmluZ0VudHJ5AgkBEW5hdGl2ZVRyYW5zZmVyS2V5AQUFaW5kZXgJAKwCAgkArAICCQCsAgICAjB4BRBkZXN0RWxBZGRyZXNzSGV4BQNTRVAJAKQDAQUGYW1vdW50ARZlbnN1cmVDb3JyZWN0VHJhbnNmZXJzAxByZWZUcmFuc2ZlckluZGV4DXRyYW5zZmVySW5kZXgMZXhwZWN0UmV3YXJkBAxtYXhUcmFuc2ZlcnMDBQxleHBlY3RSZXdhcmQJAGUCBRZNQVhfQ0xfVE9fRUxfVFJBTlNGRVJTAAEFFk1BWF9DTF9UT19FTF9UUkFOU0ZFUlMED2FjdHVhbFRyYW5zZmVycwkAZQIFDXRyYW5zZmVySW5kZXgFEHJlZlRyYW5zZmVySW5kZXgEC2NoZWNrTnVtYmVyAwkAZgIFD2FjdHVhbFRyYW5zZmVycwUMbWF4VHJhbnNmZXJzCQACAQkArAICCQCsAgIJAKwCAgINQWxsb3dlZCBvbmx5IAkApAMBBQxtYXhUcmFuc2ZlcnMCECB0cmFuc2ZlcnMsIGdvdCAJAKQDAQUPYWN0dWFsVHJhbnNmZXJzBgMJAAACBQtjaGVja051bWJlcgULY2hlY2tOdW1iZXIDCQBnAgUNdHJhbnNmZXJJbmRleAUUbmF0aXZlVHJhbnNmZXJzQ291bnQJAAIBCQCsAgIJAKwCAgkArAICAhVBdHRlbXB0IHRvIHRyYW5zZmVyICMJAKQDAQUNdHJhbnNmZXJJbmRleAIXLiBBdmFpbGFibGUgdHJhbnNmZXJzOiAJAKQDAQUUbmF0aXZlVHJhbnNmZXJzQ291bnQGCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQphbW91bnRHdEVxAwF0BGd0RXEJcXVldWVTaXplAwkAZwIIBQF0BmFtb3VudAUEZ3RFcQYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhRUcmFuc2ZlcnJpbmcgYW1vdW50IAkApAMBCAUBdAZhbW91bnQCDiBzaG91bGQgYmUgPj0gCQCkAwEFBGd0RXECEyBmb3IgcXVldWUgc2l6ZSBvZiAJAKQDAQUJcXVldWVTaXplAhcuIFRyYW5zZmVyIG1vcmUgb3Igd2FpdAERZ2VuZXJhdGluZ0JhbGFuY2UBB2FkZHJlc3MICQDvBwEFB2FkZHJlc3MKZ2VuZXJhdGluZwEJY2hhaW5NZXRhAQdjaGFpbklkBAFzCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEMY2hhaW5NZXRhS2V5AQUHY2hhaW5JZAQFaXRlbXMJALUJAgUBcwUDU0VQCQCUCgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVpdGVtcwAACQCRAwIFBWl0ZW1zAAEBEG1rQ2hhaW5NZXRhRW50cnkDB2NoYWluSWQObmV3Q2hhaW5IZWlnaHQMYmxvY2tIYXNoSGV4CQELU3RyaW5nRW50cnkCCQEMY2hhaW5NZXRhS2V5AQUHY2hhaW5JZAkArAICCQCsAgIJAKQDAQUObmV3Q2hhaW5IZWlnaHQFA1NFUAUMYmxvY2tIYXNoSGV4AAttYWluQ2hhaW5JZAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ5tYWluQ2hhaW5JZEtleQAAAAskdDA1MDI5NTA5NQkBCWNoYWluTWV0YQEFC21haW5DaGFpbklkAA9tYWluQ2hhaW5IZWlnaHQIBQskdDA1MDI5NTA5NQJfMQASbWFpbkNoYWluTGFzdEJsb2NrCAULJHQwNTAyOTUwOTUCXzIBCWVwb2NoTWV0YQEFZXBvY2gEByRtYXRjaDAJAKIIAQkBDGVwb2NoTWV0YUtleQEFBWVwb2NoAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAQJZnJhZ21lbnRzCQC1CQIFAXMFA1NFUAkAlQoDCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCWZyYWdtZW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZnJhZ21lbnRzAAEJAJEDAgUJZnJhZ21lbnRzAAIFBHVuaXQACyR0MDUzMjY1NDUwBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACFihBZGRyZXNzLCBJbnQsIFN0cmluZykEAW0FByRtYXRjaDAFAW0JAJQKAgUEdW5pdAAAAA50aGlzRXBvY2hNaW5lcggFCyR0MDUzMjY1NDUwAl8xAAx0aGlzRXBvY2hSZWYIBQskdDA1MzI2NTQ1MAJfMgAMYWxsTWluZXJzU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFDGFsbE1pbmVyc0tleQIAAAlhbGxNaW5lcnMEByRtYXRjaDAFDGFsbE1pbmVyc1N0cgMJAAACAgAFByRtYXRjaDAFA25pbAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEA3JhdwUHJG1hdGNoMAkAvAkCBQNyYXcFA1NFUAkAAgECC01hdGNoIGVycm9yAQlibG9ja01ldGEBB2Jsb2NrSWQEBG1ldGEJARFAZXh0ck5hdGl2ZSgxMDU3KQEJAKwCAgUKYmxvY2tNZXRhSwUHYmxvY2tJZAQIbWV0YVNpemUJAMgBAQUEbWV0YQQLYmxvY2tIZWlnaHQJALEJAQUEbWV0YQQKYmxvY2tFcG9jaAkAsgkCBQRtZXRhAAgEC2Jsb2NrUGFyZW50CQDJAQIJAMoBAgUEbWV0YQAQBQ9CTE9DS19IQVNIX1NJWkUEB2NoYWluSWQJALIJAgUEbWV0YQkAZAIAEAUPQkxPQ0tfSEFTSF9TSVpFBApiYXNlT2Zmc2V0CQBkAgAYBQ9CTE9DS19IQVNIX1NJWkUEDnJlbWFpbmluZ0J5dGVzCQBlAgUIbWV0YVNpemUFCmJhc2VPZmZzZXQEFGUyY1RyYW5zZmVyc1Jvb3RIYXNoAwkAZwIFDnJlbWFpbmluZ0J5dGVzBQ5ST09UX0hBU0hfU0laRQkAyQECCQDKAQIFBG1ldGEFCmJhc2VPZmZzZXQFDlJPT1RfSEFTSF9TSVpFAQAEFGxhc3RDMkVUcmFuc2ZlckluZGV4AwMJAAACBQ5yZW1haW5pbmdCeXRlcwAIBgkAZgIFDnJlbWFpbmluZ0J5dGVzBQ5ST09UX0hBU0hfU0laRQkAsgkCBQRtZXRhCQBkAgUKYmFzZU9mZnNldAkAyAEBBRRlMmNUcmFuc2ZlcnNSb290SGFzaAD///////////8BCQCYCgYFC2Jsb2NrSGVpZ2h0BQpibG9ja0Vwb2NoBQtibG9ja1BhcmVudAUHY2hhaW5JZAUUZTJjVHJhbnNmZXJzUm9vdEhhc2gFFGxhc3RDMkVUcmFuc2ZlckluZGV4ARBta0Jsb2NrTWV0YUVudHJ5BgxibG9ja0hhc2hIZXgLYmxvY2tIZWlnaHQOYmxvY2tQYXJlbnRIZXgHY2hhaW5JZBdlMmNUcmFuc2ZlcnNSb290SGFzaEhleBRsYXN0QzJFVHJhbnNmZXJJbmRleAQZZTJjVHJhbnNmZXJzUm9vdEhhc2hCeXRlcwkA3QQBBRdlMmNUcmFuc2ZlcnNSb290SGFzaEhleAQRcm9vdEhhc2hCeXRlc1NpemUJAMgBAQUZZTJjVHJhbnNmZXJzUm9vdEhhc2hCeXRlcwQNY2hlY2tSb290SGFzaAMDCQAAAgURcm9vdEhhc2hCeXRlc1NpemUAAAYJAAACBRFyb290SGFzaEJ5dGVzU2l6ZQUOUk9PVF9IQVNIX1NJWkUGCQACAQkArAICCQCsAgIJAKwCAgIlVHJhbnNmZXJzIHJvb3QgaGFzaCBzaG91bGQgaGF2ZSAwIG9yIAkApAMBBQ5ST09UX0hBU0hfU0laRQIMIGJ5dGVzLCBnb3QgCQCkAwEFEXJvb3RIYXNoQnl0ZXNTaXplAwkAAAIFDWNoZWNrUm9vdEhhc2gFDWNoZWNrUm9vdEhhc2gEDmJsb2NrTWV0YUJ5dGVzCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgkAmgMBBQtibG9ja0hlaWdodAkAmgMBBQZoZWlnaHQJAN0EAQUOYmxvY2tQYXJlbnRIZXgJAJoDAQUHY2hhaW5JZAUZZTJjVHJhbnNmZXJzUm9vdEhhc2hCeXRlcwkAmgMBBRRsYXN0QzJFVHJhbnNmZXJJbmRleAkBC0JpbmFyeUVudHJ5AgkArAICBQpibG9ja01ldGFLBQxibG9ja0hhc2hIZXgFDmJsb2NrTWV0YUJ5dGVzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQxsYXN0SGVpZ2h0QnkCBW1pbmVyB2NoYWluSWQEByRtYXRjaDAJAJ8IAQkBEmNoYWluTGFzdEhlaWdodEtleQIFB2NoYWluSWQFBW1pbmVyAwkAAQIFByRtYXRjaDACA0ludAQBaAUHJG1hdGNoMAUBaAQJYmxvY2tIYXNoCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIJAKwCAgkArAICAgVjaGFpbgkApAMBBQdjaGFpbklkAgtMYXN0TWluZWRCeQkApQgBBQVtaW5lcggJAQlibG9ja01ldGEBBQlibG9ja0hhc2gCXzEACyR0MDc0OTA4NDI1BAloaXRTb3VyY2UEByRtYXRjaDAIBQlsYXN0QmxvY2sDdnJmAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA3ZyZgUHJG1hdGNoMAUDdnJmCAUJbGFzdEJsb2NrE2dlbmVyYXRpb25TaWduYXR1cmUKAQxwcm9jZXNzTWluZXICBHByZXYFbWluZXIECyR0MDc3NTc3ODIwBQRwcmV2BAlwcmV2TWluZXIIBQskdDA3NzU3NzgyMAJfMQQQcHJldlRvdGFsQmFsYW5jZQgFCyR0MDc3NTc3ODIwAl8yBAlwcmV2RGVsYXkIBQskdDA3NzU3NzgyMAJfMwQKcHJldk1pbmVycwgFCyR0MDc3NTc3ODIwAl80BAxtaW5lckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW1pbmVyBA93YXZlc0dlbkJhbGFuY2UICQDvBwEFDG1pbmVyQWRkcmVzcwpnZW5lcmF0aW5nBAxtaW5lckJhbGFuY2UJARFnZW5lcmF0aW5nQmFsYW5jZQEFDG1pbmVyQWRkcmVzcwMDCQBmAgULTUlOX0JBTEFOQ0UFD3dhdmVzR2VuQmFsYW5jZQYJAGcCAAAFDG1pbmVyQmFsYW5jZQUEcHJldgQJbmV4dERlbGF5CQCFBwIFDG1pbmVyQWRkcmVzcwUMbWluZXJCYWxhbmNlAwkAZgIFCXByZXZEZWxheQUJbmV4dERlbGF5CQCWCgQFBW1pbmVyCQBkAgUQcHJldlRvdGFsQmFsYW5jZQUMbWluZXJCYWxhbmNlBQluZXh0RGVsYXkJAM0IAgUKcHJldk1pbmVycwUFbWluZXIJAJYKBAUJcHJldk1pbmVyCQBkAgUQcHJldlRvdGFsQmFsYW5jZQUMbWluZXJCYWxhbmNlBQlwcmV2RGVsYXkJAM0IAgUKcHJldk1pbmVycwUFbWluZXIKAAIkbAUJYWxsTWluZXJzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAgAAAAUHSU5UX01BWAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxwcm9jZXNzTWluZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgARY29tcHV0ZWRHZW5lcmF0b3IIBQskdDA3NDkwODQyNQJfMQAUY29tcHV0ZWRUb3RhbEJhbGFuY2UIBQskdDA3NDkwODQyNQJfMgALJHQwODQyNzg0OTMJAQlibG9ja01ldGEBBRJtYWluQ2hhaW5MYXN0QmxvY2sADG1jbGJJZ25vcmVkMQgFCyR0MDg0Mjc4NDkzAl8xAA5tYWluQ2hhaW5FcG9jaAgFCyR0MDg0Mjc4NDkzAl8yARtjYWxjdWxhdGVGaW5hbGl6ZWRCbG9ja0hhc2gDCGN1ck1pbmVyDGN1clByZXZFcG9jaBBjdXJMYXN0QmxvY2tIYXNoBAtvZmZzZXRzXzEwMAkAvAkCAmQ6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6AgAEC2hhbGZCYWxhbmNlCQBpAgUUY29tcHV0ZWRUb3RhbEJhbGFuY2UAAgoBBHN0ZXACBHByZXYEbmV4dAQLJHQwODg1OTg5MjMFBHByZXYECXRoaXNFcG9jaAgFCyR0MDg4NTk4OTIzAl8xBA5tYXliZVNhZmVFcG9jaAgFCyR0MDg4NTk4OTIzAl8yBAx0b3RhbEJhbGFuY2UIBQskdDA4ODU5ODkyMwJfMwQKcHJldk1pbmVycwgFCyR0MDg4NTk4OTIzAl80BAckbWF0Y2gwBQ5tYXliZVNhZmVFcG9jaAMJAAECBQckbWF0Y2gwAgRVbml0BAskdDA4OTgxOTE0NwMJAAACBQl0aGlzRXBvY2gFBmhlaWdodAkAlQoDBQhjdXJNaW5lcgUMY3VyUHJldkVwb2NoBRBjdXJMYXN0QmxvY2tIYXNoCQEFdmFsdWUBCQEJZXBvY2hNZXRhAQUJdGhpc0Vwb2NoBAVtaW5lcggFCyR0MDg5ODE5MTQ3Al8xBAlwcmV2RXBvY2gIBQskdDA4OTgxOTE0NwJfMgQNbGFzdEJsb2NrSGFzaAgFCyR0MDg5ODE5MTQ3Al8zAwMJAAACBQlwcmV2RXBvY2gAAAYJAGcCCQBlAgUGaGVpZ2h0BQl0aGlzRXBvY2gAZAkAlgoEBQl0aGlzRXBvY2gFDWxhc3RCbG9ja0hhc2gFDHRvdGFsQmFsYW5jZQUJYWxsTWluZXJzBAskdDA5MzAxOTUwMwMJAQ9jb250YWluc0VsZW1lbnQCBQpwcmV2TWluZXJzBQVtaW5lcgkAlAoCBQx0b3RhbEJhbGFuY2UFCnByZXZNaW5lcnMJAJQKAgkAZAIFDHRvdGFsQmFsYW5jZQkBEWdlbmVyYXRpbmdCYWxhbmNlAQUFbWluZXIJAMwIAgUFbWluZXIFCnByZXZNaW5lcnMED25ld1RvdGFsQmFsYW5jZQgFCyR0MDkzMDE5NTAzAl8xBAluZXdNaW5lcnMIBQskdDA5MzAxOTUwMwJfMgMJAGYCBQ9uZXdUb3RhbEJhbGFuY2UFC2hhbGZCYWxhbmNlCQCW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IGFsbG93ZWQgdG8gbWluZSBpbiAJAKQDAQUGaGVpZ2h0AhEgZXBvY2guIEV4cGVjdGVkIAURY29tcHV0ZWRHZW5lcmF0b3IFBHVuaXQBEmlzUmVmZXJlbmNlQ29ycmVjdAIJcmVmZXJlbmNlCWxhc3RCbG9jawMJAAACBQlyZWZlcmVuY2UFCWxhc3RCbG9jawUEdW5pdAkAAgEJAKwCAgkArAICCQCsAgICMEV4cGVjdGVkIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGFpbiBsYXN0IGJsb2NrOiAweAUJbGFzdEJsb2NrAgkuIEdvdDogMHgFCXJlZmVyZW5jZQEPY2hhaW5Jc0luYWN0aXZlAQdjaGFpbklkBAxmaXJzdEJsb2NrSWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARRjaGFpbkZpcnN0QmxvY2tJZEtleQEFB2NoYWluSWQEFGZpcnN0VmFsaWRBbHRDaGFpbklkCQELdmFsdWVPckVsc2UCCQCfCAEFF2ZpcnN0VmFsaWRBbHRDaGFpbklkS2V5AAADCQBmAgUUZmlyc3RWYWxpZEFsdENoYWluSWQFB2NoYWluSWQGCQBmAggJAQlibG9ja01ldGEBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRFmaW5hbGl6ZWRCbG9ja0tleQJfMQgJAQlibG9ja01ldGEBBQxmaXJzdEJsb2NrSWQCXzEBDG1pbmVyQ2hhaW5JZAEFbWluZXIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBD21pbmVyQ2hhaW5JZEtleQEFBW1pbmVyCQCfCAEJAKwCAgIJY2hhaW5JZE9mCQClCAEFBW1pbmVyAR1lbnN1cmVFeHBlY3RlZE9ySW5hY3RpdmVDaGFpbgMJZ2VuZXJhdG9yD2V4cGVjdGVkQ2hhaW5JZBBjaGVja0hlaWdodEJsb2NrBA9oZWlnaHRJc0NvcnJlY3QEByRtYXRjaDAFEGNoZWNrSGVpZ2h0QmxvY2sDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAlibG9ja0hhc2gFByRtYXRjaDAEFGxhc3RNaW5lZEJsb2NrSGVpZ2h0CQEMbGFzdEhlaWdodEJ5AgUJZ2VuZXJhdG9yBQttYWluQ2hhaW5JZAkAZgIJAGQCCAkBCWJsb2NrTWV0YQEFCWJsb2NrSGFzaAJfMQABBRRsYXN0TWluZWRCbG9ja0hlaWdodAYEByRtYXRjaDAJAQxtaW5lckNoYWluSWQBBQlnZW5lcmF0b3IDCQABAgUHJG1hdGNoMAIDSW50BAljdXJyZW50SWQFByRtYXRjaDADAwkAAAIFCWN1cnJlbnRJZAUPZXhwZWN0ZWRDaGFpbklkBgMJAQ9jaGFpbklzSW5hY3RpdmUBBQljdXJyZW50SWQFD2hlaWdodElzQ29ycmVjdAcFBHVuaXQJAAIBCQCsAgICHG1pbmVyIGlzIG1pbmluZyBvdGhlciBjaGFpbiAJAKQDAQUJY3VycmVudElkBQR1bml0AAxoZWlnaHRTdHJpbmcJAKwCAgILIGF0IGhlaWdodCAJAKQDAQUGaGVpZ2h0AQV2cmZBdAEGaGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAO0HAQUGaGVpZ2h0CQCsAgICG2xhc3QgYmxvY2sgaXMgbm90IGF2YWlsYWJsZQUMaGVpZ2h0U3RyaW5nA3ZyZgkArAICAhRWUkYgaXMgbm90IGF2YWlsYWJsZQUMaGVpZ2h0U3RyaW5nARJlbnN1cmVDb3JyZWN0RXBvY2gBC2V4cGVjdGVkVlJGBAlhY3R1YWxWUkYJAQV2cmZBdAEFBmhlaWdodAMJAAACBQtleHBlY3RlZFZSRgUJYWN0dWFsVlJGBQR1bml0CQACAQkArAICCQCsAgIJAKwCAgkArAICAg1FeHBlY3RlZCBWUkYgCQDYBAEFC2V4cGVjdGVkVlJGAhcgZG9lcyBub3QgbWF0Y2ggYWN0dWFsIAkA2AQBBQlhY3R1YWxWUkYFDGhlaWdodFN0cmluZwEMYWRkU3VwcG9ydGVyAgdjaGFpbklkCWdlbmVyYXRvcgQNc3VwcG9ydGVyc1N0cgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBDXN1cHBvcnRlcnNLZXkBBQdjaGFpbklkBApzdXBwb3J0ZXJzCQC8CQIFDXN1cHBvcnRlcnNTdHIFA1NFUAMJAQ9jb250YWluc0VsZW1lbnQCBQpzdXBwb3J0ZXJzCQClCAEFCWdlbmVyYXRvcgUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1zdXBwb3J0ZXJzS2V5AQUHY2hhaW5JZAkArAICCQCsAgIFDXN1cHBvcnRlcnNTdHIFA1NFUAkApQgBBQlnZW5lcmF0b3IFA25pbAEJc2V0T3JGYWlsAgVmbGFncwVpbmRleAMJAGYCAAAFBWluZGV4CQACAQkArAICAiJDYW4ndCB3aXRoZHJhdyBhdCBuZWdhdGl2ZSBpbmRleDogCQCkAwEFBWluZGV4BAlmbGFnc1NpemUJALECAQUFZmxhZ3MDCQBnAgUFaW5kZXgFCWZsYWdzU2l6ZQQJYWRkWmVyb2VzCQBlAgUFaW5kZXgFCWZsYWdzU2l6ZQMJAGYCBQlhZGRaZXJvZXMJALECAQUJemVyb2VzU3RyCQACAQkArAICCQCsAgICCkNhbid0IGFkZCAJAKQDAQUJYWRkWmVyb2VzAiUgZW1wdHkgZmxhZ3MuIENvbnRhY3Qgd2l0aCBkZXZlbG9wZXJzCQCsAgIJAKwCAgUFZmxhZ3MJAK8CAgUJemVyb2VzU3RyBQlhZGRaZXJvZXMCATEEBHRhaWwJALACAgUFZmxhZ3MFBWluZGV4BAdhdEluZGV4CQCvAgIFBHRhaWwAAQMJAAACBQdhdEluZGV4AgEwCQCsAgIJAKwCAgkArwICBQVmbGFncwUFaW5kZXgCATEJALACAgUEdGFpbAABCQACAQkArAICCQCsAgICClRyYW5zZmVyICMJAKQDAQUFaW5kZXgCFyBoYXMgYmVlbiBhbHJlYWR5IHRha2VuARF2YWxpZGF0ZUJsb2NrSGFzaAEGaGV4U3RyBAxkZWNvZGVkQnl0ZXMJAN0EAQUGaGV4U3RyAwkBAiE9AgkAyAEBBQxkZWNvZGVkQnl0ZXMFD0JMT0NLX0hBU0hfU0laRQkAAgECF2ludmFsaWQgYmxvY2sgaWQgbGVuZ3RoBQZoZXhTdHIBHWdldFVwZGF0ZUZpbmFsaXplZEJsb2NrQWN0aW9uAwZjYWxsZXIPbmV3QmxvY2tIYXNoSGV4CXByZXZFcG9jaAQXY3VyRmluYWxpemVkQmxvY2tIZWlnaHQICQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkCXzEEFW5ld0ZpbmFsaXplZEJsb2NrSGFzaAkBG2NhbGN1bGF0ZUZpbmFsaXplZEJsb2NrSGFzaAMFBmNhbGxlcgUJcHJldkVwb2NoBQ9uZXdCbG9ja0hhc2hIZXgDAwkAAAIFFW5ld0ZpbmFsaXplZEJsb2NrSGFzaAUPbmV3QmxvY2tIYXNoSGV4BgkAZgIICQEJYmxvY2tNZXRhAQUVbmV3RmluYWxpemVkQmxvY2tIYXNoAl8xBRdjdXJGaW5hbGl6ZWRCbG9ja0hlaWdodAkAzAgCCQELU3RyaW5nRW50cnkCBRFmaW5hbGl6ZWRCbG9ja0tleQUVbmV3RmluYWxpemVkQmxvY2tIYXNoBQNuaWwFA25pbAkBaQEPZXh0ZW5kTWFpbkNoYWluBQxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4A3ZyZhdlMmNUcmFuc2ZlcnNSb290SGFzaEhleBRsYXN0QzJFVHJhbnNmZXJJbmRleAQOY2hlY2tCbG9ja0hhc2gJARF2YWxpZGF0ZUJsb2NrSGFzaAEFDGJsb2NrSGFzaEhleAMJAAACBQ5jaGVja0Jsb2NrSGFzaAUOY2hlY2tCbG9ja0hhc2gECmNoZWNrRXBvY2gJARJlbnN1cmVDb3JyZWN0RXBvY2gBBQN2cmYDCQAAAgUKY2hlY2tFcG9jaAUKY2hlY2tFcG9jaAQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAUEdW5pdAMJAAACBQpjaGVja0NoYWluBQpjaGVja0NoYWluBA5jaGVja1JlZmVyZW5jZQkBEmlzUmVmZXJlbmNlQ29ycmVjdAIFDHJlZmVyZW5jZUhleAUSbWFpbkNoYWluTGFzdEJsb2NrAwkAAAIFDmNoZWNrUmVmZXJlbmNlBQ5jaGVja1JlZmVyZW5jZQQOY2hlY2tUcmFuc2ZlcnMJARZlbnN1cmVDb3JyZWN0VHJhbnNmZXJzAwgJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgCXzYFFGxhc3RDMkVUcmFuc2ZlckluZGV4BgMJAAACBQ5jaGVja1RyYW5zZmVycwUOY2hlY2tUcmFuc2ZlcnMEDXRoaXNFcG9jaE1ldGEEByRtYXRjaDAJAQllcG9jaE1ldGEBBQZoZWlnaHQDCQABAgUHJG1hdGNoMAIEVW5pdAkBC1N0cmluZ0VudHJ5AgkBDGVwb2NoTWV0YUtleQEFBmhlaWdodAkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpDG9yaWdpbkNhbGxlcgUDU0VQCQCkAwEFDm1haW5DaGFpbkVwb2NoBQNTRVAFDGJsb2NrSGFzaEhleAQFb3RoZXIFByRtYXRjaDAJAAIBAhVFcG9jaCBhbHJlYWR5IHN0YXJ0ZWQDCQAAAgUNdGhpc0Vwb2NoTWV0YQUNdGhpc0Vwb2NoTWV0YQQOY2hlY2tHZW5lcmF0b3IJARFlbnN1cmVNaW5pbmdFcG9jaAEIBQFpDG9yaWdpbkNhbGxlcgMJAAACBQ5jaGVja0dlbmVyYXRvcgUOY2hlY2tHZW5lcmF0b3IEFHVwZGF0ZUZpbmFsaXplZEJsb2NrCQEdZ2V0VXBkYXRlRmluYWxpemVkQmxvY2tBY3Rpb24DCAUBaQxvcmlnaW5DYWxsZXIFDGJsb2NrSGFzaEhleAUObWFpbkNoYWluRXBvY2gEDm5ld0NoYWluSGVpZ2h0CQBkAgUPbWFpbkNoYWluSGVpZ2h0AAEJAM4IAgkAzAgCCQEQbWtCbG9ja01ldGFFbnRyeQYFDGJsb2NrSGFzaEhleAUObmV3Q2hhaW5IZWlnaHQFEm1haW5DaGFpbkxhc3RCbG9jawULbWFpbkNoYWluSWQFF2UyY1RyYW5zZmVyc1Jvb3RIYXNoSGV4BRRsYXN0QzJFVHJhbnNmZXJJbmRleAkAzAgCCQEQbWtDaGFpbk1ldGFFbnRyeQMFC21haW5DaGFpbklkBQ5uZXdDaGFpbkhlaWdodAUMYmxvY2tIYXNoSGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPbWluZXJDaGFpbklkS2V5AQgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmNoYWluTGFzdEhlaWdodEtleQIFC21haW5DaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0CQDMCAIFDXRoaXNFcG9jaE1ldGEFA25pbAUUdXBkYXRlRmluYWxpemVkQmxvY2sJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENc3RhcnRBbHRDaGFpbgUMYmxvY2tIYXNoSGV4DHJlZmVyZW5jZUhleAN2cmYXZTJjVHJhbnNmZXJzUm9vdEhhc2hIZXgUbGFzdEMyRVRyYW5zZmVySW5kZXgEDmNoZWNrQmxvY2tIYXNoCQERdmFsaWRhdGVCbG9ja0hhc2gBBQxibG9ja0hhc2hIZXgDCQAAAgUOY2hlY2tCbG9ja0hhc2gFDmNoZWNrQmxvY2tIYXNoBApjaGVja0Vwb2NoCQESZW5zdXJlQ29ycmVjdEVwb2NoAQUDdnJmAwkAAAIFCmNoZWNrRXBvY2gFCmNoZWNrRXBvY2gEDSR0MDE2MTMyMTYyNDUJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgEDnJlZkNoYWluSGVpZ2h0CAUNJHQwMTYxMzIxNjI0NQJfMQQIcmVmRXBvY2gIBQ0kdDAxNjEzMjE2MjQ1Al8yBAtyZWZJZ25vcmVkMQgFDSR0MDE2MTMyMTYyNDUCXzMEC3JlZklnbm9yZWQyCAUNJHQwMTYxMzIxNjI0NQJfNAQLcmVmSWdub3JlZDMIBQ0kdDAxNjEzMjE2MjQ1Al81BBByZWZUcmFuc2ZlckluZGV4CAUNJHQwMTYxMzIxNjI0NQJfNgQOZmluYWxpemVkRXBvY2gICQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkCXzIECGVwb2NoUmVmAwkAZwIFCHJlZkVwb2NoBQ5maW5hbGl6ZWRFcG9jaAUIcmVmRXBvY2gJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICI0NhbiBub3Qgc3RhcnQgYWx0IGNoYWluIGZyb20gZXBvY2ggCQCkAwEFCHJlZkVwb2NoAggsIGVwb2NoIAkApAMBBQ5maW5hbGl6ZWRFcG9jaAINIGlzIGZpbmFsaXplZAQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQttYWluQ2hhaW5JZAUMcmVmZXJlbmNlSGV4AwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4EDmNoZWNrVHJhbnNmZXJzCQEWZW5zdXJlQ29ycmVjdFRyYW5zZmVycwMFEHJlZlRyYW5zZmVySW5kZXgFFGxhc3RDMkVUcmFuc2ZlckluZGV4BgMJAAACBQ5jaGVja1RyYW5zZmVycwUOY2hlY2tUcmFuc2ZlcnMECm5ld0NoYWluSWQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFDmxhc3RDaGFpbklkS2V5AAAAAQQObmV3Q2hhaW5IZWlnaHQJAGQCBQ5yZWZDaGFpbkhlaWdodAABBA10aGlzRXBvY2hNZXRhBAckbWF0Y2gwCQEJZXBvY2hNZXRhAQUGaGVpZ2h0AwkAAQIFByRtYXRjaDACBFVuaXQJAQtTdHJpbmdFbnRyeQIJAQxlcG9jaE1ldGFLZXkBBQZoZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFA1NFUAkApAMBBQhlcG9jaFJlZgUDU0VQBQxibG9ja0hhc2hIZXgEBW90aGVyBQckbWF0Y2gwCQACAQIVRXBvY2ggYWxyZWFkeSBzdGFydGVkBA5jaGVja0dlbmVyYXRvcgkBEWVuc3VyZU1pbmluZ0Vwb2NoAQgFAWkMb3JpZ2luQ2FsbGVyAwkAAAIFDmNoZWNrR2VuZXJhdG9yBQ5jaGVja0dlbmVyYXRvcgkAzAgCBQ10aGlzRXBvY2hNZXRhCQDMCAIJARBta0Jsb2NrTWV0YUVudHJ5BgUMYmxvY2tIYXNoSGV4BQ5uZXdDaGFpbkhlaWdodAUMcmVmZXJlbmNlSGV4BQpuZXdDaGFpbklkBRdlMmNUcmFuc2ZlcnNSb290SGFzaEhleAUUbGFzdEMyRVRyYW5zZmVySW5kZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQUKbmV3Q2hhaW5JZAUMYmxvY2tIYXNoSGV4CQDMCAIJARBta0NoYWluTWV0YUVudHJ5AwUKbmV3Q2hhaW5JZAUObmV3Q2hhaW5IZWlnaHQFDGJsb2NrSGFzaEhleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD21pbmVyQ2hhaW5JZEtleQEIBQFpDG9yaWdpbkNhbGxlcgUKbmV3Q2hhaW5JZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmNoYWluTGFzdEhlaWdodEtleQIFCm5ld0NoYWluSWQIBQFpDG9yaWdpbkNhbGxlcgUObmV3Q2hhaW5IZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQttYWluQ2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBQ5uZXdDaGFpbkhlaWdodAkAzAgCCQELU3RyaW5nRW50cnkCCQENc3VwcG9ydGVyc0tleQEFCm5ld0NoYWluSWQJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5sYXN0Q2hhaW5JZEtleQUKbmV3Q2hhaW5JZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmV4dGVuZEFsdENoYWluBgxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4A3ZyZgdjaGFpbklkF2UyY1RyYW5zZmVyc1Jvb3RIYXNoSGV4FGxhc3RDMkVUcmFuc2ZlckluZGV4BA5jaGVja0Jsb2NrSGFzaAkBEXZhbGlkYXRlQmxvY2tIYXNoAQUMYmxvY2tIYXNoSGV4AwkAAAIFDmNoZWNrQmxvY2tIYXNoBQ5jaGVja0Jsb2NrSGFzaAQKY2hlY2tFcG9jaAkBEmVuc3VyZUNvcnJlY3RFcG9jaAEFA3ZyZgMJAAACBQpjaGVja0Vwb2NoBQpjaGVja0Vwb2NoBBNjaGFpbkZpcnN0QmxvY2tNZXRhCQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBFGNoYWluRmlyc3RCbG9ja0lkS2V5AQUHY2hhaW5JZAQKY2hlY2tDaGFpbgkBHWVuc3VyZUV4cGVjdGVkT3JJbmFjdGl2ZUNoYWluAwgFAWkMb3JpZ2luQ2FsbGVyBQdjaGFpbklkCQDcBAEIBRNjaGFpbkZpcnN0QmxvY2tNZXRhAl8zAwkAAAIFCmNoZWNrQ2hhaW4FCmNoZWNrQ2hhaW4EDSR0MDE4NTU4MTg2MTIJAQljaGFpbk1ldGEBBQdjaGFpbklkBAtjaGFpbkhlaWdodAgFDSR0MDE4NTU4MTg2MTICXzEEDmNoYWluTGFzdEJsb2NrCAUNJHQwMTg1NTgxODYxMgJfMgQOY2hlY2tSZWZlcmVuY2UJARJpc1JlZmVyZW5jZUNvcnJlY3QCBQxyZWZlcmVuY2VIZXgFDmNoYWluTGFzdEJsb2NrAwkAAAIFDmNoZWNrUmVmZXJlbmNlBQ5jaGVja1JlZmVyZW5jZQQOY2hlY2tUcmFuc2ZlcnMJARZlbnN1cmVDb3JyZWN0VHJhbnNmZXJzAwgJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgCXzYFFGxhc3RDMkVUcmFuc2ZlckluZGV4BgMJAAACBQ5jaGVja1RyYW5zZmVycwUOY2hlY2tUcmFuc2ZlcnMEDm5ld0NoYWluSGVpZ2h0CQBkAgULY2hhaW5IZWlnaHQAAQQJcHJldkVwb2NoCAkBCWJsb2NrTWV0YQEFDHJlZmVyZW5jZUhleAJfMgQTdXBkYXRlTWFpbkNoYWluRGF0YQMJAGYCCQERc3VwcG9ydGluZ0JhbGFuY2UBBQdjaGFpbklkCQBpAgUUY29tcHV0ZWRUb3RhbEJhbGFuY2UAAgQLbGFzdENoYWluSWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUObGFzdENoYWluSWRLZXkAAAQUdXBkYXRlRmluYWxpemVkQmxvY2sJAR1nZXRVcGRhdGVGaW5hbGl6ZWRCbG9ja0FjdGlvbgMIBQFpDG9yaWdpbkNhbGxlcgUMYmxvY2tIYXNoSGV4BQlwcmV2RXBvY2gJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGNoYWluRm9ya2VkSGVpZ2h0S2V5AQULbWFpbkNoYWluSWQIBRNjaGFpbkZpcnN0QmxvY2tNZXRhAl8xCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5tYWluQ2hhaW5JZEtleQUHY2hhaW5JZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXZmlyc3RWYWxpZEFsdENoYWluSWRLZXkJAGQCBQtsYXN0Q2hhaW5JZAABBQNuaWwFFHVwZGF0ZUZpbmFsaXplZEJsb2NrBQNuaWwEDXRoaXNFcG9jaE1ldGEEByRtYXRjaDAJAQllcG9jaE1ldGEBBQZoZWlnaHQDCQABAgUHJG1hdGNoMAIEVW5pdAkBC1N0cmluZ0VudHJ5AgkBDGVwb2NoTWV0YUtleQEFBmhlaWdodAkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpDG9yaWdpbkNhbGxlcgUDU0VQCQCkAwEFCXByZXZFcG9jaAUDU0VQBQxibG9ja0hhc2hIZXgEBW90aGVyBQckbWF0Y2gwCQACAQIVRXBvY2ggYWxyZWFkeSBzdGFydGVkAwkAAAIFDXRoaXNFcG9jaE1ldGEFDXRoaXNFcG9jaE1ldGEEDmNoZWNrR2VuZXJhdG9yCQERZW5zdXJlTWluaW5nRXBvY2gBCAUBaQxvcmlnaW5DYWxsZXIDCQAAAgUOY2hlY2tHZW5lcmF0b3IFDmNoZWNrR2VuZXJhdG9yBB11cGRhdGVNYWluQ2hhaW5MYXN0TWluZWRCbG9jawMDCQAAAgUTdXBkYXRlTWFpbkNoYWluRGF0YQUDbmlsCQECIT0CCQELdmFsdWVPckVsc2UCCQEMbWluZXJDaGFpbklkAQgFAWkMb3JpZ2luQ2FsbGVyAAAFB2NoYWluSWQHCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgULbWFpbkNoYWluSWQIBQFpDG9yaWdpbkNhbGxlcggFE2NoYWluRmlyc3RCbG9ja01ldGECXzEFA25pbAUDbmlsCQDOCAIJAM4IAgkAzggCCQDMCAIJARBta0Jsb2NrTWV0YUVudHJ5BgUMYmxvY2tIYXNoSGV4BQ5uZXdDaGFpbkhlaWdodAUMcmVmZXJlbmNlSGV4BQdjaGFpbklkBRdlMmNUcmFuc2ZlcnNSb290SGFzaEhleAUUbGFzdEMyRVRyYW5zZmVySW5kZXgJAMwIAgkBEG1rQ2hhaW5NZXRhRW50cnkDBQdjaGFpbklkBQ5uZXdDaGFpbkhlaWdodAUMYmxvY2tIYXNoSGV4CQDMCAIFDXRoaXNFcG9jaE1ldGEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9taW5lckNoYWluSWRLZXkBCAUBaQxvcmlnaW5DYWxsZXIFB2NoYWluSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJjaGFpbkxhc3RIZWlnaHRLZXkCBQdjaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFDm5ld0NoYWluSGVpZ2h0BQNuaWwFE3VwZGF0ZU1haW5DaGFpbkRhdGEJAQxhZGRTdXBwb3J0ZXICBQdjaGFpbklkCAUBaQxvcmlnaW5DYWxsZXIFHXVwZGF0ZU1haW5DaGFpbkxhc3RNaW5lZEJsb2NrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2FwcGVuZEJsb2NrBAxibG9ja0hhc2hIZXgMcmVmZXJlbmNlSGV4F2UyY1RyYW5zZmVyc1Jvb3RIYXNoSGV4FGxhc3RDMkVUcmFuc2ZlckluZGV4BAtjaGVja0NhbGxlcgMJAAACBQ50aGlzRXBvY2hNaW5lcggFAWkMb3JpZ2luQ2FsbGVyBgQHJG1hdGNoMAUOdGhpc0Vwb2NoTWluZXIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQKZXBvY2hNaW5lcgUHJG1hdGNoMAkAAgEJAKwCAgI5bm90IGFsbG93ZWQgdG8gZm9yZ2UgYmxvY2tzIGluIHRoaXMgZXBvY2gsIGV4cGVjdGVkIGZyb20gCQClCAEFCmVwb2NoTWluZXIJAAIBAkBub3QgYWxsb3dlZCB0byBmb3JnZSBibG9ja3MgaW4gdGhpcyBlcG9jaCwgZXBvY2ggbWluZXIgaXMgYWJzZW50AwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQHY2hhaW5JZAkBC3ZhbHVlT3JFbHNlAgkBDG1pbmVyQ2hhaW5JZAEIBQFpDG9yaWdpbkNhbGxlcgULbWFpbkNoYWluSWQEDSR0MDIwOTYxMjEwMTIJAQljaGFpbk1ldGEBBQdjaGFpbklkBAtjaGFpbkhlaWdodAgFDSR0MDIwOTYxMjEwMTICXzEEC2xhc3RCbG9ja0lkCAUNJHQwMjA5NjEyMTAxMgJfMgQOY2hlY2tSZWZlcmVuY2UJARJpc1JlZmVyZW5jZUNvcnJlY3QCBQxyZWZlcmVuY2VIZXgFC2xhc3RCbG9ja0lkAwkAAAIFDmNoZWNrUmVmZXJlbmNlBQ5jaGVja1JlZmVyZW5jZQQOY2hlY2tUcmFuc2ZlcnMJARZlbnN1cmVDb3JyZWN0VHJhbnNmZXJzAwgJAQlibG9ja01ldGEBBQxyZWZlcmVuY2VIZXgCXzYFFGxhc3RDMkVUcmFuc2ZlckluZGV4BwMJAAACBQ5jaGVja1RyYW5zZmVycwUOY2hlY2tUcmFuc2ZlcnMEDm5ld0NoYWluSGVpZ2h0CQBkAgULY2hhaW5IZWlnaHQAAQQOY2hlY2tCbG9ja0hhc2gJARF2YWxpZGF0ZUJsb2NrSGFzaAEFDGJsb2NrSGFzaEhleAMJAAACBQ5jaGVja0Jsb2NrSGFzaAUOY2hlY2tCbG9ja0hhc2gJAMwIAgkBEG1rQmxvY2tNZXRhRW50cnkGBQxibG9ja0hhc2hIZXgFDm5ld0NoYWluSGVpZ2h0BQtsYXN0QmxvY2tJZAUHY2hhaW5JZAUXZTJjVHJhbnNmZXJzUm9vdEhhc2hIZXgFFGxhc3RDMkVUcmFuc2ZlckluZGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESY2hhaW5MYXN0SGVpZ2h0S2V5AgUHY2hhaW5JZAgFAWkMb3JpZ2luQ2FsbGVyBQ5uZXdDaGFpbkhlaWdodAkAzAgCCQEQbWtDaGFpbk1ldGFFbnRyeQMFB2NoYWluSWQFDm5ld0NoYWluSGVpZ2h0BQxibG9ja0hhc2hIZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGVwb2NoTWV0YUtleQEFBmhlaWdodAkArAICCQCsAgIJAKwCAgkArAICCQClCAEJAQV2YWx1ZQEFDnRoaXNFcG9jaE1pbmVyBQNTRVAJAKQDAQUMdGhpc0Vwb2NoUmVmBQNTRVAFDGJsb2NrSGFzaEhleAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBGpvaW4BEHJld2FyZEFkZHJlc3NIZXgKAR1lbnN1cmVOb3RPdmVycmlkZU90aGVyTWluZXJQawEMZWxBZGRyZXNzSGV4BAckbWF0Y2gwCQChCAEJAQptaW5lclBrS2V5AQUMZWxBZGRyZXNzSGV4AwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwAwkAAAIFAnBrCAUBaRVvcmlnaW5DYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBCQCsAgIJAKwCAgkArAICAhFFTCBtaW5lciBhZGRyZXNzIAUMZWxBZGRyZXNzSGV4AhggaXMgYWxyZWFkeSBsaW5rZWQgd2l0aCAJANgEAQUCcGsFBHVuaXQEBXBhcnRzCQC1CQIFEHJld2FyZEFkZHJlc3NIZXgCAjB4BA1yZXdhcmRBZGRyZXNzCQDdBAEJAJEDAgUFcGFydHMJAGUCCQCQAwEFBXBhcnRzAAEDCQEBIQEJAQ9pc0NvbnRyYWN0U2V0dXAACQACAQIfVGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IHNldCB1cAMJAGYCBQtNSU5fQkFMQU5DRQgJAO8HAQgFAWkMb3JpZ2luQ2FsbGVyCmdlbmVyYXRpbmcJAAIBCQCsAgIJAKwCAgkArAICAiFJbnN1ZmZpY2llbnQgZ2VuZXJhdGluZyBiYWxhbmNlOiAJAKQDAQgJAO8HAQgFAWkMb3JpZ2luQ2FsbGVyCmdlbmVyYXRpbmcCDC4gUmVxdWlyZWQ6IAkApAMBBQtNSU5fQkFMQU5DRQMJAQIhPQIJAMgBAQUNcmV3YXJkQWRkcmVzcwAUCQACAQIlcmV3YXJkQWRkcmVzcyBzaG91bGQgYmUgYW4gTDIgYWRkcmVzcwMJAGcCCQCQAwEFCWFsbE1pbmVycwAyCQACAQIPdG9vIG1hbnkgbWluZXJzCgEOY2hlY2tFeGlzdGVuY2UCBmV4aXN0cwVtaW5lcgMFBmV4aXN0cwYJAAACBQVtaW5lcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEDWFscmVhZHlFeGlzdHMKAAIkbAUJYWxsTWluZXJzCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDmNoZWNrRXhpc3RlbmNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIDBQ1hbHJlYWR5RXhpc3RzBQNuaWwECG5ld01pbmVyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQWbG93ZXJjYXNlUmV3YXJkQWRkcmVzcwkA3AQBBQ1yZXdhcmRBZGRyZXNzBAVjaGVjawkBHWVuc3VyZU5vdE92ZXJyaWRlT3RoZXJNaW5lclBrAQUWbG93ZXJjYXNlUmV3YXJkQWRkcmVzcwMJAAACBQVjaGVjawUFY2hlY2sECW5ld01pbmVycwMJAAACCQCQAwEFCWFsbE1pbmVycwAABQhuZXdNaW5lcgkArAICCQCsAgIFDGFsbE1pbmVyc1N0cgUDU0VQBQhuZXdNaW5lcgQZZGVsZXRlUHJldlJld2FyZEFkZHJlc3NQawQHJG1hdGNoMAkAoggBCQEVbWluZXJSZXdhcmRBZGRyZXNzS2V5AQUIbmV3TWluZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAtwcmV2QWRkcmVzcwUHJG1hdGNoMAMJAAACBQtwcmV2QWRkcmVzcwkA3AQBBQ1yZXdhcmRBZGRyZXNzBQNuaWwJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCm1pbmVyUGtLZXkBBQtwcmV2QWRkcmVzcwUDbmlsBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQxhbGxNaW5lcnNLZXkFCW5ld01pbmVycwkAzAgCCQELU3RyaW5nRW50cnkCCQEVbWluZXJSZXdhcmRBZGRyZXNzS2V5AQUIbmV3TWluZXIJAKwCAgICMHgFFmxvd2VyY2FzZVJld2FyZEFkZHJlc3MJAMwIAgkBC0JpbmFyeUVudHJ5AgkBCm1pbmVyUGtLZXkBBRZsb3dlcmNhc2VSZXdhcmRBZGRyZXNzCAUBaRVvcmlnaW5DYWxsZXJQdWJsaWNLZXkFA25pbAUZZGVsZXRlUHJldlJld2FyZEFkZHJlc3NQawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVsZWF2ZQAEDGxlYXZpbmdNaW5lcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIKARBza2lwTGVhdmluZ01pbmVyAgNhY2MFbWluZXIDCQAAAgUFbWluZXIFDGxlYXZpbmdNaW5lcgUDYWNjCQDNCAIFA2FjYwUFbWluZXIED3JlbWFpbmluZ01pbmVycwoAAiRsBQlhbGxNaW5lcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHNraXBMZWF2aW5nTWluZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQNcmV3YXJkQWRkcktleQkBFW1pbmVyUmV3YXJkQWRkcmVzc0tleQEFDGxlYXZpbmdNaW5lcgQRcHJldlJld2FyZEFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ1yZXdhcmRBZGRyS2V5AhZtaW5lciBoYXMgbmV2ZXIgam9pbmVkAwkAAAIFEXByZXZSZXdhcmRBZGRyZXNzBRFwcmV2UmV3YXJkQWRkcmVzcwMJAAACBQ50aGlzRXBvY2hNaW5lcggFAWkMb3JpZ2luQ2FsbGVyCQACAQIcZGVzaWduYXRlZCBtaW5lciBjYW4ndCBsZWF2ZQkAzAgCCQELU3RyaW5nRW50cnkCBQxhbGxNaW5lcnNLZXkJALoJAgUPcmVtYWluaW5nTWluZXJzBQNTRVAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh0cmFuc2ZlcgEQZGVzdEVsQWRkcmVzc0hleAQMY2hlY2tBZGRyZXNzAwkAAAIJALECAQUQZGVzdEVsQWRkcmVzc0hleAUURVRIX0FERFJFU1NfU1RSX1NJWkUJAN0EAQUQZGVzdEVsQWRkcmVzc0hleAkAAgEJAKwCAgkArAICCQCsAgICFEFkZHJlc3Mgc2hvdWxkIGhhdmUgCQCkAwEFFEVUSF9BRERSRVNTX1NUUl9TSVpFAhEgY2hhcmFjdGVycywgZ290IAkApAMBCQCxAgEFEGRlc3RFbEFkZHJlc3NIZXgDCQAAAgUMY2hlY2tBZGRyZXNzBQxjaGVja0FkZHJlc3MEDGNoZWNrUGF5bWVudAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQACAQkArAICAi9FeHBlY3RlZCBvbmUgcGF5bWVudCBhcyBhIHRyYW5zZmVyIGFtb3VudCwgZ290IAkApAMBCQCQAwEIBQFpCHBheW1lbnRzAwkAAAIFDGNoZWNrUGF5bWVudAUMY2hlY2tQYXltZW50BAp0b2tlbklkU3RyCQERQGV4dHJOYXRpdmUoMTA1OCkBBQp0b2tlbklkS2V5BAd0b2tlbklkCQDZBAEFCnRva2VuSWRTdHIEAXQJAJEDAggFAWkIcGF5bWVudHMAAAQMY2hlY2tBc3NldElkBAckbWF0Y2gwCAUBdAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEB2Fzc2V0SWQFByRtYXRjaDADCQAAAgUHYXNzZXRJZAUHdG9rZW5JZAYJAAIBCQCsAgIJAKwCAgkArAICAglFeHBlY3RlZCAFCnRva2VuSWRTdHICFSBpbiB0aGUgcGF5bWVudCwgZ290IAkA2AQBBQdhc3NldElkCQACAQkArAICCQCsAgICCUV4cGVjdGVkIAUKdG9rZW5JZFN0cgIaIGluIHRoZSBwYXltZW50LCBnb3QgV2F2ZXMDCQAAAgUMY2hlY2tBc3NldElkBQxjaGVja0Fzc2V0SWQECWxhc3RJbmRleAgJAQlibG9ja01ldGEBBRJtYWluQ2hhaW5MYXN0QmxvY2sCXzYECXF1ZXVlU2l6ZQkAZQIFFG5hdGl2ZVRyYW5zZmVyc0NvdW50BQlsYXN0SW5kZXgED2NoZWNrUXVldWVMaW1pdAMJAGYCAKABBQlxdWV1ZVNpemUJAQphbW91bnRHdEVxAwUBdADAhD0FCXF1ZXVlU2l6ZQMJAGYCAMAMBQlxdWV1ZVNpemUJAQphbW91bnRHdEVxAwUBdACAreIEBQlxdWV1ZVNpemUDCQBmAgCAGQUJcXVldWVTaXplCQEKYW1vdW50R3RFcQMFAXQAgMLXLwUJcXVldWVTaXplAwkAZgIAgDIFCXF1ZXVlU2l6ZQkBCmFtb3VudEd0RXEDBQF0AICU69wDBQlxdWV1ZVNpemUJAAIBCQCsAgIJAKwCAgIjVHJhbnNmZXJzIGRlbmllZCBmb3IgcXVldWUgc2l6ZSBvZiAJAKQDAQUJcXVldWVTaXplAiguIFdhaXQgdW50aWwgY3VycmVudCB0cmFuc2ZlcnMgcHJvY2Vzc2VkAwkAAAIFD2NoZWNrUXVldWVMaW1pdAUPY2hlY2tRdWV1ZUxpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRduYXRpdmVUcmFuc2ZlcnNDb3VudEtleQkAZAIFFG5hdGl2ZVRyYW5zZmVyc0NvdW50AAEJAMwIAgkBFW1rTmF0aXZlVHJhbnNmZXJFbnRyeQMFFG5hdGl2ZVRyYW5zZmVyc0NvdW50BRBkZXN0RWxBZGRyZXNzSGV4CAUBdAZhbW91bnQJAMwIAgkBBEJ1cm4CBQd0b2tlbklkCAUBdAZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwQMYmxvY2tIYXNoSGV4C21lcmtsZVByb29mFHRyYW5zZmVySW5kZXhJbkJsb2NrBmFtb3VudAQRd2l0aGRyYXdCbG9ja01ldGEJAQlibG9ja01ldGEBBQxibG9ja0hhc2hIZXgEE3dpdGhkcmF3QmxvY2tIZWlnaHQIBRF3aXRoZHJhd0Jsb2NrTWV0YQJfMQQUZmluYWxpemVkQmxvY2tIZWlnaHQICQEJYmxvY2tNZXRhAQkBEUBleHRyTmF0aXZlKDEwNTgpAQURZmluYWxpemVkQmxvY2tLZXkCXzEEGG1haW5DaGFpbkxhc3RCbG9ja0hlaWdodAgJAQlibG9ja01ldGEBBRJtYWluQ2hhaW5MYXN0QmxvY2sCXzEDCQBmAgUTd2l0aGRyYXdCbG9ja0hlaWdodAUUZmluYWxpemVkQmxvY2tIZWlnaHQJAAIBCQCsAgIJAKwCAgkArAICAgpFTCBibG9jayAjCQCkAwEFE3dpdGhkcmF3QmxvY2tIZWlnaHQCLSBpcyBub3QgZmluYWxpemVkLiBUaGUgY3VycmVudCBmaW5hbGl6ZWQgaXMgIwkApAMBBRRmaW5hbGl6ZWRCbG9ja0hlaWdodAMJAQIhPQIJAJADAQULbWVya2xlUHJvb2YFFFdJVEhEUkFXX1BST09GU19TSVpFCQACAQkArAICCQCsAgIJAKwCAgIJRXhwZWN0ZWQgCQCkAwEFFFdJVEhEUkFXX1BST09GU19TSVpFAg0gcHJvb2ZzLCBnb3QgCQCkAwEJAJADAQULbWVya2xlUHJvb2YDCQBmAgAABRR0cmFuc2ZlckluZGV4SW5CbG9jawkAAgEJAKwCAgIzVHJhbnNmZXIgaW5kZXggaW4gYmxvY2sgc2hvdWxkIGJlIG5vbm5lZ2F0aXZlLCBnb3QgCQCkAwEFFHRyYW5zZmVySW5kZXhJbkJsb2NrAwkAZwIAAAUGYW1vdW50CQACAQkArAICAh9BbW91bnQgc2hvdWxkIGJlIHBvc2l0aXZlLCBnb3QgCQCkAwEFBmFtb3VudAQUd2l0aGRyYXdCbG9ja0NoYWluSWQIBRF3aXRoZHJhd0Jsb2NrTWV0YQJfNAQLaXNNYWluQ2hhaW4JAAACBRR3aXRoZHJhd0Jsb2NrQ2hhaW5JZAULbWFpbkNoYWluSWQEEnJlbGF0ZXNUb01haW5DaGFpbgQHJG1hdGNoMAkAnwgBCQEUY2hhaW5Gb3JrZWRIZWlnaHRLZXkBBRR3aXRoZHJhd0Jsb2NrQ2hhaW5JZAMJAAECBQckbWF0Y2gwAgNJbnQEDGZvcmtlZEhlaWdodAUHJG1hdGNoMAkAZgIFDGZvcmtlZEhlaWdodAUTd2l0aGRyYXdCbG9ja0hlaWdodAkAAgEJAKwCAgkArAICCQCsAgIFDGJsb2NrSGFzaEhleAIdIGlzIG9uIGFuIGFsdGVybmF0aXZlIGNoYWluICMJAKQDAQUUd2l0aGRyYXdCbG9ja0NoYWluSWQCOCB0aGF0IHdhcyBub3QgYXBwcm92ZWQgYnkgbWFqb3JpdHkuIFdhaXQgZm9yIHNvbWUgYmxvY2tzAwMFC2lzTWFpbkNoYWluBgUScmVsYXRlc1RvTWFpbkNoYWluBAlyZWNpcGllbnQIBQFpDG9yaWdpbkNhbGxlcgQPcmVjaXBpZW50UGtIYXNoCQDJAQIJAMoBAggFCXJlY2lwaWVudAVieXRlcwACBRRQVUJMSUNfS0VZX0hBU0hfU0laRQQPemVyb0Ftb3VudEJ5dGVzASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQLYW1vdW50Qnl0ZXMJAJoDAQUGYW1vdW50BAtlbEV2ZW50RGF0YQkAywECCQDLAQIFD3JlY2lwaWVudFBrSGFzaAkAyQECBQ96ZXJvQW1vdW50Qnl0ZXMJAGUCCQDIAQEFD3plcm9BbW91bnRCeXRlcwkAyAEBBQthbW91bnRCeXRlcwULYW1vdW50Qnl0ZXMEEWVsRXZlbnREYXRhRGlnZXN0CQDwFQEFC2VsRXZlbnREYXRhBBJjYWxjdWxhdGVkUm9vdEhhc2gJAL0FAwULbWVya2xlUHJvb2YFEWVsRXZlbnREYXRhRGlnZXN0BRR0cmFuc2ZlckluZGV4SW5CbG9jawQQZXhwZWN0ZWRSb290SGFzaAgFEXdpdGhkcmF3QmxvY2tNZXRhAl81AwkAAAIFEmNhbGN1bGF0ZWRSb290SGFzaAUQZXhwZWN0ZWRSb290SGFzaAQHdG9rZW5JZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1OCkBBQp0b2tlbklkS2V5BAx0cmFuc2ZlcnNLZXkJARRibG9ja0UyQ1RyYW5zZmVyc0tleQEFDGJsb2NrSGFzaEhleAkAzAgCCQEHUmVpc3N1ZQMFB3Rva2VuSWQFBmFtb3VudAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUJcmVjaXBpZW50BQZhbW91bnQFB3Rva2VuSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUMdHJhbnNmZXJzS2V5CQEJc2V0T3JGYWlsAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQx0cmFuc2ZlcnNLZXkCAAUUdHJhbnNmZXJJbmRleEluQmxvY2sFA25pbAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFEV4cGVjdGVkIHJvb3QgaGFzaDogCQDcBAEFEGV4cGVjdGVkUm9vdEhhc2gCBywgZ290OiAJANwEAQUSY2FsY3VsYXRlZFJvb3RIYXNoAhUuIEV2ZW50IGRhdGEgZGlnZXN0OiAJANoEAQURZWxFdmVudERhdGFEaWdlc3QCHy4gQ2hlY2sgeW91ciB3aXRoZHJhdyBhcmd1bWVudHMJAAIBCQCsAgIJAKwCAgIJRXhwZWN0ZWQgBQxibG9ja0hhc2hIZXgCLyB0byBiZSBlaXRoZXIgb24gdGhlIG1haW4gY2hhaW4gb3IgcmVsYXRlIHRvIGl0AWkBBXNldHVwAhNnZW5lc2lzQmxvY2tIYXNoSGV4EW1pbmVyUmV3YXJkSW5Hd2VpAwkBD2lzQ29udHJhY3RTZXR1cAAJAAIBAiRUaGUgY29udHJhY3QgaGFzIGJlZW4gYWxyZWFkeSBzZXQgdXADCQBmAgAABRFtaW5lclJld2FyZEluR3dlaQkAAgECJFRoZSBtaW5lciByZXdhcmQgbXVzdCBiZSBub25uZWdhdGl2ZQQQZ2VuZXNpc0Jsb2NrSGFzaAkA3QQBBRNnZW5lc2lzQmxvY2tIYXNoSGV4BBljaGVja0dlbmVzaXNCbG9ja0hhc2hTaXplAwkAAAIJAMgBAQUQZ2VuZXNpc0Jsb2NrSGFzaAUPQkxPQ0tfSEFTSF9TSVpFBgkAAgECGFdyb25nIGdlbmVzaXMgYmxvY2sgaGFzaAMJAAACBRljaGVja0dlbmVzaXNCbG9ja0hhc2hTaXplBRljaGVja0dlbmVzaXNCbG9ja0hhc2hTaXplBAdlbXB0eVBrASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQTZ2VuZXNpc01pbmVyQWRkcmVzcwkApwgBBQdlbXB0eVBrBBdnZW5lc2lzRXRoUmV3YXJkQWRkcmVzcwEUAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWdlbmVzaXNCbG9ja1JlZmVyZW5jZUhhc2gCQDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEBWlzc3VlCQDCCAUCBVVOSVQwAgxOYXRpdmUgdG9rZW4AAAAIBgQHdG9rZW5JZAkAuAgBBQVpc3N1ZQQQZ2VuZXNpc0Jsb2NrTWV0YQkBEG1rQmxvY2tNZXRhRW50cnkGBRNnZW5lc2lzQmxvY2tIYXNoSGV4AAAFGWdlbmVzaXNCbG9ja1JlZmVyZW5jZUhhc2gAAAkA3AQBAQAA////////////AQkAzAgCBRBnZW5lc2lzQmxvY2tNZXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRjaGFpbkZpcnN0QmxvY2tJZEtleQEAAAUTZ2VuZXNpc0Jsb2NrSGFzaEhleAkAzAgCCQEQbWtDaGFpbk1ldGFFbnRyeQMAAAAABRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5taW5lclJld2FyZEtleQURbWluZXJSZXdhcmRJbkd3ZWkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGVwb2NoTWV0YUtleQEFBmhlaWdodAkArAICCQCsAgIJAKUIAQUTZ2VuZXNpc01pbmVyQWRkcmVzcwIDLDAsBRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIFEWZpbmFsaXplZEJsb2NrS2V5BRNnZW5lc2lzQmxvY2tIYXNoSGV4CQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCnRva2VuSWRLZXkJANgEAQUHdG9rZW5JZAkAzAgCCQELU3RyaW5nRW50cnkCBRJlbEJyaWRnZUFkZHJlc3NLZXkCKjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNmE3ZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAHbUgso=", "height": 3290416, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EkY5moE8FCU9CuGsFaX4Eaum76PqX5UM78oNkni7ezPh Next: 3RcHvbUrvhacUkEbDF6sAbEsJWivQptXXP9H9oenS514 Diff:
OldNewDifferences
715715
716716
717717 @Callable(w)
718-func join (N) = {
719- func dr (ds) = {
720- let y = getBinary(M(ds))
718+func join (dr) = {
719+ func ds (dt) = {
720+ let y = getBinary(M(dt))
721721 if ($isInstanceOf(y, "ByteVector"))
722722 then {
723- let dt = y
724- if ((dt == w.originCallerPublicKey))
723+ let du = y
724+ if ((du == w.originCallerPublicKey))
725725 then unit
726- else throw(((("EL miner address " + ds) + " is already linked with ") + toBase58String(dt)))
726+ else throw(((("EL miner address " + dt) + " is already linked with ") + toBase58String(du)))
727727 }
728728 else unit
729729 }
730730
731+ let dv = split(dr, "0x")
732+ let N = fromBase16String(dv[(size(dv) - 1)])
731733 if (!(cb()))
732734 then throw("The contract has not yet set up")
733735 else if ((c > wavesBalance(w.originCaller).generating))
737739 else if ((size(ax) >= 50))
738740 then throw("too many miners")
739741 else {
740- func du (dv,H) = if (dv)
742+ func dw (dx,H) = if (dx)
741743 then true
742744 else (H == toString(w.originCaller))
743745
744- let dw = {
746+ let dy = {
745747 let bi = ax
746748 let bj = size(bi)
747749 let bk = false
748750 func bl (bm,bn) = if ((bn >= bj))
749751 then bm
750- else du(bm, bi[bn])
752+ else dw(bm, bi[bn])
751753
752754 func bo (bm,bn) = if ((bn >= bj))
753755 then bm
755757
756758 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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)
757759 }
758- if (dw)
760+ if (dy)
759761 then nil
760762 else {
761- let dx = toString(w.originCaller)
762- let dy = toBase16String(N)
763- let dz = dr(dy)
764- if ((dz == dz))
763+ let dz = toString(w.originCaller)
764+ let dA = toBase16String(N)
765+ let dB = ds(dA)
766+ if ((dB == dB))
765767 then {
766768 let bL = if ((size(ax) == 0))
767- then dx
768- else ((aw + d) + dx)
769- let dA = {
770- let y = getString(K(dx))
769+ then dz
770+ else ((aw + d) + dz)
771+ let dC = {
772+ let y = getString(K(dz))
771773 if ($isInstanceOf(y, "String"))
772774 then {
773- let dB = y
774- if ((dB == toBase16String(N)))
775+ let dD = y
776+ if ((dD == toBase16String(N)))
775777 then nil
776- else [DeleteEntry(M(dB))]
778+ else [DeleteEntry(M(dD))]
777779 }
778780 else nil
779781 }
780- ([StringEntry(l, bL), StringEntry(K(dx), ("0x" + dy)), BinaryEntry(M(dy), w.originCallerPublicKey)] ++ dA)
782+ ([StringEntry(l, bL), StringEntry(K(dz), ("0x" + dA)), BinaryEntry(M(dA), w.originCallerPublicKey)] ++ dC)
781783 }
782784 else throw("Strict value is not equal to itself.")
783785 }
788790
789791 @Callable(w)
790792 func leave () = {
791- let dC = toString(w.originCaller)
792- func dD (bS,H) = if ((H == dC))
793+ let dE = toString(w.originCaller)
794+ func dF (bS,H) = if ((H == dE))
793795 then bS
794796 else (bS :+ H)
795797
796- let dE = {
798+ let dG = {
797799 let bi = ax
798800 let bj = size(bi)
799801 let bk = nil
800802 func bl (bm,bn) = if ((bn >= bj))
801803 then bm
802- else dD(bm, bi[bn])
804+ else dF(bm, bi[bn])
803805
804806 func bo (bm,bn) = if ((bn >= bj))
805807 then bm
807809
808810 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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)
809811 }
810- let dF = K(dC)
811- let dG = valueOrErrorMessage(getString(this, dF), "miner has never joined")
812- if ((dG == dG))
812+ let dH = K(dE)
813+ let dI = valueOrErrorMessage(getString(this, dH), "miner has never joined")
814+ if ((dI == dI))
813815 then if ((au == w.originCaller))
814816 then throw("designated miner can't leave")
815- else [StringEntry(l, makeString_2C(dE, d))]
817+ else [StringEntry(l, makeString_2C(dG, d))]
816818 else throw("Strict value is not equal to itself.")
817819 }
818820
820822
821823 @Callable(w)
822824 func transfer (T) = {
823- let dH = if ((size(T) == i))
825+ let dJ = if ((size(T) == i))
824826 then fromBase16String(T)
825827 else throw(((("Address should have " + toString(i)) + " characters, got ") + toString(size(T))))
826- if ((dH == dH))
828+ if ((dJ == dJ))
827829 then {
828- let dI = if ((size(w.payments) == 1))
830+ let dK = if ((size(w.payments) == 1))
829831 then true
830832 else throw(("Expected one payment as a transfer amount, got " + toString(size(w.payments))))
831- if ((dI == dI))
833+ if ((dK == dK))
832834 then {
833- let dJ = getStringValue(s)
834- let dK = fromBase58String(dJ)
835+ let dL = getStringValue(s)
836+ let dM = fromBase58String(dL)
835837 let ad = w.payments[0]
836- let dL = {
838+ let dN = {
837839 let y = ad.assetId
838840 if ($isInstanceOf(y, "ByteVector"))
839841 then {
840- let dM = y
841- if ((dM == dK))
842+ let dO = y
843+ if ((dO == dM))
842844 then true
843- else throw(((("Expected " + dJ) + " in the payment, got ") + toBase58String(dM)))
845+ else throw(((("Expected " + dL) + " in the payment, got ") + toBase58String(dO)))
844846 }
845- else throw((("Expected " + dJ) + " in the payment, got Waves"))
847+ else throw((("Expected " + dL) + " in the payment, got Waves"))
846848 }
847- if ((dL == dL))
849+ if ((dN == dN))
848850 then {
849- let dN = az(ap)._6
850- let af = (P - dN)
851- let dO = if ((160 > af))
851+ let dP = az(ap)._6
852+ let af = (P - dP)
853+ let dQ = if ((160 > af))
852854 then ac(ad, 1000000, af)
853855 else if ((1600 > af))
854856 then ac(ad, 10000000, af)
857859 else if ((6400 > af))
858860 then ac(ad, 1000000000, af)
859861 else throw((("Transfers denied for queue size of " + toString(af)) + ". Wait until current transfers processed"))
860- if ((dO == dO))
861- then [IntegerEntry(u, (P + 1)), S(P, T, ad.amount), Burn(dK, ad.amount)]
862+ if ((dQ == dQ))
863+ then [IntegerEntry(u, (P + 1)), S(P, T, ad.amount), Burn(dM, ad.amount)]
862864 else throw("Strict value is not equal to itself.")
863865 }
864866 else throw("Strict value is not equal to itself.")
871873
872874
873875 @Callable(w)
874-func withdraw (A,dP,dQ,U) = {
875- let dR = az(A)
876- let dS = dR._1
877- let dT = az(getStringValue(r))._1
878- let dU = az(ap)._1
879- if ((dS > dT))
880- then throw(((("EL block #" + toString(dS)) + " is not finalized. The current finalized is #") + toString(dT)))
881- else if ((size(dP) != h))
882- then throw(((("Expected " + toString(h)) + " proofs, got ") + toString(size(dP))))
883- else if ((0 > dQ))
884- then throw(("Transfer index in block should be nonnegative, got " + toString(dQ)))
876+func withdraw (A,dR,dS,U) = {
877+ let dT = az(A)
878+ let dU = dT._1
879+ let dV = az(getStringValue(r))._1
880+ let dW = az(ap)._1
881+ if ((dU > dV))
882+ then throw(((("EL block #" + toString(dU)) + " is not finalized. The current finalized is #") + toString(dV)))
883+ else if ((size(dR) != h))
884+ then throw(((("Expected " + toString(h)) + " proofs, got ") + toString(size(dR))))
885+ else if ((0 > dS))
886+ then throw(("Transfer index in block should be nonnegative, got " + toString(dS)))
885887 else if ((0 >= U))
886888 then throw(("Amount should be positive, got " + toString(U)))
887889 else {
888- let dV = dR._4
889- let dW = (dV == am)
890- let dX = {
891- let y = getInteger(I(dV))
890+ let dX = dT._4
891+ let dY = (dX == am)
892+ let dZ = {
893+ let y = getInteger(I(dX))
892894 if ($isInstanceOf(y, "Int"))
893895 then {
894- let dY = y
895- (dY > dS)
896+ let ea = y
897+ (ea > dU)
896898 }
897- else throw((((A + " is on an alternative chain #") + toString(dV)) + " that was not approved by majority. Wait for some blocks"))
899+ else throw((((A + " is on an alternative chain #") + toString(dX)) + " that was not approved by majority. Wait for some blocks"))
898900 }
899- if (if (dW)
901+ if (if (dY)
900902 then true
901- else dX)
903+ else dZ)
902904 then {
903- let dZ = w.originCaller
904- let ea = take(drop(dZ.bytes, 2), f)
905- let eb = base58'11111111111111111111111111111111111111111111'
906- let ec = toBytes(U)
907- let ed = ((ea + take(eb, (size(eb) - size(ec)))) + ec)
908- let ee = blake2b256_16Kb(ed)
909- let ef = createMerkleRoot(dP, ee, dQ)
910- let eg = dR._5
911- if ((ef == eg))
905+ let eb = w.originCaller
906+ let ec = take(drop(eb.bytes, 2), f)
907+ let ed = base58'11111111111111111111111111111111111111111111'
908+ let ee = toBytes(U)
909+ let ef = ((ec + take(ed, (size(ed) - size(ee)))) + ee)
910+ let eg = blake2b256_16Kb(ef)
911+ let eh = createMerkleRoot(dR, eg, dS)
912+ let ei = dT._5
913+ if ((eh == ei))
912914 then {
913- let dK = fromBase58String(getStringValue(s))
914- let eh = z(A)
915-[Reissue(dK, U, true), ScriptTransfer(dZ, U, dK), StringEntry(eh, cz(valueOrElse(getString(eh), ""), dQ))]
915+ let dM = fromBase58String(getStringValue(s))
916+ let ej = z(A)
917+[Reissue(dM, U, true), ScriptTransfer(eb, U, dM), StringEntry(ej, cz(valueOrElse(getString(ej), ""), dS))]
916918 }
917- else throw((((((("Expected root hash: " + toBase16String(eg)) + ", got: ") + toBase16String(ef)) + ". Event data digest: ") + toBase64String(ee)) + ". Check your withdraw arguments"))
919+ else throw((((((("Expected root hash: " + toBase16String(ei)) + ", got: ") + toBase16String(eh)) + ". Event data digest: ") + toBase64String(eg)) + ". Check your withdraw arguments"))
918920 }
919921 else throw((("Expected " + A) + " to be either on the main chain or relate to it"))
920922 }
923925
924926
925927 @Callable(w)
926-func setup (ei,ej) = if (cb())
928+func setup (ek,el) = if (cb())
927929 then throw("The contract has been already set up")
928- else if ((0 > ej))
930+ else if ((0 > el))
929931 then throw("The miner reward must be nonnegative")
930932 else {
931- let ek = fromBase16String(ei)
932- let el = if ((size(ek) == e))
933+ let em = fromBase16String(ek)
934+ let en = if ((size(em) == e))
933935 then true
934936 else throw("Wrong genesis block hash")
935- if ((el == el))
937+ if ((en == en))
936938 then {
937- let em = base58'11111111111111111111111111111111'
938- let en = addressFromPublicKey(em)
939- let eo = base58'11111111111111111111'
940- let ep = "0000000000000000000000000000000000000000000000000000000000000000"
941- let eq = Issue("UNIT0", "Native token", 0, 8, true)
942- let dK = calculateAssetId(eq)
943- let er = aK(ei, 0, ep, 0, toBase16String(base58''), -1)
944-[er, StringEntry(D(0), ei), ak(0, 0, ei), IntegerEntry(p, ej), StringEntry(B(height), ((toString(en) + ",0,") + ei)), StringEntry(r, ei), eq, StringEntry(s, toBase58String(dK)), StringEntry(t, "0x0000000000000000000000000000000000006a7e")]
939+ let eo = base58'11111111111111111111111111111111'
940+ let ep = addressFromPublicKey(eo)
941+ let eq = base58'11111111111111111111'
942+ let er = "0000000000000000000000000000000000000000000000000000000000000000"
943+ let es = Issue("UNIT0", "Native token", 0, 8, true)
944+ let dM = calculateAssetId(es)
945+ let et = aK(ek, 0, er, 0, toBase16String(base58''), -1)
946+[et, StringEntry(D(0), ek), ak(0, 0, ek), IntegerEntry(p, el), StringEntry(B(height), ((toString(ep) + ",0,") + ek)), StringEntry(r, ek), es, StringEntry(s, toBase58String(dM)), StringEntry(t, "0x0000000000000000000000000000000000006a7e")]
945947 }
946948 else throw("Strict value is not equal to itself.")
947949 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 8 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 9223372036854775807
55
66 let b = 100000000
77
88 let c = (20000 * b)
99
1010 let d = ","
1111
1212 let e = 32
1313
1414 let f = 20
1515
1616 let g = 32
1717
1818 let h = 10
1919
2020 let i = 40
2121
2222 let j = 16
2323
2424 let k = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
2525
2626 let l = "allMiners"
2727
2828 let m = "mainChainId"
2929
3030 let n = "lastChainId"
3131
3232 let o = "firstValidAltChainId"
3333
3434 let p = "minerReward"
3535
3636 let q = "block_0x"
3737
3838 let r = "finalizedBlock"
3939
4040 let s = "tokenId"
4141
4242 let t = "elBridgeAddress"
4343
4444 let u = "nativeTransfersCount"
4545
4646 func v (w) = {
4747 let x = toString(w)
4848 let y = size(x)
4949 if ((1 == y))
5050 then ("0000000" + x)
5151 else if ((2 == y))
5252 then ("000000" + x)
5353 else if ((3 == y))
5454 then ("00000" + x)
5555 else if ((4 == y))
5656 then ("0000" + x)
5757 else if ((5 == y))
5858 then ("000" + x)
5959 else if ((6 == y))
6060 then ("00" + x)
6161 else if ((7 == y))
6262 then ("0" + x)
6363 else x
6464 }
6565
6666
6767 func z (A) = ("elToClTransfers_0x" + A)
6868
6969
7070 func B (C) = ("epoch_" + v(C))
7171
7272
7373 func D (E) = (("chain" + toString(E)) + "FirstBlock")
7474
7575
7676 func F (E) = ("chain_" + v(E))
7777
7878
7979 func G (E,H) = ((("chain_" + v(E)) + "_") + toString(H))
8080
8181
8282 func I (E) = (("chain_" + v(E)) + "ForkedHeight")
8383
8484
8585 func J (E) = (("chain" + toString(E)) + "Supporters")
8686
8787
8888 func K (L) = (("miner_" + L) + "_RewardAddress")
8989
9090
9191 func M (N) = (("miner_0x" + N) + "_PK")
9292
9393
9494 func O (H) = (("miner_" + toString(H)) + "_ChainId")
9595
9696
9797 let P = valueOrElse(getInteger(this, u), 0)
9898
9999 func Q (R) = ("nativeTransfer_" + toString(R))
100100
101101
102102 func S (R,T,U) = StringEntry(Q(R), ((("0x" + T) + d) + toString(U)))
103103
104104
105105 func V (W,X,Y) = {
106106 let Z = if (Y)
107107 then (j - 1)
108108 else j
109109 let aa = (X - W)
110110 let ab = if ((aa > Z))
111111 then throw(((("Allowed only " + toString(Z)) + " transfers, got ") + toString(aa)))
112112 else true
113113 if ((ab == ab))
114114 then if ((X >= P))
115115 then throw(((("Attempt to transfer #" + toString(X)) + ". Available transfers: ") + toString(P)))
116116 else true
117117 else throw("Strict value is not equal to itself.")
118118 }
119119
120120
121121 func ac (ad,ae,af) = if ((ad.amount >= ae))
122122 then true
123123 else throw((((((("Transferring amount " + toString(ad.amount)) + " should be >= ") + toString(ae)) + " for queue size of ") + toString(af)) + ". Transfer more or wait"))
124124
125125
126126 func ag (ah) = wavesBalance(ah).generating
127127
128128
129129 func ai (E) = {
130130 let x = getStringValue(F(E))
131131 let aj = split(x, d)
132132 $Tuple2(parseIntValue(aj[0]), aj[1])
133133 }
134134
135135
136136 func ak (E,al,A) = StringEntry(F(E), ((toString(al) + d) + A))
137137
138138
139139 let am = valueOrElse(getInteger(m), 0)
140140
141141 let an = ai(am)
142142
143143 let ao = an._1
144144
145145 let ap = an._2
146146
147147 func aq (C) = {
148148 let y = getString(B(C))
149149 if ($isInstanceOf(y, "String"))
150150 then {
151151 let x = y
152152 let ar = split(x, d)
153153 $Tuple3(addressFromStringValue(ar[0]), parseIntValue(ar[1]), ar[2])
154154 }
155155 else unit
156156 }
157157
158158
159159 let as = {
160160 let y = aq(height)
161161 if ($isInstanceOf(y, "(Address, Int, String)"))
162162 then {
163163 let at = y
164164 at
165165 }
166166 else $Tuple2(unit, 0)
167167 }
168168
169169 let au = as._1
170170
171171 let av = as._2
172172
173173 let aw = valueOrElse(getString(l), "")
174174
175175 let ax = {
176176 let y = aw
177177 if (("" == y))
178178 then nil
179179 else if ($isInstanceOf(y, "String"))
180180 then {
181181 let ay = y
182182 split_4C(ay, d)
183183 }
184184 else throw("Match error")
185185 }
186186
187187 func az (aA) = {
188188 let aB = getBinaryValue((q + aA))
189189 let aC = size(aB)
190190 let aD = toInt(aB)
191191 let aE = toInt(aB, 8)
192192 let aF = take(drop(aB, 16), e)
193193 let E = toInt(aB, (16 + e))
194194 let aG = (24 + e)
195195 let aH = (aC - aG)
196196 let aI = if ((aH >= g))
197197 then take(drop(aB, aG), g)
198198 else base58''
199199 let aJ = if (if ((aH == 8))
200200 then true
201201 else (aH > g))
202202 then toInt(aB, (aG + size(aI)))
203203 else -1
204204 $Tuple6(aD, aE, aF, E, aI, aJ)
205205 }
206206
207207
208208 func aK (A,aD,aL,E,aM,aJ) = {
209209 let aN = fromBase16String(aM)
210210 let aO = size(aN)
211211 let aP = if (if ((aO == 0))
212212 then true
213213 else (aO == g))
214214 then true
215215 else throw(((("Transfers root hash should have 0 or " + toString(g)) + " bytes, got ") + toString(aO)))
216216 if ((aP == aP))
217217 then {
218218 let aQ = (((((toBytes(aD) + toBytes(height)) + fromBase16String(aL)) + toBytes(E)) + aN) + toBytes(aJ))
219219 BinaryEntry((q + A), aQ)
220220 }
221221 else throw("Strict value is not equal to itself.")
222222 }
223223
224224
225225 func aR (H,E) = {
226226 let y = getInteger(G(E, H))
227227 if ($isInstanceOf(y, "Int"))
228228 then {
229229 let aS = y
230230 aS
231231 }
232232 else {
233233 let aT = getStringValue(((("chain" + toString(E)) + "LastMinedBy") + toString(H)))
234234 az(aT)._1
235235 }
236236 }
237237
238238
239239 let aU = {
240240 let aV = {
241241 let y = lastBlock.vrf
242242 if ($isInstanceOf(y, "ByteVector"))
243243 then {
244244 let aW = y
245245 aW
246246 }
247247 else lastBlock.generationSignature
248248 }
249249 func aX (aY,H) = {
250250 let aZ = aY
251251 let ba = aZ._1
252252 let bb = aZ._2
253253 let bc = aZ._3
254254 let bd = aZ._4
255255 let be = addressFromStringValue(H)
256256 let bf = wavesBalance(be).generating
257257 let bg = ag(be)
258258 if (if ((c > bf))
259259 then true
260260 else (0 >= bg))
261261 then aY
262262 else {
263263 let bh = calculateDelay(be, bg)
264264 if ((bc > bh))
265265 then $Tuple4(H, (bb + bg), bh, (bd :+ H))
266266 else $Tuple4(ba, (bb + bg), bc, (bd :+ H))
267267 }
268268 }
269269
270270 let bi = ax
271271 let bj = size(bi)
272272 let bk = $Tuple4("", 0, a, nil)
273273 func bl (bm,bn) = if ((bn >= bj))
274274 then bm
275275 else aX(bm, bi[bn])
276276
277277 func bo (bm,bn) = if ((bn >= bj))
278278 then bm
279279 else throw("List size exceeds 50")
280280
281281 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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)
282282 }
283283
284284 let bp = aU._1
285285
286286 let bq = aU._2
287287
288288 let br = az(ap)
289289
290290 let bs = br._1
291291
292292 let bt = br._2
293293
294294 func bu (bv,bw,bx) = {
295295 let by = split_4C("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "")
296296 let bz = (bq / 2)
297297 func bA (aY,bB) = {
298298 let bC = aY
299299 let bD = bC._1
300300 let bE = bC._2
301301 let bF = bC._3
302302 let bd = bC._4
303303 let y = bE
304304 if ($isInstanceOf(y, "Unit"))
305305 then {
306306 let bG = if ((bD == height))
307307 then $Tuple3(bv, bw, bx)
308308 else value(aq(bD))
309309 let H = bG._1
310310 let bH = bG._2
311311 let bI = bG._3
312312 if (if ((bH == 0))
313313 then true
314314 else ((height - bD) >= 100))
315315 then $Tuple4(bD, bI, bF, ax)
316316 else {
317317 let bJ = if (containsElement(bd, H))
318318 then $Tuple2(bF, bd)
319319 else $Tuple2((bF + ag(H)), H :: bd)
320320 let bK = bJ._1
321321 let bL = bJ._2
322322 if ((bK > bz))
323323 then $Tuple4(bD, bI, bK, ax)
324324 else $Tuple4(bH, unit, bK, bL)
325325 }
326326 }
327327 else aY
328328 }
329329
330330 let bM = {
331331 let bi = by
332332 let bj = size(bi)
333333 let bk = $Tuple4(height, unit, 0, nil)
334334 func bl (bm,bn) = if ((bn >= bj))
335335 then bm
336336 else bA(bm, bi[bn])
337337
338338 func bo (bm,bn) = if ((bn >= bj))
339339 then bm
340340 else throw("List size exceeds 100")
341341
342342 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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)
343343 }
344344 let bN = bM._1
345345 let bO = bM._2
346346 let y = bO
347347 if ($isInstanceOf(y, "String"))
348348 then {
349349 let bP = y
350350 bP
351351 }
352352 else value(aq(bN))._3
353353 }
354354
355355
356356 func bQ (E) = {
357357 func bR (bS,bT) = {
358358 let bU = bS
359359 let bF = bU._1
360360 let bV = bU._2
361361 let bW = addressFromStringValue(bT)
362362 if (containsElement(bV, bW))
363363 then bS
364364 else {
365365 let bX = ag(bW)
366366 $Tuple2((bF + bX), (bV :+ bW))
367367 }
368368 }
369369
370370 let bY = split_4C(getStringValue(J(E)), d)
371371 let bZ = {
372372 let bi = bY
373373 let bj = size(bi)
374374 let bk = $Tuple2(0, nil)
375375 func bl (bm,bn) = if ((bn >= bj))
376376 then bm
377377 else bR(bm, bi[bn])
378378
379379 func bo (bm,bn) = if ((bn >= bj))
380380 then bm
381381 else throw("List size exceeds 100")
382382
383383 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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)
384384 }
385385 let bX = bZ._1
386386 let ca = bZ._2
387387 bX
388388 }
389389
390390
391391 func cb () = isDefined(getInteger(p))
392392
393393
394394 func cc (bW) = if ((toString(bW) != bp))
395395 then throw(((((toBase58String(bW.bytes) + " is not allowed to mine in ") + toString(height)) + " epoch. Expected ") + bp))
396396 else unit
397397
398398
399399 func cd (ce,cf) = if ((ce == cf))
400400 then unit
401401 else throw(((("Expected a reference to the chain last block: 0x" + cf) + ". Got: 0x") + ce))
402402
403403
404404 func cg (E) = {
405405 let ch = getStringValue(D(E))
406406 let ci = valueOrElse(getInteger(o), 0)
407407 if ((ci > E))
408408 then true
409409 else (az(getStringValue(r))._1 > az(ch)._1)
410410 }
411411
412412
413413 func cj (H) = valueOrElse(getInteger(O(H)), getInteger(("chainIdOf" + toString(H))))
414414
415415
416416 func ck (bW,cl,cm) = {
417417 let cn = {
418418 let y = cm
419419 if ($isInstanceOf(y, "String"))
420420 then {
421421 let aT = y
422422 let co = aR(bW, am)
423423 ((az(aT)._1 + 1) > co)
424424 }
425425 else true
426426 }
427427 let y = cj(bW)
428428 if ($isInstanceOf(y, "Int"))
429429 then {
430430 let cp = y
431431 if (if ((cp == cl))
432432 then true
433433 else if (cg(cp))
434434 then cn
435435 else false)
436436 then unit
437437 else throw(("miner is mining other chain " + toString(cp)))
438438 }
439439 else unit
440440 }
441441
442442
443443 let cq = (" at height " + toString(height))
444444
445445 func cr (cs) = valueOrErrorMessage(valueOrErrorMessage(blockInfoByHeight(cs), ("last block is not available" + cq)).vrf, ("VRF is not available" + cq))
446446
447447
448448 func ct (cu) = {
449449 let cv = cr(height)
450450 if ((cu == cv))
451451 then unit
452452 else throw((((("Expected VRF " + toBase58String(cu)) + " does not match actual ") + toBase58String(cv)) + cq))
453453 }
454454
455455
456456 func cw (E,bW) = {
457457 let cx = getStringValue(J(E))
458458 let cy = split_4C(cx, d)
459459 if (containsElement(cy, toString(bW)))
460460 then nil
461461 else [StringEntry(J(E), ((cx + d) + toString(bW)))]
462462 }
463463
464464
465465 func cz (cA,R) = if ((0 > R))
466466 then throw(("Can't withdraw at negative index: " + toString(R)))
467467 else {
468468 let cB = size(cA)
469469 if ((R >= cB))
470470 then {
471471 let cC = (R - cB)
472472 if ((cC > size(k)))
473473 then throw((("Can't add " + toString(cC)) + " empty flags. Contact with developers"))
474474 else ((cA + take(k, cC)) + "1")
475475 }
476476 else {
477477 let cD = drop(cA, R)
478478 let cE = take(cD, 1)
479479 if ((cE == "0"))
480480 then ((take(cA, R) + "1") + drop(cD, 1))
481481 else throw((("Transfer #" + toString(R)) + " has been already taken"))
482482 }
483483 }
484484
485485
486486 func cF (cG) = {
487487 let cH = fromBase16String(cG)
488488 if ((size(cH) != e))
489489 then throw("invalid block id length")
490490 else cG
491491 }
492492
493493
494494 func cI (cJ,cK,bH) = {
495495 let cL = az(getStringValue(r))._1
496496 let cM = bu(cJ, bH, cK)
497497 if (if ((cM == cK))
498498 then true
499499 else (az(cM)._1 > cL))
500500 then [StringEntry(r, cM)]
501501 else nil
502502 }
503503
504504
505505 @Callable(w)
506506 func extendMainChain (A,cN,aW,aM,aJ) = {
507507 let cO = cF(A)
508508 if ((cO == cO))
509509 then {
510510 let cP = ct(aW)
511511 if ((cP == cP))
512512 then {
513513 let cQ = ck(w.originCaller, am, unit)
514514 if ((cQ == cQ))
515515 then {
516516 let cR = cd(cN, ap)
517517 if ((cR == cR))
518518 then {
519519 let cS = V(az(cN)._6, aJ, true)
520520 if ((cS == cS))
521521 then {
522522 let cT = {
523523 let y = aq(height)
524524 if ($isInstanceOf(y, "Unit"))
525525 then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bt)) + d) + A))
526526 else {
527527 let cU = y
528528 throw("Epoch already started")
529529 }
530530 }
531531 if ((cT == cT))
532532 then {
533533 let cV = cc(w.originCaller)
534534 if ((cV == cV))
535535 then {
536536 let cW = cI(w.originCaller, A, bt)
537537 let al = (ao + 1)
538538 ([aK(A, al, ap, am, aM, aJ), ak(am, al, A), IntegerEntry(O(w.originCaller), am), IntegerEntry(G(am, w.originCaller), al), cT] ++ cW)
539539 }
540540 else throw("Strict value is not equal to itself.")
541541 }
542542 else throw("Strict value is not equal to itself.")
543543 }
544544 else throw("Strict value is not equal to itself.")
545545 }
546546 else throw("Strict value is not equal to itself.")
547547 }
548548 else throw("Strict value is not equal to itself.")
549549 }
550550 else throw("Strict value is not equal to itself.")
551551 }
552552 else throw("Strict value is not equal to itself.")
553553 }
554554
555555
556556
557557 @Callable(w)
558558 func startAltChain (A,cN,aW,aM,aJ) = {
559559 let cO = cF(A)
560560 if ((cO == cO))
561561 then {
562562 let cP = ct(aW)
563563 if ((cP == cP))
564564 then {
565565 let cX = az(cN)
566566 let cY = cX._1
567567 let cZ = cX._2
568568 let da = cX._3
569569 let db = cX._4
570570 let dc = cX._5
571571 let W = cX._6
572572 let dd = az(getStringValue(r))._2
573573 let de = if ((cZ >= dd))
574574 then cZ
575575 else throw((((("Can not start alt chain from epoch " + toString(cZ)) + ", epoch ") + toString(dd)) + " is finalized"))
576576 let cQ = ck(w.originCaller, am, cN)
577577 if ((cQ == cQ))
578578 then {
579579 let cS = V(W, aJ, true)
580580 if ((cS == cS))
581581 then {
582582 let df = (valueOrElse(getInteger(n), 0) + 1)
583583 let al = (cY + 1)
584584 let cT = {
585585 let y = aq(height)
586586 if ($isInstanceOf(y, "Unit"))
587587 then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(de)) + d) + A))
588588 else {
589589 let cU = y
590590 throw("Epoch already started")
591591 }
592592 }
593593 let cV = cc(w.originCaller)
594594 if ((cV == cV))
595595 then [cT, aK(A, al, cN, df, aM, aJ), StringEntry(D(df), A), ak(df, al, A), IntegerEntry(O(w.originCaller), df), IntegerEntry(G(df, w.originCaller), al), IntegerEntry(G(am, w.originCaller), al), StringEntry(J(df), toString(w.originCaller)), IntegerEntry(n, df)]
596596 else throw("Strict value is not equal to itself.")
597597 }
598598 else throw("Strict value is not equal to itself.")
599599 }
600600 else throw("Strict value is not equal to itself.")
601601 }
602602 else throw("Strict value is not equal to itself.")
603603 }
604604 else throw("Strict value is not equal to itself.")
605605 }
606606
607607
608608
609609 @Callable(w)
610610 func extendAltChain (A,cN,aW,E,aM,aJ) = {
611611 let cO = cF(A)
612612 if ((cO == cO))
613613 then {
614614 let cP = ct(aW)
615615 if ((cP == cP))
616616 then {
617617 let dg = az(getStringValue(D(E)))
618618 let cQ = ck(w.originCaller, E, toBase16String(dg._3))
619619 if ((cQ == cQ))
620620 then {
621621 let dh = ai(E)
622622 let di = dh._1
623623 let dj = dh._2
624624 let cR = cd(cN, dj)
625625 if ((cR == cR))
626626 then {
627627 let cS = V(az(cN)._6, aJ, true)
628628 if ((cS == cS))
629629 then {
630630 let al = (di + 1)
631631 let bH = az(cN)._2
632632 let dk = if ((bQ(E) > (bq / 2)))
633633 then {
634634 let dl = valueOrElse(getInteger(n), 0)
635635 let cW = cI(w.originCaller, A, bH)
636636 ([IntegerEntry(I(am), dg._1), IntegerEntry(m, E), IntegerEntry(o, (dl + 1))] ++ cW)
637637 }
638638 else nil
639639 let cT = {
640640 let y = aq(height)
641641 if ($isInstanceOf(y, "Unit"))
642642 then StringEntry(B(height), ((((toString(w.originCaller) + d) + toString(bH)) + d) + A))
643643 else {
644644 let cU = y
645645 throw("Epoch already started")
646646 }
647647 }
648648 if ((cT == cT))
649649 then {
650650 let cV = cc(w.originCaller)
651651 if ((cV == cV))
652652 then {
653653 let dm = if (if ((dk == nil))
654654 then (valueOrElse(cj(w.originCaller), 0) != E)
655655 else false)
656656 then [IntegerEntry(G(am, w.originCaller), dg._1)]
657657 else nil
658658 ((([aK(A, al, cN, E, aM, aJ), ak(E, al, A), cT, IntegerEntry(O(w.originCaller), E), IntegerEntry(G(E, w.originCaller), al)] ++ dk) ++ cw(E, w.originCaller)) ++ dm)
659659 }
660660 else throw("Strict value is not equal to itself.")
661661 }
662662 else throw("Strict value is not equal to itself.")
663663 }
664664 else throw("Strict value is not equal to itself.")
665665 }
666666 else throw("Strict value is not equal to itself.")
667667 }
668668 else throw("Strict value is not equal to itself.")
669669 }
670670 else throw("Strict value is not equal to itself.")
671671 }
672672 else throw("Strict value is not equal to itself.")
673673 }
674674
675675
676676
677677 @Callable(w)
678678 func appendBlock (A,cN,aM,aJ) = {
679679 let dn = if ((au == w.originCaller))
680680 then true
681681 else {
682682 let y = au
683683 if ($isInstanceOf(y, "Address"))
684684 then {
685685 let do = y
686686 throw(("not allowed to forge blocks in this epoch, expected from " + toString(do)))
687687 }
688688 else throw("not allowed to forge blocks in this epoch, epoch miner is absent")
689689 }
690690 if ((dn == dn))
691691 then {
692692 let E = valueOrElse(cj(w.originCaller), am)
693693 let dp = ai(E)
694694 let di = dp._1
695695 let dq = dp._2
696696 let cR = cd(cN, dq)
697697 if ((cR == cR))
698698 then {
699699 let cS = V(az(cN)._6, aJ, false)
700700 if ((cS == cS))
701701 then {
702702 let al = (di + 1)
703703 let cO = cF(A)
704704 if ((cO == cO))
705705 then [aK(A, al, dq, E, aM, aJ), IntegerEntry(G(E, w.originCaller), al), ak(E, al, A), StringEntry(B(height), ((((toString(value(au)) + d) + toString(av)) + d) + A))]
706706 else throw("Strict value is not equal to itself.")
707707 }
708708 else throw("Strict value is not equal to itself.")
709709 }
710710 else throw("Strict value is not equal to itself.")
711711 }
712712 else throw("Strict value is not equal to itself.")
713713 }
714714
715715
716716
717717 @Callable(w)
718-func join (N) = {
719- func dr (ds) = {
720- let y = getBinary(M(ds))
718+func join (dr) = {
719+ func ds (dt) = {
720+ let y = getBinary(M(dt))
721721 if ($isInstanceOf(y, "ByteVector"))
722722 then {
723- let dt = y
724- if ((dt == w.originCallerPublicKey))
723+ let du = y
724+ if ((du == w.originCallerPublicKey))
725725 then unit
726- else throw(((("EL miner address " + ds) + " is already linked with ") + toBase58String(dt)))
726+ else throw(((("EL miner address " + dt) + " is already linked with ") + toBase58String(du)))
727727 }
728728 else unit
729729 }
730730
731+ let dv = split(dr, "0x")
732+ let N = fromBase16String(dv[(size(dv) - 1)])
731733 if (!(cb()))
732734 then throw("The contract has not yet set up")
733735 else if ((c > wavesBalance(w.originCaller).generating))
734736 then throw(((("Insufficient generating balance: " + toString(wavesBalance(w.originCaller).generating)) + ". Required: ") + toString(c)))
735737 else if ((size(N) != 20))
736738 then throw("rewardAddress should be an L2 address")
737739 else if ((size(ax) >= 50))
738740 then throw("too many miners")
739741 else {
740- func du (dv,H) = if (dv)
742+ func dw (dx,H) = if (dx)
741743 then true
742744 else (H == toString(w.originCaller))
743745
744- let dw = {
746+ let dy = {
745747 let bi = ax
746748 let bj = size(bi)
747749 let bk = false
748750 func bl (bm,bn) = if ((bn >= bj))
749751 then bm
750- else du(bm, bi[bn])
752+ else dw(bm, bi[bn])
751753
752754 func bo (bm,bn) = if ((bn >= bj))
753755 then bm
754756 else throw("List size exceeds 50")
755757
756758 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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)
757759 }
758- if (dw)
760+ if (dy)
759761 then nil
760762 else {
761- let dx = toString(w.originCaller)
762- let dy = toBase16String(N)
763- let dz = dr(dy)
764- if ((dz == dz))
763+ let dz = toString(w.originCaller)
764+ let dA = toBase16String(N)
765+ let dB = ds(dA)
766+ if ((dB == dB))
765767 then {
766768 let bL = if ((size(ax) == 0))
767- then dx
768- else ((aw + d) + dx)
769- let dA = {
770- let y = getString(K(dx))
769+ then dz
770+ else ((aw + d) + dz)
771+ let dC = {
772+ let y = getString(K(dz))
771773 if ($isInstanceOf(y, "String"))
772774 then {
773- let dB = y
774- if ((dB == toBase16String(N)))
775+ let dD = y
776+ if ((dD == toBase16String(N)))
775777 then nil
776- else [DeleteEntry(M(dB))]
778+ else [DeleteEntry(M(dD))]
777779 }
778780 else nil
779781 }
780- ([StringEntry(l, bL), StringEntry(K(dx), ("0x" + dy)), BinaryEntry(M(dy), w.originCallerPublicKey)] ++ dA)
782+ ([StringEntry(l, bL), StringEntry(K(dz), ("0x" + dA)), BinaryEntry(M(dA), w.originCallerPublicKey)] ++ dC)
781783 }
782784 else throw("Strict value is not equal to itself.")
783785 }
784786 }
785787 }
786788
787789
788790
789791 @Callable(w)
790792 func leave () = {
791- let dC = toString(w.originCaller)
792- func dD (bS,H) = if ((H == dC))
793+ let dE = toString(w.originCaller)
794+ func dF (bS,H) = if ((H == dE))
793795 then bS
794796 else (bS :+ H)
795797
796- let dE = {
798+ let dG = {
797799 let bi = ax
798800 let bj = size(bi)
799801 let bk = nil
800802 func bl (bm,bn) = if ((bn >= bj))
801803 then bm
802- else dD(bm, bi[bn])
804+ else dF(bm, bi[bn])
803805
804806 func bo (bm,bn) = if ((bn >= bj))
805807 then bm
806808 else throw("List size exceeds 50")
807809
808810 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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)
809811 }
810- let dF = K(dC)
811- let dG = valueOrErrorMessage(getString(this, dF), "miner has never joined")
812- if ((dG == dG))
812+ let dH = K(dE)
813+ let dI = valueOrErrorMessage(getString(this, dH), "miner has never joined")
814+ if ((dI == dI))
813815 then if ((au == w.originCaller))
814816 then throw("designated miner can't leave")
815- else [StringEntry(l, makeString_2C(dE, d))]
817+ else [StringEntry(l, makeString_2C(dG, d))]
816818 else throw("Strict value is not equal to itself.")
817819 }
818820
819821
820822
821823 @Callable(w)
822824 func transfer (T) = {
823- let dH = if ((size(T) == i))
825+ let dJ = if ((size(T) == i))
824826 then fromBase16String(T)
825827 else throw(((("Address should have " + toString(i)) + " characters, got ") + toString(size(T))))
826- if ((dH == dH))
828+ if ((dJ == dJ))
827829 then {
828- let dI = if ((size(w.payments) == 1))
830+ let dK = if ((size(w.payments) == 1))
829831 then true
830832 else throw(("Expected one payment as a transfer amount, got " + toString(size(w.payments))))
831- if ((dI == dI))
833+ if ((dK == dK))
832834 then {
833- let dJ = getStringValue(s)
834- let dK = fromBase58String(dJ)
835+ let dL = getStringValue(s)
836+ let dM = fromBase58String(dL)
835837 let ad = w.payments[0]
836- let dL = {
838+ let dN = {
837839 let y = ad.assetId
838840 if ($isInstanceOf(y, "ByteVector"))
839841 then {
840- let dM = y
841- if ((dM == dK))
842+ let dO = y
843+ if ((dO == dM))
842844 then true
843- else throw(((("Expected " + dJ) + " in the payment, got ") + toBase58String(dM)))
845+ else throw(((("Expected " + dL) + " in the payment, got ") + toBase58String(dO)))
844846 }
845- else throw((("Expected " + dJ) + " in the payment, got Waves"))
847+ else throw((("Expected " + dL) + " in the payment, got Waves"))
846848 }
847- if ((dL == dL))
849+ if ((dN == dN))
848850 then {
849- let dN = az(ap)._6
850- let af = (P - dN)
851- let dO = if ((160 > af))
851+ let dP = az(ap)._6
852+ let af = (P - dP)
853+ let dQ = if ((160 > af))
852854 then ac(ad, 1000000, af)
853855 else if ((1600 > af))
854856 then ac(ad, 10000000, af)
855857 else if ((3200 > af))
856858 then ac(ad, 100000000, af)
857859 else if ((6400 > af))
858860 then ac(ad, 1000000000, af)
859861 else throw((("Transfers denied for queue size of " + toString(af)) + ". Wait until current transfers processed"))
860- if ((dO == dO))
861- then [IntegerEntry(u, (P + 1)), S(P, T, ad.amount), Burn(dK, ad.amount)]
862+ if ((dQ == dQ))
863+ then [IntegerEntry(u, (P + 1)), S(P, T, ad.amount), Burn(dM, ad.amount)]
862864 else throw("Strict value is not equal to itself.")
863865 }
864866 else throw("Strict value is not equal to itself.")
865867 }
866868 else throw("Strict value is not equal to itself.")
867869 }
868870 else throw("Strict value is not equal to itself.")
869871 }
870872
871873
872874
873875 @Callable(w)
874-func withdraw (A,dP,dQ,U) = {
875- let dR = az(A)
876- let dS = dR._1
877- let dT = az(getStringValue(r))._1
878- let dU = az(ap)._1
879- if ((dS > dT))
880- then throw(((("EL block #" + toString(dS)) + " is not finalized. The current finalized is #") + toString(dT)))
881- else if ((size(dP) != h))
882- then throw(((("Expected " + toString(h)) + " proofs, got ") + toString(size(dP))))
883- else if ((0 > dQ))
884- then throw(("Transfer index in block should be nonnegative, got " + toString(dQ)))
876+func withdraw (A,dR,dS,U) = {
877+ let dT = az(A)
878+ let dU = dT._1
879+ let dV = az(getStringValue(r))._1
880+ let dW = az(ap)._1
881+ if ((dU > dV))
882+ then throw(((("EL block #" + toString(dU)) + " is not finalized. The current finalized is #") + toString(dV)))
883+ else if ((size(dR) != h))
884+ then throw(((("Expected " + toString(h)) + " proofs, got ") + toString(size(dR))))
885+ else if ((0 > dS))
886+ then throw(("Transfer index in block should be nonnegative, got " + toString(dS)))
885887 else if ((0 >= U))
886888 then throw(("Amount should be positive, got " + toString(U)))
887889 else {
888- let dV = dR._4
889- let dW = (dV == am)
890- let dX = {
891- let y = getInteger(I(dV))
890+ let dX = dT._4
891+ let dY = (dX == am)
892+ let dZ = {
893+ let y = getInteger(I(dX))
892894 if ($isInstanceOf(y, "Int"))
893895 then {
894- let dY = y
895- (dY > dS)
896+ let ea = y
897+ (ea > dU)
896898 }
897- else throw((((A + " is on an alternative chain #") + toString(dV)) + " that was not approved by majority. Wait for some blocks"))
899+ else throw((((A + " is on an alternative chain #") + toString(dX)) + " that was not approved by majority. Wait for some blocks"))
898900 }
899- if (if (dW)
901+ if (if (dY)
900902 then true
901- else dX)
903+ else dZ)
902904 then {
903- let dZ = w.originCaller
904- let ea = take(drop(dZ.bytes, 2), f)
905- let eb = base58'11111111111111111111111111111111111111111111'
906- let ec = toBytes(U)
907- let ed = ((ea + take(eb, (size(eb) - size(ec)))) + ec)
908- let ee = blake2b256_16Kb(ed)
909- let ef = createMerkleRoot(dP, ee, dQ)
910- let eg = dR._5
911- if ((ef == eg))
905+ let eb = w.originCaller
906+ let ec = take(drop(eb.bytes, 2), f)
907+ let ed = base58'11111111111111111111111111111111111111111111'
908+ let ee = toBytes(U)
909+ let ef = ((ec + take(ed, (size(ed) - size(ee)))) + ee)
910+ let eg = blake2b256_16Kb(ef)
911+ let eh = createMerkleRoot(dR, eg, dS)
912+ let ei = dT._5
913+ if ((eh == ei))
912914 then {
913- let dK = fromBase58String(getStringValue(s))
914- let eh = z(A)
915-[Reissue(dK, U, true), ScriptTransfer(dZ, U, dK), StringEntry(eh, cz(valueOrElse(getString(eh), ""), dQ))]
915+ let dM = fromBase58String(getStringValue(s))
916+ let ej = z(A)
917+[Reissue(dM, U, true), ScriptTransfer(eb, U, dM), StringEntry(ej, cz(valueOrElse(getString(ej), ""), dS))]
916918 }
917- else throw((((((("Expected root hash: " + toBase16String(eg)) + ", got: ") + toBase16String(ef)) + ". Event data digest: ") + toBase64String(ee)) + ". Check your withdraw arguments"))
919+ else throw((((((("Expected root hash: " + toBase16String(ei)) + ", got: ") + toBase16String(eh)) + ". Event data digest: ") + toBase64String(eg)) + ". Check your withdraw arguments"))
918920 }
919921 else throw((("Expected " + A) + " to be either on the main chain or relate to it"))
920922 }
921923 }
922924
923925
924926
925927 @Callable(w)
926-func setup (ei,ej) = if (cb())
928+func setup (ek,el) = if (cb())
927929 then throw("The contract has been already set up")
928- else if ((0 > ej))
930+ else if ((0 > el))
929931 then throw("The miner reward must be nonnegative")
930932 else {
931- let ek = fromBase16String(ei)
932- let el = if ((size(ek) == e))
933+ let em = fromBase16String(ek)
934+ let en = if ((size(em) == e))
933935 then true
934936 else throw("Wrong genesis block hash")
935- if ((el == el))
937+ if ((en == en))
936938 then {
937- let em = base58'11111111111111111111111111111111'
938- let en = addressFromPublicKey(em)
939- let eo = base58'11111111111111111111'
940- let ep = "0000000000000000000000000000000000000000000000000000000000000000"
941- let eq = Issue("UNIT0", "Native token", 0, 8, true)
942- let dK = calculateAssetId(eq)
943- let er = aK(ei, 0, ep, 0, toBase16String(base58''), -1)
944-[er, StringEntry(D(0), ei), ak(0, 0, ei), IntegerEntry(p, ej), StringEntry(B(height), ((toString(en) + ",0,") + ei)), StringEntry(r, ei), eq, StringEntry(s, toBase58String(dK)), StringEntry(t, "0x0000000000000000000000000000000000006a7e")]
939+ let eo = base58'11111111111111111111111111111111'
940+ let ep = addressFromPublicKey(eo)
941+ let eq = base58'11111111111111111111'
942+ let er = "0000000000000000000000000000000000000000000000000000000000000000"
943+ let es = Issue("UNIT0", "Native token", 0, 8, true)
944+ let dM = calculateAssetId(es)
945+ let et = aK(ek, 0, er, 0, toBase16String(base58''), -1)
946+[et, StringEntry(D(0), ek), ak(0, 0, ek), IntegerEntry(p, el), StringEntry(B(height), ((toString(ep) + ",0,") + ek)), StringEntry(r, ek), es, StringEntry(s, toBase58String(dM)), StringEntry(t, "0x0000000000000000000000000000000000006a7e")]
945947 }
946948 else throw("Strict value is not equal to itself.")
947949 }
948950
949951

github/deemru/w8io/169f3d6 
141.90 ms