tx · 4D5x2DH4gwzg9jniyKVFsAzLLvpWw245xgophhDZgZKn

3NCe8d95V7tfMPXn21c9r368XtTUYU3M2q2:  -0.03200000 Waves

2024.11.08 23:58 [3362995] smart account 3NCe8d95V7tfMPXn21c9r368XtTUYU3M2q2 > SELF 0.00000000 Waves

{ "type": 13, "id": "4D5x2DH4gwzg9jniyKVFsAzLLvpWw245xgophhDZgZKn", "fee": 3200000, "feeAssetId": null, "timestamp": 1731099499458, "version": 2, "chainId": 84, "sender": "3NCe8d95V7tfMPXn21c9r368XtTUYU3M2q2", "senderPublicKey": "E5RzCWyRUVT16vCjSBAFbnTgEjhfpXoWhsQAhWWQ6GnT", "proofs": [ "2Yg9C9h7qxSzkuZL4VooUmSRFV8FTF5jGPm3G9Gg4AspUiBwHy1t24PsJkRR5rWtqCwFT696XhX15fTXwP92K7ZJ" ], "script": "base64:BgJPCAISAwoBCBIECgIICBIDCgEIEggKBgIBAQEIARIDCgEIEgMKAQgSBQoDAggBEgMKAQgSAwoBCBIECgIICBIFCgMIAQESAwoBCBIECgIICFAAEGRlbGF5Rm9ySGF0Y2hpbmcAAgAPSGF0Y2hpbmdTdGFydGVkAhBCUkVFRElOR19TVEFSVEVEABBIYXRjaGluZ0ZpbmlzaGVkAhFCUkVFRElOR19GSU5JU0hFRAEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCdCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAEVdHJ5R2V0SW50ZWdlckV4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBGnN0YXRpY0tleV9pbmN1YmF0b3JBZGRyZXNzAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwACFXN0YXRpY19yZWJpcnRoQWRkcmVzcwEWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwACE3N0YXRpY19pdGVtc0FkZHJlc3MBFHN0YXRpY0tleV9lZ2dBc3NldElkAAIRc3RhdGljX2VnZ0Fzc2V0SWQBIXN0YXRpY0tleV9iYWJ5RHVja0JyZWVkaW5nQWRkcmVzcwACHnN0YXRpY19iYWJ5RHVja0JyZWVkaW5nQWRkcmVzcwEXc3RhdGljS2V5X2R1Y2tsaW5nUHJpY2UAAhRzdGF0aWNfZHVja2xpbmdQcmljZQEYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAIVc3RhdGljX2NvdXBvbnNBZGRyZXNzARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAhJzdGF0aWNfYnVybkFkZHJlc3MBHHN0YXRpY0tleV9yZWZDb250cmFjdEFkZHJlc3MAAhlzdGF0aWNfcmVmQ29udHJhY3RBZGRyZXNzARJzdGF0aWNLZXlfZXh0cmFGZWUAAg9zdGF0aWNfZXh0cmFGZWUBF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAIUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IBFnN0YXRpY0tleV9zcGljZUFzc2V0SWQAAhNzdGF0aWNfc3BpY2VBc3NldElkAR5zdGF0aWNLZXlfdHVydGxlU3Rha2luZ0FkZHJlc3MAAhtzdGF0aWNfdHVydGxlU3Rha2luZ0FkZHJlc3MBHnN0YXRpY0tleV9tdXRhbnRGYXJtaW5nQWRkcmVzcwACG3N0YXRpY19tdXRhbnRGYXJtaW5nQWRkcmVzcwEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAARNnZXRJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAARFnZXRSZWJpcnRoQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwABD2dldEl0ZW1zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAQ1nZXRFZ2dBc3NldElkAAkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFHN0YXRpY0tleV9lZ2dBc3NldElkAAEaZ2V0QmFieUR1Y2tCcmVlZGluZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJASFzdGF0aWNLZXlfYmFieUR1Y2tCcmVlZGluZ0FkZHJlc3MAARBnZXREdWNrbGluZ1ByaWNlAAkBFXRyeUdldEludGVnZXJFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEXc3RhdGljS2V5X2R1Y2tsaW5nUHJpY2UAARFnZXRDb3Vwb25zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9jb3Vwb25zQWRkcmVzcwABDmdldEJ1cm5BZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAEVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwABEGdldEZlZUFnZ3JlZ2F0b3IACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgABD2dldFNwaWNlQXNzZXRJZAAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARZzdGF0aWNLZXlfc3BpY2VBc3NldElkAAEXZ2V0VHVydGxlU3Rha2luZ0FkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJAR5zdGF0aWNLZXlfdHVydGxlU3Rha2luZ0FkZHJlc3MAARdnZXRNdXRhbnRGYXJtaW5nQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBHnN0YXRpY0tleV9tdXRhbnRGYXJtaW5nQWRkcmVzcwABFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBB3BheW1lbnQDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECGUJDQVA6IFBsZWFzZSBhdHRhY2ggd2F2ZXMECWZlZUFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARJzdGF0aWNLZXlfZXh0cmFGZWUAAwkBAiE9AggFB3BheW1lbnQGYW1vdW50BQlmZWVBbW91bnQJAAIBCQCsAgIJAKwCAgIcQkNBUDogUGxlYXNlIGF0dGFjaCBleGFjdGx5IAkApAMBBQlmZWVBbW91bnQCEyBhbW91bnQgb2Ygd2F2ZWxldHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEGdldEZlZUFnZ3JlZ2F0b3IABQlmZWVBbW91bnQFBHVuaXQFA25pbAANTWF4R2VuZXJhdGlvbgAHAAtHZW5lcmF0aW9ucwkAzAgCAgFHCQDMCAICAUgJAMwIAgIBSQkAzAgCAgFLCQDMCAICAUwJAMwIAgIBTQkAzAgCAgFOCQDMCAICAU8FA25pbAETZ2V0UHJvY2Vzc1N0YXR1c0tleQIHYWRkcmVzcwR0eElkCQCsAgIJAKwCAgkArAICBQdhZGRyZXNzAgFfCQDYBAEFBHR4SWQCB19zdGF0dXMBDmdldER1Y2tsaW5nS2V5AgdhZGRyZXNzBHR4SWQJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MCAV8JANgEAQUEdHhJZAIJX2R1Y2tsaW5nARlnZXRQcm9jZXNzRmluaXNoSGVpZ2h0S2V5AgdhZGRyZXNzBHR4SWQJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MCAV8JANgEAQUEdHhJZAIDX2ZoAQxnZXRQYXJlbnRLZXkCBHR4SWQJcGFyZW50TnVtCQCsAgIJAKwCAgkArAICAgdpbml0dHhfCQDYBAEFBHR4SWQCB19wYXJlbnQJAKQDAQUJcGFyZW50TnVtAQxnZXREdWNrSWRLZXkCB2FkZHJlc3MEdHhJZAkArAICCQCsAgIJAKwCAgUHYWRkcmVzcwIBXwkA2AQBBQR0eElkAgNfZGkBD2dldER1Y2tTdGF0c0tleQEJZ2VuU3RyaW5nCQCsAgIJAKwCAgIGc3RhdHNfBQlnZW5TdHJpbmcCB19hbW91bnQBDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAoAgBBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDXRyeUdldEludGVnZXIBA2tleQQDdmFsBAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAUDdmFsARNkZXRlcm1pbmVHZW5lcmF0aW9uAgJnMQJnMgQGZ0luZGV4CQCWAwEJAMwIAgkBBXZhbHVlAQkAzwgCBQtHZW5lcmF0aW9ucwUCZzEJAMwIAgkBBXZhbHVlAQkAzwgCBQtHZW5lcmF0aW9ucwUCZzIFA25pbAkAkQMCBQtHZW5lcmF0aW9ucwkAZAIFBmdJbmRleAABAQ9nZXRSYW5kb21OdW1iZXIECHZhcmlhbnRzBHR4SWQUaGF0Y2hpbmdGaW5pc2hIZWlnaHQGb2Zmc2V0BA9yYW5kb21TZWVkQmxvY2sJAQV2YWx1ZQEJAO0HAQkAZQIFFGhhdGNoaW5nRmluaXNoSGVpZ2h0AAEECnJhbmRvbUhhc2gJANQWAQkAywECBQR0eElkCQEFdmFsdWUBCAUPcmFuZG9tU2VlZEJsb2NrA3ZyZgkAagIJALIJAgUKcmFuZG9tSGFzaAUGb2Zmc2V0BQh2YXJpYW50cwEMZ2V0UmFuZG9tR2VuCQRnZW4xBGdlbjIEc3RlcAR0eElkFGhhdGNoaW5nRmluaXNoSGVpZ2h0DmdlbmVGcm9tUGFyZW50C2dlbmVQb3N0aW9uDnNwZWNpZmlxdWVHZW5lFnNwZWNpZmlxdWVHZW5lUG9zaXRpb24DAwkBAiE9AgUOZ2VuZUZyb21QYXJlbnQAAAkAAAIFC2dlbmVQb3N0aW9uBQRzdGVwBwMJAAACBQ5nZW5lRnJvbVBhcmVudAABBQRnZW4xAwkAAAIFDmdlbmVGcm9tUGFyZW50AAIFBGdlbjIJAAIBAiBQYXJlbnQgZWl0aGVyIG5lZWRzIHRvIGJlIDEgb3IgMgMDCQECIT0CBQ5zcGVjaWZpcXVlR2VuZQIACQAAAgUWc3BlY2lmaXF1ZUdlbmVQb3NpdGlvbgUEc3RlcAcFDnNwZWNpZmlxdWVHZW5lBAlyYW5kb21OdW0JAQ9nZXRSYW5kb21OdW1iZXIEAAIFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQRzdGVwBANnZW4DCQAAAgUJcmFuZG9tTnVtAAAFBGdlbjEFBGdlbjIFA2dlbgEVY2hlY2tBc3NldEluSW5jdWJhdG9yAQdhc3NldElkBAZyZXN1bHQEByRtYXRjaDAJAJ0IAgkBE2dldEluY3ViYXRvckFkZHJlc3MABQdhc3NldElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAYHBAdyZXN1bHQyBAckbWF0Y2gwCQCdCAIFBHRoaXMFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFjBQckbWF0Y2gwBgcDBQZyZXN1bHQGBQdyZXN1bHQyAQxjYW5CZUJyZWVkZWQCCGFzc2V0MUlkCGFzc2V0MklkBAlhc3NldDFHZW4JALUJAggJAQV2YWx1ZQEJAOwHAQUIYXNzZXQxSWQEbmFtZQIABAlhc3NldDJHZW4JALUJAggJAQV2YWx1ZQEJAOwHAQUIYXNzZXQySWQEbmFtZQIAAwkAZwIJAQV2YWx1ZQEJAM8IAgULR2VuZXJhdGlvbnMJAJEDAgUJYXNzZXQxR2VuAA4FDU1heEdlbmVyYXRpb24JAKwCAgkArAICAil5b3UgY2FuIG9ubHkgYnJlZWQgZHVja3Mgd2l0aCBnZW5lcmF0aW9uIAkAkQMCBQtHZW5lcmF0aW9ucwUNTWF4R2VuZXJhdGlvbgIKIGFuZCBsb3dlcgMJAGcCCQEFdmFsdWUBCQDPCAIFC0dlbmVyYXRpb25zCQCRAwIFCWFzc2V0MkdlbgAOBQ1NYXhHZW5lcmF0aW9uCQCsAgIJAKwCAgIpeW91IGNhbiBvbmx5IGJyZWVkIGR1Y2tzIHdpdGggZ2VuZXJhdGlvbiAJAJEDAgULR2VuZXJhdGlvbnMFDU1heEdlbmVyYXRpb24CCiBhbmQgbG93ZXICBHRydWUBCWlzU3ltYm9sQQILYWNjdW11bGF0ZWQDc3ltAwkAAAIFA3N5bQIBQQkAZAIFC2FjY3VtdWxhdGVkAAEJAGQCBQthY2N1bXVsYXRlZAAAAQlpc1N5bWJvbEICC2FjY3VtdWxhdGVkA3N5bQMJAAACBQNzeW0CAUIJAGQCBQthY2N1bXVsYXRlZAABCQBkAgULYWNjdW11bGF0ZWQAAAEJaXNTeW1ib2xDAgthY2N1bXVsYXRlZANzeW0DCQAAAgUDc3ltAgFDCQBkAgULYWNjdW11bGF0ZWQAAQkAZAIFC2FjY3VtdWxhdGVkAAABCWlzU3ltYm9sRAILYWNjdW11bGF0ZWQDc3ltAwkAAAIFA3N5bQIBRAkAZAIFC2FjY3VtdWxhdGVkAAEJAGQCBQthY2N1bXVsYXRlZAAAAQlpc1N5bWJvbEUCC2FjY3VtdWxhdGVkA3N5bQMJAAACBQNzeW0CAUUJAGQCBQthY2N1bXVsYXRlZAABCQBkAgULYWNjdW11bGF0ZWQAAAEJaXNTeW1ib2xGAgthY2N1bXVsYXRlZANzeW0DCQAAAgUDc3ltAgFGCQBkAgULYWNjdW11bGF0ZWQAAQkAZAIFC2FjY3VtdWxhdGVkAAABCWlzU3ltYm9sRwILYWNjdW11bGF0ZWQDc3ltAwkAAAIFA3N5bQIBRwkAZAIFC2FjY3VtdWxhdGVkAAEJAGQCBQthY2N1bXVsYXRlZAAAAQlpc1N5bWJvbEgCC2FjY3VtdWxhdGVkA3N5bQMJAAACBQNzeW0CAUgJAGQCBQthY2N1bXVsYXRlZAABCQBkAgULYWNjdW11bGF0ZWQAAAEJaXNTeW1ib2xJAgthY2N1bXVsYXRlZANzeW0DCQAAAgUDc3ltAgFJCQBkAgULYWNjdW11bGF0ZWQAAQkAZAIFC2FjY3VtdWxhdGVkAAABCWlzU3ltYm9sSwILYWNjdW11bGF0ZWQDc3ltAwkAAAIFA3N5bQIBSwkAZAIFC2FjY3VtdWxhdGVkAAEJAGQCBQthY2N1bXVsYXRlZAAAAQlpc1N5bWJvbEwCC2FjY3VtdWxhdGVkA3N5bQMJAAACBQNzeW0CAUwJAGQCBQthY2N1bXVsYXRlZAABCQBkAgULYWNjdW11bGF0ZWQAAAEJaXNTeW1ib2xNAgthY2N1bXVsYXRlZANzeW0DCQAAAgUDc3ltAgFNCQBkAgULYWNjdW11bGF0ZWQAAQkAZAIFC2FjY3VtdWxhdGVkAAABCWlzU3ltYm9sTgILYWNjdW11bGF0ZWQDc3ltAwkAAAIFA3N5bQIBTgkAZAIFC2FjY3VtdWxhdGVkAAEJAGQCBQthY2N1bXVsYXRlZAAAAQlpc1N5bWJvbE8CC2FjY3VtdWxhdGVkA3N5bQMJAAACBQNzeW0CAU8JAGQCBQthY2N1bXVsYXRlZAABCQBkAgULYWNjdW11bGF0ZWQAAAEJaXNTeW1ib2xQAgthY2N1bXVsYXRlZANzeW0DCQAAAgUDc3ltAgFQCQBkAgULYWNjdW11bGF0ZWQAAQkAZAIFC2FjY3VtdWxhdGVkAAABCWlzU3ltYm9sUwILYWNjdW11bGF0ZWQDc3ltAwkAAAIFA3N5bQIBUwkAZAIFC2FjY3VtdWxhdGVkAAEJAGQCBQthY2N1bXVsYXRlZAAAAQlpc1N5bWJvbFQCC2FjY3VtdWxhdGVkA3N5bQMJAAACBQNzeW0CAVQJAGQCBQthY2N1bXVsYXRlZAABCQBkAgULYWNjdW11bGF0ZWQAAAEJaXNTeW1ib2xaAgthY2N1bXVsYXRlZANzeW0DCQAAAgUDc3ltAgFaCQBkAgULYWNjdW11bGF0ZWQAAQkAZAIFC2FjY3VtdWxhdGVkAAABEGdldEFtb3VudE9yQ2xlYXIBBmFtb3VudAMJAQhjb250YWlucwIFBmFtb3VudAIBMAIABQZhbW91bnQBCGFzU3RyaW5nAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAFBnN0cmluZwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBBWFzSW50AQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQABAgUHJG1hdGNoMAIDSW50BANpbnQFByRtYXRjaDAFA2ludAkAAgECGXdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBCWFzQm9vbGVhbgEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EB2Jvb2xlYW4FByRtYXRjaDAFB2Jvb2xlYW4JAAIBAiJCREE6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBCb29sZWFuARJjb21wb3NlR2VuZXJpY0RhdGEEB2R1Y2tHZW4JZHVja0lkS2V5B2Fzc2V0SWQFYXNzZXQEB2Zhcm1HZW4JAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIOZ2V0R2VuRnJvbU5hbWUJAMwIAgUHZHVja0dlbgUDbmlsBQNuaWwDCQAAAgUHZmFybUdlbgUHZmFybUdlbgQGYW1vdW50CQENdHJ5R2V0SW50ZWdlcgEJAQ9nZXREdWNrU3RhdHNLZXkBBQdkdWNrR2VuBAhxdWFudGl0eQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIGc3RhdHNfBQdmYXJtR2VuAglfcXVhbnRpdHkJAMwIAgkBC1N0cmluZ0VudHJ5AgUJZHVja0lkS2V5CQDYBAEFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkA2AQBBQdhc3NldElkBQlkdWNrSWRLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9nZXREdWNrU3RhdHNLZXkBBQdkdWNrR2VuCQBkAgUGYW1vdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgZzdGF0c18FB2Zhcm1HZW4CCV9xdWFudGl0eQkAZAIFCHF1YW50aXR5AAEJAMwIAgUFYXNzZXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEPZmluaXNoRHVja0hhdGNoAwd0eElkU3RyBW93bmVyD2R1Y2tHZW5lc1N0cmluZwQEdHhJZAkA2QQBBQd0eElkU3RyBBBwcm9jZXNzU3RhdHVzS2V5CQETZ2V0UHJvY2Vzc1N0YXR1c0tleQIFBW93bmVyBQR0eElkBAlkdWNrSWRLZXkJAQxnZXREdWNrSWRLZXkCBQVvd25lcgUEdHhJZAQPcHJvY2Vzc1R4U3RhdHVzCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRBwcm9jZXNzU3RhdHVzS2V5BA9maW5pc2hIZWlnaHRLZXkJARlnZXRQcm9jZXNzRmluaXNoSGVpZ2h0S2V5AgUFb3duZXIFBHR4SWQEE3Byb2Nlc3NGaW5pc2hIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFD2ZpbmlzaEhlaWdodEtleQMJAAACBQ9wcm9jZXNzVHhTdGF0dXMFEEhhdGNoaW5nRmluaXNoZWQEBmR1Y2tJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkBDGdldER1Y2tJZEtleQIFBW93bmVyBQR0eElkCQACAQkArAICAkBUaGUgZHVjayB3YXMgYnJlZWRlZCBhbmQgY2xhaW1lZCBhbHJlYWR5LCBoZXJlIGlzIHRoZSBmb2xvd2luZzogBQZkdWNrSWQDCQBmAgUTcHJvY2Vzc0ZpbmlzaEhlaWdodAUGaGVpZ2h0CQACAQkArAICCQCsAgIJAKwCAgkArAICAh1CcmVlZGluZyBpcyBub3QgZmluaXNoZWQgeWV0IAkApAMBCQBlAgUTcHJvY2Vzc0ZpbmlzaEhlaWdodAUGaGVpZ2h0AicgYmxvY2tzIHJlbWFpbmluZywgaXQgd2lsbCB0YWtlIGFyb3VuZCAJAKQDAQkAZQIFE3Byb2Nlc3NGaW5pc2hIZWlnaHQFBmhlaWdodAIIIG1pbnV0ZXMEB2R1Y2tHZW4DCQAAAgUPZHVja0dlbmVzU3RyaW5nAgAJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIMZ2VuZXJhdGVEdWNrCQDMCAIFBHR4SWQJAMwIAgUTcHJvY2Vzc0ZpbmlzaEhlaWdodAkAzAgCAAAJAMwIAgAACQDMCAICAAkAzAgCAAAFA25pbAUDbmlsBQ9kdWNrR2VuZXNTdHJpbmcDCQAAAgUHZHVja0dlbgUHZHVja0dlbgQLZGVzY3JpcHRpb24JAKwCAgkArAICAg57Imdlbm90eXBlIjogIgUHZHVja0dlbgIZIiwgImNyb3NzYnJlZWRpbmciOiB0cnVlfQQFYXNzZXQJAMMIBwUHZHVja0dlbgULZGVzY3JpcHRpb24AAQAABwUEdW5pdAUTcHJvY2Vzc0ZpbmlzaEhlaWdodAQHYXNzZXRJZAkAuAgBBQVhc3NldAQJcGFyZW50MUlkCQEMdHJ5R2V0U3RyaW5nAQkBDGdldFBhcmVudEtleQIFBHR4SWQAAQQJcGFyZW50MklkCQEMdHJ5R2V0U3RyaW5nAQkBDGdldFBhcmVudEtleQIFBHR4SWQAAgQNcGFyZW50c0xvY2tlZAkBDXRyeUdldEJvb2xlYW4BCQCsAgICDnBhcmVudHNsb2NrZWRfBQd0eElkU3RyBAtwYXJlbnRzU2VuZAMFDXBhcmVudHNMb2NrZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUFb3duZXIAAQkA2QQBBQlwYXJlbnQxSWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUFb3duZXIAAQkA2QQBBQlwYXJlbnQySWQFA25pbAUDbmlsCQDOCAIJAM4IAgkBEmNvbXBvc2VHZW5lcmljRGF0YQQFB2R1Y2tHZW4FCWR1Y2tJZEtleQUHYXNzZXRJZAUFYXNzZXQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQcHJvY2Vzc1N0YXR1c0tleQUQSGF0Y2hpbmdGaW5pc2hlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQVvd25lcgABBQdhc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIGYXNzZXRfBQlwYXJlbnQxSWQCCV9jaGlsZHJlbgABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIGYXNzZXRfBQlwYXJlbnQySWQCCV9jaGlsZHJlbgABBQNuaWwFC3BhcmVudHNTZW5kCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQdnZXRCb29sAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQlpc1Rlc3RFbnYACQEHZ2V0Qm9vbAECB1RFU1RFTlYACWZyZWVHZW5lcwkAzAgCAgFBCQDMCAICAUIJAMwIAgIBQwkAzAgCAgFECQDMCAICAUUJAMwIAgIBRgkAzAgCAgFHCQDMCAICAUgJAMwIAgIBSQkAzAgCAgFLCQDMCAICAUwFA25pbAEOZ2V0UmFuZG9tR2VuZXMCBHR4SWQBaAQMcmFuZG9tTnVtYmVyCQEPZ2V0UmFuZG9tTnVtYmVyBAkAkAMBBQlmcmVlR2VuZXMFBHR4SWQFAWgAAgkAkQMCBQlmcmVlR2VuZXMFDHJhbmRvbU51bWJlcgEXZmluaXNoRHVja0hhdGNoaW5nSXRlbXMFB3R4SWRTdHIPZHVja0dlbmVzU3RyaW5nCHBheW1lbnQxCHBheW1lbnQyBW93bmVyBAtpbnN0YW50UGFpZAkBDXRyeUdldEJvb2xlYW4BCQCsAgICDGluc3RhbnRQYWlkXwUHdHhJZFN0cgMFC2luc3RhbnRQYWlkCQEPZmluaXNoRHVja0hhdGNoAwUHdHhJZFN0cgUFb3duZXIFD2R1Y2tHZW5lc1N0cmluZwQOZHVja2xpbmdGaW5pc2gJAQhhc1N0cmluZwEJAPwHBAkBGmdldEJhYnlEdWNrQnJlZWRpbmdBZGRyZXNzAAIUdHVybkR1Y2tsaW5nSW50b0R1Y2sFA25pbAkAzAgCBQhwYXltZW50MQkAzAgCBQhwYXltZW50MgUDbmlsAwkAAAIFDmR1Y2tsaW5nRmluaXNoBQ5kdWNrbGluZ0ZpbmlzaAQOZHVja2xpbmdMaW5rZWQJAQx0cnlHZXRTdHJpbmcBCQEOZ2V0RHVja2xpbmdLZXkCBQVvd25lcgkA2QQBBQd0eElkU3RyAwkBAiE9AgUOZHVja2xpbmdMaW5rZWQFDmR1Y2tsaW5nRmluaXNoCQACAQIjUGxlYXNlIGF0dGFjaCB0aGUgY29ycmVjdCBkdWNrbGluZyEJAQ9maW5pc2hEdWNrSGF0Y2gDBQd0eElkU3RyBQVvd25lcgUPZHVja0dlbmVzU3RyaW5nCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuDQFpAQ9jb25maWd1cmVPcmFjbGUBBm9yYWNsZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIUc3RhdGljX29yYWNsZUFkZHJlc3MFBm9yYWNsZQUDbmlsAWkBC3B1dENoaWxkcmVuAgpvbGRBc3NldElkB2Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIJARNnZXRJbmN1YmF0b3JBZGRyZXNzAAkAAgECDkJQQzogZm9yYmlkZGVuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIGYXNzZXRfBQdhc3NldElkAglfY2hpbGRyZW4JAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICBmFzc2V0XwUKb2xkQXNzZXRJZAIJX2NoaWxkcmVuBQNuaWwBaQESbWludEFuZFJlcGxhY2VEdWNrAQdhc3NldElkAwkBAiE9AggFAWkGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVnekVZWE1iQUhVNFp1QVByZDZIYW5ZNExXNEVlNUo2RgkAAgECC0lNQVJEOiBzdG9wBAlkdWNrSWRLZXkJARFAZXh0ck5hdGl2ZSgxMDU4KQEFB2Fzc2V0SWQEB2RldGFpbHMJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBARuYW1lCAUHZGV0YWlscwRuYW1lBAtkZXNjcmlwdGlvbggFB2RldGFpbHMLZGVzY3JpcHRpb24ECG5ld0Fzc2V0CQDCCAUFBG5hbWUFC2Rlc2NyaXB0aW9uAAEAAAcECm5ld0Fzc2V0SWQJALgIAQUIbmV3QXNzZXQJAMwIAgUIbmV3QXNzZXQJAMwIAgkBC1N0cmluZ0VudHJ5AgUJZHVja0lkS2V5CQDYBAEFCm5ld0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkA2AQBBQpuZXdBc3NldElkBQlkdWNrSWRLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHYXNzZXRJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICBQdhc3NldElkAgxfYmxhY2tsaXN0ZWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHYXNzZXRJZAINX3JlcGxhY2VkV2l0aAkA2AQBBQpuZXdBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIGYXNzZXRfCQDYBAEFCm5ld0Fzc2V0SWQCCV9jaGlsZHJlbgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIGYXNzZXRfBQdhc3NldElkAglfY2hpbGRyZW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFCm5ld0Fzc2V0SWQFA25pbAFpAQxnZW5lcmF0ZUR1Y2sGBHR4SWQUaGF0Y2hpbmdGaW5pc2hIZWlnaHQOZ2VuZUZyb21QYXJlbnQLZ2VuZVBvc3Rpb24Oc3BlY2lmaXF1ZUdlbmUWc3BlY2lmaXF1ZUdlbmVQb3NpdGlvbgQLY29sb3JSYW5kb20JAQ9nZXRSYW5kb21OdW1iZXIEAAQFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0AAsEBWNvbG9yAwkAAAIFC2NvbG9yUmFuZG9tAAACAVkDCQAAAgULY29sb3JSYW5kb20AAQIBRwMJAAACBQtjb2xvclJhbmRvbQACAgFCAgFSBAlwYXJlbnQxSWQJANkEAQkBDHRyeUdldFN0cmluZwEJAQxnZXRQYXJlbnRLZXkCBQR0eElkAAEECXBhcmVudDJJZAkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBDGdldFBhcmVudEtleQIFBHR4SWQAAgQKcGFyZW50MUdlbgkAtQkCCAkBBXZhbHVlAQkA7AcBBQlwYXJlbnQxSWQEbmFtZQIABApwYXJlbnQyR2VuCQC1CQIICQEFdmFsdWUBCQDsBwEFCXBhcmVudDJJZARuYW1lAgAEA2dlbgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBURVQ0stCQEMZ2V0UmFuZG9tR2VuCQkAkQMCBQpwYXJlbnQxR2VuAAUJAJEDAgUKcGFyZW50MkdlbgAFAAAFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQ5nZW5lRnJvbVBhcmVudAULZ2VuZVBvc3Rpb24FDnNwZWNpZmlxdWVHZW5lBRZzcGVjaWZpcXVlR2VuZVBvc2l0aW9uCQEMZ2V0UmFuZG9tR2VuCQkAkQMCBQpwYXJlbnQxR2VuAAYJAJEDAgUKcGFyZW50MkdlbgAGAAEFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQ5nZW5lRnJvbVBhcmVudAULZ2VuZVBvc3Rpb24FDnNwZWNpZmlxdWVHZW5lBRZzcGVjaWZpcXVlR2VuZVBvc2l0aW9uCQEMZ2V0UmFuZG9tR2VuCQkAkQMCBQpwYXJlbnQxR2VuAAcJAJEDAgUKcGFyZW50MkdlbgAHAAIFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQ5nZW5lRnJvbVBhcmVudAULZ2VuZVBvc3Rpb24FDnNwZWNpZmlxdWVHZW5lBRZzcGVjaWZpcXVlR2VuZVBvc2l0aW9uCQEMZ2V0UmFuZG9tR2VuCQkAkQMCBQpwYXJlbnQxR2VuAAgJAJEDAgUKcGFyZW50MkdlbgAIAAMFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQ5nZW5lRnJvbVBhcmVudAULZ2VuZVBvc3Rpb24FDnNwZWNpZmlxdWVHZW5lBRZzcGVjaWZpcXVlR2VuZVBvc2l0aW9uCQEMZ2V0UmFuZG9tR2VuCQkAkQMCBQpwYXJlbnQxR2VuAAkJAJEDAgUKcGFyZW50MkdlbgAJAAQFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQ5nZW5lRnJvbVBhcmVudAULZ2VuZVBvc3Rpb24FDnNwZWNpZmlxdWVHZW5lBRZzcGVjaWZpcXVlR2VuZVBvc2l0aW9uCQEMZ2V0UmFuZG9tR2VuCQkAkQMCBQpwYXJlbnQxR2VuAAoJAJEDAgUKcGFyZW50MkdlbgAKAAUFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQ5nZW5lRnJvbVBhcmVudAULZ2VuZVBvc3Rpb24FDnNwZWNpZmlxdWVHZW5lBRZzcGVjaWZpcXVlR2VuZVBvc2l0aW9uCQEMZ2V0UmFuZG9tR2VuCQkAkQMCBQpwYXJlbnQxR2VuAAsJAJEDAgUKcGFyZW50MkdlbgALAAYFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQ5nZW5lRnJvbVBhcmVudAULZ2VuZVBvc3Rpb24FDnNwZWNpZmlxdWVHZW5lBRZzcGVjaWZpcXVlR2VuZVBvc2l0aW9uCQEMZ2V0UmFuZG9tR2VuCQkAkQMCBQpwYXJlbnQxR2VuAAwJAJEDAgUKcGFyZW50MkdlbgAMAAcFBHR4SWQFFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQ5nZW5lRnJvbVBhcmVudAULZ2VuZVBvc3Rpb24FDnNwZWNpZmlxdWVHZW5lBRZzcGVjaWZpcXVlR2VuZVBvc2l0aW9uAgEtCQETZGV0ZXJtaW5lR2VuZXJhdGlvbgIJAJEDAgUKcGFyZW50MUdlbgAOCQCRAwIFCnBhcmVudDJHZW4ADgUFY29sb3IJAJQKAgUDbmlsBQNnZW4BaQEOZ2V0R2VuRnJvbU5hbWUBCWFzc2V0TmFtZQQIZ2Vub3R5cGUJALUJAgkAswICCQCwAgIFCWFzc2V0TmFtZQAFAAMCAAQKZ2VuZXJhdGlvbgkAkQMCCQC1CQIFCWFzc2V0TmFtZQIAAA4EA2dlbgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQEQZ2V0QW1vdW50T3JDbGVhcgEJAKwCAgkApAMBCgACJGwFCGdlbm90eXBlCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRp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c3NldElkAwkBASEBCQEVY2hlY2tBc3NldEluSW5jdWJhdG9yAQUHYXNzZXRJZAkAAgEJAKwCAgkArAICAiVZb3UgbmVlZCB0byBhdHRhY2ggYSB2YWxpZCBORlQtZHVjay4gBQdhc3NldElkAgwgaXMgaW52YWxpZCEECGNoaWxkcmVuCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgZhc3NldF8FB2Fzc2V0SWQCCV9jaGlsZHJlbgkAlAoCBQNuaWwFCGNoaWxkcmVuAWkBFmNyZWF0ZUR1Y2tTcGVjaWFsR2VuZXMDB2FkZHJlc3MHZHVja0dlbghjaGlsZHJlbgMDCQECIT0CCAUBaQZjYWxsZXIJAQ9nZXRJdGVtc0FkZHJlc3MACQECIT0CCAUBaQZjYWxsZXIFBHRoaXMHCQACAQITYWRtaW4gb3IgaXRlbXMgb25seQQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAQLZGVzY3JpcHRpb24JAKwCAgkArAICAg57Imdlbm90eXBlIjogIgUHZHVja0dlbgIZIiwgImNyb3NzYnJlZWRpbmciOiB0cnVlfQQFYXNzZXQJAMIIBQUHZHVja0dlbgULZGVzY3JpcHRpb24AAQAABwQHYXNzZXRJZAkAuAgBBQVhc3NldAQJZHVja0lkS2V5CQEMZ2V0RHVja0lkS2V5AgkApQgBCAUBaQZjYWxsZXIFBHR4SWQEB2Zhcm1HZW4JAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIOZ2V0R2VuRnJvbU5hbWUJAMwIAgUHZHVja0dlbgUDbmlsBQNuaWwDCQAAAgUHZmFybUdlbgUHZmFybUdlbgkAzggCCQESY29tcG9zZUdlbmVyaWNEYXRhBAUHZHVja0dlbgUJZHVja0lkS2V5BQdhc3NldElkBQVhc3NldAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBmFzc2V0XwkA2AQBBQdhc3NldElkAglfY2hpbGRyZW4FCGNoaWxkcmVuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUHYWRkcmVzcwABBQdhc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc3RhcnREdWNrQnJlZWRpbmcBDnJlZmVyZXJBZGRyZXNzBAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQNc2Vjb25kUGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwACAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50BAtpbnN0YW50UGFpZAMDCQBnAgkAkAMBCAUBaQhwYXltZW50cwAECQAAAggJAJEDAggFAWkIcGF5bWVudHMAAwdhc3NldElkCQEPZ2V0U3BpY2VBc3NldElkAAcGBwMJAAACBQtpbnN0YW50UGFpZAULaW5zdGFudFBhaWQEDGZpcnN0QXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQEDXNlY29uZEFzc2V0SWQJANgEAQkBBXZhbHVlAQgFDXNlY29uZFBheW1lbnQHYXNzZXRJZAMDCQECIT0CCAUMZmlyc3RQYXltZW50BmFtb3VudAABBgkBAiE9AggFDXNlY29uZFBheW1lbnQGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkBBNhbW91bnRQYWlkQnlDb3Vwb25zCQEFYXNJbnQBCQD8BwQJARFnZXRDb3Vwb25zQWRkcmVzcwACCnVzZUNvdXBvbnMJAMwIAgkBEGdldER1Y2tsaW5nUHJpY2UABQNuaWwFA25pbAMJAAACBRNhbW91bnRQYWlkQnlDb3Vwb25zBRNhbW91bnRQYWlkQnlDb3Vwb25zBAlsZWZ0VG9QYXkJAGUCCQEQZ2V0RHVja2xpbmdQcmljZQAFE2Ftb3VudFBhaWRCeUNvdXBvbnMEB3BheW1lbnQDCQECIT0CBQlsZWZ0VG9QYXkAAAQMdGhpcmRQYXltZW50AwULaW5zdGFudFBhaWQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMABAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwADAwkBAiE9AggFDHRoaXJkUGF5bWVudAdhc3NldElkCQENZ2V0RWdnQXNzZXRJZAAJAAIBCQCsAgICQkJTREI6IFlvdSBjYW4gYXR0YWNoIG9ubHkgRUdHIHRva2VucyB3aXRoIHRoZSBmb2xsb3dpbmcgYXNzZXQgaWQ6IAkA2AQBCQENZ2V0RWdnQXNzZXRJZAADCQECIT0CCAUMdGhpcmRQYXltZW50BmFtb3VudAUJbGVmdFRvUGF5CQACAQkArAICAkNCU0RCOiBUbyBicmVlZCB5b3UgY3VycmVudGx5IG5lZWQgdGhlIGZvbGxvd2luZyBhbW91bnQgb2YgRUdHbGV0czogCQCkAwEFCWxlZnRUb1BheQQVcmVmZXJlclJld2FyZEZvclBlcmNoCQBrAwUJbGVmdFRvUGF5AAUAZAQHcmVmQ2FsbAkBCWFzQm9vbGVhbgEJAPwHBAkBFWdldFJlZkNvbnRyYWN0QWRkcmVzcwACCnJlZlBheW1lbnQJAMwIAgUOcmVmZXJlckFkZHJlc3MFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQABRVyZWZlcmVyUmV3YXJkRm9yUGVyY2gFA25pbAMJAAACBQdyZWZDYWxsBQdyZWZDYWxsBAZ0b0J1cm4DBQdyZWZDYWxsCQBlAgUJbGVmdFRvUGF5BRVyZWZlcmVyUmV3YXJkRm9yUGVyY2gFCWxlZnRUb1BheQQIYnVybkNhbGwJAPwHBAkBDmdldEJ1cm5BZGRyZXNzAAIUYnVybkF0dGFjaGVkUGF5bWVudHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQABQZ0b0J1cm4FA25pbAMJAAACBQhidXJuQ2FsbAUIYnVybkNhbGwFCWxlZnRUb1BheQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAwkAAAIFB3BheW1lbnQFB3BheW1lbnQECWNoaWxkcmVuMQkBBWFzSW50AQkA/AcEBQR0aGlzAhZ2YWxpZGF0ZUFuZEdldENoaWxkcmVuCQDMCAIFDGZpcnN0QXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUJY2hpbGRyZW4xBQljaGlsZHJlbjEECWNoaWxkcmVuMgkBBWFzSW50AQkA/AcEBQR0aGlzAhZ2YWxpZGF0ZUFuZEdldENoaWxkcmVuCQDMCAIFDXNlY29uZEFzc2V0SWQFA25pbAUDbmlsAwkAAAIFCWNoaWxkcmVuMgUJY2hpbGRyZW4yAwMJAGYCBQljaGlsZHJlbjEAAAYJAGYCBQljaGlsZHJlbjIAAAkAAgECPE9uZSBkdWNrIGNhbiBiZSB1c2VkIGZvciBicmVlZGluZyBvbmx5IG9uY2UgaW4gaXRzIGxpZmV0aW1lLgQNYnJlZWRlZFN0YXR1cwkBDGNhbkJlQnJlZWRlZAIJANkEAQUMZmlyc3RBc3NldElkCQDZBAEFDXNlY29uZEFzc2V0SWQDCQECIT0CBQ1icmVlZGVkU3RhdHVzAgR0cnVlCQACAQkArAICAh9UaGVzZSBkdWNrcyBjYW5ub3QgYmUgYnJlZWRlZDogBQ1icmVlZGVkU3RhdHVzBApwYXJlbnQxR2VuCQC1CQIICQEFdmFsdWUBCQDsBwEJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZARuYW1lAgAECnBhcmVudDJHZW4JALUJAggJAQV2YWx1ZQEJAOwHAQkBBXZhbHVlAQgFDXNlY29uZFBheW1lbnQHYXNzZXRJZARuYW1lAgAEBG5ld0cJARNkZXRlcm1pbmVHZW5lcmF0aW9uAgkAkQMCBQpwYXJlbnQxR2VuAA4JAJEDAgUKcGFyZW50MkdlbgAOBAtzcGljZUFtb3VudAkAaAIJAGQCCQEFdmFsdWUBCQDPCAIFC0dlbmVyYXRpb25zBQRuZXdHAAEAgJTr3AMEBnJlc3VsdAMFC2luc3RhbnRQYWlkAwMJAAACCAkAkQMCCAUBaQhwYXltZW50cwADBmFtb3VudAULc3BpY2VBbW91bnQJAAACCAkAkQMCCAUBaQhwYXltZW50cwADB2Fzc2V0SWQJAQ9nZXRTcGljZUFzc2V0SWQABwQFdG9wdXAJAPwHBAkBF2dldFR1cnRsZVN0YWtpbmdBZGRyZXNzAAILdG9wVXBSZXdhcmQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBD2dldFNwaWNlQXNzZXRJZAAJAGkCBQtzcGljZUFtb3VudAACBQNuaWwDCQAAAgUFdG9wdXAFBXRvcHVwBAZ0b3B1cDIJAPwHBAkBF2dldE11dGFudEZhcm1pbmdBZGRyZXNzAAILdG9wVXBSZXdhcmQJAMwIAgIFU1BJQ0UJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ9nZXRTcGljZUFzc2V0SWQACQBpAgULc3BpY2VBbW91bnQACgUDbmlsAwkAAAIFBnRvcHVwMgUGdG9wdXAyCQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgICDGluc3RhbnRQYWlkXwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIqUGxlYXNlIGF0dGFjaCB0aGUgY29ycmVjdCBhbW91bnQgb2Ygc3BpY2UhBANyZXMJAQhhc1N0cmluZwEJAPwHBAkBGmdldEJhYnlEdWNrQnJlZWRpbmdBZGRyZXNzAAINaXNzdWVEdWNrbGluZwkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAMwIAgkAaQIFC3NwaWNlQW1vdW50AIDC1y8JAMwIAgUEbmV3RwUDbmlsBQNuaWwDCQAAAgUDcmVzBQNyZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmdldER1Y2tsaW5nS2V5AgkApQgBCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQFA3JlcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICAgxpbnN0YW50UGFpZF8JANgEAQgFAWkNdHJhbnNhY3Rpb25JZAcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQZyZXN1bHQFBnJlc3VsdAkAzggCCQDOCAIFBnJlc3VsdAkAzAgCCQELU3RyaW5nRW50cnkCCQEMZ2V0UGFyZW50S2V5AggFAWkNdHJhbnNhY3Rpb25JZAABBQxmaXJzdEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGdldFBhcmVudEtleQIIBQFpDXRyYW5zYWN0aW9uSWQAAgUNc2Vjb25kQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQETZ2V0UHJvY2Vzc1N0YXR1c0tleQIJAKUIAQgFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBQ9IYXRjaGluZ1N0YXJ0ZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARlnZXRQcm9jZXNzRmluaXNoSGVpZ2h0S2V5AgkApQgBCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQJAGQCBQZoZWlnaHQFEGRlbGF5Rm9ySGF0Y2hpbmcJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgIOcGFyZW50c2xvY2tlZF8JANgEAQgFAWkNdHJhbnNhY3Rpb25JZAYFA25pbAUMdmFsaWRQYXltZW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEmZpbmlzaER1Y2tIYXRjaGluZwEHdHhJZFN0cgQFb3duZXIJAKUIAQgFAWkGY2FsbGVyBAtpbnN0YW50UGFpZAkBDXRyeUdldEJvb2xlYW4BCQCsAgICDGluc3RhbnRQYWlkXwUHdHhJZFN0cgQOZHVja2xpbmdMaW5rZWQJAQx0cnlHZXRTdHJpbmcBCQEOZ2V0RHVja2xpbmdLZXkCBQVvd25lcgkA2QQBBQd0eElkU3RyAwULaW5zdGFudFBhaWQJAQ9maW5pc2hEdWNrSGF0Y2gDBQd0eElkU3RyBQVvd25lcgIABA5kdWNrbGluZ0ZpbmlzaAkBCGFzU3RyaW5nAQkA/AcECQEaZ2V0QmFieUR1Y2tCcmVlZGluZ0FkZHJlc3MAAhR0dXJuRHVja2xpbmdJbnRvRHVjawUDbmlsCAUBaQhwYXltZW50cwMJAAACBQ5kdWNrbGluZ0ZpbmlzaAUOZHVja2xpbmdGaW5pc2gDCQECIT0CBQ5kdWNrbGluZ0xpbmtlZAUOZHVja2xpbmdGaW5pc2gJAAIBAiNQbGVhc2UgYXR0YWNoIHRoZSBjb3JyZWN0IGR1Y2tsaW5nIQkBD2ZpbmlzaER1Y2tIYXRjaAMFB3R4SWRTdHIFBW93bmVyAgAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEXZmluaXNoRHVja0hhdGNoaW5nQWRtaW4CB3R4SWRTdHIFb3duZXIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAh9CRkRIOiBPbmx5IGFkbWlucyBjYW4gcnVuIHRoaXMhCQEPZmluaXNoRHVja0hhdGNoAwUHdHhJZFN0cgUFb3duZXICAAFpAQlmaXhlZEdlbmUDB3R4SWRTdHIPcGFyZW50Rml4ZWRHZW5lEXBvc2l0aW9uRml4ZWRHZW5lAwMJAQIhPQIFD3BhcmVudEZpeGVkR2VuZQABCQECIT0CBQ9wYXJlbnRGaXhlZEdlbmUAAgcJAAIBAihGRzogUGFyZW50IGZpeGVkIGdlbmUgY2FuIGJlIG9ubHkgMSBvciAyBAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQMZmlyc3RBc3NldElkCQDYBAEJAQV2YWx1ZQEIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAMJAQIhPQIIBQxmaXJzdFBheW1lbnQGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkBAhhcnRlZmFjdAkBCGFzU3RyaW5nAQkA/AcECQEPZ2V0SXRlbXNBZGRyZXNzAAIUY2hlY2tBcnRlZmFjdERldGFpbHMJAMwIAgUMZmlyc3RBc3NldElkBQNuaWwFA25pbAMJAAACBQhhcnRlZmFjdAUIYXJ0ZWZhY3QDCQECIT0CBQhhcnRlZmFjdAILQVJULUZJWEdFTkUJAAIBAilZb3UgbmVlZCB0byBhdHRhY2ggYSBBUlQtRklYR0VORSBhcnRlZmFjdAQEdHhJZAkA2QQBBQd0eElkU3RyBA9maW5pc2hIZWlnaHRLZXkJARlnZXRQcm9jZXNzRmluaXNoSGVpZ2h0S2V5AgkApQgBCAUBaQZjYWxsZXIFBHR4SWQEE3Byb2Nlc3NGaW5pc2hIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFD2ZpbmlzaEhlaWdodEtleQQPZHVja0dlbmVzU3RyaW5nCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCDGdlbmVyYXRlRHVjawkAzAgCBQR0eElkCQDMCAIFE3Byb2Nlc3NGaW5pc2hIZWlnaHQJAMwIAgUPcGFyZW50Rml4ZWRHZW5lCQDMCAIFEXBvc2l0aW9uRml4ZWRHZW5lCQDMCAICAAkAzAgCAAAFA25pbAUDbmlsAwkAAAIFD2R1Y2tHZW5lc1N0cmluZwUPZHVja0dlbmVzU3RyaW5nBAxzdHJpY3RGaW5pc2gJARdmaW5pc2hEdWNrSGF0Y2hpbmdJdGVtcwUFB3R4SWRTdHIFD2R1Y2tHZW5lc1N0cmluZwkAkQMCCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDOCAIJAMwIAgkBBEJ1cm4CCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQAAQUDbmlsBQxzdHJpY3RGaW5pc2gJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZnJlZUdlbmUBB3R4SWRTdHIEDGZpcnN0UGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAxmaXJzdEFzc2V0SWQJANgEAQkBBXZhbHVlAQgFDGZpcnN0UGF5bWVudAdhc3NldElkAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQECGFydGVmYWN0CQEIYXNTdHJpbmcBCQD8BwQJAQ9nZXRJdGVtc0FkZHJlc3MAAhRjaGVja0FydGVmYWN0RGV0YWlscwkAzAgCBQxmaXJzdEFzc2V0SWQFA25pbAUDbmlsAwkAAAIFCGFydGVmYWN0BQhhcnRlZmFjdAMJAQIhPQIFCGFydGVmYWN0AgxBUlQtRlJFRUdFTkUJAAIBAipZb3UgbmVlZCB0byBhdHRhY2ggYSBBUlQtRlJFRUdFTkUgYXJ0ZWZhY3QEBHR4SWQJANkEAQUHdHhJZFN0cgQPZmluaXNoSGVpZ2h0S2V5CQEZZ2V0UHJvY2Vzc0ZpbmlzaEhlaWdodEtleQIJAKUIAQgFAWkGY2FsbGVyBQR0eElkBBNwcm9jZXNzRmluaXNoSGVpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ9maW5pc2hIZWlnaHRLZXkEDHNlbGVjdGVkR2VuZQkBDmdldFJhbmRvbUdlbmVzAgUEdHhJZAUTcHJvY2Vzc0ZpbmlzaEhlaWdodAQOcmFuZG9tUG9zaXRpb24JAQ9nZXRSYW5kb21OdW1iZXIEAAgFBHR4SWQFE3Byb2Nlc3NGaW5pc2hIZWlnaHQAAwQPZHVja0dlbmVzU3RyaW5nCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCDGdlbmVyYXRlRHVjawkAzAgCBQR0eElkCQDMCAIFE3Byb2Nlc3NGaW5pc2hIZWlnaHQJAMwIAgAACQDMCAIAAAkAzAgCBQxzZWxlY3RlZEdlbmUJAMwIAgUOcmFuZG9tUG9zaXRpb24FA25pbAUDbmlsAwkAAAIFD2R1Y2tHZW5lc1N0cmluZwUPZHVja0dlbmVzU3RyaW5nBAxzdHJpY3RGaW5pc2gJARdmaW5pc2hEdWNrSGF0Y2hpbmdJdGVtcwUFB3R4SWRTdHIFD2R1Y2tHZW5lc1N0cmluZwkAkQMCCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDOCAIJAMwIAgkBBEJ1cm4CCQEFdmFsdWUBCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQAAQUDbmlsBQxzdHJpY3RGaW5pc2gJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcmVkdWNlUmFyaXR5Agdhc3NldElkB2Zhcm1HZW4EBWFzc2V0CQDZBAEFB2Fzc2V0SWQDAwMJAQIhPQIIBQFpBmNhbGxlcgkBD2dldEl0ZW1zQWRkcmVzcwAJAQIhPQIIBQFpBmNhbGxlcgkBEWdldFJlYmlydGhBZGRyZXNzAAcJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwcJAAIBAhxhZG1pbiwgaXRlbXMgb3IgcmViaXJ0aCBvbmx5BAdkdWNrR2VuCAkBBXZhbHVlAQkA7AcBBQVhc3NldARuYW1lCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPZ2V0RHVja1N0YXRzS2V5AQUHZHVja0dlbgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkBD2dldER1Y2tTdGF0c0tleQEFB2R1Y2tHZW4AAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBnN0YXRzXwUHZmFybUdlbgIJX3F1YW50aXR5CQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIGc3RhdHNfBQdmYXJtR2VuAglfcXVhbnRpdHkAAQUDbmlsAQJ0eAEGdmVyaWZ5AAMJAQlpc1Rlc3RFbnYACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BAlmaXJzdFVzZXIBIFEc5P1m/xJp0vFaFJ87suL0O3/By2gnojRebDjXV91tBApzZWNvbmRVc2VyASBccg5LrvEhT2bmGUX6aqKx7bE2KVlfGczMsOFNQYhqfQQJdGhpcmRVc2VyASCgr5HlLXlDYWEyEq2OufoYWVGdLVNJNsPQo/eoYBk7TgQPZmlyc3RVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJZmlyc3RVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCWZpcnN0VXNlcgABAAAEEHNlY29uZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQpzZWNvbmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQpzZWNvbmRVc2VyAAEAAAQPdGhpcmRVc2VyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJdGhpcmRVc2VyAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCXRoaXJkVXNlcgABAAAED3NpZ25hdHVyZXNDb3VudAkAZAIJAGQCBQ9maXJzdFVzZXJTaWduZWQFEHNlY29uZFVzZXJTaWduZWQFD3RoaXJkVXNlclNpZ25lZAQHJG1hdGNoMAUCdHgJAGcCBQ9zaWduYXR1cmVzQ291bnQAAgULNBU=", "height": 3362995, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CGtn2FDGDVdsBvRpsYeLQRgs4uPiFdPG953h6n42Fz7X Next: none Diff:
OldNewDifferences
6868 func staticKey_turtleStakingAddress () = "static_turtleStakingAddress"
6969
7070
71+func staticKey_mutantFarmingAddress () = "static_mutantFarmingAddress"
72+
73+
7174 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
7275
7376
105108
106109
107110 func getTurtleStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleStakingAddress())))
111+
112+
113+func getMutantFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_mutantFarmingAddress())))
108114
109115
110116 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
826832 then {
827833 let topup = invoke(getTurtleStakingAddress(), "topUpReward", nil, [AttachedPayment(getSpiceAssetId(), (spiceAmount / 2))])
828834 if ((topup == topup))
829- then [BooleanEntry(("instantPaid_" + toBase58String(i.transactionId)), true)]
835+ then {
836+ let topup2 = invoke(getMutantFarmingAddress(), "topUpReward", ["SPICE", 0], [AttachedPayment(getSpiceAssetId(), (spiceAmount / 10))])
837+ if ((topup2 == topup2))
838+ then [BooleanEntry(("instantPaid_" + toBase58String(i.transactionId)), true)]
839+ else throw("Strict value is not equal to itself.")
840+ }
830841 else throw("Strict value is not equal to itself.")
831842 }
832843 else throw("Please attach the correct amount of spice!")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let delayForHatching = 2
55
66 let HatchingStarted = "BREEDING_STARTED"
77
88 let HatchingFinished = "BREEDING_FINISHED"
99
1010 func tryGetStringExternal (address,key) = match getString(address, key) {
1111 case a: String =>
1212 a
1313 case _ =>
1414 ""
1515 }
1616
1717
1818 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
1919 case b: Int =>
2020 b
2121 case _ =>
2222 0
2323 }
2424
2525
2626 func tryGetString (key) = tryGetStringExternal(this, key)
2727
2828
2929 func staticKey_oracleAddress () = "static_oracleAddress"
3030
3131
3232 func staticKey_incubatorAddress () = "static_incubatorAddress"
3333
3434
3535 func staticKey_rebirthAddress () = "static_rebirthAddress"
3636
3737
3838 func staticKey_itemsAddress () = "static_itemsAddress"
3939
4040
4141 func staticKey_eggAssetId () = "static_eggAssetId"
4242
4343
4444 func staticKey_babyDuckBreedingAddress () = "static_babyDuckBreedingAddress"
4545
4646
4747 func staticKey_ducklingPrice () = "static_ducklingPrice"
4848
4949
5050 func staticKey_couponsAddress () = "static_couponsAddress"
5151
5252
5353 func staticKey_burnAddress () = "static_burnAddress"
5454
5555
5656 func staticKey_refContractAddress () = "static_refContractAddress"
5757
5858
5959 func staticKey_extraFee () = "static_extraFee"
6060
6161
6262 func staticKey_feeAggregator () = "static_feeAggregator"
6363
6464
6565 func staticKey_spiceAssetId () = "static_spiceAssetId"
6666
6767
6868 func staticKey_turtleStakingAddress () = "static_turtleStakingAddress"
6969
7070
71+func staticKey_mutantFarmingAddress () = "static_mutantFarmingAddress"
72+
73+
7174 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
7275
7376
7477 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
7578
7679
7780 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rebirthAddress())))
7881
7982
8083 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
8184
8285
8386 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
8487
8588
8689 func getBabyDuckBreedingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_babyDuckBreedingAddress())))
8790
8891
8992 func getDucklingPrice () = tryGetIntegerExternal(getOracle(), staticKey_ducklingPrice())
9093
9194
9295 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
9396
9497
9598 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
9699
97100
98101 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
99102
100103
101104 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
102105
103106
104107 func getSpiceAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_spiceAssetId()))
105108
106109
107110 func getTurtleStakingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleStakingAddress())))
111+
112+
113+func getMutantFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_mutantFarmingAddress())))
108114
109115
110116 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
111117 then throw("BCAP: Please attach waves")
112118 else {
113119 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
114120 if ((payment.amount != feeAmount))
115121 then throw((("BCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
116122 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
117123 }
118124
119125
120126 let MaxGeneration = 7
121127
122128 let Generations = ["G", "H", "I", "K", "L", "M", "N", "O"]
123129
124130 func getProcessStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
125131
126132
127133 func getDucklingKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_duckling")
128134
129135
130136 func getProcessFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
131137
132138
133139 func getParentKey (txId,parentNum) = ((("inittx_" + toBase58String(txId)) + "_parent") + toString(parentNum))
134140
135141
136142 func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
137143
138144
139145 func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
140146
141147
142148 func tryGetBoolean (key) = match getBoolean(key) {
143149 case b: Boolean =>
144150 b
145151 case _ =>
146152 false
147153 }
148154
149155
150156 func tryGetInteger (key) = {
151157 let val = match getInteger(this, key) {
152158 case b: Int =>
153159 b
154160 case _ =>
155161 0
156162 }
157163 val
158164 }
159165
160166
161167 func determineGeneration (g1,g2) = {
162168 let gIndex = max([value(indexOf(Generations, g1)), value(indexOf(Generations, g2))])
163169 Generations[(gIndex + 1)]
164170 }
165171
166172
167173 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
168174 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
169175 let randomHash = sha256_16Kb((txId + value(randomSeedBlock.vrf)))
170176 (toInt(randomHash, offset) % variants)
171177 }
172178
173179
174180 func getRandomGen (gen1,gen2,step,txId,hatchingFinishHeight,geneFromParent,genePostion,specifiqueGene,specifiqueGenePosition) = if (if ((geneFromParent != 0))
175181 then (genePostion == step)
176182 else false)
177183 then if ((geneFromParent == 1))
178184 then gen1
179185 else if ((geneFromParent == 2))
180186 then gen2
181187 else throw("Parent either needs to be 1 or 2")
182188 else if (if ((specifiqueGene != ""))
183189 then (specifiqueGenePosition == step)
184190 else false)
185191 then specifiqueGene
186192 else {
187193 let randomNum = getRandomNumber(2, txId, hatchingFinishHeight, step)
188194 let gen = if ((randomNum == 0))
189195 then gen1
190196 else gen2
191197 gen
192198 }
193199
194200
195201 func checkAssetInIncubator (assetId) = {
196202 let result = match getString(getIncubatorAddress(), assetId) {
197203 case b: String =>
198204 true
199205 case _ =>
200206 false
201207 }
202208 let result2 = match getString(this, assetId) {
203209 case c: String =>
204210 true
205211 case _ =>
206212 false
207213 }
208214 if (result)
209215 then true
210216 else result2
211217 }
212218
213219
214220 func canBeBreeded (asset1Id,asset2Id) = {
215221 let asset1Gen = split(value(assetInfo(asset1Id)).name, "")
216222 let asset2Gen = split(value(assetInfo(asset2Id)).name, "")
217223 if ((value(indexOf(Generations, asset1Gen[14])) >= MaxGeneration))
218224 then (("you can only breed ducks with generation " + Generations[MaxGeneration]) + " and lower")
219225 else if ((value(indexOf(Generations, asset2Gen[14])) >= MaxGeneration))
220226 then (("you can only breed ducks with generation " + Generations[MaxGeneration]) + " and lower")
221227 else "true"
222228 }
223229
224230
225231 func isSymbolA (accumulated,sym) = if ((sym == "A"))
226232 then (accumulated + 1)
227233 else (accumulated + 0)
228234
229235
230236 func isSymbolB (accumulated,sym) = if ((sym == "B"))
231237 then (accumulated + 1)
232238 else (accumulated + 0)
233239
234240
235241 func isSymbolC (accumulated,sym) = if ((sym == "C"))
236242 then (accumulated + 1)
237243 else (accumulated + 0)
238244
239245
240246 func isSymbolD (accumulated,sym) = if ((sym == "D"))
241247 then (accumulated + 1)
242248 else (accumulated + 0)
243249
244250
245251 func isSymbolE (accumulated,sym) = if ((sym == "E"))
246252 then (accumulated + 1)
247253 else (accumulated + 0)
248254
249255
250256 func isSymbolF (accumulated,sym) = if ((sym == "F"))
251257 then (accumulated + 1)
252258 else (accumulated + 0)
253259
254260
255261 func isSymbolG (accumulated,sym) = if ((sym == "G"))
256262 then (accumulated + 1)
257263 else (accumulated + 0)
258264
259265
260266 func isSymbolH (accumulated,sym) = if ((sym == "H"))
261267 then (accumulated + 1)
262268 else (accumulated + 0)
263269
264270
265271 func isSymbolI (accumulated,sym) = if ((sym == "I"))
266272 then (accumulated + 1)
267273 else (accumulated + 0)
268274
269275
270276 func isSymbolK (accumulated,sym) = if ((sym == "K"))
271277 then (accumulated + 1)
272278 else (accumulated + 0)
273279
274280
275281 func isSymbolL (accumulated,sym) = if ((sym == "L"))
276282 then (accumulated + 1)
277283 else (accumulated + 0)
278284
279285
280286 func isSymbolM (accumulated,sym) = if ((sym == "M"))
281287 then (accumulated + 1)
282288 else (accumulated + 0)
283289
284290
285291 func isSymbolN (accumulated,sym) = if ((sym == "N"))
286292 then (accumulated + 1)
287293 else (accumulated + 0)
288294
289295
290296 func isSymbolO (accumulated,sym) = if ((sym == "O"))
291297 then (accumulated + 1)
292298 else (accumulated + 0)
293299
294300
295301 func isSymbolP (accumulated,sym) = if ((sym == "P"))
296302 then (accumulated + 1)
297303 else (accumulated + 0)
298304
299305
300306 func isSymbolS (accumulated,sym) = if ((sym == "S"))
301307 then (accumulated + 1)
302308 else (accumulated + 0)
303309
304310
305311 func isSymbolT (accumulated,sym) = if ((sym == "T"))
306312 then (accumulated + 1)
307313 else (accumulated + 0)
308314
309315
310316 func isSymbolZ (accumulated,sym) = if ((sym == "Z"))
311317 then (accumulated + 1)
312318 else (accumulated + 0)
313319
314320
315321 func getAmountOrClear (amount) = if (contains(amount, "0"))
316322 then ""
317323 else amount
318324
319325
320326 func asString (value) = match value {
321327 case string: String =>
322328 string
323329 case _ =>
324330 throw("wrong type, expected: String")
325331 }
326332
327333
328334 func asInt (value) = match value {
329335 case int: Int =>
330336 int
331337 case _ =>
332338 throw("wrong type, expected: Int")
333339 }
334340
335341
336342 func asBoolean (value) = match value {
337343 case boolean: Boolean =>
338344 boolean
339345 case _ =>
340346 throw("BDA: wrong type, expected: Boolean")
341347 }
342348
343349
344350 func composeGenericData (duckGen,duckIdKey,assetId,asset) = {
345351 let farmGen = asString(invoke(this, "getGenFromName", [duckGen], nil))
346352 if ((farmGen == farmGen))
347353 then {
348354 let amount = tryGetInteger(getDuckStatsKey(duckGen))
349355 let quantity = tryGetInteger((("stats_" + farmGen) + "_quantity"))
350356 [StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), (amount + 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (quantity + 1)), asset]
351357 }
352358 else throw("Strict value is not equal to itself.")
353359 }
354360
355361
356362 func finishDuckHatch (txIdStr,owner,duckGenesString) = {
357363 let txId = fromBase58String(txIdStr)
358364 let processStatusKey = getProcessStatusKey(owner, txId)
359365 let duckIdKey = getDuckIdKey(owner, txId)
360366 let processTxStatus = getStringValue(this, processStatusKey)
361367 let finishHeightKey = getProcessFinishHeightKey(owner, txId)
362368 let processFinishHeight = getIntegerValue(this, finishHeightKey)
363369 if ((processTxStatus == HatchingFinished))
364370 then {
365371 let duckId = getStringValue(this, getDuckIdKey(owner, txId))
366372 throw(("The duck was breeded and claimed already, here is the folowing: " + duckId))
367373 }
368374 else if ((processFinishHeight > height))
369375 then throw((((("Breeding is not finished yet " + toString((processFinishHeight - height))) + " blocks remaining, it will take around ") + toString((processFinishHeight - height))) + " minutes"))
370376 else {
371377 let duckGen = if ((duckGenesString == ""))
372378 then asString(invoke(this, "generateDuck", [txId, processFinishHeight, 0, 0, "", 0], nil))
373379 else duckGenesString
374380 if ((duckGen == duckGen))
375381 then {
376382 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
377383 let asset = Issue(duckGen, description, 1, 0, false, unit, processFinishHeight)
378384 let assetId = calculateAssetId(asset)
379385 let parent1Id = tryGetString(getParentKey(txId, 1))
380386 let parent2Id = tryGetString(getParentKey(txId, 2))
381387 let parentsLocked = tryGetBoolean(("parentslocked_" + txIdStr))
382388 let parentsSend = if (parentsLocked)
383389 then [ScriptTransfer(addressFromStringValue(owner), 1, fromBase58String(parent1Id)), ScriptTransfer(addressFromStringValue(owner), 1, fromBase58String(parent2Id))]
384390 else nil
385391 ((composeGenericData(duckGen, duckIdKey, assetId, asset) ++ [StringEntry(processStatusKey, HatchingFinished), ScriptTransfer(addressFromStringValue(owner), 1, assetId), IntegerEntry((("asset_" + parent1Id) + "_children"), 1), IntegerEntry((("asset_" + parent2Id) + "_children"), 1)]) ++ parentsSend)
386392 }
387393 else throw("Strict value is not equal to itself.")
388394 }
389395 }
390396
391397
392398 func getBool (key) = match getBoolean(this, key) {
393399 case b: Boolean =>
394400 b
395401 case _ =>
396402 false
397403 }
398404
399405
400406 func isTestEnv () = getBool("TESTENV")
401407
402408
403409 let freeGenes = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "K", "L"]
404410
405411 func getRandomGenes (txId,h) = {
406412 let randomNumber = getRandomNumber(size(freeGenes), txId, h, 2)
407413 freeGenes[randomNumber]
408414 }
409415
410416
411417 func finishDuckHatchingItems (txIdStr,duckGenesString,payment1,payment2,owner) = {
412418 let instantPaid = tryGetBoolean(("instantPaid_" + txIdStr))
413419 if (instantPaid)
414420 then finishDuckHatch(txIdStr, owner, duckGenesString)
415421 else {
416422 let ducklingFinish = asString(invoke(getBabyDuckBreedingAddress(), "turnDucklingIntoDuck", nil, [payment1, payment2]))
417423 if ((ducklingFinish == ducklingFinish))
418424 then {
419425 let ducklingLinked = tryGetString(getDucklingKey(owner, fromBase58String(txIdStr)))
420426 if ((ducklingLinked != ducklingFinish))
421427 then throw("Please attach the correct duckling!")
422428 else finishDuckHatch(txIdStr, owner, duckGenesString)
423429 }
424430 else throw("Strict value is not equal to itself.")
425431 }
426432 }
427433
428434
429435 @Callable(i)
430436 func configureOracle (oracle) = if ((i.caller != this))
431437 then throw("admin only")
432438 else [StringEntry("static_oracleAddress", oracle)]
433439
434440
435441
436442 @Callable(i)
437443 func putChildren (oldAssetId,assetId) = if ((i.caller != getIncubatorAddress()))
438444 then throw("BPC: forbidden")
439445 else [IntegerEntry((("asset_" + assetId) + "_children"), tryGetInteger((("asset_" + oldAssetId) + "_children")))]
440446
441447
442448
443449 @Callable(i)
444450 func mintAndReplaceDuck (assetId) = if ((i.caller != addressFromStringValue("3PEgzEYXMbAHU4ZuAPrd6HanY4LW4Ee5J6F")))
445451 then throw("IMARD: stop")
446452 else {
447453 let duckIdKey = getStringValue(assetId)
448454 let details = value(assetInfo(fromBase58String(assetId)))
449455 let name = details.name
450456 let description = details.description
451457 let newAsset = Issue(name, description, 1, 0, false)
452458 let newAssetId = calculateAssetId(newAsset)
453459 [newAsset, StringEntry(duckIdKey, toBase58String(newAssetId)), StringEntry(toBase58String(newAssetId), duckIdKey), DeleteEntry(assetId), BooleanEntry((assetId + "_blacklisted"), true), StringEntry((assetId + "_replacedWith"), toBase58String(newAssetId)), IntegerEntry((("asset_" + toBase58String(newAssetId)) + "_children"), tryGetInteger((("asset_" + assetId) + "_children"))), ScriptTransfer(i.caller, 1, newAssetId)]
454460 }
455461
456462
457463
458464 @Callable(i)
459465 func generateDuck (txId,hatchingFinishHeight,geneFromParent,genePostion,specifiqueGene,specifiqueGenePosition) = {
460466 let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 11)
461467 let color = if ((colorRandom == 0))
462468 then "Y"
463469 else if ((colorRandom == 1))
464470 then "G"
465471 else if ((colorRandom == 2))
466472 then "B"
467473 else "R"
468474 let parent1Id = fromBase58String(tryGetString(getParentKey(txId, 1)))
469475 let parent2Id = fromBase58String(tryGetString(getParentKey(txId, 2)))
470476 let parent1Gen = split(value(assetInfo(parent1Id)).name, "")
471477 let parent2Gen = split(value(assetInfo(parent2Id)).name, "")
472478 let gen = ((((((((((("DUCK-" + getRandomGen(parent1Gen[5], parent2Gen[5], 0, txId, hatchingFinishHeight, geneFromParent, genePostion, specifiqueGene, specifiqueGenePosition)) + getRandomGen(parent1Gen[6], parent2Gen[6], 1, txId, hatchingFinishHeight, geneFromParent, genePostion, specifiqueGene, specifiqueGenePosition)) + getRandomGen(parent1Gen[7], parent2Gen[7], 2, txId, hatchingFinishHeight, geneFromParent, genePostion, specifiqueGene, specifiqueGenePosition)) + getRandomGen(parent1Gen[8], parent2Gen[8], 3, txId, hatchingFinishHeight, geneFromParent, genePostion, specifiqueGene, specifiqueGenePosition)) + getRandomGen(parent1Gen[9], parent2Gen[9], 4, txId, hatchingFinishHeight, geneFromParent, genePostion, specifiqueGene, specifiqueGenePosition)) + getRandomGen(parent1Gen[10], parent2Gen[10], 5, txId, hatchingFinishHeight, geneFromParent, genePostion, specifiqueGene, specifiqueGenePosition)) + getRandomGen(parent1Gen[11], parent2Gen[11], 6, txId, hatchingFinishHeight, geneFromParent, genePostion, specifiqueGene, specifiqueGenePosition)) + getRandomGen(parent1Gen[12], parent2Gen[12], 7, txId, hatchingFinishHeight, geneFromParent, genePostion, specifiqueGene, specifiqueGenePosition)) + "-") + determineGeneration(parent1Gen[14], parent2Gen[14])) + color)
473479 $Tuple2(nil, gen)
474480 }
475481
476482
477483
478484 @Callable(i)
479485 func getGenFromName (assetName) = {
480486 let genotype = split(dropRight(drop(assetName, 5), 3), "")
481487 let generation = split(assetName, "")[14]
482488 let gen = (((((((((((((((((((getAmountOrClear((toString({
483489 let $l = genotype
484490 let $s = size($l)
485491 let $acc0 = 0
486492 func $f0_1 ($a,$i) = if (($i >= $s))
487493 then $a
488494 else isSymbolA($a, $l[$i])
489495
490496 func $f0_2 ($a,$i) = if (($i >= $s))
491497 then $a
492498 else throw("List size exceeds 8")
493499
494500 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
495501 }) + "A")) + getAmountOrClear((toString({
496502 let $l = genotype
497503 let $s = size($l)
498504 let $acc0 = 0
499505 func $f1_1 ($a,$i) = if (($i >= $s))
500506 then $a
501507 else isSymbolB($a, $l[$i])
502508
503509 func $f1_2 ($a,$i) = if (($i >= $s))
504510 then $a
505511 else throw("List size exceeds 8")
506512
507513 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
508514 }) + "B"))) + getAmountOrClear((toString({
509515 let $l = genotype
510516 let $s = size($l)
511517 let $acc0 = 0
512518 func $f2_1 ($a,$i) = if (($i >= $s))
513519 then $a
514520 else isSymbolC($a, $l[$i])
515521
516522 func $f2_2 ($a,$i) = if (($i >= $s))
517523 then $a
518524 else throw("List size exceeds 8")
519525
520526 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
521527 }) + "C"))) + getAmountOrClear((toString({
522528 let $l = genotype
523529 let $s = size($l)
524530 let $acc0 = 0
525531 func $f3_1 ($a,$i) = if (($i >= $s))
526532 then $a
527533 else isSymbolD($a, $l[$i])
528534
529535 func $f3_2 ($a,$i) = if (($i >= $s))
530536 then $a
531537 else throw("List size exceeds 8")
532538
533539 $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
534540 }) + "D"))) + getAmountOrClear((toString({
535541 let $l = genotype
536542 let $s = size($l)
537543 let $acc0 = 0
538544 func $f4_1 ($a,$i) = if (($i >= $s))
539545 then $a
540546 else isSymbolE($a, $l[$i])
541547
542548 func $f4_2 ($a,$i) = if (($i >= $s))
543549 then $a
544550 else throw("List size exceeds 8")
545551
546552 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
547553 }) + "E"))) + getAmountOrClear((toString({
548554 let $l = genotype
549555 let $s = size($l)
550556 let $acc0 = 0
551557 func $f5_1 ($a,$i) = if (($i >= $s))
552558 then $a
553559 else isSymbolF($a, $l[$i])
554560
555561 func $f5_2 ($a,$i) = if (($i >= $s))
556562 then $a
557563 else throw("List size exceeds 8")
558564
559565 $f5_2($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
560566 }) + "F"))) + getAmountOrClear((toString({
561567 let $l = genotype
562568 let $s = size($l)
563569 let $acc0 = 0
564570 func $f6_1 ($a,$i) = if (($i >= $s))
565571 then $a
566572 else isSymbolG($a, $l[$i])
567573
568574 func $f6_2 ($a,$i) = if (($i >= $s))
569575 then $a
570576 else throw("List size exceeds 8")
571577
572578 $f6_2($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
573579 }) + "G"))) + getAmountOrClear((toString({
574580 let $l = genotype
575581 let $s = size($l)
576582 let $acc0 = 0
577583 func $f7_1 ($a,$i) = if (($i >= $s))
578584 then $a
579585 else isSymbolH($a, $l[$i])
580586
581587 func $f7_2 ($a,$i) = if (($i >= $s))
582588 then $a
583589 else throw("List size exceeds 8")
584590
585591 $f7_2($f7_1($f7_1($f7_1($f7_1($f7_1($f7_1($f7_1($f7_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
586592 }) + "H"))) + getAmountOrClear((toString({
587593 let $l = genotype
588594 let $s = size($l)
589595 let $acc0 = 0
590596 func $f8_1 ($a,$i) = if (($i >= $s))
591597 then $a
592598 else isSymbolI($a, $l[$i])
593599
594600 func $f8_2 ($a,$i) = if (($i >= $s))
595601 then $a
596602 else throw("List size exceeds 8")
597603
598604 $f8_2($f8_1($f8_1($f8_1($f8_1($f8_1($f8_1($f8_1($f8_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
599605 }) + "I"))) + getAmountOrClear((toString({
600606 let $l = genotype
601607 let $s = size($l)
602608 let $acc0 = 0
603609 func $f9_1 ($a,$i) = if (($i >= $s))
604610 then $a
605611 else isSymbolK($a, $l[$i])
606612
607613 func $f9_2 ($a,$i) = if (($i >= $s))
608614 then $a
609615 else throw("List size exceeds 8")
610616
611617 $f9_2($f9_1($f9_1($f9_1($f9_1($f9_1($f9_1($f9_1($f9_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
612618 }) + "K"))) + getAmountOrClear((toString({
613619 let $l = genotype
614620 let $s = size($l)
615621 let $acc0 = 0
616622 func $f10_1 ($a,$i) = if (($i >= $s))
617623 then $a
618624 else isSymbolL($a, $l[$i])
619625
620626 func $f10_2 ($a,$i) = if (($i >= $s))
621627 then $a
622628 else throw("List size exceeds 8")
623629
624630 $f10_2($f10_1($f10_1($f10_1($f10_1($f10_1($f10_1($f10_1($f10_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
625631 }) + "L"))) + getAmountOrClear((toString({
626632 let $l = genotype
627633 let $s = size($l)
628634 let $acc0 = 0
629635 func $f11_1 ($a,$i) = if (($i >= $s))
630636 then $a
631637 else isSymbolM($a, $l[$i])
632638
633639 func $f11_2 ($a,$i) = if (($i >= $s))
634640 then $a
635641 else throw("List size exceeds 8")
636642
637643 $f11_2($f11_1($f11_1($f11_1($f11_1($f11_1($f11_1($f11_1($f11_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
638644 }) + "M"))) + getAmountOrClear((toString({
639645 let $l = genotype
640646 let $s = size($l)
641647 let $acc0 = 0
642648 func $f12_1 ($a,$i) = if (($i >= $s))
643649 then $a
644650 else isSymbolN($a, $l[$i])
645651
646652 func $f12_2 ($a,$i) = if (($i >= $s))
647653 then $a
648654 else throw("List size exceeds 8")
649655
650656 $f12_2($f12_1($f12_1($f12_1($f12_1($f12_1($f12_1($f12_1($f12_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
651657 }) + "N"))) + getAmountOrClear((toString({
652658 let $l = genotype
653659 let $s = size($l)
654660 let $acc0 = 0
655661 func $f13_1 ($a,$i) = if (($i >= $s))
656662 then $a
657663 else isSymbolO($a, $l[$i])
658664
659665 func $f13_2 ($a,$i) = if (($i >= $s))
660666 then $a
661667 else throw("List size exceeds 8")
662668
663669 $f13_2($f13_1($f13_1($f13_1($f13_1($f13_1($f13_1($f13_1($f13_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
664670 }) + "O"))) + getAmountOrClear((toString({
665671 let $l = genotype
666672 let $s = size($l)
667673 let $acc0 = 0
668674 func $f14_1 ($a,$i) = if (($i >= $s))
669675 then $a
670676 else isSymbolP($a, $l[$i])
671677
672678 func $f14_2 ($a,$i) = if (($i >= $s))
673679 then $a
674680 else throw("List size exceeds 8")
675681
676682 $f14_2($f14_1($f14_1($f14_1($f14_1($f14_1($f14_1($f14_1($f14_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
677683 }) + "P"))) + getAmountOrClear((toString({
678684 let $l = genotype
679685 let $s = size($l)
680686 let $acc0 = 0
681687 func $f15_1 ($a,$i) = if (($i >= $s))
682688 then $a
683689 else isSymbolS($a, $l[$i])
684690
685691 func $f15_2 ($a,$i) = if (($i >= $s))
686692 then $a
687693 else throw("List size exceeds 8")
688694
689695 $f15_2($f15_1($f15_1($f15_1($f15_1($f15_1($f15_1($f15_1($f15_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
690696 }) + "S"))) + getAmountOrClear((toString({
691697 let $l = genotype
692698 let $s = size($l)
693699 let $acc0 = 0
694700 func $f16_1 ($a,$i) = if (($i >= $s))
695701 then $a
696702 else isSymbolT($a, $l[$i])
697703
698704 func $f16_2 ($a,$i) = if (($i >= $s))
699705 then $a
700706 else throw("List size exceeds 8")
701707
702708 $f16_2($f16_1($f16_1($f16_1($f16_1($f16_1($f16_1($f16_1($f16_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
703709 }) + "T"))) + getAmountOrClear((toString({
704710 let $l = genotype
705711 let $s = size($l)
706712 let $acc0 = 0
707713 func $f17_1 ($a,$i) = if (($i >= $s))
708714 then $a
709715 else isSymbolZ($a, $l[$i])
710716
711717 func $f17_2 ($a,$i) = if (($i >= $s))
712718 then $a
713719 else throw("List size exceeds 8")
714720
715721 $f17_2($f17_1($f17_1($f17_1($f17_1($f17_1($f17_1($f17_1($f17_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
716722 }) + "Z"))) + "-") + generation)
717723 $Tuple2(nil, gen)
718724 }
719725
720726
721727
722728 @Callable(i)
723729 func validateAndGetChildren (assetId) = if (!(checkAssetInIncubator(assetId)))
724730 then throw((("You need to attach a valid NFT-duck. " + assetId) + " is invalid!"))
725731 else {
726732 let children = tryGetInteger((("asset_" + assetId) + "_children"))
727733 $Tuple2(nil, children)
728734 }
729735
730736
731737
732738 @Callable(i)
733739 func createDuckSpecialGenes (address,duckGen,children) = if (if ((i.caller != getItemsAddress()))
734740 then (i.caller != this)
735741 else false)
736742 then throw("admin or items only")
737743 else {
738744 let txId = i.transactionId
739745 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
740746 let asset = Issue(duckGen, description, 1, 0, false)
741747 let assetId = calculateAssetId(asset)
742748 let duckIdKey = getDuckIdKey(toString(i.caller), txId)
743749 let farmGen = asString(invoke(this, "getGenFromName", [duckGen], nil))
744750 if ((farmGen == farmGen))
745751 then (composeGenericData(duckGen, duckIdKey, assetId, asset) ++ [IntegerEntry((("asset_" + toBase58String(assetId)) + "_children"), children), ScriptTransfer(Address(address), 1, assetId)])
746752 else throw("Strict value is not equal to itself.")
747753 }
748754
749755
750756
751757 @Callable(i)
752758 func startDuckBreeding (refererAddress) = {
753759 let firstPayment = value(i.payments[0])
754760 let secondPayment = value(i.payments[1])
755761 let validPayment = checkAdditionalPayment(i.payments[2])
756762 if ((validPayment == validPayment))
757763 then {
758764 let instantPaid = if (if ((size(i.payments) >= 4))
759765 then (i.payments[3].assetId == getSpiceAssetId())
760766 else false)
761767 then true
762768 else false
763769 if ((instantPaid == instantPaid))
764770 then {
765771 let firstAssetId = toBase58String(value(firstPayment.assetId))
766772 let secondAssetId = toBase58String(value(secondPayment.assetId))
767773 if (if ((firstPayment.amount != 1))
768774 then true
769775 else (secondPayment.amount != 1))
770776 then throw("NFT is not attached")
771777 else {
772778 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [getDucklingPrice()], nil))
773779 if ((amountPaidByCoupons == amountPaidByCoupons))
774780 then {
775781 let leftToPay = (getDucklingPrice() - amountPaidByCoupons)
776782 let payment = if ((leftToPay != 0))
777783 then {
778784 let thirdPayment = if (instantPaid)
779785 then value(i.payments[4])
780786 else value(i.payments[3])
781787 if ((thirdPayment.assetId != getEggAssetId()))
782788 then throw(("BSDB: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
783789 else if ((thirdPayment.amount != leftToPay))
784790 then throw(("BSDB: To breed you currently need the following amount of EGGlets: " + toString(leftToPay)))
785791 else {
786792 let refererRewardForPerch = fraction(leftToPay, 5, 100)
787793 let refCall = asBoolean(invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]))
788794 if ((refCall == refCall))
789795 then {
790796 let toBurn = if (refCall)
791797 then (leftToPay - refererRewardForPerch)
792798 else leftToPay
793799 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)])
794800 if ((burnCall == burnCall))
795801 then leftToPay
796802 else throw("Strict value is not equal to itself.")
797803 }
798804 else throw("Strict value is not equal to itself.")
799805 }
800806 }
801807 else 0
802808 if ((payment == payment))
803809 then {
804810 let children1 = asInt(invoke(this, "validateAndGetChildren", [firstAssetId], nil))
805811 if ((children1 == children1))
806812 then {
807813 let children2 = asInt(invoke(this, "validateAndGetChildren", [secondAssetId], nil))
808814 if ((children2 == children2))
809815 then if (if ((children1 > 0))
810816 then true
811817 else (children2 > 0))
812818 then throw("One duck can be used for breeding only once in its lifetime.")
813819 else {
814820 let breededStatus = canBeBreeded(fromBase58String(firstAssetId), fromBase58String(secondAssetId))
815821 if ((breededStatus != "true"))
816822 then throw(("These ducks cannot be breeded: " + breededStatus))
817823 else {
818824 let parent1Gen = split(value(assetInfo(value(firstPayment.assetId))).name, "")
819825 let parent2Gen = split(value(assetInfo(value(secondPayment.assetId))).name, "")
820826 let newG = determineGeneration(parent1Gen[14], parent2Gen[14])
821827 let spiceAmount = ((value(indexOf(Generations, newG)) + 1) * 1000000000)
822828 let result = if (instantPaid)
823829 then if (if ((i.payments[3].amount == spiceAmount))
824830 then (i.payments[3].assetId == getSpiceAssetId())
825831 else false)
826832 then {
827833 let topup = invoke(getTurtleStakingAddress(), "topUpReward", nil, [AttachedPayment(getSpiceAssetId(), (spiceAmount / 2))])
828834 if ((topup == topup))
829- then [BooleanEntry(("instantPaid_" + toBase58String(i.transactionId)), true)]
835+ then {
836+ let topup2 = invoke(getMutantFarmingAddress(), "topUpReward", ["SPICE", 0], [AttachedPayment(getSpiceAssetId(), (spiceAmount / 10))])
837+ if ((topup2 == topup2))
838+ then [BooleanEntry(("instantPaid_" + toBase58String(i.transactionId)), true)]
839+ else throw("Strict value is not equal to itself.")
840+ }
830841 else throw("Strict value is not equal to itself.")
831842 }
832843 else throw("Please attach the correct amount of spice!")
833844 else {
834845 let res = asString(invoke(getBabyDuckBreedingAddress(), "issueDuckling", [toString(i.caller), toBase58String(i.transactionId), (spiceAmount / 100000000), newG], nil))
835846 if ((res == res))
836847 then [StringEntry(getDucklingKey(toString(i.caller), i.transactionId), res), BooleanEntry(("instantPaid_" + toBase58String(i.transactionId)), false)]
837848 else throw("Strict value is not equal to itself.")
838849 }
839850 if ((result == result))
840851 then ((result ++ [StringEntry(getParentKey(i.transactionId, 1), firstAssetId), StringEntry(getParentKey(i.transactionId, 2), secondAssetId), StringEntry(getProcessStatusKey(toString(i.caller), i.transactionId), HatchingStarted), IntegerEntry(getProcessFinishHeightKey(toString(i.caller), i.transactionId), (height + delayForHatching)), BooleanEntry(("parentslocked_" + toBase58String(i.transactionId)), true)]) ++ validPayment)
841852 else throw("Strict value is not equal to itself.")
842853 }
843854 }
844855 else throw("Strict value is not equal to itself.")
845856 }
846857 else throw("Strict value is not equal to itself.")
847858 }
848859 else throw("Strict value is not equal to itself.")
849860 }
850861 else throw("Strict value is not equal to itself.")
851862 }
852863 }
853864 else throw("Strict value is not equal to itself.")
854865 }
855866 else throw("Strict value is not equal to itself.")
856867 }
857868
858869
859870
860871 @Callable(i)
861872 func finishDuckHatching (txIdStr) = {
862873 let owner = toString(i.caller)
863874 let instantPaid = tryGetBoolean(("instantPaid_" + txIdStr))
864875 let ducklingLinked = tryGetString(getDucklingKey(owner, fromBase58String(txIdStr)))
865876 if (instantPaid)
866877 then finishDuckHatch(txIdStr, owner, "")
867878 else {
868879 let ducklingFinish = asString(invoke(getBabyDuckBreedingAddress(), "turnDucklingIntoDuck", nil, i.payments))
869880 if ((ducklingFinish == ducklingFinish))
870881 then if ((ducklingLinked != ducklingFinish))
871882 then throw("Please attach the correct duckling!")
872883 else finishDuckHatch(txIdStr, owner, "")
873884 else throw("Strict value is not equal to itself.")
874885 }
875886 }
876887
877888
878889
879890 @Callable(i)
880891 func finishDuckHatchingAdmin (txIdStr,owner) = if ((i.caller != this))
881892 then throw("BFDH: Only admins can run this!")
882893 else finishDuckHatch(txIdStr, owner, "")
883894
884895
885896
886897 @Callable(i)
887898 func fixedGene (txIdStr,parentFixedGene,positionFixedGene) = if (if ((parentFixedGene != 1))
888899 then (parentFixedGene != 2)
889900 else false)
890901 then throw("FG: Parent fixed gene can be only 1 or 2")
891902 else {
892903 let firstPayment = value(i.payments[0])
893904 let firstAssetId = toBase58String(value(firstPayment.assetId))
894905 if ((firstPayment.amount != 1))
895906 then throw("NFT is not attached")
896907 else {
897908 let artefact = asString(invoke(getItemsAddress(), "checkArtefactDetails", [firstAssetId], nil))
898909 if ((artefact == artefact))
899910 then if ((artefact != "ART-FIXGENE"))
900911 then throw("You need to attach a ART-FIXGENE artefact")
901912 else {
902913 let txId = fromBase58String(txIdStr)
903914 let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
904915 let processFinishHeight = getIntegerValue(this, finishHeightKey)
905916 let duckGenesString = asString(invoke(this, "generateDuck", [txId, processFinishHeight, parentFixedGene, positionFixedGene, "", 0], nil))
906917 if ((duckGenesString == duckGenesString))
907918 then {
908919 let strictFinish = finishDuckHatchingItems(txIdStr, duckGenesString, i.payments[1], i.payments[2], toString(i.originCaller))
909920 ([Burn(value(firstPayment.assetId), 1)] ++ strictFinish)
910921 }
911922 else throw("Strict value is not equal to itself.")
912923 }
913924 else throw("Strict value is not equal to itself.")
914925 }
915926 }
916927
917928
918929
919930 @Callable(i)
920931 func freeGene (txIdStr) = {
921932 let firstPayment = value(i.payments[0])
922933 let firstAssetId = toBase58String(value(firstPayment.assetId))
923934 if ((firstPayment.amount != 1))
924935 then throw("NFT is not attached")
925936 else {
926937 let artefact = asString(invoke(getItemsAddress(), "checkArtefactDetails", [firstAssetId], nil))
927938 if ((artefact == artefact))
928939 then if ((artefact != "ART-FREEGENE"))
929940 then throw("You need to attach a ART-FREEGENE artefact")
930941 else {
931942 let txId = fromBase58String(txIdStr)
932943 let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
933944 let processFinishHeight = getIntegerValue(this, finishHeightKey)
934945 let selectedGene = getRandomGenes(txId, processFinishHeight)
935946 let randomPosition = getRandomNumber(8, txId, processFinishHeight, 3)
936947 let duckGenesString = asString(invoke(this, "generateDuck", [txId, processFinishHeight, 0, 0, selectedGene, randomPosition], nil))
937948 if ((duckGenesString == duckGenesString))
938949 then {
939950 let strictFinish = finishDuckHatchingItems(txIdStr, duckGenesString, i.payments[1], i.payments[2], toString(i.originCaller))
940951 ([Burn(value(firstPayment.assetId), 1)] ++ strictFinish)
941952 }
942953 else throw("Strict value is not equal to itself.")
943954 }
944955 else throw("Strict value is not equal to itself.")
945956 }
946957 }
947958
948959
949960
950961 @Callable(i)
951962 func reduceRarity (assetId,farmGen) = {
952963 let asset = fromBase58String(assetId)
953964 if (if (if ((i.caller != getItemsAddress()))
954965 then (i.caller != getRebirthAddress())
955966 else false)
956967 then (i.caller != this)
957968 else false)
958969 then throw("admin, items or rebirth only")
959970 else {
960971 let duckGen = value(assetInfo(asset)).name
961972 [IntegerEntry(getDuckStatsKey(duckGen), (tryGetInteger(getDuckStatsKey(duckGen)) - 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) - 1))]
962973 }
963974 }
964975
965976
966977 @Verifier(tx)
967978 func verify () = if (isTestEnv())
968979 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
969980 else {
970981 let firstUser = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4'
971982 let secondUser = base58'7DsP2WaMLocbHuUxux7pbXRjTrrZ1TFQPsi5QumS3gr8'
972983 let thirdUser = base58'BpFWP3p3JgYrrP45xfrKzeMcWMEXoinj4FVPPkUiA8D3'
973984 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
974985 then 1
975986 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
976987 then 1
977988 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
978989 then 1
979990 else 0
980991 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
981992 then 1
982993 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
983994 then 1
984995 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
985996 then 1
986997 else 0
987998 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
988999 then 1
9891000 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
9901001 then 1
9911002 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
9921003 then 1
9931004 else 0
9941005 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
9951006 match tx {
9961007 case _ =>
9971008 (signaturesCount >= 2)
9981009 }
9991010 }
10001011

github/deemru/w8io/169f3d6 
173.51 ms