tx · DLZf1RDWNZGzGaokJ8jaq3DwUxdXVhf7ywoLT8r4yhbU

3Mrq917T9DgxmZHP2wBRURvA2jUseEGaMqW:  -0.02000000 Waves

2024.10.07 20:22 [3316717] smart account 3Mrq917T9DgxmZHP2wBRURvA2jUseEGaMqW > SELF 0.00000000 Waves

{ "type": 13, "id": "DLZf1RDWNZGzGaokJ8jaq3DwUxdXVhf7ywoLT8r4yhbU", "fee": 2000000, "feeAssetId": null, "timestamp": 1728321748018, "version": 2, "chainId": 84, "sender": "3Mrq917T9DgxmZHP2wBRURvA2jUseEGaMqW", "senderPublicKey": "GCo4ZuX1Rm35x7nEMaxmHnkUeRoPqRk9knR7Ga55tMkD", "proofs": [ "fgHmFCfp19vq4YTXa4CjWEfccM1nogJRXD5mWTdVZpcMjxxWKuzwa8A4QwstCQwyQLMBs626oY5ve53h61zk5bv" ], "script": "base64:BgIWCAISAwoBCBIDCgEIEgMKAQgSAwoBCDABCWlzVGVzdEVudgAEB3Rlc3RlbnYEByRtYXRjaDAJAJsIAgUEdGhpcwIHVEVTVEVOVgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAF4BQckbWF0Y2gwBQF4BwUHdGVzdGVudgEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEMdHJ5R2V0U3RyaW5nAQNrZXkJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIFBHRoaXMFA2tleQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQACAQkArAICAilSQUk6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQsIGJ1dCBnb3Q6IAUGc3RyaW5nCQACAQIeUkFJOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50AQlhc0Jvb2xlYW4BBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAdib29sZWFuBQckbWF0Y2gwBQdib29sZWFuCQACAQIiRkFCOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogQm9vbGVhbgEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMDCQABAgUHJG1hdGNoMAIDSW50BAFzBQckbWF0Y2gwCQACAQImd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IFN0cmluZywgZ290OiBJbnQDCQABAgUHJG1hdGNoMAIEVW5pdAQBcwUHJG1hdGNoMAkAAgECJ3dyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcsIGdvdDogVW5pdAkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBFHN0YXRpY0tleV9lZ2dBc3NldElkAAIRc3RhdGljX2VnZ0Fzc2V0SWQBFXN0YXRpY0tleV9idXJuQWRkcmVzcwACEnN0YXRpY19idXJuQWRkcmVzcwESc3RhdGljS2V5X2V4dHJhRmVlAAIPc3RhdGljX2V4dHJhRmVlARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgACFHN0YXRpY19mZWVBZ2dyZWdhdG9yASBzdGF0aWNLZXlfdHVydGxlSW5jdWJhdG9yQWRkcmVzcwACHXN0YXRpY190dXJ0bGVJbmN1YmF0b3JBZGRyZXNzAR5zdGF0aWNLZXlfdHVydGxlQnJlZWRlckFkZHJlc3MAAhtzdGF0aWNfdHVydGxlQnJlZWRlckFkZHJlc3MBFnN0YXRpY0tleV9zcGljZUFzc2V0SWQAAhNzdGF0aWNfc3BpY2VBc3NldElkARxzdGF0aWNLZXlfcmVmQ29udHJhY3RBZGRyZXNzAAIZc3RhdGljX3JlZkNvbnRyYWN0QWRkcmVzcwEYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAIVc3RhdGljX2NvdXBvbnNBZGRyZXNzAR5zdGF0aWNLZXlfdHVydGxlU3Rha2luZ0FkZHJlc3MAAhtzdGF0aWNfdHVydGxlU3Rha2luZ0FkZHJlc3MBHHN0YXRpY0tleV9kdWNrU3Rha2luZ0FkZHJlc3MAAhhzdGF0aWNfZmFybWluZ0FkZHJlc3NOZXcBHnN0YXRpY0tleV9kdWNrSW5jdWJhdG9yQWRkcmVzcwACF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAITc3RhdGljX2l0ZW1zQWRkcmVzcwEhc3RhdGljS2V5X3R1cnRsZVNwaWNlUmViaXJ0aFByaWNlAAIec3RhdGljX3R1cnRsZVNwaWNlUmViaXJ0aFByaWNlASFzdGF0aWNLZXlfdHVydGxlV2F2ZXNSZWJpcnRoUHJpY2UAAh5zdGF0aWNfdHVydGxlV2F2ZXNSZWJpcnRoUHJpY2UBH3N0YXRpY0tleV90dXJ0bGVFZ2dSZWJpcnRoUHJpY2UAAhxzdGF0aWNfdHVydGxlRWdnUmViaXJ0aFByaWNlAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwEJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwABDWdldEVnZ0Fzc2V0SWQACQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAQ5nZXRCdXJuQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY0tleV9idXJuQWRkcmVzcwABEGdldEZlZUFnZ3JlZ2F0b3IACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgABF2dldFR1cnRsZUJyZWVkZXJBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X3R1cnRsZUJyZWVkZXJBZGRyZXNzAAEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBIHN0YXRpY0tleV90dXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAEPZ2V0U3BpY2VBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFnN0YXRpY0tleV9zcGljZUFzc2V0SWQAARVnZXRSZWZDb250cmFjdEFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARxzdGF0aWNLZXlfcmVmQ29udHJhY3RBZGRyZXNzAAERZ2V0Q291cG9uc0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAARdnZXRUdXJ0bGVTdGFraW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV90dXJ0bGVTdGFraW5nQWRkcmVzcwABFWdldER1Y2tTdGFraW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHHN0YXRpY0tleV9kdWNrU3Rha2luZ0FkZHJlc3MAARdnZXREdWNrSW5jdWJhdG9yQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV9kdWNrSW5jdWJhdG9yQWRkcmVzcwABD2dldEl0ZW1zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIJAAIBAhpUUjogVmFsdWUgbm90IGZvdW5kIGluIHNjIQALc3BpY2VBbW91bnQJARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBIXN0YXRpY0tleV90dXJ0bGVTcGljZVJlYmlydGhQcmljZQAACWVnZ0Ftb3VudAkBFXRyeUdldEludGVnZXJFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEfc3RhdGljS2V5X3R1cnRsZUVnZ1JlYmlydGhQcmljZQAAC3dhdmVzQW1vdW50CQEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgkBCWdldE9yYWNsZQAJASFzdGF0aWNLZXlfdHVydGxlV2F2ZXNSZWJpcnRoUHJpY2UAABBkZWxheUZvckhhdGNoaW5nAAIBD2NoZWNrUmVhbFR1cnRsZQEHYXNzZXRJZAMDCQAAAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJARdnZXRUdXJ0bGVCcmVlZGVyQWRkcmVzcwAGCQAAAggJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAZpc3N1ZXIJARlnZXRUdXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAYJAAIBAg1ub3QgdmFsaWQgTkZUARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQdwYXltZW50AwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhlSQ0FQOiBQbGVhc2UgYXR0YWNoIHdhdmVzBAlmZWVBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQlnZXRPcmFjbGUACQESc3RhdGljS2V5X2V4dHJhRmVlAAMJAQIhPQIIBQdwYXltZW50BmFtb3VudAUJZmVlQW1vdW50CQACAQkArAICCQCsAgICHFJDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAKQDAQUJZmVlQW1vdW50AhMgYW1vdW50IG9mIHdhdmVsZXRzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARBnZXRGZWVBZ2dyZWdhdG9yAAUJZmVlQW1vdW50BQR1bml0BQNuaWwBD2dldFJhbmRvbU51bWJlcgQHb3B0aW9ucwR0eElkFGhhdGNoaW5nRmluaXNoSGVpZ2h0Bm9mZnNldAQPcmFuZG9tU2VlZEJsb2NrCQEFdmFsdWUBCQDtBwEJAGUCBRRoYXRjaGluZ0ZpbmlzaEhlaWdodAABBApyYW5kb21IYXNoCQD3AwEJAMsBAgUEdHhJZAkBBXZhbHVlAQgFD3JhbmRvbVNlZWRCbG9jawN2cmYJAGoCCQCyCQIFCnJhbmRvbUhhc2gJAGgCBQZvZmZzZXQACAUHb3B0aW9ucwENdHJ5R2V0Qm9vbGVhbgEDa2V5BAckbWF0Y2gwCQCgCAEFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEMZ2V0UmFuZG9tV2luAgJ0eAxmaW5pc2hIZWlnaHQEDmphY2twb3RFbmFibGVkCQENdHJ5R2V0Qm9vbGVhbgECD0pBQ0tQT1RfRU5BQkxFRAQNamFja3BvdFJhbmRvbQkBD2dldFJhbmRvbU51bWJlcgQArAIFAnR4BQxmaW5pc2hIZWlnaHQAAQMDCQAAAgUNamFja3BvdFJhbmRvbQABBQ5qYWNrcG90RW5hYmxlZAcJAJQKAgUNamFja3BvdFJhbmRvbQIHamFja3BvdAQBbgkBD2dldFJhbmRvbU51bWJlcgQA6AcFAnR4BQxmaW5pc2hIZWlnaHQAAAQGcmVzdWx0AwkAZgIAKAUBbgIUaXRlbSFBUlQtRklSRV9TSElFTEQDCQBmAgBQBQFuAhJpdGVtIUFSVC1GSVJFX1RBSUwDCQBmAgBkBQFuAhFpdGVtIUFSVC1GUkVFR0VORQMJAGYCAJYBBQFuAgdiZWFjaF9SAwkAZgIAyAEFAW4CB2JlYWNoX1MDCQBmAgD6AQUBbgIHYmVhY2hfRwMJAGYCAKwCBQFuAgdiZWFjaF9EAwkAZgIA/AIFAW4CE2l0ZW0hQVJULU1VVEFSSVVNLUcDCQBmAgCQAwUBbgIOaXRlbSFBUlQtRkVFRDUDCQBmAgDYBAUBbgIPaXRlbSFBUlQtRkVFRDEwAwkAZgIA7AQFAW4CD2l0ZW0hQVJULUZFRUQxNQMJAGYCAIAFBQFuAg9pdGVtIUFSVC1GRUVEMjADCQBmAgCUBQUBbgIPaXRlbSFBUlQtRkVFRDI1AwkAZgIAqAUFAW4CD2l0ZW0hQVJULUZFRUQ1MAMJAGYCAPgFBQFuAhBpdGVtIUFSVC1GRUVEMTAwAwkAZgIAjAYFAW4CB3BlcmNoX0cDCQBmAgCgBgUBbgIHcGVyY2hfWQMJAGYCALQGBQFuAgdwZXJjaF9SAwkAZgIAyAYFAW4CB3BlcmNoX0IDCQBmAgDwBgUBbgITaXRlbSFBUlQtTVVUQVJJVU0tRAMJAGYCAKwHBQFuAglpbmN1YmF0b3ICDmR1Y2tfaW5jdWJhdG9yCQCUCgIFAW4FBnJlc3VsdAEVZmluaXNoUmViaXJ0aEludGVybmFsBAZpbml0VHgHYWRkcmVzcxFhZGRpdGlvbmFsUGF5bWVudAZkb3VibGUEC2ZpbmlzaEJsb2NrCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCDF9maW5pc2hCbG9jawQGc3RhdHVzCQEMdHJ5R2V0U3RyaW5nAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3N0YXR1cwQMdmFsaWRQYXltZW50CQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEFEWFkZGl0aW9uYWxQYXltZW50AwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50BAxyZWNvcmRBY3Rpb24JAPwHBAkBEWdldENvdXBvbnNBZGRyZXNzAAIMcmVjb3JkQWN0aW9uCQDMCAICDVJFQklSVEhUVVJUTEUFA25pbAUDbmlsAwkAAAIFDHJlY29yZEFjdGlvbgUMcmVjb3JkQWN0aW9uAwkBAiE9AgUGc3RhdHVzAgRvcGVuCQACAQIfcmViaXJ0aCBpcyBmaW5pc2hlZCBvciBub3Qgb3BlbgMJAGYCBQtmaW5pc2hCbG9jawUGaGVpZ2h0CQACAQIeeW91IGNhbm5vdCBmaW5pc2ggcmViaXJ0aCwgeWV0BAZvdXRwdXQJAQxnZXRSYW5kb21XaW4CCQDZBAEFBmluaXRUeAULZmluaXNoQmxvY2sEA3dpbggFBm91dHB1dAJfMgQGcmFuZG9tCAUGb3V0cHV0Al8xBAR0eElkBQZpbml0VHgEBnJlc3VsdAMJAQIhPQIJALMJAgUDd2luAgVwZXJjaAUEdW5pdAQFY29sb3IJALICAgUDd2luAAEEBGNhbGwDCQEBIQEFBmRvdWJsZQQFZmlyc3QJAPwHBAkBFWdldER1Y2tTdGFraW5nQWRkcmVzcwACDGFkZEZyZWVQZXJjaAkAzAgCBQdhZGRyZXNzCQDMCAIFBWNvbG9yCQDMCAIAAQUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWZpcnN0CQD8BwQJARVnZXREdWNrU3Rha2luZ0FkZHJlc3MAAgxhZGRGcmVlUGVyY2gJAMwIAgUHYWRkcmVzcwkAzAgCBQVjb2xvcgkAzAgCAAIFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIFX3dpbjEFA3dpbgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBGNhbGwFBGNhbGwFBGNhbGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQECIT0CCQCzCQIFA3dpbgIFYmVhY2gFBHVuaXQEBWNvbG9yCQCyAgIFA3dpbgABBARjYWxsAwkBASEBBQZkb3VibGUEBWZpcnN0CQD8BwQJARdnZXRUdXJ0bGVTdGFraW5nQWRkcmVzcwACDGFkZEZyZWVCZWFjaAkAzAgCBQdhZGRyZXNzCQDMCAIFBWNvbG9yBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFZmlyc3QJAPwHBAkBF2dldFR1cnRsZVN0YWtpbmdBZGRyZXNzAAIMYWRkRnJlZUJlYWNoCQDMCAIFB2FkZHJlc3MJAMwIAgUFY29sb3IFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAQGc2Vjb25kCQD8BwQJARdnZXRUdXJ0bGVTdGFraW5nQWRkcmVzcwACDGFkZEZyZWVCZWFjaAkAzAgCBQdhZGRyZXNzCQDMCAIFBWNvbG9yBQNuaWwFA25pbAMJAAACBQZzZWNvbmQFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xBQN3aW4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRjYWxsBQRjYWxsBQRjYWxsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFA3dpbgIHamFja3BvdAQEY2FsbAkA/AcECQEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwACDGlzc3VlSmFja3BvdAkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQJAMwIAgkBC3ZhbHVlT3JFbHNlAgkAoggBAgxKQUNLUE9UX05BTUUCCFdXV1dYTUFTBQNuaWwFA25pbAMJAAACBQRjYWxsBQRjYWxsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBGNhbGwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQN3aW4CCWluY3ViYXRvcgQEY2FsbAMJAQEhAQUGZG91YmxlBAVmaXJzdAkA/AcECQEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwACD2lzc3VlRnJlZVR1cnRsZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVmaXJzdAkA/AcECQEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwACD2lzc3VlRnJlZVR1cnRsZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBWZpcnN0BQVmaXJzdAQGc2Vjb25kCQD8BwQJARdnZXREdWNrSW5jdWJhdG9yQWRkcmVzcwACGWlzc3VlRnJlZUR1Y2tEZWZpbmVkR2VuZXMJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkCQDMCAICCFpaWlpaWlpaBQNuaWwFA25pbAMJAAACBQZzZWNvbmQFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmVzdWx0CQEIYXNTdHJpbmcBBQVmaXJzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AghfcmVzdWx0MQkBCGFzU3RyaW5nAQUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCBV93aW4xAg5kdWNrX2luY3ViYXRvcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBGNhbGwFBGNhbGwFBGNhbGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDd2luAg5kdWNrX2luY3ViYXRvcgQEY2FsbAMJAQEhAQUGZG91YmxlBAVmaXJzdAkA/AcECQEXZ2V0RHVja0luY3ViYXRvckFkZHJlc3MAAhlpc3N1ZUZyZWVEdWNrRGVmaW5lZEdlbmVzCQDMCAIFB2FkZHJlc3MJAMwIAgUEdHhJZAkAzAgCAghaWlpaWlpaWgUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWZpcnN0CQD8BwQJARdnZXREdWNrSW5jdWJhdG9yQWRkcmVzcwACGWlzc3VlRnJlZUR1Y2tEZWZpbmVkR2VuZXMJAMwIAgUHYWRkcmVzcwkAzAgCBQR0eElkCQDMCAICCFpaWlpaWlpaBQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QEBnNlY29uZAkA/AcECQEZZ2V0VHVydGxlSW5jdWJhdG9yQWRkcmVzcwACD2lzc3VlRnJlZVR1cnRsZQkAzAgCBQdhZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDbmlsAwkAAAIFBnNlY29uZAUGc2Vjb25kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19yZXN1bHQJAQhhc1N0cmluZwEFBWZpcnN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCCF9yZXN1bHQxCQEIYXNTdHJpbmcBBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIFX3dpbjECCWluY3ViYXRvcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBGNhbGwFBGNhbGwFBGNhbGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQECIT0CCQCzCQIFA3dpbgIEaXRlbQUEdW5pdAQIaXRlbU5hbWUJAJEDAgkAtQkCBQN3aW4CASEAAQQEY2FsbAMJAQEhAQUGZG91YmxlBAVmaXJzdAkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAISaXNzdWVBcnRlZmFjdEluZGV4CQDMCAIFCGl0ZW1OYW1lCQDMCAIFB2FkZHJlc3MJAMwIAgAABQNuaWwFA25pbAMJAAACBQVmaXJzdAUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFZmlyc3QJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACEmlzc3VlQXJ0ZWZhY3RJbmRleAkAzAgCBQhpdGVtTmFtZQkAzAgCBQdhZGRyZXNzCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUFZmlyc3QFBWZpcnN0BAZzZWNvbmQJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACEmlzc3VlQXJ0ZWZhY3RJbmRleAkAzAgCBQhpdGVtTmFtZQkAzAgCBQdhZGRyZXNzCQDMCAIAAQUDbmlsBQNuaWwDCQAAAgUGc2Vjb25kBQZzZWNvbmQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3Jlc3VsdAkBCGFzU3RyaW5nAQUFZmlyc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX3Jlc3VsdDEJAQhhc1N0cmluZwEFBnNlY29uZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgVfd2luMQUDd2luBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEY2FsbAUEY2FsbAUEY2FsbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECM1JGQjogU29tZSBlcnJvciBvY2N1cmVkLCBwbGVhc2UgY29udGFjdCB0aGUgYWRtaW5zIQkAzggCCQDOCAIFBnJlc3VsdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgRfd2luBQN3aW4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIHX3N0YXR1cwIGZmluaXNoCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAghfaW5pdFR4XwUGaW5pdFR4AgdfcmFuZG9tBQZyYW5kb20FA25pbAUMdmFsaWRQYXltZW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAFpAQ9jb25maWd1cmVPcmFjbGUBBm9yYWNsZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECD1JDVTogYWRtaW4gb25seQkAzAgCCQELU3RyaW5nRW50cnkCAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwUGb3JhY2xlBQNuaWwBaQELaW5pdFJlYmlydGgBDnJlZmVyZXJBZGRyZXNzBAlwbXRUdXJ0bGUJAJEDAggFAWkIcGF5bWVudHMAAAQIcG10V2F2ZXMJAJEDAggFAWkIcGF5bWVudHMAAQQIcG10U3BpY2UJAJEDAggFAWkIcGF5bWVudHMAAgQHYXNzZXRJZAkBBXZhbHVlAQgFCXBtdFR1cnRsZQdhc3NldElkBAZpbml0VHgJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUJcG10VHVydGxlBmFtb3VudAABCQACAQITTkZUIGlzIG5vdCBhdHRhY2hlZAMDCQECIT0CCAUIcG10V2F2ZXMGYW1vdW50BQt3YXZlc0Ftb3VudAYJAQIhPQIIBQhwbXRXYXZlcwdhc3NldElkBQR1bml0CQACAQImV2F2ZXNwYXltZW50IGlzIG5vdCBhdHRhY2hlZCBvciB3cm9uZyEDAwkBAiE9AggFCHBtdFNwaWNlBmFtb3VudAULc3BpY2VBbW91bnQGCQECIT0CCAUIcG10U3BpY2UHYXNzZXRJZAkBD2dldFNwaWNlQXNzZXRJZAAJAAIBAiZTcGljZVBheW1lbnQgaXMgbm90IGF0dGFjaGVkIG9yIHdyb25nIQQTYW1vdW50UGFpZEJ5Q291cG9ucwkBBWFzSW50AQkA/AcECQERZ2V0Q291cG9uc0FkZHJlc3MAAgp1c2VDb3Vwb25zCQDMCAIFCWVnZ0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUTYW1vdW50UGFpZEJ5Q291cG9ucwUTYW1vdW50UGFpZEJ5Q291cG9ucwQJbGVmdFRvUGF5CQBlAgUJZWdnQW1vdW50BRNhbW91bnRQYWlkQnlDb3Vwb25zBAV0b3B1cAkA/AcECQEXZ2V0VHVydGxlU3Rha2luZ0FkZHJlc3MAAgt0b3BVcFJld2FyZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEPZ2V0U3BpY2VBc3NldElkAAgFCHBtdFNwaWNlBmFtb3VudAUDbmlsAwkAAAIFBXRvcHVwBQV0b3B1cAQHcGF5bWVudAMJAQIhPQIFCWxlZnRUb1BheQAABAZwbXRFZ2cJAJEDAggFAWkIcGF5bWVudHMAAwQKZmVlUGF5bWVudAkBBXZhbHVlAQUGcG10RWdnAwkBAiE9AggFCmZlZVBheW1lbnQHYXNzZXRJZAkBDWdldEVnZ0Fzc2V0SWQACQACAQIkWW91IG5lZWQgdG8gYXR0YWNoIEVHRyB0b2tlbnMgYXMgZmVlAwkBAiE9AggFCmZlZVBheW1lbnQGYW1vdW50BQlsZWZ0VG9QYXkJAAIBCQCsAgICQFlvdSBuZWVkIHRvIGF0dGFjaCB0aGUgZm9sbG93aW5nIGFtb3VudCBvZiBFR0cgdG9rZW5zIGFzIGZlZTogMC4JAKQDAQUJbGVmdFRvUGF5BBVyZWZlcmVyUmV3YXJkRm9yUGVyY2gJAGsDBQlsZWZ0VG9QYXkABQBkBAdyZWZDYWxsCQEJYXNCb29sZWFuAQkA/AcECQEVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAIKcmVmUGF5bWVudAkAzAgCBQ5yZWZlcmVyQWRkcmVzcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0RWdnQXNzZXRJZAAFFXJlZmVyZXJSZXdhcmRGb3JQZXJjaAUDbmlsAwkAAAIFB3JlZkNhbGwFB3JlZkNhbGwEBnRvQnVybgMFB3JlZkNhbGwJAGUCBQlsZWZ0VG9QYXkFFXJlZmVyZXJSZXdhcmRGb3JQZXJjaAUJbGVmdFRvUGF5BAhidXJuQ2FsbAkA/AcECQEOZ2V0QnVybkFkZHJlc3MAAhRidXJuQXR0YWNoZWRQYXltZW50cwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0RWdnQXNzZXRJZAAFBnRvQnVybgUDbmlsAwkAAAIFCGJ1cm5DYWxsBQhidXJuQ2FsbAUJbGVmdFRvUGF5CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAADCQAAAgUHcGF5bWVudAUHcGF5bWVudAQKcmVhbFR1cnRsZQkBD2NoZWNrUmVhbFR1cnRsZQEFB2Fzc2V0SWQDCQAAAgUKcmVhbFR1cnRsZQUKcmVhbFR1cnRsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIMX2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BRBkZWxheUZvckhhdGNoaW5nCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCCF9pbml0VHhfBQZpbml0VHgCB19zdGF0dXMCBG9wZW4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIIX2luaXRUeF8FBmluaXRUeAIIX2Fzc2V0SWQJANgEAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEQZ2V0RmVlQWdncmVnYXRvcgAIBQhwbXRXYXZlcwZhbW91bnQFBHVuaXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1maW5pc2hSZWJpcnRoAQZpbml0VHgJARVmaW5pc2hSZWJpcnRoSW50ZXJuYWwEBQZpbml0VHgJAKUIAQgFAWkGY2FsbGVyCQCRAwIIBQFpCHBheW1lbnRzAAAHAWkBE2ZpbmlzaFJlYmlydGhEb3VibGUBBmluaXRUeAMJAQEhAQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAIJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAABBwkAAgECD0ludmFsaWQgcGF5bWVudAQHYXNzZXRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtib29zdGVyVHlwZQkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQtib29zdGVyVHlwZQULYm9vc3RlclR5cGUDCQAAAgULYm9vc3RlclR5cGUCDkFSVC1HSUZUX0RPVUJMCQDOCAIJAMwIAgkBBEJ1cm4CBQdhc3NldElkAAEFA25pbAkBFWZpbmlzaFJlYmlydGhJbnRlcm5hbAQFBmluaXRUeAkApQgBCAUBaQZjYWxsZXIJAJEDAggFAWkIcGF5bWVudHMAAQYJAAIBAi1FcnJvciEgV3JvbmcgaXRlbSBhdHRhY2hlZCB0byBkb3VibGUgcmV3YXJkcyEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkAAwkBCWlzVGVzdEVudgAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkECWZpcnN0VXNlcgEgURzk/Wb/EmnS8VoUnzuy4vQ7f8HLaCeiNF5sONdX3W0ECnNlY29uZFVzZXIBIFxyDkuu8SFPZuYZRfpqorHtsTYpWV8ZzMyw4U1BiGp9BAl0aGlyZFVzZXIBIKCvkeUteUNhYTISrY65+hhZUZ0tU0k2w9Cj96hgGTtOBA9maXJzdFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCWZpcnN0VXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJZmlyc3RVc2VyAAEAAAQQc2Vjb25kVXNlclNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCnNlY29uZFVzZXIAAQAABA90aGlyZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCXRoaXJkVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJdGhpcmRVc2VyAAEAAAQPc2lnbmF0dXJlc0NvdW50CQBkAgkAZAIFD2ZpcnN0VXNlclNpZ25lZAUQc2Vjb25kVXNlclNpZ25lZAUPdGhpcmRVc2VyU2lnbmVkBAckbWF0Y2gwBQJ0eAkAZwIFD3NpZ25hdHVyZXNDb3VudAAC/MrZ+g==", "height": 3316717, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func isTestEnv () = {
5+ let testenv = match getBoolean(this, "TESTENV") {
6+ case x: Boolean =>
7+ x
8+ case _ =>
9+ false
10+ }
11+ testenv
12+ }
13+
14+
15+func tryGetStringExternal (address,key) = match getString(address, key) {
16+ case a: String =>
17+ a
18+ case _ =>
19+ ""
20+}
21+
22+
23+func tryGetInteger (key) = match getInteger(this, key) {
24+ case b: Int =>
25+ b
26+ case _ =>
27+ 0
28+}
29+
30+
31+func tryGetString (key) = tryGetStringExternal(this, key)
32+
33+
34+func asInt (value) = match value {
35+ case int: Int =>
36+ int
37+ case string: String =>
38+ throw(("RAI: wrong type, expected: Int, but got: " + string))
39+ case _ =>
40+ throw("RAI: wrong type, expected: Int")
41+}
42+
43+
44+func asBoolean (value) = match value {
45+ case boolean: Boolean =>
46+ boolean
47+ case _ =>
48+ throw("FAB: wrong type, expected: Boolean")
49+}
50+
51+
52+func asString (value) = match value {
53+ case s: String =>
54+ s
55+ case s: Int =>
56+ throw("wrong type, expected: String, got: Int")
57+ case s: Unit =>
58+ throw("wrong type, expected: String, got: Unit")
59+ case _ =>
60+ throw("wrong type, expected: String")
61+}
62+
63+
64+func staticKey_oracleAddress () = "static_oracleAddress"
65+
66+
67+func staticKey_eggAssetId () = "static_eggAssetId"
68+
69+
70+func staticKey_burnAddress () = "static_burnAddress"
71+
72+
73+func staticKey_extraFee () = "static_extraFee"
74+
75+
76+func staticKey_feeAggregator () = "static_feeAggregator"
77+
78+
79+func staticKey_turtleIncubatorAddress () = "static_turtleIncubatorAddress"
80+
81+
82+func staticKey_turtleBreederAddress () = "static_turtleBreederAddress"
83+
84+
85+func staticKey_spiceAssetId () = "static_spiceAssetId"
86+
87+
88+func staticKey_refContractAddress () = "static_refContractAddress"
89+
90+
91+func staticKey_couponsAddress () = "static_couponsAddress"
92+
93+
94+func staticKey_turtleStakingAddress () = "static_turtleStakingAddress"
95+
96+
97+func staticKey_duckStakingAddress () = "static_farmingAddressNew"
98+
99+
100+func staticKey_duckIncubatorAddress () = "static_incubatorAddress"
101+
102+
103+func staticKey_itemsAddress () = "static_itemsAddress"
104+
105+
106+func staticKey_turtleSpiceRebirthPrice () = "static_turtleSpiceRebirthPrice"
107+
108+
109+func staticKey_turtleWavesRebirthPrice () = "static_turtleWavesRebirthPrice"
110+
111+
112+func staticKey_turtleEggRebirthPrice () = "static_turtleEggRebirthPrice"
113+
114+
115+func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
116+
117+
118+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
119+
120+
121+func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
122+
123+
124+func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
125+
126+
127+func getTurtleBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleBreederAddress())))
128+
129+
130+func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleIncubatorAddress())))
131+
132+
133+func getSpiceAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_spiceAssetId()))
134+
135+
136+func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
137+
138+
139+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
140+
141+
142+func getTurtleStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleStakingAddress())))
143+
144+
145+func getDuckStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckStakingAddress())))
146+
147+
148+func getDuckIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_duckIncubatorAddress())))
149+
150+
151+func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
152+
153+
154+func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
155+ case b: Int =>
156+ b
157+ case _ =>
158+ throw("TR: Value not found in sc!")
159+}
160+
161+
162+let spiceAmount = tryGetIntegerExternal(getOracle(), staticKey_turtleSpiceRebirthPrice())
163+
164+let eggAmount = tryGetIntegerExternal(getOracle(), staticKey_turtleEggRebirthPrice())
165+
166+let wavesAmount = tryGetIntegerExternal(getOracle(), staticKey_turtleWavesRebirthPrice())
167+
168+let delayForHatching = 2
169+
170+func checkRealTurtle (assetId) = if (if ((value(assetInfo(assetId)).issuer == getTurtleBreederAddress()))
171+ then true
172+ else (value(assetInfo(assetId)).issuer == getTurtleIncubatorAddress()))
173+ then true
174+ else throw("not valid NFT")
175+
176+
177+func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
178+ then throw("RCAP: Please attach waves")
179+ else {
180+ let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
181+ if ((payment.amount != feeAmount))
182+ then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
183+ else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
184+ }
185+
186+
187+func getRandomNumber (options,txId,hatchingFinishHeight,offset) = {
188+ let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
189+ let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
190+ (toInt(randomHash, (offset * 8)) % options)
191+ }
192+
193+
194+func tryGetBoolean (key) = match getBoolean(key) {
195+ case b: Boolean =>
196+ b
197+ case _ =>
198+ false
199+}
200+
201+
202+func getRandomWin (tx,finishHeight) = {
203+ let jackpotEnabled = tryGetBoolean("JACKPOT_ENABLED")
204+ let jackpotRandom = getRandomNumber(300, tx, finishHeight, 1)
205+ if (if ((jackpotRandom == 1))
206+ then jackpotEnabled
207+ else false)
208+ then $Tuple2(jackpotRandom, "jackpot")
209+ else {
210+ let n = getRandomNumber(1000, tx, finishHeight, 0)
211+ let result = if ((40 > n))
212+ then "item!ART-FIRE_SHIELD"
213+ else if ((80 > n))
214+ then "item!ART-FIRE_TAIL"
215+ else if ((100 > n))
216+ then "item!ART-FREEGENE"
217+ else if ((150 > n))
218+ then "beach_R"
219+ else if ((200 > n))
220+ then "beach_S"
221+ else if ((250 > n))
222+ then "beach_G"
223+ else if ((300 > n))
224+ then "beach_D"
225+ else if ((380 > n))
226+ then "item!ART-MUTARIUM-G"
227+ else if ((400 > n))
228+ then "item!ART-FEED5"
229+ else if ((600 > n))
230+ then "item!ART-FEED10"
231+ else if ((620 > n))
232+ then "item!ART-FEED15"
233+ else if ((640 > n))
234+ then "item!ART-FEED20"
235+ else if ((660 > n))
236+ then "item!ART-FEED25"
237+ else if ((680 > n))
238+ then "item!ART-FEED50"
239+ else if ((760 > n))
240+ then "item!ART-FEED100"
241+ else if ((780 > n))
242+ then "perch_G"
243+ else if ((800 > n))
244+ then "perch_Y"
245+ else if ((820 > n))
246+ then "perch_R"
247+ else if ((840 > n))
248+ then "perch_B"
249+ else if ((880 > n))
250+ then "item!ART-MUTARIUM-D"
251+ else if ((940 > n))
252+ then "incubator"
253+ else "duck_incubator"
254+ $Tuple2(n, result)
255+ }
256+ }
257+
258+
259+func finishRebirthInternal (initTx,address,additionalPayment,double) = {
260+ let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
261+ let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
262+ let validPayment = checkAdditionalPayment(additionalPayment)
263+ if ((validPayment == validPayment))
264+ then {
265+ let recordAction = invoke(getCouponsAddress(), "recordAction", ["REBIRTHTURTLE"], nil)
266+ if ((recordAction == recordAction))
267+ then if ((status != "open"))
268+ then throw("rebirth is finished or not open")
269+ else if ((finishBlock > height))
270+ then throw("you cannot finish rebirth, yet")
271+ else {
272+ let output = getRandomWin(fromBase58String(initTx), finishBlock)
273+ let win = output._2
274+ let random = output._1
275+ let txId = initTx
276+ let result = if ((indexOf(win, "perch") != unit))
277+ then {
278+ let color = takeRight(win, 1)
279+ let call = if (!(double))
280+ then {
281+ let first = invoke(getDuckStakingAddress(), "addFreePerch", [address, color, 1], nil)
282+ if ((first == first))
283+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
284+ else throw("Strict value is not equal to itself.")
285+ }
286+ else {
287+ let first = invoke(getDuckStakingAddress(), "addFreePerch", [address, color, 2], nil)
288+ if ((first == first))
289+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
290+ else throw("Strict value is not equal to itself.")
291+ }
292+ if ((call == call))
293+ then call
294+ else throw("Strict value is not equal to itself.")
295+ }
296+ else if ((indexOf(win, "beach") != unit))
297+ then {
298+ let color = takeRight(win, 1)
299+ let call = if (!(double))
300+ then {
301+ let first = invoke(getTurtleStakingAddress(), "addFreeBeach", [address, color], nil)
302+ if ((first == first))
303+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
304+ else throw("Strict value is not equal to itself.")
305+ }
306+ else {
307+ let first = invoke(getTurtleStakingAddress(), "addFreeBeach", [address, color], nil)
308+ if ((first == first))
309+ then {
310+ let second = invoke(getTurtleStakingAddress(), "addFreeBeach", [address, color], nil)
311+ if ((second == second))
312+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
313+ else throw("Strict value is not equal to itself.")
314+ }
315+ else throw("Strict value is not equal to itself.")
316+ }
317+ if ((call == call))
318+ then call
319+ else throw("Strict value is not equal to itself.")
320+ }
321+ else if ((win == "jackpot"))
322+ then {
323+ let call = invoke(getTurtleIncubatorAddress(), "issueJackpot", [address, txId, valueOrElse(getString("JACKPOT_NAME"), "WWWWXMAS")], nil)
324+ if ((call == call))
325+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
326+ else throw("Strict value is not equal to itself.")
327+ }
328+ else if ((win == "incubator"))
329+ then {
330+ let call = if (!(double))
331+ then {
332+ let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
333+ if ((first == first))
334+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
335+ else throw("Strict value is not equal to itself.")
336+ }
337+ else {
338+ let first = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
339+ if ((first == first))
340+ then {
341+ let second = invoke(getDuckIncubatorAddress(), "issueFreeDuckDefinedGenes", [address, txId, "ZZZZZZZZ"], nil)
342+ if ((second == second))
343+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "duck_incubator")]
344+ else throw("Strict value is not equal to itself.")
345+ }
346+ else throw("Strict value is not equal to itself.")
347+ }
348+ if ((call == call))
349+ then call
350+ else throw("Strict value is not equal to itself.")
351+ }
352+ else if ((win == "duck_incubator"))
353+ then {
354+ let call = if (!(double))
355+ then {
356+ let first = invoke(getDuckIncubatorAddress(), "issueFreeDuckDefinedGenes", [address, txId, "ZZZZZZZZ"], nil)
357+ if ((first == first))
358+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
359+ else throw("Strict value is not equal to itself.")
360+ }
361+ else {
362+ let first = invoke(getDuckIncubatorAddress(), "issueFreeDuckDefinedGenes", [address, txId, "ZZZZZZZZ"], nil)
363+ if ((first == first))
364+ then {
365+ let second = invoke(getTurtleIncubatorAddress(), "issueFreeTurtle", [address, txId], nil)
366+ if ((second == second))
367+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), "incubator")]
368+ else throw("Strict value is not equal to itself.")
369+ }
370+ else throw("Strict value is not equal to itself.")
371+ }
372+ if ((call == call))
373+ then call
374+ else throw("Strict value is not equal to itself.")
375+ }
376+ else if ((indexOf(win, "item") != unit))
377+ then {
378+ let itemName = split(win, "!")[1]
379+ let call = if (!(double))
380+ then {
381+ let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
382+ if ((first == first))
383+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first))]
384+ else throw("Strict value is not equal to itself.")
385+ }
386+ else {
387+ let first = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 0], nil)
388+ if ((first == first))
389+ then {
390+ let second = invoke(getItemsAddress(), "issueArtefactIndex", [itemName, address, 1], nil)
391+ if ((second == second))
392+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(first)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result1"), asString(second)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win1"), win)]
393+ else throw("Strict value is not equal to itself.")
394+ }
395+ else throw("Strict value is not equal to itself.")
396+ }
397+ if ((call == call))
398+ then call
399+ else throw("Strict value is not equal to itself.")
400+ }
401+ else throw("RFB: Some error occured, please contact the admins!")
402+ ((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_random"), random)]) ++ validPayment)
403+ }
404+ else throw("Strict value is not equal to itself.")
405+ }
406+ else throw("Strict value is not equal to itself.")
407+ }
408+
409+
410+@Callable(i)
411+func configureOracle (oracle) = if ((i.caller != this))
412+ then throw("RCU: admin only")
413+ else [StringEntry("static_oracleAddress", oracle)]
414+
415+
416+
417+@Callable(i)
418+func initRebirth (refererAddress) = {
419+ let pmtTurtle = i.payments[0]
420+ let pmtWaves = i.payments[1]
421+ let pmtSpice = i.payments[2]
422+ let assetId = value(pmtTurtle.assetId)
423+ let initTx = toBase58String(i.transactionId)
424+ let address = toString(i.caller)
425+ if ((pmtTurtle.amount != 1))
426+ then throw("NFT is not attached")
427+ else if (if ((pmtWaves.amount != wavesAmount))
428+ then true
429+ else (pmtWaves.assetId != unit))
430+ then throw("Wavespayment is not attached or wrong!")
431+ else if (if ((pmtSpice.amount != spiceAmount))
432+ then true
433+ else (pmtSpice.assetId != getSpiceAssetId()))
434+ then throw("SpicePayment is not attached or wrong!")
435+ else {
436+ let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [eggAmount], nil))
437+ if ((amountPaidByCoupons == amountPaidByCoupons))
438+ then {
439+ let leftToPay = (eggAmount - amountPaidByCoupons)
440+ let topup = invoke(getTurtleStakingAddress(), "topUpReward", nil, [AttachedPayment(getSpiceAssetId(), pmtSpice.amount)])
441+ if ((topup == topup))
442+ then {
443+ let payment = if ((leftToPay != 0))
444+ then {
445+ let pmtEgg = i.payments[3]
446+ let feePayment = value(pmtEgg)
447+ if ((feePayment.assetId != getEggAssetId()))
448+ then throw("You need to attach EGG tokens as fee")
449+ else if ((feePayment.amount != leftToPay))
450+ then throw(("You need to attach the following amount of EGG tokens as fee: 0." + toString(leftToPay)))
451+ else {
452+ let refererRewardForPerch = fraction(leftToPay, 5, 100)
453+ let refCall = asBoolean(invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]))
454+ if ((refCall == refCall))
455+ then {
456+ let toBurn = if (refCall)
457+ then (leftToPay - refererRewardForPerch)
458+ else leftToPay
459+ let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)])
460+ if ((burnCall == burnCall))
461+ then leftToPay
462+ else throw("Strict value is not equal to itself.")
463+ }
464+ else throw("Strict value is not equal to itself.")
465+ }
466+ }
467+ else 0
468+ if ((payment == payment))
469+ then {
470+ let realTurtle = checkRealTurtle(assetId)
471+ if ((realTurtle == realTurtle))
472+ then [IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"), (height + delayForHatching)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "open"), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetId"), toBase58String(assetId)), ScriptTransfer(getFeeAggregator(), pmtWaves.amount, unit)]
473+ else throw("Strict value is not equal to itself.")
474+ }
475+ else throw("Strict value is not equal to itself.")
476+ }
477+ else throw("Strict value is not equal to itself.")
478+ }
479+ else throw("Strict value is not equal to itself.")
480+ }
481+ }
482+
483+
484+
485+@Callable(i)
486+func finishRebirth (initTx) = finishRebirthInternal(initTx, toString(i.caller), i.payments[0], false)
487+
488+
489+
490+@Callable(i)
491+func finishRebirthDouble (initTx) = if (!(if ((size(i.payments) == 2))
492+ then (i.payments[0].amount == 1)
493+ else false))
494+ then throw("Invalid payment")
495+ else {
496+ let assetId = value(i.payments[0].assetId)
497+ let boosterType = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil))
498+ if ((boosterType == boosterType))
499+ then if ((boosterType == "ART-GIFT_DOUBL"))
500+ then ([Burn(assetId, 1)] ++ finishRebirthInternal(initTx, toString(i.caller), i.payments[1], true))
501+ else throw("Error! Wrong item attached to double rewards!")
502+ else throw("Strict value is not equal to itself.")
503+ }
504+
505+
506+@Verifier(tx)
507+func verify () = if (isTestEnv())
508+ then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
509+ else {
510+ let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
511+ let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
512+ let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
513+ let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
514+ then 1
515+ else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
516+ then 1
517+ else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
518+ then 1
519+ else 0
520+ let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
521+ then 1
522+ else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
523+ then 1
524+ else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
525+ then 1
526+ else 0
527+ let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
528+ then 1
529+ else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
530+ then 1
531+ else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
532+ then 1
533+ else 0
534+ let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
535+ match tx {
536+ case _ =>
537+ (signaturesCount >= 2)
538+ }
539+ }
540+

github/deemru/w8io/c3f4982 
29.04 ms